PCIe配置空间和PCI设备中的寄存器

1、访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在<linux/pci.h>

int pci_read_config_byte(struct pci_dev *pdev, int where, u8 *val);
int pci_read_config_word(struct pci_dev *pdev, int where, u8 *val);
int pci_read_config_dword(struct pci_dev *pdev, int where, u8 *val);
通过8位、16位或32位的数据传输访问配置空间。
从由pdev标识的设备空间读入一个、两个或四个字节的数据。
参数where是从配置空间起始位置计算的字节偏移量。
从配置空间获得的值通过指针val返回。
函数本身的返回值是错误代码。
int pci_write_config_byte(struct pci_dev *pdev, int where, u8 *val);
int pci_write_config_word(struct pci_dev *pdev, int where, u8 *val);
int pci_write_config_dword(struct pci_dev *pdev, int where, u8 *val);
向由pdev标识的设备配置空间写入一个、两个或四个字节。
where是偏移量
指针val是要写入的值

2、访问PCI设备的IO或内存空间。

     一个PCI设备可实现多达6个IO基地址寄存器,每个寄存器可以是内存地址也可以是IO地址。

     PCI配置空间中的6个基地址寄存器,每个都为32位,它们代表PCI的6个IO区域。在linux内核中,PCI设备的IO区域已被集成到通用资源管理,所以要想获得PCI设备的基地址在存储器域的物理地址,要通过下面的函数:

unsigned long pci_resource_start(struct pci_dev *pdev, int bar);
该函数返回6个PCI IO区域中的第bar个的基地址值(存储器域的物理地址)。bar代表基地址寄存器(base address register),取值为0到5.

unsigned long pci_resource_start(struct pci_dev *pdev, int bar);
该函数返回6个PCI IO区域中的第bar个的尾地址值(存储器域的物理地址)。bar代表基地址寄存器(base address register),取值为0到5.
// 将存储器域的物理地址映射为虚拟地址;
// mem = ioremap(phymem, pci_resource_len(pdev, 0));
void *ioremap(unsigned long phys_addr, unsigned long size)
3、PCI基本配置空间


这样就可以完成配置空间的访问,而且通过PCI配置空间中的6个基地址寄存器,我们可以在CPU侧通过MEM读写访问PCIE设备。

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PCIe配置空间寄存器PCI Express总线设备的一种特殊类型的寄存器,用于配置和管理设备的功能和属性。每个PCIe设备都有一个配置空间,该空间包含了设备配置信息和功能寄存器,这些信息和寄存器可以被系统软件读取和写入,用于进行设备的初始化和控制。 配置空间寄存器使用了标准的PCI配置空间寄存器格式,包括设备ID、供应商ID、命令和状态寄存器等。通过读取和设置这些寄存器的值,系统软件可以访问和控制PCIe设备的各种功能。 配置空间寄存器的结构和布局是由PCIe规范定义的,包含了设备的通用配置数据、功能寄存器和扩展配置区域。其通用配置数据包括了设备的基本信息,如设备类型、供应商标识、设备标识等。功能寄存器用于控制和管理设备的功能,如启用或禁用设备、设置断和总线驱动程序等。扩展配置区域用于存储设备特定的配置信息,各个设备的扩展配置区域的结构和内容是不同的,由设备厂商自行定义。 系统软件可以通过访问PCIe配置空间寄存器来获取设备配置信息,如设备名称、设备类型、硬件ID等,还可以进行设备的初始化和配置,如设定断线路、分配资源等。一般情况下,操作系统和驱动程序会使用配置空间寄存器来与PCIe设备进行通信和管理,以实现设备的正常工作和使用。 总之,PCIe配置空间寄存器PCI Express总线设备用于配置和管理设备的一种寄存器,通过读取和设置其的值,系统软件可以访问和控制设备的各种功能。这些配置空间寄存器的结构和布局是由PCIe规范定义的,不同设备配置信息和功能也各不相同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值