12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* 22ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. 32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Redistribution and use in source and binary forms, with or without 52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * modification, are permitted provided that the following conditions are 62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * met: 72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Redistributions of source code must retain the above copyright 82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * notice, this list of conditions and the following disclaimer. 92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Redistributions in binary form must reproduce the above 102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * copyright notice, this list of conditions and the following 112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * disclaimer in the documentation and/or other materials provided 122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * with the distribution. 132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * contributors may be used to endorse or promote products derived 152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * from this software without specific prior written permission. 162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * 172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel */ 292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifndef __GR_ION_ALLOC_H__ 312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __GR_ION_ALLOC_H__ 322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <linux/msm_ion.h> 342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define FD_INIT -1 362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelnamespace gralloc1 { 382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelenum { 402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel CACHE_CLEAN = 0x1, 412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel CACHE_INVALIDATE, 422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel CACHE_CLEAN_AND_INVALIDATE, 432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}; 442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelstruct AllocData { 462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *base = NULL; 472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int fd = -1; 482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel unsigned int offset = 0; 492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel unsigned int size = 0; 502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel unsigned int align = 1; 512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uintptr_t handle = 0; 522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bool uncached = false; 532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel unsigned int flags = 0x0; 542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel unsigned int heap_id = 0x0; 552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel unsigned int alloc_type = 0x0; 562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}; 572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelclass IonAlloc { 592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel public: 602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel IonAlloc() { ion_dev_fd_ = FD_INIT; } 612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel ~IonAlloc() { CloseIonDevice(); } 632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bool Init(); 652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int AllocBuffer(AllocData *data); 662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd); 672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int MapBuffer(void **base, unsigned int size, unsigned int offset, int fd); 682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int UnmapBuffer(void *base, unsigned int size, unsigned int offset); 692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int CleanBuffer(void *base, unsigned int size, unsigned int offset, int fd, int op); 702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel private: 722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel const char *kIonDevice = "/dev/ion"; 732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int OpenIonDevice(); 752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void CloseIonDevice(); 762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int ion_dev_fd_; 782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}; 792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} // namespace gralloc1 812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif // __GR_ION_ALLOC_H__ 83