Correct license header to BSD license.
[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 program and the accompanying materials are licensed and made available \r
5 under the terms and conditions of the BSD License which accompanies this \r
6 distribution.  The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8 \r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\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 the max length of a filename\r
49 //\r
50 #define MAX_PATH                  200\r
51 \r
52 //\r
53 // Define the default file extension name\r
54 //\r
55 #define DEFAULT_OUTPUT_EXTENSION  ".rom"\r
56 \r
57 //\r
58 // Max size for an option ROM image\r
59 //\r
60 #define MAX_OPTION_ROM_SIZE (1024 * 1024 * 16)  // 16MB\r
61 \r
62 //\r
63 // Values for the indicator field in the PCI data structure\r
64 //\r
65 #define INDICATOR_LAST  0x80  // last file in series of files\r
66 \r
67 //\r
68 // Masks for the FILE_LIST.FileFlags field\r
69 //\r
70 #define FILE_FLAG_BINARY    0x01\r
71 #define FILE_FLAG_EFI       0x02\r
72 #define FILE_FLAG_COMPRESS  0x04\r
73 \r
74 //\r
75 // Use this linked list structure to keep track of all the filenames\r
76 // specified on the command line.\r
77 //\r
78 typedef struct _FILE_LIST {\r
79   struct _FILE_LIST *Next;\r
80   CHAR8             *FileName;\r
81   UINT32            FileFlags;\r
82   UINT32            ClassCode;\r
83   UINT16            CodeRevision;\r
84 } FILE_LIST;\r
85 \r
86 //\r
87 // Use this to track our command-line options\r
88 //\r
89 typedef struct {\r
90   CHAR8     OutFileName[MAX_PATH];\r
91   INT8      NoLast;\r
92   UINT16    ClassCode;\r
93   UINT16    PciRevision;\r
94   UINT16    VendId;\r
95   UINT16    DevId;\r
96   UINT8     VendIdValid;\r
97   UINT8     DevIdValid;\r
98   INT8      Verbose;\r
99   INT8      Quiet;\r
100   INT8      Debug;\r
101   INT8      Pci23;\r
102   INT8      Pci30;\r
103   INT8      DumpOption;\r
104 //  INT8      Help;\r
105 //  INT8      Version;  \r
106   FILE_LIST *FileList;\r
107 } OPTIONS;\r
108 \r
109 //\r
110 // Make a global structure to keep track of command-line options\r
111 //\r
112 static OPTIONS  mOptions;\r
113 \r
114 //\r
115 // Use these to convert from machine type value to a named type\r
116 //\r
117 typedef struct {\r
118   UINT16  Value;\r
119   CHAR8   *Name;\r
120 } STRING_LOOKUP;\r
121 \r
122 //\r
123 // Machine Types\r
124 //\r
125 static STRING_LOOKUP  mMachineTypes[] = {\r
126   { EFI_IMAGE_MACHINE_IA32, "IA32" },\r
127   { EFI_IMAGE_MACHINE_IA64, "IA64" },\r
128   { EFI_IMAGE_MACHINE_EBC, "EBC" },\r
129   { 0, NULL }\r
130 };\r
131 \r
132 //\r
133 // Subsystem Types\r
134 //\r
135 static STRING_LOOKUP  mSubsystemTypes[] = {\r
136   { EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION, "EFI application" },\r
137   { EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER, "EFI boot service driver" },\r
138   { EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER, "EFI runtime driver" },\r
139   { 0, NULL }\r
140 };\r
141 \r
142 //\r
143 //  Function prototypes\r
144 //\r
145 static\r
146 void\r
147 Version (\r
148   VOID\r
149   )\r
150 /*++\r
151 \r
152 Routine Description:\r
153 \r
154   Displays the utility version to STDOUT\r
155 \r
156 Arguments:\r
157 \r
158   None\r
159 \r
160 Returns:\r
161 \r
162   None\r
163 \r
164 --*/\r
165 ;\r
166 \r
167 static\r
168 void\r
169 Usage (\r
170   VOID\r
171   )\r
172 /*++\r
173 \r
174 Routine Description:\r
175 \r
176   Displays the utility usage syntax to STDOUT\r
177 \r
178 Arguments:\r
179 \r
180   None\r
181 \r
182 Returns:\r
183 \r
184   None\r
185 \r
186 --*/  \r
187 ;\r
188 \r
189 static\r
190 int\r
191 ParseCommandLine (\r
192   int       Argc,\r
193   char      *Argv[],\r
194   OPTIONS   *Options\r
195   )\r
196 /*++\r
197 \r
198 Routine Description:\r
199   \r
200   Given the Argc/Argv program arguments, and a pointer to an options structure,\r
201   parse the command-line options and check their validity.\r
202 \r
203 Arguments:\r
204 \r
205   Argc            - standard C main() argument count\r
206   Argv[]          - standard C main() argument list\r
207   Options         - pointer to a structure to store the options in\r
208 \r
209 Returns:\r
210 \r
211   STATUS_SUCCESS    success\r
212   non-zero          otherwise\r
213 \r
214 --*/\r
215 ;\r
216 \r
217 static\r
218 int\r
219 CheckPE32File (\r
220   FILE      *Fptr,\r
221   UINT16    *MachineType,\r
222   UINT16    *SubSystem\r
223   )\r
224 /*++\r
225 \r
226 Routine Description:\r
227   \r
228   Given the Argc/Argv program arguments, and a pointer to an options structure,\r
229   parse the command-line options and check their validity.\r
230 \r
231 Arguments:\r
232 \r
233   Argc            - standard C main() argument count\r
234   Argv[]          - standard C main() argument list\r
235   Options         - pointer to a structure to store the options in\r
236 \r
237 Returns:\r
238 \r
239   STATUS_SUCCESS    success\r
240   non-zero          otherwise\r
241 \r
242 --*/  \r
243 ;\r
244 \r
245 static\r
246 int\r
247 ProcessEfiFile (\r
248   FILE      *OutFptr,\r
249   FILE_LIST *InFile,\r
250   UINT16    VendId,\r
251   UINT16    DevId,\r
252   UINT32    *Size\r
253   )\r
254 /*++\r
255 \r
256 Routine Description:\r
257   \r
258   Process a PE32 EFI file.\r
259 \r
260 Arguments:\r
261 \r
262   OutFptr     - file pointer to output binary ROM image file we're creating\r
263   InFile      - structure contains information on the PE32 file to process\r
264   VendId      - vendor ID as required in the option ROM header\r
265   DevId       - device ID as required in the option ROM header\r
266   Size        - pointer to where to return the size added to the output file\r
267 \r
268 Returns:\r
269 \r
270   0 - successful\r
271 \r
272 --*/\r
273 ;\r
274 \r
275 static\r
276 int\r
277 ProcessBinFile (\r
278   FILE      *OutFptr,\r
279   FILE_LIST *InFile,\r
280   UINT32    *Size\r
281   )\r
282 /*++\r
283 \r
284 Routine Description:\r
285   \r
286   Process a binary input file.\r
287 \r
288 Arguments:\r
289 \r
290   OutFptr     - file pointer to output binary ROM image file we're creating\r
291   InFile      - structure contains information on the binary file to process\r
292   Size        - pointer to where to return the size added to the output file\r
293 \r
294 Returns:\r
295 \r
296   0 - successful\r
297 \r
298 --*/  \r
299 ;\r
300 \r
301 static\r
302 void\r
303 DumpImage (\r
304   FILE_LIST *InFile\r
305   )\r
306 /*++\r
307 \r
308 Routine Description:\r
309 \r
310   Dump the headers of an existing option ROM image\r
311 \r
312 Arguments:\r
313 \r
314   InFile  - the file name of an existing option ROM image\r
315 \r
316 Returns:\r
317 \r
318   none\r
319 \r
320 --*/\r
321 ;\r
322 \r
323 char                  *\r
324 GetMachineTypeStr (\r
325   UINT16    MachineType\r
326   )\r
327 /*++\r
328 \r
329 Routine Description:\r
330 \r
331   GC_TODO: Add function description\r
332 \r
333 Arguments:\r
334 \r
335   MachineType - GC_TODO: add argument description\r
336 \r
337 Returns:\r
338 \r
339   GC_TODO: add return values\r
340 \r
341 --*/\r
342 ;\r
343 \r
344 static\r
345 char                  *\r
346 GetSubsystemTypeStr (\r
347   UINT16  SubsystemType\r
348   )\r
349 /*++\r
350 \r
351 Routine Description:\r
352 \r
353   GC_TODO: Add function description\r
354 \r
355 Arguments:\r
356 \r
357   SubsystemType - GC_TODO: add argument description\r
358 \r
359 Returns:\r
360 \r
361   GC_TODO: add return values\r
362 \r
363 --*/\r
364 ;\r
365 \r
366 #endif\r