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