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