audk/PrmPkg/PrmSsdtInstallDxe/Prm.asl

116 lines
3.6 KiB
Plaintext

/** @file
The definition block in ACPI table for PRM Operation Region
Copyright (c) 2020-2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
DefinitionBlock (
"Prm.aml",
"SSDT",
2,
"OEMID ",
"PRMOPREG",
0x1000
)
{
Scope (\_SB)
{
//
// PRM Test Device
//
Device (PRMT)
{
Name (_HID, "80860223")
Name (_CID, EisaId ("PNP0C02"))
Name (_DDN, "PRM Test Device")
//PRM operation region format
OperationRegion (PRMR, PlatformRtMechanism, 0, 1)
Field (PRMR, BufferAcc, NoLock, Preserve) //Make it ByteAcc for parameter validation
{
PRMF, 8
}
/*
* Control method to invoke PRM OperationRegion handler
* Arg0 contains a buffer representing a _DSM GUID
*/
Method (RUNS, 1)
{
/* Local0 is the PRM data buffer */
Local0 = buffer (26){}
/* Create byte fields over the buffer */
CreateByteField (Local0, 0x0, PSTA)
CreateQWordField (Local0, 0x1, USTA)
CreateByteField (Local0, 0x9, CMD)
CreateField (Local0, 0x50, 0x80, GUID)
/* Fill in the command and data fields of the data buffer */
CMD = 0 // run command
GUID = Arg0
/* Invoke PRM OperationRegion Handler and store the result into Local0 */
Local0 = (PRMF = Local0)
/* Return status */
Return (PSTA)
}
/*
* Control method to lock a PRM transaction
* Arg0 contains a buffer representing a _DSM GUID
*/
Method (LCKH, 1)
{
/* Local0 is the PRM data buffer */
Local0 = buffer (26){}
/* Create byte fields over the buffer */
CreateByteField (Local0, 0x0, STAT)
CreateByteField (Local0, 0x9, CMD)
CreateField (Local0, 0x50, 0x80, GUID)
CMD = 1 // Lock command
GUID = Arg0
Local0 = (PRMF = Local0)
/* Note STAT contains the return status */
Return (STAT)
}
/*
* Control method to unlock a PRM transaction
* Arg0 contains a buffer representing a _DSM GUID
*/
Method (ULCK, 1)
{
/* Local0 is the PRM data buffer */
Local0 = buffer (26){}
/* Create byte fields over the buffer */
CreateByteField (Local0, 0x0, STAT)
CreateByteField (Local0, 0x9, CMD)
CreateField (Local0, 0x50, 0x80, GUID)
CMD = 2 // Unlock command
GUID = Arg0
Local0 = (PRMF = Local0)
/* Note STAT contains the return status */
Return (STAT)
}
/*
*Bit [0] Set if the device is present.
*Bit [1] Set if the device is enabled and decoding its resources.
*Bit [2] Set if the device should be shown in the UI.
*Bit [3] Set if the device is functioning properly (cleared if device failed its diagnostics).
*/
Method (_STA, 0, NotSerialized)
{
Return (0x0B) // Device present, but not shown
}
}
}
}