xref: /OK3568_Linux_fs/kernel/include/linux/soc/ti/knav_qmss.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Keystone Navigator Queue Management Sub-System header
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com
5*4882a593Smuzhiyun  * Author:	Sandeep Nair <sandeep_n@ti.com>
6*4882a593Smuzhiyun  *		Cyril Chemparathy <cyril@ti.com>
7*4882a593Smuzhiyun  *		Santosh Shilimkar <santosh.shilimkar@ti.com>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or
10*4882a593Smuzhiyun  * modify it under the terms of the GNU General Public License as
11*4882a593Smuzhiyun  * published by the Free Software Foundation version 2.
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
14*4882a593Smuzhiyun  * kind, whether express or implied; without even the implied warranty
15*4882a593Smuzhiyun  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*4882a593Smuzhiyun  * GNU General Public License for more details.
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #ifndef __SOC_TI_KNAV_QMSS_H__
20*4882a593Smuzhiyun #define __SOC_TI_KNAV_QMSS_H__
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #include <linux/err.h>
23*4882a593Smuzhiyun #include <linux/time.h>
24*4882a593Smuzhiyun #include <linux/atomic.h>
25*4882a593Smuzhiyun #include <linux/device.h>
26*4882a593Smuzhiyun #include <linux/fcntl.h>
27*4882a593Smuzhiyun #include <linux/dma-mapping.h>
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* queue types */
30*4882a593Smuzhiyun #define KNAV_QUEUE_QPEND	((unsigned)-2) /* interruptible qpend queue */
31*4882a593Smuzhiyun #define KNAV_QUEUE_ACC		((unsigned)-3) /* Accumulated queue */
32*4882a593Smuzhiyun #define KNAV_QUEUE_GP		((unsigned)-4) /* General purpose queue */
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /* queue flags */
35*4882a593Smuzhiyun #define KNAV_QUEUE_SHARED	0x0001		/* Queue can be shared */
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /**
38*4882a593Smuzhiyun  * enum knav_queue_ctrl_cmd -	queue operations.
39*4882a593Smuzhiyun  * @KNAV_QUEUE_GET_ID:		Get the ID number for an open queue
40*4882a593Smuzhiyun  * @KNAV_QUEUE_FLUSH:		forcibly empty a queue if possible
41*4882a593Smuzhiyun  * @KNAV_QUEUE_SET_NOTIFIER:	Set a notifier callback to a queue handle.
42*4882a593Smuzhiyun  * @KNAV_QUEUE_ENABLE_NOTIFY:	Enable notifier callback for a queue handle.
43*4882a593Smuzhiyun  * @KNAV_QUEUE_DISABLE_NOTIFY:	Disable notifier callback for a queue handle.
44*4882a593Smuzhiyun  * @KNAV_QUEUE_GET_COUNT:	Get number of queues.
45*4882a593Smuzhiyun  */
46*4882a593Smuzhiyun enum knav_queue_ctrl_cmd {
47*4882a593Smuzhiyun 	KNAV_QUEUE_GET_ID,
48*4882a593Smuzhiyun 	KNAV_QUEUE_FLUSH,
49*4882a593Smuzhiyun 	KNAV_QUEUE_SET_NOTIFIER,
50*4882a593Smuzhiyun 	KNAV_QUEUE_ENABLE_NOTIFY,
51*4882a593Smuzhiyun 	KNAV_QUEUE_DISABLE_NOTIFY,
52*4882a593Smuzhiyun 	KNAV_QUEUE_GET_COUNT
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun /* Queue notifier callback prototype */
56*4882a593Smuzhiyun typedef void (*knav_queue_notify_fn)(void *arg);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /**
59*4882a593Smuzhiyun  * struct knav_queue_notify_config:	Notifier configuration
60*4882a593Smuzhiyun  * @fn:					Notifier function
61*4882a593Smuzhiyun  * @fn_arg:				Notifier function arguments
62*4882a593Smuzhiyun  */
63*4882a593Smuzhiyun struct knav_queue_notify_config {
64*4882a593Smuzhiyun 	knav_queue_notify_fn fn;
65*4882a593Smuzhiyun 	void *fn_arg;
66*4882a593Smuzhiyun };
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun void *knav_queue_open(const char *name, unsigned id,
69*4882a593Smuzhiyun 					unsigned flags);
70*4882a593Smuzhiyun void knav_queue_close(void *qhandle);
71*4882a593Smuzhiyun int knav_queue_device_control(void *qhandle,
72*4882a593Smuzhiyun 				enum knav_queue_ctrl_cmd cmd,
73*4882a593Smuzhiyun 				unsigned long arg);
74*4882a593Smuzhiyun dma_addr_t knav_queue_pop(void *qhandle, unsigned *size);
75*4882a593Smuzhiyun int knav_queue_push(void *qhandle, dma_addr_t dma,
76*4882a593Smuzhiyun 				unsigned size, unsigned flags);
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun void *knav_pool_create(const char *name,
79*4882a593Smuzhiyun 				int num_desc, int region_id);
80*4882a593Smuzhiyun void knav_pool_destroy(void *ph);
81*4882a593Smuzhiyun int knav_pool_count(void *ph);
82*4882a593Smuzhiyun void *knav_pool_desc_get(void *ph);
83*4882a593Smuzhiyun void knav_pool_desc_put(void *ph, void *desc);
84*4882a593Smuzhiyun int knav_pool_desc_map(void *ph, void *desc, unsigned size,
85*4882a593Smuzhiyun 					dma_addr_t *dma, unsigned *dma_sz);
86*4882a593Smuzhiyun void *knav_pool_desc_unmap(void *ph, dma_addr_t dma, unsigned dma_sz);
87*4882a593Smuzhiyun dma_addr_t knav_pool_desc_virt_to_dma(void *ph, void *virt);
88*4882a593Smuzhiyun void *knav_pool_desc_dma_to_virt(void *ph, dma_addr_t dma);
89*4882a593Smuzhiyun bool knav_qmss_device_ready(void);
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #endif /* __SOC_TI_KNAV_QMSS_H__ */
92