⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smsndis.cod

📁 这是mobile6.0下的DMB驱动
💻 COD
📖 第 1 页 / 共 5 页
字号:
; 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 %02

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -