Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / linux / soc / ti / knav_qmss.h
diff --git a/kernel/include/linux/soc/ti/knav_qmss.h b/kernel/include/linux/soc/ti/knav_qmss.h
new file mode 100644 (file)
index 0000000..9f0ebb3
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Keystone Navigator Queue Management Sub-System header
+ *
+ * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
+ * Author:     Sandeep Nair <sandeep_n@ti.com>
+ *             Cyril Chemparathy <cyril@ti.com>
+ *             Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef __SOC_TI_KNAV_QMSS_H__
+#define __SOC_TI_KNAV_QMSS_H__
+
+#include <linux/err.h>
+#include <linux/time.h>
+#include <linux/atomic.h>
+#include <linux/device.h>
+#include <linux/fcntl.h>
+#include <linux/dma-mapping.h>
+
+/* queue types */
+#define KNAV_QUEUE_QPEND       ((unsigned)-2) /* interruptible qpend queue */
+#define KNAV_QUEUE_ACC         ((unsigned)-3) /* Accumulated queue */
+#define KNAV_QUEUE_GP          ((unsigned)-4) /* General purpose queue */
+
+/* queue flags */
+#define KNAV_QUEUE_SHARED      0x0001          /* Queue can be shared */
+
+/**
+ * enum knav_queue_ctrl_cmd -  queue operations.
+ * @KNAV_QUEUE_GET_ID:         Get the ID number for an open queue
+ * @KNAV_QUEUE_FLUSH:          forcibly empty a queue if possible
+ * @KNAV_QUEUE_SET_NOTIFIER:   Set a notifier callback to a queue handle.
+ * @KNAV_QUEUE_ENABLE_NOTIFY:  Enable notifier callback for a queue handle.
+ * @KNAV_QUEUE_DISABLE_NOTIFY: Disable notifier callback for a queue handle.
+ * @KNAV_QUEUE_GET_COUNT:      Get number of queues.
+ */
+enum knav_queue_ctrl_cmd {
+       KNAV_QUEUE_GET_ID,
+       KNAV_QUEUE_FLUSH,
+       KNAV_QUEUE_SET_NOTIFIER,
+       KNAV_QUEUE_ENABLE_NOTIFY,
+       KNAV_QUEUE_DISABLE_NOTIFY,
+       KNAV_QUEUE_GET_COUNT
+};
+
+/* Queue notifier callback prototype */
+typedef void (*knav_queue_notify_fn)(void *arg);
+
+/**
+ * struct knav_queue_notify_config:    Notifier configuration
+ * @fn:                                        Notifier function
+ * @fn_arg:                            Notifier function arguments
+ */
+struct knav_queue_notify_config {
+       knav_queue_notify_fn fn;
+       void *fn_arg;
+};
+
+void *knav_queue_open(const char *name, unsigned id,
+                                       unsigned flags);
+void knav_queue_close(void *qhandle);
+int knav_queue_device_control(void *qhandle,
+                               enum knav_queue_ctrl_cmd cmd,
+                               unsigned long arg);
+dma_addr_t knav_queue_pop(void *qhandle, unsigned *size);
+int knav_queue_push(void *qhandle, dma_addr_t dma,
+                               unsigned size, unsigned flags);
+
+void *knav_pool_create(const char *name,
+                               int num_desc, int region_id);
+void knav_pool_destroy(void *ph);
+int knav_pool_count(void *ph);
+void *knav_pool_desc_get(void *ph);
+void knav_pool_desc_put(void *ph, void *desc);
+int knav_pool_desc_map(void *ph, void *desc, unsigned size,
+                                       dma_addr_t *dma, unsigned *dma_sz);
+void *knav_pool_desc_unmap(void *ph, dma_addr_t dma, unsigned dma_sz);
+dma_addr_t knav_pool_desc_virt_to_dma(void *ph, void *virt);
+void *knav_pool_desc_dma_to_virt(void *ph, dma_addr_t dma);
+
+#endif /* __SOC_TI_KNAV_QMSS_H__ */