LCOV - code coverage report
Current view: top level - arch/x86/include/asm - pci.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 1 1 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _ASM_X86_PCI_H
       3             : #define _ASM_X86_PCI_H
       4             : 
       5             : #include <linux/mm.h> /* for struct page */
       6             : #include <linux/types.h>
       7             : #include <linux/slab.h>
       8             : #include <linux/string.h>
       9             : #include <linux/scatterlist.h>
      10             : #include <linux/numa.h>
      11             : #include <asm/io.h>
      12             : #include <asm/memtype.h>
      13             : #include <asm/x86_init.h>
      14             : 
      15             : struct pci_sysdata {
      16             :         int             domain;         /* PCI domain */
      17             :         int             node;           /* NUMA node */
      18             : #ifdef CONFIG_ACPI
      19             :         struct acpi_device *companion;  /* ACPI companion device */
      20             : #endif
      21             : #ifdef CONFIG_X86_64
      22             :         void            *iommu;         /* IOMMU private data */
      23             : #endif
      24             : #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
      25             :         void            *fwnode;        /* IRQ domain for MSI assignment */
      26             : #endif
      27             : #if IS_ENABLED(CONFIG_VMD)
      28             :         struct pci_dev  *vmd_dev;       /* VMD Device if in Intel VMD domain */
      29             : #endif
      30             : };
      31             : 
      32             : extern int pci_routeirq;
      33             : extern int noioapicquirk;
      34             : extern int noioapicreroute;
      35             : 
      36             : static inline struct pci_sysdata *to_pci_sysdata(const struct pci_bus *bus)
      37             : {
      38             :         return bus->sysdata;
      39             : }
      40             : 
      41             : #ifdef CONFIG_PCI
      42             : 
      43             : #ifdef CONFIG_PCI_DOMAINS
      44             : static inline int pci_domain_nr(struct pci_bus *bus)
      45             : {
      46             :         return to_pci_sysdata(bus)->domain;
      47             : }
      48             : 
      49             : static inline int pci_proc_domain(struct pci_bus *bus)
      50             : {
      51             :         return pci_domain_nr(bus);
      52             : }
      53             : #endif
      54             : 
      55             : #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
      56             : static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)
      57             : {
      58             :         return to_pci_sysdata(bus)->fwnode;
      59             : }
      60             : 
      61             : #define pci_root_bus_fwnode     _pci_root_bus_fwnode
      62             : #endif
      63             : 
      64             : #if IS_ENABLED(CONFIG_VMD)
      65             : static inline bool is_vmd(struct pci_bus *bus)
      66             : {
      67             :         return to_pci_sysdata(bus)->vmd_dev != NULL;
      68             : }
      69             : #else
      70             : #define is_vmd(bus)             false
      71             : #endif /* CONFIG_VMD */
      72             : 
      73             : /* Can be used to override the logic in pci_scan_bus for skipping
      74             :    already-configured bus numbers - to be used for buggy BIOSes
      75             :    or architectures with incomplete PCI setup by the loader */
      76             : 
      77             : extern unsigned int pcibios_assign_all_busses(void);
      78             : extern int pci_legacy_init(void);
      79             : #else
      80             : static inline int pcibios_assign_all_busses(void) { return 0; }
      81             : #endif
      82             : 
      83             : extern unsigned long pci_mem_start;
      84             : #define PCIBIOS_MIN_IO          0x1000
      85             : #define PCIBIOS_MIN_MEM         (pci_mem_start)
      86             : 
      87             : #define PCIBIOS_MIN_CARDBUS_IO  0x4000
      88             : 
      89             : extern int pcibios_enabled;
      90             : void pcibios_scan_root(int bus);
      91             : 
      92             : struct irq_routing_table *pcibios_get_irq_routing_table(void);
      93             : int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
      94             : 
      95             : 
      96             : #define HAVE_PCI_MMAP
      97             : #define arch_can_pci_mmap_wc()  pat_enabled()
      98             : #define ARCH_GENERIC_PCI_MMAP_RESOURCE
      99             : 
     100             : #ifdef CONFIG_PCI
     101             : extern void early_quirks(void);
     102             : #else
     103           1 : static inline void early_quirks(void) { }
     104             : #endif
     105             : 
     106             : extern void pci_iommu_alloc(void);
     107             : 
     108             : /* generic pci stuff */
     109             : #include <asm-generic/pci.h>
     110             : 
     111             : #ifdef CONFIG_NUMA
     112             : /* Returns the node based on pci bus */
     113             : static inline int __pcibus_to_node(const struct pci_bus *bus)
     114             : {
     115             :         return to_pci_sysdata(bus)->node;
     116             : }
     117             : 
     118             : static inline const struct cpumask *
     119             : cpumask_of_pcibus(const struct pci_bus *bus)
     120             : {
     121             :         int node;
     122             : 
     123             :         node = __pcibus_to_node(bus);
     124             :         return (node == NUMA_NO_NODE) ? cpu_online_mask :
     125             :                               cpumask_of_node(node);
     126             : }
     127             : #endif
     128             : 
     129             : struct pci_setup_rom {
     130             :         struct setup_data data;
     131             :         uint16_t vendor;
     132             :         uint16_t devid;
     133             :         uint64_t pcilen;
     134             :         unsigned long segment;
     135             :         unsigned long bus;
     136             :         unsigned long device;
     137             :         unsigned long function;
     138             :         uint8_t romdata[0];
     139             : };
     140             : 
     141             : #endif /* _ASM_X86_PCI_H */

Generated by: LCOV version 1.14