* [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS
@ 2008-11-03 9:26 Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 1/6] Move PIC initialization out of line to save space in post code area Gleb Natapov
` (5 more replies)
0 siblings, 6 replies; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
Hello,
This patch series adds S3 (suspend to RAM) ACPI state to BIOS. Most
changes concern themselves with preventing BIOS from using memory
locations available to a guest OS.
Changelog:
v2:
- Don't disable SMM.
- Jump to resume vector ASAP. Don't execute entire POST.
- Use smp_cpus directly for smp initialization instead of special memory
location.
---
Gleb Natapov (6):
Don't power down vga card on entering S3 state.
Don't use unreserved memory in BIOS.
Execute rombios32 code from rom address 0xe0000.
Preserve memory content during SMM init.
Add S3 state to DSDT. Handle resume event in the BIOS.
Move PIC initialization out of line to save space in post code area.
bios/Makefile.in | 1
bios/acpi-dsdt.dsl | 45 +++++-
bios/acpi-dsdt.hex | 376 +++++++++++++++++++++++++------------------------
bios/rombios.c | 112 +++++++++------
bios/rombios.h | 1
bios/rombios32.c | 95 +++++++++++-
bios/rombios32.ld | 8 -
bios/rombios32start.S | 11 +
8 files changed, 398 insertions(+), 251 deletions(-)
--
Gleb.
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v2 1/6] Move PIC initialization out of line to save space in post code area.
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
@ 2008-11-03 9:26 ` Gleb Natapov
2008-11-06 21:42 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 1/6] Move PIC initialization out ofline " Sebastian Herbszt
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 2/6] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov
` (4 subsequent siblings)
5 siblings, 1 reply; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
There are only a couple of bytes left in post area.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
bios/rombios.c | 48 ++++++++++++++++++++++++++----------------------
1 files changed, 26 insertions(+), 22 deletions(-)
diff --git a/bios/rombios.c b/bios/rombios.c
index 3366ad9..88eac04 100644
--- a/bios/rombios.c
+++ b/bios/rombios.c
@@ -10256,6 +10256,31 @@ rom_scan_increment:
mov ds, ax
ret
+post_init_pic:
+ mov al, #0x11 ; send initialisation commands
+ out 0x20, al
+ out 0xa0, al
+ mov al, #0x08
+ out 0x21, al
+ mov al, #0x70
+ out 0xa1, al
+ mov al, #0x04
+ out 0x21, al
+ mov al, #0x02
+ out 0xa1, al
+ mov al, #0x01
+ out 0x21, al
+ out 0xa1, al
+ mov al, #0xb8
+ out 0x21, AL ;master pic: unmask IRQ 0, 1, 2, 6
+#if BX_USE_PS2_MOUSE
+ mov al, #0x8f
+#else
+ mov al, #0x9f
+#endif
+ out 0xa1, AL ;slave pic: unmask IRQ 12, 13, 14
+ ret
+
;; the following area can be used to write dynamically generated tables
.align 16
bios_table_area_start:
@@ -10516,28 +10541,7 @@ post_default_ints:
SET_INT_VECTOR(0x10, #0xF000, #int10_handler)
;; PIC
- mov al, #0x11 ; send initialisation commands
- out 0x20, al
- out 0xa0, al
- mov al, #0x08
- out 0x21, al
- mov al, #0x70
- out 0xa1, al
- mov al, #0x04
- out 0x21, al
- mov al, #0x02
- out 0xa1, al
- mov al, #0x01
- out 0x21, al
- out 0xa1, al
- mov al, #0xb8
- out 0x21, AL ;master pic: unmask IRQ 0, 1, 2, 6
-#if BX_USE_PS2_MOUSE
- mov al, #0x8f
-#else
- mov al, #0x9f
-#endif
- out 0xa1, AL ;slave pic: unmask IRQ 12, 13, 14
+ call post_init_pic
mov cx, #0xc000 ;; init vga bios
mov ax, #0xc780
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v2 2/6] Add S3 state to DSDT. Handle resume event in the BIOS.
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 1/6] Move PIC initialization out of line to save space in post code area Gleb Natapov
@ 2008-11-03 9:26 ` Gleb Natapov
2008-11-06 23:03 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 2/6] Add S3 state to DSDT. Handleresume " Sebastian Herbszt
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 3/6] Preserve memory content during SMM init Gleb Natapov
` (3 subsequent siblings)
5 siblings, 1 reply; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
bios/acpi-dsdt.dsl | 30 +++++++++++++++++----
bios/acpi-dsdt.hex | 17 +++++++-----
bios/rombios.c | 41 +++++++++++++++++++++++++++++
bios/rombios32.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++--
4 files changed, 146 insertions(+), 16 deletions(-)
diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl
index 19ac2f9..f201396 100644
--- a/bios/acpi-dsdt.dsl
+++ b/bios/acpi-dsdt.dsl
@@ -531,11 +531,29 @@ DefinitionBlock (
}
}
- /* S5 = power off state */
- Name (_S5, Package (4) {
- 0x00, // PM1a_CNT.SLP_TYP
- 0x00, // PM2a_CNT.SLP_TYP
- 0x00, // reserved
- 0x00, // reserved
+ /*
+ * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes:
+ * must match piix4 emulation.
+ */
+ Name (\_S3, Package (0x04)
+ {
+ 0x01, /* PM1a_CNT.SLP_TYP */
+ 0x01, /* PM1b_CNT.SLP_TYP */
+ Zero, /* reserved */
+ Zero /* reserved */
+ })
+ Name (\_S4, Package (0x04)
+ {
+ Zero, /* PM1a_CNT.SLP_TYP */
+ Zero, /* PM1b_CNT.SLP_TYP */
+ Zero, /* reserved */
+ Zero /* reserved */
+ })
+ Name (\_S5, Package (0x04)
+ {
+ Zero, /* PM1a_CNT.SLP_TYP */
+ Zero, /* PM1b_CNT.SLP_TYP */
+ Zero, /* reserved */
+ Zero /* reserved */
})
}
diff --git a/bios/acpi-dsdt.hex b/bios/acpi-dsdt.hex
index 6bc6268..6088b18 100644
--- a/bios/acpi-dsdt.hex
+++ b/bios/acpi-dsdt.hex
@@ -1,22 +1,22 @@
/*
*
* Intel ACPI Component Architecture
- * ASL Optimizing Compiler version 20060912 [Nov 25 2006]
+ * ASL Optimizing Compiler version 20061109 [May 15 2007]
* Copyright (C) 2000 - 2006 Intel Corporation
* Supports ACPI Specification Revision 3.0a
*
- * Compilation of "acpi-dsdt.dsl" - Sun Sep 14 10:27:40 2008
+ * Compilation of "acpi-dsdt.dsl" - Mon Oct 27 10:37:05 2008
*
* C source code output
*
*/
-unsigned char AmlCode[] =
+const unsigned char AmlCode[] =
{
- 0x44,0x53,0x44,0x54,0xC9,0x07,0x00,0x00, /* 00000000 "DSDT...." */
- 0x01,0x0E,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 "..BXPC.." */
+ 0x44,0x53,0x44,0x54,0xE1,0x07,0x00,0x00, /* 00000000 "DSDT...." */
+ 0x01,0x24,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 ".$BXPC.." */
0x42,0x58,0x44,0x53,0x44,0x54,0x00,0x00, /* 00000010 "BXDSDT.." */
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
- 0x12,0x09,0x06,0x20,0x10,0x1C,0x5C,0x00, /* 00000020 "... ..\." */
+ 0x09,0x11,0x06,0x20,0x10,0x1C,0x5C,0x00, /* 00000020 "... ..\." */
0x5B,0x80,0x44,0x42,0x47,0x5F,0x01,0x0B, /* 00000028 "[.DBG_.." */
0x44,0xB0,0x0A,0x04,0x5B,0x81,0x0B,0x44, /* 00000030 "D...[..D" */
0x42,0x47,0x5F,0x03,0x44,0x42,0x47,0x4C, /* 00000038 "BG_.DBGL" */
@@ -260,6 +260,9 @@ unsigned char AmlCode[] =
0x8B,0x68,0x01,0x54,0x4D,0x50,0x5F,0x82, /* 000007A8 ".h.TMP_." */
0x54,0x4D,0x50,0x5F,0x60,0x76,0x60,0x70, /* 000007B0 "TMP_`v`p" */
0x60,0x50,0x52,0x51,0x33,0x08,0x5F,0x53, /* 000007B8 "`PRQ3._S" */
- 0x35,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007C0 "5_......" */
+ 0x33,0x5F,0x12,0x06,0x04,0x01,0x01,0x00, /* 000007C0 "3_......" */
+ 0x00,0x08,0x5F,0x53,0x34,0x5F,0x12,0x06, /* 000007C8 ".._S4_.." */
+ 0x04,0x00,0x00,0x00,0x00,0x08,0x5F,0x53, /* 000007D0 "......_S" */
+ 0x35,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007D8 "5_......" */
0x00,
};
diff --git a/bios/rombios.c b/bios/rombios.c
index 88eac04..03540cb 100644
--- a/bios/rombios.c
+++ b/bios/rombios.c
@@ -2198,6 +2198,31 @@ debugger_off()
outb(0xfedc, 0x00);
}
+void
+s3_resume()
+{
+ Bit32u s3_wakeup_vector;
+ Bit8u s3_resume_flag;
+
+ s3_resume_flag = read_byte(0x40, 0xb0);
+ s3_wakeup_vector = read_dword(0x40, 0xb2);
+
+ BX_INFO("S3 resume called %x 0x%lx\n", s3_resume_flag, s3_wakeup_vector);
+ if (s3_resume_flag != 0xFE || !s3_wakeup_vector)
+ return;
+
+ write_byte(0x40, 0xb0, 0);
+
+ /* setup wakeup vector */
+ write_word(0x40, 0xb6, (s3_wakeup_vector & 0xF)); /* IP */
+ write_word(0x40, 0xb8, (s3_wakeup_vector >> 4)); /* CS */
+
+ BX_INFO("S3 resume jump to %x:%x\n", *(Bit16u*)0x04b8, *(Bit16u*)0x04b6);
+ASM_START
+ jmpf [0x04b6]
+ASM_END
+}
+
#if BX_USE_ATADRV
// ---------------------------------------------------------------------------
@@ -9081,6 +9106,12 @@ retf_post_0x467:
mov ss, [0x469]
retf
+s3_post:
+#if BX_ROMBIOS32
+ call rombios32_init
+#endif
+ call _s3_resume
+ hlt
;--------------------
eoi_both_pics:
@@ -10005,6 +10036,10 @@ rombios32_05:
;; init the stack pointer
mov esp, #0x00080000
+ ;; pass pointer to s3_resume_flag and s3_resume_vector to rombios32
+ push #0x04b0
+ push #0x04b2
+
;; call rombios32 code
mov eax, #0x00040000
call eax
@@ -10375,6 +10410,12 @@ normal_post:
mov ds, ax
mov ss, ax
+ ;; Save shutdown status
+ mov 0x04b0, bl
+
+ cmp bl, #0xfe
+ jz s3_post
+
;; zero out BIOS data area (40:00..40:ff)
mov es, ax
mov cx, #0x0080 ;; 128 words
diff --git a/bios/rombios32.c b/bios/rombios32.c
index f0daf15..b8968e4 100644
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -180,6 +180,20 @@ void *memmove(void *d1, const void *s1, size_t len)
return d1;
}
+int memcmp(const void *s1, const void *s2, size_t len)
+{
+ const int8_t *p1 = s1;
+ const int8_t *p2 = s2;
+
+ while (len--) {
+ int r = *p1++ - *p2++;
+ if(r)
+ return r;
+ }
+
+ return 0;
+}
+
size_t strlen(const char *s)
{
const char *s1;
@@ -644,7 +658,7 @@ static void bios_shadow_init(PCIDevice *d)
{
int v;
- if (find_bios_table_area() < 0)
+ if (bios_table_cur_addr == 0)
return;
/* remap the BIOS to shadow RAM an keep it read/write while we
@@ -1461,7 +1475,7 @@ void acpi_bios_init(void)
memset(facs, 0, sizeof(*facs));
memcpy(facs->signature, "FACS", 4);
facs->length = cpu_to_le32(sizeof(*facs));
-
+ BX_INFO("Firmware waking vector %p\n", &facs->firmware_waking_vector);
/* DSDT */
memcpy(dsdt, AmlCode, sizeof(AmlCode));
@@ -2011,9 +2025,48 @@ void smbios_init(void)
BX_INFO("SMBIOS table addr=0x%08lx\n", (unsigned long)start);
}
-void rombios32_init(void)
+static uint32_t find_resume_vector(void)
+{
+ unsigned long addr, start, end;
+
+#ifdef BX_USE_EBDA_TABLES
+ start = align(ebda_cur_addr, 16);
+ end = 0xa0000 << 4;
+#else
+ if (bios_table_cur_addr == 0)
+ return 0;
+ start = align(bios_table_cur_addr, 16);
+ end = bios_table_end_addr;
+#endif
+
+ for (addr = start; addr < end; addr += 16) {
+ if (!memcmp((void*)addr, "RSD PTR ", 8)) {
+ struct rsdp_descriptor *rsdp = (void*)addr;
+ struct rsdt_descriptor_rev1 *rsdt = (void*)rsdp->rsdt_physical_address;
+ struct fadt_descriptor_rev1 *fadt = (void*)rsdt->table_offset_entry[0];
+ struct facs_descriptor_rev1 *facs = (void*)fadt->firmware_ctrl;
+ return facs->firmware_waking_vector;
+ }
+ }
+
+ return 0;
+}
+
+static void find_440fx(PCIDevice *d)
+{
+ uint16_t vendor_id, device_id;
+
+ vendor_id = pci_config_readw(d, PCI_VENDOR_ID);
+ device_id = pci_config_readw(d, PCI_DEVICE_ID);
+
+ if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82441)
+ i440_pcidev = *d;
+}
+
+void rombios32_init(uint32_t *s3_resume_vector, uint8_t *shutdown_flag)
{
BX_INFO("Starting rombios32\n");
+ BX_INFO("Shutdown flag %x\n", *shutdown_flag);
#ifdef BX_QEMU
qemu_cfg_port = qemu_cfg_port_probe();
@@ -2025,6 +2078,21 @@ void rombios32_init(void)
smp_probe();
+ find_bios_table_area();
+
+ if (*shutdown_flag == 0xfe) {
+ *s3_resume_vector = find_resume_vector();
+ if (!*s3_resume_vector) {
+ BX_INFO("This is S3 resume but wakeup vector is NULL\n");
+ } else {
+ BX_INFO("S3 resume vector %p\n", *s3_resume_vector);
+ /* redirect bios read access to RAM */
+ pci_for_each_device(find_440fx);
+ bios_lock_shadow_ram(); /* bios is already copied */
+ return;
+ }
+ }
+
pci_bios_init();
if (bios_table_cur_addr != 0) {
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v2 3/6] Preserve memory content during SMM init.
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 1/6] Move PIC initialization out of line to save space in post code area Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 2/6] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov
@ 2008-11-03 9:26 ` Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 4/6] Execute rombios32 code from rom address 0xe0000 Gleb Natapov
` (2 subsequent siblings)
5 siblings, 0 replies; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
bios/rombios32.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/bios/rombios32.c b/bios/rombios32.c
index b8968e4..0a8d498 100644
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -731,6 +731,12 @@ static void smm_init(PCIDevice *d)
value = pci_config_readl(d, 0x58);
if ((value & (1 << 25)) == 0) {
+ /* enable the SMM memory window */
+ pci_config_writeb(&i440_pcidev, 0x72, 0x02 | 0x48);
+
+ /* save original memory content */
+ memcpy((void *)0xa8000, (void *)0x38000, 0x8000);
+
/* copy the SMM relocation code */
memcpy((void *)0x38000, &smm_relocation_start,
&smm_relocation_end - &smm_relocation_start);
@@ -747,8 +753,8 @@ static void smm_init(PCIDevice *d)
/* wait until SMM code executed */
while (inb(0xb3) != 0x00);
- /* enable the SMM memory window */
- pci_config_writeb(&i440_pcidev, 0x72, 0x02 | 0x48);
+ /* restore original memory content */
+ memcpy((void *)0x38000, (void *)0xa8000, 0x8000);
/* copy the SMM code */
memcpy((void *)0xa8000, &smm_code_start,
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v2 4/6] Execute rombios32 code from rom address 0xe0000.
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
` (2 preceding siblings ...)
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 3/6] Preserve memory content during SMM init Gleb Natapov
@ 2008-11-03 9:26 ` Gleb Natapov
2008-11-07 23:20 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code from romaddress 0xe0000 Sebastian Herbszt
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 5/6] Don't use unreserved memory in BIOS Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 6/6] Don't power down vga card on entering S3 state Gleb Natapov
5 siblings, 1 reply; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
bios/Makefile.in | 1 +
bios/rombios.c | 17 +----------------
bios/rombios32.ld | 8 +++-----
bios/rombios32start.S | 9 ++++++++-
4 files changed, 13 insertions(+), 22 deletions(-)
diff --git a/bios/Makefile.in b/bios/Makefile.in
index b055910..af674b4 100644
--- a/bios/Makefile.in
+++ b/bios/Makefile.in
@@ -106,6 +106,7 @@ rombios32.o: rombios32.c acpi-dsdt.hex
ifeq ("1", "0")
acpi-dsdt.hex: acpi-dsdt.dsl
iasl -tc -p $@ $<
+ sed -i -e's/^unsigned/const unsigned/' $@
endif
rombios32start.o: rombios32start.S
diff --git a/bios/rombios.c b/bios/rombios.c
index 03540cb..098543c 100644
--- a/bios/rombios.c
+++ b/bios/rombios.c
@@ -10026,13 +10026,6 @@ rombios32_05:
mov gs, ax
cld
- ;; copy rombios32 code to ram (ram offset = 1MB)
- mov esi, #0xfffe0000
- mov edi, #0x00040000
- mov ecx, #0x10000 / 4
- rep
- movsd
-
;; init the stack pointer
mov esp, #0x00080000
@@ -10041,17 +10034,9 @@ rombios32_05:
push #0x04b2
;; call rombios32 code
- mov eax, #0x00040000
+ mov eax, #0x000e0000
call eax
- ;; reset the memory (some boot loaders such as syslinux suppose
- ;; that the memory is set to zero)
- mov edi, #0x00040000
- mov ecx, #0x40000 / 4
- xor eax, eax
- rep
- stosd
-
;; return to 16 bit protected mode first
db 0xea
dd rombios32_10
diff --git a/bios/rombios32.ld b/bios/rombios32.ld
index c7f6066..113a2c0 100644
--- a/bios/rombios32.ld
+++ b/bios/rombios32.ld
@@ -3,14 +3,12 @@ OUTPUT_ARCH(i386)
ENTRY(_start);
SECTIONS
{
- . = 0x00040000;
+ . = 0x000e0000;
.text : { *(.text) }
.rodata : { *(.rodata) }
- . = ALIGN(4096);
- .data : { *(.data) }
- __bss_start = . ;
- .bss : { *(.bss) *(COMMON) }
_end = . ;
+ .data 0x700 : AT (_end) { __data_start = .; *(.data); __data_end = .;}
+ .bss : { __bss_start = .; *(.bss) *(COMMON); __bss_end = .;}
/DISCARD/ : { *(.stab)
*(.stabstr)
*(.comment)
diff --git a/bios/rombios32start.S b/bios/rombios32start.S
index 601e2b0..1900261 100644
--- a/bios/rombios32start.S
+++ b/bios/rombios32start.S
@@ -32,10 +32,17 @@ _start:
/* clear bss section */
xor %eax, %eax
mov $__bss_start, %edi
- mov $_end, %ecx
+ mov $__bss_end, %ecx
sub %edi, %ecx
rep stosb
+ /* copy data section */
+ mov $_end, %esi
+ mov $__data_start, %edi
+ mov $__data_end, %ecx
+ sub %edi, %ecx
+ rep movsb
+
jmp rombios32_init
.code16
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v2 5/6] Don't use unreserved memory in BIOS.
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
` (3 preceding siblings ...)
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 4/6] Execute rombios32 code from rom address 0xe0000 Gleb Natapov
@ 2008-11-03 9:26 ` Gleb Natapov
2008-11-07 0:25 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 6/6] Don't power down vga card on entering S3 state Gleb Natapov
5 siblings, 1 reply; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
Use only first page and last page of low memory. OSes assumes that first
page is used by bios and last page is reserved in e820 map.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
bios/rombios.c | 6 +++---
bios/rombios.h | 1 -
bios/rombios32.c | 11 ++++-------
bios/rombios32start.S | 2 +-
4 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/bios/rombios.c b/bios/rombios.c
index 098543c..6fc4e0e 100644
--- a/bios/rombios.c
+++ b/bios/rombios.c
@@ -4541,7 +4541,7 @@ ASM_END
{
case 0:
set_e820_range(ES, regs.u.r16.di,
- 0x0000000L, 0x0009fc00L, 1);
+ 0x0000000L, 0x0009f000L, 1);
regs.u.r32.ebx = 1;
regs.u.r32.eax = 0x534D4150;
regs.u.r32.ecx = 0x14;
@@ -4550,7 +4550,7 @@ ASM_END
break;
case 1:
set_e820_range(ES, regs.u.r16.di,
- 0x0009fc00L, 0x000a0000L, 2);
+ 0x0009f000L, 0x000a0000L, 2);
regs.u.r32.ebx = 2;
regs.u.r32.eax = 0x534D4150;
regs.u.r32.ecx = 0x14;
@@ -10027,7 +10027,7 @@ rombios32_05:
cld
;; init the stack pointer
- mov esp, #0x00080000
+ mov esp, #0x9fbf0
;; pass pointer to s3_resume_flag and s3_resume_vector to rombios32
push #0x04b0
diff --git a/bios/rombios.h b/bios/rombios.h
index f0ed88e..b3df88b 100644
--- a/bios/rombios.h
+++ b/bios/rombios.h
@@ -56,7 +56,6 @@
#define ACPI_DATA_SIZE 0x00010000L
#define PM_IO_BASE 0xb000
#define SMB_IO_BASE 0xb100
-#define CPU_COUNT_ADDR 0xf000
// Define the application NAME
#if defined(BX_QEMU)
diff --git a/bios/rombios32.c b/bios/rombios32.c
index 0a8d498..66e6a52 100644
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -57,7 +57,7 @@ typedef unsigned long long uint64_t;
#define APIC_ENABLED 0x0100
-#define AP_BOOT_ADDR 0x10000
+#define AP_BOOT_ADDR 0x9f000
#define MPTABLE_MAX_SIZE 0x00002000
#define SMI_CMD_IO_ADDR 0xb2
@@ -392,7 +392,7 @@ void delay_ms(int n)
}
}
-int smp_cpus;
+uint16_t smp_cpus;
uint32_t cpuid_signature;
uint32_t cpuid_features;
uint32_t cpuid_ext_features;
@@ -495,7 +495,7 @@ void smp_probe(void)
{
uint32_t val, sipi_vector;
- smp_cpus = 1;
+ writew(&smp_cpus, 1);
if (cpuid_features & CPUID_APIC) {
/* enable local APIC */
@@ -503,7 +503,6 @@ void smp_probe(void)
val |= APIC_ENABLED;
writel(APIC_BASE + APIC_SVR, val);
- writew((void *)CPU_COUNT_ADDR, 1);
/* copy AP boot code */
memcpy((void *)AP_BOOT_ADDR, &smp_ap_boot_code_start,
&smp_ap_boot_code_end - &smp_ap_boot_code_start);
@@ -514,10 +513,8 @@ void smp_probe(void)
writel(APIC_BASE + APIC_ICR_LOW, 0x000C4600 | sipi_vector);
delay_ms(10);
-
- smp_cpus = readw((void *)CPU_COUNT_ADDR);
}
- BX_INFO("Found %d cpu(s)\n", smp_cpus);
+ BX_INFO("Found %d cpu(s)\n", readw(&smp_cpus));
}
/****************************************************/
diff --git a/bios/rombios32start.S b/bios/rombios32start.S
index 1900261..836652c 100644
--- a/bios/rombios32start.S
+++ b/bios/rombios32start.S
@@ -49,7 +49,7 @@ _start:
smp_ap_boot_code_start:
xor %ax, %ax
mov %ax, %ds
- lock incw CPU_COUNT_ADDR
+ lock incw smp_cpus
1:
hlt
jmp 1b
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v2 6/6] Don't power down vga card on entering S3 state.
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
` (4 preceding siblings ...)
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 5/6] Don't use unreserved memory in BIOS Gleb Natapov
@ 2008-11-03 9:26 ` Gleb Natapov
5 siblings, 0 replies; 19+ messages in thread
From: Gleb Natapov @ 2008-11-03 9:26 UTC (permalink / raw)
To: bochs-developers; +Cc: qemu-devel
This is needed to fool windows to enter S3. The trick works for XP and
Windows2003, but Vista still refuse to allow S3.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
bios/acpi-dsdt.dsl | 15 ++
bios/acpi-dsdt.hex | 373 ++++++++++++++++++++++++++--------------------------
2 files changed, 204 insertions(+), 184 deletions(-)
diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl
index f201396..3829569 100644
--- a/bios/acpi-dsdt.dsl
+++ b/bios/acpi-dsdt.dsl
@@ -133,6 +133,21 @@ DefinitionBlock (
}
Scope(\_SB.PCI0) {
+ Device (VGA) {
+ Name (_ADR, 0x00020000)
+ Method (_S1D, 0, NotSerialized)
+ {
+ Return (0x00)
+ }
+ Method (_S2D, 0, NotSerialized)
+ {
+ Return (0x00)
+ }
+ Method (_S3D, 0, NotSerialized)
+ {
+ Return (0x00)
+ }
+ }
/* PIIX3 ISA bridge */
Device (ISA) {
diff --git a/bios/acpi-dsdt.hex b/bios/acpi-dsdt.hex
index 6088b18..a4c64e6 100644
--- a/bios/acpi-dsdt.hex
+++ b/bios/acpi-dsdt.hex
@@ -5,15 +5,15 @@
* Copyright (C) 2000 - 2006 Intel Corporation
* Supports ACPI Specification Revision 3.0a
*
- * Compilation of "acpi-dsdt.dsl" - Mon Oct 27 10:37:05 2008
+ * Compilation of "acpi-dsdt.dsl" - Mon Oct 27 10:39:43 2008
*
* C source code output
*
*/
const unsigned char AmlCode[] =
{
- 0x44,0x53,0x44,0x54,0xE1,0x07,0x00,0x00, /* 00000000 "DSDT...." */
- 0x01,0x24,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 ".$BXPC.." */
+ 0x44,0x53,0x44,0x54,0x0D,0x08,0x00,0x00, /* 00000000 "DSDT...." */
+ 0x01,0xA1,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 "..BXPC.." */
0x42,0x58,0x44,0x53,0x44,0x54,0x00,0x00, /* 00000010 "BXDSDT.." */
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
0x09,0x11,0x06,0x20,0x10,0x1C,0x5C,0x00, /* 00000020 "... ..\." */
@@ -83,186 +83,191 @@ const unsigned char AmlCode[] =
0x17,0x00,0x00,0x0C,0x01,0x00,0x00,0x00, /* 00000220 "........" */
0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xBF, /* 00000228 "........" */
0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, /* 00000230 "........" */
- 0x1E,0x79,0x00,0x10,0x41,0x29,0x2E,0x5F, /* 00000238 ".y..A)._" */
+ 0x1E,0x79,0x00,0x10,0x4D,0x2B,0x2E,0x5F, /* 00000238 ".y..M+._" */
0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x5B, /* 00000240 "SB_PCI0[" */
- 0x82,0x42,0x23,0x49,0x53,0x41,0x5F,0x08, /* 00000248 ".B#ISA_." */
- 0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,0x01, /* 00000250 "_ADR...." */
- 0x00,0x5B,0x80,0x50,0x34,0x30,0x43,0x02, /* 00000258 ".[.P40C." */
- 0x0A,0x60,0x0A,0x04,0x5B,0x82,0x2D,0x52, /* 00000260 ".`..[.-R" */
- 0x54,0x43,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00000268 "TC_._HID" */
- 0x0C,0x41,0xD0,0x0B,0x00,0x08,0x5F,0x43, /* 00000270 ".A...._C" */
- 0x52,0x53,0x11,0x18,0x0A,0x15,0x47,0x01, /* 00000278 "RS....G." */
- 0x70,0x00,0x70,0x00,0x10,0x02,0x22,0x00, /* 00000280 "p.p..."." */
- 0x01,0x47,0x01,0x72,0x00,0x72,0x00,0x02, /* 00000288 ".G.r.r.." */
- 0x06,0x79,0x00,0x5B,0x82,0x44,0x04,0x4B, /* 00000290 ".y.[.D.K" */
- 0x42,0x44,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00000298 "BD_._HID" */
- 0x0C,0x41,0xD0,0x03,0x03,0x14,0x09,0x5F, /* 000002A0 ".A....._" */
- 0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x14, /* 000002A8 "STA....." */
- 0x29,0x5F,0x43,0x52,0x53,0x00,0x08,0x54, /* 000002B0 ")_CRS..T" */
- 0x4D,0x50,0x5F,0x11,0x18,0x0A,0x15,0x47, /* 000002B8 "MP_....G" */
- 0x01,0x60,0x00,0x60,0x00,0x01,0x01,0x47, /* 000002C0 ".`.`...G" */
- 0x01,0x64,0x00,0x64,0x00,0x01,0x01,0x22, /* 000002C8 ".d.d..."" */
- 0x02,0x00,0x79,0x00,0xA4,0x54,0x4D,0x50, /* 000002D0 "..y..TMP" */
- 0x5F,0x5B,0x82,0x33,0x4D,0x4F,0x55,0x5F, /* 000002D8 "_[.3MOU_" */
- 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 000002E0 "._HID.A." */
- 0x0F,0x13,0x14,0x09,0x5F,0x53,0x54,0x41, /* 000002E8 "...._STA" */
- 0x00,0xA4,0x0A,0x0F,0x14,0x19,0x5F,0x43, /* 000002F0 "......_C" */
- 0x52,0x53,0x00,0x08,0x54,0x4D,0x50,0x5F, /* 000002F8 "RS..TMP_" */
- 0x11,0x08,0x0A,0x05,0x22,0x00,0x10,0x79, /* 00000300 "...."..y" */
- 0x00,0xA4,0x54,0x4D,0x50,0x5F,0x5B,0x82, /* 00000308 "..TMP_[." */
- 0x47,0x04,0x46,0x44,0x43,0x30,0x08,0x5F, /* 00000310 "G.FDC0._" */
- 0x48,0x49,0x44,0x0C,0x41,0xD0,0x07,0x00, /* 00000318 "HID.A..." */
- 0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4, /* 00000320 ".._STA.." */
- 0x0A,0x0F,0x14,0x2C,0x5F,0x43,0x52,0x53, /* 00000328 "...,_CRS" */
- 0x00,0x08,0x42,0x55,0x46,0x30,0x11,0x1B, /* 00000330 "..BUF0.." */
- 0x0A,0x18,0x47,0x01,0xF2,0x03,0xF2,0x03, /* 00000338 "..G....." */
- 0x00,0x04,0x47,0x01,0xF7,0x03,0xF7,0x03, /* 00000340 "..G....." */
- 0x00,0x01,0x22,0x40,0x00,0x2A,0x04,0x00, /* 00000348 ".."@.*.." */
- 0x79,0x00,0xA4,0x42,0x55,0x46,0x30,0x5B, /* 00000350 "y..BUF0[" */
- 0x82,0x4B,0x05,0x4C,0x50,0x54,0x5F,0x08, /* 00000358 ".K.LPT_." */
- 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x04, /* 00000360 "_HID.A.." */
- 0x00,0x14,0x28,0x5F,0x53,0x54,0x41,0x00, /* 00000368 "..(_STA." */
- 0x70,0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31, /* 00000370 "p^^^.PX1" */
- 0x33,0x44,0x52,0x53,0x41,0x60,0x7B,0x60, /* 00000378 "3DRSA`{`" */
- 0x0C,0x00,0x00,0x00,0x80,0x60,0xA0,0x06, /* 00000380 ".....`.." */
- 0x93,0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4, /* 00000388 ".`......" */
- 0x0A,0x0F,0x14,0x21,0x5F,0x43,0x52,0x53, /* 00000390 "...!_CRS" */
- 0x00,0x08,0x42,0x55,0x46,0x30,0x11,0x10, /* 00000398 "..BUF0.." */
- 0x0A,0x0D,0x47,0x01,0x78,0x03,0x78,0x03, /* 000003A0 "..G.x.x." */
- 0x08,0x08,0x22,0x80,0x00,0x79,0x00,0xA4, /* 000003A8 ".."..y.." */
- 0x42,0x55,0x46,0x30,0x5B,0x82,0x41,0x06, /* 000003B0 "BUF0[.A." */
- 0x43,0x4F,0x4D,0x31,0x08,0x5F,0x48,0x49, /* 000003B8 "COM1._HI" */
- 0x44,0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F, /* 000003C0 "D.A...._" */
- 0x55,0x49,0x44,0x01,0x14,0x28,0x5F,0x53, /* 000003C8 "UID..(_S" */
- 0x54,0x41,0x00,0x70,0x5E,0x5E,0x5E,0x2E, /* 000003D0 "TA.p^^^." */
- 0x50,0x58,0x31,0x33,0x44,0x52,0x53,0x43, /* 000003D8 "PX13DRSC" */
- 0x60,0x7B,0x60,0x0C,0x00,0x00,0x00,0x08, /* 000003E0 "`{`....." */
- 0x60,0xA0,0x06,0x93,0x60,0x00,0xA4,0x00, /* 000003E8 "`...`..." */
- 0xA1,0x04,0xA4,0x0A,0x0F,0x14,0x21,0x5F, /* 000003F0 "......!_" */
- 0x43,0x52,0x53,0x00,0x08,0x42,0x55,0x46, /* 000003F8 "CRS..BUF" */
- 0x30,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8, /* 00000400 "0....G.." */
- 0x03,0xF8,0x03,0x00,0x08,0x22,0x10,0x00, /* 00000408 ".....".." */
- 0x79,0x00,0xA4,0x42,0x55,0x46,0x30,0x5B, /* 00000410 "y..BUF0[" */
- 0x82,0x42,0x06,0x43,0x4F,0x4D,0x32,0x08, /* 00000418 ".B.COM2." */
- 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000420 "_HID.A.." */
- 0x01,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02, /* 00000428 ".._UID.." */
- 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000430 ".(_STA.p" */
- 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000438 "^^^.PX13" */
- 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000440 "DRSC`{`." */
- 0x00,0x00,0x00,0x80,0x60,0xA0,0x06,0x93, /* 00000448 "....`..." */
- 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000450 "`......." */
- 0x0F,0x14,0x21,0x5F,0x43,0x52,0x53,0x00, /* 00000458 "..!_CRS." */
- 0x08,0x42,0x55,0x46,0x30,0x11,0x10,0x0A, /* 00000460 ".BUF0..." */
- 0x0D,0x47,0x01,0xF8,0x02,0xF8,0x02,0x00, /* 00000468 ".G......" */
- 0x08,0x22,0x08,0x00,0x79,0x00,0xA4,0x42, /* 00000470 "."..y..B" */
- 0x55,0x46,0x30,0x5B,0x82,0x40,0x05,0x50, /* 00000478 "UF0[.@.P" */
- 0x58,0x31,0x33,0x08,0x5F,0x41,0x44,0x52, /* 00000480 "X13._ADR" */
- 0x0C,0x03,0x00,0x01,0x00,0x5B,0x80,0x50, /* 00000488 ".....[.P" */
- 0x31,0x33,0x43,0x02,0x0A,0x5C,0x0A,0x24, /* 00000490 "13C..\.$" */
- 0x5B,0x81,0x33,0x50,0x31,0x33,0x43,0x03, /* 00000498 "[.3P13C." */
- 0x44,0x52,0x53,0x41,0x20,0x44,0x52,0x53, /* 000004A0 "DRSA DRS" */
- 0x42,0x20,0x44,0x52,0x53,0x43,0x20,0x44, /* 000004A8 "B DRSC D" */
- 0x52,0x53,0x45,0x20,0x44,0x52,0x53,0x46, /* 000004B0 "RSE DRSF" */
- 0x20,0x44,0x52,0x53,0x47,0x20,0x44,0x52, /* 000004B8 " DRSG DR" */
- 0x53,0x48,0x20,0x44,0x52,0x53,0x49,0x20, /* 000004C0 "SH DRSI " */
- 0x44,0x52,0x53,0x4A,0x20,0x10,0x4F,0x2E, /* 000004C8 "DRSJ .O." */
- 0x5F,0x53,0x42,0x5F,0x5B,0x81,0x24,0x2F, /* 000004D0 "_SB_[.$/" */
- 0x03,0x50,0x43,0x49,0x30,0x49,0x53,0x41, /* 000004D8 ".PCI0ISA" */
- 0x5F,0x50,0x34,0x30,0x43,0x01,0x50,0x52, /* 000004E0 "_P40C.PR" */
- 0x51,0x30,0x08,0x50,0x52,0x51,0x31,0x08, /* 000004E8 "Q0.PRQ1." */
- 0x50,0x52,0x51,0x32,0x08,0x50,0x52,0x51, /* 000004F0 "PRQ2.PRQ" */
- 0x33,0x08,0x5B,0x82,0x4E,0x0A,0x4C,0x4E, /* 000004F8 "3.[.N.LN" */
- 0x4B,0x41,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000500 "KA._HID." */
- 0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49, /* 00000508 "A...._UI" */
- 0x44,0x01,0x08,0x5F,0x50,0x52,0x53,0x11, /* 00000510 "D.._PRS." */
- 0x09,0x0A,0x06,0x23,0xF8,0x1E,0x18,0x79, /* 00000518 "...#...y" */
- 0x00,0x14,0x1A,0x5F,0x53,0x54,0x41,0x00, /* 00000520 "..._STA." */
- 0x70,0x0A,0x0B,0x60,0xA0,0x0D,0x7B,0x0A, /* 00000528 "p..`..{." */
- 0x80,0x50,0x52,0x51,0x30,0x61,0x70,0x0A, /* 00000530 ".PRQ0ap." */
- 0x09,0x60,0xA4,0x60,0x14,0x11,0x5F,0x44, /* 00000538 ".`.`.._D" */
- 0x49,0x53,0x00,0x7D,0x50,0x52,0x51,0x30, /* 00000540 "IS.}PRQ0" */
- 0x0A,0x80,0x50,0x52,0x51,0x30,0x14,0x3F, /* 00000548 "..PRQ0.?" */
- 0x5F,0x43,0x52,0x53,0x00,0x08,0x50,0x52, /* 00000550 "_CRS..PR" */
- 0x52,0x30,0x11,0x09,0x0A,0x06,0x23,0x02, /* 00000558 "R0....#." */
- 0x00,0x18,0x79,0x00,0x8B,0x50,0x52,0x52, /* 00000560 "..y..PRR" */
- 0x30,0x01,0x54,0x4D,0x50,0x5F,0x70,0x50, /* 00000568 "0.TMP_pP" */
- 0x52,0x51,0x30,0x60,0xA0,0x0C,0x95,0x60, /* 00000570 "RQ0`...`" */
- 0x0A,0x80,0x79,0x01,0x60,0x54,0x4D,0x50, /* 00000578 "..y.`TMP" */
- 0x5F,0xA1,0x07,0x70,0x00,0x54,0x4D,0x50, /* 00000580 "_..p.TMP" */
- 0x5F,0xA4,0x50,0x52,0x52,0x30,0x14,0x1B, /* 00000588 "_.PRR0.." */
- 0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01, /* 00000590 "_SRS..h." */
- 0x54,0x4D,0x50,0x5F,0x82,0x54,0x4D,0x50, /* 00000598 "TMP_.TMP" */
- 0x5F,0x60,0x76,0x60,0x70,0x60,0x50,0x52, /* 000005A0 "_`v`p`PR" */
- 0x51,0x30,0x5B,0x82,0x4F,0x0A,0x4C,0x4E, /* 000005A8 "Q0[.O.LN" */
- 0x4B,0x42,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 000005B0 "KB._HID." */
- 0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49, /* 000005B8 "A...._UI" */
- 0x44,0x0A,0x02,0x08,0x5F,0x50,0x52,0x53, /* 000005C0 "D..._PRS" */
- 0x11,0x09,0x0A,0x06,0x23,0xF8,0x1E,0x18, /* 000005C8 "....#..." */
- 0x79,0x00,0x14,0x1A,0x5F,0x53,0x54,0x41, /* 000005D0 "y..._STA" */
- 0x00,0x70,0x0A,0x0B,0x60,0xA0,0x0D,0x7B, /* 000005D8 ".p..`..{" */
- 0x0A,0x80,0x50,0x52,0x51,0x31,0x61,0x70, /* 000005E0 "..PRQ1ap" */
- 0x0A,0x09,0x60,0xA4,0x60,0x14,0x11,0x5F, /* 000005E8 "..`.`.._" */
- 0x44,0x49,0x53,0x00,0x7D,0x50,0x52,0x51, /* 000005F0 "DIS.}PRQ" */
- 0x31,0x0A,0x80,0x50,0x52,0x51,0x31,0x14, /* 000005F8 "1..PRQ1." */
- 0x3F,0x5F,0x43,0x52,0x53,0x00,0x08,0x50, /* 00000600 "?_CRS..P" */
- 0x52,0x52,0x30,0x11,0x09,0x0A,0x06,0x23, /* 00000608 "RR0....#" */
- 0x02,0x00,0x18,0x79,0x00,0x8B,0x50,0x52, /* 00000610 "...y..PR" */
- 0x52,0x30,0x01,0x54,0x4D,0x50,0x5F,0x70, /* 00000618 "R0.TMP_p" */
- 0x50,0x52,0x51,0x31,0x60,0xA0,0x0C,0x95, /* 00000620 "PRQ1`..." */
- 0x60,0x0A,0x80,0x79,0x01,0x60,0x54,0x4D, /* 00000628 "`..y.`TM" */
- 0x50,0x5F,0xA1,0x07,0x70,0x00,0x54,0x4D, /* 00000630 "P_..p.TM" */
- 0x50,0x5F,0xA4,0x50,0x52,0x52,0x30,0x14, /* 00000638 "P_.PRR0." */
- 0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68, /* 00000640 "._SRS..h" */
- 0x01,0x54,0x4D,0x50,0x5F,0x82,0x54,0x4D, /* 00000648 ".TMP_.TM" */
- 0x50,0x5F,0x60,0x76,0x60,0x70,0x60,0x50, /* 00000650 "P_`v`p`P" */
- 0x52,0x51,0x31,0x5B,0x82,0x4F,0x0A,0x4C, /* 00000658 "RQ1[.O.L" */
- 0x4E,0x4B,0x43,0x08,0x5F,0x48,0x49,0x44, /* 00000660 "NKC._HID" */
- 0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55, /* 00000668 ".A...._U" */
- 0x49,0x44,0x0A,0x03,0x08,0x5F,0x50,0x52, /* 00000670 "ID..._PR" */
- 0x53,0x11,0x09,0x0A,0x06,0x23,0xF8,0x1E, /* 00000678 "S....#.." */
- 0x18,0x79,0x00,0x14,0x1A,0x5F,0x53,0x54, /* 00000680 ".y..._ST" */
- 0x41,0x00,0x70,0x0A,0x0B,0x60,0xA0,0x0D, /* 00000688 "A.p..`.." */
- 0x7B,0x0A,0x80,0x50,0x52,0x51,0x32,0x61, /* 00000690 "{..PRQ2a" */
- 0x70,0x0A,0x09,0x60,0xA4,0x60,0x14,0x11, /* 00000698 "p..`.`.." */
- 0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,0x52, /* 000006A0 "_DIS.}PR" */
- 0x51,0x32,0x0A,0x80,0x50,0x52,0x51,0x32, /* 000006A8 "Q2..PRQ2" */
- 0x14,0x3F,0x5F,0x43,0x52,0x53,0x00,0x08, /* 000006B0 ".?_CRS.." */
- 0x50,0x52,0x52,0x30,0x11,0x09,0x0A,0x06, /* 000006B8 "PRR0...." */
- 0x23,0x02,0x00,0x18,0x79,0x00,0x8B,0x50, /* 000006C0 "#...y..P" */
- 0x52,0x52,0x30,0x01,0x54,0x4D,0x50,0x5F, /* 000006C8 "RR0.TMP_" */
- 0x70,0x50,0x52,0x51,0x32,0x60,0xA0,0x0C, /* 000006D0 "pPRQ2`.." */
- 0x95,0x60,0x0A,0x80,0x79,0x01,0x60,0x54, /* 000006D8 ".`..y.`T" */
- 0x4D,0x50,0x5F,0xA1,0x07,0x70,0x00,0x54, /* 000006E0 "MP_..p.T" */
- 0x4D,0x50,0x5F,0xA4,0x50,0x52,0x52,0x30, /* 000006E8 "MP_.PRR0" */
- 0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B, /* 000006F0 ".._SRS.." */
- 0x68,0x01,0x54,0x4D,0x50,0x5F,0x82,0x54, /* 000006F8 "h.TMP_.T" */
- 0x4D,0x50,0x5F,0x60,0x76,0x60,0x70,0x60, /* 00000700 "MP_`v`p`" */
- 0x50,0x52,0x51,0x32,0x5B,0x82,0x4F,0x0A, /* 00000708 "PRQ2[.O." */
- 0x4C,0x4E,0x4B,0x44,0x08,0x5F,0x48,0x49, /* 00000710 "LNKD._HI" */
- 0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F, /* 00000718 "D.A...._" */
- 0x55,0x49,0x44,0x0A,0x04,0x08,0x5F,0x50, /* 00000720 "UID..._P" */
- 0x52,0x53,0x11,0x09,0x0A,0x06,0x23,0xF8, /* 00000728 "RS....#." */
- 0x1E,0x18,0x79,0x00,0x14,0x1A,0x5F,0x53, /* 00000730 "..y..._S" */
- 0x54,0x41,0x00,0x70,0x0A,0x0B,0x60,0xA0, /* 00000738 "TA.p..`." */
- 0x0D,0x7B,0x0A,0x80,0x50,0x52,0x51,0x33, /* 00000740 ".{..PRQ3" */
- 0x61,0x70,0x0A,0x09,0x60,0xA4,0x60,0x14, /* 00000748 "ap..`.`." */
- 0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50, /* 00000750 "._DIS.}P" */
- 0x52,0x51,0x33,0x0A,0x80,0x50,0x52,0x51, /* 00000758 "RQ3..PRQ" */
- 0x33,0x14,0x3F,0x5F,0x43,0x52,0x53,0x00, /* 00000760 "3.?_CRS." */
- 0x08,0x50,0x52,0x52,0x30,0x11,0x09,0x0A, /* 00000768 ".PRR0..." */
- 0x06,0x23,0x02,0x00,0x18,0x79,0x00,0x8B, /* 00000770 ".#...y.." */
- 0x50,0x52,0x52,0x30,0x01,0x54,0x4D,0x50, /* 00000778 "PRR0.TMP" */
- 0x5F,0x70,0x50,0x52,0x51,0x33,0x60,0xA0, /* 00000780 "_pPRQ3`." */
- 0x0C,0x95,0x60,0x0A,0x80,0x79,0x01,0x60, /* 00000788 "..`..y.`" */
- 0x54,0x4D,0x50,0x5F,0xA1,0x07,0x70,0x00, /* 00000790 "TMP_..p." */
- 0x54,0x4D,0x50,0x5F,0xA4,0x50,0x52,0x52, /* 00000798 "TMP_.PRR" */
- 0x30,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01, /* 000007A0 "0.._SRS." */
- 0x8B,0x68,0x01,0x54,0x4D,0x50,0x5F,0x82, /* 000007A8 ".h.TMP_." */
- 0x54,0x4D,0x50,0x5F,0x60,0x76,0x60,0x70, /* 000007B0 "TMP_`v`p" */
- 0x60,0x50,0x52,0x51,0x33,0x08,0x5F,0x53, /* 000007B8 "`PRQ3._S" */
- 0x33,0x5F,0x12,0x06,0x04,0x01,0x01,0x00, /* 000007C0 "3_......" */
- 0x00,0x08,0x5F,0x53,0x34,0x5F,0x12,0x06, /* 000007C8 ".._S4_.." */
- 0x04,0x00,0x00,0x00,0x00,0x08,0x5F,0x53, /* 000007D0 "......_S" */
- 0x35,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007D8 "5_......" */
- 0x00,
+ 0x82,0x2A,0x56,0x47,0x41,0x5F,0x08,0x5F, /* 00000248 ".*VGA_._" */
+ 0x41,0x44,0x52,0x0C,0x00,0x00,0x02,0x00, /* 00000250 "ADR....." */
+ 0x14,0x08,0x5F,0x53,0x31,0x44,0x00,0xA4, /* 00000258 ".._S1D.." */
+ 0x00,0x14,0x08,0x5F,0x53,0x32,0x44,0x00, /* 00000260 "..._S2D." */
+ 0xA4,0x00,0x14,0x08,0x5F,0x53,0x33,0x44, /* 00000268 "...._S3D" */
+ 0x00,0xA4,0x00,0x5B,0x82,0x42,0x23,0x49, /* 00000270 "...[.B#I" */
+ 0x53,0x41,0x5F,0x08,0x5F,0x41,0x44,0x52, /* 00000278 "SA_._ADR" */
+ 0x0C,0x00,0x00,0x01,0x00,0x5B,0x80,0x50, /* 00000280 ".....[.P" */
+ 0x34,0x30,0x43,0x02,0x0A,0x60,0x0A,0x04, /* 00000288 "40C..`.." */
+ 0x5B,0x82,0x2D,0x52,0x54,0x43,0x5F,0x08, /* 00000290 "[.-RTC_." */
+ 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0B, /* 00000298 "_HID.A.." */
+ 0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x18, /* 000002A0 ".._CRS.." */
+ 0x0A,0x15,0x47,0x01,0x70,0x00,0x70,0x00, /* 000002A8 "..G.p.p." */
+ 0x10,0x02,0x22,0x00,0x01,0x47,0x01,0x72, /* 000002B0 ".."..G.r" */
+ 0x00,0x72,0x00,0x02,0x06,0x79,0x00,0x5B, /* 000002B8 ".r...y.[" */
+ 0x82,0x44,0x04,0x4B,0x42,0x44,0x5F,0x08, /* 000002C0 ".D.KBD_." */
+ 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x03, /* 000002C8 "_HID.A.." */
+ 0x03,0x14,0x09,0x5F,0x53,0x54,0x41,0x00, /* 000002D0 "..._STA." */
+ 0xA4,0x0A,0x0F,0x14,0x29,0x5F,0x43,0x52, /* 000002D8 "....)_CR" */
+ 0x53,0x00,0x08,0x54,0x4D,0x50,0x5F,0x11, /* 000002E0 "S..TMP_." */
+ 0x18,0x0A,0x15,0x47,0x01,0x60,0x00,0x60, /* 000002E8 "...G.`.`" */
+ 0x00,0x01,0x01,0x47,0x01,0x64,0x00,0x64, /* 000002F0 "...G.d.d" */
+ 0x00,0x01,0x01,0x22,0x02,0x00,0x79,0x00, /* 000002F8 "..."..y." */
+ 0xA4,0x54,0x4D,0x50,0x5F,0x5B,0x82,0x33, /* 00000300 ".TMP_[.3" */
+ 0x4D,0x4F,0x55,0x5F,0x08,0x5F,0x48,0x49, /* 00000308 "MOU_._HI" */
+ 0x44,0x0C,0x41,0xD0,0x0F,0x13,0x14,0x09, /* 00000310 "D.A....." */
+ 0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F, /* 00000318 "_STA...." */
+ 0x14,0x19,0x5F,0x43,0x52,0x53,0x00,0x08, /* 00000320 ".._CRS.." */
+ 0x54,0x4D,0x50,0x5F,0x11,0x08,0x0A,0x05, /* 00000328 "TMP_...." */
+ 0x22,0x00,0x10,0x79,0x00,0xA4,0x54,0x4D, /* 00000330 ""..y..TM" */
+ 0x50,0x5F,0x5B,0x82,0x47,0x04,0x46,0x44, /* 00000338 "P_[.G.FD" */
+ 0x43,0x30,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000340 "C0._HID." */
+ 0x41,0xD0,0x07,0x00,0x14,0x09,0x5F,0x53, /* 00000348 "A....._S" */
+ 0x54,0x41,0x00,0xA4,0x0A,0x0F,0x14,0x2C, /* 00000350 "TA.....," */
+ 0x5F,0x43,0x52,0x53,0x00,0x08,0x42,0x55, /* 00000358 "_CRS..BU" */
+ 0x46,0x30,0x11,0x1B,0x0A,0x18,0x47,0x01, /* 00000360 "F0....G." */
+ 0xF2,0x03,0xF2,0x03,0x00,0x04,0x47,0x01, /* 00000368 "......G." */
+ 0xF7,0x03,0xF7,0x03,0x00,0x01,0x22,0x40, /* 00000370 "......"@" */
+ 0x00,0x2A,0x04,0x00,0x79,0x00,0xA4,0x42, /* 00000378 ".*..y..B" */
+ 0x55,0x46,0x30,0x5B,0x82,0x4B,0x05,0x4C, /* 00000380 "UF0[.K.L" */
+ 0x50,0x54,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00000388 "PT_._HID" */
+ 0x0C,0x41,0xD0,0x04,0x00,0x14,0x28,0x5F, /* 00000390 ".A....(_" */
+ 0x53,0x54,0x41,0x00,0x70,0x5E,0x5E,0x5E, /* 00000398 "STA.p^^^" */
+ 0x2E,0x50,0x58,0x31,0x33,0x44,0x52,0x53, /* 000003A0 ".PX13DRS" */
+ 0x41,0x60,0x7B,0x60,0x0C,0x00,0x00,0x00, /* 000003A8 "A`{`...." */
+ 0x80,0x60,0xA0,0x06,0x93,0x60,0x00,0xA4, /* 000003B0 ".`...`.." */
+ 0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x14,0x21, /* 000003B8 ".......!" */
+ 0x5F,0x43,0x52,0x53,0x00,0x08,0x42,0x55, /* 000003C0 "_CRS..BU" */
+ 0x46,0x30,0x11,0x10,0x0A,0x0D,0x47,0x01, /* 000003C8 "F0....G." */
+ 0x78,0x03,0x78,0x03,0x08,0x08,0x22,0x80, /* 000003D0 "x.x..."." */
+ 0x00,0x79,0x00,0xA4,0x42,0x55,0x46,0x30, /* 000003D8 ".y..BUF0" */
+ 0x5B,0x82,0x41,0x06,0x43,0x4F,0x4D,0x31, /* 000003E0 "[.A.COM1" */
+ 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 000003E8 "._HID.A." */
+ 0x05,0x01,0x08,0x5F,0x55,0x49,0x44,0x01, /* 000003F0 "..._UID." */
+ 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 000003F8 ".(_STA.p" */
+ 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000400 "^^^.PX13" */
+ 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000408 "DRSC`{`." */
+ 0x00,0x00,0x00,0x08,0x60,0xA0,0x06,0x93, /* 00000410 "....`..." */
+ 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000418 "`......." */
+ 0x0F,0x14,0x21,0x5F,0x43,0x52,0x53,0x00, /* 00000420 "..!_CRS." */
+ 0x08,0x42,0x55,0x46,0x30,0x11,0x10,0x0A, /* 00000428 ".BUF0..." */
+ 0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03,0x00, /* 00000430 ".G......" */
+ 0x08,0x22,0x10,0x00,0x79,0x00,0xA4,0x42, /* 00000438 "."..y..B" */
+ 0x55,0x46,0x30,0x5B,0x82,0x42,0x06,0x43, /* 00000440 "UF0[.B.C" */
+ 0x4F,0x4D,0x32,0x08,0x5F,0x48,0x49,0x44, /* 00000448 "OM2._HID" */
+ 0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,0x55, /* 00000450 ".A...._U" */
+ 0x49,0x44,0x0A,0x02,0x14,0x28,0x5F,0x53, /* 00000458 "ID...(_S" */
+ 0x54,0x41,0x00,0x70,0x5E,0x5E,0x5E,0x2E, /* 00000460 "TA.p^^^." */
+ 0x50,0x58,0x31,0x33,0x44,0x52,0x53,0x43, /* 00000468 "PX13DRSC" */
+ 0x60,0x7B,0x60,0x0C,0x00,0x00,0x00,0x80, /* 00000470 "`{`....." */
+ 0x60,0xA0,0x06,0x93,0x60,0x00,0xA4,0x00, /* 00000478 "`...`..." */
+ 0xA1,0x04,0xA4,0x0A,0x0F,0x14,0x21,0x5F, /* 00000480 "......!_" */
+ 0x43,0x52,0x53,0x00,0x08,0x42,0x55,0x46, /* 00000488 "CRS..BUF" */
+ 0x30,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8, /* 00000490 "0....G.." */
+ 0x02,0xF8,0x02,0x00,0x08,0x22,0x08,0x00, /* 00000498 ".....".." */
+ 0x79,0x00,0xA4,0x42,0x55,0x46,0x30,0x5B, /* 000004A0 "y..BUF0[" */
+ 0x82,0x40,0x05,0x50,0x58,0x31,0x33,0x08, /* 000004A8 ".@.PX13." */
+ 0x5F,0x41,0x44,0x52,0x0C,0x03,0x00,0x01, /* 000004B0 "_ADR...." */
+ 0x00,0x5B,0x80,0x50,0x31,0x33,0x43,0x02, /* 000004B8 ".[.P13C." */
+ 0x0A,0x5C,0x0A,0x24,0x5B,0x81,0x33,0x50, /* 000004C0 ".\.$[.3P" */
+ 0x31,0x33,0x43,0x03,0x44,0x52,0x53,0x41, /* 000004C8 "13C.DRSA" */
+ 0x20,0x44,0x52,0x53,0x42,0x20,0x44,0x52, /* 000004D0 " DRSB DR" */
+ 0x53,0x43,0x20,0x44,0x52,0x53,0x45,0x20, /* 000004D8 "SC DRSE " */
+ 0x44,0x52,0x53,0x46,0x20,0x44,0x52,0x53, /* 000004E0 "DRSF DRS" */
+ 0x47,0x20,0x44,0x52,0x53,0x48,0x20,0x44, /* 000004E8 "G DRSH D" */
+ 0x52,0x53,0x49,0x20,0x44,0x52,0x53,0x4A, /* 000004F0 "RSI DRSJ" */
+ 0x20,0x10,0x4F,0x2E,0x5F,0x53,0x42,0x5F, /* 000004F8 " .O._SB_" */
+ 0x5B,0x81,0x24,0x2F,0x03,0x50,0x43,0x49, /* 00000500 "[.$/.PCI" */
+ 0x30,0x49,0x53,0x41,0x5F,0x50,0x34,0x30, /* 00000508 "0ISA_P40" */
+ 0x43,0x01,0x50,0x52,0x51,0x30,0x08,0x50, /* 00000510 "C.PRQ0.P" */
+ 0x52,0x51,0x31,0x08,0x50,0x52,0x51,0x32, /* 00000518 "RQ1.PRQ2" */
+ 0x08,0x50,0x52,0x51,0x33,0x08,0x5B,0x82, /* 00000520 ".PRQ3.[." */
+ 0x4E,0x0A,0x4C,0x4E,0x4B,0x41,0x08,0x5F, /* 00000528 "N.LNKA._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 00000530 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x01,0x08,0x5F, /* 00000538 "._UID.._" */
+ 0x50,0x52,0x53,0x11,0x09,0x0A,0x06,0x23, /* 00000540 "PRS....#" */
+ 0xF8,0x1E,0x18,0x79,0x00,0x14,0x1A,0x5F, /* 00000548 "...y..._" */
+ 0x53,0x54,0x41,0x00,0x70,0x0A,0x0B,0x60, /* 00000550 "STA.p..`" */
+ 0xA0,0x0D,0x7B,0x0A,0x80,0x50,0x52,0x51, /* 00000558 "..{..PRQ" */
+ 0x30,0x61,0x70,0x0A,0x09,0x60,0xA4,0x60, /* 00000560 "0ap..`.`" */
+ 0x14,0x11,0x5F,0x44,0x49,0x53,0x00,0x7D, /* 00000568 ".._DIS.}" */
+ 0x50,0x52,0x51,0x30,0x0A,0x80,0x50,0x52, /* 00000570 "PRQ0..PR" */
+ 0x51,0x30,0x14,0x3F,0x5F,0x43,0x52,0x53, /* 00000578 "Q0.?_CRS" */
+ 0x00,0x08,0x50,0x52,0x52,0x30,0x11,0x09, /* 00000580 "..PRR0.." */
+ 0x0A,0x06,0x23,0x02,0x00,0x18,0x79,0x00, /* 00000588 "..#...y." */
+ 0x8B,0x50,0x52,0x52,0x30,0x01,0x54,0x4D, /* 00000590 ".PRR0.TM" */
+ 0x50,0x5F,0x70,0x50,0x52,0x51,0x30,0x60, /* 00000598 "P_pPRQ0`" */
+ 0xA0,0x0C,0x95,0x60,0x0A,0x80,0x79,0x01, /* 000005A0 "...`..y." */
+ 0x60,0x54,0x4D,0x50,0x5F,0xA1,0x07,0x70, /* 000005A8 "`TMP_..p" */
+ 0x00,0x54,0x4D,0x50,0x5F,0xA4,0x50,0x52, /* 000005B0 ".TMP_.PR" */
+ 0x52,0x30,0x14,0x1B,0x5F,0x53,0x52,0x53, /* 000005B8 "R0.._SRS" */
+ 0x01,0x8B,0x68,0x01,0x54,0x4D,0x50,0x5F, /* 000005C0 "..h.TMP_" */
+ 0x82,0x54,0x4D,0x50,0x5F,0x60,0x76,0x60, /* 000005C8 ".TMP_`v`" */
+ 0x70,0x60,0x50,0x52,0x51,0x30,0x5B,0x82, /* 000005D0 "p`PRQ0[." */
+ 0x4F,0x0A,0x4C,0x4E,0x4B,0x42,0x08,0x5F, /* 000005D8 "O.LNKB._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 000005E0 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x08, /* 000005E8 "._UID..." */
+ 0x5F,0x50,0x52,0x53,0x11,0x09,0x0A,0x06, /* 000005F0 "_PRS...." */
+ 0x23,0xF8,0x1E,0x18,0x79,0x00,0x14,0x1A, /* 000005F8 "#...y..." */
+ 0x5F,0x53,0x54,0x41,0x00,0x70,0x0A,0x0B, /* 00000600 "_STA.p.." */
+ 0x60,0xA0,0x0D,0x7B,0x0A,0x80,0x50,0x52, /* 00000608 "`..{..PR" */
+ 0x51,0x31,0x61,0x70,0x0A,0x09,0x60,0xA4, /* 00000610 "Q1ap..`." */
+ 0x60,0x14,0x11,0x5F,0x44,0x49,0x53,0x00, /* 00000618 "`.._DIS." */
+ 0x7D,0x50,0x52,0x51,0x31,0x0A,0x80,0x50, /* 00000620 "}PRQ1..P" */
+ 0x52,0x51,0x31,0x14,0x3F,0x5F,0x43,0x52, /* 00000628 "RQ1.?_CR" */
+ 0x53,0x00,0x08,0x50,0x52,0x52,0x30,0x11, /* 00000630 "S..PRR0." */
+ 0x09,0x0A,0x06,0x23,0x02,0x00,0x18,0x79, /* 00000638 "...#...y" */
+ 0x00,0x8B,0x50,0x52,0x52,0x30,0x01,0x54, /* 00000640 "..PRR0.T" */
+ 0x4D,0x50,0x5F,0x70,0x50,0x52,0x51,0x31, /* 00000648 "MP_pPRQ1" */
+ 0x60,0xA0,0x0C,0x95,0x60,0x0A,0x80,0x79, /* 00000650 "`...`..y" */
+ 0x01,0x60,0x54,0x4D,0x50,0x5F,0xA1,0x07, /* 00000658 ".`TMP_.." */
+ 0x70,0x00,0x54,0x4D,0x50,0x5F,0xA4,0x50, /* 00000660 "p.TMP_.P" */
+ 0x52,0x52,0x30,0x14,0x1B,0x5F,0x53,0x52, /* 00000668 "RR0.._SR" */
+ 0x53,0x01,0x8B,0x68,0x01,0x54,0x4D,0x50, /* 00000670 "S..h.TMP" */
+ 0x5F,0x82,0x54,0x4D,0x50,0x5F,0x60,0x76, /* 00000678 "_.TMP_`v" */
+ 0x60,0x70,0x60,0x50,0x52,0x51,0x31,0x5B, /* 00000680 "`p`PRQ1[" */
+ 0x82,0x4F,0x0A,0x4C,0x4E,0x4B,0x43,0x08, /* 00000688 ".O.LNKC." */
+ 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C, /* 00000690 "_HID.A.." */
+ 0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,0x03, /* 00000698 ".._UID.." */
+ 0x08,0x5F,0x50,0x52,0x53,0x11,0x09,0x0A, /* 000006A0 "._PRS..." */
+ 0x06,0x23,0xF8,0x1E,0x18,0x79,0x00,0x14, /* 000006A8 ".#...y.." */
+ 0x1A,0x5F,0x53,0x54,0x41,0x00,0x70,0x0A, /* 000006B0 "._STA.p." */
+ 0x0B,0x60,0xA0,0x0D,0x7B,0x0A,0x80,0x50, /* 000006B8 ".`..{..P" */
+ 0x52,0x51,0x32,0x61,0x70,0x0A,0x09,0x60, /* 000006C0 "RQ2ap..`" */
+ 0xA4,0x60,0x14,0x11,0x5F,0x44,0x49,0x53, /* 000006C8 ".`.._DIS" */
+ 0x00,0x7D,0x50,0x52,0x51,0x32,0x0A,0x80, /* 000006D0 ".}PRQ2.." */
+ 0x50,0x52,0x51,0x32,0x14,0x3F,0x5F,0x43, /* 000006D8 "PRQ2.?_C" */
+ 0x52,0x53,0x00,0x08,0x50,0x52,0x52,0x30, /* 000006E0 "RS..PRR0" */
+ 0x11,0x09,0x0A,0x06,0x23,0x02,0x00,0x18, /* 000006E8 "....#..." */
+ 0x79,0x00,0x8B,0x50,0x52,0x52,0x30,0x01, /* 000006F0 "y..PRR0." */
+ 0x54,0x4D,0x50,0x5F,0x70,0x50,0x52,0x51, /* 000006F8 "TMP_pPRQ" */
+ 0x32,0x60,0xA0,0x0C,0x95,0x60,0x0A,0x80, /* 00000700 "2`...`.." */
+ 0x79,0x01,0x60,0x54,0x4D,0x50,0x5F,0xA1, /* 00000708 "y.`TMP_." */
+ 0x07,0x70,0x00,0x54,0x4D,0x50,0x5F,0xA4, /* 00000710 ".p.TMP_." */
+ 0x50,0x52,0x52,0x30,0x14,0x1B,0x5F,0x53, /* 00000718 "PRR0.._S" */
+ 0x52,0x53,0x01,0x8B,0x68,0x01,0x54,0x4D, /* 00000720 "RS..h.TM" */
+ 0x50,0x5F,0x82,0x54,0x4D,0x50,0x5F,0x60, /* 00000728 "P_.TMP_`" */
+ 0x76,0x60,0x70,0x60,0x50,0x52,0x51,0x32, /* 00000730 "v`p`PRQ2" */
+ 0x5B,0x82,0x4F,0x0A,0x4C,0x4E,0x4B,0x44, /* 00000738 "[.O.LNKD" */
+ 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000740 "._HID.A." */
+ 0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A, /* 00000748 "..._UID." */
+ 0x04,0x08,0x5F,0x50,0x52,0x53,0x11,0x09, /* 00000750 ".._PRS.." */
+ 0x0A,0x06,0x23,0xF8,0x1E,0x18,0x79,0x00, /* 00000758 "..#...y." */
+ 0x14,0x1A,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000760 ".._STA.p" */
+ 0x0A,0x0B,0x60,0xA0,0x0D,0x7B,0x0A,0x80, /* 00000768 "..`..{.." */
+ 0x50,0x52,0x51,0x33,0x61,0x70,0x0A,0x09, /* 00000770 "PRQ3ap.." */
+ 0x60,0xA4,0x60,0x14,0x11,0x5F,0x44,0x49, /* 00000778 "`.`.._DI" */
+ 0x53,0x00,0x7D,0x50,0x52,0x51,0x33,0x0A, /* 00000780 "S.}PRQ3." */
+ 0x80,0x50,0x52,0x51,0x33,0x14,0x3F,0x5F, /* 00000788 ".PRQ3.?_" */
+ 0x43,0x52,0x53,0x00,0x08,0x50,0x52,0x52, /* 00000790 "CRS..PRR" */
+ 0x30,0x11,0x09,0x0A,0x06,0x23,0x02,0x00, /* 00000798 "0....#.." */
+ 0x18,0x79,0x00,0x8B,0x50,0x52,0x52,0x30, /* 000007A0 ".y..PRR0" */
+ 0x01,0x54,0x4D,0x50,0x5F,0x70,0x50,0x52, /* 000007A8 ".TMP_pPR" */
+ 0x51,0x33,0x60,0xA0,0x0C,0x95,0x60,0x0A, /* 000007B0 "Q3`...`." */
+ 0x80,0x79,0x01,0x60,0x54,0x4D,0x50,0x5F, /* 000007B8 ".y.`TMP_" */
+ 0xA1,0x07,0x70,0x00,0x54,0x4D,0x50,0x5F, /* 000007C0 "..p.TMP_" */
+ 0xA4,0x50,0x52,0x52,0x30,0x14,0x1B,0x5F, /* 000007C8 ".PRR0.._" */
+ 0x53,0x52,0x53,0x01,0x8B,0x68,0x01,0x54, /* 000007D0 "SRS..h.T" */
+ 0x4D,0x50,0x5F,0x82,0x54,0x4D,0x50,0x5F, /* 000007D8 "MP_.TMP_" */
+ 0x60,0x76,0x60,0x70,0x60,0x50,0x52,0x51, /* 000007E0 "`v`p`PRQ" */
+ 0x33,0x08,0x5F,0x53,0x33,0x5F,0x12,0x06, /* 000007E8 "3._S3_.." */
+ 0x04,0x01,0x01,0x00,0x00,0x08,0x5F,0x53, /* 000007F0 "......_S" */
+ 0x34,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007F8 "4_......" */
+ 0x00,0x08,0x5F,0x53,0x35,0x5F,0x12,0x06, /* 00000800 ".._S5_.." */
+ 0x04,0x00,0x00,0x00,0x00,
};
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 1/6] Move PIC initialization out ofline to save space in post code area.
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 1/6] Move PIC initialization out of line to save space in post code area Gleb Natapov
@ 2008-11-06 21:42 ` Sebastian Herbszt
0 siblings, 0 replies; 19+ messages in thread
From: Sebastian Herbszt @ 2008-11-06 21:42 UTC (permalink / raw)
To: Gleb Natapov, bochs-developers; +Cc: qemu-devel
Gleb Natapov wrote:
> There are only a couple of bytes left in post area.
>
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> ---
>
> bios/rombios.c | 48 ++++++++++++++++++++++++++----------------------
> 1 files changed, 26 insertions(+), 22 deletions(-)
>
> diff --git a/bios/rombios.c b/bios/rombios.c
> index 3366ad9..88eac04 100644
> --- a/bios/rombios.c
> +++ b/bios/rombios.c
> @@ -10256,6 +10256,31 @@ rom_scan_increment:
> mov ds, ax
> ret
>
> +post_init_pic:
> + mov al, #0x11 ; send initialisation commands
> + out 0x20, al
> + out 0xa0, al
> + mov al, #0x08
> + out 0x21, al
> + mov al, #0x70
> + out 0xa1, al
> + mov al, #0x04
> + out 0x21, al
> + mov al, #0x02
> + out 0xa1, al
> + mov al, #0x01
> + out 0x21, al
> + out 0xa1, al
> + mov al, #0xb8
> + out 0x21, AL ;master pic: unmask IRQ 0, 1, 2, 6
> +#if BX_USE_PS2_MOUSE
> + mov al, #0x8f
> +#else
> + mov al, #0x9f
> +#endif
> + out 0xa1, AL ;slave pic: unmask IRQ 12, 13, 14
> + ret
> +
> ;; the following area can be used to write dynamically generated tables
> .align 16
> bios_table_area_start:
> @@ -10516,28 +10541,7 @@ post_default_ints:
> SET_INT_VECTOR(0x10, #0xF000, #int10_handler)
>
> ;; PIC
> - mov al, #0x11 ; send initialisation commands
> - out 0x20, al
> - out 0xa0, al
> - mov al, #0x08
> - out 0x21, al
> - mov al, #0x70
> - out 0xa1, al
> - mov al, #0x04
> - out 0x21, al
> - mov al, #0x02
> - out 0xa1, al
> - mov al, #0x01
> - out 0x21, al
> - out 0xa1, al
> - mov al, #0xb8
> - out 0x21, AL ;master pic: unmask IRQ 0, 1, 2, 6
> -#if BX_USE_PS2_MOUSE
> - mov al, #0x8f
> -#else
> - mov al, #0x9f
> -#endif
> - out 0xa1, AL ;slave pic: unmask IRQ 12, 13, 14
> + call post_init_pic
>
> mov cx, #0xc000 ;; init vga bios
> mov ax, #0xc780
Looks good. Similar patch is already in the VirtualBox tree [1].
[1] http://www.virtualbox.org/changeset/12494
- Sebastian
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 2/6] Add S3 state to DSDT. Handleresume event in the BIOS.
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 2/6] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov
@ 2008-11-06 23:03 ` Sebastian Herbszt
2008-11-10 8:24 ` Gleb Natapov
0 siblings, 1 reply; 19+ messages in thread
From: Sebastian Herbszt @ 2008-11-06 23:03 UTC (permalink / raw)
To: Gleb Natapov, bochs-developers; +Cc: qemu-devel
Gleb Natapov wrote:
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> ---
>
> bios/acpi-dsdt.dsl | 30 +++++++++++++++++----
> bios/acpi-dsdt.hex | 17 +++++++-----
> bios/rombios.c | 41 +++++++++++++++++++++++++++++
> bios/rombios32.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++--
> 4 files changed, 146 insertions(+), 16 deletions(-)
>
> diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl
> index 19ac2f9..f201396 100644
> --- a/bios/acpi-dsdt.dsl
> +++ b/bios/acpi-dsdt.dsl
> @@ -531,11 +531,29 @@ DefinitionBlock (
> }
> }
>
> - /* S5 = power off state */
> - Name (_S5, Package (4) {
> - 0x00, // PM1a_CNT.SLP_TYP
> - 0x00, // PM2a_CNT.SLP_TYP
> - 0x00, // reserved
> - 0x00, // reserved
> + /*
> + * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes:
> + * must match piix4 emulation.
> + */
Is it suspend-to-disc or suspend-to-disk?
> + Name (\_S3, Package (0x04)
> + {
> + 0x01, /* PM1a_CNT.SLP_TYP */
> + 0x01, /* PM1b_CNT.SLP_TYP */
> + Zero, /* reserved */
> + Zero /* reserved */
> + })
> + Name (\_S4, Package (0x04)
> + {
> + Zero, /* PM1a_CNT.SLP_TYP */
> + Zero, /* PM1b_CNT.SLP_TYP */
> + Zero, /* reserved */
> + Zero /* reserved */
> + })
Do we need \_S4 for S3 support?
> + Name (\_S5, Package (0x04)
> + {
> + Zero, /* PM1a_CNT.SLP_TYP */
> + Zero, /* PM1b_CNT.SLP_TYP */
> + Zero, /* reserved */
> + Zero /* reserved */
> })
> }
> diff --git a/bios/acpi-dsdt.hex b/bios/acpi-dsdt.hex
> index 6bc6268..6088b18 100644
> --- a/bios/acpi-dsdt.hex
> +++ b/bios/acpi-dsdt.hex
> @@ -1,22 +1,22 @@
> /*
> *
> * Intel ACPI Component Architecture
> - * ASL Optimizing Compiler version 20060912 [Nov 25 2006]
> + * ASL Optimizing Compiler version 20061109 [May 15 2007]
> * Copyright (C) 2000 - 2006 Intel Corporation
> * Supports ACPI Specification Revision 3.0a
> *
> - * Compilation of "acpi-dsdt.dsl" - Sun Sep 14 10:27:40 2008
> + * Compilation of "acpi-dsdt.dsl" - Mon Oct 27 10:37:05 2008
> *
> * C source code output
> *
> */
> -unsigned char AmlCode[] =
> +const unsigned char AmlCode[] =
> {
> - 0x44,0x53,0x44,0x54,0xC9,0x07,0x00,0x00, /* 00000000 "DSDT...." */
> - 0x01,0x0E,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 "..BXPC.." */
> + 0x44,0x53,0x44,0x54,0xE1,0x07,0x00,0x00, /* 00000000 "DSDT...." */
> + 0x01,0x24,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 ".$BXPC.." */
> 0x42,0x58,0x44,0x53,0x44,0x54,0x00,0x00, /* 00000010 "BXDSDT.." */
> 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> - 0x12,0x09,0x06,0x20,0x10,0x1C,0x5C,0x00, /* 00000020 "... ..\." */
> + 0x09,0x11,0x06,0x20,0x10,0x1C,0x5C,0x00, /* 00000020 "... ..\." */
> 0x5B,0x80,0x44,0x42,0x47,0x5F,0x01,0x0B, /* 00000028 "[.DBG_.." */
> 0x44,0xB0,0x0A,0x04,0x5B,0x81,0x0B,0x44, /* 00000030 "D...[..D" */
> 0x42,0x47,0x5F,0x03,0x44,0x42,0x47,0x4C, /* 00000038 "BG_.DBGL" */
> @@ -260,6 +260,9 @@ unsigned char AmlCode[] =
> 0x8B,0x68,0x01,0x54,0x4D,0x50,0x5F,0x82, /* 000007A8 ".h.TMP_." */
> 0x54,0x4D,0x50,0x5F,0x60,0x76,0x60,0x70, /* 000007B0 "TMP_`v`p" */
> 0x60,0x50,0x52,0x51,0x33,0x08,0x5F,0x53, /* 000007B8 "`PRQ3._S" */
> - 0x35,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007C0 "5_......" */
> + 0x33,0x5F,0x12,0x06,0x04,0x01,0x01,0x00, /* 000007C0 "3_......" */
> + 0x00,0x08,0x5F,0x53,0x34,0x5F,0x12,0x06, /* 000007C8 ".._S4_.." */
> + 0x04,0x00,0x00,0x00,0x00,0x08,0x5F,0x53, /* 000007D0 "......_S" */
> + 0x35,0x5F,0x12,0x06,0x04,0x00,0x00,0x00, /* 000007D8 "5_......" */
> 0x00,
> };
> diff --git a/bios/rombios.c b/bios/rombios.c
> index 88eac04..03540cb 100644
> --- a/bios/rombios.c
> +++ b/bios/rombios.c
> @@ -2198,6 +2198,31 @@ debugger_off()
> outb(0xfedc, 0x00);
> }
>
> +void
> +s3_resume()
> +{
> + Bit32u s3_wakeup_vector;
> + Bit8u s3_resume_flag;
> +
> + s3_resume_flag = read_byte(0x40, 0xb0);
> + s3_wakeup_vector = read_dword(0x40, 0xb2);
> +
> + BX_INFO("S3 resume called %x 0x%lx\n", s3_resume_flag, s3_wakeup_vector);
> + if (s3_resume_flag != 0xFE || !s3_wakeup_vector)
> + return;
> +
> + write_byte(0x40, 0xb0, 0);
> +
> + /* setup wakeup vector */
> + write_word(0x40, 0xb6, (s3_wakeup_vector & 0xF)); /* IP */
> + write_word(0x40, 0xb8, (s3_wakeup_vector >> 4)); /* CS */
> +
> + BX_INFO("S3 resume jump to %x:%x\n", *(Bit16u*)0x04b8, *(Bit16u*)0x04b6);
Is DS always 0x0 here?
Maybe use s3_wakeup_vector & 0xF and s3_wakeup_vector >> 4?
> +ASM_START
> + jmpf [0x04b6]
> +ASM_END
> +}
> +
> #if BX_USE_ATADRV
>
> // ---------------------------------------------------------------------------
> @@ -9081,6 +9106,12 @@ retf_post_0x467:
> mov ss, [0x469]
> retf
>
> +s3_post:
> +#if BX_ROMBIOS32
> + call rombios32_init
> +#endif
> + call _s3_resume
> + hlt
Why HLT here? Is IF always 0?
I think we can use BX_PANIC instead:
BX_PANIC("Returned from s3_resume.\n");
> ;--------------------
> eoi_both_pics:
> @@ -10005,6 +10036,10 @@ rombios32_05:
> ;; init the stack pointer
> mov esp, #0x00080000
>
> + ;; pass pointer to s3_resume_flag and s3_resume_vector to rombios32
> + push #0x04b0
> + push #0x04b2
> +
> ;; call rombios32 code
> mov eax, #0x00040000
> call eax
> @@ -10375,6 +10410,12 @@ normal_post:
> mov ds, ax
> mov ss, ax
>
> + ;; Save shutdown status
> + mov 0x04b0, bl
> +
> + cmp bl, #0xfe
> + jz s3_post
> +
> ;; zero out BIOS data area (40:00..40:ff)
> mov es, ax
> mov cx, #0x0080 ;; 128 words
> diff --git a/bios/rombios32.c b/bios/rombios32.c
> index f0daf15..b8968e4 100644
> --- a/bios/rombios32.c
> +++ b/bios/rombios32.c
> @@ -180,6 +180,20 @@ void *memmove(void *d1, const void *s1, size_t len)
> return d1;
> }
>
> +int memcmp(const void *s1, const void *s2, size_t len)
> +{
> + const int8_t *p1 = s1;
> + const int8_t *p2 = s2;
> +
> + while (len--) {
> + int r = *p1++ - *p2++;
> + if(r)
> + return r;
> + }
> +
> + return 0;
> +}
> +
> size_t strlen(const char *s)
> {
> const char *s1;
> @@ -644,7 +658,7 @@ static void bios_shadow_init(PCIDevice *d)
> {
> int v;
>
> - if (find_bios_table_area() < 0)
> + if (bios_table_cur_addr == 0)
> return;
>
> /* remap the BIOS to shadow RAM an keep it read/write while we
> @@ -1461,7 +1475,7 @@ void acpi_bios_init(void)
> memset(facs, 0, sizeof(*facs));
> memcpy(facs->signature, "FACS", 4);
> facs->length = cpu_to_le32(sizeof(*facs));
> -
> + BX_INFO("Firmware waking vector %p\n", &facs->firmware_waking_vector);
Please keep the empty line before /* DSDT */
> /* DSDT */
> memcpy(dsdt, AmlCode, sizeof(AmlCode));
>
> @@ -2011,9 +2025,48 @@ void smbios_init(void)
> BX_INFO("SMBIOS table addr=0x%08lx\n", (unsigned long)start);
> }
>
> -void rombios32_init(void)
> +static uint32_t find_resume_vector(void)
> +{
> + unsigned long addr, start, end;
> +
> +#ifdef BX_USE_EBDA_TABLES
> + start = align(ebda_cur_addr, 16);
> + end = 0xa0000 << 4;
0xA00000? 10MB?
> +#else
> + if (bios_table_cur_addr == 0)
> + return 0;
> + start = align(bios_table_cur_addr, 16);
> + end = bios_table_end_addr;
> +#endif
> +
> + for (addr = start; addr < end; addr += 16) {
> + if (!memcmp((void*)addr, "RSD PTR ", 8)) {
> + struct rsdp_descriptor *rsdp = (void*)addr;
> + struct rsdt_descriptor_rev1 *rsdt = (void*)rsdp->rsdt_physical_address;
> + struct fadt_descriptor_rev1 *fadt = (void*)rsdt->table_offset_entry[0];
> + struct facs_descriptor_rev1 *facs = (void*)fadt->firmware_ctrl;
> + return facs->firmware_waking_vector;
> + }
> + }
> +
> + return 0;
> +}
> +
> +static void find_440fx(PCIDevice *d)
> +{
> + uint16_t vendor_id, device_id;
> +
> + vendor_id = pci_config_readw(d, PCI_VENDOR_ID);
> + device_id = pci_config_readw(d, PCI_DEVICE_ID);
> +
> + if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82441)
> + i440_pcidev = *d;
> +}
> +
> +void rombios32_init(uint32_t *s3_resume_vector, uint8_t *shutdown_flag)
> {
> BX_INFO("Starting rombios32\n");
> + BX_INFO("Shutdown flag %x\n", *shutdown_flag);
>
> #ifdef BX_QEMU
> qemu_cfg_port = qemu_cfg_port_probe();
> @@ -2025,6 +2078,21 @@ void rombios32_init(void)
>
> smp_probe();
>
> + find_bios_table_area();
The return value is no longer used, remove it?
> +
> + if (*shutdown_flag == 0xfe) {
> + *s3_resume_vector = find_resume_vector();
> + if (!*s3_resume_vector) {
> + BX_INFO("This is S3 resume but wakeup vector is NULL\n");
> + } else {
> + BX_INFO("S3 resume vector %p\n", *s3_resume_vector);
> + /* redirect bios read access to RAM */
> + pci_for_each_device(find_440fx);
> + bios_lock_shadow_ram(); /* bios is already copied */
> + return;
> + }
> + }
> +
> pci_bios_init();
>
> if (bios_table_cur_addr != 0) {
>
- Sebastian
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreserved memory in BIOS.
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 5/6] Don't use unreserved memory in BIOS Gleb Natapov
@ 2008-11-07 0:25 ` Kevin O'Connor
2008-11-07 0:31 ` Michael Brown
2008-11-09 17:40 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory " Sebastian Herbszt
0 siblings, 2 replies; 19+ messages in thread
From: Kevin O'Connor @ 2008-11-07 0:25 UTC (permalink / raw)
To: Gleb Natapov; +Cc: bochs-developers, qemu-devel
On Mon, Nov 03, 2008 at 11:26:46AM +0200, Gleb Natapov wrote:
> Use only first page and last page of low memory. OSes assumes that first
> page is used by bios and last page is reserved in e820 map.
[...]
> ;; init the stack pointer
> - mov esp, #0x00080000
> + mov esp, #0x9fbf0
Random note - I'm told that some option roms can relocate the EBDA.
Setting the stack in the EBDA area will prevent that from working.
I'm not sure if this is really a problem though - a relocated EBDA
would likely break bochs bios today. Something to be aware of though.
-Kevin
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreserved memory in BIOS.
2008-11-07 0:25 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor
@ 2008-11-07 0:31 ` Michael Brown
2008-11-09 17:40 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory " Sebastian Herbszt
1 sibling, 0 replies; 19+ messages in thread
From: Michael Brown @ 2008-11-07 0:31 UTC (permalink / raw)
To: bochs-developers; +Cc: Kevin O'Connor, qemu-devel, Gleb Natapov
On Friday 07 November 2008 00:25:52 Kevin O'Connor wrote:
> Random note - I'm told that some option roms can relocate the EBDA.
Correct; there's even a defined protocol somewhere for doing this.
Etherboot/gPXE ROMs won't touch the EBDA, FWIW.
Michael
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code from romaddress 0xe0000.
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 4/6] Execute rombios32 code from rom address 0xe0000 Gleb Natapov
@ 2008-11-07 23:20 ` Sebastian Herbszt
2008-11-08 7:51 ` Gleb Natapov
0 siblings, 1 reply; 19+ messages in thread
From: Sebastian Herbszt @ 2008-11-07 23:20 UTC (permalink / raw)
To: Gleb Natapov, bochs-developers; +Cc: qemu-devel
Gleb Natapov wrote:
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> ---
>
> bios/Makefile.in | 1 +
> bios/rombios.c | 17 +----------------
> bios/rombios32.ld | 8 +++-----
> bios/rombios32start.S | 9 ++++++++-
> 4 files changed, 13 insertions(+), 22 deletions(-)
>
> diff --git a/bios/Makefile.in b/bios/Makefile.in
> index b055910..af674b4 100644
> --- a/bios/Makefile.in
> +++ b/bios/Makefile.in
> @@ -106,6 +106,7 @@ rombios32.o: rombios32.c acpi-dsdt.hex
> ifeq ("1", "0")
> acpi-dsdt.hex: acpi-dsdt.dsl
> iasl -tc -p $@ $<
> + sed -i -e's/^unsigned/const unsigned/' $@
> endif
>
> rombios32start.o: rombios32start.S
> diff --git a/bios/rombios.c b/bios/rombios.c
> index 03540cb..098543c 100644
> --- a/bios/rombios.c
> +++ b/bios/rombios.c
> @@ -10026,13 +10026,6 @@ rombios32_05:
> mov gs, ax
> cld
>
> - ;; copy rombios32 code to ram (ram offset = 1MB)
> - mov esi, #0xfffe0000
> - mov edi, #0x00040000
> - mov ecx, #0x10000 / 4
> - rep
> - movsd
> -
> ;; init the stack pointer
> mov esp, #0x00080000
>
> @@ -10041,17 +10034,9 @@ rombios32_05:
> push #0x04b2
>
> ;; call rombios32 code
> - mov eax, #0x00040000
> + mov eax, #0x000e0000
> call eax
>
> - ;; reset the memory (some boot loaders such as syslinux suppose
> - ;; that the memory is set to zero)
> - mov edi, #0x00040000
> - mov ecx, #0x40000 / 4
> - xor eax, eax
> - rep
> - stosd
> -
> ;; return to 16 bit protected mode first
> db 0xea
> dd rombios32_10
> diff --git a/bios/rombios32.ld b/bios/rombios32.ld
> index c7f6066..113a2c0 100644
> --- a/bios/rombios32.ld
> +++ b/bios/rombios32.ld
> @@ -3,14 +3,12 @@ OUTPUT_ARCH(i386)
> ENTRY(_start);
> SECTIONS
> {
> - . = 0x00040000;
> + . = 0x000e0000;
> .text : { *(.text) }
> .rodata : { *(.rodata) }
> - . = ALIGN(4096);
> - .data : { *(.data) }
> - __bss_start = . ;
> - .bss : { *(.bss) *(COMMON) }
> _end = . ;
> + .data 0x700 : AT (_end) { __data_start = .; *(.data); __data_end = .;}
> + .bss : { __bss_start = .; *(.bss) *(COMMON); __bss_end = .;}
> /DISCARD/ : { *(.stab)
> *(.stabstr)
> *(.comment)
The .data section is currently empty because all data is read-only and put
into .rodata, .rodata.str1.1 and .rodata.str1.4. As soon as we put something
into .data we get a link error because .data now overlaps .rodata.str1.1.
The error is gone if we put all .rodata input sections into .rodata output
section with ".rodata : { *(.rodata*)".
> diff --git a/bios/rombios32start.S b/bios/rombios32start.S
> index 601e2b0..1900261 100644
> --- a/bios/rombios32start.S
> +++ b/bios/rombios32start.S
> @@ -32,10 +32,17 @@ _start:
> /* clear bss section */
> xor %eax, %eax
> mov $__bss_start, %edi
> - mov $_end, %ecx
> + mov $__bss_end, %ecx
> sub %edi, %ecx
> rep stosb
We do overwrite data at 0x700 here. Is this acceptable for S3 resume?
> + /* copy data section */
> + mov $_end, %esi
> + mov $__data_start, %edi
> + mov $__data_end, %ecx
> + sub %edi, %ecx
> + rep movsb
> +
As described above this is currently a no-op, because
__data_start = __data_end = 0x700.
> jmp rombios32_init
>
> .code16
>
- Sebastian
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code from romaddress 0xe0000.
2008-11-07 23:20 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code from romaddress 0xe0000 Sebastian Herbszt
@ 2008-11-08 7:51 ` Gleb Natapov
2008-11-10 19:25 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code fromromaddress 0xe0000 Sebastian Herbszt
0 siblings, 1 reply; 19+ messages in thread
From: Gleb Natapov @ 2008-11-08 7:51 UTC (permalink / raw)
To: Sebastian Herbszt; +Cc: bochs-developers, qemu-devel
On Sat, Nov 08, 2008 at 12:20:56AM +0100, Sebastian Herbszt wrote:
>> index c7f6066..113a2c0 100644
>> --- a/bios/rombios32.ld
>> +++ b/bios/rombios32.ld
>> @@ -3,14 +3,12 @@ OUTPUT_ARCH(i386)
>> ENTRY(_start);
>> SECTIONS
>> {
>> - . = 0x00040000;
>> + . = 0x000e0000;
>> .text : { *(.text) }
>> .rodata : { *(.rodata) }
>> - . = ALIGN(4096);
>> - .data : { *(.data) }
>> - __bss_start = . ;
>> - .bss : { *(.bss) *(COMMON) }
>> _end = . ;
>> + .data 0x700 : AT (_end) { __data_start = .; *(.data); __data_end = .;}
>> + .bss : { __bss_start = .; *(.bss) *(COMMON); __bss_end = .;}
>> /DISCARD/ : { *(.stab)
>> *(.stabstr)
>> *(.comment)
>
> The .data section is currently empty because all data is read-only and put
> into .rodata, .rodata.str1.1 and .rodata.str1.4. As soon as we put something
> into .data we get a link error because .data now overlaps .rodata.str1.1.
> The error is gone if we put all .rodata input sections into .rodata output
> section with ".rodata : { *(.rodata*)".
>
Oops. I'll fix that. Worked for me in KVM bios even though its .data is
not empty, but now I see that it worked accidentally because there is ALIGN
after .rodata there.
>> diff --git a/bios/rombios32start.S b/bios/rombios32start.S
>> index 601e2b0..1900261 100644
>> --- a/bios/rombios32start.S
>> +++ b/bios/rombios32start.S
>> @@ -32,10 +32,17 @@ _start:
>> /* clear bss section */
>> xor %eax, %eax
>> mov $__bss_start, %edi
>> - mov $_end, %ecx
>> + mov $__bss_end, %ecx
>> sub %edi, %ecx
>> rep stosb
>
> We do overwrite data at 0x700 here. Is this acceptable for S3 resume?
>
First page is reserved for BIOS use.
>> + /* copy data section */
>> + mov $_end, %esi
>> + mov $__data_start, %edi
>> + mov $__data_end, %ecx
>> + sub %edi, %ecx
>> + rep movsb
>> +
>
> As described above this is currently a no-op, because
> __data_start = __data_end = 0x700.
>
I know, but do we want to remember to add this after changing C code?
There is no harm to add it here and let it do nothing, and don't worry
about adding .data variable later.
--
Gleb.
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory in BIOS.
2008-11-07 0:25 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor
2008-11-07 0:31 ` Michael Brown
@ 2008-11-09 17:40 ` Sebastian Herbszt
2008-11-09 19:43 ` Kevin O'Connor
1 sibling, 1 reply; 19+ messages in thread
From: Sebastian Herbszt @ 2008-11-09 17:40 UTC (permalink / raw)
To: Kevin O'Connor, Gleb Natapov; +Cc: bochs-developers, qemu-devel
Kevin O'Connor wrote:
> On Mon, Nov 03, 2008 at 11:26:46AM +0200, Gleb Natapov wrote:
>> Use only first page and last page of low memory. OSes assumes that first
>> page is used by bios and last page is reserved in e820 map.
> [...]
>> ;; init the stack pointer
>> - mov esp, #0x00080000
>> + mov esp, #0x9fbf0
>
> Random note - I'm told that some option roms can relocate the EBDA.
> Setting the stack in the EBDA area will prevent that from working.
The option rom for the LSI SCSI controller (8xx_64.rom) relocates the
EBDA. It moves it from 0x9fc0 to 0x9f00.
> I'm not sure if this is really a problem though - a relocated EBDA
> would likely break bochs bios today. Something to be aware of though.
EBDA relocation breaks BIOS from cvs. It used to work with my patch
"rombios.c - EBDA move fix" available at sf as #1909786.
Since the option rom updates the value at 0040h:000Eh it's possible
to use it to set the correct value of esp.
- Sebastian
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory in BIOS.
2008-11-09 17:40 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory " Sebastian Herbszt
@ 2008-11-09 19:43 ` Kevin O'Connor
2008-11-10 19:55 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory inBIOS Sebastian Herbszt
0 siblings, 1 reply; 19+ messages in thread
From: Kevin O'Connor @ 2008-11-09 19:43 UTC (permalink / raw)
To: Sebastian Herbszt; +Cc: bochs-developers, qemu-devel
On Sun, Nov 09, 2008 at 06:40:18PM +0100, Sebastian Herbszt wrote:
> Kevin O'Connor wrote:
> > Random note - I'm told that some option roms can relocate the EBDA.
> > Setting the stack in the EBDA area will prevent that from working.
>
> The option rom for the LSI SCSI controller (8xx_64.rom) relocates the
> EBDA. It moves it from 0x9fc0 to 0x9f00.
Thanks Sebastian.
Do you know of any document or specification that details how the bios
is supposed to handle this case and/or how an option rom should
accomplish this?
One of the questions I have, is how the bios should handle the e820
map when this happens. Currently, bochs bios always reserves 1K at
0x9fc0. If the ebda is moved to 0x9f00, should bochs reserve 1K at
0x9f00 or 4K at 0x9f00?
-Kevin
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 2/6] Add S3 state to DSDT. Handleresume event in the BIOS.
2008-11-06 23:03 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 2/6] Add S3 state to DSDT. Handleresume " Sebastian Herbszt
@ 2008-11-10 8:24 ` Gleb Natapov
0 siblings, 0 replies; 19+ messages in thread
From: Gleb Natapov @ 2008-11-10 8:24 UTC (permalink / raw)
To: Sebastian Herbszt; +Cc: bochs-developers, qemu-devel
On Fri, Nov 07, 2008 at 12:03:02AM +0100, Sebastian Herbszt wrote:
>> + Name (\_S3, Package (0x04)
>> + {
>> + 0x01, /* PM1a_CNT.SLP_TYP */
>> + 0x01, /* PM1b_CNT.SLP_TYP */
>> + Zero, /* reserved */
>> + Zero /* reserved */
>> + })
>> + Name (\_S4, Package (0x04)
>> + {
>> + Zero, /* PM1a_CNT.SLP_TYP */
>> + Zero, /* PM1b_CNT.SLP_TYP */
>> + Zero, /* reserved */
>> + Zero /* reserved */
>> + })
>
> Do we need \_S4 for S3 support?
>
Strictly saying no we don't, but S4 is supported by the chipset
we emulate (it is the same as power-off), so why don't advertise
it explicitly?
Other comments are addressed in v3 of the patch series.
--
Gleb.
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code fromromaddress 0xe0000.
2008-11-08 7:51 ` Gleb Natapov
@ 2008-11-10 19:25 ` Sebastian Herbszt
2008-11-10 21:18 ` Gleb Natapov
0 siblings, 1 reply; 19+ messages in thread
From: Sebastian Herbszt @ 2008-11-10 19:25 UTC (permalink / raw)
To: Gleb Natapov; +Cc: bochs-developers, qemu-devel
Gleb Natapov wrote:
> On Sat, Nov 08, 2008 at 12:20:56AM +0100, Sebastian Herbszt wrote:
>>> diff --git a/bios/rombios32start.S b/bios/rombios32start.S
>>> index 601e2b0..1900261 100644
>>> --- a/bios/rombios32start.S
>>> +++ b/bios/rombios32start.S
>>> @@ -32,10 +32,17 @@ _start:
>>> /* clear bss section */
>>> xor %eax, %eax
>>> mov $__bss_start, %edi
>>> - mov $_end, %ecx
>>> + mov $__bss_end, %ecx
>>> sub %edi, %ecx
>>> rep stosb
>>
>> We do overwrite data at 0x700 here. Is this acceptable for S3 resume?
>>
> First page is reserved for BIOS use.
I might have missed something, but Ralf Brown's MEMORY MAP
Release 61 says "MEM 0070h:0000h - DOS 2+ IO.SYS LOAD ADDRESS".
Which specification do you refer to?
- Sebastian
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory inBIOS.
2008-11-09 19:43 ` Kevin O'Connor
@ 2008-11-10 19:55 ` Sebastian Herbszt
0 siblings, 0 replies; 19+ messages in thread
From: Sebastian Herbszt @ 2008-11-10 19:55 UTC (permalink / raw)
To: Kevin O'Connor; +Cc: bochs-developers, qemu-devel
Kevin O'Connor wrote:
> On Sun, Nov 09, 2008 at 06:40:18PM +0100, Sebastian Herbszt wrote:
>> Kevin O'Connor wrote:
>> > Random note - I'm told that some option roms can relocate the EBDA.
>> > Setting the stack in the EBDA area will prevent that from working.
>>
>> The option rom for the LSI SCSI controller (8xx_64.rom) relocates the
>> EBDA. It moves it from 0x9fc0 to 0x9f00.
>
> Thanks Sebastian.
>
> Do you know of any document or specification that details how the bios
> is supposed to handle this case and/or how an option rom should
> accomplish this?
Unfortunatelly not. I discovered this behaviour while playing with the
mentioned option rom.
> One of the questions I have, is how the bios should handle the e820
> map when this happens. Currently, bochs bios always reserves 1K at
> 0x9fc0. If the ebda is moved to 0x9f00, should bochs reserve 1K at
> 0x9f00 or 4K at 0x9f00?
Same problem with the simpler INT 12h interface. Currently it returns
the value in 0040h:0013h. This is the static value BASE_MEM_IN_K
which is 640 - EBDA_SIZE. EBDA_SIZE is the BIOS EBDA size.
Guess the value at 0040h:0013h has to be recalculated after option rom
scan based on the EBDA length field. The BIOS set's this to EBDA_SIZE
and if an option rom does relocate and resize it it should update that field.
So far the map reported by e820 does match INT 12h (both report 0x9fc0).
With this patch e820 reports 0x9f00 and INT 12h sticks to 0x9fc0. I am not
sure about the implications tho.
- Sebastian
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code fromromaddress 0xe0000.
2008-11-10 19:25 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code fromromaddress 0xe0000 Sebastian Herbszt
@ 2008-11-10 21:18 ` Gleb Natapov
0 siblings, 0 replies; 19+ messages in thread
From: Gleb Natapov @ 2008-11-10 21:18 UTC (permalink / raw)
To: Sebastian Herbszt; +Cc: bochs-developers, qemu-devel
On Mon, Nov 10, 2008 at 08:25:07PM +0100, Sebastian Herbszt wrote:
> Gleb Natapov wrote:
>> On Sat, Nov 08, 2008 at 12:20:56AM +0100, Sebastian Herbszt wrote:
>>>> diff --git a/bios/rombios32start.S b/bios/rombios32start.S
>>>> index 601e2b0..1900261 100644
>>>> --- a/bios/rombios32start.S
>>>> +++ b/bios/rombios32start.S
>>>> @@ -32,10 +32,17 @@ _start:
>>>> /* clear bss section */
>>>> xor %eax, %eax
>>>> mov $__bss_start, %edi
>>>> - mov $_end, %ecx
>>>> + mov $__bss_end, %ecx
>>>> sub %edi, %ecx
>>>> rep stosb
>>>
>>> We do overwrite data at 0x700 here. Is this acceptable for S3 resume?
>>>
>> First page is reserved for BIOS use.
>
> I might have missed something, but Ralf Brown's MEMORY MAP
> Release 61 says "MEM 0070h:0000h - DOS 2+ IO.SYS LOAD ADDRESS".
>
> Which specification do you refer to?
>
DOS does not support S3 :). Linux reserve first page for BIOS use (as
can be seed in the code). As far as I know Windows doesn't touch even
more of low memory.
--
Gleb.
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2008-11-10 21:18 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-03 9:26 [Qemu-devel] [PATCH v2 0/6] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 1/6] Move PIC initialization out of line to save space in post code area Gleb Natapov
2008-11-06 21:42 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 1/6] Move PIC initialization out ofline " Sebastian Herbszt
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 2/6] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov
2008-11-06 23:03 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 2/6] Add S3 state to DSDT. Handleresume " Sebastian Herbszt
2008-11-10 8:24 ` Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 3/6] Preserve memory content during SMM init Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 4/6] Execute rombios32 code from rom address 0xe0000 Gleb Natapov
2008-11-07 23:20 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code from romaddress 0xe0000 Sebastian Herbszt
2008-11-08 7:51 ` Gleb Natapov
2008-11-10 19:25 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 4/6] Execute rombios32 code fromromaddress 0xe0000 Sebastian Herbszt
2008-11-10 21:18 ` Gleb Natapov
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 5/6] Don't use unreserved memory in BIOS Gleb Natapov
2008-11-07 0:25 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor
2008-11-07 0:31 ` Michael Brown
2008-11-09 17:40 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory " Sebastian Herbszt
2008-11-09 19:43 ` Kevin O'Connor
2008-11-10 19:55 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v2 5/6] Don't use unreservedmemory inBIOS Sebastian Herbszt
2008-11-03 9:26 ` [Qemu-devel] [PATCH v2 6/6] Don't power down vga card on entering S3 state Gleb Natapov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).