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 <sandeep_n@ti.com> |
7 | * Cyril Chemparathy <cyril@ti.com> |
8 | * Santosh Shilimkar <santosh.shilimkar@ti.com> |
9 | */ |
10 | |
11 | #ifndef __SOC_TI_KNAV_QMSS_H__ |
12 | #define __SOC_TI_KNAV_QMSS_H__ |
13 | |
14 | #include <linux/err.h> |
15 | #include <linux/time.h> |
16 | #include <linux/atomic.h> |
17 | #include <linux/device.h> |
18 | #include <linux/fcntl.h> |
19 | #include <linux/dma-mapping.h> |
20 | |
21 | /* queue types */ |
22 | #define KNAV_QUEUE_QPEND ((unsigned)-2) /* interruptible qpend queue */ |
23 | #define KNAV_QUEUE_ACC ((unsigned)-3) /* Accumulated queue */ |
24 | #define KNAV_QUEUE_GP ((unsigned)-4) /* General purpose queue */ |
25 | |
26 | /* queue flags */ |
27 | #define KNAV_QUEUE_SHARED 0x0001 /* Queue can be shared */ |
28 | |
29 | /** |
30 | * enum knav_queue_ctrl_cmd - queue operations. |
31 | * @KNAV_QUEUE_GET_ID: Get the ID number for an open queue |
32 | * @KNAV_QUEUE_FLUSH: forcibly empty a queue if possible |
33 | * @KNAV_QUEUE_SET_NOTIFIER: Set a notifier callback to a queue handle. |
34 | * @KNAV_QUEUE_ENABLE_NOTIFY: Enable notifier callback for a queue handle. |
35 | * @KNAV_QUEUE_DISABLE_NOTIFY: Disable notifier callback for a queue handle. |
36 | * @KNAV_QUEUE_GET_COUNT: Get number of queues. |
37 | */ |
38 | enum knav_queue_ctrl_cmd { |
39 | KNAV_QUEUE_GET_ID, |
40 | KNAV_QUEUE_FLUSH, |
41 | KNAV_QUEUE_SET_NOTIFIER, |
42 | KNAV_QUEUE_ENABLE_NOTIFY, |
43 | KNAV_QUEUE_DISABLE_NOTIFY, |
44 | KNAV_QUEUE_GET_COUNT |
45 | }; |
46 | |
47 | /* Queue notifier callback prototype */ |
48 | typedef void (*knav_queue_notify_fn)(void *arg); |
49 | |
50 | /** |
51 | * struct knav_queue_notify_config: Notifier configuration |
52 | * @fn: Notifier function |
53 | * @fn_arg: Notifier function arguments |
54 | */ |
55 | struct knav_queue_notify_config { |
56 | knav_queue_notify_fn fn; |
57 | void *fn_arg; |
58 | }; |
59 | |
60 | void *knav_queue_open(const char *name, unsigned id, |
61 | unsigned flags); |
62 | void knav_queue_close(void *qhandle); |
63 | int knav_queue_device_control(void *qhandle, |
64 | enum knav_queue_ctrl_cmd cmd, |
65 | unsigned long arg); |
66 | dma_addr_t knav_queue_pop(void *qhandle, unsigned *size); |
67 | int knav_queue_push(void *qhandle, dma_addr_t dma, |
68 | unsigned size, unsigned flags); |
69 | |
70 | void *knav_pool_create(const char *name, |
71 | int num_desc, int region_id); |
72 | void knav_pool_destroy(void *ph); |
73 | int knav_pool_count(void *ph); |
74 | void *knav_pool_desc_get(void *ph); |
75 | void knav_pool_desc_put(void *ph, void *desc); |
76 | int knav_pool_desc_map(void *ph, void *desc, unsigned size, |
77 | dma_addr_t *dma, unsigned *dma_sz); |
78 | void *knav_pool_desc_unmap(void *ph, dma_addr_t dma, unsigned dma_sz); |
79 | dma_addr_t knav_pool_desc_virt_to_dma(void *ph, void *virt); |
80 | void *knav_pool_desc_dma_to_virt(void *ph, dma_addr_t dma); |
81 | bool knav_qmss_device_ready(void); |
82 | |
83 | #endif /* __SOC_TI_KNAV_QMSS_H__ */ |
84 | |