Subversion Repositories Kolibri OS

Rev

Rev 7143 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef _ASM_X86_PCI_H
  2. #define _ASM_X86_PCI_H
  3.  
  4. #include <linux/mm.h> /* for struct page */
  5. #include <linux/types.h>
  6. #include <linux/slab.h>
  7. #include <linux/string.h>
  8. #include <linux/scatterlist.h>
  9. #include <asm/io.h>
  10. #include <asm/x86_init.h>
  11.  
  12. #ifdef __KERNEL__
  13.  
  14. struct pci_sysdata {
  15.         int             domain;         /* PCI domain */
  16.         int             node;           /* NUMA node */
  17. #ifdef CONFIG_ACPI
  18.         struct acpi_device *companion;  /* ACPI companion device */
  19. #endif
  20. #ifdef CONFIG_X86_64
  21.         void            *iommu;         /* IOMMU private data */
  22. #endif
  23. #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
  24.         void            *fwnode;        /* IRQ domain for MSI assignment */
  25. #endif
  26. };
  27.  
  28. extern int pci_routeirq;
  29. extern int noioapicquirk;
  30. extern int noioapicreroute;
  31.  
  32. #ifdef CONFIG_PCI
  33.  
  34. #ifdef CONFIG_PCI_DOMAINS
  35. static inline int pci_domain_nr(struct pci_bus *bus)
  36. {
  37.         struct pci_sysdata *sd = bus->sysdata;
  38.  
  39.         return sd->domain;
  40. }
  41.  
  42. static inline int pci_proc_domain(struct pci_bus *bus)
  43. {
  44.         return pci_domain_nr(bus);
  45. }
  46. #endif
  47.  
  48. #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
  49. static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)
  50. {
  51.         struct pci_sysdata *sd = bus->sysdata;
  52.  
  53.         return sd->fwnode;
  54. }
  55.  
  56. #define pci_root_bus_fwnode     _pci_root_bus_fwnode
  57. #endif
  58.  
  59. /* Can be used to override the logic in pci_scan_bus for skipping
  60.    already-configured bus numbers - to be used for buggy BIOSes
  61.    or architectures with incomplete PCI setup by the loader */
  62.  
  63. extern int pcibios_assign_all_busses(void);
  64. extern int pci_legacy_init(void);
  65. # ifdef CONFIG_ACPI
  66. #  define x86_default_pci_init pci_acpi_init
  67. # else
  68. #  define x86_default_pci_init pci_legacy_init
  69. # endif
  70. #else
  71. # define pcibios_assign_all_busses()    0
  72. # define x86_default_pci_init           NULL
  73. #endif
  74.  
  75. extern unsigned long pci_mem_start;
  76. #define PCIBIOS_MIN_IO          0x1000
  77. #define PCIBIOS_MIN_MEM         (pci_mem_start)
  78.  
  79. #define PCIBIOS_MIN_CARDBUS_IO  0x4000
  80.  
  81. extern int pcibios_enabled;
  82. void pcibios_config_init(void);
  83. void pcibios_scan_root(int bus);
  84.  
  85. void pcibios_set_master(struct pci_dev *dev);
  86. struct irq_routing_table *pcibios_get_irq_routing_table(void);
  87. int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
  88.  
  89.  
  90. #define HAVE_PCI_MMAP
  91. extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
  92.                                enum pci_mmap_state mmap_state,
  93.                                int write_combine);
  94.  
  95.  
  96. #ifdef CONFIG_PCI
  97. extern void early_quirks(void);
  98. #else
  99. static inline void early_quirks(void) { }
  100. #endif
  101.  
  102. extern void pci_iommu_alloc(void);
  103.  
  104. #ifdef CONFIG_PCI_MSI
  105. /* implemented in arch/x86/kernel/apic/io_apic. */
  106. struct msi_desc;
  107. int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
  108. void native_teardown_msi_irq(unsigned int irq);
  109. void native_restore_msi_irqs(struct pci_dev *dev);
  110. #else
  111. #define native_setup_msi_irqs           NULL
  112. #define native_teardown_msi_irq         NULL
  113. #endif
  114.  
  115. #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
  116.  
  117. #endif  /* __KERNEL__ */
  118.  
  119. #ifdef CONFIG_X86_64
  120. #include <asm/pci_64.h>
  121. #endif
  122.  
  123. /* generic pci stuff */
  124. #include <asm-generic/pci.h>
  125.  
  126. #ifdef CONFIG_NUMA
  127. /* Returns the node based on pci bus */
  128. static inline int __pcibus_to_node(const struct pci_bus *bus)
  129. {
  130.         const struct pci_sysdata *sd = bus->sysdata;
  131.  
  132.         return sd->node;
  133. }
  134.  
  135. static inline const struct cpumask *
  136. cpumask_of_pcibus(const struct pci_bus *bus)
  137. {
  138.         int node;
  139.  
  140.         node = __pcibus_to_node(bus);
  141.         return (node == -1) ? cpu_online_mask :
  142.                               cpumask_of_node(node);
  143. }
  144. #endif
  145.  
  146. struct pci_setup_rom {
  147.         uint16_t vendor;
  148.         uint16_t devid;
  149.         uint64_t pcilen;
  150.         unsigned long segment;
  151.         unsigned long bus;
  152.         unsigned long device;
  153.         unsigned long function;
  154.         uint8_t romdata[0];
  155. };
  156.  
  157. #endif /* _ASM_X86_PCI_H */
  158.