33 #include "interrupt.h"
35 #include "shared-isr.h"
38 extern shared_isr_client_t _sdata_shared_isr, _edata_shared_isr;
43 shared_isr_client_t *client;
44 for(client = &_sdata_shared_isr; client < &_edata_shared_isr; client++) {
45 if(client->handler()) {
59 shared_isr_client_t *client = &_sdata_shared_isr;
60 shared_isr_client_t *consistency_check_client;
63 void shared_isr_stub(
void);
64 __asm__ __volatile__ (
65 ISR_STUB(
"shared_isr_stub", 0,
"shared_handler", 0)
69 while(client < &_edata_shared_isr) {
70 consistency_check_client = &_sdata_shared_isr;
74 while(consistency_check_client < client) {
75 if((client->irq == consistency_check_client->irq) ||
76 (client->pin == consistency_check_client->pin) ||
77 (client->pirq == consistency_check_client->pirq)) {
85 consistency_check_client++;
90 assert((client->irq == consistency_check_client->irq) &&
91 (client->agent == consistency_check_client->agent) &&
92 (client->pin == consistency_check_client->pin) &&
93 (client->pirq == consistency_check_client->pirq));
95 idt_set_intr_gate_desc(PIC_INT(client->irq), (uint32_t)shared_isr_stub,
96 GDT_SEL_CODE_INT, PRIV_LVL_INT);
98 pci_irq_agent_set_pirq(client->agent, client->pin, client->pirq);
100 pci_pirq_set_irq(client->pirq, client->irq, 1);
102 pic_unmask_irq(client->irq);
#define __attribute__(nothing)
Define attribute to nothing since it isn't handled by IAR.