ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

envir.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:         ReactOS Boot Loader
00003  * LICENSE:         BSD - See COPYING.ARM in the top level directory
00004  * FILE:            boot/armllb/envir.c
00005  * PURPOSE:         LLB Environment Variable Routines
00006  * PROGRAMMERS:     ReactOS Portable Systems Group
00007  */
00008 
00009 #include "precomp.h"
00010 
00011 ULONG LlbEnvHwPageSize;
00012 ULONG LlbEnvHwMemStart = 0;
00013 ULONG LlbEnvHwMemSize = 0;
00014 ULONG LlbEnvRamDiskStart = 0;
00015 ULONG LlbEnvRamDiskSize = 0;
00016 ULONG LlbEnvHwRevision;
00017 CHAR LlbEnvCmdLine[256];
00018 CHAR LlbValueData[32];
00019     
00020 VOID
00021 NTAPI
00022 LlbEnvParseArguments(IN PATAG Arguments)
00023 {
00024     PATAG Atag;
00025     
00026     /* Parse the ATAGs */
00027     Atag = Arguments;
00028     while (Atag->Hdr.Size)
00029     {
00030         /* Check tag type */
00031         switch (Atag->Hdr.Tag)
00032         {
00033             case ATAG_CORE:
00034             
00035                 /* Save page size */
00036                 LlbEnvHwPageSize = Atag->u.Core.PageSize;
00037                 break;
00038                 
00039             case ATAG_REVISION:
00040 
00041                 /* Save page size */
00042                 LlbEnvHwRevision = Atag->u.Revision.Rev;
00043                 break;
00044                 
00045             case ATAG_MEM:
00046             
00047                 /* Save RAM start and size */
00048                 if (!LlbEnvHwMemStart) LlbEnvHwMemStart = Atag->u.Mem.Start;
00049                 LlbEnvHwMemSize += Atag->u.Mem.Size;
00050                 break;
00051                 
00052             case ATAG_INITRD2:
00053             
00054                 /* Save RAMDISK start and size */
00055                 LlbEnvRamDiskStart = Atag->u.InitRd2.Start;
00056                 LlbEnvRamDiskSize = Atag->u.InitRd2.Size;
00057                 
00058 #ifdef _BEAGLE_
00059                 /* Make sure it's 16MB-aligned */
00060                 LlbEnvRamDiskSize = (LlbEnvRamDiskSize + (16 * 1024 * 1024) - 1) 
00061                                     &~ ((16 * 1024 * 1024) - 1);
00062                 
00063                 /* The RAMDISK actually starts 16MB later */
00064                 LlbEnvRamDiskStart += 16 * 1024 * 1024;
00065                 LlbEnvRamDiskSize  -= 16 * 1024 * 1024;
00066 #endif
00067                 break;
00068                 
00069             case ATAG_CMDLINE:
00070             
00071                 /* Save command line */
00072                 strncpy(LlbEnvCmdLine,
00073                         Atag->u.CmdLine.CmdLine,
00074                         Atag->Hdr.Size * sizeof(ULONG));
00075                 break;
00076                 
00077             /* Nothing left to handle */
00078             case ATAG_NONE:
00079             default:
00080                 break;
00081         }
00082         
00083         /* Next tag */
00084         Atag = (PATAG)((PULONG)Atag + Atag->Hdr.Size);
00085     }
00086     
00087     /* For debugging */
00088     DbgPrint("[BOOTROM] Board Revision: %lx PageSize: %dKB RAM: %dMB CMDLINE: %s\n"
00089              "[RAMDISK] Base: %lx Size: %dMB\n",
00090              LlbEnvHwRevision,
00091              LlbEnvHwPageSize / 1024, LlbEnvHwMemSize / 1024 / 1024, LlbEnvCmdLine,
00092              LlbEnvRamDiskStart, LlbEnvRamDiskSize / 1024 / 1024);
00093 }
00094 
00095 VOID
00096 NTAPI
00097 LlbEnvGetMemoryInformation(IN PULONG Base,
00098                            IN PULONG Size)
00099 {
00100     /* Return RAM information */
00101     *Base = LlbEnvHwMemStart;
00102     *Size = LlbEnvHwMemSize;
00103 }
00104 
00105 BOOLEAN
00106 NTAPI
00107 LlbEnvGetRamDiskInformation(IN PULONG Base,
00108                             IN PULONG Size)
00109 {
00110     /* Do we have a ramdisk? */
00111     if (LlbEnvRamDiskSize == 0)
00112     {
00113         /* No */
00114         *Base = 0;
00115         *Size = 0;
00116         return FALSE;
00117     }
00118     
00119     /* Return ramdisk information */
00120     *Base = LlbEnvRamDiskStart;
00121     *Size = LlbEnvRamDiskSize;
00122     return TRUE;
00123 }
00124 
00125 PCHAR
00126 NTAPI
00127 LlbEnvRead(IN PCHAR ValueName)
00128 {
00129     PCHAR ValuePointer;
00130     ULONG Length = 0;
00131     
00132     /* Search for the value name */
00133     ValuePointer = strstr(LlbEnvCmdLine, ValueName);
00134     if (ValuePointer)
00135     {
00136         /* Get the value data and its length */
00137         ValuePointer += strlen(ValueName) + 1;
00138         if (strchr(ValuePointer, ','))
00139         {
00140             /* Stop before next parameter */
00141             Length = strchr(ValuePointer, ',') - ValuePointer;
00142         }
00143         else
00144         {
00145             /* Stop before the string ends */
00146             Length = strlen(ValuePointer);
00147         }
00148         
00149         /* Copy it */
00150         strncpy(LlbValueData, ValuePointer, Length);
00151     }
00152     
00153     /* Terminate the data */
00154     LlbValueData[Length] = ANSI_NULL;
00155 
00156     /* Return the data */
00157     return LlbValueData;
00158 }
00159 
00160 /* EOF */
00161 

Generated on Sat May 26 2012 04:17:46 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.