blob: 9147549647396ef38bedad20a44e66779689ae5d [file] [log] [blame]
Andrew Scull18834872018-10-12 11:48:09 +01001/*
Andrew Walbran692b3252019-03-07 15:51:31 +00002 * Copyright 2018 The Hafnium Authors.
Andrew Scull18834872018-10-12 11:48:09 +01003 *
Andrew Walbrane959ec12020-06-17 15:01:09 +01004 * Use of this source code is governed by a BSD-style
5 * license that can be found in the LICENSE file or at
6 * https://opensource.org/licenses/BSD-3-Clause.
Andrew Scull18834872018-10-12 11:48:09 +01007 */
8
Andrew Scullfbc938a2018-08-20 14:09:28 +01009#pragma once
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010010
Wedson Almeida Filhofdf4afc2018-07-19 15:45:21 +010011#include <stdarg.h>
Andrew Walbran7f904bf2019-07-12 16:38:38 +010012#include <stddef.h>
Wedson Almeida Filhofdf4afc2018-07-19 15:45:21 +010013
Andrew Walbranb5ab43c2020-04-30 11:32:54 +010014#include "hf/ffa.h"
Andrew Walbranc1ad4ce2019-05-09 11:41:39 +010015
Andrew Walbranf3ac84d2019-07-26 16:10:02 +010016#define DLOG_BUFFER_SIZE 8192
17
Andrew Walbran17eebf92020-02-05 16:35:49 +000018#define LOG_LEVEL_NONE UINT32_C(0)
19#define LOG_LEVEL_ERROR UINT32_C(1)
20#define LOG_LEVEL_NOTICE UINT32_C(2)
21#define LOG_LEVEL_WARNING UINT32_C(3)
22#define LOG_LEVEL_INFO UINT32_C(4)
23#define LOG_LEVEL_VERBOSE UINT32_C(5)
24
Andrew Walbranf3ac84d2019-07-26 16:10:02 +010025extern size_t dlog_buffer_offset;
26extern char dlog_buffer[];
27
Andrew Scullfdd716e2018-12-20 05:37:31 +000028void dlog_enable_lock(void);
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010029void dlog(const char *fmt, ...);
Wedson Almeida Filhofdf4afc2018-07-19 15:45:21 +010030void vdlog(const char *fmt, va_list args);
Andrew Walbran17eebf92020-02-05 16:35:49 +000031
Demi Marie Obenour33f8a162023-02-14 12:21:41 -050032/*
33 * The do { ... } while (0) syntax is used to ensure that callers of
34 * these macros follow them with a semicolon.
35 *
36 * Run-time conditionals are preferred over preprocessor conditionals to ensure
37 * that the code is type-checked and linted unconditionally, even if it will not
38 * be executed at run-time. Logging statements that are disabled at
39 * compile-time are unreachable code and will be eliminated by compiler
40 * optimizations.
41 */
42#define dlog_error(...) \
43 do { \
44 if (LOG_LEVEL >= LOG_LEVEL_ERROR) { \
45 dlog("ERROR: " __VA_ARGS__); \
46 } \
47 } while (0)
Andrew Walbran17eebf92020-02-05 16:35:49 +000048
Demi Marie Obenour33f8a162023-02-14 12:21:41 -050049#define dlog_notice(...) \
50 do { \
51 if (LOG_LEVEL >= LOG_LEVEL_NOTICE) { \
52 dlog("NOTICE: " __VA_ARGS__); \
53 } \
54 } while (0)
Andrew Walbran17eebf92020-02-05 16:35:49 +000055
Demi Marie Obenour33f8a162023-02-14 12:21:41 -050056#define dlog_warning(...) \
57 do { \
58 if (LOG_LEVEL >= LOG_LEVEL_WARNING) { \
59 dlog("WARNING: " __VA_ARGS__); \
60 } \
61 } while (0)
Andrew Walbran17eebf92020-02-05 16:35:49 +000062
Demi Marie Obenour33f8a162023-02-14 12:21:41 -050063#define dlog_info(...) \
64 do { \
65 if (LOG_LEVEL >= LOG_LEVEL_WARNING) { \
66 dlog("INFO: " __VA_ARGS__); \
67 } \
68 } while (0)
Andrew Walbran17eebf92020-02-05 16:35:49 +000069
Demi Marie Obenour33f8a162023-02-14 12:21:41 -050070#define dlog_verbose(...) \
71 do { \
72 if (LOG_LEVEL >= LOG_LEVEL_VERBOSE) { \
73 dlog("VERBOSE: " __VA_ARGS__); \
74 } \
75 } while (0)
Andrew Walbranc1ad4ce2019-05-09 11:41:39 +010076
Andrew Walbranb5ab43c2020-04-30 11:32:54 +010077void dlog_flush_vm_buffer(ffa_vm_id_t id, char buffer[], size_t length);