IGD Display Switch

 

1.  Introduction

IGD OpRegion是intel为了改善传统的Integrated Graphics Driver和BIOS之间的通信机制即SMI、INT10存在的缺陷(SMM mode有可能会影响OS的稳定性,Int 10则有可能受限于OS),而引入的一种新的接口。它使用SCI取代传统的SMI机制,可谓取其精华,去其糟粕。

OpRegion被加载时BIOS会透过GMCH的ASLS register写入OpRegion的base address。OpRegion的Memory layout如下图1所示:

图1

OpRegion是System BIOS和Driver之间交流信息的重要手段,而且我们也可以在OS下透过ASLS这个register,获取OpRegion空间的信息,进而可以用于Debug Graphics driver和System BIOS之间co-work的一些问题。

2.  Mailbox#1 About Display Switch

 Mailbox#1被称之为Public ACPI Methods Mailbox,它包括一堆成员变量,这些变量有些是必须实现的有些则是可选的。它的layout如下图2所示:

图2

其中与切屏相关的变量有如下几个:

0x120h DIDL

0x140h CPDL

0x160h CADL

0x180h NADL

0x1A4h TIDX

DIDL表示该平台所支持的显示设备列表,最多支持8个设备。Graphics Driver在初始化的会call _DOD method获得所有的支持的设备列表。

CPDL表示当前接在VGA上的所有设备。Graphics Driver会detect当前连接的设备,每当hotplug、remove时,drvier都会重新detect设备,并将detect的结果写入CPDL,而且该位置对BIOS是只读的(RO)。在Hotkey切屏时video driver会使用CPDL中的device列表去call对应device的_DGS function用于决定下一轮的显示设备列表。

CADL表示当前正在使用的设备ID,在启动和模式切换期间driver都会更新这个位置。BIOS也是只能读取该位置(RO)。BIOS可以使用这个位置的值去支援 _DCS Function。

NADL表示当hotkey按下时,driver需要切换到的另一个模式。它的值取决于

VBIOS中的toggle list table。在HotKey切屏时_DGS function会根据NADL中的device列表决定下一轮的显示顺序。

TIDX 表示VBIOS中的toggle table index,BIOS可以动态的更新该index值。

Video driver通过该index决定下一组显示设备的列表。该table存放于VBIOS之中,最多支持4组。OEM端可以通过需要VBIOS改变显示的顺序。

3.  ACPI Extensions For Display Adapters

另外一个与切屏密切相关的部分就是ACPI 中有关显示部分的扩展部分,这个部分主要是一下几个function:

_DOD 该function Graphics Driver会在初始化时会call该funciton获取该平台所支持的所有的device id。在windows xp下Debug发现如果使用hotkey切屏时,每次按下hotkey,Graphics Driver都会call一次该function。该function返回的数据格式如下图所示:

图 3

_ADR 用于返回设备的唯一的ID。

_DCS 该function用于返回当前device的状态,windows xp下面debug发现 该function并不会被call。

_DGS 该function用于在支持hotkey display switch时,查询输出下一轮输出设备的显示状态。所支持的状态有下述两种:

图 4

_DOS 该function用于决定是否支持输出设备切换。

_DSS 当设备的显示状态已经确定之后,OSPM会call该function。该函数会带一个参数用于决定设备的输出状态,参数的格式如下图4所示:

图 5

4.  Hot Key display switch Process

有了以上的介绍,我们来看看按下hotkey之后设备显示顺序的完整过程。<<Intel Integrated Graphics Driver OpRegion specification>>对display switch有非常完整的流程,我将按照这份流程并结合asl code的实际状况做些说明。

图 6

当我们按下hotkey时,EC会透过Q_EVENT通知BIOS,BIOS收到该Q_EVENT后会call IGD.GHDS() function,GHDS会call GNOT function,而GNOT最终会call Notify(VGA,0x00)去扫出所有的显示设备,这时_DOS=0会被调用表示始能切屏的功能;然后再call Notify(VGA,0x80)去做切屏的动作。在win xp & 2k下,_DOS=2将会被调用到,表示暂时禁用掉切屏功能(因为现在正在切屏),接下来是然后BIOS会透过_DOD获得支持的所有device id,call对应CPDL 对应的device的 _ADR fucntion 获得该device的唯一的ID。然后会call _DOS设置输出设备切换始能,下来会用OpRegion中的NADS去call _DGS用于决定下一组显示组合。最后再call _DSS确定显示组合,再后来就是Graphics Driver sets new mode。

以上就是Hotkey display switch的大致过程,希望能够对大家理解IGD Driver Hotkey的处理过程有所帮助。

