📄 sianodma.cod
字号:
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -