alder_lake_bios/Oem/L05/FeatureCommon/InsydeL05ModulePkg/Include/Protocol/L05Variable.h

141 lines
4.5 KiB
C

/** @file
Definition for Variable Function
;******************************************************************************
;* Copyright (c) 2012 - 2013, Insyde Software Corporation. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#ifndef _EFI_L05_VARIABLE_PROTOCOL_H_
#define _EFI_L05_VARIABLE_PROTOCOL_H_
//
// GUID definition
//
#define EFI_L05_VARIABLE_PROTOCOL_GUID \
{ \
0xbfd02359, 0x8dfe, 0x459a, 0x8b, 0x69, 0xa7, 0x3a, 0x6b, 0xaf, 0xad, 0xc0 \
}
//
// Protocol definition
//
typedef struct _EFI_L05_VARIABLE_PROTOCOL EFI_L05_VARIABLE_PROTOCOL;
//
// L05 Variable Definition
//
#define EFI_L05_VARIABLE_NAME L"lvar"
#define LENV_SIGNATURE SIGNATURE_32('L','E','N','V')
#define INSTANCE_FROM_LENV_THIS(a) CR (a, LENOVO_VARIABLE_PRIVATE_DATA, LenovoVariableInstance, LENV_SIGNATURE)
#define LENOVO_VARIABLE_NO_DATA 0
#define LENOVO_VARIABLE_USING_REGION_1 1
#define LENOVO_VARIABLE_USING_REGION_2 2
#define LENOVO_VARIABLE_REGION_NOT_LOCKED 0
#define LENOVO_VARIABLE_REGION_LOCKED 1
#define LENOVO_VARIABLE_UNLOCK_PASSWORD L"UnlockPassword"
#define LENOVO_VARIABLE_UNLOCK_FAIL_MAX 5 //Define max fail count of unlocking
//If locked, can not delete or modify this variable, just read only
#define LENOVO_VARIABLE_ATTRIBUTE_LOCKED 1 //BIT0
enum IPGSMIFUNCTIONS {
INVALID_COMMAND = 0,
READ_NVRAM,
WRITE_NVRAM,
DELETE_NVRAM,
LOCK_NVRAM = 6,
UNLOCK_NVRAM = 7,
GET_BUFFER_ADDRESS = 9,
COMMAND_FAILED = 0xFE,
COMMAND_END = 0xFF
};
typedef
EFI_STATUS
(EFIAPI *EFI_L05_GET_VARIABLE) (
IN EFI_L05_VARIABLE_PROTOCOL *This,
IN EFI_GUID *VariableGuidName,
IN OUT UINT32 *DataSize,
OUT VOID *Data
);
typedef
EFI_STATUS
(EFIAPI *EFI_L05_SET_VARIABLE) (
IN EFI_L05_VARIABLE_PROTOCOL *This,
IN EFI_GUID *VariableGuidName,
IN UINT32 DataSize,
IN VOID *Data
);
typedef
EFI_STATUS
(EFIAPI *EFI_L05_LOCK_VARIABLE) (
IN EFI_L05_VARIABLE_PROTOCOL *This,
IN EFI_GUID *VariableGuidName
);
typedef
EFI_STATUS
(EFIAPI *EFI_L05_UNLOCK_VARIABLE) (
IN EFI_L05_VARIABLE_PROTOCOL *This,
IN EFI_GUID *VariableGuidName,
IN CHAR16 *Password
);
#pragma pack (1)
struct _EFI_L05_VARIABLE_PROTOCOL {
EFI_L05_GET_VARIABLE GetVariable;
EFI_L05_SET_VARIABLE SetVariable;
EFI_L05_LOCK_VARIABLE LockVariable;
EFI_L05_UNLOCK_VARIABLE UnlockVariable;
};
typedef struct _L05_SMAPI_DATA
{
IN OUT UINT16 FunctionCode;
IN OUT EFI_GUID Guid; // Variable
IN OUT CHAR16 Name[5]; // Variable name
IN OUT UINT32 DataLength; // real data length
IN OUT UINT8 Data[1]; // Variable data
} L05_SMAPI_DATA;
typedef struct {
EFI_GUID VariableGuidName;
UINT32 VariableDataSize; //Only VariableData size
UINT32 VariableAttribute;
UINT8 VariableData[1]; //The length is not fixed
} LENOVO_VARIABLE_VARIABLE;
typedef struct {
CHAR8 Signature[4];
UINT32 PriorityFlag;
UINT32 VariableCount;
UINT8 LockFlag;
UINT8 RandomNumber;
UINT16 Checksum;
} LENOVO_VARIABLE_RIGION_HEADER;
typedef struct {
UINT32 Signature;
UINT8 Region;
UINT8 *VariableBuffer;
UINT8 *LastByte;
EFI_L05_VARIABLE_PROTOCOL LenovoVariableInstance;
} LENOVO_VARIABLE_PRIVATE_DATA;
#pragma pack ()
//extern EFI_GUID gEfiL05SpecificVariableProtocolGuid;
extern EFI_GUID gEfiL05VariableProtocolGuid;
#endif