LDD3学习笔记(15):PCI驱动-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

LDD3学习笔记(15):PCI驱动

简介:  #include  包含 PCI 寄存器的符号名和几个供应商和设备 ID 值的头文件. struct pci_dev; 表示内核中一个 PCI 设备的结构.
 #include <linux/pci.h>

包含 PCI 寄存器的符号名和几个供应商和设备 ID 值的头文件.

struct pci_dev;

表示内核中一个 PCI 设备的结构.

struct pci_driver;

代表一个 PCI 驱动的结构所有的 PCI 驱动必须定义这个.

struct pci_device_id;

描述这个驱动支持的 PCI 设备类型的结构.

int pci_register_driver(struct pci_driver *drv);

int pci_module_init(struct pci_driver *drv);

void pci_unregister_driver(struct pci_driver *drv);

从内核注册或注销一个 PCI 驱动的函数.

struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, struct pci_dev *from);

struct pci_dev *pci_find_device_reverse(unsigned int vendor, unsigned int device, const struct pci_dev 

*from);

struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device, unsigned int ss_vendor, unsigned 

int ss_device, const struct pci_dev *from);

struct pci_dev *pci_find_class(unsigned int class, struct pci_dev *from);

在设备列表中搜寻带有一个特定签名的设备或者属于一个特定类的返回值是 NULL 如果

没找到. from 用来继续一个搜索在你第一次调用任一个函数时它必须是 NULL, 并且它必须

指向刚刚找到的设备如果你寻找更多的设备这些函数不推荐使用用 pci_get_ 变体来代替.

struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, struct pci_dev *from);

struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device, unsigned int ss_vendor, unsigned 

int ss_device, struct pci_dev *from);

struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);

在设备列表中搜索一个特定签名的设备或者属于一个特定类返回值是 NULL 如果没找到

from 用来继续一个搜索在你第一次调用任一个函数时它必须是 NULL, 并且它必须指向刚

刚找到的设备如果你寻找更多的设备返回的结构使它的引用计数递增并且在调用者完成

函数 pci_dev_put 必须被调用.

int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);

int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);

int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);

int pci_write_config_byte (struct pci_dev *dev, int where, u8 *val);

int pci_write_config_word (struct pci_dev *dev, int where, u16 *val);

int pci_write_config_dword (struct pci_dev *dev, int where, u32 *val);

读或写 PCI 配置寄存器的函数尽管 Linux 内核负责字节序程序员必须小心字节序当从单

个字节组合多字节值时. PCI 总线是小端.

int pci_enable_device(struct pci_dev *dev);

使能一个 PCI 设备.

unsigned long pci_resource_start(struct pci_dev *dev, int bar);

unsigned long pci_resource_end(struct pci_dev *dev, int bar);

unsigned long pci_resource_flags(struct pci_dev *dev, int bar);

处理 PCI 设备资源的函数.

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章