switch-coreboot/include/console.h
Carl-Daniel Hailfinger 0c255e108b Move console log level management to global variable infrastructure. The
existing code does not work due to the characteristics of stage1. This
has been broken since r729.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Ronald G. Minnich <rminnich@gmail.com>


git-svn-id: svn://coreboot.org/repository/coreboot-v3@786 f3766cd6-281f-0410-b1cd-43a5c92072e9
2008-08-18 20:13:11 +00:00

85 lines
2.9 KiB
C

/*
* 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_H
#define CONSOLE_H
#include <types.h>
#include <shared.h> /* We share symbols from stage 0 */
#include <post_code.h>
#define BIOS_ALWAYS 0 /* log no matter what; not necessarily an error */
#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 */
void console_init(void);
void console_tx_byte(unsigned char byte, void *arg);
void console_tx_flush(void);
unsigned char console_rx_byte(void);
int console_tst_byte(void);
void console_loglevel_init(void);
#ifdef CONFIG_CONSOLE_BUFFER
void printk_buffer_init(void);
void printk_buffer_move(void *newaddr, int newsize);
#endif
struct console_driver {
void (*init)(void);
void (*tx_byte)(unsigned char byte, void *arg);
void (*tx_flush)(void);
unsigned char (*rx_byte)(void);
int (*tst_byte)(void);
};
#ifdef CONFIG_CONSOLE_BUFFER
struct printk_buffer {
int len;
int readoffset;
int writeoffset;
char buffer[];
};
#endif
/*
* struct global_vars is managed entirely from C code. Keep in mind that there
* is NO buffer at the end of the struct, so having zero-sized arrays at the
* end or similar stuff for which the compiler can't determine the final size
* will corrupt memory. If you don't try to be clever, everything will be fine.
*/
struct global_vars {
#ifdef CONFIG_CONSOLE_BUFFER
struct printk_buffer *printk_buffer;
#endif
unsigned int loglevel;
};
int printk(int msg_level, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
EXPORT_SYMBOL(printk);
void banner(int msg_level, const char *msg);
EXPORT_SYMBOL(banner);
void dump_mem_range(int msg_level, unsigned char *buf, int size);
EXPORT_SYMBOL(dump_mem_range);
void die(const char *msg);
EXPORT_SYMBOL(die);
#endif /* CONSOLE_H */