static void iseries_end_IRQ(struct irq_data *d) { unsigned int rirq = (unsigned int)irqd_to_hwirq(d); HvCallPci_eoi(REAL_IRQ_TO_BUS(rirq), REAL_IRQ_TO_SUBBUS(rirq), (REAL_IRQ_TO_IDSEL(rirq) << 4) + REAL_IRQ_TO_FUNC(rirq)); }
static void iseries_end_IRQ(unsigned int irq) { unsigned int rirq = (unsigned int)irq_map[irq].hwirq; HvCallPci_eoi(REAL_IRQ_TO_BUS(rirq), REAL_IRQ_TO_SUBBUS(rirq), (REAL_IRQ_TO_IDSEL(rirq) << 4) + REAL_IRQ_TO_FUNC(rirq)); }
static void int_received(struct pci_event *event, struct pt_regs *regs) { int irq; switch (event->event.xSubtype) { case pe_slot_interrupt: irq = event->event.xCorrelationToken; if (irq < NR_IRQS) { spin_lock(&pending_irqs_lock); pending_irqs[irq]++; num_pending_irqs++; spin_unlock(&pending_irqs_lock); } else { printk(KERN_WARNING "int_received: bad irq number %d\n", irq); HvCallPci_eoi(event->data.slot.bus_number, event->data.slot.sub_bus_number, event->data.slot.dev_id); } break; /* Ignore error recovery events for now */ case pe_bus_created: printk(KERN_INFO "int_received: system bus %d created\n", event->data.bus.bus_number); break; case pe_bus_error: case pe_bus_failed: printk(KERN_INFO "int_received: system bus %d failed\n", event->data.bus.bus_number); break; case pe_bus_recovered: case pe_unquiese_bus: printk(KERN_INFO "int_received: system bus %d recovered\n", event->data.bus.bus_number); break; case pe_node_failed: case pe_bridge_error: printk(KERN_INFO "int_received: multi-adapter bridge %d/%d/%d failed\n", event->data.node.bus_number, event->data.node.sub_bus_number, event->data.node.dev_id); break; case pe_node_recovered: printk(KERN_INFO "int_received: multi-adapter bridge %d/%d/%d recovered\n", event->data.node.bus_number, event->data.node.sub_bus_number, event->data.node.dev_id); break; default: printk(KERN_ERR "int_received: unrecognized event subtype 0x%x\n", event->event.xSubtype); break; } }
static void intReceived(struct XmPciLpEvent* eventParm, struct pt_regs* regsParm) { int irq; ++Pci_Interrupt_Count; //PPCDBG(PPCDBG_BUSWALK,"PCI: XmPciLpEvent.c: intReceived\n"); switch (eventParm->hvLpEvent.xSubtype) { case XmPciLpEvent_SlotInterrupt: irq = eventParm->hvLpEvent.xCorrelationToken; /* Dispatch the interrupt handlers for this irq */ ppc_irq_dispatch_handler(regsParm, irq); HvCallPci_eoi(eventParm->eventData.slotInterrupt.busNumber, eventParm->eventData.slotInterrupt.subBusNumber, eventParm->eventData.slotInterrupt.deviceId); break; /* Ignore error recovery events for now */ case XmPciLpEvent_BusCreated: printk(KERN_INFO "XmPciLpEvent.c: system bus %d created\n", eventParm->eventData.busCreated.busNumber); break; case XmPciLpEvent_BusFailed: printk(KERN_INFO "XmPciLpEvent.c: system bus %d failed\n", eventParm->eventData.busFailed.busNumber); break; case XmPciLpEvent_BusRecovered: printk(KERN_INFO "XmPciLpEvent.c: system bus %d recovered\n", eventParm->eventData.busRecovered.busNumber); break; case XmPciLpEvent_NodeFailed: printk(KERN_INFO "XmPciLpEvent.c: multi-adapter bridge %d/%d/%d failed\n", eventParm->eventData.nodeFailed.busNumber, eventParm->eventData.nodeFailed.subBusNumber, eventParm->eventData.nodeFailed.deviceId); break; case XmPciLpEvent_NodeRecovered: printk(KERN_INFO "XmPciLpEvent.c: multi-adapter bridge %d/%d/%d recovered\n", eventParm->eventData.nodeRecovered.busNumber, eventParm->eventData.nodeRecovered.subBusNumber, eventParm->eventData.nodeRecovered.deviceId); break; default: printk(KERN_ERR "XmPciLpEvent.c: unrecognized event subtype 0x%x\n", eventParm->hvLpEvent.xSubtype); break; }; }