2 * Keystone Navigator Queue Management Sub-System header
4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
5 * Author: Sandeep Nair <sandeep_n@ti.com>
6 * Cyril Chemparathy <cyril@ti.com>
7 * Santosh Shilimkar <santosh.shilimkar@ti.com>
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation version 2.
13 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
14 * kind, whether express or implied; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
19 #ifndef __SOC_TI_KNAV_QMSS_H__
20 #define __SOC_TI_KNAV_QMSS_H__
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>
30 #define KNAV_QUEUE_QPEND ((unsigned)-2) /* interruptible qpend queue */
31 #define KNAV_QUEUE_ACC ((unsigned)-3) /* Accumulated queue */
32 #define KNAV_QUEUE_GP ((unsigned)-4) /* General purpose queue */
35 #define KNAV_QUEUE_SHARED 0x0001 /* Queue can be shared */
38 * enum knav_queue_ctrl_cmd - queue operations.
39 * @KNAV_QUEUE_GET_ID: Get the ID number for an open queue
40 * @KNAV_QUEUE_FLUSH: forcibly empty a queue if possible
41 * @KNAV_QUEUE_SET_NOTIFIER: Set a notifier callback to a queue handle.
42 * @KNAV_QUEUE_ENABLE_NOTIFY: Enable notifier callback for a queue handle.
43 * @KNAV_QUEUE_DISABLE_NOTIFY: Disable notifier callback for a queue handle.
44 * @KNAV_QUEUE_GET_COUNT: Get number of queues.
46 enum knav_queue_ctrl_cmd
{
49 KNAV_QUEUE_SET_NOTIFIER
,
50 KNAV_QUEUE_ENABLE_NOTIFY
,
51 KNAV_QUEUE_DISABLE_NOTIFY
,
55 /* Queue notifier callback prototype */
56 typedef void (*knav_queue_notify_fn
)(void *arg
);
59 * struct knav_queue_notify_config: Notifier configuration
60 * @fn: Notifier function
61 * @fn_arg: Notifier function arguments
63 struct knav_queue_notify_config
{
64 knav_queue_notify_fn fn
;
68 void *knav_queue_open(const char *name
, unsigned id
,
70 void knav_queue_close(void *qhandle
);
71 int knav_queue_device_control(void *qhandle
,
72 enum knav_queue_ctrl_cmd cmd
,
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
);
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
);
90 #endif /* __SOC_TI_KNAV_QMSS_H__ */