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