现在的位置: 首页 > 综合 > 正文

(三)Chipset Config

2013年01月17日 ⁄ 综合 ⁄ 共 1206字 ⁄ 字号 评论关闭

一 旦正确的频率供给给system后, BIOS便依据既定的POST table(类似行程表)来做事. 首先,与chipset最为相关的便是 [chipset config stage]. 意即,在此阶段BIOS必须对 chipset registers填入正确的值,俾使其正常运作. 一般而言,要config下列的 devices:
- NB(还记得前面有提过北桥内部约可分 4 blocks; "有些" blocks 需要 在此 program...)
- SB(即 PCI-ISA bridge)
   - ACPI registers
   - USB registers
   - SATA registers
   - PATA registers
   ...

* 在此所谓的 registers指的是: PCI config registers(除了ACPI registers以外). PCI spec所定义的 PCI config registers 00~3Fh 为 PCI header part,这个范围的registers并不是此阶段的主要工作(当然还是会touch,只是不多),而是稍后BIOS PCI kernel的事情.此阶段将 focus on :offset 40h以后的 registers,因为,这些是 device specific的部分,是 chipset自己加function/feature之处 !!!

* ACPI registers通常透过 IO 来存取
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
   mov dx, 855h
   in al, dx ; <- al = ACPI Reg55h's value

* 上述所列的 devices多为 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要对 device 下 PCI configuration read/write便可以 config device registers.

Ex. 假设: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
=> 简单的 assembly can be:

     mov eax, 80002750h
     mov dx, 0cf8h
     out dx, eax

     mov dx, 0cfeh
     in al, dx
     or al, 00001000b
     out dx, al

事实上每家BIOS都 maintain many "tables" 来说明: 哪一个 device 中的哪些 registers要填?值.相关的 access routine都已经写好. Programmer只需更改表里面的值即可 ^_^

*当有人要求改 register setting时,我们必须知道三件事:
1. why (为什么要改?)
2. what(改成何值?)
3. when(什么点改?)

阅读全文

类别:我所知道的bios系列整理(转载小华的部落格) 查看评论

【上篇】
【下篇】

抱歉!评论已关闭.