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