/* * Copyright (c) 2018, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef SPRT_QUEUE_H #define SPRT_QUEUE_H #include /* Struct that defines a queue. Not to be used directly. */ struct __attribute__((__packed__)) sprt_queue { uint32_t entry_num; /* Number of entries */ uint32_t entry_size; /* Size of an entry */ uint32_t idx_write; /* Index of first empty entry */ uint32_t idx_read; /* Index of first entry to read */ uint8_t data[0]; /* Start of data */ }; #define SPRT_QUEUE_HEADER_SIZE (sizeof(struct sprt_queue)) /* * Initializes a memory region to be used as a queue of the given number of * entries with the specified size. */ void sprt_queue_init(void *queue_base, uint32_t entry_num, uint32_t entry_size); /* Returns 1 if the queue is empty, 0 otherwise */ int sprt_queue_is_empty(void *queue_base); /* Returns 1 if the queue is full, 0 otherwise */ int sprt_queue_is_full(void *queue_base); /* * Pushes a new entry intro the queue. Returns 0 on success, -ENOMEM if the * queue is full. */ int sprt_queue_push(void *queue_base, const void *entry); /* * Pops an entry from the queue. Returns 0 on success, -ENOENT if the queue is * empty. */ int sprt_queue_pop(void *queue_base, void *entry); #endif /* SPRT_QUEUE_H */