PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)

1.1.1    PF MSI-X Capability RegisterDetails

MSI-XCapability作为是一种可选的capability,与MSIcapability一样都是中断控制的capability,但是MSI-X要比MSI复杂,对于某个具体的PCIe设备,仅支持一种报文,虽然两种capability可以存在同一个链表中,但是两者仅有一个可以使能。MSI-XCapability中断机制与MSI Capability的中断机制类似。PCIe总线引出MSI-X机制的主要目的是为了扩展PCIe设备使用中断向量的个数,同时解决MSI中断机制要求使用中断向量号连续所带来的问题。MSI中断机制最多只能使用32个中断向量,而MSI-X可以使用更多的中断向量。

Byte Offset

Byte 3

Byte 2

Byte 1

Byte 0

 

MSI-X Control Register

Next Capability

Pointer

Capability ID (0x11)

+0x4

MSI-X Table Offset (31:3) and BIR (2:0)

+0x8

MSI-X PBA Offset (31:3) and BIR (2:0)

PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第1张图片PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第2张图片PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第3张图片PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第4张图片

一下内容来自王齐老师的博客:

MSI-X Capability中断机制与MSI Capability的中断机制类似。PCIe总线引出MSI-X机制的主要目的是为了扩展PCIe设备使用中断向量的个数,同时解决MSI中断机制要求使用中断向量号连续所带来的问题。

MSI中断机制最多只能使用32个中断向量,而MSI-X可以使用更多的中断向量。目前Intel的许多PCIe设备支持MSI-X中断机制。与MSI中断机制相比,MSI-X机制更为合理。首先MSI-X可以支持更多的中断请求,但是这并不是引入MSI-X中断机制最重要的原因。因为对于多数PCIe设备,32种中断请求已经足够了。而引入MSI-X中断机制的主要原因是,使用该机制不需要中断控制器分配给该设备的中断向量号连续。

如果一个PCIe设备需要使用8个中断请求时,如果使用MSI机制时,MessageData[2:0]字段可以为0b000~0b111,因此可以发送8种中断请求,但是这8种中断请求的Message Data字段必须连续。在许多中断控制器中,Message Data字段连续也意味着中断控制器需要为这个PCIe设备分配8个连续的中断向量号。

有时在一个中断控制器中,虽然具有8个以上的中断向量号,但是很难保证这些中断向量号是连续的。因此中断控制器将无法为这些PCIe设备分配足够的中断请求,此时该设备的“Multiple Message Enable”字段将小于“Multiple MessageCapable”。

而使用MSI-X机制可以合理解决该问题。在MSI-X Capability结构中,每一个中断请求都使用独立的Message Address字段和Message Data字段,从而中断控制器可以更加合理地为该设备分配中断资源。

MSI Capability寄存器相比,MSI-X Capability寄存器使用一个数组存放Message Address字段和Message Data字段,而不是将这两个字段放入Capability寄存器中,本篇将这个数组称为MSI-X Table。从而当PCIe设备使用MSI-X机制时,每一个中断请求可以使用独立的Message Address字段和Message Data字段。

除此之外MSI-X中断机制还使用了独立的Pending Table表,该表用来存放与每一个中断向量对应的Pending位。这个Pending位的定义与MSICapability寄存器的Pending位类似。MSI-X TablePending Table存放在PCIe设备的BAR空间中。MSI-X机制必须支持这个Pending Table,而MSI机制的Pending Bits字段是可选的。

1 MSI-XCapability结构

MSI-X Capability结构比MSI Capability结构略微复杂一些。在该结构中,使用MSI-X Table存放该设备使用的所有Message AddressMessage Data字段,这个表格存放在该设备的BAR空间中,从而PCIe设备可以使用MSI-X机制时,中断向量号可以并不连续,也可以申请更多的中断向量号。MSI-X Capability结构的组成方式如图6‑2所示。

PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第5张图片

上图中各字段的含义如下所示。

·        Capability ID字段记载MSI-X Capability结构的ID号,其值为0x11。在PCIe设备中,每一个Capability都有唯一的一个ID号。

·        Next Pointer字段存放下一个Capability结构的地址。

·        Message Control字段,该字段存放当前PCIe设备使用MSI-X机制进行中断请求的状态与控制信息,如表6‑2所示。


·        Table BIR(BAR Indicator Register)。该字段存放MSI-XTable所在的位置,PCIe总线规范规定MSI-XTable存放在设备的BAR空间中。该字段表示设备使用BAR0~5寄存器中的哪个空间存放MSI-X table。该字段由三位组成,其中0b000~0b101BAR0~5空间一一对应。

·        Table Offset字段。该字段存放MSI-X Table在相应BAR空间中的偏移。

·        PBA(Pending Bit Array) BIR字段。该字段存放Pending TablePCIe设备的哪个BAR空间中。在通常情况下,Pending TableMSI-X Table存放在PCIe设备的同一个BAR空间中。

·        PBA Offset字段。该字段存放Pending Table在相应BAR空间中的偏移。

2 MSI-X TablePCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第6张图片

MSI-X Table的组成结构如图6‑3所示。

PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第7张图片

由上图可见,MSI-X Table由多个Entry组成,其中每个Entry与一个中断请求对应。其中每一个Entry中有四个参数,其含义如下所示。

·        Msg Addr。当MSI-X Enable位有效时,该字段存放MSI-X存储器写事务的目的地址的低32位。该双字的31:2字段有效,系统软件可读写;1:0字段复位时为0PCIe设备可以根据需要将这个字段设为只读,或者可读写。不同的处理器填入该寄存器的数据并不相同。

·        Msg Upper Addr,该字段可读写,存放MSI-X存储器写事务的目的地址的高32位。

·        Msg Data,该字段可读写,存放MSI-X报文使用的数据。其定义与处理器系统使用的中断控制器和PCIe设备相关。

·        Vector Control,该字段可读写。该字段只有第0(Per Vector Mask)有效,其他位保留。当该位为1时,PCIe设备不能使用该Entry提交中断请求;为0时可以提交中断请求。该位在复位时为0Per Vector Mask位的使用方法与MSI机制的Mask位类似。

3 PendingTable

Pending Table的组成结构如图6‑4所示。

PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)_第8张图片

如上图所示,在Pending Table中,一个Entry64位组成,其中每一位与MSI-X Table中的一个Entry对应,即PendingTable中的每一个EntryMSI-XTable64Entry对应。与MSI机制类似,Pending位需要与Per Vector Mask位配置使用。

Per Vector Mask位为1时,PCIe设备不能立即发送MSI-X中断请求,而是将对应的Pending位置1;当系统软件将Per Vector Mask位清零时,PCIe设备需要提交MSI-X中断请求,同时将Pending位清零。





你可能感兴趣的:(PCIe)