From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.88; helo=mga01.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 770EC220C2A60 for ; Fri, 9 Mar 2018 09:23:16 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Mar 2018 09:29:33 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,446,1515484800"; d="scan'208";a="26665209" Received: from orsmsx108.amr.corp.intel.com ([10.22.240.6]) by fmsmga002.fm.intel.com with ESMTP; 09 Mar 2018 09:29:33 -0800 Received: from orsmsx157.amr.corp.intel.com (10.22.240.23) by ORSMSX108.amr.corp.intel.com (10.22.240.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 9 Mar 2018 09:29:33 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.121]) by ORSMSX157.amr.corp.intel.com ([169.254.9.126]) with mapi id 14.03.0319.002; Fri, 9 Mar 2018 09:29:32 -0800 From: "Kinney, Michael D" To: Pankaj Bansal , "Gao, Liming" , Laszlo Ersek , "edk2-devel@lists.01.org" , "Kinney, Michael D" Thread-Topic: [edk2] [RFC] Add Platform Include path in modules Thread-Index: AQHTrstKuAYiAv4k2UKkWNfdFkwjRKO2TM/wgAC8SACAAFPcgP//jkiAgAF5jQCAAD4AgIAPr52A///maZA= Date: Fri, 9 Mar 2018 17:29:32 +0000 Message-ID: References: <1519626521-15902-1-git-send-email-pankaj.bansal@nxp.com> <76e5168a-e3c2-97bb-dac1-22ffc212c7ee@redhat.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E1D4100@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Subject: Re: [RFC] Add Platform Include path in modules X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Mar 2018 17:23:16 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Pankaj Bansal, Computed includes are really just a shorthand for #if statements around #include statements. These statements appear in the C code to a module. As long as all the platform packages that the include file might be included from are listed in the [Packages] section of the INF file for that module, then it is compatible with UDP. >>From a UDP perspective, this means that the package with=20 the more generic module cannot be installed until all the dependent platform packages have been installed. If you add support for more platforms, then you have to add platform packages to the [Packages] section of the more generic module. This dependency is the reverse of what we prefer. We prefer to have platform packages depend on more generic packages, so the more generic packages can be installed first without dependencies on any specific platform package. Mike > -----Original Message----- > From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Pankaj Bansal > Sent: Friday, March 9, 2018 2:54 AM > To: Gao, Liming ; Kinney, Michael > D ; Laszlo Ersek > ; edk2-devel@lists.01.org > Subject: Re: [edk2] [RFC] Add Platform Include path in > modules >=20 > Hi All, >=20 > Will It violate the UEFI Platform Initialization > Distribution Packaging Specification if we want to use > Computed Includes ? > https://gcc.gnu.org/onlinedocs/gcc- > 3.0.2/cpp_2.html#SEC10 >=20 > Thanks & Regards, > Pankaj Bansal >=20 > > -----Original Message----- > > From: Gao, Liming [mailto:liming.gao@intel.com] > > Sent: Tuesday, February 27, 2018 4:52 PM > > To: Pankaj Bansal ; Kinney, > Michael D > > ; Laszlo Ersek > ; edk2- > > devel@lists.01.org > > Subject: RE: [edk2] [RFC] Add Platform Include path in > modules > > > > Hi, > > For the first one, the same PCD can be configured to > the different value for > > the different SkuId. > > > > Here is wiki on structure pcd enable step and > examples. > > > https://emea01.safelinks.protection.outlook.com/?url=3Dhtt > ps%3A%2F%2Fgith > > ub.com%2Flgao4%2Fedk2%2Fwiki%2FStructurePcd-Enable- > > > Steps&data=3D02%7C01%7Cpankaj.bansal%40nxp.com%7C613339ac8 > 21e4bcc9 > > > fd508d57dd44781%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7 > C0%7C6 > > > 36553273075487313&sdata=3DDNiyfbhwN%2BKdFkltL%2FQQTzWFc8hh > nNsXbC > > 4KjIHUy%2Bs%3D&reserved=3D0 > > > > TestPkg in > > > https://emea01.safelinks.protection.outlook.com/?url=3Dhtt > ps%3A%2F%2Fgith > > > ub.com%2Flgao4%2Fedk2%2Ftree%2FUDK2018&data=3D02%7C01%7Cpa > nkaj.b > > > ansal%40nxp.com%7C613339ac821e4bcc9fd508d57dd44781%7C686 > ea1d3bc > > > 2b4c6fa92cd99c5c301635%7C0%7C0%7C636553273075487313&sdat > a=3D8aBhP > > vNDkt%2FPb2kmAEXz0gERW9MFGD3kt8YcvjGi7jc%3D&reserved=3D0 > has the > > sample case with structure pcd. > > > > Thanks > > Liming > > >-----Original Message----- > > >From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of > > >Pankaj Bansal > > >Sent: Tuesday, February 27, 2018 3:40 PM > > >To: Kinney, Michael D ; > Laszlo Ersek > > >; edk2-devel@lists.01.org > > >Cc: Gao, Liming > > >Subject: Re: [edk2] [RFC] Add Platform Include path > in modules > > > > > >Hi Laszlo/Michael, > > > > > >Thanks for your feedback on this proposal. > > >I looked at the structured PCDs and UEFI Platform > Initialization > > >Distribution Packaging Specification. > > >Here is my take on these. > > > > > >1. structured PCDs are good if we want to declare > single complex structure. > > > But consider a case where I want to keep device > information in structure. > > >(e.g. hardware settings, limitations etc) > > > And we may want to tweak this information based > on platform > > >revision being used. > > > And different platforms can have different number > of such devices. > > > In this case, when we want to add a new platform, > we might need to > > >introduce new PCDs in .dec files, which will not be > needed for others. > > > I don't know, will this even increase the PCD > database size for > > >existing platforms or not ? > > > > > >2. To mitigate the "hidden" dependency of a module on > platform, we can > > >explicitly declare this dependency in module inf > file. > > > I am thinking something like gEfiCallerIdGuid, > i.e. module can > > >declare that that platform building(using) the > module, supply this > > information. > > > > > >3. Using Libraries and Protocols can also solve such > use cases. I just > > >felt that it's less cumbersome to use include files, > and it also avoids code > > replication. > > > Anyway, this is just my suggestion to have such > mechanism in edk2 > > >build process. I am more than happy to stick to > platform libraries. > > > > > >Thanks & Regards, > > >Pankaj Bansal > > > > > >> -----Original Message----- > > >> From: Kinney, Michael D > [mailto:michael.d.kinney@intel.com] > > >> Sent: Monday, February 26, 2018 10:56 PM > > >> To: Laszlo Ersek ; Pankaj Bansal > > >> ; edk2-devel@lists.01.org; > Kinney, Michael D > > >> > > >> Cc: Gao, Liming > > >> Subject: RE: [edk2] [RFC] Add Platform Include path > in modules > > >> > > >> Hi Pankaj, > > >> > > >> I agree with Laszlo that you should evaluate use of > PCDs. There are > > >> a few methods for a driver to use platform specific > values/behavior. > > These are: > > >> > > >> * PCDs > > >> * Library class/Library Instance > > >> * Protocol/PPI > > >> > > >> One issue with the proposal is that it adds a > hidden dependency to > > modules. > > >> An EDK II INF file describes the external > interfaces of a module > > >> along with produces/consumes usage. This > information is aligned with > > >> the XML > > >schema > > >> that is documented in the UEFI Platform > Initialization Distribution > > >> Packaging Specification. > > >> > > >> > > >> > > > >https://emea01.safelinks.protection.outlook.com/?url=3Dht > tp%3A%2F%2Fuefi > > . > > >> > > > >org%2Fspecifications&data=3D02%7C01%7Cpankaj.bansal%40nxp > .com%7C96c > > 4 > > >> > > > 2dd7271d449d56e908d57d3df2d4%7C686ea1d3bc2b4c6fa92cd99c5 > c301635 > > >> > > > %7C0%7C0%7C636552627376357192&sdata=3DsS7KT3haANF5TLHSeRGj > IQHnLQ > > >> BtnTDLIZWntUhsk78%3D&reserved=3D0 > > >> > > >> If two modules have the same GUID/Version, then the > external > > >> interfaces > > >to > > >> those two modules are expected to be identical. > > >> With your proposal, two modules built for 2 > different platforms would > > >> have the same GUID/Version but would not have the > same external > > >> interfaces because a hidden dependency on a > platform package was > > added. > > >> > > >> If a module really needs to use content from a > platform package, then > > >> a > > >new > > >> copy of the module should be created with a new > GUID/Version and the > > >> platform package added to the [Packages] section. > The other option > > >> is to > > >use > > >> one of the supported interfaces (PCDs, Lib, > Protocol, PPI). > > >> > > >> Please let us know if any of these exiting methods > do not work for > > >> your use case. > > >> > > >> Thanks, > > >> > > >> Mike > > >> > > >> > -----Original Message----- > > >> > From: Laszlo Ersek [mailto:lersek@redhat.com] > > >> > Sent: Monday, February 26, 2018 7:55 AM > > >> > To: Pankaj Bansal ; > Kinney, Michael D > > >> > ; edk2- > devel@lists.01.org > > >> > Cc: Gao, Liming > > >> > Subject: Re: [edk2] [RFC] Add Platform Include > path in modules > > >> > > > >> > On 02/26/18 11:55, Pankaj Bansal wrote: > > >> > > Hi, > > >> > > > > >> > > Consider a simple driver which needs that some > data > > >> > structures be > > >> > > filled by the Platform, which is using the > driver. > > >> > > > > >> > > Driver.c #include > > >> > > > > >> > > Struct a =3D platformVal; > > >> > > > > >> > > We can define platformVal in Platform.h, which > would > > >> > be unique to the > > >> > > platform being built. This Platform.h can be > placed in > > >> > include > > >> > > directories, whose path would be defined in > > >> > Platform.dec file. > > >> > > > > >> > > Now, whenever we build driver for each unique > > >> > platform, we need not > > >> > > to mention Platform.dec file in driver.inf > [packages] > > >> > section. We can > > >> > > append Platform.dec include paths to each > driver. i.e. > > >> > look for the > > >> > > include files in [packages] section as well as > in > > >> > Platform include > > >> > > directories. > > >> > > > > >> > > For this, I am looking for Platform.dec file in > same > > >> > directory as > > >> > > Platform.dsc and using same name as > Platform.dsc > > >> > > > > >> > > We can refine this change further. i.e. add > Platform > > >> > include > > >> > > directories to driver's include paths based on > some > > >> > condition in > > >> > > driver.inf file. > > >> > > > >> > (Apologies in advance if I failed to grasp the > use > > >> > case.) > > >> > > > >> > If I understand correctly, you have multiple > platforms (defined by > > >> > DSC and FDF files), and you build a given driver > for several of > > >> > these platforms, separately. And, when building > the driver for the > > >> > separate platforms, you'd like the driver to get > different > > >> > initializers for various static (global) > structure variables. > > >> > > > >> > Have you tried the structured PCD format? I think > that could cover > > >> > your use case. > > >> > > > >> > Unfortunately I couldn't find anything about > structured PCDs in the > > >> > edk2 specs, but there are several BZ references > in the following > > >> > mailing list > > >> > message: > > >> > > > >> > [edk2] [Patch 00/14] Enable Structure PCD support > in > > >> > edk2 > > >> > > > >> > > > >> > > > >https://emea01.safelinks.protection.outlook.com/?url=3Dht > tp%3A%2F%2Fmid > > . > > >> > mail-archive.com%2F1512140335-6932-1-git-send- > > >> &data=3D02%7C01%7Cpankaj.b > > >> > > > >> > > > ansal%40nxp.com%7C96c42dd7271d449d56e908d57d3df2d4%7C686 > ea1d3b > > >> c2b4c6fa > > >> > > > >> > > > 92cd99c5c301635%7C0%7C0%7C636552627376357192&sdata=3DiR50v > %2F4Jg% > > >> 2BZQh7P > > >> > 1LB1bxeCryTangpA1SyVCwCEQW2U%3D&reserved=3D0 > > >> > email-liming.gao@intel.com > > >> > > > >> > Thanks > > >> > Laszlo > > >_______________________________________________ > > >edk2-devel mailing list > > >edk2-devel@lists.01.org > > > >https://emea01.safelinks.protection.outlook.com/?url=3Dht > tps%3A%2F%2Flist > > >s.01.org%2Fmailman%2Flistinfo%2Fedk2- > > devel&data=3D02%7C01%7Cpankaj.bansal > > > >%40nxp.com%7C613339ac821e4bcc9fd508d57dd44781%7C686ea1d > 3bc2b4 > > c6fa92cd99 > > > >c5c301635%7C0%7C0%7C636553273075487313&sdata=3DCFicYp1LfC > JDNiy1BV > > QHssZPLY > > >YT3bG6odDjBADql8I%3D&reserved=3D0 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel