diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ioctl_as.c | 21 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/vm_priv.h | 62 |
2 files changed, 73 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_as.c b/drivers/gpu/nvgpu/common/linux/ioctl_as.c index 4bbcedda..7a24a14f 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_as.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_as.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "gk20a/gk20a.h" | 28 | #include "gk20a/gk20a.h" |
29 | #include "gk20a/platform_gk20a.h" | 29 | #include "gk20a/platform_gk20a.h" |
30 | #include "ioctl_as.h" | 30 | #include "ioctl_as.h" |
31 | #include "vm_priv.h" | ||
31 | 32 | ||
32 | static int gk20a_as_ioctl_bind_channel( | 33 | static int gk20a_as_ioctl_bind_channel( |
33 | struct gk20a_as_share *as_share, | 34 | struct gk20a_as_share *as_share, |
@@ -72,7 +73,7 @@ static int gk20a_as_ioctl_map_buffer_ex( | |||
72 | { | 73 | { |
73 | gk20a_dbg_fn(""); | 74 | gk20a_dbg_fn(""); |
74 | 75 | ||
75 | return gk20a_vm_map_buffer(as_share->vm, args->dmabuf_fd, | 76 | return nvgpu_vm_map_buffer(as_share->vm, args->dmabuf_fd, |
76 | &args->offset, args->flags, | 77 | &args->offset, args->flags, |
77 | args->kind, | 78 | args->kind, |
78 | args->buffer_offset, | 79 | args->buffer_offset, |
@@ -85,7 +86,7 @@ static int gk20a_as_ioctl_map_buffer( | |||
85 | struct nvgpu_as_map_buffer_args *args) | 86 | struct nvgpu_as_map_buffer_args *args) |
86 | { | 87 | { |
87 | gk20a_dbg_fn(""); | 88 | gk20a_dbg_fn(""); |
88 | return gk20a_vm_map_buffer(as_share->vm, args->dmabuf_fd, | 89 | return nvgpu_vm_map_buffer(as_share->vm, args->dmabuf_fd, |
89 | &args->o_a.offset, | 90 | &args->o_a.offset, |
90 | args->flags, NV_KIND_DEFAULT, | 91 | args->flags, NV_KIND_DEFAULT, |
91 | 0, 0, NULL); | 92 | 0, 0, NULL); |
@@ -97,7 +98,7 @@ static int gk20a_as_ioctl_unmap_buffer( | |||
97 | struct nvgpu_as_unmap_buffer_args *args) | 98 | struct nvgpu_as_unmap_buffer_args *args) |
98 | { | 99 | { |
99 | gk20a_dbg_fn(""); | 100 | gk20a_dbg_fn(""); |
100 | return gk20a_vm_unmap_buffer(as_share->vm, args->offset, NULL); | 101 | return nvgpu_vm_unmap_buffer(as_share->vm, args->offset, NULL); |
101 | } | 102 | } |
102 | 103 | ||
103 | static int gk20a_as_ioctl_map_buffer_batch( | 104 | static int gk20a_as_ioctl_map_buffer_batch( |
@@ -123,7 +124,7 @@ static int gk20a_as_ioctl_map_buffer_batch( | |||
123 | args->num_maps > g->gpu_characteristics.map_buffer_batch_limit) | 124 | args->num_maps > g->gpu_characteristics.map_buffer_batch_limit) |
124 | return -EINVAL; | 125 | return -EINVAL; |
125 | 126 | ||
126 | gk20a_vm_mapping_batch_start(&batch); | 127 | nvgpu_vm_mapping_batch_start(&batch); |
127 | 128 | ||
128 | for (i = 0; i < args->num_unmaps; ++i) { | 129 | for (i = 0; i < args->num_unmaps; ++i) { |
129 | struct nvgpu_as_unmap_buffer_args unmap_args; | 130 | struct nvgpu_as_unmap_buffer_args unmap_args; |
@@ -134,14 +135,14 @@ static int gk20a_as_ioctl_map_buffer_batch( | |||
134 | break; | 135 | break; |
135 | } | 136 | } |
136 | 137 | ||
137 | err = gk20a_vm_unmap_buffer(as_share->vm, unmap_args.offset, | 138 | err = nvgpu_vm_unmap_buffer(as_share->vm, unmap_args.offset, |
138 | &batch); | 139 | &batch); |
139 | if (err) | 140 | if (err) |
140 | break; | 141 | break; |
141 | } | 142 | } |
142 | 143 | ||
143 | if (err) { | 144 | if (err) { |
144 | gk20a_vm_mapping_batch_finish(as_share->vm, &batch); | 145 | nvgpu_vm_mapping_batch_finish(as_share->vm, &batch); |
145 | 146 | ||
146 | args->num_unmaps = i; | 147 | args->num_unmaps = i; |
147 | args->num_maps = 0; | 148 | args->num_maps = 0; |
@@ -158,7 +159,7 @@ static int gk20a_as_ioctl_map_buffer_batch( | |||
158 | break; | 159 | break; |
159 | } | 160 | } |
160 | 161 | ||
161 | err = gk20a_vm_map_buffer( | 162 | err = nvgpu_vm_map_buffer( |
162 | as_share->vm, map_args.dmabuf_fd, | 163 | as_share->vm, map_args.dmabuf_fd, |
163 | &map_args.offset, map_args.flags, | 164 | &map_args.offset, map_args.flags, |
164 | map_args.kind, | 165 | map_args.kind, |
@@ -169,7 +170,7 @@ static int gk20a_as_ioctl_map_buffer_batch( | |||
169 | break; | 170 | break; |
170 | } | 171 | } |
171 | 172 | ||
172 | gk20a_vm_mapping_batch_finish(as_share->vm, &batch); | 173 | nvgpu_vm_mapping_batch_finish(as_share->vm, &batch); |
173 | 174 | ||
174 | if (err) | 175 | if (err) |
175 | args->num_maps = i; | 176 | args->num_maps = i; |
@@ -228,7 +229,7 @@ static int gk20a_as_ioctl_get_buffer_compbits_info( | |||
228 | struct nvgpu_as_get_buffer_compbits_info_args *args) | 229 | struct nvgpu_as_get_buffer_compbits_info_args *args) |
229 | { | 230 | { |
230 | gk20a_dbg_fn(""); | 231 | gk20a_dbg_fn(""); |
231 | return gk20a_vm_get_compbits_info(as_share->vm, | 232 | return nvgpu_vm_get_compbits_info(as_share->vm, |
232 | args->mapping_gva, | 233 | args->mapping_gva, |
233 | &args->compbits_win_size, | 234 | &args->compbits_win_size, |
234 | &args->compbits_win_ctagline, | 235 | &args->compbits_win_ctagline, |
@@ -241,7 +242,7 @@ static int gk20a_as_ioctl_map_buffer_compbits( | |||
241 | struct nvgpu_as_map_buffer_compbits_args *args) | 242 | struct nvgpu_as_map_buffer_compbits_args *args) |
242 | { | 243 | { |
243 | gk20a_dbg_fn(""); | 244 | gk20a_dbg_fn(""); |
244 | return gk20a_vm_map_compbits(as_share->vm, | 245 | return nvgpu_vm_map_compbits(as_share->vm, |
245 | args->mapping_gva, | 246 | args->mapping_gva, |
246 | &args->compbits_win_gva, | 247 | &args->compbits_win_gva, |
247 | &args->mapping_iova, | 248 | &args->mapping_iova, |
diff --git a/drivers/gpu/nvgpu/common/linux/vm_priv.h b/drivers/gpu/nvgpu/common/linux/vm_priv.h new file mode 100644 index 00000000..c0fb0ffe --- /dev/null +++ b/drivers/gpu/nvgpu/common/linux/vm_priv.h | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
15 | */ | ||
16 | |||
17 | #ifndef __COMMON_LINUX_VM_PRIV_H__ | ||
18 | #define __COMMON_LINUX_VM_PRIV_H__ | ||
19 | |||
20 | #include <nvgpu/types.h> | ||
21 | |||
22 | struct sg_table; | ||
23 | struct dma_buf; | ||
24 | |||
25 | struct vm_gk20a; | ||
26 | struct vm_gk20a_mapping_batch; | ||
27 | |||
28 | u64 nvgpu_vm_map(struct vm_gk20a *vm, | ||
29 | struct dma_buf *dmabuf, | ||
30 | u64 offset_align, | ||
31 | u32 flags /*NVGPU_AS_MAP_BUFFER_FLAGS_*/, | ||
32 | int kind, | ||
33 | struct sg_table **sgt, | ||
34 | bool user_mapped, | ||
35 | int rw_flag, | ||
36 | u64 buffer_offset, | ||
37 | u64 mapping_size, | ||
38 | struct vm_gk20a_mapping_batch *mapping_batch); | ||
39 | |||
40 | int nvgpu_vm_map_compbits(struct vm_gk20a *vm, | ||
41 | u64 mapping_gva, | ||
42 | u64 *compbits_win_gva, | ||
43 | u64 *mapping_iova, | ||
44 | u32 flags); | ||
45 | |||
46 | /* Note: batch may be NULL if map op is not part of a batch */ | ||
47 | int nvgpu_vm_map_buffer(struct vm_gk20a *vm, | ||
48 | int dmabuf_fd, | ||
49 | u64 *offset_align, | ||
50 | u32 flags, /* NVGPU_AS_MAP_BUFFER_FLAGS_ */ | ||
51 | int kind, | ||
52 | u64 buffer_offset, | ||
53 | u64 mapping_size, | ||
54 | struct vm_gk20a_mapping_batch *batch); | ||
55 | |||
56 | void nvgpu_vm_unmap(struct vm_gk20a *vm, u64 offset); | ||
57 | |||
58 | /* find buffer corresponding to va */ | ||
59 | int nvgpu_vm_find_buffer(struct vm_gk20a *vm, u64 gpu_va, | ||
60 | struct dma_buf **dmabuf, | ||
61 | u64 *offset); | ||
62 | #endif | ||