Integrate uACPI
This commit is contained in:
106
kernel/hal/x86_64/uACPI/tests/test-cases/table-loading-3.asl
Normal file
106
kernel/hal/x86_64/uACPI/tests/test-cases/table-loading-3.asl
Normal file
@ -0,0 +1,106 @@
|
||||
// Name: Recursive table loads with LoadTable
|
||||
// Expect: int => 0
|
||||
|
||||
DefinitionBlock ("", "DSDT", 2, "uTEST", "TESTTABL", 0xF0F0F0F0)
|
||||
{
|
||||
External(ITEM, IntObj)
|
||||
External(NUMB, IntObj)
|
||||
External(NUMA, IntObj)
|
||||
External(VISI, IntObj)
|
||||
|
||||
// All dynamic loads branch into here
|
||||
If (CondRefOf(ITEM)) {
|
||||
// Recursively start 10 table loads
|
||||
If (NUMB < 10) {
|
||||
NUMB += 1
|
||||
Local0 = NUMB
|
||||
|
||||
If (NUMB == 3) {
|
||||
Local0 = LoadTable("DSDT", "uTEST", "", "", "PARA", Local0)
|
||||
VISI += 1
|
||||
} ElseIf (NUMB == 5) {
|
||||
Local0 = LoadTable("DSDT", "", "", "", "PARA", Local0)
|
||||
VISI += 10
|
||||
} ElseIf (NUMB == 7) {
|
||||
Local0 = LoadTable("DSDT", "", "TESTTABL", "", "", Local0)
|
||||
VISI += 100
|
||||
} Else {
|
||||
Local0 = LoadTable("DSDT", "uTEST", "TESTTABL", "", "PARA", Local0)
|
||||
VISI += 1000
|
||||
}
|
||||
|
||||
// The last load is expected to fail, everything before should succeed
|
||||
If (!Local0) {
|
||||
If (NUMB != 10) {
|
||||
NUMA = 0xDEADBEEF
|
||||
Printf("Table load %o failed", NUMB)
|
||||
}
|
||||
} Else {
|
||||
NUMA += 1
|
||||
}
|
||||
|
||||
// Return something bogus here to make sure the return value isn't
|
||||
// propagated to the caller of Load.
|
||||
Return (Package { 1, 2 ,3})
|
||||
}
|
||||
|
||||
// We're the last table load, do something naughty to cause an error
|
||||
Local0 = Package { 1 }
|
||||
Local1 = RefOf(Local0)
|
||||
|
||||
// This code specifically attempts to perform a bogus implicit cast
|
||||
Local1 = "Hello World"
|
||||
}
|
||||
|
||||
Name (ITEM, 123)
|
||||
|
||||
// Number of started table loads
|
||||
Name (NUMB, 0)
|
||||
|
||||
// Number of finished table loads
|
||||
Name (NUMA, 0)
|
||||
|
||||
// Visited branches
|
||||
Name (VISI, 0)
|
||||
|
||||
Name (PARA, 0)
|
||||
Name (PASS, "FAIL")
|
||||
|
||||
Method (MAIN, 0, Serialized)
|
||||
{
|
||||
Local0 = LoadTable("DSDT", "uTEST", "TESTTABL", "", "PASS", 0x53534150)
|
||||
Printf("Recursive loads finished!")
|
||||
|
||||
If (!Local0) {
|
||||
Printf("Table load failed!")
|
||||
Return (0xCAFEBABE)
|
||||
}
|
||||
|
||||
If (NUMB != 10) {
|
||||
Printf("Invalid NUMB value %o", ToDecimalString(NUMB))
|
||||
Return (0xEEFFAABB)
|
||||
}
|
||||
|
||||
If (VISI != 7111) {
|
||||
Printf("Invalid VISI value %o", ToDecimalString(VISI))
|
||||
Return (0xAFFAAFFA)
|
||||
}
|
||||
|
||||
If (NUMA != 9) {
|
||||
Printf("Invalid NUMA value %o", ToDecimalString(NUMA))
|
||||
Return (0x11223344)
|
||||
}
|
||||
|
||||
If (PARA != 1) {
|
||||
Printf("Invalid PARA value %o", ToDecimalString(PARA))
|
||||
Return (0xDDFFBBCC)
|
||||
}
|
||||
|
||||
If (PASS != "PASS") {
|
||||
Printf("Invalid PASS value %o", PASS)
|
||||
Return (0xECECECEC)
|
||||
}
|
||||
|
||||
Return (0)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user