1 /* 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2019 Western Digital Corporation or its affiliates. 5 * 6 * Authors: 7 * Atish Patra<atish.patra@wdc.com> 8 * 9 */ 10 11 #ifndef __SBI_FIFO_H__ 12 #define __SBI_FIFO_H__ 13 14 #include <sbi/riscv_locks.h> 15 #include <sbi/sbi_types.h> 16 17 struct sbi_fifo { 18 void *queue; 19 spinlock_t qlock; 20 u16 entry_size; 21 u16 num_entries; 22 u16 avail; 23 u16 tail; 24 }; 25 26 enum sbi_fifo_inplace_update_types { 27 SBI_FIFO_SKIP, 28 SBI_FIFO_UPDATED, 29 SBI_FIFO_UNCHANGED, 30 }; 31 32 int sbi_fifo_dequeue(struct sbi_fifo *fifo, void *data); 33 int sbi_fifo_enqueue(struct sbi_fifo *fifo, void *data); 34 void sbi_fifo_init(struct sbi_fifo *fifo, void *queue_mem, u16 entries, 35 u16 entry_size); 36 bool sbi_fifo_is_empty(struct sbi_fifo *fifo); 37 bool sbi_fifo_is_full(struct sbi_fifo *fifo); 38 int sbi_fifo_inplace_update(struct sbi_fifo *fifo, void *in, 39 int (*fptr)(void *in, void *data)); 40 u16 sbi_fifo_avail(struct sbi_fifo *fifo); 41 42 #endif 43