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 设备资源的函数.

目录
相关文章
|
Linux 测试技术 调度
Linux 驱动之gpio-key驱动分析
Linux内核中的gpio-keys.c(driver/input/keyboard/gpio-keys.c)统一了所有关于按键的驱动实现方式。其良好的代码架构可以兼容几乎所有平台的关于按键的处理流程。如果需要在目标平台实现关于按键的驱动程序,完全可以直接使用该驱动,几乎不用自己实现任何代码。
1273 0
|
15天前
NUC980修改内核支持spi-nand
NUC980修改内核支持spi-nand
9 2
|
12月前
|
Linux 芯片
Linux驱动分析之MMC Host驱动
前面聊了MMC子系统《[Linux驱动分析之MMC子系统框架》,接下来我们拿个MMC Host驱动分析一下,来看看大致流程是怎样的。文章很长,代码很多,看个流程即可。
SPI设备标准驱动源码分析(linux kernel 5.18)
SPI设备标准驱动源码分析(linux kernel 5.18)
SPI设备标准驱动源码分析(linux kernel 5.18)
|
Linux 存储控制器 芯片
ZYNQ-ZedBoard设置Quad-SPI启动和SD驱动
ZYNQ-ZedBoard设置Quad-SPI启动和SD驱动
353 0
ZYNQ-ZedBoard设置Quad-SPI启动和SD驱动
|
Linux 芯片
linux PHY驱动
本文参考3.17版本的内核,结合TI的cpsw驱动(但去掉cpsw大部分代码,保留phy相关的),追踪一下通用PHY驱动。文中使用函数及主要功能语句的形式给出调用过程。