/* * Copyright (c) 2015 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * @file * @brief Event logger support. */ #ifndef __EVENT_LOGGER_H__ #define __EVENT_LOGGER_H__ #define EVENT_HEADER_SIZE 1 #ifndef _ASMLANGUAGE #include #include #include struct event_logger { struct nano_sem sync_sema; struct ring_buf ring_buf; }; /** * @brief Initialize the event logger. * * @details Initialize the ring buffer. * * @param logger Logger to be initialized. * @param logger_buffer Pointer to the buffer to be used by the logger. * @param buffer_size Size of the buffer in 32-bit words. * * @return No return value. */ void sys_event_logger_init(struct event_logger *logger, uint32_t *logger_buffer, uint32_t buffer_size); /** * @brief Send an event message to the logger. * * @details Add an event message to the ring buffer and signal the sync * semaphore to inform that there are event messages available. * * @param logger Pointer to the event logger used. * @param event_id The identification of the profiler event. * @param event_data Pointer to the data of the message. * @param data_size Size of the buffer in 32-bit words. * * @return No return value. */ void sys_event_logger_put(struct event_logger *logger, uint16_t event_id, uint32_t *event_data, uint8_t data_size); /** * @brief Retrieve an event message from the logger. * * @details Retrieve an event message from the ring buffer and copy it to the * provided buffer. If the provided buffer is smaller than the message * size the function returns -EMSGSIZE. Otherwise return the number of 32-bit * words copied. The function retrieves messages in FIFO order. If there is no * message in the buffer the function returns immediately. It can only be called * from a fiber. * * @param logger Pointer to the event logger used. * @param event_id Pointer to the id of the event fetched * @param dropped_event_count Pointer to how many events were dropped * @param buffer Pointer to the buffer where the message will be copied. * @param buffer_size Size of the buffer in 32-bit words. Updated with the * actual message size. * * @return -EMSGSIZE if the buffer size is smaller than the message size, or * the amount of 32-bit words copied. 0 (zero) if there was no message already * available. */ int sys_event_logger_get(struct event_logger *logger, uint16_t *event_id, uint8_t *dropped_event_count, uint32_t *buffer, uint8_t *buffer_size); /** * @brief Retrieve an event message from the logger, wait if empty. * * @details Retrieve an event message from the ring buffer and copy it to the * provided buffer. If the provided buffer is smaller than the message * size the function returns -EMSGSIZE. Otherwise return the number of 32-bit * words copied. The function retrieves messages in FIFO order. The caller pends * if there is no message available in the buffer. It can only be called from a * fiber. * * @param logger Pointer to the event logger used. * @param event_id Pointer to the id of the event fetched * @param dropped_event_count Pointer to how many events were dropped * @param buffer Pointer to the buffer where the message will be copied. * @param buffer_size Size of the buffer in 32-bit words. Updated with the * actual message size. * * @return -EMSGSIZE if the buffer size is smaller than the message size. Or * the amount of DWORDs copied. */ int sys_event_logger_get_wait(struct event_logger *logger, uint16_t *event_id, uint8_t *dropped_event_count, uint32_t *buffer, uint8_t *buffer_size); #ifdef CONFIG_NANO_TIMEOUTS /** * @brief Retrieve an event message from the logger, wait with a timeout if * empty. * * @details Retrieve an event message from the ring buffer and copy it to the * provided buffer. If the provided buffer is smaller than the message * size the function returns -EMSGSIZE. Otherwise return the number of dwords * copied. The function retrieves messages in FIFO order. The caller pends if * there is no message available in the buffer until a new message is added or * the timeout expires. It can only be called from a fiber. * * @param logger Pointer to the event logger used. * @param event_id Pointer to the id of the event fetched * @param dropped_event_count Pointer to how many events were dropped * @param buffer Pointer to the buffer where the message will be copied. * @param buffer_size Size of the buffer in 32-bit words. Updated with the * actual message size. * @param timeout Timeout in ticks. * * @return -EMSGSIZE if the buffer size is smaller than the message size. Or * the amount of 32-bit words copied. 0 (zero) if the timeout expired and there * was no message already available. */ int sys_event_logger_get_wait_timeout(struct event_logger *logger, uint16_t *event_id, uint8_t *dropped_event_count, uint32_t *buffer, uint8_t *buffer_size, uint32_t timeout); #endif /* CONFIG_NANO_TIMEOUTS */ #endif /* _ASMLANGUAGE */ #endif /* __EVENT_LOGGER_H__ */