sbi_fifo.h 963 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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_RESET,
  26. SBI_FIFO_UNCHANGED,
  27. };
  28. int sbi_fifo_dequeue(struct sbi_fifo *fifo, void *data);
  29. int sbi_fifo_enqueue(struct sbi_fifo *fifo, void *data);
  30. void sbi_fifo_init(struct sbi_fifo *fifo, void *queue_mem,
  31. u16 entries, u16 entry_size);
  32. bool sbi_fifo_is_empty(struct sbi_fifo *fifo);
  33. bool sbi_fifo_is_full(struct sbi_fifo *fifo);
  34. int sbi_fifo_inplace_update(struct sbi_fifo *fifo, void *in,
  35. int (*fptr) (void *in, void *data));
  36. u16 sbi_fifo_avail(struct sbi_fifo *fifo);
  37. #endif