rpi: Wait for keypress on panic

* Cleanup serial shutdown process
This commit is contained in:
Alexander von Gluck IV
2012-05-16 06:25:13 -05:00
parent 4747ee6ea8
commit d0f5524676
2 changed files with 19 additions and 6 deletions
@@ -20,7 +20,7 @@
UartPL011 gLoaderUART(uart_base_debug()); UartPL011 gLoaderUART(uart_base_debug());
static int32 sSerialEnabled = 0; static bool sSerialEnabled = false;
static void static void
@@ -30,10 +30,17 @@ serial_putc(char c)
} }
extern "C" int
serial_getc(bool wait)
{
return gLoaderUART.GetChar(wait);
}
extern "C" void extern "C" void
serial_puts(const char* string, size_t size) serial_puts(const char* string, size_t size)
{ {
if (sSerialEnabled <= 0) if (!sSerialEnabled)
return; return;
while (size-- > 0) { while (size-- > 0) {
@@ -53,23 +60,26 @@ serial_puts(const char* string, size_t size)
extern "C" void extern "C" void
serial_disable(void) serial_disable(void)
{ {
sSerialEnabled--; if (sSerialEnabled)
serial_cleanup();
gLoaderUART.Disable();
} }
extern "C" void extern "C" void
serial_enable(void) serial_enable(void)
{ {
sSerialEnabled++; gLoaderUART.Enable();
sSerialEnabled = true;
} }
extern "C" void extern "C" void
serial_cleanup(void) serial_cleanup(void)
{ {
// Transmit the last of our fifo sSerialEnabled = false;
gLoaderUART.FlushTx(); gLoaderUART.FlushTx();
gLoaderUART.Disable();
} }
@@ -93,6 +93,9 @@ void
platform_exit(void) platform_exit(void)
{ {
serial_cleanup(); serial_cleanup();
// Wait for keypress on serial
serial_getc(true);
serial_disable();
} }