diff --git a/src/include/console/btext.h b/src/include/console/btext.h new file mode 100644 index 0000000000..075fd85cae --- /dev/null +++ b/src/include/console/btext.h @@ -0,0 +1,88 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ +/* + * This file describes the structure passed from the BootX application + * (for MacOS) when it is used to boot Linux. + * + * Written by Benjamin Herrenschmidt. + * + * Move to LinuxBIOS by LYH yhlu@tyan.com + * + */ + + +#ifndef _BTEXT_H__ +#define _BTEXT_H__ + +#define u32 uint32_t +#define u16 uint16_t +#define u8 uint8_t + +/* Here are the boot informations that are passed to the bootstrap + * Note that the kernel arguments and the device tree are appended + * at the end of this structure. */ +typedef struct boot_infos +{ + + /* NEW (vers. 2) this holds the current _logical_ base addr of + the frame buffer (for use by early boot message) */ + u8* logicalDisplayBase; + + + /* Some infos about the current MacOS display */ + u32 dispDeviceRect[4]; /* left,top,right,bottom */ + u32 dispDeviceDepth; /* (8, 16 or 32) */ + u8* dispDeviceBase; /* base address (physical) */ + u32 dispDeviceRowBytes; /* rowbytes (in bytes) */ + u32 dispDeviceColorsOffset; /* Colormap (8 bits only) or 0 (*) */ + + + /* The framebuffer size (optional, currently 0) */ + u32 frameBufferSize; /* Represents a max size, can be 0. */ + + +} boot_infos_t; + +/* (*) The format of the colormap is 256 * 3 * 2 bytes. Each color index is represented + * by 3 short words containing a 16 bits (unsigned) color component. + * Later versions may contain the gamma table for direct-color devices here. + */ +#define BOOTX_COLORTABLE_SIZE (256UL*3UL*2UL) + + +/* + * Definitions for using the procedures in btext.c. + * + * Benjamin Herrenschmidt + */ + +extern void btext_clearscreen(void); + +extern boot_infos_t disp_bi; +extern u32 boot_text_mapped; + +void btext_setup_display(u32 width, u32 height, u32 depth, u32 pitch, + unsigned long address); +void map_boot_text(void); +void btext_update_display(unsigned long phys, u32 width, u32 height, + u32 depth, u32 pitch); + +void btext_drawchar(char c); +void btext_drawstring(const char *str); +void btext_drawhex(u32 v); + +#endif /* _BTEXT_H */ diff --git a/src/include/console/console.h b/src/include/console/console.h new file mode 100644 index 0000000000..6417c2e007 --- /dev/null +++ b/src/include/console/console.h @@ -0,0 +1,145 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ +#ifndef CONSOLE_CONSOLE_H_ +#define CONSOLE_CONSOLE_H_ + +#include +#include + +void console_init(void); +void console_tx_byte(unsigned char byte); +void console_tx_flush(void); +unsigned char console_rx_byte(void); +int console_tst_byte(void); +void post_code(uint8_t value); +void die(const char *msg); + +struct console_driver { + void (*init)(void); + void (*tx_byte)(unsigned char byte); + void (*tx_flush)(void); + unsigned char (*rx_byte)(void); + int (*tst_byte)(void); +}; + +#define __console __attribute__((used, __section__ (".rodata.console_drivers"))) + +/* Defined by the linker... */ +extern struct console_driver console_drivers[]; +extern struct console_driver econsole_drivers[]; + +extern int console_loglevel; +int do_printk(int msg_level, const char *fmt, ...); + +#define printk_emerg(fmt, arg...) do_printk(BIOS_EMERG ,fmt, ##arg) +#define printk_alert(fmt, arg...) do_printk(BIOS_ALERT ,fmt, ##arg) +#define printk_crit(fmt, arg...) do_printk(BIOS_CRIT ,fmt, ##arg) +#define printk_err(fmt, arg...) do_printk(BIOS_ERR ,fmt, ##arg) +#define printk_warning(fmt, arg...) do_printk(BIOS_WARNING ,fmt, ##arg) +#define printk_notice(fmt, arg...) do_printk(BIOS_NOTICE ,fmt, ##arg) +#define printk_info(fmt, arg...) do_printk(BIOS_INFO ,fmt, ##arg) +#define printk_debug(fmt, arg...) do_printk(BIOS_DEBUG ,fmt, ##arg) +#define printk_spew(fmt, arg...) do_printk(BIOS_SPEW ,fmt, ##arg) + +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_EMERG +#undef printk_emerg +#define printk_emerg(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_ALERT +#undef printk_alert +#define printk_alert(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_CRIT +#undef printk_crit +#define printk_crit(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_ERR +#undef printk_err +#define printk_err(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_WARNING +#undef printk_warning +#define printk_warning(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_NOTICE +#undef printk_notice +#define printk_notice(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_INFO +#undef printk_info +#define printk_info(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_DEBUG +#undef printk_debug +#define printk_debug(fmt, arg...) do {} while(0) +#endif +#if MAXIMUM_CONSOLE_LOGLEVEL <= BIOS_SPEW +#undef printk_spew +#define printk_spew(fmt, arg...) do {} while(0) +#endif + +#define print_emerg(STR) printk_emerg ("%s", (STR)) +#define print_alert(STR) printk_alert ("%s", (STR)) +#define print_crit(STR) printk_crit ("%s", (STR)) +#define print_err(STR) printk_err ("%s", (STR)) +#define print_warning(STR) printk_warning("%s", (STR)) +#define print_notice(STR) printk_notice ("%s", (STR)) +#define print_info(STR) printk_info ("%s", (STR)) +#define print_debug(STR) printk_debug ("%s", (STR)) +#define print_spew(STR) printk_spew ("%s", (STR)) + +#define print_emerg_char(CH) printk_emerg ("%c", (CH)) +#define print_alert_char(CH) printk_alert ("%c", (CH)) +#define print_crit_char(CH) printk_crit ("%c", (CH)) +#define print_err_char(CH) printk_err ("%c", (CH)) +#define print_warning_char(CH) printk_warning("%c", (CH)) +#define print_notice_char(CH) printk_notice ("%c", (CH)) +#define print_info_char(CH) printk_info ("%c", (CH)) +#define print_debug_char(CH) printk_debug ("%c", (CH)) +#define print_spew_char(CH) printk_spew ("%c", (CH)) + +#define print_emerg_hex8(HEX) printk_emerg ("%02x", (HEX)) +#define print_alert_hex8(HEX) printk_alert ("%02x", (HEX)) +#define print_crit_hex8(HEX) printk_crit ("%02x", (HEX)) +#define print_err_hex8(HEX) printk_err ("%02x", (HEX)) +#define print_warning_hex8(HEX) printk_warning("%02x", (HEX)) +#define print_notice_hex8(HEX) printk_notice ("%02x", (HEX)) +#define print_info_hex8(HEX) printk_info ("%02x", (HEX)) +#define print_debug_hex8(HEX) printk_debug ("%02x", (HEX)) +#define print_spew_hex8(HEX) printk_spew ("%02x", (HEX)) + +#define print_emerg_hex16(HEX) printk_emerg ("%04x", (HEX)) +#define print_alert_hex16(HEX) printk_alert ("%04x", (HEX)) +#define print_crit_hex16(HEX) printk_crit ("%04x", (HEX)) +#define print_err_hex16(HEX) printk_err ("%04x", (HEX)) +#define print_warning_hex16(HEX) printk_warning("%04x", (HEX)) +#define print_notice_hex16(HEX) printk_notice ("%04x", (HEX)) +#define print_info_hex16(HEX) printk_info ("%04x", (HEX)) +#define print_debug_hex16(HEX) printk_debug ("%04x", (HEX)) +#define print_spew_hex16(HEX) printk_spew ("%04x", (HEX)) + +#define print_emerg_hex32(HEX) printk_emerg ("%08x", (HEX)) +#define print_alert_hex32(HEX) printk_alert ("%08x", (HEX)) +#define print_crit_hex32(HEX) printk_crit ("%08x", (HEX)) +#define print_err_hex32(HEX) printk_err ("%08x", (HEX)) +#define print_warning_hex32(HEX) printk_warning("%08x", (HEX)) +#define print_notice_hex32(HEX) printk_notice ("%08x", (HEX)) +#define print_info_hex32(HEX) printk_info ("%08x", (HEX)) +#define print_debug_hex32(HEX) printk_debug ("%08x", (HEX)) +#define print_spew_hex32(HEX) printk_spew ("%08x", (HEX)) + +#endif /* CONSOLE_CONSOLE_H_ */ diff --git a/src/include/console/loglevel.h b/src/include/console/loglevel.h new file mode 100644 index 0000000000..66642f3e96 --- /dev/null +++ b/src/include/console/loglevel.h @@ -0,0 +1,48 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ +#ifndef LOGLEVEL_H +#define LOGLEVEL_H + +/* Safe for inclusion in assembly */ + +#ifndef MAXIMUM_CONSOLE_LOGLEVEL +#define MAXIMUM_CONSOLE_LOGLEVEL 8 +#endif + +#ifndef DEFAULT_CONSOLE_LOGLEVEL +#define DEFAULT_CONSOLE_LOGLEVEL 8 /* anything MORE serious than BIOS_SPEW */ +#endif + +#ifndef ASM_CONSOLE_LOGLEVEL +#if (DEFAULT_CONSOLE_LOGLEVEL <= MAXIMUM_CONSOLE_LOGLEVEL) +#define ASM_CONSOLE_LOGLEVEL DEFAULT_CONSOLE_LOGLEVEL +#else +#define ASM_CONSOLE_LOGLEVEL MAXIMUM_CONSOLE_LOGLEVEL +#endif +#endif + +#define BIOS_EMERG 0 /* system is unusable */ +#define BIOS_ALERT 1 /* action must be taken immediately */ +#define BIOS_CRIT 2 /* critical conditions */ +#define BIOS_ERR 3 /* error conditions */ +#define BIOS_WARNING 4 /* warning conditions */ +#define BIOS_NOTICE 5 /* normal but significant condition */ +#define BIOS_INFO 6 /* informational */ +#define BIOS_DEBUG 7 /* debug-level messages */ +#define BIOS_SPEW 8 /* Way too many details */ + +#endif /* LOGLEVEL_H */