mirror of https://github.com/acidanthera/audk.git
Puts SMM variable common definitions in SmmVariableCommon.h.
Fixed a bug that SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY was misused as SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11339 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
60d8f1f856
commit
d00ed85e0a
|
@ -0,0 +1,104 @@
|
||||||
|
/** @file
|
||||||
|
The file defined some common structures used for communicating between SMM variable module and SMM variable wrapper module.
|
||||||
|
|
||||||
|
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
|
This program and the accompanying materials are licensed and made available under
|
||||||
|
the terms and conditions of the BSD License that accompanies this distribution.
|
||||||
|
The full text of the license may be found at
|
||||||
|
http://opensource.org/licenses/bsd-license.php.
|
||||||
|
|
||||||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef _SMM_VARIABLE_COMMON_H_
|
||||||
|
#define _SMM_VARIABLE_COMMON_H_
|
||||||
|
|
||||||
|
#define EFI_SMM_VARIABLE_WRITE_GUID \
|
||||||
|
{ 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 0xdc, 0xaa, 0x3b, 0xbd, 0xf3 } }
|
||||||
|
|
||||||
|
extern EFI_GUID gSmmVariableWriteGuid;
|
||||||
|
|
||||||
|
//
|
||||||
|
// This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from
|
||||||
|
// SMI handler. The communication buffer should be:
|
||||||
|
// EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.
|
||||||
|
//
|
||||||
|
typedef struct {
|
||||||
|
UINTN Function;
|
||||||
|
EFI_STATUS ReturnStatus;
|
||||||
|
UINT8 Data[1];
|
||||||
|
} SMM_VARIABLE_COMMUNICATE_HEADER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_GET_VARIABLE 1
|
||||||
|
//
|
||||||
|
// The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME 2
|
||||||
|
//
|
||||||
|
// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_SET_VARIABLE 3
|
||||||
|
//
|
||||||
|
// The payload for this function is SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO 4
|
||||||
|
//
|
||||||
|
// It is a notify event, no extra payload for this function.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_READY_TO_BOOT 5
|
||||||
|
//
|
||||||
|
// It is a notify event, no extra payload for this function.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE 6
|
||||||
|
//
|
||||||
|
// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_SMM_COMMUNICATE_HEADER
|
||||||
|
// is gEfiSmmVariableProtocolGuid.
|
||||||
|
//
|
||||||
|
#define SMM_VARIABLE_FUNCTION_GET_STATISTICS 7
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Size of SMM communicate header, without including the payload.
|
||||||
|
///
|
||||||
|
#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Size of SMM variable communicate header, without including the payload.
|
||||||
|
///
|
||||||
|
#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))
|
||||||
|
|
||||||
|
///
|
||||||
|
/// This structure is used to communicate with SMI handler by SetVariable and GetVariable.
|
||||||
|
///
|
||||||
|
typedef struct {
|
||||||
|
EFI_GUID Guid;
|
||||||
|
UINTN DataSize;
|
||||||
|
UINTN NameSize;
|
||||||
|
UINT32 Attributes;
|
||||||
|
CHAR16 Name[1];
|
||||||
|
} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// This structure is used to communicate with SMI handler by GetNextVariableName.
|
||||||
|
///
|
||||||
|
typedef struct {
|
||||||
|
EFI_GUID Guid;
|
||||||
|
UINTN NameSize;
|
||||||
|
CHAR16 Name[1];
|
||||||
|
} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// This structure is used to communicate with SMI handler by QueryVariableInfo.
|
||||||
|
///
|
||||||
|
typedef struct {
|
||||||
|
UINT64 MaximumVariableStorageSize;
|
||||||
|
UINT64 RemainingVariableStorageSize;
|
||||||
|
UINT64 MaximumVariableSize;
|
||||||
|
UINT32 Attributes;
|
||||||
|
} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;
|
||||||
|
|
||||||
|
#endif // _SMM_VARIABLE_COMMON_H_
|
|
@ -2,7 +2,7 @@
|
||||||
The variable data structures are related to EDK II-specific implementation of UEFI variables.
|
The variable data structures are related to EDK II-specific implementation of UEFI variables.
|
||||||
VariableFormat.h defines variable data headers and variable storage region headers.
|
VariableFormat.h defines variable data headers and variable storage region headers.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials are licensed and made available under
|
This program and the accompanying materials are licensed and made available under
|
||||||
the terms and conditions of the BSD License that accompanies this distribution.
|
the terms and conditions of the BSD License that accompanies this distribution.
|
||||||
The full text of the license may be found at
|
The full text of the license may be found at
|
||||||
|
@ -157,90 +157,4 @@ struct _VARIABLE_INFO_ENTRY {
|
||||||
BOOLEAN Volatile; ///< TRUE if volatile, FALSE if non-volatile.
|
BOOLEAN Volatile; ///< TRUE if volatile, FALSE if non-volatile.
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
|
||||||
// This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from
|
|
||||||
// SMI handler. The communication buffer should be:
|
|
||||||
// EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.
|
|
||||||
//
|
|
||||||
typedef struct {
|
|
||||||
UINTN Function;
|
|
||||||
EFI_STATUS ReturnStatus;
|
|
||||||
UINT8 Data[1];
|
|
||||||
} SMM_VARIABLE_COMMUNICATE_HEADER;
|
|
||||||
|
|
||||||
//
|
|
||||||
// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_GET_VARIABLE 1
|
|
||||||
//
|
|
||||||
// The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME 2
|
|
||||||
//
|
|
||||||
// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_SET_VARIABLE 3
|
|
||||||
//
|
|
||||||
// The payload for this function is SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO 4
|
|
||||||
//
|
|
||||||
// It is a notify event, no extra payload for this function.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_READY_TO_BOOT 5
|
|
||||||
//
|
|
||||||
// It is a notify event, no extra payload for this function.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE 6
|
|
||||||
//
|
|
||||||
// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_SMM_COMMUNICATE_HEADER
|
|
||||||
// is gEfiSmmVariableProtocolGuid.
|
|
||||||
//
|
|
||||||
#define SMM_VARIABLE_FUNCTION_GET_STATISTICS 7
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Size of SMM communicate header, without including the payload.
|
|
||||||
///
|
|
||||||
#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Size of SMM variable communicate header, without including the payload.
|
|
||||||
///
|
|
||||||
#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))
|
|
||||||
|
|
||||||
///
|
|
||||||
/// This structure is used to communicate with SMI handler by SetVariable and GetVariable.
|
|
||||||
///
|
|
||||||
typedef struct {
|
|
||||||
EFI_GUID Guid;
|
|
||||||
UINTN DataSize;
|
|
||||||
UINTN NameSize;
|
|
||||||
UINT32 Attributes;
|
|
||||||
CHAR16 Name[1];
|
|
||||||
} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// This structure is used to communicate with SMI handler by GetNextVariableName.
|
|
||||||
///
|
|
||||||
typedef struct {
|
|
||||||
EFI_GUID Guid;
|
|
||||||
UINTN NameSize;
|
|
||||||
CHAR16 Name[1];
|
|
||||||
} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// This structure is used to communicate with SMI handler by QueryVariableInfo.
|
|
||||||
///
|
|
||||||
typedef struct {
|
|
||||||
UINT64 MaximumVariableStorageSize;
|
|
||||||
UINT64 RemainingVariableStorageSize;
|
|
||||||
UINT64 MaximumVariableSize;
|
|
||||||
UINT32 Attributes;
|
|
||||||
} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;
|
|
||||||
|
|
||||||
///
|
|
||||||
/// This structure is used to communicate with SMI handler to get variable statistics information.
|
|
||||||
///
|
|
||||||
typedef VARIABLE_INFO_ENTRY SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY;
|
|
||||||
|
|
||||||
#endif // _EFI_VARIABLE_H_
|
#endif // _EFI_VARIABLE_H_
|
||||||
|
|
|
@ -131,6 +131,10 @@
|
||||||
# Include/Guid/VariableFormat.h
|
# Include/Guid/VariableFormat.h
|
||||||
gEfiVariableGuid = { 0xddcf3616, 0x3275, 0x4164, { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d }}
|
gEfiVariableGuid = { 0xddcf3616, 0x3275, 0x4164, { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d }}
|
||||||
|
|
||||||
|
## Guid is defined for SMM variable module to notify SMM variable wrapper module when variable write service was ready.
|
||||||
|
# Include/Guid/SmmVariableCommon.h
|
||||||
|
gSmmVariableWriteGuid = { 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 0xdc, 0xaa, 0x3b, 0xbd, 0xf3 }}
|
||||||
|
|
||||||
## Performance protocol guid that also acts as the performance HOB guid and performance variable GUID
|
## Performance protocol guid that also acts as the performance HOB guid and performance variable GUID
|
||||||
# Include/Guid/Performance.h
|
# Include/Guid/Performance.h
|
||||||
gPerformanceProtocolGuid = { 0x76B6BDFA, 0x2ACD, 0x4462, { 0x9E, 0x3F, 0xCB, 0x58, 0xC9, 0x69, 0xD9, 0x37 }}
|
gPerformanceProtocolGuid = { 0x76B6BDFA, 0x2ACD, 0x4462, { 0x9E, 0x3F, 0xCB, 0x58, 0xC9, 0x69, 0xD9, 0x37 }}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
implements an SMI handler to communicate with the DXE runtime driver
|
implements an SMI handler to communicate with the DXE runtime driver
|
||||||
to provide variable services.
|
to provide variable services.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -14,18 +14,20 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
#include <Protocol/SmmVariable.h>
|
||||||
|
#include <Protocol/SmmFirmwareVolumeBlock.h>
|
||||||
#include <Protocol/SmmFaultTolerantWrite.h>
|
#include <Protocol/SmmFaultTolerantWrite.h>
|
||||||
#include <Library/SmmServicesTableLib.h>
|
#include <Library/SmmServicesTableLib.h>
|
||||||
|
|
||||||
|
#include <Guid/VariableFormat.h>
|
||||||
|
#include <Guid/SmmVariableCommon.h>
|
||||||
#include "Variable.h"
|
#include "Variable.h"
|
||||||
#include "VariableSmmCommon.h"
|
|
||||||
|
|
||||||
extern SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY *gVariableInfo;
|
extern VARIABLE_INFO_ENTRY *gVariableInfo;
|
||||||
EFI_HANDLE mSmmVariableHandle = NULL;
|
EFI_HANDLE mSmmVariableHandle = NULL;
|
||||||
EFI_HANDLE mVariableHandle = NULL;
|
EFI_HANDLE mVariableHandle = NULL;
|
||||||
BOOLEAN mAtRuntime = FALSE;
|
BOOLEAN mAtRuntime = FALSE;
|
||||||
EFI_GUID mZeroGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};
|
EFI_GUID mZeroGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};
|
||||||
EFI_GUID mSmmVariableWriteGuid = EFI_SMM_VARIABLE_WRITE_GUID;
|
|
||||||
|
|
||||||
EFI_SMM_VARIABLE_PROTOCOL gSmmVariable = {
|
EFI_SMM_VARIABLE_PROTOCOL gSmmVariable = {
|
||||||
VariableServiceGetVariable,
|
VariableServiceGetVariable,
|
||||||
|
@ -254,11 +256,11 @@ GetFvbCountAndBuffer (
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SmmVariableGetStatistics (
|
SmmVariableGetStatistics (
|
||||||
IN OUT SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY *InfoEntry,
|
IN OUT VARIABLE_INFO_ENTRY *InfoEntry,
|
||||||
IN OUT UINTN *InfoSize
|
IN OUT UINTN *InfoSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY *VariableInfo;
|
VARIABLE_INFO_ENTRY *VariableInfo;
|
||||||
UINTN NameLength;
|
UINTN NameLength;
|
||||||
UINTN StatisticsInfoSize;
|
UINTN StatisticsInfoSize;
|
||||||
CHAR16 *InfoName;
|
CHAR16 *InfoName;
|
||||||
|
@ -269,8 +271,8 @@ SmmVariableGetStatistics (
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
StatisticsInfoSize = sizeof (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY) + StrSize (VariableInfo->Name);
|
StatisticsInfoSize = sizeof (VARIABLE_INFO_ENTRY) + StrSize (VariableInfo->Name);
|
||||||
if (*InfoSize < sizeof (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY)) {
|
if (*InfoSize < sizeof (VARIABLE_INFO_ENTRY)) {
|
||||||
*InfoSize = StatisticsInfoSize;
|
*InfoSize = StatisticsInfoSize;
|
||||||
return EFI_BUFFER_TOO_SMALL;
|
return EFI_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
@ -280,7 +282,7 @@ SmmVariableGetStatistics (
|
||||||
//
|
//
|
||||||
// Return the first variable info
|
// Return the first variable info
|
||||||
//
|
//
|
||||||
CopyMem (InfoEntry, VariableInfo, sizeof (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY));
|
CopyMem (InfoEntry, VariableInfo, sizeof (VARIABLE_INFO_ENTRY));
|
||||||
CopyMem (InfoName, VariableInfo->Name, StrSize (VariableInfo->Name));
|
CopyMem (InfoName, VariableInfo->Name, StrSize (VariableInfo->Name));
|
||||||
*InfoSize = StatisticsInfoSize;
|
*InfoSize = StatisticsInfoSize;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
@ -313,13 +315,13 @@ SmmVariableGetStatistics (
|
||||||
//
|
//
|
||||||
// Output the new variable info
|
// Output the new variable info
|
||||||
//
|
//
|
||||||
StatisticsInfoSize = sizeof (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY) + StrSize (VariableInfo->Name);
|
StatisticsInfoSize = sizeof (VARIABLE_INFO_ENTRY) + StrSize (VariableInfo->Name);
|
||||||
if (*InfoSize < StatisticsInfoSize) {
|
if (*InfoSize < StatisticsInfoSize) {
|
||||||
*InfoSize = StatisticsInfoSize;
|
*InfoSize = StatisticsInfoSize;
|
||||||
return EFI_BUFFER_TOO_SMALL;
|
return EFI_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyMem (InfoEntry, VariableInfo, sizeof (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY));
|
CopyMem (InfoEntry, VariableInfo, sizeof (VARIABLE_INFO_ENTRY));
|
||||||
CopyMem (InfoName, VariableInfo->Name, StrSize (VariableInfo->Name));
|
CopyMem (InfoName, VariableInfo->Name, StrSize (VariableInfo->Name));
|
||||||
*InfoSize = StatisticsInfoSize;
|
*InfoSize = StatisticsInfoSize;
|
||||||
|
|
||||||
|
@ -361,7 +363,7 @@ SmmVariableHandler (
|
||||||
SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE *SmmVariableHeader;
|
SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE *SmmVariableHeader;
|
||||||
SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME *GetNextVariableName;
|
SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME *GetNextVariableName;
|
||||||
SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO *QueryVariableInfo;
|
SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO *QueryVariableInfo;
|
||||||
SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY *VariableInfo;
|
VARIABLE_INFO_ENTRY *VariableInfo;
|
||||||
UINTN InfoSize;
|
UINTN InfoSize;
|
||||||
|
|
||||||
ASSERT (CommBuffer != NULL);
|
ASSERT (CommBuffer != NULL);
|
||||||
|
@ -420,7 +422,7 @@ SmmVariableHandler (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SMM_VARIABLE_FUNCTION_GET_STATISTICS:
|
case SMM_VARIABLE_FUNCTION_GET_STATISTICS:
|
||||||
VariableInfo = (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY *) SmmVariableFunctionHeader->Data;
|
VariableInfo = (VARIABLE_INFO_ENTRY *) SmmVariableFunctionHeader->Data;
|
||||||
InfoSize = *CommBufferSize - OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data);
|
InfoSize = *CommBufferSize - OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data);
|
||||||
Status = SmmVariableGetStatistics (VariableInfo, &InfoSize);
|
Status = SmmVariableGetStatistics (VariableInfo, &InfoSize);
|
||||||
*CommBufferSize = InfoSize + OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data);
|
*CommBufferSize = InfoSize + OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data);
|
||||||
|
@ -498,7 +500,7 @@ SmmFtwNotificationEvent (
|
||||||
//
|
//
|
||||||
Status = gBS->InstallProtocolInterface (
|
Status = gBS->InstallProtocolInterface (
|
||||||
&mSmmVariableHandle,
|
&mSmmVariableHandle,
|
||||||
&mSmmVariableWriteGuid,
|
&gSmmVariableWriteGuid,
|
||||||
EFI_NATIVE_INTERFACE,
|
EFI_NATIVE_INTERFACE,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
@ -511,7 +513,7 @@ SmmFtwNotificationEvent (
|
||||||
/**
|
/**
|
||||||
Variable Driver main entry point. The Variable driver places the 4 EFI
|
Variable Driver main entry point. The Variable driver places the 4 EFI
|
||||||
runtime services in the EFI System Table and installs arch protocols
|
runtime services in the EFI System Table and installs arch protocols
|
||||||
for variable read and write services being availible. It also registers
|
for variable read and write services being available. It also registers
|
||||||
a notification function for an EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
|
a notification function for an EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
|
||||||
|
|
||||||
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
# This module should be used with SMM Runtime DXE module together. The
|
# This module should be used with SMM Runtime DXE module together. The
|
||||||
# SMM Runtime DXE module would install variable arch protocol and variable
|
# SMM Runtime DXE module would install variable arch protocol and variable
|
||||||
# write arch protocol based on SMM variable module.
|
# write arch protocol based on SMM variable module.
|
||||||
# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -41,7 +41,6 @@
|
||||||
Variable.c
|
Variable.c
|
||||||
VariableSmm.c
|
VariableSmm.c
|
||||||
Variable.h
|
Variable.h
|
||||||
VariableSmmCommon.h
|
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
@ -66,6 +65,7 @@
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiVariableGuid ## PRODUCES ## Configuration Table Guid
|
gEfiVariableGuid ## PRODUCES ## Configuration Table Guid
|
||||||
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
||||||
|
gSmmVariableWriteGuid ## PRODUCES ## SMM Variable Write Guid
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
/** @file
|
|
||||||
|
|
||||||
The internal header file includes the common header files shared
|
|
||||||
by VariableSmm module and VariableSmmRuntimeDxe module.
|
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
|
||||||
This program and the accompanying materials
|
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
|
||||||
http://opensource.org/licenses/bsd-license.php
|
|
||||||
|
|
||||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#ifndef _VARIABLE_SMM_COMMON_H_
|
|
||||||
#define _VARIABLE_SMM_COMMON_H_
|
|
||||||
|
|
||||||
#include <PiDxe.h>
|
|
||||||
|
|
||||||
#include <Protocol/SmmVariable.h>
|
|
||||||
#include <Protocol/SmmFirmwareVolumeBlock.h>
|
|
||||||
#include <Guid/VariableFormat.h>
|
|
||||||
|
|
||||||
#define EFI_SMM_VARIABLE_WRITE_GUID \
|
|
||||||
{ 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 0xdc, 0xaa, 0x3b, 0xbd, 0xf3 } }
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Size of SMM communicate header, without including the payload.
|
|
||||||
///
|
|
||||||
#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Size of SMM variable communicate header, without including the payload.
|
|
||||||
///
|
|
||||||
#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -4,7 +4,7 @@
|
||||||
and volatile storage space and install variable architecture protocol
|
and volatile storage space and install variable architecture protocol
|
||||||
based on SMM variable module.
|
based on SMM variable module.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -14,10 +14,11 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
#include <PiDxe.h>
|
||||||
#include <Protocol/VariableWrite.h>
|
#include <Protocol/VariableWrite.h>
|
||||||
#include <Protocol/Variable.h>
|
#include <Protocol/Variable.h>
|
||||||
#include <Protocol/SmmCommunication.h>
|
#include <Protocol/SmmCommunication.h>
|
||||||
|
#include <Protocol/SmmVariable.h>
|
||||||
|
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||||
|
@ -31,7 +32,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
|
|
||||||
#include <Guid/EventGroup.h>
|
#include <Guid/EventGroup.h>
|
||||||
#include "VariableSmmCommon.h"
|
#include <Guid/VariableFormat.h>
|
||||||
|
#include <Guid/SmmVariableCommon.h>
|
||||||
|
|
||||||
EFI_HANDLE mHandle = NULL;
|
EFI_HANDLE mHandle = NULL;
|
||||||
EFI_SMM_VARIABLE_PROTOCOL *mSmmVariable = NULL;
|
EFI_SMM_VARIABLE_PROTOCOL *mSmmVariable = NULL;
|
||||||
|
@ -39,7 +41,6 @@ EFI_EVENT mVirtualAddressChangeEvent = NULL;
|
||||||
EFI_SMM_COMMUNICATION_PROTOCOL *mSmmCommunication = NULL;
|
EFI_SMM_COMMUNICATION_PROTOCOL *mSmmCommunication = NULL;
|
||||||
UINT8 *mVariableBuffer = NULL;
|
UINT8 *mVariableBuffer = NULL;
|
||||||
UINT8 *mVariableBufferPhysical = NULL;
|
UINT8 *mVariableBufferPhysical = NULL;
|
||||||
EFI_GUID mSmmVariableWriteGuid = EFI_SMM_VARIABLE_WRITE_GUID;
|
|
||||||
UINTN mVariableBufferSize;
|
UINTN mVariableBufferSize;
|
||||||
|
|
||||||
|
|
||||||
|
@ -367,7 +368,7 @@ RuntimeServiceQueryVariableInfo (
|
||||||
// Init the communicate buffer. The buffer data size is:
|
// Init the communicate buffer. The buffer data size is:
|
||||||
// SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + PayloadSize;
|
// SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + PayloadSize;
|
||||||
//
|
//
|
||||||
PayloadSize = sizeof (SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY);
|
PayloadSize = sizeof (SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO);
|
||||||
Status = InitCommunicateBuffer ((VOID **)&SmmQueryVariableInfo, PayloadSize, SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO);
|
Status = InitCommunicateBuffer ((VOID **)&SmmQueryVariableInfo, PayloadSize, SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -550,7 +551,7 @@ SmmVariableWriteReady (
|
||||||
//
|
//
|
||||||
// Check whether the protocol is installed or not.
|
// Check whether the protocol is installed or not.
|
||||||
//
|
//
|
||||||
Status = gBS->LocateProtocol (&mSmmVariableWriteGuid, NULL, (VOID **) &ProtocolOps);
|
Status = gBS->LocateProtocol (&gSmmVariableWriteGuid, NULL, (VOID **) &ProtocolOps);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -568,7 +569,7 @@ SmmVariableWriteReady (
|
||||||
/**
|
/**
|
||||||
Variable Driver main entry point. The Variable driver places the 4 EFI
|
Variable Driver main entry point. The Variable driver places the 4 EFI
|
||||||
runtime services in the EFI System Table and installs arch protocols
|
runtime services in the EFI System Table and installs arch protocols
|
||||||
for variable read and write services being availible. It also registers
|
for variable read and write services being available. It also registers
|
||||||
a notification function for an EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
|
a notification function for an EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
|
||||||
|
|
||||||
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
||||||
|
@ -604,7 +605,7 @@ VariableSmmRuntimeInitialize (
|
||||||
// Smm Non-Volatile variable write service is ready
|
// Smm Non-Volatile variable write service is ready
|
||||||
//
|
//
|
||||||
EfiCreateProtocolNotifyEvent (
|
EfiCreateProtocolNotifyEvent (
|
||||||
&mSmmVariableWriteGuid,
|
&gSmmVariableWriteGuid,
|
||||||
TPL_CALLBACK,
|
TPL_CALLBACK,
|
||||||
SmmVariableWriteReady,
|
SmmVariableWriteReady,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# This module is the Runtime DXE part correspond to SMM variable module. It
|
# This module is the Runtime DXE part correspond to SMM variable module. It
|
||||||
# installs variable arch protocol and variable write arch protocol and works
|
# installs variable arch protocol and variable write arch protocol and works
|
||||||
# with SMM variable module together.
|
# with SMM variable module together.
|
||||||
# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -34,7 +34,6 @@
|
||||||
|
|
||||||
[Sources]
|
[Sources]
|
||||||
VariableSmmRuntimeDxe.c
|
VariableSmmRuntimeDxe.c
|
||||||
VariableSmmCommon.h
|
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
@ -58,6 +57,7 @@
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventVirtualAddressChangeGuid ## PRODUCES ## Event
|
gEfiEventVirtualAddressChangeGuid ## PRODUCES ## Event
|
||||||
|
gSmmVariableWriteGuid
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize
|
||||||
|
|
Loading…
Reference in New Issue