home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 3
/
PDCD_3.iso
/
internet
/
netlite
/
DCI
/
h
/
GLOBAL
Wrap
Text File
|
1993-04-27
|
5KB
|
233 lines
#define TRUE 1
#define FALSE 0
/* The SWI Numbers - Chuck Base */
#define NETLITE_OPEN 0
#define NETLITE_READ 1
#define NETLITE_WRITE 2
#define NETLITE_CLOSE 3
#define NETLITE_RESET 4
#define NETLITE_STATS 5
#define COMMAND_PORT 0
#define COMMAND_ARP 1
#define COMMAND_QUEUE 2
#define COMMAND_ERROR 3
#define EVENT_RX 0x18
#define EVENT_TX 0x19
#define SWI_OK 0
#define SWI_INVPORT 1
#define SWI_OPEN 2
#define SWI_CLOSED 3
#define SWI_NODRIVER 4
#define SWI_NOMEM 5
#define SWI_TOOBIG 6
#define SWI_TOOSMALL 7
#define FRAME_IP 0x800
#define FRAME_ARP 0x806
#define FRAME_RARP 0x8035
#define Service_FindNetworkDriver 0x84
#define Service_ProtocolDying 0x83
#define Service_NetworkDriverStatus 0x8B
#define SWI_NetworkIfStart 0
#define SWI_NetworkIfUp 1
#define SWI_NetworkIfDown 2
#define SWI_NetworkIfSend 3
#define SWI_DCIVersion 4
#define SWI_NetworkMTU 5
#define SWI_TxEventRequired 6
#define HARDWARE_ETHER 1
#define ARP_REQUEST 1
#define ARP_RESPONSE 2
/* In MBUF */
#define MSIZE 128
#define MMINOFF 12
#define MTAIL 4
#define MLEN (MSIZE-MMINOFF-MTAIL)
struct mbuf {
struct mbuf *m_next; /* mbuf chain pointer */
unsigned long m_off; /* offset from start of mbuf to start */
/* of active data in m_dat[] */
short m_len; /* amount of active data in m_dat[] */
char m_type; /* not used by driver module */
#define MT_FREE 0
#define MT_DATA 1
char m_indir; /* data is indirect */
union {
char mun_dat[MLEN]; /* data storage */
char *mun_datp; /* indirect data pointer */
} m_un;
struct mbuf *m_act; /* not used by driver module */
};
#define m_dat m_un.mun_dat
#define m_datp m_un.mun_datp
#define NULLMBUF (struct mbuf *)0
#define NULLMBUFP (struct mbuf **)0
struct packet
{
int status;
#define PACKET_FREE 0
#define PACKET_USED 1
struct packet *next;
int port;
int type;
char hwaddr[6];
struct mbuf *data;
};
#define MAXPACKET 30
#define NULLPACKET (struct packet *)0
#define MAX_Q_LEN 10
int initialise_tx_mbuf(int);
int initialise_rx_mbuf(int);
void initialise_packet(void);
struct mbuf *alloc_tx_mbuf(unsigned int);
void free_tx_mbuf(struct mbuf *);
void free_rx_mbuf(struct mbuf *);
int len_mbuf(struct mbuf *);
struct packet *alloc_packet(void);
void free_packet(struct packet *);
struct mbuf *qdata(int, char *);
int dqdata(struct mbuf *, int, char *);
int len_q(struct packet *);
/* In DCI */
struct pib
{
char pib_frtypecnt;
unsigned short pib_frtype[6];
int pib_rxevent;
struct mbuf **pib_freeq;
int pib_sccall;
struct mbuf **pib_lfreeq;
};
struct dib
{
char *dib_name;
int dib_units;
int dib_swibase;
char *dib_address[4];
char *dib_module;
};
struct port
{
int status;
#define STATUS_NODRVR 0
#define STATUS_DOWN 1
#define STATUS_UP 2
unsigned int ipaddr;
char hwaddr[6];
struct packet *rx_first;
struct packet *rx_last;
int iptx, iprx;
int arpreqtx,arprestx;
int arpreqrx,arpresrx;
};
/* In TRANSMIT */
void Transmit_Upcall(_kernel_swi_regs *);
void Write_Port(_kernel_swi_regs *);
void Queue_Transmit_Packet(struct packet *);
void Transmit_Packet(void);
/* In RECEIVE */
void Receive_Upcall(_kernel_swi_regs *);
void Read_Port(_kernel_swi_regs *);
void Receive_IP(int, int, struct mbuf *);
/* In ARP */
struct arp
{
int status;
#define ARP_UNUSED 0
#define ARP_RESOLVING 1
#define ARP_RESOLVED 2
int port;
int ttl;
unsigned int ipaddr;
char hwaddr[6];
struct packet *packet;
};
#define MAXARP 20
#define TIMEOUT_RESOLVED 15*60*100
#define TIMEOUT_RESOLVING 15*100
extern struct arp arplist[];
void Receive_ARP(int, int, struct mbuf *);
void Receive_ARP_Request(int, int, char *);
void Receive_ARP_Response(int, int, char *);
void Create_ARP_Request(int, struct packet *);
void Transmit_ARP_Request(struct arp *);
void Initialise_ARP_Cache(void);
void Timeout_ARP_Cache(void);
char *Search_ARP_Cache(int, int);
struct arp *Free_ARP_Slot(void);
void ARP_Stats(void);
/* In IRQS */
int ensure_irqs_on(void);
int ensure_irqs_off(void);
void restore_irqs(int);
/* In MAIN */
extern char bcast_hwaddr[];
extern struct mbuf *rxfreeq_first;
extern struct mbuf *rxfreeq_last;
extern struct mbuf *txfreeq_first;
extern struct mbuf *txfreeq_last;
extern struct mbuf *lfreeq;
extern struct packet *tx_first;
extern struct packet *tx_last;
extern int tx;
extern struct port port[];
extern int swibase;
extern int nounits;
extern int memout;
extern int rxqfull;
extern int txqfull;
#define DRIVER_NONE 0
#define DRIVER_STARTED 1
#define DRIVER_INITED 2
extern int Driver_State;
void Attach_Driver(void);
void Open_Port(_kernel_swi_regs *);
void Close_Port(_kernel_swi_regs *);
void Port_Stats(void);
void Queue_Stats(void);
void Error_Stats(void);
char *put32(char *, int);
char *put16(char *, short);
short get16(char *);
int get32(char *);