ReactOS 0.4.16-dev-329-g9223134
loader.c File Reference
#include "precomp.h"
Include dependency graph for loader.c:

Go to the source code of this file.

Functions

VOID NTAPI LlbAllocateMemoryEntry (IN BIOS_MEMORY_TYPE Type, IN ULONG BaseAddress, IN ULONG Length)
 
VOID NTAPI LlbSetCommandLine (IN PCHAR CommandLine)
 
VOID NTAPI LlbBuildArmBlock (VOID)
 
VOID NTAPI LlbBuildMemoryMap (VOID)
 
POSLOADER_INIT NTAPI LlbHwLoadOsLoaderFromRam (VOID)
 
VOID NTAPI LlbLoadOsLoader (VOID)
 
VOID NTAPI LlbBoot (VOID)
 

Variables

BIOS_MEMORY_MAP MemoryMap [32]
 
ARM_BOARD_CONFIGURATION_BLOCK ArmBlock
 
POSLOADER_INIT LoaderInit
 

Function Documentation

◆ LlbAllocateMemoryEntry()

VOID NTAPI LlbAllocateMemoryEntry ( IN BIOS_MEMORY_TYPE  Type,
IN ULONG  BaseAddress,
IN ULONG  Length 
)

Definition at line 17 of file loader.c.

20{
22
23 /* Get the next memory entry */
25 while (Entry->Length) Entry++;
26
27 /* Fill it out */
28 Entry->Length = Length;
29 Entry->BaseAddress = BaseAddress;
30 Entry->Type = Type;
31
32 /* Block count */
34}
Type
Definition: Type.h:7
BIOS_MEMORY_MAP MemoryMap[32]
Definition: loader.c:11
ARM_BOARD_CONFIGURATION_BLOCK ArmBlock
Definition: loader.c:12
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
base of all file and directory entries
Definition: entries.h:83

Referenced by LlbHwBuildMemoryMap().

◆ LlbBoot()

VOID NTAPI LlbBoot ( VOID  )

Definition at line 163 of file loader.c.

164{
165 /* Setup the ARM block */
167
168 /* Build the memory map */
170
171 /* Load the OS loader */
173
174 /* Jump to the OS Loader (FreeLDR in this case) */
176}
VOID NTAPI LlbBuildMemoryMap(VOID)
Definition: loader.c:85
POSLOADER_INIT LoaderInit
Definition: loader.c:13
VOID NTAPI LlbLoadOsLoader(VOID)
Definition: loader.c:128
VOID NTAPI LlbBuildArmBlock(VOID)
Definition: loader.c:46

Referenced by LlbStartup().

◆ LlbBuildArmBlock()

VOID NTAPI LlbBuildArmBlock ( VOID  )

Definition at line 46 of file loader.c.

