取消路由的命令 (终止路由-计算机终止体系三)

文章编号:8956 更新时间:2024-02-20 分类:互联网资讯 阅读次数:

资讯内容

PCI/PCIe设施导致了计算机的基础框架,本文的重点也将聚焦PCI设施的终止设置疑问。在开局之前,我宿愿读者能浏览过前面几篇引见PCI/PCIe和终止的文章,以便能有个独特的探讨基础。假设你还没有看过,上方是传输门:

PCI终止路由

前文咱们引见过了PIC和IOAPIC的终止引脚,那么PCI设施是如何衔接到PIC/IOAPIC的终止引脚上呢?这个衔接相关的准则是什么呢?

1。PCI设施终止

PCIspec为每个PCI设施定义了四个终止引脚,区分是INTA#,INTB#,INTC#和INTD#,如图:

假设PCI设施为单性能设施,则必需经常使用INTA#,关于多性能设施,各性能设施可恣意接至PCI总线的四条终止放开线INTA#-INTD#。那么如何设定某个PCI设施的某特性能经常使用那个终止引脚呢?实践上这个是由PCI设施制作商选择的,并不能由主板固件前期更改。咱们翻出PCI体系结构文中引见的PCI性能空间,在其中interruptpin会告知主板固件该func经常使用了哪个引脚,如图中白色圈标注:

一个PCI设施可以有8个func,而4个终端引脚象征着终止共享无法防止。PCI为了繁难终止共享,定义终止是电平触发,低电平有效。终止信号与PCICLK异步,设施一旦Assert为低,则要维持低电平形态,直到驱动程序肃清这个终止恳求。这样PCI终止可认为经过链的形式来共享,某个设施终止处置终了后将其电平置高,只要该终止信号上一切的设施终止处置都完结了,该终止信号能力复原高电平,整个终止处置能力完结。实践上终止共享不只仅存在PCI设施各个func中,假定系统中有10个PCI设施,每个设施有4个终止引脚,要它们每个都独立象征着终止管理器须要有40个引脚。咱们经过前文知道PIC只要15个引脚,IOAPIC理论有24个引脚,还有很多保管无法用,而一台计算机外部PCI设施往往超越20个。所以,终止更须要在设施之间共享。

让咱们举个笼统的比喻来了解终止共享的处置。构想操作系统终止处置调度器是个严峻的教员,设施终止处置例程是一群可恶的小好友,他们被依照衔接在PIC/IOAPIC引脚数分红若干排。每个小好友手里都有个按钮,小好友想要问疑问,就按下按钮,教员回答完后他会再按一下复原弹起形态。疑问是教员是个远视眼,他看不见前面的小好友。为了处置这个疑问,在每排座位前面装置了个灯泡,当这排小好友有人的按键被按下,灯就亮了。教员上课时,看见第2排灯亮了,他就停上去,问:第2排第1个小好友,是不是你要问疑问?获取必需的回答就解答该小好友,否认的话就问下一个,如此往返,直到该排没有人有疑问,灯才灭,教员能力继续讲课。

看来在教员没有换个更好的眼镜或许做个远视矫副手术之前这是惟一的方法了。那么该如何为这些小好友分组呢,教员把这个义务交给了班长小张。咱们帮小张想想,怎样调配能力既偏心又上课效率高呢?是不是平均分最好呢?假定小好友都很乖,这样是最好的方法,然而小张知道班里有个话痨小好友--小明,他什么都疑问但疑问很多,他会频繁提问。假定他被分在第3排最后一个,教员每次看到第3排灯亮了,都从第一个小好友问,经过了良久才问到小明,效率好低,小明每次很久才轮到他也很不满,上课节拍全体也被拖慢了!

怎样办?开革小明吗?惋惜小明是校董的儿子,相对不能少!让小明坐第一个位置吗?校规规则座位是流水席,每排都先来先坐,再说让小明又高疑问又多,谁坐他前面别想问疑问了,太不偏心。看来只要给小明开小灶了,让他独自坐一排!

