put function prototype and variable definition in EfiRom.h file.
[efi/basetools/.git] / Source / C / EfiRom / EfiRom.h
1 /*++\r
2 \r
3 Copyright (c) 1999 - 2007 Intel Corporation. All rights reserved\r
4 This software and associated documentation (if any) is furnished\r
5 under a license and may only be used or copied in accordance\r
6 with the terms of the license. Except as permitted by such\r
7 license, no part of this software or documentation may be\r
8 reproduced, stored in a retrieval system, or transmitted in any\r
9 form or by any means without the express written consent of\r
10 Intel Corporation.\r
11 \r
12 \r
13 Module Name:  \r
14 \r
15   EfiRom.h\r
16 \r
17 Abstract:\r
18 \r
19   This file contains the relevant declarations required\r
20   to generate Option Rom File\r
21 \r
22 --*/\r
23 \r
24 #ifndef __EFI_ROM_H__\r
25 #define __EFI_ROM_H__\r
26 \r
27 #include <stdio.h>\r
28 #include <string.h>\r
29 #include <stdlib.h>\r
30 \r
31 #include <Common/UefiBaseTypes.h>\r
32 #include <IndustryStandard/PeImage.h> // for PE32 structure definitions\r
33 \r
34 #include <IndustryStandard/pci22.h>  // for option ROM header structures\r
35 #include <IndustryStandard/pci30.h>\r
36 \r
37 #include "Compress.h"\r
38 #include "CommonLib.h"\r
39 \r
40 //\r
41 // Version of this utility\r
42 //\r
43 #define UTILITY_NAME "EfiRom"\r
44 #define UTILITY_MAJOR_VERSION 0\r
45 #define UTILITY_MINOR_VERSION 1\r
46 \r
47 //\r
48 // Define some status return values\r
49 //\r
50 #define STATUS_SUCCESS  0\r
51 #define STATUS_WARNING  1\r
52 #define STATUS_ERROR    2\r
53 \r
54 //\r
55 // Define the max length of a filename\r
56 //\r
57 #define MAX_PATH                  200\r
58 \r
59 //\r
60 // Define the default file extension name\r
61 //\r
62 #define DEFAULT_OUTPUT_EXTENSION  ".rom"\r
63 \r
64 //\r
65 // Max size for an option ROM image\r
66 //\r
67 #define MAX_OPTION_ROM_SIZE (1024 * 1024 * 16)  // 16MB\r
68 \r
69 //\r
70 // Values for the indicator field in the PCI data structure\r
71 //\r
72 #define INDICATOR_LAST  0x80  // last file in series of files\r
73 \r
74 //\r
75 // Masks for the FILE_LIST.FileFlags field\r
76 //\r
77 #define FILE_FLAG_BINARY    0x01\r
78 #define FILE_FLAG_EFI       0x02\r
79 #define FILE_FLAG_COMPRESS  0x04\r
80 \r
81 //\r
82 // global variables\r
83 //\r
84 UINTN DebugLevel = 0;\r
85 BOOLEAN DebugMode = FALSE;\r
86 BOOLEAN QuietMode = FALSE;\r
87 \r
88 //\r
89 // Use this linked list structure to keep track of all the filenames\r
90 // specified on the command line.\r
91 //\r
92 typedef struct _FILE_LIST {\r
93   struct _FILE_LIST *Next;\r
94   INT8              *FileName;\r
95   UINT32            FileFlags;\r
96   UINT32            ClassCode;\r
97   UINT16            CodeRevision;\r
98 } FILE_LIST;\r
99 \r
100 //\r
101 // Use this to track our command-line options\r
102 //\r
103 typedef struct {\r
104   INT8      OutFileName[MAX_PATH];\r
105   INT8      *EfiFileName;\r
106   INT8      *BinFileName;\r
107   INT8      Compress;\r
108   INT8      NoLast;\r
109   UINT16    ClassCode;\r
110   UINT16    PciRevision;\r
111   UINT16    VendId;\r
112   UINT16    DevId;\r
113   UINT8     VendIdValid;\r
114   UINT8     DevIdValid;\r
115   INT8      Verbose;\r
116   INT8      Quiet;\r
117   INT8      Debug;\r
118   INT8      Pci23;\r
119   INT8      Pci30;\r
120   INT8      DumpOption;\r
121 //  INT8      Help;\r
122 //  INT8      Version;  \r
123   FILE_LIST *FileList;\r
124 } OPTIONS;\r
125 \r
126 //\r
127 // Make a global structure to keep track of command-line options\r
128 //\r
129 static OPTIONS  mOptions;\r
130 \r
131 //\r
132 // Use these to convert from machine type value to a named type\r
133 //\r
134 typedef struct {\r
135   UINT16  Value;\r
136   char    *Name;\r
137 } STRING_LOOKUP;\r
138 \r
139 //\r
140 // Machine Types\r
141 //\r
142 static STRING_LOOKUP  mMachineTypes[] = {\r
143   EFI_IMAGE_MACHINE_IA32,\r
144   "IA32",\r
145   EFI_IMAGE_MACHINE_IA64,\r
146   "IA64",\r
147   EFI_IMAGE_MACHINE_EBC,\r
148   "EBC",\r
149   0,\r
150   NULL\r
151 };\r
152 \r
153 //\r
154 // Subsystem Types\r
155 //\r
156 static STRING_LOOKUP  mSubsystemTypes[] = {\r
157   EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION,\r
158   "EFI application",\r
159   EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER,\r
160   "EFI boot service driver",\r
161   EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER,\r
162   "EFI runtime driver",\r
163   0,\r
164   NULL\r
165 };\r
166 \r
167 //\r
168 //  Function prototypes\r
169 //\r
170 static\r
171 void\r
172 Version (\r
173   VOID\r
174   )\r
175 /*++\r
176 \r
177 Routine Description:\r
178 \r
179   Displays the utility version to STDOUT\r
180 \r
181 Arguments:\r
182 \r
183   None\r
184 \r
185 Returns:\r
186 \r
187   None\r
188 \r
189 --*/\r
190 ;\r
191 \r
192 static\r
193 void\r
194 Usage (\r
195   VOID\r
196   )\r
197 /*++\r
198 \r
199 Routine Description:\r
200 \r
201   Displays the utility usage syntax to STDOUT\r
202 \r
203 Arguments:\r
204 \r
205   None\r
206 \r
207 Returns:\r
208 \r
209   None\r
210 \r
211 --*/  \r
212 ;\r
213 \r
214 static\r
215 int\r
216 ParseCommandLine (\r
217   int       Argc,\r
218   char      *Argv[],\r
219   OPTIONS   *Options\r
220   )\r
221 /*++\r
222 \r
223 Routine Description:\r
224   \r
225   Given the Argc/Argv program arguments, and a pointer to an options structure,\r
226   parse the command-line options and check their validity.\r
227 \r
228 Arguments:\r
229 \r
230   Argc            - standard C main() argument count\r
231   Argv[]          - standard C main() argument list\r
232   Options         - pointer to a structure to store the options in\r
233 \r
234 Returns:\r
235 \r
236   STATUS_SUCCESS    success\r
237   non-zero          otherwise\r
238 \r
239 --*/\r
240 ;\r
241 \r
242 static\r
243 int\r
244 CheckPE32File (\r
245   FILE      *Fptr,\r
246   UINT16    *MachineType,\r
247   UINT16    *SubSystem\r
248   )\r
249 /*++\r
250 \r
251 Routine Description:\r
252   \r
253   Given the Argc/Argv program arguments, and a pointer to an options structure,\r
254   parse the command-line options and check their validity.\r
255 \r
256 Arguments:\r
257 \r
258   Argc            - standard C main() argument count\r
259   Argv[]          - standard C main() argument list\r
260   Options         - pointer to a structure to store the options in\r
261 \r
262 Returns:\r
263 \r
264   STATUS_SUCCESS    success\r
265   non-zero          otherwise\r
266 \r
267 --*/  \r
268 ;\r
269 \r
270 static\r
271 int\r
272 ProcessEfiFile (\r
273   FILE      *OutFptr,\r
274   FILE_LIST *InFile,\r
275   UINT16    VendId,\r
276   UINT16    DevId,\r
277   UINT32    *Size\r
278   )\r
279 /*++\r
280 \r
281 Routine Description:\r
282   \r
283   Process a PE32 EFI file.\r
284 \r
285 Arguments:\r
286 \r
287   OutFptr     - file pointer to output binary ROM image file we're creating\r
288   InFile      - structure contains information on the PE32 file to process\r
289   VendId      - vendor ID as required in the option ROM header\r
290   DevId       - device ID as required in the option ROM header\r
291   Size        - pointer to where to return the size added to the output file\r
292 \r
293 Returns:\r
294 \r
295   0 - successful\r
296 \r
297 --*/\r
298 ;\r
299 \r
300 static\r
301 int\r
302 ProcessBinFile (\r
303   FILE      *OutFptr,\r
304   FILE_LIST *InFile,\r
305   UINT32    *Size\r
306   )\r
307 /*++\r
308 \r
309 Routine Description:\r
310   \r
311   Process a binary input file.\r
312 \r
313 Arguments:\r
314 \r
315   OutFptr     - file pointer to output binary ROM image file we're creating\r
316   InFile      - structure contains information on the binary file to process\r
317   Size        - pointer to where to return the size added to the output file\r
318 \r
319 Returns:\r
320 \r
321   0 - successful\r
322 \r
323 --*/  \r
324 ;\r
325 \r
326 static\r
327 void\r
328 DumpImage (\r
329   FILE_LIST *InFile\r
330   )\r
331 /*++\r
332 \r
333 Routine Description:\r
334 \r
335   Dump the headers of an existing option ROM image\r
336 \r
337 Arguments:\r
338 \r
339   InFile  - the file name of an existing option ROM image\r
340 \r
341 Returns:\r
342 \r
343   none\r
344 \r
345 --*/\r
346 ;\r
347 \r
348 char                  *\r
349 GetMachineTypeStr (\r
350   UINT16    MachineType\r
351   )\r
352 /*++\r
353 \r
354 Routine Description:\r
355 \r
356   GC_TODO: Add function description\r
357 \r
358 Arguments:\r
359 \r
360   MachineType - GC_TODO: add argument description\r
361 \r
362 Returns:\r
363 \r
364   GC_TODO: add return values\r
365 \r
366 --*/\r
367 ;\r
368 \r
369 static\r
370 char                  *\r
371 GetSubsystemTypeStr (\r
372   UINT16  SubsystemType\r
373   )\r
374 /*++\r
375 \r
376 Routine Description:\r
377 \r
378   GC_TODO: Add function description\r
379 \r
380 Arguments:\r
381 \r
382   SubsystemType - GC_TODO: add argument description\r
383 \r
384 Returns:\r
385 \r
386   GC_TODO: add return values\r
387 \r
388 --*/\r
389 ;\r
390 \r
391 #endif\r