diff options
Diffstat (limited to 'drivers/gpu/pvr/queue.c')
-rw-r--r-- | drivers/gpu/pvr/queue.c | 146 |
1 files changed, 76 insertions, 70 deletions
diff --git a/drivers/gpu/pvr/queue.c b/drivers/gpu/pvr/queue.c index 83185f31814..9bc6186d6e4 100644 --- a/drivers/gpu/pvr/queue.c +++ b/drivers/gpu/pvr/queue.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include "services_headers.h" | 27 | #include "services_headers.h" |
28 | 28 | ||
29 | #include "lists.h" | 29 | #include "lists.h" |
30 | 30 | #include "ttrace.h" | |
31 | 31 | ||
32 | #define DC_NUM_COMMANDS_PER_TYPE 1 | 32 | #define DC_NUM_COMMANDS_PER_TYPE 1 |
33 | 33 | ||
@@ -71,13 +71,29 @@ void ProcSeqShowQueue(struct seq_file *sfile,void* el) | |||
71 | (IMG_UINTPTR_T)psCmd, | 71 | (IMG_UINTPTR_T)psCmd, |
72 | psCmd->ui32ProcessID, | 72 | psCmd->ui32ProcessID, |
73 | psCmd->CommandType, | 73 | psCmd->CommandType, |
74 | psCmd->ui32CmdSize, | 74 | psCmd->uCmdSize, |
75 | psCmd->ui32DevIndex, | 75 | psCmd->ui32DevIndex, |
76 | psCmd->ui32DstSyncCount, | 76 | psCmd->ui32DstSyncCount, |
77 | psCmd->ui32SrcSyncCount, | 77 | psCmd->ui32SrcSyncCount, |
78 | psCmd->ui32DataSize); | 78 | psCmd->uDataSize); |
79 | { | ||
80 | IMG_UINT32 i; | ||
81 | for (i = 0; i < psCmd->ui32SrcSyncCount; i++) | ||
82 | { | ||
83 | PVRSRV_SYNC_DATA *psSyncData = psCmd->psSrcSync[i].psKernelSyncInfoKM->psSyncData; | ||
84 | seq_printf(sfile, " Sync %u: ROP/ROC: 0x%x/0x%x WOP/WOC: 0x%x/0x%x ROC-VA: 0x%x WOC-VA: 0x%x\n", | ||
85 | i, | ||
86 | psCmd->psSrcSync[i].ui32ReadOpsPending, | ||
87 | psSyncData->ui32ReadOpsComplete, | ||
88 | psCmd->psSrcSync[i].ui32WriteOpsPending, | ||
89 | psSyncData->ui32WriteOpsComplete, | ||
90 | psCmd->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, | ||
91 | psCmd->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr); | ||
92 | } | ||
93 | } | ||
94 | |||
79 | 95 | ||
80 | ui32ReadOffset += psCmd->ui32CmdSize; | 96 | ui32ReadOffset += psCmd->uCmdSize; |
81 | ui32ReadOffset &= psQueue->ui32QueueSize - 1; | 97 | ui32ReadOffset &= psQueue->ui32QueueSize - 1; |
82 | cmds++; | 98 | cmds++; |
83 | } | 99 | } |
@@ -512,7 +528,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, | |||
512 | psCommand->ui32ProcessID = OSGetCurrentProcessIDKM(); | 528 | psCommand->ui32ProcessID = OSGetCurrentProcessIDKM(); |
513 | 529 | ||
514 | 530 | ||
515 | psCommand->ui32CmdSize = ui32CommandSize; | 531 | psCommand->uCmdSize = ui32CommandSize; |
516 | psCommand->ui32DevIndex = ui32DevIndex; | 532 | psCommand->ui32DevIndex = ui32DevIndex; |
517 | psCommand->CommandType = CommandType; | 533 | psCommand->CommandType = CommandType; |
518 | psCommand->ui32DstSyncCount = ui32DstSyncCount; | 534 | psCommand->ui32DstSyncCount = ui32DstSyncCount; |
@@ -527,11 +543,18 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, | |||
527 | 543 | ||
528 | psCommand->pvData = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psCommand->psSrcSync) | 544 | psCommand->pvData = (PVRSRV_SYNC_OBJECT*)(((IMG_UINTPTR_T)psCommand->psSrcSync) |
529 | + (ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); | 545 | + (ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); |
530 | psCommand->ui32DataSize = ui32DataByteSize; | 546 | psCommand->uDataSize = ui32DataByteSize; |
547 | |||
548 | PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_START, QUEUE_TOKEN_INSERTKM); | ||
549 | PVR_TTRACE_UI32(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_NONE, | ||
550 | QUEUE_TOKEN_COMMAND_TYPE, CommandType); | ||
531 | 551 | ||
532 | 552 | ||
533 | for (i=0; i<ui32DstSyncCount; i++) | 553 | for (i=0; i<ui32DstSyncCount; i++) |
534 | { | 554 | { |
555 | PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_DST_SYNC, | ||
556 | apsDstSync[i], PVRSRV_SYNCOP_SAMPLE); | ||
557 | |||
535 | psCommand->psDstSync[i].psKernelSyncInfoKM = apsDstSync[i]; | 558 | psCommand->psDstSync[i].psKernelSyncInfoKM = apsDstSync[i]; |
536 | psCommand->psDstSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsDstSync[i], IMG_FALSE); | 559 | psCommand->psDstSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsDstSync[i], IMG_FALSE); |
537 | psCommand->psDstSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsDstSync[i], IMG_FALSE); | 560 | psCommand->psDstSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsDstSync[i], IMG_FALSE); |
@@ -546,6 +569,9 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, | |||
546 | 569 | ||
547 | for (i=0; i<ui32SrcSyncCount; i++) | 570 | for (i=0; i<ui32SrcSyncCount; i++) |
548 | { | 571 | { |
572 | PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_DST_SYNC, | ||
573 | apsSrcSync[i], PVRSRV_SYNCOP_SAMPLE); | ||
574 | |||
549 | psCommand->psSrcSync[i].psKernelSyncInfoKM = apsSrcSync[i]; | 575 | psCommand->psSrcSync[i].psKernelSyncInfoKM = apsSrcSync[i]; |
550 | psCommand->psSrcSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsSrcSync[i], IMG_TRUE); | 576 | psCommand->psSrcSync[i].ui32WriteOpsPending = PVRSRVGetWriteOpsPending(apsSrcSync[i], IMG_TRUE); |
551 | psCommand->psSrcSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsSrcSync[i], IMG_TRUE); | 577 | psCommand->psSrcSync[i].ui32ReadOpsPending = PVRSRVGetReadOpsPending(apsSrcSync[i], IMG_TRUE); |
@@ -556,6 +582,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInsertCommandKM(PVRSRV_QUEUE_INFO *psQueue, | |||
556 | psCommand->psSrcSync[i].ui32ReadOpsPending, | 582 | psCommand->psSrcSync[i].ui32ReadOpsPending, |
557 | psCommand->psSrcSync[i].ui32WriteOpsPending)); | 583 | psCommand->psSrcSync[i].ui32WriteOpsPending)); |
558 | } | 584 | } |
585 | PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_END, QUEUE_TOKEN_INSERTKM); | ||
559 | 586 | ||
560 | 587 | ||
561 | *ppsCommand = psCommand; | 588 | *ppsCommand = psCommand; |
@@ -590,7 +617,7 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVSubmitCommandKM(PVRSRV_QUEUE_INFO *psQueue, | |||
590 | + (psCommand->ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); | 617 | + (psCommand->ui32SrcSyncCount * sizeof(PVRSRV_SYNC_OBJECT))); |
591 | 618 | ||
592 | 619 | ||
593 | UPDATE_QUEUE_WOFF(psQueue, psCommand->ui32CmdSize); | 620 | UPDATE_QUEUE_WOFF(psQueue, psCommand->uCmdSize); |
594 | 621 | ||
595 | return PVRSRV_OK; | 622 | return PVRSRV_OK; |
596 | } | 623 | } |
@@ -730,14 +757,17 @@ PVRSRV_ERROR PVRSRVProcessCommand(SYS_DATA *psSysData, | |||
730 | 757 | ||
731 | 758 | ||
732 | if (psDeviceCommandData[psCommand->CommandType].pfnCmdProc((IMG_HANDLE)psCmdCompleteData, | 759 | if (psDeviceCommandData[psCommand->CommandType].pfnCmdProc((IMG_HANDLE)psCmdCompleteData, |
733 | psCommand->ui32DataSize, | 760 | (IMG_UINT32)psCommand->uDataSize, |
734 | psCommand->pvData) == IMG_FALSE) | 761 | psCommand->pvData) == IMG_FALSE) |
735 | { | 762 | { |
763 | |||
764 | |||
736 | 765 | ||
737 | psCmdCompleteData->bInUse = IMG_FALSE; | 766 | psCmdCompleteData->bInUse = IMG_FALSE; |
738 | eError = PVRSRV_ERROR_CMD_NOT_PROCESSED; | 767 | eError = PVRSRV_ERROR_CMD_NOT_PROCESSED; |
739 | } | 768 | } |
740 | 769 | ||
770 | |||
741 | psDeviceCommandData[psCommand->CommandType].ui32CCBOffset = (ui32CCBOffset + 1) % DC_NUM_COMMANDS_PER_TYPE; | 771 | psDeviceCommandData[psCommand->CommandType].ui32CCBOffset = (ui32CCBOffset + 1) % DC_NUM_COMMANDS_PER_TYPE; |
742 | 772 | ||
743 | return eError; | 773 | return eError; |
@@ -754,48 +784,20 @@ static IMG_VOID PVRSRVProcessQueues_ForEachCb(PVRSRV_DEVICE_NODE *psDeviceNode) | |||
754 | } | 784 | } |
755 | 785 | ||
756 | IMG_EXPORT | 786 | IMG_EXPORT |
757 | PVRSRV_ERROR PVRSRVProcessQueues(IMG_UINT32 ui32CallerID, | 787 | PVRSRV_ERROR PVRSRVProcessQueues(IMG_BOOL bFlush) |
758 | IMG_BOOL bFlush) | ||
759 | { | 788 | { |
760 | PVRSRV_QUEUE_INFO *psQueue; | 789 | PVRSRV_QUEUE_INFO *psQueue; |
761 | SYS_DATA *psSysData; | 790 | SYS_DATA *psSysData; |
762 | PVRSRV_COMMAND *psCommand; | 791 | PVRSRV_COMMAND *psCommand; |
763 | PVRSRV_ERROR eError; | ||
764 | |||
765 | SysAcquireData(&psSysData); | 792 | SysAcquireData(&psSysData); |
766 | 793 | ||
767 | 794 | ||
768 | psSysData->bReProcessQueues = IMG_FALSE; | ||
769 | 795 | ||
770 | 796 | while (OSLockResource(&psSysData->sQProcessResource, ISR_ID) != PVRSRV_OK) | |
771 | eError = OSLockResource(&psSysData->sQProcessResource, | ||
772 | ui32CallerID); | ||
773 | if(eError != PVRSRV_OK) | ||
774 | { | 797 | { |
775 | 798 | OSWaitus(1); | |
776 | psSysData->bReProcessQueues = IMG_TRUE; | 799 | }; |
777 | 800 | ||
778 | |||
779 | if(ui32CallerID == ISR_ID) | ||
780 | { | ||
781 | if (bFlush) | ||
782 | { | ||
783 | PVR_DPF((PVR_DBG_ERROR,"PVRSRVProcessQueues: Couldn't acquire queue processing lock for FLUSH")); | ||
784 | } | ||
785 | else | ||
786 | { | ||
787 | PVR_DPF((PVR_DBG_MESSAGE,"PVRSRVProcessQueues: Couldn't acquire queue processing lock")); | ||
788 | } | ||
789 | } | ||
790 | else | ||
791 | { | ||
792 | PVR_DPF((PVR_DBG_MESSAGE,"PVRSRVProcessQueues: Queue processing lock-acquire failed when called from the Services driver.")); | ||
793 | PVR_DPF((PVR_DBG_MESSAGE," This is due to MISR queue processing being interrupted by the Services driver.")); | ||
794 | } | ||
795 | |||
796 | return PVRSRV_OK; | ||
797 | } | ||
798 | |||
799 | psQueue = psSysData->psQueueList; | 801 | psQueue = psSysData->psQueueList; |
800 | 802 | ||
801 | if(!psQueue) | 803 | if(!psQueue) |
@@ -817,8 +819,7 @@ PVRSRV_ERROR PVRSRVProcessQueues(IMG_UINT32 ui32CallerID, | |||
817 | if (PVRSRVProcessCommand(psSysData, psCommand, bFlush) == PVRSRV_OK) | 819 | if (PVRSRVProcessCommand(psSysData, psCommand, bFlush) == PVRSRV_OK) |
818 | { | 820 | { |
819 | 821 | ||
820 | UPDATE_QUEUE_ROFF(psQueue, psCommand->ui32CmdSize) | 822 | UPDATE_QUEUE_ROFF(psQueue, psCommand->uCmdSize) |
821 | |||
822 | continue; | 823 | continue; |
823 | } | 824 | } |
824 | 825 | ||
@@ -836,15 +837,7 @@ PVRSRV_ERROR PVRSRVProcessQueues(IMG_UINT32 ui32CallerID, | |||
836 | List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, | 837 | List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, |
837 | &PVRSRVProcessQueues_ForEachCb); | 838 | &PVRSRVProcessQueues_ForEachCb); |
838 | 839 | ||
839 | 840 | OSUnlockResource(&psSysData->sQProcessResource, ISR_ID); | |
840 | |||
841 | OSUnlockResource(&psSysData->sQProcessResource, ui32CallerID); | ||
842 | |||
843 | |||
844 | if(psSysData->bReProcessQueues) | ||
845 | { | ||
846 | return PVRSRV_ERROR_PROCESSING_BLOCKED; | ||
847 | } | ||
848 | 841 | ||
849 | return PVRSRV_OK; | 842 | return PVRSRV_OK; |
850 | } | 843 | } |
@@ -884,11 +877,18 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, | |||
884 | 877 | ||
885 | SysAcquireData(&psSysData); | 878 | SysAcquireData(&psSysData); |
886 | 879 | ||
880 | PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_START, | ||
881 | QUEUE_TOKEN_COMMAND_COMPLETE); | ||
882 | |||
887 | 883 | ||
888 | for (i=0; i<psCmdCompleteData->ui32DstSyncCount; i++) | 884 | for (i=0; i<psCmdCompleteData->ui32DstSyncCount; i++) |
889 | { | 885 | { |
890 | psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete++; | 886 | psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->psSyncData->ui32WriteOpsComplete++; |
891 | 887 | ||
888 | PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_UPDATE_DST, | ||
889 | psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM, | ||
890 | PVRSRV_SYNCOP_COMPLETE); | ||
891 | |||
892 | PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", | 892 | PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Dst %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", |
893 | i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, | 893 | i, psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, |
894 | psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, | 894 | psCmdCompleteData->psDstSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, |
@@ -901,6 +901,10 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, | |||
901 | { | 901 | { |
902 | psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete++; | 902 | psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->psSyncData->ui32ReadOpsComplete++; |
903 | 903 | ||
904 | PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_QUEUE, QUEUE_TOKEN_UPDATE_SRC, | ||
905 | psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM, | ||
906 | PVRSRV_SYNCOP_COMPLETE); | ||
907 | |||
904 | PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", | 908 | PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVCommandCompleteKM: Src %u RO-VA:0x%x WO-VA:0x%x ROP:0x%x WOP:0x%x", |
905 | i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, | 909 | i, psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sReadOpsCompleteDevVAddr.uiAddr, |
906 | psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, | 910 | psCmdCompleteData->psSrcSync[i].psKernelSyncInfoKM->sWriteOpsCompleteDevVAddr.uiAddr, |
@@ -908,6 +912,9 @@ IMG_VOID PVRSRVCommandCompleteKM(IMG_HANDLE hCmdCookie, | |||
908 | psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending)); | 912 | psCmdCompleteData->psSrcSync[i].ui32WriteOpsPending)); |
909 | } | 913 | } |
910 | 914 | ||
915 | PVR_TTRACE(PVRSRV_TRACE_GROUP_QUEUE, PVRSRV_TRACE_CLASS_CMD_COMP_END, | ||
916 | QUEUE_TOKEN_COMMAND_COMPLETE); | ||
917 | |||
911 | 918 | ||
912 | psCmdCompleteData->bInUse = IMG_FALSE; | 919 | psCmdCompleteData->bInUse = IMG_FALSE; |
913 | 920 | ||
@@ -966,15 +973,15 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
966 | { | 973 | { |
967 | psDeviceCommandData[ui32CmdTypeCounter].pfnCmdProc = ppfnCmdProcList[ui32CmdTypeCounter]; | 974 | psDeviceCommandData[ui32CmdTypeCounter].pfnCmdProc = ppfnCmdProcList[ui32CmdTypeCounter]; |
968 | psDeviceCommandData[ui32CmdTypeCounter].ui32CCBOffset = 0; | 975 | psDeviceCommandData[ui32CmdTypeCounter].ui32CCBOffset = 0; |
969 | 976 | ||
970 | for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) | 977 | for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) |
971 | { | 978 | { |
979 | |||
972 | 980 | ||
973 | 981 | ui32AllocSize = sizeof(COMMAND_COMPLETE_DATA) | |
974 | ui32AllocSize = sizeof(COMMAND_COMPLETE_DATA) | ||
975 | + ((ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0] | 982 | + ((ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0] |
976 | + ui32MaxSyncsPerCmd[ui32CmdTypeCounter][1]) | 983 | + ui32MaxSyncsPerCmd[ui32CmdTypeCounter][1]) |
977 | * sizeof(PVRSRV_SYNC_OBJECT)); | 984 | * sizeof(PVRSRV_SYNC_OBJECT)); |
978 | 985 | ||
979 | eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, | 986 | eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, |
980 | ui32AllocSize, | 987 | ui32AllocSize, |
@@ -986,13 +993,13 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
986 | PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterCmdProcListKM: Failed to alloc cmd %d", ui32CmdTypeCounter)); | 993 | PVR_DPF((PVR_DBG_ERROR,"PVRSRVRegisterCmdProcListKM: Failed to alloc cmd %d", ui32CmdTypeCounter)); |
987 | goto ErrorExit; | 994 | goto ErrorExit; |
988 | } | 995 | } |
989 | 996 | ||
990 | psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter] = psCmdCompleteData; | 997 | psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter] = psCmdCompleteData; |
991 | 998 | ||
992 | 999 | ||
993 | OSMemSet(psCmdCompleteData, 0x00, ui32AllocSize); | 1000 | OSMemSet(psCmdCompleteData, 0x00, ui32AllocSize); |
994 | 1001 | ||
995 | 1002 | ||
996 | psCmdCompleteData->psDstSync = (PVRSRV_SYNC_OBJECT*) | 1003 | psCmdCompleteData->psDstSync = (PVRSRV_SYNC_OBJECT*) |
997 | (((IMG_UINTPTR_T)psCmdCompleteData) | 1004 | (((IMG_UINTPTR_T)psCmdCompleteData) |
998 | + sizeof(COMMAND_COMPLETE_DATA)); | 1005 | + sizeof(COMMAND_COMPLETE_DATA)); |
@@ -1000,7 +1007,7 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
1000 | (((IMG_UINTPTR_T)psCmdCompleteData->psDstSync) | 1007 | (((IMG_UINTPTR_T)psCmdCompleteData->psDstSync) |
1001 | + (sizeof(PVRSRV_SYNC_OBJECT) * ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0])); | 1008 | + (sizeof(PVRSRV_SYNC_OBJECT) * ui32MaxSyncsPerCmd[ui32CmdTypeCounter][0])); |
1002 | 1009 | ||
1003 | psCmdCompleteData->ui32AllocSize = ui32AllocSize; | 1010 | psCmdCompleteData->ui32AllocSize = (IMG_UINT32)ui32AllocSize; |
1004 | } | 1011 | } |
1005 | } | 1012 | } |
1006 | 1013 | ||
@@ -1008,15 +1015,14 @@ PVRSRV_ERROR PVRSRVRegisterCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
1008 | 1015 | ||
1009 | ErrorExit: | 1016 | ErrorExit: |
1010 | 1017 | ||
1011 | 1018 | ||
1012 | |||
1013 | if (PVRSRVRemoveCmdProcListKM(ui32DevIndex, ui32CmdCount) != PVRSRV_OK) | 1019 | if (PVRSRVRemoveCmdProcListKM(ui32DevIndex, ui32CmdCount) != PVRSRV_OK) |
1014 | { | 1020 | { |
1015 | PVR_DPF((PVR_DBG_ERROR, | 1021 | PVR_DPF((PVR_DBG_ERROR, |
1016 | "PVRSRVRegisterCmdProcListKM: Failed to clean up after error, device 0x%x", | 1022 | "PVRSRVRegisterCmdProcListKM: Failed to clean up after error, device 0x%x", |
1017 | ui32DevIndex)); | 1023 | ui32DevIndex)); |
1018 | } | 1024 | } |
1019 | 1025 | ||
1020 | return eError; | 1026 | return eError; |
1021 | } | 1027 | } |
1022 | 1028 | ||
@@ -1031,7 +1037,7 @@ PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
1031 | COMMAND_COMPLETE_DATA *psCmdCompleteData; | 1037 | COMMAND_COMPLETE_DATA *psCmdCompleteData; |
1032 | IMG_SIZE_T ui32AllocSize; | 1038 | IMG_SIZE_T ui32AllocSize; |
1033 | 1039 | ||
1034 | 1040 | ||
1035 | if(ui32DevIndex >= SYS_DEVICE_COUNT) | 1041 | if(ui32DevIndex >= SYS_DEVICE_COUNT) |
1036 | { | 1042 | { |
1037 | PVR_DPF((PVR_DBG_ERROR, | 1043 | PVR_DPF((PVR_DBG_ERROR, |
@@ -1040,7 +1046,7 @@ PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
1040 | return PVRSRV_ERROR_INVALID_PARAMS; | 1046 | return PVRSRV_ERROR_INVALID_PARAMS; |
1041 | } | 1047 | } |
1042 | 1048 | ||
1043 | 1049 | ||
1044 | SysAcquireData(&psSysData); | 1050 | SysAcquireData(&psSysData); |
1045 | 1051 | ||
1046 | psDeviceCommandData = psSysData->apsDeviceCommandData[ui32DevIndex]; | 1052 | psDeviceCommandData = psSysData->apsDeviceCommandData[ui32DevIndex]; |
@@ -1051,8 +1057,8 @@ PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
1051 | for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) | 1057 | for (ui32CmdCounter = 0; ui32CmdCounter < DC_NUM_COMMANDS_PER_TYPE; ui32CmdCounter++) |
1052 | { | 1058 | { |
1053 | psCmdCompleteData = psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter]; | 1059 | psCmdCompleteData = psDeviceCommandData[ui32CmdTypeCounter].apsCmdCompleteData[ui32CmdCounter]; |
1054 | 1060 | ||
1055 | 1061 | ||
1056 | if (psCmdCompleteData != IMG_NULL) | 1062 | if (psCmdCompleteData != IMG_NULL) |
1057 | { | 1063 | { |
1058 | OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, psCmdCompleteData->ui32AllocSize, | 1064 | OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, psCmdCompleteData->ui32AllocSize, |
@@ -1062,7 +1068,7 @@ PVRSRV_ERROR PVRSRVRemoveCmdProcListKM(IMG_UINT32 ui32DevIndex, | |||
1062 | } | 1068 | } |
1063 | } | 1069 | } |
1064 | 1070 | ||
1065 | 1071 | ||
1066 | ui32AllocSize = ui32CmdCount * sizeof(*psDeviceCommandData); | 1072 | ui32AllocSize = ui32CmdCount * sizeof(*psDeviceCommandData); |
1067 | OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, ui32AllocSize, psDeviceCommandData, IMG_NULL); | 1073 | OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP, ui32AllocSize, psDeviceCommandData, IMG_NULL); |
1068 | psSysData->apsDeviceCommandData[ui32DevIndex] = IMG_NULL; | 1074 | psSysData->apsDeviceCommandData[ui32DevIndex] = IMG_NULL; |