LCOV - code coverage report
Current view: top level - arch/x86/include/asm - pci.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 10 14 71.4 %
Date: 2022-03-28 16:04:14 Functions: 0 0 -
Branches: 3 18 16.7 %

           Branch data     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                 :       9165 : static inline struct pci_sysdata *to_pci_sysdata(const struct pci_bus *bus)
      37                 :            : {
      38                 :       9165 :         return bus->sysdata;
      39                 :            : }
      40                 :            : 
      41                 :            : #ifdef CONFIG_PCI
      42                 :            : 
      43                 :            : #ifdef CONFIG_PCI_DOMAINS
      44                 :       9048 : static inline int pci_domain_nr(struct pci_bus *bus)
      45                 :            : {
      46   [ -  -  -  -  :       9035 :         return to_pci_sysdata(bus)->domain;
                   -  - ]
      47                 :            : }
      48                 :            : 
      49                 :         13 : static inline int pci_proc_domain(struct pci_bus *bus)
      50                 :            : {
      51         [ -  + ]:         13 :         return pci_domain_nr(bus);
      52                 :            : }
      53                 :            : #endif
      54                 :            : 
      55                 :            : #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
      56                 :         13 : static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)
      57                 :            : {
      58         [ -  + ]:         13 :         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                 :            : static inline void early_quirks(void) { }
     104                 :            : #endif
     105                 :            : 
     106                 :            : extern void pci_iommu_alloc(void);
     107                 :            : 
     108                 :            : #ifdef CONFIG_PCI_MSI
     109                 :            : /* implemented in arch/x86/kernel/apic/io_apic. */
     110                 :            : struct msi_desc;
     111                 :            : int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
     112                 :            : void native_teardown_msi_irq(unsigned int irq);
     113                 :            : void native_restore_msi_irqs(struct pci_dev *dev);
     114                 :            : #else
     115                 :            : #define native_setup_msi_irqs           NULL
     116                 :            : #define native_teardown_msi_irq         NULL
     117                 :            : #endif
     118                 :            : 
     119                 :            : /* generic pci stuff */
     120                 :            : #include <asm-generic/pci.h>
     121                 :            : 
     122                 :            : #ifdef CONFIG_NUMA
     123                 :            : /* Returns the node based on pci bus */
     124                 :        104 : static inline int __pcibus_to_node(const struct pci_bus *bus)
     125                 :            : {
     126   [ +  -  -  - ]:        104 :         return to_pci_sysdata(bus)->node;
     127                 :            : }
     128                 :            : 
     129                 :            : static inline const struct cpumask *
     130                 :          0 : cpumask_of_pcibus(const struct pci_bus *bus)
     131                 :            : {
     132                 :          0 :         int node;
     133                 :            : 
     134                 :          0 :         node = __pcibus_to_node(bus);
     135   [ #  #  #  # ]:          0 :         return (node == NUMA_NO_NODE) ? cpu_online_mask :
     136                 :            :                               cpumask_of_node(node);
     137                 :            : }
     138                 :            : #endif
     139                 :            : 
     140                 :            : struct pci_setup_rom {
     141                 :            :         struct setup_data data;
     142                 :            :         uint16_t vendor;
     143                 :            :         uint16_t devid;
     144                 :            :         uint64_t pcilen;
     145                 :            :         unsigned long segment;
     146                 :            :         unsigned long bus;
     147                 :            :         unsigned long device;
     148                 :            :         unsigned long function;
     149                 :            :         uint8_t romdata[0];
     150                 :            : };
     151                 :            : 
     152                 :            : #endif /* _ASM_X86_PCI_H */

Generated by: LCOV version 1.14