From: Ajit Kamat <[email protected]> IMG ED4043: IPGear 10334: TXTTYPE for EGL image source and by default
Make sure to use matching usermode driver. Signed-off-by: Ajit Kamat <[email protected]> Signed-off-by: Hitesh K. Patel <[email protected]> --- drivers/staging/mrst/pvr/include4/pvrversion.h | 4 +- drivers/staging/mrst/pvr/include4/servicesext.h | 10 +++ .../services4/srvkm/bridged/bridged_pvr_bridge.c | 2 +- .../mrst/pvr/services4/srvkm/common/pvrsrv.c | 26 ++++++-- .../mrst/pvr/services4/srvkm/common/queue.c | 4 +- .../pvr/services4/srvkm/devices/sgx/sgxconfig.h | 9 ++- .../mrst/pvr/services4/srvkm/devices/sgx/sgxinit.c | 4 +- .../pvr/services4/srvkm/devices/sgx/sgxpower.c | 6 +- .../pvr/services4/srvkm/devices/sgx/sgxreset.c | 3 +- .../pvr/services4/srvkm/devices/sgx/sgxutils.c | 19 ++++--- .../mrst/pvr/services4/srvkm/env/linux/mutils.h | 2 +- .../mrst/pvr/services4/srvkm/env/linux/osfunc.c | 59 ++++++++++++++++---- .../mrst/pvr/services4/srvkm/include/device.h | 5 +- .../mrst/pvr/services4/srvkm/include/osfunc.h | 1 + 14 files changed, 114 insertions(+), 40 deletions(-) diff --git a/drivers/staging/mrst/pvr/include4/pvrversion.h b/drivers/staging/mrst/pvr/include4/pvrversion.h index dafdcc0..ad42d39 100644 --- a/drivers/staging/mrst/pvr/include4/pvrversion.h +++ b/drivers/staging/mrst/pvr/include4/pvrversion.h @@ -30,8 +30,8 @@ #define PVRVERSION_MAJ 1 #define PVRVERSION_MIN 6 #define PVRVERSION_BRANCH 16 -#define PVRVERSION_BUILD 3999 -#define PVRVERSION_STRING "1.6.16.3999" +#define PVRVERSION_BUILD 4043 +#define PVRVERSION_STRING "1.6.16.4043" #define PVRVERSION_FILE "eurasiacon.pj" #endif diff --git a/drivers/staging/mrst/pvr/include4/servicesext.h b/drivers/staging/mrst/pvr/include4/servicesext.h index 34491fd..bcd9cfe 100644 --- a/drivers/staging/mrst/pvr/include4/servicesext.h +++ b/drivers/staging/mrst/pvr/include4/servicesext.h @@ -805,6 +805,16 @@ typedef struct PVRSRV_CURSOR_INFO_TAG } PVRSRV_CURSOR_INFO; +#if defined(PDUMP_SUSPEND_IS_PER_THREAD) +typedef struct { + IMG_UINT32 threadId; + int suspendCount; +} PVRSRV_THREAD_SUSPEND_COUNT; + +#define PVRSRV_PDUMP_SUSPEND_Q_NAME "PVRSRVPDumpSuspendMsgQ" +#define PVRSRV_PDUMP_SUSPEND_Q_LENGTH 8 + +#endif typedef struct _PVRSRV_REGISTRY_INFO_ { diff --git a/drivers/staging/mrst/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c b/drivers/staging/mrst/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c index 49687bc..4cdd6d6 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c @@ -3107,7 +3107,7 @@ static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID pvParam, goto OpFlushedComplete; } PVR_DPF((PVR_DBG_WARNING, "ModifyCompleteSyncOpsCallBack: waiting for current Ops to flush")); - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); + OSSleepms(1); } END_LOOP_UNTIL_TIMEOUT(); PVR_DPF((PVR_DBG_ERROR, "ModifyCompleteSyncOpsCallBack: timeout whilst waiting for current Ops to flush.")); diff --git a/drivers/staging/mrst/pvr/services4/srvkm/common/pvrsrv.c b/drivers/staging/mrst/pvr/services4/srvkm/common/pvrsrv.c index 6e19974..06c30fd 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/common/pvrsrv.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/common/pvrsrv.c @@ -616,29 +616,41 @@ IMG_EXPORT PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, IMG_UINT32 ui32Value, IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Waitus, - IMG_UINT32 ui32Tries) + IMG_UINT32 ui32Timeoutus, + IMG_UINT32 ui32PollPeriodus, + IMG_BOOL bAllowPreemption) { { - IMG_UINT32 ui32ActualValue = 0xFFFFFFFFU; - IMG_UINT32 uiMaxTime = ui32Tries * ui32Waitus; + IMG_UINT32 ui32ActualValue = 0xFFFFFFFFU; + + if (bAllowPreemption) + { + PVR_ASSERT(ui32PollPeriodus >= 1000); + } - LOOP_UNTIL_TIMEOUT(uiMaxTime) + LOOP_UNTIL_TIMEOUT(ui32Timeoutus) { ui32ActualValue = (*pui32LinMemAddr & ui32Mask); if(ui32ActualValue == ui32Value) { return PVRSRV_OK; } - OSWaitus(ui32Waitus); + + if (bAllowPreemption) + { + OSSleepms(ui32PollPeriodus / 1000); + } + else + { + OSWaitus(ui32PollPeriodus); + } } END_LOOP_UNTIL_TIMEOUT(); PVR_DPF((PVR_DBG_ERROR,"PollForValueKM: Timeout. Expected 0x%x but found 0x%x (mask 0x%x).", ui32Value, ui32ActualValue, ui32Mask)); } - return PVRSRV_ERROR_TIMEOUT; } diff --git a/drivers/staging/mrst/pvr/services4/srvkm/common/queue.c b/drivers/staging/mrst/pvr/services4/srvkm/common/queue.c index be028ff..38c1084 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/common/queue.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/common/queue.c @@ -342,7 +342,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyCommandQueueKM(PVRSRV_QUEUE_INFO *psQueue bTimeout = IMG_FALSE; break; } - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); + OSSleepms(1); } END_LOOP_UNTIL_TIMEOUT(); if (bTimeout) @@ -460,7 +460,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetQueueSpaceKM(PVRSRV_QUEUE_INFO *psQueue, bTimeout = IMG_FALSE; break; } - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); + OSSleepms(1); } END_LOOP_UNTIL_TIMEOUT(); if (bTimeout == IMG_TRUE) diff --git a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxconfig.h b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxconfig.h index a0ca3e9..55218eb 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxconfig.h +++ b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxconfig.h @@ -87,14 +87,19 @@ #endif #if SGX_FEATURE_ADDRESS_SPACE_SIZE == 28 - #if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) + +#if defined(SUPPORT_SGX_GENERAL_MAPPING_HEAP) #define SGX_GENERAL_MAPPING_HEAP_BASE 0x00001000 #define SGX_GENERAL_MAPPING_HEAP_SIZE (0x01800000-0x00001000-0x00001000) - #endif #define SGX_GENERAL_HEAP_BASE 0x01800000 #define SGX_GENERAL_HEAP_SIZE (0x07000000-0x00001000) +#else + #define SGX_GENERAL_HEAP_BASE 0x00001000 + #define SGX_GENERAL_HEAP_SIZE (0x08800000-0x00001000-0x00001000) +#endif + #define SGX_3DPARAMETERS_HEAP_BASE 0x08800000 #define SGX_3DPARAMETERS_HEAP_SIZE (0x04000000-0x00001000) diff --git a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxinit.c b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxinit.c index ac21785..65189f7 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxinit.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxinit.c @@ -105,6 +105,7 @@ static IMG_UINT32 DeinitDevInfo(PVRSRV_SGXDEV_INFO *psDevInfo) OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_SGX_CCB_INFO), psDevInfo->psKernelCCBInfo, IMG_NULL); } + return PVRSRV_OK; } @@ -389,8 +390,9 @@ PVRSRV_ERROR SGXInitialise(PVRSRV_SGXDEV_INFO *psDevInfo, if (PollForValueKM(&psSGXHostCtl->ui32InitStatus, PVRSRV_USSE_EDM_INIT_COMPLETE, PVRSRV_USSE_EDM_INIT_COMPLETE, + MAX_HW_TIME_US, MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT) != PVRSRV_OK) + IMG_FALSE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR, "SGXInitialise: Wait for uKernel initialisation failed")); #if !defined(FIX_HW_BRN_23281) diff --git a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxpower.c b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxpower.c index aeac6e3..bac5d1b 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxpower.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxpower.c @@ -197,8 +197,9 @@ static IMG_VOID SGXPollForClockGating (PVRSRV_SGXDEV_INFO *psDevInfo, if (PollForValueKM((IMG_UINT32 *)psDevInfo->pvRegsBaseKM + (ui32Register >> 2), 0, ui32RegisterValue, + MAX_HW_TIME_US, MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT) != PVRSRV_OK) + IMG_FALSE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXPollForClockGating: %s failed.", pszComment)); PVR_DBG_BREAK; @@ -263,8 +264,9 @@ PVRSRV_ERROR SGXPrePowerState (IMG_HANDLE hDevHandle, if (PollForValueKM(&psDevInfo->psSGXHostCtl->ui32PowerStatus, ui32CompleteStatus, ui32CompleteStatus, + MAX_HW_TIME_US, MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT) != PVRSRV_OK) + IMG_FALSE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXPrePowerState: Wait for SGX ukernel power transition failed.")); PVR_DBG_BREAK; diff --git a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxreset.c b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxreset.c index 68d0e79..847ca24 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxreset.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxreset.c @@ -199,8 +199,9 @@ static IMG_VOID SGXResetInvalDC(PVRSRV_SGXDEV_INFO *psDevInfo, if (PollForValueKM((IMG_UINT32 *)((IMG_UINT8*)psDevInfo->pvRegsBaseKM + EUR_CR_BIF_MEM_REQ_STAT), 0, EUR_CR_BIF_MEM_REQ_STAT_READS_MASK, + MAX_HW_TIME_US, MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT) != PVRSRV_OK) + IMG_FALSE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"Wait for DC invalidate failed.")); PVR_DBG_BREAK; diff --git a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxutils.c b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxutils.c index afb1a58..de0bf63 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxutils.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/devices/sgx/sgxutils.c @@ -143,7 +143,7 @@ static INLINE SGXMKIF_COMMAND * SGXAcquireKernelCCBSlot(PVRSRV_SGX_CCB_INFO *psC return &psCCB->psCommands[*psCCB->pui32WriteOffset]; } - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); + OSSleepms(1); } END_LOOP_UNTIL_TIMEOUT(); @@ -199,8 +199,9 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, if(PollForValueKM(&psSGXHostCtl->ui32InvalStatus, PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE, PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE, - 2 * MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT) != PVRSRV_OK) + 2 * MAX_HW_TIME_US, + MAX_HW_TIME_US/WAIT_TRY_COUNT, + IMG_FALSE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXScheduleCCBCommand: Wait for uKernel to Invalidate BIF cache failed")); PVR_DBG_BREAK; @@ -331,8 +332,9 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_SGXDEV_INFO *psDevInfo, eError = PollForValueKM (psKernelCCB->pui32ReadOffset, *psKernelCCB->pui32WriteOffset, 0xFF, + MAX_HW_TIME_US, MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT); + IMG_FALSE); if (eError != PVRSRV_OK) { eError = PVRSRV_ERROR_TIMEOUT; @@ -562,8 +564,9 @@ IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, if(PollForValueKM(&psSGXHostCtl->ui32CleanupStatus, PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, - 2 * MAX_HW_TIME_US/WAIT_TRY_COUNT, - WAIT_TRY_COUNT) != PVRSRV_OK) + 10 * MAX_HW_TIME_US, + 1000, + IMG_TRUE) != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Wait for uKernel to clean up (%u) failed", ui32CleanupType)); PVR_DBG_BREAK; @@ -942,7 +945,7 @@ PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, LOOP_UNTIL_TIMEOUT(MAX_HW_TIME_US) { - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); + OSSleepms(1); if(SGX2DQuerySyncOpsComplete(psSyncInfo, ui32ReadOpsPending, ui32WriteOpsPending)) { @@ -951,7 +954,7 @@ PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, return PVRSRV_OK; } - OSWaitus(MAX_HW_TIME_US/WAIT_TRY_COUNT); + OSSleepms(1); } END_LOOP_UNTIL_TIMEOUT(); diff --git a/drivers/staging/mrst/pvr/services4/srvkm/env/linux/mutils.h b/drivers/staging/mrst/pvr/services4/srvkm/env/linux/mutils.h index 943c2bd..c42eadc 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/env/linux/mutils.h +++ b/drivers/staging/mrst/pvr/services4/srvkm/env/linux/mutils.h @@ -46,7 +46,7 @@ #if defined(__arm__) || defined(__sh__) #define PGPROT_WC(pv) pgprot_writecombine(pv) #else - #if defined(__i386__) + #if defined(__i386__) || defined(__mips__) #define PGPROT_WC(pv) pgprot_noncached(pv) #else #define PGPROT_WC(pv) pgprot_noncached(pv) diff --git a/drivers/staging/mrst/pvr/services4/srvkm/env/linux/osfunc.c b/drivers/staging/mrst/pvr/services4/srvkm/env/linux/osfunc.c index fe7b7a0..a52ac0f 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/env/linux/osfunc.c +++ b/drivers/staging/mrst/pvr/services4/srvkm/env/linux/osfunc.c @@ -131,6 +131,15 @@ PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOI return PVRSRV_OK; } +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) + +static inline int is_vmalloc_addr(const void *pvCpuVAddr) +{ + unsigned long lAddr = (unsigned long)pvCpuVAddr; + return lAddr >= VMALLOC_START && lAddr < VMALLOC_END; +} + +#endif #if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID pvCpuVAddr, IMG_HANDLE hBlockAlloc) @@ -511,13 +520,18 @@ IMG_UINT32 OSClockus(IMG_VOID) } - IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus) { udelay(ui32Timeus); } +IMG_VOID OSSleepms(IMG_UINT32 ui32Timems) +{ + msleep(ui32Timems); +} + + IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID) { if (in_interrupt()) @@ -2632,6 +2646,7 @@ static unsigned long AllocPagesAreaToPhys(LinuxMemArea *psLinuxMemArea, #endif +#ifndef __mips__ static IMG_VOID *FindMMapBaseVAddr(struct list_head *psMMapOffsetStructList, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) @@ -2693,15 +2708,37 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, { case LINUX_MEM_AREA_VMALLOC: { + if(is_vmalloc_addr(pvRangeAddrStart)) + { pvMinVAddr = psLinuxMemArea->uData.sVmalloc.pvVmallocAddress + ui32AreaOffset; - if(pvRangeAddrStart < pvMinVAddr && - ui32AreaOffset + ui32Length > ui32AreaLength) + if(pvRangeAddrStart < pvMinVAddr) goto err_blocked; + pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); + } + else + { + + + + pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList, + pvRangeAddrStart, ui32Length); + if(!pvMinVAddr) + goto err_blocked; + + pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); + #if defined(CONFIG_OUTER_CACHE) + + pvRangeAddrStart = psLinuxMemArea->uData.sVmalloc.pvVmallocAddress + + (ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr); + } + pfnMemAreaToPhys = VMallocAreaToPhys; +#else + } #endif break; } @@ -2731,6 +2768,8 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, if(!pvMinVAddr) goto err_blocked; + pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); + #if defined(CONFIG_OUTER_CACHE) ui32PageNumOffset = ((ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr)) >> PAGE_SHIFT; pfnMemAreaToPhys = ExternalKVAreaToPhys; @@ -2745,6 +2784,8 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, if(!pvMinVAddr) goto err_blocked; + pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); + #if defined(CONFIG_OUTER_CACHE) ui32PageNumOffset = ((ui32AreaOffset & PAGE_MASK) + (pvRangeAddrStart - pvMinVAddr)) >> PAGE_SHIFT; pfnMemAreaToPhys = AllocPagesAreaToPhys; @@ -2756,12 +2797,10 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, PVR_DBG_BREAK; } - - pfnInnerCacheOp(pvRangeAddrStart, pvRangeAddrStart + ui32Length); - #if defined(CONFIG_OUTER_CACHE) + PVR_ASSERT(pfnMemAreaToPhys != IMG_NULL); + - if (pfnMemAreaToPhys != IMG_NULL) { unsigned long ulStart, ulEnd, ulLength, ulStartOffset, ulEndOffset; IMG_UINT32 i, ui32NumPages; @@ -2789,10 +2828,6 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, pfnOuterCacheOp(ulStart, ulEnd); } } - else - { - PVR_DBG_BREAK; - } #endif return IMG_TRUE; @@ -2805,6 +2840,8 @@ err_blocked: return IMG_FALSE; } +#endif + #if defined(__i386__) #define ROUND_UP(x,a) (((x) + (a) - 1) & ~((a) - 1)) diff --git a/drivers/staging/mrst/pvr/services4/srvkm/include/device.h b/drivers/staging/mrst/pvr/services4/srvkm/include/device.h index 3b8ff54..1eee63d 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/include/device.h +++ b/drivers/staging/mrst/pvr/services4/srvkm/include/device.h @@ -294,8 +294,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVDeinitialiseDevice(IMG_UINT32 ui32DevIndex); IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PollForValueKM(volatile IMG_UINT32* pui32LinMemAddr, IMG_UINT32 ui32Value, IMG_UINT32 ui32Mask, - IMG_UINT32 ui32Waitus, - IMG_UINT32 ui32Tries); + IMG_UINT32 ui32Timeoutus, + IMG_UINT32 ui32PollPeriodus, + IMG_BOOL bAllowPreemption); #endif diff --git a/drivers/staging/mrst/pvr/services4/srvkm/include/osfunc.h b/drivers/staging/mrst/pvr/services4/srvkm/include/osfunc.h index e0d07ab..f35cbf7 100644 --- a/drivers/staging/mrst/pvr/services4/srvkm/include/osfunc.h +++ b/drivers/staging/mrst/pvr/services4/srvkm/include/osfunc.h @@ -445,6 +445,7 @@ PVRSRV_ERROR OSCreateResource(PVRSRV_RESOURCE *psResource); PVRSRV_ERROR OSDestroyResource(PVRSRV_RESOURCE *psResource); IMG_VOID OSBreakResourceLock(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus); +IMG_VOID OSSleepms(IMG_UINT32 ui32Timems); IMG_VOID OSReleaseThreadQuanta(IMG_VOID); IMG_UINT32 OSPCIReadDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg); IMG_VOID OSPCIWriteDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg, IMG_UINT32 ui32Value); -- 1.7.1 _______________________________________________ MeeGo-kernel mailing list [email protected] http://lists.meego.com/listinfo/meego-kernel
