xref: /aosp_15_r20/external/mesa3d/src/nouveau/winsys/nouveau_bo.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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