linux 中 PCIE 中断映射机制
创始人
2024-05-12 18:03:11
0

PCIE 中断映射机制

1、 PCIE 中有三种中断方式, MSI,MSI-X 和INTx

PCIe总线继承了PCI总线的所有中断特性(包括INTx和MSI/MSI-X),以兼容早期的一些PCI应用层软件。

PCI总线最早采用的中断机制是INTx,这是基于边带信号的。

后续的PCI/PCI-X版本,为了消除边带信号,降低系统的硬件设计复杂度,逐渐采用了MSI/MSI-X(消息信号中断)的中断机制。

需要注意的是PCIE 继承了INTx 中断,并没有采用边带信号,而是用了Message TLP 的方式

另外一点, PCI规范中MSI和MSI-X都是可选的功能。但从PCIe规范开始,要求PCIe设备必须支持64位的MSI或者MSI-X。尽管1个PCIe设备可能同时支持Virtual INTx#/MSI/MSI-X,系统软件必须只Enable其中一种中断机制。

在这里插入图片描述

INTx 中断:

INTx一般被称为传统的(Legacy)PCI中断机制,每个PCI设备最多支持四个中断信号(边带信号,INTA#、INTB#、INTC#和INTD#)
在这里插入图片描述
PCIE 中使用Message 来实现INTx 中断, 具体实现如下(Assert_INTx消息表示INTx信号的下降沿。Dessert_INTx消息表示INTx信号的上升沿):

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

从协议分析以上可以看到, 由于INTA 是电平信号,所有用Assert_INTA Msg 和Deassert_INTA Msg 来表示, 两个Msg之间的时间,对应的就是INTA 的电平长度
在这里插入图片描述

MSI 中断:

MSI 中断并不是Message TLP, 而是Memory Write TLP 。
MSI capability 的结构体,在configure space 中格式如下, 其中Capability ID 0x05h 表示是MSI capability:
在这里插入图片描述

这边需要讲一下MSI (Memory Write) TLP 是由EP 发给RC 的,RC 向EP 的configure space中,填写 MSI capability 中的Message Address和Message Data。

EP 获取configure space 中的MSI capability 中的Message Address和Message Data, 将这个信息填充到MSI Memory Write TLP 中, 产生中断后,发给RC。

在这里插入图片描述
注: 在x86 架构中, 0xFEExxxxx 的地址APIC (Advanced Programmable Interrupt Controller高级可编程中断控制器) 的地址, EP 会将MSI 的MWr TLP 发给它,由它向x86 上报中断。

下面给出了MSI 的例子,MSI capability Structure 如下, Message address 为0xBF376000, Message data 为0x01
在这里插入图片描述

发送MSI Mwr TLP, 会获取MSI capability Structure中的地址和data, 然后发给host, 具体如下:
在这里插入图片描述

MSI-X 中断:

1)为什么需要MSI-X中断

一、MSI最大只支持32个中断,在很多应用中32个中断是不够的,因此引进了MSI-X, MSI-X 最大支持2048个中断可以满足各种应用的需求。

二、MSI机制下每个PCI Function的所有中断向量都共用1个Message Address,无法将其分配到不同CPU以实现中断服务在CPU间均衡分配

三、MSI机制下每个PCI Function的所有中断向量都是连续的,在某些平台连续的中断向量意味着同样的中断优先级,无法满足区分中断优先级的需求

在这里插入图片描述

Table BIR(BAR Indicator Register)
基地址指示寄存器,该字段存放MSI-X Table所在的位置,PCIe总线规定,MSI-X Table存放在BAR空间中,该寄存器指示使用BAR0~BAR5寄存器中的哪个空间存放MSI-X Table,该字段由3位构成,3’b000 ~ 3’b101分别对应BAR0 ~ BAR5。

在这里插入图片描述
Pending Table

在Pending Table中,一个Entry由64位组成,其中每一位与MSI-X Table中的一个Entry对应,即Pending Table中的每一个Entry与MSI-X Table的64个Entry对应。与MSI机制类似,Pending位需要与Per Vector Mask位配置使用。

当Per Vector Mask位为1时,PCIe设备不能立即发送MSI-X中断请求,而是将对应的Pending位置1;当系统软件将Per Vector Mask位清零时,PCIe设备需要提交MSI-X中断请求,同时将Pending位清零。
在这里插入图片描述
具体例子如下: 从device config spec 可以找到MSI-X Capability structure
在这里插入图片描述

以NVME 为例,更新MSI-X Table Entries:
配置Address (0x00000000 BF37c000) 和 Message Data (0x00000001), 设置Vector Control 的中断Mask bit(bit 0),所以就是4个Dword
配置Address (0x00000000 BF37c000) 和 Message Data (0x00000002), 没有设置Vector Control 的中断Mask bit,所以就是3个Dword
在这里插入图片描述

发送MSI-X 的MWr TLP, 向地址0xBF37c000 发送data 是0x2的中断
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...