Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305152
  • 博文数量: 65
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 609
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-06 21:41
个人简介

好好学习,天天向上

文章分类

全部博文(65)

文章存档

2022年(3)

2021年(25)

2020年(1)

2019年(3)

2016年(2)

2015年(3)

2014年(14)

2013年(7)

2012年(7)

我的朋友

分类: 嵌入式

2021-07-19 20:32:54


MSI-X和MSI最大的不同是message data、message address字段和status字段没有存放在设备的配置空间中,而是使用MSI-X Table structure和MSI-X PBA structure来存放这些字段。

msi的中断分配应该是先在linux内核里面分配了irq hwirq, 根据irq assign vector等,然后把vector写入到msix talbe的msg data字段,然后消息就和irq号关联起来了

1、 msi就是通过往中断控制器可以写内存产生中断的地方(中断控制器触发寄存器)写入了一条消息,就产生了中断
(中断控制器触发寄存器)的地址会写在msix Table的entry的Msg Upper Addr+Msg Addr里面(32位就不用用Upper Addr)  
        特定架构格式的data就写入到msix Table的entry的Msg data里面,例如x86写入的verctor arm64写的devid
     irq_msi_compose_msg


2、msi中断的硬件中断号是构造出来的,使用index,pci总线号,fuction号等相或构造出来。所以一般看起来很大


3、msix Table的entry的Vector Control字段存放的是控制字段,当Mask Bit为1时,PCIe设备不能使用该MSI-X table entry来发送中断消息


4、存放在BAR空间PBA structure   跟msix table类似,这个存放的是中断状态
阅读(1617) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~