1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_IMEMORY_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_IMEMORY_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/mman.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
26c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IInterface.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IMemoryHeap : public IInterface
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    DECLARE_META_INTERFACE(MemoryHeap);
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // flags returned by getFlags()
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    enum {
393c772b706dd8e53fe17b284bb2e60c146867f787Mathias Agopian        READ_ONLY   = 0x00000001
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual int         getHeapID() const = 0;
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void*       getBase() const = 0;
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual size_t      getSize() const = 0;
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual uint32_t    getFlags() const = 0;
465728a92e29c1c9729017a82c5d0bc18fc1069923Anu Sundararajan    virtual uint32_t    getOffset() const = 0;
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // these are there just for backward source compatibility
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int32_t heapID() const { return getHeapID(); }
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void*   base() const  { return getBase(); }
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t  virtualSize() const { return getSize(); }
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BnMemoryHeap : public BnInterface<IMemoryHeap>
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t onTransact(
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t code,
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const Parcel& data,
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Parcel* reply,
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t flags = 0);
6283c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
6383c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    BnMemoryHeap();
6483c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopianprotected:
6583c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    virtual ~BnMemoryHeap();
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IMemory : public IInterface
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    DECLARE_META_INTERFACE(Memory);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual sp<IMemoryHeap> getMemory(ssize_t* offset=0, size_t* size=0) const = 0;
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // helpers
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void* fastPointer(const sp<IBinder>& heap, ssize_t offset) const;
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void* pointer() const;
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t size() const;
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    ssize_t offset() const;
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BnMemory : public BnInterface<IMemory>
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t onTransact(
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t code,
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const Parcel& data,
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Parcel* reply,
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t flags = 0);
9283c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
9383c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    BnMemory();
9483c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopianprotected:
9583c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    virtual ~BnMemory();
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_IMEMORY_H
103