1f48ad614SDennis Dalessandro #ifndef _HFI1_USER_EXP_RCV_H 2f48ad614SDennis Dalessandro #define _HFI1_USER_EXP_RCV_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 50f48ad614SDennis Dalessandro #include "hfi.h" 51f48ad614SDennis Dalessandro 529c1a99c3SMike Marciniszyn #include "exp_rcv.h" 53f48ad614SDennis Dalessandro 54637f4600SHarish Chegondi struct tid_pageset { 55637f4600SHarish Chegondi u16 idx; 56637f4600SHarish Chegondi u16 count; 57637f4600SHarish Chegondi }; 58637f4600SHarish Chegondi 599dc11709SHarish Chegondi struct tid_user_buf { 609dc11709SHarish Chegondi unsigned long vaddr; 619dc11709SHarish Chegondi unsigned long length; 629dc11709SHarish Chegondi unsigned int npages; 639dc11709SHarish Chegondi struct page **pages; 649dc11709SHarish Chegondi struct tid_pageset *psets; 659dc11709SHarish Chegondi unsigned int n_psets; 669dc11709SHarish Chegondi }; 679dc11709SHarish Chegondi 68637f4600SHarish Chegondi struct tid_rb_node { 69637f4600SHarish Chegondi struct mmu_rb_node mmu; 70637f4600SHarish Chegondi unsigned long phys; 71637f4600SHarish Chegondi struct tid_group *grp; 72637f4600SHarish Chegondi u32 rcventry; 73637f4600SHarish Chegondi dma_addr_t dma_addr; 74637f4600SHarish Chegondi bool freed; 75637f4600SHarish Chegondi unsigned int npages; 76637f4600SHarish Chegondi struct page *pages[0]; 77637f4600SHarish Chegondi }; 78637f4600SHarish Chegondi 79ddd3affbSHarish Chegondi static inline int num_user_pages(unsigned long addr, 80ddd3affbSHarish Chegondi unsigned long len) 81ddd3affbSHarish Chegondi { 82ddd3affbSHarish Chegondi const unsigned long spage = addr & PAGE_MASK; 83ddd3affbSHarish Chegondi const unsigned long epage = (addr + len - 1) & PAGE_MASK; 84ddd3affbSHarish Chegondi 85ddd3affbSHarish Chegondi return 1 + ((epage - spage) >> PAGE_SHIFT); 86ddd3affbSHarish Chegondi } 87ddd3affbSHarish Chegondi 88e87473bcSMichael J. Ruhl int hfi1_user_exp_rcv_init(struct hfi1_filedata *fd, 89e87473bcSMichael J. Ruhl struct hfi1_ctxtdata *uctxt); 909b60d2cbSMichael J. Ruhl void hfi1_user_exp_rcv_free(struct hfi1_filedata *fd); 915042cddfSMichael J. Ruhl int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd, 925042cddfSMichael J. Ruhl struct hfi1_tid_info *tinfo); 935042cddfSMichael J. Ruhl int hfi1_user_exp_rcv_clear(struct hfi1_filedata *fd, 945042cddfSMichael J. Ruhl struct hfi1_tid_info *tinfo); 955042cddfSMichael J. Ruhl int hfi1_user_exp_rcv_invalid(struct hfi1_filedata *fd, 965042cddfSMichael J. Ruhl struct hfi1_tid_info *tinfo); 97f48ad614SDennis Dalessandro 98f48ad614SDennis Dalessandro #endif /* _HFI1_USER_EXP_RCV_H */ 99