网络设备之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);

 

转载于:https://www.cnblogs.com/wanpengcoder/p/7526005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值