| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef LINUX_DEVICE_ID_PCI_H | |
| #define LINUX_DEVICE_ID_PCI_H | |
| #ifdef __KERNEL__ | |
| #include <linux/types.h> | |
| 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 */ |