/** @file IPMI FRB PEIM. Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include VOID SetWatchDogTimer ( IN BOOLEAN Frb2Enabled ) { EFI_STATUS Status; IPMI_SET_WATCHDOG_TIMER_REQUEST FrbTimer; IPMI_GET_WATCHDOG_TIMER_RESPONSE GetWatchdogTimer; UINT8 CompletionCode; Status = IpmiGetWatchdogTimer (&GetWatchdogTimer); if (EFI_ERROR(Status)) { return ; } if (Frb2Enabled) { ZeroMem (&FrbTimer, sizeof(FrbTimer)); //Byte 1 FrbTimer.TimerUse.Bits.TimerUse = IPMI_WATCHDOG_TIMER_BIOS_FRB2; //Byte 2 FrbTimer.TimerActions.Uint8 = 0; //NormalBoot, NoTimeOutInterrupt. i.e no action when BMC watchdog timeout //Byte 3 FrbTimer.PretimeoutInterval = 0; //Byte 4 FrbTimer.TimerUseExpirationFlagsClear |= BIT1; //set Frb2ExpirationFlag //Data Byte 5/6 FrbTimer.InitialCountdownValue = PcdGet16(PcdFRBTimeoutValue) * 10; //Set BMC watchdog timer Status = IpmiSetWatchdogTimer (&FrbTimer, &CompletionCode); Status = IpmiResetWatchdogTimer (&CompletionCode); } } EFI_STATUS EFIAPI InitializeFrbPei ( IN EFI_PEI_FILE_HANDLE FileHandle, IN CONST EFI_PEI_SERVICES **PeiServices ) /*++ Routine Description: Arguments: FfsHeader PeiServices Returns: EFI_SUCCESS --*/ { BOOLEAN Frb2Enabled; // // If we are booting with defaults, then make sure FRB2 is enabled. // Frb2Enabled = PcdGetBool (PcdFRB2EnabledFlag); SetWatchDogTimer (Frb2Enabled); return EFI_SUCCESS; }