]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/BdsLib/BdsLinuxLoader.h
ArmPkg/ArmPkg.dec: Redefined PcdSystemMemory(Base|Size) as UINT64
[mirror_edk2.git] / ArmPkg / Library / BdsLib / BdsLinuxLoader.h
CommitLineData
1e57a462 1/** @file\r
2*\r
c357fd6a 3* Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
1e57a462 4* \r
5* This program and the accompanying materials \r
6* are licensed and made available under the terms and conditions of the BSD License \r
7* which accompanies this distribution. The full text of the license may be found at \r
8* http://opensource.org/licenses/bsd-license.php \r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12*\r
13**/\r
14\r
15#ifndef __BDSLINUXLOADER_H\r
16#define __BDSLINUXLOADER_H\r
17\r
18#define LINUX_UIMAGE_SIGNATURE 0x56190527\r
c357fd6a
OM
19#define LINUX_KERNEL_MAX_OFFSET (PcdGet64 (PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxKernelMaxOffset))\r
20#define LINUX_ATAG_MAX_OFFSET (PcdGet64 (PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxAtagMaxOffset))\r
21#define LINUX_FDT_MAX_OFFSET (PcdGet64 (PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxFdtMaxOffset))\r
1e57a462 22\r
23// Additional size that could be used for FDT entries added by the UEFI OS Loader\r
24// Estimation based on: EDID (300bytes) + bootargs (200bytes) + initrd region (20bytes)\r
25// + system memory region (20bytes) + mp_core entries (200 bytes)\r
26#define FDT_ADDITIONAL_ENTRIES_SIZE 0x300\r
27\r
28#define ARM_FDT_MACHINE_TYPE 0xFFFFFFFF\r
29\r
30typedef VOID (*LINUX_KERNEL)(UINT32 Zero, UINT32 Arch, UINTN ParametersBase);\r
31\r
32//\r
33// ATAG Definitions\r
34//\r
35\r
36#define ATAG_MAX_SIZE 0x3000\r
37\r
38/* ATAG : list of possible tags */\r
39#define ATAG_NONE 0x00000000\r
40#define ATAG_CORE 0x54410001\r
41#define ATAG_MEM 0x54410002\r
42#define ATAG_VIDEOTEXT 0x54410003\r
43#define ATAG_RAMDISK 0x54410004\r
44#define ATAG_INITRD2 0x54420005\r
45#define ATAG_SERIAL 0x54410006\r
46#define ATAG_REVISION 0x54410007\r
47#define ATAG_VIDEOLFB 0x54410008\r
48#define ATAG_CMDLINE 0x54410009\r
49#define ATAG_ARM_MP_CORE 0x5441000A\r
50\r
51#define next_tag_address(t) ((LINUX_ATAG*)((UINT32)(t) + (((t)->header.size) << 2) ))\r
52#define tag_size(type) ((UINT32)((sizeof(LINUX_ATAG_HEADER) + sizeof(type)) >> 2))\r
53\r
54typedef struct {\r
55 UINT32 size; /* length of tag in words including this header */\r
56 UINT32 type; /* tag type */\r
57} LINUX_ATAG_HEADER;\r
58\r
59typedef struct {\r
60 UINT32 flags;\r
61 UINT32 pagesize;\r
62 UINT32 rootdev;\r
63} LINUX_ATAG_CORE;\r
64\r
65typedef struct {\r
66 UINT32 size;\r
67 UINTN start;\r
68} LINUX_ATAG_MEM;\r
69\r
70typedef struct {\r
71 UINT8 x;\r
72 UINT8 y;\r
73 UINT16 video_page;\r
74 UINT8 video_mode;\r
75 UINT8 video_cols;\r
76 UINT16 video_ega_bx;\r
77 UINT8 video_lines;\r
78 UINT8 video_isvga;\r
79 UINT16 video_points;\r
80} LINUX_ATAG_VIDEOTEXT;\r
81\r
82typedef struct {\r
83 UINT32 flags;\r
84 UINT32 size;\r
85 UINTN start;\r
86} LINUX_ATAG_RAMDISK;\r
87\r
88typedef struct {\r
89 UINT32 start;\r
90 UINT32 size;\r
91} LINUX_ATAG_INITRD2;\r
92\r
93typedef struct {\r
94 UINT32 low;\r
95 UINT32 high;\r
96} LINUX_ATAG_SERIALNR;\r
97\r
98typedef struct {\r
99 UINT32 rev;\r
100} LINUX_ATAG_REVISION;\r
101\r
102typedef struct {\r
103 UINT16 lfb_width;\r
104 UINT16 lfb_height;\r
105 UINT16 lfb_depth;\r
106 UINT16 lfb_linelength;\r
107 UINT32 lfb_base;\r
108 UINT32 lfb_size;\r
109 UINT8 red_size;\r
110 UINT8 red_pos;\r
111 UINT8 green_size;\r
112 UINT8 green_pos;\r
113 UINT8 blue_size;\r
114 UINT8 blue_pos;\r
115 UINT8 rsvd_size;\r
116 UINT8 rsvd_pos;\r
117} LINUX_ATAG_VIDEOLFB;\r
118\r
119typedef struct {\r
120 CHAR8 cmdline[1];\r
121} LINUX_ATAG_CMDLINE;\r
122\r
123typedef struct {\r
124 LINUX_ATAG_HEADER header;\r
125 union {\r
126 LINUX_ATAG_CORE core_tag;\r
127 LINUX_ATAG_MEM mem_tag;\r
128 LINUX_ATAG_VIDEOTEXT videotext_tag;\r
129 LINUX_ATAG_RAMDISK ramdisk_tag;\r
130 LINUX_ATAG_INITRD2 initrd2_tag;\r
131 LINUX_ATAG_SERIALNR serialnr_tag;\r
132 LINUX_ATAG_REVISION revision_tag;\r
133 LINUX_ATAG_VIDEOLFB videolfb_tag;\r
134 LINUX_ATAG_CMDLINE cmdline_tag;\r
135 } body;\r
136} LINUX_ATAG;\r
137\r
138EFI_STATUS\r
139PrepareAtagList (\r
140 IN CONST CHAR8* CommandLineString,\r
141 IN EFI_PHYSICAL_ADDRESS InitrdImage,\r
142 IN UINTN InitrdImageSize,\r
143 OUT EFI_PHYSICAL_ADDRESS *AtagBase,\r
144 OUT UINT32 *AtagSize\r
145 );\r
146\r
147EFI_STATUS\r
148PrepareFdt (\r
149 IN CONST CHAR8* CommandLineArguments,\r
150 IN EFI_PHYSICAL_ADDRESS InitrdImage,\r
151 IN UINTN InitrdImageSize,\r
152 IN OUT EFI_PHYSICAL_ADDRESS *FdtBlobBase,\r
c63626b7 153 IN OUT UINTN *FdtBlobSize\r
1e57a462 154 );\r
155\r
156#endif\r