/* SPDX-License-Identifier: GPL-2.0 */ #ifndef LINUX_DEVICE_ID_PCI_H #define LINUX_DEVICE_ID_PCI_H #ifdef __KERNEL__ #include typedef unsigned long kernel_ulong_t; #endif #define PCI_ANY_ID (~0) enum { PCI_ID_F_VFIO_DRIVER_OVERRIDE = 1, }; /** * struct pci_device_id - PCI device ID structure * @vendor: Vendor ID to match (or PCI_ANY_ID) * @device: Device ID to match (or PCI_ANY_ID) * @subvendor: Subsystem vendor ID to match (or PCI_ANY_ID) * @subdevice: Subsystem device ID to match (or PCI_ANY_ID) * @class: Device class, subclass, and "interface" to match. * See Appendix D of the PCI Local Bus Spec or * include/linux/pci_ids.h for a full list of classes. * Most drivers do not need to specify class/class_mask * as vendor/device is normally sufficient. * @class_mask: Limit which sub-fields of the class field are compared. * See drivers/scsi/sym53c8xx_2/ for example of usage. * @driver_data: Data private to the driver. * Most drivers don't need to use driver_data field. * Best practice is to use driver_data as an index * into a static list of equivalent device types, * instead of using it as a pointer. * @override_only: Match only when dev->driver_override is this driver. */ struct pci_device_id { __u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/ __u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */ __u32 class, class_mask; /* (class,subclass,prog-if) triplet */ kernel_ulong_t driver_data; /* Data private to the driver */ __u32 override_only; }; /* pci_epf */ #define PCI_EPF_NAME_SIZE 20 #define PCI_EPF_MODULE_PREFIX "pci_epf:" struct pci_epf_device_id { char name[PCI_EPF_NAME_SIZE]; kernel_ulong_t driver_data; }; #endif /* ifndef LINUX_DEVICE_ID_PCI_H */