All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
	"Wei Liu" <wl@xen.org>, "Roger Pau Monné" <roger.pau@citrix.com>
Subject: [Xen-devel] [PATCH v2 2/3] x86: a little bit of 16-bit video mode setting code cleanup
Date: Fri, 30 Aug 2019 15:41:54 +0200	[thread overview]
Message-ID: <6aa3ae80-cb29-76a5-5ee0-dcc14b5c076b@suse.com> (raw)
In-Reply-To: <793a54c4-902f-ca02-357f-5080f938e0d6@suse.com>

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.

--- a/xen/arch/x86/boot/trampoline.S
+++ b/xen/arch/x86/boot/trampoline.S
@@ -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:
--- a/xen/arch/x86/boot/video.S
+++ b/xen/arch/x86/boot/video.S
@@ -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)
--- a/xen/arch/x86/boot/wakeup.S
+++ b/xen/arch/x86/boot/wakeup.S
@@ -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


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2019-08-30 13:42 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-30 13:38 [Xen-devel] [PATCH v2 0/3] x86: S3 resume adjustments Jan Beulich
2019-08-30 13:41 ` [Xen-devel] [PATCH v2 1/3] x86/ACPI: restore VESA mode upon resume from S3 Jan Beulich
2019-09-02 10:42   ` Andrew Cooper
2019-09-02 10:50     ` Jan Beulich
2019-08-30 13:41 ` Jan Beulich [this message]
2019-09-02 10:44   ` [Xen-devel] [PATCH v2 2/3] x86: a little bit of 16-bit video mode setting code cleanup Andrew Cooper
2019-08-30 13:42 ` [Xen-devel] [PATCH v2 3/3] x86: shrink video_{flags, mode} to {8, 16} bits Jan Beulich
2019-09-02 10:46   ` Andrew Cooper
2019-08-30 13:43 ` [Xen-devel] [PATCH v2 0/3] x86: S3 resume adjustments Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6aa3ae80-cb29-76a5-5ee0-dcc14b5c076b@suse.com \
    --to=jbeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=roger.pau@citrix.com \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.