bond/x64/src/common/inc/kernel/s_intr.h

55 lines
1.4 KiB
C
Raw Normal View History

#ifndef _S_INTR_H_
#define _S_INTR_H_
#include "g_abi.h"
typedef struct
{
uint32_t timer_intr_vec;
uint32_t apc_intr_vec;
uint32_t dpc_intr_vec;
} k_hal_intr_info_t;
2016-06-25 01:47:29 +00:00
typedef enum
{
unrecoverable_exc,
div_by_zero_exc,
general_protection_exc,
invalid_op_exc,
page_fault_exc,
unsupported_exc,
debug_exc
} k_exc_type_t;
// IRQL APIs
typedef uint64_t k_irql_t;
#define K_IRQL_DISABLED_LEVEL 3
#define K_IRQL_DPC_LEVEL 2
#define K_IRQL_APC_LEVEL 1
#define K_IRQL_PASSIVE_LEVEL 0
2016-06-25 01:47:29 +00:00
extern KAPI k_irql_t k_set_irql(k_irql_t irql);
2016-06-25 01:47:29 +00:00
extern KAPI k_irql_t k_get_irql();
2016-07-01 09:15:07 +00:00
extern KAPI void k_set_timer_timeout(uint64_t timeout);
// Interrupt handler registration
// context is a parameter passed by the kernel. HAL must pass back.
// intr_stack is a parameter passed by the HAL. Used by some HAL interrupt context functions.
2016-06-25 01:47:29 +00:00
typedef void ( KAPI *k_intr_handler_t)(void *context, void *intr_stack);
extern void KAPI k_register_intr_handler(uint32_t index, k_intr_handler_t handler);
2016-06-25 01:47:29 +00:00
extern k_intr_handler_t KAPI k_deregister_intr_handler(uint32_t index);
// Exception handler registration
2016-06-25 01:47:29 +00:00
typedef void ( KAPI *k_exc_handler_t)(uint64_t exc_addr, uint64_t exc_stack, uint64_t error_code);
extern void KAPI k_register_exc_handler(k_exc_type_t type, k_exc_handler_t handler);
extern k_exc_handler_t KAPI k_deregister_exc_handler(uint64_t index);
extern void KAPI k_halt_cpu();
#endif