/** @file MM Services Table Library. Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
Copyright (c) 2018, Linaro, Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include EFI_MM_SYSTEM_TABLE *gMmst = NULL; /** The constructor function caches the pointer of the MM Services Table. @param ImageHandle The firmware allocated handle for the EFI image. @param SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. **/ EFI_STATUS EFIAPI MmServicesTableLibConstructor ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_MM_BASE_PROTOCOL *InternalMmBase; InternalMmBase = NULL; // // Retrieve MM Base Protocol, Do not use gBS from UefiBootServicesTableLib on purpose // to prevent inclusion of gBS, gST, and gImageHandle from SMM Drivers unless the // MM driver explicity declares that dependency. // Status = SystemTable->BootServices->LocateProtocol ( &gEfiMmBaseProtocolGuid, NULL, (VOID **)&InternalMmBase ); ASSERT_EFI_ERROR(Status); ASSERT (InternalMmBase != NULL); // // We are in MM, retrieve the pointer to MM System Table // InternalMmBase->GetMmstLocation (InternalMmBase, &gMmst); ASSERT (gMmst != NULL); return EFI_SUCCESS; }