wsbm_manager.h revision 8acea2d0d04b7aff3fb59bb071cc7a69c47b9929
183827f40a2d97261528087331b0bee6ce2cf27c5root/************************************************************************** 283827f40a2d97261528087331b0bee6ce2cf27c5root * 383827f40a2d97261528087331b0bee6ce2cf27c5root * Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA 483827f40a2d97261528087331b0bee6ce2cf27c5root * All Rights Reserved. 583827f40a2d97261528087331b0bee6ce2cf27c5root * Copyright 2009 Vmware, Inc., Palo Alto, CA., USA 683827f40a2d97261528087331b0bee6ce2cf27c5root * All Rights Reserved. 783827f40a2d97261528087331b0bee6ce2cf27c5root * 883827f40a2d97261528087331b0bee6ce2cf27c5root * Permission is hereby granted, free of charge, to any person obtaining a 983827f40a2d97261528087331b0bee6ce2cf27c5root * copy of this software and associated documentation files (the 1083827f40a2d97261528087331b0bee6ce2cf27c5root * "Software"), to deal in the Software without restriction, including 1183827f40a2d97261528087331b0bee6ce2cf27c5root * without limitation the rights to use, copy, modify, merge, publish, 1283827f40a2d97261528087331b0bee6ce2cf27c5root * distribute, sub license, and/or sell copies of the Software, and to 1383827f40a2d97261528087331b0bee6ce2cf27c5root * permit persons to whom the Software is furnished to do so, subject to 1483827f40a2d97261528087331b0bee6ce2cf27c5root * the following conditions: 1583827f40a2d97261528087331b0bee6ce2cf27c5root * 1683827f40a2d97261528087331b0bee6ce2cf27c5root * The above copyright notice and this permission notice (including the 1783827f40a2d97261528087331b0bee6ce2cf27c5root * next paragraph) shall be included in all copies or substantial portions 1883827f40a2d97261528087331b0bee6ce2cf27c5root * of the Software. 1983827f40a2d97261528087331b0bee6ce2cf27c5root * 2083827f40a2d97261528087331b0bee6ce2cf27c5root * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 2183827f40a2d97261528087331b0bee6ce2cf27c5root * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 2283827f40a2d97261528087331b0bee6ce2cf27c5root * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 2383827f40a2d97261528087331b0bee6ce2cf27c5root * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 2483827f40a2d97261528087331b0bee6ce2cf27c5root * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2583827f40a2d97261528087331b0bee6ce2cf27c5root * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 2683827f40a2d97261528087331b0bee6ce2cf27c5root * USE OR OTHER DEALINGS IN THE SOFTWARE. 2783827f40a2d97261528087331b0bee6ce2cf27c5root * 2883827f40a2d97261528087331b0bee6ce2cf27c5root **************************************************************************/ 2983827f40a2d97261528087331b0bee6ce2cf27c5root/* 3083827f40a2d97261528087331b0bee6ce2cf27c5root * Authors: Thomas Hellstr�m <thomas-at-tungstengraphics-dot-com> 3183827f40a2d97261528087331b0bee6ce2cf27c5root * Keith Whitwell <keithw-at-tungstengraphics-dot-com> 3283827f40a2d97261528087331b0bee6ce2cf27c5root */ 3383827f40a2d97261528087331b0bee6ce2cf27c5root 3483827f40a2d97261528087331b0bee6ce2cf27c5root#ifndef _WSBM_MANAGER_H_ 3583827f40a2d97261528087331b0bee6ce2cf27c5root#define _WSBM_MANAGER_H_ 3683827f40a2d97261528087331b0bee6ce2cf27c5root#include "wsbm_fencemgr.h" 3783827f40a2d97261528087331b0bee6ce2cf27c5root#include "wsbm_util.h" 3883827f40a2d97261528087331b0bee6ce2cf27c5root#include "wsbm_driver.h" 3983827f40a2d97261528087331b0bee6ce2cf27c5root 4083827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_VERSION_MAJOR 1 4183827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_VERSION_MINOR 1 4283827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_VERSION_PL 0 4383827f40a2d97261528087331b0bee6ce2cf27c5root 4483827f40a2d97261528087331b0bee6ce2cf27c5rootstruct _WsbmFenceObject; 4583827f40a2d97261528087331b0bee6ce2cf27c5rootstruct _WsbmBufferObject; 4683827f40a2d97261528087331b0bee6ce2cf27c5rootstruct _WsbmBufferPool; 4783827f40a2d97261528087331b0bee6ce2cf27c5rootstruct _WsbmBufferList; 4883827f40a2d97261528087331b0bee6ce2cf27c5root 4983827f40a2d97261528087331b0bee6ce2cf27c5root/* 5083827f40a2d97261528087331b0bee6ce2cf27c5root * These flags mimics the TTM closely, but since 5183827f40a2d97261528087331b0bee6ce2cf27c5root * this library is not dependant on TTM, we need to 5283827f40a2d97261528087331b0bee6ce2cf27c5root * replicate them here, and if there is a discrepancy, 5383827f40a2d97261528087331b0bee6ce2cf27c5root * that needs to be resolved in the buffer pool using 5483827f40a2d97261528087331b0bee6ce2cf27c5root * the TTM flags. 5583827f40a2d97261528087331b0bee6ce2cf27c5root */ 5683827f40a2d97261528087331b0bee6ce2cf27c5root 5783827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_MASK_MEM 0x0000FFFF 5883827f40a2d97261528087331b0bee6ce2cf27c5root 5983827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_SYSTEM (1 << 0) 6083827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_TT (1 << 1) 6183827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_VRAM (1 << 2) 6283827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_PRIV0 (1 << 3) 6383827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_SWAPPED (1 << 15) 6483827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_CACHED (1 << 16) 6583827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_UNCACHED (1 << 17) 6683827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_WC (1 << 18) 6783827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_SHARED (1 << 20) 6883827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_PL_FLAG_NO_EVICT (1 << 21) 6983827f40a2d97261528087331b0bee6ce2cf27c5root 7083827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_ACCESS_READ (1 << 0) 7183827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_ACCESS_WRITE (1 << 1) 7283827f40a2d97261528087331b0bee6ce2cf27c5root 7383827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_SYNCCPU_READ WSBM_ACCESS_READ 7483827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_SYNCCPU_WRITE WSBM_ACCESS_WRITE 7583827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_SYNCCPU_DONT_BLOCK (1 << 2) 7683827f40a2d97261528087331b0bee6ce2cf27c5root#define WSBM_SYNCCPU_TRY_CACHED (1 << 3) 7783827f40a2d97261528087331b0bee6ce2cf27c5root 7883827f40a2d97261528087331b0bee6ce2cf27c5rootextern void *wsbmBOMap(struct _WsbmBufferObject *buf, unsigned mode); 7983827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmBOUnmap(struct _WsbmBufferObject *buf); 8083827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOSyncForCpu(struct _WsbmBufferObject *buf, unsigned mode); 8183827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmBOReleaseFromCpu(struct _WsbmBufferObject *buf, 8283827f40a2d97261528087331b0bee6ce2cf27c5root unsigned mode); 8383827f40a2d97261528087331b0bee6ce2cf27c5root 8483827f40a2d97261528087331b0bee6ce2cf27c5rootextern unsigned long wsbmBOOffsetHint(struct _WsbmBufferObject *buf); 8583827f40a2d97261528087331b0bee6ce2cf27c5rootextern unsigned long wsbmBOPoolOffset(struct _WsbmBufferObject *buf); 8683827f40a2d97261528087331b0bee6ce2cf27c5root 8783827f40a2d97261528087331b0bee6ce2cf27c5rootextern uint32_t wsbmBOPlacementHint(struct _WsbmBufferObject *buf); 8883827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _WsbmBufferObject *wsbmBOReference(struct _WsbmBufferObject 8983827f40a2d97261528087331b0bee6ce2cf27c5root *buf); 9083827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmBOUnreference(struct _WsbmBufferObject **p_buf); 9183827f40a2d97261528087331b0bee6ce2cf27c5root 9283827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOData(struct _WsbmBufferObject *r_buf, 9383827f40a2d97261528087331b0bee6ce2cf27c5root unsigned size, const void *data, 9483827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmBufferPool *pool, uint32_t placement); 958acea2d0d04b7aff3fb59bb071cc7a69c47b9929Fei Jiang 968acea2d0d04b7aff3fb59bb071cc7a69c47b9929Fei Jiangextern int wsbmBODataUB(struct _WsbmBufferObject *buf, 978acea2d0d04b7aff3fb59bb071cc7a69c47b9929Fei Jiang unsigned size, const void *data, struct _WsbmBufferPool *newPool, 988acea2d0d04b7aff3fb59bb071cc7a69c47b9929Fei Jiang uint32_t placement, const unsigned long *user_ptr); 998acea2d0d04b7aff3fb59bb071cc7a69c47b9929Fei Jiang 10083827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOSetStatus(struct _WsbmBufferObject *buf, 10183827f40a2d97261528087331b0bee6ce2cf27c5root uint32_t setPlacement, uint32_t clrPlacement); 10283827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOSubData(struct _WsbmBufferObject *buf, 10383827f40a2d97261528087331b0bee6ce2cf27c5root unsigned long offset, unsigned long size, 10483827f40a2d97261528087331b0bee6ce2cf27c5root const void *data, 10583827f40a2d97261528087331b0bee6ce2cf27c5root int (*accelCopy) (struct _WsbmBufferObject *, 10683827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmBufferObject *)); 10783827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _WsbmBufferObject *wsbmBOClone(struct _WsbmBufferObject *buf, 10883827f40a2d97261528087331b0bee6ce2cf27c5root int (*accelCopy) (struct 10983827f40a2d97261528087331b0bee6ce2cf27c5root _WsbmBufferObject 11083827f40a2d97261528087331b0bee6ce2cf27c5root *, 11183827f40a2d97261528087331b0bee6ce2cf27c5root struct 11283827f40a2d97261528087331b0bee6ce2cf27c5root _WsbmBufferObject 11383827f40a2d97261528087331b0bee6ce2cf27c5root *)); 11483827f40a2d97261528087331b0bee6ce2cf27c5root 11583827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOGetSubData(struct _WsbmBufferObject *buf, 11683827f40a2d97261528087331b0bee6ce2cf27c5root unsigned long offset, unsigned long size, 11783827f40a2d97261528087331b0bee6ce2cf27c5root void *data); 11883827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmGenBuffers(struct _WsbmBufferPool *pool, 11983827f40a2d97261528087331b0bee6ce2cf27c5root unsigned n, 12083827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmBufferObject *buffers[], 12183827f40a2d97261528087331b0bee6ce2cf27c5root unsigned alignment, uint32_t placement); 12283827f40a2d97261528087331b0bee6ce2cf27c5root 12383827f40a2d97261528087331b0bee6ce2cf27c5rootstruct _WsbmBufferObject *wsbmBOCreateSimple(struct _WsbmBufferPool *pool, 12483827f40a2d97261528087331b0bee6ce2cf27c5root unsigned long size, 12583827f40a2d97261528087331b0bee6ce2cf27c5root uint32_t placement, 12683827f40a2d97261528087331b0bee6ce2cf27c5root unsigned alignment, 12783827f40a2d97261528087331b0bee6ce2cf27c5root size_t extra_size, 12883827f40a2d97261528087331b0bee6ce2cf27c5root size_t * offset); 12983827f40a2d97261528087331b0bee6ce2cf27c5root 13083827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmDeleteBuffers(unsigned n, 13183827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmBufferObject *buffers[]); 13283827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _WsbmBufferList *wsbmBOCreateList(int target, 13383827f40a2d97261528087331b0bee6ce2cf27c5root int hasKernelBuffers); 13483827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOResetList(struct _WsbmBufferList *list); 13583827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOAddListItem(struct _WsbmBufferList *list, 13683827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmBufferObject *buf, 13783827f40a2d97261528087331b0bee6ce2cf27c5root uint64_t flags, uint64_t mask, int *itemLoc, 13883827f40a2d97261528087331b0bee6ce2cf27c5root struct _ValidateNode **node); 13983827f40a2d97261528087331b0bee6ce2cf27c5root 14083827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmBOFreeList(struct _WsbmBufferList *list); 14183827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOFenceUserList(struct _WsbmBufferList *list, 14283827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmFenceObject *fence); 14383827f40a2d97261528087331b0bee6ce2cf27c5root 14483827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOUnrefUserList(struct _WsbmBufferList *list); 14583827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOValidateUserList(struct _WsbmBufferList *list); 14683827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOUnvalidateUserList(struct _WsbmBufferList *list); 14783827f40a2d97261528087331b0bee6ce2cf27c5root 14883827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmBOFence(struct _WsbmBufferObject *buf, 14983827f40a2d97261528087331b0bee6ce2cf27c5root struct _WsbmFenceObject *fence); 15083827f40a2d97261528087331b0bee6ce2cf27c5root 15183827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmPoolTakeDown(struct _WsbmBufferPool *pool); 15283827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOSetReferenced(struct _WsbmBufferObject *buf, 15383827f40a2d97261528087331b0bee6ce2cf27c5root unsigned long handle); 15483827f40a2d97261528087331b0bee6ce2cf27c5rootunsigned long wsbmBOSize(struct _WsbmBufferObject *buf); 15583827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmBOWaitIdle(struct _WsbmBufferObject *buf, int lazy); 15683827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmBOOnList(const struct _WsbmBufferObject *buf); 15783827f40a2d97261528087331b0bee6ce2cf27c5root 15883827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmPoolTakeDown(struct _WsbmBufferPool *pool); 15983827f40a2d97261528087331b0bee6ce2cf27c5root 16083827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmReadLockKernelBO(void); 16183827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmReadUnlockKernelBO(void); 16283827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmWriteLockKernelBO(void); 16383827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmWriteUnlockKernelBO(void); 16483827f40a2d97261528087331b0bee6ce2cf27c5root 16583827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmInit(struct _WsbmThreadFuncs *tf, struct _WsbmVNodeFuncs *vf); 16683827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmTakedown(void); 16783827f40a2d97261528087331b0bee6ce2cf27c5rootextern int wsbmIsInitialized(void); 16883827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmCommonDataSet(void *d); 16983827f40a2d97261528087331b0bee6ce2cf27c5rootextern void *wsbmCommonDataGet(void); 17083827f40a2d97261528087331b0bee6ce2cf27c5root 17183827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _ValidateList *wsbmGetKernelValidateList(struct _WsbmBufferList 17283827f40a2d97261528087331b0bee6ce2cf27c5root *list); 17383827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _ValidateList *wsbmGetUserValidateList(struct _WsbmBufferList 17483827f40a2d97261528087331b0bee6ce2cf27c5root *list); 17583827f40a2d97261528087331b0bee6ce2cf27c5root 17683827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _ValidateNode *validateListNode(void *iterator); 17783827f40a2d97261528087331b0bee6ce2cf27c5rootextern void *validateListIterator(struct _ValidateList *list); 17883827f40a2d97261528087331b0bee6ce2cf27c5rootextern void *validateListNext(struct _ValidateList *list, void *iterator); 17983827f40a2d97261528087331b0bee6ce2cf27c5root 18083827f40a2d97261528087331b0bee6ce2cf27c5rootextern uint32_t wsbmKBufHandle(const struct _WsbmKernelBuf *); 18183827f40a2d97261528087331b0bee6ce2cf27c5rootextern void wsbmUpdateKBuf(struct _WsbmKernelBuf *, 18283827f40a2d97261528087331b0bee6ce2cf27c5root uint64_t gpuOffset, 18383827f40a2d97261528087331b0bee6ce2cf27c5root uint32_t placement, uint32_t fence_flags); 18483827f40a2d97261528087331b0bee6ce2cf27c5root 18583827f40a2d97261528087331b0bee6ce2cf27c5rootextern struct _WsbmKernelBuf *wsbmKBuf(const struct _WsbmBufferObject *buf); 18683827f40a2d97261528087331b0bee6ce2cf27c5root 18783827f40a2d97261528087331b0bee6ce2cf27c5root#endif 188