2 * PROJECT: ReactOS Boot Loader
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: boot/armllb/envir.c
5 * PURPOSE: LLB Environment Variable Routines
6 * PROGRAMMERS: ReactOS Portable Systems Group
11 ULONG LlbEnvHwPageSize
;
12 ULONG LlbEnvHwMemStart
= 0;
13 ULONG LlbEnvHwMemSize
= 0;
14 ULONG LlbEnvRamDiskStart
= 0;
15 ULONG LlbEnvRamDiskSize
= 0;
16 ULONG LlbEnvHwRevision
;
17 CHAR LlbEnvCmdLine
[256];
18 CHAR LlbValueData
[32];
22 LlbEnvParseArguments(IN PATAG Arguments
)
28 while (Atag
->Hdr
.Size
)
31 switch (Atag
->Hdr
.Tag
)
36 LlbEnvHwPageSize
= Atag
->u
.Core
.PageSize
;
42 LlbEnvHwRevision
= Atag
->u
.Revision
.Rev
;
47 /* Save RAM start and size */
48 if (!LlbEnvHwMemStart
) LlbEnvHwMemStart
= Atag
->u
.Mem
.Start
;
49 LlbEnvHwMemSize
+= Atag
->u
.Mem
.Size
;
54 /* Save RAMDISK start and size */
55 LlbEnvRamDiskStart
= Atag
->u
.InitRd2
.Start
;
56 LlbEnvRamDiskSize
= Atag
->u
.InitRd2
.Size
;
59 /* Make sure it's 16MB-aligned */
60 LlbEnvRamDiskSize
= (LlbEnvRamDiskSize
+ (16 * 1024 * 1024) - 1)
61 &~ ((16 * 1024 * 1024) - 1);
63 /* The RAMDISK actually starts 16MB later */
64 LlbEnvRamDiskStart
+= 16 * 1024 * 1024;
65 LlbEnvRamDiskSize
-= 16 * 1024 * 1024;
71 /* Save command line */
72 strncpy(LlbEnvCmdLine
,
73 Atag
->u
.CmdLine
.CmdLine
,
74 Atag
->Hdr
.Size
* sizeof(ULONG
));
77 /* Nothing left to handle */
84 Atag
= (PATAG
)((PULONG
)Atag
+ Atag
->Hdr
.Size
);
88 DbgPrint("[BOOTROM] Board Revision: %lx PageSize: %dKB RAM: %dMB CMDLINE: %s\n"
89 "[RAMDISK] Base: %lx Size: %dMB\n",
91 LlbEnvHwPageSize
/ 1024, LlbEnvHwMemSize
/ 1024 / 1024, LlbEnvCmdLine
,
92 LlbEnvRamDiskStart
, LlbEnvRamDiskSize
/ 1024 / 1024);
97 LlbEnvGetMemoryInformation(IN PULONG Base
,
100 /* Return RAM information */
101 *Base
= LlbEnvHwMemStart
;
102 *Size
= LlbEnvHwMemSize
;
107 LlbEnvGetRamDiskInformation(IN PULONG Base
,
110 /* Do we have a ramdisk? */
111 if (LlbEnvRamDiskSize
== 0)
119 /* Return ramdisk information */
120 *Base
= LlbEnvRamDiskStart
;
121 *Size
= LlbEnvRamDiskSize
;
127 LlbEnvRead(IN PCHAR ValueName
)
132 /* Search for the value name */
133 ValuePointer
= strstr(LlbEnvCmdLine
, ValueName
);
136 /* Get the value data and its length */
137 ValuePointer
+= strlen(ValueName
) + 1;
138 if (strchr(ValuePointer
, ','))
140 /* Stop before next parameter */
141 Length
= strchr(ValuePointer
, ',') - ValuePointer
;
145 /* Stop before the string ends */
146 Length
= strlen(ValuePointer
);
150 strncpy(LlbValueData
, ValuePointer
, Length
);
153 /* Terminate the data */
154 LlbValueData
[Length
] = ANSI_NULL
;
156 /* Return the data */