PCIE MSI-X Capability

news/2024/11/23 2:15:47/

每一个 Capability 结构都有唯一的ID 号,每一个Capability 寄存器都有一个指针,这个指针指向下一个Capability 结构,从而组成一个单向链表结构,这个链表的最后一个Capability 结构的指针为0。链表开始的指针地址为0x34处的1byte数值,寻址过程如下。

pci_find_capability() 断定一个设备是否支持给定PCI权能,返回在设备PCI配置空间内所请求权能结构的地址,如果设备不支持这种权能,则返回0;

PCIE的MSI-X相关信息存在两个地方,一个是PCIE Capability中,存放MSI-X基本信息,主要包含MSI-X Table所在BAR地址相关信息(访问的MSI-X Table关键),另外一个是MSI-X Table,存放在bar空间中,标识中断的msg addr及对应的msg data(即中断vector)。

 MSI-X Capability结构,此结构在PCIe设备配置空间偏移0xB0的位置处,MSI-X中断表不在Capability中,存在bar中,通过table offset和table bir定位。

/* MSI-X registers */                                                                                                                                                          
#define PCI_MSIX_FLAGS          		 2
#define  PCI_MSIX_FLAGS_QSIZE  		 0x7FF
#define  PCI_MSIX_FLAGS_ENABLE  	 (1 << 15)
#define  PCI_MSIX_FLAGS_MASKALL	 (1 << 14)
#define PCI_MSIX_TABLE          		  4 
#define PCI_MSIX_PBA              		  8
#define  PCI_MSIX_FLAGS_BIRMASK 	  (7 << 0)   // LOW 3 bitsvfio_early_setup_msix {pos = pci_find_capability(&vdev->pdev, PCI_CAP_ID_MSIX);                                                                                                                   if (!pos) {                                                                                                                                                                return 0;                                                                                                                                                              }                                                                                                                                                                          table = pci_get_long(vdev->pdev.config + pos + PCI_MSIX_TABLE);  //   获取 MSI-X table(偏移 4 字节)                                                                                                        pba = pci_get_long(vdev->pdev.config + pos + PCI_MSIX_PBA);                                                                                                                ctrl = pci_get_word(vdev->pdev.config + pos + PCI_CAP_FLAGS);                                                                                                              vdev->msix = g_malloc0(sizeof(*(vdev->msix)));                                                                                                                             vdev->msix->table_bar = table & PCI_MSIX_FLAGS_BIRMASK;   // 获取 msi-x table 所在的bar                                                                                                                  vdev->msix->table_offset = table & ~PCI_MSIX_FLAGS_BIRMASK;                                                                                                                vdev->msix->pba_bar = pba & PCI_MSIX_FLAGS_BIRMASK;                                                                                                                        vdev->msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK;                                                                                                                    vdev->msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1; 
}

lspci查看当前pcie的msi-x capability

参考

PCIe MSI-X 中断编程 - 知乎


http://www.ppmy.cn/news/393217.html

相关文章

佳能桌面计算机,带你装Bee带你飞:Canon 佳能 X Mark I Keypad BT 计算器

带你装Bee带你飞&#xff1a;Canon 佳能 X Mark I Keypad BT 计算器 2014-12-30 10:19:14 37点赞 93收藏 91评论 亲爱的张大妈家属大家好&#xff5e;好久不见还有人记得我吗&#xff5e;最近因为保手所以在张大妈隐匿了一段时间&#xff5e;之前在本站见到有人晒了Canon X Mar…

基于Spring Boot 3.X + Vue3 开发的宇宙任务清单

宇宙任务清单是一个融合了Spring Boot和Vue 3的任务管理系统。该系统为规划、跟踪和管理任务提供了一个功能强大且易于使用的平台。通过利用Spring Boot作为后端框架,宇宙任务清单能够有效地处理任务的数据存储和业务逻辑。同时,采用Vue 3作为前端框架,宇宙任务清单为用户提…

骨传导耳机排名前十名,双十一数码耳机购买清单

骨传导耳机哪个最好用&#xff0c;相信这是很多人在问的一个事情&#xff0c;下面我就分享几款我认为较为好用的骨传导耳机给大家&#xff0c;看看这些耳机有没有你喜欢的吧~这些耳机在音质、佩戴舒适度、续航时间、防水能力上都是很不错的~ 一、南卡Runner Pro4骨传导蓝牙耳机…

发烧级蓝牙耳机哪款音质最好?200元内性价比高的蓝牙耳机

废话不多说&#xff0c;接下来我将给大家罗列一下目前无线耳机市场综合性价比最高的几款产品&#xff0c;分享给正在为选择什么蓝牙耳机好而烦恼的朋友&#xff0c;本文推荐的这些机型&#xff0c;大家只需要考虑好价格和特色&#xff0c;闭着眼买都不会出错。 推荐一&#xf…

高并发架构设计方法

我们知道&#xff0c;“高并发”是现在系统架构设计的核心关键词。一个架构师如果设计、开发的系统不支持高并发&#xff0c;那简直不好意思跟同行讨论。但事实上&#xff0c;在架构设计领域&#xff0c;高并发的历史非常短暂&#xff0c;这一架构特性是随着互联网&#xff0c;…

哪一款蓝牙耳机音质最好?2023发烧级音质蓝牙耳机推荐

自从苹果取消3.5mm耳机孔后&#xff0c;蓝牙耳机便算是真正地进入人们的日常生活&#xff0c;现如今蓝牙耳机的使用频率已然超过有线耳机&#xff0c;并逐渐占据了市场的主导地位。随着蓝牙耳机越来越多&#xff0c;哪一款蓝牙耳机音质最好&#xff1f;今天&#xff0c;我来给大…

⑨电子产品拆解分析-触摸化妆镜

⑨电子产品拆解分析-触摸化妆镜 一、功能介绍二、电路分析以及器件作用1、电源部分2、触摸部分3、灯光控制部分三、数据手册以及其它资料1、注意点2、数据手册汇总一、功能介绍 ①短按白光、暖光、冷光三档色温切换;②长按支持无极调光;③三档调亮度关机记忆当前亮度功能;二…

学生成绩管理系统(逻辑清楚-简单实用)

1、需求分析 1.1、需求分析概述 需求分析是我们在软件开发中的重要环节&#xff0c;是软件开发的第一步也是最基础的环节&#xff0c;这将决定我们所实现的目标以及系统的各个组成部分、各部分的任务职能、以及使用到的数据结构、各个部门之间的组成关系和数据流程&#xff0…