xref: /aosp_15_r20/external/libdrm/intel/intel_bufmgr_priv.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright © 2008 Intel Corporation
3*7688df22SAndroid Build Coastguard Worker  *
4*7688df22SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*7688df22SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*7688df22SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*7688df22SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*7688df22SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*7688df22SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*7688df22SAndroid Build Coastguard Worker  *
11*7688df22SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*7688df22SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*7688df22SAndroid Build Coastguard Worker  * Software.
14*7688df22SAndroid Build Coastguard Worker  *
15*7688df22SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*7688df22SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*7688df22SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*7688df22SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*7688df22SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*7688df22SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*7688df22SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
22*7688df22SAndroid Build Coastguard Worker  *
23*7688df22SAndroid Build Coastguard Worker  * Authors:
24*7688df22SAndroid Build Coastguard Worker  *    Eric Anholt <[email protected]>
25*7688df22SAndroid Build Coastguard Worker  *
26*7688df22SAndroid Build Coastguard Worker  */
27*7688df22SAndroid Build Coastguard Worker 
28*7688df22SAndroid Build Coastguard Worker /**
29*7688df22SAndroid Build Coastguard Worker  * @file intel_bufmgr_priv.h
30*7688df22SAndroid Build Coastguard Worker  *
31*7688df22SAndroid Build Coastguard Worker  * Private definitions of Intel-specific bufmgr functions and structures.
32*7688df22SAndroid Build Coastguard Worker  */
33*7688df22SAndroid Build Coastguard Worker 
34*7688df22SAndroid Build Coastguard Worker #ifndef INTEL_BUFMGR_PRIV_H
35*7688df22SAndroid Build Coastguard Worker #define INTEL_BUFMGR_PRIV_H
36*7688df22SAndroid Build Coastguard Worker 
37*7688df22SAndroid Build Coastguard Worker /**
38*7688df22SAndroid Build Coastguard Worker  * Context for a buffer manager instance.
39*7688df22SAndroid Build Coastguard Worker  *
40*7688df22SAndroid Build Coastguard Worker  * Contains public methods followed by private storage for the buffer manager.
41*7688df22SAndroid Build Coastguard Worker  */
42*7688df22SAndroid Build Coastguard Worker struct _drm_intel_bufmgr {
43*7688df22SAndroid Build Coastguard Worker 	/**
44*7688df22SAndroid Build Coastguard Worker 	 * Allocate a buffer object.
45*7688df22SAndroid Build Coastguard Worker 	 *
46*7688df22SAndroid Build Coastguard Worker 	 * Buffer objects are not necessarily initially mapped into CPU virtual
47*7688df22SAndroid Build Coastguard Worker 	 * address space or graphics device aperture.  They must be mapped
48*7688df22SAndroid Build Coastguard Worker 	 * using bo_map() or drm_intel_gem_bo_map_gtt() to be used by the CPU.
49*7688df22SAndroid Build Coastguard Worker 	 */
50*7688df22SAndroid Build Coastguard Worker 	drm_intel_bo *(*bo_alloc) (drm_intel_bufmgr *bufmgr, const char *name,
51*7688df22SAndroid Build Coastguard Worker 				   unsigned long size, unsigned int alignment);
52*7688df22SAndroid Build Coastguard Worker 
53*7688df22SAndroid Build Coastguard Worker 	/**
54*7688df22SAndroid Build Coastguard Worker 	 * Allocate a buffer object, hinting that it will be used as a
55*7688df22SAndroid Build Coastguard Worker 	 * render target.
56*7688df22SAndroid Build Coastguard Worker 	 *
57*7688df22SAndroid Build Coastguard Worker 	 * This is otherwise the same as bo_alloc.
58*7688df22SAndroid Build Coastguard Worker 	 */
59*7688df22SAndroid Build Coastguard Worker 	drm_intel_bo *(*bo_alloc_for_render) (drm_intel_bufmgr *bufmgr,
60*7688df22SAndroid Build Coastguard Worker 					      const char *name,
61*7688df22SAndroid Build Coastguard Worker 					      unsigned long size,
62*7688df22SAndroid Build Coastguard Worker 					      unsigned int alignment);
63*7688df22SAndroid Build Coastguard Worker 
64*7688df22SAndroid Build Coastguard Worker 	/**
65*7688df22SAndroid Build Coastguard Worker 	 * Allocate a buffer object from an existing user accessible
66*7688df22SAndroid Build Coastguard Worker 	 * address malloc'd with the provided size.
67*7688df22SAndroid Build Coastguard Worker 	 * Alignment is used when mapping to the gtt.
68*7688df22SAndroid Build Coastguard Worker 	 * Flags may be I915_VMAP_READ_ONLY or I915_USERPTR_UNSYNCHRONIZED
69*7688df22SAndroid Build Coastguard Worker 	 */
70*7688df22SAndroid Build Coastguard Worker 	drm_intel_bo *(*bo_alloc_userptr)(drm_intel_bufmgr *bufmgr,
71*7688df22SAndroid Build Coastguard Worker 					  const char *name, void *addr,
72*7688df22SAndroid Build Coastguard Worker 					  uint32_t tiling_mode, uint32_t stride,
73*7688df22SAndroid Build Coastguard Worker 					  unsigned long size,
74*7688df22SAndroid Build Coastguard Worker 					  unsigned long flags);
75*7688df22SAndroid Build Coastguard Worker 
76*7688df22SAndroid Build Coastguard Worker 	/**
77*7688df22SAndroid Build Coastguard Worker 	 * Allocate a tiled buffer object.
78*7688df22SAndroid Build Coastguard Worker 	 *
79*7688df22SAndroid Build Coastguard Worker 	 * Alignment for tiled objects is set automatically; the 'flags'
80*7688df22SAndroid Build Coastguard Worker 	 * argument provides a hint about how the object will be used initially.
81*7688df22SAndroid Build Coastguard Worker 	 *
82*7688df22SAndroid Build Coastguard Worker 	 * Valid tiling formats are:
83*7688df22SAndroid Build Coastguard Worker 	 *  I915_TILING_NONE
84*7688df22SAndroid Build Coastguard Worker 	 *  I915_TILING_X
85*7688df22SAndroid Build Coastguard Worker 	 *  I915_TILING_Y
86*7688df22SAndroid Build Coastguard Worker 	 *
87*7688df22SAndroid Build Coastguard Worker 	 * Note the tiling format may be rejected; callers should check the
88*7688df22SAndroid Build Coastguard Worker 	 * 'tiling_mode' field on return, as well as the pitch value, which
89*7688df22SAndroid Build Coastguard Worker 	 * may have been rounded up to accommodate for tiling restrictions.
90*7688df22SAndroid Build Coastguard Worker 	 */
91*7688df22SAndroid Build Coastguard Worker 	drm_intel_bo *(*bo_alloc_tiled) (drm_intel_bufmgr *bufmgr,
92*7688df22SAndroid Build Coastguard Worker 					 const char *name,
93*7688df22SAndroid Build Coastguard Worker 					 int x, int y, int cpp,
94*7688df22SAndroid Build Coastguard Worker 					 uint32_t *tiling_mode,
95*7688df22SAndroid Build Coastguard Worker 					 unsigned long *pitch,
96*7688df22SAndroid Build Coastguard Worker 					 unsigned long flags);
97*7688df22SAndroid Build Coastguard Worker 
98*7688df22SAndroid Build Coastguard Worker 	/** Takes a reference on a buffer object */
99*7688df22SAndroid Build Coastguard Worker 	void (*bo_reference) (drm_intel_bo *bo);
100*7688df22SAndroid Build Coastguard Worker 
101*7688df22SAndroid Build Coastguard Worker 	/**
102*7688df22SAndroid Build Coastguard Worker 	 * Releases a reference on a buffer object, freeing the data if
103*7688df22SAndroid Build Coastguard Worker 	 * no references remain.
104*7688df22SAndroid Build Coastguard Worker 	 */
105*7688df22SAndroid Build Coastguard Worker 	void (*bo_unreference) (drm_intel_bo *bo);
106*7688df22SAndroid Build Coastguard Worker 
107*7688df22SAndroid Build Coastguard Worker 	/**
108*7688df22SAndroid Build Coastguard Worker 	 * Maps the buffer into userspace.
109*7688df22SAndroid Build Coastguard Worker 	 *
110*7688df22SAndroid Build Coastguard Worker 	 * This function will block waiting for any existing execution on the
111*7688df22SAndroid Build Coastguard Worker 	 * buffer to complete, first.  The resulting mapping is available at
112*7688df22SAndroid Build Coastguard Worker 	 * buf->virtual.
113*7688df22SAndroid Build Coastguard Worker 	 */
114*7688df22SAndroid Build Coastguard Worker 	int (*bo_map) (drm_intel_bo *bo, int write_enable);
115*7688df22SAndroid Build Coastguard Worker 
116*7688df22SAndroid Build Coastguard Worker 	/**
117*7688df22SAndroid Build Coastguard Worker 	 * Reduces the refcount on the userspace mapping of the buffer
118*7688df22SAndroid Build Coastguard Worker 	 * object.
119*7688df22SAndroid Build Coastguard Worker 	 */
120*7688df22SAndroid Build Coastguard Worker 	int (*bo_unmap) (drm_intel_bo *bo);
121*7688df22SAndroid Build Coastguard Worker 
122*7688df22SAndroid Build Coastguard Worker 	/**
123*7688df22SAndroid Build Coastguard Worker 	 * Write data into an object.
124*7688df22SAndroid Build Coastguard Worker 	 *
125*7688df22SAndroid Build Coastguard Worker 	 * This is an optional function, if missing,
126*7688df22SAndroid Build Coastguard Worker 	 * drm_intel_bo will map/memcpy/unmap.
127*7688df22SAndroid Build Coastguard Worker 	 */
128*7688df22SAndroid Build Coastguard Worker 	int (*bo_subdata) (drm_intel_bo *bo, unsigned long offset,
129*7688df22SAndroid Build Coastguard Worker 			   unsigned long size, const void *data);
130*7688df22SAndroid Build Coastguard Worker 
131*7688df22SAndroid Build Coastguard Worker 	/**
132*7688df22SAndroid Build Coastguard Worker 	 * Read data from an object
133*7688df22SAndroid Build Coastguard Worker 	 *
134*7688df22SAndroid Build Coastguard Worker 	 * This is an optional function, if missing,
135*7688df22SAndroid Build Coastguard Worker 	 * drm_intel_bo will map/memcpy/unmap.
136*7688df22SAndroid Build Coastguard Worker 	 */
137*7688df22SAndroid Build Coastguard Worker 	int (*bo_get_subdata) (drm_intel_bo *bo, unsigned long offset,
138*7688df22SAndroid Build Coastguard Worker 			       unsigned long size, void *data);
139*7688df22SAndroid Build Coastguard Worker 
140*7688df22SAndroid Build Coastguard Worker 	/**
141*7688df22SAndroid Build Coastguard Worker 	 * Waits for rendering to an object by the GPU to have completed.
142*7688df22SAndroid Build Coastguard Worker 	 *
143*7688df22SAndroid Build Coastguard Worker 	 * This is not required for any access to the BO by bo_map,
144*7688df22SAndroid Build Coastguard Worker 	 * bo_subdata, etc.  It is merely a way for the driver to implement
145*7688df22SAndroid Build Coastguard Worker 	 * glFinish.
146*7688df22SAndroid Build Coastguard Worker 	 */
147*7688df22SAndroid Build Coastguard Worker 	void (*bo_wait_rendering) (drm_intel_bo *bo);
148*7688df22SAndroid Build Coastguard Worker 
149*7688df22SAndroid Build Coastguard Worker 	/**
150*7688df22SAndroid Build Coastguard Worker 	 * Tears down the buffer manager instance.
151*7688df22SAndroid Build Coastguard Worker 	 */
152*7688df22SAndroid Build Coastguard Worker 	void (*destroy) (drm_intel_bufmgr *bufmgr);
153*7688df22SAndroid Build Coastguard Worker 
154*7688df22SAndroid Build Coastguard Worker 	/**
155*7688df22SAndroid Build Coastguard Worker 	 * Indicate if the buffer can be placed anywhere in the full ppgtt
156*7688df22SAndroid Build Coastguard Worker 	 * address range (2^48).
157*7688df22SAndroid Build Coastguard Worker 	 *
158*7688df22SAndroid Build Coastguard Worker 	 * Any resource used with flat/heapless (0x00000000-0xfffff000)
159*7688df22SAndroid Build Coastguard Worker 	 * General State Heap (GSH) or Instructions State Heap (ISH) must
160*7688df22SAndroid Build Coastguard Worker 	 * be in a 32-bit range. 48-bit range will only be used when explicitly
161*7688df22SAndroid Build Coastguard Worker 	 * requested.
162*7688df22SAndroid Build Coastguard Worker 	 *
163*7688df22SAndroid Build Coastguard Worker 	 * \param bo Buffer to set the use_48b_address_range flag.
164*7688df22SAndroid Build Coastguard Worker 	 * \param enable The flag value.
165*7688df22SAndroid Build Coastguard Worker 	 */
166*7688df22SAndroid Build Coastguard Worker 	void (*bo_use_48b_address_range) (drm_intel_bo *bo, uint32_t enable);
167*7688df22SAndroid Build Coastguard Worker 
168*7688df22SAndroid Build Coastguard Worker 	/**
169*7688df22SAndroid Build Coastguard Worker 	 * Add relocation entry in reloc_buf, which will be updated with the
170*7688df22SAndroid Build Coastguard Worker 	 * target buffer's real offset on on command submission.
171*7688df22SAndroid Build Coastguard Worker 	 *
172*7688df22SAndroid Build Coastguard Worker 	 * Relocations remain in place for the lifetime of the buffer object.
173*7688df22SAndroid Build Coastguard Worker 	 *
174*7688df22SAndroid Build Coastguard Worker 	 * \param bo Buffer to write the relocation into.
175*7688df22SAndroid Build Coastguard Worker 	 * \param offset Byte offset within reloc_bo of the pointer to
176*7688df22SAndroid Build Coastguard Worker 	 *			target_bo.
177*7688df22SAndroid Build Coastguard Worker 	 * \param target_bo Buffer whose offset should be written into the
178*7688df22SAndroid Build Coastguard Worker 	 *                  relocation entry.
179*7688df22SAndroid Build Coastguard Worker 	 * \param target_offset Constant value to be added to target_bo's
180*7688df22SAndroid Build Coastguard Worker 	 *			offset in relocation entry.
181*7688df22SAndroid Build Coastguard Worker 	 * \param read_domains GEM read domains which the buffer will be
182*7688df22SAndroid Build Coastguard Worker 	 *			read into by the command that this relocation
183*7688df22SAndroid Build Coastguard Worker 	 *			is part of.
184*7688df22SAndroid Build Coastguard Worker 	 * \param write_domains GEM read domains which the buffer will be
185*7688df22SAndroid Build Coastguard Worker 	 *			dirtied in by the command that this
186*7688df22SAndroid Build Coastguard Worker 	 *			relocation is part of.
187*7688df22SAndroid Build Coastguard Worker 	 */
188*7688df22SAndroid Build Coastguard Worker 	int (*bo_emit_reloc) (drm_intel_bo *bo, uint32_t offset,
189*7688df22SAndroid Build Coastguard Worker 			      drm_intel_bo *target_bo, uint32_t target_offset,
190*7688df22SAndroid Build Coastguard Worker 			      uint32_t read_domains, uint32_t write_domain);
191*7688df22SAndroid Build Coastguard Worker 	int (*bo_emit_reloc_fence)(drm_intel_bo *bo, uint32_t offset,
192*7688df22SAndroid Build Coastguard Worker 				   drm_intel_bo *target_bo,
193*7688df22SAndroid Build Coastguard Worker 				   uint32_t target_offset,
194*7688df22SAndroid Build Coastguard Worker 				   uint32_t read_domains,
195*7688df22SAndroid Build Coastguard Worker 				   uint32_t write_domain);
196*7688df22SAndroid Build Coastguard Worker 
197*7688df22SAndroid Build Coastguard Worker 	/** Executes the command buffer pointed to by bo. */
198*7688df22SAndroid Build Coastguard Worker 	int (*bo_exec) (drm_intel_bo *bo, int used,
199*7688df22SAndroid Build Coastguard Worker 			drm_clip_rect_t *cliprects, int num_cliprects,
200*7688df22SAndroid Build Coastguard Worker 			int DR4);
201*7688df22SAndroid Build Coastguard Worker 
202*7688df22SAndroid Build Coastguard Worker 	/** Executes the command buffer pointed to by bo on the selected
203*7688df22SAndroid Build Coastguard Worker 	 * ring buffer
204*7688df22SAndroid Build Coastguard Worker 	 */
205*7688df22SAndroid Build Coastguard Worker 	int (*bo_mrb_exec) (drm_intel_bo *bo, int used,
206*7688df22SAndroid Build Coastguard Worker 			    drm_clip_rect_t *cliprects, int num_cliprects,
207*7688df22SAndroid Build Coastguard Worker 			    int DR4, unsigned flags);
208*7688df22SAndroid Build Coastguard Worker 
209*7688df22SAndroid Build Coastguard Worker 	/**
210*7688df22SAndroid Build Coastguard Worker 	 * Pin a buffer to the aperture and fix the offset until unpinned
211*7688df22SAndroid Build Coastguard Worker 	 *
212*7688df22SAndroid Build Coastguard Worker 	 * \param buf Buffer to pin
213*7688df22SAndroid Build Coastguard Worker 	 * \param alignment Required alignment for aperture, in bytes
214*7688df22SAndroid Build Coastguard Worker 	 */
215*7688df22SAndroid Build Coastguard Worker 	int (*bo_pin) (drm_intel_bo *bo, uint32_t alignment);
216*7688df22SAndroid Build Coastguard Worker 
217*7688df22SAndroid Build Coastguard Worker 	/**
218*7688df22SAndroid Build Coastguard Worker 	 * Unpin a buffer from the aperture, allowing it to be removed
219*7688df22SAndroid Build Coastguard Worker 	 *
220*7688df22SAndroid Build Coastguard Worker 	 * \param buf Buffer to unpin
221*7688df22SAndroid Build Coastguard Worker 	 */
222*7688df22SAndroid Build Coastguard Worker 	int (*bo_unpin) (drm_intel_bo *bo);
223*7688df22SAndroid Build Coastguard Worker 
224*7688df22SAndroid Build Coastguard Worker 	/**
225*7688df22SAndroid Build Coastguard Worker 	 * Ask that the buffer be placed in tiling mode
226*7688df22SAndroid Build Coastguard Worker 	 *
227*7688df22SAndroid Build Coastguard Worker 	 * \param buf Buffer to set tiling mode for
228*7688df22SAndroid Build Coastguard Worker 	 * \param tiling_mode desired, and returned tiling mode
229*7688df22SAndroid Build Coastguard Worker 	 */
230*7688df22SAndroid Build Coastguard Worker 	int (*bo_set_tiling) (drm_intel_bo *bo, uint32_t * tiling_mode,
231*7688df22SAndroid Build Coastguard Worker 			      uint32_t stride);
232*7688df22SAndroid Build Coastguard Worker 
233*7688df22SAndroid Build Coastguard Worker 	/**
234*7688df22SAndroid Build Coastguard Worker 	 * Get the current tiling (and resulting swizzling) mode for the bo.
235*7688df22SAndroid Build Coastguard Worker 	 *
236*7688df22SAndroid Build Coastguard Worker 	 * \param buf Buffer to get tiling mode for
237*7688df22SAndroid Build Coastguard Worker 	 * \param tiling_mode returned tiling mode
238*7688df22SAndroid Build Coastguard Worker 	 * \param swizzle_mode returned swizzling mode
239*7688df22SAndroid Build Coastguard Worker 	 */
240*7688df22SAndroid Build Coastguard Worker 	int (*bo_get_tiling) (drm_intel_bo *bo, uint32_t * tiling_mode,
241*7688df22SAndroid Build Coastguard Worker 			      uint32_t * swizzle_mode);
242*7688df22SAndroid Build Coastguard Worker 
243*7688df22SAndroid Build Coastguard Worker 	/**
244*7688df22SAndroid Build Coastguard Worker 	 * Set the offset at which this buffer will be softpinned
245*7688df22SAndroid Build Coastguard Worker 	 * \param bo Buffer to set the softpin offset for
246*7688df22SAndroid Build Coastguard Worker 	 * \param offset Softpin offset
247*7688df22SAndroid Build Coastguard Worker 	 */
248*7688df22SAndroid Build Coastguard Worker 	int (*bo_set_softpin_offset) (drm_intel_bo *bo, uint64_t offset);
249*7688df22SAndroid Build Coastguard Worker 
250*7688df22SAndroid Build Coastguard Worker 	/**
251*7688df22SAndroid Build Coastguard Worker 	 * Create a visible name for a buffer which can be used by other apps
252*7688df22SAndroid Build Coastguard Worker 	 *
253*7688df22SAndroid Build Coastguard Worker 	 * \param buf Buffer to create a name for
254*7688df22SAndroid Build Coastguard Worker 	 * \param name Returned name
255*7688df22SAndroid Build Coastguard Worker 	 */
256*7688df22SAndroid Build Coastguard Worker 	int (*bo_flink) (drm_intel_bo *bo, uint32_t * name);
257*7688df22SAndroid Build Coastguard Worker 
258*7688df22SAndroid Build Coastguard Worker 	/**
259*7688df22SAndroid Build Coastguard Worker 	 * Returns 1 if mapping the buffer for write could cause the process
260*7688df22SAndroid Build Coastguard Worker 	 * to block, due to the object being active in the GPU.
261*7688df22SAndroid Build Coastguard Worker 	 */
262*7688df22SAndroid Build Coastguard Worker 	int (*bo_busy) (drm_intel_bo *bo);
263*7688df22SAndroid Build Coastguard Worker 
264*7688df22SAndroid Build Coastguard Worker 	/**
265*7688df22SAndroid Build Coastguard Worker 	 * Specify the volatility of the buffer.
266*7688df22SAndroid Build Coastguard Worker 	 * \param bo Buffer to create a name for
267*7688df22SAndroid Build Coastguard Worker 	 * \param madv The purgeable status
268*7688df22SAndroid Build Coastguard Worker 	 *
269*7688df22SAndroid Build Coastguard Worker 	 * Use I915_MADV_DONTNEED to mark the buffer as purgeable, and it will be
270*7688df22SAndroid Build Coastguard Worker 	 * reclaimed under memory pressure. If you subsequently require the buffer,
271*7688df22SAndroid Build Coastguard Worker 	 * then you must pass I915_MADV_WILLNEED to mark the buffer as required.
272*7688df22SAndroid Build Coastguard Worker 	 *
273*7688df22SAndroid Build Coastguard Worker 	 * Returns 1 if the buffer was retained, or 0 if it was discarded whilst
274*7688df22SAndroid Build Coastguard Worker 	 * marked as I915_MADV_DONTNEED.
275*7688df22SAndroid Build Coastguard Worker 	 */
276*7688df22SAndroid Build Coastguard Worker 	int (*bo_madvise) (drm_intel_bo *bo, int madv);
277*7688df22SAndroid Build Coastguard Worker 
278*7688df22SAndroid Build Coastguard Worker 	int (*check_aperture_space) (drm_intel_bo ** bo_array, int count);
279*7688df22SAndroid Build Coastguard Worker 
280*7688df22SAndroid Build Coastguard Worker 	/**
281*7688df22SAndroid Build Coastguard Worker 	 * Disable buffer reuse for buffers which will be shared in some way,
282*7688df22SAndroid Build Coastguard Worker 	 * as with scanout buffers. When the buffer reference count goes to
283*7688df22SAndroid Build Coastguard Worker 	 * zero, it will be freed and not placed in the reuse list.
284*7688df22SAndroid Build Coastguard Worker 	 *
285*7688df22SAndroid Build Coastguard Worker 	 * \param bo Buffer to disable reuse for
286*7688df22SAndroid Build Coastguard Worker 	 */
287*7688df22SAndroid Build Coastguard Worker 	int (*bo_disable_reuse) (drm_intel_bo *bo);
288*7688df22SAndroid Build Coastguard Worker 
289*7688df22SAndroid Build Coastguard Worker 	/**
290*7688df22SAndroid Build Coastguard Worker 	 * Query whether a buffer is reusable.
291*7688df22SAndroid Build Coastguard Worker 	 *
292*7688df22SAndroid Build Coastguard Worker 	 * \param bo Buffer to query
293*7688df22SAndroid Build Coastguard Worker 	 */
294*7688df22SAndroid Build Coastguard Worker 	int (*bo_is_reusable) (drm_intel_bo *bo);
295*7688df22SAndroid Build Coastguard Worker 
296*7688df22SAndroid Build Coastguard Worker 	/**
297*7688df22SAndroid Build Coastguard Worker 	 *
298*7688df22SAndroid Build Coastguard Worker 	 * Return the pipe associated with a crtc_id so that vblank
299*7688df22SAndroid Build Coastguard Worker 	 * synchronization can use the correct data in the request.
300*7688df22SAndroid Build Coastguard Worker 	 * This is only supported for KMS and gem at this point, when
301*7688df22SAndroid Build Coastguard Worker 	 * unsupported, this function returns -1 and leaves the decision
302*7688df22SAndroid Build Coastguard Worker 	 * of what to do in that case to the caller
303*7688df22SAndroid Build Coastguard Worker 	 *
304*7688df22SAndroid Build Coastguard Worker 	 * \param bufmgr the associated buffer manager
305*7688df22SAndroid Build Coastguard Worker 	 * \param crtc_id the crtc identifier
306*7688df22SAndroid Build Coastguard Worker 	 */
307*7688df22SAndroid Build Coastguard Worker 	int (*get_pipe_from_crtc_id) (drm_intel_bufmgr *bufmgr, int crtc_id);
308*7688df22SAndroid Build Coastguard Worker 
309*7688df22SAndroid Build Coastguard Worker 	/** Returns true if target_bo is in the relocation tree rooted at bo. */
310*7688df22SAndroid Build Coastguard Worker 	int (*bo_references) (drm_intel_bo *bo, drm_intel_bo *target_bo);
311*7688df22SAndroid Build Coastguard Worker 
312*7688df22SAndroid Build Coastguard Worker 	/**< Enables verbose debugging printouts */
313*7688df22SAndroid Build Coastguard Worker 	int debug;
314*7688df22SAndroid Build Coastguard Worker };
315*7688df22SAndroid Build Coastguard Worker 
316*7688df22SAndroid Build Coastguard Worker struct _drm_intel_context {
317*7688df22SAndroid Build Coastguard Worker 	unsigned int ctx_id;
318*7688df22SAndroid Build Coastguard Worker 	struct _drm_intel_bufmgr *bufmgr;
319*7688df22SAndroid Build Coastguard Worker };
320*7688df22SAndroid Build Coastguard Worker 
321*7688df22SAndroid Build Coastguard Worker #define ALIGN(value, alignment)	((value + alignment - 1) & ~(alignment - 1))
322*7688df22SAndroid Build Coastguard Worker #define ROUND_UP_TO(x, y)	(((x) + (y) - 1) / (y) * (y))
323*7688df22SAndroid Build Coastguard Worker #define ROUND_UP_TO_MB(x)	ROUND_UP_TO((x), 1024*1024)
324*7688df22SAndroid Build Coastguard Worker 
325*7688df22SAndroid Build Coastguard Worker #endif /* INTEL_BUFMGR_PRIV_H */
326