Commit 9773fcf5 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] x86-64: synchronize video.S with i386

Sync x86-64 video.S with i386 changes
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 4bf5cb5e
...@@ -66,6 +66,7 @@ ...@@ -66,6 +66,7 @@
#define VIDEO_80x30 0x0f05 #define VIDEO_80x30 0x0f05
#define VIDEO_80x34 0x0f06 #define VIDEO_80x34 0x0f06
#define VIDEO_80x60 0x0f07 #define VIDEO_80x60 0x0f07
#define VIDEO_GFX_HACK 0x0f08
#define VIDEO_LAST_SPECIAL 0x0f09 #define VIDEO_LAST_SPECIAL 0x0f09
/* Video modes given by resolution */ /* Video modes given by resolution */
...@@ -97,7 +98,6 @@ ...@@ -97,7 +98,6 @@
#define PARAM_LFB_PAGES 0x32 #define PARAM_LFB_PAGES 0x32
#define PARAM_VESA_ATTRIB 0x34 #define PARAM_VESA_ATTRIB 0x34
/* Define DO_STORE according to CONFIG_VIDEO_RETAIN */ /* Define DO_STORE according to CONFIG_VIDEO_RETAIN */
#ifdef CONFIG_VIDEO_RETAIN #ifdef CONFIG_VIDEO_RETAIN
#define DO_STORE call store_screen #define DO_STORE call store_screen
...@@ -133,6 +133,7 @@ vid1: ...@@ -133,6 +133,7 @@ vid1:
#ifdef CONFIG_VIDEO_RETAIN #ifdef CONFIG_VIDEO_RETAIN
call restore_screen # Restore screen contents call restore_screen # Restore screen contents
#endif /* CONFIG_VIDEO_RETAIN */ #endif /* CONFIG_VIDEO_RETAIN */
call store_edid
#endif /* CONFIG_VIDEO_SELECT */ #endif /* CONFIG_VIDEO_SELECT */
call mode_params # Store mode parameters call mode_params # Store mode parameters
popw %ds # Restore original DS popw %ds # Restore original DS
...@@ -231,6 +232,41 @@ mopar_gr: ...@@ -231,6 +232,41 @@ mopar_gr:
xorl %eax, %eax xorl %eax, %eax
movw 18(%di), %ax movw 18(%di), %ax
movl %eax, %fs:(PARAM_LFB_SIZE) movl %eax, %fs:(PARAM_LFB_SIZE)
# switching the DAC to 8-bit is for <= 8 bpp only
movw %fs:(PARAM_LFB_DEPTH), %ax
cmpw $8, %ax
jg dac_done
# get DAC switching capability
xorl %eax, %eax
movb 10(%di), %al
testb $1, %al
jz dac_set
# attempt to switch DAC to 8-bit
movw $0x4f08, %ax
movw $0x0800, %bx
int $0x10
cmpw $0x004f, %ax
jne dac_set
movb %bh, dac_size # store actual DAC size
dac_set:
# set color size to DAC size
movb dac_size, %al
movb %al, %fs:(PARAM_LFB_COLORS+0)
movb %al, %fs:(PARAM_LFB_COLORS+2)
movb %al, %fs:(PARAM_LFB_COLORS+4)
movb %al, %fs:(PARAM_LFB_COLORS+6)
# set color offsets to 0
movb $0, %fs:(PARAM_LFB_COLORS+1)
movb $0, %fs:(PARAM_LFB_COLORS+3)
movb $0, %fs:(PARAM_LFB_COLORS+5)
movb $0, %fs:(PARAM_LFB_COLORS+7)
dac_done:
# get protected mode interface informations # get protected mode interface informations
movw $0x4f0a, %ax movw $0x4f0a, %ax
xorw %bx, %bx xorw %bx, %bx
...@@ -440,7 +476,7 @@ setalias: ...@@ -440,7 +476,7 @@ setalias:
# Setting of user mode (AX=mode ID) => CF=success # Setting of user mode (AX=mode ID) => CF=success
mode_set: mode_set:
movw %ax, %fs:(0x01fa) movw %ax, %fs:(0x01fa) # Store mode for use in acpi_wakeup.S
movw %ax, %bx movw %ax, %bx
cmpb $0xff, %ah cmpb $0xff, %ah
jz setalias jz setalias
...@@ -744,7 +780,15 @@ set_80x60: ...@@ -744,7 +780,15 @@ set_80x60:
movw $0x503c, force_size movw $0x503c, force_size
jmp setvde jmp setvde
# Special hack for ThinkPad graphics
set_gfx: set_gfx:
#ifdef CONFIG_VIDEO_GFX_HACK
movw $VIDEO_GFX_BIOS_AX, %ax
movw $VIDEO_GFX_BIOS_BX, %bx
int $0x10
movw $VIDEO_GFX_DUMMY_RESOLUTION, force_size
stc
#endif
ret ret
#ifdef CONFIG_VIDEO_RETAIN #ifdef CONFIG_VIDEO_RETAIN
...@@ -969,6 +1013,10 @@ vga_modes: ...@@ -969,6 +1013,10 @@ vga_modes:
.word 0x5022 # 80x34 .word 0x5022 # 80x34
.word VIDEO_80x60 .word VIDEO_80x60
.word 0x503c # 80x60 .word 0x503c # 80x60
#ifdef CONFIG_VIDEO_GFX_HACK
.word VIDEO_GFX_HACK
.word VIDEO_GFX_DUMMY_RESOLUTION
#endif
vga_modes_end: vga_modes_end:
# Detect VESA modes. # Detect VESA modes.
...@@ -1875,6 +1923,39 @@ skip10: movb %ah, %al ...@@ -1875,6 +1923,39 @@ skip10: movb %ah, %al
popw %ax popw %ax
ret ret
store_edid:
pushw %es # just save all registers
pushw %ax
pushw %bx
pushw %cx
pushw %dx
pushw %di
pushw %fs
popw %es
movl $0x13131313, %eax # memset block with 0x13
movw $32, %cx
movw $0x440, %di
cld
rep
stosl
movw $0x4f15, %ax # do VBE/DDC
movw $0x01, %bx
movw $0x00, %cx
movw $0x01, %dx
movw $0x440, %di
int $0x10
popw %di # restore all registers
popw %dx
popw %cx
popw %bx
popw %ax
popw %es
ret
# VIDEO_SELECT-only variables # VIDEO_SELECT-only variables
mt_end: .word 0 # End of video mode table if built mt_end: .word 0 # End of video mode table if built
edit_buf: .space 6 # Line editor buffer edit_buf: .space 6 # Line editor buffer
...@@ -1883,6 +1964,7 @@ scanning: .byte 0 # Performing mode scan ...@@ -1883,6 +1964,7 @@ scanning: .byte 0 # Performing mode scan
do_restore: .byte 0 # Screen contents altered during mode change do_restore: .byte 0 # Screen contents altered during mode change
svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes
graphic_mode: .byte 0 # Graphic mode with a linear frame buffer graphic_mode: .byte 0 # Graphic mode with a linear frame buffer
dac_size: .byte 6 # DAC bit depth
# Status messages # Status messages
keymsg: .ascii "Press <RETURN> to see video modes available, " keymsg: .ascii "Press <RETURN> to see video modes available, "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment