pcidev.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * This file is subject to the terms and conditions of the GNU General Public
  3. * License. See the file "COPYING" in the main directory of this archive
  4. * for more details.
  5. *
  6. * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved.
  7. */
  8. #ifndef _ASM_IA64_SN_PCI_PCIDEV_H
  9. #define _ASM_IA64_SN_PCI_PCIDEV_H
  10. #include <linux/pci.h>
  11. #define SN_PCIDEV_INFO(pci_dev) \
  12. ((struct pcidev_info *)(pci_dev)->sysdata)
  13. #define SN_PCIBUS_BUSSOFT_INFO(pci_bus) \
  14. (struct pcibus_info *)((struct pcibus_bussoft *)(PCI_CONTROLLER((pci_bus))->platform_data))
  15. /*
  16. * Given a pci_bus, return the sn pcibus_bussoft struct. Note that
  17. * this only works for root busses, not for busses represented by PPB's.
  18. */
  19. #define SN_PCIBUS_BUSSOFT(pci_bus) \
  20. ((struct pcibus_bussoft *)(PCI_CONTROLLER((pci_bus))->platform_data))
  21. #define SN_PCIBUS_BUSSOFT_INFO(pci_bus) \
  22. (struct pcibus_info *)((struct pcibus_bussoft *)(PCI_CONTROLLER((pci_bus))->platform_data))
  23. /*
  24. * Given a struct pci_dev, return the sn pcibus_bussoft struct. Note
  25. * that this is not equivalent to SN_PCIBUS_BUSSOFT(pci_dev->bus) due
  26. * due to possible PPB's in the path.
  27. */
  28. #define SN_PCIDEV_BUSSOFT(pci_dev) \
  29. (SN_PCIDEV_INFO(pci_dev)->pdi_host_pcidev_info->pdi_pcibus_info)
  30. #define SN_PCIDEV_BUSPROVIDER(pci_dev) \
  31. (SN_PCIDEV_INFO(pci_dev)->pdi_provider)
  32. #define PCIIO_BUS_NONE 255 /* bus 255 reserved */
  33. #define PCIIO_SLOT_NONE 255
  34. #define PCIIO_FUNC_NONE 255
  35. #define PCIIO_VENDOR_ID_NONE (-1)
  36. struct pcidev_info {
  37. uint64_t pdi_pio_mapped_addr[7]; /* 6 BARs PLUS 1 ROM */
  38. uint64_t pdi_slot_host_handle; /* Bus and devfn Host pci_dev */
  39. struct pcibus_bussoft *pdi_pcibus_info; /* Kernel common bus soft */
  40. struct pcidev_info *pdi_host_pcidev_info; /* Kernel Host pci_dev */
  41. struct pci_dev *pdi_linux_pcidev; /* Kernel pci_dev */
  42. struct sn_irq_info *pdi_sn_irq_info;
  43. struct sn_pcibus_provider *pdi_provider; /* sn pci ops */
  44. struct pci_dev *host_pci_dev; /* host bus link */
  45. };
  46. extern void sn_irq_fixup(struct pci_dev *pci_dev,
  47. struct sn_irq_info *sn_irq_info);
  48. extern void sn_irq_unfixup(struct pci_dev *pci_dev);
  49. extern void sn_pci_controller_fixup(int segment, int busnum,
  50. struct pci_bus *bus);
  51. extern void sn_bus_store_sysdata(struct pci_dev *dev);
  52. extern void sn_bus_free_sysdata(void);
  53. extern void sn_pci_fixup_slot(struct pci_dev *dev);
  54. extern void sn_pci_unfixup_slot(struct pci_dev *dev);
  55. extern void sn_irq_lh_init(void);
  56. #endif /* _ASM_IA64_SN_PCI_PCIDEV_H */