mirror of https://github.com/acidanthera/audk.git
187 lines
4.6 KiB
C
187 lines
4.6 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2004, Intel Corporation
|
||
|
All rights reserved. This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
GuidList.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Utility to create a GUID-to-name listing file that can
|
||
|
be used by other utilities. Basic operation is to take the
|
||
|
table of name+GUIDs that we have compiled into this utility,
|
||
|
and create a text file that can be parsed by other utilities
|
||
|
to do replacement of "name" with "GUID".
|
||
|
|
||
|
Notes:
|
||
|
To add a new GUID to this database:
|
||
|
1. Add a "#include EFI_GUID_DEFINITION(name)" statement below
|
||
|
2. Modify the mGuidList[] array below to add the new GUID name
|
||
|
|
||
|
The only issue that may come up is that, if the source GUID file
|
||
|
is not in the standard GUID directory, then this utility won't
|
||
|
compile because the #include fails. In this case you'd need
|
||
|
to define a new macro (if it's in a standard place) or modify
|
||
|
this utility's makefile to add the path to your new .h file.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <ctype.h>
|
||
|
|
||
|
#include <Common/UefiBaseTypes.h>
|
||
|
#include <Guid/Apriori.h>
|
||
|
#include <Guid/AcpiTableStorage.h>
|
||
|
|
||
|
#include "EfiUtilityMsgs.h"
|
||
|
|
||
|
|
||
|
#define GUID_XREF(varname, guid) { \
|
||
|
#varname, #guid, guid \
|
||
|
}
|
||
|
|
||
|
#define NULL_GUID \
|
||
|
{ \
|
||
|
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 \
|
||
|
}
|
||
|
|
||
|
typedef struct {
|
||
|
INT8 *VariableName;
|
||
|
INT8 *DefineName;
|
||
|
EFI_GUID Guid;
|
||
|
} GUID_LIST;
|
||
|
|
||
|
//
|
||
|
// This is our table of all GUIDs we want to print out to create
|
||
|
// a GUID-to-name cross reference.
|
||
|
// Use the #defined name from the GUID definition's source .h file.
|
||
|
//
|
||
|
static GUID_LIST mGuidList[] = {
|
||
|
GUID_XREF(gAprioriGuid, EFI_APRIORI_GUID),
|
||
|
GUID_XREF(gEfiAcpiTableStorageGuid, EFI_ACPI_TABLE_STORAGE_GUID),
|
||
|
// FIXME The next line was removed in the port to R9.
|
||
|
// GUID_XREF(gEfiDefaultBmpLogoGuid, EFI_DEFAULT_BMP_LOGO_GUID),
|
||
|
GUID_XREF(gEfiAcpiTableStorageGuid, EFI_ACPI_TABLE_STORAGE_GUID),
|
||
|
//
|
||
|
// Terminator
|
||
|
//
|
||
|
{
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL_GUID
|
||
|
}
|
||
|
};
|
||
|
|
||
|
void
|
||
|
PrintGuidText (
|
||
|
FILE *OutFptr,
|
||
|
INT8 *VariableName,
|
||
|
INT8 *DefineName,
|
||
|
EFI_GUID *Guid
|
||
|
);
|
||
|
|
||
|
int
|
||
|
CreateGuidList (
|
||
|
INT8 *OutFileName
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Print our GUID/name list to the specified output file.
|
||
|
|
||
|
Arguments:
|
||
|
OutFileName - name of the output file to write our results to.
|
||
|
|
||
|
Returns:
|
||
|
0 if successful
|
||
|
nonzero otherwise
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
FILE *OutFptr;
|
||
|
int Index;
|
||
|
|
||
|
//
|
||
|
// Open output file for writing. If the name is NULL, then write to stdout
|
||
|
//
|
||
|
if (OutFileName != NULL) {
|
||
|
OutFptr = fopen (OutFileName, "w");
|
||
|
if (OutFptr == NULL) {
|
||
|
Error (NULL, 0, 0, OutFileName, "failed to open output file for writing");
|
||
|
return STATUS_ERROR;
|
||
|
}
|
||
|
} else {
|
||
|
OutFptr = stdout;
|
||
|
}
|
||
|
|
||
|
for (Index = 0; mGuidList[Index].VariableName != NULL; Index++) {
|
||
|
PrintGuidText (OutFptr, mGuidList[Index].VariableName, mGuidList[Index].DefineName, &mGuidList[Index].Guid);
|
||
|
}
|
||
|
//
|
||
|
// Close the output file if they specified one.
|
||
|
//
|
||
|
if (OutFileName != NULL) {
|
||
|
fclose (OutFptr);
|
||
|
}
|
||
|
|
||
|
return STATUS_SUCCESS;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
PrintGuidText (
|
||
|
FILE *OutFptr,
|
||
|
INT8 *VariableName,
|
||
|
INT8 *DefineName,
|
||
|
EFI_GUID *Guid
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Print a GUID/name combo in INF-style format
|
||
|
|
||
|
guid-guid-guid-guid DEFINE_NAME gName
|
||
|
|
||
|
Arguments:
|
||
|
OutFptr - file pointer to which to write the output
|
||
|
VariableName - the GUID variable's name
|
||
|
DefineName - the name used in the #define
|
||
|
Guid - pointer to the GUID value
|
||
|
|
||
|
Returns:
|
||
|
NA
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
if (OutFptr == NULL) {
|
||
|
OutFptr = stdout;
|
||
|
}
|
||
|
|
||
|
fprintf (
|
||
|
OutFptr,
|
||
|
"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X %s %s\n",
|
||
|
Guid->Data1,
|
||
|
Guid->Data2,
|
||
|
Guid->Data3,
|
||
|
Guid->Data4[0],
|
||
|
Guid->Data4[1],
|
||
|
Guid->Data4[2],
|
||
|
Guid->Data4[3],
|
||
|
Guid->Data4[4],
|
||
|
Guid->Data4[5],
|
||
|
Guid->Data4[6],
|
||
|
Guid->Data4[7],
|
||
|
DefineName,
|
||
|
VariableName
|
||
|
);
|
||
|
}
|