When a Status method is provided on a slot, the OSPM evaluates _STA in response to the device check notify on the slot. This allows some degree of a handshake between the platform and the OSPM that the hotplug has been acknowledged.
In order to implement _STA, we need to know which slots have devices. A slot with device returns 0x0F, a slot without a device returns Zero. We get this information from Qemu using the 0xae08 I/O port register. This was previously the read-side of the register written to commit a device eject and always returned 0 on read. It now returns a bitmap of present slots, so we know that reading 0 means we have and old Qemu and dynamically modify our SSDT to rename the _STA methods. This is necessary to allow backwards compatibility.
The _STA method also writes the slot identifier to I/O port register 0xae00 as an acknowledgment of the hotplug request.
Signed-off-by: Alex Williamson alex.williamson@redhat.com ---
src/acpi-dsdt.dsl | 36 ++- src/acpi-dsdt.hex | 124 ++++++---- src/acpi.c | 27 ++ src/ssdt-pcihp.dsl | 3 src/ssdt-pcihp.hex | 658 ++++++++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 686 insertions(+), 162 deletions(-)
diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 7082b65..6b87086 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -119,17 +119,15 @@ DefinitionBlock ( prt_slot3(0x001f), })
- OperationRegion(PCST, SystemIO, 0xae00, 0x08) + OperationRegion(PCST, SystemIO, 0xae00, 0x0c) Field (PCST, DWordAcc, NoLock, WriteAsZeros) { - PCIU, 32, - PCID, 32, - } - - OperationRegion(SEJ, SystemIO, 0xae08, 0x04) - Field (SEJ, DWordAcc, NoLock, WriteAsZeros) - { - B0EJ, 32, + // PCI Up/ACK + PUPA, 32, + // PCI Down + PDWN, 32, + // PCI Present/Eject + PPEJ, 32, }
Name (_CRS, ResourceTemplate () @@ -462,10 +460,20 @@ DefinitionBlock ( /* Methods called by hotplug devices */ Method (PCEJ, 1, NotSerialized) { // _EJ0 method - eject callback - Store(ShiftLeft(1, Arg0), B0EJ) + Store(ShiftLeft(1, Arg0), PPEJ) Return (0x0) }
+ Method (PSTA, 1, NotSerialized) { + Store(ShiftLeft(1, Arg0), PUPA) + Store(PPEJ, Local0) + If (And(Local0, ShiftLeft(1, Arg0))) { + Return(0x0F) + } Else { + Return(Zero) + } + } + /* Hotplug notification method supplied by SSDT */ External (_SB.PCI0.PCNT, MethodObj)
@@ -473,12 +481,16 @@ DefinitionBlock ( Method(PCNF, 0) { // Local0 = iterator Store (Zero, Local0) + // Local1 = slots marked "up" + Store (PUPA, Local1) + // Local2 = slots marked "down" + Store (PDWN, Local2) While (LLess(Local0, 31)) { Increment(Local0) - If (And(PCIU, ShiftLeft(1, Local0))) { + If (And(Local1, ShiftLeft(1, Local0))) { PCNT(Local0, 1) } - If (And(PCID, ShiftLeft(1, Local0))) { + If (And(Local2, ShiftLeft(1, Local0))) { PCNT(Local0, 3) } } diff --git a/src/acpi-dsdt.hex b/src/acpi-dsdt.hex index 5dc7bb4..6d99f53 100644 --- a/src/acpi-dsdt.hex +++ b/src/acpi-dsdt.hex @@ -3,12 +3,12 @@ static unsigned char AmlCode[] = { 0x53, 0x44, 0x54, -0xd3, +0xeb, 0x10, 0x0, 0x0, 0x1, -0x2d, +0x10, 0x42, 0x58, 0x50, @@ -110,16 +110,16 @@ static unsigned char AmlCode[] = { 0x47, 0x42, 0x10, -0x44, -0x81, +0x40, +0x80, 0x5f, 0x53, 0x42, 0x5f, 0x5b, 0x82, -0x4c, -0x80, +0x48, +0x7f, 0x50, 0x43, 0x49, @@ -2014,47 +2014,27 @@ static unsigned char AmlCode[] = { 0x0, 0xae, 0xa, -0x8, +0xc, 0x5b, 0x81, -0x10, +0x15, 0x50, 0x43, 0x53, 0x54, 0x43, 0x50, -0x43, -0x49, 0x55, +0x50, +0x41, 0x20, 0x50, -0x43, -0x49, 0x44, +0x57, +0x4e, 0x20, -0x5b, -0x80, -0x53, -0x45, -0x4a, -0x5f, -0x1, -0xb, -0x8, -0xae, -0xa, -0x4, -0x5b, -0x81, -0xb, -0x53, -0x45, -0x4a, -0x5f, -0x43, -0x42, -0x30, +0x50, +0x50, 0x45, 0x4a, 0x20, @@ -3039,8 +3019,8 @@ static unsigned char AmlCode[] = { 0x4a, 0x20, 0x10, -0x46, -0x5, +0x42, +0x8, 0x2e, 0x5f, 0x53, @@ -3062,14 +3042,52 @@ static unsigned char AmlCode[] = { 0x1, 0x68, 0x0, -0x42, -0x30, +0x50, +0x50, 0x45, 0x4a, 0xa4, 0x0, 0x14, -0x38, +0x25, +0x50, +0x53, +0x54, +0x41, +0x1, +0x70, +0x79, +0x1, +0x68, +0x0, +0x50, +0x55, +0x50, +0x41, +0x70, +0x50, +0x50, +0x45, +0x4a, +0x60, +0xa0, +0xb, +0x7b, +0x60, +0x79, +0x1, +0x68, +0x0, +0x0, +0xa4, +0xa, +0xf, +0xa1, +0x3, +0xa4, +0x0, +0x14, +0x3e, 0x50, 0x43, 0x4e, @@ -3078,8 +3096,20 @@ static unsigned char AmlCode[] = { 0x70, 0x0, 0x60, +0x70, +0x50, +0x55, +0x50, +0x41, +0x61, +0x70, +0x50, +0x44, +0x57, +0x4e, +0x62, 0xa2, -0x2c, +0x26, 0x95, 0x60, 0xa, @@ -3087,12 +3117,9 @@ static unsigned char AmlCode[] = { 0x75, 0x60, 0xa0, -0x11, +0xe, 0x7b, -0x50, -0x43, -0x49, -0x55, +0x61, 0x79, 0x1, 0x60, @@ -3105,12 +3132,9 @@ static unsigned char AmlCode[] = { 0x60, 0x1, 0xa0, -0x12, +0xf, 0x7b, -0x50, -0x43, -0x49, -0x44, +0x62, 0x79, 0x1, 0x60, diff --git a/src/acpi.c b/src/acpi.c index 107469f..056270b 100644 --- a/src/acpi.c +++ b/src/acpi.c @@ -486,13 +486,14 @@ build_ssdt(void)
#include "ssdt-pcihp.hex"
-#define PCI_RMV_BASE 0xae0c +#define PCI_HOTPLUG 0xae0c +#define PCI_PRES_EJ 0xae08
extern void link_time_assertion(void);
static void* build_pcihp(void) { - u32 rmvc_pcrm; + u32 hotpluggable, present; int i;
u8 *ssdt = malloc_high(sizeof ssdp_pcihp_aml); @@ -504,7 +505,7 @@ static void* build_pcihp(void) link_time_assertion(); }
- rmvc_pcrm = inl(PCI_RMV_BASE); + hotpluggable = inl(PCI_HOTPLUG); for (i = 0; i < ARRAY_SIZE(aml_ej0_name); ++i) { /* Slot is in byte 2 in _ADR */ u8 slot = ssdp_pcihp_aml[aml_adr_dword[i] + 2] & 0x1F; @@ -514,11 +515,29 @@ static void* build_pcihp(void) free(ssdt); return NULL; } - if (!(rmvc_pcrm & (0x1 << slot))) { + if (!(hotpluggable & (0x1 << slot))) { memcpy(ssdt + aml_ej0_name[i], "EJ0_", 4); } }
+ /* Runtime patching of STA. If running on system that + * doesn't support the Present/Eject field, replace _STA + * with STA_ */ + if (ARRAY_SIZE(aml_sta_name) != ARRAY_SIZE(aml_adr_dword)) { + link_time_assertion(); + } + + present = inl(PCI_PRES_EJ); + for (i = 0; present == 0 && i < ARRAY_SIZE(aml_sta_name); ++i) { + /* Sanity check */ + if (memcmp(ssdp_pcihp_aml + aml_sta_name[i], "_STA", 4)) { + warn_internalerror(); + free(ssdt); + return NULL; + } + memcpy(ssdt + aml_sta_name[i], "STA_", 4); + } + return ssdt; }
diff --git a/src/ssdt-pcihp.dsl b/src/ssdt-pcihp.dsl index 4b435b8..376476a 100644 --- a/src/ssdt-pcihp.dsl +++ b/src/ssdt-pcihp.dsl @@ -10,6 +10,7 @@ DefinitionBlock ("ssdt-pcihp.aml", "SSDT", 0x01, "BXPC", "BXSSDTPCIHP", 0x1) /* Objects supplied by DSDT */ External (_SB.PCI0, DeviceObj) External (_SB.PCI0.PCEJ, MethodObj) + External (_SB.PCI0.PSTA, MethodObj)
Scope(_SB.PCI0) { /* Bulk generated PCI hotplug devices */ @@ -23,6 +24,8 @@ DefinitionBlock ("ssdt-pcihp.aml", "SSDT", 0x01, "BXPC", "BXSSDTPCIHP", 0x1) Name (_ADR, 0x##slot##0000) \ ACPI_EXTRACT_METHOD_STRING aml_ej0_name \ Method (_EJ0, 1) { Return(PCEJ(0x##slot)) } \ + ACPI_EXTRACT_METHOD_STRING aml_sta_name \ + Method (_STA, 0) { Return(PSTA(0x##slot)) } \ Name (_SUN, 0x##slot) \ }
diff --git a/src/ssdt-pcihp.hex b/src/ssdt-pcihp.hex index b15ad5a..f060c94 100644 --- a/src/ssdt-pcihp.hex +++ b/src/ssdt-pcihp.hex @@ -1,80 +1,113 @@ static unsigned short aml_adr_dword[] = { 0x3e, -0x62, -0x88, -0xae, -0xd4, -0xfa, -0x120, -0x146, -0x16c, -0x192, -0x1b8, -0x1de, -0x204, -0x22a, -0x250, -0x276, -0x29c, -0x2c2, -0x2e8, -0x30e, -0x334, -0x35a, -0x380, -0x3a6, -0x3cc, -0x3f2, -0x418, -0x43e, -0x464, -0x48a, -0x4b0 +0x6f, +0xa3, +0xd7, +0x10b, +0x13f, +0x173, +0x1a7, +0x1db, +0x20f, +0x243, +0x277, +0x2ab, +0x2df, +0x313, +0x347, +0x37b, +0x3af, +0x3e3, +0x417, +0x44b, +0x47f, +0x4b3, +0x4e7, +0x51b, +0x54f, +0x583, +0x5b7, +0x5eb, +0x61f, +0x653 +}; +static unsigned short aml_sta_name[] = { +0x51, +0x83, +0xb7, +0xeb, +0x11f, +0x153, +0x187, +0x1bb, +0x1ef, +0x223, +0x257, +0x28b, +0x2bf, +0x2f3, +0x327, +0x35b, +0x38f, +0x3c3, +0x3f7, +0x42b, +0x45f, +0x493, +0x4c7, +0x4fb, +0x52f, +0x563, +0x597, +0x5cb, +0x5ff, +0x633, +0x667 }; static unsigned short aml_ej0_name[] = { 0x44, -0x68, -0x8e, -0xb4, -0xda, -0x100, -0x126, -0x14c, -0x172, -0x198, -0x1be, -0x1e4, -0x20a, -0x230, -0x256, -0x27c, -0x2a2, -0x2c8, -0x2ee, -0x314, -0x33a, -0x360, -0x386, -0x3ac, -0x3d2, -0x3f8, -0x41e, -0x444, -0x46a, -0x490, -0x4b6 +0x75, +0xa9, +0xdd, +0x111, +0x145, +0x179, +0x1ad, +0x1e1, +0x215, +0x249, +0x27d, +0x2b1, +0x2e5, +0x319, +0x34d, +0x381, +0x3b5, +0x3e9, +0x41d, +0x451, +0x485, +0x4b9, +0x4ed, +0x521, +0x555, +0x589, +0x5bd, +0x5f1, +0x625, +0x659 }; static unsigned char ssdp_pcihp_aml[] = { 0x53, 0x53, 0x44, 0x54, -0x44, -0x6, +0xf5, +0x7, 0x0, 0x0, 0x1, -0x94, +0xcd, 0x42, 0x58, 0x50, @@ -102,8 +135,8 @@ static unsigned char ssdp_pcihp_aml[] = { 0x10, 0x20, 0x10, -0x4f, -0x61, +0x40, +0x7d, 0x5c, 0x2e, 0x5f, @@ -116,7 +149,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x30, 0x5b, 0x82, -0x22, +0x2f, 0x53, 0x30, 0x31, @@ -144,6 +177,19 @@ static unsigned char ssdp_pcihp_aml[] = { 0x45, 0x4a, 0x1, +0x14, +0xc, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0x1, 0x8, 0x5f, 0x53, @@ -152,7 +198,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x1, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x32, @@ -181,6 +227,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x2, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x2, 0x8, 0x5f, 0x53, @@ -190,7 +250,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x2, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x33, @@ -219,6 +279,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x3, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x3, 0x8, 0x5f, 0x53, @@ -228,7 +302,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x3, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x34, @@ -257,6 +331,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x4, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x4, 0x8, 0x5f, 0x53, @@ -266,7 +354,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x35, @@ -295,6 +383,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x5, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x5, 0x8, 0x5f, 0x53, @@ -304,7 +406,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x5, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x36, @@ -333,6 +435,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x6, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x6, 0x8, 0x5f, 0x53, @@ -342,7 +458,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x6, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x37, @@ -371,6 +487,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x7, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x7, 0x8, 0x5f, 0x53, @@ -380,7 +510,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x7, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x38, @@ -409,6 +539,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x8, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x8, 0x8, 0x5f, 0x53, @@ -418,7 +562,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x8, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x39, @@ -447,6 +591,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x9, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x9, 0x8, 0x5f, 0x53, @@ -456,7 +614,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x9, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x41, @@ -485,6 +643,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0xa, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0xa, 0x8, 0x5f, 0x53, @@ -494,7 +666,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0xa, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x42, @@ -523,6 +695,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0xb, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0xb, 0x8, 0x5f, 0x53, @@ -532,7 +718,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0xb, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x43, @@ -561,6 +747,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0xc, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0xc, 0x8, 0x5f, 0x53, @@ -570,7 +770,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0xc, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x44, @@ -599,6 +799,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0xd, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0xd, 0x8, 0x5f, 0x53, @@ -608,7 +822,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0xd, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x45, @@ -637,6 +851,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0xe, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0xe, 0x8, 0x5f, 0x53, @@ -646,7 +874,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0xe, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x30, 0x46, @@ -675,6 +903,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0xf, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0xf, 0x8, 0x5f, 0x53, @@ -684,7 +926,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0xf, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x30, @@ -713,6 +955,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x10, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x10, 0x8, 0x5f, 0x53, @@ -722,7 +978,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x10, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x31, @@ -751,6 +1007,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x11, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x11, 0x8, 0x5f, 0x53, @@ -760,7 +1030,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x11, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x32, @@ -789,6 +1059,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x12, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x12, 0x8, 0x5f, 0x53, @@ -798,7 +1082,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x12, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x33, @@ -827,6 +1111,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x13, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x13, 0x8, 0x5f, 0x53, @@ -836,7 +1134,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x13, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x34, @@ -865,6 +1163,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x14, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x14, 0x8, 0x5f, 0x53, @@ -874,7 +1186,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x14, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x35, @@ -903,6 +1215,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x15, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x15, 0x8, 0x5f, 0x53, @@ -912,7 +1238,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x15, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x36, @@ -941,6 +1267,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x16, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x16, 0x8, 0x5f, 0x53, @@ -950,7 +1290,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x16, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x37, @@ -979,6 +1319,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x17, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x17, 0x8, 0x5f, 0x53, @@ -988,7 +1342,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x17, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x38, @@ -1017,6 +1371,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x18, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x18, 0x8, 0x5f, 0x53, @@ -1026,7 +1394,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x18, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x39, @@ -1055,6 +1423,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x19, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x19, 0x8, 0x5f, 0x53, @@ -1064,7 +1446,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x19, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x41, @@ -1093,6 +1475,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x1a, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x1a, 0x8, 0x5f, 0x53, @@ -1102,7 +1498,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x1a, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x42, @@ -1131,6 +1527,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x1b, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x1b, 0x8, 0x5f, 0x53, @@ -1140,7 +1550,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x1b, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x43, @@ -1169,6 +1579,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x1c, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x1c, 0x8, 0x5f, 0x53, @@ -1178,7 +1602,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x1c, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x44, @@ -1207,6 +1631,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x1d, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x1d, 0x8, 0x5f, 0x53, @@ -1216,7 +1654,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x1d, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x45, @@ -1245,6 +1683,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x1e, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x1e, 0x8, 0x5f, 0x53, @@ -1254,7 +1706,7 @@ static unsigned char ssdp_pcihp_aml[] = { 0x1e, 0x5b, 0x82, -0x24, +0x32, 0x53, 0x31, 0x46, @@ -1283,6 +1735,20 @@ static unsigned char ssdp_pcihp_aml[] = { 0x4a, 0xa, 0x1f, +0x14, +0xd, +0x5f, +0x53, +0x54, +0x41, +0x0, +0xa4, +0x50, +0x53, +0x54, +0x41, +0xa, +0x1f, 0x8, 0x5f, 0x53,