am b39943bf: am a61de09c: Merge "Move videodev2.h to include/linux."
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos5.git] / include / ExynosBuffer.h
CommitLineData
20c51683
JC
1/*
2 * Copyright@ Samsung Electronics Co. LTD
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15*/
16
17/*!
18 * \file ExynosBuffer.h
19 * \brief header file for ExynosBuffer
20 * \author Sangwoo, Park(sw5771.park@samsung.com)
21 * \date 2011/06/02
22 *
23 * <b>Revision History: </b>
24 * - 2010/06/03 : Sangwoo, Park(sw5771.park@samsung.com) \n
25 * Initial version
26 *
27 * - 2012/03/14 : sangwoo.park(sw5771.park@samsung.com) \n
28 * Change file, struct name to ExynosXXX.
29 *
30 */
31
32#ifndef EXYNOS_BUFFER_H_
33#define EXYNOS_BUFFER_H_
34
35#include <sys/types.h>
36
37//! Buffer information
38/*!
39 * \ingroup Exynos
40 */
41struct ExynosBuffer
42{
43public:
44 //! Buffer type
45 enum BUFFER_TYPE
46 {
47 BUFFER_TYPE_BASE = 0,
48 BUFFER_TYPE_VIRT = 1, //!< virtual address
49 BUFFER_TYPE_PHYS = 1 << 1, //!< physical address
50 BUFFER_TYPE_RESERVED = 1 << 2, //!< reserved type
471812b7 51 BUFFER_TYPE_FD = 1 << 3, //!< physical address
20c51683
JC
52 BUFFER_TYPE_MAX,
53 };
54
55 //! Buffer virtual address
56 union {
57 char *p; //! single address.
58 char *extP[3]; //! Y Cb Cr.
59 } virt;
60
61 //! Buffer physical address
62 union {
63 unsigned int p; //! single address.
64 unsigned int extP[3]; //! Y Cb Cr.
65 } phys;
66
471812b7
RSZ
67 //! Buffer file descriptors
68 union {
69 int fd;
70 int extFd[3];
71 } fd;
72
20c51683
JC
73 //! Buffer reserved id
74 union {
75 unsigned int p; //! \n
76 unsigned int extP[3]; //! \n
77 } reserved;
78
79 //! Buffer size
80 union {
81 unsigned int s;
82 unsigned int extS[3];
83 } size;
84
85#ifdef __cplusplus
86 //! Constructor
87 ExynosBuffer()
88 {
89 for (int i = 0; i < 3; i++) {
90 virt. extP[i] = NULL;
91 phys. extP[i] = 0;
471812b7 92 fd. extFd[i] = -1;
20c51683
JC
93 reserved.extP[i] = 0;
94 size. extS[i] = 0;
95 }
96 }
97
98 //! Constructor
99 ExynosBuffer(const ExynosBuffer *other)
100 {
101 for (int i = 0; i < 3; i++) {
102 virt. extP[i] = other->virt.extP[i];
103 phys. extP[i] = other->phys.extP[i];
471812b7 104 fd. extFd[i] = other->fd.extFd[i];
20c51683
JC
105 reserved.extP[i] = other->reserved.extP[i];
106 size. extS[i] = other->size.extS[i];
107 }
108 }
109
110 //! Operator(=) override
111 ExynosBuffer& operator =(const ExynosBuffer &other)
112 {
113 for (int i = 0; i < 3; i++) {
114 virt. extP[i] = other.virt.extP[i];
115 phys. extP[i] = other.phys.extP[i];
471812b7 116 fd. extFd[i] = other.fd.extFd[i];
20c51683
JC
117 reserved.extP[i] = other.reserved.extP[i];
118 size. extS[i] = other.size.extS[i];
119 }
120 return *this;
121 }
122
123 //! Operator(==) override
124 bool operator ==(const ExynosBuffer &other) const
125 {
126 return ( virt. extP[0] == other.virt.extP[0]
127 && virt. extP[1] == other.virt.extP[1]
128 && virt. extP[2] == other.virt.extP[2]
129 && phys. extP[0] == other.phys.extP[0]
130 && phys. extP[1] == other.phys.extP[1]
131 && phys. extP[2] == other.phys.extP[2]
471812b7
RSZ
132 && fd. extFd[0] == other.fd.extFd[0]
133 && fd. extFd[1] == other.fd.extFd[1]
134 && fd. extFd[2] == other.fd.extFd[2]
20c51683
JC
135 && reserved.extP[0] == other.reserved.extP[0]
136 && reserved.extP[1] == other.reserved.extP[1]
137 && reserved.extP[2] == other.reserved.extP[2]
138 && size. extS[0] == other.size.extS[0]
139 && size. extS[1] == other.size.extS[1]
140 && size. extS[2] == other.size.extS[2]);
141 }
142
143 //! Operator(!=) override
144 bool operator !=(const ExynosBuffer &other) const
145 {
146 // use operator(==)
147 return !(*this == other);
148 }
149
150 //! Get Buffer type
151 static int BUFFER_TYPE(ExynosBuffer *buf)
152 {
153 int type = BUFFER_TYPE_BASE;
154 if (buf->virt.p)
155 type |= BUFFER_TYPE_VIRT;
156 if (buf->phys.p)
157 type |= BUFFER_TYPE_PHYS;
471812b7
RSZ
158 if (buf->fd.fd >= 0)
159 type |= BUFFER_TYPE_FD;
20c51683
JC
160 if (buf->reserved.p)
161 type |= BUFFER_TYPE_RESERVED;
162
163 return type;
164 }
165#endif
166};
167
168#endif //EXYNOS_BUFFER_H_