diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-13 21:16:10 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:12:40 -0500 |
commit | e3999574b48125c9bb0c95e3e9f1c696bf96c3e3 (patch) | |
tree | a6651da06fa36c3dde33a7be5f0b7192b8442cd7 /arch/sparc64/kernel/pci_sun4v.c | |
parent | 10804828fd06a43ce964e9d9852332e7ff1507b1 (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.c | 30 |
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 | ||
645 | static unsigned int pci_sun4v_irq_build(struct pci_pbm_info *pbm, | 645 | static 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 | ||
710 | static void pci_sun4v_base_address_update(struct pci_dev *pdev, int resource) | 684 | static void pci_sun4v_base_address_update(struct pci_dev *pdev, int resource) |