aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-07-30 10:02:11 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-07-30 10:02:11 +0100
commit5a168d3d8253c172f390ca17b109d9efe09b4a28 (patch)
tree54790712fa209d9fa92001d95ab42086eb9f6f11
parentd508c764f18bc68826d415ac5157bbb1b472e6da (diff)
downloadxen-5a168d3d8253c172f390ca17b109d9efe09b4a28.tar.gz
xen-5a168d3d8253c172f390ca17b109d9efe09b4a28.tar.bz2
xen-5a168d3d8253c172f390ca17b109d9efe09b4a28.zip
rombios: Simplify and clarify POST code a little.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-rw-r--r--tools/firmware/rombios/rombios.c66
1 files changed, 9 insertions, 57 deletions
diff --git a/tools/firmware/rombios/rombios.c b/tools/firmware/rombios/rombios.c
index 7e18e9d0ba..547d5cff87 100644
--- a/tools/firmware/rombios/rombios.c
+++ b/tools/firmware/rombios/rombios.c
@@ -739,7 +739,7 @@ typedef struct {
// device tables are at 0x9ff00 -- 0x9ffff
typedef struct {
unsigned char ebda_size;
- unsigned char s3_resume_flag;
+ unsigned char cmos_shutdown_status;
unsigned char filler1[0x3B];
// FDPT - Can be splitted in data members if needed
@@ -759,7 +759,7 @@ typedef struct {
upcall_t upcall;
} ebda_data_t;
- #define EBDA_S3_RESUME_FLAG_OFFSET 1
+ #define EBDA_CMOS_SHUTDOWN_STATUS_OFFSET 1
#define EbdaData ((ebda_data_t *) 0)
// for access to the int13ext structure
@@ -2344,21 +2344,20 @@ s3_resume()
{
Bit32u s3_wakeup_vector;
Bit16u s3_wakeup_ip, s3_wakeup_cs;
- Bit8u s3_resume_flag;
+ Bit8u cmos_shutdown_status;
ASM_START
push ds
push ax
mov ax, #EBDA_SEG
mov ds, ax
- mov al, [EBDA_S3_RESUME_FLAG_OFFSET]
- mov .s3_resume.s3_resume_flag[bp], al
- mov byte ptr [EBDA_S3_RESUME_FLAG_OFFSET], #0
+ mov al, [EBDA_CMOS_SHUTDOWN_STATUS_OFFSET]
+ mov .s3_resume.cmos_shutdown_status[bp], al
pop ax
pop ds
ASM_END
- if (s3_resume_flag != CMOS_SHUTDOWN_S3)
+ if (cmos_shutdown_status != CMOS_SHUTDOWN_S3)
return;
s3_wakeup_vector = get_s3_waking_vector();
@@ -9840,52 +9839,9 @@ post:
;; Examine CMOS shutdown status.
mov al, bl
-
- ;; 0xFE S3 resume
- cmp AL, #0xFE
- jnz not_s3_resume
-
- ;; set S3 resume flag
mov dx, #EBDA_SEG
mov ds, dx
- mov [EBDA_S3_RESUME_FLAG_OFFSET], AL
- jmp normal_post
-
-not_s3_resume:
-
- ;; 0x00, 0x09, 0x0D+ = normal startup
- cmp AL, #0x00
- jz normal_post
- cmp AL, #0x0d
- jae normal_post
- cmp AL, #0x09
- je normal_post
-
- ;; 0x05 = eoi + jmp via [0x40:0x67] jump
- cmp al, #0x05
- je eoi_jmp_post
-
- ;; Examine CMOS shutdown status.
- ;; 0x01,0x02,0x03,0x04,0x06,0x07,0x08, 0x0a, 0x0b, 0x0c = Unimplemented shutdown status.
- push bx
- call _shutdown_status_panic
-
-#if 0
- HALT(__LINE__)
- ;
- ;#if 0
- ; 0xb0, 0x20, /* mov al, #0x20 */
- ; 0xe6, 0x20, /* out 0x20, al ;send EOI to PIC */
- ;#endif
- ;
- pop es
- pop ds
- popa
- iret
-#endif
-
-normal_post:
- ; case 0: normal startup
+ mov [EBDA_CMOS_SHUTDOWN_STATUS_OFFSET], AL
cli
mov ax, #0xfffe
@@ -9904,12 +9860,6 @@ normal_post:
call _log_bios_start
-#ifdef HVMASSIST
- call _enable_rom_write_access
-#endif
-
- call _clobber_entry_point
-
;; set all interrupts to default handler
mov bx, #0x0000 ;; offset index
mov cx, #0x0100 ;; counter (256 interrupts)
@@ -10102,6 +10052,8 @@ post_default_ints:
out 0xa1, AL ;slave pic: unmask IRQ 12, 13, 14
#ifdef HVMASSIST
+ call _enable_rom_write_access
+ call _clobber_entry_point
call _copy_e820_table
call smbios_init
call _disable_rom_write_access