www.pudn.com > DMBDRV.rar > SianoDMA.cod
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL E:\WM604\PLATFORM\SEUICBSP\SRC\DRIVERS\DMBDRV\DmaPxaXXX\.\SianoDMA.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |dpCurSettings| [ DATA ]
00000 AREA |.data|, DATA
|dpCurSettings| DCB "P", 0x0, "x", 0x0, "a", 0x0, " ", 0x0, "D", 0x0, "m", 0x0
DCB "a", 0x0, " ", 0x0, "D", 0x0, "r", 0x0, "i", 0x0, "v", 0x0
DCB "e", 0x0, "r", 0x0, 0x0, 0x0
% 34
DCB "E", 0x0, "r", 0x0, "r", 0x0, "o", 0x0, "r", 0x0, "s", 0x0
DCB 0x0, 0x0
% 50
DCB "W", 0x0, "a", 0x0, "r", 0x0, "n", 0x0, "i", 0x0, "n", 0x0
DCB "g", 0x0, "s", 0x0, 0x0, 0x0
% 46
DCB "I", 0x0, "n", 0x0, "i", 0x0, "t", 0x0, 0x0, 0x0
% 54
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "T", 0x0, "e", 0x0, "m", 0x0, "p", 0x0, "o", 0x0, "r", 0x0
DCB "a", 0x0, "r", 0x0, "y", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCB "U", 0x0, "n", 0x0, "d", 0x0, "e", 0x0, "f", 0x0, "i", 0x0
DCB "n", 0x0, "e", 0x0, "d", 0x0, 0x0, 0x0
% 44
DCD 0x9
EXPORT |SetEvent|
IMPORT |EventModify|
; File e:\wm604\public\common\sdk\inc\kfuncs.h
00000 AREA |.text| { |SetEvent| }, CODE, ARM, SELECTION=2 ; comdat any
00000 AREA |.pdata$$SetEvent|, PDATA, SELECTION=5, ASSOC=|.text| { |SetEvent| } ; comdat associative
|$T38450| DCD |$L38449|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |SetEvent| }, CODE, ARM, SELECTION=2 ; comdat any
00000 |SetEvent| PROC
; 186 : _inline BOOL SetEvent(HANDLE h) {
00000 |$L38449|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M38447|
; 187 : return EventModify(h,EVENT_SET);
00004 e3a01003 mov r1, #3
00008 eb000000 bl EventModify
; 188 : }
0000c e49de004 ldr lr, [sp], #4
00010 e12fff1e bx lr
00014 |$M38448|
ENDP ; |SetEvent|
IMPORT |PhyDmaSendDescriptor|
; File e:\wm604\platform\seuicbsp\src\drivers\dmbdrv\dmapxaxxx\sianodma.c
00000 AREA |.text| { |sendDmaTransactionFromDb| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$sendDmaTransactionFromDb|, PDATA, SELECTION=5, ASSOC=|.text| { |sendDmaTransactionFromDb| } ; comdat associative
|$T38459| DCD |$L38458|
DCD 0x40000a01
; Function compile flags: /Ogsy
00000 AREA |.text| { |sendDmaTransactionFromDb| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |sendDmaTransactionFromDb| PROC
; 26 : {
00000 |$L38458|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M38456|
; 27 : DMA_DATABASE_ST* dataBase;
; 28 :
; 29 : dataBase = ((DMA_DRV_PARAMS_ST*)dev)->dataBase;
00004 e5902020 ldr r2, [r0, #0x20]
; 30 :
; 31 : if (dataBase->firstMsg != dataBase->lastMsg)
00008 e5921000 ldr r1, [r2]
0000c e5923004 ldr r3, [r2, #4]
00010 e1510003 cmp r1, r3
; 32 : { //We have a transaction in the database
; 33 : PhyDmaSendDescriptor( (DMA_DRV_PARAMS_ST*)dev,
; 34 : &dataBase->transactions[dataBase->firstMsg]);
00014 10823201 addne r3, r2, r1, lsl #4
00018 12831008 addne r1, r3, #8
0001c 1b000000 blne PhyDmaSendDescriptor
; 35 : }
; 36 :
; 37 : }
00020 e49de004 ldr lr, [sp], #4
00024 e12fff1e bx lr
00028 |$M38457|
ENDP ; |sendDmaTransactionFromDb|
IMPORT |ReleaseSemaphore|
IMPORT |WaitForSingleObject|
00000 AREA |.text| { |addDmaTransactionToDb| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$addDmaTransactionToDb|, PDATA, SELECTION=5, ASSOC=|.text| { |addDmaTransactionToDb| } ; comdat associative
|$T38480| DCD |$L38479|
DCD 0x40003a02
; Function compile flags: /Ogsy
00000 AREA |.text| { |addDmaTransactionToDb| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |addDmaTransactionToDb| PROC
; 44 : {
00000 |$L38479|
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M38477|
00008 e1a04003 mov r4, r3
0000c e1a09002 mov r9, r2
00010 e1a0a001 mov r10, r1
00014 e1a05000 mov r5, r0
; 45 : DMA_DATABASE_ST* dataBase;
; 46 : BOOL sendNow;
; 47 : DWORD status;
; 48 :
; 49 : dataBase = ((DMA_DRV_PARAMS_ST*)dev)->dataBase;
; 50 :
; 51 : WaitForSingleObject(((DMA_DRV_PARAMS_ST*)dev)->databaseSemaphore, INFINITE);
00018 e5950028 ldr r0, [r5, #0x28]
0001c e5956020 ldr r6, [r5, #0x20]
00020 e3e01000 mvn r1, #0
00024 eb000000 bl WaitForSingleObject
; 52 : if (dataBase->firstMsg == dataBase->lastMsg)
00028 e5960004 ldr r0, [r6, #4]
; 53 : sendNow = TRUE;
; 54 : else
; 55 : sendNow = FALSE;
; 56 :
; 57 : if (dataBase->firstMsg == (dataBase->lastMsg + 1) % MAX_NUM_OF_WAITING_TRANSACTIONS)
0002c e59f80b0 ldr r8, [pc, #0xB0]
00030 e596e000 ldr lr, [r6]
00034 e2801001 add r1, r0, #1
00038 e0832891 umull r2, r3, r1, r8
0003c e15e0000 cmp lr, r0
00040 e1a031a3 mov r3, r3, lsr #3
00044 e0833103 add r3, r3, r3, lsl #2
00048 e0413083 sub r3, r1, r3, lsl #1
0004c 03a07001 moveq r7, #1
00050 13a07000 movne r7, #0
00054 e15e0003 cmp lr, r3
; 58 : {
; 59 : return FALSE;
00058 03a00000 moveq r0, #0
0005c 0a00001d beq |$L38283|
; 60 : }
; 61 : dataBase->transactions[dataBase->lastMsg].desc = desc;
00060 e0863200 add r3, r6, r0, lsl #4
00064 e583a008 str r10, [r3, #8]
; 62 : dataBase->transactions[dataBase->lastMsg].callBack = callBack;
00068 e5963004 ldr r3, [r6, #4]
; 63 : dataBase->transactions[dataBase->lastMsg].transactionId = transactionId;
; 64 : dataBase->lastMsg = (dataBase->lastMsg + 1) % MAX_NUM_OF_WAITING_TRANSACTIONS;
; 65 : ReleaseSemaphore(((DMA_DRV_PARAMS_ST*)dev)->databaseSemaphore, 1, &status);
0006c e28d2000 add r2, sp, #0
00070 e3a01001 mov r1, #1
00074 e0863203 add r3, r6, r3, lsl #4
00078 e5839010 str r9, [r3, #0x10]
0007c e5963004 ldr r3, [r6, #4]
00080 e0863203 add r3, r6, r3, lsl #4
00084 e5834014 str r4, [r3, #0x14]
00088 e5963004 ldr r3, [r6, #4]
0008c e2834001 add r4, r3, #1
00090 e083e894 umull lr, r3, r4, r8
00094 e1a031a3 mov r3, r3, lsr #3
00098 e0833103 add r3, r3, r3, lsl #2
0009c e0443083 sub r3, r4, r3, lsl #1
000a0 e5863004 str r3, [r6, #4]
000a4 e5950028 ldr r0, [r5, #0x28]
000a8 eb000000 bl ReleaseSemaphore
; 66 : if (sendNow == TRUE)
000ac e3570001 cmp r7, #1
000b0 1a000007 bne |$L38466|
; 67 : sendDmaTransactionFromDb(dev);
000b4 e5952020 ldr r2, [r5, #0x20]
000b8 e5921000 ldr r1, [r2]
000bc e5923004 ldr r3, [r2, #4]
000c0 e1510003 cmp r1, r3
000c4 10823201 addne r3, r2, r1, lsl #4
000c8 12831008 addne r1, r3, #8
000cc 11a00005 movne r0, r5
000d0 1b000000 blne PhyDmaSendDescriptor
000d4 |$L38466|
; 68 : return TRUE;
000d4 e3a00001 mov r0, #1
000d8 |$L38283|
; 69 : }
000d8 e28dd004 add sp, sp, #4
000dc e8bd47f0 ldmia sp!, {r4 - r10, lr}
000e0 e12fff1e bx lr
000e4 |$L38482|
000e4 cccccccd DCD 0xcccccccd
000e8 |$M38478|
ENDP ; |addDmaTransactionToDb|
EXPORT |DmaIst|
EXPORT |??_C@_1HA@NJLDGKHM@?$AAS?$AAi?$AAa?$AAn?$AAo?$AA?5?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAm?$AAa?$AAI?$AAs?$AAt@| [ DATA ] ; `string'
IMPORT |LocalFree|
IMPORT |PhyDmaIntHandler|
IMPORT |NKDbgPrintfW|
00000 AREA |.text| { |DmaIst| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DmaIst|, PDATA, SELECTION=5, ASSOC=|.text| { |DmaIst| } ; comdat associative
|$T38506| DCD |$L38505|
DCD 0x40004d02
00000 AREA |.rdata| { |??_C@_1HA@NJLDGKHM@?$AAS?$AAi?$AAa?$AAn?$AAo?$AA?5?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAm?$AAa?$AAI?$AAs?$AAt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1HA@NJLDGKHM@?$AAS?$AAi?$AAa?$AAn?$AAo?$AA?5?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAm?$AAa?$AAI?$AAs?$AAt@| DCB "S"
DCB 0x0, "i", 0x0, "a", 0x0, "n", 0x0, "o", 0x0, " ", 0x0, "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "m", 0x0, "a", 0x0, "I", 0x0, "s"
DCB 0x0, "t", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "-", 0x0, " "
DCB 0x0, "B", 0x0, "a", 0x0, "d", 0x0, " ", 0x0, "s", 0x0, "t"
DCB 0x0, "a", 0x0, "t", 0x0, "u", 0x0, "s", 0x0, " ", 0x0, "a"
DCB 0x0, "f", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, " ", 0x0, "D"
DCB 0x0, "M", 0x0, "A", 0x0, " ", 0x0, "t", 0x0, "r", 0x0, "a"
DCB 0x0, "n", 0x0, "s", 0x0, "f", 0x0, "e", 0x0, "r", 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |DmaIst| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DmaIst| PROC
; 79 : {
00000 |$L38505|
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M38503|
00008 e1a04000 mov r4, r0
; 80 : DMA_DRV_PARAMS_ST* devHandle = (DMA_DRV_PARAMS_ST *)dev;
; 81 : DWORD status;
; 82 : DMA_DATABASE_ST* dataBase;
; 83 : DMA_DB_NODE_ST* transaction;
; 84 : BOOL sendNow;
; 85 :
; 86 : while (1)
; 87 : {
; 88 : status = WaitForSingleObject(devHandle->dmaIntEvent, INFINITE);
0000c e594000c ldr r0, [r4, #0xC]
00010 e3e01000 mvn r1, #0
00014 eb000000 bl WaitForSingleObject
; 89 : if (devHandle->activeChannel == FALSE)
00018 e594302c ldr r3, [r4, #0x2C]
0001c e58d0000 str r0, [sp]
00020 e3530000 cmp r3, #0
00024 0a00003b beq |$L38494|
00028 e59f7100 ldr r7, [pc, #0x100]
0002c e59f80f8 ldr r8, [pc, #0xF8]
00030 |$L38305|
; 92 : }
; 93 : dataBase = devHandle->dataBase;
00030 e5945020 ldr r5, [r4, #0x20]
; 94 : transaction = &dataBase->transactions[dataBase->firstMsg];
; 95 : status = PhyDmaIntHandler(devHandle, transaction);
00034 e1a00004 mov r0, r4
00038 e5953000 ldr r3, [r5]
0003c e0856203 add r6, r5, r3, lsl #4
00040 e2861008 add r1, r6, #8
00044 eb000000 bl PhyDmaIntHandler
00048 e1a03000 mov r3, r0
; 96 : WaitForSingleObject(devHandle->databaseSemaphore, INFINITE);
0004c e5940028 ldr r0, [r4, #0x28]
00050 e3e01000 mvn r1, #0
00054 e58d3000 str r3, [sp]
00058 eb000000 bl WaitForSingleObject
; 97 : if (status != DMA_STATUS_OK)
0005c e59d3000 ldr r3, [sp]
00060 e3530000 cmp r3, #0
; 98 : {
; 99 : DBGMSG(ZONE_ERROR, (TEXT("Siano PxaDMA, DmaIst() - Bad status after DMA transfer\n")));
00064 15973440 ldrne r3, [r7, #0x440]
00068 13130001 tstne r3, #1
0006c 159f00b4 ldrne r0, [pc, #0xB4]
00070 1b000000 blne NKDbgPrintfW
; 100 : }
; 101 : if (dataBase->firstMsg != dataBase->lastMsg)
00074 e5953000 ldr r3, [r5]
00078 e5950004 ldr r0, [r5, #4]
0007c e1530000 cmp r3, r0
00080 0a000019 beq |$L38315|
; 102 : {
; 103 :
; 104 : dataBase->firstMsg = (dataBase->firstMsg + 1) % MAX_NUM_OF_WAITING_TRANSACTIONS;
00084 e2831001 add r1, r3, #1
00088 e0832891 umull r2, r3, r1, r8
0008c e1a031a3 mov r3, r3, lsr #3
00090 e0833103 add r3, r3, r3, lsl #2
00094 e0413083 sub r3, r1, r3, lsl #1
00098 e5853000 str r3, [r5]
; 105 : if (dataBase->firstMsg == dataBase->lastMsg)
0009c e1530000 cmp r3, r0
; 106 : sendNow = FALSE;
; 107 : else
; 108 : sendNow = TRUE;
; 109 :
; 110 : LocalFree(transaction->desc);
000a0 e5960008 ldr r0, [r6, #8]
000a4 03a05000 moveq r5, #0
000a8 13a05001 movne r5, #1
000ac eb000000 bl LocalFree
; 111 : if (sendNow)
000b0 e3550000 cmp r5, #0
; 112 : sendDmaTransactionFromDb(dev);
000b4 15942020 ldrne r2, [r4, #0x20]
000b8 15921000 ldrne r1, [r2]
000bc 15923004 ldrne r3, [r2, #4]
000c0 11510003 cmpne r1, r3
000c4 10823201 addne r3, r2, r1, lsl #4
000c8 12831008 addne r1, r3, #8
000cc 11a00004 movne r0, r4
000d0 1b000000 blne PhyDmaSendDescriptor
; 113 : if (transaction->callBack!= NULL)
000d4 e5963010 ldr r3, [r6, #0x10]
000d8 e3530000 cmp r3, #0
; 114 : transaction->callBack(transaction->transactionId, status);
000dc 159d1000 ldrne r1, [sp]
000e0 15960014 ldrne r0, [r6, #0x14]
000e4 11a0e00f movne lr, pc
000e8 112fff13 bxne r3
000ec |$L38315|
; 115 : }
; 116 : ReleaseSemaphore(devHandle->databaseSemaphore, 1, &status);
000ec e5940028 ldr r0, [r4, #0x28]
000f0 e28d2000 add r2, sp, #0
000f4 e3a01001 mov r1, #1
000f8 eb000000 bl ReleaseSemaphore
000fc e594000c ldr r0, [r4, #0xC]
00100 e3e01000 mvn r1, #0
00104 eb000000 bl WaitForSingleObject
00108 e594302c ldr r3, [r4, #0x2C]
0010c e58d0000 str r0, [sp]
00110 e3530000 cmp r3, #0
00114 1affffc5 bne |$L38305|
00118 |$L38494|
; 90 : {
; 91 : return 0;
00118 e3a00000 mov r0, #0
; 117 : }
; 118 : }
0011c e28dd004 add sp, sp, #4
00120 e8bd41f0 ldmia sp!, {r4 - r8, lr}
00124 e12fff1e bx lr
00128 |$L38508|
00128 00000000 DCD |??_C@_1HA@NJLDGKHM@?$AAS?$AAi?$AAa?$AAn?$AAo?$AA?5?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAm?$AAa?$AAI?$AAs?$AAt@|
0012c cccccccd DCD 0xcccccccd
00130 00000000 DCD |dpCurSettings|
00134 |$M38504|
ENDP ; |DmaIst|
EXPORT |??_C@_1FO@JHBINHG@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAP@| [ DATA ] ; `string'
EXPORT |??_C@_1FC@GOMGHGBJ@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAD@| [ DATA ] ; `string'
EXPORT |DllMain|
00000 AREA |.text| { |DllMain| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DllMain|, PDATA, SELECTION=5, ASSOC=|.text| { |DllMain| } ; comdat associative
|$T38522| DCD |$L38521|
DCD 0x40001401
00000 AREA |.rdata| { |??_C@_1FC@GOMGHGBJ@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAD@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FC@GOMGHGBJ@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAD@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "l", 0x0, "l", 0x0, "M", 0x0, "a"
DCB 0x0, "i", 0x0, "n", 0x0, "(", 0x0, ")", 0x0, ":", 0x0, " "
DCB 0x0, "D", 0x0, "L", 0x0, "L", 0x0, "_", 0x0, "P", 0x0, "R"
DCB 0x0, "O", 0x0, "C", 0x0, "E", 0x0, "S", 0x0, "S", 0x0, "_"
DCB 0x0, "D", 0x0, "E", 0x0, "T", 0x0, "A", 0x0, "C", 0x0, "H"
DCB 0x0, " ", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1FO@JHBINHG@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAP@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FO@JHBINHG@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAP@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "l", 0x0, "l", 0x0, "M", 0x0, "a"
DCB 0x0, "i", 0x0, "n", 0x0, "(", 0x0, ")", 0x0, ":", 0x0, " "
DCB 0x0, "P", 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A"
DCB 0x0, " ", 0x0, "D", 0x0, "L", 0x0, "L", 0x0, "_", 0x0, "P"
DCB 0x0, "R", 0x0, "O", 0x0, "C", 0x0, "E", 0x0, "S", 0x0, "S"
DCB 0x0, "_", 0x0, "A", 0x0, "T", 0x0, "T", 0x0, "A", 0x0, "C"
DCB 0x0, "H", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |DllMain| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DllMain| PROC
; 136 : {
00000 |$L38521|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M38519|
00004 e3510000 cmp r1, #0
; 137 : switch(Reason)
00008 e59f403c ldr r4, [pc, #0x3C]
0000c 0a000005 beq |$L38516|
00010 e3510001 cmp r1, #1
; 148 : }
; 149 : default:
; 150 : return TRUE;
00014 1a000007 bne |$L38513|
00018 e5943440 ldr r3, [r4, #0x440]
0001c e3130004 tst r3, #4
00020 159f0020 ldrne r0, [pc, #0x20]
00024 1b000000 blne NKDbgPrintfW
00028 |$L38516|
00028 e5943440 ldr r3, [r4, #0x440]
0002c e3130004 tst r3, #4
00030 159f000c ldrne r0, [pc, #0xC]
00034 1b000000 blne NKDbgPrintfW
00038 |$L38513|
; 138 : {
; 139 : case DLL_PROCESS_ATTACH:
; 140 : {
; 141 : DEBUGREGISTER(DLLinstance);
; 142 : DBGMSG(ZONE_DLLINIT, (TEXT("PxaDMA, DllMain(): PxaDMA DLL_PROCESS_ATTACH\r\n")));
; 143 : }
; 144 : case DLL_PROCESS_DETACH:
; 145 : {
; 146 : DBGMSG(ZONE_DLLINIT, (TEXT("PxaDMA, DllMain(): DLL_PROCESS_DETACH \r\n")));
; 147 : return TRUE;
00038 e3a00001 mov r0, #1
; 151 : }
; 152 : }
0003c e8bd4010 ldmia sp!, {r4, lr}
00040 e12fff1e bx lr
00044 |$L38524|
00044 00000000 DCD |??_C@_1FC@GOMGHGBJ@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAD@|
00048 00000000 DCD |??_C@_1FO@JHBINHG@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAl?$AAl?$AAM?$AAa?$AAi?$AAn?$AA?$CI?$AA?$CJ?$AA?3?$AA?5?$AAP@|
0004c 00000000 DCD |dpCurSettings|
00050 |$M38520|
ENDP ; |DllMain|
EXPORT |DMA_SetUpChannel|
EXPORT |??_C@_1JE@HGFPBKNC@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| [ DATA ] ; `string'
EXPORT |??_C@_1JK@JCMJHJOD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| [ DATA ] ; `string'
EXPORT |??_C@_1IM@IKBEMGNI@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| [ DATA ] ; `string'
EXPORT |??_C@_1GE@EFIJMFCD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| [ DATA ] ; `string'
EXPORT |??_C@_1GA@NGBJPOKA@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| [ DATA ] ; `string'
EXPORT |??_C@_1BO@CBBPPMOA@?$AAD?$AAM?$AAA?$AA_?$AAC?$AAH?$AAA?$AAN?$AAN?$AAE?$AAL?$AA_?$AA?$CF?$AAd?$AA?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_1JA@DEAPAEML@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| [ DATA ] ; `string'
IMPORT |wsprintfW|
IMPORT |VirtualAlloc|
IMPORT |VirtualFree|
IMPORT |PhyDmaSetUp|
IMPORT |CreateEventW|
IMPORT |CreateSemaphoreW|
IMPORT |CreateThread|
IMPORT |__security_cookie|
IMPORT |__security_check_cookie|
IMPORT |CloseHandle|
IMPORT |CeSetThreadPriority|
00000 AREA |.text| { |DMA_SetUpChannel| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DMA_SetUpChannel|, PDATA, SELECTION=5, ASSOC=|.text| { |DMA_SetUpChannel| } ; comdat associative
|$T38551| DCD |$L38550|
DCD 0x40008b02
00000 AREA |.rdata| { |??_C@_1JA@DEAPAEML@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JA@DEAPAEML@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "U", 0x0, "p", 0x0, "(", 0x0, ")"
DCB 0x0, ":", 0x0, " ", 0x0, "E", 0x0, "r", 0x0, "r", 0x0, "o"
DCB 0x0, "r", 0x0, "!", 0x0, " ", 0x0, "C", 0x0, "o", 0x0, "u"
DCB 0x0, "i", 0x0, "l", 0x0, "d", 0x0, " ", 0x0, "n", 0x0, "o"
DCB 0x0, "t", 0x0, " ", 0x0, "c", 0x0, "r", 0x0, "e", 0x0, "a"
DCB 0x0, "t", 0x0, "e", 0x0, " ", 0x0, "e", 0x0, "v", 0x0, "e"
DCB 0x0, "n", 0x0, "t", 0x0, " ", 0x0, "f", 0x0, "o", 0x0, "r"
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, " ", 0x0, "i"
DCB 0x0, "n", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, "r", 0x0, "u"
DCB 0x0, "p", 0x0, "t", 0x0, ".", 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1GA@NGBJPOKA@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1GA@NGBJPOKA@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "U", 0x0, "p", 0x0, "(", 0x0, ")"
DCB 0x0, ":", 0x0, " ", 0x0, "C", 0x0, "h", 0x0, "a", 0x0, "n"
DCB 0x0, "n", 0x0, "e", 0x0, "l", 0x0, " ", 0x0, "%", 0x0, "d"
DCB 0x0, " ", 0x0, "w", 0x0, "i", 0x0, "l", 0x0, "l", 0x0, " "
DCB 0x0, "b", 0x0, "e", 0x0, " ", 0x0, "u", 0x0, "s", 0x0, "e"
DCB 0x0, "d", 0x0, ".", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1BO@CBBPPMOA@?$AAD?$AAM?$AAA?$AA_?$AAC?$AAH?$AAA?$AAN?$AAN?$AAE?$AAL?$AA_?$AA?$CF?$AAd?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1BO@CBBPPMOA@?$AAD?$AAM?$AAA?$AA_?$AAC?$AAH?$AAA?$AAN?$AAN?$AAE?$AAL?$AA_?$AA?$CF?$AAd?$AA?$AA@| DCB "D"
DCB 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "C", 0x0, "H", 0x0, "A"
DCB 0x0, "N", 0x0, "N", 0x0, "E", 0x0, "L", 0x0, "_", 0x0, "%"
DCB 0x0, "d", 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1GE@EFIJMFCD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1GE@EFIJMFCD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "U", 0x0, "p", 0x0, "(", 0x0, ")"
DCB 0x0, ":", 0x0, " ", 0x0, "E", 0x0, "r", 0x0, "r", 0x0, "o"
DCB 0x0, "r", 0x0, "!", 0x0, " ", 0x0, "P", 0x0, "h", 0x0, "y"
DCB 0x0, "D", 0x0, "m", 0x0, "a", 0x0, " ", 0x0, "S", 0x0, "e"
DCB 0x0, "t", 0x0, "u", 0x0, "p", 0x0, " ", 0x0, "f", 0x0, "a"
DCB 0x0, "i", 0x0, "l", 0x0, "e", 0x0, "d", 0x0, ".", 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1IM@IKBEMGNI@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1IM@IKBEMGNI@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "U", 0x0, "p", 0x0, "(", 0x0, ")"
DCB 0x0, ":", 0x0, " ", 0x0, "E", 0x0, "r", 0x0, "r", 0x0, "o"
DCB 0x0, "r", 0x0, "!", 0x0, " ", 0x0, "A", 0x0, "l", 0x0, "l"
DCB 0x0, "o", 0x0, "c", 0x0, "a", 0x0, "t", 0x0, "i", 0x0, "n"
DCB 0x0, "g", 0x0, " ", 0x0, "m", 0x0, "e", 0x0, "m", 0x0, "o"
DCB 0x0, "r", 0x0, "y", 0x0, " ", 0x0, "f", 0x0, "o", 0x0, "r"
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, " ", 0x0, "m"
DCB 0x0, "o", 0x0, "d", 0x0, "u", 0x0, "l", 0x0, "e", 0x0, " "
DCB 0x0, "f", 0x0, "a", 0x0, "i", 0x0, "l", 0x0, "e", 0x0, "d"
DCB 0x0, ".", 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1JK@JCMJHJOD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JK@JCMJHJOD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "U", 0x0, "p", 0x0, "(", 0x0, ")"
DCB 0x0, ":", 0x0, " ", 0x0, "E", 0x0, "r", 0x0, "r", 0x0, "o"
DCB 0x0, "r", 0x0, "!", 0x0, " ", 0x0, "C", 0x0, "o", 0x0, "u"
DCB 0x0, "l", 0x0, "d", 0x0, " ", 0x0, "n", 0x0, "o", 0x0, "t"
DCB 0x0, " ", 0x0, "c", 0x0, "r", 0x0, "e", 0x0, "a", 0x0, "t"
DCB 0x0, "e", 0x0, " ", 0x0, "s", 0x0, "e", 0x0, "m", 0x0, "a"
DCB 0x0, "p", 0x0, "h", 0x0, "o", 0x0, "r", 0x0, "e", 0x0, " "
DCB 0x0, "f", 0x0, "o", 0x0, "r", 0x0, " ", 0x0, "d", 0x0, "e"
DCB 0x0, "v", 0x0, "i", 0x0, "c", 0x0, "e", 0x0, " ", 0x0, "d"
DCB 0x0, "a", 0x0, "t", 0x0, "a", 0x0, "B", 0x0, "a", 0x0, "s"
DCB 0x0, "e", 0x0, ".", 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1JE@HGFPBKNC@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JE@HGFPBKNC@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@| DCB "P"
DCB 0x0, "x", 0x0, "a", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, ","
DCB 0x0, " ", 0x0, "D", 0x0, "M", 0x0, "A", 0x0, "_", 0x0, "S"
DCB 0x0, "e", 0x0, "t", 0x0, "U", 0x0, "p", 0x0, "(", 0x0, ")"
DCB 0x0, ":", 0x0, " ", 0x0, "E", 0x0, "r", 0x0, "r", 0x0, "o"
DCB 0x0, "r", 0x0, "!", 0x0, " ", 0x0, "C", 0x0, "o", 0x0, "u"
DCB 0x0, "l", 0x0, "d", 0x0, " ", 0x0, "n", 0x0, "o", 0x0, "t"
DCB 0x0, " ", 0x0, "a", 0x0, "l", 0x0, "l", 0x0, "o", 0x0, "c"
DCB 0x0, "a", 0x0, "t", 0x0, "e", 0x0, " ", 0x0, "m", 0x0, "e"
DCB 0x0, "m", 0x0, "o", 0x0, "r", 0x0, "y", 0x0, " ", 0x0, "f"
DCB 0x0, "o", 0x0, "r", 0x0, " ", 0x0, "d", 0x0, "e", 0x0, "v"
DCB 0x0, "i", 0x0, "c", 0x0, "e", 0x0, " ", 0x0, "h", 0x0, "a"
DCB 0x0, "n", 0x0, "d", 0x0, "l", 0x0, "e", 0x0, ".", 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |DMA_SetUpChannel| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DMA_SetUpChannel| PROC
; 165 : {
00000 |$L38550|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd034 sub sp, sp, #0x34
00008 |$M38548|
00008 e1a05000 mov r5, r0
0000c e59f3214 ldr r3, [pc, #0x214]
00010 e5933000 ldr r3, [r3]
00014 e58d3030 str r3, [sp, #0x30]
; 166 :
; 167 : DMA_DRV_PARAMS_ST* drvHandle;
; 168 : TCHAR eventName[20];
; 169 :
; 170 : //Allocate memory for DMA channel handle.
; 171 : drvHandle = (DMA_DRV_PARAMS_ST*)VirtualAlloc(NULL, sizeof(DMA_DRV_PARAMS_ST), MEM_COMMIT, PAGE_READWRITE);
00018 e3a03004 mov r3, #4
0001c e3a02a01 mov r2, #1, 20
00020 e3a01040 mov r1, #0x40
00024 e3a00000 mov r0, #0
00028 eb000000 bl VirtualAlloc
0002c e1b04000 movs r4, r0
; 172 : if (drvHandle == NULL)
00030 1a000006 bne |$L38343|
; 173 : {
; 174 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! Could not allocate memory for device handle.\n")));
00034 e59f31cc ldr r3, [pc, #0x1CC]
00038 e5933440 ldr r3, [r3, #0x440]
0003c e3130009 tst r3, #9
00040 0a000062 beq |$L38527|
00044 e59f01d8 ldr r0, [pc, #0x1D8]
00048 eb000000 bl NKDbgPrintfW
; 175 : return NULL;
0004c ea00005f b |$L38527|
00050 |$L38343|
; 176 : }
; 177 :
; 178 : //Create semaphore to take care of channel database.
; 179 : drvHandle->databaseSemaphore = CreateSemaphore(NULL, 1, 1, NULL);
00050 e3a03000 mov r3, #0
00054 e3a02001 mov r2, #1
00058 e3a01001 mov r1, #1
0005c e3a00000 mov r0, #0
00060 eb000000 bl CreateSemaphoreW
00064 e3500000 cmp r0, #0
00068 e5840028 str r0, [r4, #0x28]
; 180 : if (drvHandle->databaseSemaphore == NULL)
0006c 1a000006 bne |$L38349|
; 181 : {
; 182 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! Could not create semaphore for device dataBase.\n")));
00070 e59f3190 ldr r3, [pc, #0x190]
00074 e5933440 ldr r3, [r3, #0x440]
00078 e3130009 tst r3, #9
0007c 0a00004f beq |$L38529|
00080 e59f0198 ldr r0, [pc, #0x198]
00084 eb000000 bl NKDbgPrintfW
; 183 : VirtualFree (drvHandle, 0, MEM_RELEASE);
; 184 : return NULL;
00088 ea00004c b |$L38529|
0008c |$L38349|
; 185 : }
; 186 :
; 187 : //Allocate the driver database memory.
; 188 : drvHandle->dataBase = (DMA_DATABASE_ST*)VirtualAlloc(NULL, sizeof(DMA_DATABASE_ST), MEM_COMMIT, PAGE_READWRITE);
0008c e3a03004 mov r3, #4
00090 e3a02a01 mov r2, #1, 20
00094 e3a010a8 mov r1, #0xA8
00098 e3a00000 mov r0, #0
0009c eb000000 bl VirtualAlloc
000a0 e3500000 cmp r0, #0
000a4 e5840020 str r0, [r4, #0x20]
; 189 : if (drvHandle->dataBase == NULL)
000a8 1a000007 bne |$L38356|
; 190 : {
; 191 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! Allocating memory for DMA module failed.\n")));
000ac e59f3154 ldr r3, [pc, #0x154]
000b0 e5933440 ldr r3, [r3, #0x440]
000b4 e3130009 tst r3, #9
000b8 0a000001 beq |$L38531|
000bc e59f0158 ldr r0, [pc, #0x158]
000c0 |$L38547|
000c0 eb000000 bl NKDbgPrintfW
000c4 |$L38531|
; 192 : CloseHandle(drvHandle->databaseSemaphore);
000c4 e5940028 ldr r0, [r4, #0x28]
; 193 : VirtualFree (drvHandle, 0, MEM_RELEASE);
; 194 : return NULL;
000c8 ea00003b b |$L38546|
000cc |$L38356|
; 195 : }
; 196 :
; 197 : drvHandle->burstSize = userParam->burstSize;
000cc e5953008 ldr r3, [r5, #8]
; 198 : drvHandle->busWidth = userParam->busWidth;
; 199 :
; 200 : if (userParam->flags & DMA_USE_HW_FLOW_CTRL)
000d0 e3a06001 mov r6, #1
; 201 : {
; 202 : drvHandle->useHWFlowCtrl = TRUE;
; 203 : drvHandle->dmaReq = userParam->dmaReq;
; 204 : }
; 205 :
; 206 : if (PhyDmaSetUp(drvHandle) == FALSE)
000d4 e1a00004 mov r0, r4
000d8 e5843014 str r3, [r4, #0x14]
000dc e595300c ldr r3, [r5, #0xC]
000e0 e5843018 str r3, [r4, #0x18]
000e4 e5953000 ldr r3, [r5]
000e8 e3130001 tst r3, #1
000ec 1584601c strne r6, [r4, #0x1C]
000f0 15953004 ldrne r3, [r5, #4]
000f4 15843010 strne r3, [r4, #0x10]
000f8 eb000000 bl PhyDmaSetUp
000fc e3500000 cmp r0, #0
00100 1a000005 bne |$L38360|
; 207 : {
; 208 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! PhyDma Setup failed.\n")));
00104 e59f30fc ldr r3, [pc, #0xFC]
00108 e5933440 ldr r3, [r3, #0x440]
0010c e3130009 tst r3, #9
00110 0affffeb beq |$L38531|
00114 e59f00fc ldr r0, [pc, #0xFC]
; 209 : CloseHandle(drvHandle->databaseSemaphore);
; 210 : VirtualFree (drvHandle, 0, MEM_RELEASE);
; 211 : return NULL;
00118 eaffffe8 b |$L38547|
0011c |$L38360|
; 212 : }
; 213 :
; 214 : DBGMSG(1, (TEXT("PxaDMA, DMA_SetUp(): Channel %d will be used.\r\n"), drvHandle->channel));
0011c e5941004 ldr r1, [r4, #4]
00120 e59f00ec ldr r0, [pc, #0xEC]
00124 eb000000 bl NKDbgPrintfW
; 215 : wsprintf(eventName, TEXT("DMA_CHANNEL_%d"),drvHandle->channel);
00128 e5942004 ldr r2, [r4, #4]
0012c e59f10dc ldr r1, [pc, #0xDC]
00130 e28d0008 add r0, sp, #8
00134 eb000000 bl wsprintfW
; 216 : drvHandle->dmaIntEvent = CreateEvent(NULL, FALSE, FALSE, eventName);
00138 e28d3008 add r3, sp, #8
0013c e3a02000 mov r2, #0
00140 e3a01000 mov r1, #0
00144 e3a00000 mov r0, #0
00148 eb000000 bl CreateEventW
0014c e3500000 cmp r0, #0
00150 e584000c str r0, [r4, #0xC]
; 217 : if (drvHandle->dmaIntEvent == NULL)
00154 1a000005 bne |$L38367|
; 218 : {
; 219 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! Couild not create event for DMA interrupt.\n")));
00158 e59f30a8 ldr r3, [pc, #0xA8]
0015c e5933440 ldr r3, [r3, #0x440]
00160 e3130009 tst r3, #9
00164 0affffd6 beq |$L38531|
00168 e59f0094 ldr r0, [pc, #0x94]
; 220 : CloseHandle(drvHandle->databaseSemaphore);
; 221 : VirtualFree (drvHandle, 0, MEM_RELEASE);
; 222 : return NULL;
0016c eaffffd3 b |$L38547|
00170 |$L38367|
; 223 : }
; 224 :
; 225 :
; 226 :
; 227 :
; 228 :
; 229 : //Create IST thread for DMA controller.
; 230 : drvHandle->ist = CreateThread( NULL,
; 231 : 0,
; 232 : DmaIst,
; 233 : drvHandle,
; 234 : 0,
; 235 : NULL);
00170 e59f2094 ldr r2, [pc, #0x94]
00174 e3a0e000 mov lr, #0
00178 e1a03004 mov r3, r4
0017c e3a01000 mov r1, #0
00180 e3a00000 mov r0, #0
00184 e58de004 str lr, [sp, #4]
00188 e58de000 str lr, [sp]
0018c eb000000 bl CreateThread
00190 e3500000 cmp r0, #0
00194 e5840024 str r0, [r4, #0x24]
; 236 : if (drvHandle->ist == NULL)
00198 1a000010 bne |$L38373|
; 237 : {
; 238 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! Couild not create event for DMA interrupt.\n")));
0019c e59f3064 ldr r3, [pc, #0x64]
001a0 e5933440 ldr r3, [r3, #0x440]
001a4 e3130009 tst r3, #9
001a8 159f0054 ldrne r0, [pc, #0x54]
001ac 1b000000 blne NKDbgPrintfW
; 239 : CloseHandle(drvHandle->databaseSemaphore);
001b0 e5940028 ldr r0, [r4, #0x28]
001b4 eb000000 bl CloseHandle
; 240 : CloseHandle(drvHandle->dmaIntEvent);
001b8 e594000c ldr r0, [r4, #0xC]
001bc |$L38546|
001bc eb000000 bl CloseHandle
; 181 : {
; 182 : DBGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("PxaDMA, DMA_SetUp(): Error! Could not create semaphore for device dataBase.\n")));
001c0 |$L38529|
; 241 : VirtualFree (drvHandle, 0, MEM_RELEASE);
001c0 e3a02902 mov r2, #2, 18
001c4 e3a01000 mov r1, #0
001c8 e1a00004 mov r0, r4
001cc eb000000 bl VirtualFree
001d0 |$L38527|
; 242 : return NULL;
001d0 e59d0030 ldr r0, [sp, #0x30]
001d4 eb000000 bl __security_check_cookie
001d8 e3a04000 mov r4, #0
001dc ea000004 b |$L38336|
001e0 |$L38373|
; 243 : }
; 244 :
; 245 : CeSetThreadPriority(drvHandle->ist, 0);
001e0 e3a01000 mov r1, #0
001e4 eb000000 bl CeSetThreadPriority
; 246 : drvHandle->activeChannel = TRUE;
001e8 e584602c str r6, [r4, #0x2C]
; 247 : return drvHandle;
001ec e59d0030 ldr r0, [sp, #0x30]
001f0 eb000000 bl __security_check_cookie
001f4 |$L38336|
; 175 : return NULL;
001f4 e1a00004 mov r0, r4
; 248 :
; 249 : }
001f8 e28dd034 add sp, sp, #0x34
001fc e8bd4070 ldmia sp!, {r4 - r6, lr}
00200 e12fff1e bx lr
00204 |$L38553|
00204 00000000 DCD |??_C@_1JA@DEAPAEML@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@|
00208 00000000 DCD |dpCurSettings|
0020c 00000000 DCD |DmaIst|
00210 00000000 DCD |??_C@_1BO@CBBPPMOA@?$AAD?$AAM?$AAA?$AA_?$AAC?$AAH?$AAA?$AAN?$AAN?$AAE?$AAL?$AA_?$AA?$CF?$AAd?$AA?$AA@|
00214 00000000 DCD |??_C@_1GA@NGBJPOKA@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@|
00218 00000000 DCD |??_C@_1GE@EFIJMFCD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@|
0021c 00000000 DCD |??_C@_1IM@IKBEMGNI@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@|
00220 00000000 DCD |??_C@_1JK@JCMJHJOD@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@|
00224 00000000 DCD |??_C@_1JE@HGFPBKNC@?$AAP?$AAx?$AAa?$AAD?$AAM?$AAA?$AA?0?$AA?5?$AAD?$AAM?$AAA?$AA_?$AAS?$AAe?$AAt?$AAU?$AAp?$AA?$CI?$AA?$CJ?$AA?3@|
00228 00000000 DCD |__security_cookie|
0022c |$M38549|
ENDP ; |DMA_SetUpChannel|
EXPORT |DMA_RemoveChannel|
IMPORT |PhyDmaRemoveChannel|
IMPORT |GetExitCodeThread|
; File e:\wm604\public\common\sdk\inc\kfuncs.h
00000 AREA |.text| { |DMA_RemoveChannel| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DMA_RemoveChannel|, PDATA, SELECTION=5, ASSOC=|.text| { |DMA_RemoveChannel| } ; comdat associative
|$T38568| DCD |$L38567|
DCD 0x40002a02
; Function compile flags: /Ogsy
; File e:\wm604\platform\seuicbsp\src\drivers\dmbdrv\dmapxaxxx\sianodma.c
00000 AREA |.text| { |DMA_RemoveChannel| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DMA_RemoveChannel| PROC
; 260 : {
00000 |$L38567|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M38565|
00008 e1a04000 mov r4, r0
; 261 : DMA_DRV_PARAMS_ST* drvHandle = (DMA_DRV_PARAMS_ST*)dev;
; 262 : DWORD exitCode;
; 263 :
; 264 : drvHandle->activeChannel = FALSE;
; 265 : if (drvHandle->dmaIntEvent)
0000c e594300c ldr r3, [r4, #0xC]
00010 e3a02000 mov r2, #0
00014 e584202c str r2, [r4, #0x2C]
00018 e3530000 cmp r3, #0
; 266 : SetEvent(drvHandle->dmaIntEvent);
0001c 13a01003 movne r1, #3
00020 11a00003 movne r0, r3
00024 1b000000 blne EventModify
00028 e3a05c01 mov r5, #1, 24
0002c e3855003 orr r5, r5, #3
00030 |$L38384|
; 267 :
; 268 : //Wait until the thread exits.
; 269 : while (GetExitCodeThread(drvHandle->ist, &exitCode) == STILL_ACTIVE);
00030 e5940024 ldr r0, [r4, #0x24]
00034 e28d1000 add r1, sp, #0
00038 eb000000 bl GetExitCodeThread
0003c e1500005 cmp r0, r5
00040 0afffffa beq |$L38384|
; 270 :
; 271 : if (drvHandle->ist)
00044 e5943024 ldr r3, [r4, #0x24]
00048 e3530000 cmp r3, #0
; 272 : CloseHandle(drvHandle->ist);
0004c 11a00003 movne r0, r3
00050 1b000000 blne CloseHandle
; 273 : if (drvHandle->dmaIntEvent)
00054 e594300c ldr r3, [r4, #0xC]
00058 e3530000 cmp r3, #0
; 274 : CloseHandle(drvHandle->dmaIntEvent);
0005c 11a00003 movne r0, r3
00060 1b000000 blne CloseHandle
; 275 : PhyDmaRemoveChannel(drvHandle);
00064 e1a00004 mov r0, r4
00068 eb000000 bl PhyDmaRemoveChannel
; 276 : if (drvHandle->dataBase)
0006c e5943020 ldr r3, [r4, #0x20]
00070 e3530000 cmp r3, #0
; 277 : VirtualFree(drvHandle->dataBase, sizeof(DMA_DATABASE_ST), MEM_RELEASE);
00074 13a02902 movne r2, #2, 18
00078 13a010a8 movne r1, #0xA8
0007c 11a00003 movne r0, r3
00080 1b000000 blne VirtualFree
; 278 : CloseHandle(drvHandle->databaseSemaphore);
00084 e5940028 ldr r0, [r4, #0x28]
00088 eb000000 bl CloseHandle
; 279 : //Allocate memory for DMA channel handle.
; 280 : if (drvHandle)
; 281 : VirtualFree(drvHandle, sizeof(DMA_DRV_PARAMS_ST), MEM_RELEASE);
0008c e3a02902 mov r2, #2, 18
00090 e3a01040 mov r1, #0x40
00094 e1a00004 mov r0, r4
00098 eb000000 bl VirtualFree
; 282 :
; 283 : }
0009c e28dd004 add sp, sp, #4
000a0 e8bd4030 ldmia sp!, {r4, r5, lr}
000a4 e12fff1e bx lr
000a8 |$M38566|
ENDP ; |DMA_RemoveChannel|
EXPORT |DMA_ConfigChannel|
IMPORT |LocalAlloc|
00000 AREA |.text| { |DMA_ConfigChannel| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DMA_ConfigChannel|, PDATA, SELECTION=5, ASSOC=|.text| { |DMA_ConfigChannel| } ; comdat associative
|$T38604| DCD |$L38603|
DCD 0x40004402
; Function compile flags: /Ogsy
00000 AREA |.text| { |DMA_ConfigChannel| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DMA_ConfigChannel| PROC
; 297 : {
00000 |$L38603|
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M38601|
00008 e1a04001 mov r4, r1
0000c e1a05000 mov r5, r0
; 298 : DMA_DESCRIPTOR_ST* desc;
; 299 : DMA_DRV_PARAMS_ST* devHandle = (DMA_DRV_PARAMS_ST *)dev;
; 300 :
; 301 :
; 302 :
; 303 : desc = LocalAlloc(LPTR, sizeof(DMA_DESCRIPTOR_ST));
00010 e3a01010 mov r1, #0x10
00014 e3a00040 mov r0, #0x40
00018 eb000000 bl LocalAlloc
; 304 :
; 305 : desc->srcPhyAddr = dmaParam->srcAddr;
0001c e5943000 ldr r3, [r4]
00020 e1a07000 mov r7, r0
; 306 : desc->dstPhyAddr = dmaParam->dstAddr;
; 307 : desc->len = dmaParam->len;
; 308 : desc->flags = dmaParam->flags;
; 309 :
; 310 : addDmaTransactionToDb( dev,
; 311 : desc,
; 312 : dmaParam->callBack,
; 313 : dmaParam->transactionId);
00024 e3e01000 mvn r1, #0
00028 e5873000 str r3, [r7]
0002c e5943004 ldr r3, [r4, #4]
00030 e5873004 str r3, [r7, #4]
00034 e5943008 ldr r3, [r4, #8]
00038 e5873008 str r3, [r7, #8]
0003c e594300c ldr r3, [r4, #0xC]
00040 e587300c str r3, [r7, #0xC]
00044 e5950028 ldr r0, [r5, #0x28]
00048 e5949014 ldr r9, [r4, #0x14]
0004c e594a010 ldr r10, [r4, #0x10]
00050 e5958020 ldr r8, [r5, #0x20]
00054 eb000000 bl WaitForSingleObject
00058 e5980004 ldr r0, [r8, #4]
0005c e59fe0a8 ldr lr, [pc, #0xA8]
00060 e5984000 ldr r4, [r8]
00064 e2801001 add r1, r0, #1
00068 e0832e91 umull r2, r3, r1, lr
0006c e1540000 cmp r4, r0
00070 e1a031a3 mov r3, r3, lsr #3
00074 e0833103 add r3, r3, r3, lsl #2
00078 e0413083 sub r3, r1, r3, lsl #1
0007c 03a06001 moveq r6, #1
00080 13a06000 movne r6, #0
00084 e1540003 cmp r4, r3
00088 0a00001c beq |$L38589|
0008c e0883200 add r3, r8, r0, lsl #4
00090 e5837008 str r7, [r3, #8]
00094 e5983004 ldr r3, [r8, #4]
00098 e28d2000 add r2, sp, #0
0009c e3a01001 mov r1, #1
000a0 e0883203 add r3, r8, r3, lsl #4
000a4 e5839010 str r9, [r3, #0x10]
000a8 e5983004 ldr r3, [r8, #4]
000ac e0883203 add r3, r8, r3, lsl #4
000b0 e583a014 str r10, [r3, #0x14]
000b4 e5983004 ldr r3, [r8, #4]
000b8 e2834001 add r4, r3, #1
000bc e083ee94 umull lr, r3, r4, lr
000c0 e1a031a3 mov r3, r3, lsr #3
000c4 e0833103 add r3, r3, r3, lsl #2
000c8 e0443083 sub r3, r4, r3, lsl #1
000cc e5883004 str r3, [r8, #4]
000d0 e5950028 ldr r0, [r5, #0x28]
000d4 eb000000 bl ReleaseSemaphore
000d8 e3560001 cmp r6, #1
000dc 1a000007 bne |$L38589|
000e0 e5952020 ldr r2, [r5, #0x20]
000e4 e5921000 ldr r1, [r2]
000e8 e5923004 ldr r3, [r2, #4]
000ec e1510003 cmp r1, r3
000f0 10823201 addne r3, r2, r1, lsl #4
000f4 12831008 addne r1, r3, #8
000f8 11a00005 movne r0, r5
000fc 1b000000 blne PhyDmaSendDescriptor
00100 |$L38589|
; 314 :
; 315 : }
00100 e28dd004 add sp, sp, #4
00104 e8bd47f0 ldmia sp!, {r4 - r10, lr}
00108 e12fff1e bx lr
0010c |$L38606|
0010c cccccccd DCD 0xcccccccd
00110 |$M38602|
ENDP ; |DMA_ConfigChannel|
END