LDD3学习笔记(15):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 设备资源的函数.

你可能感兴趣的:(LDD3学习笔记(15):PCI驱动)