int __init rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { unsigned char irq = pin; /* IRQ rotation */ irq--; /* 0-3 */ if (slot == TX4927_PCIC_IDSEL_AD_TO_SLOT(23)) { /* PCI CardSlot (IDSEL=A23) */ /* PCIA => PCIA */ irq = (irq + 0 + slot) % 4; } else { /* PCI Backplane */ if (txx9_pci_option & TXX9_PCI_OPT_PICMG) irq = (irq + 33 - slot) % 4; else irq = (irq + 3 + slot) % 4; } irq++; /* 1-4 */ switch (irq) { case 1: irq = RBTX4927_IRQ_IOC_PCIA; break; case 2: irq = RBTX4927_IRQ_IOC_PCIB; break; case 3: irq = RBTX4927_IRQ_IOC_PCIC; break; case 4: irq = RBTX4927_IRQ_IOC_PCID; break; } return irq; }
int __init rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { unsigned char irq = pin; irq--; if (slot == TX4927_PCIC_IDSEL_AD_TO_SLOT(23)) { irq = (irq + 0 + slot) % 4; } else { if (txx9_pci_option & TXX9_PCI_OPT_PICMG) irq = (irq + 33 - slot) % 4; else irq = (irq + 3 + slot) % 4; } irq++; switch (irq) { case 1: irq = RBTX4927_IRQ_IOC_PCIA; break; case 2: irq = RBTX4927_IRQ_IOC_PCIB; break; case 3: irq = RBTX4927_IRQ_IOC_PCIC; break; case 4: irq = RBTX4927_IRQ_IOC_PCID; break; } return irq; }
int __init tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot) { if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) { switch (slot) { case TX4927_PCIC_IDSEL_AD_TO_SLOT(31): if (__raw_readq(&tx4938_ccfgptr->pcfg) & TX4938_PCFG_ETH0_SEL) return TXX9_IRQ_BASE + TX4938_IR_ETH0; break; case TX4927_PCIC_IDSEL_AD_TO_SLOT(30): if (__raw_readq(&tx4938_ccfgptr->pcfg) & TX4938_PCFG_ETH1_SEL) return TXX9_IRQ_BASE + TX4938_IR_ETH1; break; } return 0; } return -1; }
int pci_get_irq(struct pci_dev *dev, int pin) { unsigned char irq = pin; DBG("pci_get_irq: pin is %d\n", pin); /* IRQ rotation */ irq--; /* 0-3 */ if (dev->bus->parent == NULL && PCI_SLOT(dev->devfn) == TX4927_PCIC_IDSEL_AD_TO_SLOT(23)) { printk("Onboard PCI_SLOT(dev->devfn) is %d\n", PCI_SLOT(dev->devfn)); /* IDSEL=A23 is tx4927 onboard pci slot */ irq = (irq + PCI_SLOT(dev->devfn)) % 4; irq++; /* 1-4 */ DBG("irq is now %d\n", irq); switch (irq) { case 1: irq = TX4927_IRQ_IOC_PCIA; break; case 2: irq = TX4927_IRQ_IOC_PCIB; break; case 3: irq = TX4927_IRQ_IOC_PCIC; break; case 4: irq = TX4927_IRQ_IOC_PCID; break; } } else { /* PCI Backplane */ DBG("PCI Backplane PCI_SLOT(dev->devfn) is %d\n", PCI_SLOT(dev->devfn)); irq = backplane_pci_irq[PCI_SLOT(dev->devfn) - 17][irq]; } DBG("assigned irq %d\n", irq); return irq; }