📄 modmflow.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.00.9044.0
TITLE F:\W2DDK\src\kernel\serial\modmflow.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
$$SYMBOLS SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS ENDS
$$TYPES SEGMENT BYTE USE32 'DEBTYP'
$$TYPES ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
; COMDAT _RtlConvertLongToLargeInteger@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialSetDTR@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialClrDTR@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialSetRTS@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialClrRTS@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialSetupNewHandFlow@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialSetHandFlow@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialTurnOnBreak@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialTurnOffBreak@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialPretendXoff@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialPretendXon@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialHandleReducedIntBuffer@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialProdXonXoff@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialHandleModemUpdate@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialPerhapsLowerRTS@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialStartTimerLowerRTS@16
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialInvokePerhapsLowerRTS@16
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialDecrementRTSCounter@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
INCLUDELIB LIBC
INCLUDELIB OLDNAMES
PUBLIC _SerialSetDTR@4
EXTRN __imp__WRITE_PORT_UCHAR@8:NEAR
EXTRN _SerialDebugLevel:DWORD
EXTRN _DbgPrint:NEAR
EXTRN __imp__READ_PORT_UCHAR@4:NEAR
; COMDAT _SerialSetDTR@4
; File f:\w2ddk\src\kernel\serial\modmflow.c
_TEXT SEGMENT
$SG14817 DB 'SERIAL: Setting DTR for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialSetDTR@4 PROC NEAR ; COMDAT
; 81 : {
0001c 55 push ebp
0001d 8b ec mov ebp, esp
0001f 56 push esi
; 82 :
; 83 : PSERIAL_DEVICE_EXTENSION Extension = Context;
; 84 : UCHAR ModemControl;
; 85 :
; 86 : ModemControl = READ_MODEM_CONTROL(Extension->Controller);
00020 8b 75 08 mov esi, DWORD PTR _Context$[ebp]
00023 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
00029 83 c0 04 add eax, 4
0002c 50 push eax
0002d ff 15 00 00 00
00 call DWORD PTR __imp__READ_PORT_UCHAR@4
; 87 :
; 88 : ModemControl |= SERIAL_MCR_DTR;
00033 0c 01 or al, 1
; 89 :
; 90 : SerialDump(
; 91 : SERFLOW,
; 92 : ("SERIAL: Setting DTR for %x\n",
; 93 : Extension->Controller)
; 94 : );
00035 f6 05 03 00 00
00 20 test BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
0003c 88 45 08 mov BYTE PTR _ModemControl$[ebp], al
0003f 74 12 je SHORT $L14812
00041 ff b6 98 00 00
00 push DWORD PTR [esi+152]
00047 68 00 00 00 00 push OFFSET FLAT:$SG14817
0004c e8 00 00 00 00 call _DbgPrint
00051 59 pop ecx
00052 59 pop ecx
$L14812:
; 95 : WRITE_MODEM_CONTROL(
; 96 : Extension->Controller,
; 97 : ModemControl
; 98 : );
00053 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
00059 ff 75 08 push DWORD PTR _ModemControl$[ebp]
0005c 83 c0 04 add eax, 4
0005f 50 push eax
00060 ff 15 00 00 00
00 call DWORD PTR __imp__WRITE_PORT_UCHAR@8
; 99 :
; 100 : return FALSE;
00066 32 c0 xor al, al
00068 5e pop esi
; 101 :
; 102 : }
00069 5d pop ebp
0006a c2 04 00 ret 4
_SerialSetDTR@4 ENDP
_TEXT ENDS
PUBLIC _SerialClrDTR@4
; COMDAT _SerialClrDTR@4
_TEXT SEGMENT
$SG14840 DB 'SERIAL: Clearing DTR for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialClrDTR@4 PROC NEAR ; COMDAT
; 126 : {
0001d 55 push ebp
0001e 8b ec mov ebp, esp
00020 56 push esi
; 127 :
; 128 : PSERIAL_DEVICE_EXTENSION Extension = Context;
; 129 : UCHAR ModemControl;
; 130 :
; 131 : ModemControl = READ_MODEM_CONTROL(Extension->Controller);
00021 8b 75 08 mov esi, DWORD PTR _Context$[ebp]
00024 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
0002a 83 c0 04 add eax, 4
0002d 50 push eax
0002e ff 15 00 00 00
00 call DWORD PTR __imp__READ_PORT_UCHAR@4
; 132 :
; 133 : ModemControl &= ~SERIAL_MCR_DTR;
00034 24 fe and al, 254 ; 000000feH
; 134 :
; 135 : SerialDump(
; 136 : SERFLOW,
; 137 : ("SERIAL: Clearing DTR for %x\n",
; 138 : Extension->Controller)
; 139 : );
00036 f6 05 03 00 00
00 20 test BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
0003d 88 45 08 mov BYTE PTR _ModemControl$[ebp], al
00040 74 12 je SHORT $L14835
00042 ff b6 98 00 00
00 push DWORD PTR [esi+152]
00048 68 00 00 00 00 push OFFSET FLAT:$SG14840
0004d e8 00 00 00 00 call _DbgPrint
00052 59 pop ecx
00053 59 pop ecx
$L14835:
; 140 : WRITE_MODEM_CONTROL(
; 141 : Extension->Controller,
; 142 : ModemControl
; 143 : );
00054 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
0005a ff 75 08 push DWORD PTR _ModemControl$[ebp]
0005d 83 c0 04 add eax, 4
00060 50 push eax
00061 ff 15 00 00 00
00 call DWORD PTR __imp__WRITE_PORT_UCHAR@8
; 144 :
; 145 : return FALSE;
00067 32 c0 xor al, al
00069 5e pop esi
; 146 :
; 147 : }
0006a 5d pop ebp
0006b c2 04 00 ret 4
_SerialClrDTR@4 ENDP
_TEXT ENDS
PUBLIC _SerialSetRTS@4
; COMDAT _SerialSetRTS@4
_TEXT SEGMENT
$SG14863 DB 'SERIAL: Setting Rts for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialSetRTS@4 PROC NEAR ; COMDAT
; 171 : {
0001c 55 push ebp
0001d 8b ec mov ebp, esp
0001f 56 push esi
; 172 :
; 173 : PSERIAL_DEVICE_EXTENSION Extension = Context;
; 174 : UCHAR ModemControl;
; 175 :
; 176 : ModemControl = READ_MODEM_CONTROL(Extension->Controller);
00020 8b 75 08 mov esi, DWORD PTR _Context$[ebp]
00023 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
00029 83 c0 04 add eax, 4
0002c 50 push eax
0002d ff 15 00 00 00
00 call DWORD PTR __imp__READ_PORT_UCHAR@4
; 177 :
; 178 : ModemControl |= SERIAL_MCR_RTS;
00033 0c 02 or al, 2
; 179 :
; 180 : SerialDump(
; 181 : SERFLOW,
; 182 : ("SERIAL: Setting Rts for %x\n",
; 183 : Extension->Controller)
; 184 : );
00035 f6 05 03 00 00
00 20 test BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
0003c 88 45 08 mov BYTE PTR _ModemControl$[ebp], al
0003f 74 12 je SHORT $L14858
00041 ff b6 98 00 00
00 push DWORD PTR [esi+152]
00047 68 00 00 00 00 push OFFSET FLAT:$SG14863
0004c e8 00 00 00 00 call _DbgPrint
00051 59 pop ecx
00052 59 pop ecx
$L14858:
; 185 : WRITE_MODEM_CONTROL(
; 186 : Extension->Controller,
; 187 : ModemControl
; 188 : );
00053 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
00059 ff 75 08 push DWORD PTR _ModemControl$[ebp]
0005c 83 c0 04 add eax, 4
0005f 50 push eax
00060 ff 15 00 00 00
00 call DWORD PTR __imp__WRITE_PORT_UCHAR@8
; 189 :
; 190 : return FALSE;
00066 32 c0 xor al, al
00068 5e pop esi
; 191 :
; 192 : }
00069 5d pop ebp
0006a c2 04 00 ret 4
_SerialSetRTS@4 ENDP
_TEXT ENDS
PUBLIC _SerialClrRTS@4
; COMDAT _SerialClrRTS@4
_TEXT SEGMENT
$SG14886 DB 'SERIAL: Clearing Rts for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialClrRTS@4 PROC NEAR ; COMDAT
; 216 : {
0001d 55 push ebp
0001e 8b ec mov ebp, esp
00020 56 push esi
; 217 :
; 218 : PSERIAL_DEVICE_EXTENSION Extension = Context;
; 219 : UCHAR ModemControl;
; 220 :
; 221 : ModemControl = READ_MODEM_CONTROL(Extension->Controller);
00021 8b 75 08 mov esi, DWORD PTR _Context$[ebp]
00024 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
0002a 83 c0 04 add eax, 4
0002d 50 push eax
0002e ff 15 00 00 00
00 call DWORD PTR __imp__READ_PORT_UCHAR@4
; 222 :
; 223 : ModemControl &= ~SERIAL_MCR_RTS;
00034 24 fd and al, 253 ; 000000fdH
; 224 :
; 225 : SerialDump(
; 226 : SERFLOW,
; 227 : ("SERIAL: Clearing Rts for %x\n",
; 228 : Extension->Controller)
; 229 : );
00036 f6 05 03 00 00
00 20 test BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
0003d 88 45 08 mov BYTE PTR _ModemControl$[ebp], al
00040 74 12 je SHORT $L14881
00042 ff b6 98 00 00
00 push DWORD PTR [esi+152]
00048 68 00 00 00 00 push OFFSET FLAT:$SG14886
0004d e8 00 00 00 00 call _DbgPrint
00052 59 pop ecx
00053 59 pop ecx
$L14881:
; 230 : WRITE_MODEM_CONTROL(
; 231 : Extension->Controller,
; 232 : ModemControl
; 233 : );
00054 8b 86 98 00 00
00 mov eax, DWORD PTR [esi+152]
0005a ff 75 08 push DWORD PTR _ModemControl$[ebp]
0005d 83 c0 04 add eax, 4
00060 50 push eax
00061 ff 15 00 00 00
00 call DWORD PTR __imp__WRITE_PORT_UCHAR@8
; 234 :
; 235 : return FALSE;
00067 32 c0 xor al, al
00069 5e pop esi
; 236 :
; 237 : }
0006a 5d pop ebp
0006b c2 04 00 ret 4
_SerialClrRTS@4 ENDP
_TEXT ENDS
PUBLIC _SerialSetupNewHandFlow@8
PUBLIC _SerialProdXonXoff@8
PUBLIC _SerialPerhapsLowerRTS@4
EXTRN _SerialProcessLSR@4:NEAR
; COMDAT _SerialSetupNewHandFlow@8
_TEXT SEGMENT
$SG14913 DB 'SERIAL: Processing DTR flow for %x', 0aH, 00H
$SG14936 DB 'SERIAL: Removing DTR block on reception for %x', 0aH, 00H
$SG14952 DB 'SERIAL: Setting DTR block on reception for %x', 0aH, 00H
ORG $+1
$SG14969 DB 'SERIAL: Removing dtr block of reception for %x', 0aH, 00H
$SG14986 DB 'SERIAL: removing dtr block of reception for %x', 0aH, 00H
$SG15004 DB 'SERIAL: Processing RTS flow', 0aH, 00H
ORG $+3
$SG15025 DB 'SERIAL: Removing rts block of reception for %x', 0aH, 00H
$SG15041 DB 'SERIAL: Setting rts block of reception for %x', 0aH, 00H
ORG $+1
$SG15061 DB 'SERIAL: Clearing rts block of reception for %x', 0aH, 00H
$SG15081 DB 'SERIAL: TOGGLE Clearing rts block of reception for %x', 0aH
DB 00H
ORG $+1
$SG15105 DB 'SERIAL: Clearing rts block of reception for %x', 0aH, 00H
; Function compile flags: /Ogs
_Extension$ = 8
_NewHandFlow$ = 12
_New$ = -16
_SerialSetupNewHandFlow@8 PROC NEAR ; COMDAT
; 266 : {
001fc 55 push ebp
001fd 8b ec mov ebp, esp
001ff 83 ec 10 sub esp, 16 ; 00000010H
00202 53 push ebx
00203 56 push esi
; 267 :
; 268 : SERIAL_HANDFLOW New = *NewHandFlow;
00204 8b 75 0c mov esi, DWORD PTR _NewHandFlow$[ebp]
00207 57 push edi
00208 8d 7d f0 lea edi, DWORD PTR _New$[ebp]
0020b a5 movsd
0020c a5 movsd
0020d a5 movsd
0020e a5 movsd
; 269 :
; 270 : //
; 271 : // If the Extension->DeviceIsOpened is FALSE that means
; 272 : // we are entering this routine in response to an open request.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -