drm/tegra: Introduce tegra_drm_client structure
[linux-2.6.git] / drivers / gpu / host1x / host1x_bo.h
blob4c1f10bd773d1d37e328dbdd492843f6c44704b6
1 /*
2 * Tegra host1x Memory Management Abstraction header
4 * Copyright (c) 2012-2013, NVIDIA Corporation.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef _HOST1X_BO_H
20 #define _HOST1X_BO_H
22 struct host1x_bo;
24 struct host1x_bo_ops {
25 struct host1x_bo *(*get)(struct host1x_bo *bo);
26 void (*put)(struct host1x_bo *bo);
27 dma_addr_t (*pin)(struct host1x_bo *bo, struct sg_table **sgt);
28 void (*unpin)(struct host1x_bo *bo, struct sg_table *sgt);
29 void *(*mmap)(struct host1x_bo *bo);
30 void (*munmap)(struct host1x_bo *bo, void *addr);
31 void *(*kmap)(struct host1x_bo *bo, unsigned int pagenum);
32 void (*kunmap)(struct host1x_bo *bo, unsigned int pagenum, void *addr);
35 struct host1x_bo {
36 const struct host1x_bo_ops *ops;
39 static inline void host1x_bo_init(struct host1x_bo *bo,
40 const struct host1x_bo_ops *ops)
42 bo->ops = ops;
45 static inline struct host1x_bo *host1x_bo_get(struct host1x_bo *bo)
47 return bo->ops->get(bo);
50 static inline void host1x_bo_put(struct host1x_bo *bo)
52 bo->ops->put(bo);
55 static inline dma_addr_t host1x_bo_pin(struct host1x_bo *bo,
56 struct sg_table **sgt)
58 return bo->ops->pin(bo, sgt);
61 static inline void host1x_bo_unpin(struct host1x_bo *bo, struct sg_table *sgt)
63 bo->ops->unpin(bo, sgt);
66 static inline void *host1x_bo_mmap(struct host1x_bo *bo)
68 return bo->ops->mmap(bo);
71 static inline void host1x_bo_munmap(struct host1x_bo *bo, void *addr)
73 bo->ops->munmap(bo, addr);
76 static inline void *host1x_bo_kmap(struct host1x_bo *bo, unsigned int pagenum)
78 return bo->ops->kmap(bo, pagenum);
81 static inline void host1x_bo_kunmap(struct host1x_bo *bo,
82 unsigned int pagenum, void *addr)
84 bo->ops->kunmap(bo, pagenum, addr);
87 #endif