cxgbe/t4_tom: Read the chip's DDP page sizes and save them in a
[freebsd-src.git] / contrib / libpcap / pcap-dos.h
blob8f92252ba26852ece89b9aff823749aeac2da368
1 /*
2 * Internal details for libpcap on DOS.
3 * 32-bit targets: djgpp, Pharlap or DOS4GW.
4 */
6 #ifndef __PCAP_DOS_H
7 #define __PCAP_DOS_H
9 #ifdef __DJGPP__
10 #include <pc.h> /* simple non-conio kbhit */
11 #else
12 #include <conio.h>
13 #endif
15 typedef int BOOL;
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 */
23 #define ETH_MTU 1500
24 #define ETH_MIN 60
25 #define ETH_MAX (ETH_MTU+ETH_HLEN)
27 #ifndef TRUE
28 #define TRUE 1
29 #define FALSE 0
30 #endif
32 #define PHARLAP 1
33 #define DJGPP 2
34 #define DOS4GW 4
36 #ifdef __DJGPP__
37 #undef DOSX
38 #define DOSX DJGPP
39 #endif
41 #ifdef __WATCOMC__
42 #undef DOSX
43 #define DOSX DOS4GW
44 #endif
46 #ifdef __HIGHC__
47 #include <pharlap.h>
48 #undef DOSX
49 #define DOSX PHARLAP
50 #define inline
51 #else
52 typedef unsigned int UINT;
53 #endif
56 #if defined(__GNUC__) || defined(__HIGHC__)
57 typedef unsigned long long uint64;
58 typedef unsigned long long QWORD;
59 #endif
61 #if defined(__WATCOMC__)
62 typedef unsigned __int64 uint64;
63 typedef unsigned __int64 QWORD;
64 #endif
66 #define ARGSUSED(x) (void) x
68 #if defined (__SMALL__) || defined(__LARGE__)
69 #define DOSX 0
71 #elif !defined(DOSX)
72 #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
73 #endif
75 #ifdef __HIGHC__
76 #define min(a,b) _min(a,b)
77 #define max(a,b) _max(a,b)
78 #endif
80 #ifndef min
81 #define min(a,b) ((a) < (b) ? (a) : (b))
82 #endif
84 #ifndef max
85 #define max(a,b) ((a) < (b) ? (b) : (a))
86 #endif
88 #if !defined(_U_) && defined(__GNUC__)
89 #define _U_ __attribute__((unused))
90 #endif
92 #ifndef _U_
93 #define _U_
94 #endif
96 #if defined(USE_32BIT_DRIVERS)
97 #include "msdos/pm_drvr/lock.h"
99 #ifndef RECEIVE_QUEUE_SIZE
100 #define RECEIVE_QUEUE_SIZE 60
101 #endif
103 #ifndef RECEIVE_BUF_SIZE
104 #define RECEIVE_BUF_SIZE (ETH_MAX+20)
105 #endif
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;
119 struct rx_ringbuf {
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 */
127 struct rx_elem {
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);
136 #else
137 #define LOCKED_VAR
138 #define LOCKED_FUNC
140 struct device {
141 const char *name;
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;
200 DWORD tx_collisions;
201 DWORD tx_jabbers;
202 } NET_STATS;
203 #endif
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 */
213 #ifdef NDEBUG
214 #define PCAP_ASSERT(x) ((void)0)
216 #else
217 void pcap_assert (const char *what, const char *file, unsigned line);
219 #define PCAP_ASSERT(x) do { \
220 if (!(x)) \
221 pcap_assert (#x, __FILE__, __LINE__); \
222 } while (0)
223 #endif
225 #endif /* __PCAP_DOS_H */