IGD Display Switch相关推荐

  1. The IGD display order

    The IGD display order by vbios.dat or BVT.bin which were configued by intel BMP tool. 转载于:https://bl ...

  2. 高兴总结台式故障分析==方案

    台式故障分析 1.在什么的情况下需要修复引导 1)卡在Windows正在启动 2)开机显ctrl+alt+del 3)缺少或丢失文件 2.在什么的情况下重新装系统 1)开机提示ctrl+alt+del ...

  3. 电脑常见故障排除方法

    电脑出现故障是常见的,有许多故障在机器启动阶段就能确诊,特别是硬件故障,完全可以利用计算机启动过程中发出的报警声及屏幕显示信息确定机器故障原因.下面依照电脑的启动流程,介绍常见硬件故障的类型和排除方法 ...

  4. Cisco Wireless Controller 5508 Configuration Step by Step – Part 1 (CLI and GUI Access, Upgrade)

    As the industry's most deployed controller, the Cisco 5500 Series Wireless Controller provides the h ...

  5. 开机按F1才能进入(启动)系统的解决方案

    1.BIOS ROM check sum error,System halted (BIOS信息进行总和校验时发现错误,系统锁定) 解决方案:这个错误是一般人不会遇到的,这种信息多半是对主板BIOS刷 ...

  6. FlashVml2.0(WEB上的PhotoShop+Flash、VML最强开发工具)

    fvml2.0完整压缩包下载地址(6860KB,包括fvml2主程序.所有演示VMLFLASH.MP3.图片资源文件等所有文件): http://www.codefans.com/CodeView/C ...

  7. FlashVml2.0(WEB上的PhotoShop+Flash、VML最强开发工具)[推荐]

    fvml2.0完整压缩包下载地址(6860KB,包括fvml2主程序.所有演示VMLFLASH.MP3.图片资源文件等所有文件): http://www.codefans.com/CodeView/C ...

  8. 浅学C++(3)学习C语言(电话簿)

    小项目:通讯录系统要求:存储联系人信息姓名,性别,电话最大存储量 50 功能:1,增加联系人2,删除联系人(按人名)3,修改联系人(按人名)4,查找联系人(模糊查找)5,显示所有联系人信息6,退出系统 ...

  9. System Verilog的基本数据类型

    原文地址 内建数据类型 逻辑(logic)类型 双状态数据类型 定宽数组 数组的遍历 数组的比较与复制 使用数组位下标和数组下标 合并数组 动态数组 队列 关联数组 链表 数组的方法 sum方法:数组 ...

最新文章

  1. 2台xenserver组成的资源池开启HA存在的问题
  2. Windows Server 2008 R2 负载平衡入门篇
  3. UE4如何贴混合贴图_UE4[蓝图]动态积雪材质的实现(一)
  4. GIS实战应用案例100篇(二)-元胞自动机模拟城市扩张过程
  5. mysql 线程池 下载_java线程池实现批量下载文件
  6. 循环首次适应算法_数据结构与算法之2——排序问题
  7. 前端面试送命题(一)-JS三座大山
  8. Linux中/etc/rc开头文件详细解释
  9. 太原理工java实验报告_太原理工大学-JAVA实验报告.doc
  10. limbo镜像linux下载,Limbowin10镜像下载|Limbo模拟器win10镜像 可上网版下载_最火手机站...
  11. DELPHI 字符转16进制、16进制转字符
  12. Boost电路调试心得
  13. 使用SpringBoot构建项目时运行出现Java HotSpot(TM) 64-Bit Server VM warning但是不影响运行
  14. C语言——首字母大写
  15. 徐波 博士 计算机,徐波医生(博士 广州市第一人民医院主任医师)简介
  16. 自动化提升系列:在白色背景上拍摄白色产品
  17. 容器上搭建Skywalking
  18. Python爬虫问题汇总(持续更新)
  19. TeamViewer固定密码远程连接
  20. Windows Server 2012 R2 官方原版镜像

热门文章

  1. Marp之制作PPT神器(程序员的定制版PPT)
  2. 自己搭建一个局域网(两台电脑)
  3. 最全去水印的视频解析工具,完全免费的小程序
  4. AE基础教程第一阶段——02导入素材以及序列串的方法
  5. 互联网公司招聘--奇虎360--产品类--2013年笔试题
  6. 用Mathematica实现各类积分图形区域绘制与积分计算及结果的快速检验方法(一)
  7. 自动驾驶:自动驾驶车需要哪些核心技术?
  8. FANUC数控系统类有哪些最新发表的毕业论文呢?
  9. CNN实现手写0-9数字识别
  10. OpenCV+TensorFlow图片手写数字识别(附源码)