summaryrefslogtreecommitdiff
path: root/kern/log.h
diff options
context:
space:
mode:
Diffstat (limited to 'kern/log.h')
-rw-r--r--kern/log.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/kern/log.h b/kern/log.h
new file mode 100644
index 00000000..a306ba36
--- /dev/null
+++ b/kern/log.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2017 Richard Braun.
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ * System logging.
+ */
+
+#ifndef _KERN_LOG_H
+#define _KERN_LOG_H
+
+#include <stdarg.h>
+
+enum {
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_NR_LEVELS,
+};
+
+/*
+ * Initialize the log module.
+ */
+void log_setup(void);
+
+/*
+ * Start the log thread.
+ */
+void log_start(void);
+
+/*
+ * Generate a message and send it to the log thread.
+ *
+ * Except for level, the arguments and return value are similar to printf().
+ *
+ * This function may safely be called in interrupt context.
+ */
+int log_msg(unsigned int level, const char *format, ...)
+ __attribute__((format(printf, 2, 3)));
+
+int log_vmsg(unsigned int level, const char *format, va_list ap)
+ __attribute__((format(printf, 2, 0)));
+
+/*
+ * Convenience wrappers.
+ */
+
+int log_emerg(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_alert(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_crit(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_err(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_warning(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_notice(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_info(const char *format, ...) __attribute__((format(printf, 1, 2)));
+int log_debug(const char *format, ...) __attribute__((format(printf, 1, 2)));
+
+int log_vemerg(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_valert(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_vcrit(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_verr(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_vwarning(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_vnotice(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_vinfo(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+int log_vdebug(const char *format, va_list ap)
+ __attribute__((format(printf, 1, 0)));
+
+#endif /* _KERN_LOG_H */