* [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS @ 2008-11-27 11:02 Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov ` (5 more replies) 0 siblings, 6 replies; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 11:02 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. v3: - Stack pointer for rombios32 code depends on EBDA settings - Fix .data and .rodata* section overlap - Various small fixes v4: - If resume vector is NULL return to normal POST v5: - Call smm_init() at S3 resume boot - Shadow BIOS before looking for resume vector --- Gleb Natapov (5): 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. bios/Makefile.in | 1 bios/acpi-dsdt.dsl | 45 +++++- bios/acpi-dsdt.hex | 376 +++++++++++++++++++++++++------------------------ bios/rombios.c | 77 ++++++++-- bios/rombios.h | 1 bios/rombios32.c | 132 ++++++++++++++--- bios/rombios32.ld | 10 + bios/rombios32start.S | 11 + 8 files changed, 414 insertions(+), 239 deletions(-) -- Gleb. ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov @ 2008-11-27 11:02 ` Gleb Natapov 2008-12-07 2:57 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 2/5] Preserve memory content during SMM init Gleb Natapov ` (4 subsequent siblings) 5 siblings, 1 reply; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 11:02 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 | 51 ++++++++++++++++++++++++ bios/rombios32.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 184 insertions(+), 25 deletions(-) diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl index 19ac2f9..280a05e 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-disk) 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 9255b89..a34c6b2 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -1917,6 +1917,11 @@ shutdown_status_panic(status) BX_PANIC("Unimplemented shutdown status: %02x\n",(Bit8u)status); } +void s3_resume_panic() +{ + BX_PANIC("Returned from s3_resume.\n"); +} + //-------------------------------------------------------------------------- // print_bios_banner // displays a the bios version @@ -2198,6 +2203,33 @@ debugger_off() outb(0xfedc, 0x00); } +int +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 0; + + 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", (s3_wakeup_vector >> 4), + (s3_wakeup_vector & 0xF)); +ASM_START + jmpf [0x04b6] +ASM_END + return 1; +} + #if BX_USE_ATADRV // --------------------------------------------------------------------------- @@ -9081,6 +9113,15 @@ retf_post_0x467: mov ss, [0x469] retf +s3_post: +#if BX_ROMBIOS32 + call rombios32_init +#endif + call _s3_resume + mov bl, #0x00 + and ax, ax + jz normal_post + call _s3_resume_panic ;-------------------- eoi_both_pics: @@ -10005,6 +10046,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 +10420,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 38cfe06..d9b59d5 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; @@ -625,7 +639,7 @@ static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num) return (irq_num + slot_addend) & 3; } -static int find_bios_table_area(void) +static void find_bios_table_area(void) { unsigned long addr; for(addr = 0xf0000; addr < 0x100000; addr += 16) { @@ -634,17 +648,17 @@ static int find_bios_table_area(void) bios_table_end_addr = bios_table_cur_addr + *(uint32_t *)(addr + 4); BX_INFO("bios_table_addr: 0x%08lx end=0x%08lx\n", bios_table_cur_addr, bios_table_end_addr); - return 0; + return; } } - return -1; + return; } 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 @@ -747,6 +761,18 @@ static void smm_init(PCIDevice *d) } #endif +static void piix4_pm_enable(PCIDevice *d) +{ + /* PIIX4 Power Management device (for ACPI) */ + pci_config_writel(d, 0x40, PM_IO_BASE | 1); + pci_config_writeb(d, 0x80, 0x01); /* enable PM io space */ + pci_config_writel(d, 0x90, SMB_IO_BASE | 1); + pci_config_writeb(d, 0xd2, 0x09); /* enable SMBus io space */ +#ifdef BX_USE_SMM + smm_init(d); +#endif +} + static void pci_bios_init_device(PCIDevice *d) { int class; @@ -837,15 +863,9 @@ static void pci_bios_init_device(PCIDevice *d) if (vendor_id == PCI_VENDOR_ID_INTEL && device_id == PCI_DEVICE_ID_INTEL_82371AB_3) { /* PIIX4 Power Management device (for ACPI) */ pm_io_base = PM_IO_BASE; - pci_config_writel(d, 0x40, pm_io_base | 1); - pci_config_writeb(d, 0x80, 0x01); /* enable PM io space */ smb_io_base = SMB_IO_BASE; - pci_config_writel(d, 0x90, smb_io_base | 1); - pci_config_writeb(d, 0xd2, 0x09); /* enable SMBus io space */ pm_sci_int = pci_config_readb(d, PCI_INTERRUPT_LINE); -#ifdef BX_USE_SMM - smm_init(d); -#endif + piix4_pm_enable(d); acpi_enabled = 1; } } @@ -1460,6 +1480,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)); @@ -2010,9 +2031,59 @@ 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 = 0xa000 << 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; +} + +static void reinit_piix4_pm(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_82371AB_3) + piix4_pm_enable(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(); @@ -2024,6 +2095,22 @@ void rombios32_init(void) smp_probe(); + find_bios_table_area(); + + if (*shutdown_flag == 0xfe) { + /* redirect bios read access to RAM */ + pci_for_each_device(find_440fx); + bios_lock_shadow_ram(); /* bios is already copied */ + *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); + pci_for_each_device(reinit_piix4_pm); + } + return; + } + pci_bios_init(); if (bios_table_cur_addr != 0) { ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov @ 2008-12-07 2:57 ` Kevin O'Connor 2008-12-07 9:20 ` Gleb Natapov 2008-12-09 13:38 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle " Gleb Natapov 0 siblings, 2 replies; 24+ messages in thread From: Kevin O'Connor @ 2008-12-07 2:57 UTC (permalink / raw) To: Gleb Natapov; +Cc: bochs-developers, qemu-devel Hi Gleb, On Thu, Nov 27, 2008 at 01:02:25PM +0200, Gleb Natapov wrote: [...] > @@ -10375,6 +10420,12 @@ normal_post: > mov ds, ax > mov ss, ax > > + ;; Save shutdown status > + mov 0x04b0, bl > + > + cmp bl, #0xfe > + jz s3_post > + What sets 40:b0 to 0xfe on a resume? Also, wouldn't this corrupt memory used by the stack (the stack gets set to 0xfffe, and s3_post has call insns in it)? -Kevin ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-12-07 2:57 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor @ 2008-12-07 9:20 ` Gleb Natapov 2008-12-07 15:10 ` Kevin O'Connor 2008-12-09 22:26 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt 2008-12-09 13:38 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle " Gleb Natapov 1 sibling, 2 replies; 24+ messages in thread From: Gleb Natapov @ 2008-12-07 9:20 UTC (permalink / raw) To: Kevin O'Connor; +Cc: bochs-developers, qemu-devel On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > Hi Gleb, > > On Thu, Nov 27, 2008 at 01:02:25PM +0200, Gleb Natapov wrote: > [...] > > @@ -10375,6 +10420,12 @@ normal_post: > > mov ds, ax > > mov ss, ax > > > > + ;; Save shutdown status > > + mov 0x04b0, bl > > + > > + cmp bl, #0xfe > > + jz s3_post > > + > > What sets 40:b0 to 0xfe on a resume? > Qemu/Bochs. > Also, wouldn't this corrupt memory used by the stack (the stack gets > set to 0xfffe, and s3_post has call insns in it)? > Oh. I thought it was set to be at the top of the first page, but it has one extra 'f' :( We should change it to be 0xffe instead. -- Gleb. ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-12-07 9:20 ` Gleb Natapov @ 2008-12-07 15:10 ` Kevin O'Connor 2008-12-07 16:31 ` Gleb Natapov 2008-12-09 22:26 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt 1 sibling, 1 reply; 24+ messages in thread From: Kevin O'Connor @ 2008-12-07 15:10 UTC (permalink / raw) To: Gleb Natapov; +Cc: bochs-developers, qemu-devel On Sun, Dec 07, 2008 at 11:20:31AM +0200, Gleb Natapov wrote: > On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > > On Thu, Nov 27, 2008 at 01:02:25PM +0200, Gleb Natapov wrote: > > > + ;; Save shutdown status > > > + mov 0x04b0, bl > > > + > > > + cmp bl, #0xfe > > > + jz s3_post > > What sets 40:b0 to 0xfe on a resume? > Qemu/Bochs. Thanks. If we're going to set a flag to indicate a resume, I think we should use more than one byte to ensure we don't invoke that path on random memory. (Maybe something like 0x5333524d -- 'S3RM'?) Also, can the ACPI dsdt code set the flag instead of the emulators? -Kevin ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-12-07 15:10 ` Kevin O'Connor @ 2008-12-07 16:31 ` Gleb Natapov 0 siblings, 0 replies; 24+ messages in thread From: Gleb Natapov @ 2008-12-07 16:31 UTC (permalink / raw) To: Kevin O'Connor; +Cc: bochs-developers, qemu-devel On Sun, Dec 07, 2008 at 10:10:44AM -0500, Kevin O'Connor wrote: > On Sun, Dec 07, 2008 at 11:20:31AM +0200, Gleb Natapov wrote: > > On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > > > On Thu, Nov 27, 2008 at 01:02:25PM +0200, Gleb Natapov wrote: > > > > + ;; Save shutdown status > > > > + mov 0x04b0, bl > > > > + > > > > + cmp bl, #0xfe > > > > + jz s3_post > > > What sets 40:b0 to 0xfe on a resume? > > Qemu/Bochs. > > Thanks. > > If we're going to set a flag to indicate a resume, I think we should > use more than one byte to ensure we don't invoke that path on random > memory. (Maybe something like 0x5333524d -- 'S3RM'?) > > Also, can the ACPI dsdt code set the flag instead of the emulators? > Sorry I gave you a wrong answer. Qemu/BOCHS write 0xfe to CMOS offset 0xf (reboot reason) and BIOS saves it into 40:b0. We cannot write into CMOS from AML since windows doesn't like it. -- Gleb. ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle resume event in the BIOS. 2008-12-07 9:20 ` Gleb Natapov 2008-12-07 15:10 ` Kevin O'Connor @ 2008-12-09 22:26 ` Sebastian Herbszt 2008-12-10 0:06 ` Kevin O'Connor 1 sibling, 1 reply; 24+ messages in thread From: Sebastian Herbszt @ 2008-12-09 22:26 UTC (permalink / raw) To: Gleb Natapov, Kevin O'Connor; +Cc: bochs-developers, qemu-devel Gleb Natapov wrote: > On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: >> Hi Gleb, >> >> On Thu, Nov 27, 2008 at 01:02:25PM +0200, Gleb Natapov wrote: >> [...] >> > @@ -10375,6 +10420,12 @@ normal_post: >> > mov ds, ax >> > mov ss, ax >> > >> > + ;; Save shutdown status >> > + mov 0x04b0, bl >> > + >> > + cmp bl, #0xfe >> > + jz s3_post >> > + >> >> What sets 40:b0 to 0xfe on a resume? >> > Qemu/Bochs. > >> Also, wouldn't this corrupt memory used by the stack (the stack gets >> set to 0xfffe, and s3_post has call insns in it)? insns = instructions? > Oh. I thought it was set to be at the top of the first page, but it has > one extra 'f' :( We should change it to be 0xffe instead. Can you please explain this memory corruption? Why would "this" (?) corrupt memory used by the stack? We set the stack to 0xfffe and then call rombios32_init. rombios32_init saves the current ss:sp and then uses own stack, which is now located below the EBDA. 0xfffe is "user memory", same applys to 0xffe so in both cases we use "user memory". Do you suggest 0xffe because it's in the first page (i assume 4KB pages) reserved for BIOS use? - Sebastian ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle resume event in the BIOS. 2008-12-09 22:26 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt @ 2008-12-10 0:06 ` Kevin O'Connor 2008-12-10 10:22 ` Gleb Natapov 0 siblings, 1 reply; 24+ messages in thread From: Kevin O'Connor @ 2008-12-10 0:06 UTC (permalink / raw) To: Sebastian Herbszt; +Cc: bochs-developers, qemu-devel, Gleb Natapov On Tue, Dec 09, 2008 at 11:26:53PM +0100, Sebastian Herbszt wrote: > Gleb Natapov wrote: > > On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > >> Also, wouldn't this corrupt memory used by the stack (the stack gets > >> set to 0xfffe, and s3_post has call insns in it)? > > Oh. I thought it was set to be at the top of the first page, but it has > > one extra 'f' :( We should change it to be 0xffe instead. > > Can you please explain this memory corruption? Why would "this" (?) corrupt > memory used by the stack? On an s3 resume, memory the OS may be using must not be changed by the bios. When bochs bios detects an s3 resume, it jumps to s3_post with the stack pointer set to 0xfffe. In s3_post, there are "call" instruction which will alter memory at 0xfffe (to store the return address). This could break the resume, because the OS could be using that memory for something else. Gleb is suggesting that we change that to 0xffe, because the OS can't be using memory at that address and expect s3 resume to work. (The first 4KiB is reserved for BIOS use.) -Kevin ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle resume event in the BIOS. 2008-12-10 0:06 ` Kevin O'Connor @ 2008-12-10 10:22 ` Gleb Natapov 0 siblings, 0 replies; 24+ messages in thread From: Gleb Natapov @ 2008-12-10 10:22 UTC (permalink / raw) To: Kevin O'Connor; +Cc: bochs-developers, qemu-devel, Sebastian Herbszt On Tue, Dec 09, 2008 at 07:06:04PM -0500, Kevin O'Connor wrote: > On Tue, Dec 09, 2008 at 11:26:53PM +0100, Sebastian Herbszt wrote: > > Gleb Natapov wrote: > > > On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > > >> Also, wouldn't this corrupt memory used by the stack (the stack gets > > >> set to 0xfffe, and s3_post has call insns in it)? > > > Oh. I thought it was set to be at the top of the first page, but it has > > > one extra 'f' :( We should change it to be 0xffe instead. > > > > Can you please explain this memory corruption? Why would "this" (?) corrupt > > memory used by the stack? > > On an s3 resume, memory the OS may be using must not be changed by the > bios. When bochs bios detects an s3 resume, it jumps to s3_post with > the stack pointer set to 0xfffe. In s3_post, there are "call" > instruction which will alter memory at 0xfffe (to store the return > address). This could break the resume, because the OS could be using > that memory for something else. > > Gleb is suggesting that we change that to 0xffe, because the OS can't > be using memory at that address and expect s3 resume to work. (The > first 4KiB is reserved for BIOS use.) > And the patch I've sent set sp to 0xffe only on S3 resume path where stack usage is minimal. -- Gleb. ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-12-07 2:57 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor 2008-12-07 9:20 ` Gleb Natapov @ 2008-12-09 13:38 ` Gleb Natapov 2008-12-09 15:12 ` [Qemu-devel] " Stanislav 2008-12-14 22:02 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt 1 sibling, 2 replies; 24+ messages in thread From: Gleb Natapov @ 2008-12-09 13:38 UTC (permalink / raw) To: bochs-developers; +Cc: Kevin O'Connor, qemu-devel On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > Also, wouldn't this corrupt memory used by the stack (the stack gets > set to 0xfffe, and s3_post has call insns in it)? Here is the patch to set stack pointer to a different value on S3 resume: Signed-off-by: Gleb Natapov <gleb@redhat.com> diff --git a/bios/rombios.c b/bios/rombios.c index 7a9c1fd..8e1d3ec 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -9114,6 +9114,7 @@ retf_post_0x467: retf s3_post: + mov sp, #0xffe #if BX_ROMBIOS32 call rombios32_init #endif -- Gleb. ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] RE: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. 2008-12-09 13:38 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle " Gleb Natapov @ 2008-12-09 15:12 ` Stanislav 2008-12-14 22:02 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt 1 sibling, 0 replies; 24+ messages in thread From: Stanislav @ 2008-12-09 15:12 UTC (permalink / raw) To: 'Gleb Natapov', bochs-developers Cc: 'Kevin O'Connor', qemu-devel Sebastian, Kevin, Let me know if any of the patches here should be integrated to Bochs ... Stanislav -----Original Message----- From: Gleb Natapov [mailto:gleb@redhat.com] Sent: Tuesday, December 09, 2008 3:39 PM To: bochs-developers@lists.sourceforge.net Cc: Kevin O'Connor; qemu-devel@nongnu.org Subject: Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS. On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: > Also, wouldn't this corrupt memory used by the stack (the stack gets > set to 0xfffe, and s3_post has call insns in it)? Here is the patch to set stack pointer to a different value on S3 resume: Signed-off-by: Gleb Natapov <gleb@redhat.com> diff --git a/bios/rombios.c b/bios/rombios.c index 7a9c1fd..8e1d3ec 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -9114,6 +9114,7 @@ retf_post_0x467: retf s3_post: + mov sp, #0xffe #if BX_ROMBIOS32 call rombios32_init #endif -- Gleb. ---------------------------------------------------------------------------- -- SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. The future of the web can't happen without you. Join us at MIX09 to help pave the way to the Next Web now. Learn more and register at http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ _______________________________________________ bochs-developers mailing list bochs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bochs-developers ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle resume event in the BIOS. 2008-12-09 13:38 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle " Gleb Natapov 2008-12-09 15:12 ` [Qemu-devel] " Stanislav @ 2008-12-14 22:02 ` Sebastian Herbszt 1 sibling, 0 replies; 24+ messages in thread From: Sebastian Herbszt @ 2008-12-14 22:02 UTC (permalink / raw) To: Gleb Natapov, bochs-developers, Stanislav; +Cc: Kevin O'Connor, qemu-devel Gleb Natapov wrote: > On Sat, Dec 06, 2008 at 09:57:38PM -0500, Kevin O'Connor wrote: >> Also, wouldn't this corrupt memory used by the stack (the stack gets >> set to 0xfffe, and s3_post has call insns in it)? > Here is the patch to set stack pointer to a different value on S3 resume: > > Signed-off-by: Gleb Natapov <gleb@redhat.com> > > diff --git a/bios/rombios.c b/bios/rombios.c > index 7a9c1fd..8e1d3ec 100644 > --- a/bios/rombios.c > +++ b/bios/rombios.c > @@ -9114,6 +9114,7 @@ retf_post_0x467: > retf > > s3_post: > + mov sp, #0xffe > #if BX_ROMBIOS32 > call rombios32_init > #endif Stanislav, please apply. - Sebastian ^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH v5 2/5] Preserve memory content during SMM init. 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov @ 2008-11-27 11:02 ` Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 3/5] Execute rombios32 code from rom address 0xe0000 Gleb Natapov ` (3 subsequent siblings) 5 siblings, 0 replies; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 11:02 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 d9b59d5..4093d88 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] 24+ messages in thread
* [Qemu-devel] [PATCH v5 3/5] Execute rombios32 code from rom address 0xe0000. 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 2/5] Preserve memory content during SMM init Gleb Natapov @ 2008-11-27 11:02 ` Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 4/5] Don't use unreserved memory in BIOS Gleb Natapov ` (2 subsequent siblings) 5 siblings, 0 replies; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 11:02 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 | 10 ++++------ bios/rombios32start.S | 9 ++++++++- 4 files changed, 14 insertions(+), 23 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 a34c6b2..4e555a9 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -10036,13 +10036,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 @@ -10051,17 +10044,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..ff765c8 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) } + .rodata : { *(.rodata*) } _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] 24+ messages in thread
* [Qemu-devel] [PATCH v5 4/5] Don't use unreserved memory in BIOS. 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov ` (2 preceding siblings ...) 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 3/5] Execute rombios32 code from rom address 0xe0000 Gleb Natapov @ 2008-11-27 11:02 ` Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 5/5] Don't power down vga card on entering S3 state Gleb Natapov 2008-11-27 12:17 ` [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Carl-Daniel Hailfinger 5 siblings, 0 replies; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 11:02 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 | 11 +++++++---- bios/rombios.h | 1 - bios/rombios32.c | 11 ++++------- bios/rombios32start.S | 2 +- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/bios/rombios.c b/bios/rombios.c index 4e555a9..5a56716 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -4548,7 +4548,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; @@ -4557,7 +4557,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; @@ -10036,8 +10036,11 @@ rombios32_05: mov gs, ax cld - ;; init the stack pointer - mov esp, #0x00080000 + ;; init the stack pointer to point below EBDA + mov ax, [0x040e] + shl eax, #4 + mov esp, #-0x10 + add esp, eax ;; 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 4093d88..1d8e0a3 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] 24+ messages in thread
* [Qemu-devel] [PATCH v5 5/5] Don't power down vga card on entering S3 state. 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov ` (3 preceding siblings ...) 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 4/5] Don't use unreserved memory in BIOS Gleb Natapov @ 2008-11-27 11:02 ` Gleb Natapov 2008-11-27 12:17 ` [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Carl-Daniel Hailfinger 5 siblings, 0 replies; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 11:02 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 280a05e..5fc3636 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] 24+ messages in thread
* Re: [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov ` (4 preceding siblings ...) 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 5/5] Don't power down vga card on entering S3 state Gleb Natapov @ 2008-11-27 12:17 ` Carl-Daniel Hailfinger 2008-11-27 12:35 ` Gleb Natapov 5 siblings, 1 reply; 24+ messages in thread From: Carl-Daniel Hailfinger @ 2008-11-27 12:17 UTC (permalink / raw) To: qemu-devel; +Cc: bochs-developers Hi, On 27.11.2008 12:02, Gleb Natapov wrote: > 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. > I see the problem you're facing with the overwrite and it looks there might be a cleaner solution: If you can lock the CPU cache so that writes don't get passed through to RAM, you're free to use any area (with a few contraints) for stack without having to worry about clobbering memory contents there. That method is called Cache-as-RAM and I'm currently trying to implement it in Qemu. I haven't looked into Bochs yet, but it should be doable there as well. coreboot (a free x86 firmware/BIOS replacement) is using Cache-as-RAM and I believe quite a few commercial BIOSes use that technique as well. Regards, Carl-Daniel ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 12:17 ` [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Carl-Daniel Hailfinger @ 2008-11-27 12:35 ` Gleb Natapov 2008-11-27 18:59 ` [Bochs-developers] " Stanislav 0 siblings, 1 reply; 24+ messages in thread From: Gleb Natapov @ 2008-11-27 12:35 UTC (permalink / raw) To: qemu-devel; +Cc: bochs-developers On Thu, Nov 27, 2008 at 01:17:16PM +0100, Carl-Daniel Hailfinger wrote: > Hi, > > On 27.11.2008 12:02, Gleb Natapov wrote: > > 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. > > > > I see the problem you're facing with the overwrite and it looks there > might be a cleaner solution: If you can lock the CPU cache so that > writes don't get passed through to RAM, you're free to use any area > (with a few contraints) for stack without having to worry about > clobbering memory contents there. > > That method is called Cache-as-RAM and I'm currently trying to implement > it in Qemu. I haven't looked into Bochs yet, but it should be doable > there as well. > It would be nice to not worry about stack location. We may try to use it when you changes will work in Qemu and BOCHS. -- Gleb. ^ permalink raw reply [flat|nested] 24+ messages in thread
* RE: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 12:35 ` Gleb Natapov @ 2008-11-27 18:59 ` Stanislav 2008-11-27 19:07 ` Carl-Daniel Hailfinger 0 siblings, 1 reply; 24+ messages in thread From: Stanislav @ 2008-11-27 18:59 UTC (permalink / raw) To: 'Gleb Natapov', qemu-devel; +Cc: bochs-developers In Bochs CPU doesn't have a cache memory emulated to use it as RAM but it is still possible to emulate cache-as-ram mode. The problem that cache-as-ram mode is very very very processor specific and implementation of it might be different between Intel and AMD for example. Which one to pick up ? Or might be better to invent some other mode especially for emulation reasons ? Stanislav -----Original Message----- From: Gleb Natapov [mailto:gleb@redhat.com] Sent: Thursday, November 27, 2008 2:36 PM To: qemu-devel@nongnu.org Cc: bochs-developers@lists.sourceforge.net Subject: Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS On Thu, Nov 27, 2008 at 01:17:16PM +0100, Carl-Daniel Hailfinger wrote: > Hi, > > On 27.11.2008 12:02, Gleb Natapov wrote: > > 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. > > > > I see the problem you're facing with the overwrite and it looks there > might be a cleaner solution: If you can lock the CPU cache so that > writes don't get passed through to RAM, you're free to use any area > (with a few contraints) for stack without having to worry about > clobbering memory contents there. > > That method is called Cache-as-RAM and I'm currently trying to implement > it in Qemu. I haven't looked into Bochs yet, but it should be doable > there as well. > It would be nice to not worry about stack location. We may try to use it when you changes will work in Qemu and BOCHS. -- Gleb. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ bochs-developers mailing list bochs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bochs-developers ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 18:59 ` [Bochs-developers] " Stanislav @ 2008-11-27 19:07 ` Carl-Daniel Hailfinger 2008-11-27 20:04 ` Stanislav 0 siblings, 1 reply; 24+ messages in thread From: Carl-Daniel Hailfinger @ 2008-11-27 19:07 UTC (permalink / raw) To: qemu-devel; +Cc: bochs-developers, 'Gleb Natapov' On 27.11.2008 19:59, Stanislav wrote: > In Bochs CPU doesn't have a cache memory emulated to use it as RAM but it is > still possible to emulate cache-as-ram mode. > The problem that cache-as-ram mode is very very very processor specific and > implementation of it might be different between Intel and AMD for example. > Which one to pick up ? > I have worked on Intel, AMD and VIA implementations for Cache-as-RAM. Avi Kivity suggested a simple algorithm which is a catchall for Intel 586, Intel Core 2 Duo, AMD K8, AMD K10 and VIA C7. > Or might be better to invent some other mode especially for emulation > reasons ? > With the catchall emulation, inventing a special mode should be unneeded. Regards, Carl-Daniel -- http://www.hailfinger.org/ ^ permalink raw reply [flat|nested] 24+ messages in thread
* RE: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 19:07 ` Carl-Daniel Hailfinger @ 2008-11-27 20:04 ` Stanislav 2008-11-27 21:04 ` Carl-Daniel Hailfinger 0 siblings, 1 reply; 24+ messages in thread From: Stanislav @ 2008-11-27 20:04 UTC (permalink / raw) To: 'Carl-Daniel Hailfinger', qemu-devel; +Cc: bochs-developers What is the catchall emulation ? Could you explain/point me some docs ? Thanks, Stanislav -----Original Message----- From: Carl-Daniel Hailfinger [mailto:c-d.hailfinger.devel.2006@gmx.net] Sent: Thursday, November 27, 2008 9:08 PM To: qemu-devel@nongnu.org Cc: bochs-developers@lists.sourceforge.net Subject: Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS On 27.11.2008 19:59, Stanislav wrote: > In Bochs CPU doesn't have a cache memory emulated to use it as RAM but it is > still possible to emulate cache-as-ram mode. > The problem that cache-as-ram mode is very very very processor specific and > implementation of it might be different between Intel and AMD for example. > Which one to pick up ? > I have worked on Intel, AMD and VIA implementations for Cache-as-RAM. Avi Kivity suggested a simple algorithm which is a catchall for Intel 586, Intel Core 2 Duo, AMD K8, AMD K10 and VIA C7. > Or might be better to invent some other mode especially for emulation > reasons ? > With the catchall emulation, inventing a special mode should be unneeded. Regards, Carl-Daniel -- http://www.hailfinger.org/ ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ bochs-developers mailing list bochs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bochs-developers ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 20:04 ` Stanislav @ 2008-11-27 21:04 ` Carl-Daniel Hailfinger 2008-11-29 19:42 ` Stanislav 0 siblings, 1 reply; 24+ messages in thread From: Carl-Daniel Hailfinger @ 2008-11-27 21:04 UTC (permalink / raw) To: qemu-devel; +Cc: bochs-developers On 27.11.2008 21:04, Stanislav wrote: > What is the catchall emulation ? Could you explain/point me some docs ? > Sorry, it was only a brief sentence. Basically, if the total size of all cached areas is not bigger than CPU cache size, no cache line will be evicted and the cache behaves like Cache-as-RAM (CAR). That should be doable in Bochs, KVM and Qemu. Or were you looking for BIOS code to enable CAR? That is indeed processor specific, but any of the existing CAR implementations will work if the catchall emulation is used. Regards, Carl-Daniel -- http://www.hailfinger.org/ ^ permalink raw reply [flat|nested] 24+ messages in thread
* RE: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-27 21:04 ` Carl-Daniel Hailfinger @ 2008-11-29 19:42 ` Stanislav 2008-12-04 10:04 ` Carl-Daniel Hailfinger 0 siblings, 1 reply; 24+ messages in thread From: Stanislav @ 2008-11-29 19:42 UTC (permalink / raw) To: 'Carl-Daniel Hailfinger', qemu-devel; +Cc: bochs-developers Again, I mean Bochs doesn't emulate caches. So what do you mean by catchall emulation ? To allocate kind of dummy 32K block and use it when CRAM mode and delete immediately after ? About the way you enable CRAM mode - it would be nice if we agree to use a protocol which real hardware needs. I still hope to be able to execute real hardware BIOSes on Bochs for example ... Stanislav -----Original Message----- From: Carl-Daniel Hailfinger [mailto:c-d.hailfinger.devel.2006@gmx.net] Sent: Thursday, November 27, 2008 11:05 PM To: qemu-devel@nongnu.org Cc: bochs-developers@lists.sourceforge.net Subject: Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS On 27.11.2008 21:04, Stanislav wrote: > What is the catchall emulation ? Could you explain/point me some docs ? > Sorry, it was only a brief sentence. Basically, if the total size of all cached areas is not bigger than CPU cache size, no cache line will be evicted and the cache behaves like Cache-as-RAM (CAR). That should be doable in Bochs, KVM and Qemu. Or were you looking for BIOS code to enable CAR? That is indeed processor specific, but any of the existing CAR implementations will work if the catchall emulation is used. Regards, Carl-Daniel -- http://www.hailfinger.org/ ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ bochs-developers mailing list bochs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bochs-developers ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS 2008-11-29 19:42 ` Stanislav @ 2008-12-04 10:04 ` Carl-Daniel Hailfinger 0 siblings, 0 replies; 24+ messages in thread From: Carl-Daniel Hailfinger @ 2008-12-04 10:04 UTC (permalink / raw) To: qemu-devel; +Cc: bochs-developers On 29.11.2008 20:42, Stanislav wrote: > Again, I mean Bochs doesn't emulate caches. So what do you mean by catchall > emulation ? > To allocate kind of dummy 32K block and use it when CRAM mode and delete > immediately after ? > Yes, exactly. However, the size of the dummy block depends on your cache size. And I have seen Intel CPUs (with 2 MB cache) which used up to 1056 kB of cache during CAR mode. > About the way you enable CRAM mode - it would be nice if we agree to use a > protocol which real hardware needs. > Yes. That is my goal. The problem is that CPU documentation is often a bit ambiguous about how CAR mode is enabled. AFAIK the common denominator is the CARsize <= Cachesize setting. That is really unusual for any point in time (during OS execution) except for the short time where CAR is enabled in the firmware/BIOS. > I still hope to be able to execute real hardware BIOSes on Bochs for example > That would be cool. The RAM controller emulation may need some tweaking, though. Regards, Carl-Daniel > Stanislav > > -----Original Message----- > From: Carl-Daniel Hailfinger [mailto:c-d.hailfinger.devel.2006@gmx.net] > Sent: Thursday, November 27, 2008 11:05 PM > To: qemu-devel@nongnu.org > Cc: bochs-developers@lists.sourceforge.net > Subject: Re: [Bochs-developers] [Qemu-devel] [PATCH v5 0/5] Support for S3 > ACPI state (suspend to memory) in BIOS > > On 27.11.2008 21:04, Stanislav wrote: > >> What is the catchall emulation ? Could you explain/point me some docs ? >> >> > > Sorry, it was only a brief sentence. Basically, if the total size of all > cached areas is not bigger than CPU cache size, no cache line will be > evicted and the cache behaves like Cache-as-RAM (CAR). That should be > doable in Bochs, KVM and Qemu. > > Or were you looking for BIOS code to enable CAR? That is indeed > processor specific, but any of the existing CAR implementations will > work if the catchall emulation is used. > > Regards, > Carl-Daniel > > -- http://www.hailfinger.org/ ^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2008-12-14 22:05 UTC | newest] Thread overview: 24+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-11-27 11:02 [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 1/5] Add S3 state to DSDT. Handle resume event in the BIOS Gleb Natapov 2008-12-07 2:57 ` [Qemu-devel] Re: [Bochs-developers] " Kevin O'Connor 2008-12-07 9:20 ` Gleb Natapov 2008-12-07 15:10 ` Kevin O'Connor 2008-12-07 16:31 ` Gleb Natapov 2008-12-09 22:26 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt 2008-12-10 0:06 ` Kevin O'Connor 2008-12-10 10:22 ` Gleb Natapov 2008-12-09 13:38 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT. Handle " Gleb Natapov 2008-12-09 15:12 ` [Qemu-devel] " Stanislav 2008-12-14 22:02 ` [Qemu-devel] Re: [Bochs-developers] [PATCH v5 1/5] Add S3 state to DSDT.Handle " Sebastian Herbszt 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 2/5] Preserve memory content during SMM init Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 3/5] Execute rombios32 code from rom address 0xe0000 Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 4/5] Don't use unreserved memory in BIOS Gleb Natapov 2008-11-27 11:02 ` [Qemu-devel] [PATCH v5 5/5] Don't power down vga card on entering S3 state Gleb Natapov 2008-11-27 12:17 ` [Qemu-devel] [PATCH v5 0/5] Support for S3 ACPI state (suspend to memory) in BIOS Carl-Daniel Hailfinger 2008-11-27 12:35 ` Gleb Natapov 2008-11-27 18:59 ` [Bochs-developers] " Stanislav 2008-11-27 19:07 ` Carl-Daniel Hailfinger 2008-11-27 20:04 ` Stanislav 2008-11-27 21:04 ` Carl-Daniel Hailfinger 2008-11-29 19:42 ` Stanislav 2008-12-04 10:04 ` Carl-Daniel Hailfinger
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).