/*++

Copyright (c) 1998  Intel Corporation

Module Name:

    misc.c

Abstract:

    Misc EFI support functions



Revision History

--*/

#include "lib.h"


/* 
 *  Additional Known guids
 */

#define SHELL_INTERFACE_PROTOCOL \
    { 0x47c7b223, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

#define ENVIRONMENT_VARIABLE_ID  \
    { 0x47c7b224, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

#define DEVICE_PATH_MAPPING_ID  \
    { 0x47c7b225, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

#define PROTOCOL_ID_ID  \
    { 0x47c7b226, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

#define ALIAS_ID  \
    { 0x47c7b227, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

static EFI_GUID ShellInterfaceProtocol = SHELL_INTERFACE_PROTOCOL;
static EFI_GUID SEnvId                 = ENVIRONMENT_VARIABLE_ID;
static EFI_GUID SMapId                 = DEVICE_PATH_MAPPING_ID;
static EFI_GUID SProtId                = PROTOCOL_ID_ID;
static EFI_GUID SAliasId               = ALIAS_ID;

struct {
    EFI_GUID        *Guid;
    CHAR16          *GuidName;
} KnownGuids[] = {
    &NullGuid,                  L"G0",
    &EfiGlobalVariable,         L"Efi",

    &VariableStoreProtocol,     L"varstore",
    &DevicePathProtocol,        L"dpath",
    &LoadedImageProtocol,       L"image",
    &TextInProtocol,            L"txtin",
    &TextOutProtocol,           L"txtout",
    &BlockIoProtocol,           L"blkio",
    &DiskIoProtocol,            L"diskio",
    &FileSystemProtocol,        L"fs",
    &LoadFileProtocol,          L"load",
    &DeviceIoProtocol,          L"DevIo",

    &GenericFileInfo,           L"GenFileInfo",
    &FileSystemInfo,            L"FileSysInfo",

    &UnicodeCollationProtocol,  L"unicode",
    &LegacyBootProtocol,        L"LegacyBoot",
    &SerialIoProtocol,          L"serialio",
    &VgaClassProtocol,          L"vgaclass",
    &SimpleNetworkProtocol,     L"net",
    &NetworkInterfaceIdentifierProtocol,    L"nii",
    &PxeBaseCodeProtocol,       L"pxebc",
    &PxeCallbackProtocol,       L"pxecb",

    &VariableStoreProtocol,     L"varstore",
    &LegacyBootProtocol,        L"LegacyBoot",
    &VgaClassProtocol,          L"VgaClass",
    &TextOutSpliterProtocol,    L"TxtOutSplit",
    &ErrorOutSpliterProtocol,   L"ErrOutSplit",
    &TextInSpliterProtocol,     L"TxtInSplit",
    &PcAnsiProtocol,            L"PcAnsi",
    &Vt100Protocol,             L"Vt100",
    &InternalLoadProtocol,      L"InternalLoad",
    &UnknownDevice,             L"Unknown Device",

    &ShellInterfaceProtocol,    L"ShellInt",
    &SEnvId,                    L"SEnv",
    &SProtId,                   L"ShellProtId",
    &SMapId,                    L"ShellDevPathMap",
    &SAliasId,                  L"ShellAlias",

    NULL
};

/* 
 * 
 */

LIST_ENTRY          GuidList;


VOID
InitializeGuid (
    VOID
    )
{
}

INTN
CompareGuid(
    IN EFI_GUID     *Guid1,
    IN EFI_GUID     *Guid2
    )
/*++

Routine Description:

    Compares to GUIDs

Arguments:

    Guid1       - guid to compare
    Guid2       - guid to compare

Returns:
    = 0     if Guid1 == Guid2

--*/
{
    return RtCompareGuid (Guid1, Guid2);
}


VOID
GuidToString (
    OUT CHAR16      *Buffer,
    IN EFI_GUID     *Guid
    )
{

    UINTN           Index;

    /* 
     *  Else, (for now) use additional internal function for mapping guids
     */

    for (Index=0; KnownGuids[Index].Guid; Index++) {
        if (CompareGuid(Guid, KnownGuids[Index].Guid) == 0) {
            SPrint (Buffer, 0, KnownGuids[Index].GuidName);
            return ;
        }
    }

    /* 
     *  Else dump it
     */

    SPrint (Buffer, 0, L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
        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]
        );
}