All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][HVM] fix PCI interrupt routing via ACPI
@ 2006-10-12 18:01 David Lively
  0 siblings, 0 replies; 12+ messages in thread
From: David Lively @ 2006-10-12 18:01 UTC (permalink / raw)
  To: xen-devel

[-- Attachment #1: Type: text/plain, Size: 2414 bytes --]

Hi -

  The attached patch gets PCI interrupt routing working with ACPI.
The basic problem was we weren't specifying the correct _ADR for
the PCI-ISA bridge in the ACPI DSDT.  (It's the PCI-ISA bridge that
implements PCI interrupt routing.  Its address is device 1, fn 0 on the
parent PCI bus -- see the _ADR change in the patch.)  This makes attempts
to program the PCI interrupt routing (i.e., to assign a particular IRQ 
to one
of the four PCI "LNK" devices) write into the correct device's PCI config
space.  (These writes were going into the PCI-host bridge's config space 
...)

  But that fix alone causes even more grief with ACPI-compliant guests
that use (the I/O) APIC.  What happens is the fixed PRTA PCI routing table
returned for APIC mode doesn't reference the LNK devices (which are still
defined in ACPI), and so calls their _DIS (disable) methods in ACPI, which
effectively stops PCI devices from interrupting.  There are a couple of 
alternatives
for fixing this.  I think the best one (which happens to be easiest, and 
what I've
implemented in this patch) is to *always* return the programmable PRTP
routing table, even in APIC mode.  That way the LNK devices are always used
so we don't need to detect that they're not used.

  This also has the advantage of allowing APIC-mode guests to better manage
IRQ conflicts.  Normally (on real hardware) the APIC-mode PRT table maps
the four PCI interrupts to IRQs > 15.  But QEMU is (essentially, for 
now) wired
straight into a virtual PIC -- we can't raise IRQs > 15, so the old 
APIC-mode
PRT was mapping them to IRQS < 16, subjecting them to the possible IRQ-
sharing that the PIC-mode table allows them to adjust via the LNK devices.

  Oh yeah, the patch also corrects a typo in LNKA's _CRS method.  Surely 
this
should be referencing PIRA, not PIRB (see the other LNKx's _CRS methods).

  This combination of things gets rid of complaints about not finding IRQs
for some PCI devices from several ACPI-compliant guests, including Win2003
and RHEL4-64.  It also seemed to fix some more mysterious hang I was seeing
(on xen-unstable only) when trying to boot certain configs with 
ACPI-compliant
guests.

Dave

P.S. The second attachment is a version of the fix that applies after 
the DSDT
fix from qing.he@intel.com.

P.P.S. Keir -- should we be submitting the patched AML (acpi_dsdt.c) as 
well?
I did, but wasn't sure of the convention ...


[-- Attachment #2: acpi-bios-pci-rt-fixes.patch --]
[-- Type: text/x-patch, Size: 49220 bytes --]

Fixed PCI interrupt routing in ACPI BIOS:
(a) Corrected PCI interrupt router (i.e., the PIIX3 PCI-ISA
     bridge) device address (on PCI bus 0) to dev 1, fn 0.
     Previously it was writing into the PCI-host
     bridge's config space (not sure what that did, if anything).
(b) Fixed typo in LNKA's _CRS method.  This should be
     reading PIRA, not PIRB (see other LNKx _CRS methods).
(c) Started returning the dynamic PCI interrupt routing table
     (i.e., the one with the LNKx devices) even in APIC mode.
     The QEMU PIIX3 emulation always looks in the PIIX3's
     PCI config space when raising PCI interrupts, and it sees
     disabled LNKx devices if they're not used in the PCI
     routing table, and so fails to raise interrupts.  We avoid
     this problem by always providing the LNKx devices, even
     for guests in APIC mode.  This should also help APIC-
     mode guests manage IRQ conflicts since QEMU really
     provides only 16 IRQ outputs.
(d) Listed 8 PCI slots (up from 4) in PCI bus description.
     Should probably extend this to 32 (embedded slot 0,
     and slots 9-31) since the PCI namespace allows it.

Fixes various boot-time hangs of Windows 2003 with ACPI HAL.
Also gets rid of some boot-time complaints from both ACPI-Windows and Linux.

Signed-off-by: David Lively <dlively@virtualiron.com>

Index: xen-unstable/tools/firmware/acpi/acpi_dsdt.asl
===================================================================
--- xen-unstable.orig/tools/firmware/acpi/acpi_dsdt.asl	2006-10-10 20:54:02.000000000 -0400
+++ xen-unstable/tools/firmware/acpi/acpi_dsdt.asl	2006-10-10 20:54:50.000000000 -0400
@@ -50,12 +50,6 @@
     })
 
 
-    Name(PICD, 0)
-
-    Method(_PIC, 1) { 
- 
-    Store(Arg0, PICD) 
-    }
     Scope (\_SB)
     {
        /* Fix HCT test for 0x400 pci memory - need to report low 640 MB mem as motherboard resource            */
@@ -175,7 +169,7 @@
                 }
 
                 Method(_CRS) {
-                        And(PIRB, 0x0f, Local0) 
+                        And(PIRA, 0x0f, Local0) 
                         ShiftLeft(0x1, Local0, IRQV) 
                         Return(BUFB) 
                 } 
@@ -294,49 +288,54 @@
                         Store(Local0, PIRD) 
                  } // Method(_SRS)
         }
-        Method(_PRT,0) {
-               If(PICD) {Return(PRTA)}  
-               Return (PRTP)  
-               } // end _PRT
-
-        Name(PRTP, Package(){
-                        Package(){0x0000ffff, 0, \_SB.PCI0.LNKA, 0}, // Slot 1, INTA
-                        Package(){0x0000ffff, 1, \_SB.PCI0.LNKB, 0}, // Slot 1, INTB
-                        Package(){0x0000ffff, 2, \_SB.PCI0.LNKC, 0}, // Slot 1, INTC
-                        Package(){0x0000ffff, 3, \_SB.PCI0.LNKD, 0}, // Slot 1, INTD
-
-                        Package(){0x0001ffff, 0, \_SB.PCI0.LNKB, 0}, // Slot 2, INTB
-                        Package(){0x0001ffff, 1, \_SB.PCI0.LNKC, 0}, // Slot 2, INTC
-                        Package(){0x0001ffff, 2, \_SB.PCI0.LNKD, 0}, // Slot 2, INTD
-                        Package(){0x0001ffff, 3, \_SB.PCI0.LNKA, 0}, // Slot 2, INTA
-                        
-                        Package(){0x0002ffff, 0, \_SB.PCI0.LNKC, 0}, // Slot 3, INTC
-                        Package(){0x0002ffff, 1, \_SB.PCI0.LNKD, 0}, // Slot 3, INTD
-                        Package(){0x0002ffff, 2, \_SB.PCI0.LNKA, 0}, // Slot 3, INTA
-                        Package(){0x0002ffff, 3, \_SB.PCI0.LNKB, 0}, // Slot 3, INTB
-                        
-                        Package(){0x0003ffff, 0, \_SB.PCI0.LNKD, 0}, // Slot 2, INTD
-                        Package(){0x0003ffff, 1, \_SB.PCI0.LNKA, 0}, // Slot 2, INTA
-                        Package(){0x0003ffff, 2, \_SB.PCI0.LNKB, 0}, // Slot 2, INTB
-                        Package(){0x0003ffff, 3, \_SB.PCI0.LNKC, 0}, // Slot 2, INTC
-                        
-                        }
-            )
-        Name(PRTA, Package(){
-                        Package(){0x0001ffff, 0, 0, 5}, // Device 1, INTA
-
-                        Package(){0x0002ffff, 0, 0, 7},  // Device 2, INTA
-                       
-                        Package(){0x0003ffff, 0, 0, 10}, // Device 3, INTA
 
-                        Package(){0x0004ffff, 0, 0, 11},  // Device 4, INTA                                
-                        
-                        }
-            )
+	Name(_PRT, Package() {
+		Package() { 0x0001ffff, 0, LNKA, 0 }, // Slot 1, Pin 0 -> LNKA
+		Package() { 0x0001ffff, 1, LNKB, 0 }, // Slot 1, Pin 1 -> LNKB
+		Package() { 0x0001ffff, 2, LNKC, 0 }, // Slot 1, Pin 2 -> LNKC
+		Package() { 0x0001ffff, 3, LNKD, 0 }, // Slot 1, Pin 3 -> LNKD
+
+		Package() { 0x0002ffff, 0, LNKB, 0 }, // Slot 2, Pin 0 -> LNKB
+		Package() { 0x0002ffff, 1, LNKC, 0 }, // Slot 2, Pin 1 -> LNKC
+		Package() { 0x0002ffff, 2, LNKD, 0 }, // Slot 2, Pin 2 -> LNKD
+		Package() { 0x0002ffff, 3, LNKA, 0 }, // Slot 2, Pin 3 -> LNKA
+
+		Package() { 0x0003ffff, 0, LNKC, 0 }, // Slot 3, Pin 0 -> LNKC
+		Package() { 0x0003ffff, 1, LNKD, 0 }, // Slot 3, Pin 1 -> LNKD
+		Package() { 0x0003ffff, 2, LNKA, 0 }, // Slot 3, Pin 2 -> LNKA
+		Package() { 0x0003ffff, 3, LNKB, 0 }, // Slot 3, Pin 3 -> LNKB
+
+		Package() { 0x0004ffff, 0, LNKD, 0 }, // Slot 4, Pin 0 -> LNKD
+		Package() { 0x0004ffff, 1, LNKA, 0 }, // Slot 4, Pin 1 -> LNKA
+		Package() { 0x0004ffff, 2, LNKB, 0 }, // Slot 4, Pin 2 -> LNKB
+		Package() { 0x0004ffff, 3, LNKC, 0 }, // Slot 4, Pin 3 -> LNKC
+
+		Package() { 0x0005ffff, 0, LNKA, 0 }, // Slot 5, Pin 0 -> LNKA
+		Package() { 0x0005ffff, 1, LNKB, 0 }, // Slot 5, Pin 1 -> LNKB
+		Package() { 0x0005ffff, 2, LNKC, 0 }, // Slot 5, Pin 2 -> LNKC
+		Package() { 0x0005ffff, 3, LNKD, 0 }, // Slot 5, Pin 3 -> LNKD
+
+		Package() { 0x0006ffff, 0, LNKB, 0 }, // Slot 6, Pin 0 -> LNKB
+		Package() { 0x0006ffff, 1, LNKC, 0 }, // Slot 6, Pin 1 -> LNKC
+		Package() { 0x0006ffff, 2, LNKD, 0 }, // Slot 6, Pin 2 -> LNKD
+		Package() { 0x0006ffff, 3, LNKA, 0 }, // Slot 6, Pin 3 -> LNKA
+
+		Package() { 0x0007ffff, 0, LNKC, 0 }, // Slot 7, Pin 0 -> LNKC
+		Package() { 0x0007ffff, 1, LNKD, 0 }, // Slot 7, Pin 1 -> LNKD
+		Package() { 0x0007ffff, 2, LNKA, 0 }, // Slot 7, Pin 2 -> LNKA
+		Package() { 0x0007ffff, 3, LNKB, 0 }, // Slot 7, Pin 3 -> LNKB
+
+		Package() { 0x0008ffff, 0, LNKD, 0 }, // Slot 8, Pin 0 -> LNKD
+		Package() { 0x0008ffff, 1, LNKA, 0 }, // Slot 8, Pin 1 -> LNKA
+		Package() { 0x0008ffff, 2, LNKB, 0 }, // Slot 8, Pin 2 -> LNKB
+		Package() { 0x0008ffff, 3, LNKC, 0 }, // Slot 8, Pin 3 -> LNKC
+	})
+
             
+	    // PCI-to-ISA bridge
             Device (ISA)
             {
-                Name (_ADR, 0x00000000) /* device id, PCI bus num, ... */
+                Name (_ADR, 0x00010000)  // PCI Device 1, Function 0
  
             OperationRegion(PIRQ, PCI_Config, 0x60, 0x4)
                         Scope(\) {
Index: xen-unstable/tools/firmware/acpi/acpi_dsdt.c
===================================================================
--- xen-unstable.orig/tools/firmware/acpi/acpi_dsdt.c	2006-10-10 20:54:44.000000000 -0400
+++ xen-unstable/tools/firmware/acpi/acpi_dsdt.c	2006-10-10 20:55:14.000000000 -0400
@@ -1,19 +1,19 @@
 /*
  * 
  * Intel ACPI Component Architecture
- * ASL Optimizing Compiler / AML Disassembler version 20050513 [Jun  8 2005]
+ * ASL Optimizing Compiler / AML Disassembler version 20050513 [Sep 11 2006]
  * Copyright (C) 2000 - 2005 Intel Corporation
  * Supports ACPI Specification Revision 3.0
  * 
- * Compilation of "acpi_dsdt.asl" - Mon Aug 14 18:15:09 2006
+ * Compilation of "acpi_dsdt.asl" - Tue Oct 10 20:55:13 2006
  * 
  * C source code output
  *
  */
 unsigned char AmlCode[] = 
 {
-    0x44,0x53,0x44,0x54,0xBA,0x08,0x00,0x00,  /* 00000000    "DSDT...." */
-    0x01,0x1D,0x49,0x4E,0x54,0x45,0x4C,0x00,  /* 00000008    "..INTEL." */
+    0x44,0x53,0x44,0x54,0x4C,0x09,0x00,0x00,  /* 00000000    "DSDTL..." */
+    0x01,0x02,0x49,0x4E,0x54,0x45,0x4C,0x00,  /* 00000008    "..INTEL." */
     0x69,0x6E,0x74,0x2D,0x78,0x65,0x6E,0x00,  /* 00000010    "int-xen." */
     0xD6,0x07,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
     0x13,0x05,0x05,0x20,0x08,0x50,0x4D,0x42,  /* 00000020    "... .PMB" */
@@ -32,265 +32,283 @@
     0x0B,0x43,0x50,0x55,0x33,0x03,0x00,0x00,  /* 00000088    ".CPU3..." */
     0x00,0x00,0x00,0x08,0x5F,0x53,0x35,0x5F,  /* 00000090    "...._S5_" */
     0x12,0x08,0x04,0x0A,0x07,0x0A,0x07,0x00,  /* 00000098    "........" */
-    0x00,0x08,0x50,0x49,0x43,0x44,0x00,0x14,  /* 000000A0    "..PICD.." */
-    0x0C,0x5F,0x50,0x49,0x43,0x01,0x70,0x68,  /* 000000A8    "._PIC.ph" */
-    0x50,0x49,0x43,0x44,0x10,0x45,0x80,0x5F,  /* 000000B0    "PICD.E._" */
-    0x53,0x42,0x5F,0x5B,0x82,0x49,0x04,0x4D,  /* 000000B8    "SB_[.I.M" */
-    0x45,0x4D,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 000000C0    "EM0._HID" */
-    0x0C,0x41,0xD0,0x0C,0x02,0x08,0x5F,0x43,  /* 000000C8    ".A...._C" */
-    0x52,0x53,0x11,0x33,0x0A,0x30,0x8A,0x2B,  /* 000000D0    "RS.3.0.+" */
-    0x00,0x00,0x0D,0x03,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
+    0x00,0x10,0x4A,0x8A,0x5F,0x53,0x42,0x5F,  /* 000000A0    "..J._SB_" */
+    0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D,0x30,  /* 000000A8    "[.I.MEM0" */
+    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000000B0    "._HID.A." */
+    0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 000000B8    "..._CRS." */
+    0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00,0x0D,  /* 000000C0    "3.0.+..." */
+    0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "........" */
+    0x00,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
-    0x00,0x00,0x00,0x00,0xFF,0xFF,0x09,0x00,  /* 000000E8    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F0    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,  /* 000000F8    "........" */
-    0x00,0x00,0x00,0x00,0x79,0x00,0x5B,0x82,  /* 00000100    "....y.[." */
-    0x42,0x7B,0x50,0x43,0x49,0x30,0x08,0x5F,  /* 00000108    "B{PCI0._" */
-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03,  /* 00000110    "HID.A..." */
-    0x08,0x5F,0x55,0x49,0x44,0x00,0x08,0x5F,  /* 00000118    "._UID.._" */
-    0x41,0x44,0x52,0x00,0x08,0x5F,0x42,0x42,  /* 00000120    "ADR.._BB" */
-    0x4E,0x00,0x5B,0x80,0x50,0x49,0x52,0x50,  /* 00000128    "N.[.PIRP" */
-    0x02,0x0A,0x3C,0x0A,0x10,0x5B,0x81,0x24,  /* 00000130    "..<..[.$" */
-    0x50,0x49,0x52,0x50,0x01,0x49,0x52,0x51,  /* 00000138    "PIRP.IRQ" */
-    0x33,0x03,0x49,0x52,0x51,0x35,0x05,0x49,  /* 00000140    "3.IRQ5.I" */
-    0x52,0x51,0x37,0x07,0x49,0x52,0x51,0x39,  /* 00000148    "RQ7.IRQ9" */
-    0x09,0x49,0x52,0x51,0x41,0x0A,0x49,0x52,  /* 00000150    ".IRQA.IR" */
-    0x51,0x42,0x0B,0x14,0x44,0x08,0x5F,0x43,  /* 00000158    "QB..D._C" */
-    0x52,0x53,0x00,0x08,0x50,0x52,0x54,0x30,  /* 00000160    "RS..PRT0" */
-    0x11,0x42,0x07,0x0A,0x6E,0x88,0x0D,0x00,  /* 00000168    ".B..n..." */
-    0x02,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,  /* 00000170    "........" */
-    0x00,0x00,0x00,0x00,0x01,0x47,0x01,0xF8,  /* 00000178    ".....G.." */
-    0x0C,0xF8,0x0C,0x01,0x08,0x88,0x0D,0x00,  /* 00000180    "........" */
-    0x01,0x0C,0x03,0x00,0x00,0x00,0x00,0xF7,  /* 00000188    "........" */
-    0x0C,0x00,0x00,0xF8,0x0C,0x88,0x0D,0x00,  /* 00000190    "........" */
-    0x01,0x0C,0x03,0x00,0x00,0x00,0x0D,0xFF,  /* 00000198    "........" */
-    0xFF,0x00,0x00,0x00,0xF3,0x87,0x17,0x00,  /* 000001A0    "........" */
-    0x00,0x0D,0x03,0x00,0x00,0x00,0x00,0x00,  /* 000001A8    "........" */
-    0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xF1,0x00,  /* 000001B0    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x87,  /* 000001B8    "........" */
-    0x17,0x00,0x00,0x0D,0x03,0x00,0x00,0x00,  /* 000001C0    "........" */
-    0x00,0x00,0x00,0x00,0xF2,0xFF,0x0F,0x00,  /* 000001C8    "........" */
-    0xF2,0x00,0x00,0x00,0x00,0x00,0x10,0x00,  /* 000001D0    "........" */
-    0x00,0x79,0x00,0xA4,0x50,0x52,0x54,0x30,  /* 000001D8    ".y..PRT0" */
-    0x08,0x42,0x55,0x46,0x41,0x11,0x09,0x0A,  /* 000001E0    ".BUFA..." */
-    0x06,0x23,0xF8,0xDC,0x18,0x79,0x00,0x08,  /* 000001E8    ".#...y.." */
-    0x42,0x55,0x46,0x42,0x11,0x09,0x0A,0x06,  /* 000001F0    "BUFB...." */
-    0x23,0x00,0x00,0x18,0x79,0x00,0x8B,0x42,  /* 000001F8    "#...y..B" */
-    0x55,0x46,0x42,0x01,0x49,0x52,0x51,0x56,  /* 00000200    "UFB.IRQV" */
-    0x08,0x42,0x55,0x46,0x43,0x11,0x07,0x0A,  /* 00000208    ".BUFC..." */
-    0x04,0x05,0x07,0x0A,0x0B,0x8C,0x42,0x55,  /* 00000210    "......BU" */
-    0x46,0x43,0x01,0x50,0x49,0x51,0x41,0x8C,  /* 00000218    "FC.PIQA." */
-    0x42,0x55,0x46,0x43,0x01,0x50,0x49,0x51,  /* 00000220    "BUFC.PIQ" */
-    0x42,0x8C,0x42,0x55,0x46,0x43,0x01,0x50,  /* 00000228    "B.BUFC.P" */
-    0x49,0x51,0x43,0x8C,0x42,0x55,0x46,0x43,  /* 00000230    "IQC.BUFC" */
-    0x01,0x50,0x49,0x51,0x44,0x5B,0x82,0x48,  /* 00000238    ".PIQD[.H" */
-    0x08,0x4C,0x4E,0x4B,0x41,0x08,0x5F,0x48,  /* 00000240    ".LNKA._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,  /* 00000248    "ID.A...." */
-    0x5F,0x55,0x49,0x44,0x01,0x14,0x1C,0x5F,  /* 00000250    "_UID..._" */
-    0x53,0x54,0x41,0x00,0x7B,0x50,0x49,0x52,  /* 00000258    "STA.{PIR" */
-    0x41,0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,  /* 00000260    "A..`...`" */
-    0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,  /* 00000268    "........" */
-    0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,  /* 00000270    "...._PRS" */
-    0x00,0xA4,0x42,0x55,0x46,0x41,0x14,0x11,  /* 00000278    "..BUFA.." */
-    0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,0x49,  /* 00000280    "_DIS.}PI" */
-    0x52,0x41,0x0A,0x80,0x50,0x49,0x52,0x41,  /* 00000288    "RA..PIRA" */
-    0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,  /* 00000290    ".._CRS.{" */
-    0x50,0x49,0x52,0x42,0x0A,0x0F,0x60,0x79,  /* 00000298    "PIRB..`y" */
-    0x01,0x60,0x49,0x52,0x51,0x56,0xA4,0x42,  /* 000002A0    ".`IRQV.B" */
-    0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,  /* 000002A8    "UFB.._SR" */
-    0x53,0x01,0x8B,0x68,0x01,0x49,0x52,0x51,  /* 000002B0    "S..h.IRQ" */
-    0x31,0x82,0x49,0x52,0x51,0x31,0x60,0x76,  /* 000002B8    "1.IRQ1`v" */
-    0x60,0x70,0x60,0x50,0x49,0x52,0x41,0x5B,  /* 000002C0    "`p`PIRA[" */
-    0x82,0x49,0x08,0x4C,0x4E,0x4B,0x42,0x08,  /* 000002C8    ".I.LNKB." */
-    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,  /* 000002D0    "_HID.A.." */
-    0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,  /* 000002D8    ".._UID.." */
-    0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,  /* 000002E0    ".._STA.{" */
-    0x50,0x49,0x52,0x42,0x0A,0x80,0x60,0xA0,  /* 000002E8    "PIRB..`." */
-    0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,  /* 000002F0    "..`....." */
-    0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,  /* 000002F8    "......._" */
-    0x50,0x52,0x53,0x00,0xA4,0x42,0x55,0x46,  /* 00000300    "PRS..BUF" */
-    0x41,0x14,0x11,0x5F,0x44,0x49,0x53,0x00,  /* 00000308    "A.._DIS." */
-    0x7D,0x50,0x49,0x52,0x42,0x0A,0x80,0x50,  /* 00000310    "}PIRB..P" */
-    0x49,0x52,0x42,0x14,0x1A,0x5F,0x43,0x52,  /* 00000318    "IRB.._CR" */
-    0x53,0x00,0x7B,0x50,0x49,0x52,0x42,0x0A,  /* 00000320    "S.{PIRB." */
-    0x0F,0x60,0x79,0x01,0x60,0x49,0x52,0x51,  /* 00000328    ".`y.`IRQ" */
-    0x56,0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,  /* 00000330    "V.BUFB.." */
-    0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01,  /* 00000338    "_SRS..h." */
-    0x49,0x52,0x51,0x31,0x82,0x49,0x52,0x51,  /* 00000340    "IRQ1.IRQ" */
-    0x31,0x60,0x76,0x60,0x70,0x60,0x50,0x49,  /* 00000348    "1`v`p`PI" */
-    0x52,0x42,0x5B,0x82,0x49,0x08,0x4C,0x4E,  /* 00000350    "RB[.I.LN" */
-    0x4B,0x43,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000358    "KC._HID." */
-    0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,  /* 00000360    "A...._UI" */
-    0x44,0x0A,0x03,0x14,0x1C,0x5F,0x53,0x54,  /* 00000368    "D...._ST" */
-    0x41,0x00,0x7B,0x50,0x49,0x52,0x43,0x0A,  /* 00000370    "A.{PIRC." */
-    0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,  /* 00000378    ".`...`.." */
-    0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,  /* 00000380    "........" */
-    0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,  /* 00000388    ".._PRS.." */
-    0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44,  /* 00000390    "BUFA.._D" */
-    0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x43,  /* 00000398    "IS.}PIRC" */
-    0x0A,0x80,0x50,0x49,0x52,0x43,0x14,0x1A,  /* 000003A0    "..PIRC.." */
-    0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49,  /* 000003A8    "_CRS.{PI" */
-    0x52,0x43,0x0A,0x0F,0x60,0x79,0x01,0x60,  /* 000003B0    "RC..`y.`" */
-    0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46,  /* 000003B8    "IRQV.BUF" */
-    0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,  /* 000003C0    "B.._SRS." */
-    0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82,  /* 000003C8    ".h.IRQ1." */
-    0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70,  /* 000003D0    "IRQ1`v`p" */
-    0x60,0x50,0x49,0x52,0x43,0x5B,0x82,0x49,  /* 000003D8    "`PIRC[.I" */
-    0x08,0x4C,0x4E,0x4B,0x44,0x08,0x5F,0x48,  /* 000003E0    ".LNKD._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,  /* 000003E8    "ID.A...." */
-    0x5F,0x55,0x49,0x44,0x0A,0x04,0x14,0x1C,  /* 000003F0    "_UID...." */
-    0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49,  /* 000003F8    "_STA.{PI" */
-    0x52,0x44,0x0A,0x80,0x60,0xA0,0x08,0x93,  /* 00000400    "RD..`..." */
-    0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,  /* 00000408    "`......." */
-    0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,  /* 00000410    "....._PR" */
-    0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14,  /* 00000418    "S..BUFA." */
-    0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,  /* 00000420    "._DIS.}P" */
-    0x49,0x52,0x44,0x0A,0x80,0x50,0x49,0x52,  /* 00000428    "IRD..PIR" */
-    0x44,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,  /* 00000430    "D.._CRS." */
-    0x7B,0x50,0x49,0x52,0x44,0x0A,0x0F,0x60,  /* 00000438    "{PIRD..`" */
-    0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4,  /* 00000440    "y.`IRQV." */
-    0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,  /* 00000448    "BUFB.._S" */
-    0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52,  /* 00000450    "RS..h.IR" */
-    0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60,  /* 00000458    "Q1.IRQ1`" */
-    0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x44,  /* 00000460    "v`p`PIRD" */
-    0x14,0x16,0x5F,0x50,0x52,0x54,0x00,0xA0,  /* 00000468    ".._PRT.." */
-    0x0A,0x50,0x49,0x43,0x44,0xA4,0x50,0x52,  /* 00000470    ".PICD.PR" */
-    0x54,0x41,0xA4,0x50,0x52,0x54,0x50,0x08,  /* 00000478    "TA.PRTP." */
-    0x50,0x52,0x54,0x50,0x12,0x43,0x0E,0x10,  /* 00000480    "PRTP.C.." */
-    0x12,0x0B,0x04,0x0B,0xFF,0xFF,0x00,0x4C,  /* 00000488    ".......L" */
-    0x4E,0x4B,0x41,0x00,0x12,0x0B,0x04,0x0B,  /* 00000490    "NKA....." */
-    0xFF,0xFF,0x01,0x4C,0x4E,0x4B,0x42,0x00,  /* 00000498    "...LNKB." */
-    0x12,0x0C,0x04,0x0B,0xFF,0xFF,0x0A,0x02,  /* 000004A0    "........" */
-    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0C,0x04,  /* 000004A8    "LNKC...." */
-    0x0B,0xFF,0xFF,0x0A,0x03,0x4C,0x4E,0x4B,  /* 000004B0    ".....LNK" */
-    0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 000004B8    "D......." */
-    0x01,0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,  /* 000004C0    "...LNKB." */
-    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 000004C8    "........" */
-    0x01,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,  /* 000004D0    ".LNKC..." */
-    0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x02,  /* 000004D8    "........" */
-    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,  /* 000004E0    "LNKD...." */
-    0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x03,0x4C,  /* 000004E8    ".......L" */
-    0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,  /* 000004F0    "NKA....." */
-    0xFF,0xFF,0x02,0x00,0x00,0x4C,0x4E,0x4B,  /* 000004F8    ".....LNK" */
-    0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 00000500    "C......." */
-    0x02,0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000508    "...LNKD." */
-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x02,0x00,  /* 00000510    "........" */
-    0x0A,0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000518    "..LNKA.." */
-    0x0E,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,  /* 00000520    "........" */
-    0x03,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,  /* 00000528    ".LNKB..." */
-    0x04,0x0C,0xFF,0xFF,0x03,0x00,0x00,0x4C,  /* 00000530    ".......L" */
-    0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,  /* 00000538    "NKD....." */
-    0xFF,0xFF,0x03,0x00,0x01,0x4C,0x4E,0x4B,  /* 00000540    ".....LNK" */
-    0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000548    "A......." */
-    0x03,0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,  /* 00000550    "....LNKB" */
-    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03,  /* 00000558    "........" */
-    0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,  /* 00000560    "...LNKC." */
-    0x08,0x50,0x52,0x54,0x41,0x12,0x32,0x04,  /* 00000568    ".PRTA.2." */
-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 00000570    "........" */
-    0x00,0x00,0x0A,0x05,0x12,0x0B,0x04,0x0C,  /* 00000578    "........" */
-    0xFF,0xFF,0x02,0x00,0x00,0x00,0x0A,0x07,  /* 00000580    "........" */
-    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 00000588    "........" */
-    0x00,0x00,0x0A,0x0A,0x12,0x0B,0x04,0x0C,  /* 00000590    "........" */
-    0xFF,0xFF,0x04,0x00,0x00,0x00,0x0A,0x0B,  /* 00000598    "........" */
-    0x5B,0x82,0x48,0x31,0x49,0x53,0x41,0x5F,  /* 000005A0    "[.H1ISA_" */
-    0x08,0x5F,0x41,0x44,0x52,0x00,0x5B,0x80,  /* 000005A8    "._ADR.[." */
-    0x50,0x49,0x52,0x51,0x02,0x0A,0x60,0x0A,  /* 000005B0    "PIRQ..`." */
-    0x04,0x10,0x2E,0x5C,0x00,0x5B,0x81,0x29,  /* 000005B8    "...\.[.)" */
-    0x5C,0x2F,0x04,0x5F,0x53,0x42,0x5F,0x50,  /* 000005C0    "\/._SB_P" */
-    0x43,0x49,0x30,0x49,0x53,0x41,0x5F,0x50,  /* 000005C8    "CI0ISA_P" */
-    0x49,0x52,0x51,0x01,0x50,0x49,0x52,0x41,  /* 000005D0    "IRQ.PIRA" */
-    0x08,0x50,0x49,0x52,0x42,0x08,0x50,0x49,  /* 000005D8    ".PIRB.PI" */
-    0x52,0x43,0x08,0x50,0x49,0x52,0x44,0x08,  /* 000005E0    "RC.PIRD." */
-    0x5B,0x82,0x46,0x0B,0x53,0x59,0x53,0x52,  /* 000005E8    "[.F.SYSR" */
-    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000005F0    "._HID.A." */
-    0x0C,0x02,0x08,0x5F,0x55,0x49,0x44,0x01,  /* 000005F8    "..._UID." */
-    0x08,0x43,0x52,0x53,0x5F,0x11,0x4E,0x08,  /* 00000600    ".CRS_.N." */
-    0x0A,0x8A,0x47,0x01,0x10,0x00,0x10,0x00,  /* 00000608    "..G....." */
-    0x00,0x10,0x47,0x01,0x22,0x00,0x22,0x00,  /* 00000610    "..G."."." */
-    0x00,0x0C,0x47,0x01,0x30,0x00,0x30,0x00,  /* 00000618    "..G.0.0." */
-    0x00,0x10,0x47,0x01,0x44,0x00,0x44,0x00,  /* 00000620    "..G.D.D." */
-    0x00,0x1C,0x47,0x01,0x62,0x00,0x62,0x00,  /* 00000628    "..G.b.b." */
-    0x00,0x02,0x47,0x01,0x65,0x00,0x65,0x00,  /* 00000630    "..G.e.e." */
-    0x00,0x0B,0x47,0x01,0x72,0x00,0x72,0x00,  /* 00000638    "..G.r.r." */
-    0x00,0x0E,0x47,0x01,0x80,0x00,0x80,0x00,  /* 00000640    "..G....." */
-    0x00,0x01,0x47,0x01,0x84,0x00,0x84,0x00,  /* 00000648    "..G....." */
-    0x00,0x03,0x47,0x01,0x88,0x00,0x88,0x00,  /* 00000650    "..G....." */
-    0x00,0x01,0x47,0x01,0x8C,0x00,0x8C,0x00,  /* 00000658    "..G....." */
-    0x00,0x03,0x47,0x01,0x90,0x00,0x90,0x00,  /* 00000660    "..G....." */
-    0x00,0x10,0x47,0x01,0xA2,0x00,0xA2,0x00,  /* 00000668    "..G....." */
-    0x00,0x1C,0x47,0x01,0xE0,0x00,0xE0,0x00,  /* 00000670    "..G....." */
-    0x00,0x10,0x47,0x01,0xA0,0x08,0xA0,0x08,  /* 00000678    "..G....." */
-    0x00,0x04,0x47,0x01,0xC0,0x0C,0xC0,0x0C,  /* 00000680    "..G....." */
-    0x00,0x10,0x47,0x01,0xD0,0x04,0xD0,0x04,  /* 00000688    "..G....." */
-    0x00,0x02,0x79,0x00,0x14,0x0B,0x5F,0x43,  /* 00000690    "..y..._C" */
-    0x52,0x53,0x00,0xA4,0x43,0x52,0x53,0x5F,  /* 00000698    "RS..CRS_" */
-    0x5B,0x82,0x2B,0x50,0x49,0x43,0x5F,0x08,  /* 000006A0    "[.+PIC_." */
-    0x5F,0x48,0x49,0x44,0x0B,0x41,0xD0,0x08,  /* 000006A8    "_HID.A.." */
-    0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15,  /* 000006B0    "_CRS...." */
-    0x47,0x01,0x20,0x00,0x20,0x00,0x01,0x02,  /* 000006B8    "G. . ..." */
-    0x47,0x01,0xA0,0x00,0xA0,0x00,0x01,0x02,  /* 000006C0    "G......." */
-    0x22,0x04,0x00,0x79,0x00,0x5B,0x82,0x47,  /* 000006C8    ""..y.[.G" */
-    0x05,0x44,0x4D,0x41,0x30,0x08,0x5F,0x48,  /* 000006D0    ".DMA0._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x02,0x00,0x08,  /* 000006D8    "ID.A...." */
-    0x5F,0x43,0x52,0x53,0x11,0x41,0x04,0x0A,  /* 000006E0    "_CRS.A.." */
-    0x3D,0x2A,0x10,0x04,0x47,0x01,0x00,0x00,  /* 000006E8    "=*..G..." */
-    0x00,0x00,0x00,0x10,0x47,0x01,0x81,0x00,  /* 000006F0    "....G..." */
-    0x81,0x00,0x00,0x03,0x47,0x01,0x87,0x00,  /* 000006F8    "....G..." */
-    0x87,0x00,0x00,0x01,0x47,0x01,0x89,0x00,  /* 00000700    "....G..." */
-    0x89,0x00,0x00,0x03,0x47,0x01,0x8F,0x00,  /* 00000708    "....G..." */
-    0x8F,0x00,0x00,0x01,0x47,0x01,0xC0,0x00,  /* 00000710    "....G..." */
-    0xC0,0x00,0x00,0x20,0x47,0x01,0x80,0x04,  /* 00000718    "... G..." */
-    0x80,0x04,0x00,0x10,0x79,0x00,0x5B,0x82,  /* 00000720    "....y.[." */
-    0x25,0x54,0x4D,0x52,0x5F,0x08,0x5F,0x48,  /* 00000728    "%TMR_._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x01,0x00,0x08,  /* 00000730    "ID.A...." */
-    0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,  /* 00000738    "_CRS...." */
-    0x47,0x01,0x40,0x00,0x40,0x00,0x00,0x04,  /* 00000740    "G.@.@..." */
-    0x22,0x01,0x00,0x79,0x00,0x5B,0x82,0x25,  /* 00000748    ""..y.[.%" */
-    0x52,0x54,0x43,0x5F,0x08,0x5F,0x48,0x49,  /* 00000750    "RTC_._HI" */
-    0x44,0x0C,0x41,0xD0,0x0B,0x00,0x08,0x5F,  /* 00000758    "D.A...._" */
-    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 00000760    "CRS....G" */
-    0x01,0x70,0x00,0x70,0x00,0x00,0x02,0x22,  /* 00000768    ".p.p..."" */
-    0x00,0x01,0x79,0x00,0x5B,0x82,0x22,0x53,  /* 00000770    "..y.[."S" */
-    0x50,0x4B,0x52,0x08,0x5F,0x48,0x49,0x44,  /* 00000778    "PKR._HID" */
-    0x0C,0x41,0xD0,0x08,0x00,0x08,0x5F,0x43,  /* 00000780    ".A...._C" */
-    0x52,0x53,0x11,0x0D,0x0A,0x0A,0x47,0x01,  /* 00000788    "RS....G." */
-    0x61,0x00,0x61,0x00,0x00,0x01,0x79,0x00,  /* 00000790    "a.a...y." */
-    0x5B,0x82,0x31,0x50,0x53,0x32,0x4D,0x08,  /* 00000798    "[.1PS2M." */
-    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0F,  /* 000007A0    "_HID.A.." */
-    0x13,0x08,0x5F,0x43,0x49,0x44,0x0C,0x41,  /* 000007A8    ".._CID.A" */
-    0xD0,0x0F,0x13,0x14,0x09,0x5F,0x53,0x54,  /* 000007B0    "....._ST" */
-    0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,  /* 000007B8    "A....._C" */
-    0x52,0x53,0x11,0x08,0x0A,0x05,0x22,0x00,  /* 000007C0    "RS...."." */
-    0x10,0x79,0x00,0x5B,0x82,0x42,0x04,0x50,  /* 000007C8    ".y.[.B.P" */
-    0x53,0x32,0x4B,0x08,0x5F,0x48,0x49,0x44,  /* 000007D0    "S2K._HID" */
-    0x0C,0x41,0xD0,0x03,0x03,0x08,0x5F,0x43,  /* 000007D8    ".A...._C" */
-    0x49,0x44,0x0C,0x41,0xD0,0x03,0x0B,0x14,  /* 000007E0    "ID.A...." */
-    0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,  /* 000007E8    "._STA..." */
-    0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x18,  /* 000007F0    ".._CRS.." */
-    0x0A,0x15,0x47,0x01,0x60,0x00,0x60,0x00,  /* 000007F8    "..G.`.`." */
-    0x00,0x01,0x47,0x01,0x64,0x00,0x64,0x00,  /* 00000800    "..G.d.d." */
-    0x00,0x01,0x22,0x02,0x00,0x79,0x00,0x5B,  /* 00000808    ".."..y.[" */
-    0x82,0x3A,0x46,0x44,0x43,0x30,0x08,0x5F,  /* 00000810    ".:FDC0._" */
-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x07,0x00,  /* 00000818    "HID.A..." */
-    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000820    ".._STA.." */
-    0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 00000828    "..._CRS." */
-    0x1B,0x0A,0x18,0x47,0x01,0xF0,0x03,0xF0,  /* 00000830    "...G...." */
-    0x03,0x01,0x06,0x47,0x01,0xF7,0x03,0xF7,  /* 00000838    "...G...." */
-    0x03,0x01,0x01,0x22,0x40,0x00,0x2A,0x04,  /* 00000840    "..."@.*." */
-    0x00,0x79,0x00,0x5B,0x82,0x35,0x55,0x41,  /* 00000848    ".y.[.5UA" */
-    0x52,0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000850    "R1._HID." */
-    0x41,0xD0,0x05,0x01,0x08,0x5F,0x55,0x49,  /* 00000858    "A...._UI" */
-    0x44,0x01,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 00000860    "D..._STA" */
-    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 00000868    "....._CR" */
-    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8,  /* 00000870    "S....G.." */
-    0x03,0xF8,0x03,0x01,0x08,0x22,0x10,0x00,  /* 00000878    ".....".." */
-    0x79,0x00,0x5B,0x82,0x36,0x4C,0x54,0x50,  /* 00000880    "y.[.6LTP" */
-    0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000888    "1._HID.A" */
-    0xD0,0x04,0x00,0x08,0x5F,0x55,0x49,0x44,  /* 00000890    "...._UID" */
-    0x0A,0x02,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 00000898    "...._STA" */
-    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 000008A0    "....._CR" */
-    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x78,  /* 000008A8    "S....G.x" */
-    0x03,0x78,0x03,0x08,0x08,0x22,0x80,0x00,  /* 000008B0    ".x...".." */
-    0x79,0x00,
+    0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
+    0x00,0x79,0x00,0x5B,0x82,0x47,0x85,0x50,  /* 000000F0    ".y.[.G.P" */
+    0x43,0x49,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 000000F8    "CI0._HID" */
+    0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F,0x55,  /* 00000100    ".A...._U" */
+    0x49,0x44,0x00,0x08,0x5F,0x41,0x44,0x52,  /* 00000108    "ID.._ADR" */
+    0x00,0x08,0x5F,0x42,0x42,0x4E,0x00,0x5B,  /* 00000110    ".._BBN.[" */
+    0x80,0x50,0x49,0x52,0x50,0x02,0x0A,0x3C,  /* 00000118    ".PIRP..<" */
+    0x0A,0x10,0x5B,0x81,0x24,0x50,0x49,0x52,  /* 00000120    "..[.$PIR" */
+    0x50,0x01,0x49,0x52,0x51,0x33,0x03,0x49,  /* 00000128    "P.IRQ3.I" */
+    0x52,0x51,0x35,0x05,0x49,0x52,0x51,0x37,  /* 00000130    "RQ5.IRQ7" */
+    0x07,0x49,0x52,0x51,0x39,0x09,0x49,0x52,  /* 00000138    ".IRQ9.IR" */
+    0x51,0x41,0x0A,0x49,0x52,0x51,0x42,0x0B,  /* 00000140    "QA.IRQB." */
+    0x14,0x44,0x08,0x5F,0x43,0x52,0x53,0x00,  /* 00000148    ".D._CRS." */
+    0x08,0x50,0x52,0x54,0x30,0x11,0x42,0x07,  /* 00000150    ".PRT0.B." */
+    0x0A,0x6E,0x88,0x0D,0x00,0x02,0x0F,0x00,  /* 00000158    ".n......" */
+    0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,  /* 00000160    "........" */
+    0x00,0x01,0x47,0x01,0xF8,0x0C,0xF8,0x0C,  /* 00000168    "..G....." */
+    0x01,0x08,0x88,0x0D,0x00,0x01,0x0C,0x03,  /* 00000170    "........" */
+    0x00,0x00,0x00,0x00,0xF7,0x0C,0x00,0x00,  /* 00000178    "........" */
+    0xF8,0x0C,0x88,0x0D,0x00,0x01,0x0C,0x03,  /* 00000180    "........" */
+    0x00,0x00,0x00,0x0D,0xFF,0xFF,0x00,0x00,  /* 00000188    "........" */
+    0x00,0xF3,0x87,0x17,0x00,0x00,0x0D,0x03,  /* 00000190    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,  /* 00000198    "........" */
+    0xFF,0xFF,0xFF,0xF1,0x00,0x00,0x00,0x00,  /* 000001A0    "........" */
+    0x00,0x00,0x00,0x02,0x87,0x17,0x00,0x00,  /* 000001A8    "........" */
+    0x0D,0x03,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B0    "........" */
+    0x00,0xF2,0xFF,0x0F,0x00,0xF2,0x00,0x00,  /* 000001B8    "........" */
+    0x00,0x00,0x00,0x10,0x00,0x00,0x79,0x00,  /* 000001C0    "......y." */
+    0xA4,0x50,0x52,0x54,0x30,0x08,0x42,0x55,  /* 000001C8    ".PRT0.BU" */
+    0x46,0x41,0x11,0x09,0x0A,0x06,0x23,0xF8,  /* 000001D0    "FA....#." */
+    0xDC,0x18,0x79,0x00,0x08,0x42,0x55,0x46,  /* 000001D8    "..y..BUF" */
+    0x42,0x11,0x09,0x0A,0x06,0x23,0x00,0x00,  /* 000001E0    "B....#.." */
+    0x18,0x79,0x00,0x8B,0x42,0x55,0x46,0x42,  /* 000001E8    ".y..BUFB" */
+    0x01,0x49,0x52,0x51,0x56,0x08,0x42,0x55,  /* 000001F0    ".IRQV.BU" */
+    0x46,0x43,0x11,0x07,0x0A,0x04,0x05,0x07,  /* 000001F8    "FC......" */
+    0x0A,0x0B,0x8C,0x42,0x55,0x46,0x43,0x01,  /* 00000200    "...BUFC." */
+    0x50,0x49,0x51,0x41,0x8C,0x42,0x55,0x46,  /* 00000208    "PIQA.BUF" */
+    0x43,0x01,0x50,0x49,0x51,0x42,0x8C,0x42,  /* 00000210    "C.PIQB.B" */
+    0x55,0x46,0x43,0x01,0x50,0x49,0x51,0x43,  /* 00000218    "UFC.PIQC" */
+    0x8C,0x42,0x55,0x46,0x43,0x01,0x50,0x49,  /* 00000220    ".BUFC.PI" */
+    0x51,0x44,0x5B,0x82,0x48,0x08,0x4C,0x4E,  /* 00000228    "QD[.H.LN" */
+    0x4B,0x41,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000230    "KA._HID." */
+    0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,  /* 00000238    "A...._UI" */
+    0x44,0x01,0x14,0x1C,0x5F,0x53,0x54,0x41,  /* 00000240    "D..._STA" */
+    0x00,0x7B,0x50,0x49,0x52,0x41,0x0A,0x80,  /* 00000248    ".{PIRA.." */
+    0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,  /* 00000250    "`...`..." */
+    0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,  /* 00000258    "........" */
+    0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,  /* 00000260    "._PRS..B" */
+    0x55,0x46,0x41,0x14,0x11,0x5F,0x44,0x49,  /* 00000268    "UFA.._DI" */
+    0x53,0x00,0x7D,0x50,0x49,0x52,0x41,0x0A,  /* 00000270    "S.}PIRA." */
+    0x80,0x50,0x49,0x52,0x41,0x14,0x1A,0x5F,  /* 00000278    ".PIRA.._" */
+    0x43,0x52,0x53,0x00,0x7B,0x50,0x49,0x52,  /* 00000280    "CRS.{PIR" */
+    0x41,0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,  /* 00000288    "A..`y.`I" */
+    0x52,0x51,0x56,0xA4,0x42,0x55,0x46,0x42,  /* 00000290    "RQV.BUFB" */
+    0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,  /* 00000298    ".._SRS.." */
+    0x68,0x01,0x49,0x52,0x51,0x31,0x82,0x49,  /* 000002A0    "h.IRQ1.I" */
+    0x52,0x51,0x31,0x60,0x76,0x60,0x70,0x60,  /* 000002A8    "RQ1`v`p`" */
+    0x50,0x49,0x52,0x41,0x5B,0x82,0x49,0x08,  /* 000002B0    "PIRA[.I." */
+    0x4C,0x4E,0x4B,0x42,0x08,0x5F,0x48,0x49,  /* 000002B8    "LNKB._HI" */
+    0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,  /* 000002C0    "D.A...._" */
+    0x55,0x49,0x44,0x0A,0x02,0x14,0x1C,0x5F,  /* 000002C8    "UID...._" */
+    0x53,0x54,0x41,0x00,0x7B,0x50,0x49,0x52,  /* 000002D0    "STA.{PIR" */
+    0x42,0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,  /* 000002D8    "B..`...`" */
+    0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,  /* 000002E0    "........" */
+    0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,  /* 000002E8    "...._PRS" */
+    0x00,0xA4,0x42,0x55,0x46,0x41,0x14,0x11,  /* 000002F0    "..BUFA.." */
+    0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,0x49,  /* 000002F8    "_DIS.}PI" */
+    0x52,0x42,0x0A,0x80,0x50,0x49,0x52,0x42,  /* 00000300    "RB..PIRB" */
+    0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,  /* 00000308    ".._CRS.{" */
+    0x50,0x49,0x52,0x42,0x0A,0x0F,0x60,0x79,  /* 00000310    "PIRB..`y" */
+    0x01,0x60,0x49,0x52,0x51,0x56,0xA4,0x42,  /* 00000318    ".`IRQV.B" */
+    0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,  /* 00000320    "UFB.._SR" */
+    0x53,0x01,0x8B,0x68,0x01,0x49,0x52,0x51,  /* 00000328    "S..h.IRQ" */
+    0x31,0x82,0x49,0x52,0x51,0x31,0x60,0x76,  /* 00000330    "1.IRQ1`v" */
+    0x60,0x70,0x60,0x50,0x49,0x52,0x42,0x5B,  /* 00000338    "`p`PIRB[" */
+    0x82,0x49,0x08,0x4C,0x4E,0x4B,0x43,0x08,  /* 00000340    ".I.LNKC." */
+    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,  /* 00000348    "_HID.A.." */
+    0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,0x03,  /* 00000350    ".._UID.." */
+    0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,  /* 00000358    ".._STA.{" */
+    0x50,0x49,0x52,0x43,0x0A,0x80,0x60,0xA0,  /* 00000360    "PIRC..`." */
+    0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,  /* 00000368    "..`....." */
+    0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,  /* 00000370    "......._" */
+    0x50,0x52,0x53,0x00,0xA4,0x42,0x55,0x46,  /* 00000378    "PRS..BUF" */
+    0x41,0x14,0x11,0x5F,0x44,0x49,0x53,0x00,  /* 00000380    "A.._DIS." */
+    0x7D,0x50,0x49,0x52,0x43,0x0A,0x80,0x50,  /* 00000388    "}PIRC..P" */
+    0x49,0x52,0x43,0x14,0x1A,0x5F,0x43,0x52,  /* 00000390    "IRC.._CR" */
+    0x53,0x00,0x7B,0x50,0x49,0x52,0x43,0x0A,  /* 00000398    "S.{PIRC." */
+    0x0F,0x60,0x79,0x01,0x60,0x49,0x52,0x51,  /* 000003A0    ".`y.`IRQ" */
+    0x56,0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,  /* 000003A8    "V.BUFB.." */
+    0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01,  /* 000003B0    "_SRS..h." */
+    0x49,0x52,0x51,0x31,0x82,0x49,0x52,0x51,  /* 000003B8    "IRQ1.IRQ" */
+    0x31,0x60,0x76,0x60,0x70,0x60,0x50,0x49,  /* 000003C0    "1`v`p`PI" */
+    0x52,0x43,0x5B,0x82,0x49,0x08,0x4C,0x4E,  /* 000003C8    "RC[.I.LN" */
+    0x4B,0x44,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 000003D0    "KD._HID." */
+    0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,  /* 000003D8    "A...._UI" */
+    0x44,0x0A,0x04,0x14,0x1C,0x5F,0x53,0x54,  /* 000003E0    "D...._ST" */
+    0x41,0x00,0x7B,0x50,0x49,0x52,0x44,0x0A,  /* 000003E8    "A.{PIRD." */
+    0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,  /* 000003F0    ".`...`.." */
+    0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,  /* 000003F8    "........" */
+    0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,  /* 00000400    ".._PRS.." */
+    0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44,  /* 00000408    "BUFA.._D" */
+    0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x44,  /* 00000410    "IS.}PIRD" */
+    0x0A,0x80,0x50,0x49,0x52,0x44,0x14,0x1A,  /* 00000418    "..PIRD.." */
+    0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49,  /* 00000420    "_CRS.{PI" */
+    0x52,0x44,0x0A,0x0F,0x60,0x79,0x01,0x60,  /* 00000428    "RD..`y.`" */
+    0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46,  /* 00000430    "IRQV.BUF" */
+    0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,  /* 00000438    "B.._SRS." */
+    0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82,  /* 00000440    ".h.IRQ1." */
+    0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70,  /* 00000448    "IRQ1`v`p" */
+    0x60,0x50,0x49,0x52,0x44,0x08,0x5F,0x50,  /* 00000450    "`PIRD._P" */
+    0x52,0x54,0x12,0x43,0x1D,0x20,0x12,0x0D,  /* 00000458    "RT.C. .." */
+    0x04,0x0C,0xFF,0xFF,0x01,0x00,0x00,0x4C,  /* 00000460    ".......L" */
+    0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,  /* 00000468    "NKA....." */
+    0xFF,0xFF,0x01,0x00,0x01,0x4C,0x4E,0x4B,  /* 00000470    ".....LNK" */
+    0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000478    "B......." */
+    0x01,0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,  /* 00000480    "....LNKC" */
+    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x01,  /* 00000488    "........" */
+    0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000490    "...LNKD." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x02,0x00,  /* 00000498    "........" */
+    0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,  /* 000004A0    ".LNKB..." */
+    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x01,0x4C,  /* 000004A8    ".......L" */
+    0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,  /* 000004B0    "NKC....." */
+    0xFF,0xFF,0x02,0x00,0x0A,0x02,0x4C,0x4E,  /* 000004B8    "......LN" */
+    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000004C0    "KD......" */
+    0xFF,0x02,0x00,0x0A,0x03,0x4C,0x4E,0x4B,  /* 000004C8    ".....LNK" */
+    0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 000004D0    "A......." */
+    0x03,0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,  /* 000004D8    "...LNKC." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 000004E0    "........" */
+    0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,  /* 000004E8    ".LNKD..." */
+    0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x02,  /* 000004F0    "........" */
+    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 000004F8    "LNKA...." */
+    0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x03,0x4C,  /* 00000500    ".......L" */
+    0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,  /* 00000508    "NKB....." */
+    0xFF,0xFF,0x04,0x00,0x00,0x4C,0x4E,0x4B,  /* 00000510    ".....LNK" */
+    0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 00000518    "D......." */
+    0x04,0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,  /* 00000520    "...LNKA." */
+    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x04,0x00,  /* 00000528    "........" */
+    0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000530    "..LNKB.." */
+    0x0E,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,  /* 00000538    "........" */
+    0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,  /* 00000540    ".LNKC..." */
+    0x04,0x0C,0xFF,0xFF,0x05,0x00,0x00,0x4C,  /* 00000548    ".......L" */
+    0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,  /* 00000550    "NKA....." */
+    0xFF,0xFF,0x05,0x00,0x01,0x4C,0x4E,0x4B,  /* 00000558    ".....LNK" */
+    0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000560    "B......." */
+    0x05,0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,  /* 00000568    "....LNKC" */
+    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x05,  /* 00000570    "........" */
+    0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000578    "...LNKD." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x06,0x00,  /* 00000580    "........" */
+    0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,  /* 00000588    ".LNKB..." */
+    0x04,0x0C,0xFF,0xFF,0x06,0x00,0x01,0x4C,  /* 00000590    ".......L" */
+    0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,  /* 00000598    "NKC....." */
+    0xFF,0xFF,0x06,0x00,0x0A,0x02,0x4C,0x4E,  /* 000005A0    "......LN" */
+    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000005A8    "KD......" */
+    0xFF,0x06,0x00,0x0A,0x03,0x4C,0x4E,0x4B,  /* 000005B0    ".....LNK" */
+    0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 000005B8    "A......." */
+    0x07,0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,  /* 000005C0    "...LNKC." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x07,0x00,  /* 000005C8    "........" */
+    0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,  /* 000005D0    ".LNKD..." */
+    0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x02,  /* 000005D8    "........" */
+    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 000005E0    "LNKA...." */
+    0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x03,0x4C,  /* 000005E8    ".......L" */
+    0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,  /* 000005F0    "NKB....." */
+    0xFF,0xFF,0x08,0x00,0x00,0x4C,0x4E,0x4B,  /* 000005F8    ".....LNK" */
+    0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 00000600    "D......." */
+    0x08,0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,  /* 00000608    "...LNKA." */
+    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x08,0x00,  /* 00000610    "........" */
+    0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000618    "..LNKB.." */
+    0x0E,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,  /* 00000620    "........" */
+    0x03,0x4C,0x4E,0x4B,0x43,0x00,0x5B,0x82,  /* 00000628    ".LNKC.[." */
+    0x4C,0x31,0x49,0x53,0x41,0x5F,0x08,0x5F,  /* 00000630    "L1ISA_._" */
+    0x41,0x44,0x52,0x0C,0x00,0x00,0x01,0x00,  /* 00000638    "ADR....." */
+    0x5B,0x80,0x50,0x49,0x52,0x51,0x02,0x0A,  /* 00000640    "[.PIRQ.." */
+    0x60,0x0A,0x04,0x10,0x2E,0x5C,0x00,0x5B,  /* 00000648    "`....\.[" */
+    0x81,0x29,0x5C,0x2F,0x04,0x5F,0x53,0x42,  /* 00000650    ".)\/._SB" */
+    0x5F,0x50,0x43,0x49,0x30,0x49,0x53,0x41,  /* 00000658    "_PCI0ISA" */
+    0x5F,0x50,0x49,0x52,0x51,0x01,0x50,0x49,  /* 00000660    "_PIRQ.PI" */
+    0x52,0x41,0x08,0x50,0x49,0x52,0x42,0x08,  /* 00000668    "RA.PIRB." */
+    0x50,0x49,0x52,0x43,0x08,0x50,0x49,0x52,  /* 00000670    "PIRC.PIR" */
+    0x44,0x08,0x5B,0x82,0x46,0x0B,0x53,0x59,  /* 00000678    "D.[.F.SY" */
+    0x53,0x52,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000680    "SR._HID." */
+    0x41,0xD0,0x0C,0x02,0x08,0x5F,0x55,0x49,  /* 00000688    "A...._UI" */
+    0x44,0x01,0x08,0x43,0x52,0x53,0x5F,0x11,  /* 00000690    "D..CRS_." */
+    0x4E,0x08,0x0A,0x8A,0x47,0x01,0x10,0x00,  /* 00000698    "N...G..." */
+    0x10,0x00,0x00,0x10,0x47,0x01,0x22,0x00,  /* 000006A0    "....G."." */
+    0x22,0x00,0x00,0x0C,0x47,0x01,0x30,0x00,  /* 000006A8    ""...G.0." */
+    0x30,0x00,0x00,0x10,0x47,0x01,0x44,0x00,  /* 000006B0    "0...G.D." */
+    0x44,0x00,0x00,0x1C,0x47,0x01,0x62,0x00,  /* 000006B8    "D...G.b." */
+    0x62,0x00,0x00,0x02,0x47,0x01,0x65,0x00,  /* 000006C0    "b...G.e." */
+    0x65,0x00,0x00,0x0B,0x47,0x01,0x72,0x00,  /* 000006C8    "e...G.r." */
+    0x72,0x00,0x00,0x0E,0x47,0x01,0x80,0x00,  /* 000006D0    "r...G..." */
+    0x80,0x00,0x00,0x01,0x47,0x01,0x84,0x00,  /* 000006D8    "....G..." */
+    0x84,0x00,0x00,0x03,0x47,0x01,0x88,0x00,  /* 000006E0    "....G..." */
+    0x88,0x00,0x00,0x01,0x47,0x01,0x8C,0x00,  /* 000006E8    "....G..." */
+    0x8C,0x00,0x00,0x03,0x47,0x01,0x90,0x00,  /* 000006F0    "....G..." */
+    0x90,0x00,0x00,0x10,0x47,0x01,0xA2,0x00,  /* 000006F8    "....G..." */
+    0xA2,0x00,0x00,0x1C,0x47,0x01,0xE0,0x00,  /* 00000700    "....G..." */
+    0xE0,0x00,0x00,0x10,0x47,0x01,0xA0,0x08,  /* 00000708    "....G..." */
+    0xA0,0x08,0x00,0x04,0x47,0x01,0xC0,0x0C,  /* 00000710    "....G..." */
+    0xC0,0x0C,0x00,0x10,0x47,0x01,0xD0,0x04,  /* 00000718    "....G..." */
+    0xD0,0x04,0x00,0x02,0x79,0x00,0x14,0x0B,  /* 00000720    "....y..." */
+    0x5F,0x43,0x52,0x53,0x00,0xA4,0x43,0x52,  /* 00000728    "_CRS..CR" */
+    0x53,0x5F,0x5B,0x82,0x2B,0x50,0x49,0x43,  /* 00000730    "S_[.+PIC" */
+    0x5F,0x08,0x5F,0x48,0x49,0x44,0x0B,0x41,  /* 00000738    "_._HID.A" */
+    0xD0,0x08,0x5F,0x43,0x52,0x53,0x11,0x18,  /* 00000740    ".._CRS.." */
+    0x0A,0x15,0x47,0x01,0x20,0x00,0x20,0x00,  /* 00000748    "..G. . ." */
+    0x01,0x02,0x47,0x01,0xA0,0x00,0xA0,0x00,  /* 00000750    "..G....." */
+    0x01,0x02,0x22,0x04,0x00,0x79,0x00,0x5B,  /* 00000758    ".."..y.[" */
+    0x82,0x47,0x05,0x44,0x4D,0x41,0x30,0x08,  /* 00000760    ".G.DMA0." */
+    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x02,  /* 00000768    "_HID.A.." */
+    0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x41,  /* 00000770    ".._CRS.A" */
+    0x04,0x0A,0x3D,0x2A,0x10,0x04,0x47,0x01,  /* 00000778    "..=*..G." */
+    0x00,0x00,0x00,0x00,0x00,0x10,0x47,0x01,  /* 00000780    "......G." */
+    0x81,0x00,0x81,0x00,0x00,0x03,0x47,0x01,  /* 00000788    "......G." */
+    0x87,0x00,0x87,0x00,0x00,0x01,0x47,0x01,  /* 00000790    "......G." */
+    0x89,0x00,0x89,0x00,0x00,0x03,0x47,0x01,  /* 00000798    "......G." */
+    0x8F,0x00,0x8F,0x00,0x00,0x01,0x47,0x01,  /* 000007A0    "......G." */
+    0xC0,0x00,0xC0,0x00,0x00,0x20,0x47,0x01,  /* 000007A8    "..... G." */
+    0x80,0x04,0x80,0x04,0x00,0x10,0x79,0x00,  /* 000007B0    "......y." */
+    0x5B,0x82,0x25,0x54,0x4D,0x52,0x5F,0x08,  /* 000007B8    "[.%TMR_." */
+    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x01,  /* 000007C0    "_HID.A.." */
+    0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x10,  /* 000007C8    ".._CRS.." */
+    0x0A,0x0D,0x47,0x01,0x40,0x00,0x40,0x00,  /* 000007D0    "..G.@.@." */
+    0x00,0x04,0x22,0x01,0x00,0x79,0x00,0x5B,  /* 000007D8    ".."..y.[" */
+    0x82,0x25,0x52,0x54,0x43,0x5F,0x08,0x5F,  /* 000007E0    ".%RTC_._" */
+    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0B,0x00,  /* 000007E8    "HID.A..." */
+    0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,  /* 000007F0    "._CRS..." */
+    0x0D,0x47,0x01,0x70,0x00,0x70,0x00,0x00,  /* 000007F8    ".G.p.p.." */
+    0x02,0x22,0x00,0x01,0x79,0x00,0x5B,0x82,  /* 00000800    "."..y.[." */
+    0x22,0x53,0x50,0x4B,0x52,0x08,0x5F,0x48,  /* 00000808    ""SPKR._H" */
+    0x49,0x44,0x0C,0x41,0xD0,0x08,0x00,0x08,  /* 00000810    "ID.A...." */
+    0x5F,0x43,0x52,0x53,0x11,0x0D,0x0A,0x0A,  /* 00000818    "_CRS...." */
+    0x47,0x01,0x61,0x00,0x61,0x00,0x00,0x01,  /* 00000820    "G.a.a..." */
+    0x79,0x00,0x5B,0x82,0x31,0x50,0x53,0x32,  /* 00000828    "y.[.1PS2" */
+    0x4D,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000830    "M._HID.A" */
+    0xD0,0x0F,0x13,0x08,0x5F,0x43,0x49,0x44,  /* 00000838    "...._CID" */
+    0x0C,0x41,0xD0,0x0F,0x13,0x14,0x09,0x5F,  /* 00000840    ".A....._" */
+    0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,  /* 00000848    "STA....." */
+    0x5F,0x43,0x52,0x53,0x11,0x08,0x0A,0x05,  /* 00000850    "_CRS...." */
+    0x22,0x00,0x10,0x79,0x00,0x5B,0x82,0x42,  /* 00000858    ""..y.[.B" */
+    0x04,0x50,0x53,0x32,0x4B,0x08,0x5F,0x48,  /* 00000860    ".PS2K._H" */
+    0x49,0x44,0x0C,0x41,0xD0,0x03,0x03,0x08,  /* 00000868    "ID.A...." */
+    0x5F,0x43,0x49,0x44,0x0C,0x41,0xD0,0x03,  /* 00000870    "_CID.A.." */
+    0x0B,0x14,0x09,0x5F,0x53,0x54,0x41,0x00,  /* 00000878    "..._STA." */
+    0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,  /* 00000880    "...._CRS" */
+    0x11,0x18,0x0A,0x15,0x47,0x01,0x60,0x00,  /* 00000888    "....G.`." */
+    0x60,0x00,0x00,0x01,0x47,0x01,0x64,0x00,  /* 00000890    "`...G.d." */
+    0x64,0x00,0x00,0x01,0x22,0x02,0x00,0x79,  /* 00000898    "d..."..y" */
+    0x00,0x5B,0x82,0x3A,0x46,0x44,0x43,0x30,  /* 000008A0    ".[.:FDC0" */
+    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000008A8    "._HID.A." */
+    0x07,0x00,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 000008B0    "...._STA" */
+    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 000008B8    "....._CR" */
+    0x53,0x11,0x1B,0x0A,0x18,0x47,0x01,0xF0,  /* 000008C0    "S....G.." */
+    0x03,0xF0,0x03,0x01,0x06,0x47,0x01,0xF7,  /* 000008C8    ".....G.." */
+    0x03,0xF7,0x03,0x01,0x01,0x22,0x40,0x00,  /* 000008D0    "....."@." */
+    0x2A,0x04,0x00,0x79,0x00,0x5B,0x82,0x35,  /* 000008D8    "*..y.[.5" */
+    0x55,0x41,0x52,0x31,0x08,0x5F,0x48,0x49,  /* 000008E0    "UAR1._HI" */
+    0x44,0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,  /* 000008E8    "D.A...._" */
+    0x55,0x49,0x44,0x01,0x14,0x09,0x5F,0x53,  /* 000008F0    "UID..._S" */
+    0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,  /* 000008F8    "TA....._" */
+    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 00000900    "CRS....G" */
+    0x01,0xF8,0x03,0xF8,0x03,0x01,0x08,0x22,  /* 00000908    "......."" */
+    0x10,0x00,0x79,0x00,0x5B,0x82,0x36,0x4C,  /* 00000910    "..y.[.6L" */
+    0x54,0x50,0x31,0x08,0x5F,0x48,0x49,0x44,  /* 00000918    "TP1._HID" */
+    0x0C,0x41,0xD0,0x04,0x00,0x08,0x5F,0x55,  /* 00000920    ".A...._U" */
+    0x49,0x44,0x0A,0x02,0x14,0x09,0x5F,0x53,  /* 00000928    "ID...._S" */
+    0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,  /* 00000930    "TA....._" */
+    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 00000938    "CRS....G" */
+    0x01,0x78,0x03,0x78,0x03,0x08,0x08,0x22,  /* 00000940    ".x.x..."" */
+    0x80,0x00,0x79,0x00,
 };
 int DsdtLen=sizeof(AmlCode);

[-- Attachment #3: acpi-bios-pci-rt-fixes-after-xen-platform-dsdt-fix.patch --]
[-- Type: text/x-patch, Size: 48537 bytes --]

Fixed PCI interrupt routing in ACPI BIOS:
(a) Corrected PCI interrupt router (i.e., the PIIX3 PCI-ISA
     bridge) device address (on PCI bus 0) to dev 1, fn 0.
     Previously it was writing into the PCI-host
     bridge's config space (not sure what that did, if anything).
(b) Fixed typo in LNKA's _CRS method.  This should be
     reading PIRA, not PIRB (see other LNKx _CRS methods).
(c) Started returning the dynamic PCI interrupt routing table
     (i.e., the one with the LNKx devices) even in APIC mode.
     The QEMU PIIX3 emulation always looks in the PIIX3's
     PCI config space when raising PCI interrupts, and it sees
     disabled LNKx devices if they're not used in the PCI
     routing table, and so fails to raise interrupts.  We avoid
     this problem by always providing the LNKx devices, even
     for guests in APIC mode.  This should also help APIC-
     mode guests manage IRQ conflicts since QEMU really
     provides only 16 IRQ outputs.
(d) Listed 8 PCI slots (up from 4) in PCI bus description.
     Should probably extend this to 32 (embedded slot 0,
     and slots 9-31) since the PCI namespace allows it.

Fixes various boot-time hangs of Windows 2003 with ACPI HAL.
Also gets rid of some boot-time complaints from both ACPI-Windows and Linux.

Signed-off-by: David Lively <dlively@virtualiron.com>

Index: xen-unstable/tools/firmware/acpi/acpi_dsdt.asl
===================================================================
--- xen-unstable.orig/tools/firmware/acpi/acpi_dsdt.asl	2006-10-12 13:52:34.000000000 -0400
+++ xen-unstable/tools/firmware/acpi/acpi_dsdt.asl	2006-10-12 13:53:24.000000000 -0400
@@ -50,12 +50,6 @@
     })
 
 
-    Name(PICD, 0)
-
-    Method(_PIC, 1) { 
- 
-    Store(Arg0, PICD) 
-    }
     Scope (\_SB)
     {
        /* Fix HCT test for 0x400 pci memory - need to report low 640 MB mem as motherboard resource            */
@@ -170,7 +164,7 @@
                 }
 
                 Method(_CRS) {
-                        And(PIRB, 0x0f, Local0) 
+                        And(PIRA, 0x0f, Local0) 
                         ShiftLeft(0x1, Local0, IRQV) 
                         Return(BUFB) 
                 } 
@@ -289,49 +283,54 @@
                         Store(Local0, PIRD) 
                  } // Method(_SRS)
         }
