2 * PROJECT: ReactOS Boot Loader
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: boot/freeldr/arch/arm/marcharm.c
5 * PURPOSE: Implements ARM-specific machine initialization
6 * PROGRAMMERS: alex@winsiderss.com
9 /* INCLUDES *******************************************************************/
13 /* GLOBALS ********************************************************************/
16 // The only things we support
18 typedef enum _ARM_BOARD_TYPE
21 // Marvell Feroceon-based SoC:
22 // Buffalo Linkstation, KuroBox Pro, D-Link DS323 and others
28 // Compatible boot-loaders should return us this information
30 #define ARM_BOARD_CONFIGURATION_MAJOR_VERSION 1
31 #define ARM_BOARD_CONFIGURATION_MINOR_VERSION 1
32 typedef struct _ARM_BOARD_CONFIGURATION_BLOCK
36 ARM_BOARD_TYPE BoardType
;
37 ULONG TimerRegisterBase
;
38 ULONG UartRegisterBase
;
39 PBIOS_MEMORY_MAP MemoryMap
;
40 CHAR CommandLine
[256];
41 } ARM_BOARD_CONFIGURATION_BLOCK
, *PARM_BOARD_CONFIGURATION_BLOCK
;
43 /* FUNCTIONS ******************************************************************/
45 PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock
;
48 ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext
)
51 // Remember the pointer
53 ArmBoardBlock
= BootContext
;
56 // Let's make sure we understand the boot-loader
58 ASSERT(ArmBoardBlock
->MajorVersion
== ARM_BOARD_CONFIGURATION_MAJOR_VERSION
);
59 ASSERT(ArmBoardBlock
->MinorVersion
== ARM_BOARD_CONFIGURATION_MINOR_VERSION
);
62 // This should probably go away once we support more boards
64 ASSERT(ArmBoardBlock
->BoardType
== ARM_FEROCEON
);
67 // Call FreeLDR's portable entrypoint with our command-line
69 BootMain(ArmBoardBlock
->CommandLine
);