• 网络设备之pci_device_id


    标准PCI设备都有一个配置寄存器,用来存储各种参数;

     1 /* pci设备配置寄存器 */
     2 struct pci_device_id {
     3     /* 厂商id,设备id */
     4     __u32 vendor, device;        /* Vendor and device ID or PCI_ANY_ID*/
     5     /* 子系统厂商id,子系统设备id */
     6     __u32 subvendor, subdevice;    /* Subsystem ID's or PCI_ANY_ID */
     7     /* 类,类掩码,使驱动程序可以指定支持某一种pci设备 */
     8     __u32 class, class_mask;    /* (class,subclass,prog-if) triplet */
     9     /* 保存于设备相关的私有信息 */
    10     kernel_ulong_t driver_data;    /* Data private to the driver */
    11 };

    以e100为例,其支持多种设备,不同设备的pci_device_id初始化后存放在e100_id_table[]数组中;

    e100_driver操作中的id_table字段会引用该数组;

     1 /* e100的pci设备信息结构列表 */
     2 #define INTEL_8255X_ETHERNET_DEVICE(device_id, ich) {
     3     PCI_VENDOR_ID_INTEL, device_id, PCI_ANY_ID, PCI_ANY_ID, 
     4     PCI_CLASS_NETWORK_ETHERNET << 8, 0xFFFF00, ich }
     5 static const struct pci_device_id e100_id_table[] = {
     6     INTEL_8255X_ETHERNET_DEVICE(0x1029, 0),
     7     INTEL_8255X_ETHERNET_DEVICE(0x1030, 0),
     8     INTEL_8255X_ETHERNET_DEVICE(0x1031, 3),
     9     INTEL_8255X_ETHERNET_DEVICE(0x1032, 3),
    10     INTEL_8255X_ETHERNET_DEVICE(0x1033, 3),
    11     INTEL_8255X_ETHERNET_DEVICE(0x1034, 3),
    12     INTEL_8255X_ETHERNET_DEVICE(0x1038, 3),
    13     INTEL_8255X_ETHERNET_DEVICE(0x1039, 4),
    14     INTEL_8255X_ETHERNET_DEVICE(0x103A, 4),
    15     INTEL_8255X_ETHERNET_DEVICE(0x103B, 4),
    16     INTEL_8255X_ETHERNET_DEVICE(0x103C, 4),
    17     INTEL_8255X_ETHERNET_DEVICE(0x103D, 4),
    18     INTEL_8255X_ETHERNET_DEVICE(0x103E, 4),
    19     INTEL_8255X_ETHERNET_DEVICE(0x1050, 5),
    20     INTEL_8255X_ETHERNET_DEVICE(0x1051, 5),
    21     INTEL_8255X_ETHERNET_DEVICE(0x1052, 5),
    22     INTEL_8255X_ETHERNET_DEVICE(0x1053, 5),
    23     INTEL_8255X_ETHERNET_DEVICE(0x1054, 5),
    24     INTEL_8255X_ETHERNET_DEVICE(0x1055, 5),
    25     INTEL_8255X_ETHERNET_DEVICE(0x1056, 5),
    26     INTEL_8255X_ETHERNET_DEVICE(0x1057, 5),
    27     INTEL_8255X_ETHERNET_DEVICE(0x1059, 0),
    28     INTEL_8255X_ETHERNET_DEVICE(0x1064, 6),
    29     INTEL_8255X_ETHERNET_DEVICE(0x1065, 6),
    30     INTEL_8255X_ETHERNET_DEVICE(0x1066, 6),
    31     INTEL_8255X_ETHERNET_DEVICE(0x1067, 6),
    32     INTEL_8255X_ETHERNET_DEVICE(0x1068, 6),
    33     INTEL_8255X_ETHERNET_DEVICE(0x1069, 6),
    34     INTEL_8255X_ETHERNET_DEVICE(0x106A, 6),
    35     INTEL_8255X_ETHERNET_DEVICE(0x106B, 6),
    36     INTEL_8255X_ETHERNET_DEVICE(0x1091, 7),
    37     INTEL_8255X_ETHERNET_DEVICE(0x1092, 7),
    38     INTEL_8255X_ETHERNET_DEVICE(0x1093, 7),
    39     INTEL_8255X_ETHERNET_DEVICE(0x1094, 7),
    40     INTEL_8255X_ETHERNET_DEVICE(0x1095, 7),
    41     INTEL_8255X_ETHERNET_DEVICE(0x10fe, 7),
    42     INTEL_8255X_ETHERNET_DEVICE(0x1209, 0),
    43     INTEL_8255X_ETHERNET_DEVICE(0x1229, 0),
    44     INTEL_8255X_ETHERNET_DEVICE(0x2449, 2),
    45     INTEL_8255X_ETHERNET_DEVICE(0x2459, 2),
    46     INTEL_8255X_ETHERNET_DEVICE(0x245D, 2),
    47     INTEL_8255X_ETHERNET_DEVICE(0x27DC, 7),
    48     { 0, }
    49 };
    50 MODULE_DEVICE_TABLE(pci, e100_id_table);
  • 相关阅读:
    luogu_1009 阶乘之和
    codevs_3117 高精度练习之乘法(my struct)
    luogu_2142 高精度减法
    luogu_1601 A+B Problem(高精)
    luogu_1007 独木桥
    luogu_1006 传纸条
    luogu_1004 方格取数
    luogu_1003 铺地毯
    luogu_1002 过河卒
    BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/7526005.html
Copyright © 2020-2023  润新知