From 84042d3ea73598152be163c3f3d6601e1a3072ec Mon Sep 17 00:00:00 2001 From: jljusten Date: Mon, 23 Feb 2009 22:32:16 +0000 Subject: KbcResetDxe: DuetPkg => PcAtChipsetPkg git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7615 6f19259b-4bc3-4df7-8a09-765794883524 --- PcAtChipsetPkg/KbcResetDxe/Reset.c | 70 +++++++++++++++++++++++++++ PcAtChipsetPkg/KbcResetDxe/Reset.h | 85 +++++++++++++++++++++++++++++++++ PcAtChipsetPkg/KbcResetDxe/Reset.inf | 51 ++++++++++++++++++++ PcAtChipsetPkg/KbcResetDxe/ResetEntry.c | 76 +++++++++++++++++++++++++++++ 4 files changed, 282 insertions(+) create mode 100644 PcAtChipsetPkg/KbcResetDxe/Reset.c create mode 100644 PcAtChipsetPkg/KbcResetDxe/Reset.h create mode 100644 PcAtChipsetPkg/KbcResetDxe/Reset.inf create mode 100644 PcAtChipsetPkg/KbcResetDxe/ResetEntry.c (limited to 'PcAtChipsetPkg/KbcResetDxe') diff --git a/PcAtChipsetPkg/KbcResetDxe/Reset.c b/PcAtChipsetPkg/KbcResetDxe/Reset.c new file mode 100644 index 0000000..45f4bc7 --- /dev/null +++ b/PcAtChipsetPkg/KbcResetDxe/Reset.c @@ -0,0 +1,70 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + +Module Name: + Reset.c + +Abstract: + + Reset Architectural Protocol implementation + +--*/ + +#include "Reset.h" + +VOID +EFIAPI +KbcResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ) +/*++ + +Routine Description: + + Reset the system. + +Arguments: + + ResetType - warm or cold + ResetStatus - possible cause of reset + DataSize - Size of ResetData in bytes + ResetData - Optional Unicode string + For details, see efiapi.h + +Returns: + Does not return if the reset takes place. + EFI_INVALID_PARAMETER If ResetType is invalid. + +--*/ +{ + UINT8 Data; + + switch (ResetType) { + case EfiResetWarm: + case EfiResetCold: + case EfiResetShutdown: + Data = 0xfe; + IoWrite8 (0x64, Data); + break; + + default: + return ; + } + + // + // Given we should have reset getting here would be bad + // + ASSERT (FALSE); +} + diff --git a/PcAtChipsetPkg/KbcResetDxe/Reset.h b/PcAtChipsetPkg/KbcResetDxe/Reset.h new file mode 100644 index 0000000..3b70580 --- /dev/null +++ b/PcAtChipsetPkg/KbcResetDxe/Reset.h @@ -0,0 +1,85 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + +Module Name: + Reset.h + +Abstract: + + some definitions for reset + +--*/ + +#ifndef _KBC_RESET_H +#define _KBC_RESET_H + +#include + +#include +#include +#include +#include + +#include + +EFI_STATUS +EFIAPI +InitializeReset ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + ImageHandle - TODO: add argument description + SystemTable - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +VOID +EFIAPI +KbcResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + ResetType - TODO: add argument description + ResetStatus - TODO: add argument description + DataSize - TODO: add argument description + ResetData - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +#endif diff --git a/PcAtChipsetPkg/KbcResetDxe/Reset.inf b/PcAtChipsetPkg/KbcResetDxe/Reset.inf new file mode 100644 index 0000000..a1bcaeb --- /dev/null +++ b/PcAtChipsetPkg/KbcResetDxe/Reset.inf @@ -0,0 +1,51 @@ +#/*++ +# +# Copyright (c) 2006 - 2008, Intel Corporation +# All rights reserved. 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. +# +# Module Name: +# Reset.inf +# +# Abstract: +# +#--*/ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = KbcReset + FILE_GUID = 6F0198AA-1F1D-426D-AE3E-39AB633FCC28 + MODULE_TYPE = DXE_RUNTIME_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = InitializeReset + +[Packages] + DuetPkg/DuetPkg.dec + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + +[LibraryClasses] + DebugLib + UefiBootServicesTableLib + UefiDriverEntryPoint + IoLib + +[Sources.common] + Reset.c + Reset.h + ResetEntry.c + +[Protocols] + gEfiResetArchProtocolGuid + +[Depex] + gEfiCpuIoProtocolGuid + + diff --git a/PcAtChipsetPkg/KbcResetDxe/ResetEntry.c b/PcAtChipsetPkg/KbcResetDxe/ResetEntry.c new file mode 100644 index 0000000..bcef440 --- /dev/null +++ b/PcAtChipsetPkg/KbcResetDxe/ResetEntry.c @@ -0,0 +1,76 @@ +/*++ + +Copyright (c) 2009, Intel Corporation +All rights reserved. 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. + + + +--*/ + +#include "Reset.h" + +// +// The handle onto which the Reset Architectural Protocol is installed +// +EFI_HANDLE mResetHandle = NULL; + + +EFI_STATUS +EFIAPI +InitializeReset ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Initialize the state information for the Reset Architectural Protocol + +Arguments: + + ImageHandle of the loaded driver + Pointer to the System Table + +Returns: + + Status + + EFI_SUCCESS - thread can be successfully created + EFI_OUT_OF_RESOURCES - cannot allocate protocol data structure + EFI_DEVICE_ERROR - cannot create the timer service + +--*/ +// TODO: SystemTable - add argument and description to function comment +{ + EFI_STATUS Status; + + // + // Make sure the Reset Architectural Protocol is not already installed in the system + // + ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiResetArchProtocolGuid); + + // + // Hook the runtime service table + // + SystemTable->RuntimeServices->ResetSystem = KbcResetSystem; + + // + // Now install the Reset RT AP on a new handle + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &mResetHandle, + &gEfiResetArchProtocolGuid, + NULL, + NULL + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} -- cgit v1.1