/** * Interrupt service routine. * * @returns Whether the interrupt was from VMMDev. * @param pvState Opaque pointer to the device state. */ static int vgdrvFreeBSDISR(void *pvState) { LogFlow(("vgdrvFreeBSDISR: pvState=%p\n", pvState)); bool fOurIRQ = VGDrvCommonISR(&g_DevExt); return fOurIRQ ? 0 : 1; }
/** * Callback triggered when interrupt occurs. */ static bool vgdrvDarwinDirectIrqHandler(OSObject *pOwner, IOFilterInterruptEventSource *pSrc) { if (!pSrc) return false; bool fTaken = VGDrvCommonISR(&g_DevExt); if (!fTaken) /** @todo r=bird: This looks bogus as we might actually be sharing interrupts with someone. */ Log(("VGDrvCommonISR error\n")); return fTaken; }
/** * 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 vgdrvSolarisISR(caddr_t Arg) { LogFlow(("vgdrvSolarisISR:\n")); /* The mutex is required to protect against parallel executions (if possible?) and also the mouse notify registeration race between VGDrvNativeSetMouseNotifyCallback() and VGDrvCommonISR(). */ mutex_enter(&g_IrqMtx); bool fOurIRQ = VGDrvCommonISR(&g_DevExt); mutex_exit(&g_IrqMtx); return fOurIRQ ? DDI_INTR_CLAIMED : DDI_INTR_UNCLAIMED; }
static irqreturn_t vgdrvLinuxISR(int iIrq, void *pvDevId, struct pt_regs *pRegs) #endif { bool fTaken = VGDrvCommonISR(&g_DevExt); return IRQ_RETVAL(fTaken); }