ether8390.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Ctlr for the boards using the National Semiconductor DP8390
  3. * and SMC 83C90 Network Interface Controller.
  4. * Common code is in ether8390.c.
  5. */
  6. typedef struct {
  7. Lock;
  8. ulong port; /* I/O address of 8390 */
  9. ulong data; /* I/O data port if no shared memory */
  10. uchar width; /* data transfer width in bytes */
  11. uchar ram; /* true if card has shared memory */
  12. uchar dummyrr; /* do dummy remote read */
  13. uchar nxtpkt; /* receive: software bndry */
  14. uchar pstart;
  15. uchar pstop;
  16. int txbusy; /* transmit */
  17. uchar tstart; /* 8390 ring addresses */
  18. } Dp8390;
  19. #define Dp8390BufSz 256
  20. extern int dp8390reset(Ether*);
  21. extern void *dp8390read(Dp8390*, void*, ulong, ulong);
  22. extern void dp8390getea(Ether*, uchar*);
  23. extern void dp8390setea(Ether*);
  24. /*
  25. * x86-specific code.
  26. */
  27. #define regr(c, r) inb((c)->port+(r))
  28. #define regw(c, r, v) outb((c)->port+(r), (v))
  29. static void
  30. rdread(Dp8390* ctlr, void* to, int len)
  31. {
  32. switch(ctlr->width){
  33. default:
  34. panic("dp8390 rdread: width %d\n", ctlr->width);
  35. break;
  36. case 2:
  37. inss(ctlr->data, to, len/2);
  38. break;
  39. case 1:
  40. insb(ctlr->data, to, len);
  41. break;
  42. }
  43. }
  44. static void
  45. rdwrite(Dp8390* ctlr, void* from, int len)
  46. {
  47. switch(ctlr->width){
  48. default:
  49. panic("dp8390 rdwrite: width %d\n", ctlr->width);
  50. break;
  51. case 2:
  52. outss(ctlr->data, from, len/2);
  53. break;
  54. case 1:
  55. outsb(ctlr->data, from, len);
  56. break;
  57. }
  58. }