etherif.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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; /* 0: unfound, 1: found, 2: attaching */
  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. int mbps; /* zero means link down */
  34. };
  35. extern void etherrloop(Ether*, Etherpkt*, long);
  36. extern void addethercard(char*, int(*)(Ether*));
  37. #define NEXT(x, l) (((x)+1)%(l))
  38. #define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1)