/** * Update IRQ status of the device. * * @returns nothing. * @param pThis The OXPCIe958 device instance. */ static void ox958IrqUpdate(PDEVOX958 pThis) { uint32_t u32IrqSts = ASMAtomicReadU32(&pThis->u32RegIrqStsGlob); uint32_t u32IrqEn = ASMAtomicReadU32(&pThis->u32RegIrqEnGlob); if (u32IrqSts & u32IrqEn) PDMDevHlpPCISetIrq(pThis->CTX_SUFF(pDevIns), 0, PDM_IRQ_LEVEL_HIGH); else PDMDevHlpPCISetIrq(pThis->CTX_SUFF(pDevIns), 0, PDM_IRQ_LEVEL_LOW); }
/** * Raise interrupt. * * @param pState The device state structure. * @param rcBusy Status code to return when the critical section is busy. * @param u8IntCause Interrupt cause bit mask to set in PCI ISR port. */ int vpciRaiseInterrupt(VPCISTATE *pState, int rcBusy, uint8_t u8IntCause) { // int rc = vpciCsEnter(pState, rcBusy); // if (RT_UNLIKELY(rc != VINF_SUCCESS)) // return rc; STAM_COUNTER_INC(&pState->StatIntsRaised); LogFlow(("%s vpciRaiseInterrupt: u8IntCause=%x\n", INSTANCE(pState), u8IntCause)); pState->uISR |= u8IntCause; PDMDevHlpPCISetIrq(pState->CTX_SUFF(pDevIns), 0, 1); // vpciCsLeave(pState); return VINF_SUCCESS; }
/** * Lower interrupt. * * @param pState The device state structure. */ PDMBOTHCBDECL(void) vpciLowerInterrupt(VPCISTATE *pState) { LogFlow(("%s vpciLowerInterrupt\n", INSTANCE(pState))); PDMDevHlpPCISetIrq(pState->CTX_SUFF(pDevIns), 0, 0); }