环球上没有相对的偏心,在资源顾此失彼时会叫的孩子有奶吃在咱们天朝还少吗?班长小张也只要做些斗争了。咱们的计算机固件和主板配件工程师在很多时刻就表演了左右尴尬的小张的角色,在配件的限度下,尽量保障系统的照应期间。他们基于一些繁难的准则:

A.偏心:尽量缩小终止共享。

B.效率:紧急或许频繁的设施可以独占终止

同时要充沛了解PC系统中绝大少数设施都是单性能设施,所以仅经常使用INTA#信号,很少经常使用INTB#和INTC#信号,而INTD#信号更是极少经常使用。映射INTA#~INTD#到PIC/IOAPICIRQ的机制称为Swizzling,它在不同状况下成功机制有很大不同,咱们区分来看看。

2。PCI/PCIe裁减插槽

对主板上的PCI裁减插槽,用户拔出什么设施,插在哪个槽内都不能在出厂时确定。咱们这里要尽量思考平衡准则和效率准则。咱们将一切插槽的INTA#~INTD#分红四组串联起来如何?这样离得最近的Slot1快乐了,每个都是我优先!万一有个用户把关键的网卡插在slot4,效率会重大降低。在充沛思考到PCI设施绝大少数都是单性能设施(仅经常使用INTA#信号,很少经常使用INTB#和INTC#信号,而INTD#信号更是极少经常使用),PCISIG介绍PCItoPCIbridge后slot衔接相关应该组成如下图:

即Slot1INTA#->Slot2INTB#->Slot3INTC#->Slot4INTD#等等。这样,当然slot1还是占些小廉价,但其余slot也有很大时机独占某个终止线(想想为什么)。这种Swizzling是主板设计配件连线选择的,不禁主板固件选择,然而主板固件须要了解这些消息。

PCI桥则将它上方的转换结果INTx转化为自身的INTx,接入芯片组外部的Swizzling。PCIe的插槽是1:1对应PCIerootport,PCIerootport可以看作PCI桥,同等处置。

3。芯片组外部

PCISIG并没有规则芯片组外部Swizzling的规则,而芯片组外部设施在出厂时就曾经确定了,芯片是不是可以hardcode一个终止路由相关呢?实践上有些芯片组就是这么做的,在芯片配件说明书中注明各种PCI设施INTx到IRQ的相关表,BIOS只需照着报告给OS就可以了。而Intel芯片组提供了更灵敏的形式,BIOS可以依据须要设置终止路由,以顺应不同的运行市场。不同的芯片组设置方法不同,有些给出了几组运行场景,BIOS可以依据须要选用一种,而在很早开局南桥芯片组ICH/PCH就给出了一种更灵敏的形式,就是咱们前文提到的PIRQ。繁难来说就是在ICH/PCH外部添加了几个新的寄存器:IR寄存器组。IR寄存器组用于设定芯片组外部PCI设施终止INTA#-H#衔接到详细PIC/IOAPIC的哪个引脚上。这样BIOS就可以依据面向市场不同从新绘制终止路由图了,好繁难!

OS接口

班长小张终于给小好友排好了座位,他怎样把这些消息通知各个教员呢?一个个通知太费事,不如把一切状况打印成一张表贴子讲台上。咱们的固件也是经过表通知OS的,这里有两种表。

有感于DOS阶段终止设置的凌乱,微软在推出Win95时联结Intel提出了PCIInterruptRoutingTable的数据结构,它的作用就是用来形容在经常使用8259终止管理器的系统下,PCI终止的路由相关。它和其余一些表导致了传统的MPtable。它只在PIC形式下起作用,而PIC形式曾经被淘汰,所以它的详细结构咱们这里略过。这里要特意指出的是,固件在提交PIRQtable时要同步降级PCI性能空间的Interruptline寄存器,如图篮圈局部:

2。ACPItable

在APIC形式下,固件应该经过ACPI的_PRT(PCIRoutingTable)method前往主板上无论配件还是固件设定的终止路由消息。ACPIspec有示例,但内容比拟单薄。咱们来看一个Intel开源配件平台MinnowboardMAX固件是怎样处置的。源码在:

