deb99af8a1
The prototype of vprintk() is currently declared unconditionally, which prevents it from being used in situations where the console is disabled. The code will compile correctly, but not link, since the definition in console.c isn't being provided. This adds a shim around the declaration so that, like printk(), a call to vprintk() in this situation will expand to a no-op function instead. Change-Id: Ib4a9aa96a5b9dbb9b937ff45854bf6a407938b37 Signed-off-by: Jacob Garber <jgarber1@ualberta.ca> Reviewed-on: https://review.coreboot.org/c/coreboot/+/33181 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
98 lines
2.2 KiB
C
98 lines
2.2 KiB
C
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright (C) 1991, 1992 Linus Torvalds
|
|
* Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>,
|
|
* Raptor Engineering
|
|
*
|
|
* 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; version 2 of the License.
|
|
*
|
|
* 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.
|
|
*
|
|
* blatantly copied from linux/kernel/printk.c
|
|
*/
|
|
|
|
#include <console/cbmem_console.h>
|
|
#include <console/console.h>
|
|
#include <console/streams.h>
|
|
#include <console/vtxprintf.h>
|
|
#include <smp/spinlock.h>
|
|
#include <smp/node.h>
|
|
#include <stddef.h>
|
|
#include <trace.h>
|
|
|
|
#if (!defined(__PRE_RAM__) && CONFIG(HAVE_ROMSTAGE_CONSOLE_SPINLOCK)) || !CONFIG(HAVE_ROMSTAGE_CONSOLE_SPINLOCK)
|
|
DECLARE_SPIN_LOCK(console_lock)
|
|
#endif
|
|
|
|
void do_putchar(unsigned char byte)
|
|
{
|
|
console_tx_byte(byte);
|
|
}
|
|
|
|
static void wrap_putchar(unsigned char byte, void *data)
|
|
{
|
|
console_tx_byte(byte);
|
|
}
|
|
|
|
static void wrap_putchar_cbmemc(unsigned char byte, void *data)
|
|
{
|
|
__cbmemc_tx_byte(byte);
|
|
}
|
|
|
|
int do_vprintk(int msg_level, const char *fmt, va_list args)
|
|
{
|
|
int i, log_this;
|
|
|
|
if (CONFIG(SQUELCH_EARLY_SMP) && ENV_CACHE_AS_RAM &&
|
|
!boot_cpu())
|
|
return 0;
|
|
|
|
log_this = console_log_level(msg_level);
|
|
if (log_this < CONSOLE_LOG_FAST)
|
|
return 0;
|
|
|
|
DISABLE_TRACE;
|
|
#ifdef __PRE_RAM__
|
|
#if CONFIG(HAVE_ROMSTAGE_CONSOLE_SPINLOCK)
|
|
spin_lock(romstage_console_lock());
|
|
#endif
|
|
#else
|
|
spin_lock(&console_lock);
|
|
#endif
|
|
|
|
if (log_this == CONSOLE_LOG_FAST) {
|
|
i = vtxprintf(wrap_putchar_cbmemc, fmt, args, NULL);
|
|
} else {
|
|
i = vtxprintf(wrap_putchar, fmt, args, NULL);
|
|
console_tx_flush();
|
|
}
|
|
|
|
#ifdef __PRE_RAM__
|
|
#if CONFIG(HAVE_ROMSTAGE_CONSOLE_SPINLOCK)
|
|
spin_unlock(romstage_console_lock());
|
|
#endif
|
|
#else
|
|
spin_unlock(&console_lock);
|
|
#endif
|
|
ENABLE_TRACE;
|
|
|
|
return i;
|
|
}
|
|
|
|
int do_printk(int msg_level, const char *fmt, ...)
|
|
{
|
|
va_list args;
|
|
int i;
|
|
|
|
va_start(args, fmt);
|
|
i = do_vprintk(msg_level, fmt, args);
|
|
va_end(args);
|
|
|
|
return i;
|
|
}
|