Cstyle的UEFI导读:第20.0篇 IGD OpRegion interface && IGD OpRegion PROTOCOL

本文介绍了ACPIIGDOpRegion接口的作用及其在IGDdriver、OS和BIOS间沟通的重要作用。同时详细解释了Legacy实现方式下与OS沟通的具体机制,包括OpRegionMemoryLayout、Mailbox的功能及IGD与BIOS间通过SCI沟通的过程。
    ACPI IGD OpRegion  interface是用SCI来实现IGD driver,OS,BIOS之间沟通的桥梁,IGD OpRegion PROTOCOL是UEFI BIOS构建桥梁的脊梁。

Legacy的实现方式下与OS沟通的方式:

OpRegion Memory Layout:

Mailbox1其中提供的Public ACPI Methods能够从ACPI spec Appendix B Video Extensions里面找到相应的每个method。它为IGD graphics devices提供了一个标准的ACPI规定的沟通渠道。
Mailbox2当值提供了IGD graphic driver怎样通过SWSCI与BIOS沟通的port信息。
Mailbox3,ASLE (ASL event)Support。This is the mailbox for communicating all driver features related information between the   driver and the SBIOS

ASL Storage Register,用来存储IGD OpRegion Header地址:

IGD与BIOS沟通(SCI):

SWSCI Register,IGD通过DMI向ICH发送SCI来触发 TCOSCI_STS bit in its GPE0 register来触发真正的SCI event。然后通过BIOS里面定义的ASL  _Lxx method来处理,同一时候通过 Mailbox2来传递消息 。主要是在触发SCI之前预先填好mailbox里面相应的參数,包含Function-Code等信息 ,然后触发SCI,在L_xx method其中会去读取mailbox2其中的对应字段,来做对应的处理。最后通过另外的一些字段来返回处理的结果和状态。(TCO:total cost of ownership.Ref intel EDS)
    Under the new scheme, rather than writing to the SWSMI bit (bit 0 of the SWSMI register
at offset 0xe0 in the PCI configuration space of the graphics device), the graphics driver
writes to the SWSCI register (bit 0, offset 0xe8 assuming SWSCI is configured for SCI
operation).
    This register serves two purposes:
1) Support selection of SMI or SCI event source (SMISCISEL - bit15)
2) SCI Event trigger (GSSCIE – bit 0)
To generate a SW SCI event, software (system BIOS/graphics driver) should program bit
15 (SMISCISEL) to 1. This is typically programmed once (assuming SMIs are never
triggered).
On a write transition of 0->1 of bit 0 of this register, the GMCH sends a single SCI
message down the DMI link to ICH. ICH will set the DMISCI bit in its TCO1_STS register
and TCOSCI_STS bit in its GPE0 register, upon receiving this message from DMI. The
corresponding SCI event handler in BIOS is to be defined as an _Lxx method.
Once written as 1, software must write a "0" to this bit to clear it.
All other write transitions (1->0, 0->0, 1->1) will be ignored. Writes will likewise be
ignored if bit 15 is 0.
To generate an SW SMI event, software should program bit 15 to 0 and trigger SMI
through writes to SWSMI register (see SWSMI register for programming details).
   

Video BIOS Table(VBT)
    这个就是我们常见的所谓的使用BMP工具来配置VBIOS/GOP的时候生成的一个bin档案,终于会被包在BIOS rom里面,在post过程其中由BIOS来读取到内存里面去,跟上面的各种 Mailbox(一般由ASL code,IgdoPRn.Asl来创建)一起构成IGD OpRegion table,这部分通常是由 IGD OpRegion PROTOCOL &ACPI Protocl来完毕。终于生成的table被video BIOS and device driver来读取,获取当前硬件的各种信息:Flat   Panel Timings, Generic Mode Timing, GPIO pins, Clock等。table能够在post其中依据用户在setup里面的设定值或者是platformPolicy来动态的改变(table被保存在
EFI_GLOBAL_NVS_AREA->IgdOpRegionAddress:IgdOpRegion其中被ACPI driver来读取)。以此来实现用户的不同定制(參考IgdOprom.c)。

IGD OpRegion PROTOCOL
    这里提到的protocol就是用来创建 IgdOpRegionTable的DXE driver,它为VBIOS/GOP以及IGD driver提供相关的信息。主要是从FV里面读取BMP配置生成的Bin file以及platform policy以及setup值来定制系统的各种參数,并辅助acpi driver 来创建acpi table(GNVS->ASLB)。

    好了今天就先记录到这里,详情可參考ACPI spc,Intel IgdOpRn spc,以及相关的spc。

转载请注明出处
Cstyle.z.zhou@outlook.com  //  http://blog.youkuaiyun.com/CStyle_0x007




转载于:https://www.cnblogs.com/mengfanrong/p/5137002.html

目录 序 2 第1章:ACPI规范简介 3 第2章:名词术语(Term) 4 第3章:Hello World 5 第4章:方法(Method) 6 第5章:对象(Object) 7 第6章:对象类型及命名 8 第7章:特殊对象与类型 10 第8章:类型转换及规则 11 第9章:常用ASL算子(operator)简介 14 第10章:ACPI表 15 第11章:ACPI硬件 16 第12章:ACPI操作系统 17 第13章:Low Power S0 Idle简介 18 第14章:ACPI/ASL调试简介 19 目录 序 2 第1章:ACPI规范简介 3 第2章:名词术语(Term) 4 第3章:Hello World 5 第4章:方法(Method) 6 第5章:对象(Object) 7 第6章:对象类型及命名 8 第7章:特殊对象与类型 10 第8章:类型转换及规则 11 第9章:常用ASL算子(operator)简介 14 第10章:ACPI表 15 第11章:ACPI硬件 16 第12章:ACPI操作系统 17 第13章:Low Power S0 Idle简介 18 第14章:ACPI/ASL调试简介 19 第1章:ACPI规范简介 ACPI(Advanced Configuration and Power Interface)是由intel及微软等企业在1990年左右提出的PC电源管理接口规范。其目标是把操作系统和系统固件(UEFI/BIOS)隔离开来,使操作系统和硬件(固件)厂商可以在共同标准下相互解耦独立发展。ACPI最新的版本是6.4,下文内容都是基于6.4的版本进行说明。 ACPI规范包含了ACPI硬件、ACPI软件、ACPI表、设备管理、电源管理、热管理等内容。其中ASL(ACPI Source Language)语言是默认用来编写ACPI代码的“声明式编程语言”,AML(ACPI Machine Language)是ASL源码被编译器编译后被AML解释器解释执行的字节码。AML是所有ACPI兼容的操作系统必须支持的,但是ASL是非必须的,只要是能最终被转换成AML的其他的任何语言都可以用来编写ACPI代码。 ASL用来定义ACPI对象(object)和ACPI控制方法(Method),ASL支持预定义的内置算子和宏供程序(一般是BIOS工程师编写)或OS调用,如:数学运算、逻辑运算等。 ACPI规范定义了大量的与硬件和OS相关的内容,整个文档洋洋洒洒有数千页之多,阅读起来甚是难以理解。本文试图以BIOS工程师的视角来对其进行简单的梳理,参照一般的编程语言如“C语言“类似的讲解逻辑从“Hello World”开始,介绍如何使用ACPI/ASL编写自己的程序,如何编译、运行、调试代码。以及ACPI表、ACPI硬件、ACPI操作系统、系统睡眠唤醒流程等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值