mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 15:46:13 +00:00
- More fixes
- Plugin support for booting FreeLDR when used as initrd on QEMU command-line. svn path=/trunk/; revision=45377
This commit is contained in:
parent
0e650cc897
commit
10d18dcf41
7 changed files with 170 additions and 7 deletions
|
@ -13,7 +13,7 @@ NTAPI
|
|||
LlbSerialPutChar(IN CHAR c)
|
||||
{
|
||||
/* Properly support new-lines */
|
||||
// if (c == '\n') LlbSerialPutChar('\r');
|
||||
if (c == '\n') LlbSerialPutChar('\r');
|
||||
|
||||
/* Wait for ready */
|
||||
while (!LlbHwUartTxReady());
|
||||
|
|
|
@ -19,7 +19,7 @@ ULONG
|
|||
NTAPI
|
||||
LlbHwGetPClk(VOID)
|
||||
{
|
||||
return 0x24000000;
|
||||
return 24000000;
|
||||
}
|
||||
|
||||
ULONG
|
||||
|
@ -36,4 +36,26 @@ LlbHwGetSerialUart(VOID)
|
|||
return 0;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbHwBuildMemoryMap(IN PBIOS_MEMORY_MAP MemoryMap)
|
||||
{
|
||||
/* For now, hard-code 128MB of RAM starting at 0x00000000 */
|
||||
LlbAllocateMemoryEntry(BiosMemoryUsable, 0x00000000, 128 * 1024 * 1024);
|
||||
|
||||
/* Mark MMIO space as reserved */
|
||||
LlbAllocateMemoryEntry(BiosMemoryReserved, 0x10000000, 128 * 1024 * 1024);
|
||||
}
|
||||
|
||||
//
|
||||
// hwenv.c? or environment.c? or both?
|
||||
//
|
||||
PCHAR
|
||||
NTAPI
|
||||
LlbHwEnvRead(IN PCHAR Option)
|
||||
{
|
||||
/* HACKFIX */
|
||||
return "RAMDISK";
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -19,4 +19,16 @@ LlbHwInitialize(VOID)
|
|||
LlbHwVersaUartInitialize();
|
||||
}
|
||||
|
||||
//
|
||||
// Should go to hwdev.c
|
||||
//
|
||||
POSLOADER_INIT
|
||||
NTAPI
|
||||
LlbHwLoadOsLoaderFromRam(VOID)
|
||||
{
|
||||
/* The OS Loader should have already been loaded by QEMU at the right place */
|
||||
return (POSLOADER_INIT)0x800000;
|
||||
}
|
||||
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -80,6 +80,24 @@ LlbHwUartTxReady(
|
|||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbHwBuildMemoryMap(
|
||||
IN PBIOS_MEMORY_MAP MemoryMap
|
||||
);
|
||||
|
||||
POSLOADER_INIT
|
||||
NTAPI
|
||||
LlbHwLoadOsLoaderFromRam(
|
||||
VOID
|
||||
);
|
||||
|
||||
PCHAR
|
||||
NTAPI
|
||||
LlbHwEnvRead(
|
||||
IN PCHAR Option
|
||||
);
|
||||
|
||||
#ifdef _VERSATILE_
|
||||
#include "versa.h"
|
||||
#elif _OMAP3_
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
// OS Loader Main Routine
|
||||
//
|
||||
typedef
|
||||
VOID (*OSLOADER_INIT)(
|
||||
VOID (*POSLOADER_INIT)(
|
||||
IN PVOID BoardInit
|
||||
);
|
||||
|
||||
|
@ -54,4 +54,42 @@ typedef struct _ARM_BOARD_CONFIGURATION_BLOCK
|
|||
CHAR CommandLine[256];
|
||||
} ARM_BOARD_CONFIGURATION_BLOCK, *PARM_BOARD_CONFIGURATION_BLOCK;
|
||||
|
||||
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
|
||||
);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbLoadOsLoader(
|
||||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbBoot(
|
||||
IN PCHAR CommandLine
|
||||
);
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -19,6 +19,9 @@ LlbStartup(VOID)
|
|||
|
||||
/* Print header */
|
||||
printf("ReactOS ARM Low-Level Boot Loader [" __DATE__ " "__TIME__ "]\n");
|
||||
|
||||
/* Boot the OS Loader */
|
||||
LlbBoot("");
|
||||
while (TRUE);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,12 +10,13 @@
|
|||
|
||||
BIOS_MEMORY_MAP MemoryMap[32];
|
||||
ARM_BOARD_CONFIGURATION_BLOCK ArmBlock;
|
||||
|
||||
POSLOADER_INIT LoaderInit;
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
AllocateMemoryEntry(IN BIOS_MEMORY_TYPE Type,
|
||||
IN ULONG BaseAddress,
|
||||
IN ULONG Length)
|
||||
LlbAllocateMemoryEntry(IN BIOS_MEMORY_TYPE Type,
|
||||
IN ULONG BaseAddress,
|
||||
IN ULONG Length)
|
||||
{
|
||||
PBIOS_MEMORY_MAP Entry;
|
||||
|
||||
|
@ -37,6 +38,7 @@ NTAPI
|
|||
LlbSetCommandLine(IN PCHAR CommandLine)
|
||||
{
|
||||
/* Copy the command line in the ARM block */
|
||||
printf("Command Line %s\n", CommandLine);
|
||||
strcpy(ArmBlock.CommandLine, CommandLine);
|
||||
}
|
||||
|
||||
|
@ -58,8 +60,76 @@ LlbBuildArmBlock(VOID)
|
|||
ArmBlock.TimerRegisterBase = LlbHwGetTmr0Base();
|
||||
ArmBlock.UartRegisterBase = LlbHwGetUartBase(LlbHwGetSerialUart());
|
||||
|
||||
/* Debug */
|
||||
printf("Machine Identifier: %lx\nPCLK: %d\nTIMER 0: %p\nSERIAL UART: %p\n",
|
||||
ArmBlock.BoardType,
|
||||
ArmBlock.ClockRate,
|
||||
ArmBlock.TimerRegisterBase,
|
||||
ArmBlock.UartRegisterBase);
|
||||
|
||||
/* Now load the memory map */
|
||||
ArmBlock.MemoryMap = MemoryMap;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbBuildMemoryMap(VOID)
|
||||
{
|
||||
/* Zero out the memory map */
|
||||
memset(MemoryMap, 0, sizeof(MemoryMap));
|
||||
|
||||
/* Call the hardware-specific function */
|
||||
LlbHwBuildMemoryMap(MemoryMap);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbLoadOsLoader(VOID)
|
||||
{
|
||||
PCHAR BootDevice;
|
||||
|
||||
/* Read the current boot device */
|
||||
BootDevice = LlbHwEnvRead("boot-device");
|
||||
printf("Loading OS Loader from: %s...\n", BootDevice);
|
||||
if (!strcmp(BootDevice, "NAND"))
|
||||
{
|
||||
// todo
|
||||
}
|
||||
else if (!strcmp(BootDevice, "RAMDISK"))
|
||||
{
|
||||
/* Call the hardware-specific function */
|
||||
LoaderInit = LlbHwLoadOsLoaderFromRam();
|
||||
}
|
||||
else if (!strcmp(BootDevice, "MMC") ||
|
||||
!strcmp(BootDevice, "SD"))
|
||||
{
|
||||
//todo
|
||||
}
|
||||
else if (!strcmp(BootDevice, "HDD"))
|
||||
{
|
||||
//todo
|
||||
}
|
||||
printf("OS Loader loaded at 0x%p...JUMP!\n", LoaderInit);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
LlbBoot(IN PCHAR CommandLine)
|
||||
{
|
||||
/* Setup the ARM block */
|
||||
LlbBuildArmBlock();
|
||||
|
||||
/* Build the memory map */
|
||||
LlbBuildMemoryMap();
|
||||
|
||||
/* Set the command-line */
|
||||
LlbSetCommandLine(CommandLine);
|
||||
|
||||
/* Load the OS loader */
|
||||
LlbLoadOsLoader();
|
||||
|
||||
/* Jump to the OS Loader (FreeLDR in this case) */
|
||||
LoaderInit(&ArmBlock);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue