home *** CD-ROM | disk | FTP | other *** search
- #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 *);
-