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 <inki.dae@samsung.com>
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