Updates to Tomato RAF including NGINX && PHP
[tomato.git] / release / src / router / libpcap / msdos / ndis_0.asm
blob2990985fee30387baf4a78995d2b9a66d4a9c400
1 PAGE 60,132
2 NAME NDIS_0
4 ifdef DOSX
5 .386
6 _TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
7 _TEXT ENDS
8 _DATA SEGMENT PUBLIC DWORD USE16 'CODE'
9 _DATA ENDS
10 _TEXT32 SEGMENT PUBLIC BYTE USE32 'CODE'
11 _TEXT32 ENDS
12 CB_DSEG EQU <CS> ; DOSX is tiny-model
13 D_SEG EQU <_TEXT SEGMENT>
14 D_END EQU <_TEXT ENDS>
15 ASSUME CS:_TEXT,DS:_TEXT
17 PUSHREGS equ <pushad>
18 POPREGS equ <popad>
20 PUBPROC macro name
21 align 4
22 public @&name
23 @&name label near
24 endm
25 else
26 .286
27 _TEXT SEGMENT PUBLIC DWORD 'CODE'
28 _TEXT ENDS
29 _DATA SEGMENT PUBLIC DWORD 'DATA'
30 _DATA ENDS
31 CB_DSEG EQU <SEG _DATA> ; 16bit is small/large model
32 D_SEG EQU <_DATA SEGMENT>
33 D_END EQU <_DATA ENDS>
34 ASSUME CS:_TEXT,DS:_DATA
36 PUSHREGS equ <pusha>
37 POPREGS equ <popa>
39 PUBPROC macro name
40 public _&name
41 _&name label far
42 endm
43 endif
45 ;-------------------------------------------
47 D_SEG
49 D_END
52 _TEXT SEGMENT
54 EXTRN _NdisSystemRequest : near
55 EXTRN _NdisRequestConfirm : near
56 EXTRN _NdisTransmitConfirm : near
57 EXTRN _NdisReceiveLookahead : near
58 EXTRN _NdisIndicationComplete : near
59 EXTRN _NdisReceiveChain : near
60 EXTRN _NdisStatusProc : near
61 EXTRN _NdisAllocStack : near
62 EXTRN _NdisFreeStack : near
65 ; *ALL* interrupt threads come through this macro.
67 CALLBACK macro callbackProc, argsSize
69 pushf
70 PUSHREGS ;; Save the registers
72 push es
73 push ds
74 mov ax,CB_DSEG ;; Load DS
75 mov ds,ax
76 call _NdisAllocStack ;; Get and install a stack.
78 mov bx,ss ;; Save off the old stack in other regs
79 mov cx,sp
80 mov ss,dx ;; Install the new one
81 mov sp,ax
82 push bx ;; Save the old one on to the new stack
83 push cx
84 sub sp,&argsSize ;; Allocate space for arguments on the stack
86 mov ax,ss ;; Set up the destination for the move
87 mov es,ax
88 mov di,sp
89 mov ds,bx ;; Set up the source for the move.
90 mov si,cx
91 add si,4+6+32
93 mov cx,&argsSize ;; Move the arguments to the stack.
94 shr cx,1
95 cld
96 rep movsw
98 mov ax,CB_DSEG ;; Set my data segment again.
99 mov ds,ax
101 call &callbackProc ;; Call the real callback.
102 pop di ;; Pop off the old stack
103 pop si
104 mov bx,ss ;; Save off the current allocated stack.
105 mov cx,sp
106 mov ss,si ;; Restore the old stack
107 mov sp,di
108 push ax ;; Save the return code
109 push bx ;; Free the stack. Push the pointer to it
110 push cx
111 call _NdisFreeStack
112 add sp,4
113 pop ax ;; Get the return code back
114 add di,32 ;; Get a pointer to ax on the stack
115 mov word ptr ss:[di],ax
116 pop ds
117 pop es
119 POPREGS
120 popf
121 endm
124 ; Define all of the callbacks for the NDIS procs.
127 PUBPROC systemRequestGlue
128 CALLBACK _NdisSystemRequest,14
129 RETF
131 PUBPROC requestConfirmGlue
132 CALLBACK _NdisRequestConfirm,12
133 RETF
135 PUBPROC transmitConfirmGlue
136 CALLBACK _NdisTransmitConfirm,10
137 RETF
139 PUBPROC receiveLookaheadGlue
140 CALLBACK _NdisReceiveLookahead,16
141 RETF
143 PUBPROC indicationCompleteGlue
144 CALLBACK _NdisIndicationComplete,4
145 RETF
147 PUBPROC receiveChainGlue
148 CALLBACK _NdisReceiveChain,16
149 RETF
151 PUBPROC statusGlue
152 CALLBACK _NdisStatusProc,12
153 RETF
156 ; int FAR NdisGetLinkage (int handle, char *data, int size);
159 ifdef DOSX
160 PUBPROC NdisGetLinkage
161 push ebx
162 mov ebx, [esp+8] ; device handle
163 mov eax, 4402h ; IOCTRL read function
164 mov edx, [esp+12] ; DS:EDX -> result data
165 mov ecx, [esp+16] ; ECX = length
166 int 21h
167 pop ebx
168 jc @fail
169 xor eax, eax
170 @fail: ret
172 else
173 PUBPROC NdisGetLinkage
174 enter 0, 0
175 mov bx, [bp+6]
176 mov ax, 4402h
177 mov dx, [bp+8]
178 mov cx, [bp+12]
179 int 21h
180 jc @fail
181 xor ax, ax
182 @fail: leave
183 retf
184 endif
186 ENDS