ReactOS  0.4.14-dev-376-gaedba84
envir.c
Go to the documentation of this file.
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 
19 
20 VOID
21 NTAPI
23 {
24  PATAG Atag;
25 
26  /* Parse the ATAGs */
27  Atag = Arguments;
28  while (Atag->Hdr.Size)
29  {
30  /* Check tag type */
31  switch (Atag->Hdr.Tag)
32  {
33  case ATAG_CORE:
34 
35  /* Save page size */
37  break;
38 
39  case ATAG_REVISION:
40 
41  /* Save page size */
43  break;
44 
45  case ATAG_MEM:
46 
47  /* Save RAM start and size */
49  LlbEnvHwMemSize += Atag->u.Mem.Size;
50  break;
51 
52  case ATAG_INITRD2:
53 
54  /* Save RAMDISK start and size */
57 
58 #ifdef _BEAGLE_
59  /* Make sure it's 16MB-aligned */
60  LlbEnvRamDiskSize = (LlbEnvRamDiskSize + (16 * 1024 * 1024) - 1)
61  &~ ((16 * 1024 * 1024) - 1);
62 
63  /* The RAMDISK actually starts 16MB later */
64  LlbEnvRamDiskStart += 16 * 1024 * 1024;
65  LlbEnvRamDiskSize -= 16 * 1024 * 1024;
66 #endif
67  break;
68 
69  case ATAG_CMDLINE:
70 
71  /* Save command line */
73  Atag->u.CmdLine.CmdLine,
74  Atag->Hdr.Size * sizeof(ULONG));
75  break;
76 
77  /* Nothing left to handle */
78  case ATAG_NONE:
79  default:
80  break;
81  }
82 
83  /* Next tag */
84  Atag = (PATAG)((PULONG)Atag + Atag->Hdr.Size);
85  }
86 
87  /* For debugging */
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);
93 }
94 
95 VOID
96 NTAPI
98  IN PULONG Size)
99 {
100  /* Return RAM information */
103 }
104 
105 BOOLEAN
106 NTAPI
108  IN PULONG Size)
109 {
110  /* Do we have a ramdisk? */
111  if (LlbEnvRamDiskSize == 0)
112  {
113  /* No */
114  *Base = 0;
115  *Size = 0;
116  return FALSE;
117  }
118 
119  /* Return ramdisk information */
122  return TRUE;
123 }
124 
125 PCHAR
126 NTAPI
128 {
129  PCHAR ValuePointer;
130  ULONG Length = 0;
131 
132  /* Search for the value name */
133  ValuePointer = strstr(LlbEnvCmdLine, ValueName);
134  if (ValuePointer)
135  {
136  /* Get the value data and its length */
137  ValuePointer += strlen(ValueName) + 1;
138  if (strchr(ValuePointer, ','))
139  {
140  /* Stop before next parameter */
141  Length = strchr(ValuePointer, ',') - ValuePointer;
142  }
143  else
144  {
145  /* Stop before the string ends */
146  Length = strlen(ValuePointer);
147  }
148 
149  /* Copy it */
150  strncpy(LlbValueData, ValuePointer, Length);
151  }
152 
153  /* Terminate the data */
155 
156  /* Return the data */
157  return LlbValueData;
158 }
159 
160 /* EOF */
161 
signed char * PCHAR
Definition: retypes.h:7
VOID NTAPI LlbEnvParseArguments(IN PATAG Arguments)
Definition: envir.c:22
#define IN
Definition: typedefs.h:38
#define TRUE
Definition: types.h:120
ULONG LlbEnvHwRevision
Definition: envir.c:16
#define DbgPrint
Definition: loader.c:25
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
#define ATAG_NONE
Definition: envir.h:57
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
char CHAR
Definition: xmlstorage.h:175
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2343
union _ATAG::@97 u
ULONG Tag
Definition: envir.h:12
ATAG_CORE Core
Definition: envir.h:49
ULONG LlbEnvRamDiskStart
Definition: envir.c:14
struct _ATAG_CMDLINE ATAG_CMDLINE
CHAR CmdLine[ANYSIZE_ARRAY]
Definition: envir.h:41
struct _ATAG_MEM ATAG_MEM
_In_ PUNICODE_STRING ValueName
Definition: cmfuncs.h:264
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define ANSI_NULL
ULONG Size
Definition: envir.h:36
unsigned char BOOLEAN
ULONG LlbEnvRamDiskSize
Definition: envir.c:15
PCHAR NTAPI LlbEnvRead(IN PCHAR ValueName)
Definition: envir.c:127
ULONG Size
Definition: envir.h:24
struct _ATAG * PATAG
ULONG LlbEnvHwPageSize
Definition: envir.c:11
struct _ATAG_CORE ATAG_CORE
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
CHAR LlbValueData[32]
Definition: envir.c:18
ULONG Start
Definition: envir.h:35
ULONG Size
Definition: envir.h:11
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:359
ULONG Rev
Definition: envir.h:30
struct _ATAG_REVISION ATAG_REVISION
CHAR LlbEnvCmdLine[256]
Definition: envir.c:17
BOOLEAN NTAPI LlbEnvGetRamDiskInformation(IN PULONG Base, IN PULONG Size)
Definition: envir.c:107
ATAG_INITRD2 InitRd2
Definition: envir.h:52
ULONG PageSize
Definition: envir.h:18
ATAG_MEM Mem
Definition: envir.h:50
unsigned int * PULONG
Definition: retypes.h:1
struct _ATAG_INITRD2 ATAG_INITRD2
char * strchr(const char *String, int ch)
Definition: utclib.c:501
ULONG LlbEnvHwMemSize
Definition: envir.c:13
ATAG_CMDLINE CmdLine
Definition: envir.h:53
unsigned int ULONG
Definition: retypes.h:1
Definition: envir.h:44
ULONG Start
Definition: envir.h:25
ATAG_REVISION Revision
Definition: envir.h:51
VOID NTAPI LlbEnvGetMemoryInformation(IN PULONG Base, IN PULONG Size)
Definition: envir.c:97
ATAG_HEADER Hdr
Definition: envir.h:46
ULONG LlbEnvHwMemStart
Definition: envir.c:12