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