1054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*
2054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
3054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
4054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Redistribution and use in source and binary forms, with or without
5054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * modification, are permitted provided that the following conditions are
6054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * met:
7054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *   * Redistributions of source code must retain the above copyright
8054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     notice, this list of conditions and the following disclaimer.
9054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *   * Redistributions in binary form must reproduce the above
10054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     copyright notice, this list of conditions and the following
11054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     disclaimer in the documentation and/or other materials provided
12054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     with the distribution.
13054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *   * Neither the name of The Linux Foundation nor the names of its
14054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     contributors may be used to endorse or promote products derived
15054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     from this software without specific prior written permission.
16054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *
17054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */
29054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
30054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef GRALLOC_MEMALLOC_H
31054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define GRALLOC_MEMALLOC_H
32054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
33054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <stdlib.h>
34054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
35054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinnamespace gralloc {
36054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
37054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinenum {
38054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    CACHE_CLEAN = 0x1,
39054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    CACHE_INVALIDATE,
40054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    CACHE_CLEAN_AND_INVALIDATE,
41054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin};
42054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
43054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinstruct alloc_data {
44054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    void           *base;
45054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    int            fd;
46054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    unsigned int   offset;
47054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    unsigned int   size;
48054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    unsigned int   align;
49054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    uintptr_t      pHandle;
50054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    bool           uncached;
51054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    unsigned int   flags;
52054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    int            allocType;
53054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin};
54054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
55054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinclass IMemAlloc {
56054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
57054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    public:
58054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // Allocate buffer - fill in the alloc_data
59054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // structure and pass it in. Mapped address
60054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // and fd are returned in the alloc_data struct
61054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    virtual int alloc_buffer(alloc_data& data) = 0;
62054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
63054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // Free buffer
64054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    virtual int free_buffer(void *base, unsigned int size,
65054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin                            unsigned int offset, int fd) = 0;
66054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
67054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // Map buffer
68054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    virtual int map_buffer(void **pBase, unsigned int size,
69054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin                           unsigned int offset, int fd) = 0;
70054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
71054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // Unmap buffer
72054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    virtual int unmap_buffer(void *base, unsigned int size,
73054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin                             unsigned int offset) = 0;
74054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
75054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // Clean and invalidate
76054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    virtual int clean_buffer(void *base, unsigned int size,
77054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin                             unsigned int offset, int fd, int op) = 0;
78054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
79054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    // Destructor
80054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    virtual ~IMemAlloc() {};
81054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
82054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    enum {
83054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        FD_INIT = -1,
84054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    };
85054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
86054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin};
87054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
88054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} // end gralloc namespace
89054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif // GRALLOC_MEMALLOC_H
90