summaryrefslogtreecommitdiff
path: root/Core/EM/AMITSE/Inc/setupdata.h
blob: b92052f8b9062bfcffd6224674045d2b9a785d7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
//*****************************************************************//
//*****************************************************************//
//*****************************************************************//
//**                                                             **//
//**         (C)Copyright 2013, American Megatrends, Inc.        **//
//**                                                             **//
//**                     All Rights Reserved.                    **//
//**                                                             **//
//**   5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093  **//
//**                                                             **//
//**                     Phone (770)-246-8600                    **//
//**                                                             **//
//*****************************************************************//
//*****************************************************************//
//*****************************************************************//
// $Archive: /Alaska/BIN/Modules/AMITSE2_0/AMITSE/Inc/setupdata.h $
//
// $Author: Arunsb $
//
// $Revision: 10 $
//
// $Date: 4/02/13 8:01a $
//
//*****************************************************************//
//*****************************************************************//
// Revision History
// ----------------
// $Log: /Alaska/BIN/Modules/AMITSE2_0/AMITSE/Inc/setupdata.h $
// 
// 10    4/02/13 8:01a Arunsb
// [TAG]  		EIP113919
// [Category]  	Improvement
// [Description]  	Provide support for EFI_IFR_WRITE, EFI_IFR_READ,
// EFI_IFR_GET, EFI_IFR_SET and EFI_IFR_MAP_OP.
// [Files]  		Setupdata.h, ctrlcond.c, expression.c, hii.c and parse.c
// 
// 9     3/25/13 8:08a Premkumara
// [TAG]  		EIP105468
// [Category]  	New Feature
// [Description]  	Support for EFI_IFR_REFRESH_ID opcode for Offline
// Parsing
// [Files]  		Parse.c, Hii.c, Setupdata.h
// 
// 8     10/18/12 5:31a Arunsb
// Updated for 2.16.1235 QA submission
// 
// 9     10/10/12 12:23p Arunsb
// Synched the source for v2.16.1232 backup with Aptio
// 
// 7     1/20/12 12:46a Rajashakerg
// [TAG]  		EIP80426 
// [Category]  	Improvement
// [Description]  	When restoring settings, avoid accessing the varstore
// for text controls
// [Files]  		uefi21wapper.c, Setupdata.h.
// 
// 6     6/23/11 3:38p Rajashakerg
// [TAG]  		EIP55762, 58925, 59971
// [Category]  	New Feature
// [Description]  	Support REF2,REF3 and REF4 in AMITSE
// Support direct form navigation path
// Improper layout of controls in the root page when Dynamic pages are
// added using the Legacy Setup Style	
// [Files]  		setupdata.h, CommonHelper.c, AMITSE.sdl, Legacy\Legacy.c,
// Legacy\style.h, Legacy\style.h, frame.c, minisetupext.c,
// minisetupext.h, numeric.c, page.c Popupstring.c, Hii.c,
// Uefi21Wrapper.c, Parse.c Hii.c
// 
// 5     4/29/11 4:28p Arunsb
// For 2.13 public patch release IFR RefX feature is omitted
// 
// 3     2/10/11 12:31p Blaines
// [TAG] - EIP 53146
// [Category]- New Feature
// [Description] -Add the support to Move the Dynamic IFR Pages under
// subpages. It should be customizable to move around.
// 
// 2     6/17/10 2:17p Madhans
// Refer Changelog.log.
// 
// 1     2/19/10 12:58p Madhans
// Uploaded for TSE 2.01. Refer Changelog.log for File change history.
// 
// 4     2/19/10 7:59a Mallikarjunanv
// updated the year in copyright message
// 
// 3     2/18/10 7:56p Madhans
// AMI Special Var Attribute
// 
// 2     1/09/10 2:34a Mallikarjunanv
// Updated TSE2.01 Release sources with coding standards
// 
// 1     10/28/09 5:32p Madhans
// 
// 3     6/16/09 2:16p Presannar
// Added File Headers for Header Files
// 
// 2     6/12/09 7:44p Presannar
// Initial implementation of coding standards for AMITSE2.0
// 
// 1     6/04/09 8:05p Madhans
// 
// 1     4/28/09 11:06p Madhans
// Tse 2.0 Code complete Checkin.
// 
// 4     4/28/09 9:40p Madhans
// Tse 2.0 Code complete Checkin.
// 
// 3     3/31/09 4:12p Madhans
// 
// 2     1/30/09 6:06p Madhans
// Function headers added. 
// 
// 1     12/18/08 7:59p Madhans
// Intial version of TSE Lite sources
//*****************************************************************//
//*****************************************************************//
//<AMI_FHDR_START>
//----------------------------------------------------------------------------
//
// Name:		setupdata.h
//
// Description:	Header file for setup data
//
//----------------------------------------------------------------------------
//<AMI_FHDR_END>

#ifndef _SETUPDATA_H_
#define	_SETUPDATA_H_



// forward declarations
typedef struct _SETUP_PKG SETUP_PKG;
typedef struct _SCREEN_INFO SCREEN_INFO;
typedef struct _PAGE_LIST PAGE_LIST;
typedef struct _PAGE_INFO PAGE_INFO;
typedef struct _PAGE_FLAGS PAGE_FLAGS;
typedef struct _CONTROL_LIST CONTROL_LIST;
typedef struct _CONTROL_INFO CONTROL_INFO;
typedef struct _CONTROL_FLAGS CONTROL_FLAGS;
typedef struct _VARIABLE_LIST VARIABLE_LIST;
typedef struct _VARIABLE_INFO VARIABLE_INFO;
typedef struct _HPK_INFO HPK_INFO;
typedef struct _GUID_LIST GUID_LIST;
typedef struct _GUID_FLAGS GUID_FLAGS;
typedef struct _GUID_INFO GUID_INFO;
typedef struct _PAGE_ID_LIST PAGE_ID_LIST;
typedef struct _PAGE_ID_INFO PAGE_ID_INFO;

#define VARIABLE_NAME_LENGTH    40
// Control types
#define	CONTROL_TYPE_NULL			0x0000
#define	CONTROL_TYPE_SUBMENU		0x0001
#define	CONTROL_TYPE_LABEL			0x0002
#define	CONTROL_TYPE_TEXT			0x0003
#define	CONTROL_TYPE_DATE			0x0004
#define	CONTROL_TYPE_TIME			0x0005
#define	CONTROL_TYPE_POPUPSEL		0x0006
#define CONTROL_TYPE_MEMO			0x0008
#define CONTROL_TYPE_MSGBOX			0x0009
#define CONTROL_TYPE_CHECKBOX		0x000A 
#define CONTROL_TYPE_NUMERIC		0x000B
#define CONTROL_TYPE_EDIT			0x000C
#define CONTROL_TYPE_PASSWORD		0x000D
#define CONTROL_TYPE_MENU			0x000E
#define CONTROL_TYPE_ORDERED_LIST	0x000F
#define CONTROL_TYPE_POPUPEDIT		0x0010
#define	CONTROL_TYPE_VARSTORE_SELECT		0x0011 
#define	CONTROL_TYPE_VARSTORE_SELECT_PAIR	0x0012
#define CONTROL_TYPE_POPUP_STRING	0x0013
#define CONTROL_TYPE_VARSTORE		0x0014
#define INCONSISTENT_IF				0x0015

// UEFI 2.1 Defines
#define NO_SUBMIT_IF				0x0016
#define DISABLE_IF					0x0017
#define CONTROL_TYPE_VARSTORE_NAME_VALUE	0x0018
#define CONTROL_TYPE_VARSTORE_EFI			0x0019
#define CONTROL_TYPE_VARSTORE_DEVICE		0x001A
#define	CONTROL_TYPE_ACTION			0x001B
#define	CONTROL_TYPE_RESET			0x001C
#define CONTROL_TYPE_RULE			0x001D
#define CONTROL_TYPE_REF2           0x001E // EIP 80426:When restoring settings, avoid accessing the varstore for text controls

