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
;
13 ULONG LlbEnvHwMemSize
;
14 ULONG LlbEnvRamDiskStart
;
15 ULONG LlbEnvRamDiskSize
;
16 CHAR LlbEnvCmdLine
[256];
17 CHAR LlbValueData
[32];
21 LlbEnvParseArguments(IN PATAG Arguments
)
27 while (Atag
->Hdr
.Size
)
30 switch (Atag
->Hdr
.Tag
)
35 LlbEnvHwPageSize
= Atag
->u
.Core
.PageSize
;
40 /* Save RAM start and size */
41 LlbEnvHwMemStart
= Atag
->u
.Mem
.Start
;
42 LlbEnvHwMemSize
= Atag
->u
.Mem
.Size
;
47 /* Save RAMDISK start and size */
48 LlbEnvRamDiskStart
= Atag
->u
.InitRd2
.Start
;
49 LlbEnvRamDiskSize
= Atag
->u
.InitRd2
.Size
;
51 /* Make sure it's 16MB-aligned */
52 LlbEnvRamDiskSize
= (LlbEnvRamDiskSize
+ (16 * 1024 * 1024) - 1)
53 &~ ((16 * 1024 * 1024) - 1);
55 /* The RAMDISK actually starts 16MB later */
56 LlbEnvRamDiskStart
+= 16 * 1024 * 1024;
57 LlbEnvRamDiskSize
-= 16 * 1024 * 1024;
62 /* Save command line */
63 strncpy(LlbEnvCmdLine
,
64 Atag
->u
.CmdLine
.CmdLine
,
65 Atag
->Hdr
.Size
* sizeof(ULONG
));
68 /* Nothing left to handle */
75 Atag
= (PATAG
)((PULONG
)Atag
+ Atag
->Hdr
.Size
);
79 DbgPrint("[BOOTROM] PageSize: %dKB RAM: %dMB CMDLINE: %s\n",
80 LlbEnvHwPageSize
/ 1024, LlbEnvHwMemSize
/ 1024 / 1024, LlbEnvCmdLine
);
85 LlbEnvGetMemoryInformation(IN PULONG Base
,
88 /* Return RAM information */
89 *Base
= LlbEnvHwMemStart
;
90 *Size
= LlbEnvHwMemSize
;
95 LlbEnvGetRamDiskInformation(IN PULONG Base
,
98 /* Do we have a ramdisk? */
99 if (LlbEnvRamDiskSize
== 0)
107 /* Return ramdisk information */
108 *Base
= LlbEnvRamDiskStart
;
109 *Size
= LlbEnvRamDiskSize
;
115 LlbEnvRead(IN PCHAR ValueName
)
120 /* Search for the value name */
121 ValuePointer
= strstr(LlbEnvCmdLine
, ValueName
);
124 /* Get the value data and its length */
125 ValuePointer
+= strlen(ValueName
) + 1;
126 if (strchr(ValuePointer
, ','))
128 /* Stop before next parameter */
129 Length
= strchr(ValuePointer
, ',') - ValuePointer
;
133 /* Stop before the string ends */
134 Length
= strlen(ValuePointer
);
138 strncpy(LlbValueData
, ValuePointer
, Length
);
141 /* Terminate the data */
142 LlbValueData
[Length
] = ANSI_NULL
;
144 /* Return the data */