Monitor Hot Plug Detection

显卡上的Video output被看作是显卡的一个子设备。而monitor或者其他连接到output上的外部显示设备不会当作一个子设备。在初始化时,KMD的DxgkDdiQueryChildRelations函数给每个子设备指定一个类型和HPD awareness值。类型是DXGK_CHILD_DEVICE_TYPE枚举中的一个值。

  • TypeVideoOutput

  • TypeOther

HPD awareness值是DXGK_CHILD_DEVICE_HPD_AWARENESS枚举中的一个值

  • HpdAwarenessAlwaysConnected

  • HpdAwarenessInterruptible

  • HpdAwarenessPolled

TypeVideoOutput类型且任何 HPD awareness 值不为HpdAwarenessAlwaysConnected 的子设备被称作video output connector。

如果KMD不能确定monitor是否被连接到了Video output上,驱动应该模拟一个可中断设备的行为,HPD awareness值被设置为HpdAwarenessInterruptible。如果KMD需要指定一个可终端monitor被连接到Video output上时,例如当用户键入切换到television视图的快捷键时,驱动应该调用DxgkCbIndicateChildStatus函数,其中ChildStatus.HotPlug.Connected 参数为TRUE

OS会请求KMD报告所有的HPD awareness值为HpdAwarenessPolled的Video output connector的状态,该请求没有固定轮询间隔,而是系统认为需要更新可用显示设备及其mode时进行请求。例如,当笔记本连接到docking时,OS需要知道是否一个monitor被连接到了docking的video output上。OS会通过为每个HPD awareness值为HpdAwarenessPolled的子设备调用KMD的DxgkDdiQueryChildStatus函数来完成此请求。

对于每个HPD awareness为HpdAwarenessInterruptible的Video output connector, KMD会在外部显示设备插入或者拔出的时候负责通知操作系统。KMD的中断处理代码调用显示端口驱动的DxgkCbIndicateChildStatus函数来上报video output连接或者断开的外部显示设备。当笔记本插入docking时,KMD的DxgkDdiNofityAcpiEvent中必须为每个docking上的HPD awareness 值为HpdAwarenessInterruptible 的Video output调用DxgkCbIndicateChildStatus。

在笔记本在docking上时,如果HPD awareness 值为HpdAwarenessPolled的output变为无效时(例如合上盖),KMD的DxgkDdiNotiryAcpiEvent函数中必须调用DxgkCbIndicateChildStatus来上报output上的连接状态。

在笔记本上Video output关联到嵌入显示panel是一个特殊的情况。OS需要知道盖子的状态是打开还是盖上。这时连接的意思代表着盖子打开,而断开代表着盖子合上。在笔记本上关联着嵌入显示显示器的Video output的HPD awareness 值为HpdAwarenessInterruptible。但是这不意味着显卡会在盖子打开或合上时会产生一个中断,而是由ACPI BIOS在盖子打开或者合上时产生一个中断。这个中断会导致系统调用KMD的DxgkDdiNotifyAcpiEvent,其中会调用DxgkCbIndicateChildStatus上报盖子的状态。KMD通过设置DXGK_CHILD_STATUS结构中HotPlug.Connected成员上报状态,True为Open,False为Close。DXGK_CHILD_STATUS为DxgkCbIndicateChildStatus 的一个参数。

下列描述了当一个monitor连接到HD15 connector上的后续操作,假设这个connector的HPD awarenesss值为HpdAwarenessPolled

  1. 当monitor连接到显卡的HD15 connector上时。显卡并不会检测到相应的hot-plug事件。

  2. 应用程序会在某时请求一个显示设备的列表。

  3. 对于显卡上的每个HPD awareness 值为HpdAwarenessPolled的Video output connector,VidPN管理器调用KMD的DxgkDdiQueryChildStatus函数来确定是否连接有外部显示设备。当DxgkDdiQueryChildStatus调用询问HD15 connector时,驱动会上报此时的确有一个外部显示设备相连。

下列描述了当一个monitor连接到DVI connector上的后续操作,假设这个connector的HPD awarenesss值为HpdAwarenessInterruptible

  1. 平面显示器连接到显卡上DVI connector。

  2. 显卡会检测到hot-plug事件,然后生成一个中断。

  3. 这个中断由KMD的DxgkDdiInterruptRoutine处理,其中调用会创建一个DPC(Deferred procedure call)。之后KMD得DPC routine会被调用。

  4. DPC回调传入DXGK_CHILD_STATUS给显示端口驱动DxgkCbIndicateChildStatus上报DVI connector的状态。DXGK_CHILD_STATUS的ChildUid成员标识了这个DVI connector,HotPlug.Connected成员为TRUE标识了该connector上有一个外接的显示设备。

