[SeaBIOS] [PATCH] memory hotplug

Lai Jiangshan laijs at cn.fujitsu.com
Mon Aug 29 11:24:31 CEST 2011


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
> + at 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    ". at ..\/._" */
> -    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.. at ." */
> -    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.. at .." */
> -    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    "_ at ..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. at ..\/" */
> +    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    ". at ..\/._" */
> +    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    ". at ..\/._" */
> -    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    ". at ...\/." */
> +    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    ".. at ...\/" */
> +    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    ".. at ..\/." */
> +    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    "... at ..\/" */
> +    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 at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 




More information about the SeaBIOS mailing list