nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* |
2 | * Internal details for libpcap on DOS. |
||
3 | * 32-bit targets: djgpp, Pharlap or DOS4GW. |
||
4 | */ |
||
5 | |||
6 | #ifndef __PCAP_DOS_H |
||
7 | #define __PCAP_DOS_H |
||
8 | |||
9 | #ifdef __DJGPP__ |
||
10 | #include <pc.h> /* simple non-conio kbhit */ |
||
11 | #else |
||
12 | #include <conio.h> |
||
13 | #endif |
||
14 | |||
15 | typedef int BOOL; |
||
16 | typedef unsigned char BYTE; |
||
17 | typedef unsigned short WORD; |
||
18 | typedef unsigned long DWORD; |
||
19 | typedef BYTE ETHER[6]; |
||
20 | |||
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) |
||
26 | |||
27 | #ifndef TRUE |
||
28 | #define TRUE 1 |
||
29 | #define FALSE 0 |
||
30 | #endif |
||
31 | |||
32 | #define PHARLAP 1 |
||
33 | #define DJGPP 2 |
||
34 | #define DOS4GW 4 |
||
35 | |||
36 | #ifdef __DJGPP__ |
||
37 | #undef DOSX |
||
38 | #define DOSX DJGPP |
||
39 | #endif |
||
40 | |||
41 | #ifdef __WATCOMC__ |
||
42 | #undef DOSX |
||
43 | #define DOSX DOS4GW |
||
44 | #endif |
||
45 | |||
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 |
||
54 | |||
55 | |||
56 | #if defined(__GNUC__) || defined(__HIGHC__) |
||
57 | typedef unsigned long long uint64; |
||
58 | typedef unsigned long long QWORD; |
||
59 | #endif |
||
60 | |||
61 | #if defined(__WATCOMC__) |
||
62 | typedef unsigned __int64 uint64; |
||
63 | typedef unsigned __int64 QWORD; |
||
64 | #endif |
||
65 | |||
66 | #define ARGSUSED(x) (void) x |
||
67 | |||
68 | #if defined (__SMALL__) || defined(__LARGE__) |
||
69 | #define DOSX 0 |
||
70 | |||
71 | #elif !defined(DOSX) |
||
72 | #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW |
||
73 | #endif |
||
74 | |||
75 | #ifdef __HIGHC__ |
||
76 | #define min(a,b) _min(a,b) |
||
77 | #define max(a,b) _max(a,b) |
||
78 | #endif |
||
79 | |||
80 | #ifndef min |
||
81 | #define min(a,b) ((a) < (b) ? (a) : (b)) |
||
82 | #endif |
||
83 | |||
84 | #ifndef max |
||
85 | #define max(a,b) ((a) < (b) ? (b) : (a)) |
||
86 | #endif |
||
87 | |||
88 | #if !defined(_U_) && defined(__GNUC__) |
||
89 | #define _U_ __attribute__((unused)) |
||
90 | #endif |
||
91 | |||
92 | #ifndef _U_ |
||
93 | #define _U_ |
||
94 | #endif |
||
95 | |||
96 | #if defined(USE_32BIT_DRIVERS) |
||
97 | #include "msdos/pm_drvr/lock.h" |
||
98 | |||
99 | #ifndef RECEIVE_QUEUE_SIZE |
||
100 | #define RECEIVE_QUEUE_SIZE 60 |
||
101 | #endif |
||
102 | |||
103 | #ifndef RECEIVE_BUF_SIZE |
||
104 | #define RECEIVE_BUF_SIZE (ETH_MAX+20) |
||
105 | #endif |
||
106 | |||
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; |
||
118 | |||
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 */ |
||
125 | }; |
||
126 | |||
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 */ |
||
131 | |||
132 | extern BYTE *get_rxbuf (int len) LOCKED_FUNC; |
||
133 | extern int peek_rxbuf (BYTE **buf); |
||
134 | extern int release_rxbuf (BYTE *buf); |
||
135 | |||
136 | #else |
||
137 | #define LOCKED_VAR |
||
138 | #define LOCKED_FUNC |
||
139 | |||
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 */ |
||
150 | |||
151 | struct device *next; /* next device in list */ |
||
152 | |||
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); |
||
160 | |||
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 */ |
||
166 | |||
167 | WORD flags; /* Low-level status flags. */ |
||
168 | void *priv; /* private data */ |
||
169 | }; |
||
170 | |||
171 | /* |
||
172 | * Network device statistics |
||
173 | */ |
||
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 */ |
||
184 | |||
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 */ |
||
193 | |||
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 |
||
204 | |||
205 | extern struct device *active_dev LOCKED_VAR; |
||
206 | extern const struct device *dev_base LOCKED_VAR; |
||
207 | extern struct device *probed_dev; |
||
208 | |||
209 | extern int pcap_pkt_debug; |
||
210 | |||
211 | extern void _w32_os_yield (void); /* Watt-32's misc.c */ |
||
212 | |||
213 | #ifdef NDEBUG |
||
214 | #define PCAP_ASSERT(x) ((void)0) |
||
215 | |||
216 | #else |
||
217 | void pcap_assert (const char *what, const char *file, unsigned line); |
||
218 | |||
219 | #define PCAP_ASSERT(x) do { \ |
||
220 | if (!(x)) \ |
||
221 | pcap_assert (#x, __FILE__, __LINE__); \ |
||
222 | } while (0) |
||
223 | #endif |
||
224 | |||
225 | #endif /* __PCAP_DOS_H */ |