免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8249 | 回复: 8
打印 上一主题 下一主题

BIOS是如何分配IRQ给PCI设备的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-30 01:44 |只看该作者 |倒序浏览
PCI设备的IRQ是由BIOS分配的。如果是板载的PCI设备,那么BIOS就知道相关的信息比较容易分配。
问题是如果是一个外置的设备(网卡等)怎么分配呢?
我们以一个板上有4个SLOT为例,在PIC模式下,有一个PCI IRQ ROUTER是和PIC连在一起,而SLOT是和ROUTER连在一起的,如果一块网卡插到了SLOT1里面,并且该网卡的INTA#PIN脚有效,假设该SLOT得INTA#是连接在ROUTER的LINKA上面,而LINKA最终是和IRQ9连接的,这样我们就知道了BIOS分配给该网卡的IRQ为9.问题是我们是知道该网卡插在SLOT1上面,那么BIOS是怎么知道SLOT1上面有网卡插在上面,假设如果有多个SLOT都插了不同的网卡,那么BIOS又是如何区分这些网卡?
我个人的理解是:应该能从硬件的电路上知道哪个SLOT上有设备插上去。然后BIOS也知道该SLOT的BDF(BIOS能知道吗?),然后就可以通过该BDF来获得相应的网卡的信息(如PIN),同时BIOS也知道该BDF的INTA#,INTB#,INTC#,INTD#连接到ROUTER的哪个link上面,这样就可以获得IRQ了?
不知道我的理解有没有问题,希望知道的人来给指点下

论坛徽章:
0
2 [报告]
发表于 2009-06-01 15:17 |只看该作者

回复 #1 fido_zy 的帖子

我试着回答一下,大家帮忙指正。
BIOS的运行过程中会根据深度优先原则扫描所有的PCI设备,包括PCIE设备,扫描的时候,BIOS会假设正在扫描的slot上有设备,就给这个设备临时分配一个BDF,然后读pci配置空间里的某一个寄存器(具体是哪个我忘记了),如果返回的不是0xFF,说明该槽位上有设备,同时会给这个device分配确定的BDF和IRQ。

论坛徽章:
0
3 [报告]
发表于 2009-06-01 18:45 |只看该作者

回复 #2 sam58123 的帖子

你说的这个我知道,关键我没有像明白的是bios是怎么给这个device分配对应的IRQ呢?
我们可以直接从板子上可以知道,该device插在哪个SLOT上,该device的哪个PIN脚有效,从而能从板子的布线上面知道它连着PCI IRQ ROUTER的哪个LINK脚,从而判断出该device的irq是多少。
但是bios是怎么判断该设备是在哪个slot上的呢。除非该slot的BDF是设计板子的时候确定了的。

论坛徽章:
0
4 [报告]
发表于 2009-06-01 21:12 |只看该作者
我对BIOS SPEC的细节不熟,但是从你的描述来看,好像你做了一个假设,即“插在SLOT1上面的device就是分配IRQ9,插在slot2上面的device就是分配IRQ10”,我个人的理解是这个不是fixed的,是可编程的,插在哪个slot上面都不重要,分配是由pci briage来分配,而解释也是由pci briage来解释不就得了么

论坛徽章:
0
5 [报告]
发表于 2009-06-01 23:19 |只看该作者

回复 #4 snail_314 的帖子

提醒下,应该是PCI “bridge”

论坛徽章:
0
6 [报告]
发表于 2009-06-02 08:53 |只看该作者
不知道网卡能不能多虚拟一个IRQ.

论坛徽章:
0
7 [报告]
发表于 2009-06-02 11:27 |只看该作者
原帖由 fido_zy 于 2009-6-1 18:45 发表
你说的这个我知道,关键我没有像明白的是bios是怎么给这个device分配对应的IRQ呢?
我们可以直接从板子上可以知道,该device插在哪个SLOT上,该device的哪个PIN脚有效,从而能从板子的布线上面知道它连着PCI I ...


hehe,如果slot是在板子上的,无论是pci还是pcie slot,他的BDF和IRQ在BIOS设计的时候就已经确定下来了。但对于IRQ来说,如果使用PIC模式,进入Linux后,他的IRQ不会改变;如果是APIC模式,很多中断号都是共享的,BIOS会新建一个APIC table,进入Linux后,系统会根据这个表来确定设备的IRQ,这样IRQ有可能会跟BIOS设计时不一样。
ps:这个问题好像不应该发在这个版面哦。

论坛徽章:
0
8 [报告]
发表于 2009-06-02 13:32 |只看该作者
原帖由 sam58123 于 2009-6-2 11:27 发表


hehe,如果slot是在板子上的,无论是pci还是pcie slot,他的BDF和IRQ在BIOS设计的时候就已经确定下来了。但对于IRQ来说,如果使用PIC模式,进入Linux后,他的IRQ不会改变;如果是APIC模式,很多中断号都是共 ...

我假设就是这个样子的,看来我的假设还是对的,不过IRQ不是BIOS设计的时候定下来的。

论坛徽章:
0
9 [报告]
发表于 2009-06-03 12:51 |只看该作者
原帖由 fido_zy 于 2009-6-1 18:45 发表
但是bios是怎么判断该设备是在哪个slot上的呢。除非该slot的BDF是设计板子的时候确定了的。 ...


对OS来说,BDF不是不变的东西,有些OS支持hot plug, 当插一个卡上去的时候,也许会引发系统重新分配BDF。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP