| /** @file | |
| EFI MM Access PPI definition. | |
| This PPI is used to control the visibility of the MMRAM on the platform. | |
| The EFI_PEI_MM_ACCESS_PPI abstracts the location and characteristics of MMRAM. The | |
| principal functionality found in the memory controller includes the following: | |
| - Exposing the MMRAM to all non-MM agents, or the "open" state | |
| - Shrouding the MMRAM to all but the MM agents, or the "closed" state | |
| - Preserving the system integrity, or "locking" the MMRAM, such that the settings cannot be | |
| perturbed by either boot service or runtime agents | |
| Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| @par Revision Reference: | |
| This PPI is introduced in PI Version 1.5. | |
| **/ | |
| #ifndef _MM_ACCESS_PPI_H_ | |
| #define _MM_ACCESS_PPI_H_ | |
| #define EFI_PEI_MM_ACCESS_PPI_GUID \ | |
| { 0x268f33a9, 0xcccd, 0x48be, { 0x88, 0x17, 0x86, 0x5, 0x3a, 0xc3, 0x2e, 0xd6 }} | |
| typedef struct _EFI_PEI_MM_ACCESS_PPI EFI_PEI_MM_ACCESS_PPI; | |
| /** | |
| Opens the MMRAM area to be accessible by a PEIM. | |
| This function "opens" MMRAM so that it is visible while not inside of MM. The function should | |
| return EFI_UNSUPPORTED if the hardware does not support hiding of MMRAM. The function | |
| should return EFI_DEVICE_ERROR if the MMRAM configuration is locked. | |
| @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. | |
| @param This The EFI_PEI_MM_ACCESS_PPI instance. | |
| @param DescriptorIndex The region of MMRAM to Open. | |
| @retval EFI_SUCCESS The operation was successful. | |
| @retval EFI_UNSUPPORTED The system does not support opening and closing of MMRAM. | |
| @retval EFI_DEVICE_ERROR MMRAM cannot be opened, perhaps because it is locked. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_MM_OPEN)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_MM_ACCESS_PPI *This, | |
| IN UINTN DescriptorIndex | |
| ); | |
| /** | |
| Inhibits access to the MMRAM. | |
| This function "closes" MMRAM so that it is not visible while outside of MM. The function should | |
| return EFI_UNSUPPORTED if the hardware does not support hiding of MMRAM. | |
| @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. | |
| @param This The EFI_PEI_MM_ACCESS_PPI instance. | |
| @param DescriptorIndex The region of MMRAM to Close. | |
| @retval EFI_SUCCESS The operation was successful. | |
| @retval EFI_UNSUPPORTED The system does not support opening and closing of MMRAM. | |
| @retval EFI_DEVICE_ERROR MMRAM cannot be closed. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_MM_CLOSE)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_MM_ACCESS_PPI *This, | |
| IN UINTN DescriptorIndex | |
| ); | |
| /** | |
| This function prohibits access to the MMRAM region. This function is usually implemented such | |
| that it is a write-once operation. | |
| @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. | |
| @param This The EFI_PEI_MM_ACCESS_PPI instance. | |
| @param DescriptorIndex The region of MMRAM to Lock. | |
| @retval EFI_SUCCESS The operation was successful. | |
| @retval EFI_UNSUPPORTED The system does not support opening and closing of MMRAM. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_MM_LOCK)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_MM_ACCESS_PPI *This, | |
| IN UINTN DescriptorIndex | |
| ); | |
| /** | |
| Queries the memory controller for the possible regions that will support MMRAM. | |
| This function describes the MMRAM regions. | |
| This data structure forms the contract between the MM_ACCESS and MM_IPL drivers. There is an | |
| ambiguity when any MMRAM region is remapped. For example, on some chipsets, some MMRAM | |
| regions can be initialized at one physical address but is later accessed at another processor address. | |
| There is currently no way for the MM IPL driver to know that it must use two different addresses | |
| depending on what it is trying to do. As a result, initial configuration and loading can use the | |
| physical address PhysicalStart while MMRAM is open. However, once the region has been | |
| closed and needs to be accessed by agents in MM, the CpuStart address must be used. | |
| This PPI publishes the available memory that the chipset can shroud for the use of installing code. | |
| These regions serve the dual purpose of describing which regions have been open, closed, or locked. | |
| In addition, these regions may include overlapping memory ranges, depending on the chipset | |
| implementation. The latter might include a chipset that supports T-SEG, where memory near the top | |
| of the physical DRAM can be allocated for MMRAM too. | |
| The key thing to note is that the regions that are described by the PPI are a subset of the capabilities | |
| of the hardware. | |
| @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. | |
| @param This The EFI_PEI_MM_ACCESS_PPI instance. | |
| @param MmramMapSize A pointer to the size, in bytes, of the MmramMemoryMap buffer. On input, this value is | |
| the size of the buffer that is allocated by the caller. On output, it is the size of the | |
| buffer that was returned by the firmware if the buffer was large enough, or, if the | |
| buffer was too small, the size of the buffer that is needed to contain the map. | |
| @param MmramMap A pointer to the buffer in which firmware places the current memory map. The map is | |
| an array of EFI_MMRAM_DESCRIPTORs | |
| @retval EFI_SUCCESS The chipset supported the given resource. | |
| @retval EFI_BUFFER_TOO_SMALL The MmramMap parameter was too small. The current | |
| buffer size needed to hold the memory map is returned in | |
| MmramMapSize. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_MM_CAPABILITIES)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_MM_ACCESS_PPI *This, | |
| IN OUT UINTN *MmramMapSize, | |
| IN OUT EFI_MMRAM_DESCRIPTOR *MmramMap | |
| ); | |
| /// | |
| /// EFI MM Access PPI is used to control the visibility of the MMRAM on the platform. | |
| /// It abstracts the location and characteristics of MMRAM. The platform should report | |
| /// all MMRAM via EFI_PEI_MM_ACCESS_PPI. The expectation is that the north bridge or | |
| /// memory controller would publish this PPI. | |
| /// | |
| struct _EFI_PEI_MM_ACCESS_PPI { | |
| EFI_PEI_MM_OPEN Open; | |
| EFI_PEI_MM_CLOSE Close; | |
| EFI_PEI_MM_LOCK Lock; | |
| EFI_PEI_MM_CAPABILITIES GetCapabilities; | |
| BOOLEAN LockState; | |
| BOOLEAN OpenState; | |
| }; | |
| extern EFI_GUID gEfiPeiMmAccessPpiGuid; | |
| #endif |