假设DVI connector支持一个三个分支的转接器:DVI, HD15和S-Video。这时KMD会线枚举这这个物理DVI connector上的三个子设备: DVI-on-DVI,HD15-on-DVI,和 S-Video-on-DVI。每个子设备会拥有一个TypeVideoOutput 类型和为HpdAwarenessInterruptible的HPD awareness 值。下列描述了当一个monitor连接到HD15这个分支时的操作步骤

  1. 显卡检测到了hot-plug事件并产生一个中断。

  2. KMD的DxgkDdiInterruptRoutine处理这个中断,其中调度一个DPC,接下来KMD的DPC回调被调用。

  3. DPC回调确定了这个hot-plug事件由HD15这个分支产生(HD15-on-DVI)。

  4. DPC回调传入DXGK_CHILD_STATUS给DxgkCbIndicateChildStatus上报HD15-on-DVI Video output的状态。DXGK_CHILD_STATUS的ChildUid成员标识了这个video output 以及HotPlug.Connected 成员为TRUE表示了有外部设备连接到了这个output上。

下面描述了合上盖时笔记本的一些操作步骤

  1. 笔记本合上盖时,会产生一个ACPI事件,接下来KMD的DxgkDdiNotifyAcpiEvent会被调用。

  2. DxgkDdiNofifyAcpiEvent中将DXGK_CHILD_STATUS参数传给显示端口驱动的DxgkCbIndicateChildStatus 回调来上报内建显示显示面板的子设备状态。DxgkDdiNotifyAcpiEvent 会设置 DXGK_CHILD_STATUS的成员HotPlug.Connected 为FALSE。

Monitor Hot Plug Detection(MSDN翻译)相关推荐

  1. A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记

    A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记 //2022.1.7 日下午16:00开始阅读 双阶段检测器示意图 单阶段检测器 ...

  2. Feature Pyramid Networks for Object Detection论文翻译——中文版

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com ...

  3. Feature Pyramid Networks for Object Detection论文翻译——中英文对照

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com ...

  4. Heatmap-based Vanishing Point boosts Lane Detection 论文翻译

    基于热力图消失点增强车道线检测 论文:Heatmap-based Vanishing Point boosts Lane Detection 摘要 基于视觉的车道线检测(LD)是自动驾驶技术的关键部分 ...

  5. CreateFont()函数的MSDN翻译

    函数功能:该函数创建一种有特殊性的逻辑字体,此逻辑字体可以在后面被任何设备选择. 函数原型:HFONT CreateFont(int nHeight, int nWidth, int nEscapem ...

  6. FCOS:Fully Convolutional One-Stage Object Detection 论文翻译(非解读)

    全卷积单级目标检测器 摘要: 1.介绍 2.相关工作 3.方法 3.1. 全卷积单级目标探测器 3.2. FCOS的FPN多级预测 3.3. Center-ness for FCOS 4. 实验 4. ...

  7. USB device hot plug detection

    refer to http://usb.baiheee.com/usb_article/usb_spec/usb_plug_detect.html. 自己玩了玩. connect 1.5K resis ...

  8. 输入法编程指南(根据msdn翻译)

    2006-01-14 作者 不祥 Windows 95输入法编辑器(IME) 原著:Microsoft 翻译:TBsoft Software Studio 一.关于Windows 95混合语言IME ...

  9. Driver residency in WDDM 2.0(MSDN翻译)

    Driver residency in WDDM 2.0 这节描述了WDDM v2的一些驱动residency的一些改变.这些功能在win10之后开始生效. (PS: residency 之前一直没有 ...

最新文章

  1. Linux下升级安装Python-2.7.8版本
  2. 网站排名优化看技巧!
  3. Vsphere 回收未消使用的磁盘空间
  4. 实验:交换机生成树协议STP--功能验证
  5. Matlab | Matlab从入门到放弃(14)——基于Matlab的多变量数据分析
  6. 泪目!连拿3份 offer,AI 程序员求职经历火爆 IT圈!
  7. P8U8 IT这块出书门槛相对比较低
  8. 阿里计算平台掌门人贾扬清:我对人工智能方向的一点浅见
  9. java中面向对象_java中的面向对象
  10. 《写给大家看的设计书》封面评选结果揭晓
  11. mysql 获取日期每行_我如何从MySQL表行获取日期和时间
  12. matlab实验是啥,实验一 MATLAB的实验环境及基本命令.ppt
  13. flutter自定义View(CustomPainter) 之 canvas的方法总结
  14. c语言答案网站,c语言习题及答案
  15. 多媒体技术简答题和论述题
  16. FastStone Capture 画图吸色工具
  17. 《计算机网络(第七版)谢希仁 编著》部分课后答案
  18. 基于FPGA的ROM-VGA图像处理(老师好帅系列)
  19. dropping incoming packet
  20. btwdins.exe

热门文章

  1. 智解京东618——购物狂欢背后的安全暗战
  2. 使用 python进行文本处理
  3. feko金属球远场RCS双站
  4. Java基础二维数组
  5. 澳大利亚将建12个光伏发电站
  6. Coinbase 上市,说唱歌手 Nas 或将净赚 1 亿美元
  7. java为什么计算时间从1970年1月1日开始
  8. 计算机图形学和数据科学实验,计算机图形学作业-图像处理实验室——中国科学技.PDF...
  9. 大众点评CEO张涛:踏实创业 低调打造百亿级公司
  10. sql语句order by与group by