brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 055726f Raw
67 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */2/*3 * Copyright(c) 2020 - Cornelis Networks, Inc.4 * Copyright(c) 2015 - 2017 Intel Corporation.5 */6 7#ifndef _HFI1_USER_EXP_RCV_H8#define _HFI1_USER_EXP_RCV_H9 10#include "hfi.h"11#include "exp_rcv.h"12 13struct tid_pageset {14	u16 idx;15	u16 count;16};17 18struct tid_user_buf {19	struct mmu_interval_notifier notifier;20	struct mutex cover_mutex;21	unsigned long vaddr;22	unsigned long length;23	unsigned int npages;24	struct page **pages;25	struct tid_pageset *psets;26	unsigned int n_psets;27};28 29struct tid_rb_node {30	struct mmu_interval_notifier notifier;31	struct hfi1_filedata *fdata;32	struct mutex invalidate_mutex; /* covers hw removal */33	unsigned long phys;34	struct tid_group *grp;35	u32 rcventry;36	dma_addr_t dma_addr;37	bool freed;38	unsigned int npages;39	struct page *pages[] __counted_by(npages);40};41 42static inline int num_user_pages(unsigned long addr,43				 unsigned long len)44{45	const unsigned long spage = addr & PAGE_MASK;46	const unsigned long epage = (addr + len - 1) & PAGE_MASK;47 48	return 1 + ((epage - spage) >> PAGE_SHIFT);49}50 51int hfi1_user_exp_rcv_init(struct hfi1_filedata *fd,52			   struct hfi1_ctxtdata *uctxt);53void hfi1_user_exp_rcv_free(struct hfi1_filedata *fd);54int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd,55			    struct hfi1_tid_info *tinfo);56int hfi1_user_exp_rcv_clear(struct hfi1_filedata *fd,57			    struct hfi1_tid_info *tinfo);58int hfi1_user_exp_rcv_invalid(struct hfi1_filedata *fd,59			      struct hfi1_tid_info *tinfo);60 61static inline struct mm_struct *mm_from_tid_node(struct tid_rb_node *node)62{63	return node->notifier.mm;64}65 66#endif /* _HFI1_USER_EXP_RCV_H */67