summaryrefslogtreecommitdiff
path: root/ArmPkg/Library/BdsLib/BdsLinuxLoader.h
diff options
context:
space:
mode:
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-11 11:56:30 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-11 11:56:30 +0000
commita355a3654f0af22db9f68d988dbb4c72b835f414 (patch)
treeed34e67320d2f483270a79887138ea02a196c474 /ArmPkg/Library/BdsLib/BdsLinuxLoader.h
parente6b3b50834110bc796a3706d6de80de113f439d2 (diff)
downloadedk2-platforms-a355a3654f0af22db9f68d988dbb4c72b835f414.tar.xz
ArmPkg/BdsLib: Upgrade the library to use natively the Device Path
The previous version was using the string representation of the Device Path. This new version takes as paramater the binary representation of the Device Path It also tries to detect which kind of device support it refers by using the remaining part of the Device Path after it has been loaded by gBS->ConnectController() Lots of bug have been fixed as well in this new version. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11799 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Library/BdsLib/BdsLinuxLoader.h')
-rw-r--r--ArmPkg/Library/BdsLib/BdsLinuxLoader.h114
1 files changed, 36 insertions, 78 deletions
diff --git a/ArmPkg/Library/BdsLib/BdsLinuxLoader.h b/ArmPkg/Library/BdsLib/BdsLinuxLoader.h
index 2869f652f8..82b7a4f081 100644
--- a/ArmPkg/Library/BdsLib/BdsLinuxLoader.h
+++ b/ArmPkg/Library/BdsLib/BdsLinuxLoader.h
@@ -15,8 +15,7 @@
#ifndef __BDSLINUXLOADER_H
#define __BDSLINUXLOADER_H
-#define ATAG_MAX_SIZE 0x4000
-//PcdKernelParamsMaxMemorySize
+#define ATAG_MAX_SIZE 0x3000
/* ATAG : list of possible tags */
#define ATAG_NONE 0x00000000
@@ -31,64 +30,24 @@
#define ATAG_CMDLINE 0x54410009
#define ATAG_ARM_MP_CORE 0x5441000A
-// Some system addresses
-// These should probably come from the platform header file or from pcd values
-#define DRAM_BASE 0x10000000
-#define ZIMAGE_LOAD_ADDRESS (DRAM_BASE + 0x8000)
-#define INITRD_LOAD_ADDRESS (DRAM_BASE + 0x800000)
-
-#define SIZE_1B 0x00000001
-#define SIZE_2B 0x00000002
-#define SIZE_4B 0x00000004
-#define SIZE_8B 0x00000008
-#define SIZE_16B 0x00000010
-#define SIZE_32B 0x00000020
-#define SIZE_64B 0x00000040
-#define SIZE_128B 0x00000080
-#define SIZE_256B 0x00000100
-#define SIZE_512B 0x00000200
-#define SIZE_1KB 0x00000400
-#define SIZE_2KB 0x00000800
-#define SIZE_4KB 0x00001000
-#define SIZE_8KB 0x00002000
-#define SIZE_16KB 0x00004000
-#define SIZE_32KB 0x00008000
-#define SIZE_64KB 0x00010000
-#define SIZE_128KB 0x00020000
-#define SIZE_256KB 0x00040000
-#define SIZE_512KB 0x00080000
-#define SIZE_1MB 0x00100000
-#define SIZE_2MB 0x00200000
-#define SIZE_4MB 0x00400000
-#define SIZE_8MB 0x00800000
-#define SIZE_16MB 0x01000000
-#define SIZE_32MB 0x02000000
-#define SIZE_64MB 0x04000000
-#define SIZE_100MB 0x06400000
-#define SIZE_128MB 0x08000000
-#define SIZE_256MB 0x10000000
-#define SIZE_512MB 0x20000000
-#define SIZE_1GB 0x40000000
-#define SIZE_2GB 0x80000000
-
/* structures for each atag */
-struct atag_header {
+typedef struct {
UINT32 size; /* length of tag in words including this header */
UINT32 type; /* tag type */
-};
+} LINUX_ATAG_HEADER;
-struct atag_core {
+typedef struct {
UINT32 flags;
UINT32 pagesize;
UINT32 rootdev;
-};
+} LINUX_ATAG_CORE;
-struct atag_mem {
+typedef struct {
UINT32 size;
UINTN start;
-};
+} LINUX_ATAG_MEM;
-struct atag_videotext {
+typedef struct {
UINT8 x;
UINT8 y;
UINT16 video_page;
@@ -98,29 +57,29 @@ struct atag_videotext {
UINT8 video_lines;
UINT8 video_isvga;
UINT16 video_points;
-};
+} LINUX_ATAG_VIDEOTEXT;
-struct atag_ramdisk {
+typedef struct {
UINT32 flags;
UINT32 size;
UINTN start;
-};
+} LINUX_ATAG_RAMDISK;
-struct atag_initrd2 {
+typedef struct {
UINT32 start;
UINT32 size;
-};
+} LINUX_ATAG_INITRD2;
-struct atag_serialnr {
+typedef struct {
UINT32 low;
UINT32 high;
-};
+} LINUX_ATAG_SERIALNR;
-struct atag_revision {
+typedef struct {
UINT32 rev;
-};
+} LINUX_ATAG_REVISION;
-struct atag_videolfb {
+typedef struct {
UINT16 lfb_width;
UINT16 lfb_height;
UINT16 lfb_depth;
@@ -135,31 +94,30 @@ struct atag_videolfb {
UINT8 blue_pos;
UINT8 rsvd_size;
UINT8 rsvd_pos;
-};
+} LINUX_ATAG_VIDEOLFB;
-struct atag_cmdline {
+typedef struct {
CHAR8 cmdline[1];
-};
+} LINUX_ATAG_CMDLINE;
-struct atag {
- struct atag_header header;
+typedef struct {
+ LINUX_ATAG_HEADER header;
union {
- struct atag_core core_tag;
- struct atag_mem mem_tag;
- struct atag_videotext videotext_tag;
- struct atag_ramdisk ramdisk_tag;
- struct atag_initrd2 initrd2_tag;
- struct atag_serialnr serialnr_tag;
- struct atag_revision revision_tag;
- struct atag_videolfb videolfb_tag;
- struct atag_cmdline cmdline_tag;
+ 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;
-#define next_tag_address(t) ((struct atag *)((UINT32)(t) + (((t)->header.size) << 2) ))
-#define tag_size(type) ((UINT32)((sizeof(struct atag_header) + sizeof(struct type)) >> 2))
+typedef VOID (*LINUX_KERNEL)(UINT32 Zero, UINT32 Arch, UINTN ParametersBase);
-STATIC struct atag *Params; /* used to point at the current tag */
+#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
-