]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/C/EfiRom/EfiRom.h
f90c63fbf4ddf6904fa697a70bc0c4a4e8413b82
[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 - 2017, 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 *DevIdList;
87 UINT32 DevIdCount;
88 UINT8 VendIdValid;
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 { EFI_IMAGE_MACHINE_X64, "X64" },
121 { EFI_IMAGE_MACHINE_ARMT, "ARM" },
122 { EFI_IMAGE_MACHINE_AARCH64, "AA64" },
123 { 0, NULL }
124 };
125
126 //
127 // Subsystem Types
128 //
129 static STRING_LOOKUP mSubsystemTypes[] = {
130 { EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION, "EFI application" },
131 { EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER, "EFI boot service driver" },
132 { EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER, "EFI runtime driver" },
133 { 0, NULL }
134 };
135
136 //
137 // Function prototypes
138 //
139 static
140 void
141 Version (
142 VOID
143 )
144 /*++
145
146 Routine Description:
147
148 Displays the utility version to STDOUT
149
150 Arguments:
151
152 None
153
154 Returns:
155
156 None
157
158 --*/
159 ;
160
161 static
162 void
163 Usage (
164 VOID
165 )
166 /*++
167
168 Routine Description:
169
170 Displays the utility usage syntax to STDOUT
171
172 Arguments:
173
174 None
175
176 Returns:
177
178 None
179
180 --*/
181 ;
182
183 static
184 int
185 ParseCommandLine (
186 int Argc,
187 char *Argv[],
188 OPTIONS *Options
189 )
190 /*++
191
192 Routine Description:
193
194 Given the Argc/Argv program arguments, and a pointer to an options structure,
195 parse the command-line options and check their validity.
196
197 Arguments:
198
199 Argc - standard C main() argument count
200 Argv[] - standard C main() argument list
201 Options - pointer to a structure to store the options in
202
203 Returns:
204
205 STATUS_SUCCESS success
206 non-zero otherwise
207
208 --*/
209 ;
210
211 static
212 int
213 CheckPE32File (
214 FILE *Fptr,
215 UINT16 *MachineType,
216 UINT16 *SubSystem
217 )
218 /*++
219
220 Routine Description:
221
222 Given the Argc/Argv program arguments, and a pointer to an options structure,
223 parse the command-line options and check their validity.
224
225 Arguments:
226
227 Argc - standard C main() argument count
228 Argv[] - standard C main() argument list
229 Options - pointer to a structure to store the options in
230
231 Returns:
232
233 STATUS_SUCCESS success
234 non-zero otherwise
235
236 --*/
237 ;
238
239 static
240 int
241 ProcessEfiFile (
242 FILE *OutFptr,
243 FILE_LIST *InFile,
244 UINT16 VendId,
245 UINT16 DevId,
246 UINT32 *Size
247 )
248 /*++
249
250 Routine Description:
251
252 Process a PE32 EFI file.
253
254 Arguments:
255
256 OutFptr - file pointer to output binary ROM image file we're creating
257 InFile - structure contains information on the PE32 file to process
258 VendId - vendor ID as required in the option ROM header
259 DevId - device ID as required in the option ROM header
260 Size - pointer to where to return the size added to the output file
261
262 Returns:
263
264 0 - successful
265
266 --*/
267 ;
268
269 static
270 int
271 ProcessBinFile (
272 FILE *OutFptr,
273 FILE_LIST *InFile,
274 UINT32 *Size
275 )
276 /*++
277
278 Routine Description:
279
280 Process a binary input file.
281
282 Arguments:
283
284 OutFptr - file pointer to output binary ROM image file we're creating
285 InFile - structure contains information on the binary file to process
286 Size - pointer to where to return the size added to the output file
287
288 Returns:
289
290 0 - successful
291
292 --*/
293 ;
294
295 static
296 void
297 DumpImage (
298 FILE_LIST *InFile
299 )
300 /*++
301
302 Routine Description:
303
304 Dump the headers of an existing option ROM image
305
306 Arguments:
307
308 InFile - the file name of an existing option ROM image
309
310 Returns:
311
312 none
313
314 --*/
315 ;
316
317 char *
318 GetMachineTypeStr (
319 UINT16 MachineType
320 )
321 /*++
322
323 Routine Description:
324
325 GC_TODO: Add function description
326
327 Arguments:
328
329 MachineType - GC_TODO: add argument description
330
331 Returns:
332
333 GC_TODO: add return values
334
335 --*/
336 ;
337
338 static
339 char *
340 GetSubsystemTypeStr (
341 UINT16 SubsystemType
342 )
343 /*++
344
345 Routine Description:
346
347 GC_TODO: Add function description
348
349 Arguments:
350
351 SubsystemType - GC_TODO: add argument description
352
353 Returns:
354
355 GC_TODO: add return values
356
357 --*/
358 ;
359
360 #endif