From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web12.737.1626367728949540102 for ; Thu, 15 Jul 2021 09:48:49 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=mdnftyoG; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: digant.h.solanki@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10046"; a="210633895" X-IronPort-AV: E=Sophos;i="5.84,242,1620716400"; d="scan'208";a="210633895" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jul 2021 09:48:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,242,1620716400"; d="scan'208";a="494642850" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by orsmga001.jf.intel.com with ESMTP; 15 Jul 2021 09:48:40 -0700 Received: from orsmsx605.amr.corp.intel.com (10.22.229.18) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Thu, 15 Jul 2021 09:48:40 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Thu, 15 Jul 2021 09:48:40 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.173) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.10; Thu, 15 Jul 2021 09:48:38 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dANpSHEpUD52fVQ2kfwGdF0aU0xf2CYZlcDX/zUZvIXK32AdQ7mJUEl7I1m2ImvT94sWTQ7OFC6Xl4/ntshI+S/ji6jXwjQoeMIbKls1vqhbbRDfvL3hLSCcUkjjM9uRd3hCOt9g3aJFV90KBXfKApMTilT3MtdrUK6LrgOex9kLZQrQrTRrznXsKZF4esl+Sk5citcfHoFtR5kCjGqlVrDchHKSOGN5POIkfOkgQiKTcqCdzYEnCBJNW6WwJEeqYheAKdXkbpDJoHP3CuLnYv/PdptmBZ9sClm7ys89IlP1LqeXcp+iMUeoRsmivSbpLcVM1UfD9RklVYyTqqm3TA== 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-SenderADCheck; bh=YvbbzD2LrD1SIg4HkJcRZt2PnRu52KiJzZ5D+C6rreI=; b=gsAOhN5LTLfkTEA+1q0cyOXbbU+RyxkU9Jk36cLiuKlbcppmRUAMONdVdpsCC9icpud6/SbW1lZMKsKvZPE/6r0gBKFHN+VLHGahBET66pVghUNiHWVap1Ofo8k5EJRhMv/6CgrZqdsBU1Zq/1DQLwZBmuGC0XoGdg/0i4TFJzMUx9s4xITAJHOXbvP07G6mz1MdFR/C10E9mTTkPLEhB2Y3nwYATddm2IIN/OfoQDztXjDC5btsJtoujzEyc2GgXC/EDD53My1vXsIcOm4IHWAZ1AYHX1xEF0lalCiAYrjQu8wu+ivIgrQqBVXTaAS4tjJbHbB7Rwm/nqr7bbWoXA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YvbbzD2LrD1SIg4HkJcRZt2PnRu52KiJzZ5D+C6rreI=; b=mdnftyoGbcw6CqqVdGZ3qpYazLfgM0DAesUc3ChQ02qHb1qOYXwh1JaSpb7QkTKLWhDLaKPgD2lWNvxXzZZoCYwHqadtTe+yMYexwOH5cbL3U8mUYAhajlZd75Wm6VM4kAy5ZP5ksxm33JxBi5KwE5rue/mW6NKOoS1O0MTUvTg= Received: from CO6PR11MB5571.namprd11.prod.outlook.com (2603:10b6:5:35f::9) by CO6PR11MB5650.namprd11.prod.outlook.com (2603:10b6:5:35a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 15 Jul 2021 16:48:36 +0000 Received: from CO6PR11MB5571.namprd11.prod.outlook.com ([fe80::1053:3a0c:224f:f8c2]) by CO6PR11MB5571.namprd11.prod.outlook.com ([fe80::1053:3a0c:224f:f8c2%9]) with mapi id 15.20.4331.024; Thu, 15 Jul 2021 16:48:36 +0000 From: "Solanki, Digant H" To: "Chaganty, Rangasai V" , "devel@edk2.groups.io" CC: "Ni, Ray" , "S, Ashraf Ali" Subject: Re: [PATCH] IntelSiliconPkg: Add IgdOpRegion30.h to support IGD OpRegion v3.0 Thread-Topic: [PATCH] IntelSiliconPkg: Add IgdOpRegion30.h to support IGD OpRegion v3.0 Thread-Index: AQHXdAT0LGMLAiJbwkSR4xcDY6mniqtDnbKAgACqbGA= Date: Thu, 15 Jul 2021 16:48:36 +0000 Message-ID: References: <20210708142345.4511-1-digant.h.solanki@intel.com> In-Reply-To: Accept-Language: en-IN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 016213e4-9e65-47a2-7cc3-08d947b0641e x-ms-traffictypediagnostic: CO6PR11MB5650: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2043; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: veYVVVgS5iz70IfWiGe5PT17WUu940i9ulWHDzQUxioCBJ/xG3HkVAwREpI7HZiLPbHT9uKjeKYRIM4jIG4BfyQq367f5bI/UVP6Zrk58TeZyNC7LM+yg1A+V5z/omJXVVTI8bCYd3T0ZhNY5XKfqOLlW+t6Z4aCBjqebegc7IORK7IzbcmAYugFYA1I0JMwi3w8RvhQc/G2PfUDVq0xx33PwmYNnv8khx+1noxup16vTAOjUx75gJ2IEsH2oq/k6KR9dG/FCSr24J/EKE3BwL35rtcFoRca3hLiKh4cZ0LFxRGI3y7nEFEHcb8JTIjDjY70LxcCyjYh1E+L2cnjd9bpT/cU2aTAKYDk+IL6jhDzcd40/nXPypKy/A2ORWmPdDm9opd3O/GyyantZQp9QV3VW8EU+UJxbeC7NS49n2t3HGo218FQtoCQYeAJWfD9qAckzveUwmeFoWbMrc2OqNsUHul/XPkivzCIKo2uW5fVRvERUbATAyTXw0Vv8Z6cGffbJTuTPocZs2ucy41n9m62khzJbj8HV09UuSvPucG0i08hVZMA4zt5plWCWT/GCheNNCguaaoxNp1gYYcQu91c6QMQRvVwimXNiTD0K+nUxWBCvBR//+6BWVFvyUEqOXJ0TyF+oAr45fS9oSNKFYgxBgPgNYbiqHz1jqJhAyIvq5yCuS/VH/Aivy4KRFx4BxMAONIfCfOQIaxL+X3s/9uaNm+tnUX/vhbXDXOTx2YS4m85XEEHUxPuNOFgnetevLkYU4XPFJ76SrUtNxL80MWmqy/8pzZhnZVB08OF36c= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR11MB5571.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(6029001)(4636009)(366004)(39860400002)(136003)(346002)(396003)(376002)(186003)(38100700002)(52536014)(26005)(76116006)(71200400001)(5660300002)(316002)(107886003)(33656002)(122000001)(53546011)(66946007)(4326008)(478600001)(8676002)(8936002)(66556008)(66446008)(64756008)(7696005)(55016002)(83380400001)(110136005)(54906003)(9686003)(86362001)(66476007)(6506007)(2906002)(38070700004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?vB0rwCgCPjtW+4arwdaayPhiiun1MJYULoTZ+K0adXCyAms+eJ0js5L6sGWp?= =?us-ascii?Q?3XnfNbVzdHu5dLhfLrXjfvbL9MUVdrI/PeJpwkWpRJTZ854VoneQTxFODKxk?= =?us-ascii?Q?Rue8PnfpOjhXz2VZj6T5CF5hK+8axIF246F7I1Wtfw3F1toyLk/oWCtKZFUC?= =?us-ascii?Q?szS8eV39eXvLyEq0YljR2rnKGXDtLGsYOkx7y00o7Z6a5lTGMz13VKn6blXL?= =?us-ascii?Q?oM9SPuEb6HgOjR/Uttvgdb28wxqJBrAJdXfXNek670WCE4+Hdye/KYl7CYfa?= =?us-ascii?Q?XAsjbpqUN8soPyBYii/1UTXdI2ztmryg7KPlOAg0rUJtiryxKQQCkOq0LPo1?= =?us-ascii?Q?Etu3xY14eTxVZWLKCjTvVWjjfb7PZkFMBTyAStfkp4oUIfnkvePXFtXljIH6?= =?us-ascii?Q?Hl4Q4Lb2G9nKIdZeeWLX57yOuvtpJsI9VspWiHfZFwgRoBte6j2LwYfGD69Q?= =?us-ascii?Q?W7DxnqM3jgV+bd6j6T5XkhD7wojLOSyDzwUShKMY8tC/TusCMMA4mUOqreku?= =?us-ascii?Q?7SV03N9x3SFmAjXUDrLW0V51HQupzOeVy+KSgA74YXlNQbMV5uQFKkgNZIwl?= =?us-ascii?Q?yK5WVXuLdlxtPpQu0oDPncqrOE2XfVYKJmkwCaWHSQXxDtk76yOoMzUBSEpV?= =?us-ascii?Q?TCAGKFxfY2LncbiqwWZqoifFAPoKW9YpgIvkAIKMufQu9/4aGQ3EDmeXp4Eu?= =?us-ascii?Q?DVQkgi7hvmB40Njzg/whwjdz8OXttBB/bW2Iw8LKFjbdE6K5f2onOmb9KPcQ?= =?us-ascii?Q?T52nCM6zw8Eh6Bnylt3nsJiIg66yEbw81VXZccuFRdt+Ofu0NfKAFb+DFBHY?= =?us-ascii?Q?jXR9McYk5eEaaSEQU7vgkBcTqULFBUZIkGOsk1O3ySaIwL7LeapmndHhCri4?= =?us-ascii?Q?Zk06ahdMaH2DuAcgvlDyO7D17fE04Cpqb93YASPhWA9wlOYoHDKH/e8gTnWB?= =?us-ascii?Q?A57KPv9cNxgNj4b0jSUCldQBFNTXNG2mYveByKL4Fbo6g40egYyJGjqErSDQ?= =?us-ascii?Q?lE0mk/FzVXEpihlbD0CM1okrq5DmMU5crO2UXXAAt1macxmakEqW0dzjozLp?= =?us-ascii?Q?E2PXdu7PFWvkI1dAqUIRrWrn77DalQFMnsgZ2Aje0vv5bgufhcixVz2KSbvi?= =?us-ascii?Q?Pry5RRy/bRpdZUMWQ+h3Sbrb3K+dC6Xl7Pv9/NU0g3JxGZVHQPb9IQFlt3Nd?= =?us-ascii?Q?dZpEAJTGskUiu6TDJDmflIgN1vxyxwzAhhaQO0kn+QY+sTXcJPM3IX9j1cbY?= =?us-ascii?Q?g2+8JAfmTMcla5LooXYr5XcaG1WJM1zno7kCZyqMpq1ItAVL6o+m1eXuYkWH?= =?us-ascii?Q?qIoBSqY31KCOdpfmA4b7RXSX?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR11MB5571.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 016213e4-9e65-47a2-7cc3-08d947b0641e X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Jul 2021 16:48:36.8245 (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: qyVuaR9iaPtya914Wz3/dCWb4E42HNHQANmcqg0wVFaIqKTAsN1VL/52ee3BPEtVJif5/kyhhs6jDu2/LnPK/fme9QAYFoc6M9fKFxXvNNY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR11MB5650 Return-Path: digant.h.solanki@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Sai, Pls find answers inline. Thanks Digant -----Original Message----- From: Chaganty, Rangasai V =20 Sent: Thursday, July 15, 2021 12:00 PM To: Solanki, Digant H ; devel@edk2.groups.io Cc: Ni, Ray ; S, Ashraf Ali Subject: RE: [PATCH] IntelSiliconPkg: Add IgdOpRegion30.h to support IGD Op= Region v3.0 Few comments: 1. Please pack the structures correctly using #pragma pack(1)/ #pragma pack= () pairs. [Digant] Sure will do that in next patch. 2. What is the purpose of IGD_OPREGION_HEADER_MBOX2_VER_3_0 macro definiti= on and assigning it to a value of BIT5. [Digant] There is a field MBOX which has to be programmed with which mailbo= xes are supported by for Gfx driver to use. It was BIT1 was for MBOX2 in pr= evious version but it is obsoleted and defined BIT5 for MBOX2 support from = Version 3.0 onwards. 3. Is the 3.0 version backward compatible to the one that is currently avai= lable? I am wondering if there are reasons to carry obsolete members in 3.0= version. [Digant] Not it won't be backward compatible. The reason to keep obsoleted = members is because it is marked same (obsolete) in Bspec also. So just alig= ning with it. Regards, Sai -----Original Message----- From: Solanki, Digant H Sent: Thursday, July 08, 2021 7:24 AM To: devel@edk2.groups.io Cc: Solanki, Digant H ; Ni, Ray ; Chaganty, Rangasai V ; S, Ashraf Ali Subject: [PATCH] IntelSiliconPkg: Add IgdOpRegion30.h to support IGD OpRegi= on v3.0 REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3426 - There are many OpRegion fields obsoleted in MBOX1 - MBOX2 is re-purposed for Backlight related fields for dual LFP. - Backlight related fields moved to MBOX2 from MBOX3 and some fields are ob= soleted in MBOX3. Signed-off-by: Digant H Solanki Cc: Ray Ni Cc: Rangasai V Chaganty Cc: Ashraf Ali S --- Silicon/Intel/IntelSiliconPkg/Include/IndustryStandard/IgdOpRegion30.h | 1= 00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/Silicon/Intel/IntelSiliconPkg/Include/IndustryStandard/IgdOpRe= gion30.h b/Silicon/Intel/IntelSiliconPkg/Include/IndustryStandard/IgdOpRegi= on30.h new file mode 100644 index 0000000000..422a60bdbd --- /dev/null +++ b/Silicon/Intel/IntelSiliconPkg/Include/IndustryStandard/IgdOpRegion +++ 30.h @@ -0,0 +1,100 @@ +/** @file + IGD OpRegion definition from Intel Integrated Graphics Device=20 +OpRegion + Specification based on version 3.0. + + Copyright (c) 2021, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#ifndef _IGD_OPREGION_3_0_H_ +#define _IGD_OPREGION_3_0_H_ + +#include "IgdOpRegion.h" + +#define IGD_OPREGION_HEADER_MBOX2_VER_3_0 BIT5 + +/// +/// OpRegion Mailbox 1 - Public ACPI Methods /// Offset 0x100, Size +0x100 /// typedef struct { + UINT32 DRDY; ///< Offset 0x100 Driver Readiness + UINT32 CSTS; ///< Offset 0x104 Status + UINT32 CEVT; ///< Offset 0x108 Current Event + UINT8 RM11[0x14]; ///< Offset 0x10C Reserved Must be Zero + UINT32 DIDL[8]; ///< Offset 0x120 Supported Display Devices ID Lis= t + UINT32 CPDL[8]; ///< Offset 0x140 obsolete + UINT32 CADL[8]; ///< Offset 0x160 obsolete + UINT32 NADL[8]; ///< Offset 0x180 obsolete + UINT32 ASLP; ///< Offset 0x1A0 ASL Sleep Time Out + UINT32 TIDX; ///< Offset 0x1A4 obsolete + UINT32 CHPD; ///< Offset 0x1A8 obsolete + UINT32 CLID; ///< Offset 0x1AC Current Lid State Indicator + UINT32 CDCK; ///< Offset 0x1B0 Current Docking State Indicator + UINT32 SXSW; ///< Offset 0x1B4 obsolete + UINT32 EVTS; ///< Offset 0x1B8 obsolete + UINT32 CNOT; ///< Offset 0x1BC obsolete + UINT32 NRDY; ///< Offset 0x1C0 Driver Status + UINT8 DID2[0x1C]; ///< Offset 0x1C4 Extended Supported Devices ID Li= st (DOD) + UINT8 CPD2[0x1C]; ///< Offset 0x1E0 obsolete + UINT8 RM12[4]; ///< Offset 0x1FC - 0x1FF Reserved Must be zero +} IGD_OPREGION_MBOX1_VER_3_0; + +/// +/// OpRegion Mailbox 2 - Backlight communication /// Offset 0x200, Size +0x100 /// typedef struct { + UINT32 BCL1; ///< Offset 0x200 Backlight Brightness for LFP1 + UINT32 BCL2; ///< Offset 0x204 Backlight Brightness for LFP2 + UINT32 CBL1; ///< Offset 0x208 Current User Brightness Level fo= r LFP1 + UINT32 CBL2; ///< Offset 0x20C Current User Brightness Level fo= r LFP2 + UINT32 BCM1[0x1E]; ///< Offset 0x210 Backlight Brightness Levels Duty= Cycle Mapping Table for LFP1 + UINT32 BCM2[0x1E]; ///< Offset 0x288 Backlight Brightness Levels Duty= Cycle Mapping Table for LFP2 +} IGD_OPREGION_MBOX2_VER_3_0; + +/// +/// OpRegion Mailbox 3 - BIOS/Driver Notification - ASLE Support ///=20 +Offset 0x300, Size 0x100 /// typedef struct { + UINT32 ARDY; ///< Offset 0x300 obsolete + UINT32 ASLC; ///< Offset 0x304 obsolete + UINT32 TCHE; ///< Offset 0x308 obsolete + UINT32 ALSI; ///< Offset 0x30C obsolete + UINT32 BCLP; ///< Offset 0x310 obsoleted in ver 3.0, moved to M= ailbox 2. + UINT32 PFIT; ///< Offset 0x314 obsolete + UINT32 CBLV; ///< Offset 0x318 obsoleted in ver 3.0, moved to M= ailbox 2. + UINT16 BCLM[0x14]; ///< Offset 0x31C obsoleted in ver 3.0, moved to M= ailbox 2. + UINT32 CPFM; ///< Offset 0x344 obsolete + UINT32 EPFM; ///< Offset 0x348 obsolete + UINT8 PLUT[0x4A]; ///< Offset 0x34C obsolete + UINT32 PFMB; ///< Offset 0x396 obsolete + UINT32 CCDV; ///< Offset 0x39A obsolete + UINT32 PCFT; ///< Offset 0x39E obsolete + UINT32 SROT; ///< Offset 0x3A2 obsolete + UINT32 IUER; ///< Offset 0x3A6 obsolete + UINT64 FDSS; ///< Offset 0x3AA obsolete + UINT32 FDSP; ///< Offset 0x3B2 obsolete + UINT32 STAT; ///< Offset 0x3B6 obsolete + UINT64 RVDA; ///< Offset 0x3BA Physical address of Raw VBT data= . Added from Spec Version 0.90 to support VBT greater than 6KB. + UINT32 RVDS; ///< Offset 0x3C2 Size of Raw VBT data. Added from= Spec Version 0.90 to support VBT greater than 6KB. + UINT8 VRSR; ///< Offset 0x3C6 Video RAM Self Refresh + UINT64 DLHP; ///< Offset 0x3C7 Dual LFP Hinge Alignment Paramet= ers + UINT8 RM32[0x31]; ///< Offset 0x3CF - 0x3FF Reserved Must be zero. +} IGD_OPREGION_MBOX3_VER_3_0; + +/// +/// IGD OpRegion Structure +/// +typedef struct { + IGD_OPREGION_HEADER Header; ///< OpRegion header (Offset 0x0, Si= ze 0x100) + IGD_OPREGION_MBOX1_VER_3_0 MBox1; ///< Mailbox 1: Public ACPI=20 +Methods (Offset 0x100, Size 0x100) + IGD_OPREGION_MBOX2_VER_3_0 MBox2; ///< Mailbox 2: Backlight=20 +communication (Offset 0x200, Size 0x100) + IGD_OPREGION_MBOX3_VER_3_0 MBox3; ///< Mailbox 3: BIOS to Driver Notif= ication (Offset 0x300, Size 0x100) + IGD_OPREGION_MBOX4 MBox4; ///< Mailbox 4: Video BIOS Table (VB= T) (Offset 0x400, Size 0x1800) + IGD_OPREGION_MBOX5 MBox5; ///< Mailbox 5: BIOS to Driver Notif= ication Extension (Offset 0x1C00, Size 0x400) +} IGD_OPREGION_STRUCTURE_VER_3_0; +#pragma pack() + +#endif -- 2.30.2.windows.1