From: "Ni, Ray" <ray.ni@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"kuqin12@gmail.com" <kuqin12@gmail.com>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"Liming Gao" <gaoliming@byosoft.com.cn>,
"Liu, Zhiguang" <zhiguang.liu@intel.com>,
"Wu, Hao A" <hao.a.wu@intel.com>,
"Marvin Häuser" <mhaeuser@posteo.de>,
"Bret Barkelew" <Bret.Barkelew@microsoft.com>,
"Michael Kubacki" <michael.kubacki@microsoft.com>
Subject: Re: [edk2-devel] [PATCH v3 2/7] MdePkg: MmCommunication: Introduce EFI_MM_COMMUNICATE_HEADER_V3 to MdePkg
Date: Tue, 17 Aug 2021 05:50:38 +0000 [thread overview]
Message-ID: <CO1PR11MB4930E57D5ABF001589C265A88CFE9@CO1PR11MB4930.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210817050807.766-3-kuqin12@gmail.com>
Can you kindly explain why you choose to define the definitions in PiMultiPhase.h instead of MmCommunication.h?
Thanks,
Ray
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Kun Qin
> Sent: Tuesday, August 17, 2021 1:08 PM
> To: devel@edk2.groups.io
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Liu, Zhiguang
> <zhiguang.liu@intel.com>; Wu, Hao A <hao.a.wu@intel.com>; Marvin Häuser <mhaeuser@posteo.de>; Bret Barkelew
> <Bret.Barkelew@microsoft.com>; Michael Kubacki <michael.kubacki@microsoft.com>
> Subject: [edk2-devel] [PATCH v3 2/7] MdePkg: MmCommunication: Introduce EFI_MM_COMMUNICATE_HEADER_V3 to
> MdePkg
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3398
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3430
>
> This change introduces a new definition for MM communicate header
> structure, intending to provide better portability between different
> architectures (IA32 & X64) and adapt to flexible array supported by
> modern compilers.
>
> The original MessageLength field of EFI_MM_COMMUNICATE_HEADER, as a
> generic definition, was used for both PEI and DXE MM communication. On a
> system that supports PEI MM launch, but operates PEI in 32bit mode and MM
> foundation in 64bit, the current EFI_MM_COMMUNICATE_HEADER definition
> will cause structure parse error due to UINTN used. This introduction
> removes the architecture dependent field by defining this field as
> UINT64.
>
> The new signature could help identifying whether the data received is
> compiliant with this new data structure, which will help for binary
> release modules to identify usage of legacy data structure.
>
> Version field is also added to indicate the current version of header in
> case there is need for minor modification in the future.
>
> The data field of MM communicate message is replaced with flexible array
> to allow users not having to consume extra data during communicate and
> author code more intrinsically.
>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Cc: Marvin Häuser <mhaeuser@posteo.de>
> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
> Cc: Michael Kubacki <michael.kubacki@microsoft.com>
>
> Signed-off-by: Kun Qin <kuqin12@gmail.com>
> ---
>
> Notes:
> v3:
> - Newly introduced communicate v3
> - Used flexible arrays [Marvin]
> - Added static assert [Michael]
>
> MdePkg/Include/Pi/PiMultiPhase.h | 55 ++++++++++++++++++++
> MdePkg/MdePkg.dec | 5 ++
> 2 files changed, 60 insertions(+)
>
> diff --git a/MdePkg/Include/Pi/PiMultiPhase.h b/MdePkg/Include/Pi/PiMultiPhase.h
> index 89280d9d3506..8c60338091b3 100644
> --- a/MdePkg/Include/Pi/PiMultiPhase.h
> +++ b/MdePkg/Include/Pi/PiMultiPhase.h
> @@ -103,6 +103,17 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> #define EFI_SMRAM_CLOSED EFI_MMRAM_CLOSED
> #define EFI_SMRAM_LOCKED EFI_MMRAM_LOCKED
>
> +///
> +/// MM Communicate header constants
> +///
> +#define COMMUNICATE_HEADER_V3_GUID \
> + { \
> + 0x68e8c853, 0x2ba9, 0x4dd7, { 0x9a, 0xc0, 0x91, 0xe1, 0x61, 0x55, 0xc9, 0x35 } \
> + }
> +
> +#define EFI_MM_COMMUNICATE_HEADER_V3_SIGNATURE 0x4D434833 // "MCH3"
> +#define EFI_MM_COMMUNICATE_HEADER_V3_VERSION 3
> +
> ///
> /// Structure describing a MMRAM region and its accessibility attributes.
> ///
> @@ -149,6 +160,48 @@ typedef struct _EFI_MM_RESERVED_MMRAM_REGION {
> UINT64 MmramReservedSize;
> } EFI_MM_RESERVED_MMRAM_REGION;
>
> +#pragma pack(1)
> +
> +///
> +/// To avoid confusion in interpreting frames, the buffer communicating to MM core through
> +/// EFI_MM_COMMUNICATE3 or later should always start with EFI_MM_COMMUNICATE_HEADER_V3.
> +///
> +typedef struct {
> + ///
> + /// Indicator GUID for MM core that the communication buffer is compliant with this v3 header.
> + /// Must be gCommunicateHeaderV3Guid.
> + ///
> + EFI_GUID HeaderGuid;
> + ///
> + /// Signature to indicate data is compliant with new MM communicate header structure.
> + /// Must be "MCH3".
> + ///
> + UINT32 Signature;
> + ///
> + /// MM communicate data format version, MM foundation entry point should check if incoming
> + /// data is a supported format before proceeding.
> + /// Must be 3.
> + ///
> + UINT32 Version;
> + ///
> + /// Allows for disambiguation of the message format.
> + ///
> + EFI_GUID MessageGuid;
> + ///
> + /// Describes the size of MessageData (in bytes) and does not include the size of the header.
> + ///
> + UINT64 MessageSize;
> + ///
> + /// Designates an array of bytes that is MessageSize in size.
> + ///
> + UINT8 MessageData[];
> +} EFI_MM_COMMUNICATE_HEADER_V3;
> +
> +#pragma pack()
> +
> +STATIC_ASSERT ((sizeof (EFI_MM_COMMUNICATE_HEADER_V3) == OFFSET_OF (EFI_MM_COMMUNICATE_HEADER_V3,
> MessageData)), \
> + "sizeof (EFI_MM_COMMUNICATE_HEADER_V3) does not align with the beginning of flexible array MessageData");
> +
> typedef enum {
> EFI_PCD_TYPE_8,
> EFI_PCD_TYPE_16,
> @@ -208,4 +261,6 @@ EFI_STATUS
> IN VOID *ProcedureArgument
> );
>
> +extern EFI_GUID gCommunicateHeaderV3Guid;
> +
> #endif
> diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
> index a28a2daaffa8..411079a4343e 100644
> --- a/MdePkg/MdePkg.dec
> +++ b/MdePkg/MdePkg.dec
> @@ -823,6 +823,11 @@ [Guids]
> #
> gLinuxEfiInitrdMediaGuid = {0x5568e427, 0x68fc, 0x4f3d, {0xac, 0x74, 0xca, 0x55, 0x52, 0x31, 0xcc, 0x68}}
>
> + #
> + # GUID indicates the MM communication data is compliant with v3 communication header.
> + #
> + gCommunicateHeaderV3Guid = { 0x68e8c853, 0x2ba9, 0x4dd7, { 0x9a, 0xc0, 0x91, 0xe1, 0x61, 0x55, 0xc9, 0x35 } }
> +
> [Guids.IA32, Guids.X64]
> ## Include/Guid/Cper.h
> gEfiIa32X64ErrorTypeCacheCheckGuid = { 0xA55701F5, 0xE3EF, 0x43de, { 0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C }}
> --
> 2.32.0.windows.1
>
>
>
>
>
next prev parent reply other threads:[~2021-08-17 5:50 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-17 5:08 [PATCH v3 0/7] New MM Communicate header and interfaces Kun Qin
2021-08-17 5:08 ` [PATCH v3 1/7] EDK2 Code First: PI Specification: New communicate " Kun Qin
2021-08-17 5:08 ` [PATCH v3 2/7] MdePkg: MmCommunication: Introduce EFI_MM_COMMUNICATE_HEADER_V3 to MdePkg Kun Qin
2021-08-17 5:50 ` Ni, Ray [this message]
2021-08-17 6:00 ` [edk2-devel] " Kun Qin
2021-08-17 5:08 ` [PATCH v3 3/7] MdePkg: MmCommunication: Introduce EFI_MM_COMMUNICATION3_PROTOCOL " Kun Qin
2021-08-17 5:08 ` [PATCH v3 4/7] MdePkg: MmCommunication: Introduce EFI_PEI_MM_COMMUNICATION3_PPI " Kun Qin
2021-08-17 5:08 ` [PATCH v3 5/7] MdeModulePkg: PiSmmCore: Added parser of new MM communicate header Kun Qin
2021-08-17 5:08 ` [PATCH v3 6/7] StandaloneMmPkg: StandaloneMmCore: Parsing " Kun Qin
2021-08-17 5:08 ` [PATCH v3 7/7] MdeModulePkg: PiSmmIpl: Update MessageLength calculation for MmCommunicate Kun Qin
2021-09-16 2:15 ` [edk2-devel] [PATCH v3 0/7] New MM Communicate header and interfaces Kun Qin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CO1PR11MB4930E57D5ABF001589C265A88CFE9@CO1PR11MB4930.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox