PCI规范学习笔记(2)
来源:互联网 发布:e海通财交易软件 编辑:程序博客网 时间:2024/06/02 11:11
那天和一个朋友讨论了一下MSI/MSIX方面的问题,下面是对讨论内容的整理:
1.MSI-X Table和PBA结构太大,MSIX Capability又只能放到配置空间64-255这个区域,所以只能把Table和PBA放到设备内存空间了。MSIX Capability存着BAR的编号和偏移量来从配置空间索引Table和PBA。
2.MSI capability里“消息地址”字段在PCI规范里没有格式定义,这是因为PCI规范需要支持多种平台。在x86上和在SPARC上,消息地址的定义是不同的。
3. x86上MSI”消息地址“(64或32位)在Intel 系统编程卷里定义,Solaris是用本地APIC的基地址0xfee00000按位或8位目标处理器ID再或1位RH(取值0),或1位DM(取值0),得到的地址就是设备发中断用的内存地址。
4. x86上MSI“消息数据”(16位)的定义比较简单, Solaris使用边缘触发方式,投递模式是固定,最后低8位是中断向量地址。 关于“消息地址”和“消息数据”,Solaris请参考apic_pci_msi_enable_vector。
5. 需要注意的是,MSI“消息数据"的低3位是要根据MSI控制寄存器的Multiple Message Enable位来由设备动态修改的,所以一个”消息数据“寄存器可以被最多32个向量共用。
6. MSI capability里支持最多32个向量,但由于这32个向量共享一个“消息地址”。而在x86上,这个"消息地址"用来决定发送到哪一个CPU的本地APIC,所以32个向量只能绑定在同一个CPU了。
7. MSIX capability指向了Table和PBA表在哪一个BAR对应的内存空间里。Table里包含了“消息地址”和”消息数据“, x86下格式和MSI的完全一样。PBA指示了是否有待处理的中断消息。
8. 一个设备理论上最多分配32个MSI中断, 向量数大于1时,需要分配连续相邻的向量,这是MSIcapability里”消息数据“和”Multiple MessageEnable“的定义决定的。Solaris可参考apic_alloc_msi_vectors的实现。
9. 一个设备理论上最多可以分配2K个MSIX中断, 而且每个中断向量可以是不连续的, 因为Table的大小是11位二进制表示的, 其中每个表项都有独立的”消息地址“和“消息数据”。Solaris可参考apic_alloc_msix_vectors。
10. 因为每个向量对应独立的“消息地址”和“消息数据”, MSIX可以让一个设备多至2K个中断独立的绑定在不同的CPU上,CPU足够多的时候它们互相不影响,所以Intel的SRIOV 1/10G卡的VF都只支持MSIX而不是MSI。
- PCI规范学习笔记(2)
- PCI规范学习笔记
- PCI规范学习笔记(1)
- PCI规范学习笔记,转载的
- PCI学习笔记(zz)
- PCIe学习笔记(2)---PCI-x相关
- LDD3学习笔记(15):PCI驱动
- PCI总线学习笔记(一)
- PCIe学习笔记(1)---PCI相关
- PCI 学习笔记
- pci 学习笔记
- PCI 总线学习笔记
- pci设备学习笔记
- pci规范
- PCI规范
- PCI 总线学习笔记-PCI9054
- ACPI & PCI 学习笔记 1
- JAVA语言规范学习笔记(2)
- const TYPE *pPointer、TYPE * cosnt pPointer使用举例
- java图片验证码
- Aix 常用指令
- 中国没有Google,国民将会怎样?
- 争当掏粪工的姑娘
- PCI规范学习笔记(2)
- 怎样实现QT3控件的背景为透明?
- DDE中LinkTopic的设置
- 文件查找(CFileFind)
- 收集到的java 正则验证 源码
- 男人的责任 【转】
- FTPClient中 retrieveFileStream 的用法
- 快速种植系统叠进程序
- 男的那点事