1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 247c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal* Copyright (c) 2011,2013 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 30ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed#ifndef OVERlAY_ROTATOR_H 31ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed#define OVERlAY_ROTATOR_H 32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <stdlib.h> 34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include "mdpWrapper.h" 36befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include "overlayUtils.h" 37befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include "overlayMem.h" 38592d33199d009cd45899728ccae80e8f53c17c83Saurabh Shah#include "sync/sync.h" 39befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 40befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace overlay { 41ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed 42befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 43ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed Manages the case where new rotator memory needs to be 44ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed allocated, before previous is freed, due to resolution change etc. If we make 45ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed rotator memory to be always max size, irrespctive of source resolution then 46ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed we don't need this RotMem wrapper. The inner class is sufficient. 47ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed*/ 48ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedstruct RotMem { 498bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah // Max rotator buffers 508bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah enum { ROT_NUM_BUFS = 2 }; 518bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah RotMem(); 528bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah ~RotMem(); 53ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed bool close(); 548bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah bool valid() { return mem.valid(); } 558bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah uint32_t size() const { return mem.bufSz(); } 568bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah void setReleaseFd(const int& fence); 578bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah 588bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah // rotator data info dst offset 598bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah uint32_t mRotOffset[ROT_NUM_BUFS]; 608bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah int mRelFence[ROT_NUM_BUFS]; 618bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah // current slot being used 628bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah uint32_t mCurrIndex; 638bc12cba5e3e8377cd5ea3410609af005c01335dSaurabh Shah OvMem mem; 64ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed}; 65befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 6643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahclass Rotator 6743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah{ 6843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahpublic: 6943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah enum { TYPE_MDP, TYPE_MDSS }; 7043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual ~Rotator(); 7143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void setSource(const utils::Whf& wfh) = 0; 7243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void setCrop(const utils::Dim& crop) = 0; 7343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void setFlags(const utils::eMdpFlags& flags) = 0; 7443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void setTransform(const utils::eTransform& rot) = 0; 7543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual bool commit() = 0; 7643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void setDownscale(int ds) = 0; 7743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual int getDstMemId() const = 0; 7843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual uint32_t getDstOffset() const = 0; 7943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual uint32_t getDstFormat() const = 0; 8043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual uint32_t getSessId() const = 0; 8143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual bool queueBuffer(int fd, uint32_t offset) = 0; 8243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void dump() const = 0; 8343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah virtual void getDump(char *buf, size_t len) const = 0; 8443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah void setReleaseFd(const int& fence) { mMem.setReleaseFd(fence); } 8543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah static Rotator *getRotator(); 8643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 8743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahprotected: 8843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah /* Rotator memory manager */ 8943addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah RotMem mMem; 9043addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah explicit Rotator() {} 9143addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah static uint32_t calcOutputBufSize(const utils::Whf& destWhf); 9243addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 9343addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shahprivate: 9443addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah /*Returns rotator h/w type */ 9543addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah static int getRotatorHwType(); 9643addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah friend class RotMgr; 9743addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah}; 9843addde8368fa726b6be3ff2194eca4fc0741994Saurabh Shah 99befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 100ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed* MDP rot holds MDP's rotation related structures. 101ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed* 102befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed* */ 10347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmedclass MdpRot : public Rotator { 104befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedpublic: 10547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual ~MdpRot(); 10647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual void setSource(const utils::Whf& wfh); 107e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan virtual void setCrop(const utils::Dim& crop); 108ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed virtual void setFlags(const utils::eMdpFlags& flags); 1098b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan virtual void setTransform(const utils::eTransform& rot); 11047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual bool commit(); 1118b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan virtual void setDownscale(int ds); 11247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual int getDstMemId() const; 11347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual uint32_t getDstOffset() const; 11447c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal virtual uint32_t getDstFormat() const; 11547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual uint32_t getSessId() const; 11647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual bool queueBuffer(int fd, uint32_t offset); 11747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual void dump() const; 118a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah virtual void getDump(char *buf, size_t len) const; 119befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 120befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedprivate: 12147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed explicit MdpRot(); 122327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah bool init(); 123327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah bool close(); 124327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah void setRotations(uint32_t r); 125327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah bool enabled () const; 126ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* remap rot buffers */ 127ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed bool remap(uint32_t numbufs); 128ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed bool open_i(uint32_t numbufs, uint32_t bufsz); 129ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* Deferred transform calculations */ 130ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed void doTransform(); 131ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* reset underlying data, basically memset 0 */ 132ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed void reset(); 1331a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah /* return true if current rotator config is different 1341a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah * than last known config */ 1351a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah bool rotConfChanged() const; 1361a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah /* save mRotImgInfo to be last known good config*/ 1371a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah void save(); 138e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah /* Calculates the rotator's o/p buffer size post the transform calcs and 139e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah * knowing the o/p format depending on whether fastYuv is enabled or not */ 140e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah uint32_t calcOutputBufSize(); 1411a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah 142ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* rot info*/ 143ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed msm_rotator_img_info mRotImgInfo; 1441a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah /* Last saved rot info*/ 1451a78fb1256ec5b65ee29506be00c50c52ed786f2Saurabh Shah msm_rotator_img_info mLSRotImgInfo; 146ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* rot data */ 147ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed msm_rotator_data_info mRotDataInfo; 148ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* Orientation */ 149ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed utils::eTransform mOrientation; 150ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed /* rotator fd */ 151ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed OvFD mFd; 15247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 15347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed friend Rotator* Rotator::getRotator(); 154befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 155befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 156bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah/* 157bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah+* MDSS Rot holds MDSS's rotation related structures. 158bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah+* 159bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah+* */ 16047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmedclass MdssRot : public Rotator { 161bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahpublic: 16247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual ~MdssRot(); 16347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual void setSource(const utils::Whf& wfh); 164e7fd567eb00aea104a726a88540dba639e17bf29Sushil Chauhan virtual void setCrop(const utils::Dim& crop); 165bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah virtual void setFlags(const utils::eMdpFlags& flags); 1668b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan virtual void setTransform(const utils::eTransform& rot); 16747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual bool commit(); 1688b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan virtual void setDownscale(int ds); 16947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual int getDstMemId() const; 17047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual uint32_t getDstOffset() const; 17147c130ffbafe12d6ddf6e8df4ffdd9916318c379Raj kamal virtual uint32_t getDstFormat() const; 17247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual uint32_t getSessId() const; 17347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual bool queueBuffer(int fd, uint32_t offset); 17447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed virtual void dump() const; 175a22f5873a9974b00f352370e077db9788ad67699Saurabh Shah virtual void getDump(char *buf, size_t len) const; 176bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 177bf4ef717fabff427327613de76b69f964c51484dSaurabh Shahprivate: 17847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed explicit MdssRot(); 179327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah bool init(); 180327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah bool close(); 181327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah void setRotations(uint32_t r); 182327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah bool enabled () const; 183bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* remap rot buffers */ 184bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah bool remap(uint32_t numbufs); 185bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah bool open_i(uint32_t numbufs, uint32_t bufsz); 186bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* Deferred transform calculations */ 187bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah void doTransform(); 188bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* reset underlying data, basically memset 0 */ 189bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah void reset(); 190e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah /* Calculates the rotator's o/p buffer size post the transform calcs and 191e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah * knowing the o/p format depending on whether fastYuv is enabled or not */ 192e4dbe91c2c45ef7ad1f5106b75bd49062cf80c48Saurabh Shah uint32_t calcOutputBufSize(); 19330323b98c1abab90dce91c3d226d4e65a24076fcSushil Chauhan // Calculate the compressed o/p buffer size for BWC 194b79d3ca8afad0421450869bd3058d15b71201a30Sushil Chauhan uint32_t calcCompressedBufSize(const utils::Whf& destWhf); 195bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 196bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* MdssRot info structure */ 197bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah mdp_overlay mRotInfo; 198bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* MdssRot data structure */ 199bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah msmfb_overlay_data mRotData; 200bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* Orientation */ 201bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah utils::eTransform mOrientation; 202bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* rotator fd */ 203bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah OvFD mFd; 204bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah /* Enable/Disable Mdss Rot*/ 205bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah bool mEnabled; 206befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 20747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed friend Rotator* Rotator::getRotator(); 20847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed}; 209bf4ef717fabff427327613de76b69f964c51484dSaurabh Shah 210327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah// Holder of rotator objects. Manages lifetimes 211327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahclass RotMgr { 212327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahpublic: 213d28bdc304736bee79cf2756e0504d5cb5310074aSaurabh Shah enum { MAX_ROT_SESS = 4 }; 214834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah 215327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah ~RotMgr(); 216327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah void configBegin(); 217327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah void configDone(); 218327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah overlay::Rotator *getNext(); 219327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah void clear(); //Removes all instances 220834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah //Resets the usage of top count objects, making them available for reuse 221834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah void markUnusedTop(const uint32_t& count) { mUseCount -= count; } 222327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah /* Returns rot dump. 223327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah * Expects a NULL terminated buffer of big enough size. 224327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah */ 225327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah void getDump(char *buf, size_t len); 226050c8e4005bd400436a48e34289b8ce7defe614dSaurabh Shah int getRotDevFd(); 2273aaa003801643146fe86e91364c5ad9493ad40d7Saurabh Shah int getNumActiveSessions() { return mUseCount; } 228834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah 229834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah static RotMgr *getInstance(); 230834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah 231327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shahprivate: 232834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah RotMgr(); 233834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah static RotMgr *sRotMgr; 234834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah 235327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah overlay::Rotator *mRot[MAX_ROT_SESS]; 236834852cce5c3e5ab2eabde1c6ca151228abbac6fSaurabh Shah uint32_t mUseCount; 237050c8e4005bd400436a48e34289b8ce7defe614dSaurabh Shah int mRotDevFd; 238327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah}; 239327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 240327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah 241ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed} // overlay 242befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 243ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed#endif // OVERlAY_ROTATOR_H 244