ftv-pci.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/kernel/ftv-pci.c
  3.  *
  4.  *  PCI bios-type initialisation for PCI machines
  5.  *
  6.  *  Bits taken from various places.
  7.  */
  8. #include <linux/kernel.h>
  9. #include <linux/pci.h>
  10. #include <linux/init.h>
  11. #include <asm/irq.h>
  12. #include <asm/mach/pci.h>
  13. /*
  14.  * Owing to a PCB cockup, issue A backplanes are wired thus:
  15.  *
  16.  * Slot 1    2    3    4    5   Bridge   S1    S2    S3    S4
  17.  * IRQ  D    C    B    A    A            C     B     A     D
  18.  *      A    D    C    B    B            D     C     B     A
  19.  *      B    A    D    C    C            A     D     C     B
  20.  *      C    B    A    D    D            B     A     D     C
  21.  *
  22.  * ID A31  A30  A29  A28  A27   A26      DEV4  DEV5  DEV6  DEV7
  23.  *
  24.  * Actually, this isn't too bad, because with the processor card
  25.  * in slot 5 on the primary bus, the IRQs rotate on both sides
  26.  * as you'd expect.
  27.  */
  28. static int irqmap_ftv[] __initdata = { IRQ_PCI_D, IRQ_PCI_C, IRQ_PCI_B, IRQ_PCI_A };
  29. static int __init ftv_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
  30. {
  31. if (slot > 0x10)
  32. slot--;
  33. return irqmap_ftv[(slot - pin) & 3];
  34. }
  35. static u8 __init ftv_swizzle(struct pci_dev *dev, u8 *pin)
  36. {
  37. return PCI_SLOT(dev->devfn);
  38. }
  39. /* ftv host-specific stuff */
  40. struct hw_pci ftv_pci __initdata = {
  41. init: plx90x0_init,
  42. swizzle: ftv_swizzle,
  43. map_irq: ftv_map_irq,
  44. };