etherif.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. typedef struct RingBuf {
  2. uchar owner;
  3. uchar unused;
  4. ushort len;
  5. uchar pkt[sizeof(Etherpkt)];
  6. } RingBuf;
  7. enum {
  8. Host = 0, /* buffer owned by host */
  9. Interface = 1, /* buffer owned by card */
  10. Nrb = 32, /* default number of receive buffers */
  11. Ntb = 8, /* default number of transmit buffers */
  12. };
  13. typedef struct Ether Ether;
  14. struct Ether {
  15. ISAConf; /* hardware info */
  16. int ctlrno;
  17. int state;
  18. int tbdf;
  19. void (*attach)(Ether*); /* filled in by reset routine */
  20. void (*transmit)(Ether*);
  21. void (*interrupt)(Ureg*, void*);
  22. void (*detach)(Ether*);
  23. void *ctlr;
  24. ushort nrb; /* number of software receive buffers */
  25. ushort ntb; /* number of software transmit buffers */
  26. RingBuf *rb; /* software receive buffers */
  27. RingBuf *tb; /* software transmit buffers */
  28. ushort rh; /* first receive buffer belonging to host */
  29. ushort ri; /* first receive buffer belonging to card */
  30. ushort th; /* first transmit buffer belonging to host */
  31. ushort ti; /* first transmit buffer belonging to card */
  32. int tbusy; /* transmitter is busy */
  33. };
  34. extern void etherrloop(Ether*, Etherpkt*, long);
  35. extern void addethercard(char*, int(*)(Ether*));
  36. #define NEXT(x, l) (((x)+1)%(l))
  37. #define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1)