SeaBIOS
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
August 2011
- 24 participants
- 33 discussions
Hi, Vasilis Liaskovitis
When I test it, the guest OS become non-available, but it does not crash.
It also cause the disk fault.
It is hard to dig the reason. Or I missed something?
Thank,
Lai
dmesg:
Hotplug Mem Device
init_memory_mapping: 0000000100000000-0000000108000000
0100000000 - 0108000000 page 2M
Built 1 zonelists in Node order, mobility grouping on. Total pages: 274232
Policy zone: Normal
nommu_map_sg: overflow 107861000+4096 of device mask ffffffff
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1.00: failed command: WRITE DMA
ata1.00: cmd ca/00:08:28:08:44/00:00:00:00:00/e0 tag 0 dma 4096 out
res 50/01:00:40:11:84/00:00:00:00:00/e0 Emask 0x40 (internal error)
ata1.00: status: { DRDY }
ata1.00: configured for MWDMA2
ata1: EH complete
nommu_map_sg: overflow 107861000+4096 of device mask ffffffff
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1.00: failed command: WRITE DMA
ata1.00: cmd ca/00:08:28:08:44/00:00:00:00:00/e0 tag 0 dma 4096 out
res 50/01:00:00:00:00/00:00:00:00:00/a0 Emask 0x40 (internal error)
ata1.00: status: { DRDY }
ata1.00: configured for MWDMA2
ata1: EH complete
nommu_map_sg: overflow 107861000+4096 of device mask ffffffff
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1.00: failed command: WRITE DMA
ata1.00: cmd ca/00:08:28:08:44/00:00:00:00:00/e0 tag 0 dma 4096 out
res 50/01:00:00:00:00/00:00:00:00:00/a0 Emask 0x40 (internal error)
ata1.00: status: { DRDY }
ata1.00: configured for MWDMA2
ata1: EH complete
nommu_map_sg: overflow 107861000+4096 of device mask ffffffff
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1.00: failed command: WRITE DMA
ata1.00: cmd ca/00:08:28:08:44/00:00:00:00:00/e0 tag 0 dma 4096 out
res 50/01:00:00:00:00/00:00:00:00:00/a0 Emask 0x40 (internal error)
ata1.00: status: { DRDY }
ata1.00: configured for MWDMA2
ata1: EH complete
......
On 08/11/2011 10:39 PM, Vasilis Liaskovitis wrote:
> Hi,
>
> I am testing a set of experimental patches for memory-hotplug on x86_64 host /
> guest combinations. I have implemented this in a similar way to cpu-hotplug.
>
> A dynamic SSDT table with all memory devices is created at boot time. This
> table calls static methods from the DSDT. A byte array indicates which memory
> device is online or not. This array is kept in sync with a qemu-kvm bitmap array
> through ioport 0xaf20. Qemu-kvm updates this table on a "mem_set" command and
> an ACPI event is triggered.
>
> Memory devices are 128MB in size (to match /sys/devices/memory/block_size_bytes
> in x86_64). They are constructed dynamically in src/ssdt-mem.asl , similarly to
> hotpluggable-CPUs. The _CRS memstart-memend attribute for each memory device is
> defined accordingly, skipping the hole at 0xe0000000 - 0x100000000.
> Hotpluggable memory is always located above 4GB.
>
> Qemu-kvm sets the upper bound of hotpluggable memory with "maxmem = [totalmemory in
> MB]" on the command line. Maxmem is an argument for "-m" similar to maxcpus for smp.
> E.g. "-m 1024,maxmem=2048" on the qemu command line will create memory devices
> for 2GB of RAM, enabling only 1GB initially.
>
> Qemu_monitor triggers a memory hotplug with:
> (qemu) mem_set [memory range in MBs] online
>
> Testing:
> - Linux guests boot fine and memory hotplug works so far.
>
> - Windows2008 guest complains about "non ACPI compliant BIOS". Specifically:
> STOP 0x000000A5 (0x0000000D, Parameter2, Parameter3, Parameter4)
> "This error generally occurs if either the _HID or _ADR object is missing. "
> according to a microsoft support site. I do specify _HID in the memory device
> definition. I have tried to specify _ADR to be equal to the memstart parameter
> in each memory device, but the problem remains. Any advice on the _ADR object?
> Perhaps the memory layout I describe in the memory devices is not compatible
> with Windows memory usage?
>
> Other comments on the patches are welcome.
>
> The 3 patches are below in order (on top of today's master for both qemu-kvm and
> SeaBIOS):
>
> - qemu-kvm patch
> - seabios src/ssdt-mem.asl
> - seabios patch on existing code
>
> thanks,
>
> - Vasilis
>
>
> cpu-all.h | 1 +
> hmp-commands.hx | 14 ++++++++
> hw/acpi_piix4.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
> hw/fw_cfg.c | 13 +++++++
> hw/fw_cfg.h | 2 +
> hw/loader.c | 2 +-
> hw/pc.c | 1 +
> hw/pc.h | 4 ++
> hw/pc_piix.c | 4 ++-
> monitor.c | 22 ++++++++++++
> sysemu.h | 1 +
> vl.c | 41 ++++++++++++++++++++++-
> 12 files changed, 201 insertions(+), 5 deletions(-)
>
> diff --git a/cpu-all.h b/cpu-all.h
> index fa0205c..21aa4ea 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -470,6 +470,7 @@ target_phys_addr_t cpu_get_phys_page_debug(CPUState *env, target_ulong addr);
>
> extern int phys_ram_fd;
> extern ram_addr_t ram_size;
> +extern ram_addr_t maxram_size;
>
> /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */
> #define RAM_PREALLOC_MASK (1 << 0)
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index ed5c9b9..5a95c4e 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1229,6 +1229,20 @@ Set CPU @var{cpu} online or offline.
> ETEXI
>
> {
> + .name = "mem_set",
> + .args_type = "mem:i,state:s",
> + .params = "mem [online|offline]",
> + .help = "change memory device state",
> + .mhandler.cmd = do_mem_set_nr,
> + },
> +
> +STEXI
> +@item mem_set @var{mem} [online|offline]
> +Set MEM @var{mem} online or offline.
> +
> +ETEXI
> +
> + {
> .name = "set_password",
> .args_type = "protocol:s,password:s,connected:s?",
> .params = "protocol password action-if-connected",
> diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
> index 44eb8ae..7ca33ab 100644
> --- a/hw/acpi_piix4.c
> +++ b/hw/acpi_piix4.c
> @@ -24,6 +24,8 @@
> #include "sysemu.h"
> #include "range.h"
> #include "ioport.h"
> +#include "fw_cfg.h"
> +#include "cpu-all.h"
>
> //#define DEBUG
>
> @@ -37,16 +39,19 @@
>
> #define GPE_BASE 0xafe0
> #define PROC_BASE 0xaf00
> +#define MEM_BASE 0xaf20
> #define GPE_LEN 4
> #define PCI_BASE 0xae00
> #define PCI_EJ_BASE 0xae08
> #define PCI_RMV_BASE 0xae0c
>
> +#define PIIX4_MEM_HOTPLUG_STATUS 8
> #define PIIX4_CPU_HOTPLUG_STATUS 4
> #define PIIX4_PCI_HOTPLUG_STATUS 2
>
> struct gpe_regs {
> uint8_t cpus_sts[32];
> + uint8_t mems_sts[32];
> };
>
> struct pci_status {
> @@ -94,7 +99,8 @@ static void pm_update_sci(PIIX4PMState *s)
> ACPI_BITMASK_POWER_BUTTON_ENABLE |
> ACPI_BITMASK_GLOBAL_LOCK_ENABLE |
> ACPI_BITMASK_TIMER_ENABLE)) != 0) ||
> - (((s->gpe.sts[0] & s->gpe.en[0]) & PIIX4_PCI_HOTPLUG_STATUS) != 0);
> + (((s->gpe.sts[0] & s->gpe.en[0]) &
> + (PIIX4_PCI_HOTPLUG_STATUS | PIIX4_MEM_HOTPLUG_STATUS | PIIX4_CPU_HOTPLUG_STATUS) ) != 0);
>
> qemu_set_irq(s->irq, sci_level);
> /* schedule a timer interruption if needed */
> @@ -447,6 +453,9 @@ static uint32_t gpe_readb(void *opaque, uint32_t addr)
> case PROC_BASE ... PROC_BASE+31:
> val = g->cpus_sts[addr - PROC_BASE];
> break;
> + case MEM_BASE ... MEM_BASE+31:
> + val = g->mems_sts[addr - MEM_BASE];
> + break;
> default:
> val = acpi_gpe_ioport_readb(&s->gpe, addr);
> }
> @@ -538,6 +547,7 @@ static void pcirmv_write(void *opaque, uint32_t addr, uint32_t val)
> }
>
> extern const char *global_cpu_model;
> +extern FWCfgState *fw_cfg;
>
> static int piix4_device_hotplug(DeviceState *qdev, PCIDevice *dev,
> PCIHotplugState state);
> @@ -545,13 +555,19 @@ static int piix4_device_hotplug(DeviceState *qdev, PCIDevice *dev,
> static void piix4_acpi_system_hot_add_init(PCIBus *bus, PIIX4PMState *s)
> {
> struct pci_status *pci0_status = &s->pci0_status;
> - int i = 0, cpus = smp_cpus;
> + int i = 0, cpus = smp_cpus, memdev;
>
> while (cpus > 0) {
> s->gpe_cpu.cpus_sts[i++] = (cpus < 8) ? (1 << cpus) - 1 : 0xff;
> cpus -= 8;
> }
>
> + i = 0;
> + memdev = ram_size / LINUX_MIN_BLOCK_SIZE;
> + while (memdev > 0) {
> + s->gpe_cpu.mems_sts[i++] = (memdev < 8) ? (1 << memdev) - 1 : 0xff;
> + memdev -= 8;
> + }
> register_ioport_write(GPE_BASE, GPE_LEN, 1, gpe_writeb, s);
> register_ioport_read(GPE_BASE, GPE_LEN, 1, gpe_readb, s);
> acpi_gpe_blk(&s->gpe, GPE_BASE);
> @@ -559,6 +575,9 @@ static void piix4_acpi_system_hot_add_init(PCIBus *bus, PIIX4PMState *s)
> register_ioport_write(PROC_BASE, 32, 1, gpe_writeb, s);
> register_ioport_read(PROC_BASE, 32, 1, gpe_readb, s);
>
> + register_ioport_write(MEM_BASE, 32, 1, gpe_writeb, s);
> + register_ioport_read(MEM_BASE, 32, 1, gpe_readb, s);
> +
> register_ioport_write(PCI_BASE, 8, 4, pcihotplug_write, pci0_status);
> register_ioport_read(PCI_BASE, 8, 4, pcihotplug_read, pci0_status);
>
> @@ -571,6 +590,20 @@ static void piix4_acpi_system_hot_add_init(PCIBus *bus, PIIX4PMState *s)
> pci_bus_hotplug(bus, piix4_device_hotplug, &s->dev.qdev);
> }
>
> +static void enable_mem_device(PIIX4PMState *s, int memdevice)
> +{
> + struct gpe_regs *g = &s->gpe_cpu;
> + s->gpe.sts[0] |= PIIX4_MEM_HOTPLUG_STATUS;
> + g->mems_sts[memdevice/8] |= (1 << (memdevice%8));
> +}
> +
> +static void disable_mem_device(PIIX4PMState *s, int memdevice)
> +{
> + struct gpe_regs *g = &s->gpe_cpu;
> + s->gpe.sts[0] |= PIIX4_MEM_HOTPLUG_STATUS;
> + g->mems_sts[memdevice/8] &= ~(1 << (memdevice%8));
> +}
> +
> #if defined(TARGET_I386)
> static void enable_processor(PIIX4PMState *s, int cpu)
> {
> @@ -611,6 +644,70 @@ void qemu_system_cpu_hot_add(int cpu, int state)
>
> pm_update_sci(s);
> }
> +
> +void qemu_system_mem_hot_add(int64_t value, int state)
> +{
> + PIIX4PMState *s = global_piix4_pm_state;
> + static unsigned int hotmemcount = 1;
> + char buf[32];
> + int64_t memdev, tmpvalue;
> +
> + /* Expects memory range in MBs currently. */
> + value = 1024 * 1024 * value;
> +
> + if (value % LINUX_MIN_BLOCK_SIZE) {
> + fprintf(stderr, "memory hotadd range must be a multiple of %lu bytes\n",
> + LINUX_MIN_BLOCK_SIZE);
> + return;
> + }
> +
> + if (value + ram_size > maxram_size) {
> + fprintf(stderr, "failure: memory hotadd exceeds total available memory range\n");
> + return;
> + }
> +
> + if (state) {
> + ram_addr_t size = value;
> + ram_addr_t ram_addr;
> +
> + target_phys_addr_t start_addr;
> + start_addr = global_ram_hotplug_offset;
> +
> + sprintf(buf, "pc.extraram%u", hotmemcount);
> + ram_addr = qemu_ram_alloc(NULL, buf, size);
> + cpu_register_physical_memory(start_addr,
> + size, ram_addr);
> + e820_add_entry(start_addr, size, E820_RAM);
> +
> + tmpvalue = value;
> + memdev = ram_size / LINUX_MIN_BLOCK_SIZE;
> + while (tmpvalue) {
> + enable_mem_device(s, memdev);
> + tmpvalue -= LINUX_MIN_BLOCK_SIZE;
> + memdev++;
> + }
> + ram_size += value;
> +
> + fw_cfg_update_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
> + global_ram_hotplug_offset += value;
> + hotmemcount++;
> + }
> +
> + else {
> + tmpvalue = value;
> + memdev = ram_size / LINUX_MIN_BLOCK_SIZE - 1;
> + while (tmpvalue) {
> + disable_mem_device(s, memdev);
> + tmpvalue -= LINUX_MIN_BLOCK_SIZE;
> + memdev--;
> + }
> + ram_size -= value;
> + fw_cfg_update_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
> +
> + }
> +
> + pm_update_sci(s);
> +}
> #endif
>
> static void enable_device(PIIX4PMState *s, int slot)
> diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c
> index e4847b7..f9a2b3d 100644
> --- a/hw/fw_cfg.c
> +++ b/hw/fw_cfg.c
> @@ -408,6 +408,19 @@ int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
> return fw_cfg_add_bytes(s, key, (uint8_t *)copy, sizeof(value));
> }
>
> +int fw_cfg_update_i64(FWCfgState *s, uint64_t key, uint64_t data)
> +{
> + int arch = !!(key & FW_CFG_ARCH_LOCAL);
> + uint64_t *p;
> +
> + key &= FW_CFG_ENTRY_MASK;
> +
> + p = (uint64_t*)s->entries[arch][key].data;
> + *p = cpu_to_le64(data);
> +
> + return 1;
> +}
> +
> int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
> void *callback_opaque, uint8_t *data, size_t len)
> {
> diff --git a/hw/fw_cfg.h b/hw/fw_cfg.h
> index 856bf91..83c2b34 100644
> --- a/hw/fw_cfg.h
> +++ b/hw/fw_cfg.h
> @@ -27,6 +27,7 @@
> #define FW_CFG_SETUP_SIZE 0x17
> #define FW_CFG_SETUP_DATA 0x18
> #define FW_CFG_FILE_DIR 0x19
> +#define FW_CFG_MAXRAM_SIZE 0x1A
>
> #define FW_CFG_FILE_FIRST 0x20
> #define FW_CFG_FILE_SLOTS 0x10
> @@ -58,6 +59,7 @@ int fw_cfg_add_bytes(FWCfgState *s, uint16_t key, uint8_t *data, uint32_t len);
> int fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value);
> int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
> int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
> +int fw_cfg_update_i64(FWCfgState *s, uint64_t key, uint64_t data);
> int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
> void *callback_opaque, uint8_t *data, size_t len);
> int fw_cfg_add_file(FWCfgState *s, const char *filename, uint8_t *data,
> diff --git a/hw/loader.c b/hw/loader.c
> index 35d792e..2a017d1 100644
> --- a/hw/loader.c
> +++ b/hw/loader.c
> @@ -536,7 +536,7 @@ struct Rom {
> QTAILQ_ENTRY(Rom) next;
> };
>
> -static FWCfgState *fw_cfg;
> +FWCfgState *fw_cfg;
> static QTAILQ_HEAD(, Rom) roms = QTAILQ_HEAD_INITIALIZER(roms);
>
> static void rom_insert(Rom *rom)
> diff --git a/hw/pc.c b/hw/pc.c
> index d1dfc83..c6595e1 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -603,6 +603,7 @@ static void *bochs_bios_init(void)
>
> fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1);
> fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
> + fw_cfg_add_i64(fw_cfg, FW_CFG_MAXRAM_SIZE, (uint64_t)maxram_size);
> fw_cfg_add_bytes(fw_cfg, FW_CFG_ACPI_TABLES, (uint8_t *)acpi_tables,
> acpi_tables_len);
> fw_cfg_add_i32(fw_cfg, FW_CFG_IRQ0_OVERRIDE, kvm_allows_irq0_override());
> diff --git a/hw/pc.h b/hw/pc.h
> index c8d4280..a00aca6 100644
> --- a/hw/pc.h
> +++ b/hw/pc.h
> @@ -9,6 +9,10 @@
> #include "net.h"
> #include "memory.h"
>
> +#define LINUX_MIN_BLOCK_SIZE 0x8000000LU
> +#define MEM_HOTPLUG_OFFSET 0x100000000LLU
> +
> +extern ram_addr_t global_ram_hotplug_offset;
> /* PC-style peripherals (also used by other machines). */
>
> /* serial.c */
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index 3d5f6e7..063b462 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -46,7 +46,7 @@
> #endif
>
> qemu_irq *ioapic_irq_hack;
> -
> +ram_addr_t global_ram_hotplug_offset;
> #define MAX_IDE_BUS 2
>
> static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
> @@ -109,9 +109,11 @@ static void pc_init1(MemoryRegion *system_memory,
> if (ram_size >= 0xe0000000 ) {
> above_4g_mem_size = ram_size - 0xe0000000;
> below_4g_mem_size = 0xe0000000;
> + global_ram_hotplug_offset = ram_size + 0x20000000LLU;
> } else {
> above_4g_mem_size = 0;
> below_4g_mem_size = ram_size;
> + global_ram_hotplug_offset = MEM_HOTPLUG_OFFSET;
> }
>
> /* allocate ram and load rom/bios */
> diff --git a/monitor.c b/monitor.c
> index caaa05c..fdf1dc9 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -984,6 +984,28 @@ static void do_cpu_set_nr(Monitor *mon, const QDict *qdict)
> #endif
> }
>
> +static void do_mem_set_nr(Monitor *mon, const QDict *qdict)
> +{
> + int state;
> + int64_t value;
> + const char *status;
> +
> + status = qdict_get_str(qdict, "state");
> + value = qdict_get_int(qdict, "mem");
> +
> + if (!strcmp(status, "online"))
> + state = 1;
> + else if (!strcmp(status, "offline"))
> + state = 0;
> + else {
> + monitor_printf(mon, "invalid status: %s\n", status);
> + return;
> + }
> +#if defined(TARGET_I386) || defined(TARGET_X86_64)
> + qemu_system_mem_hot_add(value, state);
> +#endif
> +}
> +
> static void do_info_jit(Monitor *mon)
> {
> dump_exec_info((FILE *)mon, monitor_fprintf);
> diff --git a/sysemu.h b/sysemu.h
> index fc2bf36..c2bb3cd 100644
> --- a/sysemu.h
> +++ b/sysemu.h
> @@ -146,6 +146,7 @@ extern unsigned int nb_prom_envs;
>
> /* acpi */
> void qemu_system_cpu_hot_add(int cpu, int state);
> +void qemu_system_mem_hot_add(int64_t value, int state);
>
> /* pci-hotplug */
> void pci_device_hot_add(Monitor *mon, const QDict *qdict);
> diff --git a/vl.c b/vl.c
> index f6a77f7..474c935 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -178,6 +178,7 @@ DisplayType display_type = DT_DEFAULT;
> int display_remote = 0;
> const char* keyboard_layout = NULL;
> ram_addr_t ram_size;
> +ram_addr_t maxram_size;
> const char *mem_path = NULL;
> #ifdef MAP_POPULATE
> int mem_prealloc = 0; /* force preallocation of physical target memory */
> @@ -2127,6 +2128,7 @@ int main(int argc, char **argv, char **envp)
> cpu_model = NULL;
> initrd_filename = NULL;
> ram_size = 0;
> + maxram_size = 0;
> snapshot = 0;
> kernel_filename = NULL;
> kernel_cmdline = "";
> @@ -2455,8 +2457,10 @@ int main(int argc, char **argv, char **envp)
> break;
> case QEMU_OPTION_m: {
> int64_t value;
> + char *endptr;
> + char option[128];
>
> - value = strtosz(optarg, NULL);
> + value = strtosz(optarg, &endptr);
> if (value < 0) {
> fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
> exit(1);
> @@ -2467,6 +2471,41 @@ int main(int argc, char **argv, char **envp)
> exit(1);
> }
> ram_size = value;
> +
> + if (endptr != optarg) {
> + if (*endptr == ',') {
> + endptr++;
> + }
> + }
> +
> + if (get_param_value(option, 128, "maxmem", endptr) != 0) {
> + value = strtosz(option, NULL);
> +
> + if (value < 0) {
> + fprintf(stderr, "qemu: invalid ram size: %s\n", endptr);
> + exit(1);
> + }
> +
> + /* On 32-bit hosts, QEMU is limited by virtual address space */
> + if (value > (2047 << 20) && HOST_LONG_BITS == 32) {
> + fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
> + exit(1);
> + }
> + if (value != (uint64_t)(ram_addr_t)value) {
> + fprintf(stderr, "qemu: ram size too large\n");
> + exit(1);
> + }
> + if (value < ram_size) {
> + fprintf(stderr, "qemu: max ram size cannot be less than initial ram size\n");
> + exit(1);
> + }
> +
> + maxram_size = value;
> +
> + }
> + else
> + maxram_size = ram_size;
> + fprintf(stderr, "ramsize = %ld maxramsize = %ld\n", ram_size, maxram_size);
> break;
> }
> case QEMU_OPTION_mempath:
>
>
>
>
>
> src/ssdt-mem.dsl | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 65 insertions(+), 0 deletions(-)
>
> diff --git a/src/ssdt-mem.dsl b/src/ssdt-mem.dsl
> new file mode 100644
> index 0000000..60abb05
> --- /dev/null
> +++ b/src/ssdt-mem.dsl
> @@ -0,0 +1,65 @@
> +/* This file is the basis for the ssdt_mem[] variable in src/acpi.c.
> + * It is similar in design to the ssdt_proc variable.
> + * It defines the contents of the per-cpu Processor() object. At
> + * runtime, a dynamically generated SSDT will contain one copy of this
> + * AML snippet for every possible memory device in the system. The
> + * objects will * be placed in the \_SB_ namespace.
> + *
> + * To generate a new ssdt_memc[], run the commands:
> + * cpp -P src/ssdt-mem.dsl > out/ssdt-mem.dsl.i
> + * iasl -ta -p out/ssdt-mem out/ssdt-mem.dsl.i
> + * tail -c +37 < out/ssdt-mem.aml | hexdump -e '" " 8/1 "0x%02x," "\n"'
> + * and then cut-and-paste the output into the src/acpi.c ssdt_mem[]
> + * array.
> + *
> + * In addition to the aml code generated from this file, the
> + * src/acpi.c file creates a MEMNTFY method with an entry for each memdevice:
> + * Method(MTFY, 2) {
> + * If (LEqual(Arg0, 0x00)) { Notify(MP00, Arg1) }
> + * If (LEqual(Arg0, 0x01)) { Notify(MP01, Arg1) }
> + * ...
> + * }
> + * and a MEON array with the list of active and inactive memory devices:
> + * Name(MEON, Package() { One, One, ..., Zero, Zero, ... })
> + */
> +DefinitionBlock ("ssdt-mem.aml", "SSDT", 0x02, "BXPC", "CSSDT", 0x1)
> +/* v------------------ DO NOT EDIT ------------------v */
> +{
> + Device(MPAA) {
> + Name(ID, 0xAA)
> +/* ^------------------ DO NOT EDIT ------------------^
> + *
> + * The src/acpi.c code requires the above layout so that it can update
> + * MPAA and 0xAA with the appropriate MEMDEVICE id (see
> + * SD_OFFSET_MEMHEX/MEMID1/MEMID2). Don't change the above without
> + * also updating the C code.
> + */
> + Name(_HID, EISAID("PNP0C80"))
> +
> + External(CMST, MethodObj)
> + External(MPEJ, MethodObj)
> +
> + Name(_CRS, ResourceTemplate() {
> + QwordMemory(
> + ResourceConsumer,
> + ,
> + MinFixed,
> + MaxFixed,
> + Cacheable,
> + ReadWrite,
> + 0x0,
> + 0xDEADBEEF,
> + 0xE6ADBEEE,
> + 0x00000000,
> + 0x08000000,
> + )
> + })
> + Method (_STA, 0) {
> + Return(CMST(ID))
> + }
> + Method (_EJ0, 1, NotSerialized) {
> + MPEJ(ID, Arg0)
> + }
> + }
> +}
> +
>
>
>
>
>
> src/acpi-dsdt.dsl | 55 ++++-
> src/acpi-dsdt.hex | 701 +++++++++++++++++++++++++++--------------------------
> src/acpi.c | 125 ++++++++++
> src/biosvar.h | 5 +
> src/paravirt.c | 22 ++
> src/paravirt.h | 4 +
> 6 files changed, 571 insertions(+), 341 deletions(-)
>
> diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl
> index 08412e2..e9b250d 100644
> --- a/src/acpi-dsdt.dsl
> +++ b/src/acpi-dsdt.dsl
> @@ -768,6 +768,9 @@ DefinitionBlock (
> External(NTFY, MethodObj)
> External(CPON, PkgObj)
>
> + External(MTFY, MethodObj)
> + External(MEON, PkgObj)
> +
> /* Methods called by run-time generated SSDT Processor objects */
> Method (CPMA, 1, NotSerialized) {
> // _MAT method - create an madt apic buffer
> @@ -832,6 +835,56 @@ DefinitionBlock (
> }
> Return(One)
> }
> +
> + Method (CMST, 1, NotSerialized) {
> + // _STA method - return ON status of memdevice
> + // Local0 = MEON flag for this cpu
> + Store(DerefOf(Index(MEON, Arg0)), Local0)
> + If (Local0) { Return(0xF) } Else { Return(0x0) }
> + }
> +
> + /* Memory hotplug notify method */
> + OperationRegion(MEST, SystemIO, 0xaf20, 32)
> + Field (MEST, ByteAcc, NoLock, Preserve)
> + {
> + MES, 256
> + }
> +
> + Method(MESC, 0) {
> + // Local5 = active memdevice bitmap
> + Store (MES, Local5)
> + // Local2 = last read byte from bitmap
> + Store (Zero, Local2)
> + // Local0 = cpuid iterator
> + Store (Zero, Local0)
> + While (LLess(Local0, SizeOf(MEON))) {
> + // Local1 = MEON flag for this cpu
> + Store(DerefOf(Index(MEON, Local0)), Local1)
> + If (And(Local0, 0x07)) {
> + // Shift down previously read bitmap byte
> + ShiftRight(Local2, 1, Local2)
> + } Else {
> + // Read next byte from memdevice bitmap
> + Store(DerefOf(Index(Local5, ShiftRight(Local0, 3))), Local2)
> + }
> + // Local3 = active state for this cpu
> + Store(And(Local2, 1), Local3)
> +
> + If (LNotEqual(Local1, Local3)) {
> + // State change - update MEON with new state
> + Store(Local3, Index(MEON, Local0))
> + // Do MEM notify
> + If (LEqual(Local3, 1)) {
> + MTFY(Local0, 1)
> + } Else {
> + MTFY(Local0, 3)
> + }
> + }
> + Increment(Local0)
> + }
> + Return(One)
> + }
> +
> }
>
> Scope (\_GPE)
> @@ -891,7 +944,7 @@ DefinitionBlock (
> Return(\_SB.PRSC())
> }
> Method(_L03) {
> - Return(0x01)
> + Return(\_SB.MESC())
> }
> Method(_L04) {
> Return(0x01)
> diff --git a/src/acpi-dsdt.hex b/src/acpi-dsdt.hex
> index d0a09f3..d71aca1 100644
> --- a/src/acpi-dsdt.hex
> +++ b/src/acpi-dsdt.hex
> @@ -1,20 +1,20 @@
> /*
> *
> * Intel ACPI Component Architecture
> - * ASL Optimizing Compiler version 20100528 [Jul 1 2010]
> + * ASL Optimizing Compiler version 20100528 [Jul 2 2010]
> * Copyright (c) 2000 - 2010 Intel Corporation
> * Supports ACPI Specification Revision 4.0a
> *
> - * Compilation of "out/acpi-dsdt.dsl.i" - Tue May 24 22:35:17 2011
> + * Compilation of "out/acpi-dsdt.dsl.i" - Thu Aug 11 14:20:43 2011
> *
> * C source code output
> - * AML code block contains 0x2589 bytes
> + * AML code block contains 0x2634 bytes
> *
> */
> unsigned char AmlCode[] =
> {
> - 0x44,0x53,0x44,0x54,0x89,0x25,0x00,0x00, /* 00000000 "DSDT.%.." */
> - 0x01,0x13,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 "..BXPC.." */
> + 0x44,0x53,0x44,0x54,0x34,0x26,0x00,0x00, /* 00000000 "DSDT4&.." */
> + 0x01,0x45,0x42,0x58,0x50,0x43,0x00,0x00, /* 00000008 ".EBXPC.." */
> 0x42,0x58,0x44,0x53,0x44,0x54,0x00,0x00, /* 00000010 "BXDSDT.." */
> 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> 0x28,0x05,0x10,0x20,0x10,0x49,0x04,0x5C, /* 00000020 "(.. .I.\" */
> @@ -850,7 +850,7 @@ unsigned char AmlCode[] =
> 0x01,0x01,0x00,0x00,0x08,0x5F,0x53,0x34, /* 00001A10 "....._S4" */
> 0x5F,0x12,0x06,0x04,0x00,0x00,0x00,0x00, /* 00001A18 "_......." */
> 0x08,0x5F,0x53,0x35,0x5F,0x12,0x06,0x04, /* 00001A20 "._S5_..." */
> - 0x00,0x00,0x00,0x00,0x10,0x49,0x0E,0x5F, /* 00001A28 ".....I._" */
> + 0x00,0x00,0x00,0x00,0x10,0x4B,0x18,0x5F, /* 00001A28 ".....K._" */
> 0x53,0x42,0x5F,0x14,0x35,0x43,0x50,0x4D, /* 00001A30 "SB_.5CPM" */
> 0x41,0x01,0x70,0x83,0x88,0x43,0x50,0x4F, /* 00001A38 "A.p..CPO" */
> 0x4E,0x68,0x00,0x60,0x70,0x11,0x0B,0x0A, /* 00001A40 "Nh.`p..." */
> @@ -879,340 +879,361 @@ unsigned char AmlCode[] =
> 0x43,0x50,0x4F,0x4E,0x60,0x00,0xA0,0x0A, /* 00001AF8 "CPON`..." */
> 0x93,0x63,0x01,0x4E,0x54,0x46,0x59,0x60, /* 00001B00 ".c.NTFY`" */
> 0x01,0xA1,0x08,0x4E,0x54,0x46,0x59,0x60, /* 00001B08 "...NTFY`" */
> - 0x0A,0x03,0x75,0x60,0xA4,0x01,0x10,0x42, /* 00001B10 "..u`...B" */
> - 0xA7,0x5F,0x47,0x50,0x45,0x08,0x5F,0x48, /* 00001B18 "._GPE._H" */
> - 0x49,0x44,0x0D,0x41,0x43,0x50,0x49,0x30, /* 00001B20 "ID.ACPI0" */
> - 0x30,0x30,0x36,0x00,0x14,0x08,0x5F,0x4C, /* 00001B28 "006..._L" */
> - 0x30,0x30,0x00,0xA4,0x01,0x14,0x4C,0x9C, /* 00001B30 "00....L." */
> - 0x5F,0x4C,0x30,0x31,0x00,0xA0,0x25,0x7B, /* 00001B38 "_L01..%{" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001B40 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0A, /* 00001B48 "CI0PCIU." */
> - 0x02,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001B50 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00001B58 "B_PCI0S1" */
> - 0x5F,0x5F,0x01,0xA0,0x26,0x7B,0x5C,0x2F, /* 00001B60 "__..&{\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001B68 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x44,0x0A,0x02,0x00, /* 00001B70 "0PCID..." */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001B78 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x31,0x5F,0x5F, /* 00001B80 "PCI0S1__" */
> - 0x0A,0x03,0xA0,0x25,0x7B,0x5C,0x2F,0x03, /* 00001B88 "...%{\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001B90 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x55,0x0A,0x04,0x00,0x86, /* 00001B98 "PCIU...." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001BA0 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x32,0x5F,0x5F,0x01, /* 00001BA8 "CI0S2__." */
> - 0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001BB0 ".&{\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001BB8 "B_PCI0PC" */
> - 0x49,0x44,0x0A,0x04,0x00,0x86,0x5C,0x2F, /* 00001BC0 "ID....\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001BC8 "._SB_PCI" */
> - 0x30,0x53,0x32,0x5F,0x5F,0x0A,0x03,0xA0, /* 00001BD0 "0S2__..." */
> - 0x25,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001BD8 "%{\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001BE0 "_PCI0PCI" */
> - 0x55,0x0A,0x08,0x00,0x86,0x5C,0x2F,0x03, /* 00001BE8 "U....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001BF0 "_SB_PCI0" */
> - 0x53,0x33,0x5F,0x5F,0x01,0xA0,0x26,0x7B, /* 00001BF8 "S3__..&{" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001C00 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0A, /* 00001C08 "CI0PCID." */
> - 0x08,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001C10 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x33, /* 00001C18 "B_PCI0S3" */
> - 0x5F,0x5F,0x0A,0x03,0xA0,0x25,0x7B,0x5C, /* 00001C20 "__...%{\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001C28 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x55,0x0A,0x10, /* 00001C30 "I0PCIU.." */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001C38 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x34,0x5F, /* 00001C40 "_PCI0S4_" */
> - 0x5F,0x01,0xA0,0x26,0x7B,0x5C,0x2F,0x03, /* 00001C48 "_..&{\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001C50 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x44,0x0A,0x10,0x00,0x86, /* 00001C58 "PCID...." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001C60 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x34,0x5F,0x5F,0x0A, /* 00001C68 "CI0S4__." */
> - 0x03,0xA0,0x25,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001C70 "..%{\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001C78 "SB_PCI0P" */
> - 0x43,0x49,0x55,0x0A,0x20,0x00,0x86,0x5C, /* 00001C80 "CIU. ..\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001C88 "/._SB_PC" */
> - 0x49,0x30,0x53,0x35,0x5F,0x5F,0x01,0xA0, /* 00001C90 "I0S5__.." */
> - 0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001C98 "&{\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001CA0 "_PCI0PCI" */
> - 0x44,0x0A,0x20,0x00,0x86,0x5C,0x2F,0x03, /* 00001CA8 "D. ..\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001CB0 "_SB_PCI0" */
> - 0x53,0x35,0x5F,0x5F,0x0A,0x03,0xA0,0x25, /* 00001CB8 "S5__...%" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001CC0 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00001CC8 "PCI0PCIU" */
> - 0x0A,0x40,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001CD0 ".@..\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001CD8 "SB_PCI0S" */
> - 0x36,0x5F,0x5F,0x01,0xA0,0x26,0x7B,0x5C, /* 00001CE0 "6__..&{\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001CE8 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x44,0x0A,0x40, /* 00001CF0 "I0PCID.@" */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001CF8 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x36,0x5F, /* 00001D00 "_PCI0S6_" */
> - 0x5F,0x0A,0x03,0xA0,0x25,0x7B,0x5C,0x2F, /* 00001D08 "_...%{\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001D10 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x55,0x0A,0x80,0x00, /* 00001D18 "0PCIU..." */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001D20 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x37,0x5F,0x5F, /* 00001D28 "PCI0S7__" */
> - 0x01,0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001D30 "..&{\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001D38 "SB_PCI0P" */
> - 0x43,0x49,0x44,0x0A,0x80,0x00,0x86,0x5C, /* 00001D40 "CID....\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001D48 "/._SB_PC" */
> - 0x49,0x30,0x53,0x37,0x5F,0x5F,0x0A,0x03, /* 00001D50 "I0S7__.." */
> - 0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001D58 ".&{\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001D60 "B_PCI0PC" */
> - 0x49,0x55,0x0B,0x00,0x01,0x00,0x86,0x5C, /* 00001D68 "IU.....\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001D70 "/._SB_PC" */
> - 0x49,0x30,0x53,0x38,0x5F,0x5F,0x01,0xA0, /* 00001D78 "I0S8__.." */
> - 0x27,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001D80 "'{\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001D88 "_PCI0PCI" */
> - 0x44,0x0B,0x00,0x01,0x00,0x86,0x5C,0x2F, /* 00001D90 "D.....\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001D98 "._SB_PCI" */
> - 0x30,0x53,0x38,0x5F,0x5F,0x0A,0x03,0xA0, /* 00001DA0 "0S8__..." */
> - 0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001DA8 "&{\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001DB0 "_PCI0PCI" */
> - 0x55,0x0B,0x00,0x02,0x00,0x86,0x5C,0x2F, /* 00001DB8 "U.....\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001DC0 "._SB_PCI" */
> - 0x30,0x53,0x39,0x5F,0x5F,0x01,0xA0,0x27, /* 00001DC8 "0S9__..'" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001DD0 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 00001DD8 "PCI0PCID" */
> - 0x0B,0x00,0x02,0x00,0x86,0x5C,0x2F,0x03, /* 00001DE0 ".....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001DE8 "_SB_PCI0" */
> - 0x53,0x39,0x5F,0x5F,0x0A,0x03,0xA0,0x26, /* 00001DF0 "S9__...&" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001DF8 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00001E00 "PCI0PCIU" */
> - 0x0B,0x00,0x04,0x00,0x86,0x5C,0x2F,0x03, /* 00001E08 ".....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001E10 "_SB_PCI0" */
> - 0x53,0x31,0x30,0x5F,0x01,0xA0,0x27,0x7B, /* 00001E18 "S10_..'{" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001E20 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0B, /* 00001E28 "CI0PCID." */
> - 0x00,0x04,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001E30 "....\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001E38 "SB_PCI0S" */
> - 0x31,0x30,0x5F,0x0A,0x03,0xA0,0x26,0x7B, /* 00001E40 "10_...&{" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001E48 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0B, /* 00001E50 "CI0PCIU." */
> - 0x00,0x08,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001E58 "....\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001E60 "SB_PCI0S" */
> - 0x31,0x31,0x5F,0x01,0xA0,0x27,0x7B,0x5C, /* 00001E68 "11_..'{\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001E70 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x44,0x0B,0x00, /* 00001E78 "I0PCID.." */
> - 0x08,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001E80 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00001E88 "B_PCI0S1" */
> - 0x31,0x5F,0x0A,0x03,0xA0,0x26,0x7B,0x5C, /* 00001E90 "1_...&{\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001E98 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x55,0x0B,0x00, /* 00001EA0 "I0PCIU.." */
> - 0x10,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001EA8 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00001EB0 "B_PCI0S1" */
> - 0x32,0x5F,0x01,0xA0,0x27,0x7B,0x5C,0x2F, /* 00001EB8 "2_..'{\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001EC0 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x44,0x0B,0x00,0x10, /* 00001EC8 "0PCID..." */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001ED0 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x32, /* 00001ED8 "_PCI0S12" */
> - 0x5F,0x0A,0x03,0xA0,0x26,0x7B,0x5C,0x2F, /* 00001EE0 "_...&{\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001EE8 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x55,0x0B,0x00,0x20, /* 00001EF0 "0PCIU.. " */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001EF8 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x33, /* 00001F00 "_PCI0S13" */
> - 0x5F,0x01,0xA0,0x27,0x7B,0x5C,0x2F,0x03, /* 00001F08 "_..'{\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001F10 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x44,0x0B,0x00,0x20,0x00, /* 00001F18 "PCID.. ." */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001F20 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x31,0x33,0x5F, /* 00001F28 "PCI0S13_" */
> - 0x0A,0x03,0xA0,0x26,0x7B,0x5C,0x2F,0x03, /* 00001F30 "...&{\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001F38 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x55,0x0B,0x00,0x40,0x00, /* 00001F40 "PCIU..@." */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001F48 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x31,0x34,0x5F, /* 00001F50 "PCI0S14_" */
> - 0x01,0xA0,0x27,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001F58 "..'{\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001F60 "SB_PCI0P" */
> - 0x43,0x49,0x44,0x0B,0x00,0x40,0x00,0x86, /* 00001F68 "CID..@.." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001F70 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x31,0x34,0x5F,0x0A, /* 00001F78 "CI0S14_." */
> - 0x03,0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001F80 "..&{\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001F88 "SB_PCI0P" */
> - 0x43,0x49,0x55,0x0B,0x00,0x80,0x00,0x86, /* 00001F90 "CIU....." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001F98 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x31,0x35,0x5F,0x01, /* 00001FA0 "CI0S15_." */
> - 0xA0,0x27,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001FA8 ".'{\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001FB0 "B_PCI0PC" */
> - 0x49,0x44,0x0B,0x00,0x80,0x00,0x86,0x5C, /* 00001FB8 "ID.....\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001FC0 "/._SB_PC" */
> - 0x49,0x30,0x53,0x31,0x35,0x5F,0x0A,0x03, /* 00001FC8 "I0S15_.." */
> - 0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001FD0 ".({\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001FD8 "B_PCI0PC" */
> - 0x49,0x55,0x0C,0x00,0x00,0x01,0x00,0x00, /* 00001FE0 "IU......" */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001FE8 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x31,0x36,0x5F, /* 00001FF0 "PCI0S16_" */
> - 0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001FF8 "..){\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00002000 "SB_PCI0P" */
> - 0x43,0x49,0x44,0x0C,0x00,0x00,0x01,0x00, /* 00002008 "CID....." */
> + 0x0A,0x03,0x75,0x60,0xA4,0x01,0x14,0x1A, /* 00001B10 "..u`...." */
> + 0x43,0x4D,0x53,0x54,0x01,0x70,0x83,0x88, /* 00001B18 "CMST.p.." */
> + 0x4D,0x45,0x4F,0x4E,0x68,0x00,0x60,0xA0, /* 00001B20 "MEONh.`." */
> + 0x05,0x60,0xA4,0x0A,0x0F,0xA1,0x03,0xA4, /* 00001B28 ".`......" */
> + 0x00,0x5B,0x80,0x4D,0x45,0x53,0x54,0x01, /* 00001B30 ".[.MEST." */
> + 0x0B,0x20,0xAF,0x0A,0x20,0x5B,0x81,0x0C, /* 00001B38 ". .. [.." */
> + 0x4D,0x45,0x53,0x54,0x01,0x4D,0x45,0x53, /* 00001B40 "MEST.MES" */
> + 0x5F,0x40,0x10,0x14,0x4C,0x06,0x4D,0x45, /* 00001B48 "_@..L.ME" */
> + 0x53,0x43,0x00,0x70,0x4D,0x45,0x53,0x5F, /* 00001B50 "SC.pMES_" */
> + 0x65,0x70,0x00,0x62,0x70,0x00,0x60,0xA2, /* 00001B58 "ep.bp.`." */
> + 0x46,0x05,0x95,0x60,0x87,0x4D,0x45,0x4F, /* 00001B60 "F..`.MEO" */
> + 0x4E,0x70,0x83,0x88,0x4D,0x45,0x4F,0x4E, /* 00001B68 "Np..MEON" */
> + 0x60,0x00,0x61,0xA0,0x0A,0x7B,0x60,0x0A, /* 00001B70 "`.a..{`." */
> + 0x07,0x00,0x7A,0x62,0x01,0x62,0xA1,0x0C, /* 00001B78 "..zb.b.." */
> + 0x70,0x83,0x88,0x65,0x7A,0x60,0x0A,0x03, /* 00001B80 "p..ez`.." */
> + 0x00,0x00,0x62,0x70,0x7B,0x62,0x01,0x00, /* 00001B88 "..bp{b.." */
> + 0x63,0xA0,0x22,0x92,0x93,0x61,0x63,0x70, /* 00001B90 "c."..acp" */
> + 0x63,0x88,0x4D,0x45,0x4F,0x4E,0x60,0x00, /* 00001B98 "c.MEON`." */
> + 0xA0,0x0A,0x93,0x63,0x01,0x4D,0x54,0x46, /* 00001BA0 "...c.MTF" */
> + 0x59,0x60,0x01,0xA1,0x08,0x4D,0x54,0x46, /* 00001BA8 "Y`...MTF" */
> + 0x59,0x60,0x0A,0x03,0x75,0x60,0xA4,0x01, /* 00001BB0 "Y`..u`.." */
> + 0x10,0x4B,0xA7,0x5F,0x47,0x50,0x45,0x08, /* 00001BB8 ".K._GPE." */
> + 0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50, /* 00001BC0 "_HID.ACP" */
> + 0x49,0x30,0x30,0x30,0x36,0x00,0x14,0x08, /* 00001BC8 "I0006..." */
> + 0x5F,0x4C,0x30,0x30,0x00,0xA4,0x01,0x14, /* 00001BD0 "_L00...." */
> + 0x4C,0x9C,0x5F,0x4C,0x30,0x31,0x00,0xA0, /* 00001BD8 "L._L01.." */
> + 0x25,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001BE0 "%{\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001BE8 "_PCI0PCI" */
> + 0x55,0x0A,0x02,0x00,0x86,0x5C,0x2F,0x03, /* 00001BF0 "U....\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001BF8 "_SB_PCI0" */
> + 0x53,0x31,0x5F,0x5F,0x01,0xA0,0x26,0x7B, /* 00001C00 "S1__..&{" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001C08 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0A, /* 00001C10 "CI0PCID." */
> + 0x02,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001C18 "...\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00001C20 "B_PCI0S1" */
> + 0x5F,0x5F,0x0A,0x03,0xA0,0x25,0x7B,0x5C, /* 00001C28 "__...%{\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001C30 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x55,0x0A,0x04, /* 00001C38 "I0PCIU.." */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001C40 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x32,0x5F, /* 00001C48 "_PCI0S2_" */
> + 0x5F,0x01,0xA0,0x26,0x7B,0x5C,0x2F,0x03, /* 00001C50 "_..&{\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001C58 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x44,0x0A,0x04,0x00,0x86, /* 00001C60 "PCID...." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001C68 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x32,0x5F,0x5F,0x0A, /* 00001C70 "CI0S2__." */
> + 0x03,0xA0,0x25,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001C78 "..%{\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001C80 "SB_PCI0P" */
> + 0x43,0x49,0x55,0x0A,0x08,0x00,0x86,0x5C, /* 00001C88 "CIU....\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001C90 "/._SB_PC" */
> + 0x49,0x30,0x53,0x33,0x5F,0x5F,0x01,0xA0, /* 00001C98 "I0S3__.." */
> + 0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001CA0 "&{\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001CA8 "_PCI0PCI" */
> + 0x44,0x0A,0x08,0x00,0x86,0x5C,0x2F,0x03, /* 00001CB0 "D....\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001CB8 "_SB_PCI0" */
> + 0x53,0x33,0x5F,0x5F,0x0A,0x03,0xA0,0x25, /* 00001CC0 "S3__...%" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001CC8 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00001CD0 "PCI0PCIU" */
> + 0x0A,0x10,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001CD8 "....\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001CE0 "SB_PCI0S" */
> + 0x34,0x5F,0x5F,0x01,0xA0,0x26,0x7B,0x5C, /* 00001CE8 "4__..&{\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001CF0 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x44,0x0A,0x10, /* 00001CF8 "I0PCID.." */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001D00 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x34,0x5F, /* 00001D08 "_PCI0S4_" */
> + 0x5F,0x0A,0x03,0xA0,0x25,0x7B,0x5C,0x2F, /* 00001D10 "_...%{\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001D18 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x55,0x0A,0x20,0x00, /* 00001D20 "0PCIU. ." */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001D28 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x35,0x5F,0x5F, /* 00001D30 "PCI0S5__" */
> + 0x01,0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001D38 "..&{\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001D40 "SB_PCI0P" */
> + 0x43,0x49,0x44,0x0A,0x20,0x00,0x86,0x5C, /* 00001D48 "CID. ..\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001D50 "/._SB_PC" */
> + 0x49,0x30,0x53,0x35,0x5F,0x5F,0x0A,0x03, /* 00001D58 "I0S5__.." */
> + 0xA0,0x25,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001D60 ".%{\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001D68 "B_PCI0PC" */
> + 0x49,0x55,0x0A,0x40,0x00,0x86,0x5C,0x2F, /* 00001D70 "IU.@..\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001D78 "._SB_PCI" */
> + 0x30,0x53,0x36,0x5F,0x5F,0x01,0xA0,0x26, /* 00001D80 "0S6__..&" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001D88 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 00001D90 "PCI0PCID" */
> + 0x0A,0x40,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001D98 ".@..\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001DA0 "SB_PCI0S" */
> + 0x36,0x5F,0x5F,0x0A,0x03,0xA0,0x25,0x7B, /* 00001DA8 "6__...%{" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001DB0 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0A, /* 00001DB8 "CI0PCIU." */
> + 0x80,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001DC0 "...\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x37, /* 00001DC8 "B_PCI0S7" */
> + 0x5F,0x5F,0x01,0xA0,0x26,0x7B,0x5C,0x2F, /* 00001DD0 "__..&{\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001DD8 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x44,0x0A,0x80,0x00, /* 00001DE0 "0PCID..." */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001DE8 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x37,0x5F,0x5F, /* 00001DF0 "PCI0S7__" */
> + 0x0A,0x03,0xA0,0x26,0x7B,0x5C,0x2F,0x03, /* 00001DF8 "...&{\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001E00 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x55,0x0B,0x00,0x01,0x00, /* 00001E08 "PCIU...." */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001E10 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x38,0x5F,0x5F, /* 00001E18 "PCI0S8__" */
> + 0x01,0xA0,0x27,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001E20 "..'{\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001E28 "SB_PCI0P" */
> + 0x43,0x49,0x44,0x0B,0x00,0x01,0x00,0x86, /* 00001E30 "CID....." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001E38 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x38,0x5F,0x5F,0x0A, /* 00001E40 "CI0S8__." */
> + 0x03,0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F, /* 00001E48 "..&{\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00001E50 "SB_PCI0P" */
> + 0x43,0x49,0x55,0x0B,0x00,0x02,0x00,0x86, /* 00001E58 "CIU....." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001E60 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x39,0x5F,0x5F,0x01, /* 00001E68 "CI0S9__." */
> + 0xA0,0x27,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001E70 ".'{\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001E78 "B_PCI0PC" */
> + 0x49,0x44,0x0B,0x00,0x02,0x00,0x86,0x5C, /* 00001E80 "ID.....\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001E88 "/._SB_PC" */
> + 0x49,0x30,0x53,0x39,0x5F,0x5F,0x0A,0x03, /* 00001E90 "I0S9__.." */
> + 0xA0,0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00001E98 ".&{\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00001EA0 "B_PCI0PC" */
> + 0x49,0x55,0x0B,0x00,0x04,0x00,0x86,0x5C, /* 00001EA8 "IU.....\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001EB0 "/._SB_PC" */
> + 0x49,0x30,0x53,0x31,0x30,0x5F,0x01,0xA0, /* 00001EB8 "I0S10_.." */
> + 0x27,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001EC0 "'{\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001EC8 "_PCI0PCI" */
> + 0x44,0x0B,0x00,0x04,0x00,0x86,0x5C,0x2F, /* 00001ED0 "D.....\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001ED8 "._SB_PCI" */
> + 0x30,0x53,0x31,0x30,0x5F,0x0A,0x03,0xA0, /* 00001EE0 "0S10_..." */
> + 0x26,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00001EE8 "&{\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00001EF0 "_PCI0PCI" */
> + 0x55,0x0B,0x00,0x08,0x00,0x86,0x5C,0x2F, /* 00001EF8 "U.....\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001F00 "._SB_PCI" */
> + 0x30,0x53,0x31,0x31,0x5F,0x01,0xA0,0x27, /* 00001F08 "0S11_..'" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001F10 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 00001F18 "PCI0PCID" */
> + 0x0B,0x00,0x08,0x00,0x86,0x5C,0x2F,0x03, /* 00001F20 ".....\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001F28 "_SB_PCI0" */
> + 0x53,0x31,0x31,0x5F,0x0A,0x03,0xA0,0x26, /* 00001F30 "S11_...&" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001F38 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00001F40 "PCI0PCIU" */
> + 0x0B,0x00,0x10,0x00,0x86,0x5C,0x2F,0x03, /* 00001F48 ".....\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00001F50 "_SB_PCI0" */
> + 0x53,0x31,0x32,0x5F,0x01,0xA0,0x27,0x7B, /* 00001F58 "S12_..'{" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001F60 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0B, /* 00001F68 "CI0PCID." */
> + 0x00,0x10,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001F70 "....\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001F78 "SB_PCI0S" */
> + 0x31,0x32,0x5F,0x0A,0x03,0xA0,0x26,0x7B, /* 00001F80 "12_...&{" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001F88 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0B, /* 00001F90 "CI0PCIU." */
> + 0x00,0x20,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00001F98 ". ..\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001FA0 "SB_PCI0S" */
> + 0x31,0x33,0x5F,0x01,0xA0,0x27,0x7B,0x5C, /* 00001FA8 "13_..'{\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001FB0 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x44,0x0B,0x00, /* 00001FB8 "I0PCID.." */
> + 0x20,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001FC0 " ..\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00001FC8 "B_PCI0S1" */
> + 0x33,0x5F,0x0A,0x03,0xA0,0x26,0x7B,0x5C, /* 00001FD0 "3_...&{\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001FD8 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x55,0x0B,0x00, /* 00001FE0 "I0PCIU.." */
> + 0x40,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001FE8 "@..\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00001FF0 "B_PCI0S1" */
> + 0x34,0x5F,0x01,0xA0,0x27,0x7B,0x5C,0x2F, /* 00001FF8 "4_..'{\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002000 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x44,0x0B,0x00,0x40, /* 00002008 "0PCID..@" */
> 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002010 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x36, /* 00002018 "_PCI0S16" */
> - 0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F, /* 00002020 "_...({\/" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x34, /* 00002018 "_PCI0S14" */
> + 0x5F,0x0A,0x03,0xA0,0x26,0x7B,0x5C,0x2F, /* 00002020 "_...&{\/" */
> 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002028 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x55,0x0C,0x00,0x00, /* 00002030 "0PCIU..." */
> - 0x02,0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00002038 "....\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00002040 "SB_PCI0S" */
> - 0x31,0x37,0x5F,0x01,0xA0,0x29,0x7B,0x5C, /* 00002048 "17_..){\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002050 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x44,0x0C,0x00, /* 00002058 "I0PCID.." */
> - 0x00,0x02,0x00,0x00,0x86,0x5C,0x2F,0x03, /* 00002060 ".....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002068 "_SB_PCI0" */
> - 0x53,0x31,0x37,0x5F,0x0A,0x03,0xA0,0x28, /* 00002070 "S17_...(" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002078 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00002080 "PCI0PCIU" */
> - 0x0C,0x00,0x00,0x04,0x00,0x00,0x86,0x5C, /* 00002088 ".......\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002090 "/._SB_PC" */
> - 0x49,0x30,0x53,0x31,0x38,0x5F,0x01,0xA0, /* 00002098 "I0S18_.." */
> - 0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000020A0 "){\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 000020A8 "_PCI0PCI" */
> - 0x44,0x0C,0x00,0x00,0x04,0x00,0x00,0x86, /* 000020B0 "D......." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 000020B8 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x31,0x38,0x5F,0x0A, /* 000020C0 "CI0S18_." */
> - 0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F, /* 000020C8 "..({\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 000020D0 "SB_PCI0P" */
> - 0x43,0x49,0x55,0x0C,0x00,0x00,0x08,0x00, /* 000020D8 "CIU....." */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000020E0 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x39, /* 000020E8 "_PCI0S19" */
> - 0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03, /* 000020F0 "_..){\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 000020F8 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x44,0x0C,0x00,0x00,0x08, /* 00002100 "PCID...." */
> - 0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00002108 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00002110 "B_PCI0S1" */
> - 0x39,0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C, /* 00002118 "9_...({\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002120 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x55,0x0C,0x00, /* 00002128 "I0PCIU.." */
> - 0x00,0x10,0x00,0x00,0x86,0x5C,0x2F,0x03, /* 00002130 ".....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002138 "_SB_PCI0" */
> - 0x53,0x32,0x30,0x5F,0x01,0xA0,0x29,0x7B, /* 00002140 "S20_..){" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002148 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0C, /* 00002150 "CI0PCID." */
> - 0x00,0x00,0x10,0x00,0x00,0x86,0x5C,0x2F, /* 00002158 "......\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002160 "._SB_PCI" */
> - 0x30,0x53,0x32,0x30,0x5F,0x0A,0x03,0xA0, /* 00002168 "0S20_..." */
> - 0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002170 "({\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00002178 "_PCI0PCI" */
> - 0x55,0x0C,0x00,0x00,0x20,0x00,0x00,0x86, /* 00002180 "U... ..." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002188 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x32,0x31,0x5F,0x01, /* 00002190 "CI0S21_." */
> - 0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00002198 ".){\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 000021A0 "B_PCI0PC" */
> - 0x49,0x44,0x0C,0x00,0x00,0x20,0x00,0x00, /* 000021A8 "ID... .." */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000021B0 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x32,0x31,0x5F, /* 000021B8 "PCI0S21_" */
> - 0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03, /* 000021C0 "...({\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 000021C8 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x55,0x0C,0x00,0x00,0x40, /* 000021D0 "PCIU...@" */
> - 0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 000021D8 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x32, /* 000021E0 "B_PCI0S2" */
> - 0x32,0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F, /* 000021E8 "2_..){\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000021F0 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x44,0x0C,0x00,0x00, /* 000021F8 "0PCID..." */
> - 0x40,0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00002200 "@...\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00002208 "SB_PCI0S" */
> - 0x32,0x32,0x5F,0x0A,0x03,0xA0,0x28,0x7B, /* 00002210 "22_...({" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002218 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0C, /* 00002220 "CI0PCIU." */
> - 0x00,0x00,0x80,0x00,0x00,0x86,0x5C,0x2F, /* 00002228 "......\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002230 "._SB_PCI" */
> - 0x30,0x53,0x32,0x33,0x5F,0x01,0xA0,0x29, /* 00002238 "0S23_..)" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002240 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 00002248 "PCI0PCID" */
> - 0x0C,0x00,0x00,0x80,0x00,0x00,0x86,0x5C, /* 00002250 ".......\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002258 "/._SB_PC" */
> - 0x49,0x30,0x53,0x32,0x33,0x5F,0x0A,0x03, /* 00002260 "I0S23_.." */
> - 0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00002268 ".({\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00002270 "B_PCI0PC" */
> - 0x49,0x55,0x0C,0x00,0x00,0x00,0x01,0x00, /* 00002278 "IU......" */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002280 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x32,0x34,0x5F, /* 00002288 "PCI0S24_" */
> - 0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F, /* 00002290 "..){\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00002298 "SB_PCI0P" */
> - 0x43,0x49,0x44,0x0C,0x00,0x00,0x00,0x01, /* 000022A0 "CID....." */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000022A8 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x32,0x34, /* 000022B0 "_PCI0S24" */
> - 0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F, /* 000022B8 "_...({\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000022C0 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x55,0x0C,0x00,0x00, /* 000022C8 "0PCIU..." */
> - 0x00,0x02,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 000022D0 "....\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 000022D8 "SB_PCI0S" */
> - 0x32,0x35,0x5F,0x01,0xA0,0x29,0x7B,0x5C, /* 000022E0 "25_..){\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 000022E8 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x44,0x0C,0x00, /* 000022F0 "I0PCID.." */
> - 0x00,0x00,0x02,0x00,0x86,0x5C,0x2F,0x03, /* 000022F8 ".....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002300 "_SB_PCI0" */
> - 0x53,0x32,0x35,0x5F,0x0A,0x03,0xA0,0x28, /* 00002308 "S25_...(" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002310 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00002318 "PCI0PCIU" */
> - 0x0C,0x00,0x00,0x00,0x04,0x00,0x86,0x5C, /* 00002320 ".......\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002328 "/._SB_PC" */
> - 0x49,0x30,0x53,0x32,0x36,0x5F,0x01,0xA0, /* 00002330 "I0S26_.." */
> - 0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002338 "){\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00002340 "_PCI0PCI" */
> - 0x44,0x0C,0x00,0x00,0x00,0x04,0x00,0x86, /* 00002348 "D......." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002350 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x32,0x36,0x5F,0x0A, /* 00002358 "CI0S26_." */
> - 0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F, /* 00002360 "..({\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00002368 "SB_PCI0P" */
> - 0x43,0x49,0x55,0x0C,0x00,0x00,0x00,0x08, /* 00002370 "CIU....." */
> - 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002378 "..\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x53,0x32,0x37, /* 00002380 "_PCI0S27" */
> - 0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03, /* 00002388 "_..){\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002390 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x44,0x0C,0x00,0x00,0x00, /* 00002398 "PCID...." */
> - 0x08,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 000023A0 "...\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x32, /* 000023A8 "B_PCI0S2" */
> - 0x37,0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C, /* 000023B0 "7_...({\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 000023B8 "/._SB_PC" */
> - 0x49,0x30,0x50,0x43,0x49,0x55,0x0C,0x00, /* 000023C0 "I0PCIU.." */
> - 0x00,0x00,0x10,0x00,0x86,0x5C,0x2F,0x03, /* 000023C8 ".....\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 000023D0 "_SB_PCI0" */
> - 0x53,0x32,0x38,0x5F,0x01,0xA0,0x29,0x7B, /* 000023D8 "S28_..){" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 000023E0 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0C, /* 000023E8 "CI0PCID." */
> - 0x00,0x00,0x00,0x10,0x00,0x86,0x5C,0x2F, /* 000023F0 "......\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000023F8 "._SB_PCI" */
> - 0x30,0x53,0x32,0x38,0x5F,0x0A,0x03,0xA0, /* 00002400 "0S28_..." */
> - 0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002408 "({\/._SB" */
> - 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00002410 "_PCI0PCI" */
> - 0x55,0x0C,0x00,0x00,0x00,0x20,0x00,0x86, /* 00002418 "U.... .." */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002420 "\/._SB_P" */
> - 0x43,0x49,0x30,0x53,0x32,0x39,0x5F,0x01, /* 00002428 "CI0S29_." */
> - 0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00002430 ".){\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00002438 "B_PCI0PC" */
> - 0x49,0x44,0x0C,0x00,0x00,0x00,0x20,0x00, /* 00002440 "ID.... ." */
> - 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002448 ".\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x53,0x32,0x39,0x5F, /* 00002450 "PCI0S29_" */
> - 0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03, /* 00002458 "...({\/." */
> - 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002460 "_SB_PCI0" */
> - 0x50,0x43,0x49,0x55,0x0C,0x00,0x00,0x00, /* 00002468 "PCIU...." */
> - 0x40,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00002470 "@..\/._S" */
> - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x33, /* 00002478 "B_PCI0S3" */
> - 0x30,0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F, /* 00002480 "0_..){\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002488 "._SB_PCI" */
> - 0x30,0x50,0x43,0x49,0x44,0x0C,0x00,0x00, /* 00002490 "0PCID..." */
> - 0x00,0x40,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00002498 ".@..\/._" */
> - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 000024A0 "SB_PCI0S" */
> - 0x33,0x30,0x5F,0x0A,0x03,0xA0,0x28,0x7B, /* 000024A8 "30_...({" */
> - 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 000024B0 "\/._SB_P" */
> - 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0C, /* 000024B8 "CI0PCIU." */
> - 0x00,0x00,0x00,0x80,0x00,0x86,0x5C,0x2F, /* 000024C0 "......\/" */
> - 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000024C8 "._SB_PCI" */
> - 0x30,0x53,0x33,0x31,0x5F,0x01,0xA0,0x29, /* 000024D0 "0S31_..)" */
> - 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000024D8 "{\/._SB_" */
> - 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 000024E0 "PCI0PCID" */
> - 0x0C,0x00,0x00,0x00,0x80,0x00,0x86,0x5C, /* 000024E8 ".......\" */
> - 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 000024F0 "/._SB_PC" */
> - 0x49,0x30,0x53,0x33,0x31,0x5F,0x0A,0x03, /* 000024F8 "I0S31_.." */
> - 0xA4,0x01,0x14,0x11,0x5F,0x4C,0x30,0x32, /* 00002500 "...._L02" */
> - 0x00,0xA4,0x5C,0x2E,0x5F,0x53,0x42,0x5F, /* 00002508 "..\._SB_" */
> - 0x50,0x52,0x53,0x43,0x14,0x08,0x5F,0x4C, /* 00002510 "PRSC.._L" */
> - 0x30,0x33,0x00,0xA4,0x01,0x14,0x08,0x5F, /* 00002518 "03....._" */
> - 0x4C,0x30,0x34,0x00,0xA4,0x01,0x14,0x08, /* 00002520 "L04....." */
> - 0x5F,0x4C,0x30,0x35,0x00,0xA4,0x01,0x14, /* 00002528 "_L05...." */
> - 0x08,0x5F,0x4C,0x30,0x36,0x00,0xA4,0x01, /* 00002530 "._L06..." */
> - 0x14,0x08,0x5F,0x4C,0x30,0x37,0x00,0xA4, /* 00002538 ".._L07.." */
> - 0x01,0x14,0x08,0x5F,0x4C,0x30,0x38,0x00, /* 00002540 "..._L08." */
> - 0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,0x39, /* 00002548 "...._L09" */
> - 0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30, /* 00002550 "....._L0" */
> - 0x41,0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C, /* 00002558 "A....._L" */
> - 0x30,0x42,0x00,0xA4,0x01,0x14,0x08,0x5F, /* 00002560 "0B....._" */
> - 0x4C,0x30,0x43,0x00,0xA4,0x01,0x14,0x08, /* 00002568 "L0C....." */
> - 0x5F,0x4C,0x30,0x44,0x00,0xA4,0x01,0x14, /* 00002570 "_L0D...." */
> - 0x08,0x5F,0x4C,0x30,0x45,0x00,0xA4,0x01, /* 00002578 "._L0E..." */
> - 0x14,0x08,0x5F,0x4C,0x30,0x46,0x00,0xA4, /* 00002580 ".._L0F.." */
> - 0x01 /* 00002588 "." */
> + 0x30,0x50,0x43,0x49,0x55,0x0B,0x00,0x80, /* 00002030 "0PCIU..." */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002038 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x35, /* 00002040 "_PCI0S15" */
> + 0x5F,0x01,0xA0,0x27,0x7B,0x5C,0x2F,0x03, /* 00002048 "_..'{\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002050 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x44,0x0B,0x00,0x80,0x00, /* 00002058 "PCID...." */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002060 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x31,0x35,0x5F, /* 00002068 "PCI0S15_" */
> + 0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03, /* 00002070 "...({\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002078 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x55,0x0C,0x00,0x00,0x01, /* 00002080 "PCIU...." */
> + 0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00002088 "...\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x31, /* 00002090 "B_PCI0S1" */
> + 0x36,0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F, /* 00002098 "6_..){\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000020A0 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x44,0x0C,0x00,0x00, /* 000020A8 "0PCID..." */
> + 0x01,0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 000020B0 "....\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 000020B8 "SB_PCI0S" */
> + 0x31,0x36,0x5F,0x0A,0x03,0xA0,0x28,0x7B, /* 000020C0 "16_...({" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 000020C8 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0C, /* 000020D0 "CI0PCIU." */
> + 0x00,0x00,0x02,0x00,0x00,0x86,0x5C,0x2F, /* 000020D8 "......\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000020E0 "._SB_PCI" */
> + 0x30,0x53,0x31,0x37,0x5F,0x01,0xA0,0x29, /* 000020E8 "0S17_..)" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000020F0 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 000020F8 "PCI0PCID" */
> + 0x0C,0x00,0x00,0x02,0x00,0x00,0x86,0x5C, /* 00002100 ".......\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002108 "/._SB_PC" */
> + 0x49,0x30,0x53,0x31,0x37,0x5F,0x0A,0x03, /* 00002110 "I0S17_.." */
> + 0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00002118 ".({\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00002120 "B_PCI0PC" */
> + 0x49,0x55,0x0C,0x00,0x00,0x04,0x00,0x00, /* 00002128 "IU......" */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002130 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x31,0x38,0x5F, /* 00002138 "PCI0S18_" */
> + 0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F, /* 00002140 "..){\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00002148 "SB_PCI0P" */
> + 0x43,0x49,0x44,0x0C,0x00,0x00,0x04,0x00, /* 00002150 "CID....." */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002158 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x38, /* 00002160 "_PCI0S18" */
> + 0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F, /* 00002168 "_...({\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002170 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x55,0x0C,0x00,0x00, /* 00002178 "0PCIU..." */
> + 0x08,0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00002180 "....\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00002188 "SB_PCI0S" */
> + 0x31,0x39,0x5F,0x01,0xA0,0x29,0x7B,0x5C, /* 00002190 "19_..){\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002198 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x44,0x0C,0x00, /* 000021A0 "I0PCID.." */
> + 0x00,0x08,0x00,0x00,0x86,0x5C,0x2F,0x03, /* 000021A8 ".....\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 000021B0 "_SB_PCI0" */
> + 0x53,0x31,0x39,0x5F,0x0A,0x03,0xA0,0x28, /* 000021B8 "S19_...(" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000021C0 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 000021C8 "PCI0PCIU" */
> + 0x0C,0x00,0x00,0x10,0x00,0x00,0x86,0x5C, /* 000021D0 ".......\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 000021D8 "/._SB_PC" */
> + 0x49,0x30,0x53,0x32,0x30,0x5F,0x01,0xA0, /* 000021E0 "I0S20_.." */
> + 0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000021E8 "){\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 000021F0 "_PCI0PCI" */
> + 0x44,0x0C,0x00,0x00,0x10,0x00,0x00,0x86, /* 000021F8 "D......." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002200 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x32,0x30,0x5F,0x0A, /* 00002208 "CI0S20_." */
> + 0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F, /* 00002210 "..({\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 00002218 "SB_PCI0P" */
> + 0x43,0x49,0x55,0x0C,0x00,0x00,0x20,0x00, /* 00002220 "CIU... ." */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002228 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x32,0x31, /* 00002230 "_PCI0S21" */
> + 0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03, /* 00002238 "_..){\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002240 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x44,0x0C,0x00,0x00,0x20, /* 00002248 "PCID... " */
> + 0x00,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00002250 "...\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x32, /* 00002258 "B_PCI0S2" */
> + 0x31,0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C, /* 00002260 "1_...({\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002268 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x55,0x0C,0x00, /* 00002270 "I0PCIU.." */
> + 0x00,0x40,0x00,0x00,0x86,0x5C,0x2F,0x03, /* 00002278 ".@...\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002280 "_SB_PCI0" */
> + 0x53,0x32,0x32,0x5F,0x01,0xA0,0x29,0x7B, /* 00002288 "S22_..){" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002290 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0C, /* 00002298 "CI0PCID." */
> + 0x00,0x00,0x40,0x00,0x00,0x86,0x5C,0x2F, /* 000022A0 "..@...\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 000022A8 "._SB_PCI" */
> + 0x30,0x53,0x32,0x32,0x5F,0x0A,0x03,0xA0, /* 000022B0 "0S22_..." */
> + 0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000022B8 "({\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 000022C0 "_PCI0PCI" */
> + 0x55,0x0C,0x00,0x00,0x80,0x00,0x00,0x86, /* 000022C8 "U......." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 000022D0 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x32,0x33,0x5F,0x01, /* 000022D8 "CI0S23_." */
> + 0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 000022E0 ".){\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 000022E8 "B_PCI0PC" */
> + 0x49,0x44,0x0C,0x00,0x00,0x80,0x00,0x00, /* 000022F0 "ID......" */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000022F8 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x32,0x33,0x5F, /* 00002300 "PCI0S23_" */
> + 0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03, /* 00002308 "...({\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002310 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x55,0x0C,0x00,0x00,0x00, /* 00002318 "PCIU...." */
> + 0x01,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00002320 "...\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x32, /* 00002328 "B_PCI0S2" */
> + 0x34,0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F, /* 00002330 "4_..){\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002338 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x44,0x0C,0x00,0x00, /* 00002340 "0PCID..." */
> + 0x00,0x01,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00002348 "....\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00002350 "SB_PCI0S" */
> + 0x32,0x34,0x5F,0x0A,0x03,0xA0,0x28,0x7B, /* 00002358 "24_...({" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002360 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x55,0x0C, /* 00002368 "CI0PCIU." */
> + 0x00,0x00,0x00,0x02,0x00,0x86,0x5C,0x2F, /* 00002370 "......\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002378 "._SB_PCI" */
> + 0x30,0x53,0x32,0x35,0x5F,0x01,0xA0,0x29, /* 00002380 "0S25_..)" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002388 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x44, /* 00002390 "PCI0PCID" */
> + 0x0C,0x00,0x00,0x00,0x02,0x00,0x86,0x5C, /* 00002398 ".......\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 000023A0 "/._SB_PC" */
> + 0x49,0x30,0x53,0x32,0x35,0x5F,0x0A,0x03, /* 000023A8 "I0S25_.." */
> + 0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 000023B0 ".({\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 000023B8 "B_PCI0PC" */
> + 0x49,0x55,0x0C,0x00,0x00,0x00,0x04,0x00, /* 000023C0 "IU......" */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000023C8 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x32,0x36,0x5F, /* 000023D0 "PCI0S26_" */
> + 0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F, /* 000023D8 "..){\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 000023E0 "SB_PCI0P" */
> + 0x43,0x49,0x44,0x0C,0x00,0x00,0x00,0x04, /* 000023E8 "CID....." */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000023F0 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x32,0x36, /* 000023F8 "_PCI0S26" */
> + 0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C,0x2F, /* 00002400 "_...({\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002408 "._SB_PCI" */
> + 0x30,0x50,0x43,0x49,0x55,0x0C,0x00,0x00, /* 00002410 "0PCIU..." */
> + 0x00,0x08,0x00,0x86,0x5C,0x2F,0x03,0x5F, /* 00002418 "....\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00002420 "SB_PCI0S" */
> + 0x32,0x37,0x5F,0x01,0xA0,0x29,0x7B,0x5C, /* 00002428 "27_..){\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002430 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x44,0x0C,0x00, /* 00002438 "I0PCID.." */
> + 0x00,0x00,0x08,0x00,0x86,0x5C,0x2F,0x03, /* 00002440 ".....\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002448 "_SB_PCI0" */
> + 0x53,0x32,0x37,0x5F,0x0A,0x03,0xA0,0x28, /* 00002450 "S27_...(" */
> + 0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002458 "{\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x50,0x43,0x49,0x55, /* 00002460 "PCI0PCIU" */
> + 0x0C,0x00,0x00,0x00,0x10,0x00,0x86,0x5C, /* 00002468 ".......\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002470 "/._SB_PC" */
> + 0x49,0x30,0x53,0x32,0x38,0x5F,0x01,0xA0, /* 00002478 "I0S28_.." */
> + 0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002480 "){\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00002488 "_PCI0PCI" */
> + 0x44,0x0C,0x00,0x00,0x00,0x10,0x00,0x86, /* 00002490 "D......." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002498 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x32,0x38,0x5F,0x0A, /* 000024A0 "CI0S28_." */
> + 0x03,0xA0,0x28,0x7B,0x5C,0x2F,0x03,0x5F, /* 000024A8 "..({\/._" */
> + 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x50, /* 000024B0 "SB_PCI0P" */
> + 0x43,0x49,0x55,0x0C,0x00,0x00,0x00,0x20, /* 000024B8 "CIU.... " */
> + 0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000024C0 "..\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x53,0x32,0x39, /* 000024C8 "_PCI0S29" */
> + 0x5F,0x01,0xA0,0x29,0x7B,0x5C,0x2F,0x03, /* 000024D0 "_..){\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 000024D8 "_SB_PCI0" */
> + 0x50,0x43,0x49,0x44,0x0C,0x00,0x00,0x00, /* 000024E0 "PCID...." */
> + 0x20,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 000024E8 " ..\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x32, /* 000024F0 "B_PCI0S2" */
> + 0x39,0x5F,0x0A,0x03,0xA0,0x28,0x7B,0x5C, /* 000024F8 "9_...({\" */
> + 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00002500 "/._SB_PC" */
> + 0x49,0x30,0x50,0x43,0x49,0x55,0x0C,0x00, /* 00002508 "I0PCIU.." */
> + 0x00,0x00,0x40,0x00,0x86,0x5C,0x2F,0x03, /* 00002510 "..@..\/." */
> + 0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,0x30, /* 00002518 "_SB_PCI0" */
> + 0x53,0x33,0x30,0x5F,0x01,0xA0,0x29,0x7B, /* 00002520 "S30_..){" */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002528 "\/._SB_P" */
> + 0x43,0x49,0x30,0x50,0x43,0x49,0x44,0x0C, /* 00002530 "CI0PCID." */
> + 0x00,0x00,0x00,0x40,0x00,0x86,0x5C,0x2F, /* 00002538 "...@..\/" */
> + 0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00002540 "._SB_PCI" */
> + 0x30,0x53,0x33,0x30,0x5F,0x0A,0x03,0xA0, /* 00002548 "0S30_..." */
> + 0x28,0x7B,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002550 "({\/._SB" */
> + 0x5F,0x50,0x43,0x49,0x30,0x50,0x43,0x49, /* 00002558 "_PCI0PCI" */
> + 0x55,0x0C,0x00,0x00,0x00,0x80,0x00,0x86, /* 00002560 "U......." */
> + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00002568 "\/._SB_P" */
> + 0x43,0x49,0x30,0x53,0x33,0x31,0x5F,0x01, /* 00002570 "CI0S31_." */
> + 0xA0,0x29,0x7B,0x5C,0x2F,0x03,0x5F,0x53, /* 00002578 ".){\/._S" */
> + 0x42,0x5F,0x50,0x43,0x49,0x30,0x50,0x43, /* 00002580 "B_PCI0PC" */
> + 0x49,0x44,0x0C,0x00,0x00,0x00,0x80,0x00, /* 00002588 "ID......" */
> + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00002590 ".\/._SB_" */
> + 0x50,0x43,0x49,0x30,0x53,0x33,0x31,0x5F, /* 00002598 "PCI0S31_" */
> + 0x0A,0x03,0xA4,0x01,0x14,0x11,0x5F,0x4C, /* 000025A0 "......_L" */
> + 0x30,0x32,0x00,0xA4,0x5C,0x2E,0x5F,0x53, /* 000025A8 "02..\._S" */
> + 0x42,0x5F,0x50,0x52,0x53,0x43,0x14,0x11, /* 000025B0 "B_PRSC.." */
> + 0x5F,0x4C,0x30,0x33,0x00,0xA4,0x5C,0x2E, /* 000025B8 "_L03..\." */
> + 0x5F,0x53,0x42,0x5F,0x4D,0x45,0x53,0x43, /* 000025C0 "_SB_MESC" */
> + 0x14,0x08,0x5F,0x4C,0x30,0x34,0x00,0xA4, /* 000025C8 ".._L04.." */
> + 0x01,0x14,0x08,0x5F,0x4C,0x30,0x35,0x00, /* 000025D0 "..._L05." */
> + 0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,0x36, /* 000025D8 "...._L06" */
> + 0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30, /* 000025E0 "....._L0" */
> + 0x37,0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C, /* 000025E8 "7....._L" */
> + 0x30,0x38,0x00,0xA4,0x01,0x14,0x08,0x5F, /* 000025F0 "08....._" */
> + 0x4C,0x30,0x39,0x00,0xA4,0x01,0x14,0x08, /* 000025F8 "L09....." */
> + 0x5F,0x4C,0x30,0x41,0x00,0xA4,0x01,0x14, /* 00002600 "_L0A...." */
> + 0x08,0x5F,0x4C,0x30,0x42,0x00,0xA4,0x01, /* 00002608 "._L0B..." */
> + 0x14,0x08,0x5F,0x4C,0x30,0x43,0x00,0xA4, /* 00002610 ".._L0C.." */
> + 0x01,0x14,0x08,0x5F,0x4C,0x30,0x44,0x00, /* 00002618 "..._L0D." */
> + 0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,0x45, /* 00002620 "...._L0E" */
> + 0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30, /* 00002628 "....._L0" */
> + 0x46,0x00,0xA4,0x01 /* 00002630 "F..." */
> };
> diff --git a/src/acpi.c b/src/acpi.c
> index ea7b171..7153e3e 100644
> --- a/src/acpi.c
> +++ b/src/acpi.c
> @@ -378,10 +378,14 @@ static unsigned char ssdt_proc[] = {
> 0x4a,0x30,0x01,0x43,0x50,0x45,0x4a,0x49,
> 0x44,0x5f,0x5f,0x68
> };
> +
> +
> +
> #define SD_OFFSET_CPUHEX 6
> #define SD_OFFSET_CPUID1 8
> #define SD_OFFSET_CPUID2 20
>
> +
> #define SSDT_SIGNATURE 0x54445353 // SSDT
> static void*
> build_ssdt(void)
> @@ -460,6 +464,126 @@ build_ssdt(void)
> return ssdt;
> }
>
> +static unsigned char ssdt_mem[] = {
> +
> +
> + 0x5b,0x82,0x40,0x07,0x4d,0x50,0x41,0x41,
> + 0x08,0x49,0x44,0x5f,0x5f,0x0a,0xaa,0x08,
> + 0x5f,0x48,0x49,0x44,0x0c,0x41,0xd0,0x0c,
> + 0x80,0x08,0x5f,0x43,0x52,0x53,0x11,0x33,
> + 0x0a,0x30,0x8a,0x2b,0x00,0x00,0x0d,0x03,
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
> + 0xef,0xbe,0xad,0xde,0x00,0x00,0x00,0x00,
> + 0xee,0xbe,0xad,0xe6,0x00,0x00,0x00,0x00,
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
> + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
> + 0x79,0x00,0x14,0x0f,0x5f,0x53,0x54,0x41,
> + 0x00,0xa4,0x43,0x4d,0x53,0x54,0x49,0x44,
> + 0x5f,0x5f,0x14,0x0f,0x5f,0x45,0x4a,0x30,
> + 0x01,0x4d,0x50,0x45,0x4a,0x49,0x44,0x5f,
> + 0x5f,0x68
> +
> +};
> +
> +#define SD_OFFSET_MEMHEX 6
> +#define SD_OFFSET_MEMID1 14
> +#define SD_OFFSET_MEMSTART 48
> +#define SD_OFFSET_MEMEND 56
> +
> +
> +static void*
> +build_memssdt(void)
> +{
> + u64 memstart;
> + u64 start_ramsize, ramsize, maxramsize;
> + int memdevs, enabled_memdevs;
> +
> + ramsize = qemu_cfg_get_ramsize();
> + maxramsize = qemu_cfg_get_maxramsize();
> + memdevs = maxramsize / LINUX_MIN_BLOCK_SIZE;
> + enabled_memdevs = ramsize / LINUX_MIN_BLOCK_SIZE;
> + start_ramsize = (u64)RamSize;
> +
> + // length = ScopeOp + memdevs + MTFY method + MEON package
> + int length = ((1+3+4)
> + + (memdevs * sizeof(ssdt_mem))
> + + (1+2+5+(12*memdevs))
> + + (6+2+1+(1*memdevs)));
> + u8 *ssdt = malloc_high(sizeof(struct acpi_table_header) + length);
> + if (! ssdt) {
> + warn_noalloc();
> + return NULL;
> + }
> + u8 *ssdt_ptr = ssdt + sizeof(struct acpi_table_header);
> +
> + // build Scope(_SB_) header
> + *(ssdt_ptr++) = 0x10; // ScopeOp
> + ssdt_ptr = encodeLen(ssdt_ptr, length-1, 3);
> + *(ssdt_ptr++) = '_';
> + *(ssdt_ptr++) = 'S';
> + *(ssdt_ptr++) = 'B';
> + *(ssdt_ptr++) = '_';
> +
> + // build Memory Device object for each processor
> + int i;
> + memstart = 0;
> + for (i=0; i<memdevs; i++) {
> + memcpy(ssdt_ptr, ssdt_mem, sizeof(ssdt_mem));
> + ssdt_ptr[SD_OFFSET_MEMHEX] = getHex(i >> 4);
> + ssdt_ptr[SD_OFFSET_MEMHEX+1] = getHex(i);
> + ssdt_ptr[SD_OFFSET_MEMID1] = i;
> + /* initial memory (when >4GB) or hotpluggable memory is above 4GB, due to hole at 0x0e0000000-0x100000000 */
> + if ( (memstart == MEM_HOLE) || (memstart == start_ramsize)) {
> + memstart = MEM_HOTPLUG_OFFSET;
> + }
> +
> + *(u64*)(ssdt_ptr + SD_OFFSET_MEMSTART) = memstart;
> + *(u64*)(ssdt_ptr + SD_OFFSET_MEMEND) = memstart + LINUX_MIN_BLOCK_SIZE - 1;
> + ssdt_ptr += sizeof(ssdt_mem);
> + memstart += LINUX_MIN_BLOCK_SIZE;
> +
> + }
> +
> + // build "Method(MTFY, 2) {If (LEqual(Arg0, 0x00)) {Notify(CM00, Arg1)} ...}"
> + *(ssdt_ptr++) = 0x14; // MethodOp
> + ssdt_ptr = encodeLen(ssdt_ptr, 2+5+(12*memdevs), 2);
> + *(ssdt_ptr++) = 'M';
> + *(ssdt_ptr++) = 'T';
> + *(ssdt_ptr++) = 'F';
> + *(ssdt_ptr++) = 'Y';
> + *(ssdt_ptr++) = 0x02;
> + for (i=0; i<memdevs; i++) {
> + *(ssdt_ptr++) = 0xA0; // IfOp
> + ssdt_ptr = encodeLen(ssdt_ptr, 11, 1);
> + *(ssdt_ptr++) = 0x93; // LEqualOp
> + *(ssdt_ptr++) = 0x68; // Arg0Op
> + *(ssdt_ptr++) = 0x0A; // BytePrefix
> + *(ssdt_ptr++) = i;
> + *(ssdt_ptr++) = 0x86; // NotifyOp
> + *(ssdt_ptr++) = 'M';
> + *(ssdt_ptr++) = 'P';
> + *(ssdt_ptr++) = getHex(i >> 4);
> + *(ssdt_ptr++) = getHex(i);
> + *(ssdt_ptr++) = 0x69; // Arg1Op
> + }
> +
> + // build "Name(CPON, Package() { One, One, ..., Zero, Zero, ... })"
> + *(ssdt_ptr++) = 0x08; // NameOp
> + *(ssdt_ptr++) = 'M';
> + *(ssdt_ptr++) = 'E';
> + *(ssdt_ptr++) = 'O';
> + *(ssdt_ptr++) = 'N';
> + *(ssdt_ptr++) = 0x12; // PackageOp
> + ssdt_ptr = encodeLen(ssdt_ptr, 2+1+(1*memdevs), 2);
> + *(ssdt_ptr++) = memdevs;
> + for (i=0; i<memdevs; i++)
> + *(ssdt_ptr++) = ( i < enabled_memdevs ) ? 0x01 : 0x00;
> +
> + build_header((void*)ssdt, SSDT_SIGNATURE, ssdt_ptr - ssdt, 1);
> +
> + return ssdt;
> +}
> +
> #define HPET_SIGNATURE 0x54455048 //HPET
> static void*
> build_hpet(void)
> @@ -635,6 +759,7 @@ acpi_bios_init(void)
> // Add tables
> ACPI_INIT_TABLE(build_fadt(pci));
> ACPI_INIT_TABLE(build_ssdt());
> + ACPI_INIT_TABLE(build_memssdt());
> ACPI_INIT_TABLE(build_madt());
> ACPI_INIT_TABLE(build_hpet());
> ACPI_INIT_TABLE(build_srat());
> diff --git a/src/biosvar.h b/src/biosvar.h
> index 2b755e3..3356ebd 100644
> --- a/src/biosvar.h
> +++ b/src/biosvar.h
> @@ -329,4 +329,9 @@ struct bios_config_table_s {
>
> extern struct bios_config_table_s BIOS_CONFIG_TABLE __aligned(1);
>
> +
> +#define LINUX_MIN_BLOCK_SIZE 0x8000000LU
> +#define MEM_HOTPLUG_OFFSET 0x100000000LLU
> +#define MEM_HOLE 0xe0000000LLU
> +
> #endif // __BIOSVAR_H
> diff --git a/src/paravirt.c b/src/paravirt.c
> index 9cf77de..1e1b83b 100644
> --- a/src/paravirt.c
> +++ b/src/paravirt.c
> @@ -305,6 +305,28 @@ u16 qemu_cfg_get_max_cpus(void)
> return cnt;
> }
>
> +u64 qemu_cfg_get_ramsize(void)
> +{
> + u64 cnt;
> +
> + if (!qemu_cfg_present)
> + return 0;
> +
> + qemu_cfg_read_entry(&cnt, QEMU_CFG_RAMSIZE, sizeof(cnt));
> + return cnt;
> +}
> +
> +u64 qemu_cfg_get_maxramsize(void)
> +{
> + u64 cnt;
> +
> + if (!qemu_cfg_present)
> + return 0;
> +
> + qemu_cfg_read_entry(&cnt, QEMU_CFG_MAXRAMSIZE, sizeof(cnt));
> + return cnt;
> +}
> +
> static QemuCfgFile LastFile;
>
> static u32
> diff --git a/src/paravirt.h b/src/paravirt.h
> index 4a370a0..df43534 100644
> --- a/src/paravirt.h
> +++ b/src/paravirt.h
> @@ -29,6 +29,8 @@ static inline int kvm_para_available(void)
> #define QEMU_CFG_SIGNATURE 0x00
> #define QEMU_CFG_ID 0x01
> #define QEMU_CFG_UUID 0x02
> +#define QEMU_CFG_RAMSIZE 0x03
> +#define QEMU_CFG_MAXRAMSIZE 0x1a
> #define QEMU_CFG_NUMA 0x0d
> #define QEMU_CFG_BOOT_MENU 0x0e
> #define QEMU_CFG_MAX_CPUS 0x0f
> @@ -55,6 +57,8 @@ int qemu_cfg_smbios_load_external(int type, char **p, unsigned *nr_structs,
> int qemu_cfg_get_numa_nodes(void);
> void qemu_cfg_get_numa_data(u64 *data, int n);
> u16 qemu_cfg_get_max_cpus(void);
> +u64 qemu_cfg_get_ramsize(void);
> +u64 qemu_cfg_get_maxramsize(void);
>
> typedef struct QemuCfgFile {
> u32 size; /* file size */
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo(a)vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
2
1
The following set of patches add TPM and Trusted Computing support to SeaBIOS.
In particular the patches add:
- a TPM driver for the Qemu's TPM TIS emulation (not yet in Qemu git)
- ACPI support for the TPM device (SSDT table)
- ACPI support for measurement logging (TCPA table)
- Support for initialzation of the TPM
- Support for the TCG BIOS extensions (1ah handler [ah = 0xbb])
(used by trusted grub; http://trousers.sourceforge.net/grub.html)
- Static Root of Trusted for Measurement (SRTM) support
- Support for S3 resume (sends command to TPM upon resume)
- TPM-specific menu for controlling aspects of the TPM
- [An optional test suite for the TIS interface]
All implementations necessarily follow specifications.
When all patches are applied the following services are available
- SSDT ACPI table for TPM support
- initialization of the TPM upon VM start and S3 resume
- Static root of trust for measurements (SRTM) that measures (some) data
of SeaBIOS in TCPA ACPI table
- 1ah interrupt handler offering APIs for measuring and sending commands to
the TPM (trusted grub uses them)
- User menu for controlling aspects of the state of the TPM
v7:
- adapted patches to checkout of 83012de (Aug 31)
- fixed compilation error reported by Andreas Niederl
v6:
- adapted patches to checkout of 8e30147 (Aug 9)
- use timeouts/durations for commands as reported by TPM
- following Andreas Niederl's suggestion regarding the ACPI SSDT
v5:
- adapted patches to checkout of 76b5e71 (June 21)
- bugfixes (see individual patches)
- added patch to support the transfer of Qemu-provided measurements via
firmware interface
v4:
- if ! has_working_tpm() now returns error code everywhere
- tis_test.c now also under LGPLv3
- in inthandler, pulled set_cf() out of switch and then only call it in
the default case where we need to indicate that a function is not
implemented
v3:
- some nits here and there
- calling timer_setup now after S3 resume
v2:
- following Kevin's comment
- refactoring code so that every patch compiles
Regards,
Stefan
2
11
QEMU does not provide a HPET block if it was configured with -no-hpet,
other machines SeaBIOS runs on may lack a HPET as well. Perform basic
checks the ID register for a reasonable vendor ID and a clock period
within the valid range, do not build the HPET table if that fails.
Signed-off-by: Jan Kiszka <jan.kiszka(a)siemens.com>
---
This allows to postpone the hpet_fw_cfg vs. ACPI discussion until we
have >1 HPET blocks and/or put them at non-standard addresses.
src/acpi.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/src/acpi.c b/src/acpi.c
index ea7b171..29160f4 100644
--- a/src/acpi.c
+++ b/src/acpi.c
@@ -158,6 +158,9 @@ struct acpi_20_hpet {
} PACKED;
#define ACPI_HPET_ADDRESS 0xFED00000UL
+#define HPET_ID 0x000
+#define HPET_PERIOD 0x004
+
/*
* SRAT (NUMA topology description) table
*/
@@ -464,7 +467,16 @@ build_ssdt(void)
static void*
build_hpet(void)
{
- struct acpi_20_hpet *hpet = malloc_high(sizeof(*hpet));
+ struct acpi_20_hpet *hpet;
+ const void *hpet_base = (void *)ACPI_HPET_ADDRESS;
+ u32 hpet_vendor = readl(hpet_base + HPET_ID) >> 16;
+ u32 hpet_period = readl(hpet_base + HPET_PERIOD);
+
+ if (hpet_vendor == 0 || hpet_vendor == 0xffff ||
+ hpet_period == 0 || hpet_period > 0x05F5E100)
+ return NULL;
+
+ hpet = malloc_high(sizeof(*hpet));
if (!hpet) {
warn_noalloc();
return NULL;
--
1.7.3.4
2
2
Re: [SeaBIOS] [PATCH 00/10] Xenstore communication support for Seabios
by Ian Campbell Aug. 30, 2011
by Ian Campbell Aug. 30, 2011
Aug. 30, 2011
On Mon, 2011-08-29 at 13:36 +0100, Daniel Castro wrote:
> On Mon, Aug 29, 2011 at 1:15 AM, Kevin O'Connor <kevin(a)koconnor.net> wrote:
> > On Thu, Aug 25, 2011 at 10:22:43AM +0100, Ian Campbell wrote:
> >> On Tue, 2011-08-23 at 21:10 -0400, Kevin O'Connor wrote:
> >> > It looks to me like this patch series adds capabilities that a later
> >> > patch series will use. The patch series itself looks okay to me
> >> > (though, I do find the multiple copyright statements in the middle of
> >> > xen.h confusing).
> >>
> >> That is a consequence of mashing bits of multiple Xen public headers
> >> into a single xen.h. We could fracture it into xen/*.h instead if that
> >> would be preferable?
> >
> > How about just moving all the copyright notices next to the license
> > text.
>
> I think it is important to be able to trace the header to a specific
> file in the xen headers. It will make it easier to read and
> understand.
That's certainly a good argument for keeping the comments which indicate
which file each definition came from. I'm not 100% sure of the legal
implications but I expect we could amalgamate all the copywrite
statements underneath the license statement, that would leave just a
single line comment at the head of each "file". e.g. instead of:
/******************************************************************************
* arch-x86/xen.h
*
* Guest OS interface to x86 Xen.
*
* Copyright (c) 2004-2006, K A Fraser
*/
It could be the much less intrusive:
/* arch-x86/xen.h: Guest OS interface to x86 Xen */
and the Copyright line would be in the original license header comment
with far less duplication (since many of them are the same).
Ian.
1
0
Re: [SeaBIOS] [PATCH 00/10] Xenstore communication support for Seabios
by Daniel Castro Aug. 29, 2011
by Daniel Castro Aug. 29, 2011
Aug. 29, 2011
On Mon, Aug 29, 2011 at 1:15 AM, Kevin O'Connor <kevin(a)koconnor.net> wrote:
> On Thu, Aug 25, 2011 at 10:22:43AM +0100, Ian Campbell wrote:
>> On Tue, 2011-08-23 at 21:10 -0400, Kevin O'Connor wrote:
>> > It looks to me like this patch series adds capabilities that a later
>> > patch series will use. The patch series itself looks okay to me
>> > (though, I do find the multiple copyright statements in the middle of
>> > xen.h confusing).
>>
>> That is a consequence of mashing bits of multiple Xen public headers
>> into a single xen.h. We could fracture it into xen/*.h instead if that
>> would be preferable?
>
> How about just moving all the copyright notices next to the license
> text.
I think it is important to be able to trace the header to a specific
file in the xen headers. It will make it easier to read and
understand.
>
> -Kevin
>
--
+-=====---------------------------+
| +---------------------------------+ | This space intentionally blank
for notetaking.
| | | Daniel Castro, |
| | | Consultant/Programmer.|
| | | U Andes |
+-------------------------------------+
1
0
Aug. 29, 2011
As part of Google Summer of Code we are in the process to add Block PV-drivers to
Seabios, in order to this, first we have to be able to communicate with xenstore
so we can exchange information before the front and back ends connect. To communicate
with xenstore we need to make seabios Xen-friendly so support for hypercalls has been
added to Seabios. In the next month, Seabios will become a front-end for the block devices,
connecting to dom0 back-end block device when used with Xen.
There is an issue, if you issue a query and the ring did not prepare the answer
fast enough, after the event signal hypercall, the ring will force a ring wait for
an event that will never arrive. For now this is solved by doing a dprintf after the
hypercall, this gives enough time to the ring.
This patch should be applied to Seabios and must be used with qemu-upstream with
xen4.1, please follow this guide for this:
http://wiki.xensource.com/xenwiki/QEMUUpstream
Some more documentation on this can be found here:
http://wiki.xensource.com/xenwiki/SeaBIOS
Daniel Castro (10):
Xen: Guest Handlers and Copyrights
Move PAGE_SHIFT to memmap.h
Xen: Use PAGE_SHIFT as a constant
Xen: Support for interdomain event channel
Xen: Support for HVM_op Hypercall
Xen: Support for memory_op Hypercall
Xen: Support for sched_op hypercall
Xen: Shared info for CPU yield support and xenbus protocol
Xen: Xenstore communication via xenbus
Xen: Xenstore example -do not apply
Makefile | 2 +-
src/bitops.h | 14 ++
src/memmap.h | 2 +
src/post.c | 2 +
src/virtio-ring.h | 2 +-
src/xen-xs.c | 251 +++++++++++++++++++++++++++++++++++++
src/xen-xs.h | 9 ++
src/xen.c | 20 +++-
src/xen.h | 357 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
9 files changed, 653 insertions(+), 6 deletions(-)
create mode 100644 src/bitops.h
create mode 100644 src/xen-xs.c
create mode 100644 src/xen-xs.h
--
1.7.4.1
3
13
HPET configuration in Seabios (was: Re: windows workload: many ept_violation and mmio exits)
by Jan Kiszka Aug. 29, 2011
by Jan Kiszka Aug. 29, 2011
Aug. 29, 2011
On 2011-08-28 20:54, Alexander Graf wrote:
>
> On 28.08.2011, at 02:42, Avi Kivity wrote:
>
>> On 08/26/2011 08:32 AM, ya su wrote:
>>> hi,Avi:
>>>
>>> I met the same problem, tons of hpet vm_exits(vector 209, fault
>>> address is in the guest vm's hpet mmio range), even I disable hpet
>>> device in win7 guest vm, it still produce a larget amount of vm_exits
>>> when trace-cmd ; I add -no-hpet to start the vm, it still has HPET
>>> device inside VM.
>>>
>>> Does that means the HPET device in VM does not depend on the
>>> emulated hpet device in qemu-kvm? Is there any way to disable the VM
>>> HPET device to prevent so many vm_exits? Thansk.
>>>
>>
>> Looks like a bug to me.
>
> IIRC disabling the HPET device doesn't remove the entry from the DSDT, no? So the guest OS might still think it's there while nothing responds (read returns -1).
Exactly. We have a fw_cfg interface in place for quite a while now
(though I wonder how the firmware is supposed to tell -no-hpet apart
from QEMU versions that don't provide this data - both return count =
255), but SeaBios still exposes one HPET block at a hard-coded address
unconditionally.
There was quite some discussion about the corresponding Seabios patches
back then but apparently no consensus was found. Re-reading it, I think
Kevin asked for passing the necessary DSDT fragments from QEMU to the
firmware instead of using a new, proprietary fw_cfg format. Is that
still the key requirement for any patch finally fixing this bug?
Jan
4
7
Signed-off-by: Sven Schnelle <svens(a)stackframe.org>
---
src/coreboot.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/coreboot.c b/src/coreboot.c
index 5926939..46f25f1 100644
--- a/src/coreboot.c
+++ b/src/coreboot.c
@@ -201,6 +201,7 @@ scan_tables(u32 start, u32 size)
copy_pir(p);
copy_mptable(p);
copy_acpi_rsdp(p);
+ copy_smbios(p);
}
}
--
1.7.5.4
2
5
On 8/4/2011 6:45 PM, Marc Jones wrote:
> On Thu, Aug 4, 2011 at 4:07 PM, Marc Jones<marcj303(a)gmail.com> wrote:
>> On Wed, Aug 3, 2011 at 5:22 PM, Kevin O'Connor<kevin(a)koconnor.net> wrote:
>>> On Wed, Aug 03, 2011 at 02:47:19PM -0600, Marc Jones wrote:
>>>> I'm having a problem with booting a usb flash key that worked
>>>> previously in version 0.6.2. The USB device is identified but then
>>>> gets a read error when booting from it. This is the Persimmon, sb800
>>>> platform. Any thoughts on what might have changed to cause this?
>>> Could it be just a sporatic failure? The only real USB changes since
>>> v0.6.2 were book keeping changes for 'struct pcidevice' - I don't
>>> think they would cause drive read errors. Can you post the log?
>>>
>>> -Kevin
>>>
>>
>> This is the error I am getting:
>>
>> enter handle_13:
>> a=00204280 b=00002400 c=0000000a d=00000080 ds=0000 es=07c0 ss=0000
>> si=00007ba2 di=00002000 bp=000007be sp=00007ba2 cs=07c0 ip=0147 f=0202
>> disk_op d=0x0000d5e0 lba=2097280 buf=0x0000a000 count=1 cmd=2
>> ehci_send_bulk qh=0x0009ff00 dir=0 data=0x0009fad8 size=31
>> ehci_send_bulk qh=0x0009ff80 dir=128 data=0x0000a000 size=512
>> ehci_send_bulk qh=0x0009ff80 dir=128 data=0x0009faf7 size=13
>> enter handle_13:
>> a=00204281 b=00002400 c=00000000 d=00000780 ds=0000 es=07e0 ss=0000
>> si=00007ba2 di=00002000 bp=000007be sp=00007ba2 cs=07c0 ip=0147 f=0206
>> disk_op d=0x0000d5e0 lba=2097281 buf=0x0000a200 count=1 cmd=2
>> ehci_send_bulk qh=0x0009ff00 dir=0 data=0x0009fad8 size=31
>> WARNING - Timeout at ehci_wait_td:570!
>> ehci_send_bulk failed
>> USB transmission failed
>> invalid extended_access:143:
>> a=00204281 b=00002400 c=00000000 d=00000780 ds=0000 es=07e0 ss=0000
>> si=00007ba2 di=00002000 bp=000007be sp=00007ba2 cs=07c0 ip=0147 f=0206
>>
>> I now suspect that this is a coreboot problem. The old working seabios
>> with current coreboot fails as well.
>
> I bisected it to this change in coreboot:
> 8fed77ae4c46122859d0718678e54546e126d4bc is the first bad commit
> commit 8fed77ae4c46122859d0718678e54546e126d4bc
> Author: Scott Duplichan<scott(a)notabs.org>
> Date: Sat Jun 18 10:46:45 2011 -0500
>
> ASRock E350M1: Configure SB800 GPP ports to support onboard pcie nic
>
> Scott Duplichan's patch from the mailing list:
> sb800 cimx wrapper: Run the complete sb800 cimx sbBeforePciInit() function
> once, after determining device 0x15 function enables.
>
> 1) Update the asrock e350m1 devicetree.cb to match the hardware.
> 2) Change the way the sb800 cimx wrapper code works. The original
> cimx code calls sb800 cimx function sbBeforePciInit() once. When
> ported to coreboot, the gpp component of this function was called
> once for each gpp port, as the gpp port's enable/disable state
> became known. A 05/15/2011 change makes the early gpp code run
> only once, triggered by processing the 4th gpp port. This method
> is not general enough because the 4th gpp port is not enabled on
> all boards. With the current change, the early gpp code runs when
> the first gpp port is processed. If any gpp ports are enabled, the
> first must be enabled. Tested with Win7 and linux on asrock e350m1.
> This change will also affect amd inagua, and has not been tested
> on that board.
>
> Change-Id: I93d44c216bfcab3c3a8fbb79d23dab43a65850e6
> Signed-off-by: Scott Duplichan<scott(a)notabs.org>
> Acked-by: Marshall Buschman<mbuschman(a)lucidmachines.com>
> Reviewed-on: http://review.coreboot.org/44
> Tested-by: build bot (Jenkins)
> Reviewed-by: Cristian Măgherușan-Stanciu<cristi.magherusan(a)gmail.com>
>
> I'll see if I can figure out why it breaks stuff.
>
> Marshall,
> Can you try before and after this change?
>
> Marc
>
>
>
>
Understood. I'll roll that back and see if I can still reproduce the USB
error.
-Marshall
1
1
Re: [SeaBIOS] [PATCH V6 1/9] Add an implementation of a TPM TIS driver
by Stefan Berger Aug. 19, 2011
by Stefan Berger Aug. 19, 2011
Aug. 19, 2011
On 08/19/2011 01:33 PM, Marc Jones wrote:
> On Wed, Aug 10, 2011 at 10:51 AM, Stefan Berger
> <stefanb(a)linux.vnet.ibm.com> wrote:
>> This patch adds an implementation of a TPM TIS driver for the TPM TIS
>> emulation supported by Qemu (patches posted, not in git yet). Usage of the
>> driver is broken up into several functions. The driver is cleanly separated
>> from the rest of the code through an interface holding pointers to the driver's
>> functions. A client using this driver first probes whether the TPM TIS
>> interface is available (probe function) and then invokes the interface
>> function to initialze the interface and send requests and receive responses.
>>
>> Possible future extensions *could* include a virtio interface for the TPM
>> with a corresponding driver here.
>>
>> v6:
>> - reworked timeouts; not hardcoded anymore
>>
>> v5:
>> - introducing a configurable threashold as part of the driver interface
>> structure below which the TPM is used for calculating the sha1
>>
>> v2:
>> - adapted tpm_drivers.c to be under LGPLv3
>>
>> Signed-off-by: Stefan Berger<stefanb(a)linux.vnet.ibm.com>
> Hi Stefan,
>
> Please excuse my TPM ignorance, but is the emulation of a specific
> hardware device or has the TCG defined the registers etc for TPM
> hardware?
>
Qemu patches provide the emulation of the specific hardware device that
TCG (trusted comp. group) has defined the registers for. SeaBIOS
implements a driver for it.
Stefan
1
0