static void xics_eoi_direct(unsigned int virq) { unsigned int irq = (unsigned int)irq_map[virq].hwirq; iosync(); direct_xirr_info_set((pop_cppr() << 24) | irq); }
static unsigned int xics_get_irq_direct(void) { unsigned int xirr = direct_xirr_info_get(); unsigned int vec = xics_xirr_vector(xirr); unsigned int irq; if (vec == XICS_IRQ_SPURIOUS) return NO_IRQ; irq = irq_radix_revmap_lookup(xics_host, vec); if (likely(irq != NO_IRQ)) return irq; /* We don't have a linux mapping, so have rtas mask it. */ xics_mask_unknown_vec(vec); /* We might learn about it later, so EOI it */ direct_xirr_info_set(xirr); return NO_IRQ; }