-        Method(_PRT,0) {
-               If(PICD) {Return(PRTA)}  
-               Return (PRTP)  
-               } // end _PRT
-
-        Name(PRTP, Package(){
-                        Package(){0x0000ffff, 0, \_SB.PCI0.LNKA, 0}, // Slot 1, INTA
-                        Package(){0x0000ffff, 1, \_SB.PCI0.LNKB, 0}, // Slot 1, INTB
-                        Package(){0x0000ffff, 2, \_SB.PCI0.LNKC, 0}, // Slot 1, INTC
-                        Package(){0x0000ffff, 3, \_SB.PCI0.LNKD, 0}, // Slot 1, INTD
-
-                        Package(){0x0001ffff, 0, \_SB.PCI0.LNKB, 0}, // Slot 2, INTB
-                        Package(){0x0001ffff, 1, \_SB.PCI0.LNKC, 0}, // Slot 2, INTC
-                        Package(){0x0001ffff, 2, \_SB.PCI0.LNKD, 0}, // Slot 2, INTD
-                        Package(){0x0001ffff, 3, \_SB.PCI0.LNKA, 0}, // Slot 2, INTA
-                        
-                        Package(){0x0002ffff, 0, \_SB.PCI0.LNKC, 0}, // Slot 3, INTC
-                        Package(){0x0002ffff, 1, \_SB.PCI0.LNKD, 0}, // Slot 3, INTD
-                        Package(){0x0002ffff, 2, \_SB.PCI0.LNKA, 0}, // Slot 3, INTA
-                        Package(){0x0002ffff, 3, \_SB.PCI0.LNKB, 0}, // Slot 3, INTB
-                        
-                        Package(){0x0003ffff, 0, \_SB.PCI0.LNKD, 0}, // Slot 2, INTD
-                        Package(){0x0003ffff, 1, \_SB.PCI0.LNKA, 0}, // Slot 2, INTA
-                        Package(){0x0003ffff, 2, \_SB.PCI0.LNKB, 0}, // Slot 2, INTB
-                        Package(){0x0003ffff, 3, \_SB.PCI0.LNKC, 0}, // Slot 2, INTC
-                        
-                        }
-            )
-        Name(PRTA, Package(){
-                        Package(){0x0001ffff, 0, 0, 5}, // Device 1, INTA
-
-                        Package(){0x0002ffff, 0, 0, 7},  // Device 2, INTA
-                       
-                        Package(){0x0003ffff, 0, 0, 10}, // Device 3, INTA
 
-                        Package(){0x0004ffff, 0, 0, 11},  // Device 4, INTA                                
-                        
-                        }
-            )
+	Name(_PRT, Package() {
+		Package() { 0x0001ffff, 0, LNKA, 0 }, // Slot 1, Pin 0 -> LNKA
+		Package() { 0x0001ffff, 1, LNKB, 0 }, // Slot 1, Pin 1 -> LNKB
+		Package() { 0x0001ffff, 2, LNKC, 0 }, // Slot 1, Pin 2 -> LNKC
+		Package() { 0x0001ffff, 3, LNKD, 0 }, // Slot 1, Pin 3 -> LNKD
+
+		Package() { 0x0002ffff, 0, LNKB, 0 }, // Slot 2, Pin 0 -> LNKB
+		Package() { 0x0002ffff, 1, LNKC, 0 }, // Slot 2, Pin 1 -> LNKC
+		Package() { 0x0002ffff, 2, LNKD, 0 }, // Slot 2, Pin 2 -> LNKD
+		Package() { 0x0002ffff, 3, LNKA, 0 }, // Slot 2, Pin 3 -> LNKA
+
+		Package() { 0x0003ffff, 0, LNKC, 0 }, // Slot 3, Pin 0 -> LNKC
+		Package() { 0x0003ffff, 1, LNKD, 0 }, // Slot 3, Pin 1 -> LNKD
+		Package() { 0x0003ffff, 2, LNKA, 0 }, // Slot 3, Pin 2 -> LNKA
+		Package() { 0x0003ffff, 3, LNKB, 0 }, // Slot 3, Pin 3 -> LNKB
+
+		Package() { 0x0004ffff, 0, LNKD, 0 }, // Slot 4, Pin 0 -> LNKD
+		Package() { 0x0004ffff, 1, LNKA, 0 }, // Slot 4, Pin 1 -> LNKA
+		Package() { 0x0004ffff, 2, LNKB, 0 }, // Slot 4, Pin 2 -> LNKB
+		Package() { 0x0004ffff, 3, LNKC, 0 }, // Slot 4, Pin 3 -> LNKC
+
+		Package() { 0x0005ffff, 0, LNKA, 0 }, // Slot 5, Pin 0 -> LNKA
+		Package() { 0x0005ffff, 1, LNKB, 0 }, // Slot 5, Pin 1 -> LNKB
+		Package() { 0x0005ffff, 2, LNKC, 0 }, // Slot 5, Pin 2 -> LNKC
+		Package() { 0x0005ffff, 3, LNKD, 0 }, // Slot 5, Pin 3 -> LNKD
+
+		Package() { 0x0006ffff, 0, LNKB, 0 }, // Slot 6, Pin 0 -> LNKB
+		Package() { 0x0006ffff, 1, LNKC, 0 }, // Slot 6, Pin 1 -> LNKC
+		Package() { 0x0006ffff, 2, LNKD, 0 }, // Slot 6, Pin 2 -> LNKD
+		Package() { 0x0006ffff, 3, LNKA, 0 }, // Slot 6, Pin 3 -> LNKA
+
+		Package() { 0x0007ffff, 0, LNKC, 0 }, // Slot 7, Pin 0 -> LNKC
+		Package() { 0x0007ffff, 1, LNKD, 0 }, // Slot 7, Pin 1 -> LNKD
+		Package() { 0x0007ffff, 2, LNKA, 0 }, // Slot 7, Pin 2 -> LNKA
+		Package() { 0x0007ffff, 3, LNKB, 0 }, // Slot 7, Pin 3 -> LNKB
+
+		Package() { 0x0008ffff, 0, LNKD, 0 }, // Slot 8, Pin 0 -> LNKD
+		Package() { 0x0008ffff, 1, LNKA, 0 }, // Slot 8, Pin 1 -> LNKA
+		Package() { 0x0008ffff, 2, LNKB, 0 }, // Slot 8, Pin 2 -> LNKB
+		Package() { 0x0008ffff, 3, LNKC, 0 }, // Slot 8, Pin 3 -> LNKC
+	})
+
             
