5 #ifndef __QM_INTERRUPT_H__
6 #define __QM_INTERRUPT_H__
9 #include "qm_soc_regs.h"
12 #include "qm_sensor_regs.h"
19 #define QM_IRQ_TO_VECTOR(irq) (irq + 36)
22 #define QM_IRQ_TO_VECTOR(irq) (irq + 32)
71 typedef void (*
qm_isr_t)(
struct interrupt_frame *frame);
123 void _qm_register_isr(uint32_t vector,
qm_isr_t isr);
125 void _qm_irq_setup(uint32_t irq);
135 #define QM_IRQ_REQUEST(irq, isr) \
137 _qm_register_isr(irq##_VECTOR, isr); \
138 _qm_irq_setup(irq); \
141 #define QM_IRQ_REQUEST(irq, isr) \
143 qm_int_vector_request(irq##_VECTOR, isr); \
145 _qm_irq_setup(irq); \
165 _qm_register_isr(vector, isr);
175 #define qm_int_vector_request(vector, isr) \
177 __asm__ __volatile__("push $1f\n\t" \
180 "add $8, %%esp\n\t" \
187 " add $4, %%esp\n\t" \
190 "2:\n\t" ::"g"(vector), \
191 "i"(_qm_register_isr), "i"(isr) \
192 : "%eax", "%ecx", "%edx"); \
void qm_irq_unlock(unsigned int key)
Restore previous interrupt state on the CPU saved via qm_irq_lock().
void qm_irq_unmask(uint32_t irq)
Unmask a given interrupt line.
unsigned int qm_irq_lock(void)
Save interrupt state and disable all interrupts on the CPU.
void(* qm_isr_t)(struct interrupt_frame *frame)
Interrupt service routine type.
void qm_irq_disable(void)
Unconditionally disable interrupt delivery on the CPU.
void qm_irq_mask(uint32_t irq)
Mask a given interrupt line.
void qm_irq_enable(void)
Unconditionally enable interrupt delivery on the CPU.
void qm_int_vector_request(uint32_t vector, qm_isr_t isr)
Request an interrupt vector and register Interrupt Service Routine to it.