libmetal
|
Data Structures | |
struct | metal_irq |
struct | metal_irq_controller |
Macros | |
#define | METAL_IRQ_NOT_HANDLED 0 |
#define | METAL_IRQ_HANDLED 1 |
#define | METAL_IRQ_ANY (-1) |
#define | METAL_IRQ_DISABLE 0U |
#define | METAL_IRQ_ENABLE 1U |
#define | METAL_IRQ_CONTROLLER_DECLARE(_irq_controller, _irq_base, _irq_num, _arg, _irq_set_enable, _irq_register, _irqs) |
Typedefs | |
typedef int(* | metal_irq_handler) (int irq, void *arg) |
type of interrupt handler More... | |
typedef void(* | metal_irq_set_enable) (struct metal_irq_controller *irq_cntr, int irq, unsigned int enable) |
type of interrupt controller to set irq enable More... | |
typedef int(* | metal_cntr_irq_register) (struct metal_irq_controller *irq_cntr, int irq, metal_irq_handler hd, void *arg) |
type of controller specific registering interrupt function More... | |
Functions | |
int | metal_irq_register (int irq, metal_irq_handler irq_handler, void *arg) |
Register interrupt handler for interrupt. Only allow single interrupt handler for a interrupt. More... | |
static void | metal_irq_unregister (int irq) |
Unregister interrupt handler for interrupt. More... | |
unsigned int | metal_irq_save_disable (void) |
disable interrupts More... | |
void | metal_irq_restore_enable (unsigned int flags) |
restore interrupts to their previous state More... | |
void | metal_irq_enable (unsigned int vector) |
metal_irq_enable More... | |
void | metal_irq_disable (unsigned int vector) |
metal_irq_disable More... | |
int | metal_irq_register_controller (struct metal_irq_controller *cntr) |
metal_irq_register_controller More... | |
static int | metal_irq_handle (struct metal_irq *irq_data, int irq) |
metal_irq_handle More... | |
#define METAL_IRQ_ANY (-1) |
IRQ ANY ID
#define METAL_IRQ_CONTROLLER_DECLARE | ( | _irq_controller, | |
_irq_base, | |||
_irq_num, | |||
_arg, | |||
_irq_set_enable, | |||
_irq_register, | |||
_irqs | |||
) |
#define METAL_IRQ_DISABLE 0U |
IRQ state macro which will be passed to metal irq set state function to indicate which state the caller want the IRQ to change to.
#define METAL_IRQ_ENABLE 1U |
#define METAL_IRQ_HANDLED 1 |
#define METAL_IRQ_NOT_HANDLED 0 |
IRQ handled status
typedef int(* metal_cntr_irq_register) (struct metal_irq_controller *irq_cntr, int irq, metal_irq_handler hd, void *arg) |
type of controller specific registering interrupt function
[in] | irq_cntr | pointer to interrupt controller |
[in] | irq | interrupt id |
[in] | hd | interrupt handler |
[in] | arg | argument which will be passed to the interrupt handler |
typedef int(* metal_irq_handler) (int irq, void *arg) |
type of interrupt handler
[in] | irq | interrupt id |
[in] | arg | argument to pass to the handler |
typedef void(* metal_irq_set_enable) (struct metal_irq_controller *irq_cntr, int irq, unsigned int enable) |
type of interrupt controller to set irq enable
[in] | irq_cntr | pointer to interrupt controller |
[in] | irq | interrupt id |
[in] | enable | IRQ state |
void metal_irq_disable | ( | unsigned int | vector | ) |
metal_irq_disable
Disables the given interrupt
vector | - interrupt vector number |
void metal_irq_enable | ( | unsigned int | vector | ) |
metal_irq_enable
Enables the given interrupt
vector | - interrupt vector number |
|
inlinestatic |
metal_irq_handle
Call registered IRQ handler
[in] | irq_data | metal IRQ structure |
[in] | irq | IRQ id which will be passed to handler |
int metal_irq_register | ( | int | irq, |
metal_irq_handler | irq_handler, | ||
void * | arg | ||
) |
Register interrupt handler for interrupt. Only allow single interrupt handler for a interrupt.
If irq_handler is NULL, it will unregister interrupt handler from interrupt
[in] | irq | interrupt id |
[in] | irq_handler | interrupt handler |
[in] | arg | arg is the argument pointing to the data which will be passed to the interrupt handler. |
int metal_irq_register_controller | ( | struct metal_irq_controller * | cntr | ) |
metal_irq_register_controller
Register IRQ controller This function will allocate IRQ ids if it was not predefined in the irq controller. There is no locking in the function, it is not supposed to be called by multiple threads.
[in] | cntr | Interrupt controller to register |
void metal_irq_restore_enable | ( | unsigned int | flags | ) |
restore interrupts to their previous state
[in] | flags | previous interrupts state |
unsigned int metal_irq_save_disable | ( | void | ) |
disable interrupts
|
inlinestatic |
Unregister interrupt handler for interrupt.
[in] | irq | interrupt id |