bond/include/kernel/hal/intr.h

61 lines
1.3 KiB
C

#ifndef KERNEL_HAL_INTR_H
#define KERNEL_HAL_INTR_H
#include "type.h"
/**
* IRQL Definitions
*/
typedef uint32 k_irql;
#define IRQL_DISABLED_LEVEL (1ul << 3)
#define IRQL_DPC_LEVEL (1ul << 2)
#define IRQL_APC_LEVEL (1ul << 1)
#define IRQL_PASSIVE_LEVEL (1ul << 0)
k_irql SXAPI hal_set_irql(k_irql irql);
k_irql SXAPI hal_get_irql(void);
uint32 SXAPI hal_get_core_id(void);
void SXAPI hal_issue_interrupt(uint32 target_core, uint32 vector);
/**
* Interrupt Handler Registration
*/
struct intr_info
{
uint32 timer_intr_vec;
uint32 apc_intr_vec;
uint32 dpc_intr_vec;
};
typedef void (SXAPI *intr_handler)(void *context, void *intr_stack);
void SXAPI hal_register_interrupt_handler(uint32 coreid, uint32 index, intr_handler handler, void *context);
void SXAPI hal_deregister_interrupt_handler(uint32 coreid, uint32 index);
/**
* Exception Handler Registration
*/
typedef enum
{
unrecoverable_exc,
div_by_zero_exc,
general_protection_exc,
invalid_op_exc,
page_fault_exc,
unsupported_exc,
debug_exc
} exc_type_t;
typedef void (SXAPI *exc_handler)(uint64 exc_addr, uint64 exc_stack, uint64 error_code);
void SXAPI hal_register_exception_handler(uint32 coreid, uint32 index, exc_handler handler);
void SXAPI hal_deregister_exception_handler(uint32 coreid, uint32 index);
#endif