Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 738b6a8d authored by Tanguy Pruvot's avatar Tanguy Pruvot
Browse files

MemoryHeapBase: ifdef for gingerbread compatibility

Allow to "revert" by a board config flag the offset member addon
see commit f24c4cd0 (aosp change id Ie618fb5c0718e)

This change is required to use overlay based proprietary camera libs
coming from gingerbread and froyo builds.

This change also requires a global cflag named BINDER_COMPAT
because a lot of modules use the MemoryHeap includes

Add this in your BoardConfig.mk :
COMMON_GLOBAL_CFLAGS += -DBINDER_COMPAT

Change-Id: Ib0370fbf4c4770f8141607a8fc393639ffbdc8e2
parent 75b2e6d7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -43,8 +43,9 @@ public:
    virtual void*       getBase() const = 0;
    virtual size_t      getSize() const = 0;
    virtual uint32_t    getFlags() const = 0;
#ifndef BINDER_COMPAT
    virtual uint32_t    getOffset() const = 0;

#endif
    // these are there just for backward source compatibility
    int32_t heapID() const { return getHeapID(); }
    void*   base() const  { return getBase(); }
+5 −2
Original line number Diff line number Diff line
@@ -61,8 +61,9 @@ public:
    virtual void*       getBase() const;
    virtual size_t      getSize() const;
    virtual uint32_t    getFlags() const;
#ifndef BINDER_COMPAT
    virtual uint32_t    getOffset() const;

#endif
    const char*         getDevice() const;

    /* this closes this heap -- use carefully */
@@ -91,7 +92,9 @@ private:
    uint32_t    mFlags;
    const char* mDevice;
    bool        mNeedUnmap;
#ifndef BINDER_COMPAT
    uint32_t    mOffset;
#endif
};

// ---------------------------------------------------------------------------
+4 −0
Original line number Diff line number Diff line
@@ -38,6 +38,10 @@ endif

LOCAL_PATH:= $(call my-dir)

# Note about gingerbread compatibility : Require a global cflag,
# several projects use binder's IMemory.h and MemoryHeapBase.h
# COMMON_GLOBAL_CFLAGS += -DBINDER_COMPAT

include $(CLEAR_VARS)
LOCAL_LDLIBS += -lpthread
LOCAL_MODULE := libbinder
+21 −1
Original line number Diff line number Diff line
@@ -81,7 +81,9 @@ public:
    virtual void* getBase() const;
    virtual size_t getSize() const;
    virtual uint32_t getFlags() const;
#ifndef BINDER_COMPAT
    virtual uint32_t getOffset() const;
#endif

private:
    friend class IMemory;
@@ -108,7 +110,9 @@ private:
    mutable void*       mBase;
    mutable size_t      mSize;
    mutable uint32_t    mFlags;
#ifndef BINDER_COMPAT
    mutable uint32_t    mOffset;
#endif
    mutable bool        mRealHeap;
    mutable Mutex       mLock;
#ifdef QCOM_HARDWARE
@@ -234,7 +238,11 @@ status_t BnMemory::onTransact(

BpMemoryHeap::BpMemoryHeap(const sp<IBinder>& impl)
    : BpInterface<IMemoryHeap>(impl),
        mHeapId(-1), mBase(MAP_FAILED), mSize(0), mFlags(0), mOffset(0), mRealHeap(false)
        mHeapId(-1), mBase(MAP_FAILED), mSize(0), mFlags(0),
#ifndef BINDER_COMPAT
        mOffset(0),
#endif
        mRealHeap(false)
{
#ifdef QCOM_HARDWARE
    mIonFd = open("/dev/ion", O_RDONLY);
@@ -282,7 +290,9 @@ void BpMemoryHeap::assertMapped() const
            if (mHeapId == -1) {
                mBase   = heap->mBase;
                mSize   = heap->mSize;
#ifndef BINDER_COMPAT
                mOffset = heap->mOffset;
#endif
                android_atomic_write( dup( heap->mHeapId ), &mHeapId );
            }
        } else {
@@ -306,7 +316,11 @@ void BpMemoryHeap::assertReallyMapped() const
        int parcel_fd = reply.readFileDescriptor();
        ssize_t size = reply.readInt32();
        uint32_t flags = reply.readInt32();
#ifndef BINDER_COMPAT
        uint32_t offset = reply.readInt32();
#else
        uint32_t offset = 0;
#endif

        LOGE_IF(err, "binder=%p transaction failed fd=%d, size=%ld, err=%d (%s)",
                asBinder().get(), parcel_fd, size, err, strerror(-err));
@@ -331,7 +345,9 @@ void BpMemoryHeap::assertReallyMapped() const
            } else {
                mSize = size;
                mFlags = flags;
#ifndef BINDER_COMPAT
                mOffset = offset;
#endif
                android_atomic_write(fd, &mHeapId);
            }
        }
