// /** @file
// Memory Allocation Library instance dedicated to SMM Core.
//
// The implementation borrows the SMM Core Memory Allocation services as the primitive
// for memory allocation instead of using SMM System Table services in an indirect way.
// It is assumed that this library instance must be linked with SMM Cre in this package.
//
// Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// **/


#string STR_MODULE_ABSTRACT             #language en-US "Memory Allocation Library instance dedicated to SMM Core"

#string STR_MODULE_DESCRIPTION          #language en-US "The implementation borrows the SMM Core Memory Allocation services as the primitive for memory allocation instead of using SMM System Table services in an indirect way. This library is only intended to be linked with the SMM Core that resides in this same package."

