Files
my-os-project2/kernel/hal/x86_64/uACPI/tests/runner/resource_tests.c
2025-08-17 18:37:57 +02:00

2477 lines
87 KiB
C

#include "helpers.h"
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <uacpi/internal/resources.h> // This is private API, but we have to use it for tests here.
#include <uacpi/resources.h>
struct test_case {
const char *name;
uint8_t *aml_bytes;
size_t num_aml_bytes;
uint8_t *native_bytes;
size_t num_native_bytes;
size_t *pointer_offsets;
size_t num_pointer_offsets;
};
#define AML_END_TAG 0x79, 0x00
#define NATIVE_END_TAG \
UACPI_RESOURCE_TYPE_END_TAG, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
#define NATIVE_OFFSET(name, field) \
((sizeof(uint32_t) * 2) + offsetof(uacpi_resource_##name, field))
#define TEST_CASE_AML(name, ...) static uint8_t res_aml_##name[] = __VA_ARGS__;
#define TEST_CASE_NATIVE(name, ...) \
static uint8_t res_native_##name[] = __VA_ARGS__;
#define TEST_CASE_POINTERS(name, ...) \
static size_t res_pointers_##name[] = __VA_ARGS__;
TEST_CASE_AML(
IRQ,
{
/*
* IRQNoFlags ()
* {2, 3}
*/
0x22, 0x0C, 0x00,
/*
* IRQ (Level, ActiveLow, ExclusiveAndWake, NAM0)
* {1, 4, 5, 10}
*/
0x23, 0x32, 0x04, 0x28,
/*
* IRQ (Edge, ActiveHigh, SharedAndWake, NAM1)
* {1}
*/
0x23, 0x02, 0x00, 0x31,
/*
* IRQNoFlags ()
* {15}
*/
0x22, 0x00, 0x80,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
IRQ,
{
UACPI_RESOURCE_TYPE_IRQ,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
UACPI_RESOURCE_TYPE_IRQ,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x02, 0x00, 0x01, 0x00, 0x01, 0x04, 0x01, 0x04,
0x05, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_IRQ,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x02, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
UACPI_RESOURCE_TYPE_IRQ,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
DMA,
{
/*
* DMA (Compatibility, NotBusMaster, Transfer8_16, NAM0)
* { 1, 2, 3 }
*/
0x2A, 0x0E, 0x01,
/*
* DMA (TypeA, BusMaster, Transfer8, NAM1)
* { 0 }
*/
0x2A, 0x01, 0x24,
/*
* DMA (TypeF, BusMaster, Transfer16, NAM2)
* { 1, 2, 3, 4, 5, 6, 7 }
*/
0x2A, 0xFE, 0x66,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
DMA,
{
UACPI_RESOURCE_TYPE_DMA,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x03, 0x01, 0x02, 0x03, 0x00,
UACPI_RESOURCE_TYPE_DMA,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_DMA,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x02, 0x01, 0x03, 0x07, 0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
Start_End_DependentFn,
{
/*
* StartDependentFn(2, 2) {
* IRQ (Level, ActiveLow, ExclusiveAndWake, NAM0)
* {1, 4, 5, 10}
* }
*/
0x31, 0x0A,
0x23, 0x32, 0x04, 0x28,
/*
* StartDependentFnNoPri() {
* DMA (TypeF, BusMaster, Transfer16, NAM1)
* { 1, 2, 3, 4, 5, 6, 7 }
* }
*/
0x30,
0x2A, 0xFE, 0x66,
/*
* StartDependentFn(0, 0) {
* IRQNoFlags ()
* {15}
* }
*/
0x31, 0x00,
0x22, 0x00, 0x80,
// EndDependentFn()
0x38,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
Start_End_DependentFn,
{
UACPI_RESOURCE_TYPE_START_DEPENDENT,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_IRQ,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x02, 0x00, 0x01, 0x00, 0x01, 0x04, 0x01, 0x04,
0x05, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_START_DEPENDENT,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_AML_RESOURCE_DMA,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x02, 0x01, 0x03, 0x07, 0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_START_DEPENDENT,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_IRQ,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00,
UACPI_RESOURCE_TYPE_END_DEPENDENT,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
IO,
{
// IO (Decode10, 0xBEEF, 0xDEAD, 0x22, 0xEE, NAM0)
0x47, 0x00, 0xEF, 0xBE, 0xAD, 0xDE, 0x22, 0xEE,
// IO (Decode16, 0xBABE, 0xCAFE, 0xCC, 0x33, NAM1)
0x47, 0x01, 0xBE, 0xBA, 0xFE, 0xCA, 0xCC, 0x33,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
IO,
{
UACPI_RESOURCE_TYPE_IO,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0xBE, 0xAD, 0xDE, 0x22, 0xEE,
UACPI_RESOURCE_TYPE_IO,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0x00, 0xBE, 0xBA, 0xFE, 0xCA, 0xCC, 0x33,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
FixedIO,
{
// FixedIO (0xBEEF, 0xDE, NAM0)
0x4B, 0xEF, 0xBE, 0xAD,
// FixedIO (0xCAFE, 0xBA, NAM1)
0x4B, 0xFE, 0xCA, 0xBE,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
FixedIO,
{
UACPI_RESOURCE_TYPE_FIXED_IO,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0xEF, 0xBE, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_FIXED_IO,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0xFE, 0xCA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
FixedDMA,
{
// FixedDMA (0xBEEF, 0xDEAD, Width8Bit, NAM0)
0x55, 0xEF, 0xBE, 0xAD, 0xDE, 0x00,
// FixedDMA (0xCAFE, 0xBABE, Width64Bit, NAM1)
0x55, 0xFE, 0xCA, 0xBE, 0xBA, 0x03,
// FixedDMA (0xDEAD, 0xC0DE, Width256Bit, NAM2)
0x55, 0xAD, 0xDE, 0xDE, 0xC0, 0x05,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
FixedDMA,
{
UACPI_RESOURCE_TYPE_FIXED_DMA,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_FIXED_DMA,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0xFE, 0xCA, 0xBE, 0xBA, 0x03, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_FIXED_DMA,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0xAD, 0xDE, 0xDE, 0xC0, 0x05, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
Vendor_Short_Long,
{
/*
* VendorShort(NAM0)
* { 0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA }
*/
0x77, 0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA,
/*
* VendorShort(NAM1)
* { 0xFF }
*/
0x71, 0xFF,
/*
* VendorLong(NAM1) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0x0C,
* 0x65, 0x90, 0xB0, 0xE0, 0x10, 0xC8, 0x96, 0xA6,
* 0x96, 0x80, 0x5A, 0xA8, 0xA7, 0x06, 0xC5, 0x77,
* 0xD8, 0xA7, 0x67, 0x53, 0xE3, 0x86, 0x03, 0x39,
* 0xDC
* }
*/
0x84, 0x21, 0x00, 0x44, 0xA6, 0x5A, 0x82, 0x83,
0x57, 0x7D, 0x0C, 0x65, 0x90, 0xB0, 0xE0, 0x10,
0xC8, 0x96, 0xA6, 0x96, 0x80, 0x5A, 0xA8, 0xA7,
0x06, 0xC5, 0x77, 0xD8, 0xA7, 0x67, 0x53, 0xE3,
0x86, 0x03, 0x39, 0xDC,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
Vendor_Short_Long,
{
UACPI_RESOURCE_TYPE_VENDOR_SMALL,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x07, 0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA,
UACPI_RESOURCE_TYPE_VENDOR_SMALL,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_VENDOR_LARGE,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x21, 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D,
0x0C, 0x65, 0x90, 0xB0, 0xE0, 0x10, 0xC8, 0x96,
0xA6, 0x96, 0x80, 0x5A, 0xA8, 0xA7, 0x06, 0xC5,
0x77, 0xD8, 0xA7, 0x67, 0x53, 0xE3, 0x86, 0x03,
0x39, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
Memory_24_32_Fixed32,
{
// Memory24(ReadWrite, 0xBEEF, 0xDEAD, 0xCAFE, 0xBABE, NAM0)
0x81, 0x09, 0x00, 0x01, 0xEF, 0xBE, 0xAD, 0xDE,
0xFE, 0xCA, 0xBE, 0xBA,
// Memory32(ReadOnly, 0xC0DE9876, 0x1234FEFE, 0x65653F4F, 0x33449988, NAM1)
0x85, 0x11, 0x00, 0x00, 0x76, 0x98, 0xDE, 0xC0,
0xFE, 0xFE, 0x34, 0x12, 0x4F, 0x3F, 0x65, 0x65,
0x88, 0x99, 0x44, 0x33,
// Memory32Fixed(ReadWrite, 0xC0DEDEAD, 0xFEFEBABE, NAM2)
0x86, 0x09, 0x00, 0x01, 0xAD, 0xDE, 0xDE, 0xC0,
0xBE, 0xBA, 0xFE, 0xFE,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
Memory_24_32_Fixed32,
{
UACPI_RESOURCE_TYPE_MEMORY24,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x01, 0x00, 0xEF, 0xBE, 0xAD, 0xDE, 0xFE, 0xCA,
0xBE, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_MEMORY32,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x76, 0x98, 0xDE, 0xC0,
0xFE, 0xFE, 0x34, 0x12, 0x4F, 0x3F, 0x65, 0x65,
0x88, 0x99, 0x44, 0x33, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_FIXED_MEMORY32,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0xAD, 0xDE, 0xDE, 0xC0,
0xBE, 0xBA, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
Register,
{
// Register(SMBus, 0xDE, 0xBE, 0xC0DE9876CAFEBABE, 0, NAM0)
0x82, 0x0C, 0x00, 0x04, 0xDE, 0xBE, 0x00, 0xBE,
0xBA, 0xFE, 0xCA, 0x76, 0x98, 0xDE, 0xC0,
// Register(SystemCMOS, 0xFF, 0x22, 0x11DE12345AFEDDBB, 4, NAM1)
0x82, 0x0C, 0x00, 0x05, 0xFF, 0x22, 0x04, 0xBB,
0xDD, 0xFE, 0x5A, 0x34, 0x12, 0xDE, 0x11,
// Register(FFixedHW, 0x11, 0x33, 0x452199FFAADCCDFF, 3, NAM2)
0x82, 0x0C, 0x00, 0x7F, 0x11, 0x33, 0x03, 0xFF,
0xCD, 0xDC, 0xAA, 0xFF, 0x99, 0x21, 0x45,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
Register,
{
UACPI_RESOURCE_TYPE_GENERIC_REGISTER,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x04, 0xDE, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00,
0xBE, 0xBA, 0xFE, 0xCA, 0x76, 0x98, 0xDE, 0xC0,
UACPI_RESOURCE_TYPE_GENERIC_REGISTER,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x05, 0xFF, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00,
0xBB, 0xDD, 0xFE, 0x5A, 0x34, 0x12, 0xDE, 0x11,
UACPI_RESOURCE_TYPE_GENERIC_REGISTER,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x7F, 0x11, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xCD, 0xDC, 0xAA, 0xFF, 0x99, 0x21, 0x45,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
ExtendedIO,
{
/*
* ExtendedIO(
* ResourceProducer, MinFixed, MaxNotFixed, PosDecode,
* EntireRange, 0x2E2F2E122CFA72B2, 0x567A6752EB92115A,
* 0x57BE4E08FE66A14C, 0x43E98758F80FBC69,
* 0xD6BD146354CC792C, 0x6D6A7C021238A28D, NAM0,
* TypeStatic, SparseTranslation
* )
*/
0x8B, 0x35, 0x00, 0x01, 0x04, 0x23, 0x01, 0x00,
0xB2, 0x72, 0xFA, 0x2C, 0x12, 0x2E, 0x2F, 0x2E,
0x5A, 0x11, 0x92, 0xEB, 0x52, 0x67, 0x7A, 0x56,
0x4C, 0xA1, 0x66, 0xFE, 0x08, 0x4E, 0xBE, 0x57,
0x69, 0xBC, 0x0F, 0xF8, 0x58, 0x87, 0xE9, 0x43,
0x2C, 0x79, 0xCC, 0x54, 0x63, 0x14, 0xBD, 0xD6,
0x8D, 0xA2, 0x38, 0x12, 0x02, 0x7C, 0x6A, 0x6D,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
ExtendedIO,
{
UACPI_RESOURCE_TYPE_ADDRESS64_EXTENDED,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xB2, 0x72, 0xFA, 0x2C, 0x12, 0x2E, 0x2F, 0x2E,
0x5A, 0x11, 0x92, 0xEB, 0x52, 0x67, 0x7A, 0x56,
0x4C, 0xA1, 0x66, 0xFE, 0x08, 0x4E, 0xBE, 0x57,
0x69, 0xBC, 0x0F, 0xF8, 0x58, 0x87, 0xE9, 0x43,
0x2C, 0x79, 0xCC, 0x54, 0x63, 0x14, 0xBD, 0xD6,
0x8D, 0xA2, 0x38, 0x12, 0x02, 0x7C, 0x6A, 0x6D,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
ExtendedMemory,
{
/*
* ExtendedMemory(
* ResourceConsumer, SubDecode, MinNotFixed, MaxFixed,
* WriteCombining, ReadOnly, 0x567A6752EB92115A,
* 0x43E98758F80FBC69, 0xD6BD146354CC792C, 0x57BE4E08FE66A14C,
* 0x2E2F2E122CFA72B2, 0x4DE81A9EEA660878, NAM0,
* AddressRangeACPI, TypeStatic
* )
*/
0x8B, 0x35, 0x00, 0x00, 0x0B, 0x14, 0x01, 0x00,
0x5A, 0x11, 0x92, 0xEB, 0x52, 0x67, 0x7A, 0x56,
0x69, 0xBC, 0x0F, 0xF8, 0x58, 0x87, 0xE9, 0x43,
0x2C, 0x79, 0xCC, 0x54, 0x63, 0x14, 0xBD, 0xD6,
0x4C, 0xA1, 0x66, 0xFE, 0x08, 0x4E, 0xBE, 0x57,
0xB2, 0x72, 0xFA, 0x2C, 0x12, 0x2E, 0x2F, 0x2E,
0x78, 0x08, 0x66, 0xEA, 0x9E, 0x1A, 0xE8, 0x4D,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
ExtendedMemory,
{
UACPI_RESOURCE_TYPE_ADDRESS64_EXTENDED,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x5A, 0x11, 0x92, 0xEB, 0x52, 0x67, 0x7A, 0x56,
0x69, 0xBC, 0x0F, 0xF8, 0x58, 0x87, 0xE9, 0x43,
0x2C, 0x79, 0xCC, 0x54, 0x63, 0x14, 0xBD, 0xD6,
0x4C, 0xA1, 0x66, 0xFE, 0x08, 0x4E, 0xBE, 0x57,
0xB2, 0x72, 0xFA, 0x2C, 0x12, 0x2E, 0x2F, 0x2E,
0x78, 0x08, 0x66, 0xEA, 0x9E, 0x1A, 0xE8, 0x4D,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
ExtendedSpace,
{
/*
* ExtendedSpace(
* 0xCD, ResourceConsumer, PosDecode, MinFixed,
* MaxFixed, 0xEE, 0x13B531F2DEB2F64C, 0x261C82678FE9F9FE,
* 0xB32DF50E542CF6B2, 0x51FE96DA6EC52143, 0x5DA63B2994D3652E,
* 0x2EEE774C18842CC7, NAM0
* )
*/
0x8B, 0x35, 0x00, 0xCD, 0x0D, 0xEE, 0x01, 0x00,
0x4C, 0xF6, 0xB2, 0xDE, 0xF2, 0x31, 0xB5, 0x13,
0xFE, 0xF9, 0xE9, 0x8F, 0x67, 0x82, 0x1C, 0x26,
0xB2, 0xF6, 0x2C, 0x54, 0x0E, 0xF5, 0x2D, 0xB3,
0x43, 0x21, 0xC5, 0x6E, 0xDA, 0x96, 0xFE, 0x51,
0x2E, 0x65, 0xD3, 0x94, 0x29, 0x3B, 0xA6, 0x5D,
0xC7, 0x2C, 0x84, 0x18, 0x4C, 0x77, 0xEE, 0x2E,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
ExtendedSpace,
{
UACPI_RESOURCE_TYPE_ADDRESS64_EXTENDED,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0xEE, 0x00, 0x00, 0x00, 0xCD, 0x01, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4C, 0xF6, 0xB2, 0xDE, 0xF2, 0x31, 0xB5, 0x13,
0xFE, 0xF9, 0xE9, 0x8F, 0x67, 0x82, 0x1C, 0x26,
0xB2, 0xF6, 0x2C, 0x54, 0x0E, 0xF5, 0x2D, 0xB3,
0x43, 0x21, 0xC5, 0x6E, 0xDA, 0x96, 0xFE, 0x51,
0x2E, 0x65, 0xD3, 0x94, 0x29, 0x3B, 0xA6, 0x5D,
0xC7, 0x2C, 0x84, 0x18, 0x4C, 0x77, 0xEE, 0x2E,
NATIVE_END_TAG,
}
)
TEST_CASE_AML(
WordBusNumber,
{
/*
* WordBusNumber(
* ResourceProducer, MinNotFixed, MaxFixed, PosDecode,
* 0xDEAD, 0xBEEF, 0xCAFE, 0xBABE, 0xFEFE, 4,
* "\\SOME.PATH", NAM0
* )
*/
0x88, 0x19, 0x00, 0x02, 0x08, 0x00, 0xAD, 0xDE,
0xEF, 0xBE, 0xFE, 0xCA, 0xBE, 0xBA, 0xFE, 0xFE,
0x04, 0x5C, 0x53, 0x4F, 0x4D, 0x45, 0x2E, 0x50,
0x41, 0x54, 0x48, 0x00,
/*
* WordBusNumber(
* ResourceConsumer, MinFixed, MaxNotFixed, SubDecode,
* 0xC0DE, 0xDEAD, 0xFEFE, 0xCAFE, 0xBABE, , , NAM1
* )
*/
0x88, 0x0D, 0x00, 0x02, 0x07, 0x00, 0xDE, 0xC0,
0xAD, 0xDE, 0xFE, 0xFE, 0xFE, 0xCA, 0xBE, 0xBA,
0x79, 0x00,
}
)
TEST_CASE_NATIVE(
WordBusNumber,
{
UACPI_RESOURCE_TYPE_ADDRESS16,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x01, 0x00, 0xAD, 0xDE, 0xEF, 0xBE, 0xFE, 0xCA,
0xBE, 0xBA, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00,
0x04, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5C, 0x53, 0x4F, 0x4D, 0x45, 0x2E, 0x50, 0x41,
0x54, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS16,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01,
0x00, 0x00, 0xDE, 0xC0, 0xAD, 0xDE, 0xFE, 0xFE,
0xFE, 0xCA, 0xBE, 0xBA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
WordBusNumber,
{
NATIVE_OFFSET(address16, source.string),
}
)
TEST_CASE_AML(
WordIO,
{
/*
* WordIO(
* ResourceProducer, MinNotFixed, MaxFixed, PosDecode,
* EntireRange, 0xDEAD, 0xBEEF, 0xCAFE, 0xBABE, 0xFEFE, 123,
* "^^^^^^^VERY.LONG.PATH.THAT.SHOU.LD.WORK", NAM0, TypeStatic,
* SparseTranslation
* )
*/
0x88, 0x36, 0x00, 0x01, 0x08, 0x23, 0xAD, 0xDE,
0xEF, 0xBE, 0xFE, 0xCA, 0xBE, 0xBA, 0xFE, 0xFE,
0x7B, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x56, 0x45, 0x52, 0x59, 0x2E, 0x4C, 0x4F, 0x4E,
0x47, 0x2E, 0x50, 0x41, 0x54, 0x48, 0x2E, 0x54,
0x48, 0x41, 0x54, 0x2E, 0x53, 0x48, 0x4F, 0x55,
0x2E, 0x4C, 0x44, 0x2E, 0x57, 0x4F, 0x52, 0x4B,
0x00,
/*
* WordIO(
* ResourceConsumer, MinFixed, MaxNotFixed, SubDecode,
* EntireRange, 0xC0DE, 0xDEAD, 0xFEFE, 0xCAFE, 0xBABE, , , NAM1,
* TypeTranslation, DenseTranslation
* )
*/
0x88, 0x0D, 0x00, 0x01, 0x07, 0x13, 0xDE, 0xC0,
0xAD, 0xDE, 0xFE, 0xFE, 0xFE, 0xCA, 0xBE, 0xBA,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
WordIO,
{
UACPI_RESOURCE_TYPE_ADDRESS16,
0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0xAD, 0xDE, 0xEF, 0xBE, 0xFE, 0xCA,
0xBE, 0xBA, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00,
0x7B, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x56,
0x45, 0x52, 0x59, 0x2E, 0x4C, 0x4F, 0x4E, 0x47,
0x2E, 0x50, 0x41, 0x54, 0x48, 0x2E, 0x54, 0x48,
0x41, 0x54, 0x2E, 0x53, 0x48, 0x4F, 0x55, 0x2E,
0x4C, 0x44, 0x2E, 0x57, 0x4F, 0x52, 0x4B, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS16,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x03, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01,
0x00, 0x00, 0xDE, 0xC0, 0xAD, 0xDE, 0xFE, 0xFE,
0xFE, 0xCA, 0xBE, 0xBA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
WordIO,
{
NATIVE_OFFSET(address16, source.string),
}
)
TEST_CASE_AML(
WordSpace,
{
/*
* WordSpace(
* 0xCC, ResourceProducer, PosDecode, MinNotFixed, MaxFixed,
* 0xFF, 0xDEAD, 0xBEEF, 0xCAFE, 0xBABE, 0xFEFE, 222,
* "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^NAME",
* NAM0
* )
*/
0x88, 0x58, 0x00, 0xCC, 0x08, 0xFF, 0xAD, 0xDE,
0xEF, 0xBE, 0xFE, 0xCA, 0xBE, 0xBA, 0xFE, 0xFE,
0xDE, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x4E, 0x41,
0x4D, 0x45, 0x00,
/*
* WordSpace(
* 0xFF, ResourceConsumer, SubDecode, MinFixed, MaxNotFixed,
* 0xFE, 0xC0DE, 0xDEAD, 0xFEFE, 0xCAFE, 0xBABE, , , NAM1
* )
*/
0x88, 0x0D, 0x00, 0xFF, 0x07, 0xFE, 0xDE, 0xC0,
0xAD, 0xDE, 0xFE, 0xFE, 0xFE, 0xCA, 0xBE, 0xBA,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
WordSpace,
{
UACPI_RESOURCE_TYPE_ADDRESS16,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00,
0x01, 0x00, 0xAD, 0xDE, 0xEF, 0xBE, 0xFE, 0xCA,
0xBE, 0xBA, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00,
0xDE, 0x01, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x4E, 0x41, 0x4D,
0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS16,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xFE, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x01, 0x01,
0x00, 0x00, 0xDE, 0xC0, 0xAD, 0xDE, 0xFE, 0xFE,
0xFE, 0xCA, 0xBE, 0xBA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
WordSpace,
{
NATIVE_OFFSET(address16, source.string),
}
)
TEST_CASE_AML(
DWordIO,
{
/*
* DWordIO(
* ResourceProducer, MinNotFixed, MaxFixed, PosDecode,
* EntireRange, 0x2AE24C2F, 0x10F2D54B, 0x848D3687,
* 0x38A29766, 0x7F1205E0, 111, "X", NAM0, TypeStatic,
* SparseTranslation
* )
*/
0x87, 0x1A, 0x00, 0x01, 0x08, 0x23, 0x2F, 0x4C,
0xE2, 0x2A, 0x4B, 0xD5, 0xF2, 0x10, 0x87, 0x36,
0x8D, 0x84, 0x66, 0x97, 0xA2, 0x38, 0xE0, 0x05,
0x12, 0x7F, 0x6F, 0x58, 0x00,
/*
* DWordIO(
* ResourceConsumer, MinFixed, MaxNotFixed, SubDecode,
* EntireRange, 0xEA7A787E, 0x5F3C8592, 0xD42E05FD,
* 0xC889C763, 0xA078F607, , , NAM1, TypeTranslation,
* DenseTranslation
* )
*/
0x87, 0x17, 0x00, 0x01, 0x07, 0x13, 0x7E, 0x78,
0x7A, 0xEA, 0x92, 0x85, 0x3C, 0x5F, 0xFD, 0x05,
0x2E, 0xD4, 0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6,
0x78, 0xA0,
/*
* NOTE:
* This one is technically buggy as it doesn't include a source
* string but still has a valid source index. We support this
* use case as well.
*
* DWordIO(
* ResourceConsumer, MinFixed, MaxNotFixed, SubDecode,
* EntireRange, 0xEA7A787E, 0x5F3C8592, 0xD42E05FD,
* 0xC889C763, 0xA078F607, 222, , NAM1, TypeTranslation,
* DenseTranslation
* )
*/
0x87, 0x18, 0x00, 0x01, 0x07, 0x13, 0x7E, 0x78,
0x7A, 0xEA, 0x92, 0x85, 0x3C, 0x5F, 0xFD, 0x05,
0x2E, 0xD4, 0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6,
0x78, 0xA0, 0xDE,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
DWordIO,
{
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2F, 0x4C, 0xE2, 0x2A,
0x4B, 0xD5, 0xF2, 0x10, 0x87, 0x36, 0x8D, 0x84,
0x66, 0x97, 0xA2, 0x38, 0xE0, 0x05, 0x12, 0x7F,
0x6F, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x03, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x7A, 0xEA,
0x92, 0x85, 0x3C, 0x5F, 0xFD, 0x05, 0x2E, 0xD4,
0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6, 0x78, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x03, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x7A, 0xEA,
0x92, 0x85, 0x3C, 0x5F, 0xFD, 0x05, 0x2E, 0xD4,
0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6, 0x78, 0xA0,
0xDE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
DWordIO,
{
NATIVE_OFFSET(address32, source.string),
}
)
TEST_CASE_AML(
DWordMemory,
{
/*
* DWordMemory(
* ResourceConsumer, SubDecode, MinFixed, MaxNotFixed, NonCacheable,
* ReadOnly, 0xEA7A787E, 0x5F3C8592, 0xD42E05FD, 0xC889C763,
* 0xA078F607, , , NAM0, AddressRangeMemory, TypeStatic
* )
*/
0x87, 0x17, 0x00, 0x00, 0x07, 0x00, 0x7E, 0x78,
0x7A, 0xEA, 0x92, 0x85, 0x3C, 0x5F, 0xFD, 0x05,
0x2E, 0xD4, 0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6,
0x78, 0xA0,
/*
* DWordMemory(
* ResourceProducer, PosDecode, MinNotFixed, MaxFixed, Prefetchable,
* ReadWrite, 0x2AE24C2F, 0x10F2D54B, 0x848D3687, 0x38A29766,
* 0x2AE24C2F, 5, "XXXX.YYYY.ZZZZ.VVVV.YYYY", NAM1,
* AddressRangeNVS, TypeTranslation
* )
*/
0x87, 0x31, 0x00, 0x00, 0x08, 0x3F, 0x2F, 0x4C,
0xE2, 0x2A, 0x4B, 0xD5, 0xF2, 0x10, 0x87, 0x36,
0x8D, 0x84, 0x66, 0x97, 0xA2, 0x38, 0x2F, 0x4C,
0xE2, 0x2A, 0x05, 0x58, 0x58, 0x58, 0x58, 0x2E,
0x59, 0x59, 0x59, 0x59, 0x2E, 0x5A, 0x5A, 0x5A,
0x5A, 0x2E, 0x56, 0x56, 0x56, 0x56, 0x2E, 0x59,
0x59, 0x59, 0x59, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
DWordMemory,
{
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x7A, 0xEA,
0x92, 0x85, 0x3C, 0x5F, 0xFD, 0x05, 0x2E, 0xD4,
0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6, 0x78, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x01, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2F, 0x4C, 0xE2, 0x2A,
0x4B, 0xD5, 0xF2, 0x10, 0x87, 0x36, 0x8D, 0x84,
0x66, 0x97, 0xA2, 0x38, 0x2F, 0x4C, 0xE2, 0x2A,
0x05, 0x01, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x58, 0x58, 0x58, 0x58, 0x2E, 0x59, 0x59, 0x59,
0x59, 0x2E, 0x5A, 0x5A, 0x5A, 0x5A, 0x2E, 0x56,
0x56, 0x56, 0x56, 0x2E, 0x59, 0x59, 0x59, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
DWordMemory,
{
0x38 + NATIVE_OFFSET(address32, source.string),
}
)
TEST_CASE_AML(
DWordSpace,
{
/*
* DWordSpace(
* 0xEE, ResourceProducer, PosDecode, MinNotFixed, MaxFixed,
* 0xFF, 0x38A29766, 0x7F1205E0, 0x2AE24C2F, 0x10F2D54B,
* 0x848D3687, 99, "\\_ABC.DEFG.HIJK.LMNO.PQRS.T123", NAM0
* )
*/
0x87, 0x37, 0x00, 0xEE, 0x08, 0xFF, 0x66, 0x97,
0xA2, 0x38, 0xE0, 0x05, 0x12, 0x7F, 0x2F, 0x4C,
0xE2, 0x2A, 0x4B, 0xD5, 0xF2, 0x10, 0x87, 0x36,
0x8D, 0x84, 0x63, 0x5C, 0x5F, 0x41, 0x42, 0x43,
0x2E, 0x44, 0x45, 0x46, 0x47, 0x2E, 0x48, 0x49,
0x4A, 0x4B, 0x2E, 0x4C, 0x4D, 0x4E, 0x4F, 0x2E,
0x50, 0x51, 0x52, 0x53, 0x2E, 0x54, 0x31, 0x32,
0x33, 0x00,
/*
* DWordSpace(
* 0xAA, ResourceConsumer, SubDecode, MinFixed, MaxNotFixed,
* 0xFE, 0xEA7A787E, 0xD42E05FD, 0x5F3C8592, 0xC889C763,
* 0xA078F607, , , NAM1
* )
*/
0x87, 0x17, 0x00, 0xAA, 0x07, 0xFE, 0x7E, 0x78,
0x7A, 0xEA, 0xFD, 0x05, 0x2E, 0xD4, 0x92, 0x85,
0x3C, 0x5F, 0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6,
0x78, 0xA0,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
DWordSpace,
{
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x66, 0x97, 0xA2, 0x38,
0xE0, 0x05, 0x12, 0x7F, 0x2F, 0x4C, 0xE2, 0x2A,
0x4B, 0xD5, 0xF2, 0x10, 0x87, 0x36, 0x8D, 0x84,
0x63, 0x01, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5C, 0x5F, 0x41, 0x42, 0x43, 0x2E, 0x44, 0x45,
0x46, 0x47, 0x2E, 0x48, 0x49, 0x4A, 0x4B, 0x2E,
0x4C, 0x4D, 0x4E, 0x4F, 0x2E, 0x50, 0x51, 0x52,
0x53, 0x2E, 0x54, 0x31, 0x32, 0x33, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS32,
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0xFE, 0x00, 0x00, 0x00, 0xAA, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x7A, 0xEA,
0xFD, 0x05, 0x2E, 0xD4, 0x92, 0x85, 0x3C, 0x5F,
0x63, 0xC7, 0x89, 0xC8, 0x07, 0xF6, 0x78, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
DWordSpace,
{
NATIVE_OFFSET(address32, source.string),
}
)
TEST_CASE_AML(
QWordIO,
{
/*
* QWordIO(
* ResourceProducer, MinNotFixed, MaxFixed, PosDecode,
* EntireRange, 0xD401ABB6C6048FA9, 0xF3F20E18BD15E1D5,
* 0x31BBE56235B1AB20, 0xA43E084A1A3BC70C,
* 0xCC3968467E68A405, 22, "1234.5678.9101.1112.1314.1516",
* NAM0, TypeStatic, SparseTranslation
* )
*/
0x8A, 0x4A, 0x00, 0x01, 0x08, 0x23, 0xA9, 0x8F,
0x04, 0xC6, 0xB6, 0xAB, 0x01, 0xD4, 0xD5, 0xE1,
0x15, 0xBD, 0x18, 0x0E, 0xF2, 0xF3, 0x20, 0xAB,
0xB1, 0x35, 0x62, 0xE5, 0xBB, 0x31, 0x0C, 0xC7,
0x3B, 0x1A, 0x4A, 0x08, 0x3E, 0xA4, 0x05, 0xA4,
0x68, 0x7E, 0x46, 0x68, 0x39, 0xCC, 0x16, 0x31,
0x32, 0x33, 0x34, 0x2E, 0x35, 0x36, 0x37, 0x38,
0x2E, 0x39, 0x31, 0x30, 0x31, 0x2E, 0x31, 0x31,
0x31, 0x32, 0x2E, 0x31, 0x33, 0x31, 0x34, 0x2E,
0x31, 0x35, 0x31, 0x36, 0x00,
/*
* QWordIO(
* ResourceConsumer, MinFixed, MaxNotFixed, SubDecode,
* EntireRange, 0xC7EBB6149085DF40, 0x837954DC2A5C8993,
* 0xEBEBB9FBC5BCE78E, 0x5EE869DAFB934632,
* 0xB39AD97AB253D0ED, , , NAM1, TypeTranslation,
* DenseTranslation
* )
*/
0x8A, 0x2B, 0x00, 0x01, 0x07, 0x13, 0x40, 0xDF,
0x85, 0x90, 0x14, 0xB6, 0xEB, 0xC7, 0x93, 0x89,
0x5C, 0x2A, 0xDC, 0x54, 0x79, 0x83, 0x8E, 0xE7,
0xBC, 0xC5, 0xFB, 0xB9, 0xEB, 0xEB, 0x32, 0x46,
0x93, 0xFB, 0xDA, 0x69, 0xE8, 0x5E, 0xED, 0xD0,
0x53, 0xB2, 0x7A, 0xD9, 0x9A, 0xB3,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
QWordIO,
{
UACPI_RESOURCE_TYPE_ADDRESS64,
0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xA9, 0x8F, 0x04, 0xC6, 0xB6, 0xAB, 0x01, 0xD4,
0xD5, 0xE1, 0x15, 0xBD, 0x18, 0x0E, 0xF2, 0xF3,
0x20, 0xAB, 0xB1, 0x35, 0x62, 0xE5, 0xBB, 0x31,
0x0C, 0xC7, 0x3B, 0x1A, 0x4A, 0x08, 0x3E, 0xA4,
0x05, 0xA4, 0x68, 0x7E, 0x46, 0x68, 0x39, 0xCC,
0x16, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x31, 0x32, 0x33, 0x34, 0x2E, 0x35, 0x36, 0x37,
0x38, 0x2E, 0x39, 0x31, 0x30, 0x31, 0x2E, 0x31,
0x31, 0x31, 0x32, 0x2E, 0x31, 0x33, 0x31, 0x34,
0x2E, 0x31, 0x35, 0x31, 0x36, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS64,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x03, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0xDF, 0x85, 0x90, 0x14, 0xB6, 0xEB, 0xC7,
0x93, 0x89, 0x5C, 0x2A, 0xDC, 0x54, 0x79, 0x83,
0x8E, 0xE7, 0xBC, 0xC5, 0xFB, 0xB9, 0xEB, 0xEB,
0x32, 0x46, 0x93, 0xFB, 0xDA, 0x69, 0xE8, 0x5E,
0xED, 0xD0, 0x53, 0xB2, 0x7A, 0xD9, 0x9A, 0xB3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
QWordIO,
{
NATIVE_OFFSET(address64, source.string),
}
)
TEST_CASE_AML(
QWordMemory,
{
/*
* QWordMemory(
* ResourceConsumer, SubDecode, MinFixed, MaxNotFixed, NonCacheable,
* ReadOnly, 0xB89195AC379E0043, 0xB149B98A0A8B4D0D, 0x2DF22DCD9553E2F9,
* 0x7F5CD9F6D6598FC1, 0xE3D4EF59D1C7A0A0, , , NAM0,
* AddressRangeMemory, TypeStatic
* )
*/
0x8A, 0x2B, 0x00, 0x00, 0x07, 0x00, 0x43, 0x00,
0x9E, 0x37, 0xAC, 0x95, 0x91, 0xB8, 0x0D, 0x4D,
0x8B, 0x0A, 0x8A, 0xB9, 0x49, 0xB1, 0xF9, 0xE2,
0x53, 0x95, 0xCD, 0x2D, 0xF2, 0x2D, 0xC1, 0x8F,
0x59, 0xD6, 0xF6, 0xD9, 0x5C, 0x7F, 0xA0, 0xA0,
0xC7, 0xD1, 0x59, 0xEF, 0xD4, 0xE3,
/*
* QWordMemory(
* ResourceProducer, PosDecode, MinNotFixed, MaxFixed,
* Prefetchable, ReadWrite, 0xAA0E73E09AE07CF2,
* 0x6C1F50103DD99E4F, 0xF8C74B28E1868B3A, 0x685F884F24BC550B,
* 0x881CF673FE4DA1A6, 15, "^^^^^VVVV.VVVV.VVVV", NAM1,
* AddressRangeReserved, TypeTranslation
* )
*/
0x8A, 0x40, 0x00, 0x00, 0x08, 0x2F, 0xF2, 0x7C,
0xE0, 0x9A, 0xE0, 0x73, 0x0E, 0xAA, 0x4F, 0x9E,
0xD9, 0x3D, 0x10, 0x50, 0x1F, 0x6C, 0x3A, 0x8B,
0x86, 0xE1, 0x28, 0x4B, 0xC7, 0xF8, 0x0B, 0x55,
0xBC, 0x24, 0x4F, 0x88, 0x5F, 0x68, 0xA6, 0xA1,
0x4D, 0xFE, 0x73, 0xF6, 0x1C, 0x88, 0x0F, 0x5E,
0x5E, 0x5E, 0x5E, 0x5E, 0x56, 0x56, 0x56, 0x56,
0x2E, 0x56, 0x56, 0x56, 0x56, 0x2E, 0x56, 0x56,
0x56, 0x56, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
QWordMemory,
{
UACPI_RESOURCE_TYPE_ADDRESS64,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x43, 0x00, 0x9E, 0x37, 0xAC, 0x95, 0x91, 0xB8,
0x0D, 0x4D, 0x8B, 0x0A, 0x8A, 0xB9, 0x49, 0xB1,
0xF9, 0xE2, 0x53, 0x95, 0xCD, 0x2D, 0xF2, 0x2D,
0xC1, 0x8F, 0x59, 0xD6, 0xF6, 0xD9, 0x5C, 0x7F,
0xA0, 0xA0, 0xC7, 0xD1, 0x59, 0xEF, 0xD4, 0xE3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS64,
0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
0x01, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF2, 0x7C, 0xE0, 0x9A, 0xE0, 0x73, 0x0E, 0xAA,
0x4F, 0x9E, 0xD9, 0x3D, 0x10, 0x50, 0x1F, 0x6C,
0x3A, 0x8B, 0x86, 0xE1, 0x28, 0x4B, 0xC7, 0xF8,
0x0B, 0x55, 0xBC, 0x24, 0x4F, 0x88, 0x5F, 0x68,
0xA6, 0xA1, 0x4D, 0xFE, 0x73, 0xF6, 0x1C, 0x88,
0x0F, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x56, 0x56, 0x56,
0x56, 0x2E, 0x56, 0x56, 0x56, 0x56, 0x2E, 0x56,
0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
QWordMemory,
{
0x50 + NATIVE_OFFSET(address64, source.string),
}
)
TEST_CASE_AML(
QWordSpace,
{
/*
* QWordSpace(
* 0xFA, ResourceProducer, PosDecode, MinNotFixed, MaxFixed,
* 0xFF, 0x3FC5C670EA0D6EC7, 0xC892FC19A82058A7,
* 0x38DD3AB3668E965B, 0xD03B1D464E9B869C,
* 0xB10BD395D90D5F21, 232, "\\", NAM0
* )
*/
0x8A, 0x2E, 0x00, 0xFA, 0x08, 0xFF, 0xC7, 0x6E,
0x0D, 0xEA, 0x70, 0xC6, 0xC5, 0x3F, 0xA7, 0x58,
0x20, 0xA8, 0x19, 0xFC, 0x92, 0xC8, 0x5B, 0x96,
0x8E, 0x66, 0xB3, 0x3A, 0xDD, 0x38, 0x9C, 0x86,
0x9B, 0x4E, 0x46, 0x1D, 0x3B, 0xD0, 0x21, 0x5F,
0x0D, 0xD9, 0x95, 0xD3, 0x0B, 0xB1, 0xE8, 0x5C,
0x00,
/*
* QWordSpace(
* 0xCF, ResourceConsumer, SubDecode, MinFixed, MaxNotFixed,
* 0xFE, 0xB8201019AA9411D8, 0x80E930538B5BAC9D,
* 0xAD10C2465E6A44E2, 0x1D3221B49795163F,
* 0x5D3B10D8FB2F1760, , , NAM1
* )
*/
0x8A, 0x2B, 0x00, 0xCF, 0x07, 0xFE, 0xD8, 0x11,
0x94, 0xAA, 0x19, 0x10, 0x20, 0xB8, 0x9D, 0xAC,
0x5B, 0x8B, 0x53, 0x30, 0xE9, 0x80, 0xE2, 0x44,
0x6A, 0x5E, 0x46, 0xC2, 0x10, 0xAD, 0x3F, 0x16,
0x95, 0x97, 0xB4, 0x21, 0x32, 0x1D, 0x60, 0x17,
0x2F, 0xFB, 0xD8, 0x10, 0x3B, 0x5D,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
QWordSpace,
{
UACPI_RESOURCE_TYPE_ADDRESS64,
0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC7, 0x6E, 0x0D, 0xEA, 0x70, 0xC6, 0xC5, 0x3F,
0xA7, 0x58, 0x20, 0xA8, 0x19, 0xFC, 0x92, 0xC8,
0x5B, 0x96, 0x8E, 0x66, 0xB3, 0x3A, 0xDD, 0x38,
0x9C, 0x86, 0x9B, 0x4E, 0x46, 0x1D, 0x3B, 0xD0,
0x21, 0x5F, 0x0D, 0xD9, 0x95, 0xD3, 0x0B, 0xB1,
0xE8, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_ADDRESS64,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0xFE, 0x00, 0x00, 0x00, 0xCF, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xD8, 0x11, 0x94, 0xAA, 0x19, 0x10, 0x20, 0xB8,
0x9D, 0xAC, 0x5B, 0x8B, 0x53, 0x30, 0xE9, 0x80,
0xE2, 0x44, 0x6A, 0x5E, 0x46, 0xC2, 0x10, 0xAD,
0x3F, 0x16, 0x95, 0x97, 0xB4, 0x21, 0x32, 0x1D,
0x60, 0x17, 0x2F, 0xFB, 0xD8, 0x10, 0x3B, 0x5D,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
QWordSpace,
{
NATIVE_OFFSET(address64, source.string),
}
)
TEST_CASE_AML(
ClockInput,
{
/*
* ClockInput(0xDEADBEEF, 0xC0DE, MHz, Variable,
* "\\PATH.XXXX.YYYY", 123)
*/
0x93, 0x1A, 0x00, 0x01, 0x05, 0x00, 0xDE, 0xC0,
0xEF, 0xBE, 0xAD, 0xDE, 0x7B, 0x5C, 0x50, 0x41,
0x54, 0x48, 0x2E, 0x58, 0x58, 0x58, 0x58, 0x2E,
0x59, 0x59, 0x59, 0x59, 0x00,
// ClockInput(0xCAFEBABE, 0xBABA, kHz, Fixed, , )
0x93, 0x0A, 0x00, 0x01, 0x02, 0x00, 0xBA, 0xBA,
0xBE, 0xBA, 0xFE, 0xCA, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
ClockInput,
{
UACPI_RESOURCE_TYPE_CLOCK_INPUT,
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x01, 0x01, 0x02, 0x00, 0xDE, 0xC0, 0x00, 0x00,
0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00,
0x7B, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x5C, 0x50, 0x41, 0x54, 0x48, 0x2E, 0x58, 0x58,
0x58, 0x58, 0x2E, 0x59, 0x59, 0x59, 0x59, 0x00,
UACPI_RESOURCE_TYPE_CLOCK_INPUT,
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0xBA, 0xBA, 0x00, 0x00,
0xBE, 0xBA, 0xFE, 0xCA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
ClockInput,
{
NATIVE_OFFSET(clock_input, source.string),
}
)
TEST_CASE_AML(
Interrupt,
{
/*
* Interrupt (ResourceConsumer, Level, ActiveHigh, ExclusiveAndWake,
* 0xFF, "\\1234.5678.AAAA.BBBB", NAM0)
* { 1, 2, 3, 4, 0xDEADBEEF, 0xFFFFFFFF, 0 }
*/
0x89, 0x34, 0x00, 0x11, 0x07, 0x01, 0x00, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0xEF, 0xBE, 0xAD,
0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x5C, 0x31, 0x32, 0x33, 0x34, 0x2E,
0x35, 0x36, 0x37, 0x38, 0x2E, 0x41, 0x41, 0x41,
0x41, 0x2E, 0x42, 0x42, 0x42, 0x42, 0x00,
/*
* NOTE:
* This one is buggy as well, but should be supported as iasl allows
* generating it just fine.
*
* Interrupt (ResourceProducer, Edge, ActiveLow, SharedAndWake,
* 0xEE, , NAM1)
* { 1 }
*/
0x89, 0x07, 0x00, 0x1E, 0x01, 0x01, 0x00, 0x00,
0x00, 0xEE,
/*
* Interrupt (ResourceProducer, Edge, ActiveLow, Exclusive,
* , , NAM2)
* { 0xFFFFFFFF }
*/
0x89, 0x06, 0x00, 0x06, 0x01, 0xFF, 0xFF, 0xFF,
0xFF,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
Interrupt,
{
UACPI_RESOURCE_TYPE_EXTENDED_IRQ,
0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00,
0xFF, 0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0xEF, 0xBE, 0xAD, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x5C, 0x31, 0x32, 0x33,
0x34, 0x2E, 0x35, 0x36, 0x37, 0x38, 0x2E, 0x41,
0x41, 0x41, 0x41, 0x2E, 0x42, 0x42, 0x42, 0x42,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_EXTENDED_IRQ,
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
0xEE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_EXTENDED_IRQ,
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
Interrupt,
{
NATIVE_OFFSET(extended_irq, source.string),
}
)
TEST_CASE_AML(
GpioIO,
{
/*
* GpioIo(Shared, PullUp, 0xCAFE, 0xBABE, IoRestrictionOutputOnly,
* "\\1234.5678.AAAA.BBBB", 0xFA, ResourceConsumer, NAM0,
* RawDataBuffer (34) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0x0C,
* 0x65, 0x90, 0xB0, 0xE0, 0x10, 0xC8, 0x96, 0xA6,
* 0x96, 0x80, 0x5A, 0xA8, 0xA7, 0x06, 0xC5, 0x77,
* 0xD8, 0xA7, 0x67, 0x53, 0xE3, 0x86, 0x03, 0x39,
* 0xDC, 0xBE,
* })
* { 0xACDC, 0, 1, 0xFFFF, 0xDEAD }
*/
0x8C, 0x55, 0x00, 0x01, 0x01, 0x01, 0x00, 0x0A,
0x00, 0x01, 0xBE, 0xBA, 0xFE, 0xCA, 0x17, 0x00,
0xFA, 0x21, 0x00, 0x36, 0x00, 0x22, 0x00, 0xDC,
0xAC, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xAD,
0xDE, 0x5C, 0x31, 0x32, 0x33, 0x34, 0x2E, 0x35,
0x36, 0x37, 0x38, 0x2E, 0x41, 0x41, 0x41, 0x41,
0x2E, 0x42, 0x42, 0x42, 0x42, 0x00, 0x44, 0xA6,
0x5A, 0x82, 0x83, 0x57, 0x7D, 0x0C, 0x65, 0x90,
0xB0, 0xE0, 0x10, 0xC8, 0x96, 0xA6, 0x96, 0x80,
0x5A, 0xA8, 0xA7, 0x06, 0xC5, 0x77, 0xD8, 0xA7,
0x67, 0x53, 0xE3, 0x86, 0x03, 0x39, 0xDC, 0xBE,
/*
* GpioIo(Exclusive, PullNone, 0xDEAD, 0xBEEF,
* IORestrictionNoneAndPreserve, "\\BBBB",
* 0xDD, ResourceConsumer, NAM0, )
* { 0xACDC, 0, 1, 0xFFFF, 0xDEAD }
*/
0x8C, 0x24, 0x00, 0x01, 0x01, 0x01, 0x00, 0x03,
0x00, 0x03, 0xEF, 0xBE, 0xAD, 0xDE, 0x17, 0x00,
0xDD, 0x21, 0x00, 0x27, 0x00, 0x00, 0x00, 0xDC,
0xAC, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xAD,
0xDE, 0x5C, 0x42, 0x42, 0x42, 0x42, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
GpioIO,
{
UACPI_RESOURCE_TYPE_GPIO_CONNECTION,
0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00,
0x01, 0x00, 0xBE, 0xBA, 0xFE, 0xCA, 0x22, 0x00,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFA, 0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0xDC, 0xAC, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF,
0xAD, 0xDE, 0x5C, 0x31, 0x32, 0x33, 0x34, 0x2E,
0x35, 0x36, 0x37, 0x38, 0x2E, 0x41, 0x41, 0x41,
0x41, 0x2E, 0x42, 0x42, 0x42, 0x42, 0x00, 0x44,
0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0x0C, 0x65,
0x90, 0xB0, 0xE0, 0x10, 0xC8, 0x96, 0xA6, 0x96,
0x80, 0x5A, 0xA8, 0xA7, 0x06, 0xC5, 0x77, 0xD8,
0xA7, 0x67, 0x53, 0xE3, 0x86, 0x03, 0x39, 0xDC,
0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_GPIO_CONNECTION,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00,
0x03, 0x00, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xDD, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xDC, 0xAC, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF,
0xAD, 0xDE, 0x5C, 0x42, 0x42, 0x42, 0x42, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
GpioIO,
{
NATIVE_OFFSET(gpio_connection, source.string),
NATIVE_OFFSET(gpio_connection, pin_table),
NATIVE_OFFSET(gpio_connection, vendor_data),
0x88 + NATIVE_OFFSET(gpio_connection, source.string),
0x88 + NATIVE_OFFSET(gpio_connection, pin_table),
}
)
TEST_CASE_AML(
GpioInt,
{
/*
* GpioInt (Edge , ActiveBoth, ExclusiveAndWake, PullUp, 0xAABB,
* "^^^ABCD.EFGH.IJKL", 0xFE, ResourceConsumer, NAM0,
* RawDataBuffer (34) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0x0C,
* 0x65, 0x90, 0xB0, 0xE0, 0x10, 0xC8, 0x96, 0xA6,
* 0x96, 0x80, 0x5A, 0xA8, 0xA7, 0x06, 0xC5, 0x77,
* 0xD8, 0xA7, 0x67, 0x53, 0xE3, 0x86, 0x03, 0x39,
* 0xDC, 0xBE,
* })
* { 0xC0DE }
*/
0x8C, 0x4A, 0x00, 0x01, 0x00, 0x01, 0x00, 0x15,
0x00, 0x01, 0x00, 0x00, 0xBB, 0xAA, 0x17, 0x00,
0xFE, 0x19, 0x00, 0x2B, 0x00, 0x22, 0x00, 0xDE,
0xC0, 0x5E, 0x5E, 0x5E, 0x41, 0x42, 0x43, 0x44,
0x2E, 0x45, 0x46, 0x47, 0x48, 0x2E, 0x49, 0x4A,
0x4B, 0x4C, 0x00, 0x44, 0xA6, 0x5A, 0x82, 0x83,
0x57, 0x7D, 0x0C, 0x65, 0x90, 0xB0, 0xE0, 0x10,
0xC8, 0x96, 0xA6, 0x96, 0x80, 0x5A, 0xA8, 0xA7,
0x06, 0xC5, 0x77, 0xD8, 0xA7, 0x67, 0x53, 0xE3,
0x86, 0x03, 0x39, 0xDC, 0xBE,
/*
* GpioInt (Edge, ActiveBoth, ExclusiveAndWake, PullUp, 0xAABB,
* "X", 0xAB, ResourceConsumer, NAM0)
* { 0xDEAD }
*/
0x8C, 0x18, 0x00, 0x01, 0x00, 0x01, 0x00, 0x15,
0x00, 0x01, 0x00, 0x00, 0xBB, 0xAA, 0x17, 0x00,
0xAB, 0x19, 0x00, 0x1B, 0x00, 0x00, 0x00, 0xAD,
0xDE, 0x58, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
GpioInt,
{
UACPI_RESOURCE_TYPE_GPIO_CONNECTION,
0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x01,
0x01, 0x00, 0x00, 0x00, 0xBB, 0xAA, 0x22, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
0x32, 0x86, 0x64, 0xE2, 0xCD, 0x01, 0x00, 0x00,
0x30, 0x86, 0x64, 0xE2, 0xCD, 0x01, 0x00, 0x00,
0x44, 0x86, 0x64, 0xE2, 0xCD, 0x01, 0x00, 0x00,
0xDE, 0xC0, 0x5E, 0x5E, 0x5E, 0x41, 0x42, 0x43,
0x44, 0x2E, 0x45, 0x46, 0x47, 0x48, 0x2E, 0x49,
0x4A, 0x4B, 0x4C, 0x00, 0x44, 0xA6, 0x5A, 0x82,
0x83, 0x57, 0x7D, 0x0C, 0x65, 0x90, 0xB0, 0xE0,
0x10, 0xC8, 0x96, 0xA6, 0x96, 0x80, 0x5A, 0xA8,
0xA7, 0x06, 0xC5, 0x77, 0xD8, 0xA7, 0x67, 0x53,
0xE3, 0x86, 0x03, 0x39, 0xDC, 0xBE, 0x00, 0x00,
UACPI_RESOURCE_TYPE_GPIO_CONNECTION,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x01,
0x01, 0x00, 0x00, 0x00, 0xBB, 0xAA, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xAB, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0xAA, 0x86, 0x64, 0xE2, 0xCD, 0x01, 0x00, 0x00,
0xA8, 0x86, 0x64, 0xE2, 0xCD, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xAD, 0xDE, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
GpioInt,
{
NATIVE_OFFSET(gpio_connection, source.string),
NATIVE_OFFSET(gpio_connection, pin_table),
NATIVE_OFFSET(gpio_connection, vendor_data),
0x78 + NATIVE_OFFSET(gpio_connection, source.string),
0x78 + NATIVE_OFFSET(gpio_connection, pin_table),
}
)
TEST_CASE_AML(
PinFunction,
{
/*
* PinFunction(
* Exclusive, PullDefault, 0xDEAD,
* "string which uniquely identifies the GPIO controller
* referred to by this descriptor", , ResourceConsumer, , )
* {
* 0x4453, 0x4454, 0x4A02, 0xF075,
* 0x5445, 0x5354, 0x5453, 0x5454,
* 0x41
* }
*/
0x8D, 0x75, 0x00, 0x01, 0x00, 0x00, 0x00, 0xAD,
0xDE, 0x12, 0x00, 0x00, 0x24, 0x00, 0x78, 0x00,
0x00, 0x00, 0x53, 0x44, 0x54, 0x44, 0x02, 0x4A,
0x75, 0xF0, 0x45, 0x54, 0x54, 0x53, 0x53, 0x54,
0x54, 0x54, 0x41, 0x00, 0x73, 0x74, 0x72, 0x69,
0x6E, 0x67, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68,
0x20, 0x75, 0x6E, 0x69, 0x71, 0x75, 0x65, 0x6C,
0x79, 0x20, 0x69, 0x64, 0x65, 0x6E, 0x74, 0x69,
0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
0x20, 0x47, 0x50, 0x49, 0x4F, 0x20, 0x63, 0x6F,
0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x72,
0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65,
0x64, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x79, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73,
0x63, 0x72, 0x69, 0x70, 0x74, 0x6F, 0x72, 0x00,
/*
* PinFunction(
* Exclusive, PullDefault, 0xDEAD,
* "", 0xFF, ResourceConsumer, ,
* RawDataBuffer (9) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D,
* 0xDC, 0xBE,
* })
* {
* 0xDEAD, 0xC0DE, 0xBEEF, 0xCAFE
* }
*/
0x8D, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0xAD,
0xDE, 0x12, 0x00, 0xFF, 0x1A, 0x00, 0x1B, 0x00,
0x09, 0x00, 0xAD, 0xDE, 0xDE, 0xC0, 0xEF, 0xBE,
0xFE, 0xCA, 0x00, 0x44, 0xA6, 0x5A, 0x82, 0x83,
0x57, 0x7D, 0xDC, 0xBE,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
PinFunction,
{
UACPI_RESOURCE_TYPE_PIN_FUNCTION,
0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0xAD, 0xDE, 0x09, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x53, 0x44, 0x54, 0x44, 0x02, 0x4A, 0x75, 0xF0,
0x45, 0x54, 0x54, 0x53, 0x53, 0x54, 0x54, 0x54,
0x41, 0x00, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x75,
0x6E, 0x69, 0x71, 0x75, 0x65, 0x6C, 0x79, 0x20,
0x69, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69,
0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47,
0x50, 0x49, 0x4F, 0x20, 0x63, 0x6F, 0x6E, 0x74,
0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x72, 0x20, 0x72,
0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20,
0x74, 0x6F, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x6F, 0x72, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_PIN_FUNCTION,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0xAD, 0xDE, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0xAD, 0xDE, 0xDE, 0xC0, 0xEF, 0xBE, 0xFE, 0xCA,
0x00, 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D,
0xDC, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
PinFunction,
{
NATIVE_OFFSET(pin_function, source.string),
NATIVE_OFFSET(pin_function, pin_table),
0xA0 + NATIVE_OFFSET(pin_function, source.string),
0xA0 + NATIVE_OFFSET(pin_function, pin_table),
0xA0 + NATIVE_OFFSET(pin_function, vendor_data),
}
)
TEST_CASE_AML(
PinConfig,
{
/*
* PinConfig(
* Exclusive, 0x0B, 0xDEADBEEF,
* "\\DEAD.BEEF", 0xAB, ResourceConsumer, ,
* RawDataBuffer (9) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D,
* 0xDC, 0xBE,
* })
* {
* 0xDEAD, 0xC0DE
* }
*/
0x8F, 0x29, 0x00, 0x01, 0x02, 0x00, 0x0B, 0xEF,
0xBE, 0xAD, 0xDE, 0x14, 0x00, 0xAB, 0x18, 0x00,
0x23, 0x00, 0x09, 0x00, 0xAD, 0xDE, 0xDE, 0xC0,
0x5C, 0x44, 0x45, 0x41, 0x44, 0x2E, 0x42, 0x45,
0x45, 0x46, 0x00, 0x44, 0xA6, 0x5A, 0x82, 0x83,
0x57, 0x7D, 0xDC, 0xBE,
/*
* PinConfig(
* Shared, 0x05, 0xCAFEBABE,
* "123", 0xCD, ResourceConsumer, , )
* {
* 0
* }
*/
0x8F, 0x17, 0x00, 0x01, 0x03, 0x00, 0x05, 0xBE,
0xBA, 0xFE, 0xCA, 0x14, 0x00, 0xCD, 0x16, 0x00,
0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32,
0x33, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
PinConfig,
{
UACPI_RESOURCE_TYPE_PIN_CONFIGURATION,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x0B, 0xEF, 0xBE, 0xAD, 0xDE,
0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
0xAB, 0x01, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0xAD, 0xDE, 0xDE, 0xC0, 0x5C, 0x44, 0x45, 0x41,
0x44, 0x2E, 0x42, 0x45, 0x45, 0x46, 0x00, 0x44,
0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC, 0xBE,
UACPI_RESOURCE_TYPE_PIN_CONFIGURATION,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x05, 0xBE, 0xBA, 0xFE, 0xCA,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xCD, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x31, 0x32, 0x33, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
PinConfig,
{
NATIVE_OFFSET(pin_configuration, source.string),
NATIVE_OFFSET(pin_configuration, pin_table),
NATIVE_OFFSET(pin_configuration, vendor_data),
0x50 + NATIVE_OFFSET(pin_function, source.string),
0x50 + NATIVE_OFFSET(pin_function, pin_table),
}
)
TEST_CASE_AML(
PinGroup,
{
/*
* PinGroup(
* "arbitrary, non-empty string that uniquely identifies this
* particular PinGroup",
* ResourceProducer , , RawDataBuffer (9) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D,
* 0xDC, 0xBE,
* })
* { 0xDEAD }
*/
0x90, 0x64, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x00,
0x10, 0x00, 0x5E, 0x00, 0x09, 0x00, 0xAD, 0xDE,
0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72,
0x79, 0x2C, 0x20, 0x6E, 0x6F, 0x6E, 0x2D, 0x65,
0x6D, 0x70, 0x74, 0x79, 0x20, 0x73, 0x74, 0x72,
0x69, 0x6E, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74,
0x20, 0x75, 0x6E, 0x69, 0x71, 0x75, 0x65, 0x6C,
0x79, 0x20, 0x69, 0x64, 0x65, 0x6E, 0x74, 0x69,
0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x69,
0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63,
0x75, 0x6C, 0x61, 0x72, 0x20, 0x50, 0x69, 0x6E,
0x47, 0x72, 0x6F, 0x75, 0x70, 0x00, 0x44, 0xA6,
0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC, 0xBE,
/*
* PinGroup("PinGroup", ResourceProducer , , )
* { 0xDEAD, 0xBEEF, 0xCAFE, 0xBABE }
*/
0x90, 0x1C, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x00,
0x16, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xAD, 0xDE,
0xEF, 0xBE, 0xFE, 0xCA, 0xBE, 0xBA, 0x50, 0x69,
0x6E, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
PinGroup,
{
UACPI_RESOURCE_TYPE_PIN_GROUP,
0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // label.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0xAD, 0xDE, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72,
0x61, 0x72, 0x79, 0x2C, 0x20, 0x6E, 0x6F, 0x6E,
0x2D, 0x65, 0x6D, 0x70, 0x74, 0x79, 0x20, 0x73,
0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x74, 0x68,
0x61, 0x74, 0x20, 0x75, 0x6E, 0x69, 0x71, 0x75,
0x65, 0x6C, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6E,
0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74,
0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74,
0x69, 0x63, 0x75, 0x6C, 0x61, 0x72, 0x20, 0x50,
0x69, 0x6E, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x00,
0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC,
0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_PIN_GROUP,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // label.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pin_table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xAD, 0xDE, 0xEF, 0xBE, 0xFE, 0xCA, 0xBE, 0xBA,
0x50, 0x69, 0x6E, 0x47, 0x72, 0x6F, 0x75, 0x70,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
PinGroup,
{
NATIVE_OFFSET(pin_group, label.string),
NATIVE_OFFSET(pin_group, pin_table),
NATIVE_OFFSET(pin_group, vendor_data),
0x90 + NATIVE_OFFSET(pin_group, label.string),
0x90 + NATIVE_OFFSET(pin_group, pin_table),
}
)
TEST_CASE_AML(
PinGroupFunction,
{
/*
* PinGroupFunction(
* Exclusive, 0xDEAD,
* "string that uniquely identifies the GPIO controller", 0xFE,
* "non-empty string argument that matches ResourceLabel
* of a PinGroup",
* ResourceConsumer, , RawDataBuffer (9) {
* 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D,
* 0xDC, 0xBE,
* })
*/
0x91, 0x8E, 0x00, 0x01, 0x02, 0x00, 0xAD, 0xDE,
0xFE, 0x11, 0x00, 0x45, 0x00, 0x88, 0x00, 0x09,
0x00, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20,
0x74, 0x68, 0x61, 0x74, 0x20, 0x75, 0x6E, 0x69,
0x71, 0x75, 0x65, 0x6C, 0x79, 0x20, 0x69, 0x64,
0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x50, 0x49,
0x4F, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x6F,
0x6C, 0x6C, 0x65, 0x72, 0x00, 0x6E, 0x6F, 0x6E,
0x2D, 0x65, 0x6D, 0x70, 0x74, 0x79, 0x20, 0x73,
0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x72,
0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x6D, 0x61, 0x74, 0x63,
0x68, 0x65, 0x73, 0x20, 0x52, 0x65, 0x73, 0x6F,
0x75, 0x72, 0x63, 0x65, 0x4C, 0x61, 0x62, 0x65,
0x6C, 0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, 0x50,
0x69, 0x6E, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x00,
0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC,
0xBE,
/*
* PinGroupFunction(
* Shared, 0xBEEF, "asdisdfp", 0xCA, "dsadfodp",
* ResourceConsumer, ,
* )
*/
0x91, 0x20, 0x00, 0x01, 0x03, 0x00, 0xEF, 0xBE,
0xCA, 0x11, 0x00, 0x1A, 0x00, 0x23, 0x00, 0x00,
0x00, 0x61, 0x73, 0x64, 0x69, 0x73, 0x64, 0x66,
0x70, 0x00, 0x64, 0x73, 0x61, 0x64, 0x66, 0x6F,
0x64, 0x70, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
PinGroupFunction,
{
UACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0xAD, 0xDE, 0x09, 0x00,
0xFE, 0x01, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // label.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x75, 0x6E, 0x69, 0x71,
0x75, 0x65, 0x6C, 0x79, 0x20, 0x69, 0x64, 0x65,
0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20,
0x74, 0x68, 0x65, 0x20, 0x47, 0x50, 0x49, 0x4F,
0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C,
0x6C, 0x65, 0x72, 0x00, 0x6E, 0x6F, 0x6E, 0x2D,
0x65, 0x6D, 0x70, 0x74, 0x79, 0x20, 0x73, 0x74,
0x72, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x72, 0x67,
0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x68,
0x61, 0x74, 0x20, 0x6D, 0x61, 0x74, 0x63, 0x68,
0x65, 0x73, 0x20, 0x52, 0x65, 0x73, 0x6F, 0x75,
0x72, 0x63, 0x65, 0x4C, 0x61, 0x62, 0x65, 0x6C,
0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, 0x50, 0x69,
0x6E, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x00, 0x44,
0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC, 0xBE,
UACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x00, 0xEF, 0xBE, 0x00, 0x00,
0xCA, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // label.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x61, 0x73, 0x64, 0x69, 0x73, 0x64, 0x66, 0x70,
0x00, 0x64, 0x73, 0x61, 0x64, 0x66, 0x6F, 0x64,
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
PinGroupFunction,
{
NATIVE_OFFSET(pin_group_function, source.string),
NATIVE_OFFSET(pin_group_function, label.string),
NATIVE_OFFSET(pin_group_function, vendor_data),
0xB8 + NATIVE_OFFSET(pin_group_function, source.string),
0xB8 + NATIVE_OFFSET(pin_group_function, label.string),
}
)
TEST_CASE_AML(
PinGroupConfig,
{
/*
* PinGroupConfig(
* Exclusive, 0x06, 0xDEADBEEF,
* "string that uniquely identifies the GPIO controller", 0xAB,
* "non-empty string argument that matches ResourceLabel
* of a PinGroup",
* ResourceConsumer, , RawDataBuffer (2) {
* 0x44, 0xA6
* })
*/
0x92, 0x8A, 0x00, 0x01, 0x02, 0x00, 0x06, 0xEF,
0xBE, 0xAD, 0xDE, 0xAB, 0x14, 0x00, 0x48, 0x00,
0x8B, 0x00, 0x02, 0x00, 0x73, 0x74, 0x72, 0x69,
0x6E, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
0x75, 0x6E, 0x69, 0x71, 0x75, 0x65, 0x6C, 0x79,
0x20, 0x69, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66,
0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x47, 0x50, 0x49, 0x4F, 0x20, 0x63, 0x6F, 0x6E,
0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x72, 0x00,
0x6E, 0x6F, 0x6E, 0x2D, 0x65, 0x6D, 0x70, 0x74,
0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E,
0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6D,
0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x52,
0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x4C,
0x61, 0x62, 0x65, 0x6C, 0x20, 0x6F, 0x66, 0x20,
0x61, 0x20, 0x50, 0x69, 0x6E, 0x47, 0x72, 0x6F,
0x75, 0x70, 0x00, 0x44, 0xA6,
/*
* PinGroupConfig(
* Shared, 0x0D, 0xCAFEBABE, "dsadfodp", 0xDF, "x",
* ResourceConsumer, ,
* )
*/
0x92, 0x1C, 0x00, 0x01, 0x03, 0x00, 0x0D, 0xBE,
0xBA, 0xFE, 0xCA, 0xDF, 0x14, 0x00, 0x1D, 0x00,
0x1F, 0x00, 0x00, 0x00, 0x64, 0x73, 0x61, 0x64,
0x66, 0x6F, 0x64, 0x70, 0x00, 0x78, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
PinGroupConfig,
{
UACPI_RESOURCE_TYPE_PIN_GROUP_CONFIGURATION,
0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x06, 0xEF, 0xBE, 0xAD, 0xDE,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xAB, 0x01, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // label.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x75, 0x6E, 0x69, 0x71,
0x75, 0x65, 0x6C, 0x79, 0x20, 0x69, 0x64, 0x65,
0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20,
0x74, 0x68, 0x65, 0x20, 0x47, 0x50, 0x49, 0x4F,
0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C,
0x6C, 0x65, 0x72, 0x00, 0x6E, 0x6F, 0x6E, 0x2D,
0x65, 0x6D, 0x70, 0x74, 0x79, 0x20, 0x73, 0x74,
0x72, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x72, 0x67,
0x75, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x74, 0x68,
0x61, 0x74, 0x20, 0x6D, 0x61, 0x74, 0x63, 0x68,
0x65, 0x73, 0x20, 0x52, 0x65, 0x73, 0x6F, 0x75,
0x72, 0x63, 0x65, 0x4C, 0x61, 0x62, 0x65, 0x6C,
0x20, 0x6F, 0x66, 0x20, 0x61, 0x20, 0x50, 0x69,
0x6E, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x00, 0x44,
0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_PIN_GROUP_CONFIGURATION,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x0D, 0xBE, 0xBA, 0xFE, 0xCA,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xDF, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // label.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x64, 0x73, 0x61, 0x64, 0x66, 0x6F, 0x64, 0x70,
0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
PinGroupConfig,
{
NATIVE_OFFSET(pin_group_configuration, source.string),
NATIVE_OFFSET(pin_group_configuration, label.string),
NATIVE_OFFSET(pin_group_configuration, vendor_data),
0xC0 + NATIVE_OFFSET(pin_group_configuration, source.string),
0xC0 + NATIVE_OFFSET(pin_group_configuration, label.string),
}
)
TEST_CASE_AML(
I2CSerialBusV2,
{
/*
* I2cSerialBusV2(
* 0xFF68, ControllerInitiated, 0xABC61A8F,
* AddressingMode7Bit,
* "string which uniquely identifies the I2C bus controller",
* 0x11, ResourceConsumer, , Exclusive,
* RawDataBuffer (9) {
* 0x44, 0xA6, 0x5A, 0x82,
* 0x83, 0x57, 0x7D, 0xDC,
* 0xBE,
* }
* )
*/
0x8E, 0x50, 0x00, 0x02, 0x11, 0x01, 0x02, 0x00,
0x00, 0x01, 0x0F, 0x00, 0x8F, 0x1A, 0xC6, 0xAB,
0x68, 0xFF, 0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57,
0x7D, 0xDC, 0xBE, 0x73, 0x74, 0x72, 0x69, 0x6E,
0x67, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
0x75, 0x6E, 0x69, 0x71, 0x75, 0x65, 0x6C, 0x79,
0x20, 0x69, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66,
0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x49, 0x32, 0x43, 0x20, 0x62, 0x75, 0x73, 0x20,
0x63, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C,
0x65, 0x72, 0x00,
/*
* I2cSerialBusV2(
* 0x1199, DeviceInitiated, 0x23456789,
* AddressingMode10Bit, "",
* 0x22, ResourceConsumer, , Shared,
* )
*/
0x8E, 0x10, 0x00, 0x02, 0x22, 0x01, 0x07, 0x01,
0x00, 0x01, 0x06, 0x00, 0x89, 0x67, 0x45, 0x23,
0x99, 0x11, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
I2CSerialBusV2,
{
UACPI_RESOURCE_TYPE_SERIAL_I2C_CONNECTION,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x0F, 0x00,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x01, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0x00, 0x00, 0x68, 0xFF, 0x8F, 0x1A, 0xC6, 0xAB,
0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC,
0xBE, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20,
0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x75, 0x6E,
0x69, 0x71, 0x75, 0x65, 0x6C, 0x79, 0x20, 0x69,
0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65,
0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x32,
0x43, 0x20, 0x62, 0x75, 0x73, 0x20, 0x63, 0x6F,
0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x72,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_SERIAL_I2C_CONNECTION,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x22, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x99, 0x11, 0x89, 0x67, 0x45, 0x23,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
I2CSerialBusV2,
{
NATIVE_OFFSET(serial_bus_common, source.string),
NATIVE_OFFSET(serial_bus_common, vendor_data),
0x80 + NATIVE_OFFSET(serial_bus_common, source.string),
}
)
TEST_CASE_AML(
SPISerialBusV2,
{
/*
* SPISerialBusV2(
* 0xFF68, PolarityHigh, ThreeWireMode,
* 0xFE, DeviceInitiated, 0xDEADBEEF,
* ClockPolarityLow, ClockPhaseFirst,
* "string which uniquely identifies the SPI bus controller",
* 0xCA, ResourceConsumer, , Exclusive,
* RawDataBuffer (9) {
* 0x44, 0xA6, 0x5A, 0x82,
* 0x83, 0x57, 0x7D, 0xDC,
* 0xBE,
* }
* )
*/
0x8E, 0x53, 0x00, 0x02, 0xCA, 0x02, 0x03, 0x03,
0x00, 0x01, 0x12, 0x00, 0xEF, 0xBE, 0xAD, 0xDE,
0xFE, 0x00, 0x00, 0x68, 0xFF, 0x44, 0xA6, 0x5A,
0x82, 0x83, 0x57, 0x7D, 0xDC, 0xBE, 0x73, 0x74,
0x72, 0x69, 0x6E, 0x67, 0x20, 0x77, 0x68, 0x69,
0x63, 0x68, 0x20, 0x75, 0x6E, 0x69, 0x71, 0x75,
0x65, 0x6C, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6E,
0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x53, 0x50, 0x49, 0x20, 0x62,
0x75, 0x73, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72,
0x6F, 0x6C, 0x6C, 0x65, 0x72, 0x00,
/*
* SPISerialBusV2(
* 0xDABE, PolarityLow, FourWireMode,
* 0x13, ControllerInitiated, 0x87341812,
* ClockPolarityHigh, ClockPhaseSecond, "",
* 0xCB, ResourceConsumer, , Shared,
* )
*/
0x8E, 0x13, 0x00, 0x02, 0xCB, 0x02, 0x06, 0x00,
0x00, 0x01, 0x09, 0x00, 0x12, 0x18, 0x34, 0x87,
0x13, 0x01, 0x01, 0xBE, 0xDA, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
SPISerialBusV2,
{
UACPI_RESOURCE_TYPE_SERIAL_SPI_CONNECTION,
0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x02, 0x02, 0x01, 0x01, 0x00, 0x01, 0x12, 0x00,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xCA, 0x01, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0x01, 0x01, 0xFE, 0x00, 0x00, 0x68, 0xFF, 0x00,
0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00,
0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC,
0xBE, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20,
0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x75, 0x6E,
0x69, 0x71, 0x75, 0x65, 0x6C, 0x79, 0x20, 0x69,
0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65,
0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x50,
0x49, 0x20, 0x62, 0x75, 0x73, 0x20, 0x63, 0x6F,
0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x72,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_SERIAL_SPI_CONNECTION,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x01, 0x01, 0x01, 0x09, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xCB, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x13, 0x01, 0x01, 0xBE, 0xDA, 0x00,
0x12, 0x18, 0x34, 0x87, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
}
)
TEST_CASE_POINTERS(
SPISerialBusV2,
{
NATIVE_OFFSET(serial_bus_common, source.string),
NATIVE_OFFSET(serial_bus_common, vendor_data),
0x88 + NATIVE_OFFSET(serial_bus_common, source.string),
}
)
TEST_CASE_AML(
UARTSerialBusV2,
{
/*
* UARTSerialBusV2(
* 0xCAFEBABE, DataBitsFive, StopBitsZero, 0x19,
* LittleEndian, ParityTypeMark, FlowControlHardware, 0xABEC,
* 0xC3BB, "?", 0xCA, ResourceConsumer, , Exclusive,
* )
*/
0x8E, 0x15, 0x00, 0x02, 0xCA, 0x03, 0x02, 0x01,
0x00, 0x01, 0x0A, 0x00, 0xBE, 0xBA, 0xFE, 0xCA,
0xEC, 0xAB, 0xBB, 0xC3, 0x03, 0x19, 0x3F, 0x00,
/*
* UARTSerialBusV2(
* 0xDEADBEEF, DataBitsNine, StopBitsOnePlusHalf, 0x70,
* BigEndian, ParityTypeEven, FlowControlXON, 0xBACE,
* 0xC1AB, "string which uniquely identifies the UART",
* 0xB2, ResourceConsumer, , Shared, RawDataBuffer (16) {
* 0x44, 0xA6, 0x5A, 0x82,
* 0x83, 0x57, 0x7D, 0xDC,
* 0x84, 0x56, 0x7A, 0xDD,
* 0x85, 0x58, 0x7E, 0xDB,
* })
*/
0x8E, 0x4D, 0x00, 0x02, 0xB2, 0x03, 0x06, 0xCA,
0x00, 0x01, 0x1A, 0x00, 0xEF, 0xBE, 0xAD, 0xDE,
0xCE, 0xBA, 0xAB, 0xC1, 0x01, 0x70, 0x44, 0xA6,
0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC, 0x84, 0x56,
0x7A, 0xDD, 0x85, 0x58, 0x7E, 0xDB, 0x73, 0x74,
0x72, 0x69, 0x6E, 0x67, 0x20, 0x77, 0x68, 0x69,
0x63, 0x68, 0x20, 0x75, 0x6E, 0x69, 0x71, 0x75,
0x65, 0x6C, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6E,
0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x55, 0x41, 0x52, 0x54, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
UARTSerialBusV2,
{
UACPI_RESOURCE_TYPE_SERIAL_UART_CONNECTION,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x03, 0x00, 0x01, 0x00, 0x01, 0x0A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xCA, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x19, 0x01, 0x00, 0x00,
0xBE, 0xBA, 0xFE, 0xCA, 0xEC, 0xAB, 0xBB, 0xC3,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_SERIAL_UART_CONNECTION,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x1A, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xB2, 0x01, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0x02, 0x04, 0x01, 0x01, 0x70, 0x02, 0x00, 0x00,
0xEF, 0xBE, 0xAD, 0xDE, 0xCE, 0xBA, 0xAB, 0xC1,
0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC,
0x84, 0x56, 0x7A, 0xDD, 0x85, 0x58, 0x7E, 0xDB,
0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x77,
0x68, 0x69, 0x63, 0x68, 0x20, 0x75, 0x6E, 0x69,
0x71, 0x75, 0x65, 0x6C, 0x79, 0x20, 0x69, 0x64,
0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x41, 0x52,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
UARTSerialBusV2,
{
NATIVE_OFFSET(serial_bus_common, source.string),
0x48 + NATIVE_OFFSET(serial_bus_common, source.string),
0x48 + NATIVE_OFFSET(serial_bus_common, vendor_data),
}
)
TEST_CASE_AML(
CSI2Bus,
{
/*
* CSI2Bus(
* DeviceInitiated, 3, 0x2D,
* "the remote CSI-2 receiver referred to by this descriptor.",
* 0x38, ResourceConsumer, ,
* RawDataBuffer (16) {
* 0x44, 0xA6, 0x5A, 0x82,
* 0x83, 0x57, 0x7D, 0xDC,
* 0x84, 0x56, 0x7A, 0xDD,
* 0x85, 0x58, 0x7E, 0xDB,
* })
*/
0x8E, 0x53, 0x00, 0x01, 0x38, 0x04, 0x03, 0x2F,
0x00, 0x01, 0x10, 0x00, 0x44, 0xA6, 0x5A, 0x82,
0x83, 0x57, 0x7D, 0xDC, 0x84, 0x56, 0x7A, 0xDD,
0x85, 0x58, 0x7E, 0xDB, 0x74, 0x68, 0x65, 0x20,
0x72, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x20, 0x43,
0x53, 0x49, 0x2D, 0x32, 0x20, 0x72, 0x65, 0x63,
0x65, 0x69, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65,
0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74,
0x6F, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69,
0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x6F, 0x72, 0x2E, 0x00,
/*
* CSI2Bus(
* ControllerInitiated, 2, 0x11, " ",
* 0x29, ResourceConsumer, ,
* )
*/
0x8E, 0x0B, 0x00, 0x01, 0x29, 0x04, 0x02, 0x13,
0x00, 0x01, 0x00, 0x00, 0x20, 0x00,
AML_END_TAG,
}
)
TEST_CASE_NATIVE(
CSI2Bus,
{
UACPI_RESOURCE_TYPE_SERIAL_CSI2_CONNECTION,
0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x01, 0x04, 0x01, 0x01, 0x00, 0x01, 0x10, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x01, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vendor_data
0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0xA6, 0x5A, 0x82, 0x83, 0x57, 0x7D, 0xDC,
0x84, 0x56, 0x7A, 0xDD, 0x85, 0x58, 0x7E, 0xDB,
0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6D, 0x6F,
0x74, 0x65, 0x20, 0x43, 0x53, 0x49, 0x2D, 0x32,
0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72,
0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x79,
0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65,
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6F, 0x72,
0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
UACPI_RESOURCE_TYPE_SERIAL_CSI2_CONNECTION,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x01, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x29, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source.string
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
NATIVE_END_TAG,
}
)
TEST_CASE_POINTERS(
CSI2Bus,
{
NATIVE_OFFSET(serial_bus_common, source.string),
NATIVE_OFFSET(serial_bus_common, vendor_data),
0x88 + NATIVE_OFFSET(serial_bus_common, source.string),
}
)
#define TEST_CASE(name) \
{ \
#name, \
res_aml_##name, \
UACPI_ARRAY_SIZE(res_aml_##name), \
res_native_##name, \
UACPI_ARRAY_SIZE(res_native_##name), \
NULL, \
0, \
}
#define TEST_CASE_PTRS(name) \
{ \
#name, \
res_aml_##name, \
UACPI_ARRAY_SIZE(res_aml_##name), \
res_native_##name, \
UACPI_ARRAY_SIZE(res_native_##name), \
res_pointers_##name, \
UACPI_ARRAY_SIZE(res_pointers_##name), \
}
static const struct test_case test_cases[] = {
TEST_CASE(IRQ),
TEST_CASE(DMA),
TEST_CASE(Start_End_DependentFn),
TEST_CASE(IO),
TEST_CASE(FixedIO),
TEST_CASE(FixedDMA),
TEST_CASE(Vendor_Short_Long),
TEST_CASE(Memory_24_32_Fixed32),
TEST_CASE(Register),
TEST_CASE(ExtendedIO),
TEST_CASE(ExtendedMemory),
TEST_CASE(ExtendedSpace),
TEST_CASE_PTRS(WordBusNumber),
TEST_CASE_PTRS(WordIO),
TEST_CASE_PTRS(WordSpace),
TEST_CASE_PTRS(DWordIO),
TEST_CASE_PTRS(DWordMemory),
TEST_CASE_PTRS(DWordSpace),
TEST_CASE_PTRS(QWordIO),
TEST_CASE_PTRS(QWordMemory),
TEST_CASE_PTRS(QWordSpace),
TEST_CASE_PTRS(ClockInput),
TEST_CASE_PTRS(Interrupt),
TEST_CASE_PTRS(GpioIO),
TEST_CASE_PTRS(GpioInt),
TEST_CASE_PTRS(PinFunction),
TEST_CASE_PTRS(PinConfig),
TEST_CASE_PTRS(PinGroup),
TEST_CASE_PTRS(PinGroupFunction),
TEST_CASE_PTRS(PinGroupConfig),
TEST_CASE_PTRS(I2CSerialBusV2),
TEST_CASE_PTRS(SPISerialBusV2),
TEST_CASE_PTRS(UARTSerialBusV2),
TEST_CASE_PTRS(CSI2Bus),
};
static bool have_offset(const struct test_case *test, size_t offset)
{
size_t i;
for (i = 0; i < test->num_pointer_offsets; i++)
if (test->pointer_offsets[i] == offset)
return true;
return false;
}
void run_resource_tests(void)
{
size_t fail_count = 0;
size_t i;
if (sizeof(void*) == 4) {
/*
* Since resource tests do byte-by-byte memcmps it's too much work to
* make them support multiple bit widths. The current implementation
* is targeting 64-bit platforms.
*/
printf("Resource tests only support 64-bit platforms\n");
return;
}
for (i = 0; i < UACPI_ARRAY_SIZE(test_cases); i++) {
const struct test_case *test = &test_cases[i];
uacpi_resources *resources;
uacpi_data_view aml_buffer;
uint8_t *bytes;
uacpi_status ret;
uacpi_object *resource_template = NULL;
size_t i;
printf("Running resource test '%s'...", test->name);
aml_buffer.bytes = test->aml_bytes;
aml_buffer.length = test->num_aml_bytes;
ret = uacpi_native_resources_from_aml(aml_buffer, &resources);
if (uacpi_unlikely_error(ret)) {
printf("from_aml error: %s\n", uacpi_status_to_string(ret));
fail_count++;
goto next_test;
}
if (resources->length != test->num_native_bytes) {
printf(
"unexpected native length %zu (expected %zu)\n",
resources->length, test->num_native_bytes
);
fail_count++;
goto next_test;
}
bytes = (uint8_t*)resources->entries;
for (i = 0; i < resources->length; ++i) {
if ((i & (sizeof(void*) - 1)) == 0 && have_offset(test, i)) {
i += sizeof(void*) - 1;
continue;
}
if (bytes[i] != test->native_bytes[i]) {
printf(
"native byte[%zu] mismatch, expected 0x%02X, got 0x%02X\n",
i, test->native_bytes[i], bytes[i]
);
fail_count++;
goto next_test;
}
}
ret = uacpi_native_resources_to_aml(resources, &resource_template);
if (uacpi_unlikely_error(ret)) {
printf("to_aml error: %s\n", uacpi_status_to_string(ret));
fail_count++;
goto next_test;
}
if (resource_template->buffer->size != test->num_aml_bytes) {
printf(
"unexpected AML length %zu (expected %zu)\n",
resource_template->buffer->size, test->num_aml_bytes
);
fail_count++;
goto next_test;
}
for (i = 0; i < resource_template->buffer->size; ++i)
if (resource_template->buffer->byte_data[i] != test->aml_bytes[i]) {
printf(
"AML byte[%zu] mismatch, expected 0x%02X, got 0x%02X\n",
i, test->aml_bytes[i],
resource_template->buffer->byte_data[i]
);
fail_count++;
goto next_test;
}
puts("OK");
next_test:
uacpi_free_resources(resources);
uacpi_object_unref(resource_template);
}
if (fail_count)
error("one or more resource tests failed");
}