/* * Realtek semiconductor Corp. * * arch/rlx/rlxocp/kgdb.c: * Kernel debugging on the rtl5739. * * Tony Wu (tonywu@realtek.com.tw) * Dec. 7, 2007 */ #include #include static int remoteDebugInitialized = 0; void debugInit(void) { /* * If low-level debugging (before GDB or console operational) is * configured, then we do not need to re-initialize the UART. */ #ifndef CONFIG_DEBUG_LL // earlyInitUartPR31700(); #endif } char getDebugChar(void) { char buf; unsigned long int2, flags; if (!remoteDebugInitialized) { debugInit(); remoteDebugInitialized = 1; } save_and_cli(flags); int2 = IntEnable2; IntEnable2 = 0; while (!(UartA_Ctrl1 & UART_RX_HOLD_FULL)); buf = UartA_Data; IntEnable2 = int2; restore_flags(flags); return buf; } int putDebugChar(char c) { int i; unsigned long int2; if (!remoteDebugInitialized) { debugInit(); remoteDebugInitialized = 1; } int2 = IntEnable2; IntEnable2 &= ~(INT2_UARTATXINT | INT2_UARTATXOVERRUN | INT2_UARTAEMPTY); for (i = 0; !(IntStatus2 & INT2_UARTATXINT) && (i < 10000); i++); IntClear2 = INT2_UARTATXINT | INT2_UARTATXOVERRUN | INT2_UARTAEMPTY; UartA_Data = c; for (i = 0; !(IntStatus2 & INT2_UARTATXINT) && (i < 10000); i++); IntClear2 = INT2_UARTATXINT | INT2_UARTATXOVERRUN | INT2_UARTAEMPTY; IntEnable2 = int2; return 1; }