Blame view

include/rdma/ib_umem.h 3.33 KB
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  /*
   * Copyright (c) 2007 Cisco Systems.  All rights reserved.
   *
   * This software is available to you under a choice of one of two
   * licenses.  You may choose to be licensed under the terms of the GNU
   * General Public License (GPL) Version 2, available from the file
   * COPYING in the main directory of this source tree, or the
   * OpenIB.org BSD license below:
   *
   *     Redistribution and use in source and binary forms, with or
   *     without modification, are permitted provided that the following
   *     conditions are met:
   *
   *      - Redistributions of source code must retain the above
   *        copyright notice, this list of conditions and the following
   *        disclaimer.
   *
   *      - Redistributions in binary form must reproduce the above
   *        copyright notice, this list of conditions and the following
   *        disclaimer in the documentation and/or other materials
   *        provided with the distribution.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
   * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
   * SOFTWARE.
   */
  
  #ifndef IB_UMEM_H
  #define IB_UMEM_H
  
  #include <linux/list.h>
  #include <linux/scatterlist.h>
e8edc6e03   Alexey Dobriyan   Detach sched.h fr...
38
  #include <linux/workqueue.h>
b0ea0fa54   Jason Gunthorpe   IB/{core,hw}: Hav...
39
  #include <rdma/ib_verbs.h>
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
40
41
  
  struct ib_ucontext;
8ada2c1c0   Shachar Raindel   IB/core: Add supp...
42
  struct ib_umem_odp;
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
43
44
  
  struct ib_umem {
47f725ee7   Jason Gunthorpe   RDMA/odp: remove ...
45
  	struct ib_device       *ibdev;
d4b4dd1b9   Jason Gunthorpe   RDMA/umem: Do not...
46
  	struct mm_struct       *owning_mm;
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
47
  	size_t			length;
406f9e5fa   Haggai Eran   IB/core: Replace ...
48
  	unsigned long		address;
597ecc5a0   Jason Gunthorpe   RDMA/umem: Get ri...
49
  	u32 writable : 1;
597ecc5a0   Jason Gunthorpe   RDMA/umem: Get ri...
50
  	u32 is_odp : 1;
1bf66a304   Roland Dreier   IB: Put rlimit ac...
51
  	struct work_struct	work;
eeb8461e3   Yishai Hadas   IB: Refactor umem...
52
53
  	struct sg_table sg_head;
  	int             nmap;
d10bcf947   Shiraz Saleem   RDMA/umem: Combin...
54
  	unsigned int    sg_nents;
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
55
  };
406f9e5fa   Haggai Eran   IB/core: Replace ...
56
57
58
  /* Returns the offset of the umem start relative to the first page. */
  static inline int ib_umem_offset(struct ib_umem *umem)
  {
d2183c6f1   Jason Gunthorpe   RDMA/umem: Move p...
59
  	return umem->address & ~PAGE_MASK;
406f9e5fa   Haggai Eran   IB/core: Replace ...
60
61
62
63
  }
  
  static inline size_t ib_umem_num_pages(struct ib_umem *umem)
  {
d2183c6f1   Jason Gunthorpe   RDMA/umem: Move p...
64
65
66
  	return (ALIGN(umem->address + umem->length, PAGE_SIZE) -
  		ALIGN_DOWN(umem->address, PAGE_SIZE)) >>
  	       PAGE_SHIFT;
406f9e5fa   Haggai Eran   IB/core: Replace ...
67
  }
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
68
  #ifdef CONFIG_INFINIBAND_USER_MEM
b0ea0fa54   Jason Gunthorpe   IB/{core,hw}: Hav...
69
  struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr,
cb9fbc5c3   Arthur Kepner   IB: expand ib_ume...
70
  			    size_t size, int access, int dmasync);
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
71
72
  void ib_umem_release(struct ib_umem *umem);
  int ib_umem_page_count(struct ib_umem *umem);
c5d76f130   Haggai Eran   IB/core: Add umem...
73
74
  int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offset,
  		      size_t length);
4a3533995   Shiraz Saleem   RDMA/umem: Add AP...
75
76
77
  unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,
  				     unsigned long pgsz_bitmap,
  				     unsigned long virt);
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
78
79
80
81
  
  #else /* CONFIG_INFINIBAND_USER_MEM */
  
  #include <linux/err.h>
b0ea0fa54   Jason Gunthorpe   IB/{core,hw}: Hav...
82
  static inline struct ib_umem *ib_umem_get(struct ib_udata *udata,
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
83
  					  unsigned long addr, size_t size,
b0ea0fa54   Jason Gunthorpe   IB/{core,hw}: Hav...
84
85
  					  int access, int dmasync)
  {
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
86
87
88
89
  	return ERR_PTR(-EINVAL);
  }
  static inline void ib_umem_release(struct ib_umem *umem) { }
  static inline int ib_umem_page_count(struct ib_umem *umem) { return 0; }
c1395a2a8   Haggai Eran   IB/mlx5: Add func...
90
91
92
93
  static inline int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offset,
  		      		    size_t length) {
  	return -EINVAL;
  }
4a3533995   Shiraz Saleem   RDMA/umem: Add AP...
94
95
96
97
98
  static inline int ib_umem_find_best_pgsz(struct ib_umem *umem,
  					 unsigned long pgsz_bitmap,
  					 unsigned long virt) {
  	return -EINVAL;
  }
f7c6a7b5d   Roland Dreier   IB/uverbs: Export...
99
100
101
  #endif /* CONFIG_INFINIBAND_USER_MEM */
  
  #endif /* IB_UMEM_H */