/* * Copyright (c) 2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_LOGGING_LOG_INTERNAL_H_ #define ZEPHYR_INCLUDE_LOGGING_LOG_INTERNAL_H_ #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* Header contains declarations of functions used internally in the logging, * shared between various portions of logging subsystem. Functions are internal * not intended to be used outside, including logging backends. */ /** @brief Structure wrapper to be used for memory section. */ struct log_mpsc_pbuf { struct mpsc_pbuf_buffer buf; }; /** @brief Structure wrapper to be used for memory section. */ struct log_msg_ptr { union log_msg_generic *msg; }; /** @brief Indicate to the log core that one log message has been dropped. * * @param buffered True if dropped message was already buffered and it is being * dropped to free space for another message. False if message is being dropped * because allocation failed. */ void z_log_dropped(bool buffered); /** @brief Read and clear current drop indications counter. * * @return Dropped count. */ uint32_t z_log_dropped_read_and_clear(void); /** @brief Check if there are any pending drop notifications. * * @retval true Pending unreported drop indications. * @retval false No pending unreported drop indications. */ bool z_log_dropped_pending(void); /** @brief Free allocated buffer. * * @param buf Buffer. */ void z_log_free(void *buf); /* Initialize runtime filters */ void z_log_runtime_filters_init(void); /* Initialize links. */ void z_log_links_initiate(void); /* Activate links. * Attemp to activate links, * * @param active_mask Mask with links to activate. N bit set indicates that Nth * link should be activated. * * @param[in, out] offset Offset assigned to domains. Initialize to 0 before first use. * * @return Mask with links that still remain inactive. */ uint32_t z_log_links_activate(uint32_t active_mask, uint8_t *offset); /* Notify log_core that a backend was enabled. */ void z_log_notify_backend_enabled(void); /** @brief Get pointer to the filter set of the log source. * * @param source_id Source ID. * * @return Pointer to the filter set. */ static inline uint32_t *z_log_dynamic_filters_get(uint32_t source_id) { return &TYPE_SECTION_START(log_dynamic)[source_id].filters; } /** @brief Get number of registered sources. */ static inline uint32_t z_log_sources_count(void) { return log_const_source_id(TYPE_SECTION_END(log_const)); } /** @brief Return number of external domains. * * @return Number of external domains. */ uint8_t z_log_ext_domain_count(void); /** @brief Initialize module for handling logging message. */ void z_log_msg_init(void); /** @brief Commit log message. * * @param msg Message. */ void z_log_msg_commit(struct log_msg *msg); /** @brief Get pending log message. * * @param[out] backoff Recommended backoff needed to maintain ordering of processed * messages. Used only when links are using dedicated buffers. */ union log_msg_generic *z_log_msg_claim(k_timeout_t *backoff); /** @brief Free message. * * @param msg Message. */ void z_log_msg_free(union log_msg_generic *msg); /** @brief Check if there are any message pending. * * @retval true if at least one message is pending. * @retval false if no message is pending. */ bool z_log_msg_pending(void); static inline void z_log_notify_drop(const struct mpsc_pbuf_buffer *buffer, const union mpsc_pbuf_generic *item) { ARG_UNUSED(buffer); ARG_UNUSED(item); z_log_dropped(true); } /** @brief Get tag. * * @return Tag. Null if feature is disabled. */ const char *z_log_get_tag(void); /** @brief Check if domain is local. * * @param domain_id Domain ID. * * @return True if domain is local. */ static inline bool z_log_is_local_domain(uint8_t domain_id) { return !IS_ENABLED(CONFIG_LOG_MULTIDOMAIN) || (domain_id == Z_LOG_LOCAL_DOMAIN_ID); } /** @brief Get timestamp. * * @return Timestamp. */ log_timestamp_t z_log_timestamp(void); #ifdef __cplusplus } #endif #endif /* ZEPHYR_INCLUDE_LOGGING_LOG_INTERNAL_H_ */