8029.h
上传用户:qddsws
上传日期:2022-06-22
资源大小:723k
文件大小:7k
源码类别:

操作系统开发

开发平台:

C/C++

  1. #ifndef F8029_H
  2. #define F8029_H
  3. struct enet_statistics
  4. {
  5.         int     rx_packets;             /* total packets received       */
  6.         int     tx_packets;             /* total packets transmitted    */
  7.         int     rx_errors;              /* bad packets received         */
  8.         int     tx_errors;              /* packet transmit problems     */
  9.         int     rx_dropped;             /* no space in linux buffers    */
  10.         int     tx_dropped;             /* no space available in linux  */
  11.         int     multicast;              /* multicast packets received   */
  12.         int     collisions;
  13.         /* detailed rx_errors: */
  14.         int     rx_length_errors;
  15.         int     rx_over_errors;         /* receiver ring buff overflow  */
  16.         int     rx_crc_errors;          /* recved pkt with crc error    */
  17.         int     rx_frame_errors;        /* recv'd frame alignment error */
  18.         int     rx_fifo_errors;         /* recv'r fifo overrun          */
  19.         int     rx_missed_errors;       /* receiver missed packet       */
  20.         /* detailed tx_errors */
  21.         int     tx_aborted_errors;
  22.         int     tx_carrier_errors;
  23.         int     tx_fifo_errors;
  24.         int     tx_heartbeat_errors;
  25.         int     tx_window_errors;
  26. };
  27. struct ei_device {
  28.   /*const char *name;
  29.   void (*reset_8390)(struct device *);
  30.   void (*get_8390_hdr)(struct device *, struct e8390_pkt_hdr *, int);
  31.   void (*block_output)(struct device *, int, const unsigned char *, int);
  32.   void (*block_input)(struct device *, int, struct sk_buff *, int);*/
  33.   unsigned open:1;
  34.   unsigned word16:1;  /* We have the 16-bit (vs 8-bit) version of the card. */
  35.   unsigned txing:1;             /* Transmit Active */
  36.   unsigned irqlock:1;           /* 8390's intrs disabled when '1'. */
  37.   unsigned dmaing:1;            /* Remote DMA Active */
  38.   unsigned char tx_start_page, rx_start_page, stop_page;
  39.   unsigned char current_page;   /* Read pointer in buffer  */
  40.   unsigned char interface_num;  /* Net port (AUI, 10bT.) to use. */
  41.   unsigned char txqueue;        /* Tx Packet buffer queue length. */
  42.   short tx1, tx2;               /* Packet lengths for ping-pong tx. */
  43.   short lasttx;                 /* Alpha version consistency check. */
  44.   unsigned char reg0;           /* Register '0' in a WD8013 */
  45.   unsigned char reg5;           /* Register '5' in a WD8013 */
  46.   unsigned char saved_irq;      /* Original dev->irq value. */
  47.   /* The new statistics table. */
  48.   struct enet_statistics stat;
  49. };
  50. /* The 8390 specific per-packet-header format. */
  51. struct e8390_pkt_hdr {
  52.   unsigned char status; /* status */
  53.   unsigned char next;   /* pointer to next packet. */
  54.   unsigned short count; /* header + packet length in bytes */
  55. };
  56. /* Some generic ethernet register configurations. */
  57. #define E8390_TX_IRQ_MASK 0xa /* For register EN0_ISR */
  58. #define E8390_RX_IRQ_MASK 0x5
  59. #define E8390_RXCONFIG 0x4 /* EN0_RXCR: broadcasts, no multicast,errors */
  60. #define E8390_RXOFF 0x20 /* EN0_RXCR: Accept no packets */
  61. #define E8390_TXCONFIG 0x00 /* EN0_TXCR: Normal transmit mode */
  62. #define E8390_TXOFF 0x02 /* EN0_TXCR: Transmitter off */
  63. /*  Register accessed at EN_CMD, the 8390 base addr.  */
  64. #define E8390_STOP 0x01 /* Stop and reset the chip */
  65. #define E8390_START 0x02 /* Start the chip, clear reset */
  66. #define E8390_TRANS 0x04 /* Transmit a frame */
  67. #define E8390_RREAD 0x08 /* Remote read */
  68. #define E8390_RWRITE 0x10 /* Remote write  */
  69. #define E8390_NODMA 0x20 /* Remote DMA */
  70. #define E8390_PAGE0 0x00 /* Select page chip registers */
  71. #define E8390_PAGE1 0x40 /* using the two high-order bits */
  72. #define E8390_PAGE2 0x80 /* Page 3 is invalid. */
  73. #define EI_SHIFT(x) (x)
  74. #define E8390_CMD EI_SHIFT(0x00)  /* The command register (for all pages) */
  75. /* Page 0 register offsets. */
  76. #define EN0_CLDALO EI_SHIFT(0x01) /* Low byte of current local dma addr  RD */
  77. #define EN0_STARTPG EI_SHIFT(0x01) /* Starting page of ring bfr WR */
  78. #define EN0_CLDAHI EI_SHIFT(0x02) /* High byte of current local dma addr  RD */
  79. #define EN0_STOPPG EI_SHIFT(0x02) /* Ending page +1 of ring bfr WR */
  80. #define EN0_BOUNDARY EI_SHIFT(0x03) /* Boundary page of ring bfr RD WR */
  81. #define EN0_TSR EI_SHIFT(0x04) /* Transmit status reg RD */
  82. #define EN0_TPSR EI_SHIFT(0x04) /* Transmit starting page WR */
  83. #define EN0_NCR EI_SHIFT(0x05) /* Number of collision reg RD */
  84. #define EN0_TCNTLO EI_SHIFT(0x05) /* Low  byte of tx byte count WR */
  85. #define EN0_FIFO EI_SHIFT(0x06) /* FIFO RD */
  86. #define EN0_TCNTHI EI_SHIFT(0x06) /* High byte of tx byte count WR */
  87. #define EN0_ISR EI_SHIFT(0x07) /* Interrupt status reg RD WR */
  88. #define EN0_CRDALO EI_SHIFT(0x08) /* low byte of current remote dma address RD */
  89. #define EN0_RSARLO EI_SHIFT(0x08) /* Remote start address reg 0 */
  90. #define EN0_CRDAHI EI_SHIFT(0x09) /* high byte, current remote dma address RD */
  91. #define EN0_RSARHI EI_SHIFT(0x09) /* Remote start address reg 1 */
  92. #define EN0_RCNTLO EI_SHIFT(0x0a) /* Remote byte count reg WR */
  93. #define EN0_RCNTHI EI_SHIFT(0x0b) /* Remote byte count reg WR */
  94. #define EN0_RSR EI_SHIFT(0x0c) /* rx status reg RD */
  95. #define EN0_RXCR EI_SHIFT(0x0c) /* RX configuration reg WR */
  96. #define EN0_TXCR EI_SHIFT(0x0d) /* TX configuration reg WR */
  97. #define EN0_COUNTER0 EI_SHIFT(0x0d) /* Rcv alignment error counter RD */
  98. #define EN0_DCFG EI_SHIFT(0x0e) /* Data configuration reg WR */
  99. #define EN0_COUNTER1 EI_SHIFT(0x0e) /* Rcv CRC error counter RD */
  100. #define EN0_IMR EI_SHIFT(0x0f) /* Interrupt mask reg WR */
  101. #define EN0_COUNTER2 EI_SHIFT(0x0f) /* Rcv missed frame error counter RD */
  102. /* Bits in EN0_ISR - Interrupt status register */
  103. #define ENISR_RX 0x01 /* Receiver, no error */
  104. #define ENISR_TX 0x02 /* Transmitter, no error */
  105. #define ENISR_RX_ERR 0x04 /* Receiver, with error */
  106. #define ENISR_TX_ERR 0x08 /* Transmitter, with error */
  107. #define ENISR_OVER 0x10 /* Receiver overwrote the ring */
  108. #define ENISR_COUNTERS 0x20 /* Counters need emptying */
  109. #define ENISR_RDC 0x40 /* remote dma complete */
  110. #define ENISR_RESET 0x80 /* Reset completed */
  111. #define ENISR_ALL 0x3f /* Interrupts we will enable */
  112. /* Bits in EN0_DCFG - Data config register */
  113. #define ENDCFG_WTS 0x01 /* word transfer mode selection */
  114. #define ENDCFG_BOS 0x02 /* byte order selection */
  115. /* Page 1 register offsets. */
  116. #define EN1_PHYS   EI_SHIFT(0x01) /* This board's physical enet addr RD WR */
  117. #define EN1_PHYS_SHIFT(i)  EI_SHIFT(i+1) /* Get and set mac address */
  118. #define EN1_CURPAG EI_SHIFT(0x07) /* Current memory page RD WR */
  119. #define EN1_MULT   EI_SHIFT(0x08) /* Multicast filter mask array (8 bytes) RD WR */
  120. #define EN1_MULT_SHIFT(i)  EI_SHIFT(8+i) /* Get and set multicast filter */
  121. /* Bits in received packet status byte and EN0_RSR*/
  122. #define ENRSR_RXOK 0x01 /* Received a good packet */
  123. #define ENRSR_CRC 0x02 /* CRC error */
  124. #define ENRSR_FAE 0x04 /* frame alignment error */
  125. #define ENRSR_FO 0x08 /* FIFO overrun */
  126. #define ENRSR_MPA 0x10 /* missed pkt */
  127. #define ENRSR_PHY 0x20 /* physical/multicast address */
  128. #define ENRSR_DIS 0x40 /* receiver disable. set in monitor mode */
  129. #define ENRSR_DEF 0x80 /* deferring */
  130. /* Transmitted packet status, EN0_TSR. */
  131. #define ENTSR_PTX 0x01 /* Packet transmitted without error */
  132. #define ENTSR_ND  0x02 /* The transmit wasn't deferred. */
  133. #define ENTSR_COL 0x04 /* The transmit collided at least once. */
  134. #define ENTSR_ABT 0x08  /* The transmit collided 16 times, and was deferred. */
  135. #define ENTSR_CRS 0x10 /* The carrier sense was lost. */
  136. #define ENTSR_FU  0x20  /* A "FIFO underrun" occurred during transmit. */
  137. #define ENTSR_CDH 0x40 /* The collision detect "heartbeat" signal was lost. */
  138. #define ENTSR_OWC 0x80  /* There was an out-of-window collision. */
  139. #endif