diff options
Diffstat (limited to 'drivers/gpu/pvr/pvrsrv.c')
-rw-r--r-- | drivers/gpu/pvr/pvrsrv.c | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/drivers/gpu/pvr/pvrsrv.c b/drivers/gpu/pvr/pvrsrv.c index 5862fb925f8..cb05a59e8aa 100644 --- a/drivers/gpu/pvr/pvrsrv.c +++ b/drivers/gpu/pvr/pvrsrv.c | |||
@@ -32,6 +32,9 @@ | |||
32 | #include "pdump_km.h" | 32 | #include "pdump_km.h" |
33 | #include "deviceid.h" | 33 | #include "deviceid.h" |
34 | #include "ra.h" | 34 | #include "ra.h" |
35 | #if defined(TTRACE) | ||
36 | #include "ttrace.h" | ||
37 | #endif | ||
35 | 38 | ||
36 | #include "pvrversion.h" | 39 | #include "pvrversion.h" |
37 | 40 | ||
@@ -40,6 +43,7 @@ | |||
40 | IMG_UINT32 g_ui32InitFlags; | 43 | IMG_UINT32 g_ui32InitFlags; |
41 | 44 | ||
42 | #define INIT_DATA_ENABLE_PDUMPINIT 0x1U | 45 | #define INIT_DATA_ENABLE_PDUMPINIT 0x1U |
46 | #define INIT_DATA_ENABLE_TTARCE 0x2U | ||
43 | 47 | ||
44 | PVRSRV_ERROR AllocateDeviceID(SYS_DATA *psSysData, IMG_UINT32 *pui32DevID) | 48 | PVRSRV_ERROR AllocateDeviceID(SYS_DATA *psSysData, IMG_UINT32 *pui32DevID) |
45 | { | 49 | { |
@@ -238,12 +242,24 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData) | |||
238 | goto Error; | 242 | goto Error; |
239 | } | 243 | } |
240 | 244 | ||
241 | if(OSEventObjectCreate("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject) != PVRSRV_OK) | 245 | if(OSEventObjectCreateKM("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject) != PVRSRV_OK) |
242 | { | 246 | { |
243 | goto Error; | 247 | goto Error; |
244 | } | 248 | } |
245 | 249 | ||
246 | 250 | ||
251 | psSysData->pfnHighResTimerCreate = OSFuncHighResTimerCreate; | ||
252 | psSysData->pfnHighResTimerGetus = OSFuncHighResTimerGetus; | ||
253 | psSysData->pfnHighResTimerDestroy = OSFuncHighResTimerDestroy; | ||
254 | |||
255 | #if defined(TTRACE) | ||
256 | eError = PVRSRVTimeTraceInit(); | ||
257 | if (eError != PVRSRV_OK) | ||
258 | goto Error; | ||
259 | g_ui32InitFlags |= INIT_DATA_ENABLE_TTARCE; | ||
260 | #endif | ||
261 | |||
262 | |||
247 | PDUMPINIT(); | 263 | PDUMPINIT(); |
248 | g_ui32InitFlags |= INIT_DATA_ENABLE_PDUMPINIT; | 264 | g_ui32InitFlags |= INIT_DATA_ENABLE_PDUMPINIT; |
249 | 265 | ||
@@ -267,7 +283,13 @@ IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData) | |||
267 | PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVHandleDeInit failed - invalid param")); | 283 | PVR_DPF((PVR_DBG_ERROR,"PVRSRVDeInit: PVRSRVHandleDeInit failed - invalid param")); |
268 | return; | 284 | return; |
269 | } | 285 | } |
270 | 286 | #if defined(TTRACE) | |
287 | |||
288 | if ((g_ui32InitFlags & INIT_DATA_ENABLE_TTARCE) > 0) | ||
289 | { | ||
290 | PVRSRVTimeTraceDeinit(); | ||
291 | } | ||
292 | #endif | ||
271 | 293 | ||
272 | if( (g_ui32InitFlags & INIT_DATA_ENABLE_PDUMPINIT) > 0) | 294 | if( (g_ui32InitFlags & INIT_DATA_ENABLE_PDUMPINIT) > 0) |
273 | { | 295 | { |
@@ -277,7 +299,7 @@ IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData) | |||
277 | 299 | ||
278 | if(psSysData->psGlobalEventObject) | 300 | if(psSysData->psGlobalEventObject) |
279 | { | 301 | { |
280 | OSEventObjectDestroy(psSysData->psGlobalEventObject); | 302 | OSEventObjectDestroyKM(psSysData->psGlobalEventObject); |
281 | OSFreeMem( PVRSRV_PAGEABLE_SELECT, | 303 | OSFreeMem( PVRSRV_PAGEABLE_SELECT, |
282 | sizeof(PVRSRV_EVENTOBJECT), | 304 | sizeof(PVRSRV_EVENTOBJECT), |
283 | psSysData->psGlobalEventObject, | 305 | psSysData->psGlobalEventObject, |
@@ -621,14 +643,14 @@ PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, | |||
621 | IMG_BOOL bAllowPreemption) | 643 | IMG_BOOL bAllowPreemption) |
622 | { | 644 | { |
623 | { | 645 | { |
624 | IMG_UINT32 ui32ActualValue = 0xFFFFFFFFU; | 646 | IMG_UINT32 ui32ActualValue = 0xFFFFFFFFU; |
625 | 647 | ||
626 | if (bAllowPreemption) | 648 | if (bAllowPreemption) |
627 | { | 649 | { |
628 | PVR_ASSERT(ui32PollPeriodus >= 1000); | 650 | PVR_ASSERT(ui32PollPeriodus >= 1000); |
629 | } | 651 | } |
630 | 652 | ||
631 | 653 | ||
632 | LOOP_UNTIL_TIMEOUT(ui32Timeoutus) | 654 | LOOP_UNTIL_TIMEOUT(ui32Timeoutus) |
633 | { | 655 | { |
634 | ui32ActualValue = (*pui32LinMemAddr & ui32Mask); | 656 | ui32ActualValue = (*pui32LinMemAddr & ui32Mask); |
@@ -636,7 +658,7 @@ PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, | |||
636 | { | 658 | { |
637 | return PVRSRV_OK; | 659 | return PVRSRV_OK; |
638 | } | 660 | } |
639 | 661 | ||
640 | if (bAllowPreemption) | 662 | if (bAllowPreemption) |
641 | { | 663 | { |
642 | OSSleepms(ui32PollPeriodus / 1000); | 664 | OSSleepms(ui32PollPeriodus / 1000); |
@@ -646,7 +668,7 @@ PVRSRV_ERROR IMG_CALLCONV PollForValueKM (volatile IMG_UINT32* pui32LinMemAddr, | |||
646 | OSWaitus(ui32PollPeriodus); | 668 | OSWaitus(ui32PollPeriodus); |
647 | } | 669 | } |
648 | } END_LOOP_UNTIL_TIMEOUT(); | 670 | } END_LOOP_UNTIL_TIMEOUT(); |
649 | 671 | ||
650 | PVR_DPF((PVR_DBG_ERROR,"PollForValueKM: Timeout. Expected 0x%x but found 0x%x (mask 0x%x).", | 672 | PVR_DPF((PVR_DBG_ERROR,"PollForValueKM: Timeout. Expected 0x%x but found 0x%x (mask 0x%x).", |
651 | ui32Value, ui32ActualValue, ui32Mask)); | 673 | ui32Value, ui32ActualValue, ui32Mask)); |
652 | } | 674 | } |
@@ -666,7 +688,7 @@ static IMG_VOID PVRSRVGetMiscInfoKM_RA_GetStats_ForEachVaCb(BM_HEAP *psBMHeap, v | |||
666 | pui32StrLen = va_arg(va, IMG_UINT32*); | 688 | pui32StrLen = va_arg(va, IMG_UINT32*); |
667 | ui32Mode = va_arg(va, IMG_UINT32); | 689 | ui32Mode = va_arg(va, IMG_UINT32); |
668 | 690 | ||
669 | 691 | ||
670 | switch(ui32Mode) | 692 | switch(ui32Mode) |
671 | { | 693 | { |
672 | case PVRSRV_MISC_INFO_MEMSTATS_PRESENT: | 694 | case PVRSRV_MISC_INFO_MEMSTATS_PRESENT: |
@@ -762,7 +784,11 @@ static PVRSRV_ERROR PVRSRVGetMiscInfoKM_Device_AnyVaCb(PVRSRV_DEVICE_NODE *psDev | |||
762 | 784 | ||
763 | 785 | ||
764 | IMG_EXPORT | 786 | IMG_EXPORT |
787 | #if defined (SUPPORT_SID_INTERFACE) | ||
788 | PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo) | ||
789 | #else | ||
765 | PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) | 790 | PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) |
791 | #endif | ||
766 | { | 792 | { |
767 | SYS_DATA *psSysData; | 793 | SYS_DATA *psSysData; |
768 | 794 | ||
@@ -857,7 +883,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) | |||
857 | } | 883 | } |
858 | 884 | ||
859 | 885 | ||
860 | if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) | 886 | if(((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) != 0) |
861 | && psMiscInfo->pszMemoryStr) | 887 | && psMiscInfo->pszMemoryStr) |
862 | { | 888 | { |
863 | IMG_CHAR *pszStr; | 889 | IMG_CHAR *pszStr; |
@@ -929,6 +955,8 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) | |||
929 | 955 | ||
930 | if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT) != 0UL) | 956 | if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT) != 0UL) |
931 | { | 957 | { |
958 | psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT; | ||
959 | |||
932 | if(psMiscInfo->sCacheOpCtl.bDeferOp) | 960 | if(psMiscInfo->sCacheOpCtl.bDeferOp) |
933 | { | 961 | { |
934 | 962 | ||
@@ -936,10 +964,16 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) | |||
936 | } | 964 | } |
937 | else | 965 | else |
938 | { | 966 | { |
967 | #if defined (SUPPORT_SID_INTERFACE) | ||
968 | PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = psMiscInfo->sCacheOpCtl.psKernelMemInfo; | ||
969 | |||
970 | if(!psMiscInfo->sCacheOpCtl.psKernelMemInfo) | ||
971 | #else | ||
939 | PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; | 972 | PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; |
940 | PVRSRV_PER_PROCESS_DATA *psPerProc; | 973 | PVRSRV_PER_PROCESS_DATA *psPerProc; |
941 | 974 | ||
942 | if(!psMiscInfo->sCacheOpCtl.u.psKernelMemInfo) | 975 | if(!psMiscInfo->sCacheOpCtl.u.psKernelMemInfo) |
976 | #endif | ||
943 | { | 977 | { |
944 | PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetMiscInfoKM: " | 978 | PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetMiscInfoKM: " |
945 | "Ignoring non-deferred cache op with no meminfo")); | 979 | "Ignoring non-deferred cache op with no meminfo")); |
@@ -953,6 +987,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) | |||
953 | "to combine deferred cache ops with immediate ones")); | 987 | "to combine deferred cache ops with immediate ones")); |
954 | } | 988 | } |
955 | 989 | ||
990 | #if defined (SUPPORT_SID_INTERFACE) | ||
991 | PVR_DBG_BREAK | ||
992 | #else | ||
956 | 993 | ||
957 | psPerProc = PVRSRVFindPerProcessData(); | 994 | psPerProc = PVRSRVFindPerProcessData(); |
958 | 995 | ||
@@ -965,6 +1002,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) | |||
965 | "Can't find kernel meminfo")); | 1002 | "Can't find kernel meminfo")); |
966 | return PVRSRV_ERROR_INVALID_PARAMS; | 1003 | return PVRSRV_ERROR_INVALID_PARAMS; |
967 | } | 1004 | } |
1005 | #endif | ||
968 | 1006 | ||
969 | if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) | 1007 | if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) |
970 | { | 1008 | { |
@@ -1109,9 +1147,9 @@ IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData) | |||
1109 | &PVRSRVMISR_ForEachCb); | 1147 | &PVRSRVMISR_ForEachCb); |
1110 | 1148 | ||
1111 | 1149 | ||
1112 | if (PVRSRVProcessQueues(ISR_ID, IMG_FALSE) == PVRSRV_ERROR_PROCESSING_BLOCKED) | 1150 | if (PVRSRVProcessQueues(IMG_FALSE) == PVRSRV_ERROR_PROCESSING_BLOCKED) |
1113 | { | 1151 | { |
1114 | PVRSRVProcessQueues(ISR_ID, IMG_FALSE); | 1152 | PVRSRVProcessQueues(IMG_FALSE); |
1115 | } | 1153 | } |
1116 | 1154 | ||
1117 | 1155 | ||
@@ -1120,7 +1158,7 @@ IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData) | |||
1120 | IMG_HANDLE hOSEventKM = psSysData->psGlobalEventObject->hOSEventKM; | 1158 | IMG_HANDLE hOSEventKM = psSysData->psGlobalEventObject->hOSEventKM; |
1121 | if(hOSEventKM) | 1159 | if(hOSEventKM) |
1122 | { | 1160 | { |
1123 | OSEventObjectSignal(hOSEventKM); | 1161 | OSEventObjectSignalKM(hOSEventKM); |
1124 | } | 1162 | } |
1125 | } | 1163 | } |
1126 | } | 1164 | } |