1*d83cc019SAndroid Build Coastguard Worker #include "gem_msm.h"
2*d83cc019SAndroid Build Coastguard Worker #include "drm-uapi/msm_drm.h"
3*d83cc019SAndroid Build Coastguard Worker
4*d83cc019SAndroid Build Coastguard Worker #include "drm.h"
5*d83cc019SAndroid Build Coastguard Worker
gem_msm_mmap(void ** ptr,int drm_fd,uint32_t gem_handle,size_t size)6*d83cc019SAndroid Build Coastguard Worker static int gem_msm_mmap(void **ptr, int drm_fd, uint32_t gem_handle, size_t size)
7*d83cc019SAndroid Build Coastguard Worker {
8*d83cc019SAndroid Build Coastguard Worker struct drm_msm_gem_cpu_prep gem_prep = {
9*d83cc019SAndroid Build Coastguard Worker .handle = gem_handle,
10*d83cc019SAndroid Build Coastguard Worker .op = MSM_PREP_READ,
11*d83cc019SAndroid Build Coastguard Worker .timeout = { .tv_sec = 1, .tv_nsec = 0 }
12*d83cc019SAndroid Build Coastguard Worker };
13*d83cc019SAndroid Build Coastguard Worker
14*d83cc019SAndroid Build Coastguard Worker if (drmIoctl(drm_fd, DRM_IOCTL_MSM_GEM_CPU_PREP, &gem_prep))
15*d83cc019SAndroid Build Coastguard Worker {
16*d83cc019SAndroid Build Coastguard Worker return -1;
17*d83cc019SAndroid Build Coastguard Worker }
18*d83cc019SAndroid Build Coastguard Worker
19*d83cc019SAndroid Build Coastguard Worker struct drm_msm_gem_info gem_info = {
20*d83cc019SAndroid Build Coastguard Worker .handle = gem_handle,
21*d83cc019SAndroid Build Coastguard Worker .flags = 0,
22*d83cc019SAndroid Build Coastguard Worker .offset = 0
23*d83cc019SAndroid Build Coastguard Worker };
24*d83cc019SAndroid Build Coastguard Worker
25*d83cc019SAndroid Build Coastguard Worker if (drmIoctl(drm_fd, DRM_IOCTL_MSM_GEM_INFO, &gem_info))
26*d83cc019SAndroid Build Coastguard Worker {
27*d83cc019SAndroid Build Coastguard Worker return -1;
28*d83cc019SAndroid Build Coastguard Worker }
29*d83cc019SAndroid Build Coastguard Worker
30*d83cc019SAndroid Build Coastguard Worker void *const k_addr = 0;
31*d83cc019SAndroid Build Coastguard Worker const int k_prot = PROT_READ | PROT_WRITE;
32*d83cc019SAndroid Build Coastguard Worker const int k_flags = MAP_SHARED;
33*d83cc019SAndroid Build Coastguard Worker
34*d83cc019SAndroid Build Coastguard Worker void *ret = mmap(k_addr, size, k_prot, k_flags, drm_fd, gem_info.offset);
35*d83cc019SAndroid Build Coastguard Worker
36*d83cc019SAndroid Build Coastguard Worker if (ret == MAP_FAILED)
37*d83cc019SAndroid Build Coastguard Worker {
38*d83cc019SAndroid Build Coastguard Worker return -1;
39*d83cc019SAndroid Build Coastguard Worker }
40*d83cc019SAndroid Build Coastguard Worker
41*d83cc019SAndroid Build Coastguard Worker *ptr = ret;
42*d83cc019SAndroid Build Coastguard Worker
43*d83cc019SAndroid Build Coastguard Worker return 0;
44*d83cc019SAndroid Build Coastguard Worker }
45*d83cc019SAndroid Build Coastguard Worker
gem_msm_munmap(int drm_fd,uint32_t gem_handle,void * ptr,size_t size)46*d83cc019SAndroid Build Coastguard Worker static int gem_msm_munmap(int drm_fd, uint32_t gem_handle, void *ptr, size_t size)
47*d83cc019SAndroid Build Coastguard Worker {
48*d83cc019SAndroid Build Coastguard Worker if (munmap(ptr, size))
49*d83cc019SAndroid Build Coastguard Worker {
50*d83cc019SAndroid Build Coastguard Worker return -1;
51*d83cc019SAndroid Build Coastguard Worker }
52*d83cc019SAndroid Build Coastguard Worker
53*d83cc019SAndroid Build Coastguard Worker struct drm_msm_gem_cpu_fini gem_fini = {
54*d83cc019SAndroid Build Coastguard Worker .handle = gem_handle
55*d83cc019SAndroid Build Coastguard Worker };
56*d83cc019SAndroid Build Coastguard Worker
57*d83cc019SAndroid Build Coastguard Worker if (drmIoctl(drm_fd, DRM_IOCTL_MSM_GEM_CPU_FINI, &gem_fini))
58*d83cc019SAndroid Build Coastguard Worker {
59*d83cc019SAndroid Build Coastguard Worker return -1;
60*d83cc019SAndroid Build Coastguard Worker }
61*d83cc019SAndroid Build Coastguard Worker
62*d83cc019SAndroid Build Coastguard Worker return 0;
63*d83cc019SAndroid Build Coastguard Worker }
64*d83cc019SAndroid Build Coastguard Worker
65*d83cc019SAndroid Build Coastguard Worker struct gem_driver gem_msm_driver = {
66*d83cc019SAndroid Build Coastguard Worker .mmap = gem_msm_mmap,
67*d83cc019SAndroid Build Coastguard Worker .munmap = gem_msm_munmap
68*d83cc019SAndroid Build Coastguard Worker };
69