141 lines
4.5 KiB
C
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
|