71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
|
/*
|
|
* Console Log routines
|
|
* Wraps libc and console lower level functions
|
|
* does fancy-schmancy things like timestamps and priorities
|
|
* Doesn't make waffles.
|
|
*
|
|
* Copyright 2013-2018 IBM Corp.
|
|
*/
|
|
|
|
#include "skiboot.h"
|
|
#include "unistd.h"
|
|
#include "stdio.h"
|
|
#include "console.h"
|
|
#include "timebase.h"
|
|
#include <debug_descriptor.h>
|
|
|
|
int vprlog(int log_level, const char *fmt, va_list ap)
|
|
{
|
|
int count;
|
|
char buffer[320];
|
|
bool flush_to_drivers = true;
|
|
unsigned long tb = mftb();
|
|
|
|
/* It's safe to return 0 when we "did" something here
|
|
* as only printf cares about how much we wrote, and
|
|
* if you change log_level to below PR_PRINTF then you
|
|
* get everything you deserve.
|
|
* By default, only PR_DEBUG and higher are stored in memory.
|
|
* PR_TRACE and PR_INSANE are for those having a bad day.
|
|
*/
|
|
if (log_level > (debug_descriptor.console_log_levels >> 4))
|
|
return 0;
|
|
|
|
count = snprintf(buffer, sizeof(buffer), "[%5lu.%09lu,%d] ",
|
|
tb_to_secs(tb), tb_remaining_nsecs(tb), log_level);
|
|
count+= vsnprintf(buffer+count, sizeof(buffer)-count, fmt, ap);
|
|
|
|
if (log_level > (debug_descriptor.console_log_levels & 0x0f))
|
|
flush_to_drivers = false;
|
|
|
|
console_write(flush_to_drivers, buffer, count);
|
|
|
|
return count;
|
|
}
|
|
|
|
/* we don't return anything as what on earth are we going to do
|
|
* if we actually fail to print a log message? Print a log message about it?
|
|
* Callers shouldn't care, prlog and friends should do something generically
|
|
* sane in such crazy situations.
|
|
*/
|
|
void _prlog(int log_level, const char* fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
vprlog(log_level, fmt, ap);
|
|
va_end(ap);
|
|
}
|
|
|
|
int _printf(const char* fmt, ...)
|
|
{
|
|
int count;
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
count = vprlog(PR_PRINTF, fmt, ap);
|
|
va_end(ap);
|
|
|
|
return count;
|
|
}
|