49 lines
1.1 KiB
Plaintext
49 lines
1.1 KiB
Plaintext
// Name: Global lock works
|
|
// Expect: int => 0
|
|
|
|
DefinitionBlock ("", "DSDT", 2, "uTEST", "TESTTABL", 0xF0F0F0F0)
|
|
{
|
|
Method (CHEK, 1, Serialized, 15)
|
|
{
|
|
If (Arg0 != 0) {
|
|
Debug = "Failed to acquire the global lock!"
|
|
Return (1)
|
|
}
|
|
|
|
Return (0)
|
|
}
|
|
|
|
Method (MAIN, 0, Serialized)
|
|
{
|
|
Local0 = 0
|
|
|
|
Debug = "Acquiring the lock manually!"
|
|
|
|
Local0 += CHEK(Acquire (_GL, 0xFFFF))
|
|
Local0 += CHEK(Acquire (_GL, 0xFFFF))
|
|
Local0 += CHEK(Acquire (_GL, 0xFFFF))
|
|
Local0 += CHEK(Acquire (_GL, 0xFFFF))
|
|
|
|
Debug = "Doing a field write..."
|
|
|
|
OperationRegion(NVSM, SystemMemory, 0x100000, 128)
|
|
Field (NVSM, AnyAcc, Lock, WriteAsZeros) {
|
|
FILD, 1,
|
|
}
|
|
|
|
FILD = 1
|
|
|
|
Debug = "Write done, we should still be holding the lock!"
|
|
Release(_GL)
|
|
Release(_GL)
|
|
Release(_GL)
|
|
|
|
Debug = "Should release NOW!"
|
|
Release(_GL)
|
|
|
|
// TODO? Would be nice to have some way to actually verify that a lock is held...
|
|
|
|
Return (Local0)
|
|
}
|
|
}
|