STATIC VOID EFIAPI FvbVirtualAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) /*++ Routine Description: Fixup internal data so that EFI can be called in virtual mode. Arguments: (Standard EFI notify event - EFI_EVENT_NOTIFY) Returns: None --*/ { EfiConvertPointer (0x0, (VOID **) &mFvInstance->FvBase); EfiConvertPointer (0x0, (VOID **) &mFvInstance->VolumeHeader); EfiConvertPointer (0x0, (VOID **) &mFvInstance); }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It converts a pointer to a new virtual address. @param[in] Event The event whose notification function is being invoked. @param[in] Context The pointer to the notification function's context. **/ VOID EFIAPI RuntimeCryptLibAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { // // Converts a pointer for runtime memory management to a new virtual address. // EfiConvertPointer (0x0, (VOID **) &mRTPageTable->DataAreaBase); EfiConvertPointer (0x0, (VOID **) &mRTPageTable); }
VOID EFIAPI FvbVirtualddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) /*++ Routine Description: Fixup internal data so that EFI and SAL can be call in virtual mode. Call the passed in Child Notify event and convert the mFvbModuleGlobal date items to there virtual address. mFvbModuleGlobal->FvInstance[FVB_PHYSICAL] - Physical copy of instance data mFvbModuleGlobal->FvInstance[FVB_VIRTUAL] - Virtual pointer to common instance data. Arguments: (Standard EFI notify event - EFI_EVENT_NOTIFY) Returns: None --*/ { EFI_FW_VOL_INSTANCE *FwhInstance; UINTN Index; EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal->FvInstance[FVB_VIRTUAL]); // // Convert the base address of all the instances // Index = 0; FwhInstance = mFvbModuleGlobal->FvInstance[FVB_PHYSICAL]; while (Index < mFvbModuleGlobal->NumFv) { EfiConvertPointer (0x0, (VOID **) &FwhInstance->FvBase[FVB_VIRTUAL]); FwhInstance = (EFI_FW_VOL_INSTANCE *) ( (UINTN) ((UINT8 *) FwhInstance) + FwhInstance->VolumeHeader.HeaderLength + (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) ); Index++; } EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal->FvbScratchSpace[FVB_VIRTUAL]); EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal); }
/** Fixup internal data so that EFI can be call in virtual mode. Call the passed in Child Notify event and convert any pointers in lib to virtual mode. @param[in] Event The Event that is being processed @param[in] Context Event Context **/ STATIC VOID EFIAPI RuntimeLibVirtualNotifyEvent ( IN EFI_EVENT Event, IN VOID *Context ) { UINTN Index; EFI_EVENT_NOTIFY ChildNotifyEventHandler; for (Index = 0; _gDriverSetVirtualAddressMapEvent[Index] != NULL; Index++) { ChildNotifyEventHandler = _gDriverSetVirtualAddressMapEvent[Index]; ChildNotifyEventHandler (Event, NULL); } // // Update global for Runtime Services Table and IO // EfiConvertPointer (0, (VOID **) &mRTEdkDxeRuntimeDriverLib); mEfiGoneVirtual = TRUE; }
VOID QemuFlashConvertPointers ( VOID ) { EfiConvertPointer (0x0, (VOID **) &mFlashBase); }
EFI_STATUS EfiConvertList ( IN UINTN DebugDisposition, IN OUT EFI_LIST_ENTRY *ListHead ) /*++ Routine Description: Conver the standard Lib double linked list to a virtual mapping. Arguments: DebugDisposition - Argument to EfiConvertPointer (EFI 1.0 API) ListHead - Head of linked list to convert Returns: EFI_SUCCESS --*/ { EFI_LIST_ENTRY *Link; EFI_LIST_ENTRY *NextLink; // // Convert all the ForwardLink & BackLink pointers in the list // Link = ListHead; do { NextLink = Link->ForwardLink; EfiConvertPointer ( Link->ForwardLink == ListHead ? DebugDisposition : 0, (VOID **) &Link->ForwardLink ); EfiConvertPointer ( Link->BackLink == ListHead ? DebugDisposition : 0, (VOID **) &Link->BackLink ); Link = NextLink; } while (Link != ListHead); return EFI_SUCCESS; }
/** Fixup internal data so that EFI can be call in virtual mode. Call the passed in Child Notify event and convert any pointers in lib to virtual mode. @param[in] Event The Event that is being processed @param[in] Context Event Context **/ VOID EFIAPI LibRtcVirtualNotifyEvent ( IN EFI_EVENT Event, IN VOID *Context ) { // // Only needed if you are going to support the OS calling RTC functions in virtual mode. // You will need to call EfiConvertPointer (). To convert any stored physical addresses // to virtual address. After the OS transitions to calling in virtual mode, all future // runtime calls will be made in virtual mode. // EfiConvertPointer (0x0, (VOID**)&mPL031RtcBase); EfiConvertPointer (0x0, (VOID**)&mRT); return; }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It converts pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context. **/ VOID EFIAPI FvbVirtualAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { EfiConvertPointer (0x0, &mEmuVarsFvb.BufferPtr); }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It convers pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context. **/ VOID EFIAPI SmmIplSetVirtualAddressNotify ( IN EFI_EVENT Event, IN VOID *Context ) { EfiConvertPointer (0x0, (VOID **)&mSmmControl2); }
/** Fixup internal data so that EFI can be call in virtual mode. Call the passed in Child Notify event and convert any pointers in lib to virtual mode. @param[in] Event The Event that is being processed @param[in] Context Event Context **/ VOID EFIAPI FvbVirtualNotifyEvent ( IN EFI_EVENT Event, IN VOID *Context ) { EfiConvertPointer (0x0, (VOID**)&mFlashNvStorageVariableBase); return; }
VOID EFIAPI FvbVirtualddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { EFI_FW_VOL_INSTANCE *FwhInstance; UINTN Index; // // Convert the base address of all the instances. // for (Index = 0; Index < mFvbModuleGlobal.NumFv; Index++) { FwhInstance = GetFvbInstance (Index); EfiConvertPointer (0, (VOID **) &FwhInstance->FvBase); } EfiConvertPointer (0, (VOID **) &mFvbModuleGlobal.FvInstance); }
VOID EFIAPI ResetVirtualAddressChangeCallBack ( IN EFI_EVENT Event, IN VOID *Context ) { EfiConvertPointer (0, (VOID **) &mResetRegBaseAddr); return; }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE, which converts pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context **/ VOID EFIAPI IpfCryptLibAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { // // Convert Address of Runtime Crypto Protocol. // EfiConvertPointer (0x0, (VOID **) &mCryptProtocol); }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context **/ VOID EFIAPI ReportStatusCodeLibVirtualAddressChange ( IN EFI_EVENT Event, IN VOID *Context ) { if (mReportStatusCodeLibStatusCodeProtocol == NULL) { return; } EfiConvertPointer (0, (VOID **) &mReportStatusCodeLibStatusCodeProtocol); }
VOID EFIAPI SpiDeviceVirtualAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { // // Update protocol pointer to the SPI Controller interface. // EfiConvertPointer (0x00, (VOID**) &(mSpiProtocol)); // // Update the NV Storage location for runtime access. // EfiConvertPointer (0x00, (VOID**) &(mNvStorageBase)); // // Take care of pointers in protocol. // EfiConvertPointer (0x00, (VOID**) &(mSpiDevProtocol.SpiRead)); EfiConvertPointer (0x00, (VOID**) &(mSpiDevProtocol.SpiWrite)); EfiConvertPointer (0x00, (VOID**) &(mSpiDevProtocol.SpiErase)); EfiConvertPointer (0x00, (VOID**) &(mSpiDevProtocol.SpiLock)); }
/** Virtual address change notification call back. It converts global pointer to virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context, which is always zero in current implementation. **/ VOID EFIAPI VirtualAddressChangeCallBack ( IN EFI_EVENT Event, IN VOID *Context ) { // // Convert memory status code table to virtual address; // EfiConvertPointer ( 0, (VOID **) &mRtMemoryStatusCodeTable ); }
/** Convert the physical PCI Express MMIO address to a virtual address. @param[in] Event The event that is being processed. @param[in] Context The Event Context. **/ VOID EFIAPI DxeRuntimeQncAccessLibVirtualNotify ( IN EFI_EVENT Event, IN VOID *Context ) { EFI_STATUS Status; // // Convert the physical PCI Express MMIO address to a virtual address. // Status = EfiConvertPointer (0, (VOID **) &mDxeRuntimeQncAccessLibPciExpressBaseAddress); ASSERT_EFI_ERROR (Status); }
STATIC VOID EFIAPI RuntimeLibVirtualNotifyEvent ( IN EFI_EVENT Event, IN VOID *Context ) /*++ Routine Description: Fixup internal data so that EFI can be call in virtual mode. Call the passed in Child Notify event and convert any pointers in lib to virtual mode. Arguments: Event - The Event that is being processed Context - Event Context Returns: None --*/ { UINTN Index; EFI_EVENT_NOTIFY ChildNotifyEventHandler; for (Index = 0; _gDriverSetVirtualAddressMapEvent[Index] != NULL; Index++) { ChildNotifyEventHandler = _gDriverSetVirtualAddressMapEvent[Index]; ChildNotifyEventHandler (Event, NULL); } // // Update global for Runtime Services Table // EfiConvertPointer (0, (VOID **) &mRT); }
VOID EFIAPI I2cLibVirtualNotifyEvent ( IN EFI_EVENT Event, IN VOID *Context ) { UINT32 Socket; UINT8 Port; // We assume that all I2C ports used in one runtime driver need to be // converted into virtual address. for (Socket = 0; Socket < MAX_SOCKET; Socket++) { for (Port = 0; Port < I2C_PORT_MAX; Port++) { if (gI2cBase[Socket][Port] != 0) { EfiConvertPointer (0x0, (VOID **)&gI2cBase[Socket][Port]); } } } return; }
EFI_STATUS EfiConvertInternalPointer ( IN OUT VOID *Address ) /*++ Routine Description: Call EfiConvertPointer() to convert internal pointer. Arguments: Address - A pointer to a pointer that is to be fixed to be the value needed for the new virtual address mappings being applied. Returns: Status code --*/ { return EfiConvertPointer (EFI_INTERNAL_POINTER, Address); }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It convers pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context. **/ VOID EFIAPI VariableClassAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetPhysicalAddress); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->SetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Read); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Write); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->EraseBlocks); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->LangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLang); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.VolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal); EfiConvertPointer (0x0, (VOID **) &mHashCtx); EfiConvertPointer (0x0, (VOID **) &mStorageArea); EfiConvertPointer (0x0, (VOID **) &mSerializationRuntimeBuffer); EfiConvertPointer (0x0, (VOID **) &mNvVariableCache); }
/** Fixup internal data so that EFI can be call in virtual mode. Call the passed in Child Notify event and convert any pointers in lib to virtual mode. @param[in] Event The Event that is being processed @param[in] Context Event Context **/ VOID EFIAPI NorFlashVirtualNotifyEvent ( IN EFI_EVENT Event, IN VOID *Context ) { UINTN Index; for (Index = 0; Index < mNorFlashDeviceCount; Index++) { EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->DeviceBaseAddress); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->RegionBaseAddress); // Convert BlockIo protocol EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->BlockIoProtocol.FlushBlocks); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->BlockIoProtocol.ReadBlocks); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->BlockIoProtocol.Reset); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->BlockIoProtocol.WriteBlocks); // Convert Fvb EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.EraseBlocks); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.GetAttributes); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.GetBlockSize); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.GetPhysicalAddress); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.Read); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.SetAttributes); EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->FvbProtocol.Write); if (mNorFlashInstances[Index]->ShadowBuffer != NULL) { EfiConvertPointer (0x0, (VOID**)&mNorFlashInstances[Index]->ShadowBuffer); } } return; }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It convers pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context. **/ VOID EFIAPI VariableClassAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { UINTN Index; EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetPhysicalAddress); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->SetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Read); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Write); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->EraseBlocks); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->LangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLang); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.VolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.HobVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal); EfiConvertPointer (0x0, (VOID **) &mNvVariableCache); EfiConvertPointer (0x0, (VOID **) &mNvFvHeaderCache); if (mAuthContextOut.AddressPointer != NULL) { for (Index = 0; Index < mAuthContextOut.AddressPointerCount; Index++) { EfiConvertPointer (0x0, (VOID **) mAuthContextOut.AddressPointer[Index]); } } if (mVarCheckAddressPointer != NULL) { for (Index = 0; Index < mVarCheckAddressPointerCount; Index++) { EfiConvertPointer (0x0, (VOID **) mVarCheckAddressPointer[Index]); } } }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It convers pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context. **/ VOID EFIAPI VariableClassAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { EFI_STATUS Status; UINTN Index; EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetPhysicalAddress); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->SetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Read); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Write); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->EraseBlocks); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->LangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLang); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.VolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.HobVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal); EfiConvertPointer (0x0, (VOID **) &mNvVariableCache); EfiConvertPointer (0x0, (VOID **) &mHandlerTable); for (Index = 0; Index < mNumberOfHandler; Index++) { EfiConvertPointer (0x0, (VOID **) &mHandlerTable[Index]); } Status = EfiConvertList (0x0, &mLockedVariableList); ASSERT_EFI_ERROR (Status); Status = EfiConvertList (0x0, &mVarCheckVariableList); ASSERT_EFI_ERROR (Status); if (mContextOut.AddressPointer != NULL) { for (Index = 0; Index < mContextOut.AddressPointerCount; Index++) { EfiConvertPointer (0x0, (VOID **) mContextOut.AddressPointer[Index]); } } }
/** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. It convers pointer to new virtual address. @param Event Event whose notification function is being invoked. @param Context Pointer to the notification function's context. **/ VOID EFIAPI VariableClassAddressChangeEvent ( IN EFI_EVENT Event, IN VOID *Context ) { LIST_ENTRY *Link; VARIABLE_ENTRY *Entry; EFI_STATUS Status; EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetPhysicalAddress); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->SetAttributes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Read); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->Write); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->EraseBlocks); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->LangCodes); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLang); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.VolatileVariableBase); EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal); EfiConvertPointer (0x0, (VOID **) &mHashCtx); EfiConvertPointer (0x0, (VOID **) &mSerializationRuntimeBuffer); EfiConvertPointer (0x0, (VOID **) &mNvVariableCache); EfiConvertPointer (0x0, (VOID **) &mPubKeyStore); EfiConvertPointer (0x0, (VOID **) &mCertDbStore); // // in the list of locked variables, convert the name pointers first // for ( Link = GetFirstNode (&mLockedVariableList) ; !IsNull (&mLockedVariableList, Link) ; Link = GetNextNode (&mLockedVariableList, Link) ) { Entry = BASE_CR (Link, VARIABLE_ENTRY, Link); Status = EfiConvertPointer (0x0, (VOID **) &Entry->Name); ASSERT_EFI_ERROR (Status); } // // second, convert the list itself using UefiRuntimeLib // Status = EfiConvertList (0x0, &mLockedVariableList); ASSERT_EFI_ERROR (Status); }