]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Bds/BdsInternal.h
AppPkg: Update email and URL.
[mirror_edk2.git] / ArmPlatformPkg / Bds / BdsInternal.h
index e0bf105db8e6d0dbe9df28b8b19d51d59568ce7a..ddf5308e8b234d7ff5a75a5c8b823f5bd66a4358 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 *\r
-*  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+*  Copyright (c) 2011-2015, ARM Limited. All rights reserved.\r
 *\r
 *  This program and the accompanying materials\r
 *  are licensed and made available under the terms and conditions of the BSD License\r
@@ -18,7 +18,6 @@
 #include <PiDxe.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/BdsLib.h>\r
-#include <Library/BdsUnixLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/DevicePathLib.h>\r
 #include <Library/UefiLib.h>\r
 #include <Protocol/DevicePathToText.h>\r
 \r
 #include <Guid/GlobalVariable.h>\r
+#include <Guid/Fdt.h>\r
 \r
 #define BOOT_DEVICE_DESCRIPTION_MAX   100\r
 #define BOOT_DEVICE_FILEPATH_MAX      100\r
 #define BOOT_DEVICE_OPTION_MAX        300\r
-#define BOOT_DEVICE_ADDRESS_MAX       20\r
+#define BOOT_DEVICE_ADDRESS_MAX       (sizeof(L"0x0000000000000000"))\r
 \r
-typedef enum {\r
-    BDS_LOADER_EFI_APPLICATION = 0,\r
-    BDS_LOADER_KERNEL_LINUX_ATAG,\r
-    BDS_LOADER_KERNEL_LINUX_FDT,\r
-} BDS_LOADER_TYPE;\r
-\r
-typedef struct{\r
-  UINT16                     InitrdPathListLength;\r
-  EFI_DEVICE_PATH_PROTOCOL   *InitrdPathList;\r
-  CHAR8                      CmdLine[BOOT_DEVICE_OPTION_MAX + 1];\r
-} BDS_LINUX_ATAG_ARGUMENTS;\r
-\r
-typedef union {\r
-  BDS_LINUX_ATAG_ARGUMENTS     LinuxAtagArguments;\r
-} BDS_LOADER_ARGUMENTS;\r
+#define UPDATE_BOOT_ENTRY L"Update entry: "\r
+#define DELETE_BOOT_ENTRY L"Delete entry: "\r
+#define MOVE_BOOT_ENTRY   L"Move entry: "\r
 \r
 typedef struct {\r
-  BDS_LOADER_TYPE            LoaderType;\r
-  BDS_LOADER_ARGUMENTS       Arguments;\r
-} BDS_LOADER_OPTIONAL_DATA;\r
+  LIST_ENTRY                  Link;\r
+  BDS_LOAD_OPTION*            BdsLoadOption;\r
+} BDS_LOAD_OPTION_ENTRY;\r
 \r
 typedef enum {\r
   BDS_DEVICE_FILESYSTEM = 0,\r
@@ -68,48 +56,34 @@ typedef enum {
 } BDS_SUPPORTED_DEVICE_TYPE;\r
 \r
 typedef struct {\r
-  LIST_ENTRY                  Link;\r
-  CHAR16                      Description[BOOT_DEVICE_DESCRIPTION_MAX];\r
-  EFI_DEVICE_PATH_PROTOCOL*   DevicePathProtocol;\r
+  LIST_ENTRY                          Link;\r
+  CHAR16                              Description[BOOT_DEVICE_DESCRIPTION_MAX];\r
+  EFI_DEVICE_PATH_PROTOCOL*           DevicePathProtocol;\r
   struct _BDS_LOAD_OPTION_SUPPORT*    Support;\r
 } BDS_SUPPORTED_DEVICE;\r
 \r
 #define SUPPORTED_BOOT_DEVICE_FROM_LINK(a)   BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)\r
 \r
-typedef UINT8* EFI_LOAD_OPTION;\r
-\r
-/* This is defined by the UEFI specs, don't change it */\r
-typedef struct {\r
-  LIST_ENTRY                  Link;\r
-\r
-  UINT16                      LoadOptionIndex;\r
-  EFI_LOAD_OPTION             LoadOption;\r
-  UINTN                       LoadOptionSize;\r
-\r
-  UINT32                      Attributes;\r
-  UINT16                      FilePathListLength;\r
-  CHAR16                      *Description;\r
-  EFI_DEVICE_PATH_PROTOCOL    *FilePathList;\r
-  BDS_LOADER_OPTIONAL_DATA    *OptionalData;\r
-} BDS_LOAD_OPTION;\r
-\r
 typedef struct _BDS_LOAD_OPTION_SUPPORT {\r
   BDS_SUPPORTED_DEVICE_TYPE   Type;\r
   EFI_STATUS    (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList);\r
-  BOOLEAN       (*IsSupported)(IN BDS_LOAD_OPTION* BdsLoadOption);\r
-  EFI_STATUS    (*CreateDevicePathNode)(IN BDS_SUPPORTED_DEVICE* BdsLoadOption, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNode, OUT BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);\r
-  EFI_STATUS    (*UpdateDevicePathNode)(IN EFI_DEVICE_PATH *OldDevicePath, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath, OUT BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);\r
+  BOOLEAN       (*IsSupported)(IN  EFI_DEVICE_PATH *DevicePath);\r
+  EFI_STATUS    (*CreateDevicePathNode)(IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNodes);\r
+  EFI_STATUS    (*UpdateDevicePathNode)(IN EFI_DEVICE_PATH *OldDevicePath, IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath);\r
+\r
+  /// Define if the boot menu should request if the file is a EFI binary or a Linux kernel\r
+  /// Example: PXE boot always deliver a UEFI application.\r
+  BOOLEAN       RequestBootType;\r
 } BDS_LOAD_OPTION_SUPPORT;\r
 \r
-#define LOAD_OPTION_FROM_LINK(a)   BASE_CR(a, BDS_LOAD_OPTION, Link)\r
+#define LOAD_OPTION_ENTRY_FROM_LINK(a)  BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link)\r
+#define LOAD_OPTION_FROM_LINK(a)        ((BDS_LOAD_OPTION_ENTRY*)BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link))->BdsLoadOption\r
 \r
-EFI_STATUS\r
-GetEnvironmentVariable (\r
-  IN     CONST CHAR16*   VariableName,\r
-  IN     VOID*           DefaultValue,\r
-  IN OUT UINTN*          Size,\r
-  OUT    VOID**          Value\r
-  );\r
+// GUID of the EFI Linux Loader\r
+extern CONST EFI_GUID mLinuxLoaderAppGuid;\r
+\r
+// Device path of the EFI Linux Loader in the Firmware Volume\r
+extern EFI_DEVICE_PATH* mLinuxLoaderDevicePath;\r
 \r
 EFI_STATUS\r
 BootDeviceListSupportedInit (\r
@@ -124,8 +98,20 @@ BootDeviceListSupportedFree (
 \r
 EFI_STATUS\r
 BootDeviceGetDeviceSupport (\r
-  IN  BDS_LOAD_OPTION *BootOption,\r
-  OUT BDS_LOAD_OPTION_SUPPORT**  DeviceSupport\r
+  IN  EFI_DEVICE_PATH           *DevicePath,\r
+  OUT BDS_LOAD_OPTION_SUPPORT   **DeviceSupport\r
+  );\r
+\r
+EFI_STATUS\r
+GetHIInputStr (\r
+  IN OUT CHAR16  *CmdLine,\r
+  IN     UINTN   MaxCmdLine\r
+  );\r
+\r
+EFI_STATUS\r
+EditHIInputStr (\r
+  IN OUT CHAR16  *CmdLine,\r
+  IN     UINTN   MaxCmdLine\r
   );\r
 \r
 EFI_STATUS\r
@@ -151,13 +137,14 @@ GetHIInputIP (
   );\r
 \r
 EFI_STATUS\r
-GetHIInputBoolean (\r
-  OUT BOOLEAN *Value\r
+EditHIInputIP (\r
+  IN  EFI_IP_ADDRESS  *InIpAddr,\r
+  OUT EFI_IP_ADDRESS  *OutIpAddr\r
   );\r
 \r
-BOOLEAN\r
-HasFilePathEfiExtension (\r
-  IN CHAR16* FilePath\r
+EFI_STATUS\r
+GetHIInputBoolean (\r
+  OUT BOOLEAN *Value\r
   );\r
 \r
 EFI_DEVICE_PATH*\r
@@ -170,6 +157,16 @@ BdsStartBootOption (
   IN CHAR16* BootOption\r
   );\r
 \r
+UINTN\r
+GetUnalignedDevicePathSize (\r
+  IN EFI_DEVICE_PATH* DevicePath\r
+  );\r
+\r
+EFI_DEVICE_PATH*\r
+GetAlignedDevicePath (\r
+  IN EFI_DEVICE_PATH* DevicePath\r
+  );\r
+\r
 EFI_STATUS\r
 GenerateDeviceDescriptionName (\r
   IN  EFI_HANDLE  Handle,\r
@@ -195,22 +192,22 @@ BootOptionStart (
 \r
 EFI_STATUS\r
 BootOptionCreate (\r
-  IN  UINT32 Attributes,\r
-  IN  CHAR16* BootDescription,\r
+  IN  UINT32                    Attributes,\r
+  IN  CHAR16*                   BootDescription,\r
   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
-  IN  BDS_LOADER_TYPE   BootType,\r
-  IN  BDS_LOADER_ARGUMENTS *BootArguments,\r
-  OUT BDS_LOAD_OPTION **BdsLoadOption\r
+  IN  UINT8*                    OptionalData,\r
+  IN  UINTN                     OptionalDataSize,\r
+  OUT BDS_LOAD_OPTION**         BdsLoadOption\r
   );\r
 \r
 EFI_STATUS\r
 BootOptionUpdate (\r
-  IN  BDS_LOAD_OPTION *BdsLoadOption,\r
-  IN  UINT32 Attributes,\r
-  IN  CHAR16* BootDescription,\r
+  IN  BDS_LOAD_OPTION*          BdsLoadOption,\r
+  IN  UINT32                    Attributes,\r
+  IN  CHAR16*                   BootDescription,\r
   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
-  IN  BDS_LOADER_TYPE   BootType,\r
-  IN  BDS_LOADER_ARGUMENTS *BootArguments\r
+  IN UINT8*                     OptionalData,\r
+  IN UINTN                      OptionalDataSize\r
   );\r
 \r
 EFI_STATUS\r
@@ -223,4 +220,58 @@ BootMenuMain (
   VOID\r
   );\r
 \r
+BOOLEAN\r
+IsUnicodeString (\r
+  IN VOID* String\r
+  );\r
+\r
+/*\r
+ * Try to detect if the given string is an ASCII or Unicode string\r
+ *\r
+ * There are actually few limitation to this function but it is mainly to give\r
+ * a user friendly output.\r
+ *\r
+ * Some limitations:\r
+ *   - it only supports unicode string that use ASCII character (< 0x100)\r
+ *   - single character ASCII strings are interpreted as Unicode string\r
+ *   - string cannot be longer than 2 x BOOT_DEVICE_OPTION_MAX (600 bytes)\r
+ *\r
+ * @param String    Buffer that might contain a Unicode or Ascii string\r
+ * @param IsUnicode If not NULL this boolean value returns if the string is an\r
+ *                  ASCII or Unicode string.\r
+ */\r
+BOOLEAN\r
+IsPrintableString (\r
+  IN  VOID*    String,\r
+  OUT BOOLEAN *IsUnicode\r
+  );\r
+\r
+/**\r
+  An empty function to pass error checking of CreateEventEx ().\r
+\r
+  @param  Event                 Event whose notification function is being invoked.\r
+  @param  Context               Pointer to the notification function's context,\r
+                                which is implementation-dependent.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EmptyCallbackFunction (\r
+  IN EFI_EVENT                Event,\r
+  IN VOID                     *Context\r
+  );\r
+\r
+/**\r
+ * This function check if the DevicePath defines an EFI binary\r
+ *\r
+ * This function is used when the BDS support Linux loader to\r
+ * detect if the binary is an EFI application or potentially a\r
+ * Linux kernel.\r
+ */\r
+EFI_STATUS\r
+IsEfiBinary (\r
+  IN  EFI_DEVICE_PATH* DevicePath,\r
+  OUT BOOLEAN          *EfiBinary\r
+  );\r
+\r
 #endif /* _BDSINTERNAL_H_ */\r