sbi_fifo.h 947 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. #ifndef __SBI_FIFO_H__
  11. #define __SBI_FIFO_H__
  12. #include <sbi/riscv_locks.h>
  13. #include <sbi/sbi_types.h>
  14. struct sbi_fifo {
  15. void *queue;
  16. spinlock_t qlock;
  17. u16 entry_size;
  18. u16 num_entries;
  19. u16 avail;
  20. u16 tail;
  21. };
  22. enum sbi_fifo_inplace_update_types {
  23. SBI_FIFO_SKIP,
  24. SBI_FIFO_UPDATED,
  25. SBI_FIFO_UNCHANGED,
  26. };
  27. int sbi_fifo_dequeue(struct sbi_fifo *fifo, void *data);
  28. int sbi_fifo_enqueue(struct sbi_fifo *fifo, void *data);
  29. void sbi_fifo_init(struct sbi_fifo *fifo, void *queue_mem, u16 entries,
  30. u16 entry_size);
  31. bool sbi_fifo_is_empty(struct sbi_fifo *fifo);
  32. bool sbi_fifo_is_full(struct sbi_fifo *fifo);
  33. int sbi_fifo_inplace_update(struct sbi_fifo *fifo, void *in,
  34. int (*fptr)(void *in, void *data));
  35. u16 sbi_fifo_avail(struct sbi_fifo *fifo);
  36. #endif