- Fix text output
[reactos.git] / reactos / boot / armllb / envir.c
1 /*
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
7 */
8
9 #include "precomp.h"
10
11 ULONG LlbEnvHwPageSize;
12 ULONG LlbEnvHwMemStart;
13 ULONG LlbEnvHwMemSize;
14 ULONG LlbEnvRamDiskStart;
15 ULONG LlbEnvRamDiskSize;
16 CHAR LlbEnvCmdLine[256];
17 CHAR LlbValueData[32];
18
19 VOID
20 NTAPI
21 LlbEnvParseArguments(IN PATAG Arguments)
22 {
23 PATAG Atag;
24
25 /* Parse the ATAGs */
26 Atag = Arguments;
27 while (Atag->Hdr.Size)
28 {
29 /* Check tag type */
30 switch (Atag->Hdr.Tag)
31 {
32 case ATAG_CORE:
33
34 /* Save page size */
35 LlbEnvHwPageSize = Atag->u.Core.PageSize;
36 break;
37
38 case ATAG_MEM:
39
40 /* Save RAM start and size */
41 LlbEnvHwMemStart = Atag->u.Mem.Start;
42 LlbEnvHwMemSize = Atag->u.Mem.Size;
43 break;
44
45 case ATAG_INITRD2:
46
47 /* Save RAMDISK start and size */
48 LlbEnvRamDiskStart = Atag->u.InitRd2.Start;
49 LlbEnvRamDiskSize = Atag->u.InitRd2.Size;
50 break;
51
52 case ATAG_CMDLINE:
53
54 /* Save command line */
55 strncpy(LlbEnvCmdLine,
56 Atag->u.CmdLine.CmdLine,
57 Atag->Hdr.Size * sizeof(ULONG));
58 break;
59
60 /* Nothing left to handle */
61 case ATAG_NONE:
62 default:
63 return;
64 }
65
66 /* Next tag */
67 Atag = (PATAG)((PULONG)Atag + Atag->Hdr.Size);
68 }
69
70 /* For debugging */
71 DbgPrint("[BOOTROM] PageSize: %dKB RAM: %dMB CMDLINE: %s\n",
72 LlbEnvHwPageSize / 1024, LlbEnvHwMemSize / 1024 / 1024, LlbEnvCmdLine);
73 }
74
75 VOID
76 NTAPI
77 LlbEnvGetMemoryInformation(IN PULONG Base,
78 IN PULONG Size)
79 {
80 /* Return RAM information */
81 *Base = LlbEnvHwMemStart;
82 *Size = LlbEnvHwMemSize;
83 }
84
85 BOOLEAN
86 NTAPI
87 LlbEnvGetRamDiskInformation(IN PULONG Base,
88 IN PULONG Size)
89 {
90 /* Do we have a ramdisk? */
91 if (LlbEnvRamDiskSize == 0)
92 {
93 /* No */
94 *Base = 0;
95 *Size = 0;
96 return FALSE;
97 }
98
99 /* Return ramdisk information */
100 *Base = LlbEnvRamDiskStart;
101 *Size = LlbEnvRamDiskSize;
102 return TRUE;
103 }
104
105 PCHAR
106 NTAPI
107 LlbEnvRead(IN PCHAR ValueName)
108 {
109 PCHAR ValuePointer;
110 ULONG Length = 0;
111
112 /* Search for the value name */
113 ValuePointer = strstr(LlbEnvCmdLine, ValueName);
114 if (ValuePointer)
115 {
116 /* Get the value data and its length */
117 ValuePointer += strlen(ValueName) + 1;
118 if (strchr(ValuePointer, ','))
119 {
120 /* Stop before next parameter */
121 Length = strchr(ValuePointer, ',') - ValuePointer;
122 }
123 else
124 {
125 /* Stop before the string ends */
126 Length = strlen(ValuePointer);
127 }
128
129 /* Copy it */
130 strncpy(LlbValueData, ValuePointer, Length);
131 }
132
133 /* Terminate the data */
134 LlbValueData[Length] = ANSI_NULL;
135
136 /* Return the data */
137 return LlbValueData;
138 }
139
140 /* EOF */
141