1*61046927SAndroid Build Coastguard Worker #ifndef NOUVEAU_BO
2*61046927SAndroid Build Coastguard Worker #define NOUVEAU_BO 1
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Worker #include "nouveau_private.h"
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker #include "nouveau_device.h"
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
9*61046927SAndroid Build Coastguard Worker #include <atomic>
10*61046927SAndroid Build Coastguard Worker using std::atomic_uint_fast32_t;
11*61046927SAndroid Build Coastguard Worker #else
12*61046927SAndroid Build Coastguard Worker #include <stdatomic.h>
13*61046927SAndroid Build Coastguard Worker #endif
14*61046927SAndroid Build Coastguard Worker
15*61046927SAndroid Build Coastguard Worker #include <sys/mman.h>
16*61046927SAndroid Build Coastguard Worker
17*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
18*61046927SAndroid Build Coastguard Worker extern "C" {
19*61046927SAndroid Build Coastguard Worker #endif
20*61046927SAndroid Build Coastguard Worker
21*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_flags {
22*61046927SAndroid Build Coastguard Worker /* vram or gart depending on GPU */
23*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_VRAM = 1 << 0,
24*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_GART = 1 << 1,
25*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_MAP = 1 << 2,
26*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_NO_SHARE = 1 << 3,
27*61046927SAndroid Build Coastguard Worker };
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_map_flags {
30*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_RD = 1 << 0,
31*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_WR = 1 << 1,
32*61046927SAndroid Build Coastguard Worker NOUVEAU_WS_BO_RDWR = NOUVEAU_WS_BO_RD | NOUVEAU_WS_BO_WR,
33*61046927SAndroid Build Coastguard Worker };
34*61046927SAndroid Build Coastguard Worker
35*61046927SAndroid Build Coastguard Worker struct nouveau_ws_bo {
36*61046927SAndroid Build Coastguard Worker struct nouveau_ws_device *dev;
37*61046927SAndroid Build Coastguard Worker uint64_t size;
38*61046927SAndroid Build Coastguard Worker uint64_t map_handle;
39*61046927SAndroid Build Coastguard Worker uint32_t handle;
40*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_flags flags;
41*61046927SAndroid Build Coastguard Worker atomic_uint_fast32_t refcnt;
42*61046927SAndroid Build Coastguard Worker };
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard Worker void nouveau_ws_bo_bind_vma(struct nouveau_ws_device *dev,
45*61046927SAndroid Build Coastguard Worker struct nouveau_ws_bo *bo,
46*61046927SAndroid Build Coastguard Worker uint64_t addr,
47*61046927SAndroid Build Coastguard Worker uint64_t range,
48*61046927SAndroid Build Coastguard Worker uint64_t bo_offset,
49*61046927SAndroid Build Coastguard Worker uint32_t pte_kind);
50*61046927SAndroid Build Coastguard Worker void nouveau_ws_bo_unbind_vma(struct nouveau_ws_device *dev,
51*61046927SAndroid Build Coastguard Worker uint64_t offset, uint64_t range);
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker struct nouveau_ws_bo *nouveau_ws_bo_new(struct nouveau_ws_device *,
54*61046927SAndroid Build Coastguard Worker uint64_t size, uint64_t align,
55*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_flags);
56*61046927SAndroid Build Coastguard Worker struct nouveau_ws_bo *nouveau_ws_bo_new_mapped(struct nouveau_ws_device *,
57*61046927SAndroid Build Coastguard Worker uint64_t size, uint64_t align,
58*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_flags,
59*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_map_flags map_flags,
60*61046927SAndroid Build Coastguard Worker void **map_out);
61*61046927SAndroid Build Coastguard Worker struct nouveau_ws_bo *nouveau_ws_bo_new_tiled(struct nouveau_ws_device *,
62*61046927SAndroid Build Coastguard Worker uint64_t size, uint64_t align,
63*61046927SAndroid Build Coastguard Worker uint8_t pte_kind,
64*61046927SAndroid Build Coastguard Worker uint16_t tile_mode,
65*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_flags);
66*61046927SAndroid Build Coastguard Worker struct nouveau_ws_bo *nouveau_ws_bo_from_dma_buf(struct nouveau_ws_device *,
67*61046927SAndroid Build Coastguard Worker int fd);
68*61046927SAndroid Build Coastguard Worker void nouveau_ws_bo_destroy(struct nouveau_ws_bo *);
69*61046927SAndroid Build Coastguard Worker void *nouveau_ws_bo_map(struct nouveau_ws_bo *,
70*61046927SAndroid Build Coastguard Worker enum nouveau_ws_bo_map_flags);
71*61046927SAndroid Build Coastguard Worker void nouveau_ws_bo_unmap(struct nouveau_ws_bo *bo, void *ptr);
72*61046927SAndroid Build Coastguard Worker bool nouveau_ws_bo_wait(struct nouveau_ws_bo *, enum nouveau_ws_bo_map_flags flags);
73*61046927SAndroid Build Coastguard Worker int nouveau_ws_bo_dma_buf(struct nouveau_ws_bo *, int *fd);
74*61046927SAndroid Build Coastguard Worker
75*61046927SAndroid Build Coastguard Worker static inline void
nouveau_ws_bo_ref(struct nouveau_ws_bo * bo)76*61046927SAndroid Build Coastguard Worker nouveau_ws_bo_ref(struct nouveau_ws_bo *bo)
77*61046927SAndroid Build Coastguard Worker {
78*61046927SAndroid Build Coastguard Worker bo->refcnt++;
79*61046927SAndroid Build Coastguard Worker }
80*61046927SAndroid Build Coastguard Worker
81*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
82*61046927SAndroid Build Coastguard Worker }
83*61046927SAndroid Build Coastguard Worker #endif
84*61046927SAndroid Build Coastguard Worker
85*61046927SAndroid Build Coastguard Worker #endif
86