From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.74]) by mx.groups.io with SMTP id smtpd.web11.2142.1681972923753941389 for ; Wed, 19 Apr 2023 23:42:04 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=Dv2ylZVQ; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.92.74, mailfrom: nicklew@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Eb3M5GW06D8r0aTMz+EtIjDr1KsN3D6NXdnJaDzveG9lyhFGm3uPqVcry9AtIgDtsgqDN6zjh0ZTMMnFOunWbm9FhJDkNIPG+iRU0aQeG2C2ZaMyS6gZWl5H+Y0zTDyshNgT9tnHQ3ETH8pZqoCBt503WsFWX2kV1srUlW5DX05r40b0Duciz5bW34Kk9fIFtSCH9MZhx8FLa/U+G/HVxzwKQYNl6OPA0sRzuyefofXomP+cZP4InjEUrrf/gZDjudqHuXqPGw9Uwe8QFUBX3Dpv8/cf+HKTKAiHj2pcmWqSDSDHXBhetctPgO3Ieq0AypMpXMKfA+TQaN7k+4Tsvg== 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=ioB83rU7ioNWfiNFNdNHfpcqj5cAj7Thxrrvud/dNeA=; b=NRBmXFWLeVC+UzWUefWxJ6/+HAfj37r6dFyRlPc4R0QhXSYtnmn+bVVdl69+tSNsIrUazr/QHji9AnmfieOeZer+XFt5/4MOKAqezn/Btu4lByIB0IFffBE6n0xrWrkAZyRAHOmjWjKCyRHE7UGCKXV/MyThFWr9y5vgVYDyhVUOVqVZhbr/jJKTqDomuZFBauQsfL6Bh0drOZug7vTkY7pTebJNliP9HfcEgUu92B3sw2ZFuuEJr4rXybJbtpUye6fsHmlLt9apjYh0qSvZQOcKeVTjt2DBSWTxwko2rb2tb3jphV9vXHuRt/gzvbOpH7FJXh784nDq4lU0jjZ7jQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ioB83rU7ioNWfiNFNdNHfpcqj5cAj7Thxrrvud/dNeA=; b=Dv2ylZVQqpg2Aiz6OyMnS7qefpP33e/rP1GL1ukylL9JEtT7mr7OitM1ZESvep0xjY4cK/mizfhNs0NRQcOlsEuAzSXmDNQTquY+Fg7/mhpJ24RoW67U/Vb6i310cf0ZR8yFTE0iSNU53cysJf3ioH4OxAdeXwOtQ3ldFOfNddZ2nkIAItV66ZNdn4zEwwyQOTSvTwnSSam+8bR8CjF3PPpHq4kP9YAbzvc9uD/4W8v4n4A9KNRM+k+xzkmDgjjniwcDHtNvlOZQ4sPnGypVX7FJSI9OaE8YtHftDOOhuSvxAHBmrfUKHN7h3aEepSceUXDaeFqxpItQlX4tPzqeEg== Received: from MW4PR12MB7031.namprd12.prod.outlook.com (2603:10b6:303:1ef::6) by DM6PR12MB4250.namprd12.prod.outlook.com (2603:10b6:5:21a::9) 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 06:42:00 +0000 Received: from MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::d9df:b45b:2cc1:f017]) by MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::d9df:b45b:2cc1:f017%5]) with mapi id 15.20.6319.022; Thu, 20 Apr 2023 06:42:00 +0000 From: "Nickle Wang" To: "abner.chang@amd.com" , "devel@edk2.groups.io" CC: Isaac Oram , Abdul Lateef Attar , 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: AQHZccWnkZVvfFvX3USmH/k3uEBvb68zu4RQ Date: Thu, 20 Apr 2023 06:42:00 +0000 Message-ID: References: <20230418071543.1951-1-abner.chang@amd.com> <20230418071543.1951-2-abner.chang@amd.com> In-Reply-To: <20230418071543.1951-2-abner.chang@amd.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR12MB7031:EE_|DM6PR12MB4250:EE_ x-ms-office365-filtering-correlation-id: e447f8fd-6baf-4f5c-9e43-08db416a5839 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PwMxjycpvJD0ktA/idCH0Amo/rm+tqajQwcxDrUGQqy9YRxy8vfIoq4qhK8S+VaQ4DptfPXvNM5Zc7Ttf6eIBmqcH+Is42mg1rxUI8bfwLFwihBpUgekQxM7Fngc1ZzkkiLIM/9fjq70BFR7AMNPNSvOFQjQ3qDHRlBuZ5rcTihvJd0P6VxAkOsfWOa+qBx9tnjOV+0SADSAKG9LEFH0YhNKZReOXm2crZek6bh8rfuVmKMM3rcnWCoNhfJArpxtH5iCPKk1nrEXnl7OVOcZyDr0dyxCTUeu9sAKBxjUbmnDvakl/qMy2wRSbAZSb2mSYA2MCP+JVgLRlPgIHgUwdo4NlAEDhevxZHDaudEyqJJMLPq6/MrFGAL81O0oOHiIovsNrHwJCvkwMAQUqxGiTYMFxkel43dmprti+I5zSutqsrTaNS5yMn4gHHGed0pDwTK5lF6K/xd+6POuYeM8P9Ln7vUAdCg1hu6GxvSlSk639IV0xLImbqBkdj7njBBJdNW2Ai1bucxfGdONUONOtR6pBXMcl5kQ7xS37FLWJLkVrSfxjkAPD/MuCnRSpyiRA9nWqnIWAvgkfKAcjsXpmlwGD1w4JaA3+S/tuWH7NJwslXaLyQlo/8up6uWAlFz7inNva2rCfL9SD5LjKsZ2fOsMXkTIrBS6uczzgoRAS7Y= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR12MB7031.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(376002)(366004)(346002)(136003)(396003)(451199021)(38100700002)(41300700001)(38070700005)(122000001)(5660300002)(52536014)(8676002)(30864003)(2906002)(8936002)(33656002)(86362001)(55016003)(7696005)(71200400001)(9686003)(6506007)(26005)(53546011)(54906003)(478600001)(83380400001)(186003)(76116006)(66556008)(66476007)(66446008)(66946007)(316002)(64756008)(110136005)(4326008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?qRS3wJKsXg86lxer5ZHNNHJwjt7VokQobr2rNiQXLSP/RaxLC6jVI2JH7B0r?= =?us-ascii?Q?6eUXgtPhkX6OMh8tecyIofJazqkF8WC8REtST9XfTQ2CJDG1cjTL33ytUyVt?= =?us-ascii?Q?hN9IyMhcdxZfRi+EeA8ouveasx/VuJEWB8Ix+4KAGQrdAcWudAnV3rJS018B?= =?us-ascii?Q?R0MnM0GoP7wnm9zsP768/PvAeSacwNnUNSjDFchKBB6+FuGRhwPM/6hB7sC6?= =?us-ascii?Q?P7URvdHXhG/vJN4xW3TchFjJsVzAIMFLzh/ZLpWENbi0A8Sm/OFXiGSvtOeI?= =?us-ascii?Q?p7lRqY44VeG6s87m4lsHt5oDVjOgTIgh2QdSQnsbEeG1+Kt7S5gRjSgsaZPm?= =?us-ascii?Q?M/osgBv08nyxDpMsR88eW7VRrPjHt1wYG/5uwD6+Lrf4q6ccdxYu3nH4RJGC?= =?us-ascii?Q?Mt3AHaCaYTn9FxiihTlnBxaJB/uiwAe+L/Xe3HXTOi7C738qn2cKTd9ivont?= =?us-ascii?Q?9JdXI6B0Tj8ytzqJByrhtpv3dvAqQE6vCbM5tnPWF8QyXYF3oQFtsV1Qjs2s?= =?us-ascii?Q?02FhXCf0Grf163Tmz8Ib7kDCjTW+n3sHtVnoSIeHq1tOKQoLvoxUqp2bJJU4?= =?us-ascii?Q?u6qvHqew2Oq5PkwIgJmqhsAyGUm8yKqt+2sETUZI3AuUtKA17uTIFK7zPYyo?= =?us-ascii?Q?8ocT0XaRyGTg0ZHTs4HM82dWR9JSVobRq9XiyQ2Di3mYKh8bQmRQ2sfbFby9?= =?us-ascii?Q?JsbyqfnOi3QlyXlJjfFgqlZhW7QpS36KffTInGET9BD5Bdu0whGuHtWaNsMM?= =?us-ascii?Q?oyAwoG0Qew2qxRyqV7wTHzY8QnIaUPXyz+hl15jhl1q+wqknbUgy5x8EZTpe?= =?us-ascii?Q?mPytmkEIhxP9Kju9jghnn6cMGQPv2wpm6t3luOa/d4kd0Eiy1mg0tONuWO0/?= =?us-ascii?Q?orG7JougvY/IhYNGz9HdfMXLRmgdjxKrZfekDSHdn7D8lBunCrop3O3eITiP?= =?us-ascii?Q?e3arDH+or4i6dtF31QN3Hmg8vujQBxrPyq3l3W/hOlea9AicRypcnvGQ7TPC?= =?us-ascii?Q?2N5hul9CXi9a6yxe6zaXwHvRd2SbDgvWI8sA1H51EVeTsRVJm9uwRm70muXt?= =?us-ascii?Q?S63AyWh3Y/IU59FpWPKEavhBnHR3D8e8ltvY268Ts3Ug5Ys2aIdhQOByEpV5?= =?us-ascii?Q?2doN5u/YYrU8TieNAfZ3TwEvMK+28MtYsINanfwC8hehKEJJ6u6+m/l2+7LE?= =?us-ascii?Q?y6ZaQd1EXGSYwooBaUAyvzKvyi555YFfHJx9GKpc7rWPPA+68JaDoJL9nPGi?= =?us-ascii?Q?p+djdi7EZgw3wbjtWeVGd7bFx4+wAEH7X+WUkxtG/6sPOoPvU1ZR7z1NaSF7?= =?us-ascii?Q?0cgsM+HrjY4L6iKqKd8lVk0EprsmMd3WOD1g4XPvladCdHQRdEk/b1BzAUMf?= =?us-ascii?Q?xQfhHQ0b8k1wmOp4otpZAVcBljz9Xfi0jckF2R+98qbeFYfEQVkbO/qU7t7O?= =?us-ascii?Q?i8YbwMO/CQ70Iw8Qs1SwUS8bCyRnbDspiQID72Z4IrI4/jx/gNx6BIA7Artz?= =?us-ascii?Q?RqRG+aAgBWjdugfeb+VIiUWMT5MWLHHXkVu/Lm62lMZKTaO7EwaZ0EVXbmhS?= =?us-ascii?Q?QuFTer3smM5YJffFAWw=3D?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR12MB7031.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e447f8fd-6baf-4f5c-9e43-08db416a5839 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2023 06:42:00.5034 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7DAnQoUpJy/4e94YDZOskOAFF+qGw75kkkRA3pFi8DlFdtbbsCIT4aks4q9cp2sruNpkiH6k3Fsb8Rei/X8/OA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4250 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Abner, Please find my comments below. Thanks, Nickle > -----Original Message----- > From: abner.chang@amd.com > Sent: Tuesday, April 18, 2023 3:16 PM > To: devel@edk2.groups.io > Cc: Isaac Oram ; Abdul Lateef Attar > ; Nickle Wang ; Igor Kulchytskyy > > Subject: [edk2-platforms][PATCH V2 01/14] ManageabilityPkg: Add more help= er > functions >=20 > External email: Use caution opening links or attachments >=20 >=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/B= a > seManageabilityTransportHelper.inf > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B= a > seManageabilityTransportHelper.inf > index 5447954144..c9e5eaef60 100644 > --- > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B= a > seManageabilityTransportHelper.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/ManageabilityTransportHelperL= ib > .h > b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperL= ib > .h > index 718ac34a1f..0dbf5ccb3c 100644 > --- > a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperL= ib > .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 > +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 > +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/B= a > seManageabilityTransportHelper.c > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B= a > seManageabilityTransportHelper.c > index c3f35b7beb..0e241ca3fd 100644 > --- > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B= a > seManageabilityTransportHelper.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 ze= ro > 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 > +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. > +**/ > +EFI_STATUS > +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 - Postamble= Size; > + 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; Since there is no memory to allocate, the return value should be 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__)); Before this error return, shall we release ThisMultiplePackages buffer? > + 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