Hi Supreeth,

Could you acknowledge me as a contributor in the relevant patches and repost?

cheers,
Achin

On Thu, Oct 12, 2017 at 06:13:49PM +0100, Supreeth Venkatesh wrote:
> ***
> PI v1.5 Specification Volume 4 defines Management Mode Core Interface
> and defines EFI_MM_COMMUNICATION_PROTOCOL. This protocol provides a
> means of communicating between drivers outside of MM and MMI
> handlers inside of MM.
>
> EFI_MM_COMMUNICATION_PROTOCOL
> Summary
>   This protocol provides a means of communicating between drivers outside of 
> MM and MMI
>   handlers inside of MM.
>
> GUID
>   #define EFI_MM_COMMUNICATION_PROTOCOL_GUID \
>   { 0xc68ed8e2, 0x9dc6, 0x4cbd, 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 
> 0x32 }
>
> Prototype
>   typedef struct _EFI_MM_COMMUNICATION_PROTOCOL {
>   EFI_MM_COMMUNICATE Communicate;
>   } EFI_MM_COMMUNICATION_PROTOCOL;
>
> Members
> Communicate
>   Sends/receives a message for a registered handler. See the Communicate()
>   function description.
>
> Description
>   This protocol provides runtime services for communicating between DXE 
> drivers and a registered
>   MMI handler.
>
> EFI_MM_COMMUNICATION_PROTOCOL.Communicate()
> Summary
>   Communicates with a registered handler.
>
> Prototype
>   typedef
>   EFI_STATUS
>   (EFIAPI *EFI_MM_COMMUNICATE) (
>   IN CONST EFI_MM_COMMUNICATION_PROTOCOL *This,
>   IN OUT VOID *CommBuffer,
>   IN OUT UINTN *CommSize OPTIONAL
>   );
>
> Parameters
>   This - The EFI_MM_COMMUNICATION_PROTOCOL instance.
>   CommBuffer - Pointer to the buffer to convey into MMRAM.
>   CommSize - The size of the data buffer being passed in. On exit, the size 
> of data being returned.
>                      Zero if the handler does not wish to reply with any 
> data. This parameter is optional
>                      and may be NULL.
>
> Description
>   This function provides a service to send and receive messages from a 
> registered UEFI service. The EFI_MM_COMMUNICATION_PROTOCOL driver is 
> responsible for doing any of the
>   copies such that the data lives in boot-service-accessible RAM.
>   A given implementation of the EFI_MM_COMMUNICATION_PROTOCOL may choose to 
> use the EFI_MM_CONTROL_PROTOCOL for effecting the mode transition, or it may 
> use some other method.
>   The agent invoking the communication interface at runtime may be virtually 
> mapped. The MM infrastructure code and handlers, on the other hand, execute 
> in physical mode. As a result, the non-MM agent,
>   which may be executing in the virtual-mode OS context (as a result of an OS 
> invocation of the UEFI SetVirtualAddressMap() service), should use a 
> contiguous memory buffer with a physical address before
>   invoking this service. If the virtual address of the buffer is used, the MM 
> Driver may not know how to do the appropriate virtual-to-physical conversion.
>   To avoid confusion in interpreting frames, the CommunicateBuffer parameter 
> should always begin with EFI_MM_COMMUNICATE_HEADER, which is defined in 
> Related Definitions below.
>   The header data is mandatory for messages sent into the MM agent.
>   If the CommSize parameter is omitted the MessageLength field in the 
> EFI_MM_COMMUNICATE_HEADER,
>   in conjunction with the size of the header itself, can be used to ascertain 
> the total size of the communication payload.
>   If the MessageLength is zero, or too large for the MM implementation to 
> manage, the MM implementation must update the MessageLength to reflect the 
> size of the Data buffer that it can tolerate.
>   If the CommSize parameter is passed into the call, but the integer it 
> points to, has a value of 0, then this must be updated to reflect the maximum 
> size of the CommBuffer that the implementation can tolerate.
>   Once inside of MM, the MM infrastructure will call all registered handlers 
> with the same HandlerType as the GUID specified by HeaderGuid and the 
> CommBuffer pointing to Data.
>   This function is not reentrant.
>   The standard header is used at the beginning of the 
> EFI_MM_INITIALIATION_HEADER structure during MM initialization. See "Related 
> Definitions" below for more information.
>
> Related Definitions
>   typedef struct {
>   EFI_GUID HeaderGuid;
>   UINTN MessageLength;
>   UINT8 Data[ANYSIZE_ARRAY];
>   } EFI_MM_COMMUNICATE_HEADER;
>
>   HeaderGuid - Allows for disambiguation of the message format. Type EFI_GUID 
> is defined in
>                        InstallProtocolInterface() in the UEFI Specification.
>   MessageLength - Describes the size of Data (in bytes) and does not include 
> the size of the header.
>   Data - Designates an array of bytes that is MessageLength in size.
>
> Status Codes Returned
>   EFI_SUCCESS - The message was successfully posted.
>   EFI_INVALID_PARAMETER - The buffer was NULL.
>   EFI_BAD_BUFFER_SIZE - The buffer is too large for the MM implementation. If 
> this error is
>                                            returned, the MessageLength field 
> in the CommBuffer
>                                            header or the integer pointed by 
> CommSize, are updated to reflect
>                                            the maximum payload size the 
> implementation can accommodate.
>                                            See the function description above 
> for more details.
>   EFI_ACCESS_DENIED - The CommunicateBuffer parameter or CommSize
>                                         parameter, if not omitted, are in 
> address range that cannot be
>                                         accessed by the MM environment.
>
> This patchset implements it on AARCH64 Platform.
> ***
>
> Supreeth Venkatesh (3):
>   ArmPkg/Drivers: Add EFI_MM_COMMUNICATION_PROTOCOL DXE driver.
>   ArmPkg/Drivers: Add ArmMmCommunication Driver information file.
>   ArmPkg: Add PCDs needed for MM communication driver.
>
>  ArmPkg/ArmPkg.dec                                  |   3 +
>  .../Drivers/MmCommunicationDxe/MmCommunication.c   | 314 
> +++++++++++++++++++++
>  .../Drivers/MmCommunicationDxe/MmCommunication.inf |  50 ++++
>  3 files changed, 367 insertions(+)
>  create mode 100644 ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
>  create mode 100644 ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.inf
>
> --
> 2.14.1
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to