]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Bds/BdsInternal.h
ArmPlatformPkg/Bds: Add Linux 'initrd' support to BDS
[mirror_edk2.git] / ArmPlatformPkg / Bds / BdsInternal.h
index 9ef36a1ff6749d1c2326aac5075723eb9dd75ef4..e0bf105db8e6d0dbe9df28b8b19d51d59568ce7a 100644 (file)
@@ -35,7 +35,7 @@
 \r
 #define BOOT_DEVICE_DESCRIPTION_MAX   100\r
 #define BOOT_DEVICE_FILEPATH_MAX      100\r
-#define BOOT_DEVICE_OPTION_MAX        100\r
+#define BOOT_DEVICE_OPTION_MAX        300\r
 #define BOOT_DEVICE_ADDRESS_MAX       20\r
 \r
 typedef enum {\r
@@ -44,9 +44,19 @@ typedef enum {
     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
+\r
 typedef struct {\r
-  BDS_LOADER_TYPE   LoaderType;\r
-  CHAR8             Arguments[];\r
+  BDS_LOADER_TYPE            LoaderType;\r
+  BDS_LOADER_ARGUMENTS       Arguments;\r
 } BDS_LOADER_OPTIONAL_DATA;\r
 \r
 typedef enum {\r
@@ -68,6 +78,7 @@ typedef struct {
 \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
@@ -86,8 +97,8 @@ typedef struct _BDS_LOAD_OPTION_SUPPORT {
   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 BDS_LOAD_OPTION *BootOption, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath, OUT BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);\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
 } BDS_LOAD_OPTION_SUPPORT;\r
 \r
 #define LOAD_OPTION_FROM_LINK(a)   BASE_CR(a, BDS_LOAD_OPTION, Link)\r
@@ -107,7 +118,8 @@ BootDeviceListSupportedInit (
 \r
 EFI_STATUS\r
 BootDeviceListSupportedFree (\r
-  IN LIST_ENTRY *SupportedDeviceList\r
+  IN LIST_ENTRY *SupportedDeviceList,\r
+  IN BDS_SUPPORTED_DEVICE *Except\r
   );\r
 \r
 EFI_STATUS\r
@@ -187,7 +199,7 @@ BootOptionCreate (
   IN  CHAR16* BootDescription,\r
   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
   IN  BDS_LOADER_TYPE   BootType,\r
-  IN  CHAR8*            BootArguments,\r
+  IN  BDS_LOADER_ARGUMENTS *BootArguments,\r
   OUT BDS_LOAD_OPTION **BdsLoadOption\r
   );\r
 \r
@@ -198,7 +210,7 @@ BootOptionUpdate (
   IN  CHAR16* BootDescription,\r
   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
   IN  BDS_LOADER_TYPE   BootType,\r
-  IN  CHAR8*            BootArguments\r
+  IN  BDS_LOADER_ARGUMENTS *BootArguments\r
   );\r
 \r
 EFI_STATUS\r