From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.55]) by mx.groups.io with SMTP id smtpd.web10.9359.1682077592055946348 for ; Fri, 21 Apr 2023 04:46:32 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=hEx2/mb2; 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.244.55, mailfrom: abdullateef.attar@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AdBYI+EcHlG3sqMF2CNI+EHj+BvjzUHL4/CFP10a/Nz5bSM1445sxCF51SXvxFPOTbZXtsGO0Tl5yX0/anlVQuJmfX2CTEEzs93Rtx4fjJh7FA7koRu52kBosC5ngJsV25ROxVk8k1Xl/2/lJbs7lzF5Y/nvLsx2/Jcw7LKy+S+W/wiZt/qYB563uzJbGCocmSBKgEJjOvJEwbaSGqdtgnBJJqlTNzMIq2nBJzu+EPmQ1wQzrDYrEDfK+ZhMfsc7cqC5ZwUBtqnBsnyemHPAnQOr1j9JfnEzss2LKZdMFCQjV/WZrFnshylqKn3dhywikL9tlLrT9a73RiGgAvXbhw== 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=V6vLxzx/kIpJU50Av9UoCXugpiMYkpyLPT3LTIa47JQ=; b=mi+lRJnV/QzauQa0osL37WtNLU+R774qYh4gegLu/TimKMZg1UXvVl+kqgEGWyoKGKVSmjRYLL/INcnOpKixZbQVv0r3f10NBM8RHUr7grI09L+AuV9SZ3x5tkohZpre8Mjg4GXlrWaAcOPlqKRa/q0T8BesdY9/fz2hIDwKbP0SAGc6DxtXvCyPzHDM0ZY3pvTeTJV+UL8HQbRFUorPTjl1T6aHd5coGOWmiCK3XVqcJwo6BmBpQsS6w1aQBInWn6luiLb/urlLzig+X7KwaOKFbYI6doer1GufYqzyE/ZqPYtJzvTifvUH9UUTR5t+7TPxHW46OMt9d13JvzXOaQ== 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=V6vLxzx/kIpJU50Av9UoCXugpiMYkpyLPT3LTIa47JQ=; b=hEx2/mb2p5uPCUuoatrN4lLx4MeI2QboptlGxjc88q6YvMWXae9Mo4Rj08RbQFk5D16JpamW/58ec0CMy68rStJIsJ3XMqRwKa5RO6svEYYSJ6HjJo5KlYnQE1S1kCzaDtKfhFzZnYhPd7OCJjdPpnCtGu8SkuQ8jz3pNRT8hew= Received: from IA1PR12MB6458.namprd12.prod.outlook.com (2603:10b6:208:3aa::22) by IA1PR12MB6651.namprd12.prod.outlook.com (2603:10b6:208:3a0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20; Fri, 21 Apr 2023 11:46:29 +0000 Received: from IA1PR12MB6458.namprd12.prod.outlook.com ([fe80::fb82:b2bf:60f9:45a1]) by IA1PR12MB6458.namprd12.prod.outlook.com ([fe80::fb82:b2bf:60f9:45a1%6]) with mapi id 15.20.6319.022; Fri, 21 Apr 2023 11:46:29 +0000 From: "Attar, AbdulLateef (Abdul Lateef)" To: "Chang, Abner" , "devel@edk2.groups.io" CC: Isaac Oram , Nickle Wang , Igor Kulchytskyy Subject: Re: [edk2-platforms][PATCH V3 01/14] ManageabilityPkg: Add more helper functions Thread-Topic: [edk2-platforms][PATCH V3 01/14] ManageabilityPkg: Add more helper functions Thread-Index: AQHZdBFleqX0ZzaJCkW8D7cfXa8Ezq81pRBA Date: Fri, 21 Apr 2023 11:46:29 +0000 Message-ID: References: <20230421052247.1520-1-abner.chang@amd.com> <20230421052247.1520-2-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-2-abner.chang@amd.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=6ed895c4-0744-43df-aacf-296940442284;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=0;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true;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_SetDate=2023-04-21T11:44:15Z;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; 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: IA1PR12MB6458:EE_|IA1PR12MB6651:EE_ x-ms-office365-filtering-correlation-id: c44f13ef-054b-4ef0-cc2b-08db425e0b97 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: QWhEUgCKpuw8PW/eR4ig85xPw9BLpNootfxHGkHrfU0eIr3aaq+wxqCuMGTiVFP4zGKM+byNLoYnHxD4/9wZ/HEn5qd9h509gJ5Si8Yro86Sa8AZzySRhZ52Vfp8OnMvC44R4fqVbsyiYIdtECQUkKYD1aT4nb1WYAhcX4IVJxw+f1ZNVit+Ai+TdaLTgeqSG7+XC2MJpWsocf+8qE9WdrZ2WINzyMJKYVFMQ5ZkQjsxF54Z/g6GqtanD6XNbVdr8lNVBtF6TwJQCTpA/Le8ZTW/RmdsIyMz46HncQ/SSevXneBPun1nC8oKryifeH0uiFrmwHZgt27Q2koe/td0wpPwbb44M1EriZdgaBnui8fr5VyX9okzDYWjUc/Umu59Lr8EL9c5PEU0eJI5Yo15Ugy1aa6r9BxNJrVde+PH71AKcMKFt/Td+8lvlJUgY2cpPRU/K8of/xneW+oZECPF3ZKFFdTTUTg9bclwMSK0ib5oru/UdZtAvkoDXLahDAWz/8B7o47vrjE9FtxEympuZynx/9tVm2TJZ+dioxYXlJOubl1zRfqRCPp7MBnp7z7pH+leC9iOMqpOjJDWtr1q4dt7u+ghfX9x8UyZ/XlX8xuQ+mUaXPxUqlTLsh6GMSk7 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA1PR12MB6458.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(136003)(366004)(376002)(39860400002)(346002)(396003)(451199021)(478600001)(110136005)(86362001)(55016003)(33656002)(71200400001)(83380400001)(53546011)(9686003)(26005)(7696005)(38100700002)(38070700005)(186003)(6506007)(122000001)(64756008)(316002)(66446008)(30864003)(66556008)(66946007)(66476007)(2906002)(76116006)(8676002)(8936002)(5660300002)(41300700001)(4326008)(52536014)(54906003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?09pYJ1+Ek8OYmX0qo6PYSp+38+iadSXwMAhmCUUJWjLbKF91/Z4zIs5Wg+H+?= =?us-ascii?Q?XI30jCDUE1n0eNFeQCGlZ4rarjyg+Ua0tcPY2uVDASklgR9jSOeqdY4869+B?= =?us-ascii?Q?Wskki+QsLbWrypvE1ujhOOcEdeaLzKg5JBNTqqX8swXdBoM2JciJDrU0ocmy?= =?us-ascii?Q?PY2cM6773dxft4wGDu98kZS6mjfgLlUhD5rPfxZY4rgO4vYwCqdHEIWO1IuF?= =?us-ascii?Q?pqkOS15/aaidUwbTppVtP5EKl0cyhm95lxW70y7z7toLwxqxzgRZskFUNu3A?= =?us-ascii?Q?C4xMb4lXRBxl65ORK/qFDOvc7rKWVFmDASYCXoIpP6jSz9lFqdvE3oAtg2nw?= =?us-ascii?Q?CLz0Z3BoPwRG2A9WROuko/6gpY9oNJp9bWui61MHFN9U+6EYLbTvnv1COfbh?= =?us-ascii?Q?Euvp398/1lJukfQXrFJxSg6EKMpHa0MxZ3BH4E7lV/FBmtch5j5I7I4LdtKo?= =?us-ascii?Q?fAePMhAOx6NJKJYCyP3k0FQqGKm5F+G3TnJ9H0gla1pRTiIe+Z7aKTkpqQXU?= =?us-ascii?Q?N7A1vzdNB695eRmOGSxzWTzErrqPpljYa9H1w0gughaAMN/JHM7er4XCNRad?= =?us-ascii?Q?FTZfDqs8xtNrlFPdONCWjbc2aZpQz6Rx1/Lbt+vQjlN0zz3SJ9yJCoF/dub7?= =?us-ascii?Q?fPkYwQeTsfeLFeVcZeVIky1Urq9uo3f9Z0aPtp/edcdPXI7nqTfAvD5MjUtg?= =?us-ascii?Q?jRiJ/rBzzJ1f8MvbvFyfVBQICuFY4Vc/eZ37830IwJME337Nw7oKxI6X57TI?= =?us-ascii?Q?UfW9JlXOYe//VUGhGo66PI3jkt3ro+gv7HEPIj8jiVaAA+2mAfOqz5HP99N5?= =?us-ascii?Q?rxCn8ZGnBxCU03wBrHf2yM2M8lQmbrhtGOzQl+nWa12L6kxjRaSYlZyaqDEr?= =?us-ascii?Q?yIcrTv2ClPaLkdgjJShzFWI+e2KrsmU/glhGgTMeyTqVmCQq2TQ5QI8IHTdf?= =?us-ascii?Q?OtIgvjjSK1z+Pxy1SZk7I168GTDyFkIlJPvXoIaJeDmJw2BFXobxInPKMiUt?= =?us-ascii?Q?o2lNs/fnZlp53ChBDg3SscFAgrXnMUbHHNRuelqxe3h86GhXzOIY+80QuH6t?= =?us-ascii?Q?fMMqY7p0Ue5PMVGTcR11PRV9Zylxy3w1/PXOe37OvwWDEMWYuRxzrxkstX6m?= =?us-ascii?Q?mqY+4ieIko9kTwRAjUBcoDrcqNlbT4CzDfMA1QxjoX+bqM5njyl/OJTyQIwv?= =?us-ascii?Q?wD68gWPXp8pot8pFUJp2E5x1pmBZUZsHfi+eGJ+QpEjISQ2HCSJWxUBb4G4G?= =?us-ascii?Q?nnGybFDImVmv4Cu6myiXPffEzgQQux3rkZlOzXkRGM+c7j8Ykp/AsmeuVo15?= =?us-ascii?Q?MuAs0yuYeKy9irth0XN448HJKxQsJpZqKBCtrQjw7Qv2kdYN8LAVYJF4+vyg?= =?us-ascii?Q?fY40ss0wfXbIAeUosedvnE2KSSJrHJNvWqJF1DlELkrqGvEf4ojndxZYV/sA?= =?us-ascii?Q?9GFhaWMvxMyVGok+R2iRUrMwAYec04wZE3oJpuBY1IFoFAJIo5GGJam3ha9X?= =?us-ascii?Q?mAP/aG9cI5LvYI3/ePT8JcNa27M7VeIslr2WksdhD2VLeUbQ5pRJ4uOPjGoe?= =?us-ascii?Q?oTwE+BKYKdoMHaPKlhQ=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: IA1PR12MB6458.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c44f13ef-054b-4ef0-cc2b-08db425e0b97 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Apr 2023 11:46:29.1322 (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: 0yjfVzd1Fj+v2UURngy9z4M7nHZCokPo8dPYV5k2fxKv/UdhYRsIPMkFWWw/lUpMx2I/HjTzf5lbrpnSJVyGhw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6651 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Reviewed-by: Abdul Lateef Attar -----Original Message----- From: Chang, Abner Sent: 21 April 2023 10:53 To: devel@edk2.groups.io Cc: Isaac Oram ; Attar, AbdulLateef (Abdul Lateef) = ; Nickle Wang ; Igor Kulchyt= skyy Subject: [edk2-platforms][PATCH V3 01/14] ManageabilityPkg: Add more helper= functions From: Abner Chang 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. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy --- .../BaseManageabilityTransportHelper.inf | 1 + .../Library/ManageabilityTransportHelperLib.h | 97 ++++++++ .../BaseManageabilityTransportHelper.c | 225 +++++++++++++++++- 3 files changed, 313 insertions(+), 10 deletions(-) diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHe= lperLib/BaseManageabilityTransportHelper.inf b/Features/ManageabilityPkg/Li= brary/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 [Packages] ManageabilityPkg/ManageabilityPkg.dec diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTranspo= rtHelperLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTran= sportHelperLib.h index 718ac34a1f..c2c98d6c2d 100644 --- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe= rLib.h +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHe +++ lperLib.h @@ -11,8 +11,24 @@ #include +#define DEBUG_MANAGEABILITY_INFO DEBUG_INFO + typedef struct _MANAGEABILITY_PROTOCOL_NAME MANAGEABILITY_PROTOCOL_NAME; +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; ///< Number= of packages in MultiPackages. + MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR MultiPackages[]; +} MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES; + /** Helper function returns the human readable name of Manageability specifi= cation. @@ -90,4 +106,85 @@ HelperInitManageabilityTransport ( OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *TransportAdditionalSt= atus OPTIONAL ); +/** + 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_PACKAG= ES + structure. Caller has to free the memor= y + allocated for MANAGEABILITY_TRANSMISSIO= N_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_PACKAGES= 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 calculatio= n. + @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 dev= ice. + + @param[in] Payload Payload to print. + @param[in] PayloadSize Payload size. + @param[in] Format The format string for the debug message to prin= t. + @param[in] ... The variable argument list whose contents are a= ccessed + based on the format string specified by Format. + +**/ +VOID +HelperManageabilityDebugPrint ( + IN VOID *Payload, + IN UINT32 PayloadSize, + IN CONST CHAR8 *Format, + ... + ); + #endif diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHe= lperLib/BaseManageabilityTransportHelper.c b/Features/ManageabilityPkg/Libr= ary/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.c index c3f35b7beb..4c409f4680 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 // // 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; } - if (SpecificationGuid =3D=3D NULL || IsZeroGuid (SpecificationGuid)) { - DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or zero G= UID.\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; } @@ -99,12 +100,13 @@ HelperManageabilityCheckSupportedSpec ( return EFI_INVALID_PARAMETER; } - 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; } @@ -116,7 +118,7 @@ HelperManageabilityCheckSupportedSpec ( )) { DEBUG (( - DEBUG_VERBOSE, + DEBUG_MANAGEABILITY_INFO, "%a: Transport interface %s supports %s manageability specificatio= n.\n", __FUNCTION__, HelperManageabilitySpecName (TransportGuid), @@ -174,7 +176,7 @@ H= elperAcquireManageabilityTransport ( return EFI_UNSUPPORTED; } - DEBUG ((DEBUG_INFO, " Manageability protocol %s is going to acquire tra= nsport interface token...\n", ManageabilityProtocolName)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, " Manageability protocol %s is + going to acquire transport interface token...\n", + ManageabilityProtocolName)); Status =3D AcquireTransportSession (ManageabilityProtocolSpec, Transport= Token); if (Status =3D=3D EFI_UNSUPPORTED) { @@ -199,7 +201,7 @@ HelperAcquireManageabilityTransport ( return EFI_UNSUPPORTED; } - 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; } @@ -259,3 +261,206 @@ HelperInitManageabilityTransport ( 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 calculatio= n. + @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_PACKAG= ES + structure. Caller has to free the memor= y + allocated for MANAGEABILITY_TRANSMISSIO= N_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_PACKAGES= 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 MaximumTra= nsferUnit 0x%x.\n", + __FUNCTION__, + PreambleSize, + PostambleSize, + MaximumTransferUnit + )); + return EFI_INVALID_PARAMETER; + } + + PackagePayloadSize =3D MaximumTransferUnit -PreambleSize - PostambleSi= ze; + NumberOfPackages =3D (UINT16)((PayloadSize + (PackagePayloadSize - 1= )) / PackagePayloadSize); + ThisMultiplePackages =3D (MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES *)Al= locateZeroPool ( + si= zeof (MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES) + + si= zeof (MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR) * NumberOfPackages + + ); if (ThisMultiplePackages =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough memory for MANAGEABILITY_TRANSMIS= SION_MULTI_PACKAGES\n")); + return EFI_OUT_OF_RESOURCES; + } + + ThisMultiplePackages->NumberOfPackages =3D NumberOfPackages; + ThisPackage =3D (MANAGEABILITY_TRANSMISSION_P= ACKAGE_ATTR *)(ThisMultiplePackages + 1); + TotalPayloadRemaining =3D PayloadSize; + for (IndexOfPackage =3D 0; IndexOfPackage < NumberOfPackages; IndexOfPac= kage++) { + ThisPackage->PayloadPointer =3D Payload + (IndexOfPackage * PackagePay= loadSize); + ThisPackage->PayloadSize =3D MIN (TotalPayloadRemaining, PackagePay= loadSize); + TotalPayloadRemaining -=3D ThisPackage->PayloadSize; + ThisPackage++; + } + + if (TotalPayloadRemaining !=3D 0) { + DEBUG ((DEBUG_ERROR, "%a: Error processing multiple packages (TotalPay= loadRemaining !=3D 0)\n", __FUNCTION__)); + FreePool (ThisMultiplePackages); + 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 Manageab= ility Payload %04xH - %04xH =3D=3D=3D=3D=3D=3D=3D=3D=3D\n", Page256 * 256, = Page256 * 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 + Pa= ge256 * 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 dev= ice. + + @param[in] Payload Payload to print. + @param[in] PayloadSize Payload size. + @param[in] Format The format string for the debug message to prin= t. + @param[in] ... The variable argument list whose contents are a= ccessed + based on the format string specified by Format. + +**/ +VOID +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