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 Original line Diff line number Diff line
@@ -43,8 +43,9 @@ public:
    virtual void*       getBase() const = 0;
    virtual void*       getBase() const = 0;
    virtual size_t      getSize() const = 0;
    virtual size_t      getSize() const = 0;
    virtual uint32_t    getFlags() const = 0;
    virtual uint32_t    getFlags() const = 0;
#ifndef BINDER_COMPAT
    virtual uint32_t    getOffset() const = 0;
    virtual uint32_t    getOffset() const = 0;

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

#endif
    const char*         getDevice() const;
    const char*         getDevice() const;


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


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


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


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


BpMemoryHeap::BpMemoryHeap(const sp<IBinder>& impl)
BpMemoryHeap::BpMemoryHeap(const sp<IBinder>& impl)
    : BpInterface<IMemoryHeap>(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
#ifdef QCOM_HARDWARE
    mIonFd = open("/dev/ion", O_RDONLY);
    mIonFd = open("/dev/ion", O_RDONLY);
@@ -282,7 +290,9 @@ void BpMemoryHeap::assertMapped() const
            if (mHeapId == -1) {
            if (mHeapId == -1) {
                mBase   = heap->mBase;
                mBase   = heap->mBase;
                mSize   = heap->mSize;
                mSize   = heap->mSize;
#ifndef BINDER_COMPAT
                mOffset = heap->mOffset;
                mOffset = heap->mOffset;
#endif
                android_atomic_write( dup( heap->mHeapId ), &mHeapId );
                android_atomic_write( dup( heap->mHeapId ), &mHeapId );
            }
            }
        } else {
        } else {
@@ -306,7 +316,11 @@ void BpMemoryHeap::assertReallyMapped() const
        int parcel_fd = reply.readFileDescriptor();
        int parcel_fd = reply.readFileDescriptor();
        ssize_t size = reply.readInt32();
        ssize_t size = reply.readInt32();
        uint32_t flags = reply.readInt32();
        uint32_t flags = reply.readInt32();
#ifndef BINDER_COMPAT
        uint32_t offset = reply.readInt32();
        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)",
        LOGE_IF(err, "binder=%p transaction failed fd=%d, size=%ld, err=%d (%s)",
                asBinder().get(), parcel_fd, size, err, strerror(-err));
                asBinder().get(), parcel_fd, size, err, strerror(-err));
@@ -331,7 +345,9 @@ void BpMemoryHeap::assertReallyMapped() const
            } else {
            } else {
                mSize = size;
                mSize = size;
                mFlags = flags;
                mFlags = flags;
#ifndef BINDER_COMPAT
                mOffset = offset;
                mOffset = offset;
#endif
                android_atomic_write(fd, &mHeapId);
                android_atomic_write(fd, &mHeapId);
            }
            }
        }
        }
@@ -358,10 +374,12 @@ uint32_t BpMemoryHeap::getFlags() const {
    return mFlags;
    return mFlags;
}
}


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


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


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


MemoryHeapBase::MemoryHeapBase()
MemoryHeapBase::MemoryHeapBase()
    : mFD(-1), mSize(0), mBase(MAP_FAILED),
    : 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)
MemoryHeapBase::MemoryHeapBase(size_t size, uint32_t flags, char const * name)
    : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(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
{
{
    const size_t pagesize = getpagesize();
    const size_t pagesize = getpagesize();
    size = ((size + pagesize-1) & ~(pagesize-1));
    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)
MemoryHeapBase::MemoryHeapBase(const char* device, size_t size, uint32_t flags)
    : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(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;
    int open_flags = O_RDWR;
    if (flags & NO_CACHING)
    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)
MemoryHeapBase::MemoryHeapBase(int fd, size_t size, uint32_t flags, uint32_t offset)
    : mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(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
{
{
    const size_t pagesize = getpagesize();
    const size_t pagesize = getpagesize();
    size = ((size + pagesize-1) & ~(pagesize-1));
    size = ((size + pagesize-1) & ~(pagesize-1));
@@ -141,7 +153,9 @@ status_t MemoryHeapBase::mapfd(int fd, size_t size, uint32_t offset)
    }
    }
    mFD = fd;
    mFD = fd;
    mSize = size;
    mSize = size;
#ifndef BINDER_COMPAT
    mOffset = offset;
    mOffset = offset;
#endif
    return NO_ERROR;
    return NO_ERROR;
}
}


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


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


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