1 /* 2 * 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * GPL LICENSE SUMMARY 7 * 8 * Copyright(c) 2015 Intel Corporation. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of version 2 of the GNU General Public License as 12 * published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * BSD LICENSE 20 * 21 * Copyright(c) 2015 Intel Corporation. 22 * 23 * Redistribution and use in source and binary forms, with or without 24 * modification, are permitted provided that the following conditions 25 * are met: 26 * 27 * - Redistributions of source code must retain the above copyright 28 * notice, this list of conditions and the following disclaimer. 29 * - Redistributions in binary form must reproduce the above copyright 30 * notice, this list of conditions and the following disclaimer in 31 * the documentation and/or other materials provided with the 32 * distribution. 33 * - Neither the name of Intel Corporation nor the names of its 34 * contributors may be used to endorse or promote products derived 35 * from this software without specific prior written permission. 36 * 37 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 38 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 39 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 40 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 41 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 44 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 45 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 46 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 47 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 48 * 49 */ 50 #include <linux/device.h> 51 #include <linux/wait.h> 52 53 #include "common.h" 54 #include "iowait.h" 55 56 #define EXP_TID_TIDLEN_MASK 0x7FFULL 57 #define EXP_TID_TIDLEN_SHIFT 0 58 #define EXP_TID_TIDCTRL_MASK 0x3ULL 59 #define EXP_TID_TIDCTRL_SHIFT 20 60 #define EXP_TID_TIDIDX_MASK 0x7FFULL 61 #define EXP_TID_TIDIDX_SHIFT 22 62 #define EXP_TID_GET(tid, field) \ 63 (((tid) >> EXP_TID_TID##field##_SHIFT) & EXP_TID_TID##field##_MASK) 64 65 extern uint extended_psn; 66 67 struct hfi1_user_sdma_pkt_q { 68 struct list_head list; 69 unsigned ctxt; 70 unsigned subctxt; 71 u16 n_max_reqs; 72 atomic_t n_reqs; 73 u16 reqidx; 74 struct hfi1_devdata *dd; 75 struct kmem_cache *txreq_cache; 76 struct user_sdma_request *reqs; 77 struct iowait busy; 78 unsigned state; 79 }; 80 81 struct hfi1_user_sdma_comp_q { 82 u16 nentries; 83 struct hfi1_sdma_comp_entry *comps; 84 }; 85 86 int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *, struct file *); 87 int hfi1_user_sdma_free_queues(struct hfi1_filedata *); 88 int hfi1_user_sdma_process_request(struct file *, struct iovec *, unsigned long, 89 unsigned long *); 90