+	    // PCI-to-ISA bridge
             Device (ISA)
             {
-                Name (_ADR, 0x00000000) /* device id, PCI bus num, ... */
+                Name (_ADR, 0x00010000)  // PCI Device 1, Function 0
  
             OperationRegion(PIRQ, PCI_Config, 0x60, 0x4)
                         Scope(\) {
Index: xen-unstable/tools/firmware/acpi/acpi_dsdt.c
===================================================================
--- xen-unstable.orig/tools/firmware/acpi/acpi_dsdt.c	2006-10-12 13:52:34.000000000 -0400
+++ xen-unstable/tools/firmware/acpi/acpi_dsdt.c	2006-10-12 13:53:30.000000000 -0400
@@ -5,15 +5,15 @@
  * Copyright (C) 2000 - 2005 Intel Corporation
  * Supports ACPI Specification Revision 3.0
  * 
- * Compilation of "acpi_dsdt.asl" - Thu Oct 12 13:51:31 2006
+ * Compilation of "acpi_dsdt.asl" - Thu Oct 12 13:53:30 2006
  * 
  * C source code output
  *
  */
 unsigned char AmlCode[] = 
 {
-    0x44,0x53,0x44,0x54,0xA0,0x08,0x00,0x00,  /* 00000000    "DSDT...." */
-    0x01,0xEB,0x49,0x4E,0x54,0x45,0x4C,0x00,  /* 00000008    "..INTEL." */
+    0x44,0x53,0x44,0x54,0x32,0x09,0x00,0x00,  /* 00000000    "DSDT2..." */
+    0x01,0xDF,0x49,0x4E,0x54,0x45,0x4C,0x00,  /* 00000008    "..INTEL." */
     0x69,0x6E,0x74,0x2D,0x78,0x65,0x6E,0x00,  /* 00000010    "int-xen." */
     0xD6,0x07,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
     0x13,0x05,0x05,0x20,0x08,0x50,0x4D,0x42,  /* 00000020    "... .PMB" */
@@ -32,262 +32,280 @@
     0x0B,0x43,0x50,0x55,0x33,0x03,0x00,0x00,  /* 00000088    ".CPU3..." */
     0x00,0x00,0x00,0x08,0x5F,0x53,0x35,0x5F,  /* 00000090    "...._S5_" */
     0x12,0x08,0x04,0x0A,0x07,0x0A,0x07,0x00,  /* 00000098    "........" */
-    0x00,0x08,0x50,0x49,0x43,0x44,0x00,0x14,  /* 000000A0    "..PICD.." */
-    0x0C,0x5F,0x50,0x49,0x43,0x01,0x70,0x68,  /* 000000A8    "._PIC.ph" */
-    0x50,0x49,0x43,0x44,0x10,0x4B,0x7E,0x5F,  /* 000000B0    "PICD.K~_" */
-    0x53,0x42,0x5F,0x5B,0x82,0x49,0x04,0x4D,  /* 000000B8    "SB_[.I.M" */
-    0x45,0x4D,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 000000C0    "EM0._HID" */
-    0x0C,0x41,0xD0,0x0C,0x02,0x08,0x5F,0x43,  /* 000000C8    ".A...._C" */
-    0x52,0x53,0x11,0x33,0x0A,0x30,0x8A,0x2B,  /* 000000D0    "RS.3.0.+" */
-    0x00,0x00,0x0D,0x03,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
+    0x00,0x10,0x40,0x89,0x5F,0x53,0x42,0x5F,  /* 000000A0    "..@._SB_" */
+    0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D,0x30,  /* 000000A8    "[.I.MEM0" */
+    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000000B0    "._HID.A." */
+    0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 000000B8    "..._CRS." */
+    0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00,0x0D,  /* 000000C0    "3.0.+..." */
+    0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "........" */
+    0x00,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
-    0x00,0x00,0x00,0x00,0xFF,0xFF,0x09,0x00,  /* 000000E8    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F0    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,  /* 000000F8    "........" */
-    0x00,0x00,0x00,0x00,0x79,0x00,0x5B,0x82,  /* 00000100    "....y.[." */
-    0x48,0x79,0x50,0x43,0x49,0x30,0x08,0x5F,  /* 00000108    "HyPCI0._" */
-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03,  /* 00000110    "HID.A..." */
-    0x08,0x5F,0x55,0x49,0x44,0x00,0x08,0x5F,  /* 00000118    "._UID.._" */
-    0x41,0x44,0x52,0x00,0x08,0x5F,0x42,0x42,  /* 00000120    "ADR.._BB" */
-    0x4E,0x00,0x5B,0x80,0x50,0x49,0x52,0x50,  /* 00000128    "N.[.PIRP" */
-    0x02,0x0A,0x3C,0x0A,0x10,0x5B,0x81,0x24,  /* 00000130    "..<..[.$" */
-    0x50,0x49,0x52,0x50,0x01,0x49,0x52,0x51,  /* 00000138    "PIRP.IRQ" */
-    0x33,0x03,0x49,0x52,0x51,0x35,0x05,0x49,  /* 00000140    "3.IRQ5.I" */
-    0x52,0x51,0x37,0x07,0x49,0x52,0x51,0x39,  /* 00000148    "RQ7.IRQ9" */
-    0x09,0x49,0x52,0x51,0x41,0x0A,0x49,0x52,  /* 00000150    ".IRQA.IR" */
-    0x51,0x42,0x0B,0x14,0x4A,0x06,0x5F,0x43,  /* 00000158    "QB..J._C" */
-    0x52,0x53,0x00,0x08,0x50,0x52,0x54,0x30,  /* 00000160    "RS..PRT0" */
-    0x11,0x48,0x05,0x0A,0x54,0x88,0x0D,0x00,  /* 00000168    ".H..T..." */
-    0x02,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,  /* 00000170    "........" */
-    0x00,0x00,0x00,0x00,0x01,0x47,0x01,0xF8,  /* 00000178    ".....G.." */
-    0x0C,0xF8,0x0C,0x01,0x08,0x88,0x0D,0x00,  /* 00000180    "........" */
-    0x01,0x0C,0x03,0x00,0x00,0x00,0x00,0xF7,  /* 00000188    "........" */
-    0x0C,0x00,0x00,0xF8,0x0C,0x88,0x0D,0x00,  /* 00000190    "........" */
-    0x01,0x0C,0x03,0x00,0x00,0x00,0x0D,0xFF,  /* 00000198    "........" */
-    0xFF,0x00,0x00,0x00,0xF3,0x87,0x17,0x00,  /* 000001A0    "........" */
-    0x00,0x0D,0x03,0x00,0x00,0x00,0x00,0x00,  /* 000001A8    "........" */
-    0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xF4,0x00,  /* 000001B0    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x79,  /* 000001B8    ".......y" */
-    0x00,0xA4,0x50,0x52,0x54,0x30,0x08,0x42,  /* 000001C0    "..PRT0.B" */
-    0x55,0x46,0x41,0x11,0x09,0x0A,0x06,0x23,  /* 000001C8    "UFA....#" */
-    0xF8,0xDC,0x18,0x79,0x00,0x08,0x42,0x55,  /* 000001D0    "...y..BU" */
-    0x46,0x42,0x11,0x09,0x0A,0x06,0x23,0x00,  /* 000001D8    "FB....#." */
-    0x00,0x18,0x79,0x00,0x8B,0x42,0x55,0x46,  /* 000001E0    "..y..BUF" */
-    0x42,0x01,0x49,0x52,0x51,0x56,0x08,0x42,  /* 000001E8    "B.IRQV.B" */
-    0x55,0x46,0x43,0x11,0x07,0x0A,0x04,0x05,  /* 000001F0    "UFC....." */
-    0x07,0x0A,0x0B,0x8C,0x42,0x55,0x46,0x43,  /* 000001F8    "....BUFC" */
-    0x01,0x50,0x49,0x51,0x41,0x8C,0x42,0x55,  /* 00000200    ".PIQA.BU" */
-    0x46,0x43,0x01,0x50,0x49,0x51,0x42,0x8C,  /* 00000208    "FC.PIQB." */
-    0x42,0x55,0x46,0x43,0x01,0x50,0x49,0x51,  /* 00000210    "BUFC.PIQ" */
-    0x43,0x8C,0x42,0x55,0x46,0x43,0x01,0x50,  /* 00000218    "C.BUFC.P" */
-    0x49,0x51,0x44,0x5B,0x82,0x48,0x08,0x4C,  /* 00000220    "IQD[.H.L" */
-    0x4E,0x4B,0x41,0x08,0x5F,0x48,0x49,0x44,  /* 00000228    "NKA._HID" */
-    0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,  /* 00000230    ".A...._U" */
-    0x49,0x44,0x01,0x14,0x1C,0x5F,0x53,0x54,  /* 00000238    "ID..._ST" */
-    0x41,0x00,0x7B,0x50,0x49,0x52,0x41,0x0A,  /* 00000240    "A.{PIRA." */
-    0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,  /* 00000248    ".`...`.." */
-    0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,  /* 00000250    "........" */
-    0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,  /* 00000258    ".._PRS.." */
-    0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44,  /* 00000260    "BUFA.._D" */
-    0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x41,  /* 00000268    "IS.}PIRA" */
-    0x0A,0x80,0x50,0x49,0x52,0x41,0x14,0x1A,  /* 00000270    "..PIRA.." */
-    0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49,  /* 00000278    "_CRS.{PI" */
-    0x52,0x42,0x0A,0x0F,0x60,0x79,0x01,0x60,  /* 00000280    "RB..`y.`" */
-    0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46,  /* 00000288    "IRQV.BUF" */
-    0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,  /* 00000290    "B.._SRS." */
-    0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82,  /* 00000298    ".h.IRQ1." */
-    0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70,  /* 000002A0    "IRQ1`v`p" */
-    0x60,0x50,0x49,0x52,0x41,0x5B,0x82,0x49,  /* 000002A8    "`PIRA[.I" */
-    0x08,0x4C,0x4E,0x4B,0x42,0x08,0x5F,0x48,  /* 000002B0    ".LNKB._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,  /* 000002B8    "ID.A...." */
-    0x5F,0x55,0x49,0x44,0x0A,0x02,0x14,0x1C,  /* 000002C0    "_UID...." */
-    0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49,  /* 000002C8    "_STA.{PI" */
-    0x52,0x42,0x0A,0x80,0x60,0xA0,0x08,0x93,  /* 000002D0    "RB..`..." */
-    0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,  /* 000002D8    "`......." */
-    0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,  /* 000002E0    "....._PR" */
-    0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14,  /* 000002E8    "S..BUFA." */
-    0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,  /* 000002F0    "._DIS.}P" */
-    0x49,0x52,0x42,0x0A,0x80,0x50,0x49,0x52,  /* 000002F8    "IRB..PIR" */
-    0x42,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,  /* 00000300    "B.._CRS." */
-    0x7B,0x50,0x49,0x52,0x42,0x0A,0x0F,0x60,  /* 00000308    "{PIRB..`" */
-    0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4,  /* 00000310    "y.`IRQV." */
-    0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,  /* 00000318    "BUFB.._S" */
-    0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52,  /* 00000320    "RS..h.IR" */
-    0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60,  /* 00000328    "Q1.IRQ1`" */
-    0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x42,  /* 00000330    "v`p`PIRB" */
-    0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,0x43,  /* 00000338    "[.I.LNKC" */
-    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000340    "._HID.A." */
-    0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,  /* 00000348    "..._UID." */
-    0x03,0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,  /* 00000350    "..._STA." */
-    0x7B,0x50,0x49,0x52,0x43,0x0A,0x80,0x60,  /* 00000358    "{PIRC..`" */
-    0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,  /* 00000360    "...`...." */
-    0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,  /* 00000368    "........" */
-    0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,0x55,  /* 00000370    "_PRS..BU" */
-    0x46,0x41,0x14,0x11,0x5F,0x44,0x49,0x53,  /* 00000378    "FA.._DIS" */
-    0x00,0x7D,0x50,0x49,0x52,0x43,0x0A,0x80,  /* 00000380    ".}PIRC.." */
-    0x50,0x49,0x52,0x43,0x14,0x1A,0x5F,0x43,  /* 00000388    "PIRC.._C" */
-    0x52,0x53,0x00,0x7B,0x50,0x49,0x52,0x43,  /* 00000390    "RS.{PIRC" */
-    0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,0x52,  /* 00000398    "..`y.`IR" */
-    0x51,0x56,0xA4,0x42,0x55,0x46,0x42,0x14,  /* 000003A0    "QV.BUFB." */
-    0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,  /* 000003A8    "._SRS..h" */
-    0x01,0x49,0x52,0x51,0x31,0x82,0x49,0x52,  /* 000003B0    ".IRQ1.IR" */
-    0x51,0x31,0x60,0x76,0x60,0x70,0x60,0x50,  /* 000003B8    "Q1`v`p`P" */
-    0x49,0x52,0x43,0x5B,0x82,0x49,0x08,0x4C,  /* 000003C0    "IRC[.I.L" */
-    0x4E,0x4B,0x44,0x08,0x5F,0x48,0x49,0x44,  /* 000003C8    "NKD._HID" */
-    0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,  /* 000003D0    ".A...._U" */
-    0x49,0x44,0x0A,0x04,0x14,0x1C,0x5F,0x53,  /* 000003D8    "ID...._S" */
-    0x54,0x41,0x00,0x7B,0x50,0x49,0x52,0x44,  /* 000003E0    "TA.{PIRD" */
-    0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,  /* 000003E8    "..`...`." */
-    0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,  /* 000003F0    "........" */
-    0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,  /* 000003F8    "..._PRS." */
-    0xA4,0x42,0x55,0x46,0x41,0x14,0x11,0x5F,  /* 00000400    ".BUFA.._" */
-    0x44,0x49,0x53,0x00,0x7D,0x50,0x49,0x52,  /* 00000408    "DIS.}PIR" */
-    0x44,0x0A,0x80,0x50,0x49,0x52,0x44,0x14,  /* 00000410    "D..PIRD." */
-    0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,  /* 00000418    "._CRS.{P" */
-    0x49,0x52,0x44,0x0A,0x0F,0x60,0x79,0x01,  /* 00000420    "IRD..`y." */
-    0x60,0x49,0x52,0x51,0x56,0xA4,0x42,0x55,  /* 00000428    "`IRQV.BU" */
-    0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,  /* 00000430    "FB.._SRS" */
-    0x01,0x8B,0x68,0x01,0x49,0x52,0x51,0x31,  /* 00000438    "..h.IRQ1" */
-    0x82,0x49,0x52,0x51,0x31,0x60,0x76,0x60,  /* 00000440    ".IRQ1`v`" */
-    0x70,0x60,0x50,0x49,0x52,0x44,0x14,0x16,  /* 00000448    "p`PIRD.." */
-    0x5F,0x50,0x52,0x54,0x00,0xA0,0x0A,0x50,  /* 00000450    "_PRT...P" */
-    0x49,0x43,0x44,0xA4,0x50,0x52,0x54,0x41,  /* 00000458    "ICD.PRTA" */
-    0xA4,0x50,0x52,0x54,0x50,0x08,0x50,0x52,  /* 00000460    ".PRTP.PR" */
-    0x54,0x50,0x12,0x43,0x0E,0x10,0x12,0x0B,  /* 00000468    "TP.C...." */
-    0x04,0x0B,0xFF,0xFF,0x00,0x4C,0x4E,0x4B,  /* 00000470    ".....LNK" */
-    0x41,0x00,0x12,0x0B,0x04,0x0B,0xFF,0xFF,  /* 00000478    "A......." */
-    0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0C,  /* 00000480    ".LNKB..." */
-    0x04,0x0B,0xFF,0xFF,0x0A,0x02,0x4C,0x4E,  /* 00000488    "......LN" */
-    0x4B,0x43,0x00,0x12,0x0C,0x04,0x0B,0xFF,  /* 00000490    "KC......" */
-    0xFF,0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,  /* 00000498    "...LNKD." */
-    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 000004A0    "........" */
-    0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,  /* 000004A8    ".LNKB..." */
-    0x04,0x0C,0xFF,0xFF,0x01,0x00,0x01,0x4C,  /* 000004B0    ".......L" */
-    0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,  /* 000004B8    "NKC....." */
-    0xFF,0xFF,0x01,0x00,0x0A,0x02,0x4C,0x4E,  /* 000004C0    "......LN" */
-    0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000004C8    "KD......" */
-    0xFF,0x01,0x00,0x0A,0x03,0x4C,0x4E,0x4B,  /* 000004D0    ".....LNK" */
-    0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 000004D8    "A......." */
-    0x02,0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,  /* 000004E0    "...LNKC." */
-    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x02,0x00,  /* 000004E8    "........" */
-    0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,  /* 000004F0    ".LNKD..." */
-    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x02,  /* 000004F8    "........" */
-    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,  /* 00000500    "LNKA...." */
-    0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x03,0x4C,  /* 00000508    ".......L" */
-    0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,  /* 00000510    "NKB....." */
-    0xFF,0xFF,0x03,0x00,0x00,0x4C,0x4E,0x4B,  /* 00000518    ".....LNK" */
-    0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 00000520    "D......." */
-    0x03,0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,  /* 00000528    "...LNKA." */
-    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 00000530    "........" */
-    0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000538    "..LNKB.." */
-    0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,  /* 00000540    "........" */
-    0x03,0x4C,0x4E,0x4B,0x43,0x00,0x08,0x50,  /* 00000548    ".LNKC..P" */
-    0x52,0x54,0x41,0x12,0x32,0x04,0x12,0x0B,  /* 00000550    "RTA.2..." */
-    0x04,0x0C,0xFF,0xFF,0x01,0x00,0x00,0x00,  /* 00000558    "........" */
-    0x0A,0x05,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000560    "........" */
-    0x02,0x00,0x00,0x00,0x0A,0x07,0x12,0x0B,  /* 00000568    "........" */
-    0x04,0x0C,0xFF,0xFF,0x03,0x00,0x00,0x00,  /* 00000570    "........" */
-    0x0A,0x0A,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000578    "........" */
-    0x04,0x00,0x00,0x00,0x0A,0x0B,0x5B,0x82,  /* 00000580    "......[." */
-    0x48,0x31,0x49,0x53,0x41,0x5F,0x08,0x5F,  /* 00000588    "H1ISA_._" */
-    0x41,0x44,0x52,0x00,0x5B,0x80,0x50,0x49,  /* 00000590    "ADR.[.PI" */
-    0x52,0x51,0x02,0x0A,0x60,0x0A,0x04,0x10,  /* 00000598    "RQ..`..." */
-    0x2E,0x5C,0x00,0x5B,0x81,0x29,0x5C,0x2F,  /* 000005A0    ".\.[.)\/" */
-    0x04,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49,  /* 000005A8    "._SB_PCI" */
-    0x30,0x49,0x53,0x41,0x5F,0x50,0x49,0x52,  /* 000005B0    "0ISA_PIR" */
-    0x51,0x01,0x50,0x49,0x52,0x41,0x08,0x50,  /* 000005B8    "Q.PIRA.P" */
-    0x49,0x52,0x42,0x08,0x50,0x49,0x52,0x43,  /* 000005C0    "IRB.PIRC" */
-    0x08,0x50,0x49,0x52,0x44,0x08,0x5B,0x82,  /* 000005C8    ".PIRD.[." */
-    0x46,0x0B,0x53,0x59,0x53,0x52,0x08,0x5F,  /* 000005D0    "F.SYSR._" */
-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x02,  /* 000005D8    "HID.A..." */
-    0x08,0x5F,0x55,0x49,0x44,0x01,0x08,0x43,  /* 000005E0    "._UID..C" */
-    0x52,0x53,0x5F,0x11,0x4E,0x08,0x0A,0x8A,  /* 000005E8    "RS_.N..." */
-    0x47,0x01,0x10,0x00,0x10,0x00,0x00,0x10,  /* 000005F0    "G......." */
-    0x47,0x01,0x22,0x00,0x22,0x00,0x00,0x0C,  /* 000005F8    "G."."..." */
-    0x47,0x01,0x30,0x00,0x30,0x00,0x00,0x10,  /* 00000600    "G.0.0..." */
-    0x47,0x01,0x44,0x00,0x44,0x00,0x00,0x1C,  /* 00000608    "G.D.D..." */
-    0x47,0x01,0x62,0x00,0x62,0x00,0x00,0x02,  /* 00000610    "G.b.b..." */
-    0x47,0x01,0x65,0x00,0x65,0x00,0x00,0x0B,  /* 00000618    "G.e.e..." */
-    0x47,0x01,0x72,0x00,0x72,0x00,0x00,0x0E,  /* 00000620    "G.r.r..." */
-    0x47,0x01,0x80,0x00,0x80,0x00,0x00,0x01,  /* 00000628    "G......." */
-    0x47,0x01,0x84,0x00,0x84,0x00,0x00,0x03,  /* 00000630    "G......." */
-    0x47,0x01,0x88,0x00,0x88,0x00,0x00,0x01,  /* 00000638    "G......." */
-    0x47,0x01,0x8C,0x00,0x8C,0x00,0x00,0x03,  /* 00000640    "G......." */
-    0x47,0x01,0x90,0x00,0x90,0x00,0x00,0x10,  /* 00000648    "G......." */
-    0x47,0x01,0xA2,0x00,0xA2,0x00,0x00,0x1C,  /* 00000650    "G......." */
-    0x47,0x01,0xE0,0x00,0xE0,0x00,0x00,0x10,  /* 00000658    "G......." */
-    0x47,0x01,0xA0,0x08,0xA0,0x08,0x00,0x04,  /* 00000660    "G......." */
-    0x47,0x01,0xC0,0x0C,0xC0,0x0C,0x00,0x10,  /* 00000668    "G......." */
-    0x47,0x01,0xD0,0x04,0xD0,0x04,0x00,0x02,  /* 00000670    "G......." */
-    0x79,0x00,0x14,0x0B,0x5F,0x43,0x52,0x53,  /* 00000678    "y..._CRS" */
-    0x00,0xA4,0x43,0x52,0x53,0x5F,0x5B,0x82,  /* 00000680    "..CRS_[." */
-    0x2B,0x50,0x49,0x43,0x5F,0x08,0x5F,0x48,  /* 00000688    "+PIC_._H" */
-    0x49,0x44,0x0B,0x41,0xD0,0x08,0x5F,0x43,  /* 00000690    "ID.A.._C" */
-    0x52,0x53,0x11,0x18,0x0A,0x15,0x47,0x01,  /* 00000698    "RS....G." */
-    0x20,0x00,0x20,0x00,0x01,0x02,0x47,0x01,  /* 000006A0    " . ...G." */
-    0xA0,0x00,0xA0,0x00,0x01,0x02,0x22,0x04,  /* 000006A8    "......"." */
-    0x00,0x79,0x00,0x5B,0x82,0x47,0x05,0x44,  /* 000006B0    ".y.[.G.D" */
-    0x4D,0x41,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 000006B8    "MA0._HID" */
-    0x0C,0x41,0xD0,0x02,0x00,0x08,0x5F,0x43,  /* 000006C0    ".A...._C" */
-    0x52,0x53,0x11,0x41,0x04,0x0A,0x3D,0x2A,  /* 000006C8    "RS.A..=*" */
-    0x10,0x04,0x47,0x01,0x00,0x00,0x00,0x00,  /* 000006D0    "..G....." */
-    0x00,0x10,0x47,0x01,0x81,0x00,0x81,0x00,  /* 000006D8    "..G....." */
-    0x00,0x03,0x47,0x01,0x87,0x00,0x87,0x00,  /* 000006E0    "..G....." */
-    0x00,0x01,0x47,0x01,0x89,0x00,0x89,0x00,  /* 000006E8    "..G....." */
-    0x00,0x03,0x47,0x01,0x8F,0x00,0x8F,0x00,  /* 000006F0    "..G....." */
-    0x00,0x01,0x47,0x01,0xC0,0x00,0xC0,0x00,  /* 000006F8    "..G....." */
-    0x00,0x20,0x47,0x01,0x80,0x04,0x80,0x04,  /* 00000700    ". G....." */
-    0x00,0x10,0x79,0x00,0x5B,0x82,0x25,0x54,  /* 00000708    "..y.[.%T" */
-    0x4D,0x52,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00000710    "MR_._HID" */
-    0x0C,0x41,0xD0,0x01,0x00,0x08,0x5F,0x43,  /* 00000718    ".A...._C" */
-    0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,  /* 00000720    "RS....G." */
-    0x40,0x00,0x40,0x00,0x00,0x04,0x22,0x01,  /* 00000728    "@.@..."." */
-    0x00,0x79,0x00,0x5B,0x82,0x25,0x52,0x54,  /* 00000730    ".y.[.%RT" */
-    0x43,0x5F,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000738    "C_._HID." */
-    0x41,0xD0,0x0B,0x00,0x08,0x5F,0x43,0x52,  /* 00000740    "A...._CR" */
-    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x70,  /* 00000748    "S....G.p" */
-    0x00,0x70,0x00,0x00,0x02,0x22,0x00,0x01,  /* 00000750    ".p...".." */
-    0x79,0x00,0x5B,0x82,0x22,0x53,0x50,0x4B,  /* 00000758    "y.[."SPK" */
-    0x52,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000760    "R._HID.A" */
-    0xD0,0x08,0x00,0x08,0x5F,0x43,0x52,0x53,  /* 00000768    "...._CRS" */
-    0x11,0x0D,0x0A,0x0A,0x47,0x01,0x61,0x00,  /* 00000770    "....G.a." */
-    0x61,0x00,0x00,0x01,0x79,0x00,0x5B,0x82,  /* 00000778    "a...y.[." */
-    0x31,0x50,0x53,0x32,0x4D,0x08,0x5F,0x48,  /* 00000780    "1PS2M._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x0F,0x13,0x08,  /* 00000788    "ID.A...." */
-    0x5F,0x43,0x49,0x44,0x0C,0x41,0xD0,0x0F,  /* 00000790    "_CID.A.." */
-    0x13,0x14,0x09,0x5F,0x53,0x54,0x41,0x00,  /* 00000798    "..._STA." */
-    0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,  /* 000007A0    "...._CRS" */
-    0x11,0x08,0x0A,0x05,0x22,0x00,0x10,0x79,  /* 000007A8    "...."..y" */
-    0x00,0x5B,0x82,0x42,0x04,0x50,0x53,0x32,  /* 000007B0    ".[.B.PS2" */
-    0x4B,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 000007B8    "K._HID.A" */
-    0xD0,0x03,0x03,0x08,0x5F,0x43,0x49,0x44,  /* 000007C0    "...._CID" */
-    0x0C,0x41,0xD0,0x03,0x0B,0x14,0x09,0x5F,  /* 000007C8    ".A....._" */
-    0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,  /* 000007D0    "STA....." */
-    0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15,  /* 000007D8    "_CRS...." */
-    0x47,0x01,0x60,0x00,0x60,0x00,0x00,0x01,  /* 000007E0    "G.`.`..." */
-    0x47,0x01,0x64,0x00,0x64,0x00,0x00,0x01,  /* 000007E8    "G.d.d..." */
-    0x22,0x02,0x00,0x79,0x00,0x5B,0x82,0x3A,  /* 000007F0    ""..y.[.:" */
-    0x46,0x44,0x43,0x30,0x08,0x5F,0x48,0x49,  /* 000007F8    "FDC0._HI" */
-    0x44,0x0C,0x41,0xD0,0x07,0x00,0x14,0x09,  /* 00000800    "D.A....." */
-    0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,  /* 00000808    "_STA...." */
-    0x08,0x5F,0x43,0x52,0x53,0x11,0x1B,0x0A,  /* 00000810    "._CRS..." */
-    0x18,0x47,0x01,0xF0,0x03,0xF0,0x03,0x01,  /* 00000818    ".G......" */
-    0x06,0x47,0x01,0xF7,0x03,0xF7,0x03,0x01,  /* 00000820    ".G......" */
-    0x01,0x22,0x40,0x00,0x2A,0x04,0x00,0x79,  /* 00000828    "."@.*..y" */
-    0x00,0x5B,0x82,0x35,0x55,0x41,0x52,0x31,  /* 00000830    ".[.5UAR1" */
-    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000838    "._HID.A." */
-    0x05,0x01,0x08,0x5F,0x55,0x49,0x44,0x01,  /* 00000840    "..._UID." */
-    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000848    ".._STA.." */
-    0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 00000850    "..._CRS." */
-    0x10,0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,  /* 00000858    "...G...." */
-    0x03,0x01,0x08,0x22,0x10,0x00,0x79,0x00,  /* 00000860    "..."..y." */
-    0x5B,0x82,0x36,0x4C,0x54,0x50,0x31,0x08,  /* 00000868    "[.6LTP1." */
-    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x04,  /* 00000870    "_HID.A.." */
-    0x00,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,  /* 00000878    ".._UID.." */
-    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000880    ".._STA.." */
-    0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 00000888    "..._CRS." */
-    0x10,0x0A,0x0D,0x47,0x01,0x78,0x03,0x78,  /* 00000890    "...G.x.x" */
-    0x03,0x08,0x08,0x22,0x80,0x00,0x79,0x00,  /* 00000898    "..."..y." */
-
+    0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
+    0x00,0x79,0x00,0x5B,0x82,0x4D,0x83,0x50,  /* 000000F0    ".y.[.M.P" */
+    0x43,0x49,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 000000F8    "CI0._HID" */
+    0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F,0x55,  /* 00000100    ".A...._U" */
+    0x49,0x44,0x00,0x08,0x5F,0x41,0x44,0x52,  /* 00000108    "ID.._ADR" */
+    0x00,0x08,0x5F,0x42,0x42,0x4E,0x00,0x5B,  /* 00000110    ".._BBN.[" */
+    0x80,0x50,0x49,0x52,0x50,0x02,0x0A,0x3C,  /* 00000118    ".PIRP..<" */
+    0x0A,0x10,0x5B,0x81,0x24,0x50,0x49,0x52,  /* 00000120    "..[.$PIR" */
+    0x50,0x01,0x49,0x52,0x51,0x33,0x03,0x49,  /* 00000128    "P.IRQ3.I" */
+    0x52,0x51,0x35,0x05,0x49,0x52,0x51,0x37,  /* 00000130    "RQ5.IRQ7" */
+    0x07,0x49,0x52,0x51,0x39,0x09,0x49,0x52,  /* 00000138    ".IRQ9.IR" */
+    0x51,0x41,0x0A,0x49,0x52,0x51,0x42,0x0B,  /* 00000140    "QA.IRQB." */
+    0x14,0x4A,0x06,0x5F,0x43,0x52,0x53,0x00,  /* 00000148    ".J._CRS." */
+    0x08,0x50,0x52,0x54,0x30,0x11,0x48,0x05,  /* 00000150    ".PRT0.H." */
+    0x0A,0x54,0x88,0x0D,0x00,0x02,0x0F,0x00,  /* 00000158    ".T......" */
+    0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,  /* 00000160    "........" */
+    0x00,0x01,0x47,0x01,0xF8,0x0C,0xF8,0x0C,  /* 00000168    "..G....." */
+    0x01,0x08,0x88,0x0D,0x00,0x01,0x0C,0x03,  /* 00000170    "........" */
+    0x00,0x00,0x00,0x00,0xF7,0x0C,0x00,0x00,  /* 00000178    "........" */
+    0xF8,0x0C,0x88,0x0D,0x00,0x01,0x0C,0x03,  /* 00000180    "........" */
+    0x00,0x00,0x00,0x0D,0xFF,0xFF,0x00,0x00,  /* 00000188    "........" */
+    0x00,0xF3,0x87,0x17,0x00,0x00,0x0D,0x03,  /* 00000190    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,  /* 00000198    "........" */
+    0xFF,0xFF,0xFF,0xF4,0x00,0x00,0x00,0x00,  /* 000001A0    "........" */
+    0x00,0x00,0x00,0x05,0x79,0x00,0xA4,0x50,  /* 000001A8    "....y..P" */
+    0x52,0x54,0x30,0x08,0x42,0x55,0x46,0x41,  /* 000001B0    "RT0.BUFA" */
+    0x11,0x09,0x0A,0x06,0x23,0xF8,0xDC,0x18,  /* 000001B8    "....#..." */
+    0x79,0x00,0x08,0x42,0x55,0x46,0x42,0x11,  /* 000001C0    "y..BUFB." */
+    0x09,0x0A,0x06,0x23,0x00,0x00,0x18,0x79,  /* 000001C8    "...#...y" */
+    0x00,0x8B,0x42,0x55,0x46,0x42,0x01,0x49,  /* 000001D0    "..BUFB.I" */
+    0x52,0x51,0x56,0x08,0x42,0x55,0x46,0x43,  /* 000001D8    "RQV.BUFC" */
+    0x11,0x07,0x0A,0x04,0x05,0x07,0x0A,0x0B,  /* 000001E0    "........" */
+    0x8C,0x42,0x55,0x46,0x43,0x01,0x50,0x49,  /* 000001E8    ".BUFC.PI" */
+    0x51,0x41,0x8C,0x42,0x55,0x46,0x43,0x01,  /* 000001F0    "QA.BUFC." */
+    0x50,0x49,0x51,0x42,0x8C,0x42,0x55,0x46,  /* 000001F8    "PIQB.BUF" */
+    0x43,0x01,0x50,0x49,0x51,0x43,0x8C,0x42,  /* 00000200    "C.PIQC.B" */
+    0x55,0x46,0x43,0x01,0x50,0x49,0x51,0x44,  /* 00000208    "UFC.PIQD" */
+    0x5B,0x82,0x48,0x08,0x4C,0x4E,0x4B,0x41,  /* 00000210    "[.H.LNKA" */
+    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000218    "._HID.A." */
+    0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x01,  /* 00000220    "..._UID." */
+    0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,  /* 00000228    ".._STA.{" */
+    0x50,0x49,0x52,0x41,0x0A,0x80,0x60,0xA0,  /* 00000230    "PIRA..`." */
+    0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,  /* 00000238    "..`....." */
+    0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,  /* 00000240    "......._" */
+    0x50,0x52,0x53,0x00,0xA4,0x42,0x55,0x46,  /* 00000248    "PRS..BUF" */
+    0x41,0x14,0x11,0x5F,0x44,0x49,0x53,0x00,  /* 00000250    "A.._DIS." */
+    0x7D,0x50,0x49,0x52,0x41,0x0A,0x80,0x50,  /* 00000258    "}PIRA..P" */
+    0x49,0x52,0x41,0x14,0x1A,0x5F,0x43,0x52,  /* 00000260    "IRA.._CR" */
+    0x53,0x00,0x7B,0x50,0x49,0x52,0x41,0x0A,  /* 00000268    "S.{PIRA." */
+    0x0F,0x60,0x79,0x01,0x60,0x49,0x52,0x51,  /* 00000270    ".`y.`IRQ" */
+    0x56,0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,  /* 00000278    "V.BUFB.." */
+    0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01,  /* 00000280    "_SRS..h." */
+    0x49,0x52,0x51,0x31,0x82,0x49,0x52,0x51,  /* 00000288    "IRQ1.IRQ" */
+    0x31,0x60,0x76,0x60,0x70,0x60,0x50,0x49,  /* 00000290    "1`v`p`PI" */
+    0x52,0x41,0x5B,0x82,0x49,0x08,0x4C,0x4E,  /* 00000298    "RA[.I.LN" */
+    0x4B,0x42,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 000002A0    "KB._HID." */
+    0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,  /* 000002A8    "A...._UI" */
+    0x44,0x0A,0x02,0x14,0x1C,0x5F,0x53,0x54,  /* 000002B0    "D...._ST" */
+    0x41,0x00,0x7B,0x50,0x49,0x52,0x42,0x0A,  /* 000002B8    "A.{PIRB." */
+    0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,  /* 000002C0    ".`...`.." */
+    0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,  /* 000002C8    "........" */
+    0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,  /* 000002D0    ".._PRS.." */
+    0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44,  /* 000002D8    "BUFA.._D" */
+    0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x42,  /* 000002E0    "IS.}PIRB" */
+    0x0A,0x80,0x50,0x49,0x52,0x42,0x14,0x1A,  /* 000002E8    "..PIRB.." */
+    0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49,  /* 000002F0    "_CRS.{PI" */
+    0x52,0x42,0x0A,0x0F,0x60,0x79,0x01,0x60,  /* 000002F8    "RB..`y.`" */
+    0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46,  /* 00000300    "IRQV.BUF" */
+    0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,  /* 00000308    "B.._SRS." */
+    0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82,  /* 00000310    ".h.IRQ1." */
+    0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70,  /* 00000318    "IRQ1`v`p" */
+    0x60,0x50,0x49,0x52,0x42,0x5B,0x82,0x49,  /* 00000320    "`PIRB[.I" */
+    0x08,0x4C,0x4E,0x4B,0x43,0x08,0x5F,0x48,  /* 00000328    ".LNKC._H" */
+    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,  /* 00000330    "ID.A...." */
+    0x5F,0x55,0x49,0x44,0x0A,0x03,0x14,0x1C,  /* 00000338    "_UID...." */
+    0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49,  /* 00000340    "_STA.{PI" */
+    0x52,0x43,0x0A,0x80,0x60,0xA0,0x08,0x93,  /* 00000348    "RC..`..." */
+    0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,  /* 00000350    "`......." */
+    0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,  /* 00000358    "....._PR" */
+    0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14,  /* 00000360    "S..BUFA." */
+    0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,  /* 00000368    "._DIS.}P" */
+    0x49,0x52,0x43,0x0A,0x80,0x50,0x49,0x52,  /* 00000370    "IRC..PIR" */
+    0x43,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,  /* 00000378    "C.._CRS." */
+    0x7B,0x50,0x49,0x52,0x43,0x0A,0x0F,0x60,  /* 00000380    "{PIRC..`" */
+    0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4,  /* 00000388    "y.`IRQV." */
+    0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,  /* 00000390    "BUFB.._S" */
+    0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52,  /* 00000398    "RS..h.IR" */
+    0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60,  /* 000003A0    "Q1.IRQ1`" */
+    0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x43,  /* 000003A8    "v`p`PIRC" */
+    0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,0x44,  /* 000003B0    "[.I.LNKD" */
+    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000003B8    "._HID.A." */
+    0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,  /* 000003C0    "..._UID." */
+    0x04,0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,  /* 000003C8    "..._STA." */
+    0x7B,0x50,0x49,0x52,0x44,0x0A,0x80,0x60,  /* 000003D0    "{PIRD..`" */
+    0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,  /* 000003D8    "...`...." */
+    0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,  /* 000003E0    "........" */
+    0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,0x55,  /* 000003E8    "_PRS..BU" */
+    0x46,0x41,0x14,0x11,0x5F,0x44,0x49,0x53,  /* 000003F0    "FA.._DIS" */
+    0x00,0x7D,0x50,0x49,0x52,0x44,0x0A,0x80,  /* 000003F8    ".}PIRD.." */
+    0x50,0x49,0x52,0x44,0x14,0x1A,0x5F,0x43,  /* 00000400    "PIRD.._C" */
+    0x52,0x53,0x00,0x7B,0x50,0x49,0x52,0x44,  /* 00000408    "RS.{PIRD" */
+    0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,0x52,  /* 00000410    "..`y.`IR" */
+    0x51,0x56,0xA4,0x42,0x55,0x46,0x42,0x14,  /* 00000418    "QV.BUFB." */
+    0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,  /* 00000420    "._SRS..h" */
+    0x01,0x49,0x52,0x51,0x31,0x82,0x49,0x52,  /* 00000428    ".IRQ1.IR" */
+    0x51,0x31,0x60,0x76,0x60,0x70,0x60,0x50,  /* 00000430    "Q1`v`p`P" */
+    0x49,0x52,0x44,0x08,0x5F,0x50,0x52,0x54,  /* 00000438    "IRD._PRT" */
+    0x12,0x43,0x1D,0x20,0x12,0x0D,0x04,0x0C,  /* 00000440    ".C. ...." */
+    0xFF,0xFF,0x01,0x00,0x00,0x4C,0x4E,0x4B,  /* 00000448    ".....LNK" */
+    0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 00000450    "A......." */
+    0x01,0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,  /* 00000458    "...LNKB." */
+    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 00000460    "........" */
+    0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 00000468    "..LNKC.." */
+    0x0E,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A,  /* 00000470    "........" */
+    0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,  /* 00000478    ".LNKD..." */
+    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x00,0x4C,  /* 00000480    ".......L" */
+    0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,  /* 00000488    "NKB....." */
+    0xFF,0xFF,0x02,0x00,0x01,0x4C,0x4E,0x4B,  /* 00000490    ".....LNK" */
+    0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000498    "C......." */
+    0x02,0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,  /* 000004A0    "....LNKD" */
+    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x02,  /* 000004A8    "........" */
+    0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,  /* 000004B0    "...LNKA." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 000004B8    "........" */
+    0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,  /* 000004C0    ".LNKC..." */
+    0x04,0x0C,0xFF,0xFF,0x03,0x00,0x01,0x4C,  /* 000004C8    ".......L" */
+    0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,  /* 000004D0    "NKD....." */
+    0xFF,0xFF,0x03,0x00,0x0A,0x02,0x4C,0x4E,  /* 000004D8    "......LN" */
+    0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000004E0    "KA......" */
+    0xFF,0x03,0x00,0x0A,0x03,0x4C,0x4E,0x4B,  /* 000004E8    ".....LNK" */
+    0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 000004F0    "B......." */
+    0x04,0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,  /* 000004F8    "...LNKD." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x04,0x00,  /* 00000500    "........" */
+    0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,  /* 00000508    ".LNKA..." */
+    0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x02,  /* 00000510    "........" */
+    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,  /* 00000518    "LNKB...." */
+    0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x03,0x4C,  /* 00000520    ".......L" */
+    0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,  /* 00000528    "NKC....." */
+    0xFF,0xFF,0x05,0x00,0x00,0x4C,0x4E,0x4B,  /* 00000530    ".....LNK" */
+    0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 00000538    "A......." */
+    0x05,0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,  /* 00000540    "...LNKB." */
+    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x05,0x00,  /* 00000548    "........" */
+    0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 00000550    "..LNKC.." */
+    0x0E,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x0A,  /* 00000558    "........" */
+    0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,  /* 00000560    ".LNKD..." */
+    0x04,0x0C,0xFF,0xFF,0x06,0x00,0x00,0x4C,  /* 00000568    ".......L" */
+    0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,  /* 00000570    "NKB....." */
+    0xFF,0xFF,0x06,0x00,0x01,0x4C,0x4E,0x4B,  /* 00000578    ".....LNK" */
+    0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000580    "C......." */
+    0x06,0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,  /* 00000588    "....LNKD" */
+    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x06,  /* 00000590    "........" */
+    0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,  /* 00000598    "...LNKA." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x07,0x00,  /* 000005A0    "........" */
+    0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,  /* 000005A8    ".LNKC..." */
+    0x04,0x0C,0xFF,0xFF,0x07,0x00,0x01,0x4C,  /* 000005B0    ".......L" */
+    0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,  /* 000005B8    "NKD....." */
+    0xFF,0xFF,0x07,0x00,0x0A,0x02,0x4C,0x4E,  /* 000005C0    "......LN" */
+    0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000005C8    "KA......" */
+    0xFF,0x07,0x00,0x0A,0x03,0x4C,0x4E,0x4B,  /* 000005D0    ".....LNK" */
+    0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,  /* 000005D8    "B......." */
+    0x08,0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,  /* 000005E0    "...LNKD." */
+    0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x08,0x00,  /* 000005E8    "........" */
+    0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,  /* 000005F0    ".LNKA..." */
+    0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x02,  /* 000005F8    "........" */
+    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,  /* 00000600    "LNKB...." */
+    0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x03,0x4C,  /* 00000608    ".......L" */
+    0x4E,0x4B,0x43,0x00,0x5B,0x82,0x4C,0x31,  /* 00000610    "NKC.[.L1" */
+    0x49,0x53,0x41,0x5F,0x08,0x5F,0x41,0x44,  /* 00000618    "ISA_._AD" */
+    0x52,0x0C,0x00,0x00,0x01,0x00,0x5B,0x80,  /* 00000620    "R.....[." */
+    0x50,0x49,0x52,0x51,0x02,0x0A,0x60,0x0A,  /* 00000628    "PIRQ..`." */
+    0x04,0x10,0x2E,0x5C,0x00,0x5B,0x81,0x29,  /* 00000630    "...\.[.)" */
+    0x5C,0x2F,0x04,0x5F,0x53,0x42,0x5F,0x50,  /* 00000638    "\/._SB_P" */
+    0x43,0x49,0x30,0x49,0x53,0x41,0x5F,0x50,  /* 00000640    "CI0ISA_P" */
+    0x49,0x52,0x51,0x01,0x50,0x49,0x52,0x41,  /* 00000648    "IRQ.PIRA" */
+    0x08,0x50,0x49,0x52,0x42,0x08,0x50,0x49,  /* 00000650    ".PIRB.PI" */
+    0x52,0x43,0x08,0x50,0x49,0x52,0x44,0x08,  /* 00000658    "RC.PIRD." */
+    0x5B,0x82,0x46,0x0B,0x53,0x59,0x53,0x52,  /* 00000660    "[.F.SYSR" */
+    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000668    "._HID.A." */
+    0x0C,0x02,0x08,0x5F,0x55,0x49,0x44,0x01,  /* 00000670    "..._UID." */
+    0x08,0x43,0x52,0x53,0x5F,0x11,0x4E,0x08,  /* 00000678    ".CRS_.N." */
+    0x0A,0x8A,0x47,0x01,0x10,0x00,0x10,0x00,  /* 00000680    "..G....." */
+    0x00,0x10,0x47,0x01,0x22,0x00,0x22,0x00,  /* 00000688    "..G."."." */
+    0x00,0x0C,0x47,0x01,0x30,0x00,0x30,0x00,  /* 00000690    "..G.0.0." */
+    0x00,0x10,0x47,0x01,0x44,0x00,0x44,0x00,  /* 00000698    "..G.D.D." */
+    0x00,0x1C,0x47,0x01,0x62,0x00,0x62,0x00,  /* 000006A0    "..G.b.b." */
+    0x00,0x02,0x47,0x01,0x65,0x00,0x65,0x00,  /* 000006A8    "..G.e.e." */
+    0x00,0x0B,0x47,0x01,0x72,0x00,0x72,0x00,  /* 000006B0    "..G.r.r." */
+    0x00,0x0E,0x47,0x01,0x80,0x00,0x80,0x00,  /* 000006B8    "..G....." */
+    0x00,0x01,0x47,0x01,0x84,0x00,0x84,0x00,  /* 000006C0    "..G....." */
+    0x00,0x03,0x47,0x01,0x88,0x00,0x88,0x00,  /* 000006C8    "..G....." */
+    0x00,0x01,0x47,0x01,0x8C,0x00,0x8C,0x00,  /* 000006D0    "..G....." */
+    0x00,0x03,0x47,0x01,0x90,0x00,0x90,0x00,  /* 000006D8    "..G....." */
+    0x00,0x10,0x47,0x01,0xA2,0x00,0xA2,0x00,  /* 000006E0    "..G....." */
+    0x00,0x1C,0x47,0x01,0xE0,0x00,0xE0,0x00,  /* 000006E8    "..G....." */
+    0x00,0x10,0x47,0x01,0xA0,0x08,0xA0,0x08,  /* 000006F0    "..G....." */
+    0x00,0x04,0x47,0x01,0xC0,0x0C,0xC0,0x0C,  /* 000006F8    "..G....." */
+    0x00,0x10,0x47,0x01,0xD0,0x04,0xD0,0x04,  /* 00000700    "..G....." */
+    0x00,0x02,0x79,0x00,0x14,0x0B,0x5F,0x43,  /* 00000708    "..y..._C" */
+    0x52,0x53,0x00,0xA4,0x43,0x52,0x53,0x5F,  /* 00000710    "RS..CRS_" */
+    0x5B,0x82,0x2B,0x50,0x49,0x43,0x5F,0x08,  /* 00000718    "[.+PIC_." */
+    0x5F,0x48,0x49,0x44,0x0B,0x41,0xD0,0x08,  /* 00000720    "_HID.A.." */
+    0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15,  /* 00000728    "_CRS...." */
+    0x47,0x01,0x20,0x00,0x20,0x00,0x01,0x02,  /* 00000730    "G. . ..." */
+    0x47,0x01,0xA0,0x00,0xA0,0x00,0x01,0x02,  /* 00000738    "G......." */
+    0x22,0x04,0x00,0x79,0x00,0x5B,0x82,0x47,  /* 00000740    ""..y.[.G" */
+    0x05,0x44,0x4D,0x41,0x30,0x08,0x5F,0x48,  /* 00000748    ".DMA0._H" */
+    0x49,0x44,0x0C,0x41,0xD0,0x02,0x00,0x08,  /* 00000750    "ID.A...." */
+    0x5F,0x43,0x52,0x53,0x11,0x41,0x04,0x0A,  /* 00000758    "_CRS.A.." */
+    0x3D,0x2A,0x10,0x04,0x47,0x01,0x00,0x00,  /* 00000760    "=*..G..." */
+    0x00,0x00,0x00,0x10,0x47,0x01,0x81,0x00,  /* 00000768    "....G..." */
+    0x81,0x00,0x00,0x03,0x47,0x01,0x87,0x00,  /* 00000770    "....G..." */
+    0x87,0x00,0x00,0x01,0x47,0x01,0x89,0x00,  /* 00000778    "....G..." */
+    0x89,0x00,0x00,0x03,0x47,0x01,0x8F,0x00,  /* 00000780    "....G..." */
+    0x8F,0x00,0x00,0x01,0x47,0x01,0xC0,0x00,  /* 00000788    "....G..." */
+    0xC0,0x00,0x00,0x20,0x47,0x01,0x80,0x04,  /* 00000790    "... G..." */
+    0x80,0x04,0x00,0x10,0x79,0x00,0x5B,0x82,  /* 00000798    "....y.[." */
+    0x25,0x54,0x4D,0x52,0x5F,0x08,0x5F,0x48,  /* 000007A0    "%TMR_._H" */
+    0x49,0x44,0x0C,0x41,0xD0,0x01,0x00,0x08,  /* 000007A8    "ID.A...." */
+    0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,  /* 000007B0    "_CRS...." */
+    0x47,0x01,0x40,0x00,0x40,0x00,0x00,0x04,  /* 000007B8    "G.@.@..." */
+    0x22,0x01,0x00,0x79,0x00,0x5B,0x82,0x25,  /* 000007C0    ""..y.[.%" */
+    0x52,0x54,0x43,0x5F,0x08,0x5F,0x48,0x49,  /* 000007C8    "RTC_._HI" */
+    0x44,0x0C,0x41,0xD0,0x0B,0x00,0x08,0x5F,  /* 000007D0    "D.A...._" */
+    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 000007D8    "CRS....G" */
+    0x01,0x70,0x00,0x70,0x00,0x00,0x02,0x22,  /* 000007E0    ".p.p..."" */
+    0x00,0x01,0x79,0x00,0x5B,0x82,0x22,0x53,  /* 000007E8    "..y.[."S" */
+    0x50,0x4B,0x52,0x08,0x5F,0x48,0x49,0x44,  /* 000007F0    "PKR._HID" */
+    0x0C,0x41,0xD0,0x08,0x00,0x08,0x5F,0x43,  /* 000007F8    ".A...._C" */
+    0x52,0x53,0x11,0x0D,0x0A,0x0A,0x47,0x01,  /* 00000800    "RS....G." */
+    0x61,0x00,0x61,0x00,0x00,0x01,0x79,0x00,  /* 00000808    "a.a...y." */
+    0x5B,0x82,0x31,0x50,0x53,0x32,0x4D,0x08,  /* 00000810    "[.1PS2M." */
+    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0F,  /* 00000818    "_HID.A.." */
+    0x13,0x08,0x5F,0x43,0x49,0x44,0x0C,0x41,  /* 00000820    ".._CID.A" */
+    0xD0,0x0F,0x13,0x14,0x09,0x5F,0x53,0x54,  /* 00000828    "....._ST" */
+    0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,  /* 00000830    "A....._C" */
+    0x52,0x53,0x11,0x08,0x0A,0x05,0x22,0x00,  /* 00000838    "RS...."." */
+    0x10,0x79,0x00,0x5B,0x82,0x42,0x04,0x50,  /* 00000840    ".y.[.B.P" */
+    0x53,0x32,0x4B,0x08,0x5F,0x48,0x49,0x44,  /* 00000848    "S2K._HID" */
+    0x0C,0x41,0xD0,0x03,0x03,0x08,0x5F,0x43,  /* 00000850    ".A...._C" */
+    0x49,0x44,0x0C,0x41,0xD0,0x03,0x0B,0x14,  /* 00000858    "ID.A...." */
+    0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,  /* 00000860    "._STA..." */
+    0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x18,  /* 00000868    ".._CRS.." */
+    0x0A,0x15,0x47,0x01,0x60,0x00,0x60,0x00,  /* 00000870    "..G.`.`." */
+    0x00,0x01,0x47,0x01,0x64,0x00,0x64,0x00,  /* 00000878    "..G.d.d." */
+    0x00,0x01,0x22,0x02,0x00,0x79,0x00,0x5B,  /* 00000880    ".."..y.[" */
+    0x82,0x3A,0x46,0x44,0x43,0x30,0x08,0x5F,  /* 00000888    ".:FDC0._" */
+    0x48,0x49,0x44,0x0C,0x41,0xD0,0x07,0x00,  /* 00000890    "HID.A..." */
+    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000898    ".._STA.." */
+    0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 000008A0    "..._CRS." */
+    0x1B,0x0A,0x18,0x47,0x01,0xF0,0x03,0xF0,  /* 000008A8    "...G...." */
+    0x03,0x01,0x06,0x47,0x01,0xF7,0x03,0xF7,  /* 000008B0    "...G...." */
+    0x03,0x01,0x01,0x22,0x40,0x00,0x2A,0x04,  /* 000008B8    "..."@.*." */
+    0x00,0x79,0x00,0x5B,0x82,0x35,0x55,0x41,  /* 000008C0    ".y.[.5UA" */
+    0x52,0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 000008C8    "R1._HID." */
+    0x41,0xD0,0x05,0x01,0x08,0x5F,0x55,0x49,  /* 000008D0    "A...._UI" */
+    0x44,0x01,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 000008D8    "D..._STA" */
+    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 000008E0    "....._CR" */
+    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8,  /* 000008E8    "S....G.." */
+    0x03,0xF8,0x03,0x01,0x08,0x22,0x10,0x00,  /* 000008F0    ".....".." */
+    0x79,0x00,0x5B,0x82,0x36,0x4C,0x54,0x50,  /* 000008F8    "y.[.6LTP" */
+    0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000900    "1._HID.A" */
+    0xD0,0x04,0x00,0x08,0x5F,0x55,0x49,0x44,  /* 00000908    "...._UID" */
+    0x0A,0x02,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 00000910    "...._STA" */
+    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 00000918    "....._CR" */
+    0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x78,  /* 00000920    "S....G.x" */
+    0x03,0x78,0x03,0x08,0x08,0x22,0x80,0x00,  /* 00000928    ".x...".." */
+    0x79,0x00,
 };
 int DsdtLen=sizeof(AmlCode);

[-- Attachment #4: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH][HVM] fix PCI interrupt routing via ACPI
@ 2006-10-13  4:36 Wang, Winston L
  2006-10-13 16:36 ` Dave Lively
  0 siblings, 1 reply; 12+ messages in thread
From: Wang, Winston L @ 2006-10-13  4:36 UTC (permalink / raw)
  To: David Lively; +Cc: xen-devel

Hi David,

I agreed with your fix this _ADR for PCI router issue as we discussed
one week before. I think adding more _PRT slot is fine for more new PCI
devices

Yes, current qemu using apic as  pic IRQ0-15's one to one mapping. Same
thing for MPS table for non-acpi mode.

Now we cut the apic mode support, always return the pic mode IRQ and
Link, that may be fine, but when we want to expand more apic IRQs, what
are we going to do? Then have to going back if need more IRQs. 
By the way, does the code working on SMP guest OS (when apic=1)?

Thanks,

Winston,

-----Original Message-----

Date: Thu, 12 Oct 2006 14:01:16 -0400
From: David Lively <dlively@virtualiron.com>
Subject: [Xen-devel] [PATCH][HVM] fix PCI interrupt routing via ACPI
To: xen-devel@lists.xensource.com
Message-ID: <452E82EC.8000402@virtualiron.com>
Content-Type: text/plain; charset="iso-8859-1"

Hi -

  The attached patch gets PCI interrupt routing working with ACPI.
The basic problem was we weren't specifying the correct _ADR for
the PCI-ISA bridge in the ACPI DSDT.  (It's the PCI-ISA bridge that
implements PCI interrupt routing.  Its address is device 1, fn 0 on the
parent PCI bus -- see the _ADR change in the patch.)  This makes
attempts
to program the PCI interrupt routing (i.e., to assign a particular IRQ 
to one
of the four PCI "LNK" devices) write into the correct device's PCI
config
space.  (These writes were going into the PCI-host bridge's config space

...)

  But that fix alone causes even more grief with ACPI-compliant guests
that use (the I/O) APIC.  What happens is the fixed PRTA PCI routing
table
returned for APIC mode doesn't reference the LNK devices (which are
still
defined in ACPI), and so calls their _DIS (disable) methods in ACPI,
which
effectively stops PCI devices from interrupting.  There are a couple of 
alternatives
for fixing this.  I think the best one (which happens to be easiest, and

what I've
implemented in this patch) is to *always* return the programmable PRTP
routing table, even in APIC mode.  That way the LNK devices are always
used
so we don't need to detect that they're not used.

  This also has the advantage of allowing APIC-mode guests to better
manage
IRQ conflicts.  Normally (on real hardware) the APIC-mode PRT table maps
the four PCI interrupts to IRQs > 15.  But QEMU is (essentially, for 
now) wired
straight into a virtual PIC -- we can't raise IRQs > 15, so the old 
APIC-mode
PRT was mapping them to IRQS < 16, subjecting them to the possible IRQ-
sharing that the PIC-mode table allows them to adjust via the LNK
devices.

  Oh yeah, the patch also corrects a typo in LNKA's _CRS method.  Surely

this
should be referencing PIRA, not PIRB (see the other LNKx's _CRS
methods).

  This combination of things gets rid of complaints about not finding
IRQs
for some PCI devices from several ACPI-compliant guests, including
Win2003
and RHEL4-64.  It also seemed to fix some more mysterious hang I was
seeing
(on xen-unstable only) when trying to boot certain configs with 
ACPI-compliant
guests.

Dave

P.S. The second attachment is a version of the fix that applies after 
the DSDT
fix from qing.he@intel.com.

P.P.S. Keir -- should we be submitting the patched AML (acpi_dsdt.c) as 
well?
I did, but wasn't sure of the convention ...

-------------- next part --------------
A non-text attachment was scrubbed...
Name: acpi-bios-pci-rt-fixes.patch
Type: text/x-patch
Size: 49220 bytes
Desc: not available
Url :
http://lists.xensource.com/archives/html/xen-devel/attachments/20061012/
34239df8/acpi-bios-pci-rt-fixes.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: acpi-bios-pci-rt-fixes-after-xen-platform-dsdt-fix.patch
Type: text/x-patch
Size: 48537 bytes
Desc: not available
Url :
http://lists.xensource.com/archives/html/xen-devel/attachments/20061012/
34239df8/acpi-bios-pci-rt-fixes-after-xen-platform-dsdt-fix.bin

------------------------------

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel


End of Xen-devel Digest, Vol 20, Issue 93
*****************************************

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-13  4:36 Wang, Winston L
@ 2006-10-13 16:36 ` Dave Lively
  2006-10-13 16:59   ` Keir Fraser
  0 siblings, 1 reply; 12+ messages in thread
From: Dave Lively @ 2006-10-13 16:36 UTC (permalink / raw)
  To: Wang, Winston L; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1450 bytes --]

On 10/13/06, Wang, Winston L <winston.l.wang@intel.com> wrote:
>
> Now we cut the apic mode support, always return the pic mode IRQ and
> Link, that may be fine, but when we want to expand more apic IRQs, what
> are we going to do? Then have to going back if need more IRQs.


If (when?) the device model is changed to have more than 16 IRQ outputs,
I guess there are a couple alternatives to take advantage of it:
  (a) Go back to statically-mapped IRQs into the larger space for APIC mode
      (requires fixing the problem I've avoided here, though that really
shouldn't
      be hard ...), OR
  (b) Make the LNKx devices' _PRS methods include IRQs > 16 for APIC
       mode.  This exposes the expanded set of possible IRQs to the
       guest interrupt routing code.  Trivial to implement.

I'm leaning towards (b), of course, since that's a simple extension to what
I've already written here.  Does that seem reasonable?

By the way, does the code working on SMP guest OS (when apic=1)?
>
>
I tested it on RHEL4 U2 64 bit SMP guest, which was definitely using the
APIC.  (The original _ADR fix I ran by you last week actually broke APIC
guests since the LNKx _DIS(able) methods started truly disabling emulated
PCI interrupts once they were writing into the proper PCI config space.
This
is what led me down the path to ignoring the PIC/APIC distinction.)  It's
also been (lightly) tested with Win2003 Server with the ACPI HAL (PIC
mode).

Dave

[-- Attachment #1.2: Type: text/html, Size: 2121 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-13 16:36 ` Dave Lively
@ 2006-10-13 16:59   ` Keir Fraser
  0 siblings, 0 replies; 12+ messages in thread
From: Keir Fraser @ 2006-10-13 16:59 UTC (permalink / raw)
  To: Dave Lively, Wang, Winston L; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 593 bytes --]

On 13/10/06 17:36, "Dave Lively" <dave.lively@gmail.com> wrote:

>   (b) Make the LNKx devices' _PRS methods include IRQs > 16 for APIC
>        mode.  This exposes the expanded set of possible IRQs to the
>        guest interrupt routing code.  Trivial to implement.

There are still only 4 LNK devices though (which PCI devices are striped
across), and they cannot address IRQs > 15. These are both limitations of
PIIX hardware. If we break that emulation, we may as well get rid of the
PIIX PCI-ISA bridge device altogether and statically define everything (not
a bad idea imo).

 -- Keir


[-- Attachment #1.2: Type: text/html, Size: 1155 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH][HVM] fix PCI interrupt routing via ACPI
@ 2006-10-13 23:27 Wang, Winston L
  2006-10-14  7:34 ` Keir Fraser
  2006-10-16 15:01 ` Dave Lively
  0 siblings, 2 replies; 12+ messages in thread
From: Wang, Winston L @ 2006-10-13 23:27 UTC (permalink / raw)
  To: Keir Fraser, Dave Lively; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1818 bytes --]

That's true, if we have more than 4  PCI devices need IRQ, then have to
share, it is doesn't matter how many PRT package entry you added for
each device in pic mode, only have 4  IRQ  to use.

 

And in APIC mode, IRQ is not routed through south bridge PCI IRQ router
for IOAPIC, those four PCI routers are for 8259 PIC. Current QEMU using
INT1_0/15 to IRQ0/15 one to one mapping, but that does not mean no APIC
mode support, if we have bug we have to fix.

 

I think (b) is a short term solution, if we upgrade south bridge from
PIIX3/4 to newer ICHx, we could have 8 PIC mode PCI IRQ router and 24
IOAPIC IRQ in APIC mode. I think IPF platform already support 24 IOAPIC
IRQs now.

 

I would like David separated the  patch, one for PIC mode PCI IRQ
routing _ADR address fix, this one is good, another one for  cutting PIC
mode support, this one may need more discussion. 

 

Regards,

 

Winston,

________________________________

From: Keir Fraser [mailto:Keir.Fraser@cl.cam.ac.uk] 
Sent: Friday, October 13, 2006 10:00 AM
To: Dave Lively; Wang, Winston L
Cc: xen-devel@lists.xensource.com
Subject: Re: [Xen-devel] [PATCH][HVM] fix PCI interrupt routing via ACPI

 

On 13/10/06 17:36, "Dave Lively" <dave.lively@gmail.com> wrote:

 (b) Make the LNKx devices' _PRS methods include IRQs > 16 for APIC
       mode.  This exposes the expanded set of possible IRQs to the
       guest interrupt routing code.  Trivial to implement.


There are still only 4 LNK devices though (which PCI devices are striped
across), and they cannot address IRQs > 15. These are both limitations
of PIIX hardware. If we break that emulation, we may as well get rid of
the PIIX PCI-ISA bridge device altogether and statically define
everything (not a bad idea imo).

 -- Keir


[-- Attachment #1.2: Type: text/html, Size: 6640 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-13 23:27 Wang, Winston L
@ 2006-10-14  7:34 ` Keir Fraser
  2006-10-16 14:51   ` Dave Lively
  2006-10-16 15:01 ` Dave Lively
  1 sibling, 1 reply; 12+ messages in thread
From: Keir Fraser @ 2006-10-14  7:34 UTC (permalink / raw)
  To: Wang, Winston L, Dave Lively; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1472 bytes --]

On 14/10/06 12:27 am, "Wang, Winston L" <winston.l.wang@intel.com> wrote:

> That¹s true, if we have more than 4  PCI devices need IRQ, then have to share,
> it is doesn¹t matter how many PRT package entry you added for each device in
> pic mode, only have 4  IRQ  to use.
>  
> And in APIC mode, IRQ is not routed through south bridge PCI IRQ router for
> IOAPIC, those four PCI routers are for 8259 PIC. Current QEMU using INT1_0/15
> to IRQ0/15 one to one mapping, but that does not mean no APIC mode support, if
> we have bug we have to fix.
>  
> I think (b) is a short term solution, if we upgrade south bridge from PIIX3/4
> to newer ICHx, we could have 8 PIC mode PCI IRQ router and 24 IOAPIC IRQ in
> APIC mode. I think IPF platform already support 24 IOAPIC  IRQs now.

Or, could we simply:
 1. throw away the PCI-ISA bridge device (from qemu and from the ACPI DSDT)
 2. throw away the legacy Œ$PIR¹ routing table in rombios.c
 3. initialise the IRQ field of each PCI device config space to sane unique
values
 4. Make ACPI PRTP static and match the values chosen in (3).
 5. Also throw away all the LNK stuff from ACPI DSDT

If we¹re allowed to do this (programmable PCI-ISA bridge isn¹t part of MP or
ACPI specs, for example) then this seems to involve throwing away a load of
tedious code and thus removing an IRQ-mapping bottleneck. No drawbacks,
unless I¹m ignorant of some PC architectural detail (quite possible)?

 -- Keir


[-- Attachment #1.2: Type: text/html, Size: 2185 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-14  7:34 ` Keir Fraser
@ 2006-10-16 14:51   ` Dave Lively
  2006-10-16 15:50     ` Keir Fraser
  0 siblings, 1 reply; 12+ messages in thread
From: Dave Lively @ 2006-10-16 14:51 UTC (permalink / raw)
  To: Keir Fraser; +Cc: xen-devel, Wang, Winston L


[-- Attachment #1.1: Type: text/plain, Size: 1421 bytes --]

I like the simplification.

What about PIC mode support?  OSes expecting just a PIC may
rely on being able to choose the 4 PCI IRQs.  But I don't know
this for sure.  In fact, I remember Win2003 with the ACPI PIC HAL
was successfully working around this problem (by leaving the PCI
IRQ assignments unchanged), though it complained in the event
log.  I'm not sure whether we can rely on this or not ...

Also, I worry in general about deviating too much from emulation
of existing chipsets (at least for anything required at guest OS
install time).  Surprising a guest with (perfectly legitimate) combinations
of hardware it hasn't seen before can be dangerous.

Dave



On 10/14/06, Keir Fraser <Keir.Fraser@cl.cam.ac.uk> wrote:

> Or, could we simply:
>  1. throw away the PCI-ISA bridge device (from qemu and from the ACPI
> DSDT)
>  2. throw away the legacy '$PIR' routing table in rombios.c
>  3. initialise the IRQ field of each PCI device config space to sane
> unique values
>  4. Make ACPI PRTP static and match the values chosen in (3).
>  5. Also throw away all the LNK stuff from ACPI DSDT
>
> If we're allowed to do this (programmable PCI-ISA bridge isn't part of MP
> or ACPI specs, for example) then this seems to involve throwing away a load
> of tedious code and thus removing an IRQ-mapping bottleneck. No drawbacks,
> unless I'm ignorant of some PC architectural detail (quite possible)?
>
>  -- Keir
>

[-- Attachment #1.2: Type: text/html, Size: 2231 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-13 23:27 Wang, Winston L
  2006-10-14  7:34 ` Keir Fraser
@ 2006-10-16 15:01 ` Dave Lively
  1 sibling, 0 replies; 12+ messages in thread
From: Dave Lively @ 2006-10-16 15:01 UTC (permalink / raw)
  To: Wang, Winston L; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1419 bytes --]

On 10/13/06, Wang, Winston L <winston.l.wang@intel.com> wrote:
>
> I think (b) is a short term solution, if we upgrade south bridge from
> PIIX3/4 to newer ICHx, we could have 8 PIC mode PCI IRQ router and 24 IOAPIC
> IRQ in APIC mode. I think IPF platform already support 24 IOAPIC  IRQs now.
>

This may be the safer route, since we know guest OSes are accustomed to ICHx
these days.

I would like David separated the  patch, one for PIC mode PCI IRQ routing
> _ADR address fix, this one is good, another one for  cutting PIC  mode
> support, this one may need more discussion.
>

Unfortunately, applying only the _ADR fix will break your existing
ACPI-compliant
guests (more than they were broken before).  The LNKx devices are defined in
the
ACPI tables regardless of PIC/APIC mode.  In APIC mode, because the PRTA
routing table returned from _PRT does *not* refer to the LNKx devices, the
guest OS
will disable each LNKx device by calling its _DIS method.  Because the _DIS
method's
write of PIRx is now routed to the right place (PIIX3 config space - due to
the _ADR fix),
this write now really disables the PCI INTx, preventing any interrupts from
the PCI INTx
lines.

Without the _ADR fix, ACPI guests are finding they can't redirect the PCI
LNKx interrupts,
and nicely falling back to using the existing IRQ assignment.  (So they're
broken, but in a
way that many guests seem to be able to work around.)

Dave

[-- Attachment #1.2: Type: text/html, Size: 2349 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-16 14:51   ` Dave Lively
@ 2006-10-16 15:50     ` Keir Fraser
  2006-10-17 13:26       ` Dave Lively
  0 siblings, 1 reply; 12+ messages in thread
From: Keir Fraser @ 2006-10-16 15:50 UTC (permalink / raw)
  To: Dave Lively; +Cc: xen-devel, Wang, Winston L


[-- Attachment #1.1: Type: text/plain, Size: 832 bytes --]

On 16/10/06 15:51, "Dave Lively" <dave.lively@gmail.com> wrote:

> What about PIC mode support?  OSes expecting just a PIC may
> rely on being able to choose the 4 PCI IRQs.  But I don't know
> this for sure.  In fact, I remember Win2003 with the ACPI PIC HAL
> was successfully working around this problem (by leaving the PCI
> IRQ assignments unchanged), though it complained in the event
> log.  I'm not sure whether we can rely on this or not ...

I think it¹s unlikely they¹d rely on it. If we don¹t care about the PIC-mode
limitation we could keep the PIIX3 emulation (but I¹m not sure that most
OSes would bother to switch to APIC mode if they have only one processor).
But bothering to try to emulate better PCI-ISA bridge hardware feels like
wasted effort if we can sidestep the entire problem.

 -- Keir


[-- Attachment #1.2: Type: text/html, Size: 1339 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-16 15:50     ` Keir Fraser
@ 2006-10-17 13:26       ` Dave Lively
  2006-10-17 13:39         ` Keir Fraser
  0 siblings, 1 reply; 12+ messages in thread
From: Dave Lively @ 2006-10-17 13:26 UTC (permalink / raw)
  To: Keir Fraser; +Cc: xen-devel, Wang, Winston L

On 10/16/06, Keir Fraser <Keir.Fraser@cl.cam.ac.uk> wrote:
>
>  On 16/10/06 15:51, "Dave Lively" <dave.lively@gmail.com> wrote:
>
>
> What about PIC mode support?  OSes expecting just a PIC may
>  rely on being able to choose the 4 PCI IRQs.  But I don't know
>  this for sure.  In fact, I remember Win2003 with the ACPI PIC HAL
>  was successfully working around this problem (by leaving the PCI
>  IRQ assignments unchanged), though it complained in the event
>  log.  I'm not sure whether we can rely on this or not ...
>
>  I think it's unlikely they'd rely on it. If we don't care about the PIC-mode limitation
> we could keep the PIIX3 emulation

Are you proposing we use the (current) PIIX3 interrupt routing emulation for
PIC mode guests, and simply hide the interrupt routing functionality for APIC
mode?  That would certainly address my concerns about PIC mode (but note
neither of us is convinced my concerns here are legitimate).

> (but I'm not sure that most OSes would bother to switch to APIC mode if they have only

Mostly I see SMP kernels using it on uniprocessor configs.

> one processor). But bothering to try to emulate better PCI-ISA bridge hardware feels like
> wasted effort if we can sidestep the entire problem.

I'm all for sidestepping the problem when that works.  But I worry
that the requirement
of supporting PIC mode means we need this general functionality (i.e.,
PCI interrupt
routing) anyway.  Since there will be no performance advantage in
hiding this functionality
in APIC mode, perhaps we're better off just leaving it there.

Dave

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-17 13:26       ` Dave Lively
@ 2006-10-17 13:39         ` Keir Fraser
  2006-10-17 16:45           ` Dave Lively
  0 siblings, 1 reply; 12+ messages in thread
From: Keir Fraser @ 2006-10-17 13:39 UTC (permalink / raw)
  To: Dave Lively; +Cc: xen-devel, Wang, Winston L




On 17/10/06 14:26, "Dave Lively" <dave.lively@gmail.com> wrote:

>> one processor). But bothering to try to emulate better PCI-ISA bridge
>> hardware feels like
>> wasted effort if we can sidestep the entire problem.
> 
> I'm all for sidestepping the problem when that works.  But I worry
> that the requirement
> of supporting PIC mode means we need this general functionality (i.e.,
> PCI interrupt
> routing) anyway.  Since there will be no performance advantage in
> hiding this functionality
> in APIC mode, perhaps we're better off just leaving it there.

I don't believe that PIC mode requires us to support interrupt routing.

 -- Keir

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][HVM] fix PCI interrupt routing via ACPI
  2006-10-17 13:39         ` Keir Fraser
@ 2006-10-17 16:45           ` Dave Lively
  0 siblings, 0 replies; 12+ messages in thread
From: Dave Lively @ 2006-10-17 16:45 UTC (permalink / raw)
  To: Keir Fraser; +Cc: xen-devel, Wang, Winston L

On 10/17/06, Keir Fraser <Keir.Fraser@cl.cam.ac.uk> wrote:
> On 17/10/06 14:26, "Dave Lively" <dave.lively@gmail.com> wrote:
> > I'm all for sidestepping the problem when that works.  But I worry
> > that the requirement
> > of supporting PIC mode means we need this general functionality (i.e.,
> > PCI interrupt
> > routing) anyway.  Since there will be no performance advantage in
> > hiding this functionality
> > in APIC mode, perhaps we're better off just leaving it there.
>
> I don't believe that PIC mode requires us to support interrupt routing.
>
>  -- Keir

Sorry, I shouldn't have said "requirement" ...  I agree it's not known
to be necessary (and suspect it's truly not).

Would you agree it's *desirable* for PIC mode guests?  Otherwise they
have to live with the default PCI IRQ assignments, which may lead to
unnecessary IRQ sharing.  But I'm not sure how much of a problem this
is in practice (i.e., since the QEMU configs we use are constrained
anyway).

If we didn't already have a working PCI interrupt router, I wouldn't
be proposing that
we implement one (without further evidence that it helps performance).
 But given that
we have one already that works, we might as well use it for PIC mode
guests, at least.

APIC mode guests are a different question.  Once QEMU can raise IRQs >
15, we can either extend the interrupt router to assign IRQs > 15, or
we can hide the interrupt router entirely as you suggest.  I still
suspect the former is easier.  But we don't need to resolve this issue
now.

Dave

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2006-10-17 16:45 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-12 18:01 [PATCH][HVM] fix PCI interrupt routing via ACPI David Lively
  -- strict thread matches above, loose matches on Subject: below --
2006-10-13  4:36 Wang, Winston L
2006-10-13 16:36 ` Dave Lively
2006-10-13 16:59   ` Keir Fraser
2006-10-13 23:27 Wang, Winston L
2006-10-14  7:34 ` Keir Fraser
2006-10-16 14:51   ` Dave Lively
2006-10-16 15:50     ` Keir Fraser
2006-10-17 13:26       ` Dave Lively
2006-10-17 13:39         ` Keir Fraser
2006-10-17 16:45           ` Dave Lively
2006-10-16 15:01 ` Dave Lively

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.