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