当前位置:嗨网首页>书籍在线阅读

04-PCI设备的Linux描述

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

21.1.2 PCI设备的Linux描述

在Linux系统中,所有种类的PCI设备都可以用pci_dev结构体来描述,由于一个PCI接口卡上可能包含多个功能模块,每个功能被当作一个独立的逻辑设备,因此,每一个PCI功能,即PCI逻辑设备都惟一地对应一个pci_dev设备描述符,该结构体的定义如代码清单21.2所示。

代码清单21.2 pci_dev结构体

1 struct pci_dev {

2 struct list_head bus_list;

3 struct pci_bus bus; / 这个PCI设备所在的PCI总线的pci_bus结构 */

4 struct pci_bus subordinate; / 指向这个PCI设备所桥接的下级总线 */

5

6 void sysdata; / 指向一片特定于系统的扩展数据 */

7 struct proc_dir_entry procent; / 该PCI设备在/proc/bus/pci中对应的目录项 */

8 struct pci_slot slot; / 设备位于的物理插槽 */

9 unsigned int devfn; / 这个PCI设备的设备功能号 /

10 unsigned short vendor; / PCI设备的厂商ID/

11 unsigned short device; / PCI设备的设备ID /

12 unsigned short subsystem_vendor; / PCI设备的子系统厂商ID /

13 unsigned short subsystem_device; / PCI设备的子系统设备ID /

14 unsigned int class ; /* 32位的无符号整数,表示该PCI设备的类别,

15 bit[7∶0]为编程接口,bit[15∶8]为子类别代码,bit[23∶16]

16 为基类别代码,bit[31∶24]无意义 */

17 u8 hdr_type; / PCI配置空间头部的类型 /

18 u8 pcie_type; / PCI-E 设备/端口类型 /

19 u8 rom_base_reg; / 表示PCI配置空间中的ROM基地址寄存器在PCI配置空间中的位置 /

20 u8 pin; / 中断引脚 /

21 struct pci_driver driver; / 指向这个PCI设备所对应的驱动pci_driver结构 */

22 u64 dma_mask; / 该设备支持的总线地址位掩码,通常是0xffffffff /

23 struct device_dma_parameters dma_parms;

24 pci_power_t current_state; / 当前的操作状态 /

25 int pm_cap;

26 unsigned int pme_support:5;

27 unsigned int d1_support:1; / 支持low power状态 D1 ? /

28 unsigned int d2_support:1; / 支持low power状态 D2? /

29 unsigned int no_d1d2:1; / 仅允许D0和D3 ? /

30 pci_channel_state_t error_state;

31 struct device dev; / 通用的设备接口 /

32 int cfg_size; / 配置空间大小 /

33

34 unsigned int irq;

35 struct resource resource[DEVICE_COUNT_RESOURCE];

36 /*表示该设备可能用到的资源,包括:

37 I/O端口区域、设备内存地址区域以及扩展ROM地址区域 */

38

39 unsigned int transparent: 1; / 透明PCI桥 ? /

40 unsigned int multifunction: 1; / 多功能设备 ? /

41 / 跟踪设备状态 /

42 unsigned int is_added:1;

43 unsigned int is_busmaster: 1; / 设备是主设备? /

44 unsigned int no_msi: 1; / 设备可不使用msi? /

45 unsigned int block_ucfg_access:1; / 不允许用户空间访问配置空间 ? /

46 ...

47 u32 saved_config_space[16]; / 挂起时保存的配置空间 /

48 struct bin_attribute rom_attr; / sysfs ROM入口的属性描述 */

49 int rom_attr_enabled;

50 struct bin_attribute res_attr[DEVICE_COUNT_RESOURCE];/资源的sysfs文件*/

51 ...

52 };