aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/pci_sun4v.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-13 21:16:10 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 04:12:40 -0500
commite3999574b48125c9bb0c95e3e9f1c696bf96c3e3 (patch)
treea6651da06fa36c3dde33a7be5f0b7192b8442cd7 /arch/sparc64/kernel/pci_sun4v.c
parent10804828fd06a43ce964e9d9852332e7ff1507b1 (diff)
[SPARC64]: Generic sun4v_build_irq().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/pci_sun4v.c')
-rw-r--r--arch/sparc64/kernel/pci_sun4v.c30
1 files changed, 2 insertions, 28 deletions
diff --git a/arch/sparc64/kernel/pci_sun4v.c b/arch/sparc64/kernel/pci_sun4v.c
index 5174346ce35d..b8846b271f96 100644
--- a/arch/sparc64/kernel/pci_sun4v.c
+++ b/arch/sparc64/kernel/pci_sun4v.c
@@ -644,18 +644,11 @@ static void pci_sun4v_scan_bus(struct pci_controller_info *p)
644 644
645static unsigned int pci_sun4v_irq_build(struct pci_pbm_info *pbm, 645static unsigned int pci_sun4v_irq_build(struct pci_pbm_info *pbm,
646 struct pci_dev *pdev, 646 struct pci_dev *pdev,
647 unsigned int ino) 647 unsigned int devino)
648{ 648{
649 struct ino_bucket *bucket;
650 unsigned long sysino;
651 u32 devhandle = pbm->devhandle; 649 u32 devhandle = pbm->devhandle;
652 int pil; 650 int pil;
653 651
654 sysino = sun4v_devino_to_sysino(devhandle, ino);
655
656 printk(KERN_INFO "pci_irq_buld: Mapping ( devh[%08x] ino[%08x] ) "
657 "--> sysino[%016lx]\n", devhandle, ino, sysino);
658
659 pil = 4; 652 pil = 4;
660 if (pdev) { 653 if (pdev) {
661 switch ((pdev->class >> 16) & 0xff) { 654 switch ((pdev->class >> 16) & 0xff) {
@@ -685,26 +678,7 @@ static unsigned int pci_sun4v_irq_build(struct pci_pbm_info *pbm,
685 } 678 }
686 BUG_ON(PIL_RESERVED(pil)); 679 BUG_ON(PIL_RESERVED(pil));
687 680
688 bucket = &ivector_table[sysino]; 681 return sun4v_build_irq(devhandle, devino, pil, IBF_PCI);
689
690 /* Catch accidental accesses to these things. IMAP/ICLR handling
691 * is done by hypervisor calls on sun4v platforms, not by direct
692 * register accesses.
693 */
694 bucket->imap = ~0UL;
695 bucket->iclr = ~0UL;
696
697 bucket->pil = pil;
698 bucket->flags = IBF_PCI;
699
700 bucket->irq_info = kmalloc(sizeof(struct irq_desc), GFP_ATOMIC);
701 if (!bucket->irq_info) {
702 prom_printf("IRQ: Error, kmalloc(irq_desc) failed.\n");
703 prom_halt();
704 }
705 memset(bucket->irq_info, 0, sizeof(struct irq_desc));
706
707 return __irq(bucket);
708} 682}
709 683
710static void pci_sun4v_base_address_update(struct pci_dev *pdev, int resource) 684static void pci_sun4v_base_address_update(struct pci_dev *pdev, int resource)