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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*------------------------------------------------------------------------
  2.  . smc9194.h
  3.  . Copyright (C) 1996 by Erik Stahlman 
  4.  .
  5.  . This software may be used and distributed according to the terms
  6.  . of the GNU General Public License, incorporated herein by reference.
  7.  .
  8.  . This file contains register information and access macros for 
  9.  . the SMC91xxx chipset.   
  10.  . 
  11.  . Information contained in this file was obtained from the SMC91C94 
  12.  . manual from SMC.  To get a copy, if you really want one, you can find 
  13.  . information under www.smc.com in the components division.
  14.  . ( this thanks to advice from Donald Becker ).
  15.  . 
  16.  . Authors
  17.  .  Erik Stahlman ( erik@vt.edu )
  18.  .
  19.  . History
  20.  . 01/06/96  Erik Stahlman   moved definitions here from main .c file
  21.  . 01/19/96  Erik Stahlman   polished this up some, and added better
  22.  .   error handling
  23.  .
  24.  ---------------------------------------------------------------------------*/
  25. #ifndef _SMC9194_H_
  26. #define _SMC9194_H_
  27. /* I want some simple types */
  28. typedef unsigned char byte;
  29. typedef unsigned short word;
  30. typedef unsigned long int  dword;
  31. /* Because of bank switching, the SMC91xxx uses only 16 I/O ports */
  32. #define SMC_IO_EXTENT 16
  33. /*---------------------------------------------------------------
  34.  .  
  35.  . A description of the SMC registers is probably in order here,
  36.  . although for details, the SMC datasheet is invaluable.  
  37.  . 
  38.  . Basically, the chip has 4 banks of registers ( 0 to 3 ), which
  39.  . are accessed by writing a number into the BANK_SELECT register
  40.  . ( I also use a SMC_SELECT_BANK macro for this ).
  41.  . 
  42.  . The banks are configured so that for most purposes, bank 2 is all
  43.  . that is needed for simple run time tasks.  
  44.  -----------------------------------------------------------------------*/
  45. /*
  46.  . Bank Select Register: 
  47.  .
  48.  . yyyy yyyy 0000 00xx  
  49.  . xx  = bank number
  50.  . yyyy yyyy = 0x33, for identification purposes.
  51. */
  52. #define BANK_SELECT 14
  53. /* BANK 0  */
  54. #define TCR  0     /* transmit control register */
  55. #define TCR_ENABLE 0x0001 /* if this is 1, we can transmit */ 
  56. #define TCR_PAD_ENABLE 0x0080 /* pads short packets to 64 bytes */
  57. #define TCR_MON_CNS 0x0400 /* monitors the carrier status */
  58. #define TCR_FDUPLX     0x0800  /* receive packets sent out */
  59. #define TCR_STP_SQET 0x1000 /* stop transmitting if Signal quality error */
  60. #define TCR_FDSE 0x8000 /* full duplex, switched ethernet */
  61. #define TCR_CLEAR 0 /* do NOTHING */
  62. /* the normal settings for the TCR register : */ 
  63. /* QUESTION: do I want to enable padding of short packets ? */
  64. #define TCR_NORMAL   TCR_ENABLE 
  65. #define EPH_STATUS 2
  66. #define ES_LINK_OK 0x4000 /* is the link integrity ok ? */
  67. #define RCR 4
  68. #define RCR_SOFTRESET 0x8000  /* resets the chip */
  69. #define RCR_STRIP_CRC 0x200 /* strips CRC */
  70. #define RCR_ENABLE 0x100 /* IFF this is set, we can receive packets */
  71. #define RCR_ALMUL 0x4  /* receive all multicast packets */
  72. #define RCR_PROMISC 0x2 /* enable promiscuous mode */
  73. /* the normal settings for the RCR register : */
  74. #define RCR_NORMAL (RCR_STRIP_CRC | RCR_ENABLE)
  75. #define RCR_CLEAR 0x0 /* set it to a base state */
  76. #define COUNTER 6
  77. #define MIR 8
  78. #define MCR 10
  79. /* 12 is reserved */
  80. /* BANK 1 */
  81. #define CONFIG 0
  82. #define CFG_AUI_SELECT   0x100
  83. #define BASE 2
  84. #define ADDR0 4
  85. #define ADDR1 6
  86. #define ADDR2 8
  87. #define GENERAL 10
  88. #define CONTROL 12
  89. #define CTL_POWERDOWN 0x2000
  90. #define CTL_LE_ENABLE 0x80
  91. #define CTL_CR_ENABLE 0x40
  92. #define CTL_TE_ENABLE 0x0020
  93. #define CTL_AUTO_RELEASE 0x0800
  94. #define CTL_EPROM_SELECT 0x0004
  95. #define CTL_EPROM_RELOAD 0x0002
  96. #define CTL_EPROM_STORE 0x0001
  97. #define CTL_EPROM_ACCESS (CTL_EPROM_RELOAD | CTL_EPROM_STORE) /* high if Eprom is being read */
  98. /* BANK 2 */
  99. #define MMU_CMD 0
  100. #define MC_BUSY 1 /* only readable bit in the register */
  101. #define MC_NOP 0
  102. #define MC_ALLOC 0x20   /* or with number of 256 byte packets */
  103. #define MC_RESET 0x40
  104. #define MC_REMOVE 0x60   /* remove the current rx packet */
  105. #define MC_RELEASE   0x80   /* remove and release the current rx packet */
  106. #define MC_FREEPKT   0xA0   /* Release packet in PNR register */
  107. #define MC_ENQUEUE 0xC0  /* Enqueue the packet for transmit */
  108.  
  109. #define PNR_ARR 2
  110. #define FIFO_PORTS 4
  111. #define FP_RXEMPTY  0x8000
  112. #define FP_TXEMPTY  0x80
  113. #define POINTER 6
  114. #define PTR_READ 0x2000
  115. #define PTR_RCV 0x8000
  116. #define PTR_AUTOINC  0x4000
  117. #define DATA_1 8
  118. #define DATA_2 10
  119. #define INTERRUPT 12
  120. #define INT_MASK 13
  121. #define IM_RCV_INT 0x1
  122. #define IM_TX_INT 0x2
  123. #define IM_TX_EMPTY_INT 0x4
  124. #define IM_ALLOC_INT 0x8
  125. #define IM_RX_OVRN_INT 0x10
  126. #define IM_EPH_INT 0x20
  127. #define IM_ERCV_INT 0x40 /* not on SMC9192 */
  128. /* BANK 3 */
  129. #define MULTICAST1 0
  130. #define MULTICAST2 2
  131. #define MULTICAST3 4
  132. #define MULTICAST4 6
  133. #define MGMT 8
  134. #define REVISION 10 /* ( hi: chip id   low: rev # ) */
  135. /* this is NOT on SMC9192 */
  136. #define ERCV 12
  137. #define CHIP_9190 3
  138. #define CHIP_9194 4
  139. #define CHIP_9195 5
  140. #define CHIP_91100 7
  141. /* 
  142.  . Transmit status bits 
  143. */
  144. #define TS_SUCCESS 0x0001
  145. #define TS_LOSTCAR 0x0400
  146. #define TS_LATCOL  0x0200
  147. #define TS_16COL   0x0010
  148. /*
  149.  . Receive status bits
  150. */
  151. #define RS_ALGNERR 0x8000
  152. #define RS_BADCRC 0x2000
  153. #define RS_ODDFRAME 0x1000
  154. #define RS_TOOLONG 0x0800
  155. #define RS_TOOSHORT 0x0400
  156. #define RS_MULTICAST 0x0001
  157. #define RS_ERRORS (RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT) 
  158. /*
  159.  * SMC91C96 ethernet config and status registers.
  160.  * These are in the "attribute" space.
  161.  */
  162. #define ECOR 0x8000
  163. #define ECOR_RESET 0x80
  164. #define ECOR_LEVEL_IRQ 0x40
  165. #define ECOR_WR_ATTRIB 0x04
  166. #define ECOR_ENABLE 0x01
  167. #define ECSR 0x8002
  168. #define ECSR_IOIS8 0x20
  169. #define ECSR_PWRDWN 0x04
  170. #define ECSR_INT 0x02
  171. /*----------------------------------------------------------------------
  172.  . Define the interrupts that I want to receive from the card
  173.  . 
  174.  . I want: 
  175.  .  IM_EPH_INT, for nasty errors
  176.  .  IM_RCV_INT, for happy received packets
  177.  .  IM_RX_OVRN_INT, because I have to kick the receiver
  178.  --------------------------------------------------------------------------*/
  179. #define SMC_INTERRUPT_MASK   (IM_EPH_INT | IM_RX_OVRN_INT | IM_RCV_INT) 
  180. /* store this information for the driver.. */
  181. struct smc_local {
  182. /*
  183.      these are things that the kernel wants me to keep, so users
  184.    can find out semi-useless statistics of how well the card is
  185.    performing
  186.   */
  187. struct net_device_stats stats;
  188. /*
  189.    If I have to wait until memory is available to send
  190.    a packet, I will store the skbuff here, until I get the
  191.    desired memory.  Then, I'll send it out and free it.
  192. */
  193. struct sk_buff * saved_skb;
  194. /*
  195.    . This keeps track of how many packets that I have
  196.    . sent out.  When an TX_EMPTY interrupt comes, I know
  197.  . that all of these have been sent.
  198. */
  199. int packets_waiting;
  200. /*
  201.  . Interface status.  These correspond to the parameters
  202.  . in the ethtool_cmd structure.
  203. */
  204. u8 duplex;
  205. u8 port;
  206. };
  207. #endif  /* _SMC_9194_H_ */