]> Git Repo - J-linux.git/blob - drivers/infiniband/hw/hfi1/user_exp_rcv.h
Merge tag 'amd-drm-next-6.5-2023-06-09' of https://gitlab.freedesktop.org/agd5f/linux...
[J-linux.git] / drivers / infiniband / hw / hfi1 / user_exp_rcv.h
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_H
8 #define _HFI1_USER_EXP_RCV_H
9
10 #include "hfi.h"
11 #include "exp_rcv.h"
12
13 struct tid_pageset {
14         u16 idx;
15         u16 count;
16 };
17
18 struct 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
29 struct 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[];
40 };
41
42 static 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
51 int hfi1_user_exp_rcv_init(struct hfi1_filedata *fd,
52                            struct hfi1_ctxtdata *uctxt);
53 void hfi1_user_exp_rcv_free(struct hfi1_filedata *fd);
54 int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd,
55                             struct hfi1_tid_info *tinfo);
56 int hfi1_user_exp_rcv_clear(struct hfi1_filedata *fd,
57                             struct hfi1_tid_info *tinfo);
58 int hfi1_user_exp_rcv_invalid(struct hfi1_filedata *fd,
59                               struct hfi1_tid_info *tinfo);
60
61 static 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 */
This page took 0.033603 seconds and 4 git commands to generate.