/** @file This file provide services for DXE phase policy default initialization Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #include /** Load DXE Config block default for HD Audio @param[in] ConfigBlockPointer Pointer to config block **/ VOID LoadHdAudioDxeConfigDefault ( IN VOID *ConfigBlockPointer ) { PCH_HDAUDIO_DXE_CONFIG *HdAudioDxeConfig; HdAudioDxeConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "HdaDxeConfig->Header.GuidHob.Name = %g\n", &HdAudioDxeConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "HdaDxeConfig->Header.GuidHob.Header.HobLength = 0x%x\n", HdAudioDxeConfig->Header.GuidHob.Header.HobLength)); HdAudioDxeConfig->DspEndpointDmic = PchHdaDmic4chArray; HdAudioDxeConfig->NhltDefaultFlow = TRUE; } /** Load DXE Config block default for GPIO @param[in] ConfigBlockPointer Pointer to config block **/ VOID LoadGpioDxeConfigDefault ( IN VOID *ConfigBlockPointer ) { PCH_GPIO_DXE_CONFIG *GpioDxeConfig; GpioDxeConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "GpioDxeConfig->Header.GuidHob.Name = %g\n", &GpioDxeConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "GpioDxeConfig->Header.GuidHob.Header.HobLength = 0x%x\n", GpioDxeConfig->Header.GuidHob.Header.HobLength)); GpioDxeConfig->HideGpioAcpiDevice = 0; } GLOBAL_REMOVE_IF_UNREFERENCED COMPONENT_BLOCK_ENTRY mPchDxeIpBlocks [] = { {&gHdAudioDxeConfigGuid, sizeof (PCH_HDAUDIO_DXE_CONFIG), HDAUDIO_DXE_CONFIG_REVISION, LoadHdAudioDxeConfigDefault}, {&gGpioDxeConfigGuid, sizeof (PCH_GPIO_DXE_CONFIG), GPIO_DXE_CONFIG_REVISION, LoadGpioDxeConfigDefault} }; /** Print PCH_HDAUDIO_DXE_CONFIG. @param[in] HdaDxeConfig Pointer to a PCH_HDAUDIO_DXE_CONFIG that provides the HD Audio settings **/ VOID PchPrintHdAudioDxeConfig ( IN CONST PCH_HDAUDIO_DXE_CONFIG *HdaDxeConfig ) { DEBUG ((DEBUG_INFO, "------------------ PCH HD-Audio DXE Config ------------------\n")); DEBUG ((DEBUG_INFO, " DSP Endpoint: DMIC : %d\n", HdaDxeConfig->DspEndpointDmic)); DEBUG ((DEBUG_INFO, " DSP Endpoint: I2S : %d\n", HdaDxeConfig->DspEndpointI2s)); DEBUG ((DEBUG_INFO, " DSP Endpoint: BT : %d\n", HdaDxeConfig->DspEndpointBluetooth)); DEBUG ((DEBUG_INFO, " DSP Feature Mask : 0x%x\n", HdaDxeConfig->DspFeatureMask)); DEBUG ((DEBUG_INFO, " Nhlt Default Flow : %d\n", HdaDxeConfig->NhltDefaultFlow)); } /** Print PCH_GPIO_DXE_CONFIG. @param[in] GpioDxeConfig Pointer to a PCH_GPIO_DXE_CONFIG that provides the GPIO settings **/ VOID PchPrintGpioDxeConfig ( IN CONST PCH_GPIO_DXE_CONFIG *GpioDxeConfig ) { DEBUG ((DEBUG_INFO, "------------------ PCH GPIO DXE Config ------------------\n")); DEBUG ((DEBUG_INFO, " HideGpioAcpiDevice : %d\n", GpioDxeConfig->HideGpioAcpiDevice)); } /** This function prints the PCH DXE phase policy. @param[in] PchPolicy - PCH DXE Policy protocol **/ VOID PchPrintPolicyProtocol ( IN PCH_POLICY_PROTOCOL *PchPolicy ) { DEBUG_CODE_BEGIN(); EFI_STATUS Status; PCH_HDAUDIO_DXE_CONFIG *HdaDxeConfig; PCH_GPIO_DXE_CONFIG *GpioDxeConfig; // // Get requisite IP Config Blocks which needs to be used here // Status = GetConfigBlock ((VOID *) PchPolicy, &gHdAudioDxeConfigGuid, (VOID *)&HdaDxeConfig); ASSERT_EFI_ERROR (Status); Status = GetConfigBlock ((VOID *) PchPolicy, &gGpioDxeConfigGuid, (VOID *)&GpioDxeConfig); ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_INFO, "------------------------ PCH Policy (DXE) Print Start ------------------------\n")); DEBUG ((DEBUG_INFO, " Revision : %x\n", PchPolicy->TableHeader.Header.Revision)); PchPrintHdAudioDxeConfig (HdaDxeConfig); PchPrintGpioDxeConfig (GpioDxeConfig); DEBUG ((DEBUG_INFO, "------------------------ PCH Policy (DXE) Print End --------------------------\n")); DEBUG_CODE_END(); } /** CreatePchDxeConfigBlocks generates the config blocksg of PCH DXE Policy. It allocates and zero out buffer, and fills in the Intel default settings. @param[out] PchPolicy The pointer to get PCH DXE Protocol instance @retval EFI_SUCCESS The policy default is initialized. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer **/ EFI_STATUS EFIAPI CreatePchDxeConfigBlocks ( IN OUT PCH_POLICY_PROTOCOL **DxePchPolicy ) { UINT16 TotalBlockSize; EFI_STATUS Status; PCH_POLICY_PROTOCOL *PchPolicyInit; UINT16 RequiredSize; DEBUG ((DEBUG_INFO, "PCH Create Dxe Config Blocks\n")); PchPolicyInit = NULL; TotalBlockSize = GetComponentConfigBlockTotalSize (&mPchDxeIpBlocks[0], sizeof (mPchDxeIpBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); DEBUG ((DEBUG_INFO, "TotalBlockSize = 0x%x\n", TotalBlockSize)); RequiredSize = sizeof (CONFIG_BLOCK_TABLE_HEADER) + TotalBlockSize; Status = CreateConfigBlockTable (RequiredSize, (VOID *) &PchPolicyInit); ASSERT_EFI_ERROR (Status); // // General initialization // PchPolicyInit->TableHeader.Header.Revision = PCH_POLICY_PROTOCOL_REVISION; // // Add config blocks. // Status = AddComponentConfigBlocks ((VOID *) PchPolicyInit, &mPchDxeIpBlocks[0], sizeof (mPchDxeIpBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); ASSERT_EFI_ERROR (Status); // // Assignment for returning SaInitPolicy config block base address // *DxePchPolicy = PchPolicyInit; return Status; } /** PchInstallPolicyProtocol installs PCH Policy. While installed, RC assumes the Policy is ready and finalized. So please update and override any setting before calling this function. @param[in] ImageHandle Image handle of this driver. @param[in] SaPolicy The pointer to SA Policy Protocol instance @retval EFI_SUCCESS The policy is installed. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer **/ EFI_STATUS EFIAPI PchInstallPolicyProtocol ( IN EFI_HANDLE ImageHandle, IN PCH_POLICY_PROTOCOL *PchPolicy ) { EFI_STATUS Status; /// /// Print PCH DXE Policy /// PchPrintPolicyProtocol (PchPolicy); /// /// Install protocol to to allow access to this Policy. /// Status = gBS->InstallMultipleProtocolInterfaces ( &ImageHandle, &gPchPolicyProtocolGuid, PchPolicy, NULL ); ASSERT_EFI_ERROR (Status); return Status; }