| /*++ | |
| Copyright (c) 2004 - 2005, Intel Corporation | |
| All rights reserved. This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| Module Name: | |
| EfiVfr.h | |
| Abstract: | |
| Defines and prototypes for the EFI internal forms representation | |
| setup protocol and drivers | |
| --*/ | |
| #ifndef _EFI_VFR_H_ | |
| #define _EFI_VFR_H_ | |
| #include <string.h> | |
| #include <Common/UefiBaseTypes.h> | |
| #include <Common/InternalFormRepresentation.h> | |
| // | |
| // This number should be incremented with each change to the VFR compiler. | |
| // We write the version to the output list file for debug purposes. | |
| // | |
| #define VFR_COMPILER_VERSION "1.88" | |
| // | |
| // Maximum file path for filenames | |
| // | |
| #ifndef MAX_PATH | |
| #define MAX_PATH 255 | |
| #endif | |
| #define MAX_QUEUE_COUNT 255 | |
| #define MAX_LINE_LEN 1024 | |
| #define PROGRAM_NAME "VfrCompile" | |
| // | |
| // We parse C-style structure definitions which can then be referenced | |
| // in VFR statements. | |
| // We need to define an internal structure that can be used to | |
| // track the fields in a structure definition, and another structure | |
| // to keep track of the structure name and subfields. | |
| // | |
| typedef struct _STRUCT_FIELD_DEFINITION { | |
| struct _STRUCT_FIELD_DEFINITION *Next; | |
| int DataSize; | |
| int Offset; // from the start of the structure | |
| int ArrayLength; | |
| char IsArray; | |
| char *Name; | |
| } STRUCT_FIELD_DEFINITION; | |
| typedef struct _STRUCT_DEFINITION { | |
| struct _STRUCT_DEFINITION *Next; | |
| int Size; | |
| int LineNum; // line number where the structure was defined | |
| int IsNonNV; // if this is the non-NV data structure definition | |
| int Referenced; // if it's referenced anywhere in the VFR | |
| int VarStoreIdValid; // found a 'varstore' statement for it in the VFR | |
| unsigned short VarStoreId; // key from a varstore IFR statement | |
| int VarStoreLineNum; // line number where VARSTORE was defined | |
| char *Name; | |
| STRUCT_FIELD_DEFINITION *Field; | |
| STRUCT_FIELD_DEFINITION *LastField; | |
| } STRUCT_DEFINITION; | |
| // | |
| // For the IdEqValList variable list of UINT16's, keep track of them using | |
| // a linked list until we know how many there are. | |
| // We also use a linked list of these to keep track of labels used in | |
| // the VFR script so we can catch duplicates. | |
| // We'll also use it to keep track of defined varstore id's so we can | |
| // detect duplicate definitions. | |
| // | |
| typedef struct _UINT16_LIST { | |
| struct _UINT16_LIST *Next; | |
| UINT16 Value; | |
| UINT32 LineNum; | |
| } UINT16_LIST; | |
| typedef struct _GOTO_REFERENCE { | |
| struct _GOTO_REFERENCE *Next; | |
| UINT32 RefLineNum; // line number of source file where referenced | |
| UINT16 Value; | |
| } GOTO_REFERENCE; | |
| typedef struct _FORM_ID_VALUE { | |
| struct _FORM_ID_VALUE *Next; | |
| UINT32 LineNum; | |
| UINT16 Value; | |
| } FORM_ID_VALUE; | |
| // | |
| // We keep track in the parser of all "#line 4 "x.y"" strings so we | |
| // can cross-reference the line numbers in the preprocessor output .i file | |
| // to the original input files. | |
| // | |
| typedef struct _PARSER_LINE_DEFINITION { | |
| struct _PARSER_LINE_DEFINITION *Next; | |
| UINT32 HashLineNum; // from the #line stmt | |
| UINT32 TokenLineNum; // line number in the .i file | |
| CHAR8 *FileName; // from the #line stmt | |
| } PARSER_LINE_DEFINITION; | |
| extern PARSER_LINE_DEFINITION *gLineDefinition; | |
| extern PARSER_LINE_DEFINITION *gLastLineDefinition; | |
| extern | |
| char * | |
| ConvertLineNumber ( | |
| UINT32 *LineNum | |
| ) | |
| /*++ | |
| Routine Description: | |
| Given the line number in the preprocessor-output file, use the line number | |
| information we've saved to determine the source file name and line number | |
| where the code originally came from. This is required for error reporting. | |
| Arguments: | |
| LineNum - the line number in the preprocessor-output file. | |
| Returns: | |
| Returns a pointer to the source file name. Also returns the line number | |
| in the provided LineNum argument | |
| --*/ | |
| ; | |
| typedef struct _IFR_BYTE { | |
| struct _IFR_BYTE *Next; | |
| UINT32 LineNum; | |
| UINT8 OpcodeByte; | |
| UINT8 KeyByte; | |
| } IFR_BYTE; | |
| typedef struct { | |
| CHAR8 VfrFileName[MAX_PATH]; | |
| CHAR8 VfrListFileName[MAX_PATH]; | |
| INT8 CreateListFile; | |
| INT8 CreateIfrBinFile; | |
| CHAR8 IfrOutputFileName[MAX_PATH]; | |
| CHAR8 OutputDirectory[MAX_PATH]; | |
| CHAR8 PreprocessorOutputFileName[MAX_PATH]; | |
| CHAR8 VfrBaseFileName[MAX_PATH]; // name of input VFR file with no path or extension | |
| CHAR8 *IncludePaths; | |
| CHAR8 *CPreprocessorOptions; | |
| } OPTIONS; | |
| extern OPTIONS gOptions; | |
| VOID | |
| WriteStandardFileHeader ( | |
| FILE *OutFptr | |
| ) | |
| /*++ | |
| Routine Description: | |
| This function is invoked to emit a standard header to an | |
| output text file. | |
| Arguments: | |
| OutFptr - file to write the header to | |
| Returns: | |
| None | |
| --*/ | |
| ; | |
| #endif // #ifndef _EFI_VFR_H_ |