merge in lmp-mr1-nova-release history after reset to lmp-mr1-dev
diff --git a/msm8084/liboverlay/mdpWrapper.h b/msm8084/liboverlay/mdpWrapper.h
index 1bfa058..8e67cfa 100644
--- a/msm8084/liboverlay/mdpWrapper.h
+++ b/msm8084/liboverlay/mdpWrapper.h
@@ -98,6 +98,9 @@
/* MSMFB_WRITEBACK_DEQUEUE_BUFFER */
bool wbDequeueBuffer(int fbfd, struct msmfb_data& fbData);
+/* MSMFB_SECURE */
+bool setSecureBuffer(int fbFd, struct msmfb_secure_config& config);
+
/* the following are helper functions for dumping
* msm_mdp and friends*/
void dump(const char* const s, const msmfb_overlay_data& ov);
@@ -281,6 +284,15 @@
return true;
}
+inline bool setSecureBuffer(int fbFd, struct msmfb_secure_config& config) {
+ if(ioctl(fbFd, MSMFB_SECURE, &config) < 0) {
+ ALOGE("Failed to call ioctl MSMFB_SECURE err=%s buf_fd=%d enable=%d",
+ strerror(errno), config.fd, config.enable);
+ return false;
+ }
+ return true;
+}
+
/* dump funcs */
inline void dump(const char* const s, const msmfb_overlay_data& ov) {
ALOGE("%s msmfb_overlay_data id=%d",
diff --git a/msm8084/liboverlay/overlayMem.h b/msm8084/liboverlay/overlayMem.h
index cef854d..b2e7dd1 100644
--- a/msm8084/liboverlay/overlayMem.h
+++ b/msm8084/liboverlay/overlayMem.h
@@ -38,6 +38,8 @@
#include "gralloc_priv.h"
#include "overlayUtils.h"
+#include "mdpWrapper.h"
+
#define SIZE_1M 0x00100000
#define SIZE_2M 0x00200000
@@ -79,6 +81,9 @@
/* return number of bufs */
uint32_t numBufs() const ;
+ /* Set / unset secure with MDP */
+ bool setSecure(bool enable);
+
private:
/* actual os fd */
int mFd;
@@ -100,6 +105,9 @@
/*Holds the aligned buffer size used for actual allocation*/
uint32_t mBufSzAligned;
+
+ /* Flags if the buffer has been secured by MDP */
+ bool mSecured;
};
//-------------------Inlines-----------------------------------
@@ -113,6 +121,7 @@
mAllocType = 0;
mBufSz = 0;
mNumBuffers = 0;
+ mSecured = false;
mAlloc = gralloc::IAllocController::getInstance();
}
@@ -158,6 +167,10 @@
mBaseAddr = data.base;
mAllocType = data.allocType;
+ if(isSecure) {
+ setSecure(true);
+ }
+
return true;
}
@@ -169,6 +182,10 @@
return true;
}
+ if(mSecured) {
+ setSecure(false);
+ }
+
IMemAlloc* memalloc = mAlloc->getAllocator(mAllocType);
ret = memalloc->free_buffer(mBaseAddr, mBufSzAligned * mNumBuffers, 0, mFd);
if (ret != 0) {
@@ -185,6 +202,27 @@
return true;
}
+inline bool OvMem::setSecure(bool enable) {
+ OvFD fbFd;
+ if(!utils::openDev(fbFd, 0, Res::fbPath, O_RDWR)) {
+ ALOGE("OvMem::%s failed to init fb0", __FUNCTION__);
+ return false;
+ }
+ struct msmfb_secure_config config;
+ utils::memset0(config);
+ config.fd = mFd;
+ config.enable = enable;
+ if(!mdp_wrapper::setSecureBuffer(fbFd.getFD(), config)) {
+ ALOGE("OvMem::%s failed enable=%d", __FUNCTION__, enable);
+ fbFd.close();
+ mSecured = false;
+ return false;
+ }
+ fbFd.close();
+ mSecured = enable;
+ return true;
+}
+
inline bool OvMem::valid() const
{
return (mFd != -1) && (mBaseAddr != MAP_FAILED);