Line data Source code
1 0 : /*
2 : * Copyright (c) 2021 Nordic Semiconductor ASA
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 : #ifndef ZEPHYR_INCLUDE_LOGGING_LOG_INTERNAL_H_
7 : #define ZEPHYR_INCLUDE_LOGGING_LOG_INTERNAL_H_
8 :
9 : #include <zephyr/types.h>
10 : #include <zephyr/sys/__assert.h>
11 : #include <zephyr/logging/log_core.h>
12 : #include <zephyr/sys/mpsc_pbuf.h>
13 :
14 : #ifdef __cplusplus
15 : extern "C" {
16 : #endif
17 :
18 : /* Header contains declarations of functions used internally in the logging,
19 : * shared between various portions of logging subsystem. Functions are internal
20 : * not intended to be used outside, including logging backends.
21 : */
22 :
23 : /** @brief Structure wrapper to be used for memory section. */
24 1 : struct log_mpsc_pbuf {
25 0 : struct mpsc_pbuf_buffer buf;
26 : };
27 :
28 : /** @brief Structure wrapper to be used for memory section. */
29 1 : struct log_msg_ptr {
30 0 : union log_msg_generic *msg;
31 : };
32 :
33 : /** @brief Indicate to the log core that one log message has been dropped.
34 : *
35 : * @param buffered True if dropped message was already buffered and it is being
36 : * dropped to free space for another message. False if message is being dropped
37 : * because allocation failed.
38 : */
39 : void z_log_dropped(bool buffered);
40 :
41 : /** @brief Read and clear current drop indications counter.
42 : *
43 : * @return Dropped count.
44 : */
45 : uint32_t z_log_dropped_read_and_clear(void);
46 :
47 : /** @brief Check if there are any pending drop notifications.
48 : *
49 : * @retval true Pending unreported drop indications.
50 : * @retval false No pending unreported drop indications.
51 : */
52 : bool z_log_dropped_pending(void);
53 :
54 : /** @brief Free allocated buffer.
55 : *
56 : * @param buf Buffer.
57 : */
58 : void z_log_free(void *buf);
59 :
60 : /* Initialize runtime filters */
61 : void z_log_runtime_filters_init(void);
62 :
63 : /* Initialize links. */
64 : void z_log_links_initiate(void);
65 :
66 : /* Activate links.
67 : * Attempt to activate links,
68 : *
69 : * @param active_mask Mask with links to activate. N bit set indicates that Nth
70 : * link should be activated.
71 : *
72 : * @param[in, out] offset Offset assigned to domains. Initialize to 0 before first use.
73 : *
74 : * @return Mask with links that still remain inactive.
75 : */
76 : uint32_t z_log_links_activate(uint32_t active_mask, uint8_t *offset);
77 :
78 : /* Notify log_core that a backend was enabled. */
79 : void z_log_notify_backend_enabled(void);
80 :
81 : /** @brief Get pointer to the filter set of the log source.
82 : *
83 : * @param source_id Source ID.
84 : *
85 : * @return Pointer to the filter set.
86 : */
87 : static inline uint32_t *z_log_dynamic_filters_get(uint32_t source_id)
88 : {
89 : return &TYPE_SECTION_START(log_dynamic)[source_id].filters;
90 : }
91 :
92 : /** @brief Get number of registered sources. */
93 : static inline uint32_t z_log_sources_count(void)
94 : {
95 : return log_const_source_id(TYPE_SECTION_END(log_const));
96 : }
97 :
98 : /** @brief Return number of external domains.
99 : *
100 : * @return Number of external domains.
101 : */
102 : uint8_t z_log_ext_domain_count(void);
103 :
104 : /** @brief Initialize module for handling logging message. */
105 : void z_log_msg_init(void);
106 :
107 : /** @brief Commit log message.
108 : *
109 : * @param msg Message.
110 : */
111 : void z_log_msg_commit(struct log_msg *msg);
112 :
113 : /** @brief Get pending log message.
114 : *
115 : * @param[out] backoff Recommended backoff needed to maintain ordering of processed
116 : * messages. Used only when links are using dedicated buffers.
117 : */
118 : union log_msg_generic *z_log_msg_claim(k_timeout_t *backoff);
119 :
120 : /** @brief Free message.
121 : *
122 : * @param msg Message.
123 : */
124 : void z_log_msg_free(union log_msg_generic *msg);
125 :
126 : /** @brief Check if there are any message pending.
127 : *
128 : * @retval true if at least one message is pending.
129 : * @retval false if no message is pending.
130 : */
131 : bool z_log_msg_pending(void);
132 :
133 : static inline void z_log_notify_drop(const struct mpsc_pbuf_buffer *buffer,
134 : const union mpsc_pbuf_generic *item)
135 : {
136 : ARG_UNUSED(buffer);
137 : ARG_UNUSED(item);
138 :
139 : z_log_dropped(true);
140 : }
141 :
142 : /** @brief Get tag.
143 : *
144 : * @return Tag. Null if feature is disabled.
145 : */
146 : const char *z_log_get_tag(void);
147 :
148 : /** @brief Check if domain is local.
149 : *
150 : * @param domain_id Domain ID.
151 : *
152 : * @return True if domain is local.
153 : */
154 : static inline bool z_log_is_local_domain(uint8_t domain_id)
155 : {
156 : return !IS_ENABLED(CONFIG_LOG_MULTIDOMAIN) ||
157 : (domain_id == Z_LOG_LOCAL_DOMAIN_ID);
158 : }
159 :
160 : /** @brief Get timestamp.
161 : *
162 : * @return Timestamp.
163 : */
164 : log_timestamp_t z_log_timestamp(void);
165 :
166 : #ifdef __cplusplus
167 : }
168 : #endif
169 :
170 : #endif /* ZEPHYR_INCLUDE_LOGGING_LOG_INTERNAL_H_ */
|