diff --git a/reactos/boot/armllb/armllb.rbuild b/reactos/boot/armllb/armllb.rbuild index 482e1c4a120..6def3c93f1e 100644 --- a/reactos/boot/armllb/armllb.rbuild +++ b/reactos/boot/armllb/armllb.rbuild @@ -21,6 +21,8 @@ boot.s main.c crtsupp.c + envir.c + fw.c serial.c video.c diff --git a/reactos/boot/armllb/crtsupp.c b/reactos/boot/armllb/crtsupp.c index 9f70b17cc3e..df0f37cd1c5 100644 --- a/reactos/boot/armllb/crtsupp.c +++ b/reactos/boot/armllb/crtsupp.c @@ -11,11 +11,11 @@ int putchar(int c) { - /* Write to the serial port */ - LlbSerialPutChar(c); - - /* Write to the screen too */ + /* Write to the screen */ LlbVideoPutChar(c); + + /* For DEBUGGING ONLY */ + LlbSerialPutChar(c); return 0; } @@ -32,13 +32,9 @@ int printf(const char *fmt, ...) unsigned int i; char printbuffer[1024]; - va_start (args, fmt); - - /* For this to work, printbuffer must be larger than - * anything we ever want to print. - */ - i = vsprintf (printbuffer, fmt, args); - va_end (args); + va_start(args, fmt); + i = vsprintf(printbuffer, fmt, args); + va_end(args); /* Print the string */ return puts(printbuffer); diff --git a/reactos/boot/armllb/envir.c b/reactos/boot/armllb/envir.c new file mode 100644 index 00000000000..02839472d7b --- /dev/null +++ b/reactos/boot/armllb/envir.c @@ -0,0 +1,20 @@ +/* + * PROJECT: ReactOS Boot Loader + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/armllb/envir.c + * PURPOSE: LLB Environment Variable Routines + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +#include "precomp.h" + +PCHAR +NTAPI +LlbEnvRead(IN PCHAR ValueName) +{ + /* FIXME: HACK */ + return "RAMDISK"; +} + +/* EOF */ + diff --git a/reactos/boot/armllb/fw.c b/reactos/boot/armllb/fw.c new file mode 100644 index 00000000000..0dad84141c1 --- /dev/null +++ b/reactos/boot/armllb/fw.c @@ -0,0 +1,36 @@ +/* + * PROJECT: ReactOS Boot Loader + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/armllb/fw.c + * PURPOSE: LLB Firmware Routines (accessible by OS Loader) + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +#include "precomp.h" + +VOID +LlbFwPutChar(INT Ch) +{ + /* Just call directly the video function */ + LlbVideoPutChar(Ch); + + /* DEBUG ONLY */ + LlbSerialPutChar(Ch); +} + +BOOLEAN +LlbFwKbHit(VOID) +{ + /* Not yet implemented */ + return FALSE; +} + +INT +LlbFwGetCh(VOID) +{ + /* Not yet implemented */ + while (TRUE); + return 0; +} + +/* EOF */ diff --git a/reactos/boot/armllb/hw/versatile/hwinfo.c b/reactos/boot/armllb/hw/versatile/hwinfo.c index 3390b5993c0..edac4110005 100755 --- a/reactos/boot/armllb/hw/versatile/hwinfo.c +++ b/reactos/boot/armllb/hw/versatile/hwinfo.c @@ -47,15 +47,4 @@ LlbHwBuildMemoryMap(IN PBIOS_MEMORY_MAP MemoryMap) LlbAllocateMemoryEntry(BiosMemoryReserved, 0x10000000, 128 * 1024 * 1024); } -// -// hwenv.c? or environment.c? or both? -// -PCHAR -NTAPI -LlbHwEnvRead(IN PCHAR Option) -{ - /* HACKFIX */ - return "RAMDISK"; -} - /* EOF */ diff --git a/reactos/boot/armllb/hw/video.c b/reactos/boot/armllb/hw/video.c index 8d446f6b172..10f280227df 100644 --- a/reactos/boot/armllb/hw/video.c +++ b/reactos/boot/armllb/hw/video.c @@ -268,6 +268,28 @@ CHAR LlbHwBootFont[] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; +#if 0 +USHORT ColorPalette[16] = +{ + RGB565(0x00, 0x00, 0x00), + RGB565(0x00, 0x00, 0xAA), + RGB565(0x00, 0xAA, 0x00), + RGB565(0x00, 0xAA, 0xAA), + RGB565(0xAA, 0x00, 0x00), + RGB565(0xAA, 0x00, 0xAA), + RGB565(0xAA, 0x55, 0x00), + RGB565(0xAA, 0xAA, 0xAA), + RGB565(0x55, 0x55, 0x55), + RGB565(0x55, 0x55, 0xFF), + RGB565(0x55, 0xFF, 0x55), + RGB565(0x55, 0xFF, 0xFF), + RGB565(0xFF, 0x55, 0x55), + RGB565(0xFF, 0x55, 0xFF), + RGB565(0xFF, 0xFF, 0x55), + RGB565(0xFF, 0xFF, 0xFF), +}; +#endif + ULONG ScreenCursor; VOID @@ -312,7 +334,7 @@ LlbVideoDrawChar(IN CHAR c, VOID NTAPI -LlbVideoClearScreen(VOID) +LlbVideoClearScreen(IN BOOLEAN OsLoader) { ULONG ScreenSize, p; ULONG BackColor; @@ -323,8 +345,17 @@ LlbVideoClearScreen(VOID) ScreenCursor = 0; /* Backcolor on this machine */ - BackColor = LlbHwVideoCreateColor(14, 0, 82); - BackColor = (BackColor << 16) | BackColor; + if (OsLoader) + { + /* Black */ + BackColor = 0; + } + else + { + /* Deep blue */ + BackColor = LlbHwVideoCreateColor(14, 0, 82); + BackColor = (BackColor << 16) | BackColor; + } /* Screen size on this machine */ ScreenSize = LlbHwGetScreenWidth() * LlbHwGetScreenHeight(); @@ -369,3 +400,4 @@ LlbVideoPutChar(IN CHAR c) } /* EOF */ + diff --git a/reactos/boot/armllb/inc/fw.h b/reactos/boot/armllb/inc/fw.h new file mode 100755 index 00000000000..9ef3caa8cb7 --- /dev/null +++ b/reactos/boot/armllb/inc/fw.h @@ -0,0 +1,24 @@ +/* + * PROJECT: ReactOS Boot Loader + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/armllb/inc/fw.h + * PURPOSE: LLB Firmware Functions + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +VOID +LlbFwPutChar( + INT Ch +); + +BOOLEAN +LlbFwKbHit( + VOID +); + +INT +LlbFwGetCh( + VOID +); + +/* EOF */ diff --git a/reactos/boot/armllb/inc/hw.h b/reactos/boot/armllb/inc/hw.h index 4dcd5d63600..269c43e3508 100755 --- a/reactos/boot/armllb/inc/hw.h +++ b/reactos/boot/armllb/inc/hw.h @@ -92,12 +92,6 @@ LlbHwLoadOsLoaderFromRam( VOID ); -PCHAR -NTAPI -LlbHwEnvRead( - IN PCHAR Option -); - #ifdef _VERSATILE_ #include "versa.h" #elif _OMAP3_ diff --git a/reactos/boot/armllb/inc/osloader.h b/reactos/boot/armllb/inc/osloader.h index 9d4a2accdd9..41b9c8fbdfa 100644 --- a/reactos/boot/armllb/inc/osloader.h +++ b/reactos/boot/armllb/inc/osloader.h @@ -14,6 +14,7 @@ VOID (*POSLOADER_INIT)( IN PVOID BoardInit ); +#ifndef __REGISTRY_H // // Type of memory detected by LLB // @@ -35,12 +36,13 @@ typedef struct ULONG Type; ULONG Reserved; } BIOS_MEMORY_MAP, *PBIOS_MEMORY_MAP; +#endif // // Information sent from LLB to OS Loader // #define ARM_BOARD_CONFIGURATION_MAJOR_VERSION 1 -#define ARM_BOARD_CONFIGURATION_MINOR_VERSION 1 +#define ARM_BOARD_CONFIGURATION_MINOR_VERSION 2 typedef struct _ARM_BOARD_CONFIGURATION_BLOCK { ULONG MajorVersion; @@ -52,6 +54,9 @@ typedef struct _ARM_BOARD_CONFIGURATION_BLOCK ULONG MemoryMapEntryCount; PBIOS_MEMORY_MAP MemoryMap; CHAR CommandLine[256]; + PVOID ConsPutChar; + PVOID ConsKbHit; + PVOID ConsGetCh; } ARM_BOARD_CONFIGURATION_BLOCK, *PARM_BOARD_CONFIGURATION_BLOCK; VOID @@ -92,4 +97,10 @@ LlbBoot( IN PCHAR CommandLine ); +PCHAR +NTAPI +LlbEnvRead( + IN PCHAR Option +); + /* EOF */ diff --git a/reactos/boot/armllb/inc/precomp.h b/reactos/boot/armllb/inc/precomp.h index 57e46d6ad94..6c211a1f658 100755 --- a/reactos/boot/armllb/inc/precomp.h +++ b/reactos/boot/armllb/inc/precomp.h @@ -12,6 +12,7 @@ #include "machtype.h" #include "osloader.h" #include "hw.h" +#include "fw.h" #include "serial.h" #include "video.h" diff --git a/reactos/boot/armllb/inc/video.h b/reactos/boot/armllb/inc/video.h index 7f9f118333a..416f6eee818 100755 --- a/reactos/boot/armllb/inc/video.h +++ b/reactos/boot/armllb/inc/video.h @@ -9,7 +9,7 @@ VOID NTAPI LlbVideoClearScreen( - VOID + IN BOOLEAN OsLoader ); VOID diff --git a/reactos/boot/armllb/main.c b/reactos/boot/armllb/main.c index b76bc9347ba..142b8392651 100755 --- a/reactos/boot/armllb/main.c +++ b/reactos/boot/armllb/main.c @@ -15,7 +15,7 @@ LlbStartup(VOID) LlbHwInitialize(); /* Clean up the screen */ - LlbVideoClearScreen(); + LlbVideoClearScreen(FALSE); /* Print header */ printf("ReactOS ARM Low-Level Boot Loader [" __DATE__ " "__TIME__ "]\n"); @@ -25,4 +25,18 @@ LlbStartup(VOID) while (TRUE); } +VOID +DbgPrint(const char *fmt, ...) +{ + va_list args; + unsigned int i; + char Buffer[1024]; + + va_start(args, fmt); + i = vsprintf(Buffer, fmt, args); + va_end(args); + + while (*Buffer) LlbSerialPutChar(*Buffer); +} + /* EOF */ diff --git a/reactos/boot/armllb/os/loader.c b/reactos/boot/armllb/os/loader.c index 1470e8fd0b2..acb69846b44 100755 --- a/reactos/boot/armllb/os/loader.c +++ b/reactos/boot/armllb/os/loader.c @@ -69,6 +69,11 @@ LlbBuildArmBlock(VOID) /* Now load the memory map */ ArmBlock.MemoryMap = MemoryMap; + + /* Write firmware callbacks */ + ArmBlock.ConsPutChar = LlbFwPutChar; + ArmBlock.ConsKbHit = LlbFwKbHit; + ArmBlock.ConsGetCh = LlbFwGetCh; } VOID @@ -89,7 +94,7 @@ LlbLoadOsLoader(VOID) PCHAR BootDevice; /* Read the current boot device */ - BootDevice = LlbHwEnvRead("boot-device"); + BootDevice = LlbEnvRead("boot-device"); printf("Loading OS Loader from: %s...\n", BootDevice); if (!strcmp(BootDevice, "NAND")) { @@ -109,7 +114,7 @@ LlbLoadOsLoader(VOID) { //todo } - printf("OS Loader loaded at 0x%p...JUMP!\n", LoaderInit); + printf("OS Loader loaded at 0x%p...JUMP!\n\n\n\n\n", LoaderInit); } VOID diff --git a/reactos/boot/freeldr/freeldr/arch/arm/ferouart.c b/reactos/boot/freeldr/freeldr/arch/arm/ferouart.c deleted file mode 100644 index 0c8f9b0f234..00000000000 --- a/reactos/boot/freeldr/freeldr/arch/arm/ferouart.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * PROJECT: ReactOS Boot Loader - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/freeldr/arch/arm/ferouart.c - * PURPOSE: Implements code for Feroceon boards using the 16550 UART - * PROGRAMMERS: ReactOS Portable Systems Group - */ - -/* INCLUDES *******************************************************************/ - -#include - -/* GLOBALS ********************************************************************/ - -// -// UART Registers -// -#define UART0_RBR (ArmBoardBlock->UartRegisterBase + 0x00) -#define UART0_THR UART0_RBR -#define UART0_IER (ArmBoardBlock->UartRegisterBase + 0x04) -#define UART0_FCR (ArmBoardBlock->UartRegisterBase + 0x08) -#define UART0_LCR (ArmBoardBlock->UartRegisterBase + 0x0C) -#define UART0_MCR (ArmBoardBlock->UartRegisterBase + 0x10) -#define UART0_LSR (ArmBoardBlock->UartRegisterBase + 0x14) -#define UART0_MSR (ArmBoardBlock->UartRegisterBase + 0x18) -#define UART0_SCR (ArmBoardBlock->UartRegisterBase + 0x1C) - -// -// When we enable the divisor latch -// -#define UART0_DLL UART0_RBR -#define UART0_DLM UART0_IER - -// -// FCR Values -// -#define FCR_FIFO_EN 0x01 -#define FCR_RXSR 0x02 -#define FCR_TXSR 0x04 - -// -// LCR Values -// -#define LCR_WLS_8 0x03 -#define LCR_1_STB 0x00 -#define LCR_DIVL_EN 0x80 -#define LCR_NO_PAR 0x00 - -// -// LSR Values -// -#define LSR_DR 0x01 -#define LSR_THRE 0x20 - -/* FUNCTIONS ******************************************************************/ - -VOID -ArmFeroSerialInit(IN ULONG Baudrate) -{ - ULONG BaudClock; - - // - // Calculate baudrate clock divider to set the baud rate - // - BaudClock = (ArmBoardBlock->ClockRate / 16) / Baudrate; - - // - // Disable interrupts - // - WRITE_REGISTER_UCHAR(UART0_IER, 0); - - // - // Set the baud rate to 115200 bps - // - WRITE_REGISTER_UCHAR(UART0_LCR, LCR_DIVL_EN); - WRITE_REGISTER_UCHAR(UART0_DLL, BaudClock); - WRITE_REGISTER_UCHAR(UART0_DLM, (BaudClock >> 8) & 0xFF); - - // - // Set 8 bits for data, 1 stop bit, no parity - // - WRITE_REGISTER_UCHAR(UART0_LCR, LCR_WLS_8 | LCR_1_STB | LCR_NO_PAR); - - // - // Clear and enable FIFO - // - WRITE_REGISTER_UCHAR(UART0_FCR, FCR_FIFO_EN | FCR_RXSR | FCR_TXSR); -} - -VOID -ArmFeroPutChar(IN INT Char) -{ - // - // Properly support new-lines - // - if (Char == '\n') ArmFeroPutChar('\r'); - - // - // Wait for ready - // - while ((READ_REGISTER_UCHAR(UART0_LSR) & LSR_THRE) == 0); - - // - // Send the character - // - WRITE_REGISTER_UCHAR(UART0_THR, Char); -} - -INT -ArmFeroGetCh(VOID) -{ - // - // Wait for ready - // - while ((READ_REGISTER_UCHAR(UART0_LSR) & LSR_DR) == 0); - - // - // Read the character - // - return READ_REGISTER_UCHAR(UART0_RBR); -} - -BOOLEAN -ArmFeroKbHit(VOID) -{ - // - // Return if something is ready - // - return ((READ_REGISTER_UCHAR(UART0_LSR) & LSR_DR) != 0); -} diff --git a/reactos/boot/freeldr/freeldr/arch/arm/loader.c b/reactos/boot/freeldr/freeldr/arch/arm/loader.c index e4c59aa93d4..3e93651067d 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/loader.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/loader.c @@ -1607,6 +1607,7 @@ FrLdrStartup(IN ULONG Magic) // // Initialize the page directory // + while (TRUE); ArmSetupPageDirectory(); // diff --git a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c b/reactos/boot/freeldr/freeldr/arch/arm/macharm.c index c636a0a9fe0..6ad82aa387b 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/macharm.c @@ -9,6 +9,7 @@ /* INCLUDES *******************************************************************/ #include +#define RGB565(r, g, b) (((r >> 3) << 11)| ((g >> 2) << 5)| ((b >> 3) << 0)) /* GLOBALS ********************************************************************/ @@ -33,7 +34,7 @@ ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext) ArmBoardBlock = BootContext; // - // Let's make sure we understand the boot-loader + // Let's make sure we understand the LLB // ASSERT(ArmBoardBlock->MajorVersion == ARM_BOARD_CONFIGURATION_MAJOR_VERSION); ASSERT(ArmBoardBlock->MinorVersion == ARM_BOARD_CONFIGURATION_MINOR_VERSION); @@ -133,32 +134,21 @@ MachInit(IN PCCH CommandLine) // switch (ArmBoardBlock->BoardType) { - // - // Check for Feroceon-base boards - // + // + // Check for Feroceon-base boards + // case MACH_TYPE_FEROCEON: - - // - // These boards use a UART16550. Set us up for 115200 bps - // - ArmFeroSerialInit(115200); - MachVtbl.ConsPutChar = ArmFeroPutChar; - MachVtbl.ConsKbHit = ArmFeroKbHit; - MachVtbl.ConsGetCh = ArmFeroGetCh; break; - // - // Check for ARM Versatile PB boards - // + // + // Check for ARM Versatile PB boards + // case MACH_TYPE_VERSATILE_PB: - // - // These boards use a PrimeCell UART (PL011) - // - ArmVersaSerialInit(115200); - MachVtbl.ConsPutChar = ArmVersaPutChar; - MachVtbl.ConsKbHit = ArmVersaKbHit; - MachVtbl.ConsGetCh = ArmVersaGetCh; + /* Copy Machine Routines from Firmware Table */ + MachVtbl.ConsPutChar = ArmBoardBlock->ConsPutChar; + MachVtbl.ConsKbHit = ArmBoardBlock->ConsKbHit; + MachVtbl.ConsGetCh = ArmBoardBlock->ConsGetCh; break; // @@ -166,14 +156,6 @@ MachInit(IN PCCH CommandLine) // For now that means only Beagle, but ZOOM and others should be ok too // case MACH_TYPE_OMAP3_BEAGLE: - - // - // These boards use a UART16550 - // - ArmOmap3SerialInit(115200); - MachVtbl.ConsPutChar = ArmOmap3PutChar; - MachVtbl.ConsKbHit = ArmOmap3KbHit; - MachVtbl.ConsGetCh = ArmOmap3GetCh; break; default: @@ -204,5 +186,5 @@ MachInit(IN PCCH CommandLine) // We can now print to the console // TuiPrintf("%s for ARM\n", GetFreeLoaderVersionString()); - TuiPrintf("Bootargs: %s\n", CommandLine); + TuiPrintf("Bootargs: %s\n\n", CommandLine); } diff --git a/reactos/boot/freeldr/freeldr/arch/arm/omapuart.c b/reactos/boot/freeldr/freeldr/arch/arm/omapuart.c deleted file mode 100644 index f8b89f88445..00000000000 --- a/reactos/boot/freeldr/freeldr/arch/arm/omapuart.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * PROJECT: ReactOS Boot Loader - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/freeldr/arch/arm/omapuart.c - * PURPOSE: Implements code for TI OMAP3 boards using the 16550 UART - * PROGRAMMERS: ReactOS Portable Systems Group - */ - -/* INCLUDES *******************************************************************/ - -#include - -/* GLOBALS ********************************************************************/ - -// -// UART Registers -// -#define UART0_RHR (ArmBoardBlock->UartRegisterBase + 0x00) -#define UART0_THR UART0_RHR -#define UART0_IER (ArmBoardBlock->UartRegisterBase + 0x04) -#define UART0_FCR (ArmBoardBlock->UartRegisterBase + 0x08) -#define UART0_LCR (ArmBoardBlock->UartRegisterBase + 0x0C) -#define UART0_MCR (ArmBoardBlock->UartRegisterBase + 0x10) -#define UART0_LSR (ArmBoardBlock->UartRegisterBase + 0x14) -#define UART0_MDR1 (ArmBoardBlock->UartRegisterBase + 0x20) - -// -// When we enable the divisor latch -// -#define UART0_DLL UART0_RHR -#define UART0_DLH UART0_IER - -// -// FCR Values -// -#define FCR_FIFO_EN 0x01 -#define FCR_RXSR 0x02 -#define FCR_TXSR 0x04 - -// -// LCR Values -// -#define LCR_WLS_8 0x03 -#define LCR_1_STB 0x00 -#define LCR_DIVL_EN 0x80 -#define LCR_NO_PAR 0x00 - -// -// LSR Values -// -#define LSR_DR 0x01 -#define LSR_THRE 0x20 - -// -// MCR Values -// -#define MCR_DTR 0x01 -#define MCR_RTS 0x02 - -// -// MDR1 Modes -// -#define MDR1_UART16X 1 -#define MDR1_SIR 2 -#define MDR1_UART16X_AUTO_BAUD 3 -#define MDR1_UART13X 4 -#define MDR1_MIR 5 -#define MDR1_FIR 6 -#define MDR1_CIR 7 -#define MDR1_DISABLE 8 - -/* FUNCTIONS ******************************************************************/ - -VOID -ArmOmap3SerialInit(IN ULONG Baudrate) -{ - ULONG BaudClock; - - // - // Calculate baudrate clock divider to set the baud rate - // - BaudClock = (ArmBoardBlock->ClockRate / 16) / Baudrate; - - // - // Disable serial port - // - WRITE_REGISTER_UCHAR(UART0_MDR1, MDR1_DISABLE); - - // - // Disable interrupts - // - WRITE_REGISTER_UCHAR(UART0_IER, 0); - - // - // Set the baud rate to 115200 bps - // - WRITE_REGISTER_UCHAR(UART0_LCR, LCR_DIVL_EN); - WRITE_REGISTER_UCHAR(UART0_DLL, BaudClock); - WRITE_REGISTER_UCHAR(UART0_DLH, (BaudClock >> 8) & 0xFF); - - // - // Setup loopback - // - WRITE_REGISTER_UCHAR(UART0_MCR, MCR_DTR | MCR_RTS); - - // - // Set 8 bits for data, 1 stop bit, no parity - // - WRITE_REGISTER_UCHAR(UART0_LCR, LCR_WLS_8 | LCR_1_STB | LCR_NO_PAR); - - // - // Clear and enable FIFO - // - WRITE_REGISTER_UCHAR(UART0_FCR, FCR_FIFO_EN | FCR_RXSR | FCR_TXSR); - - // - // Enable serial port - // - WRITE_REGISTER_UCHAR(UART0_MDR1, MDR1_UART16X); -} - -VOID -ArmOmap3PutChar(IN INT Char) -{ - // - // Properly support new-lines - // - if (Char == '\n') ArmOmap3PutChar('\r'); - - // - // Wait for ready - // - while ((READ_REGISTER_UCHAR(UART0_LSR) & LSR_THRE) == 0); - - // - // Send the character - // - WRITE_REGISTER_UCHAR(UART0_THR, Char); -} - -INT -ArmOmap3GetCh(VOID) -{ - // - // Wait for ready - // - while ((READ_REGISTER_UCHAR(UART0_LSR) & LSR_DR) == 0); - - // - // Read the character - // - return READ_REGISTER_UCHAR(UART0_RHR); -} - -BOOLEAN -ArmOmap3KbHit(VOID) -{ - // - // Return if something is ready - // - return ((READ_REGISTER_UCHAR(UART0_LSR) & LSR_DR) != 0); -} diff --git a/reactos/boot/freeldr/freeldr/arch/arm/versuart.c b/reactos/boot/freeldr/freeldr/arch/arm/versuart.c deleted file mode 100644 index 36d483088c0..00000000000 --- a/reactos/boot/freeldr/freeldr/arch/arm/versuart.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * PROJECT: ReactOS Boot Loader - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/freeldr/arch/arm/versuart.c - * PURPOSE: Implements code for Versatile boards using the PL011 UART - * PROGRAMMERS: ReactOS Portable Systems Group - */ - -/* INCLUDES *******************************************************************/ - -#include - -/* GLOBALS ********************************************************************/ - -// -// UART Registers -// -#define UART_PL01x_DR (ArmBoardBlock->UartRegisterBase + 0x00) -#define UART_PL01x_RSR (ArmBoardBlock->UartRegisterBase + 0x04) -#define UART_PL01x_ECR (ArmBoardBlock->UartRegisterBase + 0x04) -#define UART_PL01x_FR (ArmBoardBlock->UartRegisterBase + 0x18) -#define UART_PL011_IBRD (ArmBoardBlock->UartRegisterBase + 0x24) -#define UART_PL011_FBRD (ArmBoardBlock->UartRegisterBase + 0x28) -#define UART_PL011_LCRH (ArmBoardBlock->UartRegisterBase + 0x2C) -#define UART_PL011_CR (ArmBoardBlock->UartRegisterBase + 0x30) -#define UART_PL011_IMSC (ArmBoardBlock->UartRegisterBase + 0x38) - -// -// LCR Values -// -#define UART_PL011_LCRH_WLEN_8 0x60 -#define UART_PL011_LCRH_FEN 0x10 - -// -// FCR Values -// -#define UART_PL011_CR_UARTEN 0x01 -#define UART_PL011_CR_TXE 0x100 -#define UART_PL011_CR_RXE 0x200 - -// -// LSR Values -// -#define UART_PL01x_FR_RXFE 0x10 -#define UART_PL01x_FR_TXFF 0x20 - -/* FUNCTIONS ******************************************************************/ - -VOID -ArmVersaSerialInit(IN ULONG Baudrate) -{ - ULONG Divider, Remainder, Fraction; - - // - // Calculate baudrate clock divider and remainder - // - Divider = ArmBoardBlock->ClockRate / (16 * Baudrate); - Remainder = ArmBoardBlock->ClockRate % (16 * Baudrate); - - // - // Calculate the fractional part - // - Fraction = (8 * Remainder / Baudrate) >> 1; - Fraction += (8 * Remainder / Baudrate) & 1; - - // - // Disable interrupts - // - WRITE_REGISTER_ULONG(UART_PL011_CR, 0); - - // - // Set the baud rate to 115200 bps - // - WRITE_REGISTER_ULONG(UART_PL011_IBRD, Divider); - WRITE_REGISTER_ULONG(UART_PL011_FBRD, Fraction); - - // - // Set 8 bits for data, 1 stop bit, no parity, FIFO enabled - // - WRITE_REGISTER_ULONG(UART_PL011_LCRH, - UART_PL011_LCRH_WLEN_8 | UART_PL011_LCRH_FEN); - - // - // Clear and enable FIFO - // - WRITE_REGISTER_ULONG(UART_PL011_CR, - UART_PL011_CR_UARTEN | - UART_PL011_CR_TXE | - UART_PL011_CR_RXE); -} - -VOID -ArmVersaPutChar(IN INT Char) -{ - // - // Properly support new-lines - // - if (Char == '\n') ArmVersaPutChar('\r'); - - // - // Wait for ready - // - while ((READ_REGISTER_ULONG(UART_PL01x_FR) & UART_PL01x_FR_TXFF) != 0); - - // - // Send the character - // - WRITE_REGISTER_ULONG(UART_PL01x_DR, Char); -} - -INT -ArmVersaGetCh(VOID) -{ - // - // Wait for ready - // - while ((READ_REGISTER_ULONG(UART_PL01x_FR) & UART_PL01x_FR_RXFE) != 0); - - // - // Read the character - // - return READ_REGISTER_ULONG(UART_PL01x_DR); -} - -BOOLEAN -ArmVersaKbHit(VOID) -{ - // - // Return if something is ready - // - return ((READ_REGISTER_ULONG(UART_PL01x_FR) & UART_PL01x_FR_RXFE) == 0); -} diff --git a/reactos/boot/freeldr/freeldr/freeldr.rbuild b/reactos/boot/freeldr/freeldr/freeldr.rbuild index 959951862ae..aa63c55b70a 100644 --- a/reactos/boot/freeldr/freeldr/freeldr.rbuild +++ b/reactos/boot/freeldr/freeldr/freeldr.rbuild @@ -32,8 +32,14 @@ rtl libcntpr + -static -lgcc - -Wl,--image-base=0x80FFF000 + + -Wl,--image-base=0x80FFF000 + + + -Wl,--image-base=0x007FF000 + diff --git a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild b/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild index b08d2585e9e..8d8287bba5d 100644 --- a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild +++ b/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild @@ -73,11 +73,8 @@ boot.s - ferouart.c loader.c macharm.c - omapuart.c - versuart.c diff --git a/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h b/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h index 7d6fae69945..c09d5bfed4a 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h +++ b/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h @@ -13,41 +13,8 @@ #include "../../reactos/registry.h" #endif -// -// Marvell Feroceon-based SoC: -// Buffalo Linkstation, KuroBox Pro, D-Link DS323 and others -// -#define MACH_TYPE_FEROCEON 526 - -// -// ARM Versatile PB: -// qemu-system-arm -M versatilepb, RealView Development Boards and others -// -#define MACH_TYPE_VERSATILE_PB 387 - -// -// TI Beagle Board, OMAP3530 SoC -// qemu-system-arm -M beagle, Beagle Board -// -#define MACH_TYPE_OMAP3_BEAGLE 1546 - -// -// Compatible boot-loaders should return us this information -// -#define ARM_BOARD_CONFIGURATION_MAJOR_VERSION 1 -#define ARM_BOARD_CONFIGURATION_MINOR_VERSION 1 -typedef struct _ARM_BOARD_CONFIGURATION_BLOCK -{ - ULONG MajorVersion; - ULONG MinorVersion; - ULONG BoardType; - ULONG ClockRate; - ULONG TimerRegisterBase; - ULONG UartRegisterBase; - ULONG MemoryMapEntryCount; - PBIOS_MEMORY_MAP MemoryMap; - CHAR CommandLine[256]; -} ARM_BOARD_CONFIGURATION_BLOCK, *PARM_BOARD_CONFIGURATION_BLOCK; +#include "../../../../../armllb/inc/osloader.h" +#include "../../../../../armllb/inc/machtype.h" // // Static heap for ARC Hardware Component Tree @@ -79,42 +46,6 @@ FldrCreateComponentKey( OUT PCONFIGURATION_COMPONENT_DATA *ComponentKey ); -VOID -ArmFeroSerialInit(IN ULONG Baudrate); - -VOID -ArmFeroPutChar(IN INT Char); - -INT -ArmFeroGetCh(VOID); - -BOOLEAN -ArmFeroKbHit(VOID); - -VOID -ArmOmap3SerialInit(IN ULONG Baudrate); - -VOID -ArmOmap3PutChar(IN INT Char); - -INT -ArmOmap3GetCh(VOID); - -BOOLEAN -ArmOmap3KbHit(VOID); - -VOID -ArmVersaSerialInit(IN ULONG Baudrate); - -VOID -ArmVersaPutChar(IN INT Char); - -INT -ArmVersaGetCh(VOID); - -BOOLEAN -ArmVersaKbHit(VOID); - extern PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock; #endif