Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
gpu
drm
exynos
exynos_drm_gem.h
Go to the documentation of this file.
1
/* exynos_drm_gem.h
2
*
3
* Copyright (c) 2011 Samsung Electronics Co., Ltd.
4
* Authoer: Inki Dae <
[email protected]
>
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a
7
* copy of this software and associated documentation files (the "Software"),
8
* to deal in the Software without restriction, including without limitation
9
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
* and/or sell copies of the Software, and to permit persons to whom the
11
* Software is furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice (including the next
14
* paragraph) shall be included in all copies or substantial portions of the
15
* Software.
16
*
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
* VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
* OTHER DEALINGS IN THE SOFTWARE.
24
*/
25
26
#ifndef _EXYNOS_DRM_GEM_H_
27
#define _EXYNOS_DRM_GEM_H_
28
29
#define to_exynos_gem_obj(x) container_of(x,\
30
struct exynos_drm_gem_obj, base)
31
32
#define IS_NONCONTIG_BUFFER(f) (f & EXYNOS_BO_NONCONTIG)
33
34
/*
35
* exynos drm gem buffer structure.
36
*
37
* @kvaddr: kernel virtual address to allocated memory region.
38
* @dma_addr: bus address(accessed by dma) to allocated memory region.
39
* - this address could be physical address without IOMMU and
40
* device address with IOMMU.
41
* @sgt: sg table to transfer page data.
42
* @pages: contain all pages to allocated memory region.
43
* @page_size: could be 4K, 64K or 1MB.
44
* @size: size of allocated memory region.
45
*/
46
struct
exynos_drm_gem_buf
{
47
void
__iomem
*
kvaddr
;
48
dma_addr_t
dma_addr
;
49
struct
sg_table
*
sgt
;
50
struct
page
**
pages
;
51
unsigned
long
page_size
;
52
unsigned
long
size
;
53
};
54
55
/*
56
* exynos drm buffer structure.
57
*
58
* @base: a gem object.
59
* - a new handle to this gem object would be created
60
* by drm_gem_handle_create().
61
* @buffer: a pointer to exynos_drm_gem_buffer object.
62
* - contain the information to memory region allocated
63
* by user request or at framebuffer creation.
64
* continuous memory region allocated by user request
65
* or at framebuffer creation.
66
* @size: size requested from user, in bytes and this size is aligned
67
* in page unit.
68
* @flags: indicate memory type to allocated buffer and cache attruibute.
69
*
70
* P.S. this object would be transfered to user as kms_bo.handle so
71
* user can access the buffer through kms_bo.handle.
72
*/
73
struct
exynos_drm_gem_obj
{
74
struct
drm_gem_object
base
;
75
struct
exynos_drm_gem_buf
*
buffer
;
76
unsigned
long
size
;
77
unsigned
int
flags
;
78
};
79
80
struct
page
**
exynos_gem_get_pages
(
struct
drm_gem_object *obj,
gfp_t
gfpmask);
81
82
/* destroy a buffer with gem object */
83
void
exynos_drm_gem_destroy
(
struct
exynos_drm_gem_obj
*exynos_gem_obj);
84
85
/* create a private gem object and initialize it. */
86
struct
exynos_drm_gem_obj
*
exynos_drm_gem_init
(
struct
drm_device
*
dev
,
87
unsigned
long
size
);
88
89
/* create a new buffer with gem object */
90
struct
exynos_drm_gem_obj
*
exynos_drm_gem_create
(
struct
drm_device
*
dev
,
91
unsigned
int
flags
,
92
unsigned
long
size
);
93
94
/*
95
* request gem object creation and buffer allocation as the size
96
* that it is calculated with framebuffer information such as width,
97
* height and bpp.
98
*/
99
int
exynos_drm_gem_create_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
100
struct
drm_file *file_priv);
101
102
/*
103
* get dma address from gem handle and this function could be used for
104
* other drivers such as 2d/3d acceleration drivers.
105
* with this function call, gem object reference count would be increased.
106
*/
107
void
*
exynos_drm_gem_get_dma_addr
(
struct
drm_device
*
dev
,
108
unsigned
int
gem_handle,
109
struct
drm_file *file_priv);
110
111
/*
112
* put dma address from gem handle and this function could be used for
113
* other drivers such as 2d/3d acceleration drivers.
114
* with this function call, gem object reference count would be decreased.
115
*/
116
void
exynos_drm_gem_put_dma_addr
(
struct
drm_device
*
dev
,
117
unsigned
int
gem_handle,
118
struct
drm_file *file_priv);
119
120
/* get buffer offset to map to user space. */
121
int
exynos_drm_gem_map_offset_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
122
struct
drm_file *file_priv);
123
124
/*
125
* mmap the physically continuous memory that a gem object contains
126
* to user space.
127
*/
128
int
exynos_drm_gem_mmap_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
129
struct
drm_file *file_priv);
130
131
/* get buffer information to memory region allocated by gem. */
132
int
exynos_drm_gem_get_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
133
struct
drm_file *file_priv);
134
135
/* initialize gem object. */
136
int
exynos_drm_gem_init_object
(
struct
drm_gem_object *obj);
137
138
/* free gem object. */
139
void
exynos_drm_gem_free_object
(
struct
drm_gem_object *gem_obj);
140
141
/* create memory region for drm framebuffer. */
142
int
exynos_drm_gem_dumb_create
(
struct
drm_file *file_priv,
143
struct
drm_device
*
dev
,
144
struct
drm_mode_create_dumb
*args);
145
146
/* map memory region for drm framebuffer to user space. */
147
int
exynos_drm_gem_dumb_map_offset
(
struct
drm_file *file_priv,
148
struct
drm_device
*
dev
,
uint32_t
handle
,
149
uint64_t
*
offset
);
150
151
/*
152
* destroy memory region allocated.
153
* - a gem handle and physical memory region pointed by a gem object
154
* would be released by drm_gem_handle_delete().
155
*/
156
int
exynos_drm_gem_dumb_destroy
(
struct
drm_file *file_priv,
157
struct
drm_device
*
dev
,
158
unsigned
int
handle
);
159
160
/* page fault handler and mmap fault address(virtual) to physical memory. */
161
int
exynos_drm_gem_fault
(
struct
vm_area_struct
*vma,
struct
vm_fault *vmf);
162
163
/* set vm_flags and we can change the vm attribute to other one at here. */
164
int
exynos_drm_gem_mmap
(
struct
file
*filp,
struct
vm_area_struct
*vma);
165
166
#endif
Generated on Thu Jan 10 2013 13:31:23 for Linux Kernel by
1.8.2