From: Giri P Mudusuru <giri.p.mudusuru@intel.com>
To: edk2-devel@lists.01.org
Cc: Jiewen Yao <jiewen.yao@intel.com>,
Maurice Ma <maurice.ma@intel.com>,
Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Subject: [PATCH] IntelFsp2Pkg: Converted GenCfgOptUserManual from .docx to .md format
Date: Fri, 5 Aug 2016 12:48:20 -0700 [thread overview]
Message-ID: <2274b2263cd642510dd284c76c24d4cc8cbc4f63.1470426332.git.giri.p.mudusuru@intel.com> (raw)
Converted the the word format of the documentation into markdown format
for GenCfgOpt.py
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
---
.../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<NS1{zjV4+hzY>>~
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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 ```<UPD_TOOL_GUID>.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 <MACRO_NAME>=<VALUE>```.
+
+**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
next reply other threads:[~2016-08-05 19:48 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-05 19:48 Giri P Mudusuru [this message]
2016-08-08 0:42 ` [PATCH] IntelFsp2Pkg: Converted GenCfgOptUserManual from .docx to .md format Yao, Jiewen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2274b2263cd642510dd284c76c24d4cc8cbc4f63.1470426332.git.giri.p.mudusuru@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox