From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web11.4372.1675135036615898509 for ; Mon, 30 Jan 2023 19:17:16 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=mC8uDe3H; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: gua.guo@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675135036; x=1706671036; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=qCL6v+jraw/BOAOwoXe3NZpxe9uYn9acursVIDcq1Do=; b=mC8uDe3HSaUFn84Ob276gDlsqzBXhU5b+ErApgOS+1QdUtvAMZJKVVVw Iq3Z8cOwjRSrOd12iRVfv8mn+o3/QRI04zQohny37yLnPAElS4m0XSfes mIxzihABAy1Jb1CWBwTaJfrpS8149/z4UP96JTfIbTCv/UqMlD6xzQUdt KX6ry1Xb+alyDbsautpMFRL2o2iEBRCR70xPI+dO6a2ieaeWtpWJFKQQP kQXCVGKq7bp/TMWvN9VWWwQGAH+Djo2jw92vddj+ZXmdTOfttyftCEwh4 zL8SmuATsBmnLt4tQXTlp6OOc5O+QjjfNmyKcJfDzh94UxyxS433Q1ZIp g==; X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="329011308" X-IronPort-AV: E=Sophos;i="5.97,259,1669104000"; d="scan'208";a="329011308" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jan 2023 19:17:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="727760367" X-IronPort-AV: E=Sophos;i="5.97,259,1669104000"; d="scan'208";a="727760367" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga008.fm.intel.com with ESMTP; 30 Jan 2023 19:17:15 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Mon, 30 Jan 2023 19:17:15 -0800 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Mon, 30 Jan 2023 19:17:14 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.172) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Mon, 30 Jan 2023 19:17:13 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RVIyrfAPnQlBgbeNFbU87a/FeYsiCik76yZm1FI6oPvQtjIrsFdxqvbNS6BmmmALG47hmncJLOphZSwvBMu3LBL+rOSgVPRq4SPdZATJXucz/+5R+zNN28GLtQ6B4IJ7Pbj4VRs5PH028Tq0AQUFf9w/lUF1i3FcIs1idNpy/0XAMGyGFJZWdjNzCYid93IBEwPS/gAyTqzZLjmcJGwVGWQjKlQnK1Ttalp1Z1njUoLWp8xjkcpZU7nnzWZFh8bOrnzDFkVoTRGzrNKgKQlRpOlMPsBOcifQsViqWcEYdbvKDC5UcodVnPY06SUZhr8lT/q8IyyzOAsDTUrEGpS/Pg== 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=i50ILjcpfukybO47oskfIPf0m+NJ6nYUvpJFZ5uAobU=; b=B0YBk5cNQvG51OW4bxdyIXrV862bWcmrP5EfgY5RlDs50134oLIMZ/EZyV8N6gL7vMjlXeQtN92L6At7UcnciWkbH4N7QH53yCHlHbkoYuzcC+Q5QmTdqdD+sJJP9mn8oUdoZ7kl796VVaZ+6PKMGPREY3wZx6hZcexY4aIQs09gdNp5ufn59+o7avw8CRT1Q2kaAW8W74odqzVeAoiTVMoj7ULTAsu6SSnbg4B6YuQ/aes6xSU+TSOO7gNeOmaAXi4DfFYwPooiEobOiUwiPtpUy6bixFxy8o7sAjIgNtuDmihk8OsRqVFuHWIK/FKn125IaIzl3w1byx4FUoiH2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by SA2PR11MB5194.namprd11.prod.outlook.com (2603:10b6:806:118::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.36; Tue, 31 Jan 2023 03:17:11 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::ee18:f0d6:8983:5a24]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::ee18:f0d6:8983:5a24%3]) with mapi id 15.20.6043.036; Tue, 31 Jan 2023 03:17:11 +0000 From: "Guo, Gua" To: "Hsu, VictorX" , "devel@edk2.groups.io" CC: "Kinney, Michael D" , "Chan, Laura" , "Prakashan, Krishnadas Veliyathuparambil" , "K N, Karthik" Subject: Re: [PATCH 1/4] MdePkg: Add MipiSysTLib library Thread-Topic: [PATCH 1/4] MdePkg: Add MipiSysTLib library Thread-Index: AQHZNR6j6q/lewEYBE+M+DDIvIRxlK632ryg Date: Tue, 31 Jan 2023 03:17:10 +0000 Message-ID: References: <29c690501f493d9d003ee7089228a7273c3ff091.1675131785.git.victorx.hsu@intel.com> In-Reply-To: <29c690501f493d9d003ee7089228a7273c3ff091.1675131785.git.victorx.hsu@intel.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=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5483:EE_|SA2PR11MB5194:EE_ x-ms-office365-filtering-correlation-id: 761b1ace-3730-4c51-e2af-08db0339a464 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: AaP6JYEFHdAV1qA7r8aQLRb3EeT4BVCqSAYmYHFCIQAJ0AHCktxukUF7FEPGTKIbaqXhhG475Wm08GQURAmsYOUhyS0bh94rjTqGC6SLwVTbCgDQDARbOLzLU8334hzukUXP4tXftgbKVViRel7hgg3u8FiC7mRUv3nI1VT5VB/DcV1erNrqz7OLLZIJVXOBPr0n+K/QPk4EJxkPutJ/OikiX1+mWkoRFkh2GGtLYd7ImYDkwMdZDzjpQdVpc3gYm90zipxW8Wmunk0AIpZKxEGUXVdvP7cR3d5dIAmHv9Fns+Poyo7qfjnOf/RzjyZfkonGi2n5AYoxkIe3cRCXs1I+BAZ0aUlOGP0z6qfJXOf4nyzMhfiLG5sabJkLerZsoWZ2N3AaOJ/9hVOlVDzZLzVG0aeggIzDrY0dJ0ozJXt/h7zhkzA/3jcjIMVVhacd0vRvkeNKbZ3dFpxwU57BNUPUhINHVZ7gi8ZtDogNXqwjZBjmXSmyht8WwO7+Q57unWpK85HFr+fZeTlbnnOEQlcjSTRM3ynu+7mRoywgyftrEs4uoBmyd8Xa3A6qgJT9EsAL+XN/lKD5NwM94x2l8YPzovbGq59IF5GHNqfVhhazGJ24ywdhMYu7zZ8DuOZD0yoY3Oh9N6tlKRyn69G7CiVu2XgBHDeFnaWGS8zb0yDemy1RTzVAykSjXQJ7+YvfeeHCXjrTT8+Ro7mPhF7w9LiVZLRO9XY30l8oDhOk7zJ8xWxcNyxZIY6/SSAyLLKDWopD5Br7BBPOpAcdjWqRyg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5483.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(346002)(376002)(39860400002)(136003)(396003)(366004)(451199018)(8936002)(41300700001)(30864003)(52536014)(66556008)(66446008)(5660300002)(83380400001)(55016003)(122000001)(86362001)(38100700002)(66476007)(38070700005)(82960400001)(4326008)(76116006)(64756008)(71200400001)(7696005)(8676002)(316002)(478600001)(19627235002)(54906003)(110136005)(66946007)(186003)(6506007)(26005)(107886003)(9686003)(53546011)(966005)(33656002)(2906002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?isB/kzGdfflCHn09D5KmQW53dq21M7vJc5aC7ynZH3fRymAMAVVOzngWY8HW?= =?us-ascii?Q?V1Q3cXw0qwMUoyGZtC9cdZKTjqS9ELrWzrFvRx9CQwKeWV0b1RNE6ulhtt8F?= =?us-ascii?Q?G6G/8P632waI52Zlxyl/sTOZ1NX8sJif7vVvlWtrWP/t7YQlOte8WcN54W+h?= =?us-ascii?Q?dUyU/hKPd/GbXksSZuIp71P1rrOdk6bupZaOv8RTEtN7d4xc1w38ZQjpiQpw?= =?us-ascii?Q?KYt91NEL+zltF+Bzzi6Qf7jYsB54awZLQl1gIntCLdfioeIpVnhH/o89zzwj?= =?us-ascii?Q?7h+obG48Mm+aO8FNgtmxhVSoSjDwgBuz3Tl4HGeXohV3FbQNiSB1iI424l5K?= =?us-ascii?Q?FxyWfawlS2dOXApHgbEXwcVTmkOUfdOMUooClvCN5djzNBcsB/lduimPSwXq?= =?us-ascii?Q?IVoQzKLjBwnql2aGeINY19mBvI0v54n66j7HILALGRmBKgbvi33AveOL3Bx+?= =?us-ascii?Q?jOYXP1FmhEXVI6MdUgm0nIeMN9kRBdkAHS10QkQj9WA48S7oRR7OfrwW7vsY?= =?us-ascii?Q?TDIP2J9IltkTLwHseV4lfnpF9faxKcLMipRBBh5wweirI/CBNHwGLHmNcJzu?= =?us-ascii?Q?nnadrVGZgb0Mi7ow1+dEDI/NYZ1mJpR14lHw7cCqFmrGk8HeklFmczzAOaw8?= =?us-ascii?Q?wqDH5AgCJVurX2dZ4xKpL1OTM4nlUEeKjpLwPJGqgJGHtMLLZA4KbaBwS4Kt?= =?us-ascii?Q?VYnrpA3mHnVsMnqAc3/jg94/wq8MvokIkvd51hniCYrtKo20stgNYDt4lnMe?= =?us-ascii?Q?FpCaVReKECJQe6Ri/Fxs7FdARafmb3kr6+AbyP5OrnkzskbVbEpCXgANEs5I?= =?us-ascii?Q?Aps+Zp6ELrVc8Ztq1XMGQrPdwgIh4UxE4o5wWK4dkB0Q2Mvap8reMVGqw5nh?= =?us-ascii?Q?PENjZ+IIz+thyr7GP1auVWyD2XaV9zKvCy4fe8xR6iqak82cDCTN/J7/McCq?= =?us-ascii?Q?7bfS9wdKfPX0ikDh7Jkx8yt53I4revIMbO++mmtA3zg59TjGTifwcsE3qWjz?= =?us-ascii?Q?NyfrVkBkMJVB3KwBPQF1j/gHeyV46uMTzTgu+HnZeGuteSuuuq+T1Ttjb72K?= =?us-ascii?Q?cgsI2IQimidz5b583kI8v/TpfB6fiahE8E5tIc3ZwPBBcvwPzDI8zqUCtjn5?= =?us-ascii?Q?6Uuv14DWw9BXmUa8MyiQZYDB9TY54InmyAlz+6D0nvyJSW+xY4fwFFXAReQr?= =?us-ascii?Q?KKNvI9WKgnU+l5pPe+jnZShg7SRk+zVwjjGzox31tkWr0c/mjQIzEZHFL1uG?= =?us-ascii?Q?UAz5/8E5JTvZ0lyWdORJAzHJQ9YoSFlyRCCHT90/kZE14Ra7vKF2Jsu1LbCr?= =?us-ascii?Q?6fg26qkk1tVQUBg0Kb9ibLeAxZ3Rqzrdk6bhu6BRkziSLhM/Npt4ZFsm3Tfr?= =?us-ascii?Q?QYEM1fJAQTlgj717cffcnluXbakrF6ZtwGs8Y1bUoZ7MP7U2TrwLNx6zvEDI?= =?us-ascii?Q?l12pXK300FqjKtkpEJX+jhcjHU6v1T1xx39Ej99cBf58hgSWpippw68sLXJA?= =?us-ascii?Q?J82OVhYAjR/hFdk+k6TeEyW5jyZ5EAfKGib7h5MaSWE3ShI/ucxsRF2JHsil?= =?us-ascii?Q?Qa+LWIBfZgducmT5tyw=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5483.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 761b1ace-3730-4c51-e2af-08db0339a464 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Jan 2023 03:17:10.8682 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ki4apTtcTZgTYNJ4fJlE0RTzuAodhZ4WZJSiPQX+UBeG2gKFUPMYuZ26UMNuNeLwcmT2TGsJDq7XbZ7h4oSDsQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5194 Return-Path: gua.guo@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Gua Guo -----Original Message----- From: Hsu, VictorX =20 Sent: Tuesday, January 31, 2023 10:49 AM To: devel@edk2.groups.io Cc: Hsu, VictorX ; Kinney, Michael D ; Guo, Gua ; Chan, Laura ; Prakashan, Krishnadas Veliyathuparambil ; K N, Karthik Subject: [PATCH 1/4] MdePkg: Add MipiSysTLib library From: VictorX Hsu REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4144 Wrap mipi sys-T submodule as a MipiSysTLib. This Library provide mipi sys-T= API to be consumed. Cc: Michael D Kinney Cc: Guo Gua Cc: Chan Laura Cc: Prakashan Krishnadas Veliyathuparambil Cc: K N Karthik Signed-off-by: VictorX Hsu --- .gitmodules | 5 +- .pytool/CISettings.py | 2 + MdePkg/Include/Library/MipiSysTLib.h | 242 +++++++++ MdePkg/Library/MipiSysTLib/MipiSysTLib.c | 110 +++++ MdePkg/Library/MipiSysTLib/MipiSysTLib.inf | 52 ++ MdePkg/Library/MipiSysTLib/Platform.c | 160 ++++++ MdePkg/Library/MipiSysTLib/Platform.h | 140 ++++++ MdePkg/Library/MipiSysTLib/mipi_syst.h | 539 +++++++++++++++++++++ MdePkg/Library/MipiSysTLib/mipisyst | 1 + MdePkg/MdePkg.ci.yaml | 4 +- MdePkg/MdePkg.dec | 5 + MdePkg/MdePkg.dsc | 2 + ReadMe.rst | 1 + 13 files changed, 1261 insertions(+), 2 deletions(-) create mode 100644 M= dePkg/Include/Library/MipiSysTLib.h create mode 100644 MdePkg/Library/MipiSysTLib/MipiSysTLib.c create mode 100644 MdePkg/Library/MipiSysTLib/MipiSysTLib.inf create mode 100644 MdePkg/Library/MipiSysTLib/Platform.c create mode 100644 MdePkg/Library/MipiSysTLib/Platform.h create mode 100644 MdePkg/Library/MipiSysTLib/mipi_syst.h create mode 160000 MdePkg/Library/MipiSysTLib/mipisyst diff --git a/.gitmodules b/.gitmodules index 8011a88d9d..4a0500eea4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,10 +16,13 @@ [submodule "BaseTools/Source/C/BrotliCompress/brotli"] path =3D BaseTools/Source/C/BrotliCompress/brotli url =3D https://github.com/google/brotli - ignore =3D untracked+ ignore =3D untracked [submodule "RedfishPkg/Library/JsonLib/jansson"] path =3D RedfishPkg/Library/JsonLib/jansson url =3D https://github.com/akheron/jansson [submodule "UnitTestFrameworkPkg/Library/GoogleTestLib/googletest"] path =3D UnitTestFrameworkPkg/Library/GoogleTestLib/googletest url =3D https://github.com/google/googletest.git +[submodule "MdePkg/Library/MipiSysTLib/mipisyst"] + path =3D MdePkg/Library/MipiSysTLib/mipisyst + url =3D https://github.com/MIPI-Alliance/public-mipi-sys-t.git diff --git a/.pytool/CISettings.py b/.pytool/CISettings.py index d87c8e838e= ..0118820680 100644 --- a/.pytool/CISettings.py +++ b/.pytool/CISettings.py @@ -193,6 +193,8 @@ class Settings(CiBuildSettingsManager, UpdateSettingsMa= nager, SetupSettingsManag "BaseTools/Source/C/BrotliCompress/brotli", False)) rs= .append(RequiredSubmodule( "RedfishPkg/Library/JsonLib/jansson"= , False))+ rs.append(RequiredSubmodule(+ "MdePkg/Library/= MipiSysTLib/mipisyst", False)) return rs def GetName(self):dif= f --git a/MdePkg/Include/Library/MipiSysTLib.h b/MdePkg/Include/Library/Mip= iSysTLib.h new file mode 100644 index 0000000000..6282baac8e --- /dev/null +++ b/MdePkg/Include/Library/MipiSysTLib.h @@ -0,0 +1,242 @@ +/** @file++Copyright (c) 2023, Intel Corporation. All rights reserved.
= ++SPDX-License-Identifier: BSD-2-Clause-Patent++**/++#ifndef MIPI_SYST_LIB_= H_+#define MIPI_SYST_LIB_H_++#include ++#define MIPI_SYST_CONFORMAN= CE_LEVEL 30+#define MIPI_SYST_PCFG_ENABLE_PLATFORM_HANDLE_DATA+#define MIP= I_SYST_PCFG_ENABLE_ORIGIN_GUID++struct mipi_syst_header;+struct mipi_syst_h= andle;+struct mipi_syst_scatter_prog;++/**+ * SyS-T handle state initializa= tion hook definition+ *+ * This function gets called in the context of IO h= andle generation.+ * Its purpose is to initialize the platform dependent po= rtion of+* the handle and other necessary platform specific initialization= steps.+ *+ * @param systh Pointer to new SyS-T handle+ * @see syst_handle_= t+ */+typedef void (*mipi_syst_inithandle_hook_t)(+ struct mipi_syst_handl= e *systh+ );++/**+ * SyS-T handle state release hook definition+ *+ * Thi= s function gets called when a handle is about to be destroyed..+ * Its purp= ose is to free any resources allocated during the handle+ * generation.+ *+= * @param systh Pointer to handle that is destroyed+ * @see syst_handle_t+ = */+typedef void (*mipi_syst_releasehandle_hook_t)(+ struct mipi_syst_handl= e *systh+ );++/**+ * Low level message write routine definition+ *+ * Thi= s function is called at the end of an instrumentation API to output+ * the = raw message data.+ *+ * @param systh pointer to a SyS-T handle structure us= ed in the API call,+ * @param scatterprog pointer to a list of scatter writ= e instructions that+ * encodes how to convert the descri= ptor pointer by+ * pdesc into raw binary data. This list= doesn't include+ * the mandatory first 32 tag byte valu= e pointed by pdesc.+ * @param pdesc pointer to a message descriptor, which = containing at least+ * the 32-bit message tag data+ */+typedef= void (*mipi_syst_msg_write_t)(+ struct mipi_syst_handle *systh,+ = struct mipi_syst_scatter_prog *scatterprog,+ const void = *pdesc+ );++typedef struct {+ UINTN MmioAddr;+} TRACE_HUB_PLATFORM_= SYST_DATA;++struct mipi_syst_platform_handle {+ TRACE_HUB_PLATFORM_SYST_DA= TA TraceHubPlatformData;+};++/** internal handle state flags+ */+typedef= struct mipi_syst_handle_flags {+ UINT32 shf_alloc : 1; /**< set to 1 i= f heap allocated handle */+} MIPI_SYST_HANDLE_FLAGS;++/**+ * Message data h= eader tag definition+ *+ * Each SyS-T message starts with a 32-bit message = tag. The tag defines the+ * message originator and decoding information for= the data following+ * the tag.+ */++typedef struct mipi_syst_msg_tag {+ #i= f defined (MIPI_SYST_BIG_ENDIAN)+ UINT32 et_res31 : 1; /**< reserv= ed for future use */+ UINT32 et_res30 : 1; /**< reserved fo= r future use */+ UINT32 et_subtype : 6; /**< type dependent s= ub category */+ UINT32 et_guid : 1; /**< 128-bit GUID present = */+ UINT32 et_modunit : 11; /**< unit for GUID or module:un= it */+ UINT32 et_timestamp : 1; /**< indicate 64-bit timestamp = */+ UINT32 et_chksum : 1; /**< indicate 32-bit CRC */+ = UINT32 et_length : 1; /**< indicate length field */+ UINT3= 2 et_location : 1; /**< indicate location information */+ UINT32 = et_res7 : 1; /**< reserved for future use */+ UINT32 et_se= verity : 3; /**< severity level of message */+ UINT32 et_type = : 4; /**< SyS-T message type ID */+ #else+ UINT32 et_type = : 4; /**< SyS-T message type ID */+ UINT32 et_severity = : 3; /**< severity level of message */+ UINT32 et_res7 : 1; = /**< reserved for future use */+ UINT32 et_location : 1; /**<= indicate location information */+ UINT32 et_length : 1; /**< indi= cate length field */+ UINT32 et_chksum : 1; /**< indicate = 32-bit CRC */+ UINT32 et_timestamp : 1; /**< indicate 64-bi= t timestamp */+ UINT32 et_modunit : 11; /**< unit for GUID or mo= dule:unit */+ UINT32 et_guid : 1; /**< 128-bit GUID present = */+ UINT32 et_subtype : 6; /**< type dependent sub category = */+ UINT32 et_res30 : 1; /**< reserved for future use */+= UINT32 et_res31 : 1; /**< reserved for future use */+ #end= if+} MIPI_SYST_MSG_TAG;++/** 128-bit GUID style message origin ID */+typede= f struct mipi_syst_guid {+ union {+ UINT8 b[16];+ UINT64 ll[2= ];+ } u;+} MIPI_SYST_GUID;++/**+ * Message severity level enumeration+ */+= typedef enum mipi_syst_severity {+ MIPI_SYST_SEVERITY_MAX =3D 0, /**<= no assigned severity */+ MIPI_SYST_SEVERITY_FATAL =3D 1, /**< cr= itical error level */+ MIPI_SYST_SEVERITY_ERROR =3D 2, /**< error= message level */+ MIPI_SYST_SEVERITY_WARNING =3D 3, /**< warning = message level */+ MIPI_SYST_SEVERITY_INFO =3D 4, /**< information= message level */+ MIPI_SYST_SEVERITY_USER1 =3D 5, /**< user defined l= evel 5 */+ MIPI_SYST_SEVERITY_USER2 =3D 6, /**< user defined leve= l 6 */+ MIPI_SYST_SEVERITY_DEBUG =3D 7 /**< debug information le= vel */+} MIPI_SYST_SEVERITY;++/** SyS-T connection handle state structur= e+ *+ * This structure connects the instrumentation API with the underlying= SyS-T+ * infrastructure. It plays a similar role to a FILE * in traditiona= l+ * C file IO.+ */+typedef struct mipi_syst_handle {+ struct mipi_syst_he= ader *systh_header; /**< global state */+ stru= ct mipi_syst_handle_flags systh_flags; /**< handle state = */+ struct mipi_syst_msg_tag systh_tag; /**< tag= flags */++ #if defined (MIPI_SYST_PCFG_ENABLE_ORIGIN_GUID)+ = struct mipi_syst_guid systh_guid; /**< module GUID = */+ #endif++ #if defined (MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD)= + struct mipi_syst_msglocation systh_location; /**< location re= cord */+ #endif++ UINT32 systh_param_coun= t; /**< number of parameters */+ UINT32 = systh_param[6]; /**< catalog msg parameters */++ #if defined (MIPI_SY= ST_PCFG_ENABLE_PLATFORM_HANDLE_DATA)+ struct mipi_syst_platform_handle = systh_platform; /**< platform specific state */+ #endif+} MIPI_SYST_HA= NDLE;++/** SyS-T global state structure.+ * This structure is holding the g= lobal SyS-T library state+ */+typedef struct mipi_syst_header {+ UINT32 = systh_version; /**< SyS-T version ID */+= + #if defined (MIPI_SYST_PCFG_ENABLE_PLATFORM_HANDLE_DATA)+ mipi_syst_init= handle_hook_t systh_inith; /**< handle init hook function*/+ mip= i_syst_releasehandle_hook_t systh_releaseh; /**< handle release hook = */+ #endif++ #if MIPI_SYST_CONFORMANCE_LEVEL > 10+ mipi_syst_msg_write_= t systh_writer; /**< message output routine */+ #endif+ #i= f defined (MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA)+ struct mipi_syst_pl= atform_state systh_platform; /**< platform specific state */+ #endif+} = MIPI_SYST_HEADER;++/**+ Invoke initialization function in Mipi Sys-T modul= e to initialize Mipi Sys-T handle.++ @param[in, out] MipiSystHandle A po= inter to MIPI_SYST_HANDLE structure.++ @retval EFI_SUCCESS M= IPI_SYST_HANDLE instance was initialized.+ @retval EFI_INVALID_PARAMETER = On entry, MipiSystHandle is a NULL pointer.+**/+EFI_STATUS+EFIAPI+InitMi= piSystHandle (+ IN OUT MIPI_SYST_HANDLE *MipiSystHandle+ );++/**+ Invok= e write_debug_string function in Mipi Sys-T module.++ @param[in] MipiSyst= Handle A pointer to MIPI_SYST_HANDLE structure.+ @param[in] Severity = An error level to decide whether to enable Trace Hub data.+ @param[in]= Len Length of data buffer.+ @param[in] Str A po= inter to data buffer.++ @retval EFI_SUCCESS Data in buffer w= as processed.+ @retval EFI_ABORTED No data need to be writte= n to Trace Hub.+ @retval EFI_INVALID_PARAMETER On entry, MipiSystHandl= e is a NULL pointer.+**/+EFI_STATUS+EFIAPI+MipiSystWriteDebug (+ IN = MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 Severity,= + IN UINT16 Len,+ IN CONST CHAR8 *Str+ );= ++/**+ Invoke catalog_write_message function in Mipi Sys-T module.++ @par= am[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @param[i= n] Severity An error level to decide whether to enable Trace Hub da= ta.+ @param[in] CatId Catalog Id.++ @retval EFI_SUCCESS D= ata in buffer was processed.+**/+EFI_STATUS+EFIAPI+MipiSystWriteCatalog (+ = IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 Severity,+ = IN UINT64 CatId+ );++#endif // MIPI_SYST_LIB_H_diff --git a/M= dePkg/Library/MipiSysTLib/MipiSysTLib.c b/MdePkg/Library/MipiSysTLib/MipiSy= sTLib.c new file mode 100644 index 0000000000..0195ad85b0 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/MipiSysTLib.c @@ -0,0 +1,110 @@ +/** @file++Copyright (c) 2023, Intel Corporation. All rights reserved.
= ++SPDX-License-Identifier: BSD-2-Clause-Patent++**/++#include +#inc= lude "mipi_syst.h"++/**+ Invoke initialization function in Mipi Sys-T modu= le to initialize Mipi Sys-T handle.++ @param[in, out] MipiSystHandle A p= ointer to MIPI_SYST_HANDLE structure.++ @retval EFI_SUCCESS = MIPI_SYST_HANDLE instance was initialized.+ @retval EFI_INVALID_PARAMETER = On entry, MipiSystHandle is a NULL pointer.+**/+EFI_STATUS+EFIAPI+InitM= ipiSystHandle (+ IN OUT MIPI_SYST_HANDLE *MipiSystHandle+ )+{+ if (Mipi= SystHandle =3D=3D NULL) {+ return EFI_INVALID_PARAMETER;+ }++ mipi_sys= t_init (MipiSystHandle->systh_header, 0, NULL);+ mipi_syst_init_handle (Mi= piSystHandle->systh_header, MipiSystHandle, NULL, 0);++ return EFI_SUCCESS= ;+}++/**+ Invoke write_debug_string function in Mipi Sys-T module.++ @par= am[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @param[i= n] Severity An error level to decide whether to enable Trace Hub da= ta.+ @param[in] Len Length of data buffer.+ @param[in] Str = A pointer to data buffer.++ @retval EFI_SUCCESS = Data in buffer was processed.+ @retval EFI_ABORTED No data n= eed to be written to Trace Hub.+ @retval EFI_INVALID_PARAMETER On entr= y, MipiSystHandle is a NULL pointer.+**/+EFI_STATUS+EFIAPI+MipiSystWriteDeb= ug (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 = Severity,+ IN UINT16 Len,+ IN CONST CHAR8 = *Str+ )+{+ if (MipiSystHandle =3D=3D NULL) {+ return EFI_INVALI= D_PARAMETER;+ }++ if ((Len =3D=3D 0) || (Str =3D=3D NULL)) {+ //+ /= / No data need to be written to Trace Hub+ //+ return EFI_ABORTED;+ = }++ mipi_syst_write_debug_string (+ MipiSystHandle,+ MIPI_SYST_NOLOC= ATION,+ MIPI_SYST_STRING_GENERIC,+ Severity,+ Len,+ Str+ );+= + return EFI_SUCCESS;+}++/**+ Invoke catalog_write_message function in Mi= pi Sys-T module.++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HAND= LE structure.+ @param[in] Severity An error level to decide whethe= r to enable Trace Hub data.+ @param[in] CatId Catalog Id.++ @r= etval EFI_SUCCESS Data in buffer was processed.+ @retval EFI= _INVALID_PARAMETER On entry, MipiSystHandle is a NULL pointer.+**/+EFI_= STATUS+EFIAPI+MipiSystWriteCatalog (+ IN MIPI_SYST_HANDLE *MipiSystHandl= e,+ IN UINT32 Severity,+ IN UINT64 CatId+ )+{+ = if (MipiSystHandle =3D=3D NULL) {+ return EFI_INVALID_PARAMETER;+ }++ = mipi_syst_write_catalog64_message (+ MipiSystHandle,+ MIPI_SYST_NOLOC= ATION,+ Severity,+ CatId+ );++ return EFI_SUCCESS;+}diff --git a/= MdePkg/Library/MipiSysTLib/MipiSysTLib.inf b/MdePkg/Library/MipiSysTLib/Mip= iSysTLib.inf new file mode 100644 index 0000000000..17ede382cc --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/MipiSysTLib.inf @@ -0,0 +1,52 @@ +## @file+# This library provides Mipi Sys-T API.+#+# Copyright (c) 2023,= Intel Corporation. All rights reserved.
+#+# SPDX-License-Identifier: = BSD-2-Clause-Patent+#+##++[Defines]+ INF_VERSION =3D 0x= 00010005+ BASE_NAME =3D MipiSysTLib+ FILE_GUID = =3D A58B0510-9E6D-4747-95D8-E5B8AF4633E6+ MODULE_TYPE = =3D BASE+ VERSION_STRING =3D 1.0+ LIBRARY_= CLASS =3D MipiSysTLib++ DEFINE MIPI_HEADER_PATH = =3D mipisyst/library/include/mipi_syst+ DEFINE MIPI_SOURCE_PATH =3D= mipisyst/library/src++#+# The following information is for reference only = and not required by the build tools.+#+# VALID_ARCHITECTURES =3D IA32 X64+#= ++[LibraryClasses]+ IoLib+ BaseMemoryLib++[Packages]+ MdePkg/MdePkg.dec+= +[Sources]+ MipiSysTLib.c+ mipi_syst.h+ Platform.c+ Platform.h+ $(MIPI= _HEADER_PATH)/api.h+ $(MIPI_HEADER_PATH)/crc32.h+ $(MIPI_HEADER_PATH)/com= piler.h+ $(MIPI_HEADER_PATH)/message.h+ $(MIPI_HEADER_PATH)/inline.h+ $(= MIPI_SOURCE_PATH)/mipi_syst_init.c+ $(MIPI_SOURCE_PATH)/mipi_syst_api.c+ = $(MIPI_SOURCE_PATH)/mipi_syst_crc32.c+ $(MIPI_SOURCE_PATH)/mipi_syst_write= r.c+ $(MIPI_SOURCE_PATH)/mipi_syst_inline.c+ $(MIPI_SOURCE_PATH)/mipi_sys= t_compiler.c++[BuildOptions]+ MSFT:*_*_*_CC_FLAGS =3D /Oddiff --git a/MdeP= kg/Library/MipiSysTLib/Platform.c b/MdePkg/Library/MipiSysTLib/Platform.c new file mode 100644 index 0000000000..4079ccb1b8 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/Platform.c @@ -0,0 +1,160 @@ +/** @file++Copyright (c) 2023, Intel Corporation. All rights reserved.
= ++SPDX-License-Identifier: BSD-2-Clause-Patent++**/++#include +#inc= lude +#include +#include "mipi_sy= st.h"++/**+ Write 4 bytes to Trace Hub MMIO addr + 0x10.++ @param[in] Mi= piSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @param[in] Data = Data to be written.+**/+VOID+EFIAPI+MipiSystWriteD32Ts (+ IN MI= PI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 Data+ )+{+ MmioW= rite32 (MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr + 0x10= , Data);+}++/**+ Write 4 bytes to Trace Hub MMIO addr + 0x18.++ @param[in= ] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @param[in] D= ata Data to be written.+**/+VOID+EFIAPI+MipiSystWriteD32Mts (+ = IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 Data+ )+{+ = MmioWrite32 (MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr = + 0x18, Data);+}++/**+ Write 8 bytes to Trace Hub MMIO addr + 0x18.++ @pa= ram[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @param[= in] Data Data to be written.+**/+VOID+EFIAPI+MipiSystWriteD64Mt= s (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT64 Data+ = )+{+ MmioWrite64 (MipiSystHandle->systh_platform.TraceHubPlatformData.Mmi= oAddr + 0x18, Data);+}++/**+ Write 1 byte to Trace Hub MMIO addr + 0x0.++ = @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @pa= ram[in] Data Data to be written.+**/+VOID+EFIAPI+MipiSystWriteD= 8 (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT8 Data+ = )+{+ MmioWrite8 (MipiSystHandle->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x0, Data);+}++/**+ Write 2 bytes to Trace Hub MMIO mmio addr + 0x0= .++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ = @param[in] Data Data to be written.+**/+VOID+EFIAPI+MipiSystWr= iteD16 (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT16 D= ata+ )+{+ MmioWrite16 (MipiSystHandle->systh_platform.TraceHubPlatformDat= a.MmioAddr + 0x0, Data);+}++/**+ Write 4 bytes to Trace Hub MMIO addr + 0x= 0.++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+= @param[in] Data Data to be written.+**/+VOID+EFIAPI+MipiSystW= riteD32 (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 = Data+ )+{+ MmioWrite32 (MipiSystHandle->systh_platform.TraceHubPlatformDa= ta.MmioAddr + 0x0, Data);+}++/**+ Write 8 bytes to Trace Hub MMIO addr + 0= x0.++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.= + @param[in] Data Data to be written.+**/+VOID+EFIAPI+MipiSyst= WriteD64 (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT64 = Data+ )+{+ MmioWrite64 (MipiSystHandle->systh_platform.TraceHubPlatformD= ata.MmioAddr + 0x0, Data);+}++/**+ Clear data in Trace Hub MMIO addr + 0x3= 0.++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+= **/+VOID+EFIAPI+MipiSystWriteFlag (+ IN MIPI_SYST_HANDLE *MipiSystHandle= + )+{+ UINT32 Flag;++ Flag =3D 0;++ MmioWrite32 (MipiSystHandle->systh= _platform.TraceHubPlatformData.MmioAddr + 0x30, Flag);+}++/**+ Get Epoch t= ime.++ @retval UINT64 A numeric number for timestamp.+**/+UINT64+EFIAPI= +MipiSystGetEpochUs (+ VOID+ )+{+ UINT64 Epoch;++ Epoch =3D 1000;++ r= eturn Epoch;+}diff --git a/MdePkg/Library/MipiSysTLib/Platform.h b/MdePkg/L= ibrary/MipiSysTLib/Platform.h new file mode 100644 index 0000000000..b36ab6b84b --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/Platform.h @@ -0,0 +1,140 @@ +/** @file++Copyright (c) 2023, Intel Corporation. All rights reserved.
= ++SPDX-License-Identifier: BSD-2-Clause-Patent++**/++#ifndef MIPI_SYST_PLAT= FORM_H_+#define MIPI_SYST_PLATFORM_H_++/**+ Write 4 bytes to Trace Hub MMI= O addr + 0x10.++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE= structure.+ @param[in] Data Data to be written.+**/+VOID+EFIA= PI+MipiSystWriteD32Ts (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT= 32 Data+ );++/**+ Write 4 bytes to Trace Hub MMIO addr + 0x18.= ++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ = @param[in] Data Data to be written.+**/+VOID+EFIAPI+MipiSystWri= teD32Mts (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT32 = Data+ );++/**+ Write 8 bytes to Trace Hub MMIO addr + 0x18.++ @param[in= ] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ @param[in] D= ata Data to be written.+**/+VOID+EFIAPI+MipiSystWriteD64Mts (+ = IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT64 Data+ );++/= **+ Write 1 byte to Trace Hub MMIO addr + 0x0.++ @param[in] MipiSystHand= le A pointer to MIPI_SYST_HANDLE structure.+ @param[in] Data = Data to be written.+**/+VOID+EFIAPI+MipiSystWriteD8 (+ IN MIPI_SYST_HANDL= E *MipiSystHandle,+ IN UINT8 Data+ );++/**+ Write 2 bytes = to Trace Hub MMIO mmio addr + 0x0.++ @param[in] MipiSystHandle A pointer= to MIPI_SYST_HANDLE structure.+ @param[in] Data Data to be wr= itten.+**/+VOID+EFIAPI+MipiSystWriteD16 (+ IN MIPI_SYST_HANDLE *MipiSyst= Handle,+ IN UINT16 Data+ );++/**+ Write 4 bytes to Trace Hub= MMIO addr + 0x0.++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HAN= DLE structure.+ @param[in] Data Data to be written.+**/+VOID+E= FIAPI+MipiSystWriteD32 (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UIN= T32 Data+ );++/**+ Write 8 bytes to Trace Hub MMIO addr + 0x0.= ++ @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.+ = @param[in] Data Data to be written.+**/+VOID+EFIAPI+MipiSystWri= teD64 (+ IN MIPI_SYST_HANDLE *MipiSystHandle,+ IN UINT64 Da= ta+ );++/**+ Clear data in Trace Hub MMIO addr + 0x30.++ @param[in] Mip= iSystHandle A pointer to MIPI_SYST_HANDLE structure.+**/+VOID+EFIAPI+MipiS= ystWriteFlag (+ IN MIPI_SYST_HANDLE *MipiSystHandle+ );++/**+ Get Epoc= h time.++ @retval UINT64 A numeric number for timestamp.+**/+UINT64+EFI= API+MipiSystGetEpochUs (+ VOID+ );++#define MIPI_SYST_PLATFORM_CLOCK() M= ipiSystGetEpochUs ()++#ifndef MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA+#de= fine MIPI_SYST_OUTPUT_D32TS(MipiSystHandle, Data) MipiSystWriteD32Ts ((Mi= piSystHandle), (Data))+#define MIPI_SYST_OUTPUT_D32MTS(MipiSystHandle, Data= ) MipiSystWriteD32Mts ((MipiSystHandle), (Data))+#define MIPI_SYST_OUTPUT_= D64MTS(MipiSystHandle, Data) MipiSystWriteD64Mts ((MipiSystHandle), (Data)= )+#define MIPI_SYST_OUTPUT_D8(MipiSystHandle, Data) MipiSystWriteD8 ((= MipiSystHandle), (Data))+#define MIPI_SYST_OUTPUT_D16(MipiSystHandle, Data)= MipiSystWriteD16 ((MipiSystHandle), (Data))+#define MIPI_SYST_OUTPUT_D= 32(MipiSystHandle, Data) MipiSystWriteD32 ((MipiSystHandle), (Data))+ = #if defined (MIPI_SYST_PCFG_ENABLE_64BIT_IO)+#define MIPI_SYST_OUTPUT_D64(M= ipiSystHandle, Data) MipiSystWriteD64 ((MipiSystHandle), (Data))+ #endif+= #define MIPI_SYST_OUTPUT_FLAG(MipiSystHandle) MipiSystWriteFlag ((MipiSyst= Handle))+#endif++#endif // MIPI_SYST_PLATFORM_H_diff --git a/MdePkg/Library= /MipiSysTLib/mipi_syst.h b/MdePkg/Library/MipiSysTLib/mipi_syst.h new file mode 100644 index 0000000000..29a1aa431b --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/mipi_syst.h @@ -0,0 +1,539 @@ +/** @file++This header file is a customized version of mipi_syst.h.in in m= ipi module.++Copyright (c) 2023, Intel Corporation. All rights reserved.++SPDX-License-Identifier: BSD-2-Clause-Patent++**/++#ifndef MIPI_SYST_H_I= NCLUDED+#define MIPI_SYST_H_INCLUDED++#include ++/* = SyS-T API version information+ */+#define MIPI_SYST_VERSION_MAJOR 1 /**<= Major version, incremented if API changes */+#define MIPI_SYST_VERSION_MIN= OR 0 /**< Minor version, incremented on compatible extensions */+#define= MIPI_SYST_VERSION_PATCH 0 /**< Patch for existing major, minor, usually= 0 */++/** Define SyS-T API conformance level+ *+ * 10 =3D minimal (only sh= ort events)+ * 20 =3D low overhead (exluding varag functions and CRC32)+ *= 30 =3D full implementation+ */+#define MIPI_SYST_CONFORMANCE_LEVEL 30++/*= * Compute SYS-T version value+ *+ * Used to compare SYS-T Major.Minor.patch= versions numerically at runtime.+ *+ * @param ma major version number+ * @= param mi minor version number+ * @param p patch version number+ *+ * Exampl= e:+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c}+ *+ * #if MIPI_S= YST_VERSION_CODE >=3D MIPI_SYST_MAKE_VERSION_CODE(1,5,0)+ * // do what = only >=3D 1.5.x supports+ * #endif+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~= ~~~~~~~~~~+ */+#define MIPI_SYST_MAKE_VERSION_CODE(ma, mi, p) (((ma) << 16= ) | ((mi)<<8) | (p))++/** Numeric SYS-T version code */+#define MIPI_SYST_V= ERSION_CODE MIPI_SYST_MAKE_VERSION_CODE(\+ MIPI_SYST_VERSION_MAJOR,\+ MI= PI_SYST_VERSION_MINOR,\+ MIPI_SYST_VERSION_PATCH)++/* Macros to trick nume= ric values like __LINE__ into a string+ */+#define _MIPI_SYST_STRINGIFY(x) = #x+#define _MIPI_SYST_CPP_TOSTR(x) _MIPI_SYST_STRINGIFY(x)++#define _MIPI= _SYST_VERSION_STRING(a, b, c) \+ _MIPI_SYST_CPP_TOSTR(a)"."_MIPI_SYS= T_CPP_TOSTR(b)"."_MIPI_SYST_CPP_TOSTR(c)++/** Textual version string */+#de= fine MIPI_SYST_VERSION_STRING \+ _MIPI_SYST_VERSION_STRING(\+ = MIPI_SYST_VERSION_MAJOR,\+ MIPI_SYST_VERSION_MINOR,= \+ MIPI_SYST_VERSION_PATCH)++#ifndef MIPI_SYST_COMPILER_INCL= UDED+#define MIPI_SYST_STATIC+ #include "mipi_syst/compiler.h"+#endif++/* = String hash macros for compile time computation of catalog ID's.+ * Notes:+= * These macros will only be used with optimized builds, otherwise+ * = a lot of runtime code will be generated.+ *+ * Only the last 64 bytes o= f the string are considered for hashing+ */+#define _MIPI_SYST_HASH1(s, i, = x, l) (x*65599u+(mipi_syst_u8)s[(i)<(l)?((l)-1-(i)):(l)])+#define _MIPI_S= YST_HASH4(s, i, x, l) _MIPI_SYST_HASH1(s,i,_MIPI_SYST_HASH1(s,i+1,_MIPI_S= YST_HASH1(s,i+2,_MIPI_SYST_HASH1(s,i+3,x,l),l),l),l)+#define _MIPI_SYST_HAS= H16(s, i, x, l) _MIPI_SYST_HASH4(s,i,_MIPI_SYST_HASH4(s,i+4,_MIPI_SYST_HAS= H4(s,i+8,_MIPI_SYST_HASH4(s,i+12,x,l),l),l),l)+#define _MIPI_SYST_HASH64(s,= i, x, l) _MIPI_SYST_HASH16(s,i,_MIPI_SYST_HASH16(s,i+16,_MIPI_SYST_HASH16= (s,i+32,_MIPI_SYST_HASH16(s,i+48,x,l),l),l),l)++#define _MIPI_SYST_HASH_x65= 599(s, l) ((mipi_syst_u32)_MIPI_SYST_HASH64(s,0,0,l))++#define _MIPI_SYST_= HASH_AT_CPP_TIME(str, offset) (_MIPI_SYST_HASH_x65599(str, sizeof(str)-1) = + (offset))+#define _MIPI_SYST_HASH_AT_RUN_TIME(str, offset) (mipi_syst_ha= sh_x65599(str, sizeof(str)-1) + (offset))++#if defined (_MIPI_SYST_OPTIMIZE= R_ON)+#define MIPI_SYST_HASH(a, b) _MIPI_SYST_HASH_AT_CPP_TIME((a), (b))+#= else+#define MIPI_SYST_HASH(a, b) _MIPI_SYST_HASH_AT_RUN_TIME((a), (b))+#e= ndif++/** Major Message Types+ */+enum mipi_syst_msgtype {+ MIPI_SYST_TYPE= _BUILD =3D 0, /**< client build id message */+ MIPI_SYST_TYPE_S= HORT32 =3D 1, /**< value only message */+ MIPI_SYST_TYPE_STR= ING =3D 2, /**< text message output */+ MIPI_SYST_TYPE_CATAL= OG =3D 3, /**< catalog message output */+ MIPI_SYST_TYPE_RAW = =3D 6, /**< raw binary data */+ MIPI_SYST_TYPE_SHORT64 = =3D 7, /**< value only message */+ MIPI_SYST_TYPE_CLOCK = =3D 8, /**< clock sync message */++ MIPI_SYST_TYPE_MAX+};++/= ** MIPI_SYST_TYPE_DEBUG_STRING Sub-Types+ */+enum mipi_syst_subtype_string = {+ MIPI_SYST_STRING_GENERIC =3D 1, /**< string generic debug = */+ MIPI_SYST_STRING_FUNCTIONENTER =3D 2, /**< string is function name = */+ MIPI_SYST_STRING_FUNCTIONEXIT =3D 3, /**< string is function na= me */+ MIPI_SYST_STRING_INVALIDPARAM =3D 5, /**< invalid SyS-T APIc= all */+ MIPI_SYST_STRING_ASSERT =3D 7, /**< Software Assert= : failure */+ MIPI_SYST_STRING_PRINTF_32 =3D 11, /**< printf with = 32-bit packing */+ MIPI_SYST_STRING_PRINTF_64 =3D 12, /**< printf wi= th 64-bit packing */++ MIPI_SYST_STRING_MAX+};++/** MIPI_SYST_TYPE_CATAL= OG Sub-Types+ */+enum mipi_syst_subtype_catalog {+ MIPI_SYST_CATALOG_ID32_= P32 =3D 1, /**< 32-bit catalog ID, 32-bit packing */+ MIPI_SYST_CATALOG_= ID64_P32 =3D 2, /**< 64-bit catalog ID, 32-bit packing */+ MIPI_SYST_CAT= ALOG_ID32_P64 =3D 5, /**< 32-bit catalog ID, 64-bit packing */+ MIPI_SYS= T_CATALOG_ID64_P64 =3D 6, /**< 64-bit catalog ID, 64-bit packing */++ MI= PI_SYST_CATALOG_MAX+};++/** MIPI_SYST_TYPE_CLOCK Sub-Types+ */+enum mipi_sy= st_subtype_clock {+ MIPI_SYST_CLOCK_TRANSPORT_SYNC =3D 1, /**< SyS-T cloc= k & frequency sync */+ MIPI_SYST_CLOCK_MAX+};++enum mipi_syst_subtype_bui= ld {+ MIPI_SYST_BUILD_ID_COMPACT32 =3D 0, /**< compact32 build id *= /+ MIPI_SYST_BUILD_ID_COMPACT64 =3D 1, /**< compact64 build id */+ = MIPI_SYST_BUILD_ID_LONG =3D 2, /**< normal build message */+ MI= PI_SYST_BUILD_MAX+};++/** GUID initializer code+ *+ * This macro simplifies= converting a GUID from its string representation+ * into the mipi_syst_gui= d data structure. The following example shows+ * how the values from a GUID= string are used with the macro. Each numeric+ * component from the GUID st= ring gets converted into a hex value parameter+ * when invoking the macro.+= *+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c}+ *+ * // Guid: f= 614b99d-99a1-4c04-8c30-90999ab5fe05+ *+ * struct mipi_syst_guid guid =3D+= * MIPI_SYST_GEN_GUID(0xf614b99d, 0x99a1, 0x4c04, 0x8c30, 0x90999ab5fe= 05);+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ */+#define MIPI_SY= ST_GEN_GUID(l1, w1, w2, w3, l2) \+ {{\+ (mipi_syst_u8)((mipi_syst= _u32)(l1) >> 24), \+ (mipi_syst_u8)((mipi_syst_u32)(l1) >> 16), \+= (mipi_syst_u8)((mipi_syst_u32)(l1) >> 8), \+ (mipi_syst= _u8)((mipi_syst_u32)(l1) >> 0), \+ (mipi_syst_u8)((mipi_syst_u16)= (w1) >> 8), \+ (mipi_syst_u8)((mipi_syst_u16)(w1) >> 0), \+ = (mipi_syst_u8)((mipi_syst_u16)(w2) >> 8), \+ (mipi_syst_u8)(= (mipi_syst_u16)(w2) >> 0), \+ (mipi_syst_u8)((mipi_syst_u16)(w3) = >> 8), \+ (mipi_syst_u8)((mipi_syst_u16)(w3) >> 0), \+ = (mipi_syst_u8)((mipi_syst_u64)(l2) >> 40), \+ (mipi_syst_u8)((mipi= _syst_u64)(l2) >> 32), \+ (mipi_syst_u8)((mipi_syst_u64)(l2) >> 24= ), \+ (mipi_syst_u8)((mipi_syst_u64)(l2) >> 16), \+ (mipi= _syst_u8)((mipi_syst_u64)(l2) >> 8), \+ (mipi_syst_u8)((mipi_syst= _u64)(l2) >> 0) \+ }}++/** SyS-T client origin data+ *+ * This structure= holds the GUID or header origin and unit data+ * used by SyS-T handles. Th= e structure gets passed into the handle+ * creation functions to initialize= the values that identify clients.+ * @see MIPI_SYST_SET_HANDLE_GUID_UNIT+ = * @see MIPI_SYST_SET_HANDLE_MODULE_UNIT+ * @see MIPI_SYST_SET_HANDLE_ORIGIN= + */+struct mipi_syst_origin {+ struct mipi_syst_guid guid; /**< ori= gin GUID or module value */+ mipi_syst_u16 unit; /**< unit v= alue */+};++/** Origin structure initializer code using GU= ID+*+* This macro simplifies initializing a mipi_syst_origin structure. The= +* first 5 parameters are GUID values as used by the MIPI_SYST_GEN_GUID+* m= acro. The last parameter is the unit value (11-Bits).+* @see MIPI_SYST_GEN_= GUID+*+*+* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c}+*+* // Guid= : {494E5443-B659-45AF-B786-9DB0786248AE}++*+* struct mipi_syst_origin =3D= origin+* MIPI_SYST_GEN_ORIGIN_GUID(+* 0x494E5443, 0xB659, 0x45= AF, 0xB786, 0x9DB0786248AE,+* 0x1);+* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~= ~~~~~~~~~~~~~~~~~+*/+#define MIPI_SYST_GEN_ORIGIN_GUID(l1, w1, w2, w3, l2, = u) \+ {\+ MIPI_SYST_GEN_GUID(l1, w1, w2, w3, l2) ,\+ = u\+ }++/** Origin structure initializer code using he= ader module value+*+* This macro simplifies initializing a mipi_syst_origin= structure. The+* first parameter is the header origin value (7-Bits). The = second parameter+* is the unit value (4-bits)+* ~~~~~~~~~~~~~~~~~~~~~~~~~~~= ~~~~~~~~~~~~~~~~~~~~{.c}+*+* // Guid: {494E5443-B659-45AF-B786-9DB0786248A= E}++* #define MODULE_X 0x10+* struct mipi_syst_origin =3D+* MIPI_S= YST_GEN_ORIGIN_MODULE(MODULE_X, 0x1);+* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~= ~~~~~~~~~~~~+*/+#define MIPI_SYST_GEN_ORIGIN_MODULE(m, u) \+ {\+ = MIPI_SYST_GEN_GUID(0,0,0, ((mipi_syst_u16)(m & 0x7F)) << 8, 0 )= ,\+ u\+ }++/**+ * Global state initialization hook de= finition+ *+ * This function gets called in the context of the mipi_syst_in= it() API+ * function after the generic state members of the global state+ *= structure syst_hdr have been setup. It's purpose is to initialize the+ * p= latform dependent portion of the state and other necessary+ * platform spec= ific initialization steps.+ *+ * @param systh Pointer to global state struc= ture+ * @param p user defined value or pointer to data+ * @see mipi_syst_h= eader+ */+typedef void (MIPI_SYST_CALLCONV *mipi_syst_inithook_t)(+ struct= mipi_syst_header *systh,+ const void *p+ );++/**+ * Globa= l state destroy hook definition+ *+ * This function gets called in the cont= ext of the mipi_syst_destroy() API+ * function before the generic state mem= bers of the global state+ * structure syst_hdr have been destroyed. Its pur= pose is to free resources+ * used by the platform dependent portion of the = global state.+ *+ * @param systh Pointer to global state structure+ */+type= def void (MIPI_SYST_CALLCONV *mipi_syst_destroyhook_t)(+ struct mipi_syst_= header *systh+ );++#ifndef MIPI_SYST_PLATFORM_INCLUDED++/**+ * @defgroup = PCFG_Config Platform Feature Configuration Defines+ *+ * Defines to custom= ize the SyS-T feature set to match the platform needs.+ *+ * Each optional = library feature can be disabled by not defining the related+ * MIPI_SYST_PC= FG_ENABLE define. Removing unused features in this way reduces+ * both memo= ry footprint and runtime overhead of SyS-T.+ */++/**+ * @defgroup PCFG_Glob= al Platform Wide Configuration+ * @ingroup PCFG_Config+ *+ * These defines= enable global features in the SyS-T library.+ * @{+ */++/**+ * Extend SyS-= T handle data state+ *+ * This define extends the SyS-T handle state data s= tructure+ * mipi_syst_handle with platform private content. A platform typi= cally+ * stores data for fast trace hardware access in the handle data, for= + * example a volatile pointer to an MMIO space.+ *+ * The platform example= uses #mipi_syst_platform_handle as handle state+ * extension.+ */+#define = MIPI_SYST_PCFG_ENABLE_PLATFORM_HANDLE_DATA++/* MSVC and GNU compiler 64-bit= mode */++/**+ * Enable 64-bit instruction addresses+ *+ * Set this define = if running in 64-bit code address space.+ */+ #if defined (_WIN64) || defi= ned (__x86_64__) || defined (__LP64__)+#define MIPI_SYST_PCFG_ENABLE_64BIT_= ADDR+ #endif++/**+ * Enable atomic 64-bit write operations+ *+ * Set this = define if your platform supports an atomic 64-bit data write+ * operation. = This results in fewer MMIO accesses.The SyS-T library+ * defaults to 2 cons= ecutive 32-Bit writes otherwise.+ */+ #if defined (_WIN64) || defined (__x= 86_64__) || defined (__LP64__)+#define MIPI_SYST_PCFG_ENABLE_64BIT_IO+ #en= dif++/**+ * Enable helper function code inlining+ *+ * Set this define if s= peed is more important than code size on your platform.+ * It causes severa= l helper function to get inlined, producing faster, but+ * also larger, cod= e.+ */+#define MIPI_SYST_PCFG_ENABLE_INLINE++/** @} */++/**+ * @defgroup PC= FG_ApiSet Supported API sets+ * @ingroup PCFG_Config+ *+ * These defines e= nable API sets in the SyS-T library. They are set by default+ * depending o= n the SyS-T API conformance level. The level is specified using+ * the defi= ne #MIPI_SYST_CONFORMANCE_LEVEL.+ * @{+ */++ #if MIPI_SYST_CONFORMANCE_LEV= EL > 10++/**+ * Use SyS-T scatter write output function+ *+ * The library c= omes with an output routine that is intended to write data out+ * to an MMI= O space. It simplifies a SyS-T platform integration as+ * only low-level ac= cess macros must be provided for outputting data. These+ * macros follow MI= PI System Trace Protocol (STP) naming convention, also+ * non STP generator= s can use this interface.+ *+ * These low level output macros are:+ *+ * #M= IPI_SYST_OUTPUT_D32MTS, #MIPI_SYST_OUTPUT_D64MTS,+ * #MIPI_SYST_OUTPUT_D32T= S, #MIPI_SYST_OUTPUT_D64,+ * #MIPI_SYST_OUTPUT_D32, #MIPI_SYST_OUTPUT_D16, = #MIPI_SYST_OUTPUT_D8 and+ * #MIPI_SYST_OUTPUT_FLAG+ *+ * Note: This version= of the write function always starts messages+ * using a 32-bit timestamped= record also other sized timestamped+ * packets are allowed by the SyS-T sp= ecification.+ */+#define MIPI_SYST_PCFG_ENABLE_DEFAULT_SCATTER_WRITE++/**+ = * Enable the Catalog API for 32-Bit Catalog IDs.+ */+#define MIPI_SYST_PCFG= _ENABLE_CATID32_API++/**+ * Enable the Catalog API for 64-Bit Catalog IDs.+= */+#define MIPI_SYST_PCFG_ENABLE_CATID64_API++/**+ * Enable plain UTF-8 st= ring output APIs.+ */+#define MIPI_SYST_PCFG_ENABLE_STRING_API++/**+ * Enab= le raw data output APIs+ */+#define MIPI_SYST_PCFG_ENABLE_WRITE_API++/**+ *= Enable Build API+ */+#define MIPI_SYST_PCFG_ENABLE_BUILD_API+ #endif /* M= IPI_SYST_CONFORMANCE_LEVEL > 10 */++ #if MIPI_SYST_CONFORMANCE_LEVEL > 20= ++/**+ * Maximum size of printf payload in bytes.+ * Adjust this value if l= arger strings shall be supported by the library.+ * The buffer space is loc= ated in stack memory when calling one of the printf+ * style APIs.+ */+#def= ine MIPI_SYST_PCFG_PRINTF_ARGBUF_SIZE 1024++ #endif /* #if MIPI_SYST_CONF= ORMANCE_LEVEL > 20 */++/* @} */++/**+ * @defgroup PCFG_Message Optional Mes= sage Attributes+ * @ingroup PCFG_Config+ *+ * These defines enable optiona= l message components. They are set by default+ * depending on the SyS-T API= conformance level. The level is specified using+ * the define #MIPI_SYST_C= ONFORMANCE_LEVEL.+ * @{+ */++ #if MIPI_SYST_CONFORMANCE_LEVEL > 10++/**+ *= Enable 128-bit origin GUID support.+ */+#define MIPI_SYST_PCFG_ENABLE_ORIG= IN_GUID++/**+ * Enable protocol timestamp.+ *+ * This option adds a timesta= mp into the SyS-T protocol. This+ * option is used if the SyS-T protocol is= not embedded into a hardware+ * timestamped trace protocol like MIPI STP o= r if the HW timestamp cannot+ * be used for other reasons. Setting this opt= ion creates the need to define+ * the macros #MIPI_SYST_PLATFORM_CLOCK and = #MIPI_SYST_PLATFORM_FREQ to+ * return a 64-bit clock tick value and its fr= equency.+ */+#define MIPI_SYST_PCFG_ENABLE_TIMESTAMP++ #if defined (_DOX= YGEN_) /* only for doxygen, remove the #if to enable */++/**+* Enable gen= eration of length field+*+* Set this define if the message data shall inclu= de the optional length+* field that indicates how many payload bytes follow= .+*/+#define MIPI_SYST_PCFG_LENGTH_FIELD+ #endif++ #endif++ #if MIPI_S= YST_CONFORMANCE_LEVEL > 20++/**+ * Enable message data CRC32 generation.+ *= /+#define MIPI_SYST_PCFG_ENABLE_CHECKSUM++ #endif /* #if MIPI_SYST_CONFORM= ANCE_LEVEL */++/** @} */++ #include "Platform.h"+#endif++#if defined (MIPI= _SYST_PCFG_ENABLE_INLINE)+#define MIPI_SYST_INLINE static MIPI_SYST_CC_INL= INE+#else+#define MIPI_SYST_INLINE MIPI_SYST_EXPORT+#endif++#define _MIPI_= SYST_MK_MODUNIT_ORIGIN(m, u) (((u) & 0xF)|(m<<4))++/**+ * Location informa= tion inside a message (64-bit format)+ * Location is either the source posi= tion of the instrumentation call, or+ * the call instruction pointer value.= + */+union mipi_syst_msglocation32 {+ struct {+ #if defined (MIPI_SYST_BIG= _ENDIAN)+ mipi_syst_u16 etls_lineNo; /**< line number in file *= /+ mipi_syst_u16 etls_fileID; /**< ID of instrumented file */+ #els= e+ mipi_syst_u16 etls_fileID; /**< ID of instrumented file */+ m= ipi_syst_u16 etls_lineNo; /**< line number in file */+ #endif+ } = etls_source_location;++ mipi_syst_u32 etls_code_location : 32; /**< ins= truction pointer value */+};++/**+ * Location information inside a message = (32-bit format)+ * Location is either the source position of the instrument= ation call, or+ * the call instruction pointer value.+ */+union mipi_syst_m= sglocation64 {+ struct {+ #if defined (MIPI_SYST_BIG_ENDIAN)+ mipi_syst= _u32 etls_lineNo; /**< line number in file */+ mipi_syst_u32 = etls_fileID; /**< ID of instrumented file */+ #else+ mipi_syst_u32 = etls_fileID; /**< ID of instrumented file */+ mipi_syst_u32 etls_l= ineNo; /**< line number in file */+ #endif+ } etls_source_location;+= mipi_syst_u64 etls_code_location; /**< instruction pointer value */+};= ++/**+ * Location information record descriptor+ */+struct mipi_syst_msgloc= ation {+ /** Message format+ * 0 =3D 16-Bit file and 16-Bit line (total:= 32-bit)+ * 1 =3D 32-Bit file and 32-Bit line (total: 64-bit)+ * 2 =3D = 32-bit code address+ * 3 =3D 64-bit code address+ */+ mipi_syst_u8 = el_format;+ union {+ union mipi_syst_msglocation32 loc32; /**< data = for 32-bit variant */+ union mipi_syst_msglocation64 loc64; /**< dat= a for 64-bit variant */+ } el_u;+};++#ifndef MIPI_SYST_API_INCLUDED+ #in= clude "mipi_syst/api.h"+#endif++#endifdiff --git a/MdePkg/Library/MipiSysTL= ib/mipisyst b/MdePkg/Library/MipiSysTLib/mipisyst new file mode 160000 index 0000000000..aae857d0d0 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/mipisyst @@ -0,0 +1 @@ +Subproject commit aae857d0d05ac65152ed24992a4acd834a0a107c diff --git a/MdePkg/MdePkg.ci.yaml b/MdePkg/MdePkg.ci.yaml index 19bc0138cb= ..590cb85fd5 100644 --- a/MdePkg/MdePkg.ci.yaml +++ b/MdePkg/MdePkg.ci.yaml @@ -64,8 +64,10 @@ "Include/IndustryStandard/UefiTcgPlatform.h", "Inc= lude/Library/PcdLib.h", "Include/Library/SafeIntLib.h",+ = "Include/Library/MipiSysTLib.h", "Include/Protocol/DebugSu= pport.h",- "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeInt= Lib.c"+ "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib= .c",+ "Library/MipiSysTLib/mipi_syst.h" ] }, ## = options defined ci/Plugin/CompilerPlugindiff --git a/MdePkg/MdePkg.dec b/Md= ePkg/MdePkg.dec index 3d08f20d15..bee7ac538a 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -26,6 +26,7 @@ [Includes] Include Test/UnitTest/Include+ Library/MipiSysTLib/mipisys= t/library/include [Includes.IA32] Include/Ia32@@ -284,6 +285,10 @@ # ArmTrngLib|Include/Library/ArmTrngLib.h + ## @libraryclass Provid= es general mipi sys-T services.+ #+ MipiSysTLib|Include/Library/MipiSysTL= ib.h+ [LibraryClasses.IA32, LibraryClasses.X64, LibraryClasses.AARCH64] #= # @libraryclass Provides services to generate random number. #diff --gi= t a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index 32a852dc46..cbcf4a6047 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -34,6 +34,7 @@ [LibraryClasses] SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLi= b.inf+ MipiSysTLib|MdePkg/Library/MipiSysTLib/MipiSysTLib.inf [Components= ] MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf@@ -135,6 +136,7 = @@ MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf MdePkg/= Library/CcProbeLibNull/CcProbeLibNull.inf MdePkg/Library/SmmCpuRendezvous= LibNull/SmmCpuRendezvousLibNull.inf+ MdePkg/Library/MipiSysTLib/MipiSysTLi= b.inf [Components.IA32, Components.X64, Components.ARM, Components.AARCH64= ] #diff --git a/ReadMe.rst b/ReadMe.rst index 497d963559..283f807ab5 100644 --- a/ReadMe.rst +++ b/ReadMe.rst @@ -95,6 +95,7 @@ that are covered by additional licenses. - `UnitTestFrameworkPkg/Library/CmockaLib/cmocka `__= - `UnitTestFrameworkPkg/Library/GoogleTestLib/googletest `__ - `RedfishPkg/Library/JsonLib/jansson `__+- `MdePkg/L= ibrary/MipiSysTLib/mipisyst `__ The EDK II = Project is composed of packages. The maintainers for each package are liste= d in `Maintainers.txt `__.-- 2.28.0.windows.1