xref: /aosp_15_r20/external/libdrm/tegra/tegra.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright © 2012, 2013 Thierry Reding
3*7688df22SAndroid Build Coastguard Worker  * Copyright © 2013 Erik Faye-Lund
4*7688df22SAndroid Build Coastguard Worker  * Copyright © 2014 NVIDIA Corporation
5*7688df22SAndroid Build Coastguard Worker  *
6*7688df22SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
7*7688df22SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
8*7688df22SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
9*7688df22SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10*7688df22SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
11*7688df22SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
12*7688df22SAndroid Build Coastguard Worker  *
13*7688df22SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
14*7688df22SAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
15*7688df22SAndroid Build Coastguard Worker  *
16*7688df22SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*7688df22SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*7688df22SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19*7688df22SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20*7688df22SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21*7688df22SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22*7688df22SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
23*7688df22SAndroid Build Coastguard Worker  */
24*7688df22SAndroid Build Coastguard Worker 
25*7688df22SAndroid Build Coastguard Worker #ifndef __DRM_TEGRA_H__
26*7688df22SAndroid Build Coastguard Worker #define __DRM_TEGRA_H__ 1
27*7688df22SAndroid Build Coastguard Worker 
28*7688df22SAndroid Build Coastguard Worker #include <stdint.h>
29*7688df22SAndroid Build Coastguard Worker #include <stdlib.h>
30*7688df22SAndroid Build Coastguard Worker 
31*7688df22SAndroid Build Coastguard Worker #include <tegra_drm.h>
32*7688df22SAndroid Build Coastguard Worker 
33*7688df22SAndroid Build Coastguard Worker enum drm_tegra_class {
34*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_HOST1X,
35*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_GR2D,
36*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_GR3D,
37*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_VIC,
38*7688df22SAndroid Build Coastguard Worker };
39*7688df22SAndroid Build Coastguard Worker 
40*7688df22SAndroid Build Coastguard Worker struct drm_tegra_bo;
41*7688df22SAndroid Build Coastguard Worker struct drm_tegra;
42*7688df22SAndroid Build Coastguard Worker 
43*7688df22SAndroid Build Coastguard Worker int drm_tegra_new(int fd, struct drm_tegra **drmp);
44*7688df22SAndroid Build Coastguard Worker void drm_tegra_close(struct drm_tegra *drm);
45*7688df22SAndroid Build Coastguard Worker 
46*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_new(struct drm_tegra *drm, uint32_t flags, uint32_t size,
47*7688df22SAndroid Build Coastguard Worker                      struct drm_tegra_bo **bop);
48*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_wrap(struct drm_tegra *drm, uint32_t handle, uint32_t flags,
49*7688df22SAndroid Build Coastguard Worker                       uint32_t size, struct drm_tegra_bo **bop);
50*7688df22SAndroid Build Coastguard Worker struct drm_tegra_bo *drm_tegra_bo_ref(struct drm_tegra_bo *bo);
51*7688df22SAndroid Build Coastguard Worker void drm_tegra_bo_unref(struct drm_tegra_bo *bo);
52*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_get_handle(struct drm_tegra_bo *bo, uint32_t *handle);
53*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_map(struct drm_tegra_bo *bo, void **ptr);
54*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_unmap(struct drm_tegra_bo *bo);
55*7688df22SAndroid Build Coastguard Worker 
56*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_get_name(struct drm_tegra_bo *bo, uint32_t *name);
57*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_open(struct drm_tegra *drm, uint32_t name, uint32_t flags,
58*7688df22SAndroid Build Coastguard Worker                       struct drm_tegra_bo **bop);
59*7688df22SAndroid Build Coastguard Worker 
60*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_export(struct drm_tegra_bo *bo, uint32_t flags);
61*7688df22SAndroid Build Coastguard Worker int drm_tegra_bo_import(struct drm_tegra *drm, int fd,
62*7688df22SAndroid Build Coastguard Worker                         struct drm_tegra_bo **bop);
63*7688df22SAndroid Build Coastguard Worker 
64*7688df22SAndroid Build Coastguard Worker struct drm_tegra_channel;
65*7688df22SAndroid Build Coastguard Worker struct drm_tegra_mapping;
66*7688df22SAndroid Build Coastguard Worker struct drm_tegra_pushbuf;
67*7688df22SAndroid Build Coastguard Worker struct drm_tegra_job;
68*7688df22SAndroid Build Coastguard Worker struct drm_tegra_syncpoint;
69*7688df22SAndroid Build Coastguard Worker 
70*7688df22SAndroid Build Coastguard Worker enum drm_tegra_sync_cond {
71*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_SYNC_COND_IMMEDIATE,
72*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_SYNC_COND_OP_DONE,
73*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_SYNC_COND_RD_DONE,
74*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_SYNC_COND_WR_SAFE,
75*7688df22SAndroid Build Coastguard Worker     DRM_TEGRA_SYNC_COND_MAX,
76*7688df22SAndroid Build Coastguard Worker   };
77*7688df22SAndroid Build Coastguard Worker 
78*7688df22SAndroid Build Coastguard Worker struct drm_tegra_fence {
79*7688df22SAndroid Build Coastguard Worker     struct drm_tegra *drm;
80*7688df22SAndroid Build Coastguard Worker     uint32_t syncpt;
81*7688df22SAndroid Build Coastguard Worker     uint32_t value;
82*7688df22SAndroid Build Coastguard Worker };
83*7688df22SAndroid Build Coastguard Worker 
84*7688df22SAndroid Build Coastguard Worker int drm_tegra_channel_open(struct drm_tegra *drm,
85*7688df22SAndroid Build Coastguard Worker                            enum drm_tegra_class client,
86*7688df22SAndroid Build Coastguard Worker                            struct drm_tegra_channel **channelp);
87*7688df22SAndroid Build Coastguard Worker int drm_tegra_channel_close(struct drm_tegra_channel *channel);
88*7688df22SAndroid Build Coastguard Worker unsigned int drm_tegra_channel_get_version(struct drm_tegra_channel *channel);
89*7688df22SAndroid Build Coastguard Worker int drm_tegra_channel_map(struct drm_tegra_channel *channel,
90*7688df22SAndroid Build Coastguard Worker                           struct drm_tegra_bo *bo, uint32_t flags,
91*7688df22SAndroid Build Coastguard Worker                           struct drm_tegra_mapping **mapp);
92*7688df22SAndroid Build Coastguard Worker int drm_tegra_channel_unmap(struct drm_tegra_mapping *map);
93*7688df22SAndroid Build Coastguard Worker 
94*7688df22SAndroid Build Coastguard Worker int drm_tegra_job_new(struct drm_tegra_channel *channel,
95*7688df22SAndroid Build Coastguard Worker                       struct drm_tegra_job **jobp);
96*7688df22SAndroid Build Coastguard Worker int drm_tegra_job_free(struct drm_tegra_job *job);
97*7688df22SAndroid Build Coastguard Worker int drm_tegra_job_get_pushbuf(struct drm_tegra_job *job,
98*7688df22SAndroid Build Coastguard Worker                               struct drm_tegra_pushbuf **pushbufp);
99*7688df22SAndroid Build Coastguard Worker int drm_tegra_job_submit(struct drm_tegra_job *job,
100*7688df22SAndroid Build Coastguard Worker                          struct drm_tegra_fence *fence);
101*7688df22SAndroid Build Coastguard Worker int drm_tegra_job_wait(struct drm_tegra_job *job, unsigned long timeout);
102*7688df22SAndroid Build Coastguard Worker 
103*7688df22SAndroid Build Coastguard Worker int drm_tegra_pushbuf_begin(struct drm_tegra_pushbuf *pushbuf,
104*7688df22SAndroid Build Coastguard Worker                             unsigned int words, uint32_t **ptrp);
105*7688df22SAndroid Build Coastguard Worker int drm_tegra_pushbuf_end(struct drm_tegra_pushbuf *pushbuf, uint32_t *ptr);
106*7688df22SAndroid Build Coastguard Worker int drm_tegra_pushbuf_wait(struct drm_tegra_pushbuf *pushbuf,
107*7688df22SAndroid Build Coastguard Worker                            struct drm_tegra_syncpoint *syncpt,
108*7688df22SAndroid Build Coastguard Worker                            uint32_t value);
109*7688df22SAndroid Build Coastguard Worker int drm_tegra_pushbuf_relocate(struct drm_tegra_pushbuf *pushbuf,
110*7688df22SAndroid Build Coastguard Worker                                uint32_t **ptrp,
111*7688df22SAndroid Build Coastguard Worker                                struct drm_tegra_mapping *target,
112*7688df22SAndroid Build Coastguard Worker                                unsigned long offset, unsigned int shift,
113*7688df22SAndroid Build Coastguard Worker                                uint32_t flags);
114*7688df22SAndroid Build Coastguard Worker int drm_tegra_pushbuf_sync(struct drm_tegra_pushbuf *pushbuf,
115*7688df22SAndroid Build Coastguard Worker                            struct drm_tegra_syncpoint *syncpt,
116*7688df22SAndroid Build Coastguard Worker                            unsigned int count);
117*7688df22SAndroid Build Coastguard Worker int drm_tegra_pushbuf_sync_cond(struct drm_tegra_pushbuf *pushbuf,
118*7688df22SAndroid Build Coastguard Worker                                 uint32_t **ptrp,
119*7688df22SAndroid Build Coastguard Worker                                 struct drm_tegra_syncpoint *syncpt,
120*7688df22SAndroid Build Coastguard Worker                                 enum drm_tegra_sync_cond cond);
121*7688df22SAndroid Build Coastguard Worker 
122*7688df22SAndroid Build Coastguard Worker int drm_tegra_syncpoint_new(struct drm_tegra *drm,
123*7688df22SAndroid Build Coastguard Worker                             struct drm_tegra_syncpoint **syncptp);
124*7688df22SAndroid Build Coastguard Worker int drm_tegra_syncpoint_free(struct drm_tegra_syncpoint *syncpt);
125*7688df22SAndroid Build Coastguard Worker int drm_tegra_fence_wait(struct drm_tegra_fence *fence, unsigned long timeout);
126*7688df22SAndroid Build Coastguard Worker 
127*7688df22SAndroid Build Coastguard Worker #endif /* __DRM_TEGRA_H__ */
128