diff options
author | Antonio Nino Diaz <antonio.ninodiaz@arm.com> | 2018-11-08 09:21:48 +0000 |
---|---|---|
committer | Antonio Nino Diaz <antonio.ninodiaz@arm.com> | 2018-12-11 15:04:24 +0000 |
commit | 07c13a30d275d5310d71ca5130726ccf2c1cbcc8 (patch) | |
tree | 00b583c396f78a651018771aca122861e79ba469 /lib/sprt/sprt_queue.h | |
parent | 56ae97924dc80fe1f6fea4896b118d0ca3ea8814 (diff) |
SPM: Introduce SPRT C host library
Change-Id: If57ec9cc0791f49d9ade83dff9d24ef9047963a8
Co-authored-by: Jean-Paul Etienne <jean-paul.etienne@arm.com>
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Diffstat (limited to 'lib/sprt/sprt_queue.h')
-rw-r--r-- | lib/sprt/sprt_queue.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/sprt/sprt_queue.h b/lib/sprt/sprt_queue.h new file mode 100644 index 00000000..4ea1bc23 --- /dev/null +++ b/lib/sprt/sprt_queue.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2018, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef SPRT_QUEUE_H +#define SPRT_QUEUE_H + +#include <stdint.h> + +/* 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 */ |