knav_qmss.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Keystone Navigator Queue Management Sub-System header
  4. *
  5. * Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com
  6. * Author: Sandeep Nair <[email protected]>
  7. * Cyril Chemparathy <[email protected]>
  8. * Santosh Shilimkar <[email protected]>
  9. */
  10. #ifndef __SOC_TI_KNAV_QMSS_H__
  11. #define __SOC_TI_KNAV_QMSS_H__
  12. #include <linux/err.h>
  13. #include <linux/time.h>
  14. #include <linux/atomic.h>
  15. #include <linux/device.h>
  16. #include <linux/fcntl.h>
  17. #include <linux/dma-mapping.h>
  18. /* queue types */
  19. #define KNAV_QUEUE_QPEND ((unsigned)-2) /* interruptible qpend queue */
  20. #define KNAV_QUEUE_ACC ((unsigned)-3) /* Accumulated queue */
  21. #define KNAV_QUEUE_GP ((unsigned)-4) /* General purpose queue */
  22. /* queue flags */
  23. #define KNAV_QUEUE_SHARED 0x0001 /* Queue can be shared */
  24. /**
  25. * enum knav_queue_ctrl_cmd - queue operations.
  26. * @KNAV_QUEUE_GET_ID: Get the ID number for an open queue
  27. * @KNAV_QUEUE_FLUSH: forcibly empty a queue if possible
  28. * @KNAV_QUEUE_SET_NOTIFIER: Set a notifier callback to a queue handle.
  29. * @KNAV_QUEUE_ENABLE_NOTIFY: Enable notifier callback for a queue handle.
  30. * @KNAV_QUEUE_DISABLE_NOTIFY: Disable notifier callback for a queue handle.
  31. * @KNAV_QUEUE_GET_COUNT: Get number of queues.
  32. */
  33. enum knav_queue_ctrl_cmd {
  34. KNAV_QUEUE_GET_ID,
  35. KNAV_QUEUE_FLUSH,
  36. KNAV_QUEUE_SET_NOTIFIER,
  37. KNAV_QUEUE_ENABLE_NOTIFY,
  38. KNAV_QUEUE_DISABLE_NOTIFY,
  39. KNAV_QUEUE_GET_COUNT
  40. };
  41. /* Queue notifier callback prototype */
  42. typedef void (*knav_queue_notify_fn)(void *arg);
  43. /**
  44. * struct knav_queue_notify_config: Notifier configuration
  45. * @fn: Notifier function
  46. * @fn_arg: Notifier function arguments
  47. */
  48. struct knav_queue_notify_config {
  49. knav_queue_notify_fn fn;
  50. void *fn_arg;
  51. };
  52. void *knav_queue_open(const char *name, unsigned id,
  53. unsigned flags);
  54. void knav_queue_close(void *qhandle);
  55. int knav_queue_device_control(void *qhandle,
  56. enum knav_queue_ctrl_cmd cmd,
  57. unsigned long arg);
  58. dma_addr_t knav_queue_pop(void *qhandle, unsigned *size);
  59. int knav_queue_push(void *qhandle, dma_addr_t dma,
  60. unsigned size, unsigned flags);
  61. void *knav_pool_create(const char *name,
  62. int num_desc, int region_id);
  63. void knav_pool_destroy(void *ph);
  64. int knav_pool_count(void *ph);
  65. void *knav_pool_desc_get(void *ph);
  66. void knav_pool_desc_put(void *ph, void *desc);
  67. int knav_pool_desc_map(void *ph, void *desc, unsigned size,
  68. dma_addr_t *dma, unsigned *dma_sz);
  69. void *knav_pool_desc_unmap(void *ph, dma_addr_t dma, unsigned dma_sz);
  70. dma_addr_t knav_pool_desc_virt_to_dma(void *ph, void *virt);
  71. void *knav_pool_desc_dma_to_virt(void *ph, dma_addr_t dma);
  72. bool knav_qmss_device_ready(void);
  73. #endif /* __SOC_TI_KNAV_QMSS_H__ */