From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.89]) by mx.groups.io with SMTP id smtpd.web10.10987.1682003896190988413 for ; Thu, 20 Apr 2023 08:18:16 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=IcRhbiPs; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.93.89, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Rq3FsyW81hPSNrrwhBu3aoR1e/7x0BdCtO8/G15nU8whqXgwYRz3L15/PvhOt/n6h6J+XtvD9Kog1ZThplPTwgCAG3hK2sna2sZGT+yrkwzt6MyY8PL7KD0K+dix+XZY20Xn/OpN7m3K8CfrFnlil0zymtg39SLOCYYjaFKsBB20E/ml1ydFRvCIxX+BIsh1OXqLk6p1Q/DtjtaCb7Eoz7v+cPaDdEVITlxjagXgPPyq/OLsF9ppBP02TXNu5Z2moYIaIQ3fcWppFys6xca/x5dww6OV7wPkopHrE1Yy4DBWEQrDJFdgYQO4YTJ7zKx3RPWNLbRXeAK4Vc3rJwrdPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GVda9lghKUe4nf1N/fGcFcVjiOS6jZZDFfmYgddvr14=; b=Pw++cVpu/qP4LGkwEbKoN/3O892ZQY9oywM7TOAVeUi3B8WrTcErH5RfmT2kYdGHXRFzn4o/nbRld8Marr85oehhHJh38jPfPs+wc6J7Aqcji7LzOfJ3yYBgdaWI/Zv6qGYJAzTjmlxZwKW218y5FeqhW+eW3bRYiR+t1yljc/6ZEFsS7lMvnh5EXFC3YKQn/VZBiOST0c93SHcv+nV0NgwygM5qvO7+htBeh672wdK1kistAKVfMxhcF2wUoFZ+zW5qgImSr06lePa5AJS/VdW/A0dT6Y4c+PJiSekyent3fRZNbJPNkCecG+/tuEDfK8hA7lVtVIq8I86hVvUaSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GVda9lghKUe4nf1N/fGcFcVjiOS6jZZDFfmYgddvr14=; b=IcRhbiPsHR21S+y49SB6zAqTioJRn+6KGmtoZpqhuUErqSQS1462+/du5G6Plk2I7imVYbchAyMmMnNoc6bO9bF65pJ7kOwzyl7bA2KYAj1lvT6IAPaZQ5vCap613B8ZCdet+5k8qYEwEi52qHTKXd/u8d7DZekG1CIngngngnk= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by DS7PR12MB6069.namprd12.prod.outlook.com (2603:10b6:8:9f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Thu, 20 Apr 2023 15:18:13 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3%3]) with mapi id 15.20.6319.022; Thu, 20 Apr 2023 15:18:13 +0000 From: "Chang, Abner" To: "Attar, AbdulLateef (Abdul Lateef)" , "devel@edk2.groups.io" CC: Isaac Oram , Nickle Wang , Igor Kulchytskyy Subject: Re: [edk2-platforms][PATCH V2 01/14] ManageabilityPkg: Add more helper functions Thread-Topic: [edk2-platforms][PATCH V2 01/14] ManageabilityPkg: Add more helper functions Thread-Index: AQHZccWlhC8l+w9yq0G+b9xWqfivEa8yFZqwgAI7pIA= Date: Thu, 20 Apr 2023 15:18:13 +0000 Message-ID: References: <20230418071543.1951-1-abner.chang@amd.com> <20230418071543.1951-2-abner.chang@amd.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-04-20T15:18:11Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=0d2af20b-d691-48a6-8e52-a01f7b87de67; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|DS7PR12MB6069:EE_ x-ms-office365-filtering-correlation-id: 9c01b364-1215-4f74-7b8d-08db41b27597 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Hy4MHzIJLTTWGo8HOqBED+uT4x+BLZtE2ssFYkePqEHlcnyJSlti6MyrETtagmAil4h4FlATIClgVw4IFbzrCYXTqZDahty4gL/yIilALtdq++kDekNFPlEg8FXaPZYr4Ynf+p8bujZivc/cSwzfvyuJMIkgTfFtfC+uvDrVz02A7KIXsrRDv5aiw7pvFvucHL0s7uUQXEcp5sx6jQ6/87hY3zR53JqmxihfmpoZ06xprm8RP4Feby5104koc/sDTaYcOEiTur78wPdefR8huKWX5DoEd2w7k3SNTjWV9ilgFoHP8Cm6eyxpn6suddOYnpw6GPpvX76xJvDc2ts3p3eh+lRzTupKzKKrfmTnSotsBkJxTAOdy7BsgZuho3Vn51IJbAFImTWpHHc1zmof13GhxwfwtZuF15mAstRKPwS7UHAlG0WsTaYHiTtJRLDAGW3Y76NohlHbHTytZ+CWGza/SDEYHEoIXvAHkqGXkTE/SANSfGjpaMo3ZmVSnKBFdqMAx6DDTp/1XTDNTGpVVdZ7U9jVyibuteHx3ENoVkCuSiZjl0uW1le38Yf11coPN+JTzOkLge68F/vtoYo0xZ2ykKPonaeP3A5h/K/0s64F/5+o0Nv2VreKD3CKZSSq x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(136003)(39860400002)(396003)(376002)(366004)(451199021)(66476007)(66446008)(66556008)(64756008)(4326008)(76116006)(66946007)(41300700001)(8676002)(8936002)(38070700005)(122000001)(38100700002)(55016003)(316002)(9686003)(26005)(186003)(53546011)(6506007)(7696005)(71200400001)(478600001)(86362001)(83380400001)(110136005)(54906003)(33656002)(5660300002)(30864003)(2906002)(52536014);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?emRtVUYQB/1NTHlZJj/f+SHv+hNd262Ux2GlilLwnbOv6UKhtYnDjLzCSsVj?= =?us-ascii?Q?RGHBXPBXkaY+FOx44wZ1AJmVrpg/of0dPcQPcCAeQ+dOxRTCiHzB/gtSEDCF?= =?us-ascii?Q?PXAngEebVqW2pjALEelOqcpJgzRlnZfwSqgKmcfKFc4S/hED+bouu+aQmlMj?= =?us-ascii?Q?Oc0+B30sYJsIW6tjylyZVsse9peuaURX5QIaGcHOovqXzgm2H4dk9L5Luk6s?= =?us-ascii?Q?GIZusu9dh2A3GZWPMk4CRRGLxpz48wk8VwZWdRr5yuou/2xgSVUxcSBtQCcy?= =?us-ascii?Q?7UdreJv1cYhU/bKPT8AJ3mrEEOGKP/+VQSubgTRjT29SZPJ3pjLVeSJSP3tb?= =?us-ascii?Q?p1R0g74qappDnScSV80O4aPu7ZxtbVQIglEfBJV3tGZNcAzemWMl8l/lk2ab?= =?us-ascii?Q?P6/JJxWRDaoZVDnoP/PcEcuHvjvlmSCxVJNk/yONo7QD/gfHtE7JuraYVby4?= =?us-ascii?Q?iRYo+FImM6TdxaQAX/MfQobTvO1zknK93zBHvpAXmGpWctdk67Lsgp4EaQRX?= =?us-ascii?Q?lRky509uh8m2bo6J4PP66A1neFMdWTdQBTAtzz69YYqY4oOLjA1jap8mcqCT?= =?us-ascii?Q?b0xovF5tuO9yn0TjSnt2tGPEQHaYKEYlvqRawWNvy4E4i9UPgNaiwl/ZHc08?= =?us-ascii?Q?TV6+0BLBWPOV2bg7CQ5ChYusT1ng87kDNyeiN8Fe5Ra6g1N74ziSYPxezn+e?= =?us-ascii?Q?CjpPpYG+MU4PELBZ9vSsvP/5HV4VRY5K+o+pl6GNrhN34wVsOrxvMxKouP8Q?= =?us-ascii?Q?7HEgHOVgag4Wfox2AFHFW/HvGRShJfGynW5yXwMsblnm3CNdkMmJX8LP8Hpw?= =?us-ascii?Q?C2IANk22kfNCZyg6YTYS6mXNCg2rMeo2gwydvyTK8xanXGY/yp0M7pi0EWLL?= =?us-ascii?Q?hiSKnD3JxfXSjitwFtL4slBmgzF9Io1Gw96URZd+Kb9z9RaIjb+rrFBnfmQH?= =?us-ascii?Q?CJzfHQt/vKqlzXeft/4/BPlj38wJJ1To/YHF9DbDtPkyC/d+prukk1GqfBTs?= =?us-ascii?Q?iQLlDVA/Urn9GjmE618zEoqC7iyNJnywxxbpcZmCHpT6oWET4uNO2B4Lqz9b?= =?us-ascii?Q?buvLXYwAOMJ+NIRsa/NZHFHL1qJI/pnoqYggLCIPIVW3ZBPNtTGcu4cymgLi?= =?us-ascii?Q?eTJzyFjwRtH0KNJX3AOuDRL6DFoZ6i0vhAZKEqjY6GrKPIqrDv4RFrOYIz0g?= =?us-ascii?Q?/ib9acOqxxlRS26GSHSXHuHuHhZa+XO+sizVNuey7q1T09T8jlYfsp17PrkN?= =?us-ascii?Q?pFAk/LLqENUB5JDSWxnNF3HEVJ9dMOXFKiQ2L8hCavg0V3lr20m1Qk9FHPhz?= =?us-ascii?Q?EUg9KGX5j9s0O0/ylZiFyTYqQg6ZKMQ/DmMcekU6sKXzNuwkXbNg/k9T3chL?= =?us-ascii?Q?VsUScbKUoEY9+SiM5o8xPi5r/dtKsUsXRy+piYHdNIf66qNpRY90jQpe/0Mx?= =?us-ascii?Q?y9V3coTRJTZ/e6ycY/F8jLQItXslkpIDHSnL2ODJ/QNFBc0Sj5l1xDEDOyPy?= =?us-ascii?Q?sC0QBJcCkqVlCLeQusLnGBpgYsQ+ksf8lgqBp8OlNulrEJ8yPtVzq5J5vQRZ?= =?us-ascii?Q?YK9uf9/NxelexxIFceg=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9c01b364-1215-4f74-7b8d-08db41b27597 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2023 15:18:13.5565 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bS6zBfpxc81M/Frw/NvRGXaj1P2RpQZkpYXP4wJQJSwOW4XZmrSSugEW1acIbREx/5vLUQKeaIP6TojrBd+v4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6069 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Hi Abdul, I don't use EFIAPI is because this is a library linked with the module, so = there is no calling convention problem. However, I should have a consistent coding style for this file. I will upda= te this file and remove EFIAPI for other functions. Thanks Abner > -----Original Message----- > From: Attar, AbdulLateef (Abdul Lateef) > Sent: Wednesday, April 19, 2023 1:30 PM > To: Chang, Abner ; devel@edk2.groups.io > Cc: Isaac Oram ; Nickle Wang > ; Igor Kulchytskyy > Subject: RE: [edk2-platforms][PATCH V2 01/14] ManageabilityPkg: Add more > helper functions >=20 > [AMD Official Use Only - General] >=20 > Comments inline. >=20 > -----Original Message----- > From: Chang, Abner > Sent: 18 April 2023 12:46 > To: devel@edk2.groups.io > Cc: Isaac Oram ; Attar, AbdulLateef (Abdul Lateef= ) > ; Nickle Wang ; Igor > Kulchytskyy > Subject: [edk2-platforms][PATCH V2 01/14] ManageabilityPkg: Add more > helper functions >=20 > From: Abner Chang >=20 > 1. Add a helper function to output payload binary > to debug output device. > 2. Add a helper function to split payload into > packages according to maximum transfer unit > of transport interface. > 3. Add a helper function to generate CRC8. >=20 > Signed-off-by: Abner Chang > Cc: Isaac Oram > Cc: Abdul Lateef Attar > Cc: Nickle Wang > Cc: Igor Kulchytskyy > --- > .../BaseManageabilityTransportHelper.inf | 1 + > .../Library/ManageabilityTransportHelperLib.h | 98 ++++++++ > .../BaseManageabilityTransportHelper.c | 225 +++++++++++++++++- > 3 files changed, 314 insertions(+), 10 deletions(-) >=20 > diff --git > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib > /BaseManageabilityTransportHelper.inf > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib > /BaseManageabilityTransportHelper.inf > index 5447954144..c9e5eaef60 100644 > --- > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib > /BaseManageabilityTransportHelper.inf > +++ > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper > +++ Lib/BaseManageabilityTransportHelper.inf > @@ -25,6 +25,7 @@ > [LibraryClasses] > BaseMemoryLib > DebugLib > + MemoryAllocationLib >=20 > [Packages] > ManageabilityPkg/ManageabilityPkg.dec > diff --git > a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe > rLib.h > b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe > rLib.h > index 718ac34a1f..0dbf5ccb3c 100644 > --- > a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe > rLib.h > +++ > b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHe > +++ lperLib.h > @@ -11,8 +11,24 @@ >=20 > #include >=20 > +#define DEBUG_MANAGEABILITY_INFO DEBUG_INFO > + > typedef struct _MANAGEABILITY_PROTOCOL_NAME > MANAGEABILITY_PROTOCOL_NAME; >=20 > +typedef struct { > + UINT8 *PayloadPointer; > + UINT32 PayloadSize; > +} MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR; > + > +// > +// The information of multi portions of payload it is // splitted > +according to transport interface Maximum // Transfer Unit. > +typedef struct { > + UINT16 NumberOfPackages; ///< Numb= er of packages in > MultiPackages. > + MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR MultiPackages[]; > +} MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES; > + > /** > Helper function returns the human readable name of Manageability > specification. >=20 > @@ -90,4 +106,86 @@ HelperInitManageabilityTransport ( > OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS > *TransportAdditionalStatus OPTIONAL > ); >=20 > +/** > + This function splits payload into multiple packages according to > + the given transport interface Maximum Transfer Unit (MTU). > + > + @param[in] PreambleSize The additional data size precedes > + each package. > + @param[in] PostambleSize The additional data size succeeds > + each package. > + @param[in] Payload Pointer to payload. > + @param[in] PayloadSize Payload size in byte. > + @param[in] MaximumTransferUnit MTU of transport interface. > + @param[out] MultiplePackages Pointer to receive > + MANAGEABILITY_TRANSMISSION_MULTI_PACK= AGES > + structure. Caller has to free the mem= ory > + allocated for > MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES. > + > + @retval EFI_SUCCESS > MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES structure > + is returned successfully. > + @retval EFI_OUT_OF_RESOURCE Not enough resource to create > + MANAGEABILITY_TRANSMISSION_MULTI_PACKAG= ES > structure. > +**/ > +EFI_STATUS > EFIAPI missing, is it intentional? > +HelperManageabilitySplitPayload ( > + IN UINT16 PreambleSize, > + IN UINT16 PostambleSize, > + IN UINT8 *Payload, > + IN UINT32 PayloadSize, > + IN UINT32 MaximumTransferUnit, > + OUT MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES > **MultiplePackages > + ); > + > +/** > + This function generates CRC8 with given polynomial. > + > + @param[in] Polynomial Polynomial in 8-bit. > + @param[in] CrcInitialValue CRC initial value. > + @param[in] BufferStart Pointer to buffer starts the CRC calculat= ion. > + @param[in] BufferSize Size of buffer. > + > + @retval UINT8 CRC value. > +**/ > +UINT8 > EFIAPI is missing, its common header file. > +HelperManageabilityGenerateCrc8 ( > + IN UINT8 Polynomial, > + IN UINT8 CrcInitialValue, > + IN UINT8 *BufferStart, > + IN UINT32 BufferSize > + ); > + > +/** > + Print out manageability transmit payload to the debug output device. > + > + @param[in] Payload Payload to print. > + @param[in] PayloadSize Payload size. > + > +**/ > +VOID > +EFIAPI > +HelperManageabilityPayLoadDebugPrint ( > + IN VOID *Payload, > + IN UINT32 PayloadSize > + ); > + > +/** > + Prints a debug message and manageability payload to the debug output > device. > + > + @param[in] Payload Payload to print. > + @param[in] PayloadSize Payload size. > + @param[in] Format The format string for the debug message to pr= int. > + @param[in] ... The variable argument list whose contents are > accessed > + based on the format string specified by Forma= t. > + > +**/ > +VOID > +EFIAPI > +HelperManageabilityDebugPrint ( > + IN VOID *Payload, > + IN UINT32 PayloadSize, > + IN CONST CHAR8 *Format, > + ... > + ); > + > #endif > diff --git > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib > /BaseManageabilityTransportHelper.c > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib > /BaseManageabilityTransportHelper.c > index c3f35b7beb..0e241ca3fd 100644 > --- > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib > /BaseManageabilityTransportHelper.c > +++ > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper > +++ Lib/BaseManageabilityTransportHelper.c > @@ -8,11 +8,12 @@ > #include > #include > #include > +#include > #include >=20 > // > // BaseManageabilityTransportHelper is used by PEI, DXE and SMM. > -// Make sure the global variables added here should be unchangable. > +// Make sure the global variables added here should be unchangeable. > // > MANAGEABILITY_SPECIFICATION_NAME ManageabilitySpecNameTable[] =3D > { > { &gManageabilityTransportKcsGuid, L"KCS" }, > @@ -47,8 +48,8 @@ HelperManageabilitySpecName ( > return NULL; > } >=20 > - if (SpecificationGuid =3D=3D NULL || IsZeroGuid (SpecificationGuid)) { > - DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or > zero GUID.\n", __FUNCTION__)); > + if ((SpecificationGuid =3D=3D NULL) || IsZeroGuid (SpecificationGuid))= { > + DEBUG ((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or > + zero GUID.\n", __FUNCTION__)); > return NULL; > } >=20 > @@ -99,12 +100,13 @@ HelperManageabilityCheckSupportedSpec ( > return EFI_INVALID_PARAMETER; > } >=20 > - if (TransportGuid =3D=3D NULL || > + if ((TransportGuid =3D=3D NULL) || > IsZeroGuid (TransportGuid) || > - ManageabilityProtocolToCheck =3D=3D NULL || > + (ManageabilityProtocolToCheck =3D=3D NULL) || > IsZeroGuid (ManageabilityProtocolToCheck) > - ) { > - DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or > zero GUID.\n", __FUNCTION__)); > + ) > + { > + DEBUG ((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or > + zero GUID.\n", __FUNCTION__)); > return EFI_INVALID_PARAMETER; > } >=20 > @@ -116,7 +118,7 @@ HelperManageabilityCheckSupportedSpec ( > )) > { > DEBUG (( > - DEBUG_VERBOSE, > + DEBUG_MANAGEABILITY_INFO, > "%a: Transport interface %s supports %s manageability specificat= ion.\n", > __FUNCTION__, > HelperManageabilitySpecName (TransportGuid), @@ -174,7 +176,7 @@ > HelperAcquireManageabilityTransport ( > return EFI_UNSUPPORTED; > } >=20 > - DEBUG ((DEBUG_INFO, " Manageability protocol %s is going to acquire > transport interface token...\n", ManageabilityProtocolName)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, " Manageability protocol %s is > + going to acquire transport interface token...\n", > + ManageabilityProtocolName)); >=20 > Status =3D AcquireTransportSession (ManageabilityProtocolSpec, > TransportToken); > if (Status =3D=3D EFI_UNSUPPORTED) { > @@ -199,7 +201,7 @@ HelperAcquireManageabilityTransport ( > return EFI_UNSUPPORTED; > } >=20 > - DEBUG ((DEBUG_INFO, "%a: This is the transfer session for %s over %s\n= ", > __FUNCTION__, ManageabilityProtocolName, > ManageabilityTransportName)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: This is the transfer session > + for %s over %s\n", __FUNCTION__, ManageabilityProtocolName, > + ManageabilityTransportName)); > return Status; > } >=20 > @@ -259,3 +261,206 @@ HelperInitManageabilityTransport ( >=20 > return Status; > } > + > +/** > + This function generates CRC8 with given polynomial. > + > + @param[in] Polynomial Polynomial in 8-bit. > + @param[in] CrcInitialValue CRC initial value. > + @param[in] BufferStart Pointer to buffer starts the CRC calculat= ion. > + @param[in] BufferSize Size of buffer. > + > + @retval UINT8 CRC value. > +**/ > +UINT8 > EFIAPI missing, is it intentional? > +HelperManageabilityGenerateCrc8 ( > + IN UINT8 Polynomial, > + IN UINT8 CrcInitialValue, > + IN UINT8 *BufferStart, > + IN UINT32 BufferSize > + ) > +{ > + UINT8 BitIndex; > + UINT32 BufferIndex; > + > + BufferIndex =3D 0; > + while (BufferIndex < BufferSize) { > + CrcInitialValue =3D CrcInitialValue ^ *(BufferStart + BufferIndex); > + BufferIndex++; > + > + for (BitIndex =3D 0; BitIndex < 8; BitIndex++) { > + if ((CrcInitialValue & 0x80) !=3D 0) { > + CrcInitialValue =3D (CrcInitialValue << 1) ^ Polynomial; > + } else { > + CrcInitialValue <<=3D 1; > + } > + } > + } > + > + return CrcInitialValue; > +} > + > +/** > + This function splits payload into multiple packages according to > + the given transport interface Maximum Transfer Unit (MTU). > + > + > + @param[in] PreambleSize The additional data size precedes > + each package. > + @param[in] PostambleSize The additional data size succeeds > + each package. > + @param[in] Payload Pointer to payload. > + @param[in] PayloadSize Payload size in byte. > + @param[in] MaximumTransferUnit MTU of transport interface. > + @param[out] MultiplePackages Pointer to receive > + MANAGEABILITY_TRANSMISSION_MULTI_PACK= AGES > + structure. Caller has to free the mem= ory > + allocated for > MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES. > + > + @retval EFI_SUCCESS > MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES structure > + is returned successfully. > + @retval EFI_OUT_OF_RESOURCE Not enough resource to create > + MANAGEABILITY_TRANSMISSION_MULTI_PACKAG= ES > structure. > This function also returns EFI_INVALID_PARAMETER. > +**/ > +EFI_STATUS > EFIAPI missing, Is it intentional ? > +HelperManageabilitySplitPayload ( > + IN UINT16 PreambleSize, > + IN UINT16 PostambleSize, > + IN UINT8 *Payload, > + IN UINT32 PayloadSize, > + IN UINT32 MaximumTransferUnit, > + OUT MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES > **MultiplePackages > + ) > +{ > + UINT16 NumberOfPackages; > + UINT16 IndexOfPackage; > + UINT32 PackagePayloadSize; > + UINT32 TotalPayloadRemaining; > + MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES > *ThisMultiplePackages; > + MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR *ThisPackage; > + > + if ((INT16)(MaximumTransferUnit - PreambleSize - PostambleSize) < 0) { > + DEBUG (( > + DEBUG_ERROR, > + "%a: (Preamble 0x%x + PostambleSize 0x%x) is greater than > MaximumTransferUnit 0x%x.\n", > + __FUNCTION__, > + PreambleSize, > + PostambleSize, > + MaximumTransferUnit > + )); > + return EFI_INVALID_PARAMETER; > + } > + > + PackagePayloadSize =3D MaximumTransferUnit -PreambleSize - > PostambleSize; > + NumberOfPackages =3D (UINT16)((PayloadSize + (PackagePayloadSize -= 1)) > / PackagePayloadSize); > + ThisMultiplePackages =3D > (MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES *)AllocateZeroPool ( > + = sizeof > (MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES) + > + > + sizeof (MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR) * > NumberOfPackages > + > + ); if (ThisMultiplePackages =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "%a: Not enough memory for > MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES\n")); > + return EFI_INVALID_PARAMETER; > return EFI_OUT_OF_RESOURCE. > + } > + > + ThisMultiplePackages->NumberOfPackages =3D NumberOfPackages; > + ThisPackage =3D > (MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR *)(ThisMultiplePackages > + 1); > + TotalPayloadRemaining =3D PayloadSize; > + for (IndexOfPackage =3D 0; IndexOfPackage < NumberOfPackages; > IndexOfPackage++) { > + ThisPackage->PayloadPointer =3D Payload + (IndexOfPackage * > PackagePayloadSize); > + ThisPackage->PayloadSize =3D MIN (TotalPayloadRemaining, > PackagePayloadSize); > + TotalPayloadRemaining -=3D ThisPackage->PayloadSize; > + ThisPackage++; > + } > + > + if (TotalPayloadRemaining !=3D 0) { > + DEBUG ((DEBUG_ERROR, "%a: Error processing multiple packages > + (TotalPayloadRemaining !=3D 0)\n", __FUNCTION__)); > Does ThisMultiplePackages requires to free the space before returning? > + return EFI_INVALID_PARAMETER; > + } > + > + *MultiplePackages =3D ThisMultiplePackages; > + return EFI_SUCCESS; > +} > + > +/** > + Print out manageability transmit payload to the debug output device. > + > + @param[in] Payload Payload to print. > + @param[in] PayloadSize Payload size. > + > +**/ > +VOID > +EFIAPI > +HelperManageabilityPayLoadDebugPrint ( > + IN VOID *Payload, > + IN UINT32 PayloadSize > + ) > +{ > + UINT16 Page256; > + UINT16 Row16; > + UINT16 Column16; > + UINT32 RemainingBytes; > + UINT32 TotalBytePrinted; > + > + RemainingBytes =3D PayloadSize; > + TotalBytePrinted =3D 0; > + while (TRUE) { > + if (TotalBytePrinted % 256 =3D=3D 0) { > + Page256 =3D (UINT16)TotalBytePrinted / 256; > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "=3D=3D=3D=3D=3D=3D=3D=3D Manage= ability > Payload %04xH - %04xH =3D=3D=3D=3D=3D=3D=3D=3D=3D\n", Page256 * 256, Page= 256 * 256 + MIN > (RemainingBytes, 256) - 1)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, " ")); > + for (Column16 =3D 0; Column16 < 16; Column16++) { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%02x ", Column16)); > + } > + > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n ----------------------= ------- > ------------------\n")); > + } > + > + for (Row16 =3D 0; Row16 < 16; Row16++) { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%04x | ", Page256 * 256 + > Row16 * 16)); > + for (Column16 =3D 0; Column16 < MIN (RemainingBytes, 16); Column16= ++) > { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%02x ", *((UINT8 *)Payload > + Page256 * 256 + Row16 * 16 + Column16))); > + } > + > + RemainingBytes -=3D Column16; > + TotalBytePrinted +=3D Column16; > + if (RemainingBytes =3D=3D 0) { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n\n")); > + return; > + } > + > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n")); > + } > + > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n")); } > + > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n\n")); } > + > +/** > + Prints a debug message and manageability payload to the debug output > device. > + > + @param[in] Payload Payload to print. > + @param[in] PayloadSize Payload size. > + @param[in] Format The format string for the debug message to pr= int. > + @param[in] ... The variable argument list whose contents are > accessed > + based on the format string specified by Forma= t. > + > +**/ > +VOID > +EFIAPI > +HelperManageabilityDebugPrint ( > + IN VOID *Payload, > + IN UINT32 PayloadSize, > + IN CONST CHAR8 *Format, > + ... > + ) > +{ > + VA_LIST Marker; > + > + VA_START (Marker, Format); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Manageability Transmission: ")); > + DebugVPrint ((UINTN)DEBUG_MANAGEABILITY_INFO, Format, Marker); > + HelperManageabilityPayLoadDebugPrint (Payload, PayloadSize); > + VA_END (Marker); > +} > -- > 2.37.1.windows.1 >=20