]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Library/BdsLib/BdsLinuxLoader.h
ARM Packages: Fixed line endings
[mirror_edk2.git] / ArmPkg / Library / BdsLib / BdsLinuxLoader.h
index 8d58ce103a1a829eafdc26849ba8d3b012fcdb27..a3ecddc4f1e04c52b271186de328a570ae9a081d 100644 (file)
-/** @file
-*
-*  Copyright (c) 2011-2012, ARM Limited. All rights reserved.
-*  
-*  This program and the accompanying materials                          
-*  are licensed and made available under the terms and conditions of the BSD License         
-*  which accompanies this distribution.  The full text of the license may be found at        
-*  http://opensource.org/licenses/bsd-license.php                                            
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
-*
-**/
-
-#ifndef __BDSLINUXLOADER_H
-#define __BDSLINUXLOADER_H
-
-#define LINUX_UIMAGE_SIGNATURE    0x56190527
-
-#define LINUX_ATAG_MAX_OFFSET     (PcdGet32(PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxAtagMaxOffset))
-#define LINUX_KERNEL_MAX_OFFSET   (PcdGet32(PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxKernelMaxOffset))
-
-#define ATAG_MAX_SIZE       0x3000
-
-/* ATAG : list of possible tags */
-#define ATAG_NONE            0x00000000
-#define ATAG_CORE            0x54410001
-#define ATAG_MEM             0x54410002
-#define ATAG_VIDEOTEXT       0x54410003
-#define ATAG_RAMDISK         0x54410004
-#define ATAG_INITRD2         0x54420005
-#define ATAG_SERIAL          0x54410006
-#define ATAG_REVISION        0x54410007
-#define ATAG_VIDEOLFB        0x54410008
-#define ATAG_CMDLINE         0x54410009
-#define ATAG_ARM_MP_CORE     0x5441000A
-
-/* structures for each atag */
-typedef struct {
-  UINT32  size; /* length of tag in words including this header */
-  UINT32  type;  /* tag type */
-} LINUX_ATAG_HEADER;
-
-typedef struct {
-  UINT32  flags;
-  UINT32  pagesize;
-  UINT32  rootdev;
-} LINUX_ATAG_CORE;
-
-typedef struct {
-  UINT32  size;
-  UINTN  start;
-} LINUX_ATAG_MEM;
-
-typedef struct {
-  UINT8   x;
-  UINT8   y;
-  UINT16  video_page;
-  UINT8   video_mode;
-  UINT8   video_cols;
-  UINT16  video_ega_bx;
-  UINT8   video_lines;
-  UINT8   video_isvga;
-  UINT16  video_points;
-} LINUX_ATAG_VIDEOTEXT;
-
-typedef struct {
-  UINT32  flags;
-  UINT32  size;
-  UINTN  start;
-} LINUX_ATAG_RAMDISK;
-
-typedef struct {
-  UINT32  start;
-  UINT32  size;
-} LINUX_ATAG_INITRD2;
-
-typedef struct {
-  UINT32  low;
-  UINT32  high;
-} LINUX_ATAG_SERIALNR;
-
-typedef struct {
-  UINT32  rev;
-} LINUX_ATAG_REVISION;
-
-typedef struct {
-  UINT16  lfb_width;
-  UINT16  lfb_height;
-  UINT16  lfb_depth;
-  UINT16  lfb_linelength;
-  UINT32  lfb_base;
-  UINT32  lfb_size;
-  UINT8   red_size;
-  UINT8   red_pos;
-  UINT8   green_size;
-  UINT8   green_pos;
-  UINT8   blue_size;
-  UINT8   blue_pos;
-  UINT8   rsvd_size;
-  UINT8   rsvd_pos;
-} LINUX_ATAG_VIDEOLFB;
-
-typedef struct {
-  CHAR8   cmdline[1];
-} LINUX_ATAG_CMDLINE;
-
-typedef struct {
-  LINUX_ATAG_HEADER header;
-  union {
-    LINUX_ATAG_CORE         core_tag;
-    LINUX_ATAG_MEM          mem_tag;
-    LINUX_ATAG_VIDEOTEXT    videotext_tag;
-    LINUX_ATAG_RAMDISK      ramdisk_tag;
-    LINUX_ATAG_INITRD2      initrd2_tag;
-    LINUX_ATAG_SERIALNR     serialnr_tag;
-    LINUX_ATAG_REVISION     revision_tag;
-    LINUX_ATAG_VIDEOLFB     videolfb_tag;
-    LINUX_ATAG_CMDLINE      cmdline_tag;
-  } body;
-} LINUX_ATAG;
-
-typedef VOID (*LINUX_KERNEL)(UINT32 Zero, UINT32 Arch, UINTN ParametersBase);
-
-#define next_tag_address(t)     ((LINUX_ATAG*)((UINT32)(t) + (((t)->header.size) << 2) ))
-#define tag_size(type)          ((UINT32)((sizeof(LINUX_ATAG_HEADER) + sizeof(type)) >> 2))
-
-#endif
+/** @file\r
+*\r
+*  Copyright (c) 2011-2012, 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
+*  which accompanies this distribution.  The full text of the license may be found at        \r
+*  http://opensource.org/licenses/bsd-license.php                                            \r
+*\r
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+*\r
+**/\r
+\r
+#ifndef __BDSLINUXLOADER_H\r
+#define __BDSLINUXLOADER_H\r
+\r
+#define LINUX_UIMAGE_SIGNATURE    0x56190527\r
+#define LINUX_KERNEL_MAX_OFFSET   (PcdGet32(PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxKernelMaxOffset))\r
+#define LINUX_ATAG_MAX_OFFSET     (PcdGet32(PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxAtagMaxOffset))\r
+#define LINUX_FDT_MAX_OFFSET      (PcdGet32(PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxFdtMaxOffset))\r
+\r
+// Additional size that could be used for FDT entries added by the UEFI OS Loader\r
+// Estimation based on: EDID (300bytes) + bootargs (200bytes) + initrd region (20bytes)\r
+//                      + system memory region (20bytes) + mp_core entries (200 bytes)\r
+#define FDT_ADDITIONAL_ENTRIES_SIZE     0x300\r
+\r
+#define ARM_FDT_MACHINE_TYPE            0xFFFFFFFF\r
+\r
+typedef VOID (*LINUX_KERNEL)(UINT32 Zero, UINT32 Arch, UINTN ParametersBase);\r
+\r
+//\r
+// ATAG Definitions\r
+//\r
+\r
+#define ATAG_MAX_SIZE        0x3000\r
+\r
+/* ATAG : list of possible tags */\r
+#define ATAG_NONE            0x00000000\r
+#define ATAG_CORE            0x54410001\r
+#define ATAG_MEM             0x54410002\r
+#define ATAG_VIDEOTEXT       0x54410003\r
+#define ATAG_RAMDISK         0x54410004\r
+#define ATAG_INITRD2         0x54420005\r
+#define ATAG_SERIAL          0x54410006\r
+#define ATAG_REVISION        0x54410007\r
+#define ATAG_VIDEOLFB        0x54410008\r
+#define ATAG_CMDLINE         0x54410009\r
+#define ATAG_ARM_MP_CORE     0x5441000A\r
+\r
+#define next_tag_address(t)  ((LINUX_ATAG*)((UINT32)(t) + (((t)->header.size) << 2) ))\r
+#define tag_size(type)       ((UINT32)((sizeof(LINUX_ATAG_HEADER) + sizeof(type)) >> 2))\r
+\r
+typedef struct {\r
+  UINT32  size; /* length of tag in words including this header */\r
+  UINT32  type;  /* tag type */\r
+} LINUX_ATAG_HEADER;\r
+\r
+typedef struct {\r
+  UINT32  flags;\r
+  UINT32  pagesize;\r
+  UINT32  rootdev;\r
+} LINUX_ATAG_CORE;\r
+\r
+typedef struct {\r
+  UINT32  size;\r
+  UINTN  start;\r
+} LINUX_ATAG_MEM;\r
+\r
+typedef struct {\r
+  UINT8   x;\r
+  UINT8   y;\r
+  UINT16  video_page;\r
+  UINT8   video_mode;\r
+  UINT8   video_cols;\r
+  UINT16  video_ega_bx;\r
+  UINT8   video_lines;\r
+  UINT8   video_isvga;\r
+  UINT16  video_points;\r
+} LINUX_ATAG_VIDEOTEXT;\r
+\r
+typedef struct {\r
+  UINT32  flags;\r
+  UINT32  size;\r
+  UINTN  start;\r
+} LINUX_ATAG_RAMDISK;\r
+\r
+typedef struct {\r
+  UINT32  start;\r
+  UINT32  size;\r
+} LINUX_ATAG_INITRD2;\r
+\r
+typedef struct {\r
+  UINT32  low;\r
+  UINT32  high;\r
+} LINUX_ATAG_SERIALNR;\r
+\r
+typedef struct {\r
+  UINT32  rev;\r
+} LINUX_ATAG_REVISION;\r
+\r
+typedef struct {\r
+  UINT16  lfb_width;\r
+  UINT16  lfb_height;\r
+  UINT16  lfb_depth;\r
+  UINT16  lfb_linelength;\r
+  UINT32  lfb_base;\r
+  UINT32  lfb_size;\r
+  UINT8   red_size;\r
+  UINT8   red_pos;\r
+  UINT8   green_size;\r
+  UINT8   green_pos;\r
+  UINT8   blue_size;\r
+  UINT8   blue_pos;\r
+  UINT8   rsvd_size;\r
+  UINT8   rsvd_pos;\r
+} LINUX_ATAG_VIDEOLFB;\r
+\r
+typedef struct {\r
+  CHAR8   cmdline[1];\r
+} LINUX_ATAG_CMDLINE;\r
+\r
+typedef struct {\r
+  LINUX_ATAG_HEADER header;\r
+  union {\r
+    LINUX_ATAG_CORE         core_tag;\r
+    LINUX_ATAG_MEM          mem_tag;\r
+    LINUX_ATAG_VIDEOTEXT    videotext_tag;\r
+    LINUX_ATAG_RAMDISK      ramdisk_tag;\r
+    LINUX_ATAG_INITRD2      initrd2_tag;\r
+    LINUX_ATAG_SERIALNR     serialnr_tag;\r
+    LINUX_ATAG_REVISION     revision_tag;\r
+    LINUX_ATAG_VIDEOLFB     videolfb_tag;\r
+    LINUX_ATAG_CMDLINE      cmdline_tag;\r
+  } body;\r
+} LINUX_ATAG;\r
+\r
+EFI_STATUS\r
+PrepareAtagList (\r
+  IN  CONST CHAR8*          CommandLineString,\r
+  IN  EFI_PHYSICAL_ADDRESS  InitrdImage,\r
+  IN  UINTN                 InitrdImageSize,\r
+  OUT EFI_PHYSICAL_ADDRESS  *AtagBase,\r
+  OUT UINT32                *AtagSize\r
+  );\r
+\r
+EFI_STATUS\r
+PrepareFdt (\r
+  IN     CONST CHAR8*         CommandLineArguments,\r
+  IN     EFI_PHYSICAL_ADDRESS InitrdImage,\r
+  IN     UINTN                InitrdImageSize,\r
+  IN OUT EFI_PHYSICAL_ADDRESS *FdtBlobBase,\r
+  IN OUT UINT32               *FdtBlobSize\r
+  );\r
+\r
+#endif\r