diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-05-21 11:19:41 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-05-21 11:19:41 +0100 |
commit | e3bfa63c44f2692bd7ef2140c5a3e829fdf96e74 (patch) | |
tree | 11669dbfac0daf22f1e018d793c9fee9d3fed9f1 /tools/firmware/vgabios | |
parent | 1357edf0dfff84a7d3d59e922eaf9aceaa4f62d0 (diff) | |
download | xen-e3bfa63c44f2692bd7ef2140c5a3e829fdf96e74.tar.gz xen-e3bfa63c44f2692bd7ef2140c5a3e829fdf96e74.tar.bz2 xen-e3bfa63c44f2692bd7ef2140c5a3e829fdf96e74.zip |
vgabios: Support VESA power management extensions.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'tools/firmware/vgabios')
-rw-r--r-- | tools/firmware/vgabios/clext.c | 54 | ||||
-rw-r--r-- | tools/firmware/vgabios/vgatables.h | 1 |
2 files changed, 52 insertions, 3 deletions
diff --git a/tools/firmware/vgabios/clext.c b/tools/firmware/vgabios/clext.c index 97ae080b2c..fe87e3cfdd 100644 --- a/tools/firmware/vgabios/clext.c +++ b/tools/firmware/vgabios/clext.c @@ -26,6 +26,7 @@ #define PM_BIOSMEM_CURRENT_MODE 0x449 #define PM_BIOSMEM_CRTC_ADDRESS 0x463 #define PM_BIOSMEM_VBE_MODE 0x4BA +#define PM_BIOSMEM_VBE_POWER 0x4BC typedef struct { @@ -491,7 +492,7 @@ cirrus_vesa: #ifdef CIRRUS_DEBUG call cirrus_debug_dump #endif - cmp al, #0x0F + cmp al, #0x10 ja cirrus_vesa_not_handled push bx xor bx, bx @@ -682,7 +683,7 @@ c80h_2: ret cirrus_extbios_81h: - mov ax, #0x100 ;; XXX + mov ax, #0x103 ;; XXX ret cirrus_extbios_82h: push dx @@ -1177,6 +1178,52 @@ cirrus_vesa_07h_2: mov ax, #0x004f ret +cirrus_vesa_10h: ;; Power management functions + ;; Set up DS to read stored power info from RAM + push ds +#ifdef CIRRUS_VESA3_PMINFO + db 0x2e ;; cs: + mov ax, [cirrus_vesa_sel0000_data] +#else + xor ax, ax +#endif + mov ds, ax + ;; Now choose the right function + cmp bl, #0x00 + ja cirrus_vesa_10h_01 + ;; + ;; Function 00h: Get capabilities + ;; + mov bx, #0x0720 ;; 07: standby/suspend/off, 20: VBE/PM 2.0 + mov ax, #0x004f + jmp cirrus_vesa_10h_done +cirrus_vesa_10h_01: + cmp bl, #0x01 + ja cirrus_vesa_10h_02 + ;; + ;; Function 01h: Set power state + ;; + mov ax, bx + mov bx, # PM_BIOSMEM_VBE_POWER + mov [bx], ah + mov ax, #0x004f + jmp cirrus_vesa_10h_done +cirrus_vesa_10h_02: + cmp bl, #0x02 + ja cirrus_vesa_10h_unimplemented + ;; + ;; Function 02h: Get power state + ;; + mov bx, # PM_BIOSMEM_VBE_POWER + mov bh, [bx] + mov ax, #0x004f + jmp cirrus_vesa_10h_done +cirrus_vesa_10h_unimplemented: + mov ax, #0x014F ;; not implemented +cirrus_vesa_10h_done: + pop ds + ret + cirrus_vesa_unimplemented: mov ax, #0x014F ;; not implemented ret @@ -1601,7 +1648,8 @@ cirrus_vesa_handlers: dw cirrus_vesa_unimplemented dw cirrus_vesa_unimplemented dw cirrus_vesa_unimplemented - + ;; 10h + dw cirrus_vesa_10h ASM_END diff --git a/tools/firmware/vgabios/vgatables.h b/tools/firmware/vgabios/vgatables.h index e5eca1e4e7..7f159637c0 100644 --- a/tools/firmware/vgabios/vgatables.h +++ b/tools/firmware/vgabios/vgatables.h @@ -25,6 +25,7 @@ #define BIOSMEM_VS_POINTER 0xA8 #define BIOSMEM_VBE_FLAG 0xB9 #define BIOSMEM_VBE_MODE 0xBA +#define BIOSMEM_VBE_POWER 0xBC /* |