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