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