/** @file This file is PeiMePolicy library. Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "PeiMePolicyLibrary.h" #include /** Load default settings for ME config block in pre-mem phase. @param[in] ConfigBlockPointer The pointer to the config block **/ VOID LoadMePeiPreMemDefault ( IN VOID *ConfigBlockPointer ); /** Load default settings for ME config block in PEI phase. @param[in] ConfigBlockPointer The pointer to the config block **/ VOID LoadMePeiDefault ( IN VOID *ConfigBlockPointer ); STATIC COMPONENT_BLOCK_ENTRY mMeCompontBlockPreMemBlocks [] = { {&gMePeiPreMemConfigGuid, sizeof (ME_PEI_PREMEM_CONFIG), ME_PEI_PREMEM_CONFIG_REVISION, LoadMePeiPreMemDefault} }; STATIC COMPONENT_BLOCK_ENTRY mMeCompontBlockBlocks [] = { {&gMePeiConfigGuid, sizeof (ME_PEI_CONFIG), ME_PEI_CONFIG_REVISION, LoadMePeiDefault} }; /** Load default settings for ME config block in pre-mem phase. @param[in] ConfigBlockPointer The pointer to the config block **/ VOID LoadMePeiPreMemDefault ( IN VOID *ConfigBlockPointer ) { ME_PEI_PREMEM_CONFIG *MePeiPreMemConfig; MePeiPreMemConfig = ConfigBlockPointer; MePeiPreMemConfig->HeciTimeouts = 1; MePeiPreMemConfig->Heci1BarAddress = 0xFED1A000; MePeiPreMemConfig->Heci2BarAddress = 0xFED1B000; MePeiPreMemConfig->Heci3BarAddress = 0xFED1C000; // // Test policies // MePeiPreMemConfig->SendDidMsg = 1; MePeiPreMemConfig->KtDeviceEnable = 1; } /** Load default settings for ME config block in PEI phase. @param[in] ConfigBlockPointer The pointer to the config block **/ VOID LoadMePeiDefault ( IN VOID *ConfigBlockPointer ) { ME_PEI_CONFIG *MePeiConfig; MePeiConfig = ConfigBlockPointer; MePeiConfig->EndOfPostMessage = EOP_SEND_IN_DXE; MePeiConfig->MeUnconfigOnRtcClear = 1; } /** Dump values of ME config block in pre-mem phase. @param[in] MePeiPreMemConfig The pointer to the config block **/ VOID EFIAPI PrintMePeiPreMemConfig ( IN ME_PEI_PREMEM_CONFIG *MePeiPreMemConfig ) { DEBUG_CODE_BEGIN (); DEBUG ((DEBUG_INFO, "------------------------ ME_PEI_PREMEM_CONFIG -----------------\n")); DEBUG ((DEBUG_INFO, " Revision : 0x%x\n", MePeiPreMemConfig->Header.Revision)); ASSERT (MePeiPreMemConfig->Header.Revision == ME_PEI_PREMEM_CONFIG_REVISION); DEBUG ((DEBUG_INFO, " HeciTimeouts : 0x%x\n", MePeiPreMemConfig->HeciTimeouts)); DEBUG ((DEBUG_INFO, " DidInitStat : 0x%x\n", MePeiPreMemConfig->DidInitStat)); DEBUG ((DEBUG_INFO, " DisableCpuReplacedPolling : 0x%x\n", MePeiPreMemConfig->DisableCpuReplacedPolling)); DEBUG ((DEBUG_INFO, " SendDidMsg : 0x%x\n", MePeiPreMemConfig->SendDidMsg)); DEBUG ((DEBUG_INFO, " DisableHeciRetry : 0x%x\n", MePeiPreMemConfig->DisableHeciRetry)); DEBUG ((DEBUG_INFO, " DisableMessageCheck : 0x%x\n", MePeiPreMemConfig->DisableMessageCheck)); DEBUG ((DEBUG_INFO, " SkipMbpHob : 0x%x\n", MePeiPreMemConfig->SkipMbpHob)); DEBUG ((DEBUG_INFO, " HeciCommunication2 : 0x%x\n", MePeiPreMemConfig->HeciCommunication2)); DEBUG ((DEBUG_INFO, " KtDeviceEnable : 0x%x\n", MePeiPreMemConfig->KtDeviceEnable)); DEBUG ((DEBUG_INFO, " Heci1BarAddress : 0x%x\n", MePeiPreMemConfig->Heci1BarAddress)); DEBUG ((DEBUG_INFO, " Heci2BarAddress : 0x%x\n", MePeiPreMemConfig->Heci2BarAddress)); DEBUG ((DEBUG_INFO, " Heci3BarAddress : 0x%x\n", MePeiPreMemConfig->Heci3BarAddress)); DEBUG_CODE_END (); } /** Dump values of ME config block in PEI phase. @param[in] MePeiConfig The pointer to the config block **/ VOID EFIAPI PrintMePeiConfig ( IN ME_PEI_CONFIG *MePeiConfig ) { DEBUG_CODE_BEGIN (); DEBUG ((DEBUG_INFO, "------------------------ ME_PEI_CONFIG -----------------\n")); DEBUG ((DEBUG_INFO, " Revision : 0x%x\n", MePeiConfig->Header.Revision)); ASSERT (MePeiConfig->Header.Revision == ME_PEI_CONFIG_REVISION); DEBUG ((DEBUG_INFO, " MctpBroadcastCycle : 0x%x\n", MePeiConfig->MctpBroadcastCycle)); DEBUG ((DEBUG_INFO, " EndOfPostMessage : 0x%x\n", MePeiConfig->EndOfPostMessage)); DEBUG ((DEBUG_INFO, " Heci3Enabled : 0x%x\n", MePeiConfig->Heci3Enabled)); DEBUG ((DEBUG_INFO, " DisableD0I3SettingForHeci : 0x%x\n", MePeiConfig->DisableD0I3SettingForHeci)); DEBUG ((DEBUG_INFO, " MeUnconfigOnRtcClear : 0x%x\n", MePeiConfig->MeUnconfigOnRtcClear)); DEBUG_CODE_END (); } /** Print PEI ME config block @param[in] SiPolicyPpiPreMem The RC Policy PPI instance **/ VOID EFIAPI MePrintPolicyPpiPreMem ( IN SI_PREMEM_POLICY_PPI *SiPolicyPpiPreMem ) { DEBUG_CODE_BEGIN (); EFI_STATUS Status; ME_PEI_PREMEM_CONFIG *MePeiPreMemConfig; Status = GetConfigBlock ((VOID *) SiPolicyPpiPreMem, &gMePeiPreMemConfigGuid, (VOID *) &MePeiPreMemConfig); ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Pre-Mem Print Begin -----------------\n")); PrintMePeiPreMemConfig (MePeiPreMemConfig); DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Pre-Mem Print End -------------------\n")); DEBUG_CODE_END (); } /** Print PEI ME config block @param[in] SiPolicyPpi The RC Policy PPI instance **/ VOID EFIAPI MePrintPolicyPpi ( IN SI_POLICY_PPI *SiPolicyPpi ) { DEBUG_CODE_BEGIN (); EFI_STATUS Status; ME_PEI_CONFIG *MePeiConfig; Status = GetConfigBlock ((VOID *) SiPolicyPpi, &gMePeiConfigGuid, (VOID *) &MePeiConfig); ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Print Begin -----------------\n")); PrintMePeiConfig (MePeiConfig); DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Print End -------------------\n")); DEBUG_CODE_END (); } /** Get ME config block table total size. @retval Size of ME config block table **/ UINT16 EFIAPI MeGetConfigBlockTotalSizePreMem ( VOID ) { return GetComponentConfigBlockTotalSize (&mMeCompontBlockPreMemBlocks[0], sizeof (mMeCompontBlockPreMemBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); } /** Get ME config block table total size. @retval Size of ME config block table **/ UINT16 EFIAPI MeGetConfigBlockTotalSize ( VOID ) { return GetComponentConfigBlockTotalSize (&mMeCompontBlockBlocks[0], sizeof (mMeCompontBlockBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); } /** MeAddConfigBlocksPreMem add all config blocks. @param[in] ConfigBlockTableAddress The pointer to add config blocks @retval EFI_SUCCESS The policy default is initialized. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer **/ EFI_STATUS EFIAPI MeAddConfigBlocksPreMem ( IN VOID *ConfigBlockTableAddress ) { DEBUG ((DEBUG_INFO, "Me AddConfigBlocks. TotalBlockCount = 0x%x\n", sizeof (mMeCompontBlockPreMemBlocks) / sizeof (COMPONENT_BLOCK_ENTRY))); return AddComponentConfigBlocks (ConfigBlockTableAddress, &mMeCompontBlockPreMemBlocks[0], sizeof (mMeCompontBlockPreMemBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); } /** MeAddConfigBlocks add all config blocks. @param[in] ConfigBlockTableAddress The pointer to add config blocks @retval EFI_SUCCESS The policy default is initialized. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer **/ EFI_STATUS EFIAPI MeAddConfigBlocks ( IN VOID *ConfigBlockTableAddress ) { DEBUG ((DEBUG_INFO, "ME AddConfigBlocks. TotalBlockCount = 0x%x\n", sizeof (mMeCompontBlockBlocks) / sizeof (COMPONENT_BLOCK_ENTRY))); return AddComponentConfigBlocks (ConfigBlockTableAddress, &mMeCompontBlockBlocks[0], sizeof (mMeCompontBlockBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); }