All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Vasilis Liaskovitis <vasilis.liaskovitis@profitbricks.com>
Cc: kvm@vger.kernel.org, seabios@seabios.org
Subject: Re: [PATCH][SeaBIOS] memory hotplug
Date: Mon, 29 Aug 2011 17:24:31 +0800	[thread overview]
Message-ID: <4E5B5ACF.5090904@cn.fujitsu.com> (raw)
In-Reply-To: <20110811143938.GA15036@dhcp-192-168-178-175.profitbricks.localdomain>

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@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


  reply	other threads:[~2011-08-29  9:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-11 14:39 [PATCH][SeaBIOS] memory hotplug Vasilis Liaskovitis
2011-08-29  9:24 ` Lai Jiangshan [this message]
2011-09-06  8:07   ` Vasilis Liaskovitis
     [not found]     ` <4E674059.9070307@cn.fujitsu.com>
2011-09-08 16:21       ` [PATCH] " Vasilis Liaskovitis
2012-03-15 12:01 ` [PATCH][SeaBIOS] " Gleb Natapov
2012-03-16 14:09   ` Vasilis Liaskovitis
2012-03-16 14:31     ` Igor Mammedov

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=4E5B5ACF.5090904@cn.fujitsu.com \
    --to=laijs@cn.fujitsu.com \
    --cc=kvm@vger.kernel.org \
    --cc=seabios@seabios.org \
    --cc=vasilis.liaskovitis@profitbricks.com \
    /path/to/YOUR_REPLY

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

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