root/include/linux/device-id/pci.h
/* 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 */