kernel/logging: Change default log level to LOG_NOTE
[barrelfish] / kernel / include / logging.h
1 /**
2  * \file
3  * \brief Kernel logging infrastructure headers.
4  *
5  * All C source in the kernel should include this file first.
6  * This file should contain only definitions and prototypes that are
7  * required for the majority of kernel code.
8  */
9
10 /*
11  * Copyright (c) 2016, ETH Zurich.
12  * All rights reserved.
13  *
14  * This file is distributed under the terms in the attached LICENSE file.
15  * If you do not find this file, copies can be found by writing to:
16  * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
17  */
18
19 #ifndef __KERNEL_LOGGING_H
20 #define __KERNEL_LOGGING_H
21
22 #include <assert.h>
23 #include <stddef.h>
24 #include <stdio.h> // printf for debug
25 #include <stdint.h>
26 #include <inttypes.h>
27 #include <stdbool.h>
28 #include <barrelfish_kpi/types.h>
29 #include <barrelfish_kpi/cpu.h>
30 #include <barrelfish_kpi/registers_arch.h>
31 #include <errors/errno.h>
32 #include <bitmacros.h>
33 #include <debug.h>
34 #include <offsets.h> /* XXX */
35 #include <schedule.h>
36
37
38 #define DEFAULT_LOGLEVEL        LOG_NOTE
39 #define DEFAULT_SUBSYSTEM_MASK  (~0L)
40
41
42 /**
43  * Kernel subsystems.
44  */
45 #define SUBSYS_STARTUP          (1 << 0)        ///< Startup
46 #define SUBSYS_GDB              (1 << 1)        ///< GDB stub
47 #define SUBSYS_APIC             (1 << 2)        ///< APIC driver
48 #define SUBSYS_ELF              (1 << 3)        ///< ELF64 loader
49 #define SUBSYS_PAGING           (1 << 4)        ///< Paging
50 #define SUBSYS_SYSCALL          (1 << 5)        ///< System calls
51 #define SUBSYS_CAPS             (1 << 6)        ///< Capabilities
52 #define SUBSYS_DISPATCH         (1 << 7)        ///< Scheduling and dispatch
53 #define SUBSYS_IO               (1 << 8)        ///< Low-level IO operations
54
55 /**
56  * Kernel message loglevels.
57  */
58 #define LOG_PANIC       0       ///< Panic
59 #define LOG_ERR         1       ///< Error
60 #define LOG_WARN        2       ///< Warning
61 #define LOG_NOTE        3       ///< Notice
62 #define LOG_DEBUG       4       ///< Debug
63
64 void panic(const char *, ...)
65     __attribute__((noreturn, format(printf, 1, 2)));
66 void printk(int level, const char *msg, ...)
67     __attribute__ ((format(printf, 2, 3)));
68 int printf_nolog(const char * fmt, ...)
69     __attribute__ ((format(printf, 1, 2)));
70
71 /**
72  * Command-line variable to set kernel logging level.
73  */
74 extern int kernel_loglevel;
75
76 /**
77  * Command-line variable to control which subsystems log. Bits defined
78  * SUBSYS_* definitions in this file.
79  */
80 extern int kernel_log_subsystem_mask;
81
82 /**
83  * \brief Log a kernel debug message.
84  *
85  * Logs printf()-style debug message 'fmt' from subsystem 'subs'
86  * to the default kernel console(s). Additional arguments are like
87  * printf(). Whether the message is put out depends on the current
88  * kernel log level, as well as on the current kernel subsystem log
89  * mask.  'debug' is a macro so that the cost of marshalling the
90  * arguments is avoided if the relevant debugging is disabled.
91  *
92  * \param _subs     Subsystem this message stems from.
93  * \param _fmt      The message (printf() format string)
94  */
95
96 #define debug(_subs, _fmt, ...) \
97 do { \
98     if (((_subs) & kernel_log_subsystem_mask) && (kernel_loglevel >= LOG_DEBUG)) \
99         printk(LOG_DEBUG, _fmt, ## __VA_ARGS__); \
100 } while(0)
101
102 #endif // __KERNEL_LOGGING_H