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