| /* |
| * blantantly copied from linux/kernel/printk.c |
| * |
| * Copyright (C) 1991, 1992 Linus Torvalds |
| * |
| */ |
| |
| #include <stdarg.h> |
| #include <smp/spinlock.h> |
| #include <console/console.h> |
| |
| /* printk's without a loglevel use this.. */ |
| #define DEFAULT_MESSAGE_LOGLEVEL 4 /* BIOS_WARNING */ |
| |
| /* We show everything that is MORE important than this.. */ |
| #define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */ |
| |
| /* Keep together for sysctl support */ |
| |
| int console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; |
| int default_message_loglevel = DEFAULT_MESSAGE_LOGLEVEL; |
| int minimum_console_loglevel = MINIMUM_CONSOLE_LOGLEVEL; |
| int default_console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL; |
| |
| void display(char*); |
| extern int vtxprintf(void (*)(unsigned char), const char *, va_list); |
| |
| static spinlock_t console_lock = SPIN_LOCK_UNLOCKED; |
| |
| int do_printk(int msg_level, const char *fmt, ...) |
| { |
| va_list args; |
| int i; |
| |
| if (msg_level >= console_loglevel) { |
| return 0; |
| } |
| |
| spin_lock(&console_lock); |
| |
| va_start(args, fmt); |
| i = vtxprintf(console_tx_byte, fmt, args); |
| va_end(args); |
| |
| console_tx_flush(); |
| |
| spin_unlock(&console_lock); |
| |
| return i; |
| } |