www.pudn.com > DMBDRV.rar > SmsNdis.cod
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL E:\WM604\PLATFORM\SEUICBSP\SRC\DRIVERS\DMBDRV\SmsNdis\.\SmsNdis.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |dpCurSettings| [ DATA ]
00000 AREA |.data|, DATA
|RemoteMAC| DCB 0x0
DCB 0x1
DCB 0x1
DCB 0x3
DCB 0x4
DCB 0x40
% 2
|LocalMAC| DCB 0x0
DCB 0x4
DCB 0x76
DCB 0xd
DCB 0xad
DCB 0x7a
% 2
|dpCurSettings| DCB "S", 0x0, "i", 0x0, "a", 0x0, "n", 0x0, "o", 0x0, " ", 0x0
DCB "N", 0x0, "D", 0x0, "I", 0x0, "S", 0x0, 0x0, 0x0
% 42
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 "I", 0x0, "n", 0x0, "f", 0x0, "o", 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 "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 0x3
EXPORT |DllMain|
; File e:\wm604\platform\seuicbsp\src\drivers\dmbdrv\smsndis\smsndis.c
00000 AREA |.text| { |DllMain| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DllMain|, PDATA, SELECTION=5, ASSOC=|.text| { |DllMain| } ; comdat associative
|$T42309| DCD |$L42308|
DCD 0x40000200
; Function compile flags: /Ogsy
00000 AREA |.text| { |DllMain| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DllMain| PROC
; 120 : {
00000 |$L42308|
00000 |$M42306|
; 121 : BOOL bRc = TRUE;
; 122 :
; 123 : UNREFERENCED_PARAMETER(hDllHandle);
; 124 : UNREFERENCED_PARAMETER(lpreserved);
; 125 :
; 126 : switch (dwReason)
; 127 : {
; 128 : case DLL_PROCESS_ATTACH:
; 129 : REGISTERZONES(hDllHandle);
; 130 : #ifdef LOG_TO_FILE
; 131 : hLogFile = CreateFile(LOG_FILE,
; 132 : GENERIC_WRITE,
; 133 : FILE_SHARE_READ | FILE_SHARE_WRITE,
; 134 : NULL,
; 135 : CREATE_ALWAYS,
; 136 : 0,
; 137 : NULL);
; 138 :
; 139 : if (hLogFile == INVALID_HANDLE_VALUE)
; 140 : return FALSE;
; 141 : InitializeCriticalSection(&g_CriticalSection);
; 142 : #endif
; 143 : DBGMSG(ZONE_INIT, (TEXT("SmsNdis: DLL_PROCESS_ATTACH\r\n")));
; 144 : break;
; 145 :
; 146 : case DLL_PROCESS_DETACH:
; 147 : DBGMSG(ZONE_INIT, (TEXT("SmsNdis: DLL_PROCESS_DETACH\r\n")));
; 148 : #ifdef LOG_TO_FILE
; 149 : if (hLogFile != INVALID_HANDLE_VALUE)
; 150 : {
; 151 : CloseHandle(hLogFile);
; 152 : }
; 153 : DeleteCriticalSection(&g_CriticalSection);
; 154 : #endif
; 155 : break;
; 156 :
; 157 : default:
; 158 : break;
; 159 : }
; 160 :
; 161 : return bRc;
00000 e3a00001 mov r0, #1
; 162 : }
00004 e12fff1e bx lr
00008 |$M42307|
ENDP ; |DllMain|
EXPORT |SmsNdis_HaltHandler|
IMPORT |NdisFreeMemory|
IMPORT |NdisTerminateWrapper|
IMPORT |CloseHandle|
00000 AREA |.text| { |SmsNdis_HaltHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SmsNdis_HaltHandler|, PDATA, SELECTION=5, ASSOC=|.text| { |SmsNdis_HaltHandler| } ; comdat associative
|$T42317| DCD |$L42316|
DCD 0x40001401
; Function compile flags: /Ogsy
00000 AREA |.text| { |SmsNdis_HaltHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SmsNdis_HaltHandler| PROC
; 251 : {
00000 |$L42316|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M42314|
00004 e1b04000 movs r4, r0
; 252 : PSMS_SMS_NDIS_ST pSmsNdis = (PSMS_SMS_NDIS_ST)MiniportAdapterContext;
; 253 :
; 254 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +SmsNdis_HaltHandler\r\n")));
; 255 :
; 256 : if (pSmsNdis)
00008 0a00000e beq |$L41704|
; 257 : {
; 258 : if (pSmsNdis->hGenDrv)
0000c e5943008 ldr r3, [r4, #8]
00010 e3530000 cmp r3, #0
00014 0a000003 beq |$L41705|
; 259 : {
; 260 : CloseHandle(pSmsNdis->hGenDrv);
00018 e1a00003 mov r0, r3
0001c eb000000 bl CloseHandle
; 261 : pSmsNdis->hGenDrv = NULL;
00020 e3a03000 mov r3, #0
00024 e5843008 str r3, [r4, #8]
00028 |$L41705|
; 262 : }
; 263 :
; 264 : NdisTerminateWrapper(pSmsNdis->hWrapperConfigContext,NULL);
00028 e5940004 ldr r0, [r4, #4]
0002c e3a01000 mov r1, #0
00030 eb000000 bl NdisTerminateWrapper
; 265 :
; 266 : // freeing the SmsNdis device
; 267 : NdisFreeMemory(pSmsNdis,sizeof(SMS_SMS_NDIS_ST),0);
00034 e3a01e65 mov r1, #0x65, 28
00038 e3811004 orr r1, r1, #4
0003c e3a02000 mov r2, #0
00040 e1a00004 mov r0, r4
00044 eb000000 bl NdisFreeMemory
00048 |$L41704|
; 268 : }
; 269 :
; 270 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -SmsNdis_HaltHandler\r\n")));
; 271 : }
00048 e8bd4010 ldmia sp!, {r4, lr}
0004c e12fff1e bx lr
00050 |$M42315|
ENDP ; |SmsNdis_HaltHandler|
EXPORT |SmsNdis_QueryInformationHandler|
EXPORT |??_C@_0BF@HDBOHGE@Siano?5NDIS?5Miniport?$AA?$AA@| [ DATA ] ; `string'
IMPORT |__security_cookie|
IMPORT |__security_check_cookie|
IMPORT |strlen|
IMPORT |memcpy|
00000 AREA |.text| { |SmsNdis_QueryInformationHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SmsNdis_QueryInformationHandler|, PDATA, SELECTION=5, ASSOC=|.text| { |SmsNdis_QueryInformationHandler| } ; comdat associative
|$T42353| DCD |$L42352|
DCD 0x4000e802
00000 AREA |.rdata| { |??_C@_0BF@HDBOHGE@Siano?5NDIS?5Miniport?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BF@HDBOHGE@Siano?5NDIS?5Miniport?$AA?$AA@| DCB "Siano NDIS Minipo"
DCB "rt", 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |SmsNdis_QueryInformationHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SmsNdis_QueryInformationHandler| PROC
; 293 : {
00000 |$L42352|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd010 sub sp, sp, #0x10
00008 |$M42350|
00008 e1a08003 mov r8, r3
0000c e1a0a002 mov r10, r2
00010 e59fe384 ldr lr, [pc, #0x384]
00014 e59ee000 ldr lr, [lr]
00018 e58de00c str lr, [sp, #0xC]
; 294 : NDIS_STATUS ndisStatus;
; 295 : PSMS_SMS_NDIS_ST pSmsNdis;
; 296 : PVOID pReturnBuff;
; 297 : ULONG returnBuffLen;
; 298 : ULONG tmpULong;
; 299 : USHORT tmpUshort;
; 300 : NDIS_HARDWARE_STATUS hwStatus;
; 301 : NDIS_MEDIUM ndisMedium;
; 302 : const PCHAR strVendor = "Siano NDIS Miniport\0";
; 303 : const UCHAR EmuEthernetAddr[] = {0x00,0x04,0x76,0x0D,0xAD,0x7A};
; 304 :
; 305 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +SmsNdis_QueryInformationHandler\r\n"),Oid));
; 306 :
; 307 : pSmsNdis = (PSMS_SMS_NDIS_ST)MiniportAdapterContext;
; 308 : *pBytesWritten = 0;
0001c e59d9034 ldr r9, [sp, #0x34]
; 309 : *pBytesNeeded = 0;
00020 e59d7038 ldr r7, [sp, #0x38]
00024 e3a0e000 mov lr, #0
00028 e589e000 str lr, [r9]
0002c e587e000 str lr, [r7]
; 310 : ndisStatus = NDIS_STATUS_SUCCESS;
; 311 : pReturnBuff = NULL;
; 312 : returnBuffLen = 0;
; 313 :
; 314 : #define CASE_OID(Oid) \
; 315 : case Oid: \
; 316 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 317 :
; 318 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 319 : case Oid: \
; 320 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 321 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 322 :
; 323 : switch(Oid)
00030 e59fe360 ldr lr, [pc, #0x360]
00034 e3a04076 mov r4, #0x76
00038 e3a03000 mov r3, #0
0003c e3a02004 mov r2, #4
00040 e3a0500d mov r5, #0xD
00044 e3a060ad mov r6, #0xAD
00048 e3a0b07a mov r11, #0x7A
0004c e5cd4006 strb r4, [sp, #6]
00050 e151000e cmp r1, lr
00054 e5cd3004 strb r3, [sp, #4]
00058 e5cd2005 strb r2, [sp, #5]
0005c e5cd5007 strb r5, [sp, #7]
00060 e5cd6008 strb r6, [sp, #8]
00064 e5cdb009 strb r11, [sp, #9]
00068 e3a04000 mov r4, #0
0006c 8a000033 bhi |$L42321|
00070 0a000098 beq |$L41851|
00074 e59f3318 ldr r3, [pc, #0x318]
00078 e0412003 sub r2, r1, r3
0007c e3520015 cmp r2, #0x15
00080 8a000047 bhi |$L41940|
00084 e1a03082 mov r3, r2, lsl #1
00088 e083300f add r3, r3, pc
0008c e1d330b4 ldrh r3, [r3, #4]
00090 e08ff003 add pc, pc, r3
00094 |$L42347|
00094 |$L42346|
00094 0240 DCW 0x240
00096 0028 DCW 0x28
00098 0028 DCW 0x28
0009a 0028 DCW 0x28
0009c 003c DCW 0x3c
0009e 003c DCW 0x3c
000a0 0054 DCW 0x54
000a2 0028 DCW 0x28
000a4 003c DCW 0x3c
000a6 0028 DCW 0x28
000a8 003c DCW 0x3c
000aa 0240 DCW 0x240
000ac 0060 DCW 0x60
000ae 0088 DCW 0x88
000b0 0090 DCW 0x90
000b2 0074 DCW 0x74
000b4 003c DCW 0x3c
000b6 010c DCW 0x10c
000b8 0098 DCW 0x98
000ba 0028 DCW 0x28
000bc 00a0 DCW 0xa0
000be 0074 DCW 0x74
000c0 |$L41744|
; 324 : {
; 325 : CASE_OID(OID_GEN_HARDWARE_STATUS)
; 326 : hwStatus = NdisHardwareStatusReady;
000c0 e3a03000 mov r3, #0
000c4 |$L42343|
000c4 e58d3000 str r3, [sp]
; 327 : pReturnBuff = (PVOID)&hwStatus;
000c8 e28d6000 add r6, sp, #0
; 328 : returnBuffLen = sizeof(hwStatus);
000cc e3a05004 mov r5, #4
; 329 : break;
000d0 ea00008c b |$L41741|
000d4 |$L41753|
; 330 : CASE_OID(OID_GEN_MEDIA_SUPPORTED)
; 331 : ndisMedium = NdisMedium802_3;
; 332 : pReturnBuff = (PVOID)&ndisMedium;
; 333 : returnBuffLen = sizeof(ndisMedium);
; 334 : break;
; 335 : CASE_OID(OID_GEN_MEDIA_IN_USE)
; 336 : ndisMedium = NdisMedium802_3;
; 337 : pReturnBuff = (PVOID)&ndisMedium;
; 338 : returnBuffLen = sizeof(ndisMedium);
; 339 : break;
; 340 : CASE_OID(OID_GEN_MAXIMUM_LOOKAHEAD)
; 341 : tmpULong = MAX_IP_PACKET_LEN;
000d4 e3a03e5d mov r3, #0x5D, 28
000d8 e383300c orr r3, r3, #0xC
000dc |$L42344|
; 342 : pReturnBuff = (PVOID)&tmpULong;
000dc e28d6000 add r6, sp, #0
; 343 : returnBuffLen = sizeof(tmpULong);
000e0 e3a05004 mov r5, #4
000e4 e58d3000 str r3, [sp]
; 344 : break;
000e8 ea000086 b |$L41741|
000ec |$L41759|
; 345 : CASE_OID(OID_GEN_MAXIMUM_FRAME_SIZE)
; 346 : tmpULong = MAX_IP_PACKET_LEN;
; 347 : pReturnBuff = (PVOID)&tmpULong;
; 348 : returnBuffLen = sizeof(tmpULong);
; 349 : break;
; 350 : CASE_OID(OID_GEN_LINK_SPEED)
; 351 : tmpULong = 100000;
000ec e3a03b61 mov r3, #0x61, 22
000f0 e3833e2a orr r3, r3, #0x2A, 28
; 352 : pReturnBuff = (PVOID)&tmpULong;
; 353 : returnBuffLen = sizeof(tmpULong);
; 354 : break;
000f4 eafffff8 b |$L42344|
000f8 |$L41774|
; 355 : CASE_OID(OID_GEN_TRANSMIT_BUFFER_SPACE)
; 356 : tmpULong = 0;
; 357 : pReturnBuff = (PVOID)&tmpULong;
; 358 : returnBuffLen = sizeof(tmpULong);
; 359 : break;
; 360 : CASE_OID(OID_GEN_RECEIVE_BUFFER_SPACE)
; 361 : tmpULong = MAX_IP_PACKET_LEN;
; 362 : pReturnBuff = (PVOID)&tmpULong;
; 363 : returnBuffLen = sizeof(tmpULong);
; 364 : break;
; 365 : CASE_OID(OID_GEN_TRANSMIT_BLOCK_SIZE)
; 366 : tmpULong = 0;
; 367 : pReturnBuff = (PVOID)&tmpULong;
; 368 : returnBuffLen = sizeof(tmpULong);
; 369 : break;
; 370 : CASE_OID(OID_GEN_RECEIVE_BLOCK_SIZE)
; 371 : tmpULong = MAX_IP_PACKET_LEN;
; 372 : pReturnBuff = (PVOID)&tmpULong;
; 373 : returnBuffLen = sizeof(tmpULong);
; 374 : break;
; 375 : CASE_OID(OID_GEN_VENDOR_DESCRIPTION)
; 376 : pReturnBuff = (PVOID)strVendor;
000f8 e59f6290 ldr r6, [pc, #0x290]
; 377 : returnBuffLen = strlen(strVendor) + 1;
000fc e1a00006 mov r0, r6
00100 eb000000 bl strlen
00104 e2805001 add r5, r0, #1
; 378 : break;
00108 ea00007e b |$L41741|
0010c |$L41777|
; 379 : CASE_OID(OID_GEN_VENDOR_DRIVER_VERSION)
; 380 : tmpUshort = 0x0001;
0010c e3a03001 mov r3, #1
00110 e1cd30b0 strh r3, [sp]
; 381 : pReturnBuff = (PVOID)&tmpUshort;
00114 e28d6000 add r6, sp, #0
; 382 : returnBuffLen = sizeof(tmpUshort);
00118 e3a05002 mov r5, #2
; 383 : break;
0011c ea000079 b |$L41741|
00120 |$L41783|
; 384 : CASE_OID(OID_GEN_DRIVER_VERSION)
; 385 : tmpUshort = 0x0001;
; 386 : pReturnBuff = (PVOID)&tmpUshort;
; 387 : returnBuffLen = sizeof(tmpUshort);
; 388 : break;
; 389 : CASE_OID(OID_GEN_CURRENT_PACKET_FILTER)
; 390 : tmpULong = pSmsNdis->CurrentPacketFilter;
00120 e5903058 ldr r3, [r0, #0x58]
; 391 : pReturnBuff = (PVOID)&tmpULong;
; 392 : returnBuffLen = sizeof(tmpULong);
; 393 : break;
00124 eaffffec b |$L42344|
00128 |$L41786|
; 394 : CASE_OID(OID_GEN_CURRENT_LOOKAHEAD)
; 395 : tmpULong = pSmsNdis->CurrentLookahead;
00128 e590305c ldr r3, [r0, #0x5C]
; 396 : pReturnBuff = (PVOID)&tmpULong;
; 397 : returnBuffLen = sizeof(tmpULong);
; 398 : break;
0012c eaffffea b |$L42344|
00130 |$L41792|
; 399 : CASE_OID(OID_GEN_MAXIMUM_TOTAL_SIZE)
; 400 : tmpULong = MAX_IP_PACKET_LEN;
; 401 : pReturnBuff = (PVOID)&tmpULong;
; 402 : returnBuffLen = sizeof(tmpULong);
; 403 : break;
; 404 : CASE_OID(OID_GEN_MAC_OPTIONS)
; 405 : tmpULong = NDIS_MAC_OPTION_TRANSFERS_NOT_PEND |
; 406 : NDIS_MAC_OPTION_RECEIVE_SERIALIZED |
; 407 : NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
; 408 : NDIS_MAC_OPTION_NO_LOOPBACK;
00130 e3a0300f mov r3, #0xF
; 409 : pReturnBuff = (PVOID)&tmpULong;
; 410 : returnBuffLen = sizeof(tmpULong);
; 411 : break;
00134 eaffffe2 b |$L42343|
00138 |$L41795|
; 412 : CASE_OID(OID_GEN_MAXIMUM_SEND_PACKETS)
; 413 : tmpULong = 1;
00138 e3a03001 mov r3, #1
; 414 : pReturnBuff = (PVOID)&tmpULong;
; 415 : returnBuffLen = sizeof(tmpULong);
; 416 : break;
0013c eaffffe0 b |$L42343|
00140 |$L42321|
; 310 : ndisStatus = NDIS_STATUS_SUCCESS;
; 311 : pReturnBuff = NULL;
; 312 : returnBuffLen = 0;
; 313 :
; 314 : #define CASE_OID(Oid) \
; 315 : case Oid: \
; 316 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 317 :
; 318 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 319 : case Oid: \
; 320 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 321 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 322 :
; 323 : switch(Oid)
00140 e59f3244 ldr r3, [pc, #0x244]
00144 e1510003 cmp r1, r3
00148 8a00003c bhi |$L42322|
0014c 0a000061 beq |$L41851|
00150 e59f3230 ldr r3, [pc, #0x230]
00154 e1510003 cmp r1, r3
00158 8a000022 bhi |$L42323|
0015c 0a00005d beq |$L41851|
00160 e3a03802 mov r3, #2, 16
00164 e3833f41 orr r3, r3, #0x41, 30
00168 e1510003 cmp r1, r3
0016c 8a000015 bhi |$L42324|
00170 0affffd2 beq |$L41744|
00174 e59f3208 ldr r3, [pc, #0x208]
00178 e1510003 cmp r1, r3
0017c 0a000055 beq |$L41851|
00180 e59f31f8 ldr r3, [pc, #0x1F8]
00184 e1510003 cmp r1, r3
00188 0affffcc beq |$L41744|
0018c e59f31e8 ldr r3, [pc, #0x1E8]
00190 e1510003 cmp r1, r3
00194 0a000009 beq |$L41801|
00198 e59f31d8 ldr r3, [pc, #0x1D8]
0019c e1510003 cmp r1, r3
001a0 0affffc6 beq |$L41744|
001a4 |$L41940|
; 546 : {
; 547 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: Wrong handling of OID\r\n")));
; 548 : ndisStatus = NDIS_STATUS_INVALID_OID;
001a4 e59f41c8 ldr r4, [pc, #0x1C8]
001a8 |$L41941|
; 549 : }
; 550 : }
; 551 : }
; 552 :
; 553 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -SmsNdis_QueryInformationHandler. status 0x%X\r\n"),ndisStatus));
; 554 : return ndisStatus;
001a8 e59d000c ldr r0, [sp, #0xC]
001ac eb000000 bl __security_check_cookie
001b0 e1a00004 mov r0, r4
; 555 : }
001b4 e28dd010 add sp, sp, #0x10
001b8 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
001bc e12fff1e bx lr
001c0 |$L41801|
; 417 : CASE_OID(OID_GEN_XMIT_OK)
; 418 : tmpULong = 0;
; 419 : pReturnBuff = (PVOID)&tmpULong;
; 420 : returnBuffLen = sizeof(tmpULong);
; 421 : break;
; 422 : CASE_OID(OID_GEN_RCV_OK)
; 423 : tmpULong = pSmsNdis->RxPacketCount;
001c0 e5903060 ldr r3, [r0, #0x60]
; 424 : pReturnBuff = (PVOID)&tmpULong;
; 425 : returnBuffLen = sizeof(tmpULong);
; 426 : break;
001c4 eaffffc4 b |$L42344|
001c8 |$L42324|
; 310 : ndisStatus = NDIS_STATUS_SUCCESS;
; 311 : pReturnBuff = NULL;
; 312 : returnBuffLen = 0;
; 313 :
; 314 : #define CASE_OID(Oid) \
; 315 : case Oid: \
; 316 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 317 :
; 318 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 319 : case Oid: \
; 320 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 321 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 322 :
; 323 : switch(Oid)
001c8 e59f31a0 ldr r3, [pc, #0x1A0]
001cc e1510003 cmp r1, r3
001d0 0affffba beq |$L41744|
001d4 e59f3190 ldr r3, [pc, #0x190]
001d8 e1510003 cmp r1, r3
001dc 0a00003d beq |$L41851|
001e0 e59f3180 ldr r3, [pc, #0x180]
; 482 : CASE_OID_NOT_SUPPORTED(OID_GEN_DIRECTED_BYTES_XMIT)
; 483 : break;
; 484 : CASE_OID_NOT_SUPPORTED(OID_GEN_DIRECTED_FRAMES_XMIT)
; 485 : break;
001e4 ea000039 b |$L42345|
001e8 |$L42323|
; 310 : ndisStatus = NDIS_STATUS_SUCCESS;
; 311 : pReturnBuff = NULL;
; 312 : returnBuffLen = 0;
; 313 :
; 314 : #define CASE_OID(Oid) \
; 315 : case Oid: \
; 316 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 317 :
; 318 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 319 : case Oid: \
; 320 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 321 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 322 :
; 323 : switch(Oid)
001e8 e3a03802 mov r3, #2, 16
001ec e3833f81 orr r3, r3, #0x81, 30
001f0 e1510003 cmp r1, r3
001f4 0a000037 beq |$L41851|
001f8 e59f3164 ldr r3, [pc, #0x164]
001fc e1510003 cmp r1, r3
00200 0a000034 beq |$L41851|
00204 e59f3154 ldr r3, [pc, #0x154]
00208 e1510003 cmp r1, r3
0020c 0a000031 beq |$L41851|
00210 e59f3144 ldr r3, [pc, #0x144]
00214 e1510003 cmp r1, r3
00218 0a00002e beq |$L41851|
0021c e3a03802 mov r3, #2, 16
00220 e3833f82 orr r3, r3, #0x82, 30
00224 e1510003 cmp r1, r3
00228 0a00002a beq |$L41851|
0022c e59f3124 ldr r3, [pc, #0x124]
00230 e1510003 cmp r1, r3
00234 0a000027 beq |$L41851|
00238 e59f3114 ldr r3, [pc, #0x114]
; 486 : CASE_OID_NOT_SUPPORTED(OID_GEN_MULTICAST_BYTES_XMIT)
; 487 : break;
; 488 : CASE_OID_NOT_SUPPORTED(OID_GEN_MULTICAST_FRAMES_XMIT)
; 489 : break;
; 490 : CASE_OID_NOT_SUPPORTED(OID_GEN_BROADCAST_BYTES_XMIT)
; 491 : break;
; 492 : CASE_OID_NOT_SUPPORTED(OID_GEN_BROADCAST_FRAMES_XMIT)
; 493 : break;
; 494 : CASE_OID_NOT_SUPPORTED(OID_GEN_DIRECTED_BYTES_RCV)
; 495 : break;
; 496 : CASE_OID_NOT_SUPPORTED(OID_GEN_DIRECTED_FRAMES_RCV)
; 497 : break;
; 498 : CASE_OID_NOT_SUPPORTED(OID_GEN_MULTICAST_BYTES_RCV)
; 499 : break;
; 500 : CASE_OID_NOT_SUPPORTED(OID_GEN_MULTICAST_FRAMES_RCV)
; 501 : break;
0023c ea000023 b |$L42345|
00240 |$L42322|
; 310 : ndisStatus = NDIS_STATUS_SUCCESS;
; 311 : pReturnBuff = NULL;
; 312 : returnBuffLen = 0;
; 313 :
; 314 : #define CASE_OID(Oid) \
; 315 : case Oid: \
; 316 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 317 :
; 318 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 319 : case Oid: \
; 320 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Query 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 321 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 322 :
; 323 : switch(Oid)
00240 e59f3108 ldr r3, [pc, #0x108]
00244 e1510003 cmp r1, r3
00248 8a000013 bhi |$L42325|
0024c 0a00002b beq |$L41819|
00250 e3a03802 mov r3, #2, 16
00254 e3833f83 orr r3, r3, #0x83, 30
00258 e0412003 sub r2, r1, r3
0025c e3520009 cmp r2, #9
00260 8affffcf bhi |$L41940|
00264 e1a03102 mov r3, r2, lsl #2
00268 e083300f add r3, r3, pc
0026c e5933004 ldr r3, [r3, #4]
00270 e08ff003 add pc, pc, r3
00274 |$L42349|
00274 |$L42348|
00274 00000060 DCD 0x60
00278 00000060 DCD 0x60
0027c 00000060 DCD 0x60
00280 00000060 DCD 0x60
00284 00000060 DCD 0x60
00288 00000060 DCD 0x60
0028c 00000060 DCD 0x60
00290 fffffe48 DCD 0xfffffe48
00294 ffffff2c DCD 0xffffff2c
00298 00000060 DCD 0x60
0029c |$L42325|
0029c e59f30a8 ldr r3, [pc, #0xA8]
002a0 e1510003 cmp r1, r3
002a4 0a000015 beq |$L41819|
002a8 e59f3098 ldr r3, [pc, #0x98]
002ac e1510003 cmp r1, r3
002b0 0a00000d beq |$L41825|
002b4 e59f3088 ldr r3, [pc, #0x88]
002b8 e1510003 cmp r1, r3
002bc 0a000008 beq |$L41822|
002c0 e59f3078 ldr r3, [pc, #0x78]
002c4 e1510003 cmp r1, r3
002c8 0a000002 beq |$L41851|
002cc e59f3068 ldr r3, [pc, #0x68]
002d0 |$L42345|
002d0 e1510003 cmp r1, r3
; 502 : CASE_OID_NOT_SUPPORTED(OID_GEN_BROADCAST_BYTES_RCV)
; 503 : break;
; 504 : CASE_OID_NOT_SUPPORTED(OID_GEN_BROADCAST_FRAMES_RCV)
; 505 : break;
; 506 : CASE_OID_NOT_SUPPORTED(OID_GEN_RCV_CRC_ERROR)
; 507 : break;
; 508 : CASE_OID_NOT_SUPPORTED(OID_GEN_TRANSMIT_QUEUE_LENGTH)
; 509 : break;
; 510 : CASE_OID_NOT_SUPPORTED(OID_GEN_GET_TIME_CAPS)
; 511 : break;
; 512 : CASE_OID_NOT_SUPPORTED(OID_GEN_GET_NETCARD_TIME)
; 513 : break;
; 514 : CASE_OID_NOT_SUPPORTED(OID_GEN_NETCARD_LOAD)
; 515 : break;
; 516 : CASE_OID_NOT_SUPPORTED(OID_GEN_DEVICE_PROFILE)
; 517 : break;
; 518 : CASE_OID_NOT_SUPPORTED(OID_GEN_MEDIA_SENSE_COUNTS)
; 519 : break;
; 520 :
; 521 : default:
; 522 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Query Oid 0x%08X invalid or not supported\r\n"),Oid));
; 523 : ndisStatus = NDIS_STATUS_INVALID_OID;
; 524 : break;
002d4 1affffb2 bne |$L41940|
002d8 |$L41851|
; 464 : CASE_OID(OID_GEN_MEDIA_CONNECT_STATUS)
; 465 : tmpULong = NdisMediaStateConnected;
; 466 : pReturnBuff = (PVOID)&tmpULong;
; 467 : returnBuffLen = sizeof(tmpULong);
; 468 : break;
; 469 :
; 470 : CASE_OID_NOT_SUPPORTED(OID_GEN_SUPPORTED_LIST)
; 471 : break;
; 472 : CASE_OID_NOT_SUPPORTED(OID_GEN_VENDOR_ID)
; 473 : break;
; 474 : CASE_OID_NOT_SUPPORTED(OID_GEN_PHYSICAL_MEDIUM)
; 475 : break;
; 476 : CASE_OID_NOT_SUPPORTED(OID_GEN_MEDIA_CAPABILITIES)
; 477 : break;
; 478 : CASE_OID_NOT_SUPPORTED(OID_PNP_CAPABILITIES)
; 479 : break;
; 480 : CASE_OID_NOT_SUPPORTED(OID_TCP_TASK_OFFLOAD)
002d8 e3a04103 mov r4, #3, 2
002dc e38440bb orr r4, r4, #0xBB
; 481 : break;
002e0 eaffffb0 b |$L41941|
002e4 |$L41822|
; 454 : break;
; 455 : CASE_OID(OID_802_3_MAXIMUM_LIST_SIZE)
; 456 : tmpULong = MAX_MULTICAST_LIST_SIZE;
002e4 e3a0300c mov r3, #0xC
; 457 : pReturnBuff = (PVOID)&tmpULong;
; 458 : returnBuffLen = sizeof(tmpULong);
; 459 : break;
002e8 eaffff75 b |$L42343|
002ec |$L41825|
; 460 : CASE_OID(OID_802_3_MULTICAST_LIST)
; 461 : pReturnBuff = (PVOID)pSmsNdis->MulticastList;
; 462 : returnBuffLen = pSmsNdis->MulticastListCount * ETHERNET_ADDRESS_LEN;
002ec e5903054 ldr r3, [r0, #0x54]
002f0 e280600c add r6, r0, #0xC
002f4 e0833083 add r3, r3, r3, lsl #1
002f8 e1a05083 mov r5, r3, lsl #1
; 463 : break;
002fc ea000001 b |$L41741|
00300 |$L41819|
; 427 : CASE_OID(OID_GEN_XMIT_ERROR)
; 428 : tmpULong = 0;
; 429 : pReturnBuff = (PVOID)&tmpULong;
; 430 : returnBuffLen = sizeof(tmpULong);
; 431 : break;
; 432 : CASE_OID(OID_GEN_RCV_ERROR)
; 433 : tmpULong = 0;
; 434 : pReturnBuff = (PVOID)&tmpULong;
; 435 : returnBuffLen = sizeof(tmpULong);
; 436 : break;
; 437 : CASE_OID(OID_GEN_RCV_NO_BUFFER)
; 438 : tmpULong = 0;
; 439 : pReturnBuff = (PVOID)&tmpULong;
; 440 : returnBuffLen = sizeof(tmpULong);
; 441 : break;
; 442 : CASE_OID(OID_GEN_INIT_TIME_MS)
; 443 : tmpULong = 0;
; 444 : pReturnBuff = (PVOID)&tmpULong;
; 445 : returnBuffLen = sizeof(tmpULong);
; 446 : break;
; 447 : CASE_OID(OID_802_3_PERMANENT_ADDRESS)
; 448 : pReturnBuff = (PVOID)EmuEthernetAddr;
; 449 : returnBuffLen = sizeof(EmuEthernetAddr);
; 450 : break;
; 451 : CASE_OID(OID_802_3_CURRENT_ADDRESS)
; 452 : pReturnBuff = (PVOID)EmuEthernetAddr;
; 453 : returnBuffLen = sizeof(EmuEthernetAddr);
00300 e3a05006 mov r5, #6
00304 e28d6004 add r6, sp, #4
00308 |$L41741|
; 525 : }
; 526 :
; 527 : #undef CASE_OID
; 528 : #undef CASE_OID_NOT_SUPPORTED
; 529 :
; 530 : if (ndisStatus == NDIS_STATUS_SUCCESS)
; 531 : {
; 532 : if (returnBuffLen > InfoBufferLen)
00308 e1550008 cmp r5, r8
; 533 : {
; 534 : *pBytesNeeded = returnBuffLen;
0030c 85875000 strhi r5, [r7]
00310 8affffa4 bhi |$L41941|
; 535 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: pInfoBuffer len too small. Len %d Need %d\r\n"),InfoBufferLen,returnBuffLen));
; 536 : }
; 537 : else
; 538 : {
; 539 : if (pReturnBuff)
00314 e3560000 cmp r6, #0
00318 0affffa1 beq |$L41940|
; 540 : {
; 541 : NdisMoveMemory(pInfoBuffer, pReturnBuff, returnBuffLen);
0031c e1a02005 mov r2, r5
00320 e1a01006 mov r1, r6
00324 e1a0000a mov r0, r10
00328 eb000000 bl memcpy
; 542 : *pBytesWritten = returnBuffLen;
; 543 : *pBytesNeeded = 0;
0032c e3a03000 mov r3, #0
00330 e5895000 str r5, [r9]
00334 e5873000 str r3, [r7]
; 544 : }
; 545 : else
00338 eaffff9a b |$L41941|
0033c |$L42355|
0033c fd010100 DCD 0xfd010100
00340 fc010201 DCD 0xfc010201
00344 01010104 DCD 0x1010104
00348 01010103 DCD 0x1010103
0034c 01010102 DCD 0x1010102
00350 01010101 DCD 0x1010101
00354 0002020a DCD 0x2020a
00358 00020209 DCD 0x20209
0035c 00020207 DCD 0x20207
00360 00020206 DCD 0x20206
00364 00020205 DCD 0x20205
00368 00020202 DCD 0x20202
0036c 00020201 DCD 0x20201
00370 00020105 DCD 0x20105
00374 c0010017 DCD 0xc0010017
00378 00020103 DCD 0x20103
0037c 00020102 DCD 0x20102
00380 00020101 DCD 0x20101
00384 00010202 DCD 0x10202
00388 00020203 DCD 0x20203
0038c 0002020b DCD 0x2020b
00390 00000000 DCD |??_C@_0BF@HDBOHGE@Siano?5NDIS?5Miniport?$AA?$AA@|
00394 00010101 DCD 0x10101
00398 00010201 DCD 0x10201
0039c 00000000 DCD |__security_cookie|
003a0 |$M42351|
ENDP ; |SmsNdis_QueryInformationHandler|
EXPORT |SmsNdis_SetInformationHandler|
IMPORT |memset|
00000 AREA |.text| { |SmsNdis_SetInformationHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SmsNdis_SetInformationHandler|, PDATA, SELECTION=5, ASSOC=|.text| { |SmsNdis_SetInformationHandler| } ; comdat associative
|$T42375| DCD |$L42374|
DCD 0x40005801
; Function compile flags: /Ogsy
00000 AREA |.text| { |SmsNdis_SetInformationHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SmsNdis_SetInformationHandler| PROC
; 576 : {
00000 |$L42374|
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 |$M42372|
00004 e1a05003 mov r5, r3
00008 e1a0a002 mov r10, r2
0000c e1a07000 mov r7, r0
; 577 : NDIS_STATUS ndisStatus;
; 578 : PSMS_SMS_NDIS_ST pSmsNdis;
; 579 : UINT32 i;
; 580 : ULONG tmpULong;
; 581 :
; 582 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +SmsNdis_SetInformationHandler\r\n")));
; 583 :
; 584 : pSmsNdis = (PSMS_SMS_NDIS_ST)MiniportAdapterContext;
; 585 : ndisStatus = NDIS_STATUS_SUCCESS;
; 586 : *pBytesRead = 0;
00010 e59d8020 ldr r8, [sp, #0x20]
; 587 : *pBytesNeeded = 0;
00014 e59d6024 ldr r6, [sp, #0x24]
; 588 :
; 589 : #define CASE_OID(Oid) \
; 590 : case Oid: \
; 591 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Set 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 592 :
; 593 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 594 : case Oid: \
; 595 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Set 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 596 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 597 :
; 598 : switch(Oid)
00018 e59fe13c ldr lr, [pc, #0x13C]
0001c e3a00000 mov r0, #0
00020 e5880000 str r0, [r8]
00024 e5860000 str r0, [r6]
00028 e3a04000 mov r4, #0
0002c e151000e cmp r1, lr
00030 0a00003a beq |$L41971|
00034 e59fe11c ldr lr, [pc, #0x11C]
00038 e151000e cmp r1, lr
0003c 0a00002e beq |$L41978|
00040 e59fe10c ldr lr, [pc, #0x10C]
00044 e151000e cmp r1, lr
00048 0a00000d beq |$L42004|
0004c e3a03801 mov r3, #1, 16
00050 e3833f46 orr r3, r3, #0x46, 30
00054 e1510003 cmp r1, r3
00058 0a000024 beq |$L41998|
0005c e59f30ec ldr r3, [pc, #0xEC]
00060 e1510003 cmp r1, r3
00064 0a000021 beq |$L41998|
00068 e59f30dc ldr r3, [pc, #0xDC]
0006c e1510003 cmp r1, r3
00070 0a000006 beq |$L41985|
00074 e59f30cc ldr r3, [pc, #0xCC]
00078 e1510003 cmp r1, r3
; 672 : default:
; 673 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Set Oid 0x%08X invalid or not supported\r\n"),Oid));
; 674 : ndisStatus = NDIS_STATUS_INVALID_OID;
0007c 159f40c0 ldrne r4, [pc, #0xC0]
00080 1a00002a bne |$L41968|
00084 |$L42004|
; 667 :
; 668 : CASE_OID_NOT_SUPPORTED(OID_GEN_PROTOCOL_OPTIONS)
; 669 : break;
; 670 : CASE_OID_NOT_SUPPORTED(OID_PNP_ADD_WAKE_UP_PATTERN)
00084 e3a04103 mov r4, #3, 2
00088 e38440bb orr r4, r4, #0xBB
; 671 : break;
0008c ea000027 b |$L41968|
00090 |$L41985|
; 629 : *pBytesNeeded = 0;
; 630 : break;
; 631 : CASE_OID(OID_802_3_MULTICAST_LIST)
; 632 :
; 633 : if (((InfoBufferLen % ETHERNET_ADDRESS_LEN) != 0) ||
; 634 : (InfoBufferLen > (ETHERNET_ADDRESS_LEN * MAX_MULTICAST_LIST_SIZE)))
00090 e59f30a8 ldr r3, [pc, #0xA8]
00094 e0832395 umull r2, r3, r5, r3
00098 e1a09123 mov r9, r3, lsr #2
0009c e0893089 add r3, r9, r9, lsl #1
000a0 e0553083 subs r3, r5, r3, lsl #1
000a4 1a00000d bne |$L41988|
000a8 e3550048 cmp r5, #0x48
000ac 8a00000b bhi |$L41988|
; 639 : }
; 640 :
; 641 : NdisZeroMemory(pSmsNdis->MulticastList,ETHERNET_ADDRESS_LEN * MAX_MULTICAST_LIST_SIZE);
000b0 e287000c add r0, r7, #0xC
000b4 e3a02048 mov r2, #0x48
000b8 e3a01000 mov r1, #0
000bc eb000000 bl memset
; 642 : if (InfoBufferLen > 0)
000c0 e3550000 cmp r5, #0
; 643 : {
; 644 : NdisMoveMemory(pSmsNdis->MulticastList,pInfoBuffer,InfoBufferLen);
000c4 11a02005 movne r2, r5
000c8 11a0100a movne r1, r10
000cc 1287000c addne r0, r7, #0xC
000d0 1b000000 blne memcpy
; 645 : }
; 646 : pSmsNdis->MulticastListCount = InfoBufferLen / ETHERNET_ADDRESS_LEN;
000d4 e5879054 str r9, [r7, #0x54]
; 647 :
; 648 : *pBytesRead = InfoBufferLen;
000d8 e5885000 str r5, [r8]
; 649 :
; 650 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Multicast Address List :\r\n")));
; 651 : for (i = 0;i < pSmsNdis->MulticastListCount;i++)
; 652 : {
; 653 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: %02x:%02x:%02x:%02x:%02x:%02x\r\n"),
; 654 : pSmsNdis->MulticastList[i][0],pSmsNdis->MulticastList[i][1],
; 655 : pSmsNdis->MulticastList[i][2],pSmsNdis->MulticastList[i][3],
; 656 : pSmsNdis->MulticastList[i][4],pSmsNdis->MulticastList[i][5]));
; 657 : }
; 658 : break;
000dc ea000013 b |$L41968|
000e0 |$L41988|
; 635 : {
; 636 : *pBytesNeeded = ETHERNET_ADDRESS_LEN;
000e0 e3a03006 mov r3, #6
000e4 |$L42371|
; 637 : ndisStatus = NDIS_STATUS_INVALID_LENGTH;
000e4 e59f4050 ldr r4, [pc, #0x50]
000e8 e5863000 str r3, [r6]
; 638 : break;
000ec ea00000f b |$L41968|
000f0 |$L41998|
; 659 : CASE_OID(OID_GEN_NETWORK_LAYER_ADDRESSES)
; 660 : *pBytesRead = InfoBufferLen;
; 661 : *pBytesNeeded = 0;
; 662 : break;
; 663 : CASE_OID(OID_GEN_TRANSPORT_HEADER_OFFSET)
; 664 : *pBytesRead = InfoBufferLen;
000f0 e5885000 str r5, [r8]
; 665 : *pBytesNeeded = 0;
000f4 e5860000 str r0, [r6]
; 666 : break;
000f8 ea00000c b |$L41968|
000fc |$L41978|
; 617 : }
; 618 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Set Current packet filter 0x%X\r\n"),tmpULong));
; 619 : break;
; 620 : CASE_OID(OID_GEN_CURRENT_LOOKAHEAD)
; 621 : if (InfoBufferLen != sizeof(ULONG))
000fc e3550004 cmp r5, #4
; 622 : {
; 623 : *pBytesNeeded = sizeof(ULONG);
00100 13a03004 movne r3, #4
00104 1afffff6 bne |$L42371|
; 624 : ndisStatus = NDIS_STATUS_INVALID_LENGTH;
; 625 : break;
; 626 : }
; 627 : pSmsNdis->CurrentLookahead = *((ULONG*)pInfoBuffer);
00108 e59a3000 ldr r3, [r10]
; 628 : *pBytesRead = InfoBufferLen;
0010c e3a02004 mov r2, #4
00110 e587305c str r3, [r7, #0x5C]
00114 e5882000 str r2, [r8]
; 665 : *pBytesNeeded = 0;
00118 e5860000 str r0, [r6]
; 666 : break;
0011c ea000003 b |$L41968|
00120 |$L41971|
; 599 : {
; 600 : CASE_OID(OID_GEN_CURRENT_PACKET_FILTER)
; 601 : if (InfoBufferLen != sizeof(ULONG))
00120 e3550004 cmp r5, #4
; 602 : {
; 603 : *pBytesNeeded = ETHERNET_ADDRESS_LEN;
; 604 : ndisStatus = NDIS_STATUS_INVALID_LENGTH;
; 605 : break;
00124 1affffed bne |$L41988|
; 606 : }
; 607 : tmpULong = *((ULONG*)pInfoBuffer);
; 608 : //if (tmpULong & SUPPORTED_PACKET_FILTER)
; 609 : //{
; 610 : // *pBytesRead = InfoBufferLen;
; 611 : // *pBytesNeeded = 0;
; 612 : // ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 613 : //}
; 614 : //else
; 615 : {
; 616 : pSmsNdis->CurrentPacketFilter = tmpULong;
00128 e59a3000 ldr r3, [r10]
0012c e5873058 str r3, [r7, #0x58]
00130 |$L41968|
; 675 : break;
; 676 : }
; 677 :
; 678 : #undef CASE_OID
; 679 : #undef CASE_OID_NOT_SUPPORTED
; 680 :
; 681 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -SmsNdis_SetInformationHandler. status 0x%X\r\n"),ndisStatus));
; 682 : return ndisStatus;
00130 e1a00004 mov r0, r4
; 683 : }
00134 e8bd47f0 ldmia sp!, {r4 - r10, lr}
00138 e12fff1e bx lr
0013c |$L42377|
0013c c0010014 DCD 0xc0010014
00140 aaaaaaab DCD 0xaaaaaaab
00144 c0010017 DCD 0xc0010017
00148 fd010103 DCD 0xfd010103
0014c 01010103 DCD 0x1010103
00150 00010119 DCD 0x10119
00154 00010112 DCD 0x10112
00158 0001010f DCD 0x1010f
0015c 0001010e DCD 0x1010e
00160 |$M42373|
ENDP ; |SmsNdis_SetInformationHandler|
EXPORT |SmsNdis_SendHandler|
00000 AREA |.text| { |SmsNdis_SendHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SmsNdis_SendHandler|, PDATA, SELECTION=5, ASSOC=|.text| { |SmsNdis_SendHandler| } ; comdat associative
|$T42385| DCD |$L42384|
DCD 0x40000200
; Function compile flags: /Ogsy
00000 AREA |.text| { |SmsNdis_SendHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SmsNdis_SendHandler| PROC
; 697 : {
00000 |$L42384|
00000 |$M42382|
; 698 : //PSMS_SMS_NDIS_ST pSmsNdis = (PSMS_SMS_NDIS_ST)MiniportAdapterContext;
; 699 :
; 700 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +SmsNdis_SendHandler\r\n")));
; 701 :
; 702 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -SmsNdis_SendHandler\n")));
; 703 : return NDIS_STATUS_SUCCESS;
00000 e3a00000 mov r0, #0
; 704 : }
00004 e12fff1e bx lr
00008 |$M42383|
ENDP ; |SmsNdis_SendHandler|
EXPORT |MulticastEthAddrFromIpAddr|
00000 AREA |.text| { |MulticastEthAddrFromIpAddr| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MulticastEthAddrFromIpAddr|, PDATA, SELECTION=5, ASSOC=|.text| { |MulticastEthAddrFromIpAddr| } ; comdat associative
|$T42394| DCD |$L42393|
DCD 0x40001001
; Function compile flags: /Ogsy
00000 AREA |.text| { |MulticastEthAddrFromIpAddr| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MulticastEthAddrFromIpAddr| PROC
; 782 : {
00000 |$L42393|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M42391|
; 783 : ethAddr[0] = 0x01;
; 784 : ethAddr[1] = 0x00;
; 785 : ethAddr[2] = 0x5E;
; 786 : ethAddr[3] = (UCHAR)((ipAddr & 0x00ff00)>>8) & 0x7f;
00004 e1a03880 mov r3, r0, lsl #17
; 787 : ethAddr[4] = (UCHAR)((ipAddr & 0x00ff0000)>>16);
00008 e1a02820 mov r2, r0, lsr #16
0000c e1a03ca3 mov r3, r3, lsr #25
00010 e3a0e001 mov lr, #1
00014 e3a04000 mov r4, #0
00018 e3a0505e mov r5, #0x5E
; 788 : ethAddr[5] = (UCHAR)((ipAddr & 0xff000000)>>24);
0001c e1a00c20 mov r0, r0, lsr #24
00020 e5c13003 strb r3, [r1, #3]
00024 e5c1e000 strb lr, [r1]
00028 e5c14001 strb r4, [r1, #1]
0002c e5c15002 strb r5, [r1, #2]
00030 e5c12004 strb r2, [r1, #4]
00034 e5c10005 strb r0, [r1, #5]
; 789 : }
00038 e8bd4030 ldmia sp!, {r4, r5, lr}
0003c e12fff1e bx lr
00040 |$M42392|
ENDP ; |MulticastEthAddrFromIpAddr|
00000 AREA |.text| { |IsAnIPMulticastGroup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$IsAnIPMulticastGroup|, PDATA, SELECTION=5, ASSOC=|.text| { |IsAnIPMulticastGroup| } ; comdat associative
|$T42403| DCD |$L42402|
DCD 0x40000d03
; Function compile flags: /Ogsy
00000 AREA |.text| { |IsAnIPMulticastGroup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |IsAnIPMulticastGroup| PROC
; 800 : {
00000 |$L42402|
00000 e1a0c00d mov r12, sp
00004 e92d000f stmdb sp!, {r0 - r3}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c |$M42400|
; 801 : UCHAR *AddrArray = (PUCHAR)&IpAddr;
; 802 :
; 803 : if (AddrArray[3] >= 224 && AddrArray[3] < 240) {
0000c e5dd300b ldrb r3, [sp, #0xB]
00010 e35300e0 cmp r3, #0xE0
00014 3a000003 bcc |$L42073|
00018 e35300f0 cmp r3, #0xF0
; 804 : return TRUE;
0001c 33a00001 movcc r0, #1
; 807 : }
; 808 : }
00020 389d6000 ldmccia sp, {sp, lr}
00024 312fff1e bxcc lr
00028 |$L42073|
; 805 : } else {
; 806 : return FALSE;
00028 e3a00000 mov r0, #0
; 807 : }
; 808 : }
0002c e89d6000 ldmia sp, {sp, lr}
00030 e12fff1e bx lr
00034 |$M42401|
ENDP ; |IsAnIPMulticastGroup|
EXPORT |IsAnIPv6MulticastGroup|
00000 AREA |.text| { |IsAnIPv6MulticastGroup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$IsAnIPv6MulticastGroup|, PDATA, SELECTION=5, ASSOC=|.text| { |IsAnIPv6MulticastGroup| } ; comdat associative
|$T42413| DCD |$L42412|
DCD 0x40000500
; Function compile flags: /Ogsy
00000 AREA |.text| { |IsAnIPv6MulticastGroup| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |IsAnIPv6MulticastGroup| PROC
; 813 : {
00000 |$L42412|
00000 |$M42410|
; 814 : if(ipAddr[0]==IPV6_MULTICAST_INDICATOR)
00000 e5d03000 ldrb r3, [r0]
00004 e35300ff cmp r3, #0xFF
; 815 : {
; 816 : return TRUE;
00008 03a00001 moveq r0, #1
; 817 : }
; 818 : else
; 819 : {
; 820 : return FALSE;
0000c 13a00000 movne r0, #0
; 821 : }
; 822 : }
00010 e12fff1e bx lr
00014 |$M42411|
ENDP ; |IsAnIPv6MulticastGroup|
EXPORT |MulticastEthAddrFromIPv6Addr|
00000 AREA |.text| { |MulticastEthAddrFromIPv6Addr| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MulticastEthAddrFromIPv6Addr|, PDATA, SELECTION=5, ASSOC=|.text| { |MulticastEthAddrFromIPv6Addr| } ; comdat associative
|$T42422| DCD |$L42421|
DCD 0x40000c00
; Function compile flags: /Ogsy
00000 AREA |.text| { |MulticastEthAddrFromIPv6Addr| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |MulticastEthAddrFromIPv6Addr| PROC
; 827 : {
00000 |$L42421|
00000 |$M42419|
; 828 : /*
; 829 : For IPv6 Multicast addresses,
; 830 : the Ethernet MAC is derived by the four low-order octets
; 831 : OR'ed with the MAC 33:33:00:00:00:00,
; 832 : so for example the IPv6 address FF02:DEAD:BEEF:1:3
; 833 : would map to the Ethernet MAC address 33:33:00:01:00:03
; 834 : */
; 835 :
; 836 : ethAddr[0] = 0x33;
00000 e3a03033 mov r3, #0x33
00004 e5c13000 strb r3, [r1]
; 837 : ethAddr[1] = 0x33;
00008 e5c13001 strb r3, [r1, #1]
; 838 : ethAddr[2] = ipAddr[12];
0000c e5d0300c ldrb r3, [r0, #0xC]
00010 e5c13002 strb r3, [r1, #2]
; 839 : ethAddr[3] = ipAddr[13];
00014 e5d0300d ldrb r3, [r0, #0xD]
00018 e5c13003 strb r3, [r1, #3]
; 840 : ethAddr[4] = ipAddr[14];
0001c e5d0300e ldrb r3, [r0, #0xE]
00020 e5c13004 strb r3, [r1, #4]
; 841 : ethAddr[5] = ipAddr[15];
00024 e5d0300f ldrb r3, [r0, #0xF]
00028 e5c13005 strb r3, [r1, #5]
; 842 : }
0002c e12fff1e bx lr
00030 |$M42420|
ENDP ; |MulticastEthAddrFromIPv6Addr|
EXPORT |IndicateIpPacketReceive|
IMPORT |htons|
IMPORT |ntohl|
00000 AREA |.text| { |IndicateIpPacketReceive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$IndicateIpPacketReceive|, PDATA, SELECTION=5, ASSOC=|.text| { |IndicateIpPacketReceive| } ; comdat associative
|$T42459| DCD |$L42458|
DCD 0x40006702
; Function compile flags: /Ogsy
00000 AREA |.text| { |IndicateIpPacketReceive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |IndicateIpPacketReceive| PROC
; 847 : {
00000 |$L42458|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd02c sub sp, sp, #0x2C
00008 |$M42456|
00008 e1a08002 mov r8, r2
0000c e1a06001 mov r6, r1
00010 e1a07000 mov r7, r0
00014 e59f317c ldr r3, [pc, #0x17C]
00018 e5933000 ldr r3, [r3]
0001c e58d3028 str r3, [sp, #0x28]
; 848 : ETHERNETHEADER_ST EthHdr;
; 849 : ULONG u32;
; 850 :
; 851 : if ((pPacket[0] & 0xF0) == 0x60)
00020 e5d63000 ldrb r3, [r6]
00024 e20330f0 and r3, r3, #0xF0
00028 e3530060 cmp r3, #0x60
0002c 1a00001a bne |$L42097|
; 852 : {
; 853 : // fill ethernet header
; 854 : if (IsAnIPv6MulticastGroup( pPacket + 24 /*DstAddress*/ ))
00030 e5d63018 ldrb r3, [r6, #0x18]
00034 e59f1158 ldr r1, [pc, #0x158]
00038 e35300ff cmp r3, #0xFF
0003c 1a00000c bne |$L42098|
; 855 : {
; 856 : MulticastEthAddrFromIPv6Addr(pPacket + 24 /*DstAddress*/ , EthHdr.DestAdd);
00040 e5d63024 ldrb r3, [r6, #0x24]
00044 e5d6e025 ldrb lr, [r6, #0x25]
00048 e5d64026 ldrb r4, [r6, #0x26]
0004c e5d65027 ldrb r5, [r6, #0x27]
00050 e3a02033 mov r2, #0x33
00054 e3a00033 mov r0, #0x33
00058 e5cd301a strb r3, [sp, #0x1A]
0005c e5cde01b strb lr, [sp, #0x1B]
00060 e5cd401c strb r4, [sp, #0x1C]
00064 e5cd501d strb r5, [sp, #0x1D]
00068 e5cd2018 strb r2, [sp, #0x18]
0006c e5cd0019 strb r0, [sp, #0x19]
; 857 : }
; 858 : else
00070 ea000003 b |$L42099|
00074 |$L42098|
; 859 : {
; 860 : memcpy(EthHdr.DestAdd, LocalMAC, 6);
00074 e5913008 ldr r3, [r1, #8]
00078 e1d120bc ldrh r2, [r1, #0xC]
0007c e58d3018 str r3, [sp, #0x18]
00080 e1cd21bc strh r2, [sp, #0x1C]
00084 |$L42099|
; 861 : }
; 862 : memcpy(EthHdr.SrcAdd,RemoteMAC,6);
00084 e28d001e add r0, sp, #0x1E
00088 e3a02006 mov r2, #6
0008c eb000000 bl memcpy
; 863 : EthHdr.PacketType = htons(PACKET_TYPE_IPV6);
00090 e3a00c86 mov r0, #0x86, 24
00094 e38000dd orr r0, r0, #0xDD
; 864 : }
; 865 : else // v4
00098 ea000026 b |$L42455|
0009c |$L42097|
; 866 : {
; 867 : // fill ethernet header
; 868 : u32 = (pPacket[16] << 24) | (pPacket[17] << 16) | (pPacket[18] << 8) | pPacket[19]; /* DestAdd */
0009c e5d60010 ldrb r0, [r6, #0x10]
000a0 e5d63011 ldrb r3, [r6, #0x11]
000a4 e5d62012 ldrb r2, [r6, #0x12]
000a8 e5d61013 ldrb r1, [r6, #0x13]
000ac e1833400 orr r3, r3, r0, lsl #8
000b0 e1823403 orr r3, r2, r3, lsl #8
000b4 e1814403 orr r4, r1, r3, lsl #8
; 869 : if (IsAnIPMulticastGroup( ntohl(u32) ))
000b8 e1a00004 mov r0, r4
000bc eb000000 bl ntohl
000c0 e58d0010 str r0, [sp, #0x10]
000c4 e5dd3013 ldrb r3, [sp, #0x13]
000c8 e59fe0c4 ldr lr, [pc, #0xC4]
000cc e35300e0 cmp r3, #0xE0
000d0 3a00000f bcc |$L42101|
000d4 e35300f0 cmp r3, #0xF0
000d8 2a00000d bcs |$L42101|
; 870 : {
; 871 : MulticastEthAddrFromIpAddr(u32, EthHdr.DestAdd);
000dc e1a03884 mov r3, r4, lsl #17
000e0 e1a03ca3 mov r3, r3, lsr #25
000e4 e3a00001 mov r0, #1
000e8 e3a05000 mov r5, #0
000ec e3a0905e mov r9, #0x5E
000f0 e1a02824 mov r2, r4, lsr #16
000f4 e1a01c24 mov r1, r4, lsr #24
000f8 e5cd301b strb r3, [sp, #0x1B]
000fc e5cd0018 strb r0, [sp, #0x18]
00100 e5cd5019 strb r5, [sp, #0x19]
00104 e5cd901a strb r9, [sp, #0x1A]
00108 e5cd201c strb r2, [sp, #0x1C]
0010c e5cd101d strb r1, [sp, #0x1D]
; 872 : }
; 873 : else
00110 ea000003 b |$L42102|
00114 |$L42101|
; 874 : {
; 875 : memcpy(EthHdr.DestAdd, LocalMAC, 6);
00114 e59e3008 ldr r3, [lr, #8]
00118 e1de20bc ldrh r2, [lr, #0xC]
0011c e58d3018 str r3, [sp, #0x18]
00120 e1cd21bc strh r2, [sp, #0x1C]
00124 |$L42102|
; 876 : }
; 877 : memcpy(EthHdr.SrcAdd,RemoteMAC,6);
00124 e28d001e add r0, sp, #0x1E
00128 e3a02006 mov r2, #6
0012c e1a0100e mov r1, lr
00130 eb000000 bl memcpy
; 878 : EthHdr.PacketType = htons(PACKET_TYPE_IP);
00134 e3a00b02 mov r0, #2, 22
00138 |$L42455|
00138 eb000000 bl htons
; 879 : }
; 880 :
; 881 : #if 0 // to print RTP sequence num. and check it, enable this line
; 882 : {
; 883 : PBYTE pUdpHdr;
; 884 : UINT16 curSeq,destPort;
; 885 : static UINT16 basePort = 0xFFFF;
; 886 :
; 887 : if ((pPacket[0] & 0xF0) == 0x60)
; 888 : pUdpHdr = pPacket + 40;
; 889 : else
; 890 : pUdpHdr = pPacket + 20;
; 891 : destPort = (pUdpHdr[2] << 8) + pUdpHdr[3]; /* Udp DestinationPort */
; 892 : curSeq = (pUdpHdr[10] << 8) + pUdpHdr[11]; /* seq num */
; 893 :
; 894 : //DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: %u %u\r\n"),destPort,curSeq));
; 895 :
; 896 : if (basePort == 0xFFFF)
; 897 : {
; 898 : // get the port that will be checked. assumption: the audio port is bigger by 2 from the video
; 899 : basePort = destPort & 0xFFFC;
; 900 : }
; 901 :
; 902 : if (destPort == basePort)
; 903 : {
; 904 : static UINT16 prevSeq = 0xFFFF;
; 905 : if (prevSeq == 0xFFFF)
; 906 : {
; 907 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: checking vd seq port %d\r\n"),destPort));
; 908 : }
; 909 : if ((prevSeq < curSeq) && ((prevSeq+1) != curSeq))
; 910 : {
; 911 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: miss vd t %d %d %d miss %d\r\n"),GetTickCount(),prevSeq,curSeq,curSeq-prevSeq-1));
; 912 : MessageBeep(0xFFFFFFFF);
; 913 : }
; 914 : prevSeq = curSeq;
; 915 : }
; 916 : else if (destPort == (basePort+2))
; 917 : {
; 918 : static UINT16 prevSeq = 0xFFFF;
; 919 : if (prevSeq == 0xFFFF)
; 920 : {
; 921 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: checking au seq port %d\r\n"),destPort));
; 922 : }
; 923 : if ((prevSeq < curSeq) && ((prevSeq+1) != curSeq))
; 924 : {
; 925 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: miss au t %d %d %d miss %d\r\n"),GetTickCount(),prevSeq,curSeq,curSeq-prevSeq-1));
; 926 : MessageBeep(0xFFFFFFFF);
; 927 : }
; 928 : prevSeq = curSeq;
; 929 : }
; 930 : }
; 931 : #endif
; 932 :
; 933 : // insert ip to ip stack
; 934 : NdisMEthIndicateReceive(pSmsNdis->hMiniportAdapter,
; 935 : NULL, // TransferData will not be called
; 936 : (PCHAR)&EthHdr, // pointer to header
; 937 : ETHERNET_HEADER_LEN, // header size
; 938 : pPacket, // pointer to buffer
; 939 : PacketLen, // lookahead buffer size
; 940 : PacketLen); // packet size
0013c e5972000 ldr r2, [r7]
00140 e1cd02b4 strh r0, [sp, #0x24]
00144 e3a0500e mov r5, #0xE
00148 e59200f8 ldr r0, [r2, #0xF8]
0014c e5924208 ldr r4, [r2, #0x208]
00150 e28d2018 add r2, sp, #0x18
00154 e28d3018 add r3, sp, #0x18
00158 e3a01000 mov r1, #0
0015c e58d800c str r8, [sp, #0xC]
00160 e58d8008 str r8, [sp, #8]
00164 e58d6004 str r6, [sp, #4]
00168 e58d5000 str r5, [sp]
0016c e1a0e00f mov lr, pc
00170 e12fff14 bx r4
; 941 :
; 942 : // update statistics counter
; 943 : pSmsNdis->RxPacketCount++;
00174 e5973060 ldr r3, [r7, #0x60]
00178 e2833001 add r3, r3, #1
0017c e5873060 str r3, [r7, #0x60]
00180 e59d0028 ldr r0, [sp, #0x28]
00184 eb000000 bl __security_check_cookie
; 944 : }
00188 e28dd02c add sp, sp, #0x2C
0018c e8bd43f0 ldmia sp!, {r4 - r9, lr}
00190 e12fff1e bx lr
00194 |$L42461|
00194 00000000 DCD |RemoteMAC|
00198 00000000 DCD |__security_cookie|
0019c |$M42457|
ENDP ; |IndicateIpPacketReceive|
EXPORT |ReadIpCB|
IMPORT |NdisIMSwitchToMiniport|
IMPORT |NdisIMRevertBack|
00000 AREA |.text| { |ReadIpCB| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$ReadIpCB|, PDATA, SELECTION=5, ASSOC=|.text| { |ReadIpCB| } ; comdat associative
|$T42482| DCD |$L42481|
DCD 0x40008002
; Function compile flags: /Ogsy
00000 AREA |.text| { |ReadIpCB| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |ReadIpCB| PROC
; 949 : {
00000 |$L42481|
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M42479|
00008 e1a04002 mov r4, r2
0000c e1a06001 mov r6, r1
00010 e1a05000 mov r5, r0
; 950 : PSMS_SMS_NDIS_ST pSmsNdis = (PSMS_SMS_NDIS_ST)hContext;
; 951 : NDIS_HANDLE SwitchHandle;
; 952 : ULONG validIpCount = 0;
; 953 : ULONG u32;
; 954 : ULONG PktLen;
; 955 : PBYTE pBuff = (PBYTE)pBuffer;
; 956 :
; 957 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +ReadIpCB 0x08%X %d\r\n"),pBuffer,BufSize));
; 958 :
; 959 : NdisIMSwitchToMiniport(pSmsNdis->hMiniportAdapter,&SwitchHandle);
00014 e5950000 ldr r0, [r5]
00018 e28d1000 add r1, sp, #0
0001c e3a09000 mov r9, #0
00020 eb000000 bl NdisIMSwitchToMiniport
; 960 :
; 961 : if (pSmsNdis->PrevPktPortionCount > 0)
00024 e5953650 ldr r3, [r5, #0x650]
00028 e3a0ae5e mov r10, #0x5E, 28
0002c e38aa00a orr r10, r10, #0xA
00030 e3530000 cmp r3, #0
00034 0a00005a beq |$L42477|
; 962 : {
; 963 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Handle split packet. PrevPktPortionCount %d\r\n"),pSmsNdis->PrevPktPortionCount));
; 964 :
; 965 : // handle prev partial packet
; 966 : if (pSmsNdis->PrevPktPortionCount < (sizeof(UINT32) * 2))
00038 e3530008 cmp r3, #8
0003c 2a00000c bcs |$L42127|
; 967 : {
; 968 : // can't extract ip len form prev packet bytes.
; 969 : u32 = (sizeof(UINT32) * 2) - pSmsNdis->PrevPktPortionCount;
00040 e2637008 rsb r7, r3, #8
; 970 : if (u32 > BufSize)
; 971 : {
; 972 : // append to prev
; 973 : NdisMoveMappedMemory(pSmsNdis->PrevPktPortion + pSmsNdis->PrevPktPortionCount,pBuff,BufSize);
00044 e0833005 add r3, r3, r5
00048 e2830064 add r0, r3, #0x64
0004c e1570004 cmp r7, r4
00050 e1a01006 mov r1, r6
; 974 : pSmsNdis->PrevPktPortionCount += BufSize;
; 975 : NdisIMRevertBack(pSmsNdis->hMiniportAdapter,&SwitchHandle);
; 976 : return;
00054 8a000021 bhi |$L42478|
; 977 : }
; 978 : // append to prev
; 979 : NdisMoveMappedMemory(pSmsNdis->PrevPktPortion + pSmsNdis->PrevPktPortionCount,pBuff,u32);
00058 e1a02007 mov r2, r7
0005c eb000000 bl memcpy
; 980 : pSmsNdis->PrevPktPortionCount += u32;
00060 e5953650 ldr r3, [r5, #0x650]
; 981 : pBuff += u32;
00064 e0876006 add r6, r7, r6
; 982 : BufSize -= u32;
00068 e0444007 sub r4, r4, r7
0006c e0833007 add r3, r3, r7
00070 e5853650 str r3, [r5, #0x650]
00074 |$L42127|
; 983 : }
; 984 :
; 985 : if ((pSmsNdis->PrevPktPortion[0] & 0xF0) == 0x60)
00074 e5d53064 ldrb r3, [r5, #0x64]
00078 e20330f0 and r3, r3, #0xF0
0007c e3530060 cmp r3, #0x60
; 986 : {
; 987 : PktLen = ((pSmsNdis->PrevPktPortion[4] << 8) + pSmsNdis->PrevPktPortion[5]); /* PayloadLen */
; 988 : PktLen += IPV6_HEADER_LEN;
00080 05d52068 ldreqb r2, [r5, #0x68]
00084 05d53069 ldreqb r3, [r5, #0x69]
00088 00833402 addeq r3, r3, r2, lsl #8
0008c 02837028 addeq r7, r3, #0x28
00090 0a000004 beq |$L42133|
; 989 : }
; 990 : else if ((pSmsNdis->PrevPktPortion[0] & 0xF0) == 0x40)
00094 e3530040 cmp r3, #0x40
; 991 : {
; 992 : PktLen = (pSmsNdis->PrevPktPortion[2] << 8) + pSmsNdis->PrevPktPortion[3]; /* TotalLen */
00098 05d52066 ldreqb r2, [r5, #0x66]
0009c 05d53067 ldreqb r3, [r5, #0x67]
000a0 00837402 addeq r7, r3, r2, lsl #8
; 993 : }
; 994 : else
; 995 : {
; 996 : PktLen = 0;
000a4 13a07000 movne r7, #0
000a8 |$L42133|
; 997 : }
; 998 :
; 999 : u32 = PktLen - pSmsNdis->PrevPktPortionCount; // bytes needed from pBuff
000a8 e5952650 ldr r2, [r5, #0x650]
000ac e0478002 sub r8, r7, r2
; 1000 : if (PktLen > pSmsNdis->PrevPktPortionCount && PktLen < MAX_IP_FRAME_LEN && // is valid ip len
; 1001 : (pSmsNdis->PrevPktPortionCount + u32 <= MAX_IP_FRAME_LEN)) // there is enough space in buff
000b0 e1570002 cmp r7, r2
000b4 9a000018 bls |$L42134|
000b8 e157000a cmp r7, r10
000bc 2a000016 bcs |$L42134|
000c0 e0823008 add r3, r2, r8
000c4 e153000a cmp r3, r10
000c8 8a000013 bhi |$L42134|
; 1002 : {
; 1003 : if (u32 > BufSize)
; 1004 : {
; 1005 : // append to prev
; 1006 : NdisMoveMappedMemory(pSmsNdis->PrevPktPortion + pSmsNdis->PrevPktPortionCount,pBuff,BufSize);
000cc e0823005 add r3, r2, r5
000d0 e2830064 add r0, r3, #0x64
000d4 e1580004 cmp r8, r4
000d8 e1a01006 mov r1, r6
000dc 9a000005 bls |$L42135|
000e0 |$L42478|
000e0 e1a02004 mov r2, r4
000e4 eb000000 bl memcpy
; 1007 : pSmsNdis->PrevPktPortionCount += BufSize;
000e8 e5953650 ldr r3, [r5, #0x650]
; 1008 : NdisIMRevertBack(pSmsNdis->hMiniportAdapter,&SwitchHandle);
000ec e0833004 add r3, r3, r4
000f0 e5853650 str r3, [r5, #0x650]
; 1009 : return;
000f4 ea00003b b |$L42153|
000f8 |$L42135|
; 1010 : }
; 1011 : // concatenate the two portion and update pBuff pointer
; 1012 : NdisMoveMappedMemory(pSmsNdis->PrevPktPortion + pSmsNdis->PrevPktPortionCount,pBuff,u32);
000f8 e1a02008 mov r2, r8
000fc eb000000 bl memcpy
; 1013 : pBuff += u32;
; 1014 : BufSize -= u32;
; 1015 :
; 1016 : // insert ip to stack
; 1017 : IndicateIpPacketReceive(pSmsNdis,pSmsNdis->PrevPktPortion,PktLen);
00100 e1a02007 mov r2, r7
00104 e2851064 add r1, r5, #0x64
00108 e1a00005 mov r0, r5
0010c e0866008 add r6, r6, r8
00110 e0444008 sub r4, r4, r8
00114 eb000000 bl IndicateIpPacketReceive
; 1018 : validIpCount++;
00118 e3a09001 mov r9, #1
0011c |$L42134|
; 1019 : }
; 1020 : else
; 1021 : {
; 1022 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: IP concatenation failed. %d\r\n"),PktLen));
; 1023 : }
; 1024 : pSmsNdis->PrevPktPortionCount = 0;
0011c e3a03000 mov r3, #0
00120 e5853650 str r3, [r5, #0x650]
00124 ea00001e b |$L42477|
00128 |$L42140|
; 1028 : {
; 1029 : if ((pBuff[0] & 0xF0) == 0x60)
00128 e5d63000 ldrb r3, [r6]
0012c e20330f0 and r3, r3, #0xF0
00130 e3530060 cmp r3, #0x60
; 1030 : {
; 1031 : PktLen = ((pBuff[4] << 8) + pBuff[5]); /* PayloadLen */
; 1032 : PktLen += IPV6_HEADER_LEN;
00134 05d62004 ldreqb r2, [r6, #4]
00138 05d63005 ldreqb r3, [r6, #5]
0013c 00833402 addeq r3, r3, r2, lsl #8
00140 02837028 addeq r7, r3, #0x28
00144 0a000004 beq |$L42145|
; 1033 : }
; 1034 : else if ((pBuff[0] & 0xF0) == 0x40)
00148 e3530040 cmp r3, #0x40
; 1035 : {
; 1036 : PktLen = (pBuff[2] << 8) + pBuff[3]; /* TotalLen */
0014c 05d62002 ldreqb r2, [r6, #2]
00150 05d63003 ldreqb r3, [r6, #3]
00154 00837402 addeq r7, r3, r2, lsl #8
; 1037 : }
; 1038 : else
; 1039 : {
; 1040 : PktLen = 0;
00158 13a07000 movne r7, #0
0015c |$L42145|
; 1041 : }
; 1042 :
; 1043 : if (PktLen == 0 || PktLen > MAX_IP_FRAME_LEN)
0015c e3570000 cmp r7, #0
00160 0a00000b beq |$L42147|
00164 e157000a cmp r7, r10
00168 8a000009 bhi |$L42147|
; 1052 : break;
; 1053 : }
; 1054 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: resync %02X %d %d\r\n"),pBuff[0],PktLen,BufSize));
; 1055 : continue;
; 1056 : }
; 1057 :
; 1058 : if (PktLen > BufSize)
0016c e1570004 cmp r7, r4
00170 8a00000f bhi |$L42141|
; 1059 : {
; 1060 : // partial packet
; 1061 : break;
; 1062 : }
; 1063 :
; 1064 : // insert ip to stack
; 1065 : IndicateIpPacketReceive(pSmsNdis,pBuff,PktLen);
00174 e1a02007 mov r2, r7
00178 e1a01006 mov r1, r6
0017c e1a00005 mov r0, r5
00180 eb000000 bl IndicateIpPacketReceive
; 1066 :
; 1067 : validIpCount++;
00184 e2899001 add r9, r9, #1
; 1068 : pBuff += PktLen;
00188 e0866007 add r6, r6, r7
; 1069 : BufSize -= PktLen;
0018c e0444007 sub r4, r4, r7
; 1070 : }
00190 ea000003 b |$L42477|
00194 |$L42147|
; 1044 : {
; 1045 : // search for sync bytes
; 1046 : pBuff++;
; 1047 : BufSize--;
00194 e2444001 sub r4, r4, #1
; 1048 : if (BufSize < (sizeof(UINT32) * 2))
00198 e3540008 cmp r4, #8
0019c e2866001 add r6, r6, #1
001a0 3a000002 bcc |$L42467|
001a4 |$L42477|
; 1025 : }
; 1026 :
; 1027 : while (BufSize >= (sizeof(UINT32) * 2)) // atleast part of header include len
001a4 e3540008 cmp r4, #8
001a8 2affffde bcs |$L42140|
; 1048 : if (BufSize < (sizeof(UINT32) * 2))
001ac ea000000 b |$L42141|
001b0 |$L42467|
; 1049 : {
; 1050 : // no chance to find sync bytes
; 1051 : BufSize = 0;
001b0 e3a04000 mov r4, #0
001b4 |$L42141|
; 1071 :
; 1072 : if (BufSize > 0)
001b4 e3540000 cmp r4, #0
001b8 0a000004 beq |$L42152|
; 1073 : {
; 1074 : // save partial packet
; 1075 : NdisMoveMappedMemory(pSmsNdis->PrevPktPortion,pBuff,BufSize);
001bc e1a02004 mov r2, r4
001c0 e1a01006 mov r1, r6
001c4 e2850064 add r0, r5, #0x64
001c8 eb000000 bl memcpy
; 1076 : pSmsNdis->PrevPktPortionCount = BufSize;
001cc e5854650 str r4, [r5, #0x650]
001d0 |$L42152|
; 1077 : }
; 1078 :
; 1079 : if (validIpCount > 0)
001d0 e3590000 cmp r9, #0
; 1080 : {
; 1081 : // flush ip stack
; 1082 : NdisMEthIndicateReceiveComplete(pSmsNdis->hMiniportAdapter);
001d4 15953000 ldrne r3, [r5]
001d8 159300f8 ldrne r0, [r3, #0xF8]
001dc 15933214 ldrne r3, [r3, #0x214]
001e0 11a0e00f movne lr, pc
001e4 112fff13 bxne r3
001e8 |$L42153|
; 1083 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: %d valid packets\r\n"),validIpCount));
; 1084 : }
; 1085 :
; 1086 : NdisIMRevertBack(pSmsNdis->hMiniportAdapter,&SwitchHandle);
001e8 e5950000 ldr r0, [r5]
001ec e28d1000 add r1, sp, #0
001f0 eb000000 bl NdisIMRevertBack
; 1087 :
; 1088 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -ReadIpCB\r\n")));
; 1089 : }
001f4 e28dd004 add sp, sp, #4
001f8 e8bd47f0 ldmia sp!, {r4 - r10, lr}
001fc e12fff1e bx lr
00200 |$M42480|
ENDP ; |ReadIpCB|
EXPORT |??_C@_1M@EOMOKNGP@?$AAS?$AAG?$AAD?$AA1?$AA?3?$AA?$AA@| [ DATA ] ; `string'
EXPORT |RegisterReadIpCBFunc|
IMPORT |CreateFileW|
IMPORT |DeviceIoControl|
00000 AREA |.text| { |RegisterReadIpCBFunc| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$RegisterReadIpCBFunc|, PDATA, SELECTION=5, ASSOC=|.text| { |RegisterReadIpCBFunc| } ; comdat associative
|$T42492| DCD |$L42491|
DCD 0x40002802
00000 AREA |.rdata| { |??_C@_1M@EOMOKNGP@?$AAS?$AAG?$AAD?$AA1?$AA?3?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1M@EOMOKNGP@?$AAS?$AAG?$AAD?$AA1?$AA?3?$AA?$AA@| DCB "S", 0x0, "G", 0x0
DCB "D", 0x0, "1", 0x0, ":", 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |RegisterReadIpCBFunc| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |RegisterReadIpCBFunc| PROC
; 749 : {
00000 |$L42491|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 e24dd018 sub sp, sp, #0x18
00008 |$M42489|
00008 e1a04000 mov r4, r0
; 750 : GEN_IOCTL_REGISTER_READ_IP_PARAMS_ST readIpParams;
; 751 :
; 752 : pSmsNdis->hGenDrv = CreateFile(TEXT("SGD1:"),GENERIC_READ | GENERIC_WRITE,
; 753 : 0,NULL,OPEN_EXISTING,0,NULL);
0000c e59f0088 ldr r0, [pc, #0x88]
00010 e3a0e003 mov lr, #3
00014 e3a05000 mov r5, #0
00018 e3a03000 mov r3, #0
0001c e3a02000 mov r2, #0
00020 e3a01103 mov r1, #3, 2
00024 e58d5008 str r5, [sp, #8]
00028 e58d5004 str r5, [sp, #4]
0002c e58de000 str lr, [sp]
00030 eb000000 bl CreateFileW
00034 e3500000 cmp r0, #0
00038 e5840008 str r0, [r4, #8]
; 754 : if (pSmsNdis->hGenDrv == NULL)
; 755 : {
; 756 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: Failed to open connection to GenDrv\r\n")));
; 757 : return FALSE;
0003c 03a00000 moveq r0, #0
00040 0a000010 beq |$L42043|
; 758 : }
; 759 :
; 760 : readIpParams.pReadIpCBFunc = ReadIpCB;
00044 e59f204c ldr r2, [pc, #0x4C]
; 761 : readIpParams.hContext = (DWORD)pSmsNdis;
; 762 : if (DeviceIoControl(pSmsNdis->hGenDrv,SIANO_GEN_IOCTL_REGISTER_READ_IP_CB,
; 763 : &readIpParams,sizeof(readIpParams),NULL,0,NULL,NULL) == FALSE)
00048 e59f1044 ldr r1, [pc, #0x44]
0004c e3a03008 mov r3, #8
00050 e58d2010 str r2, [sp, #0x10]
00054 e28d2010 add r2, sp, #0x10
00058 e58d4014 str r4, [sp, #0x14]
0005c e58d500c str r5, [sp, #0xC]
00060 e58d5008 str r5, [sp, #8]
00064 e58d5004 str r5, [sp, #4]
00068 e58d5000 str r5, [sp]
0006c eb000000 bl DeviceIoControl
00070 e3500000 cmp r0, #0
00074 1a000002 bne |$L42055|
; 764 : {
; 765 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: Failed to register ReadIpCB\r\n")));
; 766 : CloseHandle(pSmsNdis->hGenDrv);
00078 e5940008 ldr r0, [r4, #8]
0007c eb000000 bl CloseHandle
; 767 : pSmsNdis->hGenDrv = NULL;
00080 e5845008 str r5, [r4, #8]
00084 |$L42055|
; 768 : }
; 769 :
; 770 : return TRUE;
00084 e3a00001 mov r0, #1
00088 |$L42043|
; 771 : }
00088 e28dd018 add sp, sp, #0x18
0008c e8bd4030 ldmia sp!, {r4, r5, lr}
00090 e12fff1e bx lr
00094 |$L42494|
00094 9c402008 DCD 0x9c402008
00098 00000000 DCD |ReadIpCB|
0009c 00000000 DCD |??_C@_1M@EOMOKNGP@?$AAS?$AAG?$AAD?$AA1?$AA?3?$AA?$AA@|
000a0 |$M42490|
ENDP ; |RegisterReadIpCBFunc|
EXPORT |SmsNdis_InitializeHandler|
IMPORT |NdisMSetAttributesEx|
IMPORT |NdisAllocateMemory|
00000 AREA |.text| { |SmsNdis_InitializeHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SmsNdis_InitializeHandler|, PDATA, SELECTION=5, ASSOC=|.text| { |SmsNdis_InitializeHandler| } ; comdat associative
|$T42514| DCD |$L42513|
DCD 0x40003f02
; Function compile flags: /Ogsy
00000 AREA |.text| { |SmsNdis_InitializeHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SmsNdis_InitializeHandler| PROC
; 185 : {
00000 |$L42513|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 e24dd008 sub sp, sp, #8
00008 |$M42511|
00008 e3530000 cmp r3, #0
0000c e1a04001 mov r4, r1
; 186 : NDIS_STATUS ndisStatus;
; 187 : UINT mIdx;
; 188 : PSMS_SMS_NDIS_ST pSmsNdis;
; 189 : NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1,-1);
00010 e3e05000 mvn r5, #0
; 190 :
; 191 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +SmsNdis_InitializeHandler\r\n")));
; 192 :
; 193 : // search for the medium type (802.3) in the given array.
; 194 : for (mIdx = 0; mIdx < MediumArraySize; mIdx++)
00014 e3a0e000 mov lr, #0
00018 0a000006 beq |$L42501|
0001c |$L41674|
; 195 : {
; 196 : if (MediumArray[mIdx] == NdisMedium802_3)
0001c e5920000 ldr r0, [r2]
00020 e3500000 cmp r0, #0
00024 0a000003 beq |$L42501|
00028 e28ee001 add lr, lr, #1
0002c e15e0003 cmp lr, r3
00030 e2822004 add r2, r2, #4
00034 3afffff8 bcc |$L41674|
00038 |$L42501|
; 197 : {
; 198 : // found what we're looking for
; 199 : break;
; 200 : }
; 201 : }
; 202 :
; 203 : if (mIdx == MediumArraySize)
; 204 : {
; 205 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: Unsupported mediums\r\n")));
; 206 : }
; 207 :
; 208 : *pSelectedMediumIndex = mIdx;
; 209 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Selected Medium Index %d\r\n"),mIdx));
; 210 :
; 211 : // allocate device structure
; 212 : ndisStatus = NdisAllocateMemory((PVOID*)&pSmsNdis,sizeof(SMS_SMS_NDIS_ST),0,HighestAcceptableMax);
00038 e3a01e65 mov r1, #0x65, 28
0003c e3811004 orr r1, r1, #4
00040 e3e03000 mvn r3, #0
00044 e3a02000 mov r2, #0
00048 e28d0004 add r0, sp, #4
0004c e584e000 str lr, [r4]
00050 e58d5000 str r5, [sp]
00054 eb000000 bl NdisAllocateMemory
00058 e1b05000 movs r5, r0
; 213 : if (ndisStatus == NDIS_STATUS_SUCCESS)
0005c 1a000022 bne |$L41688|
; 214 : {
; 215 : NdisZeroMemory(pSmsNdis,sizeof(SMS_SMS_NDIS_ST));
00060 e59d0004 ldr r0, [sp, #4]
00064 e3a02e65 mov r2, #0x65, 28
00068 e3822004 orr r2, r2, #4
0006c e3a01000 mov r1, #0
00070 eb000000 bl memset
; 216 :
; 217 : // register the allocated device as adapter context for use in SmsNdis_XXX
; 218 : NdisMSetAttributesEx(MiniportAdapterHandle,(NDIS_HANDLE)pSmsNdis,0,0,NdisInterfaceInternal);
00074 e59d4014 ldr r4, [sp, #0x14]
00078 e59d1004 ldr r1, [sp, #4]
0007c e3a0e000 mov lr, #0
00080 e1a00004 mov r0, r4
00084 e3a03000 mov r3, #0
00088 e3a02000 mov r2, #0
0008c e58de000 str lr, [sp]
00090 eb000000 bl NdisMSetAttributesEx
; 219 :
; 220 : pSmsNdis->hMiniportAdapter = MiniportAdapterHandle;
00094 e59d3004 ldr r3, [sp, #4]
; 221 : pSmsNdis->hWrapperConfigContext = WrapperConfigurationContext;
00098 e59d2018 ldr r2, [sp, #0x18]
; 222 : pSmsNdis->CurrentPacketFilter = SUPPORTED_PACKET_FILTER;
0009c e3a01006 mov r1, #6
000a0 e5834000 str r4, [r3]
000a4 e59d3004 ldr r3, [sp, #4]
; 223 : pSmsNdis->CurrentLookahead = MAX_IP_PACKET_LEN;
000a8 e3a0ee5d mov lr, #0x5D, 28
000ac e38ee00c orr lr, lr, #0xC
000b0 e5832004 str r2, [r3, #4]
000b4 e59d3004 ldr r3, [sp, #4]
000b8 e5831058 str r1, [r3, #0x58]
000bc e59d3004 ldr r3, [sp, #4]
000c0 e583e05c str lr, [r3, #0x5C]
; 224 :
; 225 : if (RegisterReadIpCBFunc(pSmsNdis) == FALSE)
000c4 e59d0004 ldr r0, [sp, #4]
000c8 eb000000 bl RegisterReadIpCBFunc
000cc e3500000 cmp r0, #0
000d0 1a000005 bne |$L41688|
; 226 : {
; 227 : NdisFreeMemory(pSmsNdis,sizeof(SMS_SMS_NDIS_ST),0);
000d4 e59d0004 ldr r0, [sp, #4]
000d8 e3a01e65 mov r1, #0x65, 28
000dc e3811004 orr r1, r1, #4
000e0 e3a02000 mov r2, #0
000e4 eb000000 bl NdisFreeMemory
; 228 : pSmsNdis = NULL;
; 229 : ndisStatus = NDIS_STATUS_FAILURE;
000e8 e3a05107 mov r5, #7, 2
000ec |$L41688|
; 230 : }
; 231 : }
; 232 : else
; 233 : {
; 234 : pSmsNdis = NULL;
; 235 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: Failed to allocate SmsNdis device\r\n")));
; 236 : }
; 237 :
; 238 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -SmsNdis_InitializeHandler\r\n")));
; 239 : return ndisStatus;
000ec e1a00005 mov r0, r5
; 240 : }
000f0 e28dd008 add sp, sp, #8
000f4 e8bd4030 ldmia sp!, {r4, r5, lr}
000f8 e12fff1e bx lr
000fc |$M42512|
ENDP ; |SmsNdis_InitializeHandler|
EXPORT |DriverEntry|
IMPORT |NdisMRegisterMiniport|
IMPORT |NdisInitializeWrapper|
00000 AREA |.text| { |DriverEntry| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DriverEntry|, PDATA, SELECTION=5, ASSOC=|.text| { |DriverEntry| } ; comdat associative
|$T42526| DCD |$L42525|
DCD 0x40002a02
; Function compile flags: /Ogsy
00000 AREA |.text| { |DriverEntry| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DriverEntry| PROC
; 715 : {
00000 |$L42525|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd050 sub sp, sp, #0x50
00008 |$M42523|
00008 e1a02001 mov r2, r1
0000c e1a01000 mov r1, r0
; 716 : NDIS_STATUS ndisStatus;
; 717 : NDIS_HANDLE hNdisWrapper;
; 718 : NDIS_MINIPORT_CHARACTERISTICS mChars;
; 719 :
; 720 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +DriverEntry\r\n")));
; 721 :
; 722 : NdisMInitializeWrapper (&hNdisWrapper,pDriverObject,pRegistryPath,NULL);
00010 e3a03000 mov r3, #0
00014 e28d0000 add r0, sp, #0
00018 eb000000 bl NdisInitializeWrapper
; 723 :
; 724 : NdisZeroMemory(&mChars,sizeof(mChars));
0001c e3a02048 mov r2, #0x48
00020 e3a01000 mov r1, #0
00024 e28d0008 add r0, sp, #8
00028 eb000000 bl memset
; 725 :
; 726 : mChars.MajorNdisVersion = 0x04;
; 727 : mChars.MinorNdisVersion = 0x00;
; 728 : mChars.HaltHandler = SmsNdis_HaltHandler;
; 729 : mChars.InitializeHandler = SmsNdis_InitializeHandler;
0002c e59f2070 ldr r2, [pc, #0x70]
; 730 : mChars.QueryInformationHandler = SmsNdis_QueryInformationHandler;
00030 e59f1068 ldr r1, [pc, #0x68]
00034 e59f3060 ldr r3, [pc, #0x60]
; 731 : mChars.SendHandler = SmsNdis_SendHandler;
00038 e59fe058 ldr lr, [pc, #0x58]
; 732 : mChars.SetInformationHandler = SmsNdis_SetInformationHandler;
0003c e59f4050 ldr r4, [pc, #0x50]
; 733 :
; 734 : // register NIC entry point
; 735 : ndisStatus = NdisMRegisterMiniport(hNdisWrapper,&mChars,sizeof(mChars));
00040 e59d0000 ldr r0, [sp]
00044 e58d2024 str r2, [sp, #0x24]
00048 e58d102c str r1, [sp, #0x2C]
0004c e3a05004 mov r5, #4
00050 e3a06000 mov r6, #0
00054 e3a02048 mov r2, #0x48
00058 e28d1008 add r1, sp, #8
0005c e58d301c str r3, [sp, #0x1C]
00060 e58de038 str lr, [sp, #0x38]
00064 e58d403c str r4, [sp, #0x3C]
00068 e5cd5008 strb r5, [sp, #8]
0006c e5cd6009 strb r6, [sp, #9]
00070 eb000000 bl NdisMRegisterMiniport
00074 e1b04000 movs r4, r0
; 736 : if (ndisStatus != NDIS_STATUS_SUCCESS)
; 737 : {
; 738 : NdisTerminateWrapper(hNdisWrapper,NULL);
00078 159d0000 ldrne r0, [sp]
0007c 13a01000 movne r1, #0
00080 1b000000 blne NdisTerminateWrapper
; 739 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: Failed to register miniport. status 0x%X\r\n"),ndisStatus));
; 740 : }
; 741 :
; 742 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: -DriverEntry\r\n")));
; 743 : return ndisStatus;
00084 e1a00004 mov r0, r4
; 744 : }
00088 e28dd050 add sp, sp, #0x50
0008c e8bd4070 ldmia sp!, {r4 - r6, lr}
00090 e12fff1e bx lr
00094 |$L42528|
00094 00000000 DCD |SmsNdis_SetInformationHandler|
00098 00000000 DCD |SmsNdis_SendHandler|
0009c 00000000 DCD |SmsNdis_HaltHandler|
000a0 00000000 DCD |SmsNdis_QueryInformationHandler|
000a4 00000000 DCD |SmsNdis_InitializeHandler|
000a8 |$M42524|
ENDP ; |DriverEntry|
END