/*
 * Copyright (c) 2026, Chloe M.
 * Provided under the BSD-3 clause.
 *
 * Description:  Fucks and knots the kernel
 * Author:       Chloe M.
 */

#ifndef _KE_KNOT_H_
#define _KE_KNOT_H_ 1

#include <stdef.h>

/*
 * Valid knot reasons
 *
 * @KNOT_MISC:              Misc. reason
 * @KNOT_UNBOUND_RSRC:      Unbounded resource
 * @KNOT_BAD_BOOT_PROTO:    Bad boot protocol
 * @KNOT_OOM:               Fatal out of memory
 * @KNOT_EXCEPTION:         Fatal exception
 * @KNOT_IRQL_NOT_LTE:      IRQL not less than or equal
 * @KNOT_IRQL_NOT_GTE:      IRQL not greater than or equal
 * @KNOT_BAD_CHECKSUM:      Fatal bad checksum value
 * @KNOT_MISSING_HARDWARE:  Missing hardware
 */
typedef enum {
    KNOT_MISC,
    KNOT_UNBOUND_RSRC,
    KNOT_BAD_BOOT_PROTO,
    KNOT_OOM,
    KNOT_EXCEPTION,
    KNOT_IRQL_NOT_LTE,
    KNOT_IRQL_NOT_GTE,
    KNOT_BAD_CHECKSUM,
    KNOT_MISSING_HARDWARE
} KNOT_REASON;

/*
 * Fuck and knot the kernel if it is misbehaving
 *
 * @Reason: Reason of knotting
 * @Fmt:    Format string
 * @<...>:  Variadic arguments
 */
VOID KeKnot(KNOT_REASON Reason, const char *Fmt, ...);

#endif  /* !_KE_KNOT_H_ */
