📄 halkitl.cod
字号:
DCD 0x40008202
00000 AREA |.rdata| { |??_C@_0M@DGOFCCLK@?9InitEther?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0M@DGOFCCLK@?9InitEther?6?$AA@| DCB "-InitEther", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CL@DKAABFIJ@Unable?5to?5initialize?5KITL?5Ether?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CL@DKAABFIJ@Unable?5to?5initialize?5KITL?5Ether?5@| DCB "Unable t"
DCB "o initialize KITL Ether transport", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BL@IEMDAFJI@Device?5?$CFs?0?5IP?5?$CFs?0?5Port?5?$CFd?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BL@IEMDAFJI@Device?5?$CFs?0?5IP?5?$CFs?0?5Port?5?$CFd?6?$AA@| DCB "D"
DCB "evice %s, IP %s, Port %d", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BH@NKNBMIAN@Using?5device?5name?3?5?$CFs?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BH@NKNBMIAN@Using?5device?5name?3?5?$CFs?6?$AA@| DCB "Using devic"
DCB "e name: %s", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0M@NJNIIHFK@?$CLInitEther?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0M@NJNIIHFK@?$CLInitEther?6?$AA@| DCB "+InitEther", 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |InitEther| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |InitEther| PROC
; 153 : {
00000 |$L15651|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd020 sub sp, sp, #0x20
00008 |$M15649|
00008 e1a0a000 mov r10, r0
; 154 : EDBG_ADAPTER adp;
; 155 : DWORD dwDHCPLeaseTime;
; 156 : DWORD dwSubnetMask;
; 157 :
; 158 : KITLOutputDebugString ("+InitEther\n");
0000c e59f01f0 ldr r0, [pc, #0x1F0]
00010 eb000000 bl EdbgOutputDebugString
; 159 :
; 160 : memset (&adp, 0, sizeof(adp));
00014 e3a02018 mov r2, #0x18
00018 e3a01000 mov r1, #0
0001c e28d0008 add r0, sp, #8
00020 eb000000 bl memset
; 161 : memset (pKitl, 0, sizeof (KITLTRANSPORT));
00024 e3a0203c mov r2, #0x3C
00028 e3a01000 mov r1, #0
0002c e1a0000a mov r0, r10
00030 eb000000 bl memset
; 162 :
; 163 : // use existing code for ether initialization
; 164 : if (!OEMEthInit (&adp))
00034 e28d0008 add r0, sp, #8
00038 eb000000 bl OEMEthInit
0003c e3500000 cmp r0, #0
; 165 : return FALSE;
00040 0a00003f beq |$L15648|
; 166 :
; 167 : // we are going to completely ignore the info in bootargs and the adaptor info
; 168 : // returned from OEMEthInit, except MAC address. Just to prove that KITL will connect standalone
; 169 :
; 170 : // get the MAC address
; 171 : MyAddr.wMAC[0] = adp.Addr.wMAC[0];
00044 e59f41b4 ldr r4, [pc, #0x1B4]
00048 e1dd30bc ldrh r3, [sp, #0xC]
; 172 : MyAddr.wMAC[1] = adp.Addr.wMAC[1];
0004c e1dd20be ldrh r2, [sp, #0xE]
; 173 : MyAddr.wMAC[2] = adp.Addr.wMAC[2];
00050 e1dd11b0 ldrh r1, [sp, #0x10]
00054 e1c430b4 strh r3, [r4, #4]
; 174 :
; 175 : if((DRIVER_GLOBALS_POINTER)->eth.EbootMagicNum == EBOOT_MAGIC_NUM )
00058 e3a0320a mov r3, #0xA, 4
0005c e3833b22 orr r3, r3, #0x22, 22
00060 e1c420b6 strh r2, [r4, #6]
00064 e1c410b8 strh r1, [r4, #8]
00068 e5932000 ldr r2, [r3]
0006c e59f3188 ldr r3, [pc, #0x188]
00070 e1520003 cmp r2, r3
00074 1a000009 bne |$L15505|
; 176 : {
; 177 : memcpy
; 178 : (
; 179 : pKitl->szName,
; 180 : (DRIVER_GLOBALS_POINTER)->eth.strEdbgName,
; 181 : EDBG_MAX_DEV_NAMELEN
; 182 : );
00078 e59f2178 ldr r2, [pc, #0x178]
0007c e5923000 ldr r3, [r2]
00080 e58a3004 str r3, [r10, #4]
00084 e5923004 ldr r3, [r2, #4]
00088 e58a3008 str r3, [r10, #8]
0008c e5923008 ldr r3, [r2, #8]
00090 e58a300c str r3, [r10, #0xC]
00094 e592300c ldr r3, [r2, #0xC]
00098 e58a3010 str r3, [r10, #0x10]
; 183 : }
; 184 : else
0009c ea000002 b |$L15507|
000a0 |$L15505|
; 185 : {
; 186 : CreateDeviceName(&MyAddr, pKitl->szName);
000a0 e28a1004 add r1, r10, #4
000a4 e1a00004 mov r0, r4
000a8 eb000000 bl CreateDeviceName
000ac |$L15507|
; 187 : }
; 188 : KITLOutputDebugString ("Using device name: %s\n", pKitl->szName);
000ac e59f0140 ldr r0, [pc, #0x140]
000b0 e28a1004 add r1, r10, #4
000b4 eb000000 bl EdbgOutputDebugString
; 189 :
; 190 : // If we haven't been given an IP address from our loader (or if we're not using static IP), get an IP address
; 191 : // from a DHCP server.
; 192 : if (adp.Addr.dwIP)
000b8 e59d0008 ldr r0, [sp, #8]
000bc e3500000 cmp r0, #0
; 193 : {
; 194 : // Static IP or we got the IP from our bootloader...
; 195 : MyAddr.dwIP = adp.Addr.dwIP;
; 196 : dwSubnetMask = 0; // Don't care about subnet mask...
; 197 : dwDHCPLeaseTime = adp.DHCPLeaseTime;
000c0 159d3018 ldrne r3, [sp, #0x18]
000c4 13a02000 movne r2, #0
000c8 15840000 strne r0, [r4]
000cc 158d3000 strne r3, [sp]
000d0 158d2004 strne r2, [sp, #4]
000d4 1a000006 bne |$L15511|
; 198 : }
; 199 : else
; 200 : {
; 201 : // Get a DHCP address...
; 202 : if (!EbootGetDHCPAddr (&MyAddr, &dwSubnetMask, &dwDHCPLeaseTime))
000d8 e28d2000 add r2, sp, #0
000dc e28d1004 add r1, sp, #4
000e0 e1a00004 mov r0, r4
000e4 eb000000 bl EbootGetDHCPAddr
000e8 e3500000 cmp r0, #0
; 203 : return FALSE;
000ec 0a000014 beq |$L15648|
000f0 e5940000 ldr r0, [r4]
000f4 |$L15511|
; 204 : }
; 205 :
; 206 : MyAddr.wPort = htons (EDBG_SVC_PORT);
000f4 e3a03cd5 mov r3, #0xD5, 24
000f8 e3833003 orr r3, r3, #3
; 207 : KITLOutputDebugString ("Device %s, IP %s, Port %d\n", pKitl->szName, inet_ntoa (MyAddr.dwIP), htons (MyAddr.wPort));
000fc e1c430ba strh r3, [r4, #0xA]
00100 eb000000 bl inet_ntoa
00104 e1d410ba ldrh r1, [r4, #0xA]
00108 e1a02000 mov r2, r0
0010c e59f00dc ldr r0, [pc, #0xDC]
00110 e1a03401 mov r3, r1, lsl #8
00114 e1a03803 mov r3, r3, lsl #16
00118 e1a03823 mov r3, r3, lsr #16
0011c e1833421 orr r3, r3, r1, lsr #8
00120 e28a1004 add r1, r10, #4
00124 eb000000 bl EdbgOutputDebugString
; 208 :
; 209 : // initialize KITL Ethernet transport layer
; 210 : if (!KitlEtherInit (&MyAddr, dwDHCPLeaseTime)) {
00128 e59d1000 ldr r1, [sp]
0012c e1a00004 mov r0, r4
00130 eb000000 bl KitlEtherInit
00134 e3500000 cmp r0, #0
00138 1a000003 bne |$L15521|
; 211 : KITLOutputDebugString ("Unable to initialize KITL Ether transport\n");
0013c e59f00a8 ldr r0, [pc, #0xA8]
00140 eb000000 bl EdbgOutputDebugString
00144 |$L15648|
; 212 : return FALSE;
00144 e3a00000 mov r0, #0
00148 ea00001c b |$L15497|
0014c |$L15521|
; 213 : }
; 214 :
; 215 : // fill in the blanks in KITLTRANSPORT structure.
; 216 : pKitl->FrmHdrSize = KitlEtherGetFrameHdrSize ();
0014c eb000000 bl KitlEtherGetFrameHdrSize
; 217 : pKitl->Interrupt = (UCHAR) adp.SysIntrVal;
; 218 : pKitl->dwPhysBuffer = EDBG_VIRTUAL_MEMORY;
; 219 : pKitl->dwPhysBufLen = EDBG_MEMORY_SIZE; // 128K of buffer available
; 220 : pKitl->dwBootFlags = 0;
; 221 : pKitl->WindowSize = EDBG_WINDOW_SIZE;
; 222 : pKitl->pfnDecode = KitlEtherDecodeUDP;
; 223 : pKitl->pfnEncode = KitlEtherEncodeUDP;
; 224 : pKitl->pfnSend = EthSendFrame;
; 225 : pKitl->pfnRecv = OEMEthGetFrame;
; 226 : pKitl->pfnEnableInt = KitlEthEnableInts;
; 227 : pKitl->pfnSetHostCfg = SetHostCfg;
; 228 : pKitl->pfnGetDevCfg = GetDevCfg;
; 229 :
; 230 : KITLOutputDebugString ("-InitEther\n");
00150 e3a0e008 mov lr, #8
00154 e3a03102 mov r3, #2, 2
00158 e59d1014 ldr r1, [sp, #0x14]
0015c e59f4084 ldr r4, [pc, #0x84]
00160 e59f507c ldr r5, [pc, #0x7C]
00164 e59f6074 ldr r6, [pc, #0x74]
00168 e59f706c ldr r7, [pc, #0x6C]
0016c e59f8064 ldr r8, [pc, #0x64]
00170 e59f905c ldr r9, [pc, #0x5C]
00174 e5cae015 strb lr, [r10, #0x15]
00178 e59fe050 ldr lr, [pc, #0x50]
0017c e3833701 orr r3, r3, #1, 14
00180 e1a02000 mov r2, r0
00184 e59f0040 ldr r0, [pc, #0x40]
00188 e58a3018 str r3, [r10, #0x18]
0018c e3a0b702 mov r11, #2, 14
00190 e3a03000 mov r3, #0
00194 e28ac020 add r12, r10, #0x20
00198 e88c4010 stmia r12, {r4, lr}
0019c e5ca2016 strb r2, [r10, #0x16]
001a0 e5ca1014 strb r1, [r10, #0x14]
001a4 e58ab01c str r11, [r10, #0x1C]
001a8 e58a3000 str r3, [r10]
001ac e28ac028 add r12, r10, #0x28
001b0 e88c02e0 stmia r12, {r5 - r7, r9}
001b4 e58a8038 str r8, [r10, #0x38]
001b8 eb000000 bl EdbgOutputDebugString
; 231 :
; 232 : return TRUE;
001bc e3a00001 mov r0, #1
001c0 |$L15497|
; 233 : }
001c0 e28dd020 add sp, sp, #0x20
001c4 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
001c8 e12fff1e bx lr
001cc |$L15654|
001cc 00000000 DCD |??_C@_0M@DGOFCCLK@?9InitEther?6?$AA@|
001d0 00000000 DCD |KitlEtherDecodeUDP|
001d4 00000000 DCD |GetDevCfg|
001d8 00000000 DCD |SetHostCfg|
001dc 00000000 DCD |KitlEthEnableInts|
001e0 00000000 DCD |OEMEthGetFrame|
001e4 00000000 DCD |EthSendFrame|
001e8 00000000 DCD |KitlEtherEncodeUDP|
001ec 00000000 DCD |??_C@_0CL@DKAABFIJ@Unable?5to?5initialize?5KITL?5Ether?5@|
001f0 00000000 DCD |??_C@_0BL@IEMDAFJI@Device?5?$CFs?0?5IP?5?$CFs?0?5Port?5?$CFd?6?$AA@|
001f4 00000000 DCD |??_C@_0BH@NKNBMIAN@Using?5device?5name?3?5?$CFs?6?$AA@|
001f8 a0008864 DCD 0xa0008864
001fc 45424f54 DCD 0x45424f54
00200 00000000 DCD |MyAddr|
00204 00000000 DCD |??_C@_0M@NJNIIHFK@?$CLInitEther?6?$AA@|
00208 |$M15650|
ENDP ; |InitEther|
EXPORT |OEMKitlInit|
EXPORT |??_C@_0O@JAADGFMP@?$CLOEMKitlInit?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0O@GIMBCOHJ@?9OEMKitlInit?6?$AA@| [ DATA ] ; `string'
IMPORT |OEMInitDebugSerial|
00000 AREA |.text| { |OEMKitlInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMKitlInit|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMKitlInit| } ; comdat associative
|$T15666| DCD |$L15665|
DCD 0x40003a01
00000 AREA |.rdata| { |??_C@_0O@GIMBCOHJ@?9OEMKitlInit?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0O@GIMBCOHJ@?9OEMKitlInit?6?$AA@| DCB "-OEMKitlInit", 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0O@JAADGFMP@?$CLOEMKitlInit?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0O@JAADGFMP@?$CLOEMKitlInit?6?$AA@| DCB "+OEMKitlInit", 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |OEMKitlInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OEMKitlInit| PROC
; 246 : {
00000 |$L15665|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M15663|
00004 e1a05000 mov r5, r0
; 247 : BOOL bReturn = FALSE;
; 248 :
; 249 :
; 250 : OEMInitDebugSerial();
00008 eb000000 bl OEMInitDebugSerial
; 251 : KITLOutputDebugString ("+OEMKitlInit\n");
0000c e59f00d0 ldr r0, [pc, #0xD0]
00010 eb000000 bl EdbgOutputDebugString
; 252 :
; 253 : //
; 254 : // Try to find a transport available
; 255 : // In our case we need to find out which transport was used to download.
; 256 : //
; 257 : if(pDriverGlobals->eth.EbootMagicNum == PARALLEL_MAGIC_NUM)
00014 e3a0320a mov r3, #0xA, 4
00018 e3833b22 orr r3, r3, #0x22, 22
0001c e5931000 ldr r1, [r3]
00020 e59f20b8 ldr r2, [pc, #0xB8]
00024 e1510002 cmp r1, r2
00028 1a000002 bne |$L15531|
; 258 : {
; 259 : bReturn = InitParallelSerial(pKitl);
0002c e1a00005 mov r0, r5
00030 eb000000 bl InitParallelSerial
; 260 : }
; 261 : else if (pDriverGlobals->eth.EbootMagicNum == EBOOT_MAGIC_NUM)
00034 ea00001b b |$L15661|
00038 |$L15531|
00038 e59f309c ldr r3, [pc, #0x9C]
0003c e1510003 cmp r1, r3
; 262 : {
; 263 : bActiveKitl = TRUE;
00040 059f307c ldreq r3, [pc, #0x7C]
00044 03a02001 moveq r2, #1
; 264 : bReturn = InitEther (pKitl);
00048 05832000 streq r2, [r3]
0004c 0a000013 beq |$L15662|
; 265 : }
; 266 : else
; 267 : {
; 268 : pDriverGlobals->eth.EdbgHardwareType = EDBG_ADAPTER_CS8950;
00050 e59f3080 ldr r3, [pc, #0x80]
; 269 : pDriverGlobals->eth.EdbgAddr.wMAC[0] = 0x2400;
00054 e59f2078 ldr r2, [pc, #0x78]
00058 e3a01012 mov r1, #0x12
; 270 : pDriverGlobals->eth.EdbgAddr.wMAC[1] = 0x1020;
0005c e59f406c ldr r4, [pc, #0x6C]
00060 e5831000 str r1, [r3]
; 271 : pDriverGlobals->eth.EdbgAddr.wMAC[2] = 0x3412;
00064 e59f1060 ldr r1, [pc, #0x60]
00068 e3a0ea01 mov lr, #1, 20
0006c e3a03b0d mov r3, #0xD, 22
00070 e3a00b09 mov r0, #9, 22
00074 e38ee020 orr lr, lr, #0x20
00078 e3833012 orr r3, r3, #0x12
0007c e1c200b0 strh r0, [r2]
; 272 : pDriverGlobals->eth.EdbgAddr.dwIP = 0;
00080 e59f2040 ldr r2, [pc, #0x40]
; 273 :
; 274 : bActiveKitl = TRUE;
00084 e1c4e0b0 strh lr, [r4]
00088 e1c130b0 strh r3, [r1]
0008c e59f0030 ldr r0, [pc, #0x30]
00090 e3a03000 mov r3, #0
00094 e5823000 str r3, [r2]
00098 e3a03001 mov r3, #1
0009c e5803000 str r3, [r0]
000a0 |$L15662|
; 275 : bReturn = InitEther (pKitl);
000a0 e1a00005 mov r0, r5
000a4 eb000000 bl InitEther
000a8 |$L15661|
000a8 e1a04000 mov r4, r0
; 276 : }
; 277 :
; 278 :
; 279 : KITLOutputDebugString ("-OEMKitlInit\n");
000ac e59f000c ldr r0, [pc, #0xC]
000b0 eb000000 bl EdbgOutputDebugString
; 280 : return bReturn;
000b4 e1a00004 mov r0, r4
; 281 : }
000b8 e8bd4030 ldmia sp!, {r4, r5, lr}
000bc e12fff1e bx lr
000c0 |$L15668|
000c0 00000000 DCD |??_C@_0O@GIMBCOHJ@?9OEMKitlInit?6?$AA@|
000c4 00000000 DCD |bActiveKitl|
000c8 a0008810 DCD 0xa0008810
000cc a0008818 DCD 0xa0008818
000d0 a0008816 DCD 0xa0008816
000d4 a0008814 DCD 0xa0008814
000d8 a0008860 DCD 0xa0008860
000dc 45424f54 DCD 0x45424f54
000e0 50415241 DCD 0x50415241
000e4 00000000 DCD |??_C@_0O@JAADGFMP@?$CLOEMKitlInit?6?$AA@|
000e8 |$M15664|
ENDP ; |OEMKitlInit|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -