/** * Interrupt service routine. * * @returns Whether the interrupt was from VMMDev. * @param pvState Opaque pointer to the device state. */ static int VBoxGuestFreeBSDISR(void *pvState) { LogFlow((DEVICE_NAME ":VBoxGuestFreeBSDISR pvState=%p\n", pvState)); bool fOurIRQ = VbgdCommonISR(&g_DevExt); return fOurIRQ ? 0 : 1; }
/** * Interrupt Service Routine for VMMDev. * * @param Arg Private data (unused, will be NULL). * @returns DDI_INTR_CLAIMED if it's our interrupt, DDI_INTR_UNCLAIMED if it isn't. */ static uint_t VBoxGuestSolarisISR(caddr_t Arg) { LogFlow((DEVICE_NAME "::ISR:\n")); mutex_enter(&g_IrqMtx); bool fOurIRQ = VbgdCommonISR(&g_DevExt); mutex_exit(&g_IrqMtx); return fOurIRQ ? DDI_INTR_CLAIMED : DDI_INTR_UNCLAIMED; }
/** * Callback triggered when interrupt occurs. */ static bool directInterruptHandler(OSObject *pOwner, IOFilterInterruptEventSource *pSrc) { if (!pSrc) return false; bool fTaken = VbgdCommonISR(&g_DevExt); if (!fTaken) /** @todo r=bird: This looks bogus as we might actually be sharing interrupts with someone. */ PDEBUG("VbgdCommonISR error\n"); return fTaken; }
static irqreturn_t vboxguestLinuxISR(int iIrrq, void *pvDevId, struct pt_regs *pRegs) #endif { bool fTaken = VbgdCommonISR(&g_DevExt); return IRQ_RETVAL(fTaken); }