1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed* Copyright (c) 2011, The Linux Foundation. All rights reserved.
3befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
4befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* Redistribution and use in source and binary forms, with or without
5befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* modification, are permitted provided that the following conditions are
6befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* met:
7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*    * Redistributions of source code must retain the above copyright
8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      notice, this list of conditions and the following disclaimer.
9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*    * Redistributions in binary form must reproduce the above
10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      copyright notice, this list of conditions and the following
11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      disclaimer in the documentation and/or other materials provided
12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      with the distribution.
1347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed*    * Neither the name of The Linux Foundation nor the names of its
14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      contributors may be used to endorse or promote products derived
15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*      from this software without specific prior written permission.
16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*
17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed*/
29befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
30befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifndef MDP_WRAPPER_H
31befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define MDP_WRAPPER_H
32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* In order to make overlay::mdp_wrapper shorter, please do something like:
35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* namespace mdpwrap = overlay::mdp_wrapper;
36befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* */
37befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
38befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <linux/msm_mdp.h>
39befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <linux/msm_rotator.h>
40befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <sys/ioctl.h>
41befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <utils/Log.h>
42befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <errno.h>
43befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include "overlayUtils.h"
44befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
451029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah#define IOCTL_DEBUG 0
461029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah
47befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace overlay{
48befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
49befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace mdp_wrapper{
50befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* FBIOGET_FSCREENINFO */
51befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool getFScreenInfo(int fd, fb_fix_screeninfo& finfo);
52befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
53befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* FBIOGET_VSCREENINFO */
54befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool getVScreenInfo(int fd, fb_var_screeninfo& vinfo);
55befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
56befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* FBIOPUT_VSCREENINFO */
57befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool setVScreenInfo(int fd, fb_var_screeninfo& vinfo);
58befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
59befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSM_ROTATOR_IOCTL_START */
60befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool startRotator(int fd, msm_rotator_img_info& rot);
61befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
62befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSM_ROTATOR_IOCTL_ROTATE */
63befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool rotate(int fd, msm_rotator_data_info& rot);
64befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
65befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSMFB_OVERLAY_SET */
66befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool setOverlay(int fd, mdp_overlay& ov);
67befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
681029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah/* MSMFB_OVERLAY_PREPARE */
691029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shahbool validateAndSet(const int& fd, mdp_overlay_list& list);
701029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah
71befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSM_ROTATOR_IOCTL_FINISH */
72befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool endRotator(int fd, int sessionId);
73befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
74befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSMFB_OVERLAY_UNSET */
75befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool unsetOverlay(int fd, int ovId);
76befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
77befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSMFB_OVERLAY_GET */
78befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool getOverlay(int fd, mdp_overlay& ov);
79befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
80befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSMFB_OVERLAY_PLAY */
81befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool play(int fd, msmfb_overlay_data& od);
82befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
83befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* MSMFB_OVERLAY_3D */
84befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool set3D(int fd, msmfb_overlay_3d& ov);
85befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
8676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah/* MSMFB_DISPLAY_COMMIT */
8776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahbool displayCommit(int fd);
8876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
8976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah/* MSMFB_WRITEBACK_INIT, MSMFB_WRITEBACK_START */
9076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahbool wbInitStart(int fbfd);
9176a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
9276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah/* MSMFB_WRITEBACK_STOP, MSMFB_WRITEBACK_TERMINATE */
9376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahbool wbStopTerminate(int fbfd);
9476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
9576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah/* MSMFB_WRITEBACK_QUEUE_BUFFER */
9676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahbool wbQueueBuffer(int fbfd, struct msmfb_data& fbData);
9776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
9876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah/* MSMFB_WRITEBACK_DEQUEUE_BUFFER */
9976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahbool wbDequeueBuffer(int fbfd, struct msmfb_data& fbData);
10076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
101cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed/* MSMFB_SECURE */
102cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmedbool setSecureBuffer(int fbFd, struct msmfb_secure_config& config);
103cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed
104befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* the following are helper functions for dumping
105befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * msm_mdp and friends*/
106befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const msmfb_overlay_data& ov);
107befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const msmfb_data& ov);
108befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const mdp_overlay& ov);
109befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const msmfb_overlay_3d& ov);
110befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const uint32_t u[], uint32_t cnt);
111befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const msmfb_img& ov);
112befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const mdp_rect& ov);
113befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
114befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* and rotator */
115befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const msm_rotator_img_info& rot);
116befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const msm_rotator_data_info& rot);
117befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
118befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* info */
119befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const fb_fix_screeninfo& finfo);
120befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dump(const char* const s, const fb_var_screeninfo& vinfo);
121befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
122befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//---------------Inlines -------------------------------------
123befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
124befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool getFScreenInfo(int fd, fb_fix_screeninfo& finfo) {
125ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo) < 0) {
126ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl FBIOGET_FSCREENINFO err=%s",
127ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
128befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
129befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
130befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
131befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
132befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
133befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool getVScreenInfo(int fd, fb_var_screeninfo& vinfo) {
134ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0) {
135ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl FBIOGET_VSCREENINFO err=%s",
136ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
137befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
138befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
139befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
140befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
141befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
142befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool setVScreenInfo(int fd, fb_var_screeninfo& vinfo) {
143ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) < 0) {
144ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl FBIOPUT_VSCREENINFO err=%s",
145ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
146befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
147befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
148befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
149befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
150befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
151befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool startRotator(int fd, msm_rotator_img_info& rot) {
152ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSM_ROTATOR_IOCTL_START, &rot) < 0){
153ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSM_ROTATOR_IOCTL_START err=%s",
154ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
155befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
156befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
157befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
158befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
159befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
160befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool rotate(int fd, msm_rotator_data_info& rot) {
161ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSM_ROTATOR_IOCTL_ROTATE, &rot) < 0) {
162ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSM_ROTATOR_IOCTL_ROTATE err=%s",
163ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
164befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
165befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
166befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
167befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
168befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
169befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool setOverlay(int fd, mdp_overlay& ov) {
170ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSMFB_OVERLAY_SET, &ov) < 0) {
171ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSMFB_OVERLAY_SET err=%s",
172ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
173befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
174befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
175befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
176befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
177befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
1781029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shahinline bool validateAndSet(const int& fd, mdp_overlay_list& list) {
1791029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah    if (ioctl(fd, MSMFB_OVERLAY_PREPARE, &list) < 0) {
1801029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah        ALOGD_IF(IOCTL_DEBUG, "Failed to call ioctl MSMFB_OVERLAY_PREPARE "
1811029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah                "err=%s", strerror(errno));
1821029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah        return false;
1831029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah    }
1841029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah    return true;
1851029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah}
1861029ad2b12d5f30e77b2c2f85da891f2d1842424Saurabh Shah
18747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmedinline bool endRotator(int fd, uint32_t sessionId) {
188ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSM_ROTATOR_IOCTL_FINISH, &sessionId) < 0) {
189ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSM_ROTATOR_IOCTL_FINISH err=%s",
190ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
191befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
192befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
193befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
194befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
195befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
196befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool unsetOverlay(int fd, int ovId) {
197ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSMFB_OVERLAY_UNSET, &ovId) < 0) {
198ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSMFB_OVERLAY_UNSET err=%s",
199ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
200befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
201befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
202befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
203befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
204befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
205befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool getOverlay(int fd, mdp_overlay& ov) {
206ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSMFB_OVERLAY_GET, &ov) < 0) {
207ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSMFB_OVERLAY_GET err=%s",
208ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
209befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
210befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
211befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
212befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
213befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
214befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool play(int fd, msmfb_overlay_data& od) {
215ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSMFB_OVERLAY_PLAY, &od) < 0) {
216ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSMFB_OVERLAY_PLAY err=%s",
217ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
218befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
219befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
220befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
221befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
222befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
223befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline bool set3D(int fd, msmfb_overlay_3d& ov) {
224ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed    if (ioctl(fd, MSMFB_OVERLAY_3D, &ov) < 0) {
225ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed        ALOGE("Failed to call ioctl MSMFB_OVERLAY_3D err=%s",
226ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed                strerror(errno));
227befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        return false;
228befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
229befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return true;
230befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
231befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
23276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahinline bool displayCommit(int fd, mdp_display_commit& info) {
23376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fd, MSMFB_DISPLAY_COMMIT, &info) == -1) {
23476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_DISPLAY_COMMIT err=%s",
23576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
23676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
23776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
23876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    return true;
23976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah}
24076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
24176a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahinline bool wbInitStart(int fbfd) {
24276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fbfd, MSMFB_WRITEBACK_INIT, NULL) < 0) {
24376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_WRITEBACK_INIT err=%s",
24476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
24576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
24676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
24776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fbfd, MSMFB_WRITEBACK_START, NULL) < 0) {
24876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_WRITEBACK_START err=%s",
24976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
25076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
25176a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
25276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    return true;
25376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah}
25476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
25576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahinline bool wbStopTerminate(int fbfd) {
25676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fbfd, MSMFB_WRITEBACK_STOP, NULL) < 0) {
25776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_WRITEBACK_STOP err=%s",
25876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
25976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
26076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
26176a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fbfd, MSMFB_WRITEBACK_TERMINATE, NULL) < 0) {
26276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_WRITEBACK_TERMINATE err=%s",
26376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
26476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
26576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
26676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    return true;
26776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah}
26876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
26976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahinline bool wbQueueBuffer(int fbfd, struct msmfb_data& fbData) {
27076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fbfd, MSMFB_WRITEBACK_QUEUE_BUFFER, &fbData) < 0) {
27176a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_WRITEBACK_QUEUE_BUFFER err=%s",
27276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
27376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
27476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
27576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    return true;
27676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah}
27776a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
27876a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shahinline bool wbDequeueBuffer(int fbfd, struct msmfb_data& fbData) {
27976a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    if(ioctl(fbfd, MSMFB_WRITEBACK_DEQUEUE_BUFFER, &fbData) < 0) {
28076a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        ALOGE("Failed to call ioctl MSMFB_WRITEBACK_DEQUEUE_BUFFER err=%s",
28176a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah                strerror(errno));
28276a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah        return false;
28376a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    }
28476a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah    return true;
28576a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah}
28676a5cdf91ae7c3f98845c0464dcc49c45d1af10bSaurabh Shah
287cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmedinline bool setSecureBuffer(int fbFd, struct msmfb_secure_config& config) {
288cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed    if(ioctl(fbFd, MSMFB_SECURE, &config) < 0) {
289cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed        ALOGE("Failed to call ioctl MSMFB_SECURE err=%s buf_fd=%d enable=%d",
290cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed                strerror(errno), config.fd, config.enable);
291cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed        return false;
292cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed    }
293cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed    return true;
294cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed}
295cbb846ad4aa7551e156d735b92b8ce1375cfe3f3Naseer Ahmed
296befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* dump funcs */
297befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const msmfb_overlay_data& ov) {
298befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s msmfb_overlay_data id=%d",
299befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, ov.id);
300befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("data", ov.data);
301befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
302befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const msmfb_data& ov) {
303befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s msmfb_data offset=%d memid=%d id=%d flags=0x%x priv=%d",
304befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, ov.offset, ov.memory_id, ov.id, ov.flags, ov.priv);
305befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
306befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const mdp_overlay& ov) {
307befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s mdp_overlay z=%d fg=%d alpha=%d mask=%d flags=0x%x id=%d",
308befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, ov.z_order, ov.is_fg, ov.alpha,
309befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            ov.transp_mask, ov.flags, ov.id);
310befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("src", ov.src);
311befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("src_rect", ov.src_rect);
312befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("dst_rect", ov.dst_rect);
31347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    /*
31447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    Commented off to prevent verbose logging, since user_data could have 8 or so
31547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    fields which are mostly 0
316befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("user_data", ov.user_data,
317befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            sizeof(ov.user_data)/sizeof(ov.user_data[0]));
31847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    */
319befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
320befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const msmfb_img& ov) {
321befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s msmfb_img w=%d h=%d format=%d %s",
322befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, ov.width, ov.height, ov.format,
323befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            overlay::utils::getFormatString(ov.format));
324befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
325befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const mdp_rect& ov) {
326befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s mdp_rect x=%d y=%d w=%d h=%d",
327befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, ov.x, ov.y, ov.w, ov.h);
328befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
329befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
330befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const msmfb_overlay_3d& ov) {
331befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s msmfb_overlay_3d 3d=%d w=%d h=%d",
332befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, ov.is_3d, ov.width, ov.height);
333befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
334befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
335befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const uint32_t u[], uint32_t cnt) {
336befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s user_data cnt=%d", s, cnt);
337befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    for(uint32_t i=0; i < cnt; ++i) {
338befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed        ALOGE("i=%d val=%d", i, u[i]);
339befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    }
340befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
341befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const msm_rotator_img_info& rot) {
3428b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan    ALOGE("%s msm_rotator_img_info sessid=%u dstx=%d dsty=%d rot=%d, ena=%d scale=%d",
343befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, rot.session_id, rot.dst_x, rot.dst_y,
3448b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan            rot.rotations, rot.enable, rot.downscale_ratio);
345befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("src", rot.src);
346befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("dst", rot.dst);
347befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("src_rect", rot.src_rect);
348befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
349befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const msm_rotator_data_info& rot) {
35047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    ALOGE("%s msm_rotator_data_info sessid=%u verkey=%d",
351befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, rot.session_id, rot.version_key);
352befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("src", rot.src);
353befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("dst", rot.dst);
354befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("src_chroma", rot.src_chroma);
355befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    dump("dst_chroma", rot.dst_chroma);
356befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
357befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const fb_fix_screeninfo& finfo) {
358befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s fb_fix_screeninfo type=%d", s, finfo.type);
359befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
360befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedinline void dump(const char* const s, const fb_var_screeninfo& vinfo) {
361befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    ALOGE("%s fb_var_screeninfo xres=%d yres=%d",
362befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed            s, vinfo.xres, vinfo.yres);
363befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
364befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
365befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} // mdp_wrapper
366befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
367befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} // overlay
368befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
369befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif // MDP_WRAPPER_H
370