Add Doxygen Format File header for these C source files.
[efi/basetools/.git] / Source / C / EfiRom / EfiRom.h
1 /** @file\r
2 \r
3 Copyright (c) 1999 - 2008 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 \r
86 //\r
87 // Use this linked list structure to keep track of all the filenames\r
88 // specified on the command line.\r
89 //\r
90 typedef struct _FILE_LIST {\r
91   struct _FILE_LIST *Next;\r
92   INT8              *FileName;\r
93   UINT32            FileFlags;\r
94   UINT32            ClassCode;\r
95   UINT16            CodeRevision;\r
96 } FILE_LIST;\r
97 \r
98 //\r
99 // Use this to track our command-line options\r
100 //\r
101 typedef struct {\r
102   INT8      OutFileName[MAX_PATH];\r
103   INT8      *EfiFileName;\r
104   INT8      *BinFileName;\r
105   INT8      Compress;\r
106   INT8      NoLast;\r
107   UINT16    ClassCode;\r
108   UINT16    PciRevision;\r
109   UINT16    VendId;\r
110   UINT16    DevId;\r
111   UINT8     VendIdValid;\r
112   UINT8     DevIdValid;\r
113   INT8      Verbose;\r
114   INT8      Quiet;\r
115   INT8      Debug;\r
116   INT8      Pci23;\r
117   INT8      Pci30;\r
118   INT8      DumpOption;\r
119 //  INT8      Help;\r
120 //  INT8      Version;  \r
121   FILE_LIST *FileList;\r
122 } OPTIONS;\r
123 \r
124 //\r
125 // Make a global structure to keep track of command-line options\r
126 //\r
127 static OPTIONS  mOptions;\r
128 \r
129 //\r
130 // Use these to convert from machine type value to a named type\r
131 //\r
132 typedef struct {\r
133   UINT16  Value;\r
134   char    *Name;\r
135 } STRING_LOOKUP;\r
136 \r
137 //\r
138 // Machine Types\r
139 //\r
140 static STRING_LOOKUP  mMachineTypes[] = {\r
141   EFI_IMAGE_MACHINE_IA32,\r
142   "IA32",\r
143   EFI_IMAGE_MACHINE_IA64,\r
144   "IA64",\r
145   EFI_IMAGE_MACHINE_EBC,\r
146   "EBC",\r
147   0,\r
148   NULL\r
149 };\r
150 \r
151 //\r
152 // Subsystem Types\r
153 //\r
154 static STRING_LOOKUP  mSubsystemTypes[] = {\r
155   EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION,\r
156   "EFI application",\r
157   EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER,\r
158   "EFI boot service driver",\r
159   EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER,\r
160   "EFI runtime driver",\r
161   0,\r
162   NULL\r
163 };\r
164 \r
165 //\r
166 //  Function prototypes\r
167 //\r
168 static\r
169 void\r
170 Version (\r
171   VOID\r
172   )\r
173 /*++\r
174 \r
175 Routine Description:\r
176 \r
177   Displays the utility version to STDOUT\r
178 \r
179 Arguments:\r
180 \r
181   None\r
182 \r
183 Returns:\r
184 \r
185   None\r
186 \r
187 --*/\r
188 ;\r
189 \r
190 static\r
191 void\r
192 Usage (\r
193   VOID\r
194   )\r
195 /*++\r
196 \r
197 Routine Description:\r
198 \r
199   Displays the utility usage syntax to STDOUT\r
200 \r
201 Arguments:\r
202 \r
203   None\r
204 \r
205 Returns:\r
206 \r
207   None\r
208 \r
209 --*/  \r
210 ;\r
211 \r
212 static\r
213 int\r
214 ParseCommandLine (\r
215   int       Argc,\r
216   char      *Argv[],\r
217   OPTIONS   *Options\r
218   )\r
219 /*++\r
220 \r
221 Routine Description:\r
222   \r
223   Given the Argc/Argv program arguments, and a pointer to an options structure,\r
224   parse the command-line options and check their validity.\r
225 \r
226 Arguments:\r
227 \r
228   Argc            - standard C main() argument count\r
229   Argv[]          - standard C main() argument list\r
230   Options         - pointer to a structure to store the options in\r
231 \r
232 Returns:\r
233 \r
234   STATUS_SUCCESS    success\r
235   non-zero          otherwise\r
236 \r
237 --*/\r
238 ;\r
239 \r
240 static\r
241 int\r
242 CheckPE32File (\r
243   FILE      *Fptr,\r
244   UINT16    *MachineType,\r
245   UINT16    *SubSystem\r
246   )\r
247 /*++\r
248 \r
249 Routine Description:\r
250   \r
251   Given the Argc/Argv program arguments, and a pointer to an options structure,\r
252   parse the command-line options and check their validity.\r
253 \r
254 Arguments:\r
255 \r
256   Argc            - standard C main() argument count\r
257   Argv[]          - standard C main() argument list\r
258   Options         - pointer to a structure to store the options in\r
259 \r
260 Returns:\r
261 \r
262   STATUS_SUCCESS    success\r
263   non-zero          otherwise\r
264 \r
265 --*/  \r
266 ;\r
267 \r
268 static\r
269 int\r
270 ProcessEfiFile (\r
271   FILE      *OutFptr,\r
272   FILE_LIST *InFile,\r
273   UINT16    VendId,\r
274   UINT16    DevId,\r
275   UINT32    *Size\r
276   )\r
277 /*++\r
278 \r
279 Routine Description:\r
280   \r
281   Process a PE32 EFI file.\r
282 \r
283 Arguments:\r
284 \r
285   OutFptr     - file pointer to output binary ROM image file we're creating\r
286   InFile      - structure contains information on the PE32 file to process\r
287   VendId      - vendor ID as required in the option ROM header\r
288   DevId       - device ID as required in the option ROM header\r
289   Size        - pointer to where to return the size added to the output file\r
290 \r
291 Returns:\r
292 \r
293   0 - successful\r
294 \r
295 --*/\r
296 ;\r
297 \r
298 static\r
299 int\r
300 ProcessBinFile (\r
301   FILE      *OutFptr,\r
302   FILE_LIST *InFile,\r
303   UINT32    *Size\r
304   )\r
305 /*++\r
306 \r
307 Routine Description:\r
308   \r
309   Process a binary input file.\r
310 \r
311 Arguments:\r
312 \r
313   OutFptr     - file pointer to output binary ROM image file we're creating\r
314   InFile      - structure contains information on the binary file to process\r
315   Size        - pointer to where to return the size added to the output file\r
316 \r
317 Returns:\r
318 \r
319   0 - successful\r
320 \r
321 --*/  \r
322 ;\r
323 \r
324 static\r
325 void\r
326 DumpImage (\r
327   FILE_LIST *InFile\r
328   )\r
329 /*++\r
330 \r
331 Routine Description:\r
332 \r
333   Dump the headers of an existing option ROM image\r
334 \r
335 Arguments:\r
336 \r
337   InFile  - the file name of an existing option ROM image\r
338 \r
339 Returns:\r
340 \r
341   none\r
342 \r
343 --*/\r
344 ;\r
345 \r
346 char                  *\r
347 GetMachineTypeStr (\r
348   UINT16    MachineType\r
349   )\r
350 /*++\r
351 \r
352 Routine Description:\r
353 \r
354   GC_TODO: Add function description\r
355 \r
356 Arguments:\r
357 \r
358   MachineType - GC_TODO: add argument description\r
359 \r
360 Returns:\r
361 \r
362   GC_TODO: add return values\r
363 \r
364 --*/\r
365 ;\r
366 \r
367 static\r
368 char                  *\r
369 GetSubsystemTypeStr (\r
370   UINT16  SubsystemType\r
371   )\r
372 /*++\r
373 \r
374 Routine Description:\r
375 \r
376   GC_TODO: Add function description\r
377 \r
378 Arguments:\r
379 \r
380   SubsystemType - GC_TODO: add argument description\r
381 \r
382 Returns:\r
383 \r
384   GC_TODO: add return values\r
385 \r
386 --*/\r
387 ;\r
388 \r
389 #endif\r