显示驱动教程(3)

类别:编程语言 点击:0 评论:0 推荐:

Video Miniport Driver

 

 

显示驱动程序被分成Display驱动和Video Miniport驱动(下面将它们简称为display和miniport),它们之间的关序如上图所示。每个video miniport为display提供硬件级支持,display可以通过Graphics engine提供的EngDeviceIoControl函数向下面的miniport发出请求。

 

Display和miniport都可以直接操作显卡硬件,它们之间只是分工不同。通常处理那些实时性要求较高的操作,比如应用程序发出的画线、位图拷贝等图形操作。Miniport则处理那些不经常发生的或者完全实时的操作。完全实时表示这些操作不会被中断或其他进程抢先。另外display不能处理设备中断,并且它还需要miniport将显卡上的寄存器(显存和控制寄存器)映射到display的虚拟地址空间中。

除了DriverEntry之外miniport还应该实现其他的接口函数。这些函数被分成:必须实现、在某种前提条件必须实现、以及选择实现,下面是这些函数的简单描述。

 

必须实现的函数:

l         DriverEntry:初始化video miniport driver。

l         HwVidFindAdapter:获取设备访问的地址范围。如果有需要可以检测设备类型。

l         HwVidGetPowerState:查询设备是否支持所请求的电源状态。

l         HwVidGetVideoChildDescriptor:枚举挂接在该显卡上的子设备,比如电视接收器等等。

l         HwVidInitialize:初始化设备。

l         HwVidSetPowerState:为指定的设备设置电源状态。

l         HwVidStartIO:处理特定的VRP。

 

在某种前提条件必须实现的函数(是否实现这些函数依赖于显卡的特性以及驱动程序的设计):

l         HwVidInterrupt:如果显卡会产生中断,你应该实现这个函数来处理中断。

l         HwVidResetHw:将显卡重新设置成字符模式。

l         HwVidSynchronizeExecutionCallback:用来同步访问共享数据,类似Win32下的临界区,避免被中断处理程序抢先。如果miniport中的其他函数需要和HwVidInterrupt函数共享设备状态时就需要实现这个函数。

 

选择实现的函数:

l         HwVidLegacyResources:返回一份资源清单,这些资源没有在设备的PCI配置空间给出。

l         HwVidQueryDeviceCallbackHwVidQueryNamedValueCallback:处理存储在注册表中的配置信息。

l         HwVidQueryInterface:返回miniport实现的函数,以便其他驱动程序访问显卡上的子设备。

l         HwVidTimer:当计时器被启动后,每一秒钟系统每秒钟会调用这个函数一次。

l         SvgaHwIoPortXxx:在x86机器上,DOS全屏幕程序可以通过它们访问I/O port。

 

本文地址:http://com.8s8s.com/it/it28482.htm