void isr(int);
int intr_init(void);
-int bmk_isr_init(int (*)(void *), void *, int);
+int bmk_isr_rumpkernel(int (*)(void *), void *, int, int);
#define BMK_MULTIBOOT_CMDLINE_SIZE 4096
extern char multiboot_cmdline[];
struct intrhand {
int (*ih_fun)(void *);
void *ih_arg;
+ int ih_flags;
SLIST_ENTRY(intrhand) ih_entries;
};
}
int
-bmk_isr_init(int (*func)(void *), void *arg, int intr)
+bmk_isr_rumpkernel(int (*func)(void *), void *arg, int intr, int flags)
{
struct intrhand *ih;
int error;
if (intr > sizeof(isr_todo)*8 || intr > BMK_MAXINTR)
return BMK_EGENERIC;
+ if (flags != 0)
+ bmk_platform_halt("bmk_isr_rumpkernel: invalid flags");
+
ih = bmk_xmalloc_bmk(sizeof(*ih));
if (!ih)
return BMK_ENOMEM;
}
ih->ih_fun = func;
ih->ih_arg = arg;
+ ih->ih_flags = flags;
SLIST_INSERT_HEAD(&isr_ih[intr % BMK_INTRLEVS], ih, ih_entries);
if ((unsigned)intr < isr_lowest)
isr_lowest = intr;
rumpcomp_pci_irq_establish(unsigned cookie, int (*handler)(void *), void *data)
{
- if (bmk_isr_init(handler, data, intrs[cookie]) == 0)
+ if (bmk_isr_rumpkernel(handler, data, intrs[cookie], 0) == 0)
return &intrs[cookie];
else
return NULL;