ether1.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:8k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/acorn/net/ether1.h
  3.  *
  4.  *  Copyright (C) 1996 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  *
  10.  *  Network driver for Acorn Ether1 cards.
  11.  */
  12. #ifndef _LINUX_ether1_H
  13. #define _LINUX_ether1_H
  14. #ifdef __ETHER1_C
  15. /* use 0 for production, 1 for verification, >2 for debug */
  16. #ifndef NET_DEBUG
  17. #define NET_DEBUG 0
  18. #endif
  19. /* Page register */
  20. #define REG_PAGE (dev->base_addr + 0x00)
  21. /* Control register */
  22. #define REG_CONTROL (dev->base_addr + 0x01)
  23. #define CTRL_RST 0x01
  24. #define CTRL_LOOPBACK 0x02
  25. #define CTRL_CA 0x04
  26. #define CTRL_ACK 0x08
  27. #define ETHER1_RAM (dev->base_addr + 0x800)
  28. /* HW address */
  29. #define IDPROM_ADDRESS (dev->base_addr + 0x09)
  30. struct ether1_priv {
  31. struct net_device_stats stats;
  32. unsigned int tx_link;
  33. unsigned int tx_head;
  34. volatile unsigned int tx_tail;
  35. volatile unsigned int rx_head;
  36. volatile unsigned int rx_tail;
  37. unsigned char bus_type;
  38. unsigned char resetting;
  39. unsigned char initialising : 1;
  40. unsigned char restart      : 1;
  41. };
  42. #define I82586_NULL (-1)
  43. typedef struct { /* tdr */
  44. unsigned short tdr_status;
  45. unsigned short tdr_command;
  46. unsigned short tdr_link;
  47. unsigned short tdr_result;
  48. #define TDR_TIME (0x7ff)
  49. #define TDR_SHORT (1 << 12)
  50. #define TDR_OPEN (1 << 13)
  51. #define TDR_XCVRPROB (1 << 14)
  52. #define TDR_LNKOK (1 << 15)
  53. } tdr_t;
  54. typedef struct { /* transmit */
  55. unsigned short tx_status;
  56. unsigned short tx_command;
  57. unsigned short tx_link;
  58. unsigned short tx_tbdoffset;
  59. } tx_t;
  60. typedef struct { /* tbd */
  61. unsigned short tbd_opts;
  62. #define TBD_CNT (0x3fff)
  63. #define TBD_EOL (1 << 15)
  64. unsigned short tbd_link;
  65. unsigned short tbd_bufl;
  66. unsigned short tbd_bufh;
  67. } tbd_t;
  68. typedef struct { /* rfd */
  69. unsigned short rfd_status;
  70. #define RFD_NOEOF (1 << 6)
  71. #define RFD_FRAMESHORT (1 << 7)
  72. #define RFD_DMAOVRN (1 << 8)
  73. #define RFD_NORESOURCES (1 << 9)
  74. #define RFD_ALIGNERROR (1 << 10)
  75. #define RFD_CRCERROR (1 << 11)
  76. #define RFD_OK (1 << 13)
  77. #define RFD_FDCONSUMED (1 << 14)
  78. #define RFD_COMPLETE (1 << 15)
  79. unsigned short rfd_command;
  80. #define RFD_CMDSUSPEND (1 << 14)
  81. #define RFD_CMDEL (1 << 15)
  82. unsigned short rfd_link;
  83. unsigned short rfd_rbdoffset;
  84. unsigned char  rfd_dest[6];
  85. unsigned char  rfd_src[6];
  86. unsigned short rfd_len;
  87. } rfd_t;
  88. typedef struct { /* rbd */
  89. unsigned short rbd_status;
  90. #define RBD_ACNT (0x3fff)
  91. #define RBD_ACNTVALID (1 << 14)
  92. #define RBD_EOF (1 << 15)
  93. unsigned short rbd_link;
  94. unsigned short rbd_bufl;
  95. unsigned short rbd_bufh;
  96. unsigned short rbd_len;
  97. } rbd_t;
  98. typedef struct { /* nop */
  99. unsigned short nop_status;
  100. unsigned short nop_command;
  101. unsigned short nop_link;
  102. } nop_t;
  103. typedef struct { /* set multicast */
  104. unsigned short mc_status;
  105. unsigned short mc_command;
  106. unsigned short mc_link;
  107. unsigned short mc_cnt;
  108. unsigned char  mc_addrs[1][6];
  109. } mc_t;
  110. typedef struct { /* set address */
  111. unsigned short sa_status;
  112. unsigned short sa_command;
  113. unsigned short sa_link;
  114. unsigned char  sa_addr[6];
  115. } sa_t;
  116. typedef struct { /* config command */
  117. unsigned short cfg_status;
  118. unsigned short cfg_command;
  119. unsigned short cfg_link;
  120. unsigned char  cfg_bytecnt; /* size foll data: 4 - 12  */
  121. unsigned char  cfg_fifolim; /* FIFO threshold  */
  122. unsigned char  cfg_byte8;
  123. #define CFG8_SRDY (1 << 6)
  124. #define CFG8_SAVEBADF (1 << 7)
  125. unsigned char  cfg_byte9;
  126. #define CFG9_ADDRLEN(x) (x)
  127. #define CFG9_ADDRLENBUF (1 << 3)
  128. #define CFG9_PREAMB2 (0 << 4)
  129. #define CFG9_PREAMB4 (1 << 4)
  130. #define CFG9_PREAMB8 (2 << 4)
  131. #define CFG9_PREAMB16 (3 << 4)
  132. #define CFG9_ILOOPBACK (1 << 6)
  133. #define CFG9_ELOOPBACK (1 << 7)
  134. unsigned char  cfg_byte10;
  135. #define CFG10_LINPRI(x) (x)
  136. #define CFG10_ACR(x) (x << 4)
  137. #define CFG10_BOFMET (1 << 7)
  138. unsigned char  cfg_ifs;
  139. unsigned char  cfg_slotl;
  140. unsigned char  cfg_byte13;
  141. #define CFG13_SLOTH(x) (x)
  142. #define CFG13_RETRY(x) (x << 4)
  143. unsigned char  cfg_byte14;
  144. #define CFG14_PROMISC (1 << 0)
  145. #define CFG14_DISBRD (1 << 1)
  146. #define CFG14_MANCH (1 << 2)
  147. #define CFG14_TNCRS (1 << 3)
  148. #define CFG14_NOCRC (1 << 4)
  149. #define CFG14_CRC16 (1 << 5)
  150. #define CFG14_BTSTF (1 << 6)
  151. #define CFG14_FLGPAD (1 << 7)
  152. unsigned char  cfg_byte15;
  153. #define CFG15_CSTF(x) (x)
  154. #define CFG15_ICSS (1 << 3)
  155. #define CFG15_CDTF(x) (x << 4)
  156. #define CFG15_ICDS (1 << 7)
  157. unsigned short cfg_minfrmlen;
  158. } cfg_t;
  159. typedef struct { /* scb */
  160. unsigned short scb_status; /* status of 82586 */
  161. #define SCB_STRXMASK (7 << 4) /* Receive unit status */
  162. #define SCB_STRXIDLE (0 << 4) /* Idle */
  163. #define SCB_STRXSUSP (1 << 4) /* Suspended */
  164. #define SCB_STRXNRES (2 << 4) /* No resources */
  165. #define SCB_STRXRDY (4 << 4) /* Ready */
  166. #define SCB_STCUMASK (7 << 8) /* Command unit status */
  167. #define SCB_STCUIDLE (0 << 8) /* Idle */
  168. #define SCB_STCUSUSP (1 << 8) /* Suspended */
  169. #define SCB_STCUACTV (2 << 8) /* Active */
  170. #define SCB_STRNR (1 << 12) /* Receive unit not ready */
  171. #define SCB_STCNA (1 << 13) /* Command unit not ready */
  172. #define SCB_STFR (1 << 14) /* Frame received */
  173. #define SCB_STCX (1 << 15) /* Command completed */
  174. unsigned short scb_command; /* Next command */
  175. #define SCB_CMDRXSTART (1 << 4) /* Start (at rfa_offset) */
  176. #define SCB_CMDRXRESUME (2 << 4) /* Resume reception */
  177. #define SCB_CMDRXSUSPEND (3 << 4) /* Suspend reception */
  178. #define SCB_CMDRXABORT (4 << 4) /* Abort reception */
  179. #define SCB_CMDCUCSTART (1 << 8) /* Start (at cbl_offset) */
  180. #define SCB_CMDCUCRESUME (2 << 8) /* Resume execution */
  181. #define SCB_CMDCUCSUSPEND (3 << 8) /* Suspend execution */
  182. #define SCB_CMDCUCABORT (4 << 8) /* Abort execution */
  183. #define SCB_CMDACKRNR (1 << 12) /* Ack RU not ready */
  184. #define SCB_CMDACKCNA (1 << 13) /* Ack CU not ready */
  185. #define SCB_CMDACKFR (1 << 14) /* Ack Frame received */
  186. #define SCB_CMDACKCX (1 << 15) /* Ack Command complete */
  187. unsigned short scb_cbl_offset; /* Offset of first command unit */
  188. unsigned short scb_rfa_offset; /* Offset of first receive frame area */
  189. unsigned short scb_crc_errors; /* Properly aligned frame with CRC error*/
  190. unsigned short scb_aln_errors; /* Misaligned frames */
  191. unsigned short scb_rsc_errors; /* Frames lost due to no space */
  192. unsigned short scb_ovn_errors; /* Frames lost due to slow bus */
  193. } scb_t;
  194. typedef struct { /* iscp */
  195. unsigned short iscp_busy; /* set by CPU before CA */
  196. unsigned short iscp_offset; /* offset of SCB */
  197. unsigned short iscp_basel; /* base of SCB */
  198. unsigned short iscp_baseh;
  199. } iscp_t;
  200.     /* this address must be 0xfff6 */
  201. typedef struct { /* scp */
  202. unsigned short scp_sysbus; /* bus size */
  203. #define SCP_SY_16BBUS 0x00
  204. #define SCP_SY_8BBUS 0x01
  205. unsigned short scp_junk[2]; /* junk */
  206. unsigned short scp_iscpl; /* lower 16 bits of iscp */
  207. unsigned short scp_iscph; /* upper 16 bits of iscp */
  208. } scp_t;
  209. /* commands */
  210. #define CMD_NOP 0
  211. #define CMD_SETADDRESS 1
  212. #define CMD_CONFIG 2
  213. #define CMD_SETMULTICAST 3
  214. #define CMD_TX 4
  215. #define CMD_TDR 5
  216. #define CMD_DUMP 6
  217. #define CMD_DIAGNOSE 7
  218. #define CMD_MASK 7
  219. #define CMD_INTR (1 << 13)
  220. #define CMD_SUSP (1 << 14)
  221. #define CMD_EOL (1 << 15)
  222. #define STAT_COLLISIONS (15)
  223. #define STAT_COLLEXCESSIVE (1 << 5)
  224. #define STAT_COLLAFTERTX (1 << 6)
  225. #define STAT_TXDEFERRED (1 << 7)
  226. #define STAT_TXSLOWDMA (1 << 8)
  227. #define STAT_TXLOSTCTS (1 << 9)
  228. #define STAT_NOCARRIER (1 << 10)
  229. #define STAT_FAIL (1 << 11)
  230. #define STAT_ABORTED (1 << 12)
  231. #define STAT_OK (1 << 13)
  232. #define STAT_BUSY (1 << 14)
  233. #define STAT_COMPLETE (1 << 15)
  234. #endif
  235. #endif
  236. /*
  237.  * Ether1 card definitions:
  238.  *
  239.  * FAST accesses:
  240.  * +0 Page register
  241.  *  16 pages
  242.  * +4 Control
  243.  * '1' = reset
  244.  * '2' = loopback
  245.  * '4' = CA
  246.  * '8' = int ack
  247.  *
  248.  * RAM at address + 0x2000
  249.  * Pod. Prod id = 3
  250.  * Words after ID block [base + 8 words]
  251.  * +0 pcb issue (0x0c and 0xf3 invalid)
  252.  * +1 - +6 eth hw address
  253.  */