97 lines
2.2 KiB
C
97 lines
2.2 KiB
C
/*
|
|
* Copyright (c) 2021 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#ifndef ZEPHYR_SUBSYS_LOGGING_LOG_CACHE_H_
|
|
#define ZEPHYR_SUBSYS_LOGGING_LOG_CACHE_H_
|
|
|
|
#include <zephyr/sys/slist.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct log_cache_entry {
|
|
sys_snode_t node;
|
|
uintptr_t id;
|
|
uint8_t data[];
|
|
};
|
|
|
|
typedef bool (*log_cache_cmp_func_t)(uintptr_t id0, uintptr_t id1);
|
|
|
|
struct log_cache_config {
|
|
void *buf;
|
|
size_t buf_len;
|
|
size_t item_size;
|
|
log_cache_cmp_func_t cmp;
|
|
};
|
|
|
|
struct log_cache {
|
|
sys_slist_t active;
|
|
sys_slist_t idle;
|
|
log_cache_cmp_func_t cmp;
|
|
uint32_t hit;
|
|
uint32_t miss;
|
|
size_t item_size;
|
|
};
|
|
|
|
int log_cache_init(struct log_cache *cache, const struct log_cache_config *config);
|
|
|
|
/** @brief Get cached entry or buffer to fill new data for caching.
|
|
*
|
|
* @param[in] cache Cache object.
|
|
* @param[in] id Identication.
|
|
* @param[out] data Location.
|
|
*
|
|
* @retval true if entry with given @p id was found and @p data contains pointer to it.
|
|
* @retval false if entry was not found and @p data points to the empty location.
|
|
*/
|
|
bool log_cache_get(struct log_cache *cache, uintptr_t id, uint8_t **data);
|
|
|
|
/** @brief Put new entry into cache.
|
|
*
|
|
* @param cache Cache object.
|
|
* @param data Buffer filled with new data. It must point to the location returned by
|
|
* @ref log_cache_get.
|
|
*/
|
|
void log_cache_put(struct log_cache *cache, uint8_t *data);
|
|
|
|
/** @brief Release entry.
|
|
*
|
|
* Release entry that was allocated by @ref log_cache_get when requested id was
|
|
* not found in the cache. Releasing puts entry in idle list.
|
|
*
|
|
* @param cache Cache object.
|
|
* @param data It must point to the location returned by @ref log_cache_get.
|
|
*/
|
|
void log_cache_release(struct log_cache *cache, uint8_t *data);
|
|
|
|
/** @brief Get hit count.
|
|
*
|
|
* @param cache Cache object.
|
|
*
|
|
* @return Number of hits.
|
|
*/
|
|
static inline uint32_t log_cache_get_hit(struct log_cache *cache)
|
|
{
|
|
return cache->hit;
|
|
}
|
|
|
|
/** @brief Get miss count.
|
|
*
|
|
* @param cache Cache object.
|
|
*
|
|
* @return Number of misses.
|
|
*/
|
|
static inline uint32_t log_cache_get_miss(struct log_cache *cache)
|
|
{
|
|
return cache->miss;
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ZEPHYR_SUBSYS_LOGGING_LOG_CACHE_H_ */
|