memalloc.h revision 01d3fd3318a767e6ba75492ed08d57896df95d63
1202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*
229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
3202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Redistribution and use in source and binary forms, with or without
5202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * modification, are permitted provided that the following conditions are
6202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * met:
7202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *   * Redistributions of source code must retain the above copyright
8202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     notice, this list of conditions and the following disclaimer.
9202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *   * Redistributions in binary form must reproduce the above
10202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     copyright notice, this list of conditions and the following
11202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     disclaimer in the documentation and/or other materials provided
12202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     with the distribution.
13202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *   * Neither the name of Code Aurora Forum, Inc. nor the names of its
14202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     contributors may be used to endorse or promote products derived
15202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     from this software without specific prior written permission.
16202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *
17202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */
29202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
30202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifndef GRALLOC_MEMALLOC_H
31202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define GRALLOC_MEMALLOC_H
32202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
33202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <stdlib.h>
34202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
35202a77d28ac251545f6f998a974690212309b927Iliyan Malchevnamespace gralloc {
36202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct alloc_data {
3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void           *base;
3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int            fd;
4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int            offset;
4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    size_t         size;
4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    size_t         align;
4329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    unsigned int   pHandle;
4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    bool           uncached;
4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    unsigned int   flags;
4629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int            allocType;
4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
48202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4901d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmedclass IMemAlloc {
50202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    public:
5229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // Allocate buffer - fill in the alloc_data
5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // structure and pass it in. Mapped address
5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // and fd are returned in the alloc_data struct
5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int alloc_buffer(alloc_data& data) = 0;
56202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // Free buffer
5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int free_buffer(void *base, size_t size,
5929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                            int offset, int fd) = 0;
60202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // Map buffer
6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int map_buffer(void **pBase, size_t size,
6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                           int offset, int fd) = 0;
64202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // Unmap buffer
6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int unmap_buffer(void *base, size_t size,
6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int offset) = 0;
68202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // Clean and invalidate
7029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int clean_buffer(void *base, size_t size,
7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int offset, int fd) = 0;
72202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    // Destructor
7429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual ~IMemAlloc() {};
75202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    enum {
7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed        FD_INIT = -1,
78202a77d28ac251545f6f998a974690212309b927Iliyan Malchev    };
79202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
8029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
8129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
82202a77d28ac251545f6f998a974690212309b927Iliyan Malchev} // end gralloc namespace
83202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif // GRALLOC_MEMALLOC_H
84