From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ml01.01.org (Postfix) with ESMTP id 75B401A1DF5 for ; Fri, 5 Aug 2016 12:48:47 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 05 Aug 2016 12:48:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,474,1464678000"; d="scan'208";a="1030547144" Received: from gpmudusu-mobl5.amr.corp.intel.com ([10.252.128.137]) by orsmga002.jf.intel.com with ESMTP; 05 Aug 2016 12:48:47 -0700 From: Giri P Mudusuru To: edk2-devel@lists.01.org Cc: Jiewen Yao , Maurice Ma , Satya Yarlagadda Date: Fri, 5 Aug 2016 12:48:20 -0700 Message-Id: <2274b2263cd642510dd284c76c24d4cc8cbc4f63.1470426332.git.giri.p.mudusuru@intel.com> X-Mailer: git-send-email 2.9.0.windows.1 MIME-Version: 1.0 Subject: [PATCH] IntelFsp2Pkg: Converted GenCfgOptUserManual from .docx to .md format X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Aug 2016 19:48:47 -0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converted the the word format of the documentation into markdown format for GenCfgOpt.py Cc: Jiewen Yao Cc: Maurice Ma Cc: Satya Yarlagadda Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Giri P Mudusuru --- .../Tools/UserManuals/GenCfgOptUserManual.docx | Bin 28336 -> 0 bytes .../Tools/UserManuals/GenCfgOptUserManual.md | 353 +++++++++++++++++++++ 2 files changed, 353 insertions(+) delete mode 100644 IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.docx create mode 100644 IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.md diff --git a/IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.docx b/IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.docx deleted file mode 100644 index c8766d5775158a3a6d17d9a0ffda598c8ea516ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28336 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�*=l>~ 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 Uu$FT(x`7RthBdwh^P8>z1HD}In*aa+ diff --git a/IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.md b/IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.md new file mode 100644 index 0000000..6291899 --- /dev/null +++ b/IntelFsp2Pkg/Tools/UserManuals/GenCfgOptUserManual.md @@ -0,0 +1,353 @@ +#Name +**GenCfgOpt.py** The python script that generates UPD text (**.txt**) files for +the compiler, header files for the UPD regions, and generates a Boot Settings +File (**BSF**), all from an EDK II Platform Description (**DSC**) file. + +#Synopsis +``` +GenCfgOpt UPDTXT PlatformDscFile BuildFvDir [TxtOutFile] [-D Macros] +GenCfgOpt HEADER PlatformDscFile BuildFvDir [InputHFile] [-D Macros] +GenCfgOpt GENBSF PlatformDscFile BuildFvDir BsfOutFile [-D Macros] +``` + +#Description +**GenCfgOpt.py** is a script that generates configuration options from an +**EDK II Platform Description (DSC)** file. It has three functions. + + 1. It produces a **.txt** file that is used by the compiler that summarizes + the UPD section in the DSC file. + 2. It generates header files for the UPD regions. + 3. It generates a **Boot Settings File (BSF)** that can be used by the + **Binary Configuration Tool (BCT)** to provide a graphical user + interface for manipulating settings in the UPD regions. + +The **GenCfgOpt.py** script generates important files that are vital parts of +your build process. The **UPDTXT** and **HEADER** use cases must be done before +the **'build'** command; the **GENBSF** use case may be done at any time. + +The following sections explain the three use cases. + +## 1. GenCfgOpt.py UPDTXT +The **UPDTXT** option creates a text file with all the UPD entries, offsets, +size in bytes, and values. **GenCfgOpt** reads this information from the +**[PcdsDynamicVpd.Upd]** section of the project's DSC file. The DSC file allows +you to specify offsets and sizes for each entry, opening up the possibility of +introducing gaps between entries. **GenCfgOpt** fills in these gaps with UPD +entries that have the generic names **UnusedUpdSpaceN** where N begins with 0 +and increments. The command signature for **UPDTXT** is: + +``` +GenCfgOpt UPDTXT PlatformDscFile BuildFvDir [TxtOutFile] [-D Macros] +``` + +**PlatformDscFile** must be the location of the DSC file for the platform you're +building. **BuildFvDir** is the location where the binary will be stored. The +optional **TxtOutFile** is a name and location for the output of **GenCfgOpt**. +The default name and location is the ```.txt``` in the directory +specified by **BuildFvDir**. The macro ```UPD_TOOL_GUID``` must be defined in +the DSC file or in the optional Macros arguments. Each optional macro argument +must follow the form ```–D =```. + +**GenCfgOpt** checks to see if the UPD txt file has already been created and +will only re-create it if the DSC was modified after it was created. + +## 2. GenCfgOpt.py HEADER +The **HEADER** option creates header files in the build folder. Both header +files define the ```_UPD_DATA_REGION``` data structures in FspUpd.h, FsptUpd.h, +FspmUpd.h and FspsUpd.h. In these header files any undefined elements of +structures will be added as **ReservedUpdSpaceN** beginning with N=0. The +command signature for **HEADER** is + +```GenCfgOpt HEADER PlatformDscFile BuildFvDir [InputHFile] [-D Macros]``` + +**PlatformDscFile** and **BuildFvDir** are described in the previous section. +The optional **InputHFile** is a header file that may contain data definitions +that are used by variables in the UPD regions. This header file must contain +the special keywords ```!EXPORT EXTERNAL_BOOTLOADER_STRUCT_BEGIN``` and +```!EXPORT EXTERNAL_BOOTLOADER_STRUCT_END``` in comments. Everything between +these two keywords will be included in the generated header file. +The mechanism to specify whether a variable appears as **ReservedUpdSpaceN** in +the FspUpd.h header file is in special commands that appear in the comments of +the DSC file. The special commands begin with ```!HDR```, for header. The +following table summarizes the two command options. + +### HEADER +Use the **HEADER** command to hide specific variables in the public header file. +In your project DSC file, use ```!HDR HEADER:{OFF}``` at the beginning of the +section you wish to hide and ```!HDR HEADER:{ON}``` at the end. + +### STRUCT +The **STRUCT** command allows you to specify a specific data type for a +variable. You can specify a pointer to a data struct, for example. You define +the data structure in the **InputHFile** between +```!EXPORT EXTERNAL_BOOTLOADER_STRUCT_BEGIN``` and +```!EXPORT EXTERNAL_BOOTLOADER_STRUCT_END```. + +#####Example: +```!HDR STRUCT:{MY_DATA_STRUCT*}``` + +You then define ```MY_DATA_STRUCT``` in **InputHFile**. + +### EMBED +The **EMBED** command allows you to put one or more UPD data into a specify data +structure. You can utilize it as a group of UPD for example. You must specify a +start and an end for the specify data structure. + +#####Example: +``` + !HDR EMBED:{MY_DATA_STRUCT:MyDataStructure:START} + gTokenSpaceGuid.Upd1 | 0x0020 | 0x01 | 0x00 + gTokenSpaceGuid.Upd2 | 0x0021 | 0x01 | 0x00 + !HDR EMBED:{MY_DATA_STRUCT:MyDataStructure:END} + gTokenSpaceGuid.UpdN | 0x0022 | 0x01 | 0x00 +``` + +#####Result: +``` + typedef struct { + /** Offset 0x0020 + **/ + UINT8 Upd1; + /** Offset 0x0021 + **/ + UINT8 Upd2; + /** Offset 0x0022 + **/ + UINT8 UpdN; + } MY_DATA_STRUCT; + + typedef struct _UPD_DATA_REGION { + ... + /** Offset 0x0020 + **/ + MY_DATA_STRUCT MyDataStruct; + ... + } UPD_DATA_REGION; +``` + +## 3. GenCfgOpt .py GENBSF +The **GENBSF** option generates a BSF from the UPD entries in a package's DSC +file. It does this by parsing special commands found in the comments of the DSC +file. They roughly match the keywords that define the different sections of the +BSF. + +The command signature for **GENBSF** is + +```GenCfgOpt GENBSF PlatformDscFile BuildFvDir BsfOutFile [-D Macros]``` + +In this case, the **BsfOutFile** parameter is required; it should be the +relative path to where the BSF should be stored. + +Every BSF command in the DSC file begins with **!BSF** or **@Bsf**. The +following table summarizes the options that come after **!BSF** or **@Bsf**: + +# BSF Commands Description +###PAGES +**PAGES** maps abbreviations to friendly-text descriptions of the pages in a BSF. + +#####Example: +```!BSF PAGES:{PG1:”Page 1”, PG2:”Page 2”}``` or + +```@Bsf PAGES:{PG1:”Page 1”, PG2:”Page 2”}``` + +###PAGE +This marks the beginning of a page. Use the abbreviation specified in **PAGES** +command. + +#####Example: +```!BSF PAGE:{PG1}``` or + +```@Bsf PAGE:{PG1}``` + +All the entries that come after this command are assumed to be on that page, +until the next **PAGE** command + +###FIND +FIND maps to the BSF **Find** command. It will be placed in the **StructDef** +region of the BSF and should come at the beginning of the UPD sections of the +DSC, immediately before the signatures that mark the beginning of these +sections. The content should be the plain-text equivalent of the signature. The +signature is usually 8 characters. + +#####Example: +```!BSF FIND:{PROJSIG1}``` or + +```@Bsf FIND:{PROJSIG1}``` + +###BLOCK +The BLOCK command maps to the **BeginInfoBlock** section of the BSF. There are +two elements: a version number and a plain-text description. + +#####Example: +```!BSF BLOCK:{NAME:"My platform name", VER:"0.1"}``` or + +```@Bsf BLOCK:{NAME:"My platform name", VER:"0.1"}``` + +###NAME +**NAME** gives a plain-text for a variable. This is the text label that will +appear next to the control in **BCT**. + +#####Example: +```!BSF NAME:{Variable 0}``` or + +```@Bsf NAME:{Variable 0}``` + +If the **!BSF NAME** or **@Bsf NAME** command does not appear before an entry +in the UPD region of the DSC file, then that entry will not appear in the BSF. + +###TYPE +The **TYPE** command is used either by itself or with the **NAME** command. It +is usually used by itself when defining an **EditNum** field for the BSF. You +specify the type of data in the second parameter and the range of valid values +in the third. + +#####Example: +```!BSF TYPE:{EditNum, HEX, (0x00,0xFF)}``` or + +```@Bsf TYPE:{EditNum, HEX, (0x00,0xFF)}``` + +**TYPE** appears on the same line as the **NAME** command when using a combo-box. + +#####Example: +```!BSF NAME:{Variable 1} TYPE:{Combo}``` or +```@Bsf NAME:{Variable 1} TYPE:{Combo}``` + +There is a special **None** type that puts the variable in the **StructDef** +region of the BSF, but doesn’t put it in any **Page** section. This makes the +variable visible to BCT, but not to the end user. + +###HELP +The **HELP** command defines what will appear in the help text for each control +in BCT. + +#####Example: +```!BSF HELP:{Enable/disable LAN controller.}``` or + +```@Bsf HELP:{Enable/disable LAN controller.}``` + +###OPTION +The **OPTION** command allows you to custom-define combo boxes and map integer +or hex values to friendly-text options. + +#####Example: +```!BSF OPTION:{0:IDE, 1:AHCI, 2:RAID}``` + +```!BSF OPTION:{0x00:0 MB, 0x01:32 MB, 0x02:64 MB}``` + +or + +```@Bsf OPTION:{0:IDE, 1:AHCI, 2:RAID}``` + +```@Bsf OPTION:{0x00:0 MB, 0x01:32 MB, 0x02:64 MB}``` + +###FIELD +The **FIELD** command can be used to define a section of a consolidated PCD +such that the PCD will be displayed in several fields via BCT interface instead +of one long entry. + +#####Example: +```!BSF FIELD:{PcdDRAMSpeed:1}``` or + +```@Bsf FIELD:{PcdDRAMSpeed:1}``` + +###ORDER +The **ORDER** command can be used to adjust the display order for the BSF items. +By default the order value for a BSF item is assigned to be the UPD item +```(Offset * 256)```. It can be overridden by declaring **ORDER** command using +format ORDER: ```{HexMajor.HexMinor}```. In this case the order value will be +```(HexMajor*256+HexMinor)```. The item order value will be used as the sort key +during the BSF item display. + +#####Example: +```!BSF ORDER:{0x0040.01}``` or + +```@Bsf ORDER:{0x0040.01}``` + +For **OPTION** and **HELP** commands, it allows to split the contents into +multiple lines by adding multiple **OPTION** and **HELP** command lines. The +lines except for the very first line need to start with **+** in the content to +tell the tool to append this string to the previous one. + +For example, the statement + +```!BSF OPTION:{0x00:0 MB, 0x01:32 MB, 0x02:64 MB}``` + +is equivalent to: + +```!BSF OPTION:{0x00:0 MB, 0x01:32 MB,}``` + +```!BSF OPTION:{+ 0x02:64 MB}``` + +or + +```@Bsf OPTION:{0x00:0 MB, 0x01:32 MB, 0x02:64 MB}``` + +is equivalent to: + +```@Bsf OPTION:{0x00:0 MB, 0x01:32 MB,}``` + +```@Bsf OPTION:{+ 0x02:64 MB}``` + +The **NAME**, **OPTION**, **TYPE**, and **HELP** commands can all appear on the +same line following the **!BSF** or **@Bsf** keyword or they may appear on +separate lines to improve readability. + +There are four alternative ways to replace current BSF commands. +### 1. ```# @Prompt``` +An alternative way replacing **NAME** gives a plain-text for a +variable. This is the text label that will appear next to the control in BCT. + +#####Example: +```# @Prompt Variable 0``` + +The above example can replace the two methods as below. + +```!BSF NAME:{Variable 0}``` or + +```@Bsf NAME:{Variable 0}``` + +If the ```# @Prompt``` command does not appear before an entry in the UPD region +of the DSC file, then that entry will not appear in the BSF. + +### 2. ```##``` +An alternative way replacing **HELP** command defines what will appear in the +help text for each control in BCT. + +#####Example: +```## Enable/disable LAN controller.``` + +The above example can replace the two methods as below. + +```!BSF HELP:{Enable/disable LAN controller.}``` or + +```@Bsf HELP:{Enable/disable LAN controller.}``` + +### 3. ```# @ValidList``` +An alternative way replacing **OPTION** command allows you to custom-define +combo boxes and map integer or hex values to friendly-text options. + +#####Example: +``` # @ValidList 0x80000003 | 0, 1, 2 | IDE, AHCI, RAID + Error Code | Options | Descriptions +``` + +The above example can replace the two methods as below. + +```!BSF OPTION:{0:IDE, 1:AHCI, 2:RAID}``` or + +```@Bsf OPTION:{0:IDE, 1:AHCI, 2:RAID}``` + +### 4. ```# @ValidRange``` +An alternative way replace **EditNum** field for the BSF. + +#####Example: +```# @ValidRange 0x80000001 | 0x0 – 0xFF + Error Code | Range +``` + +The above example can replace the two methods as below. + +```!BSF TYPE:{EditNum, HEX, (0x00,0xFF)}``` or + +```@Bsf TYPE:{EditNum, HEX, (0x00,0xFF)}``` + -- 2.9.0.windows.1