当前位置: 首页 > web >正文

【PCIE配置空间】

1 PCIE配置空间

1.1 软件如何知道PCIE设备是Swith,RC还是EP?

–软件通过读取寄存器信息。

PCIE配置空间• PCIE寄存器;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现;--Type1配置空间RC/Switch设备必须实现;• PCIE配置空间具体大小 --1DW = 4Byte 

图–:
在这里插入图片描述

		• PCIE每个设备都有4KB的配置空间• 4KB配置空间前64DW(即256Byte)与PCI兼容保持一致;• 960DW为PCIE扩展寄存器空间;

PCIE兼容配置空间:

	1.PCIE兼容配置空间包含PCI Header--64Byte空间和Capability--192Byte空间;2.Header空间分为Type0和Type1两种:Type0配置空间EP设备必须实现;Type1配置空间RC/Switch设备必须实现;3.Capalitiy空间--以链表形式组织的扩展功能寄存器:能力寄存器空间,实现可选择实现的寄存器;但如下寄存器必须实现:PCIE Capality; Power Management; MSI/MSIX;4.能力寄存器采用链表结构;```c//==这是从0到大进行排列;Offset 0x40: | Cap ID (8b) | Next Ptr (8b) | Cap Data (16b) |  → 4字节对齐Offset 0x80: | Cap ID (8b) | Next Ptr (8b) | Cap Data (16b) |  → 下一个对齐项```ID:表示能力A寄存器的类型<什么寄存器>;Pointer表示下一个能力寄存器地址B_addr;其图如下所示:

在这里插入图片描述

例如:PCIE能力寄存器中的PM/MSI寄存器,软件如何进行获取呢?

		Steps:1.系统软件发起addr:0x34的读请求,访问PCI header Capalibity point寄存器(起始是固定的);2.系统软件读取addr:0x34 pointer:0x40,返回结果表示PCIE下一组寄存器的地址为0x40;3.系统软件发起addr:0x40的读请求;4.系统软件读取:addr:0x40, data:{0x50,0x1};ID:0x1表示类型为PM寄存器;Next Pointer: 0x50表示访问下一个能力寄存器的地址位0x50;5.系统软件再进一步读取0x50地址,读取数据{0x70,0x05};ID:0x5表示位MS寄存器;NextPointer: 0x70表示访问下一个能力寄存器的地址为0x70;6.通过查手册可知:取addr:0x54,0x55,0x56分别配置MSI中断地址和数据;0x54:表示Message lower address;  0x58: Message upper address;0xC0:表示Message data;

步骤图如下:
在这里插入图片描述

	 小结:链表是单链表结构,就是软件的数据结构,只能进行便来访问,不能通过index索引来访问;
http://www.xdnf.cn/news/446.html

相关文章:

  • 【FFmpeg从入门到精通】第三章-FFmpeg转封装
  • Android TTY设备调用流程和简单分析
  • verilog float mult
  • 九方前端面试
  • Kubernetes控制平面组件:API Server详解(二)
  • TDOA解算——牛顿迭代法|以4个基站的三维空间下TDOA定位为背景,使用牛顿迭代法解算。附完整代码,订阅专栏后可复制粘贴
  • 前端面试宝典---参数解构+默认值的面试题
  • 2025.04.19【Spider】| 蜘蛛图绘制技巧精解
  • 杨校老师课堂之C++入门练习题梳理
  • 大数据建模与评估
  • 【技术派后端篇】技术派中的白名单机制:基于Redis的Set实现
  • 备份jenkins
  • mysql控制单表数据存储及单实例表创建
  • MCP是什么?为什么突然那么火?
  • Ubuntu开启自启动PostgreSQL读取HDD失败处理思路
  • 动态规划经典例题:最长单调递增子序列、完全背包、二维背包、数字三角形硬币找零
  • Linux Privilege Escalation: LD_PRELOAD
  • 实战设计模式之备忘录模式
  • Python爬虫实战:获取B站查询数据
  • 【T型三电平仿真】SVPWM调制
  • stack和queue的使用和模拟实现
  • 【Linux】线程ID、线程管理、与线程互斥
  • 【Hot100】 73. 矩阵置零
  • 红帽RHEL与国产Linux系统对比:技术、生态与自主可控的博弈
  • 深入理解 Java 多线程:锁策略与线程安全
  • uniapp-x 二维码生成
  • AI速读 Seed-Thinking-v1.5:大模型推理的新飞跃
  • 从零开始学A2A五:A2A 协议的安全性与多模态支持
  • 利用 Deepseek 和 Mermaid 画流程图
  • Linux教程-常用命令系列二