xref: /minix3/external/bsd/libpcap/dist/pcap-dos.h (revision d56f51ea7d8b9045e5c8e2028422523d3f9a5840)
1*d56f51eaSDavid van Moolenbroek /*	$NetBSD: pcap-dos.h,v 1.3 2015/03/31 21:39:42 christos Exp $	*/
2*d56f51eaSDavid van Moolenbroek 
3*d56f51eaSDavid van Moolenbroek /*
4*d56f51eaSDavid van Moolenbroek  * Internal details for libpcap on DOS.
5*d56f51eaSDavid van Moolenbroek  * 32-bit targets: djgpp, Pharlap or DOS4GW.
6*d56f51eaSDavid van Moolenbroek  */
7*d56f51eaSDavid van Moolenbroek 
8*d56f51eaSDavid van Moolenbroek #ifndef __PCAP_DOS_H
9*d56f51eaSDavid van Moolenbroek #define __PCAP_DOS_H
10*d56f51eaSDavid van Moolenbroek 
11*d56f51eaSDavid van Moolenbroek #ifdef __DJGPP__
12*d56f51eaSDavid van Moolenbroek #include <pc.h>    /* simple non-conio kbhit */
13*d56f51eaSDavid van Moolenbroek #else
14*d56f51eaSDavid van Moolenbroek #include <conio.h>
15*d56f51eaSDavid van Moolenbroek #endif
16*d56f51eaSDavid van Moolenbroek 
17*d56f51eaSDavid van Moolenbroek typedef int            BOOL;
18*d56f51eaSDavid van Moolenbroek typedef unsigned char  BYTE;
19*d56f51eaSDavid van Moolenbroek typedef unsigned short WORD;
20*d56f51eaSDavid van Moolenbroek typedef unsigned long  DWORD;
21*d56f51eaSDavid van Moolenbroek typedef BYTE           ETHER[6];
22*d56f51eaSDavid van Moolenbroek 
23*d56f51eaSDavid van Moolenbroek #define ETH_ALEN       sizeof(ETHER)   /* Ether address length */
24*d56f51eaSDavid van Moolenbroek #define ETH_HLEN       (2*ETH_ALEN+2)  /* Ether header length  */
25*d56f51eaSDavid van Moolenbroek #define ETH_MTU        1500
26*d56f51eaSDavid van Moolenbroek #define ETH_MIN        60
27*d56f51eaSDavid van Moolenbroek #define ETH_MAX        (ETH_MTU+ETH_HLEN)
28*d56f51eaSDavid van Moolenbroek 
29*d56f51eaSDavid van Moolenbroek #ifndef TRUE
30*d56f51eaSDavid van Moolenbroek   #define TRUE   1
31*d56f51eaSDavid van Moolenbroek   #define FALSE  0
32*d56f51eaSDavid van Moolenbroek #endif
33*d56f51eaSDavid van Moolenbroek 
34*d56f51eaSDavid van Moolenbroek #define PHARLAP  1
35*d56f51eaSDavid van Moolenbroek #define DJGPP    2
36*d56f51eaSDavid van Moolenbroek #define DOS4GW   4
37*d56f51eaSDavid van Moolenbroek 
38*d56f51eaSDavid van Moolenbroek #ifdef __DJGPP__
39*d56f51eaSDavid van Moolenbroek   #undef  DOSX
40*d56f51eaSDavid van Moolenbroek   #define DOSX DJGPP
41*d56f51eaSDavid van Moolenbroek #endif
42*d56f51eaSDavid van Moolenbroek 
43*d56f51eaSDavid van Moolenbroek #ifdef __WATCOMC__
44*d56f51eaSDavid van Moolenbroek   #undef  DOSX
45*d56f51eaSDavid van Moolenbroek   #define DOSX DOS4GW
46*d56f51eaSDavid van Moolenbroek #endif
47*d56f51eaSDavid van Moolenbroek 
48*d56f51eaSDavid van Moolenbroek #ifdef __HIGHC__
49*d56f51eaSDavid van Moolenbroek   #include <pharlap.h>
50*d56f51eaSDavid van Moolenbroek   #undef  DOSX
51*d56f51eaSDavid van Moolenbroek   #define DOSX PHARLAP
52*d56f51eaSDavid van Moolenbroek   #define inline
53*d56f51eaSDavid van Moolenbroek #else
54*d56f51eaSDavid van Moolenbroek   typedef unsigned int UINT;
55*d56f51eaSDavid van Moolenbroek #endif
56*d56f51eaSDavid van Moolenbroek 
57*d56f51eaSDavid van Moolenbroek 
58*d56f51eaSDavid van Moolenbroek #if defined(__GNUC__) || defined(__HIGHC__)
59*d56f51eaSDavid van Moolenbroek   typedef unsigned long long  uint64;
60*d56f51eaSDavid van Moolenbroek   typedef unsigned long long  QWORD;
61*d56f51eaSDavid van Moolenbroek #endif
62*d56f51eaSDavid van Moolenbroek 
63*d56f51eaSDavid van Moolenbroek #if defined(__WATCOMC__)
64*d56f51eaSDavid van Moolenbroek   typedef unsigned __int64  uint64;
65*d56f51eaSDavid van Moolenbroek   typedef unsigned __int64  QWORD;
66*d56f51eaSDavid van Moolenbroek #endif
67*d56f51eaSDavid van Moolenbroek 
68*d56f51eaSDavid van Moolenbroek #define ARGSUSED(x)  (void) x
69*d56f51eaSDavid van Moolenbroek 
70*d56f51eaSDavid van Moolenbroek #if defined (__SMALL__) || defined(__LARGE__)
71*d56f51eaSDavid van Moolenbroek   #define DOSX 0
72*d56f51eaSDavid van Moolenbroek 
73*d56f51eaSDavid van Moolenbroek #elif !defined(DOSX)
74*d56f51eaSDavid van Moolenbroek   #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
75*d56f51eaSDavid van Moolenbroek #endif
76*d56f51eaSDavid van Moolenbroek 
77*d56f51eaSDavid van Moolenbroek #ifdef __HIGHC__
78*d56f51eaSDavid van Moolenbroek #define min(a,b) _min(a,b)
79*d56f51eaSDavid van Moolenbroek #define max(a,b) _max(a,b)
80*d56f51eaSDavid van Moolenbroek #endif
81*d56f51eaSDavid van Moolenbroek 
82*d56f51eaSDavid van Moolenbroek #ifndef min
83*d56f51eaSDavid van Moolenbroek #define min(a,b) ((a) < (b) ? (a) : (b))
84*d56f51eaSDavid van Moolenbroek #endif
85*d56f51eaSDavid van Moolenbroek 
86*d56f51eaSDavid van Moolenbroek #ifndef max
87*d56f51eaSDavid van Moolenbroek #define max(a,b) ((a) < (b) ? (b) : (a))
88*d56f51eaSDavid van Moolenbroek #endif
89*d56f51eaSDavid van Moolenbroek 
90*d56f51eaSDavid van Moolenbroek #if !defined(_U_) && defined(__GNUC__)
91*d56f51eaSDavid van Moolenbroek #define _U_  __attribute__((unused))
92*d56f51eaSDavid van Moolenbroek #endif
93*d56f51eaSDavid van Moolenbroek 
94*d56f51eaSDavid van Moolenbroek #ifndef _U_
95*d56f51eaSDavid van Moolenbroek #define _U_
96*d56f51eaSDavid van Moolenbroek #endif
97*d56f51eaSDavid van Moolenbroek 
98*d56f51eaSDavid van Moolenbroek #if defined(USE_32BIT_DRIVERS)
99*d56f51eaSDavid van Moolenbroek   #include "msdos/pm_drvr/lock.h"
100*d56f51eaSDavid van Moolenbroek 
101*d56f51eaSDavid van Moolenbroek   #ifndef RECEIVE_QUEUE_SIZE
102*d56f51eaSDavid van Moolenbroek   #define RECEIVE_QUEUE_SIZE  60
103*d56f51eaSDavid van Moolenbroek   #endif
104*d56f51eaSDavid van Moolenbroek 
105*d56f51eaSDavid van Moolenbroek   #ifndef RECEIVE_BUF_SIZE
106*d56f51eaSDavid van Moolenbroek   #define RECEIVE_BUF_SIZE   (ETH_MAX+20)
107*d56f51eaSDavid van Moolenbroek   #endif
108*d56f51eaSDavid van Moolenbroek 
109*d56f51eaSDavid van Moolenbroek   extern struct device el2_dev     LOCKED_VAR;  /* 3Com EtherLink II */
110*d56f51eaSDavid van Moolenbroek   extern struct device el3_dev     LOCKED_VAR;  /*      EtherLink III */
111*d56f51eaSDavid van Moolenbroek   extern struct device tc59_dev    LOCKED_VAR;  /* 3Com Vortex Card (?) */
112*d56f51eaSDavid van Moolenbroek   extern struct device tc515_dev   LOCKED_VAR;
113*d56f51eaSDavid van Moolenbroek   extern struct device tc90x_dev   LOCKED_VAR;
114*d56f51eaSDavid van Moolenbroek   extern struct device tc90bcx_dev LOCKED_VAR;
115*d56f51eaSDavid van Moolenbroek   extern struct device wd_dev      LOCKED_VAR;
116*d56f51eaSDavid van Moolenbroek   extern struct device ne_dev      LOCKED_VAR;
117*d56f51eaSDavid van Moolenbroek   extern struct device acct_dev    LOCKED_VAR;
118*d56f51eaSDavid van Moolenbroek   extern struct device cs89_dev    LOCKED_VAR;
119*d56f51eaSDavid van Moolenbroek   extern struct device rtl8139_dev LOCKED_VAR;
120*d56f51eaSDavid van Moolenbroek 
121*d56f51eaSDavid van Moolenbroek   struct rx_ringbuf {
122*d56f51eaSDavid van Moolenbroek          volatile int in_index;   /* queue index head */
123*d56f51eaSDavid van Moolenbroek          int          out_index;  /* queue index tail */
124*d56f51eaSDavid van Moolenbroek          int          elem_size;  /* size of each element */
125*d56f51eaSDavid van Moolenbroek          int          num_elem;   /* number of elements */
126*d56f51eaSDavid van Moolenbroek          char        *buf_start;  /* start of buffer pool */
127*d56f51eaSDavid van Moolenbroek        };
128*d56f51eaSDavid van Moolenbroek 
129*d56f51eaSDavid van Moolenbroek   struct rx_elem {
130*d56f51eaSDavid van Moolenbroek          DWORD size;              /* size copied to this element */
131*d56f51eaSDavid van Moolenbroek          BYTE  data[ETH_MAX+10];  /* add some margin. data[0] should be */
132*d56f51eaSDavid van Moolenbroek        };                         /* dword aligned */
133*d56f51eaSDavid van Moolenbroek 
134*d56f51eaSDavid van Moolenbroek   extern BYTE *get_rxbuf     (int len) LOCKED_FUNC;
135*d56f51eaSDavid van Moolenbroek   extern int   peek_rxbuf    (BYTE **buf);
136*d56f51eaSDavid van Moolenbroek   extern int   release_rxbuf (BYTE  *buf);
137*d56f51eaSDavid van Moolenbroek 
138*d56f51eaSDavid van Moolenbroek #else
139*d56f51eaSDavid van Moolenbroek   #define LOCKED_VAR
140*d56f51eaSDavid van Moolenbroek   #define LOCKED_FUNC
141*d56f51eaSDavid van Moolenbroek 
142*d56f51eaSDavid van Moolenbroek   struct device {
143*d56f51eaSDavid van Moolenbroek          const char *name;
144*d56f51eaSDavid van Moolenbroek          const char *long_name;
145*d56f51eaSDavid van Moolenbroek          DWORD  base_addr;      /* device I/O address       */
146*d56f51eaSDavid van Moolenbroek          int    irq;            /* device IRQ number        */
147*d56f51eaSDavid van Moolenbroek          int    dma;            /* DMA channel              */
148*d56f51eaSDavid van Moolenbroek          DWORD  mem_start;      /* shared mem start         */
149*d56f51eaSDavid van Moolenbroek          DWORD  mem_end;        /* shared mem end           */
150*d56f51eaSDavid van Moolenbroek          DWORD  rmem_start;     /* shmem "recv" start       */
151*d56f51eaSDavid van Moolenbroek          DWORD  rmem_end;       /* shared "recv" end        */
152*d56f51eaSDavid van Moolenbroek 
153*d56f51eaSDavid van Moolenbroek          struct device *next;   /* next device in list      */
154*d56f51eaSDavid van Moolenbroek 
155*d56f51eaSDavid van Moolenbroek          /* interface service routines */
156*d56f51eaSDavid van Moolenbroek          int   (*probe)(struct device *dev);
157*d56f51eaSDavid van Moolenbroek          int   (*open) (struct device *dev);
158*d56f51eaSDavid van Moolenbroek          void  (*close)(struct device *dev);
159*d56f51eaSDavid van Moolenbroek          int   (*xmit) (struct device *dev, const void *buf, int len);
160*d56f51eaSDavid van Moolenbroek          void *(*get_stats)(struct device *dev);
161*d56f51eaSDavid van Moolenbroek          void  (*set_multicast_list)(struct device *dev);
162*d56f51eaSDavid van Moolenbroek 
163*d56f51eaSDavid van Moolenbroek          /* driver-to-pcap receive buffer routines */
164*d56f51eaSDavid van Moolenbroek          int   (*copy_rx_buf) (BYTE *buf, int max); /* rx-copy (pktdrvr only) */
165*d56f51eaSDavid van Moolenbroek          BYTE *(*get_rx_buf) (int len);             /* rx-buf fetch/enqueue */
166*d56f51eaSDavid van Moolenbroek          int   (*peek_rx_buf) (BYTE **buf);         /* rx-non-copy at queue */
167*d56f51eaSDavid van Moolenbroek          int   (*release_rx_buf) (BYTE *buf);       /* release after peek */
168*d56f51eaSDavid van Moolenbroek 
169*d56f51eaSDavid van Moolenbroek          WORD   flags;          /* Low-level status flags. */
170*d56f51eaSDavid van Moolenbroek          void  *priv;           /* private data */
171*d56f51eaSDavid van Moolenbroek        };
172*d56f51eaSDavid van Moolenbroek 
173*d56f51eaSDavid van Moolenbroek   /*
174*d56f51eaSDavid van Moolenbroek    * Network device statistics
175*d56f51eaSDavid van Moolenbroek    */
176*d56f51eaSDavid van Moolenbroek   typedef struct net_device_stats {
177*d56f51eaSDavid van Moolenbroek           DWORD  rx_packets;            /* total packets received       */
178*d56f51eaSDavid van Moolenbroek           DWORD  tx_packets;            /* total packets transmitted    */
179*d56f51eaSDavid van Moolenbroek           DWORD  rx_bytes;              /* total bytes received         */
180*d56f51eaSDavid van Moolenbroek           DWORD  tx_bytes;              /* total bytes transmitted      */
181*d56f51eaSDavid van Moolenbroek           DWORD  rx_errors;             /* bad packets received         */
182*d56f51eaSDavid van Moolenbroek           DWORD  tx_errors;             /* packet transmit problems     */
183*d56f51eaSDavid van Moolenbroek           DWORD  rx_dropped;            /* no space in Rx buffers       */
184*d56f51eaSDavid van Moolenbroek           DWORD  tx_dropped;            /* no space available for Tx    */
185*d56f51eaSDavid van Moolenbroek           DWORD  multicast;             /* multicast packets received   */
186*d56f51eaSDavid van Moolenbroek 
187*d56f51eaSDavid van Moolenbroek           /* detailed rx_errors: */
188*d56f51eaSDavid van Moolenbroek           DWORD  rx_length_errors;
189*d56f51eaSDavid van Moolenbroek           DWORD  rx_over_errors;        /* recv'r overrun error         */
190*d56f51eaSDavid van Moolenbroek           DWORD  rx_osize_errors;       /* recv'r over-size error       */
191*d56f51eaSDavid van Moolenbroek           DWORD  rx_crc_errors;         /* recv'd pkt with crc error    */
192*d56f51eaSDavid van Moolenbroek           DWORD  rx_frame_errors;       /* recv'd frame alignment error */
193*d56f51eaSDavid van Moolenbroek           DWORD  rx_fifo_errors;        /* recv'r fifo overrun          */
194*d56f51eaSDavid van Moolenbroek           DWORD  rx_missed_errors;      /* recv'r missed packet         */
195*d56f51eaSDavid van Moolenbroek 
196*d56f51eaSDavid van Moolenbroek           /* detailed tx_errors */
197*d56f51eaSDavid van Moolenbroek           DWORD  tx_aborted_errors;
198*d56f51eaSDavid van Moolenbroek           DWORD  tx_carrier_errors;
199*d56f51eaSDavid van Moolenbroek           DWORD  tx_fifo_errors;
200*d56f51eaSDavid van Moolenbroek           DWORD  tx_heartbeat_errors;
201*d56f51eaSDavid van Moolenbroek           DWORD  tx_window_errors;
202*d56f51eaSDavid van Moolenbroek           DWORD  tx_collisions;
203*d56f51eaSDavid van Moolenbroek           DWORD  tx_jabbers;
204*d56f51eaSDavid van Moolenbroek         } NET_STATS;
205*d56f51eaSDavid van Moolenbroek #endif
206*d56f51eaSDavid van Moolenbroek 
207*d56f51eaSDavid van Moolenbroek extern struct device       *active_dev  LOCKED_VAR;
208*d56f51eaSDavid van Moolenbroek extern const struct device *dev_base    LOCKED_VAR;
209*d56f51eaSDavid van Moolenbroek extern struct device       *probed_dev;
210*d56f51eaSDavid van Moolenbroek 
211*d56f51eaSDavid van Moolenbroek extern int pcap_pkt_debug;
212*d56f51eaSDavid van Moolenbroek 
213*d56f51eaSDavid van Moolenbroek extern void _w32_os_yield (void); /* Watt-32's misc.c */
214*d56f51eaSDavid van Moolenbroek 
215*d56f51eaSDavid van Moolenbroek #ifdef NDEBUG
216*d56f51eaSDavid van Moolenbroek   #define PCAP_ASSERT(x) ((void)0)
217*d56f51eaSDavid van Moolenbroek 
218*d56f51eaSDavid van Moolenbroek #else
219*d56f51eaSDavid van Moolenbroek   void pcap_assert (const char *what, const char *file, unsigned line);
220*d56f51eaSDavid van Moolenbroek 
221*d56f51eaSDavid van Moolenbroek   #define PCAP_ASSERT(x) do { \
222*d56f51eaSDavid van Moolenbroek                            if (!(x)) \
223*d56f51eaSDavid van Moolenbroek                               pcap_assert (#x, __FILE__, __LINE__); \
224*d56f51eaSDavid van Moolenbroek                          } while (0)
225*d56f51eaSDavid van Moolenbroek #endif
226*d56f51eaSDavid van Moolenbroek 
227*d56f51eaSDavid van Moolenbroek #endif  /* __PCAP_DOS_H */
228