home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / internet / netlite / DCI / h / GLOBAL
Text File  |  1993-04-27  |  5KB  |  233 lines

  1. #define TRUE      1
  2. #define FALSE     0
  3.  
  4. /* The SWI Numbers - Chuck Base */
  5. #define NETLITE_OPEN    0
  6. #define NETLITE_READ    1
  7. #define NETLITE_WRITE   2
  8. #define NETLITE_CLOSE   3
  9. #define NETLITE_RESET   4
  10. #define NETLITE_STATS   5
  11.  
  12. #define COMMAND_PORT    0
  13. #define COMMAND_ARP     1
  14. #define COMMAND_QUEUE   2
  15. #define COMMAND_ERROR   3
  16.  
  17. #define EVENT_RX        0x18
  18. #define EVENT_TX        0x19
  19.  
  20. #define SWI_OK          0
  21. #define SWI_INVPORT     1
  22. #define SWI_OPEN        2
  23. #define SWI_CLOSED      3
  24. #define SWI_NODRIVER    4
  25. #define SWI_NOMEM       5
  26. #define SWI_TOOBIG      6
  27. #define SWI_TOOSMALL    7
  28.  
  29. #define FRAME_IP        0x800
  30. #define FRAME_ARP       0x806
  31. #define FRAME_RARP      0x8035
  32.  
  33. #define Service_FindNetworkDriver   0x84
  34. #define Service_ProtocolDying       0x83
  35. #define Service_NetworkDriverStatus 0x8B
  36.  
  37. #define SWI_NetworkIfStart     0
  38. #define SWI_NetworkIfUp        1
  39. #define SWI_NetworkIfDown      2
  40. #define SWI_NetworkIfSend      3
  41. #define SWI_DCIVersion         4
  42. #define SWI_NetworkMTU         5
  43. #define SWI_TxEventRequired    6
  44.  
  45. #define HARDWARE_ETHER  1
  46.  
  47. #define ARP_REQUEST     1
  48. #define ARP_RESPONSE    2
  49.  
  50. /* In MBUF */
  51.  
  52. #define MSIZE      128
  53. #define MMINOFF    12
  54. #define MTAIL      4
  55. #define MLEN       (MSIZE-MMINOFF-MTAIL)
  56.  
  57. struct mbuf {
  58.         struct mbuf *m_next;       /* mbuf chain pointer */
  59.         unsigned long m_off;       /* offset from start of mbuf to start */
  60.                                    /* of active data in m_dat[] */
  61.         short m_len;               /* amount of active data in m_dat[] */
  62.         char  m_type;              /* not used by driver module */
  63. #define MT_FREE      0
  64. #define MT_DATA      1
  65.         char m_indir;              /* data is indirect */
  66.         union {
  67.                 char mun_dat[MLEN]; /* data storage */
  68.                 char *mun_datp;     /* indirect data pointer */
  69.         } m_un;
  70.         struct mbuf *m_act;        /* not used by driver module */
  71. };
  72.  
  73. #define m_dat  m_un.mun_dat
  74. #define m_datp m_un.mun_datp
  75.  
  76. #define NULLMBUF  (struct mbuf *)0
  77.  
  78. #define NULLMBUFP (struct mbuf **)0
  79.  
  80. struct packet
  81. {
  82.         int  status;
  83. #define PACKET_FREE    0
  84. #define PACKET_USED    1
  85.         struct packet *next;
  86.         int  port;
  87.         int  type;
  88.         char hwaddr[6];
  89.         struct mbuf   *data;
  90. };
  91.  
  92. #define MAXPACKET    30
  93.  
  94. #define NULLPACKET  (struct packet *)0
  95.  
  96. #define MAX_Q_LEN    10
  97.  
  98. int  initialise_tx_mbuf(int);
  99. int  initialise_rx_mbuf(int);
  100. void initialise_packet(void);
  101.  
  102. struct mbuf *alloc_tx_mbuf(unsigned int);
  103. void free_tx_mbuf(struct mbuf *);
  104. void free_rx_mbuf(struct mbuf *);
  105. int  len_mbuf(struct mbuf *);
  106.  
  107. struct packet *alloc_packet(void);
  108. void free_packet(struct packet *);
  109.  
  110. struct mbuf *qdata(int, char *);
  111. int dqdata(struct mbuf *, int, char *);
  112. int len_q(struct packet *);
  113.  
  114. /* In DCI */
  115.  
  116. struct pib
  117. {
  118.         char           pib_frtypecnt;
  119.         unsigned short pib_frtype[6];
  120.         int            pib_rxevent;
  121.         struct mbuf  **pib_freeq;
  122.         int            pib_sccall;
  123.         struct mbuf  **pib_lfreeq;
  124. };
  125.  
  126. struct dib
  127. {
  128.         char *dib_name;
  129.         int  dib_units;
  130.         int  dib_swibase;
  131.         char *dib_address[4];
  132.         char *dib_module;
  133. };
  134.  
  135. struct port
  136. {
  137.         int status;
  138. #define STATUS_NODRVR     0
  139. #define STATUS_DOWN       1
  140. #define STATUS_UP         2
  141.         unsigned int  ipaddr;
  142.         char hwaddr[6];
  143.         struct packet *rx_first;
  144.         struct packet *rx_last;
  145.         int iptx,    iprx;
  146.         int arpreqtx,arprestx;
  147.         int arpreqrx,arpresrx;
  148. };
  149.  
  150. /* In TRANSMIT */
  151. void Transmit_Upcall(_kernel_swi_regs *);
  152. void Write_Port(_kernel_swi_regs *);
  153. void Queue_Transmit_Packet(struct packet *);
  154. void Transmit_Packet(void);
  155.  
  156. /* In RECEIVE */
  157. void Receive_Upcall(_kernel_swi_regs *);
  158. void Read_Port(_kernel_swi_regs *);
  159. void Receive_IP(int, int, struct mbuf *);
  160.  
  161. /* In ARP */
  162. struct arp
  163. {
  164.         int status;
  165. #define ARP_UNUSED          0
  166. #define ARP_RESOLVING       1
  167. #define ARP_RESOLVED        2
  168.         int port;
  169.         int ttl;
  170.         unsigned int  ipaddr;
  171.         char hwaddr[6];
  172.         struct packet *packet;
  173. };
  174.  
  175. #define MAXARP 20
  176.  
  177. #define TIMEOUT_RESOLVED   15*60*100
  178. #define TIMEOUT_RESOLVING  15*100
  179.  
  180. extern struct arp arplist[];
  181.  
  182. void Receive_ARP(int, int, struct mbuf *);
  183. void Receive_ARP_Request(int, int, char *);
  184. void Receive_ARP_Response(int, int, char *);
  185. void Create_ARP_Request(int, struct packet *);
  186. void Transmit_ARP_Request(struct arp *);
  187.  
  188. void Initialise_ARP_Cache(void);
  189. void Timeout_ARP_Cache(void);
  190. char *Search_ARP_Cache(int, int);
  191. struct arp *Free_ARP_Slot(void);
  192. void ARP_Stats(void);
  193.  
  194. /* In IRQS */
  195. int ensure_irqs_on(void);
  196. int ensure_irqs_off(void);
  197. void restore_irqs(int);
  198.  
  199. /* In MAIN */
  200. extern char bcast_hwaddr[];
  201. extern struct mbuf *rxfreeq_first;
  202. extern struct mbuf *rxfreeq_last;
  203. extern struct mbuf *txfreeq_first;
  204. extern struct mbuf *txfreeq_last;
  205. extern struct mbuf *lfreeq;
  206. extern struct packet *tx_first;
  207. extern struct packet *tx_last;
  208. extern int tx;
  209. extern struct port port[];
  210. extern int swibase;
  211. extern int nounits;
  212.  
  213. extern int memout;
  214. extern int rxqfull;
  215. extern int txqfull;
  216.  
  217. #define DRIVER_NONE    0
  218. #define DRIVER_STARTED 1
  219. #define DRIVER_INITED  2
  220. extern int Driver_State;
  221.  
  222. void Attach_Driver(void);
  223. void Open_Port(_kernel_swi_regs *);
  224. void Close_Port(_kernel_swi_regs *);
  225. void Port_Stats(void);
  226. void Queue_Stats(void);
  227. void Error_Stats(void);
  228.  
  229. char *put32(char *, int);
  230. char *put16(char *, short);
  231. short get16(char *);
  232. int   get32(char *);
  233.