148 lines
3.5 KiB
Plaintext
148 lines
3.5 KiB
Plaintext
// Name: _REG gets called correctly
|
|
// Expect: int => 0
|
|
|
|
DefinitionBlock ("", "DSDT", 2, "uTEST", "TESTTABL", 0xF0F0F0F0)
|
|
{
|
|
Name (RET, 0)
|
|
|
|
Device (PCI0) {
|
|
Name (_HID, "PNP0000")
|
|
|
|
Method (_CID) {
|
|
Local0 = Package {
|
|
"idk",
|
|
0x000A2E4F,
|
|
"badid",
|
|
0x02002E4F,
|
|
0x030FD041,
|
|
0x130FD041,
|
|
0x120FD041,
|
|
|
|
// PCI Express root bridge
|
|
"PNP0A08"
|
|
}
|
|
Return (Local0)
|
|
}
|
|
|
|
Name (_SEG, 0x1)
|
|
Name (_BBN, 0x10)
|
|
|
|
Device (HPET) {
|
|
Name (_HID, "PNP0103")
|
|
|
|
OperationRegion(LOLX, SystemMemory, 0xDEADBEEF, 123)
|
|
|
|
Method (_REG, 2) {
|
|
Debug = "HPET._REG shouldn't have been called"
|
|
RET += 1
|
|
}
|
|
}
|
|
|
|
Name (STAT, 0)
|
|
|
|
Device (UHCI) {
|
|
Name (_ADR, 0x0001000F)
|
|
|
|
Method (TEST, 1, Serialized) {
|
|
Method (_REG, 2, Serialized) {
|
|
Printf("PCIR _REG(%o, %o) called", Arg0, Arg1)
|
|
|
|
If (Arg0 != 2) {
|
|
Printf("Invalid space value %o", Arg0)
|
|
RET += 1
|
|
}
|
|
|
|
Switch (Arg1) {
|
|
Case (0) {
|
|
If (STAT != 1) {
|
|
Debug = "Trying to _REG(disconnect) before _REG(connect)"
|
|
RET += 1
|
|
Break
|
|
}
|
|
|
|
STAT += 1
|
|
Break
|
|
|
|
}
|
|
Case (1) {
|
|
If (STAT != 0) {
|
|
Debug = "Trying to run _REG(connect) twice"
|
|
RET += 1
|
|
Break
|
|
}
|
|
|
|
STAT += 1
|
|
Break
|
|
}
|
|
}
|
|
}
|
|
|
|
OperationRegion(PCIR, PCI_Config, 0x00, Arg0)
|
|
Field (PCIR, AnyAcc, NoLock) {
|
|
REG0, 8
|
|
}
|
|
|
|
If (STAT != 1) {
|
|
Debug = "No one ever called _REG on PCIR, giving up"
|
|
RET += 1
|
|
Return ()
|
|
}
|
|
|
|
REG0 = 123
|
|
}
|
|
}
|
|
}
|
|
|
|
Device (PCI1) {
|
|
Name (STAT, 0)
|
|
|
|
// PCI root bus
|
|
Name (_HID, "PNP0A03")
|
|
|
|
Device (XHCI) {
|
|
Name (_ADR, 0x00030002)
|
|
|
|
OperationRegion(HREG, PCI_Config, 0x04, 0xF0)
|
|
Field (HREG, AnyAcc, NoLock) {
|
|
REG2, 8
|
|
}
|
|
|
|
// This can only be called after loading the namespace
|
|
Method (_REG, 2) {
|
|
Printf("HREG _REG(%o, %o) called", Arg0, Arg1)
|
|
|
|
If (Arg0 != 2) {
|
|
Printf("Invalid space value %o", Arg0)
|
|
RET += 1
|
|
}
|
|
|
|
If (Arg1 != 1 || STAT != 0) {
|
|
Printf("Invalid Arg1 (%o) for state %o", Arg1, STAT)
|
|
RET += 1
|
|
}
|
|
|
|
STAT += 1
|
|
}
|
|
|
|
Method (WRIT, 1) {
|
|
REG2 = Arg0
|
|
Return (Arg0)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
Method (MAIN) {
|
|
\PCI0.UHCI.TEST(0xFF)
|
|
Local0 = 1
|
|
|
|
If (\PCI1.STAT == 1) {
|
|
Local0 -= \PCI1.XHCI.WRIT(1)
|
|
} Else {
|
|
Debug = "PCI1.XHCI._REG was never called!"
|
|
}
|
|
|
|
Return (RET + Local0)
|
|
}
|
|
}
|