Display Drivers - Windows Family of Operating Systems

Display Drivers Display Adapters Supported “in the Box”
The following is a list of display adapters for which Windows Me will include built-in support with the new Power Management calls described later in this section:
VGA
Standard PCI VGA Adapter
NeoMagic
NeoMagic MagicGraph128XD
NeoMagic MagicMedia256AV
NeoMagic MagicMedia256ZX
NeoMagic MagicMedia256XL+
Nvidia
Nvidia Aladdin TNT2
Nvidia RIVA TNT
Nvidia RIVA TNT2
Nvidia RIVA TNT2 Pro
Nvidia RIVA TNT2 Ultra
Nvidia RIVA TNT2 Model 64
Nvidia Quadro
Nvidia Vanta
|
ATI:
ATI 3D Rage Pro
Rage XL AGP 2X
Rage XL AGP 2X
Rage LT PRO AGP 2X
Rage LT PRO PCI 2X
Rage LT PRO PCI 2X
Rage MOBILITY P AGP
Rage MOBILITY P PCI
Rage PRO TURBO AGP
Rage PRO TURBO PCI
Xpert@Play
Xpert@Work
Intel 810, 810e, 815
| Power Management Guidelines for Graphics Adapters
The following summarizes the specific power management requirements for graphics adapters.
From the PC 99 design guide:
14.54 Graphics adapter complies with device class power management reference specification
Required
The Display Device Class Power Management Reference Specification, Version 1.0 or later, provides definitions of the OnNow device power states
(D0–D3) for display and graphics devices. The specification also covers device functionality expected in each power state and the possible wake-up event definitions for the class, if any. Power states D0 and D3 are required; D1 and D2 are optional for graphics adapters.
14.55 Graphics adapter complies with VBE/Core 2.0 extensions for power management
Required
The VESA BIOS Extension Standard/Core Functions 2.0 (VBE/Core 2.0) specification defines extensions to VGA ROM BIOS services for power management.
Power Interfaces for Windows Me Display Adapter Drivers The information in this section is also on
http://www.microsoft.com/hwdev/video/Mill_D3display.htm
In the process of developing the hibernate feature (ACPI S4) for the Microsoft Windows Millennium Edition operating system, Microsoft found that many display adapters did not correctly support the D3 state. Some display adapters had problems in the BIOS, others had drivers that did not correctly restore register set, and others relied on Vaux current to maintain the state.
To distinguish newer display adapter drivers and devices that have been modified and tested to support hibernation, in Windows Me Beta 2 and later releases, a new flag is added to Get_Adapter_Power_State_Caps and Set_Adapter_Power_State calls. If a system's display adapter drivers do not export these calls or do not implement the new flag, the system will not be placed in S4 (hibernate) state, and the hibernation feature UI will be disabled.
Shortly after the display driver is loaded, Windows Me tests to determine whether the driver has exported the Get_Adapter_Power_State_Caps function. If this function is exported, Windows Me calls this function and examines its return value to determine the power states the device supports. Drivers indicate supported power states by OR’ing one or more of the following flags and returning this value in the Get_Adapter_Power_State_Caps call.
#define CM_POWERSTATE_D0 0x00000001
#define CM_POWERSTATE_D1 0x00000002
#define CM_POWERSTATE_D2 0x00000004
#define CM_POWERSTATE_D3 0x00000008
#define CM_POWERSTATE_HIBERNATE 0x00000010
// new flag to indicate hibernate support
NOTE: This implementation is required for drivers to accurately indicate supported power states.
Do not indicate support of CM_POWERSTATE_D3 unless your device has been thoroughly tested on a bus that loses both VCC and Vaux power when the system is placed in S3. Likewise, do not set the CM_POWERSTATE_HIBERNATE flag unless your device has undergone thorough hibernation testing.
If the display driver doesn't export the Get_Adapter_Power_State_Caps call or doesn't set the CM_POWERSTATE_HIBERNATE bit in the return value, Windows Me will disable the hibernation feature. Because older Windows 95/98 display drivers did not implement the CM_POWERSTATE_HIBERNATE flag, Windows Me will disable hibernation for these older devices and drivers.
Windows Me also uses the same bits for the Set_Adapter_Power_State call. Before placing the system in a new power state, Windows Me calls the driver's Set_Adapter_Power_State function with the appropriate CM_POWERSTATE_HIBERNATE flag. Before returning from this call, drivers must perform any necessary actions to prepare their device to enter the new power state.
For example, if Set_Adapter_Power_State is called with either CM_POWERSTATE_D3 or CM_POWERSTATE_HIBERNATE flags, the driver must save its device's register values to prepare for power loss. Subsequently, when power is restored, Windows Me will call Set_Adapter_Power_State with CM_POWERSTATE_D0. In response, the driver must restore its device's registers so the device is returned to the same state it was in prior to the sleep or hibernate request.
Microsoft Windows Me OS-Power Management Initialization
In addition, drivers must be designed to handle the Set_Adapter_Power_State CM_POWERSTATE_D0 command while resuming even though the BIOS might have initiated a re-POST or other display activity. A device must not enable its IRQ until the Set_Adapter_Power_State CM_POWERSTATE_D0 command is received. In other words, do not allow a display device to generate interrupts before its driver receives the Set_Adapter_Power_State CM_POWERSTATE_D0 command. Although the system can reflect display adapter interrupts to real mode while booting, interrupts cannot be reflected to real mode while resuming because Plug and Play might have changed the interrupt.
Likewise, regardless of what the BIOS does to the display adapter during resume, the driver is responsible for putting the device back into the same state it was in prior to receiving the Set_Adapter_Power_State CM_POWERSTATE_D3 command.
Set_Adapter_Power_State
The Set_Adapter_Power_State function saves and restores whatever state is necessary to place the device into the power state specified in the PowerState parameter. The driver remains in memory at all times. Display memory contents do not need to be saved because the operating system resets the display mode during a return to the D0 state.
The default action defined by CR_DEFAULT is to re-POST the device if it is going from D3 to D0. Any other state transition results in no action. If the display driver is capable of initializing the device from a power-off without a POST, then this function returns CR_SUCCESS during the D3 to D0 transition.
DWORD __cdecl SetAdapterPowerState(DEVNODE devnode,DWORD PowerState)
Parameters
PowerState
One of the following:
#define CM_POWERSTATE_D0 0x00000001
#define CM_POWERSTATE_D1 0x00000002
#define CM_POWERSTATE_D2 0x00000004
#define CM_POWERSTATE_D3 0x00000008
#define CM_POWERSTATE_HIBERNATE 0x00000010
Return Values
The following values are provided.
CR_DEFAULT
Operating system should perform its default action for the power state transition. (That is, re-POST for D3 to D0. Otherwise, it should do nothing.) This should also be returned if PowerState is something other than one of the four CM_POWERSTATE_Dx values.
CR_SUCCESS
Power state was changed successfully. No further action needs to be taken by the operating system.
Set_Adapter_Power_State Entry and Exit
Entry
|
Meaning
|
ESP+4
|
Device node.
|
ESP+8
|
Power state to set. One of:
CM_POWERSTATE_D0
CM_POWERSTATE_D1
CM_POWERSTATE_D2
CM_POWERSTATE_D3
CM_POWERSTATE_HIBERNATE
|
Exit
|
Meaning
|
EAX
|
CR_DEFAULT
Routine did nothing.
CR_SUCCESS
Routine set the appropriate power state for the adapter/display chip set.
|
Get_Adapter_Power_State_Caps
The Get_Adapter_Power_State_Caps function should return the power states supported by the display adapter.
DWORD __cdecl GetAdapterPowerStateCaps(DEVNODE devnode)
Parameters
None.
Return Values
Bitmask of:
CM_POWERSTATE_D0
CM_POWERSTATE_D1
CM_POWERSTATE_D2
CM_POWERSTATE_D3
CM_POWERSTATE_HIBERNATE
Interface between BaseVDD/MiniVDD/Display Drivers
The following table indicates the functions that must be supported by each display driver/miniVDD for the primary and secondary display adapters or usable services.
MiniVDD Functions
baseVDD —> miniVDD
No.
|
Function
|
|
Pri
|
Sec
|
Notes
|
1
|
REGISTER_DISPLAY_DRIVER
|
Interface between miniVDD and driver
|
2
|
2
|
|
2
|
PRE_HIRES_TO_VGA
|
Switch to core graph
|
1
|
3
|
3
|
SAVE_REGISTERS
|
Save registers
|
2
|
3
|
4
|
RESTORE_REGISTERS
|
Restore registers
|
2
|
3
|
5
|
ENABLE_TRAPS
|
Enable I/O traps
|
2
|
3
|
6
|
DISABLE_TRAPS
|
Disable I/O traps
|
2
|
3
|
7
|
DISPLAY_DRIVER_DISABLING
|
Disable display
|
1
|
1
|
8
|
ENABLE_ACCELERATOR
|
Enable display
|
1
|
3
|
9
|
DISABLE_ACCELERATOR
|
|
3
|
3
|
Not Used
|
10
|
CHECK_UPDATE
|
3
|
3
|
Not Used
|
11
|
CHECK_WINDOWED
|
3
|
3
|
Not Used
|
12
|
ACC_VBE_PM
|
VBE/PM
|
2
|
2
|
|
13
|
ACC_VBE_DDC
|
VBE/DDC
|
2
|
2
|
14
|
ACC_INT_10
|
ESA BIOS (VGA BIOS)
|
4
|
3
|
15
|
ACC_GET_CAPABILITIES
|
Accelerator BIOS
|
4
|
3
|
16
|
ACC_GET_EXT_MODE_INFO
|
Accelerator BIOS
|
4
|
3
|
17
|
ACC_GET_FLAT_SELECTOR
|
Accelerator BIOS
|
4
|
3
|
18
|
ACC_ENABLE_BIOS
|
Accelerator BIOS
|
4
|
3
|
19
|
ACC_DISABLE_BIOS
|
Accelerator BIOS
|
4
|
3
|
20
|
ACC_SET_PALETTE
|
Accelerator BIOS
|
4
|
3
|
21
|
ACC_GET_PALETTE
|
Accelerator BIOS
|
4
|
3
|
22
|
ACC_SET_CURSOR
|
Accelerator BIOS
|
4
|
3
|
23
|
ACC_SHOW_CURSOR
|
Accelerator BIOS
|
4
|
3
|
24
|
ACC_HIDE_CURSOR
|
Accelerator BIOS
|
4
|
3
|
26
|
ACC_GET_CURSOR_POS
|
Accelerator BIOS
|
4
|
3
|
27
|
GET_NUM_UNITS
|
Obtain # of monitor units available for connection
|
2
|
2
|
New Feature
(not yet supported)
|
28
|
SET_ADAPTER_POWER_STATE
|
|
2
|
2
|
New Feature
(not yet supported)
|
29
|
GET_ADAPTER_POWER_
STATE_CAPS
|
2
|
2
|
New Feature
|
30
|
SET_MONITOR_POWER_STATE
|
2
|
2
|
New Feature
|
31
|
GET_MONITOR_POWER_
STATE_CAPS
|
2
|
2
|
New Feature
|
32
|
GET_MONITOR_INFO
|
2
|
2
|
New Feature
|
33
|
I2C_OPEN
|
2
|
2
|
New Feature
|
34
|
I2C_ACCESS
|
2
|
2
|
New Feature
|
35
|
GPIO_OPEN
|
2
|
2
|
New Feature
|
36
|
GPIO_ACCESS
|
2
|
2
|
New Feature
|
37
|
COPYPROTECTION_ACCESS
|
2
|
2
|
New Feature
|
1: Support is necessary
2: Support may be necessary
3: Support is unnecessary (not in use)
4: Necessary for accelerator BIOS support (this function may not be supported in the future)
|
|