2 * Internal details for libpcap on DOS.
3 * 32-bit targets: djgpp, Pharlap or DOS4GW.
10 #include <pc.h> /* simple non-conio kbhit */
16 typedef unsigned char BYTE;
17 typedef unsigned short WORD;
18 typedef unsigned long DWORD;
19 typedef BYTE ETHER[6];
21 #define ETH_ALEN sizeof(ETHER) /* Ether address length */
22 #define ETH_HLEN (2*ETH_ALEN+2) /* Ether header length */
25 #define ETH_MAX (ETH_MTU+ETH_HLEN)
52 typedef unsigned int UINT;
56 #if defined(__GNUC__) || defined(__HIGHC__)
57 typedef unsigned long long uint64;
58 typedef unsigned long long QWORD;
61 #if defined(__WATCOMC__)
62 typedef unsigned __int64 uint64;
63 typedef unsigned __int64 QWORD;
66 #define ARGSUSED(x) (void) x
68 #if defined (__SMALL__) || defined(__LARGE__)
72 #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
76 #define min(a,b) _min(a,b)
77 #define max(a,b) _max(a,b)
81 #define min(a,b) ((a) < (b) ? (a) : (b))
85 #define max(a,b) ((a) < (b) ? (b) : (a))
88 #if !defined(_U_) && defined(__GNUC__)
89 #define _U_ __attribute__((unused))
96 #if defined(USE_32BIT_DRIVERS)
97 #include "msdos/pm_drvr/lock.h"
99 #ifndef RECEIVE_QUEUE_SIZE
100 #define RECEIVE_QUEUE_SIZE 60
103 #ifndef RECEIVE_BUF_SIZE
104 #define RECEIVE_BUF_SIZE (ETH_MAX+20)
107 extern struct device el2_dev LOCKED_VAR; /* 3Com EtherLink II */
108 extern struct device el3_dev LOCKED_VAR; /* EtherLink III */
109 extern struct device tc59_dev LOCKED_VAR; /* 3Com Vortex Card (?) */
110 extern struct device tc515_dev LOCKED_VAR;
111 extern struct device tc90x_dev LOCKED_VAR;
112 extern struct device tc90bcx_dev LOCKED_VAR;
113 extern struct device wd_dev LOCKED_VAR;
114 extern struct device ne_dev LOCKED_VAR;
115 extern struct device acct_dev LOCKED_VAR;
116 extern struct device cs89_dev LOCKED_VAR;
117 extern struct device rtl8139_dev LOCKED_VAR;
120 volatile int in_index; /* queue index head */
121 int out_index; /* queue index tail */
122 int elem_size; /* size of each element */
123 int num_elem; /* number of elements */
124 char *buf_start; /* start of buffer pool */
128 DWORD size; /* size copied to this element */
129 BYTE data[ETH_MAX+10]; /* add some margin. data[0] should be */
130 }; /* dword aligned */
132 extern BYTE *get_rxbuf (int len) LOCKED_FUNC;
133 extern int peek_rxbuf (BYTE **buf);
134 extern int release_rxbuf (BYTE *buf);
142 const char *long_name;
143 DWORD base_addr; /* device I/O address */
144 int irq; /* device IRQ number */
145 int dma; /* DMA channel */
146 DWORD mem_start; /* shared mem start */
147 DWORD mem_end; /* shared mem end */
148 DWORD rmem_start; /* shmem "recv" start */
149 DWORD rmem_end; /* shared "recv" end */
151 struct device *next; /* next device in list */
153 /* interface service routines */
154 int (*probe)(struct device *dev);
155 int (*open) (struct device *dev);
156 void (*close)(struct device *dev);
157 int (*xmit) (struct device *dev, const void *buf, int len);
158 void *(*get_stats)(struct device *dev);
159 void (*set_multicast_list)(struct device *dev);
161 /* driver-to-pcap receive buffer routines */
162 int (*copy_rx_buf) (BYTE *buf, int max); /* rx-copy (pktdrvr only) */
163 BYTE *(*get_rx_buf) (int len); /* rx-buf fetch/enqueue */
164 int (*peek_rx_buf) (BYTE **buf); /* rx-non-copy at queue */
165 int (*release_rx_buf) (BYTE *buf); /* release after peek */
167 WORD flags; /* Low-level status flags. */
168 void *priv; /* private data */
172 * Network device statistics
174 typedef struct net_device_stats {
175 DWORD rx_packets; /* total packets received */
176 DWORD tx_packets; /* total packets transmitted */
177 DWORD rx_bytes; /* total bytes received */
178 DWORD tx_bytes; /* total bytes transmitted */
179 DWORD rx_errors; /* bad packets received */
180 DWORD tx_errors; /* packet transmit problems */
181 DWORD rx_dropped; /* no space in Rx buffers */
182 DWORD tx_dropped; /* no space available for Tx */
183 DWORD multicast; /* multicast packets received */
185 /* detailed rx_errors: */
186 DWORD rx_length_errors;
187 DWORD rx_over_errors; /* recv'r overrun error */
188 DWORD rx_osize_errors; /* recv'r over-size error */
189 DWORD rx_crc_errors; /* recv'd pkt with crc error */
190 DWORD rx_frame_errors; /* recv'd frame alignment error */
191 DWORD rx_fifo_errors; /* recv'r fifo overrun */
192 DWORD rx_missed_errors; /* recv'r missed packet */
194 /* detailed tx_errors */
195 DWORD tx_aborted_errors;
196 DWORD tx_carrier_errors;
197 DWORD tx_fifo_errors;
198 DWORD tx_heartbeat_errors;
199 DWORD tx_window_errors;
205 extern struct device *active_dev LOCKED_VAR;
206 extern const struct device *dev_base LOCKED_VAR;
207 extern struct device *probed_dev;
209 extern int pcap_pkt_debug;
211 extern void _w32_os_yield (void); /* Watt-32's misc.c */
214 #define PCAP_ASSERT(x) ((void)0)
217 void pcap_assert (const char *what, const char *file, unsigned line);
219 #define PCAP_ASSERT(x) do { \
221 pcap_assert (#x, __FILE__, __LINE__); \
225 #endif /* __PCAP_DOS_H */