1511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPAGE 60,132 2511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallNAME NDIS_0 3511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 4511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallifdef DOSX 5511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall .386 6511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _TEXT SEGMENT PUBLIC DWORD USE16 'CODE' 7511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _TEXT ENDS 8511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _DATA SEGMENT PUBLIC DWORD USE16 'CODE' 9511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _DATA ENDS 10511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _TEXT32 SEGMENT PUBLIC BYTE USE32 'CODE' 11511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _TEXT32 ENDS 12511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall CB_DSEG EQU <CS> ; DOSX is tiny-model 13511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall D_SEG EQU <_TEXT SEGMENT> 14511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall D_END EQU <_TEXT ENDS> 15511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ASSUME CS:_TEXT,DS:_TEXT 16511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 17511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUSHREGS equ <pushad> 18511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall POPREGS equ <popad> 19511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 20511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUBPROC macro name 21511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall align 4 22511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall public @&name 23511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall @&name label near 24511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall endm 25511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallelse 26511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall .286 27511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _TEXT SEGMENT PUBLIC DWORD 'CODE' 28511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _TEXT ENDS 29511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _DATA SEGMENT PUBLIC DWORD 'DATA' 30511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _DATA ENDS 31511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall CB_DSEG EQU <SEG _DATA> ; 16bit is small/large model 32511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall D_SEG EQU <_DATA SEGMENT> 33511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall D_END EQU <_DATA ENDS> 34511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ASSUME CS:_TEXT,DS:_DATA 35511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 36511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUSHREGS equ <pusha> 37511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall POPREGS equ <popa> 38511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 39511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUBPROC macro name 40511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall public _&name 41511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall _&name label far 42511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall endm 43511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallendif 44511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 45511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall;------------------------------------------- 46511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 47511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallD_SEG 48511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 49511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallD_END 50511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 51511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 52511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall_TEXT SEGMENT 53511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 54511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisSystemRequest : near 55511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisRequestConfirm : near 56511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisTransmitConfirm : near 57511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisReceiveLookahead : near 58511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisIndicationComplete : near 59511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisReceiveChain : near 60511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisStatusProc : near 61511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisAllocStack : near 62511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEXTRN _NdisFreeStack : near 63511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 64511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; 65511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; *ALL* interrupt threads come through this macro. 66511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; 67511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK macro callbackProc, argsSize 68511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 69511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pushf 70511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUSHREGS ;; Save the registers 71511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 72511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push es 73511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push ds 74511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ax,CB_DSEG ;; Load DS 75511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ds,ax 76511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall call _NdisAllocStack ;; Get and install a stack. 77511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 78511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov bx,ss ;; Save off the old stack in other regs 79511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov cx,sp 80511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ss,dx ;; Install the new one 81511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov sp,ax 82511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push bx ;; Save the old one on to the new stack 83511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push cx 84511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall sub sp,&argsSize ;; Allocate space for arguments on the stack 85511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 86511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ax,ss ;; Set up the destination for the move 87511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov es,ax 88511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov di,sp 89511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ds,bx ;; Set up the source for the move. 90511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov si,cx 91511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall add si,4+6+32 92511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 93511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov cx,&argsSize ;; Move the arguments to the stack. 94511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall shr cx,1 95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall cld 96511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall rep movsw 97511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 98511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ax,CB_DSEG ;; Set my data segment again. 99511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ds,ax 100511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 101511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall call &callbackProc ;; Call the real callback. 102511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pop di ;; Pop off the old stack 103511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pop si 104511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov bx,ss ;; Save off the current allocated stack. 105511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov cx,sp 106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ss,si ;; Restore the old stack 107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov sp,di 108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push ax ;; Save the return code 109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push bx ;; Free the stack. Push the pointer to it 110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push cx 111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall call _NdisFreeStack 112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall add sp,4 113511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pop ax ;; Get the return code back 114511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall add di,32 ;; Get a pointer to ax on the stack 115511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov word ptr ss:[di],ax 116511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pop ds 117511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pop es 118511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 119511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall POPREGS 120511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall popf 121511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallendm 122511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 123511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; 124511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; Define all of the callbacks for the NDIS procs. 125511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; 126511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 127511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC systemRequestGlue 128511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisSystemRequest,14 129511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 131511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC requestConfirmGlue 132511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisRequestConfirm,12 133511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 134511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 135511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC transmitConfirmGlue 136511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisTransmitConfirm,10 137511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 139511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC receiveLookaheadGlue 140511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisReceiveLookahead,16 141511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 143511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC indicationCompleteGlue 144511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisIndicationComplete,4 145511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 146511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 147511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC receiveChainGlue 148511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisReceiveChain,16 149511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 150511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 151511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallPUBPROC statusGlue 152511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallCALLBACK _NdisStatusProc,12 153511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallRETF 154511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 155511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; 156511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; int FAR NdisGetLinkage (int handle, char *data, int size); 157511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall; 158511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 159511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallifdef DOSX 160511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUBPROC NdisGetLinkage 161511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall push ebx 162511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ebx, [esp+8] ; device handle 163511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov eax, 4402h ; IOCTRL read function 164511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov edx, [esp+12] ; DS:EDX -> result data 165511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ecx, [esp+16] ; ECX = length 166511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int 21h 167511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall pop ebx 168511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall jc @fail 169511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall xor eax, eax 170511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall @fail: ret 171511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 172511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallelse 173511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall PUBPROC NdisGetLinkage 174511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall enter 0, 0 175511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov bx, [bp+6] 176511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov ax, 4402h 177511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov dx, [bp+8] 178511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall mov cx, [bp+12] 179511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int 21h 180511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall jc @fail 181511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall xor ax, ax 182511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall @fail: leave 183511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall retf 184511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallendif 185511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 186511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallENDS 187511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 188511eca30a483e912c274e1d8ba3a0f8f081e2227JP AbgrallEND 189