From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (NAM04-BN8-obe.outbound.protection.outlook.com [40.107.100.90]) by mx.groups.io with SMTP id smtpd.web11.5964.1682060387824048203 for ; Thu, 20 Apr 2023 23:59:48 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="no key for verify" header.i=@amperemail.onmicrosoft.com header.s=selector1-amperemail-onmicrosoft-com header.b=7Gk4QrSe; spf=pass (domain: os.amperecomputing.com, ip: 40.107.100.90, mailfrom: tinhnguyen@os.amperecomputing.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZjkFXHP/KVa/2ApzR7jj5LXET6oSYjXCjfITQn7qtvHzUCSBqTxbPKIinLn3NfnmPqW/ktv9464mchGNvKnHwAQVIr4D37IPvVoKatnkk3wDjBu8hPT66laflXhOpSkYmI0RoWZz/C6/PuvkOcCYuTiHqbedsT8A+AO3IUUMac2pglANjxCaHsjYW/CgbnYMP2fOhRS3vr/MBRziBHOskzGV9bICEKhtpav6n1VVpnhrJQgEENa5DXSFQPt7U5H4AWHRlqfzcXaGrabTLbg3Dn+/Z5SltCiRP2EKDaBRQ2FJM90r8wyZ5qnvEdbBHReOe+Zh3CVgWLH8mCp6Z5cRBA== 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=UimyyifrT2fmF6JQSBrniN94fAyyXD0+CnytwTe/Ksk=; b=iuHEgYGTstPEGGjch3zUWmuy1PNf+72OmqvBI7Q5N/B2OBG7ig9ZQcIfqQWu9yJ3A3z6zvU7l9hWozl0utf/hH0VsIZwbnybMVhUGnaVDKCAGSL/9m0oJsf52a2NM2CCtWs5mWi/EqjaZoZSrGrbE0lqIk/EWfbsivCRgbw7NJFL8QE2cbQAY67C0DR01GvLE/aMImzoW9KifObxTJM4RytXrOSD2Wghznvd9F9W6cq24drENFL/jVmx4Y2l9ejhg24uzSgY+BRSYz0S3vWHzpkrZHIx+Nj39aDlp/z12rUNlbfzh8efvpLnqe8OsoVCPJE82fZu+usn4CPUglX1HA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=amperemail.onmicrosoft.com; dkim=pass header.d=amperemail.onmicrosoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amperemail.onmicrosoft.com; s=selector1-amperemail-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UimyyifrT2fmF6JQSBrniN94fAyyXD0+CnytwTe/Ksk=; b=7Gk4QrSep3r6iHhxIiPW8wgznt8IJNzLDZEIi83saQYKFProeyL7S9FC92L9JESZ4jMMhGi6DqjVaq+to0lyGGybU58nr0yuqGIs0po44NNVh2vQf7ek+YTSWgsIKFNcKW8RBju9jFTnVziznI36HFYOc7CRP4011B6CWHMZawU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amperemail.onmicrosoft.com; Received: from DM5PR0102MB3336.prod.exchangelabs.com (2603:10b6:4:9f::11) by CY4PR01MB2710.prod.exchangelabs.com (2603:10b6:903:df::7) 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 06:59:41 +0000 Received: from DM5PR0102MB3336.prod.exchangelabs.com ([fe80::bb9e:46d1:ae4b:caf2]) by DM5PR0102MB3336.prod.exchangelabs.com ([fe80::bb9e:46d1:ae4b:caf2%7]) with mapi id 15.20.6340.011; Fri, 21 Apr 2023 06:59:41 +0000 Message-ID: <84e90c10-4d5a-0eaf-1aa1-09dd3428af00@amperemail.onmicrosoft.com> Date: Fri, 21 Apr 2023 13:59:29 +0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [edk2-devel] [edk2-platforms][PATCH V2 02/14] ManageabilityPkg: Support Maximum Transfer Unit To: "Chang, Abner" , "devel@edk2.groups.io" CC: Isaac Oram , "Attar, AbdulLateef (Abdul Lateef)" , Nickle Wang , Igor Kulchytskyy References: <20230418071543.1951-1-abner.chang@amd.com> <20230418071543.1951-3-abner.chang@amd.com> <0e8628de-5da9-849d-db7d-ae0b6be126b1@amperemail.onmicrosoft.com> From: "Tinh Nguyen" In-Reply-To: X-ClientProxiedBy: SG3P274CA0015.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::27) To DM5PR0102MB3336.prod.exchangelabs.com (2603:10b6:4:9f::11) Return-Path: tinhnguyen@os.amperecomputing.com MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM5PR0102MB3336:EE_|CY4PR01MB2710:EE_ X-MS-Office365-Filtering-Correlation-Id: b65342a6-08a7-4659-28a7-08db4235fa8f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UoFXJJP6ypbLYaszN+AeDgUhp81fn9X8I9gF8T1lH827/8Z7aeLAJ2oHCcaIxrlwS3G4RON1NdEB8ZIokzIHmmOimMWkgzCBmtl9WlUcO+IjHdbFskNEvu3QfmgDyDmrUrDsLZ40upOkk9CF6yrbjR3K1Q8uUAdmwNhddAiq7autbB2zARSBg2krY2elQCytXrj1so0mPsp6hNZHkZH7WLBD7vb5wrazyPeJQcMVCHr7t9iIyxnqPYPYxwfosugseXVnrPc1nTSnkXjQXzgWdcJe1ekcwgKvSa96YG1EKQ/Ztb4pHJxWGCMs+XAMDkYU2vndf57lDtCpCLw5/y4YWSu1w98JYmwTmck2jHPNE1/91/72YWnUQRBC6qo2elnhRB4YhFdpSzhesCJevZUHzio1iPwpAyodrnC4fFqXH/JrwOQvT46akzG8oLhCqKoTVblCN7NVd/DtRSMCKA4R95ehZQCQV97tT4ITAl/6qTl5WRBEkaflJoiyOgugvUr/lapYPYd6t318vRoKVqalbV/vI1Aw+LBc2z/dLjDtuoMmVd3gE8eL7nThHorplaqa4o6fptSjpSryux2iAN0evqWEbx8r9TtSpd4Qu4muX3DD21mkE0LN7PPaJyy43pdVNoSI2Md0rm/BZK/815JSFw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM5PR0102MB3336.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(366004)(396003)(136003)(346002)(39850400004)(451199021)(110136005)(19627235002)(54906003)(5660300002)(31696002)(478600001)(316002)(41300700001)(8936002)(8676002)(38100700002)(66946007)(83170400001)(66556008)(66476007)(4326008)(6512007)(30864003)(53546011)(26005)(6506007)(2906002)(186003)(31686004)(42882007)(83380400001)(2616005)(6666004)(6486002)(43740500002)(44824005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xTxM09V2qaRuJzw8DnYhzb4S5P9iDzkCIfFbf8PHT9ELt11Llj6P8w/qPd9H?= =?us-ascii?Q?1aomk5JcUuTp2BDCWD3UA04GNXh6NOVuB4i76pFinY6vdXNjXnnWQR5ONkEk?= =?us-ascii?Q?n3f4x4CpxusfNofMQ8NL80tIaK3IDOI+xI6g/MZUnVLxTsg4LAUcBz6Vhudd?= =?us-ascii?Q?NzvDtc8eCTajBSZIPmdkrWrat7gcajtE+jLDBlioLENftu6JCbN50I2ufGDH?= =?us-ascii?Q?BGKzfHyD3NHkX80rKDAlfPDg3W6m6iDROpEBXqWtW5agdm+aqt7j4rkoVbmh?= =?us-ascii?Q?MWWNpcZKAmCLEwFoUFxnF2MrGau5Hz1jqFoUk+2HmfMl4F2O5i81pQIZDJ1+?= =?us-ascii?Q?n/IihUzK4bAturpXM5UZeQNQdd5xd/ntJFi0MIU0xpvkAeKXjnJk1xlJ018+?= =?us-ascii?Q?R02Qh9TOMII2u8hQIPR/mVYh4vEb0fduhtG9uy8YE8tA2Kp9et8mTtAoEyWN?= =?us-ascii?Q?M426UNVrf7Wyi/UkZLd6AwHG+SD/sfvmCt51dNPedlrhZfT1kIhk3xAgdCgs?= =?us-ascii?Q?cCQC+E+nA93a5sYcjr4uwB+NSk8CgEbxZYXHqdf7aTWqTdTD9TnkKmPBG8OU?= =?us-ascii?Q?aUqg5unUtI8+0+qlEiLxXlPpP5a6DaaKzBTFO9vK8BZHLYIudrR8aaBDrSJg?= =?us-ascii?Q?k0nowi/UTIGwLfJ9aGnnJW3jdz59koQ00rZ51n+wJ4OxR8jDxys+GXm3BbBK?= =?us-ascii?Q?9IgTWWmot/WRH9NW9PZiqyFipMqHotRqSnfCUeTVuR0sQr9sSl6Sst/xKyTO?= =?us-ascii?Q?o4YR03PYQZOBxVXkZgjsvuXqgR2mqUn1wGuyWHe68soByHbr+AQCSDx1Ep2l?= =?us-ascii?Q?BIzTIq7hvA2d9b/FGBUCNUyuhVYJz1vCho27iwaUbHSswCOIyALMOdVfyIAx?= =?us-ascii?Q?nOqme1Xhw1g179KEjXGAO95DSGjS7WOljMeZzH74wSnTJBOrDpBs7vKwKxfn?= =?us-ascii?Q?17+Uoux6IfggBbS2yjiM7iLfH1+Ho+CKt77NMXw72J3QxFjR2+7aOkcKgC3q?= =?us-ascii?Q?bDY45t0cXCYKpmM4WaUF7zq+totaOcdZJb2uyrzEPvHm6XLFcNHcGrLFlKCC?= =?us-ascii?Q?34usSMVfXt/N/vXt+bX0ocAX6zrrqgd8QC2DHjG9Cih9rz2lpIpWXywTgLSK?= =?us-ascii?Q?gSdTvXGEeGpAzavPocrjoilOUNwKU3LpnK1V1fsuKXVNr0JElSaZGNfyWzse?= =?us-ascii?Q?GQFAYbSEmsUJo3kUmSFqy3gFjRp5b3D4QjxR35y3EhvvE3YRURCY6SahscPD?= =?us-ascii?Q?DlJk6/z9JbClGyk1pEqHGn46ZXFiu+vAr0fe2jFg6qXQmGCDtLYAkUQLlZTu?= =?us-ascii?Q?b/xlnsMMAeLPEkn3jf7Dcv7k3qXRDNYC/+xShOirGE0DUgJs70GJAjZMpKyA?= =?us-ascii?Q?EoQLRwjKiNpexOy8BHW9auHlO43qCJ4lZ4MqMluEYuDfSPQDog7ati+N9eg2?= =?us-ascii?Q?2Nn8NIO+m5IGl8ylFXL7zHXpJUej6Gy1q+MOLnKavzjmTDHucFq7R4anVGbF?= =?us-ascii?Q?pbDB7S+XvJX6L3hKY7Mijha1/u+er6tWrQxi4oED+F7fwQN5Rx8Vq+Rtlwtq?= =?us-ascii?Q?tTfsDbwZ8OTGddrTSmJu/yb1g6P7PIPOD+jzwqWhYYZl0YGUtDpZoSXanBGu?= =?us-ascii?Q?PzGO3teAU7dB4yO9ZIch5qc=3D?= X-OriginatorOrg: amperemail.onmicrosoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: b65342a6-08a7-4659-28a7-08db4235fa8f X-MS-Exchange-CrossTenant-AuthSource: DM5PR0102MB3336.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 06:59:41.0507 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vpWGGsl/KYoROWSZTe4sn6Qbg7mXggqSL4gOOkhKP02D14ZwE1x6ELIw1Fpoe3Co0ftx5203hO0ZvyLEX0kPcmP1M7+DLANP1Nfkqk7Tv9YqkJVW3eXSUn3J5r1WFrX6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR01MB2710 Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 4/21/2023 7:51 AM, Chang, Abner wrote: > [EXTERNAL EMAIL NOTICE: This email originated from an external sender. Pl= ease be mindful of safe email handling and proprietary information protecti= on practices.] > > > [AMD Official Use Only - General] > > > >> -----Original Message----- >> From: Tinh Nguyen >> Sent: Thursday, April 20, 2023 2:08 PM >> To: devel@edk2.groups.io; Chang, Abner >> Cc: Isaac Oram ; Attar, AbdulLateef (Abdul Latee= f) >> ; Nickle Wang ; Igor >> Kulchytskyy >> Subject: Re: [edk2-devel] [edk2-platforms][PATCH V2 02/14] >> ManageabilityPkg: Support Maximum Transfer Unit >> >> Caution: This message originated from an External Source. Use proper >> caution when opening attachments, clicking links, or responding. >> >> >> Hi Abner, >> >> I have some inline comments below >> >> On 18/04/2023 14:15, Chang, Abner via groups.io wrote: >>> From: Abner Chang >>> >>> Update GetTransportCapability to support Maximum Transfer Unit (MTU) >>> of transport interface. >>> >>> Signed-off-by: Abner Chang >>> Cc: Isaac Oram >>> Cc: Abdul Lateef Attar >>> Cc: Nickle Wang >>> Cc: Igor Kulchytskyy >>> --- >>> .../Library/ManageabilityTransportLib.h | 33 ++++++++--- >>> .../Common/ManageabilityTransportKcs.h | 2 + >>> .../IpmiProtocol/Pei/IpmiPpiInternal.h | 8 ++- >>> .../BaseManageabilityTransportNull.c | 18 ++++-- >>> .../Dxe/ManageabilityTransportKcs.c | 57 +++++++++++------= -- >>> .../Universal/IpmiProtocol/Dxe/IpmiProtocol.c | 24 ++++++-- >>> .../Universal/IpmiProtocol/Pei/IpmiPpi.c | 51 ++++++++++------- >>> .../Universal/IpmiProtocol/Smm/IpmiProtocol.c | 24 ++++++-- >>> 8 files changed, 145 insertions(+), 72 deletions(-) >>> >>> diff --git >>> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib. >>> h >>> b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib. >>> h >>> index c022b4ac5c..d86d0d87d5 100644 >>> --- >>> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib. >>> h >>> +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransport >>> +++ Lib.h >>> @@ -14,6 +14,9 @@ >>> #define MANAGEABILITY_TRANSPORT_TOKEN_VERSION >> ((MANAGEABILITY_TRANSPORT_TOKEN_VERSION_MAJOR << 8) |\ >>> MANAGEABILITY_TRANSPORT_TOKEN_VERSION_MINOR) >>> >>> +#define >> MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY(a) (1 << >> ((a & >> MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_MASK) >>>> \ >>> + >>> >> +MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_BIT_PO >> SITION)) >>> + >>> typedef struct _MANAGEABILITY_TRANSPORT_FUNCTION_V1_0 >> MANAGEABILITY_TRANSPORT_FUNCTION_V1_0; >>> typedef struct _MANAGEABILITY_TRANSPORT >> MANAGEABILITY_TRANSPORT; >>> typedef struct _MANAGEABILITY_TRANSPORT_TOKEN >> MANAGEABILITY_TRANSPORT_TOKEN; >>> @@ -68,8 +71,17 @@ typedef UINT32 >> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS; >>> /// Additional transport interface features. >>> /// >>> typedef UINT32 MANAGEABILITY_TRANSPORT_CAPABILITY; >>> +/// Bit 0 >>> #define >> MANAGEABILITY_TRANSPORT_CAPABILITY_MULTIPLE_TRANSFER_TOKENS >> 0x00000001 >>> -#define >> MANAGEABILITY_TRANSPORT_CAPABILITY_ASYNCHRONOUS_TRANSFER >> 0x00000002 >>> +/// Bit 1 >>> +#define >> MANAGEABILITY_TRANSPORT_CAPABILITY_ASYNCHRONOUS_TRANSFER >> 0x00000002 >>> +/// Bit 2 - Reserved >>> +/// Bit 7:3 - Transport interface maximum payload size, which is (2 ^ = bit[7:3] >> - 1) >>> +/// bit[7:3] means no maximum payload. >> I am confused with your definition here. >> >> Why does it have to be a power of 2? > Usually the maximum/minimum is in power of 2 and use power of 2 has less= bits occupied from MANAGEABILITY_TRANSPORT_CAPABILITY. yes, that is usually,=C2=A0 but specification does not require it. I concer= n=20 that someone will implement another size of payload > >> And we should separate request payload size and response payload size >> >> Can you clarify more about that? > Do we really need the maximum size for response? Response is initiated by= target endpoint and suppose the payload header should have some fields tha= t indicate the return payload is only part of response. Agree, I also just use it for validation. > The size of payload returned is actually maximum transfer size that tar= get endpoint can handle. > Do you know any case that receiver has no idea about if the payload sent = back from target endpoint is a partial of response or not? We should have = MTU response if it is required for the transport interface. > >> Another question, only PEI_IPMI_PPI_INTERNAL contains MaxPayloadSize, > PPI has MaxPayloadSize in structure is because we can't define a global v= ariable for PEI module as module is executed in place. > >> how do IPMI/MCTP/PLDM protocol provide Maxpayloadsize > For DXE drivers, the Maxpayloadsize is defined as global variable. I think we should take note somewhere > >> to caller? >> >>> +#define >> MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_MASK >> 0x000000f8 >>> +#define >> MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_BIT_POS >> ITION 3 >>> +#define >>> >> +MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_A >> VAILABLE >>> +0x00 /// Bit 8:31 - Reserved >>> >>> /// >>> /// Definitions of Manageability transport interface functions. >>> @@ -187,15 +199,20 @@ AcquireTransportSession ( >>> ); >>> >>> /** >>> - This function returns the transport capabilities. >>> - >>> - @param [out] TransportFeature Pointer to receive transport >> capabilities. >>> - See the definitions of >>> - MANAGEABILITY_TRANSPORT_CAPABI= LITY. >>> - >>> + This function returns the transport capabilities according to the >>> + manageability protocol. >>> + >>> + @param [in] TransportToken Transport token acquired fr= om >> manageability >>> + transport library. >>> + @param [out] TransportFeature Pointer to receive transpor= t >> capabilities. >>> + See the definitions of >>> + MANAGEABILITY_TRANSPORT_CAP= ABILITY. >>> + @retval EFI_SUCCESS TransportCapability is retu= rned >> successfully. >>> + @retval EFI_INVALID_PARAMETER TransportToken is not a val= id >> token. >>> **/ >>> -VOID >>> +EFI_STATUS >>> GetTransportCapability ( >>> + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, >>> OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability >>> ); >>> >>> diff --git >>> >> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Commo >>> n/ManageabilityTransportKcs.h >>> >> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Comm >> o >>> n/ManageabilityTransportKcs.h >>> index f1758ffd8f..2cdf60ba7e 100644 >>> --- >>> >> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Commo >>> n/ManageabilityTransportKcs.h >>> +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/C >>> +++ ommon/ManageabilityTransportKcs.h >>> @@ -32,6 +32,8 @@ typedef struct { >>> #define IPMI_KCS_GET_STATE(s) (s >> 6) >>> #define IPMI_KCS_SET_STATE(s) (s << 6) >>> >>> +#define MCTP_KCS_MTU_IN_POWER_OF_2 8 >>> + >>> /// 5 sec, according to IPMI spec >>> #define IPMI_KCS_TIMEOUT_5_SEC 5000*1000 >>> #define IPMI_KCS_TIMEOUT_1MS 1000 >>> diff --git >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal >>> .h >>> b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal >>> .h >>> index bbe0c8c5cb..4b6bdc97a9 100644 >>> --- >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal >>> .h >>> +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInte >>> +++ rnal.h >>> @@ -17,9 +17,11 @@ >>> #define MANAGEABILITY_IPMI_PPI_INTERNAL_FROM_LINK(a) CR (a, >>> PEI_IPMI_PPI_INTERNAL, PeiIpmiPpi, >>> MANAGEABILITY_IPMI_PPI_INTERNAL_SIGNATURE) >>> >>> typedef struct { >>> - UINT32 Signature; >>> - MANAGEABILITY_TRANSPORT_TOKEN *TransportToken; >>> - PEI_IPMI_PPI PeiIpmiPpi; >>> + UINT32 Signature; >>> + MANAGEABILITY_TRANSPORT_TOKEN *TransportToken; >>> + MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; >>> + UINT32 TransportMaximumPayload; >>> + PEI_IPMI_PPI PeiIpmiPpi; >>> } PEI_IPMI_PPI_INTERNAL; >>> >>> #endif // MANAGEABILITY_IPMI_PPI_INTERNAL_H_ >>> diff --git >>> a/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/ >>> BaseManageabilityTransportNull.c >>> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/ >>> BaseManageabilityTransportNull.c >>> index 49fc8c0f71..3aa68578a6 100644 >>> --- >>> a/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/ >>> BaseManageabilityTransportNull.c >>> +++ >> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportNull >>> +++ Lib/BaseManageabilityTransportNull.c >>> @@ -31,19 +31,25 @@ AcquireTransportSession ( >>> } >>> >>> /** >>> - This function returns the transport capabilities. >>> - >>> - @param [out] TransportFeature Pointer to receive transport >> capabilities. >>> - See the definitions of >>> - MANAGEABILITY_TRANSPORT_CAPABI= LITY. >>> + This function returns the transport capabilities according to the >>> + manageability protocol. >>> >>> + @param [in] TransportToken Transport token acquired fr= om >> manageability >>> + transport library. >>> + @param [out] TransportFeature Pointer to receive transpor= t >> capabilities. >>> + See the definitions of >>> + MANAGEABILITY_TRANSPORT_CAP= ABILITY. >>> + @retval EFI_SUCCESS TransportCapability is retu= rned >> successfully. >>> + @retval EFI_INVALID_PARAMETER TransportToken is not a val= id >> token. >>> **/ >>> -VOID >>> +EFI_STATUS >>> GetTransportCapability ( >>> + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, >>> OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability >>> ) >>> { >>> *TransportCapability =3D 0; >>> + return EFI_SUCCESS; >>> } >>> >>> /** >>> diff --git >>> >> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/M >>> anageabilityTransportKcs.c >>> >> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/M >>> anageabilityTransportKcs.c >>> index ab416e5449..7d85378fc1 100644 >>> --- >>> >> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/M >>> anageabilityTransportKcs.c >>> +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/D >>> +++ xe/ManageabilityTransportKcs.c >>> @@ -62,7 +62,7 @@ KcsTransportInit ( >>> } >>> >>> if (HardwareInfo.Kcs =3D=3D NULL) { >>> - DEBUG ((DEBUG_INFO, "%a: Hardware information is not provided, use >> dfault settings.\n", __FUNCTION__)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Hardware information is >>> + not provided, use dfault settings.\n", __FUNCTION__)); >>> mKcsHardwareInfo.MemoryMap =3D >> MANAGEABILITY_TRANSPORT_KCS_IO_MAP_IO; >>> mKcsHardwareInfo.IoBaseAddress.IoAddress16 =3D PcdGet16 >> (PcdIpmiKcsIoBaseAddress); >>> mKcsHardwareInfo.IoDataInAddress.IoAddress16 =3D >>> mKcsHardwareInfo.IoBaseAddress.IoAddress16 + >> IPMI_KCS_DATA_IN_REGISTER_OFFSET; @@ -81,21 +81,21 @@ >> KcsTransportInit ( >>> // Get protocol specification name. >>> ManageabilityProtocolName =3D HelperManageabilitySpecName >>> (TransportToken->ManageabilityProtocolSpecification); >>> >>> - DEBUG ((DEBUG_INFO, "%a: KCS transport hardware for %s is:\n", >>> __FUNCTION__, ManageabilityProtocolName)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: KCS transport hardware >> for >>> + %s is:\n", __FUNCTION__, ManageabilityProtocolName)); >>> if (mKcsHardwareInfo.MemoryMap) { >>> - DEBUG ((DEBUG_INFO, "Memory Map I/O\n", __FUNCTION__)); >>> - DEBUG ((DEBUG_INFO, "Base Memory Address : 0x%08x\n", >> mKcsHardwareInfo.IoBaseAddress.IoAddress32)); >>> - DEBUG ((DEBUG_INFO, "Data in Address : 0x%08x\n", >> mKcsHardwareInfo.IoDataInAddress.IoAddress32)); >>> - DEBUG ((DEBUG_INFO, "Data out Address : 0x%08x\n", >> mKcsHardwareInfo.IoDataOutAddress.IoAddress32)); >>> - DEBUG ((DEBUG_INFO, "Command Address : 0x%08x\n", >> mKcsHardwareInfo.IoCommandAddress.IoAddress32)); >>> - DEBUG ((DEBUG_INFO, "Status Address : 0x%08x\n", >> mKcsHardwareInfo.IoStatusAddress.IoAddress32)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Memory Map I/O\n", >> __FUNCTION__)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Base Memory Address : >> 0x%08x\n", mKcsHardwareInfo.IoBaseAddress.IoAddress32)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data in Address : >> 0x%08x\n", mKcsHardwareInfo.IoDataInAddress.IoAddress32)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data out Address : >> 0x%08x\n", mKcsHardwareInfo.IoDataOutAddress.IoAddress32)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Command Address : >> 0x%08x\n", mKcsHardwareInfo.IoCommandAddress.IoAddress32)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Status Address : >> 0x%08x\n", mKcsHardwareInfo.IoStatusAddress.IoAddress32)); >>> } else { >>> - DEBUG ((DEBUG_INFO, "I/O Map I/O\n")); >>> - DEBUG ((DEBUG_INFO, "Base I/O port : 0x%04x\n", >> mKcsHardwareInfo.IoBaseAddress.IoAddress16)); >>> - DEBUG ((DEBUG_INFO, "Data in I/O port : 0x%04x\n", >> mKcsHardwareInfo.IoDataInAddress.IoAddress16)); >>> - DEBUG ((DEBUG_INFO, "Data out I/O port: 0x%04x\n", >> mKcsHardwareInfo.IoDataOutAddress.IoAddress16)); >>> - DEBUG ((DEBUG_INFO, "Command I/O port : 0x%04x\n", >> mKcsHardwareInfo.IoCommandAddress.IoAddress16)); >>> - DEBUG ((DEBUG_INFO, "Status I/O port : 0x%04x\n", >> mKcsHardwareInfo.IoStatusAddress.IoAddress16)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "I/O Map I/O\n")); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Base I/O port : 0x%04x\n", >> mKcsHardwareInfo.IoBaseAddress.IoAddress16)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data in I/O port : 0x%04x\n", >> mKcsHardwareInfo.IoDataInAddress.IoAddress16)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data out I/O port: >> 0x%04x\n", mKcsHardwareInfo.IoDataOutAddress.IoAddress16)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Command I/O port : >> 0x%04x\n", mKcsHardwareInfo.IoCommandAddress.IoAddress16)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Status I/O port : 0x%04x\n", >>> + mKcsHardwareInfo.IoStatusAddress.IoAddress16)); >>> } >> if those code is just for debugging, you should put them into >> DEBUG_CODE_BEGIN() and DEBUG_CODE_END() > DEBUG_MANAGEABILITY is got approval and we can use that to enable the pri= nt error level for Manageability stuff. Use DEBUG_CODE_BEGIN requires user = to enable DEBUG_PROPERTY_DEBUG_CODE_ENABLED additionally, it saves ROM size= though. > How do you think? Which way is convenient to users and also have a good c= ode structure? I do not believe ROM size is an issue of the system which can support=20 those features, so let's keep them > Thanks > Abner > >>> return EFI_SUCCESS; >>> @@ -221,7 +221,7 @@ KcsTransportTransmitReceive ( >>> EFI_STATUS Status; >>> MANAGEABILITY_IPMI_TRANSPORT_HEADER *TransmitHeader; >>> >>> - if (TransportToken =3D=3D NULL || TransferToken =3D=3D NULL) { >>> + if ((TransportToken =3D=3D NULL) || (TransferToken =3D=3D NULL)) { >>> DEBUG ((DEBUG_ERROR, "%a: Invalid transport token or transfer >> token.\n", __FUNCTION__)); >>> return; >>> } >>> @@ -298,6 +298,7 @@ AcquireTransportSession ( >>> DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for >> MANAGEABILITY_TRANSPORT_KCS\n", __FUNCTION__)); >>> return EFI_OUT_OF_RESOURCES; >>> } >>> + >>> KcsTransportToken->Token.Transport =3D AllocateZeroPool (sizeof >> (MANAGEABILITY_TRANSPORT)); >>> if (KcsTransportToken->Token.Transport =3D=3D NULL) { >>> FreePool (KcsTransportToken); >>> @@ -329,21 +330,29 @@ AcquireTransportSession ( >>> } >>> >>> /** >>> - This function returns the transport capabilities. >>> - >>> - @param [out] TransportFeature Pointer to receive transport >> capabilities. >>> - See the definitions of >>> - MANAGEABILITY_TRANSPORT_CAPABI= LITY. >>> - >>> + This function returns the transport capabilities according to the >>> + manageability protocol. >>> + >>> + @param [in] TransportToken Transport token acquired fr= om >> manageability >>> + transport library. >>> + @param [out] TransportFeature Pointer to receive transpor= t >> capabilities. >>> + See the definitions of >>> + MANAGEABILITY_TRANSPORT_CAP= ABILITY. >>> + @retval EFI_SUCCESS TransportCapability is retu= rned >> successfully. >>> + @retval EFI_INVALID_PARAMETER TransportToken is not a val= id >> token. >>> **/ >>> -VOID >>> +EFI_STATUS >>> GetTransportCapability ( >>> + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, >>> OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability >>> ) >>> { >>> - if (TransportCapability !=3D NULL) { >>> - *TransportCapability =3D 0; >>> + if ((TransportToken =3D=3D NULL) || (TransportCapability =3D=3D NULL= )) { >>> + return EFI_INVALID_PARAMETER; >>> } >>> + >>> + *TransportCapability =3D 0; >>> + return EFI_SUCCESS; >>> } >>> >>> /** >>> diff --git >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol.c >>> b/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol.c >>> index 05175ee448..51d5c7f0ba 100644 >>> --- >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol.c >>> +++ >> b/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtoco >>> +++ l.c >>> @@ -17,9 +17,9 @@ >>> >>> #include "IpmiProtocolCommon.h" >>> >>> -MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; >>> -CHAR16 *mTransportName; >>> - >>> +MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NUL= L; >>> +CHAR16 *mTransportName; >>> +UINT32 TransportMaximumPayload; >>> MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION >> mHardwareInformation; >>> /** >>> @@ -92,8 +92,6 @@ DxeIpmiEntry ( >>> MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; >>> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS >>> TransportAdditionalStatus; >>> >>> - GetTransportCapability (&TransportCapability); >>> - >>> Status =3D HelperAcquireManageabilityTransport ( >>> &gManageabilityProtocolIpmiGuid, >>> &mTransportToken >>> @@ -103,8 +101,22 @@ DxeIpmiEntry ( >>> return Status; >>> } >>> >>> + Status =3D GetTransportCapability (mTransportToken, >>> + &TransportCapability); if (EFI_ERROR (Status)) { >>> + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", >> __FUNCTION__)); >>> + return Status; >>> + } >>> + >>> + TransportMaximumPayload =3D >>> + MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY >> (TransportCapability); if (TransportMaximumPayload =3D=3D (1 << >> MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AV >> AILABLE)) { >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface >>> + maximum payload is undefined.\n", __FUNCTION__)); } else { >>> + TransportMaximumPayload -=3D 1; >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for >>> + IPMI protocol has maximum payload %x.\n", __FUNCTION__, >>> + TransportMaximumPayload)); } >>> + >>> mTransportName =3D HelperManageabilitySpecName >>> (mTransportToken->Transport->ManageabilityTransportSpecification); >>> - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, >>> mTransportName)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over >> %s.\n", >>> + __FUNCTION__, mTransportName)); >>> >>> // >>> // Setup hardware information according to the transport interface= . >>> diff --git >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c >>> b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c >>> index f839cd7387..8bf1e794f0 100644 >>> --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c >>> +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c >>> @@ -51,19 +51,19 @@ PeiIpmiSubmitCommand ( >>> IN OUT UINT32 *ResponseDataSize >>> ) >>> { >>> - EFI_STATUS Status; >>> - PEI_IPMI_PPI_INTERNAL *PeiIpmiPpiinternal; >>> - >>> - PeiIpmiPpiinternal =3D >>> MANAGEABILITY_IPMI_PPI_INTERNAL_FROM_LINK(This); >>> - Status =3D CommonIpmiSubmitCommand ( >>> - PeiIpmiPpiinternal->TransportToken, >>> - NetFunction, >>> - Command, >>> - RequestData, >>> - RequestDataSize, >>> - ResponseData, >>> - ResponseDataSize >>> - ); >>> + EFI_STATUS Status; >>> + PEI_IPMI_PPI_INTERNAL *PeiIpmiPpiinternal; >>> + >>> + PeiIpmiPpiinternal =3D MANAGEABILITY_IPMI_PPI_INTERNAL_FROM_LINK >> (This); >>> + Status =3D CommonIpmiSubmitCommand ( >>> + PeiIpmiPpiinternal->TransportToken, >>> + NetFunction, >>> + Command, >>> + RequestData, >>> + RequestDataSize, >>> + ResponseData, >>> + ResponseDataSize >>> + ); >>> return Status; >>> } >>> >>> @@ -87,29 +87,28 @@ PeiIpmiEntry ( >>> CHAR16 *TransportName; >>> PEI_IPMI_PPI_INTERNAL *PeiIpmiPpiinternal; >>> EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; >>> - MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; >>> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS >> TransportAdditionalStatus; >>> MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION >> HardwareInformation; >>> - PeiIpmiPpiinternal =3D (PEI_IPMI_PPI_INTERNAL *)AllocateZeroPool >>> (sizeof(PEI_IPMI_PPI_INTERNAL)); >>> + PeiIpmiPpiinternal =3D (PEI_IPMI_PPI_INTERNAL *)AllocateZeroPool >>> + (sizeof (PEI_IPMI_PPI_INTERNAL)); >>> if (PeiIpmiPpiinternal =3D=3D NULL) { >>> DEBUG ((DEBUG_ERROR, "%a: Not enough memory for >> PEI_IPMI_PPI_INTERNAL.\n", __FUNCTION__)); >>> return EFI_OUT_OF_RESOURCES; >>> } >>> - PpiDescriptor =3D (EFI_PEI_PPI_DESCRIPTOR *)AllocateZeroPool >>> (sizeof(EFI_PEI_PPI_DESCRIPTOR)); >>> + >>> + PpiDescriptor =3D (EFI_PEI_PPI_DESCRIPTOR *)AllocateZeroPool (sizeof >>> + (EFI_PEI_PPI_DESCRIPTOR)); >>> if (PpiDescriptor =3D=3D NULL) { >>> DEBUG ((DEBUG_ERROR, "%a: Not enough memory for >> EFI_PEI_PPI_DESCRIPTOR.\n", __FUNCTION__)); >>> return EFI_OUT_OF_RESOURCES; >>> } >>> >>> - PeiIpmiPpiinternal->Signature =3D >>> MANAGEABILITY_IPMI_PPI_INTERNAL_SIGNATURE; >>> + PeiIpmiPpiinternal->Signature =3D >> MANAGEABILITY_IPMI_PPI_INTERNAL_SIGNATURE; >>> PeiIpmiPpiinternal->PeiIpmiPpi.IpmiSubmitCommand =3D >>> PeiIpmiSubmitCommand; >>> >>> PpiDescriptor->Flags =3D EFI_PEI_PPI_DESCRIPTOR_PPI | >> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST; >>> PpiDescriptor->Guid =3D &gPeiIpmiPpiGuid; >>> PpiDescriptor->Ppi =3D &PeiIpmiPpiinternal->PeiIpmiPpi; >>> >>> - GetTransportCapability (&TransportCapability); >>> Status =3D HelperAcquireManageabilityTransport ( >>> &gManageabilityProtocolIpmiGuid, >>> &PeiIpmiPpiinternal->TransportToken >>> @@ -119,8 +118,22 @@ PeiIpmiEntry ( >>> return Status; >>> } >>> >>> + Status =3D GetTransportCapability >>> + (PeiIpmiPpiinternal->TransportToken, >>> + &PeiIpmiPpiinternal->TransportCapability); >>> + if (EFI_ERROR (Status)) { >>> + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", >> __FUNCTION__)); >>> + return Status; >>> + } >>> + >>> + PeiIpmiPpiinternal->TransportMaximumPayload =3D >>> + MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY >>> + (PeiIpmiPpiinternal->TransportCapability); >>> + if (PeiIpmiPpiinternal->TransportMaximumPayload =3D=3D (1 << >> MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AV >> AILABLE)) { >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface >>> + maximum payload is undefined.\n", __FUNCTION__)); } else { >>> + PeiIpmiPpiinternal->TransportMaximumPayload -=3D 1; >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for >>> + IPMI protocol has maximum payload 0x%x.\n", __FUNCTION__, >>> + PeiIpmiPpiinternal->TransportMaximumPayload)); >>> + } >>> + >>> TransportName =3D HelperManageabilitySpecName >>> (PeiIpmiPpiinternal->TransportToken->Transport->ManageabilityTransport >>> Specification); >>> - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, >>> TransportName)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over >> %s.\n", >>> + __FUNCTION__, TransportName)); >>> >>> // >>> // Setup hardware information according to the transport interface= . >>> diff --git >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c >>> >> b/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c >>> index 87a5436bdf..e4cd166b7a 100644 >>> --- >>> a/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c >>> +++ >> b/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtoco >>> +++ l.c >>> @@ -18,9 +18,9 @@ >>> >>> #include "IpmiProtocolCommon.h" >>> >>> -MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; >>> -CHAR16 *mTransportName; >>> - >>> +MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NUL= L; >>> +CHAR16 *mTransportName; >>> +UINT32 TransportMaximumPayload; >>> MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION >> mHardwareInformation; >>> /** >>> @@ -93,8 +93,6 @@ SmmIpmiEntry ( >>> MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; >>> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS >>> TransportAdditionalStatus; >>> >>> - GetTransportCapability (&TransportCapability); >>> - >>> Status =3D HelperAcquireManageabilityTransport ( >>> &gManageabilityProtocolIpmiGuid, >>> &mTransportToken >>> @@ -104,8 +102,22 @@ SmmIpmiEntry ( >>> return Status; >>> } >>> >>> + Status =3D GetTransportCapability (mTransportToken, >>> + &TransportCapability); if (EFI_ERROR (Status)) { >>> + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", >> __FUNCTION__)); >>> + return Status; >>> + } >>> + >>> + TransportMaximumPayload =3D >>> + MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY >> (TransportCapability); if (TransportMaximumPayload =3D=3D (1 << >> MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AV >> AILABLE)) { >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface >>> + maximum payload is undefined.\n", __FUNCTION__)); } else { >>> + TransportMaximumPayload -=3D 1; >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for >>> + IPMI protocol has maximum payload 0x%x.\n", __FUNCTION__, >>> + TransportMaximumPayload)); } >>> + >>> mTransportName =3D HelperManageabilitySpecName >>> (mTransportToken->Transport->ManageabilityTransportSpecification); >>> - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, >>> mTransportName)); >>> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over >> %s.\n", >>> + __FUNCTION__, mTransportName)); >>> >>> // >>> // Setup hardware information according to the transport interface= .