2 * Internal details for libpcap on DOS.
3 * 32-bit targets: djgpp, Pharlap or DOS4GW.
5 * @(#) $Header: /pub/NetBSD/misc/repositories/cvsroot/src/dist/libpcap/pcap-dos.h,v 1.1.1.1 2006/02/27 15:45:48 drochner Exp $ (LBL)
12 #include <pc.h> /* simple non-conio kbhit */
18 typedef unsigned char BYTE
;
19 typedef unsigned short WORD
;
20 typedef unsigned long DWORD
;
21 typedef BYTE ETHER
[6];
23 #define ETH_ALEN sizeof(ETHER) /* Ether address length */
24 #define ETH_HLEN (2*ETH_ALEN+2) /* Ether header length */
27 #define ETH_MAX (ETH_MTU+ETH_HLEN)
54 typedef unsigned int UINT
;
58 #if defined(__GNUC__) || defined(__HIGHC__)
59 typedef unsigned long long uint64
;
60 typedef unsigned long long QWORD
;
63 #if defined(__WATCOMC__)
64 typedef unsigned __int64 uint64
;
65 typedef unsigned __int64 QWORD
;
68 #define ARGSUSED(x) (void) x
70 #if defined (__SMALL__) || defined(__LARGE__)
74 #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
78 #define min(a,b) _min(a,b)
79 #define max(a,b) _max(a,b)
83 #define min(a,b) ((a) < (b) ? (a) : (b))
87 #define max(a,b) ((a) < (b) ? (b) : (a))
90 #if !defined(_U_) && defined(__GNUC__)
91 #define _U_ __attribute__((unused))
98 #if defined(USE_32BIT_DRIVERS)
99 #include "msdos/pm_drvr/lock.h"
101 #ifndef RECEIVE_QUEUE_SIZE
102 #define RECEIVE_QUEUE_SIZE 60
105 #ifndef RECEIVE_BUF_SIZE
106 #define RECEIVE_BUF_SIZE (ETH_MAX+20)
109 extern struct device el2_dev LOCKED_VAR
; /* 3Com EtherLink II */
110 extern struct device el3_dev LOCKED_VAR
; /* EtherLink III */
111 extern struct device tc59_dev LOCKED_VAR
; /* 3Com Vortex Card (?) */
112 extern struct device tc515_dev LOCKED_VAR
;
113 extern struct device tc90x_dev LOCKED_VAR
;
114 extern struct device tc90bcx_dev LOCKED_VAR
;
115 extern struct device wd_dev LOCKED_VAR
;
116 extern struct device ne_dev LOCKED_VAR
;
117 extern struct device acct_dev LOCKED_VAR
;
118 extern struct device cs89_dev LOCKED_VAR
;
119 extern struct device rtl8139_dev LOCKED_VAR
;
122 volatile int in_index
; /* queue index head */
123 int out_index
; /* queue index tail */
124 int elem_size
; /* size of each element */
125 int num_elem
; /* number of elements */
126 char *buf_start
; /* start of buffer pool */
130 DWORD size
; /* size copied to this element */
131 BYTE data
[ETH_MAX
+10]; /* add some margin. data[0] should be */
132 }; /* dword aligned */
134 extern BYTE
*get_rxbuf (int len
) LOCKED_FUNC
;
135 extern int peek_rxbuf (BYTE
**buf
);
136 extern int release_rxbuf (BYTE
*buf
);
144 const char *long_name
;
145 DWORD base_addr
; /* device I/O address */
146 int irq
; /* device IRQ number */
147 int dma
; /* DMA channel */
148 DWORD mem_start
; /* shared mem start */
149 DWORD mem_end
; /* shared mem end */
150 DWORD rmem_start
; /* shmem "recv" start */
151 DWORD rmem_end
; /* shared "recv" end */
153 struct device
*next
; /* next device in list */
155 /* interface service routines */
156 int (*probe
)(struct device
*dev
);
157 int (*open
) (struct device
*dev
);
158 void (*close
)(struct device
*dev
);
159 int (*xmit
) (struct device
*dev
, const void *buf
, int len
);
160 void *(*get_stats
)(struct device
*dev
);
161 void (*set_multicast_list
)(struct device
*dev
);
163 /* driver-to-pcap receive buffer routines */
164 int (*copy_rx_buf
) (BYTE
*buf
, int max
); /* rx-copy (pktdrvr only) */
165 BYTE
*(*get_rx_buf
) (int len
); /* rx-buf fetch/enqueue */
166 int (*peek_rx_buf
) (BYTE
**buf
); /* rx-non-copy at queue */
167 int (*release_rx_buf
) (BYTE
*buf
); /* release after peek */
169 WORD flags
; /* Low-level status flags. */
170 void *priv
; /* private data */
174 * Network device statistics
176 typedef struct net_device_stats
{
177 DWORD rx_packets
; /* total packets received */
178 DWORD tx_packets
; /* total packets transmitted */
179 DWORD rx_bytes
; /* total bytes received */
180 DWORD tx_bytes
; /* total bytes transmitted */
181 DWORD rx_errors
; /* bad packets received */
182 DWORD tx_errors
; /* packet transmit problems */
183 DWORD rx_dropped
; /* no space in Rx buffers */
184 DWORD tx_dropped
; /* no space available for Tx */
185 DWORD multicast
; /* multicast packets received */
187 /* detailed rx_errors: */
188 DWORD rx_length_errors
;
189 DWORD rx_over_errors
; /* recv'r overrun error */
190 DWORD rx_osize_errors
; /* recv'r over-size error */
191 DWORD rx_crc_errors
; /* recv'd pkt with crc error */
192 DWORD rx_frame_errors
; /* recv'd frame alignment error */
193 DWORD rx_fifo_errors
; /* recv'r fifo overrun */
194 DWORD rx_missed_errors
; /* recv'r missed packet */
196 /* detailed tx_errors */
197 DWORD tx_aborted_errors
;
198 DWORD tx_carrier_errors
;
199 DWORD tx_fifo_errors
;
200 DWORD tx_heartbeat_errors
;
201 DWORD tx_window_errors
;
207 extern struct device
*active_dev LOCKED_VAR
;
208 extern const struct device
*dev_base LOCKED_VAR
;
209 extern struct device
*probed_dev
;
211 extern int pcap_pkt_debug
;
213 extern void _w32_os_yield (void); /* Watt-32's misc.c */
216 #define PCAP_ASSERT(x) ((void)0)
219 void pcap_assert (const char *what
, const char *file
, unsigned line
);
221 #define PCAP_ASSERT(x) do { \
223 pcap_assert (#x, __FILE__, __LINE__); \
227 #endif /* __PCAP_DOS_H */