1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #ifndef __SOC_TI_KNAV_QMSS_H__
20 #define __SOC_TI_KNAV_QMSS_H__
21
22 #include <linux/err.h>
23 #include <linux/time.h>
24 #include <linux/atomic.h>
25 #include <linux/device.h>
26 #include <linux/fcntl.h>
27 #include <linux/dma-mapping.h>
28
29
30 #define KNAV_QUEUE_QPEND ((unsigned)-2)
31 #define KNAV_QUEUE_ACC ((unsigned)-3)
32 #define KNAV_QUEUE_GP ((unsigned)-4)
33
34
35 #define KNAV_QUEUE_SHARED 0x0001
36
37
38
39
40
41
42
43
44
45
46 enum knav_queue_ctrl_cmd {
47 KNAV_QUEUE_GET_ID,
48 KNAV_QUEUE_FLUSH,
49 KNAV_QUEUE_SET_NOTIFIER,
50 KNAV_QUEUE_ENABLE_NOTIFY,
51 KNAV_QUEUE_DISABLE_NOTIFY,
52 KNAV_QUEUE_GET_COUNT
53 };
54
55
56 typedef void (*knav_queue_notify_fn)(void *arg);
57
58
59
60
61
62
63 struct knav_queue_notify_config {
64 knav_queue_notify_fn fn;
65 void *fn_arg;
66 };
67
68 void *knav_queue_open(const char *name, unsigned id,
69 unsigned flags);
70 void knav_queue_close(void *qhandle);
71 int knav_queue_device_control(void *qhandle,
72 enum knav_queue_ctrl_cmd cmd,
73 unsigned long arg);
74 dma_addr_t knav_queue_pop(void *qhandle, unsigned *size);
75 int knav_queue_push(void *qhandle, dma_addr_t dma,
76 unsigned size, unsigned flags);
77
78 void *knav_pool_create(const char *name,
79 int num_desc, int region_id);
80 void knav_pool_destroy(void *ph);
81 int knav_pool_count(void *ph);
82 void *knav_pool_desc_get(void *ph);
83 void knav_pool_desc_put(void *ph, void *desc);
84 int knav_pool_desc_map(void *ph, void *desc, unsigned size,
85 dma_addr_t *dma, unsigned *dma_sz);
86 void *knav_pool_desc_unmap(void *ph, dma_addr_t dma, unsigned dma_sz);
87 dma_addr_t knav_pool_desc_virt_to_dma(void *ph, void *virt);
88 void *knav_pool_desc_dma_to_virt(void *ph, dma_addr_t dma);
89 bool knav_qmss_device_ready(void);
90
91 #endif