//;****************************************************************************** //;* Copyright (c) 2015, Insyde Software Corporation. All Rights Reserved. //;* //;* You may not reproduce, distribute, publish, display, perform, modify, adapt, //;* transmit, broadcast, present, recite, release, license or otherwise exploit //;* any part of this publication in any form, by any means, without the prior //;* written permission of Insyde Software Corporation. //;* //;****************************************************************************** #ifndef _BOOT_OPTION_SERVICE_H_ #define _BOOT_OPTION_SERVICE_H_ #include // // Libraries // #include #include #include #include #include #include #include #include #include #include // // UEFI Driver Model Protocols // // // Consumed Protocols // // // Produced Protocols // // // Guids // // // Driver Version // // // Protocol instances // #include #include #include #include #include #include // // Include files with function prototypes // #include "BootDeviceInfo.h" #include "LimitedToInternalStorage.h" #include #include #include #include #include #include #include #include #include "BootDeviceTitleString.h" #include #include #include #include #define L05_MAX_DEVICE_NAME_SIZE 100 #define L05_MAX_BOOT_ORDER 100 #define L05_BOOT_ORDER_NOT_FOUND 0xFFFF #define L05_UNKNOWN_DEVICE_TYPE 0xFFFF #define L05_EFI_TYPE_MASK 0xE000 extern EFI_GUID gEfiGlobalVariableGuid; #define USB_MASS_SIGNATURE SIGNATURE_32 ('U', 's', 'b', 'K') #define USB_MASS_DEVICE_FROM_BLOCKIO(a) \ CR (a, USB_MASS_DEVICE, BlockIo, USB_MASS_SIGNATURE) // // Copy form Insyde\InsydeModulePkg\Include\Library\GenericBdsLib.h // #define IS_USB_SHORT_FORM_DEVICE_PATH(DevPath) (BOOLEAN) ((DevPath) != NULL && \ ((EFI_DEVICE_PATH_PROTOCOL *)(DevPath))->Type == MESSAGING_DEVICE_PATH && \ ((EFI_DEVICE_PATH_PROTOCOL *)(DevPath))->SubType == MSG_USB_WWID_DP) typedef struct _USB_MASS_DEVICE USB_MASS_DEVICE; typedef struct { UINT8 Pdt; // Peripheral Device Type (low 5 bits) UINT8 Removable; // Removable Media (highest bit) UINT8 Reserved0[2]; UINT8 AddLen; // Additional length UINT8 Reserved1[3]; UINT8 VendorID[8]; UINT8 ProductID[16]; UINT8 ProductRevision[4]; } USB_BOOT_INQUIRY_DATA; struct _USB_MASS_DEVICE { UINT32 Signature; EFI_HANDLE Controller; EFI_USB_IO_PROTOCOL *UsbIo; EFI_BLOCK_IO_PROTOCOL BlockIo; EFI_BLOCK_IO_MEDIA BlockIoMedia; EFI_DISK_INFO_PROTOCOL DiskInfo; UINT8 OpticalStorage : 1; UINT8 ScsiInterface : 1; UINT8 Reserved : 6; UINT8 Lun; // Logical Unit Number UINT8 Pdt; // Peripheral Device Type UINT8 MediumType; // MediumType for FDD 720/1.44 USB_MASS_TRANSPORT_PROTOCOL *Transport; // USB mass storage transport protocol VOID *Context; // Opaque storage for mass transport USB_BOOT_INQUIRY_DATA InquiryData; EFI_UNICODE_STRING_TABLE *DeviceNameTable; EFI_DEVICE_PATH_PROTOCOL *DevicePath; EFI_USB_CORE_PROTOCOL *UsbCore; }; typedef struct { UINT8 NetwortType; // Record Ipv4 or Ipv6 UINT16 BootOrderList; // The Number is BootOption's number. ex: BootOrderList[0]= 0001, and 0001 is the number. } TEMP_SAVE_NETWORK_INDEX; EFI_STATUS L05SortPxeOfBootOrder ( IN OUT UINT16 *BootOrderList, IN OUT UINTN BootOrderNumber ); CHAR16 * L05Ascii2Unicode ( OUT CHAR16 *UnicodeStr, IN CHAR8 *AsciiStr ); BOOLEAN L05IsUsbMemoryDevice ( IN EFI_DEVICE_PATH_PROTOCOL *DevicePathPtr ); EFI_STATUS L05CheckLegacyDeviceType ( IN BBS_TABLE *BbsItem, IN OUT UINT16 *DeviceType, IN CHAR16 *DeviceName, IN UINTN Index ); BOOLEAN L05IsEfiDeviceType ( IN UINT16 DeviceType ); EFI_STATUS L05DevicePathToBootType ( IN EFI_DEVICE_PATH_PROTOCOL *DevicePathPtr, OUT UINT16 *BootType ); EFI_STATUS L05ModifyBootOrder ( IN UINT8 BootNormalPriority, IN UINT16 NewPositionPolicy, IN BBS_TABLE *CurrentBbsItem, IN UINTN BbsTableIndex, IN OUT UINT16 *BootOrderList, IN OUT UINTN *BootOrderListSize ); EFI_STATUS L05ModifyBootOptionPosition ( IN UINT8 BootNormalPriority, IN UINT16 *BootOrderList, IN UINTN BootOrderNum, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT UINTN *NewPosition ); EFI_STATUS L05SortBootOrderByDefault ( IN OUT UINT16 *BootOrderList, IN UINTN BootOrderNumber, IN UINT8 BootType ); EFI_STATUS L05RemoveDeviceTypeFromBootOrder ( IN OUT UINT16 *BootOrderList, IN OUT UINT16 *BootOrderNumber, IN UINT16 DeviceType ); EFI_STATUS L05MoveHddToFrontOfBootOrder ( IN OUT UINT16 *BootOrderList, IN OUT UINTN BootOrderNumber ); EFI_STATUS InstallProjectModifyBootOrderHook ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ); #endif