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

目录
相关文章
|
16天前
NUC980修改内核支持spi-nand
NUC980修改内核支持spi-nand
9 2
|
4月前
|
Linux
Imx6ull 开发板通过Uboot使用网络启动系统
Imx6ull 开发板通过Uboot使用网络启动系统
97 0
SPI设备标准驱动源码分析(linux kernel 5.18)
SPI设备标准驱动源码分析(linux kernel 5.18)
SPI设备标准驱动源码分析(linux kernel 5.18)
|
Ubuntu Linux 开发工具
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动
243 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动(下)
|
Ubuntu Linux 数据安全/隐私保护
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动
293 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(八)IMX6ULL开发板编译第一个程序以及驱动(上)
|
开发框架 Linux
Linux设备树系列-GPIO驱动实践
Linux设备树系列-GPIO驱动实践
1429 0
|
Linux 芯片
linux PHY驱动
本文参考3.17版本的内核,结合TI的cpsw驱动(但去掉cpsw大部分代码,保留phy相关的),追踪一下通用PHY驱动。文中使用函数及主要功能语句的形式给出调用过程。