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