@@ -358,10 +374,12 @@ uint32_t BpMemoryHeap::getFlags() const {
    return mFlags;
}

#ifndef BINDER_COMPAT
uint32_t BpMemoryHeap::getOffset() const {
    assertMapped();
    return mOffset;
}
#endif

// ---------------------------------------------------------------------------

@@ -382,7 +400,9 @@ status_t BnMemoryHeap::onTransact(
            reply->writeFileDescriptor(getHeapID());
            reply->writeInt32(getSize());
            reply->writeInt32(getFlags());
#ifndef BINDER_COMPAT
            reply->writeInt32(getOffset());
#endif
            return NO_ERROR;
        } break;
        default:
+20 −4
Original line number Diff line number Diff line
@@ -42,13 +42,19 @@ namespace android {

MemoryHeapBase::MemoryHeapBase()
    : mFD(-1), mSize(0), mBase(MAP_FAILED),
      mDevice(NULL), mNeedUnmap(false), mOffset(0)
      mDevice(NULL), mNeedUnmap(false)
#ifndef BINDER_COMPAT
    , mOffset(0)
#endif
{
}

MemoryHeapBase::MemoryHeapBase(size_t size, uint32_t flags, char const * name)
    : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
      mDevice(0), mNeedUnmap(false), mOffset(0)
      mDevice(0), mNeedUnmap(false)
#ifndef BINDER_COMPAT
    , mOffset(0)
#endif
{
    const size_t pagesize = getpagesize();
    size = ((size + pagesize-1) & ~(pagesize-1));
@@ -65,7 +71,10 @@ MemoryHeapBase::MemoryHeapBase(size_t size, uint32_t flags, char const * name)

MemoryHeapBase::MemoryHeapBase(const char* device, size_t size, uint32_t flags)
    : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
      mDevice(0), mNeedUnmap(false), mOffset(0)
      mDevice(0), mNeedUnmap(false)
#ifndef BINDER_COMPAT
    , mOffset(0)
#endif
{
    int open_flags = O_RDWR;
    if (flags & NO_CACHING)
@@ -84,7 +93,10 @@ MemoryHeapBase::MemoryHeapBase(const char* device, size_t size, uint32_t flags)

MemoryHeapBase::MemoryHeapBase(int fd, size_t size, uint32_t flags, uint32_t offset)
    : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
      mDevice(0), mNeedUnmap(false), mOffset(0)
      mDevice(0), mNeedUnmap(false)
#ifndef BINDER_COMPAT
    , mOffset(0)
#endif
{
    const size_t pagesize = getpagesize();
    size = ((size + pagesize-1) & ~(pagesize-1));
@@ -141,7 +153,9 @@ status_t MemoryHeapBase::mapfd(int fd, size_t size, uint32_t offset)
    }
    mFD = fd;
    mSize = size;
#ifndef BINDER_COMPAT
    mOffset = offset;
#endif
    return NO_ERROR;
}

@@ -184,9 +198,11 @@ const char* MemoryHeapBase::getDevice() const {
    return mDevice;
}

#ifndef BINDER_COMPAT
uint32_t MemoryHeapBase::getOffset() const {
    return mOffset;
}
#endif

// ---------------------------------------------------------------------------
}; // namespace android