libmetal
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Functions
Interrupt Handling Interfaces

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...
 

Detailed Description

Macro Definition Documentation

◆ METAL_IRQ_ANY

#define METAL_IRQ_ANY   (-1)

IRQ ANY ID

◆ METAL_IRQ_CONTROLLER_DECLARE

#define METAL_IRQ_CONTROLLER_DECLARE (   _irq_controller,
  _irq_base,
  _irq_num,
  _arg,
  _irq_set_enable,
  _irq_register,
  _irqs 
)
Value:
struct metal_irq_controller _irq_controller = { \
.irq_base = _irq_base, \
.irq_num = _irq_num, \
.arg = _arg, \
.irq_set_enable = _irq_set_enable, \
.irq_register = _irq_register, \
.irqs = _irqs,\
}
Definition: irq_controller.h:66
int irq_base
Definition: irq_controller.h:67

◆ METAL_IRQ_DISABLE

#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.

◆ METAL_IRQ_ENABLE

#define METAL_IRQ_ENABLE   1U

◆ METAL_IRQ_HANDLED

#define METAL_IRQ_HANDLED   1

◆ METAL_IRQ_NOT_HANDLED

#define METAL_IRQ_NOT_HANDLED   0

IRQ handled status

Typedef Documentation

◆ metal_cntr_irq_register

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

Parameters
[in]irq_cntrpointer to interrupt controller
[in]irqinterrupt id
[in]hdinterrupt handler
[in]argargument which will be passed to the interrupt handler
Returns
0 for success, negative value for failure

◆ metal_irq_handler

typedef int(* metal_irq_handler) (int irq, void *arg)

type of interrupt handler

Parameters
[in]irqinterrupt id
[in]argargument to pass to the handler
Returns
irq handled status

◆ metal_irq_set_enable

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

Parameters
[in]irq_cntrpointer to interrupt controller
[in]irqinterrupt id
[in]enableIRQ state

Function Documentation

◆ metal_irq_disable()

void metal_irq_disable ( unsigned int  vector)

metal_irq_disable

Disables the given interrupt

Parameters
vector- interrupt vector number

◆ metal_irq_enable()

void metal_irq_enable ( unsigned int  vector)

metal_irq_enable

Enables the given interrupt

Parameters
vector- interrupt vector number

◆ metal_irq_handle()

static int metal_irq_handle ( struct metal_irq irq_data,
int  irq 
)
inlinestatic

metal_irq_handle

Call registered IRQ handler

Parameters
[in]irq_datametal IRQ structure
[in]irqIRQ id which will be passed to handler
Returns
IRQ handler status

◆ metal_irq_register()

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

Parameters
[in]irqinterrupt id
[in]irq_handlerinterrupt handler
[in]argarg is the argument pointing to the data which will be passed to the interrupt handler.
Returns
0 for success, non-zero on failure

◆ metal_irq_register_controller()

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.

Parameters
[in]cntrInterrupt controller to register
Returns
0 on success, or negative value for failure.

◆ metal_irq_restore_enable()

void metal_irq_restore_enable ( unsigned int  flags)

restore interrupts to their previous state

Parameters
[in]flagsprevious interrupts state

◆ metal_irq_save_disable()

unsigned int metal_irq_save_disable ( void  )

disable interrupts

Returns
interrupts state

◆ metal_irq_unregister()

static void metal_irq_unregister ( int  irq)
inlinestatic

Unregister interrupt handler for interrupt.

Parameters
[in]irqinterrupt id