VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/x11include/libdrm-2.3.0/xf86mm.h@ 17233

最後變更 在這個檔案從17233是 17232,由 vboxsync 提交於 16 年 前

Additions/x11/x11include: added header files needed for DRI support in vboxvideo

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 6.6 KB
 
1/**************************************************************************
2 *
3 * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND. USA.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 * USE OR OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * The above copyright notice and this permission notice (including the
23 * next paragraph) shall be included in all copies or substantial portions
24 * of the Software.
25 *
26 *
27 **************************************************************************/
28
29#ifndef _XF86MM_H_
30#define _XF86MM_H_
31#include <stddef.h>
32#include "drm.h"
33
34/*
35 * Note on multithreaded applications using this interface.
36 * Libdrm is not threadsafe, so common buffer, TTM, and fence objects need to
37 * be protected using an external mutex.
38 *
39 * Note: Don't protect the following functions, as it may lead to deadlocks:
40 * drmBOUnmap(), drmFenceBuffers().
41 * The kernel is synchronizing and refcounting buffer maps.
42 * User space only needs to refcount object usage within the same application.
43 */
44
45
46/*
47 * List macros heavily inspired by the Linux kernel
48 * list handling. No list looping yet.
49 */
50
51typedef struct _drmMMListHead
52{
53 struct _drmMMListHead *prev;
54 struct _drmMMListHead *next;
55} drmMMListHead;
56
57#define DRMINITLISTHEAD(__item) \
58 do{ \
59 (__item)->prev = (__item); \
60 (__item)->next = (__item); \
61 } while (0)
62
63#define DRMLISTADD(__item, __list) \
64 do { \
65 (__item)->prev = (__list); \
66 (__item)->next = (__list)->next; \
67 (__list)->next->prev = (__item); \
68 (__list)->next = (__item); \
69 } while (0)
70
71#define DRMLISTADDTAIL(__item, __list) \
72 do { \
73 (__item)->next = (__list); \
74 (__item)->prev = (__list)->prev; \
75 (__list)->prev->next = (__item); \
76 (__list)->prev = (__item); \
77 } while(0)
78
79#define DRMLISTDEL(__item) \
80 do { \
81 (__item)->prev->next = (__item)->next; \
82 (__item)->next->prev = (__item)->prev; \
83 } while(0)
84
85#define DRMLISTDELINIT(__item) \
86 do { \
87 (__item)->prev->next = (__item)->next; \
88 (__item)->next->prev = (__item)->prev; \
89 (__item)->next = (__item); \
90 (__item)->prev = (__item); \
91 } while(0)
92
93#define DRMLISTENTRY(__type, __item, __field) \
94 ((__type *)(((char *) (__item)) - offsetof(__type, __field)))
95
96typedef struct _drmFence{
97 unsigned handle;
98 int class;
99 unsigned type;
100 unsigned flags;
101 unsigned signaled;
102 unsigned pad[4]; /* for future expansion */
103} drmFence;
104
105typedef struct _drmBO{
106 drm_bo_type_t type;
107 unsigned handle;
108 drm_u64_t mapHandle;
109 unsigned flags;
110 unsigned mask;
111 unsigned mapFlags;
112 unsigned long size;
113 unsigned long offset;
114 unsigned long start;
115 unsigned replyFlags;
116 unsigned fenceFlags;
117 unsigned pageAlignment;
118 void *virtual;
119 void *mapVirtual;
120 int mapCount;
121 unsigned pad[8]; /* for future expansion */
122} drmBO;
123
124
125typedef struct _drmBONode {
126 drmMMListHead head;
127 drmBO *buf;
128 drm_bo_arg_t bo_arg;
129 unsigned long arg0;
130 unsigned long arg1;
131} drmBONode;
132
133typedef struct _drmBOList {
134 unsigned numTarget;
135 unsigned numCurrent;
136 unsigned numOnList;
137 drmMMListHead list;
138 drmMMListHead free;
139} drmBOList;
140
141/* Fencing */
142
143extern int drmFenceCreate(int fd, unsigned flags, int class,
144 unsigned type,
145 drmFence *fence);
146extern int drmFenceDestroy(int fd, const drmFence *fence);
147extern int drmFenceReference(int fd, unsigned handle, drmFence *fence);
148extern int drmFenceUnreference(int fd, const drmFence *fence);
149extern int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type);
150extern int drmFenceSignaled(int fd, drmFence *fence,
151 unsigned fenceType, int *signaled);
152extern int drmFenceWait(int fd, unsigned flags, drmFence *fence,
153 unsigned flush_type);
154extern int drmFenceEmit(int fd, unsigned flags, drmFence *fence,
155 unsigned emit_type);
156extern int drmFenceBuffers(int fd, unsigned flags, drmFence *fence);
157
158
159/*
160 * Buffer object list functions.
161 */
162
163extern void drmBOFreeList(drmBOList *list);
164extern int drmBOResetList(drmBOList *list);
165extern void *drmBOListIterator(drmBOList *list);
166extern void *drmBOListNext(drmBOList *list, void *iterator);
167extern drmBO *drmBOListBuf(void *iterator);
168extern int drmBOCreateList(int numTarget, drmBOList *list);
169
170/*
171 * Buffer object functions.
172 */
173
174extern int drmBOCreate(int fd, unsigned long start, unsigned long size,
175 unsigned pageAlignment,void *user_buffer,
176 drm_bo_type_t type, unsigned mask,
177 unsigned hint, drmBO *buf);
178extern int drmBODestroy(int fd, drmBO *buf);
179extern int drmBOReference(int fd, unsigned handle, drmBO *buf);
180extern int drmBOUnReference(int fd, drmBO *buf);
181extern int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
182 void **address);
183extern int drmBOUnmap(int fd, drmBO *buf);
184extern int drmBOValidate(int fd, drmBO *buf, unsigned flags, unsigned mask,
185 unsigned hint);
186extern int drmBOFence(int fd, drmBO *buf, unsigned flags, unsigned fenceHandle);
187extern int drmBOInfo(int fd, drmBO *buf);
188extern int drmBOBusy(int fd, drmBO *buf, int *busy);
189
190
191extern int drmAddValidateItem(drmBOList *list, drmBO *buf, unsigned flags,
192 unsigned mask,
193 int *newItem);
194extern int drmBOValidateList(int fd, drmBOList *list);
195extern int drmBOFenceList(int fd, drmBOList *list, unsigned fenceHandle);
196extern int drmBOWaitIdle(int fd, drmBO *buf, unsigned hint);
197
198/*
199 * Initialization functions.
200 */
201
202extern int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
203 unsigned memType);
204extern int drmMMTakedown(int fd, unsigned memType);
205extern int drmMMLock(int fd, unsigned memType);
206extern int drmMMUnlock(int fd, unsigned memType);
207
208
209#endif
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette