1/*
2* Copyright (c) 2015, The Linux Foundation. All rights reserved.
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are
6* met:
7*  * Redistributions of source code must retain the above copyright
8*    notice, this list of conditions and the following disclaimer.
9*  * Redistributions in binary form must reproduce the above
10*    copyright notice, this list of conditions and the following
11*    disclaimer in the documentation and/or other materials provided
12*    with the distribution.
13*  * Neither the name of The Linux Foundation nor the names of its
14*    contributors may be used to endorse or promote products derived
15*    from this software without specific prior written permission.
16*
17* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30
31#ifndef __HWC_BUFFER_ALLOCATOR_H__
32#define __HWC_BUFFER_ALLOCATOR_H__
33
34#include <sys/mman.h>
35#include <fcntl.h>
36
37namespace gralloc {
38
39class IAllocController;
40
41}  // namespace gralloc
42
43namespace sdm {
44
45class HWCBufferAllocator : public BufferAllocator {
46 public:
47  HWCBufferAllocator();
48
49  DisplayError AllocateBuffer(BufferInfo *buffer_info);
50  DisplayError FreeBuffer(BufferInfo *buffer_info);
51  uint32_t GetBufferSize(BufferInfo *buffer_info);
52
53 private:
54  struct MetaBufferInfo {
55    int alloc_type;              //!< Specifies allocation type set by the buffer allocator.
56    void *base_addr;             //!< Specifies the base address of the allocated output buffer.
57  };
58
59  int SetBufferInfo(LayerBufferFormat format, int *target, int *flags);
60
61  gralloc::IAllocController *alloc_controller_;
62};
63
64}  // namespace sdm
65#endif  // __HWC_BUFFER_ALLOCATOR_H__
66
67