/** @file
  MM Unblock Memory Library Interface.

  This library provides an interface to request non-MMRAM pages to be mapped/unblocked
  from inside MM environment.

  For MM modules that need to access regions outside of MMRAMs, the agents that set up
  these regions are responsible for invoking this API in order for these memory areas
  to be accessed from inside MM.

  Copyright (c) Microsoft Corporation.
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef MM_UNBLOCK_MEMORY_LIB_H_
#define MM_UNBLOCK_MEMORY_LIB_H_

/**
  This API provides a way to unblock certain data pages to be accessible inside MM environment.

  @param  UnblockAddress              The address of buffer caller requests to unblock, the address
                                      has to be page aligned.
  @param  NumberOfPages               The number of pages requested to be unblocked from MM
                                      environment.

  @retval RETURN_SUCCESS              The request goes through successfully.
  @retval RETURN_NOT_AVAILABLE_YET    The requested functionality is not produced yet.
  @retval RETURN_UNSUPPORTED          The requested functionality is not supported on current platform.
  @retval RETURN_SECURITY_VIOLATION   The requested address failed to pass security check for
                                      unblocking.
  @retval RETURN_INVALID_PARAMETER    Input address either NULL pointer or not page aligned.
  @retval RETURN_ACCESS_DENIED        The request is rejected due to system has passed certain boot
                                      phase.

**/
RETURN_STATUS
EFIAPI
MmUnblockMemoryRequest (
  IN PHYSICAL_ADDRESS  UnblockAddress,
  IN UINT64            NumberOfPages
  );

#endif // MM_UNBLOCK_MEMORY_LIB_H_
