xref: /minix3/external/bsd/libpcap/dist/msdos/ndis2.h (revision d56f51ea7d8b9045e5c8e2028422523d3f9a5840)
1*d56f51eaSDavid van Moolenbroek /*
2*d56f51eaSDavid van Moolenbroek  * Copyright (c) 1993,1994
3*d56f51eaSDavid van Moolenbroek  *      Texas A&M University.  All rights reserved.
4*d56f51eaSDavid van Moolenbroek  *
5*d56f51eaSDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
6*d56f51eaSDavid van Moolenbroek  * modification, are permitted provided that the following conditions
7*d56f51eaSDavid van Moolenbroek  * are met:
8*d56f51eaSDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
9*d56f51eaSDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
10*d56f51eaSDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
11*d56f51eaSDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
12*d56f51eaSDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
13*d56f51eaSDavid van Moolenbroek  * 3. All advertising materials mentioning features or use of this software
14*d56f51eaSDavid van Moolenbroek  *    must display the following acknowledgement:
15*d56f51eaSDavid van Moolenbroek  *      This product includes software developed by Texas A&M University
16*d56f51eaSDavid van Moolenbroek  *      and its contributors.
17*d56f51eaSDavid van Moolenbroek  * 4. Neither the name of the University nor the names of its contributors
18*d56f51eaSDavid van Moolenbroek  *    may be used to endorse or promote products derived from this software
19*d56f51eaSDavid van Moolenbroek  *    without specific prior written permission.
20*d56f51eaSDavid van Moolenbroek  *
21*d56f51eaSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
22*d56f51eaSDavid van Moolenbroek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*d56f51eaSDavid van Moolenbroek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*d56f51eaSDavid van Moolenbroek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
25*d56f51eaSDavid van Moolenbroek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26*d56f51eaSDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27*d56f51eaSDavid van Moolenbroek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*d56f51eaSDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29*d56f51eaSDavid van Moolenbroek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30*d56f51eaSDavid van Moolenbroek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*d56f51eaSDavid van Moolenbroek  * SUCH DAMAGE.
32*d56f51eaSDavid van Moolenbroek  *
33*d56f51eaSDavid van Moolenbroek  * Developers:
34*d56f51eaSDavid van Moolenbroek  *             David K. Hess, Douglas Lee Schales, David R. Safford
35*d56f51eaSDavid van Moolenbroek  *
36*d56f51eaSDavid van Moolenbroek  * Heavily modified for Metaware HighC + GNU C 2.8+
37*d56f51eaSDavid van Moolenbroek  *             Gisle Vanem 1998
38*d56f51eaSDavid van Moolenbroek  */
39*d56f51eaSDavid van Moolenbroek 
40*d56f51eaSDavid van Moolenbroek #ifndef __PCAP_NDIS_H
41*d56f51eaSDavid van Moolenbroek #define __PCAP_NDIS_H
42*d56f51eaSDavid van Moolenbroek 
43*d56f51eaSDavid van Moolenbroek #if defined (__HIGHC__)
44*d56f51eaSDavid van Moolenbroek   #define pascal          _CC(_CALLEE_POPS_STACK & ~_REVERSE_PARMS) /* calling convention */
45*d56f51eaSDavid van Moolenbroek   #define CALLBACK(foo)   pascal WORD foo
46*d56f51eaSDavid van Moolenbroek   #define PAS_PTR(x,arg)  typedef FAR WORD pascal (*x) arg
47*d56f51eaSDavid van Moolenbroek   #define GUARD()         _inline (0x9C,0xFA)   /* pushfd, cli */
48*d56f51eaSDavid van Moolenbroek   #define UNGUARD()       _inline (0x9D)        /* popfd */
49*d56f51eaSDavid van Moolenbroek   #define FAR             _far
50*d56f51eaSDavid van Moolenbroek 
51*d56f51eaSDavid van Moolenbroek #elif defined(__GNUC__)
52*d56f51eaSDavid van Moolenbroek   #define CALLBACK(foo)   WORD foo __attribute__((stdcall))
53*d56f51eaSDavid van Moolenbroek   #define PAS_PTR(x,arg)  typedef WORD (*x) arg __attribute__((stdcall))
54*d56f51eaSDavid van Moolenbroek   #define GUARD()         __asm__ __volatile__ ("pushfd; cli")
55*d56f51eaSDavid van Moolenbroek   #define UNGUARD()       __asm__ __volatile__ ("popfd")
56*d56f51eaSDavid van Moolenbroek   #define FAR
57*d56f51eaSDavid van Moolenbroek 
58*d56f51eaSDavid van Moolenbroek #elif defined (__TURBOC__)
59*d56f51eaSDavid van Moolenbroek   #define CALLBACK(foo)   WORD pascal foo
60*d56f51eaSDavid van Moolenbroek   #define PAS_PTR(x,arg)  typedef WORD pascal (_far *x) arg
61*d56f51eaSDavid van Moolenbroek   #define GUARD()         _asm { pushf; cli }
62*d56f51eaSDavid van Moolenbroek   #define UNGUARD()       _asm { popf }
63*d56f51eaSDavid van Moolenbroek   #define FAR             _far
64*d56f51eaSDavid van Moolenbroek 
65*d56f51eaSDavid van Moolenbroek #elif defined (__WATCOMC__)
66*d56f51eaSDavid van Moolenbroek   #define CALLBACK(foo)   WORD pascal foo
67*d56f51eaSDavid van Moolenbroek   #define PAS_PTR(x,arg)  typedef WORD pascal (_far *x) arg
68*d56f51eaSDavid van Moolenbroek   #define GUARD()         _disable()
69*d56f51eaSDavid van Moolenbroek   #define UNGUARD()       _enable()
70*d56f51eaSDavid van Moolenbroek   #define FAR             _far
71*d56f51eaSDavid van Moolenbroek 
72*d56f51eaSDavid van Moolenbroek #else
73*d56f51eaSDavid van Moolenbroek   #error Unsupported compiler
74*d56f51eaSDavid van Moolenbroek #endif
75*d56f51eaSDavid van Moolenbroek 
76*d56f51eaSDavid van Moolenbroek 
77*d56f51eaSDavid van Moolenbroek /*
78*d56f51eaSDavid van Moolenbroek  *  Forwards
79*d56f51eaSDavid van Moolenbroek  */
80*d56f51eaSDavid van Moolenbroek struct _ReqBlock;
81*d56f51eaSDavid van Moolenbroek struct _TxBufDescr;
82*d56f51eaSDavid van Moolenbroek struct _TDBufDescr;
83*d56f51eaSDavid van Moolenbroek 
84*d56f51eaSDavid van Moolenbroek /*
85*d56f51eaSDavid van Moolenbroek  * Protocol Manager API
86*d56f51eaSDavid van Moolenbroek  */
87*d56f51eaSDavid van Moolenbroek PAS_PTR (ProtMan, (struct _ReqBlock FAR*, WORD));
88*d56f51eaSDavid van Moolenbroek 
89*d56f51eaSDavid van Moolenbroek /*
90*d56f51eaSDavid van Moolenbroek  * System request
91*d56f51eaSDavid van Moolenbroek  */
92*d56f51eaSDavid van Moolenbroek PAS_PTR (SystemRequest, (DWORD, DWORD, WORD, WORD, WORD));
93*d56f51eaSDavid van Moolenbroek 
94*d56f51eaSDavid van Moolenbroek /*
95*d56f51eaSDavid van Moolenbroek  * MAC API
96*d56f51eaSDavid van Moolenbroek  */
97*d56f51eaSDavid van Moolenbroek PAS_PTR (TransmitChain, (WORD, WORD, struct _TxBufDescr FAR*, WORD));
98*d56f51eaSDavid van Moolenbroek PAS_PTR (TransferData,  (WORD*,WORD, struct _TDBufDescr FAR*, WORD));
99*d56f51eaSDavid van Moolenbroek PAS_PTR (Request,       (WORD, WORD, WORD, DWORD, WORD, WORD));
100*d56f51eaSDavid van Moolenbroek PAS_PTR (ReceiveRelease,(WORD, WORD));
101*d56f51eaSDavid van Moolenbroek PAS_PTR (IndicationOn,  (WORD));
102*d56f51eaSDavid van Moolenbroek PAS_PTR (IndicationOff, (WORD));
103*d56f51eaSDavid van Moolenbroek 
104*d56f51eaSDavid van Moolenbroek 
105*d56f51eaSDavid van Moolenbroek typedef enum {
106*d56f51eaSDavid van Moolenbroek         HARDWARE_NOT_INSTALLED  = 0,
107*d56f51eaSDavid van Moolenbroek         HARDWARE_FAILED_DIAG    = 1,
108*d56f51eaSDavid van Moolenbroek         HARDWARE_FAILED_CONFIG  = 2,
109*d56f51eaSDavid van Moolenbroek         HARDWARE_HARD_FAULT     = 3,
110*d56f51eaSDavid van Moolenbroek         HARDWARE_SOFT_FAULT     = 4,
111*d56f51eaSDavid van Moolenbroek         HARDWARE_OK             = 7,
112*d56f51eaSDavid van Moolenbroek         HARDWARE_MASK           = 0x0007,
113*d56f51eaSDavid van Moolenbroek         MAC_BOUND               = 0x0008,
114*d56f51eaSDavid van Moolenbroek         MAC_OPEN                = 0x0010,
115*d56f51eaSDavid van Moolenbroek         DIAG_IN_PROGRESS        = 0x0020
116*d56f51eaSDavid van Moolenbroek       } NdisMacStatus;
117*d56f51eaSDavid van Moolenbroek 
118*d56f51eaSDavid van Moolenbroek typedef enum {
119*d56f51eaSDavid van Moolenbroek         STATUS_RING_STATUS      = 1,
120*d56f51eaSDavid van Moolenbroek         STATUS_ADAPTER_CHECK    = 2,
121*d56f51eaSDavid van Moolenbroek         STATUS_START_RESET      = 3,
122*d56f51eaSDavid van Moolenbroek         STATUS_INTERRUPT        = 4,
123*d56f51eaSDavid van Moolenbroek         STATUS_END_RESET        = 5
124*d56f51eaSDavid van Moolenbroek       } NdisStatus;
125*d56f51eaSDavid van Moolenbroek 
126*d56f51eaSDavid van Moolenbroek typedef enum {
127*d56f51eaSDavid van Moolenbroek         FILTER_DIRECTED         = 1,
128*d56f51eaSDavid van Moolenbroek         FILTER_BROADCAST        = 2,
129*d56f51eaSDavid van Moolenbroek         FILTER_PROMISCUOUS      = 4,
130*d56f51eaSDavid van Moolenbroek         FILTER_SOURCE_ROUTE     = 8
131*d56f51eaSDavid van Moolenbroek       } NdisPacketFilter;
132*d56f51eaSDavid van Moolenbroek 
133*d56f51eaSDavid van Moolenbroek typedef enum {
134*d56f51eaSDavid van Moolenbroek         REQ_INITIATE_DIAGNOSTICS     = 1,
135*d56f51eaSDavid van Moolenbroek         REQ_READ_ERROR_LOG           = 2,
136*d56f51eaSDavid van Moolenbroek         REQ_SET_STATION_ADDRESS      = 3,
137*d56f51eaSDavid van Moolenbroek         REQ_OPEN_ADAPTER             = 4,
138*d56f51eaSDavid van Moolenbroek         REQ_CLOSE_ADAPTER            = 5,
139*d56f51eaSDavid van Moolenbroek         REQ_RESET_MAC                = 6,
140*d56f51eaSDavid van Moolenbroek         REQ_SET_PACKET_FILTER        = 7,
141*d56f51eaSDavid van Moolenbroek         REQ_ADD_MULTICAST_ADDRESS    = 8,
142*d56f51eaSDavid van Moolenbroek         REQ_DELETE_MULTICAST_ADDRESS = 9,
143*d56f51eaSDavid van Moolenbroek         REQ_UPDATE_STATISTICS        = 10,
144*d56f51eaSDavid van Moolenbroek         REQ_CLEAR_STATISTICS         = 11,
145*d56f51eaSDavid van Moolenbroek         REQ_INTERRUPT_REQUEST        = 12,
146*d56f51eaSDavid van Moolenbroek         REQ_SET_FUNCTIONAL_ADDRESS   = 13,
147*d56f51eaSDavid van Moolenbroek         REQ_SET_LOOKAHEAD            = 14
148*d56f51eaSDavid van Moolenbroek       } NdisGeneralRequest;
149*d56f51eaSDavid van Moolenbroek 
150*d56f51eaSDavid van Moolenbroek typedef enum {
151*d56f51eaSDavid van Moolenbroek         SF_BROADCAST             = 0x00000001L,
152*d56f51eaSDavid van Moolenbroek         SF_MULTICAST             = 0x00000002L,
153*d56f51eaSDavid van Moolenbroek         SF_FUNCTIONAL            = 0x00000004L,
154*d56f51eaSDavid van Moolenbroek         SF_PROMISCUOUS           = 0x00000008L,
155*d56f51eaSDavid van Moolenbroek         SF_SOFT_ADDRESS          = 0x00000010L,
156*d56f51eaSDavid van Moolenbroek         SF_STATS_CURRENT         = 0x00000020L,
157*d56f51eaSDavid van Moolenbroek         SF_INITIATE_DIAGS        = 0x00000040L,
158*d56f51eaSDavid van Moolenbroek         SF_LOOPBACK              = 0x00000080L,
159*d56f51eaSDavid van Moolenbroek         SF_RECEIVE_CHAIN         = 0x00000100L,
160*d56f51eaSDavid van Moolenbroek         SF_SOURCE_ROUTING        = 0x00000200L,
161*d56f51eaSDavid van Moolenbroek         SF_RESET_MAC             = 0x00000400L,
162*d56f51eaSDavid van Moolenbroek         SF_OPEN_CLOSE            = 0x00000800L,
163*d56f51eaSDavid van Moolenbroek         SF_INTERRUPT_REQUEST     = 0x00001000L,
164*d56f51eaSDavid van Moolenbroek         SF_SOURCE_ROUTING_BRIDGE = 0x00002000L,
165*d56f51eaSDavid van Moolenbroek         SF_VIRTUAL_ADDRESSES     = 0x00004000L
166*d56f51eaSDavid van Moolenbroek       } NdisMacServiceFlags;
167*d56f51eaSDavid van Moolenbroek 
168*d56f51eaSDavid van Moolenbroek typedef enum {
169*d56f51eaSDavid van Moolenbroek         REQ_INITIATE_BIND        = 1,
170*d56f51eaSDavid van Moolenbroek         REQ_BIND                 = 2,
171*d56f51eaSDavid van Moolenbroek         REQ_INITIATE_PREBIND     = 3,
172*d56f51eaSDavid van Moolenbroek         REQ_INITIATE_UNBIND      = 4,
173*d56f51eaSDavid van Moolenbroek         REQ_UNBIND               = 5
174*d56f51eaSDavid van Moolenbroek       } NdisSysRequest;
175*d56f51eaSDavid van Moolenbroek 
176*d56f51eaSDavid van Moolenbroek typedef enum  {
177*d56f51eaSDavid van Moolenbroek         PM_GET_PROTOCOL_MANAGER_INFO      = 1,
178*d56f51eaSDavid van Moolenbroek         PM_REGISTER_MODULE                = 2,
179*d56f51eaSDavid van Moolenbroek         PM_BIND_AND_START                 = 3,
180*d56f51eaSDavid van Moolenbroek         PM_GET_PROTOCOL_MANAGER_LINKAGE   = 4,
181*d56f51eaSDavid van Moolenbroek         PM_GET_PROTOCOL_INI_PATH          = 5,
182*d56f51eaSDavid van Moolenbroek         PM_REGISTER_PROTOCOL_MANAGER_INFO = 6,
183*d56f51eaSDavid van Moolenbroek         PM_INIT_AND_REGISTER              = 7,
184*d56f51eaSDavid van Moolenbroek         PM_UNBIND_AND_STOP                = 8,
185*d56f51eaSDavid van Moolenbroek         PM_BIND_STATUS                    = 9,
186*d56f51eaSDavid van Moolenbroek         PM_REGISTER_STATUS                = 10
187*d56f51eaSDavid van Moolenbroek       } NdisProtManager;
188*d56f51eaSDavid van Moolenbroek 
189*d56f51eaSDavid van Moolenbroek 
190*d56f51eaSDavid van Moolenbroek typedef enum {
191*d56f51eaSDavid van Moolenbroek         ERR_SUCCESS                      = 0x00,
192*d56f51eaSDavid van Moolenbroek         ERR_WAIT_FOR_RELEASE             = 0x01,
193*d56f51eaSDavid van Moolenbroek         ERR_REQUEST_QUEUED               = 0x02,
194*d56f51eaSDavid van Moolenbroek         ERR_FRAME_NOT_RECOGNIZED         = 0x03,
195*d56f51eaSDavid van Moolenbroek         ERR_FRAME_REJECTED               = 0x04,
196*d56f51eaSDavid van Moolenbroek         ERR_FORWARD_FRAME                = 0x05,
197*d56f51eaSDavid van Moolenbroek         ERR_OUT_OF_RESOURCE              = 0x06,
198*d56f51eaSDavid van Moolenbroek         ERR_INVALID_PARAMETER            = 0x07,
199*d56f51eaSDavid van Moolenbroek         ERR_INVALID_FUNCTION             = 0x08,
200*d56f51eaSDavid van Moolenbroek         ERR_NOT_SUPPORTED                = 0x09,
201*d56f51eaSDavid van Moolenbroek         ERR_HARDWARE_ERROR               = 0x0A,
202*d56f51eaSDavid van Moolenbroek         ERR_TRANSMIT_ERROR               = 0x0B,
203*d56f51eaSDavid van Moolenbroek         ERR_NO_SUCH_DESTINATION          = 0x0C,
204*d56f51eaSDavid van Moolenbroek         ERR_BUFFER_TOO_SMALL             = 0x0D,
205*d56f51eaSDavid van Moolenbroek         ERR_ALREADY_STARTED              = 0x20,
206*d56f51eaSDavid van Moolenbroek         ERR_INCOMPLETE_BINDING           = 0x21,
207*d56f51eaSDavid van Moolenbroek         ERR_DRIVER_NOT_INITIALIZED       = 0x22,
208*d56f51eaSDavid van Moolenbroek         ERR_HARDWARE_NOT_FOUND           = 0x23,
209*d56f51eaSDavid van Moolenbroek         ERR_HARDWARE_FAILURE             = 0x24,
210*d56f51eaSDavid van Moolenbroek         ERR_CONFIGURATION_FAILURE        = 0x25,
211*d56f51eaSDavid van Moolenbroek         ERR_INTERRUPT_CONFLICT           = 0x26,
212*d56f51eaSDavid van Moolenbroek         ERR_INCOMPATIBLE_MAC             = 0x27,
213*d56f51eaSDavid van Moolenbroek         ERR_INITIALIZATION_FAILED        = 0x28,
214*d56f51eaSDavid van Moolenbroek         ERR_NO_BINDING                   = 0x29,
215*d56f51eaSDavid van Moolenbroek         ERR_NETWORK_MAY_NOT_BE_CONNECTED = 0x2A,
216*d56f51eaSDavid van Moolenbroek         ERR_INCOMPATIBLE_OS_VERSION      = 0x2B,
217*d56f51eaSDavid van Moolenbroek         ERR_ALREADY_REGISTERED           = 0x2C,
218*d56f51eaSDavid van Moolenbroek         ERR_PATH_NOT_FOUND               = 0x2D,
219*d56f51eaSDavid van Moolenbroek         ERR_INSUFFICIENT_MEMORY          = 0x2E,
220*d56f51eaSDavid van Moolenbroek         ERR_INFO_NOT_FOUND               = 0x2F,
221*d56f51eaSDavid van Moolenbroek         ERR_GENERAL_FAILURE              = 0xFF
222*d56f51eaSDavid van Moolenbroek       } NdisError;
223*d56f51eaSDavid van Moolenbroek 
224*d56f51eaSDavid van Moolenbroek #define NDIS_PARAM_INTEGER   0
225*d56f51eaSDavid van Moolenbroek #define NDIS_PARAM_STRING    1
226*d56f51eaSDavid van Moolenbroek 
227*d56f51eaSDavid van Moolenbroek #define NDIS_TX_BUF_LENGTH   8
228*d56f51eaSDavid van Moolenbroek #define NDIS_TD_BUF_LENGTH   1
229*d56f51eaSDavid van Moolenbroek #define NDIS_RX_BUF_LENGTH   8
230*d56f51eaSDavid van Moolenbroek 
231*d56f51eaSDavid van Moolenbroek #define NDIS_PTR_PHYSICAL    0
232*d56f51eaSDavid van Moolenbroek #define NDIS_PTR_VIRTUAL     2
233*d56f51eaSDavid van Moolenbroek 
234*d56f51eaSDavid van Moolenbroek #define NDIS_PATH    "PROTMAN$"
235*d56f51eaSDavid van Moolenbroek 
236*d56f51eaSDavid van Moolenbroek 
237*d56f51eaSDavid van Moolenbroek typedef struct _CommonChars {
238*d56f51eaSDavid van Moolenbroek         WORD  tableSize;
239*d56f51eaSDavid van Moolenbroek         BYTE  majorNdisVersion;        /* 2 - Latest version */
240*d56f51eaSDavid van Moolenbroek         BYTE  minorNdisVersion;        /* 0                  */
241*d56f51eaSDavid van Moolenbroek         WORD  reserved1;
242*d56f51eaSDavid van Moolenbroek         BYTE  majorModuleVersion;
243*d56f51eaSDavid van Moolenbroek         BYTE  minorModuleVersion;
244*d56f51eaSDavid van Moolenbroek         DWORD moduleFlags;
245*d56f51eaSDavid van Moolenbroek         /* 0 - Binding at upper boundary supported
246*d56f51eaSDavid van Moolenbroek          * 1 - Binding at lower boundary supported
247*d56f51eaSDavid van Moolenbroek          * 2 - Dynamically bound.
248*d56f51eaSDavid van Moolenbroek          * 3-31 - Reserved, must be zero.
249*d56f51eaSDavid van Moolenbroek          */
250*d56f51eaSDavid van Moolenbroek         BYTE  moduleName[16];
251*d56f51eaSDavid van Moolenbroek         BYTE  protocolLevelUpper;
252*d56f51eaSDavid van Moolenbroek         /* 1 - MAC
253*d56f51eaSDavid van Moolenbroek          * 2 - Data Link
254*d56f51eaSDavid van Moolenbroek          * 3 - Network
255*d56f51eaSDavid van Moolenbroek          * 4 - Transport
256*d56f51eaSDavid van Moolenbroek          * 5 - Session
257*d56f51eaSDavid van Moolenbroek          * -1 - Not specified
258*d56f51eaSDavid van Moolenbroek          */
259*d56f51eaSDavid van Moolenbroek         BYTE  interfaceUpper;
260*d56f51eaSDavid van Moolenbroek         BYTE  protocolLevelLower;
261*d56f51eaSDavid van Moolenbroek         /* 0 - Physical
262*d56f51eaSDavid van Moolenbroek          * 1 - MAC
263*d56f51eaSDavid van Moolenbroek          * 2 - Data Link
264*d56f51eaSDavid van Moolenbroek          * 3 - Network
265*d56f51eaSDavid van Moolenbroek          * 4 - Transport
266*d56f51eaSDavid van Moolenbroek          * 5 - Session
267*d56f51eaSDavid van Moolenbroek          * -1 - Not specified
268*d56f51eaSDavid van Moolenbroek          */
269*d56f51eaSDavid van Moolenbroek         BYTE  interfaceLower;
270*d56f51eaSDavid van Moolenbroek         WORD  moduleId;
271*d56f51eaSDavid van Moolenbroek         WORD  moduleDS;
272*d56f51eaSDavid van Moolenbroek         SystemRequest systemRequest;
273*d56f51eaSDavid van Moolenbroek         BYTE *serviceChars;
274*d56f51eaSDavid van Moolenbroek         BYTE *serviceStatus;
275*d56f51eaSDavid van Moolenbroek         BYTE *upperDispatchTable;
276*d56f51eaSDavid van Moolenbroek         BYTE *lowerDispatchTable;
277*d56f51eaSDavid van Moolenbroek         BYTE *reserved2;            /* Must be NULL */
278*d56f51eaSDavid van Moolenbroek         BYTE *reserved3;            /* Must be NULL */
279*d56f51eaSDavid van Moolenbroek       } CommonChars;
280*d56f51eaSDavid van Moolenbroek 
281*d56f51eaSDavid van Moolenbroek 
282*d56f51eaSDavid van Moolenbroek typedef struct _MulticastList {
283*d56f51eaSDavid van Moolenbroek         WORD   maxMulticastAddresses;
284*d56f51eaSDavid van Moolenbroek         WORD   numberMulticastAddresses;
285*d56f51eaSDavid van Moolenbroek         BYTE   multicastAddress[16][16];
286*d56f51eaSDavid van Moolenbroek       } MulticastList;
287*d56f51eaSDavid van Moolenbroek 
288*d56f51eaSDavid van Moolenbroek 
289*d56f51eaSDavid van Moolenbroek typedef struct _MacChars {
290*d56f51eaSDavid van Moolenbroek         WORD   tableSize;
291*d56f51eaSDavid van Moolenbroek         BYTE   macName[16];
292*d56f51eaSDavid van Moolenbroek         WORD   addressLength;
293*d56f51eaSDavid van Moolenbroek         BYTE   permanentAddress[16];
294*d56f51eaSDavid van Moolenbroek         BYTE   currentAddress[16];
295*d56f51eaSDavid van Moolenbroek         DWORD  currentFunctionalAddress;
296*d56f51eaSDavid van Moolenbroek         MulticastList *multicastList;
297*d56f51eaSDavid van Moolenbroek         DWORD  linkSpeed;
298*d56f51eaSDavid van Moolenbroek         DWORD  serviceFlags;
299*d56f51eaSDavid van Moolenbroek         WORD   maxFrameSize;
300*d56f51eaSDavid van Moolenbroek         DWORD  txBufferSize;
301*d56f51eaSDavid van Moolenbroek         WORD   txBufferAllocSize;
302*d56f51eaSDavid van Moolenbroek         DWORD  rxBufferSize;
303*d56f51eaSDavid van Moolenbroek         WORD   rxBufferAllocSize;
304*d56f51eaSDavid van Moolenbroek         BYTE   ieeeVendor[3];
305*d56f51eaSDavid van Moolenbroek         BYTE   vendorAdapter;
306*d56f51eaSDavid van Moolenbroek         BYTE  *vendorAdapterDescription;
307*d56f51eaSDavid van Moolenbroek         WORD   interruptLevel;
308*d56f51eaSDavid van Moolenbroek         WORD   txQueueDepth;
309*d56f51eaSDavid van Moolenbroek         WORD   maxDataBlocks;
310*d56f51eaSDavid van Moolenbroek       } MacChars;
311*d56f51eaSDavid van Moolenbroek 
312*d56f51eaSDavid van Moolenbroek 
313*d56f51eaSDavid van Moolenbroek typedef struct _ProtocolChars {
314*d56f51eaSDavid van Moolenbroek         WORD   length;
315*d56f51eaSDavid van Moolenbroek         BYTE   name[16];
316*d56f51eaSDavid van Moolenbroek         WORD   type;
317*d56f51eaSDavid van Moolenbroek       } ProtocolChars;
318*d56f51eaSDavid van Moolenbroek 
319*d56f51eaSDavid van Moolenbroek 
320*d56f51eaSDavid van Moolenbroek typedef struct _MacUpperDispatch {
321*d56f51eaSDavid van Moolenbroek         CommonChars      *backPointer;
322*d56f51eaSDavid van Moolenbroek         Request           request;
323*d56f51eaSDavid van Moolenbroek         TransmitChain     transmitChain;
324*d56f51eaSDavid van Moolenbroek         TransferData      transferData;
325*d56f51eaSDavid van Moolenbroek         ReceiveRelease    receiveRelease;
326*d56f51eaSDavid van Moolenbroek         IndicationOn      indicationOn;
327*d56f51eaSDavid van Moolenbroek         IndicationOff     indicationOff;
328*d56f51eaSDavid van Moolenbroek       } MacUpperDispatch;
329*d56f51eaSDavid van Moolenbroek 
330*d56f51eaSDavid van Moolenbroek 
331*d56f51eaSDavid van Moolenbroek typedef struct _MacStatusTable {
332*d56f51eaSDavid van Moolenbroek         WORD   tableSize;
333*d56f51eaSDavid van Moolenbroek         DWORD  lastDiag;
334*d56f51eaSDavid van Moolenbroek         DWORD  macStatus;
335*d56f51eaSDavid van Moolenbroek         WORD   packetFilter;
336*d56f51eaSDavid van Moolenbroek         BYTE  *mediaSpecificStats;
337*d56f51eaSDavid van Moolenbroek         DWORD  lastClear;
338*d56f51eaSDavid van Moolenbroek         DWORD  totalFramesRx;
339*d56f51eaSDavid van Moolenbroek         DWORD  totalFramesCrc;
340*d56f51eaSDavid van Moolenbroek         DWORD  totalBytesRx;
341*d56f51eaSDavid van Moolenbroek         DWORD  totalDiscardBufSpaceRx;
342*d56f51eaSDavid van Moolenbroek         DWORD  totalMulticastRx;
343*d56f51eaSDavid van Moolenbroek         DWORD  totalBroadcastRx;
344*d56f51eaSDavid van Moolenbroek         DWORD  obsolete1[5];
345*d56f51eaSDavid van Moolenbroek         DWORD  totalDiscardHwErrorRx;
346*d56f51eaSDavid van Moolenbroek         DWORD  totalFramesTx;
347*d56f51eaSDavid van Moolenbroek         DWORD  totalBytesTx;
348*d56f51eaSDavid van Moolenbroek         DWORD  totalMulticastTx;
349*d56f51eaSDavid van Moolenbroek         DWORD  totalBroadcastTx;
350*d56f51eaSDavid van Moolenbroek         DWORD  obsolete2[2];
351*d56f51eaSDavid van Moolenbroek         DWORD  totalDiscardTimeoutTx;
352*d56f51eaSDavid van Moolenbroek         DWORD  totalDiscardHwErrorTx;
353*d56f51eaSDavid van Moolenbroek       } MacStatusTable;
354*d56f51eaSDavid van Moolenbroek 
355*d56f51eaSDavid van Moolenbroek 
356*d56f51eaSDavid van Moolenbroek typedef struct _ProtDispatch {
357*d56f51eaSDavid van Moolenbroek         CommonChars *backPointer;
358*d56f51eaSDavid van Moolenbroek         DWORD        flags;
359*d56f51eaSDavid van Moolenbroek         /* 0 - handles non-LLC frames
360*d56f51eaSDavid van Moolenbroek          * 1 - handles specific-LSAP LLC frames
361*d56f51eaSDavid van Moolenbroek          * 2 - handles specific-LSAP LLC frames
362*d56f51eaSDavid van Moolenbroek          * 3-31 - reserved must be 0
363*d56f51eaSDavid van Moolenbroek          */
364*d56f51eaSDavid van Moolenbroek         void  (*requestConfirm) (void);
365*d56f51eaSDavid van Moolenbroek         void  (*transmitConfirm) (void);
366*d56f51eaSDavid van Moolenbroek         void  (*receiveLookahead) (void);
367*d56f51eaSDavid van Moolenbroek         void  (*indicationComplete) (void);
368*d56f51eaSDavid van Moolenbroek         void  (*receiveChain) (void);
369*d56f51eaSDavid van Moolenbroek         void  (*status) (void);
370*d56f51eaSDavid van Moolenbroek       } ProtDispatch;
371*d56f51eaSDavid van Moolenbroek 
372*d56f51eaSDavid van Moolenbroek 
373*d56f51eaSDavid van Moolenbroek typedef struct _ReqBlock {
374*d56f51eaSDavid van Moolenbroek         WORD      opcode;
375*d56f51eaSDavid van Moolenbroek         WORD      status;
376*d56f51eaSDavid van Moolenbroek         BYTE FAR *pointer1;
377*d56f51eaSDavid van Moolenbroek         BYTE FAR *pointer2;
378*d56f51eaSDavid van Moolenbroek         WORD      word1;
379*d56f51eaSDavid van Moolenbroek       } ReqBlock;
380*d56f51eaSDavid van Moolenbroek 
381*d56f51eaSDavid van Moolenbroek 
382*d56f51eaSDavid van Moolenbroek typedef struct _TxBufDescrRec {
383*d56f51eaSDavid van Moolenbroek         BYTE   txPtrType;
384*d56f51eaSDavid van Moolenbroek         BYTE   dummy;
385*d56f51eaSDavid van Moolenbroek         WORD   txDataLen;
386*d56f51eaSDavid van Moolenbroek         BYTE  *txDataPtr;
387*d56f51eaSDavid van Moolenbroek       } TxBufDescrRec;
388*d56f51eaSDavid van Moolenbroek 
389*d56f51eaSDavid van Moolenbroek 
390*d56f51eaSDavid van Moolenbroek typedef struct _TxBufDescr {
391*d56f51eaSDavid van Moolenbroek         WORD          txImmedLen;
392*d56f51eaSDavid van Moolenbroek         BYTE         *txImmedPtr;
393*d56f51eaSDavid van Moolenbroek         WORD          txDataCount;
394*d56f51eaSDavid van Moolenbroek         TxBufDescrRec txBufDescrRec[NDIS_TX_BUF_LENGTH];
395*d56f51eaSDavid van Moolenbroek       } TxBufDescr;
396*d56f51eaSDavid van Moolenbroek 
397*d56f51eaSDavid van Moolenbroek 
398*d56f51eaSDavid van Moolenbroek typedef struct _TDBufDescrRec {
399*d56f51eaSDavid van Moolenbroek         BYTE   tDPtrType;
400*d56f51eaSDavid van Moolenbroek         BYTE   dummy;
401*d56f51eaSDavid van Moolenbroek         WORD   tDDataLen;
402*d56f51eaSDavid van Moolenbroek         BYTE  *tDDataPtr;
403*d56f51eaSDavid van Moolenbroek       } TDBufDescrRec;
404*d56f51eaSDavid van Moolenbroek 
405*d56f51eaSDavid van Moolenbroek 
406*d56f51eaSDavid van Moolenbroek typedef struct _TDBufDescr {
407*d56f51eaSDavid van Moolenbroek         WORD          tDDataCount;
408*d56f51eaSDavid van Moolenbroek         TDBufDescrRec tDBufDescrRec[NDIS_TD_BUF_LENGTH];
409*d56f51eaSDavid van Moolenbroek       } TDBufDescr;
410*d56f51eaSDavid van Moolenbroek 
411*d56f51eaSDavid van Moolenbroek 
412*d56f51eaSDavid van Moolenbroek typedef struct _RxBufDescrRec {
413*d56f51eaSDavid van Moolenbroek         WORD   rxDataLen;
414*d56f51eaSDavid van Moolenbroek         BYTE  *rxDataPtr;
415*d56f51eaSDavid van Moolenbroek       } RxBufDescrRec;
416*d56f51eaSDavid van Moolenbroek 
417*d56f51eaSDavid van Moolenbroek 
418*d56f51eaSDavid van Moolenbroek typedef struct _RxBufDescr {
419*d56f51eaSDavid van Moolenbroek         WORD          rxDataCount;
420*d56f51eaSDavid van Moolenbroek         RxBufDescrRec rxBufDescrRec[NDIS_RX_BUF_LENGTH];
421*d56f51eaSDavid van Moolenbroek       } RxBufDescr;
422*d56f51eaSDavid van Moolenbroek 
423*d56f51eaSDavid van Moolenbroek 
424*d56f51eaSDavid van Moolenbroek typedef struct _PktBuf {
425*d56f51eaSDavid van Moolenbroek 	struct _PktBuf *nextLink;
426*d56f51eaSDavid van Moolenbroek 	struct _PktBuf *prevLink;
427*d56f51eaSDavid van Moolenbroek         int    handle;
428*d56f51eaSDavid van Moolenbroek         int    length;
429*d56f51eaSDavid van Moolenbroek         int    packetLength;
430*d56f51eaSDavid van Moolenbroek         DWORD  sequence;
431*d56f51eaSDavid van Moolenbroek         BYTE  *buffer;
432*d56f51eaSDavid van Moolenbroek       } PktBuf;
433*d56f51eaSDavid van Moolenbroek 
434*d56f51eaSDavid van Moolenbroek 
435*d56f51eaSDavid van Moolenbroek typedef struct _CardHandle {
436*d56f51eaSDavid van Moolenbroek         BYTE         moduleName[16];
437*d56f51eaSDavid van Moolenbroek         CommonChars *common;
438*d56f51eaSDavid van Moolenbroek       } CardHandle;
439*d56f51eaSDavid van Moolenbroek 
440*d56f51eaSDavid van Moolenbroek 
441*d56f51eaSDavid van Moolenbroek typedef struct _BindingsList {
442*d56f51eaSDavid van Moolenbroek         WORD  numBindings;
443*d56f51eaSDavid van Moolenbroek         BYTE  moduleName[2][16];
444*d56f51eaSDavid van Moolenbroek       } BindingsList;
445*d56f51eaSDavid van Moolenbroek 
446*d56f51eaSDavid van Moolenbroek 
447*d56f51eaSDavid van Moolenbroek typedef struct _FailingModules {
448*d56f51eaSDavid van Moolenbroek         BYTE  upperModuleName[16];
449*d56f51eaSDavid van Moolenbroek         BYTE  lowerModuleName[16];
450*d56f51eaSDavid van Moolenbroek       } FailingModules;
451*d56f51eaSDavid van Moolenbroek 
452*d56f51eaSDavid van Moolenbroek 
453*d56f51eaSDavid van Moolenbroek typedef union _HardwareAddress {
454*d56f51eaSDavid van Moolenbroek         BYTE  bytes[6];
455*d56f51eaSDavid van Moolenbroek         WORD  words[3];
456*d56f51eaSDavid van Moolenbroek         struct {
457*d56f51eaSDavid van Moolenbroek           BYTE bytes[6];
458*d56f51eaSDavid van Moolenbroek         } addr;
459*d56f51eaSDavid van Moolenbroek       } HardwareAddress;
460*d56f51eaSDavid van Moolenbroek 
461*d56f51eaSDavid van Moolenbroek 
462*d56f51eaSDavid van Moolenbroek typedef struct _FddiHeader {
463*d56f51eaSDavid van Moolenbroek         BYTE             frameControl;
464*d56f51eaSDavid van Moolenbroek         HardwareAddress  etherDestHost;
465*d56f51eaSDavid van Moolenbroek         HardwareAddress  etherSrcHost;
466*d56f51eaSDavid van Moolenbroek       } FddiHeader;
467*d56f51eaSDavid van Moolenbroek 
468*d56f51eaSDavid van Moolenbroek 
469*d56f51eaSDavid van Moolenbroek typedef struct _EthernetIIHeader {
470*d56f51eaSDavid van Moolenbroek         HardwareAddress  etherDestHost;
471*d56f51eaSDavid van Moolenbroek         HardwareAddress  etherSrcHost;
472*d56f51eaSDavid van Moolenbroek         WORD             etherType;
473*d56f51eaSDavid van Moolenbroek       } EthernetIIHeader;
474*d56f51eaSDavid van Moolenbroek 
475*d56f51eaSDavid van Moolenbroek 
476*d56f51eaSDavid van Moolenbroek typedef struct _Ieee802Dot5Header {
477*d56f51eaSDavid van Moolenbroek         HardwareAddress  etherDestHost;
478*d56f51eaSDavid van Moolenbroek         HardwareAddress  etherSrcHost;
479*d56f51eaSDavid van Moolenbroek         BYTE             routeInfo[30];
480*d56f51eaSDavid van Moolenbroek       } Ieee802Dot5Header;
481*d56f51eaSDavid van Moolenbroek 
482*d56f51eaSDavid van Moolenbroek 
483*d56f51eaSDavid van Moolenbroek typedef struct _Ieee802Dot2SnapHeader {
484*d56f51eaSDavid van Moolenbroek         BYTE  dsap;                      /* 0xAA */
485*d56f51eaSDavid van Moolenbroek         BYTE  ssap;                      /* 0xAA */
486*d56f51eaSDavid van Moolenbroek         BYTE  control;                   /* 3    */
487*d56f51eaSDavid van Moolenbroek         BYTE protocolId[5];
488*d56f51eaSDavid van Moolenbroek       } Ieee802Dot2SnapHeader;
489*d56f51eaSDavid van Moolenbroek 
490*d56f51eaSDavid van Moolenbroek 
491*d56f51eaSDavid van Moolenbroek /*
492*d56f51eaSDavid van Moolenbroek  *  Prototypes
493*d56f51eaSDavid van Moolenbroek  */
494*d56f51eaSDavid van Moolenbroek extern char *NdisLastError        (void);
495*d56f51eaSDavid van Moolenbroek extern int   NdisOpen             (void);
496*d56f51eaSDavid van Moolenbroek extern int   NdisInit             (int promis);
497*d56f51eaSDavid van Moolenbroek extern int   NdisRegisterAndBind  (int promis);
498*d56f51eaSDavid van Moolenbroek extern void  NdisShutdown         (void);
499*d56f51eaSDavid van Moolenbroek extern void  NdisCheckMacFeatures (struct _CardHandle *card);
500*d56f51eaSDavid van Moolenbroek extern int   NdisSendPacket       (struct _PktBuf *pktBuf, int macId);
501*d56f51eaSDavid van Moolenbroek 
502*d56f51eaSDavid van Moolenbroek /*
503*d56f51eaSDavid van Moolenbroek  *  Assembly "glue" functions
504*d56f51eaSDavid van Moolenbroek  */
505*d56f51eaSDavid van Moolenbroek extern int systemRequestGlue();
506*d56f51eaSDavid van Moolenbroek extern int requestConfirmGlue();
507*d56f51eaSDavid van Moolenbroek extern int transmitConfirmGlue();
508*d56f51eaSDavid van Moolenbroek extern int receiveLookaheadGlue();
509*d56f51eaSDavid van Moolenbroek extern int indicationCompleteGlue();
510*d56f51eaSDavid van Moolenbroek extern int receiveChainGlue();
511*d56f51eaSDavid van Moolenbroek extern int statusGlue();
512*d56f51eaSDavid van Moolenbroek 
513*d56f51eaSDavid van Moolenbroek /*
514*d56f51eaSDavid van Moolenbroek  *  IOCTL function
515*d56f51eaSDavid van Moolenbroek  */
516*d56f51eaSDavid van Moolenbroek #ifdef __SMALL__
517*d56f51eaSDavid van Moolenbroek extern int _far NdisGetLinkage (int handle, char *data, int size);
518*d56f51eaSDavid van Moolenbroek #else
519*d56f51eaSDavid van Moolenbroek extern int NdisGetLinkage (int handle, char *data, int size);
520*d56f51eaSDavid van Moolenbroek #endif
521*d56f51eaSDavid van Moolenbroek 
522*d56f51eaSDavid van Moolenbroek /*
523*d56f51eaSDavid van Moolenbroek  *  NDIS callback handlers
524*d56f51eaSDavid van Moolenbroek  */
525*d56f51eaSDavid van Moolenbroek CALLBACK (NdisSystemRequest     (DWORD,DWORD, WORD, WORD, WORD));
526*d56f51eaSDavid van Moolenbroek CALLBACK (NdisRequestConfirm    ( WORD, WORD, WORD, WORD, WORD,WORD));
527*d56f51eaSDavid van Moolenbroek CALLBACK (NdisTransmitConfirm   ( WORD, WORD, WORD, WORD, WORD));
528*d56f51eaSDavid van Moolenbroek CALLBACK (NdisReceiveLookahead  ( WORD, WORD, WORD, BYTE*, BYTE*, WORD));
529*d56f51eaSDavid van Moolenbroek CALLBACK (NdisReceiveChain      ( WORD, WORD, WORD, struct _RxBufDescr*, BYTE*, WORD));
530*d56f51eaSDavid van Moolenbroek CALLBACK (NdisStatusProc        ( WORD, WORD, BYTE*, WORD,WORD));
531*d56f51eaSDavid van Moolenbroek CALLBACK (NdisIndicationComplete( WORD, WORD));
532*d56f51eaSDavid van Moolenbroek 
533*d56f51eaSDavid van Moolenbroek BYTE *NdisAllocStack (void);
534*d56f51eaSDavid van Moolenbroek void  NdisFreeStack  (BYTE*);
535*d56f51eaSDavid van Moolenbroek 
536*d56f51eaSDavid van Moolenbroek #ifdef __HIGHC__
537*d56f51eaSDavid van Moolenbroek   #define RENAME_ASM_SYM(x) pragma Alias(x,"@" #x "")  /* prepend `@' */
538*d56f51eaSDavid van Moolenbroek   #define RENAME_C_SYM(x)   pragma Alias(x,"_" #x "")  /* prepend `_' */
539*d56f51eaSDavid van Moolenbroek 
540*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (systemRequestGlue);
541*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (requestConfirmGlue);
542*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (transmitConfirmGlue);
543*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (receiveLookaheadGlue);
544*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (indicationCompleteGlue);
545*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (receiveChainGlue);
546*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (statusGlue);
547*d56f51eaSDavid van Moolenbroek   RENAME_ASM_SYM (NdisGetLinkage);
548*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisSystemRequest);
549*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisRequestConfirm);
550*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisTransmitConfirm);
551*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisReceiveLookahead);
552*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisIndicationComplete);
553*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisReceiveChain);
554*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisStatusProc);
555*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisAllocStack);
556*d56f51eaSDavid van Moolenbroek   RENAME_C_SYM   (NdisFreeStack);
557*d56f51eaSDavid van Moolenbroek #endif
558*d56f51eaSDavid van Moolenbroek 
559*d56f51eaSDavid van Moolenbroek #endif
560