@@ -176,6 +176,7 @@ start64:
jmpq *%rdi
+#include "video.h"
#include "wakeup.S"
.balign 8
@@ -282,8 +283,6 @@ trampoline_boot_cpu_entry:
/* Jump to the common bootstrap entry point. */
jmp trampoline_protmode_entry
-#include "video.h"
-
.align 2
/* Keep in sync with cmdline.c:early_boot_opts_t type! */
early_boot_opts:
@@ -384,9 +384,6 @@ lmbad: leaw bootsym(unknt), %si
jmp mode_menu
lmdef: ret
-_setrec: jmp setrec # Ugly...
-_set_80x25: jmp set_80x25
-
# Setting of user mode (AX=mode ID) => CF=success
mode_set:
movw %ax, bootsym(boot_vid_mode)
@@ -396,7 +393,7 @@ mode_set:
je setvesabysize
testb $VIDEO_RECALC>>8, %ah
- jnz _setrec
+ jnz setrec
cmpb $VIDEO_FIRST_SPECIAL>>8, %ah
jz setspc
@@ -421,7 +418,7 @@ setspc: xorb %bh, %bh
setmenu:
orb %al, %al # 80x25 is an exception
- jz _set_80x25
+ jz set_80x25
pushw %bx # Set mode chosen from menu
call mode_table # Build the mode table
@@ -441,36 +438,32 @@ check_vesa:
cmpw $0x004f, %ax
jnz setbad
- leaw vesa_mode_info, %di
- subb $VIDEO_FIRST_VESA>>8, %bh
- movw %bx, %cx # Get mode information structure
+ leaw vesa_mode_info, %di # Get mode information structure
+ leaw -VIDEO_FIRST_VESA(%bx), %cx
movw $0x4f01, %ax
int $0x10
- addb $VIDEO_FIRST_VESA>>8, %bh
cmpw $0x004f, %ax
jnz setbad
movb (%di), %al # Check mode attributes.
andb $0x99, %al
cmpb $0x99, %al
- jnz _setbad # Doh! No linear frame buffer.
+ jnz setbad # Doh! No linear frame buffer.
pushw %bx
subb $VIDEO_FIRST_VESA>>8, %bh
- orw $0x4000, %bx # Use linear frame buffer
+ orb $0x40, %bh # Use linear frame buffer
movw $0x4f02, %ax # VESA BIOS mode set call
int $0x10
popw %bx
cmpw $0x004f, %ax # AL=4f if implemented
- jnz _setbad # AH=0 if OK
+ jnz setbad # AH=0 if OK
movb $1, bootsym(graphic_mode) # flag graphic mode
movw %bx, bootsym(video_mode)
stc
ret
-_setbad: jmp setbad # Ugly...
-
# Recalculate vertical display end registers -- this fixes various
# inconsistencies of extended modes on many adapters. Called when
# the VIDEO_RECALC flag is set in the mode ID.
@@ -515,7 +508,7 @@ setvesabysize:
leaw modelist,%si
1: add $8,%si
cmpw $ASK_VGA,-8(%si) # End?
- je _setbad
+ je setbad
movw -6(%si),%ax
cmpw %ax,bootsym(vesa_size)+0
jne 1b
@@ -948,6 +941,7 @@ store_edid:
#endif
ret
+ .p2align 1
mt_end: .word 0 # End of video mode table if built
edit_buf: .space 6 # Line editor buffer
card_name: .word 0 # Pointer to adapter name
@@ -991,6 +985,7 @@ vesa_name: .asciz "VESA"
name_bann: .asciz "Video adapter: "
+ .p2align 1
force_size: .word 0 # Use this size instead of the one in BIOS vars
GLOBAL(boot_vid_info)
@@ -30,7 +30,7 @@ ENTRY(wakeup_start)
jne bogus_real_magic
# for acpi_sleep=s3_bios
- testl $1, wakesym(video_flags)
+ testb $1, wakesym(video_flags)
jz 1f
lcall $0xc000, $3
movw %cs, %ax # In case messed by BIOS
@@ -38,9 +38,9 @@ ENTRY(wakeup_start)
movw %ax, %ss # Need this? How to ret if clobbered?
1: # for acpi_sleep=s3_mode
- testl $2, wakesym(video_flags)
+ testb $2, wakesym(video_flags)
jz 1f
- movl wakesym(video_mode), %eax
+ movw wakesym(video_mode), %ax
call mode_setw
1: # Show some progress if VGA is resumed
@@ -56,48 +56,26 @@ ENTRY(wakeup_start)
ljmpl $BOOT_CS32, $bootsym_rel(wakeup_32, 6)
-/* This code uses an extended set of video mode numbers. These include:
- * Aliases for standard modes
- * NORMAL_VGA (-1)
- * EXTENDED_VGA (-2)
- * ASK_VGA (-3)
- * Video modes numbered by menu position -- NOT RECOMMENDED because of lack
- * of compatibility when extending the table. These are between 0x00 and 0xff.
- */
-#define VIDEO_FIRST_MENU 0x0000
-
-/* Standard BIOS video modes (BIOS number + 0x0100) */
-#define VIDEO_FIRST_BIOS 0x0100
-
-/* VESA BIOS video modes (VESA number + 0x0200) */
-#define VIDEO_FIRST_VESA 0x0200
-
-/* Video7 special modes (BIOS number + 0x0900) */
-#define VIDEO_FIRST_V7 0x0900
-
# Setting of user mode (AX=mode ID) => CF=success
mode_setw:
movw %ax, %bx
cmpb $VIDEO_FIRST_VESA>>8, %ah
jnc check_vesaw
- decb %ah
setbadw: clc
ret
check_vesaw:
subb $VIDEO_FIRST_VESA>>8, %bh
- orw $0x4000, %bx # Use linear frame buffer
+ orb $0x40, %bh # Use linear frame buffer
movw $0x4f02, %ax # VESA BIOS mode set call
int $0x10
cmpw $0x004f, %ax # AL=4f if implemented
- jnz _setbadw # AH=0 if OK
+ jnz setbadw # AH=0 if OK
stc
ret
-_setbadw: jmp setbadw
-
bogus_real_magic:
movw $0x0e00 + 'B', %fs:(0x12)
jmp bogus_real_magic
To "compensate" for the code size growth by an earlier change: - drop "trampoline" labels (in almost all cases the target label is reachable with an 8-bit-displacement branch anyway, and a single 16- bit-displacement branch is still better than a pair of two branches) - drop an entirely dead insn from wakeup.S:mode_setw - reduce code size in a few other (obvious I hope) cases, by more suitable insn/operands selection Also drop redundant #define-s (move suitable #include a little earlier instead) and add two alignment directives. Signed-off-by: Jan Beulich <jbeulich@suse.com> --- v2: Minor adjustment to description. Re-base.