/* * PROJECT: ReactOS Kernel * LICENSE: BSD - See COPYING.ARM in the top level directory * FILE: ntoskrnl/kd/arm/kdbg.c * PURPOSE: Serial Port Kernel Debugging Transport Library * PROGRAMMERS: ReactOS Portable Systems Group */ /* INCLUDES *******************************************************************/ #include #include #define NDEBUG #include /* GLOBALS ********************************************************************/ CPPORT DefaultPort = {0, 0, 0}; // // We need to build this in the configuration root and use KeFindConfigurationEntry // to recover it later. // #define HACK 24000000 /* REACTOS FUNCTIONS **********************************************************/ BOOLEAN NTAPI KdPortInitializeEx(IN PCPPORT PortInformation, IN ULONG ComPortNumber) { ULONG Divider, Remainder, Fraction; ULONG Baudrate = PortInformation->BaudRate; // // Calculate baudrate clock divider and remainder // Divider = HACK / (16 * Baudrate); Remainder = HACK % (16 * Baudrate); // // Calculate the fractional part // Fraction = (8 * Remainder / Baudrate) >> 1; Fraction += (8 * Remainder / Baudrate) & 1; // // Disable interrupts // WRITE_REGISTER_ULONG((PULONG)UART_PL011_CR, 0); // // Set the baud rate // WRITE_REGISTER_ULONG((PULONG)UART_PL011_IBRD, Divider); WRITE_REGISTER_ULONG((PULONG)UART_PL011_FBRD, Fraction); // // Set 8 bits for data, 1 stop bit, no parity, FIFO enabled // WRITE_REGISTER_ULONG((PULONG)UART_PL011_LCRH, UART_PL011_LCRH_WLEN_8 | UART_PL011_LCRH_FEN); // // Clear and enable FIFO // WRITE_REGISTER_ULONG((PULONG)UART_PL011_CR, UART_PL011_CR_UARTEN | UART_PL011_CR_TXE | UART_PL011_CR_RXE); // // Done // return TRUE; } BOOLEAN NTAPI KdPortGetByteEx(IN PCPPORT PortInformation, OUT PUCHAR ByteReceived) { UNIMPLEMENTED; while (TRUE); return FALSE; } VOID NTAPI KdPortPutByteEx(IN PCPPORT PortInformation, IN UCHAR ByteToSend) { // // Wait for ready // while ((READ_REGISTER_ULONG((PULONG)UART_PL01x_FR) & UART_PL01x_FR_TXFF) != 0); // // Send the character // WRITE_REGISTER_ULONG((PULONG)UART_PL01x_DR, ByteToSend); } /* EOF */