1ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* 2ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Copyright (c) 2011, The Linux Foundation. All rights reserved. 3ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* 4ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* Redistribution and use in source and binary forms, with or without 5ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* modification, are permitted provided that the following conditions are 6ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* met: 7ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* * Redistributions of source code must retain the above copyright 8ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* notice, this list of conditions and the following disclaimer. 9ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* * Redistributions in binary form must reproduce the above 10ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* copyright notice, this list of conditions and the following 11ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* disclaimer in the documentation and/or other materials provided 12ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* with the distribution. 13ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* * Neither the name of The Linux Foundation nor the names of its 14ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* contributors may be used to endorse or promote products derived 15ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* from this software without specific prior written permission. 16ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* 17ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson*/ 29ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 30ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#ifndef MDP_WRAPPER_H 31ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define MDP_WRAPPER_H 32ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 338c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL) 348c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed 35ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* 36ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* In order to make overlay::mdp_wrapper shorter, please do something like: 37ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* namespace mdpwrap = overlay::mdp_wrapper; 38ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson* */ 39ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 40ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <linux/msm_mdp.h> 41ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <linux/msm_rotator.h> 42ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <sys/ioctl.h> 43ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <utils/Log.h> 448c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed#include <utils/Trace.h> 45ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <errno.h> 46ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "overlayUtils.h" 47a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 48a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson#define IOCTL_DEBUG 0 49ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 50ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace overlay{ 51ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 52ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace mdp_wrapper{ 53ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* FBIOGET_FSCREENINFO */ 54ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool getFScreenInfo(int fd, fb_fix_screeninfo& finfo); 55ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 56ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* FBIOGET_VSCREENINFO */ 57ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool getVScreenInfo(int fd, fb_var_screeninfo& vinfo); 58ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 59ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* FBIOPUT_VSCREENINFO */ 60ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool setVScreenInfo(int fd, fb_var_screeninfo& vinfo); 61ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 62ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSM_ROTATOR_IOCTL_START */ 63ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool startRotator(int fd, msm_rotator_img_info& rot); 64ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 65ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSM_ROTATOR_IOCTL_ROTATE */ 66ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool rotate(int fd, msm_rotator_data_info& rot); 67ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 68ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_OVERLAY_SET */ 69ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool setOverlay(int fd, mdp_overlay& ov); 70ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 71a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson/* MSMFB_OVERLAY_PREPARE */ 72a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonbool validateAndSet(const int& fd, mdp_overlay_list& list); 73a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 74ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSM_ROTATOR_IOCTL_FINISH */ 75ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool endRotator(int fd, int sessionId); 76ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 77ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_OVERLAY_UNSET */ 78ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool unsetOverlay(int fd, int ovId); 79ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 80ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_OVERLAY_GET */ 81ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool getOverlay(int fd, mdp_overlay& ov); 82ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 83ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_OVERLAY_PLAY */ 84ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool play(int fd, msmfb_overlay_data& od); 85ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 86ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_DISPLAY_COMMIT */ 87ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool displayCommit(int fd); 88ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 89ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_WRITEBACK_INIT, MSMFB_WRITEBACK_START */ 90ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool wbInitStart(int fbfd); 91ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 92ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_WRITEBACK_STOP, MSMFB_WRITEBACK_TERMINATE */ 93ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool wbStopTerminate(int fbfd); 94ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 95ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_WRITEBACK_QUEUE_BUFFER */ 96ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool wbQueueBuffer(int fbfd, struct msmfb_data& fbData); 97ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 98ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* MSMFB_WRITEBACK_DEQUEUE_BUFFER */ 99ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonbool wbDequeueBuffer(int fbfd, struct msmfb_data& fbData); 100ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 101ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* the following are helper functions for dumping 102ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * msm_mdp and friends*/ 103ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const msmfb_overlay_data& ov); 104ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const msmfb_data& ov); 105ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const mdp_overlay& ov); 106ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const msmfb_overlay_3d& ov); 107ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const uint32_t u[], uint32_t cnt); 108ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const msmfb_img& ov); 109ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const mdp_rect& ov); 110ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 111ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* and rotator */ 112ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const msm_rotator_img_info& rot); 113ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const msm_rotator_data_info& rot); 114ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 115ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* info */ 116ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const fb_fix_screeninfo& finfo); 117ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid dump(const char* const s, const fb_var_screeninfo& vinfo); 118ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 119ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson//---------------Inlines ------------------------------------- 120ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 121ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool getFScreenInfo(int fd, fb_fix_screeninfo& finfo) { 1228c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 123ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo) < 0) { 124ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl FBIOGET_FSCREENINFO err=%s", 125ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 126ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 127ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 128ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 129ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 130ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 131ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool getVScreenInfo(int fd, fb_var_screeninfo& vinfo) { 1328c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 133ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0) { 134ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl FBIOGET_VSCREENINFO err=%s", 135ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 136ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 137ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 138ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 139ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 140ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 141ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool setVScreenInfo(int fd, fb_var_screeninfo& vinfo) { 1428c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 143ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) < 0) { 144ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl FBIOPUT_VSCREENINFO err=%s", 145ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 146ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 147ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 148ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 149ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 150ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 151ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool startRotator(int fd, msm_rotator_img_info& rot) { 1528c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 153ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSM_ROTATOR_IOCTL_START, &rot) < 0){ 154ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSM_ROTATOR_IOCTL_START err=%s", 155ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 156ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 157ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 158ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 159ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 160ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 161ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool rotate(int fd, msm_rotator_data_info& rot) { 1628c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 163ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSM_ROTATOR_IOCTL_ROTATE, &rot) < 0) { 164ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSM_ROTATOR_IOCTL_ROTATE err=%s", 165ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 166ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 167ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 168ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 169ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 170ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 171ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool setOverlay(int fd, mdp_overlay& ov) { 1728c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 173ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSMFB_OVERLAY_SET, &ov) < 0) { 174ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_OVERLAY_SET err=%s", 175ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 176ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 177ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 178ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 179ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 180ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 181a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsoninline bool validateAndSet(const int& fd, mdp_overlay_list& list) { 1828c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 183a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if (ioctl(fd, MSMFB_OVERLAY_PREPARE, &list) < 0) { 184a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ALOGD_IF(IOCTL_DEBUG, "Failed to call ioctl MSMFB_OVERLAY_PREPARE " 185a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson "err=%s", strerror(errno)); 186a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return false; 187a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } 188a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return true; 189a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 190a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 191ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool endRotator(int fd, uint32_t sessionId) { 1928c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 193ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSM_ROTATOR_IOCTL_FINISH, &sessionId) < 0) { 194ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSM_ROTATOR_IOCTL_FINISH err=%s", 195ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 196ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 197ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 198ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 199ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 200ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 201ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool unsetOverlay(int fd, int ovId) { 2028c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 203ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSMFB_OVERLAY_UNSET, &ovId) < 0) { 204ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_OVERLAY_UNSET err=%s", 205ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 206ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 207ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 208ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 209ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 210ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 211ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool getOverlay(int fd, mdp_overlay& ov) { 2128c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 213ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSMFB_OVERLAY_GET, &ov) < 0) { 214ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_OVERLAY_GET err=%s", 215ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 216ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 217ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 218ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 219ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 220ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 221ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool play(int fd, msmfb_overlay_data& od) { 2228c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 223ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if (ioctl(fd, MSMFB_OVERLAY_PLAY, &od) < 0) { 224ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_OVERLAY_PLAY err=%s", 225ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 226ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 227ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 228ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 229ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 230ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 231ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool displayCommit(int fd, mdp_display_commit& info) { 2328c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 233ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fd, MSMFB_DISPLAY_COMMIT, &info) == -1) { 234ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_DISPLAY_COMMIT err=%s", 235ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 236ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 237ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 238ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 239ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 240ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 241ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool wbInitStart(int fbfd) { 2428c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 243ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fbfd, MSMFB_WRITEBACK_INIT, NULL) < 0) { 244ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_WRITEBACK_INIT err=%s", 245ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 246ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 247ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 248ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fbfd, MSMFB_WRITEBACK_START, NULL) < 0) { 249ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_WRITEBACK_START err=%s", 250ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 251ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 252ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 253ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 254ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 255ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 256ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool wbStopTerminate(int fbfd) { 2578c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 258ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fbfd, MSMFB_WRITEBACK_STOP, NULL) < 0) { 259ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_WRITEBACK_STOP err=%s", 260ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 261ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 262ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 263ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fbfd, MSMFB_WRITEBACK_TERMINATE, NULL) < 0) { 264ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_WRITEBACK_TERMINATE err=%s", 265ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 266ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 267ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 268ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 269ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 270ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 271ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool wbQueueBuffer(int fbfd, struct msmfb_data& fbData) { 2728c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 273ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fbfd, MSMFB_WRITEBACK_QUEUE_BUFFER, &fbData) < 0) { 274ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_WRITEBACK_QUEUE_BUFFER err=%s", 275ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 276ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 277ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 278ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 279ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 280ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 281ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline bool wbDequeueBuffer(int fbfd, struct msmfb_data& fbData) { 2828c05a30b5177ad3003dc8886dd012fac95657060Naseer Ahmed ATRACE_CALL(); 283ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(ioctl(fbfd, MSMFB_WRITEBACK_DEQUEUE_BUFFER, &fbData) < 0) { 284ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("Failed to call ioctl MSMFB_WRITEBACK_DEQUEUE_BUFFER err=%s", 285ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson strerror(errno)); 286ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return false; 287ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 288ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return true; 289ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 290ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 291ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* dump funcs */ 292ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const msmfb_overlay_data& ov) { 293ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s msmfb_overlay_data id=%d", 294ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, ov.id); 295ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("data", ov.data); 296ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 297ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const msmfb_data& ov) { 298ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s msmfb_data offset=%d memid=%d id=%d flags=0x%x priv=%d", 299ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, ov.offset, ov.memory_id, ov.id, ov.flags, ov.priv); 300ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 301ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const mdp_overlay& ov) { 302ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s mdp_overlay z=%d fg=%d alpha=%d mask=%d flags=0x%x id=%d", 303ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, ov.z_order, ov.is_fg, ov.alpha, 304ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ov.transp_mask, ov.flags, ov.id); 305ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("src", ov.src); 306ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("src_rect", ov.src_rect); 307ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("dst_rect", ov.dst_rect); 308ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson /* 309ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson Commented off to prevent verbose logging, since user_data could have 8 or so 310ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson fields which are mostly 0 311ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("user_data", ov.user_data, 312ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson sizeof(ov.user_data)/sizeof(ov.user_data[0])); 313ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson */ 314ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 315ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const msmfb_img& ov) { 316ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s msmfb_img w=%d h=%d format=%d %s", 317ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, ov.width, ov.height, ov.format, 318ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson overlay::utils::getFormatString(ov.format)); 319ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 320ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const mdp_rect& ov) { 321ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s mdp_rect x=%d y=%d w=%d h=%d", 322ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, ov.x, ov.y, ov.w, ov.h); 323ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 324ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 325ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const msmfb_overlay_3d& ov) { 326ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s msmfb_overlay_3d 3d=%d w=%d h=%d", 327ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, ov.is_3d, ov.width, ov.height); 328ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 329ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 330ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const uint32_t u[], uint32_t cnt) { 331ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s user_data cnt=%d", s, cnt); 332ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson for(uint32_t i=0; i < cnt; ++i) { 333ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("i=%d val=%d", i, u[i]); 334ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 335ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 336ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const msm_rotator_img_info& rot) { 337ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s msm_rotator_img_info sessid=%u dstx=%d dsty=%d rot=%d, ena=%d scale=%d", 338ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, rot.session_id, rot.dst_x, rot.dst_y, 339ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson rot.rotations, rot.enable, rot.downscale_ratio); 340ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("src", rot.src); 341ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("dst", rot.dst); 342ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("src_rect", rot.src_rect); 343ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 344ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const msm_rotator_data_info& rot) { 345ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s msm_rotator_data_info sessid=%u verkey=%d", 346ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, rot.session_id, rot.version_key); 347ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("src", rot.src); 348ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("dst", rot.dst); 349ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("src_chroma", rot.src_chroma); 350ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson dump("dst_chroma", rot.dst_chroma); 351ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 352ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const fb_fix_screeninfo& finfo) { 353ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s fb_fix_screeninfo type=%d", s, finfo.type); 354ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 355ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsoninline void dump(const char* const s, const fb_var_screeninfo& vinfo) { 356ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGE("%s fb_var_screeninfo xres=%d yres=%d", 357ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson s, vinfo.xres, vinfo.yres); 358ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 359ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 360ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} // mdp_wrapper 361ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 362ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} // overlay 363ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 364ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#endif // MDP_WRAPPER_H 365