tianocore/edk2-platforms

_PRT代码如下:

Method(_PRT,0){If(PICM){Return(AR00)}//APICmodeReturn(PR00)//PICMode}//end_PRT
取消路由的命令终止路由计算机终止体系三

这里判别假设是PIC形式,前往PR00,假设是APIC形式前往AR00表。PR00和AR00其实是同一个终止路由相关的两个view,其实质内容是分歧的。咱们单看一下AR00就好:

Name(AR00,Package(){//SDHost#0-eMMCPackage(){0x0010FFFF,0,0,16},//SDHost#1-SDIOPackage(){0x0011FFFF,0,0,17},//SDHost#2-SDCardPackage(){0x0012FFFF,0,0,18},//SATAControllerPackage(){0x0013FFFF,0,0,19},//xHCIHostPackage(){0x0014FFFF,0,0,20},//LowPowerAudioEnginePackage(){0x0015FFFF,0,0,21},//USBOTGPackage(){0x0016FFFF,0,0,22},////MIPI-HSIPackage(){0x0017FFFF,0,0,23},////LPSS2DMA//LPSS2I2C#4Package(){0x0018FFFF,0,0,17},//LPSS2I2C#1//LPSS2I2C#5Package(){0x0018FFFF,2,0,19},//LPSS2I2C#2//LPSS2I2C#6Package(){0x0018FFFF,3,0,18},//LPSS2I2C#3//LPSS2I2C#7Package(){0x0018FFFF,1,0,16},//SeCPackage(){0x001AFFFF,0,0,21},////HighDefinitionAudioControllerPackage(){0x001BFFFF,0,0,22},////EHCIControllerPackage(){0x001DFFFF,0,0,23},//LPSSDMAPackage(){0x001EFFFF,0,0,19},//LPSSI2C#0Package(){0x001EFFFF,3,0,16},//LPSSI2C#1Package(){0x001EFFFF,1,0,17},//LPSSPCMPackage(){0x001EFFFF,2,0,18},//LPSSI2S//LPSSHS-UART#0//LPSSHS-UART#1//LPSSSPI//LPCBridge////SMBusControllerPackage(){0x001FFFFF,1,0,18},//。。。。}

这里的16,18,19..25就是上文引见过的GSI(还记得GSI和IRQ的相关吗?)。经过这张大表,OS能力确定主板PCI设施和IRQ的衔接相关。

其余终止消息

除了终止路由表之外,还有很多和终止相关的消息也须要经过ACPI向OS报告

1.LAPIC和IOAPIC

固件须要在ACPI的MADT表里向OS报告一切的LAPIC和IOAPIC。LAPIC自动映射到物理地是0xFEE00000(想想为什么不会相互抵触?),不须要报告,只需LAPICID即可。须要特意说明的是,由于APICID不必定从0开局,也不必定延续,所以其值要灵活枚举而得。同时由于很多OS在调度processor时是挨个调度的,而HT的两个thread的APICID往往延续,同时被调度效劳大大降低,Intel介绍HT的两个thread隔开报告。假设多个CPUsocket,状况又有变动,这是系统调优的手腕之一,这里不再赘述。

IOAPIC的地址和ID都由固件指定,必选准确的在MADT里向OS报告,每个IOAPIC的GSI偏移量也要报告。

在Intel的芯片组中,SCI理论缺省占用了终止9。它的值可以在芯片组的寄存器中修正,并须要经过FADT报告OS。由于这是个不凡指定的终止,所以在MADT中还要经过interruptoverride节予以保管。

结语

终于完结了终止的引见,宿愿大家在通读了三篇文章能有所收获。

欢迎大家关注本专栏和用微信扫描下方二维码添加微信群众号"UEFIBlog",在那里有最新的文章。关注群众号,留言资料,有一些地下芯片资料供下载。

标签: IT固件消息技术团体电脑

本文地址: https://yihaiquanyi.com/article/892f10d3cdc5f8a2086a.html

上一篇:为什么internet网页打不开为什么IntelCPU的...
下一篇:numa与uma的差别NUMA与UEFI...

发表评论