847 lines
34 KiB
C
847 lines
34 KiB
C
/** @file
|
|
The driver is to create and publish the Connectivity UEFI variables.
|
|
|
|
@copyright
|
|
INTEL CONFIDENTIAL
|
|
Copyright 2018 - 2021 Intel Corporation.
|
|
|
|
The source code contained or described herein and all documents related to the
|
|
source code ("Material") are owned by Intel Corporation or its suppliers or
|
|
licensors. Title to the Material remains with Intel Corporation or its suppliers
|
|
and licensors. The Material may contain trade secrets and proprietary and
|
|
confidential information of Intel Corporation and its suppliers and licensors,
|
|
and is protected by worldwide copyright and trade secret laws and treaty
|
|
provisions. No part of the Material may be used, copied, reproduced, modified,
|
|
published, uploaded, posted, transmitted, distributed, or disclosed in any way
|
|
without Intel's prior express written permission.
|
|
|
|
No license under any patent, copyright, trade secret or other intellectual
|
|
property right is granted to or conferred upon you by disclosure or delivery
|
|
of the Materials, either expressly, by implication, inducement, estoppel or
|
|
otherwise. Any license under such intellectual property rights must be
|
|
express and approved by Intel in writing.
|
|
|
|
Unless otherwise agreed by Intel in writing, you may not remove or alter
|
|
this notice or any other notice embedded in Materials by Intel or
|
|
Intel's suppliers or licensors in any way.
|
|
|
|
This file contains a 'Sample Driver' and is licensed as such under the terms
|
|
of your license agreement with Intel or your vendor. This file may be modified
|
|
by the user, subject to the additional terms of the license agreement.
|
|
|
|
@par Specification Reference:
|
|
**/
|
|
|
|
#include "CnvUefiVariables.h"
|
|
|
|
/**
|
|
Initialize Connectivity Conigurations
|
|
|
|
@param[in, out] CnvConfig Pointer to Connectivity Conigurations
|
|
@param[in] SystemConfiguration Pointer to Setup data
|
|
|
|
**/
|
|
VOID
|
|
CnvConfigInit (
|
|
IN OUT UEFI_CNV_CONFIG *CnvConfig,
|
|
IN SETUP_DATA *SystemConfiguration
|
|
)
|
|
{
|
|
if (SystemConfiguration != NULL) {
|
|
CnvConfig->WifiDomainType1 = SystemConfiguration->WifiDomainType1;
|
|
CnvConfig->WifiPowerLimit1 = SystemConfiguration->WifiPowerLimit1;
|
|
CnvConfig->WifiTimeWindow1 = SystemConfiguration->WifiTimeWindow1;
|
|
|
|
CnvConfig->TRxDelay0 = SystemConfiguration->TRxDelay0;
|
|
CnvConfig->TRxCableLength0 = SystemConfiguration->TRxCableLength0;
|
|
CnvConfig->TRxDelay1 = SystemConfiguration->TRxDelay1;
|
|
CnvConfig->TRxCableLength1 = SystemConfiguration->TRxCableLength1;
|
|
|
|
CnvConfig->WrddDomainType1 = SystemConfiguration->WrddDomainType1;
|
|
CnvConfig->WrddCountryIndentifier1 = SystemConfiguration->WrddCountryIndentifier1;
|
|
|
|
CnvConfig->WrdsWiFiSarEnable = SystemConfiguration->WrdsWiFiSarEnable;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit1 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit1;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit2 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit2;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit3 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit3;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit4 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit4;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit5 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit5;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit6 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit6;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit7 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit7;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit8 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit8;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit9 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit9;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit10 = SystemConfiguration->WrdsWiFiSarTxPowerSet1Limit10;
|
|
|
|
CnvConfig->EwrdWiFiDynamicSarEnable = SystemConfiguration->EwrdWiFiDynamicSarEnable;
|
|
CnvConfig->EwrdWiFiDynamicSarRangeSets = SystemConfiguration->EwrdWiFiDynamicSarRangeSets;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit1 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit1;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit2 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit2;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit3 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit3;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit4 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit4;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit5 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit5;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit6 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit6;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit7 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit7;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit8 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit8;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit9 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit9;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit10 = SystemConfiguration->EwrdWiFiSarTxPowerSet2Limit10;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit1 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit1;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit2 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit2;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit3 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit3;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit4 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit4;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit5 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit5;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit6 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit6;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit7 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit7;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit8 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit8;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit9 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit9;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit10 = SystemConfiguration->EwrdWiFiSarTxPowerSet3Limit10;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit1 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit1;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit2 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit2;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit3 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit3;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit4 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit4;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit5 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit5;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit6 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit6;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit7 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit7;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit8 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit8;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit9 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit9;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit10 = SystemConfiguration->EwrdWiFiSarTxPowerSet4Limit10;
|
|
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax1 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerMax1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA1 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerChainA1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB1 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerChainB1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax2 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerMax2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA2 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerChainA2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB2 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerChainB2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax3 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerMax3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA3 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerChainA3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB3 = SystemConfiguration->WgdsWiFiSarDeltaGroup1PowerChainB3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax1 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerMax1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA1 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerChainA1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB1 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerChainB1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax2 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerMax2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA2 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerChainA2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB2 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerChainB2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax3 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerMax3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA3 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerChainA3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB3 = SystemConfiguration->WgdsWiFiSarDeltaGroup2PowerChainB3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax1 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerMax1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA1 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerChainA1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB1 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerChainB1;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax2 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerMax2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA2 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerChainA2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB2 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerChainB2;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax3 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerMax3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA3 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerChainA3;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB3 = SystemConfiguration->WgdsWiFiSarDeltaGroup3PowerChainB3;
|
|
|
|
|
|
CnvConfig->AntennaDiversity = SystemConfiguration->AntennaDiversity;
|
|
|
|
CnvConfig->Enable = SystemConfiguration->BluetoothSar;
|
|
CnvConfig->BluetoothSarBr = SystemConfiguration->BluetoothSarBr;
|
|
CnvConfig->BluetoothSarEdr2 = SystemConfiguration->BluetoothSarEdr2;
|
|
CnvConfig->BluetoothSarEdr3 = SystemConfiguration->BluetoothSarEdr3;
|
|
CnvConfig->BluetoothSarLe = SystemConfiguration->BluetoothSarLe;
|
|
CnvConfig->BluetoothSarLe2Mhz = SystemConfiguration->BluetoothSarLe2Mhz;
|
|
CnvConfig->BluetoothSarLeLr = SystemConfiguration->BluetoothSarLeLr;
|
|
} else {
|
|
CnvConfig->WifiDomainType1 = 0x07;
|
|
CnvConfig->WifiPowerLimit1 = 2000;
|
|
CnvConfig->WifiTimeWindow1 = 30000;
|
|
|
|
CnvConfig->TRxDelay0 = 50;
|
|
CnvConfig->TRxCableLength0 = 50;
|
|
CnvConfig->TRxDelay1 = 50;
|
|
CnvConfig->TRxCableLength1 = 50;
|
|
|
|
CnvConfig->WrddDomainType1 = 0x7;
|
|
CnvConfig->WrddCountryIndentifier1 = 0x4150;
|
|
|
|
CnvConfig->WrdsWiFiSarEnable = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit1 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit2 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit3 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit4 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit5 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit6 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit7 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit8 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit9 = 0;
|
|
CnvConfig->WrdsWiFiSarTxPowerSet1Limit10 = 0;
|
|
|
|
CnvConfig->EwrdWiFiDynamicSarEnable = 0;
|
|
CnvConfig->EwrdWiFiDynamicSarRangeSets = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit1 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit2 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit3 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit4 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit5 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit6 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit7 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit8 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit9 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet2Limit10 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit1 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit2 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit3 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit4 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit5 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit6 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit7 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit8 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit9 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet3Limit10 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit1 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit2 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit3 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit4 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit5 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit6 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit7 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit8 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit9 = 0;
|
|
CnvConfig->EwrdWiFiSarTxPowerSet4Limit10 = 0;
|
|
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax1 = 0xFF;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA1 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB1 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax2 = 0xFF;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA2 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB2 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax1 = 0xFF;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA1 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB1 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax2 = 0xFF;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA2 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB2 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax1 = 0xFF;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA1 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB1 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax2 = 0xFF;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA2 = 0;
|
|
CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB2 = 0;
|
|
|
|
CnvConfig->AntennaDiversity = 0x2;
|
|
|
|
CnvConfig->Enable = 0;
|
|
CnvConfig->BluetoothSarBr = 0;
|
|
CnvConfig->BluetoothSarEdr2 = 0;
|
|
CnvConfig->BluetoothSarEdr3 = 0;
|
|
CnvConfig->BluetoothSarLe = 0;
|
|
CnvConfig->BluetoothSarLe2Mhz = 0;
|
|
CnvConfig->BluetoothSarLeLr = 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
Update/Create Connectivity UEFI variable
|
|
|
|
@param[in] CnvVarSize Connectivity variable size
|
|
@param[in] VariableName Pointer to variable name
|
|
@param[in] VendorGuid Pointer to variable vendor guid
|
|
@param[in] NewData Pointer to variable data
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
UpdateVariables (
|
|
IN UINTN CnvVarSize,
|
|
IN CHAR16 *VariableName,
|
|
IN EFI_GUID *VendorGuid,
|
|
IN VOID *NewData
|
|
)
|
|
{
|
|
EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
|
|
EFI_STATUS Status;
|
|
UINTN VarSize;
|
|
VOID *OldData;
|
|
BOOLEAN NeedUpdate;
|
|
|
|
OldData = NULL;
|
|
NeedUpdate = FALSE;
|
|
|
|
VarSize = CnvVarSize;
|
|
OldData = AllocateZeroPool (VarSize);
|
|
if (OldData == NULL) {
|
|
ASSERT (OldData);
|
|
return EFI_OUT_OF_RESOURCES;
|
|
}
|
|
|
|
//
|
|
// Get Variable to know whether variable is already created or not
|
|
//
|
|
Status = gRT->GetVariable (
|
|
VariableName,
|
|
VendorGuid,
|
|
NULL,
|
|
&VarSize,
|
|
OldData
|
|
);
|
|
|
|
if (Status == EFI_NOT_FOUND) {
|
|
Status = EFI_SUCCESS;
|
|
NeedUpdate = TRUE;
|
|
}
|
|
|
|
//
|
|
// Update the variable if the variable has not been created yet or has been changed.
|
|
//
|
|
if (!EFI_ERROR (Status)) {
|
|
if (NeedUpdate == FALSE) {
|
|
if (CompareMem (OldData, NewData, VarSize)) {
|
|
if (VarSize == CnvVarSize) {
|
|
NeedUpdate = TRUE;
|
|
} else {
|
|
FreePool(OldData);
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (NeedUpdate) {
|
|
Status = gRT->SetVariable (
|
|
VariableName,
|
|
VendorGuid,
|
|
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
|
|
VarSize,
|
|
NewData
|
|
);
|
|
}
|
|
}
|
|
|
|
if (EFI_ERROR (Status)) {
|
|
FreePool(OldData);
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
//
|
|
// Lock CNV variables
|
|
//
|
|
Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock);
|
|
if (!EFI_ERROR (Status)) {
|
|
Status = VariableLock->RequestToLock (VariableLock, VariableName, VendorGuid);
|
|
}
|
|
|
|
FreePool(OldData);
|
|
ASSERT (!EFI_ERROR (Status));
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install SPLC for WiFi
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallSplc (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_SPLC SplcVarWifi;
|
|
EFI_STATUS Status;
|
|
|
|
SplcVarWifi.Header.Revision = UEFI_CNV_SPLC_REVISION;
|
|
|
|
switch (CnvConfig->WifiDomainType1) {
|
|
case WIFI_DOMAIN_VALUE:
|
|
SplcVarWifi.DefaultPowerLimit = CnvConfig->WifiPowerLimit1;
|
|
SplcVarWifi.DefaultTimeWindow = CnvConfig->WifiTimeWindow1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_SPLC),
|
|
UEFI_CNV_SPLC_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &SplcVarWifi
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install WAND for WiFi
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallWand (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_WAND WandVar;
|
|
EFI_STATUS Status;
|
|
|
|
WandVar.Header.Revision = UEFI_CNV_WAND_REVISION;
|
|
WandVar.AntDiversity[0].TxRxDelay = CnvConfig->TRxDelay0;
|
|
WandVar.AntDiversity[0].TxRxCableLength = CnvConfig->TRxCableLength0;
|
|
WandVar.AntDiversity[1].TxRxDelay = CnvConfig->TRxDelay1;
|
|
WandVar.AntDiversity[1].TxRxCableLength = CnvConfig->TRxCableLength1;
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_WAND),
|
|
UEFI_CNV_WAND_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &WandVar
|
|
);
|
|
ASSERT (!EFI_ERROR (Status));
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install WRDD for WiFi
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallWrdd (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_WRDD WrddVarWifi;
|
|
EFI_STATUS Status;
|
|
|
|
WrddVarWifi.Header.Revision = UEFI_CNV_WRDD_REVISION;
|
|
|
|
switch (CnvConfig->WrddDomainType1) {
|
|
case WIFI_DOMAIN_VALUE:
|
|
WrddVarWifi.RegulatoryDomain = CnvConfig->WrddCountryIndentifier1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_WRDD),
|
|
UEFI_CNV_WRDD_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &WrddVarWifi
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install WRDS for WiFi
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallWrds (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_WRDS_WIFI_SAR WrdsVarWifi;
|
|
EFI_STATUS Status;
|
|
|
|
WrdsVarWifi.Header.Revision = UEFI_CNV_WRDS_REVISION;
|
|
WrdsVarWifi.Enable = CnvConfig->WrdsWiFiSarEnable;
|
|
WrdsVarWifi.SarValues.ChainATxPowerLimits.From2400 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit1;
|
|
WrdsVarWifi.SarValues.ChainATxPowerLimits.From5150To5350 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit2;
|
|
WrdsVarWifi.SarValues.ChainATxPowerLimits.From5350To5470 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit3;
|
|
WrdsVarWifi.SarValues.ChainATxPowerLimits.From5470To5725 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit4;
|
|
WrdsVarWifi.SarValues.ChainATxPowerLimits.From5725To5950 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit5;
|
|
WrdsVarWifi.SarValues.ChainBTxPowerLimits.From2400 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit6;
|
|
WrdsVarWifi.SarValues.ChainBTxPowerLimits.From5150To5350 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit7;
|
|
WrdsVarWifi.SarValues.ChainBTxPowerLimits.From5350To5470 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit8;
|
|
WrdsVarWifi.SarValues.ChainBTxPowerLimits.From5470To5725 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit9;
|
|
WrdsVarWifi.SarValues.ChainBTxPowerLimits.From5725To5950 = CnvConfig->WrdsWiFiSarTxPowerSet1Limit10;
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_WRDS_WIFI_SAR),
|
|
UEFI_CNV_WRDS_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &WrdsVarWifi
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install BRDS for BT
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallBrds (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_BRDS BrdsVar;
|
|
EFI_STATUS Status;
|
|
|
|
BrdsVar.Header.Revision = UEFI_CNV_BRDS_REVISION;
|
|
BrdsVar.Enable = CnvConfig->Enable;
|
|
BrdsVar.BrModulation = CnvConfig->BluetoothSarBr;
|
|
BrdsVar.Edr2Modulation = CnvConfig->BluetoothSarEdr2;
|
|
BrdsVar.Edr3Modulation = CnvConfig->BluetoothSarEdr3;
|
|
BrdsVar.LeModulation = CnvConfig->BluetoothSarLe;
|
|
BrdsVar.Le2MhzModulation = CnvConfig->BluetoothSarLe2Mhz;
|
|
BrdsVar.LeLrModulation = CnvConfig->BluetoothSarLeLr;
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_BRDS),
|
|
UEFI_CNV_BRDS_VAR_NAME,
|
|
&gUefiIntelCnvBtVariablesGuid,
|
|
(VOID *) &BrdsVar
|
|
);
|
|
ASSERT (!EFI_ERROR (Status));
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install EWRD for WiFi
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallEwrd (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_EWRD EwrdVar;
|
|
EFI_STATUS Status;
|
|
|
|
EwrdVar.Header.Revision = UEFI_CNV_EWRD_REVISION;
|
|
EwrdVar.WifiDynamicSarEnable = CnvConfig->EwrdWiFiDynamicSarEnable;
|
|
EwrdVar.WifiDynamicSarRangeSets = CnvConfig->EwrdWiFiDynamicSarRangeSets;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainATxPowerLimits.From2400 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit1;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainATxPowerLimits.From5150To5350 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit2;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainATxPowerLimits.From5350To5470 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit3;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainATxPowerLimits.From5470To5725 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit4;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainATxPowerLimits.From5725To5950 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit5;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainBTxPowerLimits.From2400 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit6;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainBTxPowerLimits.From5150To5350 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit7;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainBTxPowerLimits.From5350To5470 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit8;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainBTxPowerLimits.From5470To5725 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit9;
|
|
EwrdVar.WifiDynamicSarValuesExt[0].ChainBTxPowerLimits.From5725To5950 = CnvConfig->EwrdWiFiSarTxPowerSet2Limit10;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainATxPowerLimits.From2400 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit1;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainATxPowerLimits.From5150To5350 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit2;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainATxPowerLimits.From5350To5470 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit3;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainATxPowerLimits.From5470To5725 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit4;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainATxPowerLimits.From5725To5950 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit5;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainBTxPowerLimits.From2400 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit6;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainBTxPowerLimits.From5150To5350 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit7;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainBTxPowerLimits.From5350To5470 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit8;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainBTxPowerLimits.From5470To5725 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit9;
|
|
EwrdVar.WifiDynamicSarValuesExt[1].ChainBTxPowerLimits.From5725To5950 = CnvConfig->EwrdWiFiSarTxPowerSet3Limit10;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainATxPowerLimits.From2400 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit1;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainATxPowerLimits.From5150To5350 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit2;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainATxPowerLimits.From5350To5470 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit3;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainATxPowerLimits.From5470To5725 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit4;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainATxPowerLimits.From5725To5950 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit5;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainBTxPowerLimits.From2400 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit6;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainBTxPowerLimits.From5150To5350 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit7;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainBTxPowerLimits.From5350To5470 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit8;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainBTxPowerLimits.From5470To5725 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit9;
|
|
EwrdVar.WifiDynamicSarValuesExt[2].ChainBTxPowerLimits.From5725To5950 = CnvConfig->EwrdWiFiSarTxPowerSet4Limit10;
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_EWRD),
|
|
UEFI_CNV_EWRD_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &EwrdVar
|
|
);
|
|
ASSERT (!EFI_ERROR (Status));
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install WGDS for WiFi
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallWgds (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_WGDS WgdsVar;
|
|
EFI_STATUS Status;
|
|
|
|
WgdsVar.Header.Revision = UEFI_CNV_WGDS_REVISION;
|
|
WgdsVar.WifiSarPowerDelta[0].GeoSarOffset2400Mhz.MaxAllowed = CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax1;
|
|
WgdsVar.WifiSarPowerDelta[0].GeoSarOffset2400Mhz.ChainA = CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA1;
|
|
WgdsVar.WifiSarPowerDelta[0].GeoSarOffset2400Mhz.ChainB = CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB1;
|
|
WgdsVar.WifiSarPowerDelta[0].GeoSarOffset5200Mhz.MaxAllowed = CnvConfig->WgdsWiFiSarDeltaGroup1PowerMax2;
|
|
WgdsVar.WifiSarPowerDelta[0].GeoSarOffset5200Mhz.ChainA = CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainA2;
|
|
WgdsVar.WifiSarPowerDelta[0].GeoSarOffset5200Mhz.ChainB = CnvConfig->WgdsWiFiSarDeltaGroup1PowerChainB2;
|
|
WgdsVar.WifiSarPowerDelta[1].GeoSarOffset2400Mhz.MaxAllowed = CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax1;
|
|
WgdsVar.WifiSarPowerDelta[1].GeoSarOffset2400Mhz.ChainA = CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA1;
|
|
WgdsVar.WifiSarPowerDelta[1].GeoSarOffset2400Mhz.ChainB = CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB1;
|
|
WgdsVar.WifiSarPowerDelta[1].GeoSarOffset5200Mhz.MaxAllowed = CnvConfig->WgdsWiFiSarDeltaGroup2PowerMax2;
|
|
WgdsVar.WifiSarPowerDelta[1].GeoSarOffset5200Mhz.ChainA = CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainA2;
|
|
WgdsVar.WifiSarPowerDelta[1].GeoSarOffset5200Mhz.ChainB = CnvConfig->WgdsWiFiSarDeltaGroup2PowerChainB2;
|
|
WgdsVar.WifiSarPowerDelta[2].GeoSarOffset2400Mhz.MaxAllowed = CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax1;
|
|
WgdsVar.WifiSarPowerDelta[2].GeoSarOffset2400Mhz.ChainA = CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA1;
|
|
WgdsVar.WifiSarPowerDelta[2].GeoSarOffset2400Mhz.ChainB = CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB1;
|
|
WgdsVar.WifiSarPowerDelta[2].GeoSarOffset5200Mhz.MaxAllowed = CnvConfig->WgdsWiFiSarDeltaGroup3PowerMax2;
|
|
WgdsVar.WifiSarPowerDelta[2].GeoSarOffset5200Mhz.ChainA = CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainA2;
|
|
WgdsVar.WifiSarPowerDelta[2].GeoSarOffset5200Mhz.ChainB = CnvConfig->WgdsWiFiSarDeltaGroup3PowerChainB2;
|
|
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_WGDS),
|
|
UEFI_CNV_WGDS_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &WgdsVar
|
|
);
|
|
ASSERT (!EFI_ERROR (Status));
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
/**
|
|
Install SADS for WiFi, BT
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallSads (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_SADS SadsVar;
|
|
EFI_STATUS Status;
|
|
|
|
SadsVar.Header.Revision = UEFI_CNV_SADS_REVISION;
|
|
SadsVar.AntDiversitySel = CnvConfig->AntennaDiversity;
|
|
|
|
//
|
|
// Update SADS for WiFi GUID
|
|
//
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_SADS),
|
|
UEFI_CNV_SADS_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &SadsVar
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
//
|
|
// Update SADS for BT GUID
|
|
//
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_SADS),
|
|
UEFI_CNV_SADS_VAR_NAME,
|
|
&gUefiIntelCnvBtVariablesGuid,
|
|
(VOID *) &SadsVar
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Install GPC for WiFi, BT
|
|
|
|
@param[in] CnvConfig Pointer to Connectivity Conigurations
|
|
|
|
@retval EFI_SUCCESS The function completed successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InstallGpc (
|
|
IN UEFI_CNV_CONFIG *CnvConfig
|
|
)
|
|
{
|
|
UEFI_CNV_VAR_GPC GpcVar;
|
|
EFI_STATUS Status;
|
|
|
|
GpcVar.Header.Revision = UEFI_CNV_GPC_REVISION;
|
|
|
|
//
|
|
// End of TLV
|
|
//
|
|
GpcVar.Tlv[UEFI_CNV_GPC_TLV_MAX_WIFI_BT_CORE - 1].Type = 0;
|
|
GpcVar.Tlv[UEFI_CNV_GPC_TLV_MAX_WIFI_BT_CORE - 1].Length = 0;
|
|
GpcVar.Tlv[UEFI_CNV_GPC_TLV_MAX_WIFI_BT_CORE - 1].Value[0] = 0;
|
|
|
|
//
|
|
// Update GPC for WiFi GUID
|
|
//
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_GPC),
|
|
UEFI_CNV_GPC_VAR_NAME,
|
|
&gUefiIntelCnvWlanVariablesGuid,
|
|
(VOID *) &GpcVar
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
//
|
|
// Update GPC for BT GUID
|
|
//
|
|
Status = UpdateVariables (
|
|
sizeof (UEFI_CNV_VAR_GPC),
|
|
UEFI_CNV_GPC_VAR_NAME,
|
|
&gUefiIntelCnvBtVariablesGuid,
|
|
(VOID *) &GpcVar
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
ASSERT (!EFI_ERROR (Status));
|
|
return Status;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Entry point of the CNV UEFI Variables driver.
|
|
|
|
@param[in] ImageHandle Handle for this drivers loaded image protocol.
|
|
@param[in] SystemTable EFI system table.
|
|
|
|
@retval EFI_SUCCESS The driver installed without error.
|
|
@retval EFI_ABORTED The driver encountered an error and could not create/update
|
|
the CNV UEFI Variables completely.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
CnvUefiVariables (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
)
|
|
{
|
|
EFI_HANDLE Handle;
|
|
EFI_STATUS Status;
|
|
UINTN VarDataSize;
|
|
UEFI_CNV_CONFIG CnvConfig;
|
|
SETUP_DATA SystemConfiguration;
|
|
|
|
|
|
DEBUG ((DEBUG_INFO, "CnvUefiVariables entry\n"));
|
|
|
|
Handle = NULL;
|
|
ZeroMem ((VOID *) &CnvConfig, sizeof (UEFI_CNV_CONFIG));
|
|
ZeroMem ((VOID *) &SystemConfiguration, sizeof (SETUP_DATA));
|
|
|
|
VarDataSize = sizeof (SETUP_DATA);
|
|
Status = gRT->GetVariable (
|
|
L"Setup",
|
|
&gSetupVariableGuid,
|
|
NULL,
|
|
&VarDataSize,
|
|
&SystemConfiguration
|
|
);
|
|
if (!EFI_ERROR (Status)) {
|
|
CnvConfigInit (&CnvConfig, &SystemConfiguration);
|
|
} else {
|
|
CnvConfigInit (&CnvConfig, NULL);
|
|
}
|
|
|
|
Status = InstallSplc (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallWand (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallWrdd (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallWrds (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallBrds (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallEwrd (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallWgds (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallSads (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
Status = InstallGpc (&CnvConfig);
|
|
if (EFI_ERROR (Status)) {
|
|
goto Done;
|
|
}
|
|
|
|
//
|
|
// Install the CNV UEFI Variables Protocol on a new handle
|
|
// to signify the CNV UEFI Variables are ready.
|
|
//
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&Handle,
|
|
&gCnvUefiVariablesProtocolGuid,
|
|
NULL,
|
|
NULL
|
|
);
|
|
|
|
Done:
|
|
DEBUG ((DEBUG_ERROR, "CnvUefiVariables status: %r\n", Status));
|
|
ASSERT (!EFI_ERROR (Status));
|
|
|
|
return Status;
|
|
}
|