1b6add3ffSAxel Dörfler /* 2b6add3ffSAxel Dörfler * Copyright 2004-2010, Axel Dörfler, axeld@pinc-software.de. 3b6add3ffSAxel Dörfler * Distributed under the terms of the MIT License. 4b6add3ffSAxel Dörfler */ 5b6add3ffSAxel Dörfler 6b6add3ffSAxel Dörfler 7b6add3ffSAxel Dörfler #include "serial.h" 8b6add3ffSAxel Dörfler #include "keyboard.h" 9b6add3ffSAxel Dörfler 10b6add3ffSAxel Dörfler #include <boot/platform.h> 11b6add3ffSAxel Dörfler #include <boot/stdio.h> 12b6add3ffSAxel Dörfler #include <stdarg.h> 13b6add3ffSAxel Dörfler 14b6add3ffSAxel Dörfler 15b6add3ffSAxel Dörfler /*! This works only after console_init() was called. 16b6add3ffSAxel Dörfler */ 17b6add3ffSAxel Dörfler extern "C" void 18b6add3ffSAxel Dörfler panic(const char* format, ...) 19b6add3ffSAxel Dörfler { 20b6add3ffSAxel Dörfler va_list list; 21b6add3ffSAxel Dörfler 22b6add3ffSAxel Dörfler platform_switch_to_text_mode(); 23b6add3ffSAxel Dörfler 24b6add3ffSAxel Dörfler puts("*** PANIC ***"); 25b6add3ffSAxel Dörfler 26b6add3ffSAxel Dörfler va_start(list, format); 27b6add3ffSAxel Dörfler vprintf(format, list); 28b6add3ffSAxel Dörfler va_end(list); 29b6add3ffSAxel Dörfler 30b6add3ffSAxel Dörfler puts("\nPress key to reboot."); 31b6add3ffSAxel Dörfler 32b6add3ffSAxel Dörfler clear_key_buffer(); 33b6add3ffSAxel Dörfler wait_for_key(); 34b6add3ffSAxel Dörfler platform_exit(); 35b6add3ffSAxel Dörfler } 36b6add3ffSAxel Dörfler 37b6add3ffSAxel Dörfler 38b6add3ffSAxel Dörfler extern "C" void 39b6add3ffSAxel Dörfler dprintf(const char* format, ...) 40b6add3ffSAxel Dörfler { 41b6add3ffSAxel Dörfler char buffer[512]; 42b6add3ffSAxel Dörfler va_list list; 43b6add3ffSAxel Dörfler int length; 44b6add3ffSAxel Dörfler 45b6add3ffSAxel Dörfler va_start(list, format); 46b6add3ffSAxel Dörfler length = vsnprintf(buffer, sizeof(buffer), format, list); 47b6add3ffSAxel Dörfler va_end(list); 48b6add3ffSAxel Dörfler 49b6add3ffSAxel Dörfler if (length >= (int)sizeof(buffer)) 50b6add3ffSAxel Dörfler length = sizeof(buffer) - 1; 51b6add3ffSAxel Dörfler 52b6add3ffSAxel Dörfler serial_puts(buffer, length); 53b6add3ffSAxel Dörfler 54b6add3ffSAxel Dörfler if (platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT) 55b6add3ffSAxel Dörfler fprintf(stderr, "%s", buffer); 56b6add3ffSAxel Dörfler } 57*5e78920cSIngo Weinhold 58*5e78920cSIngo Weinhold 59*5e78920cSIngo Weinhold char* 60*5e78920cSIngo Weinhold platform_debug_get_log_buffer(size_t* _size) 61*5e78920cSIngo Weinhold { 62*5e78920cSIngo Weinhold return NULL; 63*5e78920cSIngo Weinhold } 64