mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-31 01:24:12 +02:00
MdeModulePkg/ResetUtilityLib: Add a new API ResetSystemWithSubtype
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1458 Implement the new API ResetSystemWithSubtype. Depend on Uefi Spec 2.8 chapter 8.5.1, the ResetData is valid while the ResetStatus is EFI_SUCCESS regardless of the ResetType. Also change the function ResetPlatofrmSpecificGuid to directly call ResetSystemWithSubtype to reduce the duplicated code. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Hao Wu <hao.a.wu@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Michael Turner <Michael.Turner@microsoft.com> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> Signed-off-by: Zhichao Gao <zhichao.gao@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com>
This commit is contained in:
parent
06aaf2f82c
commit
0851d7a53a
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
This contains the business logic for the module-specific Reset Helper functions.
|
This contains the business logic for the module-specific Reset Helper functions.
|
||||||
|
|
||||||
Copyright (c) 2017 - 2018 Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2017 - 2019 Intel Corporation. All rights reserved.<BR>
|
||||||
Copyright (c) 2016 Microsoft Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 Microsoft Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
@ -23,9 +23,44 @@ typedef struct {
|
|||||||
VERIFY_SIZE_OF (RESET_UTILITY_GUID_SPECIFIC_RESET_DATA, 18);
|
VERIFY_SIZE_OF (RESET_UTILITY_GUID_SPECIFIC_RESET_DATA, 18);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This is a shorthand helper function to reset with a subtype so that
|
This is a shorthand helper function to reset with reset type and a subtype
|
||||||
the caller doesn't have to bother with a function that has half a dozen
|
so that the caller doesn't have to bother with a function that has half
|
||||||
parameters.
|
a dozen parameters.
|
||||||
|
|
||||||
|
This will generate a reset with status EFI_SUCCESS, a NULL string, and
|
||||||
|
no custom data. The subtype will be formatted in such a way that it can be
|
||||||
|
picked up by notification registrations and custom handlers.
|
||||||
|
|
||||||
|
NOTE: This call will fail if the architectural ResetSystem underpinnings
|
||||||
|
are not initialized. For DXE, you can add gEfiResetArchProtocolGuid
|
||||||
|
to your DEPEX.
|
||||||
|
|
||||||
|
@param[in] ResetType The default EFI_RESET_TYPE of the reset.
|
||||||
|
@param[in] ResetSubtype GUID pointer for the reset subtype to be used.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
ResetSystemWithSubtype (
|
||||||
|
IN EFI_RESET_TYPE ResetType,
|
||||||
|
IN CONST GUID *ResetSubtype
|
||||||
|
)
|
||||||
|
{
|
||||||
|
RESET_UTILITY_GUID_SPECIFIC_RESET_DATA ResetData;
|
||||||
|
|
||||||
|
ResetData.NullTerminator = CHAR_NULL;
|
||||||
|
CopyGuid (
|
||||||
|
(GUID *)((UINT8 *)&ResetData + OFFSET_OF (RESET_UTILITY_GUID_SPECIFIC_RESET_DATA, ResetSubtype)),
|
||||||
|
ResetSubtype
|
||||||
|
);
|
||||||
|
|
||||||
|
ResetSystem (ResetType, EFI_SUCCESS, sizeof (ResetData), &ResetData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This is a shorthand helper function to reset with the reset type
|
||||||
|
'EfiResetPlatformSpecific' and a subtype so that the caller doesn't
|
||||||
|
have to bother with a function that has half a dozen parameters.
|
||||||
|
|
||||||
This will generate a reset with status EFI_SUCCESS, a NULL string, and
|
This will generate a reset with status EFI_SUCCESS, a NULL string, and
|
||||||
no custom data. The subtype will be formatted in such a way that it can be
|
no custom data. The subtype will be formatted in such a way that it can be
|
||||||
@ -44,14 +79,7 @@ ResetPlatformSpecificGuid (
|
|||||||
IN CONST GUID *ResetSubtype
|
IN CONST GUID *ResetSubtype
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
RESET_UTILITY_GUID_SPECIFIC_RESET_DATA ResetData;
|
ResetSystemWithSubtype (EfiResetPlatformSpecific, ResetSubtype);
|
||||||
|
|
||||||
ResetData.NullTerminator = CHAR_NULL;
|
|
||||||
CopyGuid (
|
|
||||||
(GUID *)((UINT8 *)&ResetData + OFFSET_OF (RESET_UTILITY_GUID_SPECIFIC_RESET_DATA, ResetSubtype)),
|
|
||||||
ResetSubtype
|
|
||||||
);
|
|
||||||
ResetPlatformSpecific (sizeof (ResetData), &ResetData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user