1 /**************************************************************************
3 * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA
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:
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.
22 * The above copyright notice and this permission notice (including the
23 * next paragraph) shall be included in all copies or substantial portions
27 **************************************************************************/
29 * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
30 * Keith Whitwell <keithw-at-tungstengraphics-dot-com>
33 #ifndef _PSB_BUFMGR_H_
34 #define _PSB_BUFMGR_H_
37 #include "ws_dri_fencemgr.h"
39 typedef struct _drmBONode
43 struct drm_i915_op_arg bo_arg
;
48 typedef struct _drmBOList
{
57 struct _DriFenceObject
;
58 struct _DriBufferObject
;
59 struct _DriBufferPool
;
60 struct _DriBufferList
;
63 * Return a pointer to the libdrm buffer object this DriBufferObject
67 extern drmBO
*driBOKernel(struct _DriBufferObject
*buf
);
68 extern void *driBOMap(struct _DriBufferObject
*buf
, unsigned flags
,
70 extern void driBOUnmap(struct _DriBufferObject
*buf
);
71 extern unsigned long driBOOffset(struct _DriBufferObject
*buf
);
72 extern unsigned long driBOPoolOffset(struct _DriBufferObject
*buf
);
74 extern uint64_t driBOFlags(struct _DriBufferObject
*buf
);
75 extern struct _DriBufferObject
*driBOReference(struct _DriBufferObject
*buf
);
76 extern void driBOUnReference(struct _DriBufferObject
*buf
);
78 extern int driBOData(struct _DriBufferObject
*r_buf
,
79 unsigned size
, const void *data
,
80 struct _DriBufferPool
*pool
, uint64_t flags
);
82 extern void driBOSubData(struct _DriBufferObject
*buf
,
83 unsigned long offset
, unsigned long size
,
85 extern void driBOGetSubData(struct _DriBufferObject
*buf
,
86 unsigned long offset
, unsigned long size
,
88 extern int driGenBuffers(struct _DriBufferPool
*pool
,
91 struct _DriBufferObject
*buffers
[],
92 unsigned alignment
, uint64_t flags
, unsigned hint
);
93 extern void driGenUserBuffer(struct _DriBufferPool
*pool
,
95 struct _DriBufferObject
*buffers
[],
96 void *ptr
, unsigned bytes
);
97 extern void driDeleteBuffers(unsigned n
, struct _DriBufferObject
*buffers
[]);
98 extern void driInitBufMgr(int fd
);
99 extern struct _DriBufferList
*driBOCreateList(int target
);
100 extern int driBOResetList(struct _DriBufferList
* list
);
101 extern void driBOAddListItem(struct _DriBufferList
* list
,
102 struct _DriBufferObject
*buf
,
103 uint64_t flags
, uint64_t mask
, int *itemLoc
,
104 struct _drmBONode
**node
);
106 extern void driBOValidateList(int fd
, struct _DriBufferList
* list
);
107 extern void driBOFreeList(struct _DriBufferList
* list
);
108 extern struct _DriFenceObject
*driBOFenceUserList(struct _DriFenceMgr
*mgr
,
109 struct _DriBufferList
*list
,
112 extern void driBOUnrefUserList(struct _DriBufferList
*list
);
113 extern void driBOValidateUserList(struct _DriBufferList
* list
);
114 extern drmBOList
*driGetdrmBOList(struct _DriBufferList
*list
);
115 extern void driPutdrmBOList(struct _DriBufferList
*list
);
117 extern void driBOFence(struct _DriBufferObject
*buf
,
118 struct _DriFenceObject
*fence
);
120 extern void driPoolTakeDown(struct _DriBufferPool
*pool
);
121 extern void driBOSetReferenced(struct _DriBufferObject
*buf
,
122 unsigned long handle
);
123 unsigned long driBOSize(struct _DriBufferObject
*buf
);
124 extern void driBOWaitIdle(struct _DriBufferObject
*buf
, int lazy
);
125 extern void driPoolTakeDown(struct _DriBufferPool
*pool
);
127 extern void driReadLockKernelBO(void);
128 extern void driReadUnlockKernelBO(void);
129 extern void driWriteLockKernelBO(void);
130 extern void driWriteUnlockKernelBO(void);
133 * For debugging purposes.
136 extern drmBOList
*driBOGetDRMBuffers(struct _DriBufferList
*list
);
137 extern drmBOList
*driBOGetDRIBuffers(struct _DriBufferList
*list
);