// Used in Edit.c
#ifndef	IFR_PASSWORD_OP
#define IFR_PASSWORD_OP             0x08
#endif

#pragma warning( disable : 4201 )

#pragma pack(8)
struct _SETUP_PKG
{
	CHAR8 		PackageSignature[4];	//'$SPF'		Signature to identify the package file
	UINT16		StructureRevision;		//0x0100		Revision of this structure 
	UINT32		PackageVersion;			//0x00000100	Version number of the structure data
	UINT8		Reserved[6];			//0				Reserved for future expansion
	EFI_GUID	PackageGuid;			//Varies		EFI_GUID for the entire setup package
	UINT32		PackageVariable;		//0x00000001	ID of the default GUID-Name variable store for this package
	UINT32		PackageScreen;			//Varies		Offset to start of SCREEN_INFO structure
	UINT32		PackagePageList;		//Varies		Offset to start of PAGE_LIST structure
	UINT32		PackageControlOffset;	//Varies		Offset to start of controls
	UINT32		PackageVariableList;	//Varies		Offset to start of VARIABLE_LIST structure
	UINT32		PackageHpkData;			//Varies		Offset to source HPK info that we need
	UINT32		PackageGuidList;		//Varies		List of OEM GUIDs requiring application launch
	UINT32		PackagePageIdList;		//Varies		Offset to list of Page ID triplets guid class subclass
	UINT32		PackageIfrData;			//Varies		IFR data that is used to build our 'static' pages
};

struct _SCREEN_INFO		//Structure containing global information used by all pages
{
	union {
	/*EFI_HII_HANDLE*/VOID *	MainHandle;		//Varies	HII Handle to the formset that contains the global screen info
	UINT8	res[8];
	};
	UINT16			MainTitle;		//Varies	Token for title string
	UINT16			MainCopyright;	//Varies	Token for copyright string
	UINT16			MainHelpTitle;	//Varies	Token for help 'window' title
	UINT16			MainMenuCount;	//Varies	Number of entries in main menu (0 = no main menu)
	UINT16			MainNavCount;	//Varies	Number of nav help strings on the page
	//UINT16 		MenuEntries[];	//Varies	Tokens for menu strings
	//UINT16	 	MainNavToken[];	//Varies	Tokens for all navigational help strings
};

struct _PAGE_LIST	//This is the listing of all the pages in setup
{
	UINT32	PageCount;		//Varies	Number of pages in Setup
	UINT32 	PageList[1];	//Varies	Offsets to each of the page structures
};

struct _PAGE_FLAGS		//Structure containing the attributes global to a page
{
	UINT32 	PageVisible : 1;		//TRUE	Controls whether or not this page is visible
	UINT32 	PageHelpVisible : 1;	//TRUE	Controls whether or not help is visible on this page
	UINT32 	PageDisableHotKeys : 1;	//FALSE	Controls whether globals hot keys are enabled for this page
	UINT32  PageRefresh : 1;        //TRUE Controls whether the page is refreshable
	UINT32  PageModal : 1;          //TRUE Controls whether the page is Modal
	UINT32  PageDynamic : 1;          //TRUE Controls whether the page is Dynamic
    UINT32 	PageStdMap : 1;         // set 0 if Form map is not found otherwise set 1
	UINT32 	Reserved : 25;			//0		Reserved for future use
};

struct _CONTROL_LIST	//Structure containing the offsets of all the control data
{
	UINT32	ControlCount;	//Varies	Number of controls in this list
	UINT32 	ControlList[1];	//Varies	Offsets to each of the control structures
};

struct _PAGE_INFO		//Structure containing the layout of the page
{
	union {
	/*EFI_HII_HANDLE*/VOID *	PageHandle;		//Varies	HII Handle to the formset that contains this control
	UINT8	res[8];
	};
	UINT16			PageIdIndex;	//varies	Index in to PageIdList triplets
	UINT16			PageFormID;		//Varies	Form ID within the formset for this page
	UINT16			PageTitle;		//Varies	Allows a page to override the main title bar
	UINT16			PageSubTitle;	//Varies	Token for the subtitle string for this page
	UINT16			PageID;			//Varies	unique ID for this page
	UINT16			PageParentID;	//Varies	Identify this page's parent page
	PAGE_FLAGS		PageFlags;		//3			Various attributes for a specific page
	UINT32			PageVariable;	//Varies	Overrides the variable ID for this page (0 = use default)
	CONTROL_LIST	PageControls;	//Varies	Listing of controls for this page
};


struct _CONTROL_FLAGS			//Structure containing the attributes for a specific control
{
	UINT32	ControlVisible : 1;	//TRUE	Whether or not a control is shown to the user
#define CONTROL_ACCESS_DEFAULT	0 //Do not override VFR
#define CONTROL_ACCESS_EXT_USER	1 //Admin - Editable; User - Editable;
#define CONTROL_ACCESS_USER		2 //Admin - Editable; User - Visible but not editable;
#define CONTROL_ACCESS_ADMIN	3 //Admin - Editable; User - Invisible;
	UINT32	ControlAccess : 2;	//0		User access to control
	UINT32	ControlReset : 1;	//FALSE	Whether or not changing a value requires a system reset
	UINT32  ControlReadOnly : 1; //FALSE Weather or not the control is read only.
	UINT32 	ControlInteractive : 1;	//FALSE Weather the Control is interactive or not
    UINT32  ControlEvaluateDefault : 1; // FALSE If set Default is obtained by expression evaluation
	UINT32	Reserved1 : 1;		//0		Reserved for future use
	UINT32	ControlRefresh : 8;	//0		Refresh timer (in 0.1s intervals) (0 = refresh disabled) 
	UINT32	RefreshID : 1;			//TRUE or FALSE to denote RefreshID status	
   UINT32	ControlRWEvaluate : 1; // set 0 if read/write expression is not found otherwise set 1
	UINT32	Reserved2 : 14;		//0		Reserved for future use
};

struct _CONTROL_INFO		//Structure containing control data
{
	union {
	/*EFI_HII_HANDLE*/VOID *	ControlHandle;			//Varies	HII Handle to the formset that contains this control
	UINT8	res[8];
	};
	UINT32			ControlVariable;		//Varies	Overrides the variable ID for this control (0 = use default)
	union
	{
        UINT32		ControlConditionalVariable[2]; 	//Varies	Overrides the condition variable ID for this control (0 = use default)
		struct
		{
            UINT16	ControlKey;				// Varies	Variable unique identifier same as QuestionID in UEFI2.1
            UINT16  DevicePathId;			// Device Path as specified by VarStoreDevicePath nested within the scope of this question.
            UINT8	DefaultStoreCount;		// Constant No of Defaults (n) values other than Optimal and Failsafe for that control.
//EIP# 55762
			UINT8	Reserved[1]; 			// Reserved space for use in future.
            UINT16  DestQuestionID;         // This is for EFI_IFR_REFX support
//EIP# 55762
        };
	};
	UINT16			ControlType;			//Varies	Type of the control on the page
	UINT16			ControlPageID;			//Varies	Page ID that contains this control
	UINT16			ControlDestPageID;		//FFFFh		Only needed for controls of type CONTROL_TYPE_SUBMENU
	CONTROL_FLAGS	ControlFlags;			//1			Various attributes for a specific control
	UINT16			ControlHelp;			//Varies	Token for help string for this control
	UINT16			ControlLabel;			//Varies	One-based label number that this control is 'linked to'
	UINT16			ControlIndex;			//Varies	Zero-based control number from the label, not formset
	UINT16			ControlLabelCount;		//Varies	number of opcodes associated with this control's label
	union {
	VOID *			ControlPtr;				//Varies	Pointer to control data in HII
	UINT64	res1;
	};
	union {
	VOID *			ControlConditionalPtr;	//Varies	Pointer to control condition data in HII
	UINT64	res2;
	};
	UINT16			ControlDataLength;		//Varies	Length of HII data for control
	UINT16			ControlDataWidth;		//Varies	Width of data (in bytes) for this control
	UINT16			QuestionId;				//Varies	Offset for data of this control in the Variable
	//UINT8			ControlFailsafeValue;	//Varies	Used when user selects load failsafe value
	//UINT8 		ControlOptimalValue;	//Varies	Used when user selects load optimal value
};

