linux驱动 pcie 框架_【linux驱动】pcie驱动入门

本文介绍了PCIe的拓扑结构,包括Host/PCI桥、PCI/ISA桥和PCI-to-PCI桥。讲解了PCIe的三种地址空间:配置空间、内存地址空间和IO空间。详细阐述了配置寄存器的结构和作用,如Device ID、Vendor ID、Class Code等。同时,展示了Linux内核API如何读写PCI设备配置寄存器,并提供了PCI设备驱动的基本步骤和示例代码。
摘要由CSDN通过智能技术生成

pcie总线向下兼容pci总线,文中所述pci默认等于pcie

pcie拓扑结构

pcie拓扑主要由总线、桥和设备卡组成,桥将父总线与子总线连接在一起形成树型结构。桥主要分为一下三类:

Host/PCI桥:用于连接CPU与PCI根总线,在PC中,内存控制器也通常被集成到Host/PCI桥设备芯片,Host/PCI桥通常被称 为“北桥芯片组”。PCI/ISA桥:用于连接旧的ISA总线。PCI/ISA桥也被称为“南桥芯片组”。PCI-to-PCI桥:用于连接PCI主总线与次总线。 pci总线编号采用深度优先(DFS)遍历顺序

pcie地址空间

pcie由三种地址空间,分别是:PCI配置空间、PCI/IO空间和PCI内存地址空间

PCI配置空间 可以理解为pcie设备卡的配置寄存器,这个配置寄存器有一定的规范,pci协议中大小为256字节,pcie协议中可以扩展到4K。其中前64字节是固化在设备中的,不可读写,其他部分可以读写。访问配置寄存器的方法是借助北桥,北桥将0xCF8 ~ 0xCFF的地址用作pci卡配置用。其中向0xCF8 ~ 0xCFC写入要访问的PCI的卡id,id由pic总线编号+设备编号+功能编号+寄存器号组成,具体格式如下图。上一步选中卡和寄存器之后读写0xCFC ~ 0xCFF,北桥会发送配置事务完成寄存器的配置。

PCI内存地址空间 可以理解为pci设备的数据寄存器,设备设计的时候定好的。这段空间记录在了PCI配置空间的前64k信息里面。操作系统只需要吧这段地址映射到内存就可以访问了。

PCI/IO空间 可以理解为pcie设备的可寻址空间,32为的pci总线可寻址空间为4GB,所以PCI内存地址空间不可以大于4GB

pcie配置空间

详细看一下pcie配置寄存器的格式如下图:

Device ID 和 Verdor ID. 厂商分配的,只读。Revision ID. 记录了PCI设备的版本号,只读Class Code. 记录了PCI设备的分类,只读。分为base class code(把设备分为显卡、网卡、PCI桥等设备)、sub class code(进行细分)、interface(定义编程接口) 三个字段。这个寄存器可供系统软件识别当前PCI设备的分类。按类型写驱动就靠这个区分。Header Type. 表示当前配置空间类型,只读。Cache Line Size. HOST处理器使用的Cache行长度,由系统软件设置。(对PCIe无意义Subsystem ID 和 subSystem Vendor ID. 当使用Device ID 和 Vendor ID 无法区分的情况Expansion ROM base address. 记录了ROM程序的基地址。有些PCI设备在处理器还没有运行操作系统之前,就需要完成基本的初始化设置,PCI设备提供了一段ROM程序,处理器在初始化过程中将运行这段ROM程序,初始化这些PCI设备。Capabilities Pointer. 在PCI设备中,寄存器是可选的,在PCI-X和PCIe设备中必须支持。Interrupt Line. 系统软件对PCI设备进行配置的时候写入的,记录当前PCI设备使用的中断向量号,如果不适用8259A中断控制器,这个寄存器没有意义Interrupt Pin.使用那个引脚作为中断,pci一共有4个中断引脚,可以是任意一个Base Address Register 0 ~ 5. 保存PCI设备使用的地址空间的基地址,保存的是该设备在PCI总线域中的地址。

其实配置寄存器分为三种:

PCI Agent 使用的配置空间PCI桥使用的配置空间Cardbus桥片使用的配置空间 上面是Agent的寄存器,下面看一下桥的: PCI桥有两组BAR寄存器,如果PCI桥本身不存在私有寄存器,那么BAR寄存器可以不使用(透明桥),初始化为0.

PCI Bridge 的配置空间相比较 PCI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值