cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pci.h (3190B)


      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
     15struct 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
     32extern int pci_routeirq;
     33extern int noioapicquirk;
     34extern int noioapicreroute;
     35
     36static 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
     44static inline int pci_domain_nr(struct pci_bus *bus)
     45{
     46	return to_pci_sysdata(bus)->domain;
     47}
     48
     49static 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
     56static 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)
     65static 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
     77extern unsigned int pcibios_assign_all_busses(void);
     78extern int pci_legacy_init(void);
     79#else
     80static inline int pcibios_assign_all_busses(void) { return 0; }
     81#endif
     82
     83extern 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
     89extern int pcibios_enabled;
     90void pcibios_scan_root(int bus);
     91
     92struct irq_routing_table *pcibios_get_irq_routing_table(void);
     93int 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
    101extern void early_quirks(void);
    102#else
    103static inline void early_quirks(void) { }
    104#endif
    105
    106extern 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 */
    113static inline int __pcibus_to_node(const struct pci_bus *bus)
    114{
    115	return to_pci_sysdata(bus)->node;
    116}
    117
    118static inline const struct cpumask *
    119cpumask_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
    129struct 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[];
    139};
    140
    141#endif /* _ASM_X86_PCI_H */