struct _VARIABLE_LIST
{
	UINT32	VariableCount;		//Varies	Number of GUID-Name pairs in this list
	UINT32 	VariableList[1];	//Varies	Offsets to each of the variable structures
};

struct _VARIABLE_INFO			//Structure containing GUID-Name pairs for variable access
{
	EFI_GUID	VariableGuid;		//Varies	EFI_GUID for the NVRAM variable store for this data
	CHAR16 		VariableName[VARIABLE_NAME_LENGTH];	//Varies	Variable store name
	UINT32		VariableAttributes;	//Varies	Attributes of the variable
	UINT32		VariableID;			//Varies	unique variable number, 0x0FFFF for our own variables.
#define	VARIABLE_ATTRIBUTE_VARSTORE		0x0000	// Buffer varstore accessed via Config. Access protocol exposed by the driver.
#define	VARIABLE_ATTRIBUTE_EFI_VARSTORE	0x1000	// EFI Variable, GetVeriable and SetVariable Can be used.
#define	VARIABLE_ATTRIBUTE_NAMEVALUE	0x2000	// Namevalue varstore accessed via Config. Access protocol exposed by the driver.
#define AMI_SPECIAL_NO_DEFAULTS			0x00000001
#define AMI_SPECIAL_VARIABLE_NO_SET		0x00000002
#define AMI_SPECIAL_VARIABLE_NO_GET		0x00000004
	UINT32		ExtendedAttibutes;	//Varies	Extended Attributes to identify type of Variable.
	UINT16		VariableNameId;		//Varies	Id for the Variable Name
	UINT8		Reserved[2];		// Reserved space for use in future.
	union
	{
		/*EFI_HII_HANDLE*/VOID*	VariableHandle;	//Varies	HII Handle to the formset that contains this VarStore
		UINT64	res;
	};
	UINT16		VariableSize;		//Varies	The size of Buffer Varstore
};

struct _HPK_INFO
{
	UINT32	Length;
	UINT16	Class;
	UINT16	SubClass;
};

struct _GUID_LIST
{
	UINT32	GuidCount;		//Varies	Number of GUID-Name pairs in this list
	UINT32 	GuidList[1];	//Varies	Offsets to each of the variable structures
};

struct _GUID_FLAGS
{
	UINT32		GuidLaunchCallback : 1;
	UINT32		GuidLaunchGuid : 1;
	UINT32		GuidLaunchFilename : 1;
	UINT32		GuidLaunchCallbackUpdateTemplate : 1;
	UINT32		Reserved : 28;
};

struct _GUID_INFO
{
	EFI_GUID	GuidValue;
	CHAR16		GuidName[VARIABLE_NAME_LENGTH];
	GUID_FLAGS	GuidFlags;
	UINT32		GuidKey;
};

struct _PAGE_ID_LIST
{
	UINT32	PageIdCount;	//Varies	Number of guid class subclass triplets
	UINT32 	PageIdList[1];	//Varies	Offsets to each of the PageId structures
};

struct _PAGE_ID_INFO			//Structure containing page id triplets guid class and subclass
{
	EFI_GUID	PageGuid;		//Varies	EFI_GUID for the pages
	UINT16		PageClass;		//Varies	Class for the pages
	UINT16		PageSubClass;	//Varies	SubClass for the pages
};

#pragma pack()

#endif /* _SETUPDATA_H_ */


//**********************************************************************
//**********************************************************************
//**                                                                  **
//**        (C)Copyright 1985-2013, American Megatrends, Inc.         **
//**                                                                  **
//**                       All Rights Reserved.                       **
//**                                                                  **
//**     5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093     **
//**                                                                  **
//**                       Phone: (770)-246-8600                      **
//**                                                                  **
//**********************************************************************
//**********************************************************************