Skip to content

Instantly share code, notes, and snippets.

@RichardWeiYang
Created February 17, 2019 21:48
Show Gist options
  • Save RichardWeiYang/aea8e71f5c9ff71499d19e77eb8a777e to your computer and use it in GitHub Desktop.
Save RichardWeiYang/aea8e71f5c9ff71499d19e77eb8a777e to your computer and use it in GitHub Desktop.
Here is a link describing the AML gramma.
https://blog.csdn.net/tom__mao__/article/details/51724568
Describe the usage of OperationRegion:
https://wiki.ubuntu.com/Kernel/Reference/ACPITricksAndTips
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20180105 (64-bit version)
* Copyright (c) 2000 - 2018 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of SSDT.dat, Tue Oct 9 23:58:03 2018
*
* Original Table Header:
* Signature "SSDT"
* Length 0x000002CD (717)
* Revision 0x01
* Checksum 0x44
* OEM ID "BOCHS "
* OEM Table ID "NVDIMM"
* OEM Revision 0x00000001 (1)
* Compiler ID "BXPC"
* Compiler Version 0x00000001 (1)
*/
DefinitionBlock ("", "SSDT", 1, "BOCHS ", "NVDIMM", 0x00000001)
{
Scope (\_SB)
{
Device (NVDR)
{
Name (_HID, "ACPI0012" /* NVDIMM Root Device */) // _HID: Hardware ID
Method (NCAL, 5, Serialized)
{
Local6 = MEMA /* \MEMA */
OperationRegion (NPIO, SystemIO, 0x0A18, 0x04)
OperationRegion (NRAM, SystemMemory, Local6, 0x1000)
Field (NPIO, DWordAcc, NoLock, Preserve)
{
NTFI, 32
}
Field (NRAM, DWordAcc, NoLock, Preserve)
{
HDLE, 32,
REVS, 32,
FUNC, 32,
FARG, 32672
}
Field (NRAM, DWordAcc, NoLock, Preserve)
{
RLEN, 32,
ODAT, 32736
}
If ((Arg4 == Zero))
{
Local0 = ToUUID ("2f10e7a4-9e91-11e4-89d3-123b93f75cba")
}
ElseIf ((Arg4 == 0x00010000))
{
Local0 = ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62")
}
Else
{
Local0 = ToUUID ("4309ac30-0d11-11e4-9191-0800200c9a66")
}
If (((Local6 == Zero) | (Arg0 != Local0)))
{
If ((Arg2 == Zero))
{
Return (Buffer (One)
{
0x00 // .
})
}
Return (Buffer (One)
{
0x01 // .
})
}
HDLE = Arg4
REVS = Arg1
FUNC = Arg2
If (((ObjectType (Arg3) == 0x04) & (SizeOf (Arg3) == One)))
{
Local2 = Arg3 [Zero]
Local3 = DerefOf (Local2)
FARG = Local3
}
NTFI = Local6
Local1 = (RLEN - 0x04)
Local1 = (Local1 << 0x03)
CreateField (ODAT, Zero, Local1, OBUF)
Concatenate (Buffer (Zero){}, OBUF, Local7)
Return (Local7)
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Return (NCAL (Arg0, Arg1, Arg2, Arg3, Zero))
}
Name (RSTA, Zero)
Method (RFIT, 1, Serialized)
{
Name (OFST, Zero)
OFST = Arg0
Local0 = NCAL (ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62"), One, One, Package (0x01)
{
OFST
}, 0x00010000)
CreateDWordField (Local0, Zero, STAU)
RSTA = STAU /* \_SB_.NVDR.RFIT.STAU */
If ((Zero != STAU))
{
Return (Buffer (Zero){})
}
Local1 = SizeOf (Local0)
Local1 -= 0x04
If ((Local1 == Zero))
{
Return (Buffer (Zero){})
}
CreateField (Local0, 0x20, (Local1 << 0x03), BUFF)
Return (BUFF) /* \_SB_.NVDR.RFIT.BUFF */
}
Method (_FIT, 0, Serialized) // _FIT: Firmware Interface Table
{
Local2 = Buffer (Zero){}
Local3 = Zero
While (One)
{
Local0 = RFIT (Local3)
Local1 = SizeOf (Local0)
If ((RSTA == 0x0100))
{
Local2 = Buffer (Zero){}
Local3 = Zero
}
Else
{
If ((Local1 == Zero))
{
Return (Local2)
}
Local3 += Local1
Concatenate (Local2, Local0, Local2)
}
}
}
Device (NV00)
{
Name (_ADR, One) // _ADR: Address
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Return (NCAL (Arg0, Arg1, Arg2, Arg3, One))
}
}
Device (NV01)
{
Name (_ADR, 0x02) // _ADR: Address
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x02))
}
}
Device (NV02)
{
Name (_ADR, 0x03) // _ADR: Address
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x03))
}
}
Device (NV03)
{
Name (_ADR, 0x04) // _ADR: Address
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x04))
}
}
}
}
Name (MEMA, 0xBFFFE000)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment