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