return iCount;
}
-void OSBreakResourceLock(struct PVRSRV_RESOURCE *psResource, u32 ui32ID)
-{
- volatile u32 *pui32Access = (volatile u32 *)&psResource->ui32Lock;
-
- if (*pui32Access)
- if (psResource->ui32ID == ui32ID) {
- psResource->ui32ID = 0;
- *pui32Access = 0;
- } else {
- PVR_DPF(PVR_DBG_MESSAGE, "OSBreakResourceLock: "
- "Resource is not locked for this process.");
- } else
- PVR_DPF(PVR_DBG_MESSAGE, "OSBreakResourceLock: "
- "Resource is not locked");
-}
-
-enum PVRSRV_ERROR OSCreateResource(struct PVRSRV_RESOURCE *psResource)
-{
- psResource->ui32ID = 0;
- psResource->ui32Lock = 0;
-
- return PVRSRV_OK;
-}
-
-enum PVRSRV_ERROR OSDestroyResource(struct PVRSRV_RESOURCE *psResource)
-{
- OSBreakResourceLock(psResource, psResource->ui32ID);
-
- return PVRSRV_OK;
-}
-
enum PVRSRV_ERROR OSInitEnvData(void **ppvEnvSpecificData)
{
struct ENV_DATA *psEnvData;
}
-#define OS_TAS(p) xchg((p), 1)
-enum PVRSRV_ERROR OSLockResource(struct PVRSRV_RESOURCE *psResource, u32 ui32ID)
-{
- enum PVRSRV_ERROR eError = PVRSRV_OK;
-
- if (!OS_TAS(&psResource->ui32Lock))
- psResource->ui32ID = ui32ID;
- else
- eError = PVRSRV_ERROR_GENERIC;
-
- return eError;
-}
-
-enum PVRSRV_ERROR OSUnlockResource(struct PVRSRV_RESOURCE *psResource,
- u32 ui32ID)
-{
- volatile u32 *pui32Access = (volatile u32 *)&psResource->ui32Lock;
- enum PVRSRV_ERROR eError = PVRSRV_OK;
-
- if (*pui32Access) {
- if (psResource->ui32ID == ui32ID) {
- psResource->ui32ID = 0;
- *pui32Access = 0;
- } else {
- PVR_DPF(PVR_DBG_ERROR, "OSUnlockResource: "
- "Resource %p is not locked with expected value.",
- psResource);
- PVR_DPF(PVR_DBG_MESSAGE, "Should be %x is actually %x",
- ui32ID, psResource->ui32ID);
- eError = PVRSRV_ERROR_GENERIC;
- }
- } else {
- PVR_DPF(PVR_DBG_ERROR,
- "OSUnlockResource: Resource %p is not locked",
- psResource);
- eError = PVRSRV_ERROR_GENERIC;
- }
-
- return eError;
-}
-
-IMG_BOOL OSIsResourceLocked(struct PVRSRV_RESOURCE *psResource, u32 ui32ID)
-{
- volatile u32 *pui32Access = (volatile u32 *)&psResource->ui32Lock;
-
- return (*(volatile u32 *)pui32Access == 1) &&
- (psResource->ui32ID == ui32ID) ? IMG_TRUE : IMG_FALSE;
-}
-
struct IMG_CPU_PHYADDR OSMapLinToCPUPhys(void *pvLinAddr)
{
struct IMG_CPU_PHYADDR CpuPAddr;
enum PVRSRV_ERROR OSUnmapPhysToUserSpace(void *hDevCookie, void *pvUserAddr,
void *pvProcess);
-enum PVRSRV_ERROR OSLockResource(struct PVRSRV_RESOURCE *psResource,
- u32 ui32ID);
-enum PVRSRV_ERROR OSUnlockResource(struct PVRSRV_RESOURCE *psResource,
- u32 ui32ID);
-IMG_BOOL OSIsResourceLocked(struct PVRSRV_RESOURCE *psResource, u32 ui32ID);
-enum PVRSRV_ERROR OSCreateResource(struct PVRSRV_RESOURCE *psResource);
-enum PVRSRV_ERROR OSDestroyResource(struct PVRSRV_RESOURCE *psResource);
-void OSBreakResourceLock(struct PVRSRV_RESOURCE *psResource, u32 ui32ID);
void OSWaitus(u32 ui32Timeus);
void OSReleaseThreadQuanta(void);
psQueueInfo->ui32QueueSize = ui32Power2QueueSize;
- if (psSysData->psQueueList == NULL) {
- eError = OSCreateResource(&psSysData->sQProcessResource);
- if (eError != PVRSRV_OK)
- goto ErrorExit;
- }
-
- if (OSLockResource(&psSysData->sQProcessResource,
- KERNEL_ID) != PVRSRV_OK)
- goto ErrorExit;
-
psQueueInfo->psNextKM = psSysData->psQueueList;
psSysData->psQueueList = psQueueInfo;
- if (OSUnlockResource(&psSysData->sQProcessResource, KERNEL_ID) !=
- PVRSRV_OK)
- goto ErrorExit;
-
*ppsQueueInfo = psQueueInfo;
return PVRSRV_OK;
goto ErrorExit;
}
- eError = OSLockResource(&psSysData->sQProcessResource, KERNEL_ID);
- if (eError != PVRSRV_OK)
- goto ErrorExit;
-
if (psQueue == psQueueInfo) {
psSysData->psQueueList = psQueueInfo->psNextKM;
}
if (!psQueue) {
- eError =
- OSUnlockResource(&psSysData->sQProcessResource,
- KERNEL_ID);
- if (eError != PVRSRV_OK)
- goto ErrorExit;
eError = PVRSRV_ERROR_INVALID_PARAMS;
goto ErrorExit;
}
}
- eError = OSUnlockResource(&psSysData->sQProcessResource, KERNEL_ID);
- if (eError != PVRSRV_OK)
- goto ErrorExit;
-
- if (psSysData->psQueueList == NULL) {
- eError = OSDestroyResource(&psSysData->sQProcessResource);
- if (eError != PVRSRV_OK)
- goto ErrorExit;
- }
-
ErrorExit:
return eError;
if (eError != PVRSRV_OK)
return eError;
- eError = OSLockResource(&psSysData->sQProcessResource, ui32CallerID);
- if (eError != PVRSRV_OK) {
- if (ui32CallerID == ISR_ID) {
- if (bFlush) {
- PVR_DPF(PVR_DBG_ERROR, "PVRSRVProcessQueues: "
- "Couldn't acquire queue processing "
- "lock for FLUSH");
- } else {
- PVR_DPF(PVR_DBG_MESSAGE,
- "PVRSRVProcessQueues: "
- "Couldn't acquire queue "
- "processing lock");
- }
- } else {
- PVR_DPF(PVR_DBG_MESSAGE, "PVRSRVProcessQueues: "
- "Queue processing lock-acquire failed "
- "when called from the Services driver.");
- PVR_DPF(PVR_DBG_MESSAGE,
- "This is due to MISR queue processing "
- "being interrupted by the Services driver.");
- }
-
- return PVRSRV_OK;
- }
-
psQueue = psSysData->psQueueList;
if (!psQueue) {
psDeviceNode = psDeviceNode->psNext;
}
- OSUnlockResource(&psSysData->sQProcessResource, ui32CallerID);
-
return PVRSRV_OK;
}
struct PVRSRV_KERNEL_SYNC_INFO *psSharedSyncInfoList;
void *pvEnvSpecificData;
void *pvSysSpecificData;
- struct PVRSRV_RESOURCE sQProcessResource;
void *pvSOCRegsBase;
void *hSOCTimerRegisterOSMemHandle;
u32 *pvSOCTimerRegisterKM;