/** @file * * Copyright (c) 2019, Andrey Warkentin * * SPDX-License-Identifier: BSD-2-Clause-Patent * **/ #include #include #include #include #include #include #include #include #include #define ARASAN_MMC_DXE_FILE_GUID \ { 0x100c2cfa, 0xb586, 0x4198, { 0x9b, 0x4c, 0x16, 0x83, 0xd1, 0x95, 0xb1, 0xda } } #define SDHOST_MMC_DXE_FILE_GUID \ { 0x58abd787, 0xf64d, 0x4ca2, { 0xa0, 0x34, 0xb9, 0xac, 0x2d, 0x5a, 0xd0, 0xcf } } #define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) } typedef struct { VENDOR_DEVICE_PATH Custom; EFI_DEVICE_PATH_PROTOCOL EndDevicePath; } PLATFORM_SD_DEV; STATIC PLATFORM_SD_DEV mArasan = { // // VENDOR_DEVICE_PATH ArasanMMCHostDxe // { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) }, ARASAN_MMC_DXE_FILE_GUID }, // // EFI_DEVICE_PATH_PROTOCOL End // { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, DP_NODE_LEN (EFI_DEVICE_PATH_PROTOCOL) } }; STATIC PLATFORM_SD_DEV mSDHost = { // // VENDOR_DEVICE_PATH SdHostDxe // { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) }, SDHOST_MMC_DXE_FILE_GUID }, // // EFI_DEVICE_PATH_PROTOCOL End // { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, DP_NODE_LEN (EFI_DEVICE_PATH_PROTOCOL) } }; STATIC CHAR16* EFIAPI BootDescriptionHandler ( IN EFI_HANDLE Handle, IN CONST CHAR16 *DefaultDescription ) { CHAR16 *Name; EFI_DEVICE_PATH_PROTOCOL *DevicePath; DevicePath = DevicePathFromHandle (Handle); if (CompareMem (&mArasan, DevicePath, GetDevicePathSize (DevicePath)) == 0) { Name = L"SD/MMC on Arasan SDHCI"; } else if (CompareMem (&mSDHost, DevicePath, GetDevicePathSize (DevicePath)) == 0) { Name = L"SD/MMC on Broadcom SDHOST"; } else { return NULL; } return AllocateCopyPool(StrSize (Name), Name); } EFI_STATUS EFIAPI PlatformUiAppLibConstructor ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; Status = EfiBootManagerRegisterBootDescriptionHandler(BootDescriptionHandler); ASSERT_EFI_ERROR (Status); return EFI_SUCCESS; } EFI_STATUS EFIAPI PlatformUiAppLibDestructor ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { return EFI_SUCCESS; }