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