25IRX_ID(
"sbusintr", 1, 1);
28 sbus_intr_handler_t handler;
30} sbus_handler_table[32];
34int _start(
int argc,
char *argv[])
39 if (RegisterLibraryEntries(&_exp_sbusintr) != 0)
40 return MODULE_NO_RESIDENT_END;
42 return MODULE_RESIDENT_END;
45static int sbus_dispatch(
void *arg)
51 if (!(msflag = sceSifGetMSFlag()))
54 for (irq = 0; msflag != 0 && irq < 32; irq++, msflag >>= 1) {
59 sceSifSetMSFlag(1 << irq);
61 if (sbus_handler_table[irq].handler)
62 sbus_handler_table[irq].handler(irq,
63 sbus_handler_table[irq].arg);
69int sbus_intr_handler_add(u32 irq, sbus_intr_handler_t handler,
void *arg)
71 int res = irq, state = 0;
81 if (sbus_handler_table[irq].handler) {
86 sbus_handler_table[irq].handler = handler;
87 sbus_handler_table[irq].arg = arg;
93int sbus_intr_handler_del(u32 irq)
98 sbus_handler_table[irq].handler = NULL;
99 sbus_handler_table[irq].arg = NULL;
104void sbus_intr_main_interrupt(u32 irq)
108 if (irq > 31 || (sceSifGetSMFlag() & flag))
111 sceSifSetSMFlag(flag);
115static int initialized = 0;
123 int i, state, res = 0;
130 for (i = 0; i < 32; ++i) {
131 sbus_handler_table[i].handler = NULL;
132 sbus_handler_table[i].arg = NULL;
int CpuResumeIntr(int state)
int RegisterIntrHandler(int irq, int mode, int(*handler)(void *), void *arg)
int ReleaseIntrHandler(int irq)
int DisableIntr(int irq, int *res)
int CpuSuspendIntr(int *state)