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
panic(const char * format,...)18b6add3ffSAxel Dörfler panic(const char* format, ...)
19b6add3ffSAxel Dörfler {
20*1cdb5905SFrançois Revol const char hint[] = "*** PANIC ***";
21*1cdb5905SFrançois Revol char buffer[512];
22b6add3ffSAxel Dörfler va_list list;
23*1cdb5905SFrançois Revol int length;
24b6add3ffSAxel Dörfler
25b6add3ffSAxel Dörfler platform_switch_to_text_mode();
26b6add3ffSAxel Dörfler
27*1cdb5905SFrançois Revol serial_puts(hint, sizeof(hint));
28*1cdb5905SFrançois Revol serial_puts("\n", 1);
29*1cdb5905SFrançois Revol //fprintf(stderr, "%s", hint);
30*1cdb5905SFrançois Revol puts(hint);
31b6add3ffSAxel Dörfler
32b6add3ffSAxel Dörfler va_start(list, format);
33*1cdb5905SFrançois Revol length = vsnprintf(buffer, sizeof(buffer), format, list);
34b6add3ffSAxel Dörfler va_end(list);
35b6add3ffSAxel Dörfler
36*1cdb5905SFrançois Revol if (length >= (int)sizeof(buffer))
37*1cdb5905SFrançois Revol length = sizeof(buffer) - 1;
38*1cdb5905SFrançois Revol
39*1cdb5905SFrançois Revol serial_puts(buffer, length);
40*1cdb5905SFrançois Revol //fprintf(stderr, "%s", buffer);
41*1cdb5905SFrançois Revol puts(buffer);
42*1cdb5905SFrançois Revol
43b6add3ffSAxel Dörfler puts("\nPress key to reboot.");
44b6add3ffSAxel Dörfler
45b6add3ffSAxel Dörfler clear_key_buffer();
46b6add3ffSAxel Dörfler wait_for_key();
47b6add3ffSAxel Dörfler platform_exit();
48b6add3ffSAxel Dörfler }
49b6add3ffSAxel Dörfler
50b6add3ffSAxel Dörfler
51b6add3ffSAxel Dörfler extern "C" void
dprintf(const char * format,...)52b6add3ffSAxel Dörfler dprintf(const char* format, ...)
53b6add3ffSAxel Dörfler {
54b6add3ffSAxel Dörfler char buffer[512];
55b6add3ffSAxel Dörfler va_list list;
56b6add3ffSAxel Dörfler int length;
57b6add3ffSAxel Dörfler
58b6add3ffSAxel Dörfler va_start(list, format);
59b6add3ffSAxel Dörfler length = vsnprintf(buffer, sizeof(buffer), format, list);
60b6add3ffSAxel Dörfler va_end(list);
61b6add3ffSAxel Dörfler
62b6add3ffSAxel Dörfler if (length >= (int)sizeof(buffer))
63b6add3ffSAxel Dörfler length = sizeof(buffer) - 1;
64b6add3ffSAxel Dörfler
65b6add3ffSAxel Dörfler serial_puts(buffer, length);
66b6add3ffSAxel Dörfler
67b6add3ffSAxel Dörfler if (platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT)
68b6add3ffSAxel Dörfler fprintf(stderr, "%s", buffer);
69b6add3ffSAxel Dörfler }
705e78920cSIngo Weinhold
715e78920cSIngo Weinhold
725e78920cSIngo Weinhold char*
platform_debug_get_log_buffer(size_t * _size)735e78920cSIngo Weinhold platform_debug_get_log_buffer(size_t* _size)
745e78920cSIngo Weinhold {
755e78920cSIngo Weinhold return NULL;
765e78920cSIngo Weinhold }
77