/* SPDX-License-Identifier: GPL-2.0-only */ #ifndef DEVICE_PATH_H #define DEVICE_PATH_H #include enum device_path_type { DEVICE_PATH_NONE = 0, DEVICE_PATH_ROOT, DEVICE_PATH_PCI, DEVICE_PATH_PNP, DEVICE_PATH_I2C, DEVICE_PATH_APIC, DEVICE_PATH_DOMAIN, DEVICE_PATH_CPU_CLUSTER, DEVICE_PATH_CPU, DEVICE_PATH_CPU_BUS, DEVICE_PATH_IOAPIC, DEVICE_PATH_GENERIC, DEVICE_PATH_SPI, DEVICE_PATH_USB, DEVICE_PATH_MMIO, DEVICE_PATH_GPIO, DEVICE_PATH_MDIO, DEVICE_PATH_GICC_V3, /* * When adding path types to this table, please also update the * DEVICE_PATH_NAMES macro below. */ }; #define DEVICE_PATH_NAMES { \ "DEVICE_PATH_NONE", \ "DEVICE_PATH_ROOT", \ "DEVICE_PATH_PCI", \ "DEVICE_PATH_PNP", \ "DEVICE_PATH_I2C", \ "DEVICE_PATH_APIC", \ "DEVICE_PATH_DOMAIN", \ "DEVICE_PATH_CPU_CLUSTER", \ "DEVICE_PATH_CPU", \ "DEVICE_PATH_CPU_BUS", \ "DEVICE_PATH_IOAPIC", \ "DEVICE_PATH_GENERIC", \ "DEVICE_PATH_SPI", \ "DEVICE_PATH_USB", \ "DEVICE_PATH_MMIO", \ "DEVICE_PATH_GPIO", \ "DEVICE_PATH_MDIO", \ "DEVICE_PATH_GICC_V3", \ } struct domain_path { unsigned int domain_id; }; struct pci_path { unsigned int devfn; }; struct pnp_path { unsigned int port; unsigned int device; }; struct i2c_path { unsigned int device; unsigned int mode_10bit; }; struct spi_path { unsigned int cs; }; struct apic_path { unsigned int initial_lapicid; unsigned int apic_id; unsigned int package_id; unsigned int node_id; unsigned int core_id; unsigned int thread_id; unsigned char core_type; }; struct ioapic_path { unsigned int ioapic_id; }; struct cpu_cluster_path { unsigned int cluster; }; struct cpu_path { unsigned int id; }; struct cpu_bus_path { unsigned int id; }; struct generic_path { unsigned int id; unsigned int subid; }; struct usb_path { unsigned int port_type; unsigned int port_id; }; struct mmio_path { uintptr_t addr; }; struct gpio_path { unsigned int id; }; struct mdio_path { unsigned int addr; }; struct gicc_v3_path { unsigned long long mpidr; unsigned int vgic_mi; unsigned int pi_gsiv; }; struct device_path { enum device_path_type type; union { struct pci_path pci; struct pnp_path pnp; struct i2c_path i2c; struct apic_path apic; struct ioapic_path ioapic; struct domain_path domain; struct cpu_cluster_path cpu_cluster; struct cpu_path cpu; struct cpu_bus_path cpu_bus; struct generic_path generic; struct spi_path spi; struct usb_path usb; struct mmio_path mmio; struct gpio_path gpio; struct mdio_path mdio; struct gicc_v3_path gicc_v3; }; }; #define DEVICE_PATH_MAX 40 #define BUS_PATH_MAX (DEVICE_PATH_MAX+10) extern const char *dev_path_name(enum device_path_type type); #endif /* DEVICE_PATH_H */