diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2008-12-16 23:37:00 -0500 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-01-07 14:13:13 -0500 |
commit | 3e08601f7f9b497abcb383491058bfb9e1dc6ec9 (patch) | |
tree | 3023eadea316e1c159ce049c2bcfbe7ffaa75f3c /arch | |
parent | 68feac87de15edfc2c700d2d81b814288c93d003 (diff) |
PCI: alpha: use generic INTx swizzle from PCI core
Use the generic pci_common_swizzle() instead of arch-specific code.
Note that pci_common_swizzle() loops based on dev->bus->self, not
dev->bus->parent as the alpha common_swizzle() did. I think they
are equivalent for this purpose.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/kernel/pci.c | 18 | ||||
-rw-r--r-- | arch/alpha/kernel/pci_impl.h | 4 |
2 files changed, 2 insertions, 20 deletions
diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c index b03d9f420425..a3b938811400 100644 --- a/arch/alpha/kernel/pci.c +++ b/arch/alpha/kernel/pci.c | |||
@@ -320,24 +320,6 @@ pcibios_update_irq(struct pci_dev *dev, int irq) | |||
320 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); | 320 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); |
321 | } | 321 | } |
322 | 322 | ||
323 | /* Most Alphas have straight-forward swizzling needs. */ | ||
324 | |||
325 | u8 __init | ||
326 | common_swizzle(struct pci_dev *dev, u8 *pinp) | ||
327 | { | ||
328 | u8 pin = *pinp; | ||
329 | |||
330 | while (dev->bus->parent) { | ||
331 | pin = pci_swizzle_interrupt_pin(dev, pin); | ||
332 | /* Move up the chain of bridges. */ | ||
333 | dev = dev->bus->self; | ||
334 | } | ||
335 | *pinp = pin; | ||
336 | |||
337 | /* The slot is the slot of the last bridge. */ | ||
338 | return PCI_SLOT(dev->devfn); | ||
339 | } | ||
340 | |||
341 | void | 323 | void |
342 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | 324 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, |
343 | struct resource *res) | 325 | struct resource *res) |
diff --git a/arch/alpha/kernel/pci_impl.h b/arch/alpha/kernel/pci_impl.h index 7336651592a3..00edd04b585e 100644 --- a/arch/alpha/kernel/pci_impl.h +++ b/arch/alpha/kernel/pci_impl.h | |||
@@ -107,7 +107,7 @@ struct pci_iommu_arena; | |||
107 | * Thus, each swizzle is ((pin-1) + (device#-4)) % 4 | 107 | * Thus, each swizzle is ((pin-1) + (device#-4)) % 4 |
108 | * | 108 | * |
109 | * pci_swizzle_interrupt_pin() swizzles for exactly one bridge. The routine | 109 | * pci_swizzle_interrupt_pin() swizzles for exactly one bridge. The routine |
110 | * common_swizzle below handles multiple bridges. But there are a | 110 | * pci_common_swizzle() handles multiple bridges. But there are a |
111 | * couple boards that do strange things. | 111 | * couple boards that do strange things. |
112 | */ | 112 | */ |
113 | 113 | ||
@@ -179,7 +179,7 @@ extern int pci_probe_only; | |||
179 | extern unsigned long alpha_agpgart_size; | 179 | extern unsigned long alpha_agpgart_size; |
180 | 180 | ||
181 | extern void common_init_pci(void); | 181 | extern void common_init_pci(void); |
182 | extern u8 common_swizzle(struct pci_dev *, u8 *); | 182 | #define common_swizzle pci_common_swizzle |
183 | extern struct pci_controller *alloc_pci_controller(void); | 183 | extern struct pci_controller *alloc_pci_controller(void); |
184 | extern struct resource *alloc_resource(void); | 184 | extern struct resource *alloc_resource(void); |
185 | 185 | ||