xref: /haiku/src/system/boot/platform/u-boot/debug.cpp (revision 25a7b01d15612846f332751841da3579db313082)
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