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