47{
48 /* Write version number */
51
52 /* Get arch type */
54
55 /* Get peripheral clock rate */
57
58 /* Get timer and serial port base addresses */
61
62 /* Debug */
63 DbgPrint("Machine Identifier: %lx\nPCLK: %d\nTIMER 0: %p\nSERIAL UART: %p\n",
68
69 /* Now load the memory map */
71
72 /* Write firmware callbacks */
81}
ULONG LlbFwVideoSetDisplayMode(IN PCHAR DisplayModeName, IN BOOLEAN Init)
Definition: fw.c:60
VOID LlbFwPutChar(INT Ch)
Definition: fw.c:32
VOID LlbFwVideoClearScreen(IN UCHAR Attr)
Definition: fw.c:81
VOID LlbFwVideoGetDisplaySize(OUT PULONG Width, OUT PULONG Height, OUT PULONG Depth)
Definition: fw.c:68
BOOLEAN LlbFwKbHit(VOID)
Definition: fw.c:42
INT LlbFwGetCh(VOID)
Definition: fw.c:49
VOID LlbFwVideoPutChar(IN INT c, IN UCHAR Attr, IN ULONG X, IN ULONG Y)
Definition: fw.c:88
TIMEINFO * LlbFwGetTime(VOID)
Definition: fw.c:113
#define DbgPrint
Definition: hal.h:12
ULONG NTAPI LlbHwGetSerialUart(VOID)
Definition: hwinfo.c:34
ULONG NTAPI LlbHwGetBoardType(VOID)
Definition: hwinfo.c:13
ULONG NTAPI LlbHwGetPClk(VOID)
Definition: hwinfo.c:20
ULONG NTAPI LlbHwGetTmr0Base(VOID)
Definition: hwinfo.c:27
ULONG NTAPI LlbHwGetUartBase(IN ULONG Port)
Definition: hwuart.c:36
#define ARM_BOARD_CONFIGURATION_MINOR_VERSION
Definition: osloader.h:43
#define ARM_BOARD_CONFIGURATION_MAJOR_VERSION
Definition: osloader.h:42
PBIOS_MEMORY_MAP MemoryMap
Definition: osloader.h:53

Referenced by LlbBoot().

◆ LlbBuildMemoryMap()

VOID NTAPI LlbBuildMemoryMap ( VOID  )

Definition at line 85 of file loader.c.

86{
87 /* Zero out the memory map */
88 memset(MemoryMap, 0, sizeof(MemoryMap));
89
90 /* Call the hardware-specific function for hardware-defined regions */
92}
VOID NTAPI LlbHwBuildMemoryMap(IN PBIOS_MEMORY_MAP MemoryMap)
Definition: hwinfo.c:101
#define memset(x, y, z)
Definition: compat.h:39

Referenced by LlbBoot().

◆ LlbHwLoadOsLoaderFromRam()

POSLOADER_INIT NTAPI LlbHwLoadOsLoaderFromRam ( VOID  )

Definition at line 99 of file loader.c.

100{
101 ULONG Base, RootFs, Size;
103 CHAR CommandLine[64];
104
105 /* On versatile we load the RAMDISK with initrd */
107 DbgPrint("Root fs: %lx, size: %lx\n", RootFs, Size);
108
109 /* The OS Loader is at 0x20000, always */
110 Base = 0x20000;
111
112 /* Read image offset */
113 Offset = LlbEnvRead("rdoffset");
114
115 /* Set parameters for the OS loader */
116 snprintf(CommandLine,
117 sizeof(CommandLine),
118 "rdbase=0x%lx rdsize=0x%lx rdoffset=%s",
119 RootFs, Size, Offset);
120 LlbSetCommandLine(CommandLine);
121
122 /* Return the OS loader base address */
123 return (POSLOADER_INIT)Base;
124}
VOID NTAPI LlbSetCommandLine(IN PCHAR CommandLine)
Definition: loader.c:38
PCHAR NTAPI LlbEnvRead(IN PCHAR ValueName)
Definition: envir.c:127
BOOLEAN NTAPI LlbEnvGetRamDiskInformation(IN PULONG Base, IN PULONG Size)
Definition: envir.c:107
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2451
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
VOID(* POSLOADER_INIT)(IN PVOID BoardInit)
Definition: osloader.h:13
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
#define snprintf
Definition: wintirpc.h:48
char CHAR
Definition: xmlstorage.h:175

Referenced by LlbLoadOsLoader().

◆ LlbLoadOsLoader()

VOID NTAPI LlbLoadOsLoader ( VOID  )

Definition at line 128 of file loader.c.

129{
131
132 /* Read the current boot device */
133 BootDevice = LlbEnvRead("boot-device");
134 printf("Loading OS Loader from: %s...\n", BootDevice);
135 if (!strcmp(BootDevice, "NAND"))
136 {
137 // todo
138 }
139 else if (!strcmp(BootDevice, "RAMDISK"))
140 {
141 /* Call the hardware-specific function */
143 }
144 else if (!strcmp(BootDevice, "MMC") ||
145 !strcmp(BootDevice, "SD"))
146 {
147 //todo
148 }
149 else if (!strcmp(BootDevice, "HDD"))
150 {
151 //todo
152 }
153
154 LoaderInit = (PVOID)0x80000000;
155#ifdef _ZOOM2_ // need something better than this...
156 LoaderInit = (PVOID)0x81070000;
157#endif
158 printf("OS Loader loaded at 0x%p...JUMP!\n\n\n\n\n", LoaderInit);
159}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
@ BootDevice
Definition: bl.h:251
POSLOADER_INIT NTAPI LlbHwLoadOsLoaderFromRam(VOID)
Definition: loader.c:99
#define printf
Definition: freeldr.h:97
void * PVOID
Definition: typedefs.h:50

Referenced by LlbBoot().

◆ LlbSetCommandLine()

VOID NTAPI LlbSetCommandLine ( IN PCHAR  CommandLine)

Definition at line 38 of file loader.c.

39{
40 /* Copy the command line in the ARM block */
41 strcpy(ArmBlock.CommandLine, CommandLine);
42}
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

Referenced by LlbHwLoadOsLoaderFromRam().

Variable Documentation

◆ ArmBlock

◆ LoaderInit

POSLOADER_INIT LoaderInit

Definition at line 13 of file loader.c.

Referenced by LlbBoot(), and LlbLoadOsLoader().

◆ MemoryMap