Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    3)  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    4)  * All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    5)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    6)  * File: via-velocity.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    8)  * Purpose: Header file to define driver's private structures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    9)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   10)  * Author: Chuang Liang-Shing, AJ Jiang
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   11)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   12)  * Date: Jan 24, 2003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   13)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   16) #ifndef VELOCITY_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   17) #define VELOCITY_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   19) #define VELOCITY_TX_CSUM_SUPPORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   21) #define VELOCITY_NAME          "via-velocity"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   22) #define VELOCITY_FULL_DRV_NAM  "VIA Networking Velocity Family Gigabit Ethernet Adapter Driver"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   23) #define VELOCITY_VERSION       "1.15"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   25) #define VELOCITY_IO_SIZE	256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   26) #define VELOCITY_NAPI_WEIGHT	64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   28) #define PKT_BUF_SZ          1540
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   30) #define MAX_UNITS           8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   31) #define OPTION_DEFAULT      { [0 ... MAX_UNITS-1] = -1}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   33) #define REV_ID_VT6110       (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   35) #define BYTE_REG_BITS_ON(x,p)       do { writeb(readb((p))|(x),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   36) #define WORD_REG_BITS_ON(x,p)       do { writew(readw((p))|(x),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   37) #define DWORD_REG_BITS_ON(x,p)      do { writel(readl((p))|(x),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   39) #define BYTE_REG_BITS_IS_ON(x,p)    (readb((p)) & (x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   40) #define WORD_REG_BITS_IS_ON(x,p)    (readw((p)) & (x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   41) #define DWORD_REG_BITS_IS_ON(x,p)   (readl((p)) & (x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   43) #define BYTE_REG_BITS_OFF(x,p)      do { writeb(readb((p)) & (~(x)),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   44) #define WORD_REG_BITS_OFF(x,p)      do { writew(readw((p)) & (~(x)),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   45) #define DWORD_REG_BITS_OFF(x,p)     do { writel(readl((p)) & (~(x)),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   47) #define BYTE_REG_BITS_SET(x,m,p)    do { writeb( (readb((p)) & (~(m))) |(x),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   48) #define WORD_REG_BITS_SET(x,m,p)    do { writew( (readw((p)) & (~(m))) |(x),(p));} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   49) #define DWORD_REG_BITS_SET(x,m,p)   do { writel( (readl((p)) & (~(m)))|(x),(p));}  while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   51) #define VAR_USED(p)     do {(p)=(p);} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   53) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   54)  * Purpose: Structures for MAX RX/TX descriptors.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   55)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   58) #define B_OWNED_BY_CHIP     1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   59) #define B_OWNED_BY_HOST     0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   61) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   62)  * Bits in the RSR0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   63)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   65) #define RSR_DETAG	cpu_to_le16(0x0080)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   66) #define RSR_SNTAG	cpu_to_le16(0x0040)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   67) #define RSR_RXER	cpu_to_le16(0x0020)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   68) #define RSR_RL		cpu_to_le16(0x0010)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   69) #define RSR_CE		cpu_to_le16(0x0008)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   70) #define RSR_FAE		cpu_to_le16(0x0004)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   71) #define RSR_CRC		cpu_to_le16(0x0002)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   72) #define RSR_VIDM	cpu_to_le16(0x0001)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   74) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   75)  * Bits in the RSR1 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   76)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   78) #define RSR_RXOK	cpu_to_le16(0x8000) // rx OK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   79) #define RSR_PFT		cpu_to_le16(0x4000) // Perfect filtering address match
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   80) #define RSR_MAR		cpu_to_le16(0x2000) // MAC accept multicast address packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   81) #define RSR_BAR		cpu_to_le16(0x1000) // MAC accept broadcast address packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   82) #define RSR_PHY		cpu_to_le16(0x0800) // MAC accept physical address packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   83) #define RSR_VTAG	cpu_to_le16(0x0400) // 802.1p/1q tagging packet indicator
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   84) #define RSR_STP		cpu_to_le16(0x0200) // start of packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   85) #define RSR_EDP		cpu_to_le16(0x0100) // end of packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   87) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   88)  * Bits in the CSM register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   89)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   91) #define CSM_IPOK            0x40	//IP Checksum validation ok
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   92) #define CSM_TUPOK           0x20	//TCP/UDP Checksum validation ok
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   93) #define CSM_FRAG            0x10	//Fragment IP datagram
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   94) #define CSM_IPKT            0x04	//Received an IP packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   95) #define CSM_TCPKT           0x02	//Received a TCP packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   96) #define CSM_UDPKT           0x01	//Received a UDP packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   98) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   99)  * Bits in the TSR0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  100)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  102) #define TSR0_ABT	cpu_to_le16(0x0080) // Tx abort because of excessive collision
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  103) #define TSR0_OWT	cpu_to_le16(0x0040) // Jumbo frame Tx abort
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  104) #define TSR0_OWC	cpu_to_le16(0x0020) // Out of window collision
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  105) #define TSR0_COLS	cpu_to_le16(0x0010) // experience collision in this transmit event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  106) #define TSR0_NCR3	cpu_to_le16(0x0008) // collision retry counter[3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  107) #define TSR0_NCR2	cpu_to_le16(0x0004) // collision retry counter[2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  108) #define TSR0_NCR1	cpu_to_le16(0x0002) // collision retry counter[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  109) #define TSR0_NCR0	cpu_to_le16(0x0001) // collision retry counter[0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  110) #define TSR0_TERR	cpu_to_le16(0x8000) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  111) #define TSR0_FDX	cpu_to_le16(0x4000) // current transaction is serviced by full duplex mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  112) #define TSR0_GMII	cpu_to_le16(0x2000) // current transaction is serviced by GMII mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  113) #define TSR0_LNKFL	cpu_to_le16(0x1000) // packet serviced during link down
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  114) #define TSR0_SHDN	cpu_to_le16(0x0400) // shutdown case
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  115) #define TSR0_CRS	cpu_to_le16(0x0200) // carrier sense lost
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  116) #define TSR0_CDH	cpu_to_le16(0x0100) // AQE test fail (CD heartbeat)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  118) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  119) // Bits in the TCR0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  120) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  121) #define TCR0_TIC            0x80	// assert interrupt immediately while descriptor has been send complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  122) #define TCR0_PIC            0x40	// priority interrupt request, INA# is issued over adaptive interrupt scheme
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  123) #define TCR0_VETAG          0x20	// enable VLAN tag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  124) #define TCR0_IPCK           0x10	// request IP  checksum calculation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  125) #define TCR0_UDPCK          0x08	// request UDP checksum calculation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  126) #define TCR0_TCPCK          0x04	// request TCP checksum calculation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  127) #define TCR0_JMBO           0x02	// indicate a jumbo packet in GMAC side
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  128) #define TCR0_CRC            0x01	// disable CRC generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  130) #define TCPLS_NORMAL        3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  131) #define TCPLS_START         2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  132) #define TCPLS_END           1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  133) #define TCPLS_MED           0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  136) // max transmit or receive buffer size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  137) #define CB_RX_BUF_SIZE     2048UL	// max buffer size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  138) 					// NOTE: must be multiple of 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  140) #define CB_MAX_RD_NUM       512	// MAX # of RD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  141) #define CB_MAX_TD_NUM       256	// MAX # of TD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  143) #define CB_INIT_RD_NUM_3119 128	// init # of RD, for setup VT3119
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  144) #define CB_INIT_TD_NUM_3119 64	// init # of TD, for setup VT3119
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  146) #define CB_INIT_RD_NUM      128	// init # of RD, for setup default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  147) #define CB_INIT_TD_NUM      64	// init # of TD, for setup default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  149) // for 3119
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  150) #define CB_TD_RING_NUM      4	// # of TD rings.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  151) #define CB_MAX_SEG_PER_PKT  7	// max data seg per packet (Tx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  154) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  155)  *	If collisions excess 15 times , tx will abort, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  156)  *	if tx fifo underflow, tx will fail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  157)  *	we should try to resend it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  158)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  160) #define CB_MAX_TX_ABORT_RETRY   3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  162) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  163)  *	Receive descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  164)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  166) struct rdesc0 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  167) 	__le16 RSR;		/* Receive status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  168) 	__le16 len;		/* bits 0--13; bit 15 - owner */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  169) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  171) struct rdesc1 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  172) 	__le16 PQTAG;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  173) 	u8 CSM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  174) 	u8 IPKT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  175) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  177) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  178) 	RX_INTEN = cpu_to_le16(0x8000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  179) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  181) struct rx_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  182) 	struct rdesc0 rdesc0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  183) 	struct rdesc1 rdesc1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  184) 	__le32 pa_low;		/* Low 32 bit PCI address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  185) 	__le16 pa_high;		/* Next 16 bit PCI address (48 total) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  186) 	__le16 size;		/* bits 0--14 - frame size, bit 15 - enable int. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  187) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  188) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  189) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  190)  *	Transmit descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  191)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  193) struct tdesc0 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  194) 	__le16 TSR;		/* Transmit status register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  195) 	__le16 len;		/* bits 0--13 - size of frame, bit 15 - owner */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  196) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  198) struct tdesc1 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  199) 	__le16 vlan;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  200) 	u8 TCR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  201) 	u8 cmd;			/* bits 0--1 - TCPLS, bits 4--7 - CMDZ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  202) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  204) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  205) 	TD_QUEUE = cpu_to_le16(0x8000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  206) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  208) struct td_buf {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  209) 	__le32 pa_low;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  210) 	__le16 pa_high;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  211) 	__le16 size;		/* bits 0--13 - size, bit 15 - queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  212) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  214) struct tx_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  215) 	struct tdesc0 tdesc0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  216) 	struct tdesc1 tdesc1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  217) 	struct td_buf td_buf[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  218) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  220) struct velocity_rd_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  221) 	struct sk_buff *skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  222) 	dma_addr_t skb_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  223) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  225) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  226)  *	Used to track transmit side buffers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  227)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  229) struct velocity_td_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  230) 	struct sk_buff *skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  231) 	int nskb_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  232) 	dma_addr_t skb_dma[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  233) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  235) enum  velocity_owner {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  236) 	OWNED_BY_HOST = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  237) 	OWNED_BY_NIC = cpu_to_le16(0x8000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  238) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  241) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  242)  *	MAC registers and macros.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  243)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  246) #define MCAM_SIZE           64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  247) #define VCAM_SIZE           64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  248) #define TX_QUEUE_NO         4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  250) #define MAX_HW_MIB_COUNTER  32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  251) #define VELOCITY_MIN_MTU    (64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  252) #define VELOCITY_MAX_MTU    (9000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  254) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  255)  *	Registers in the MAC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  256)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  258) #define MAC_REG_PAR         0x00	// physical address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  259) #define MAC_REG_RCR         0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  260) #define MAC_REG_TCR         0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  261) #define MAC_REG_CR0_SET     0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  262) #define MAC_REG_CR1_SET     0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  263) #define MAC_REG_CR2_SET     0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  264) #define MAC_REG_CR3_SET     0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  265) #define MAC_REG_CR0_CLR     0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  266) #define MAC_REG_CR1_CLR     0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  267) #define MAC_REG_CR2_CLR     0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  268) #define MAC_REG_CR3_CLR     0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  269) #define MAC_REG_MAR         0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  270) #define MAC_REG_CAM         0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  271) #define MAC_REG_DEC_BASE_HI 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  272) #define MAC_REG_DBF_BASE_HI 0x1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  273) #define MAC_REG_ISR_CTL     0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  274) #define MAC_REG_ISR_HOTMR   0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  275) #define MAC_REG_ISR_TSUPTHR 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  276) #define MAC_REG_ISR_RSUPTHR 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  277) #define MAC_REG_ISR_CTL1    0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  278) #define MAC_REG_TXE_SR      0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  279) #define MAC_REG_RXE_SR      0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  280) #define MAC_REG_ISR         0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  281) #define MAC_REG_ISR0        0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  282) #define MAC_REG_ISR1        0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  283) #define MAC_REG_ISR2        0x26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  284) #define MAC_REG_ISR3        0x27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  285) #define MAC_REG_IMR         0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  286) #define MAC_REG_IMR0        0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  287) #define MAC_REG_IMR1        0x29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  288) #define MAC_REG_IMR2        0x2A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  289) #define MAC_REG_IMR3        0x2B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  290) #define MAC_REG_TDCSR_SET   0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  291) #define MAC_REG_RDCSR_SET   0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  292) #define MAC_REG_TDCSR_CLR   0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  293) #define MAC_REG_RDCSR_CLR   0x36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  294) #define MAC_REG_RDBASE_LO   0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  295) #define MAC_REG_RDINDX      0x3C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  296) #define MAC_REG_TDBASE_LO   0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  297) #define MAC_REG_RDCSIZE     0x50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  298) #define MAC_REG_TDCSIZE     0x52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  299) #define MAC_REG_TDINDX      0x54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  300) #define MAC_REG_TDIDX0      0x54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  301) #define MAC_REG_TDIDX1      0x56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  302) #define MAC_REG_TDIDX2      0x58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  303) #define MAC_REG_TDIDX3      0x5A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  304) #define MAC_REG_PAUSE_TIMER 0x5C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  305) #define MAC_REG_RBRDU       0x5E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  306) #define MAC_REG_FIFO_TEST0  0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  307) #define MAC_REG_FIFO_TEST1  0x64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  308) #define MAC_REG_CAMADDR     0x68
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  309) #define MAC_REG_CAMCR       0x69
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  310) #define MAC_REG_GFTEST      0x6A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  311) #define MAC_REG_FTSTCMD     0x6B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  312) #define MAC_REG_MIICFG      0x6C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  313) #define MAC_REG_MIISR       0x6D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  314) #define MAC_REG_PHYSR0      0x6E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  315) #define MAC_REG_PHYSR1      0x6F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  316) #define MAC_REG_MIICR       0x70
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  317) #define MAC_REG_MIIADR      0x71
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  318) #define MAC_REG_MIIDATA     0x72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  319) #define MAC_REG_SOFT_TIMER0 0x74
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  320) #define MAC_REG_SOFT_TIMER1 0x76
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  321) #define MAC_REG_CFGA        0x78
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  322) #define MAC_REG_CFGB        0x79
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  323) #define MAC_REG_CFGC        0x7A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  324) #define MAC_REG_CFGD        0x7B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  325) #define MAC_REG_DCFG0       0x7C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  326) #define MAC_REG_DCFG1       0x7D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  327) #define MAC_REG_MCFG0       0x7E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  328) #define MAC_REG_MCFG1       0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  330) #define MAC_REG_TBIST       0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  331) #define MAC_REG_RBIST       0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  332) #define MAC_REG_PMCC        0x82
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  333) #define MAC_REG_STICKHW     0x83
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  334) #define MAC_REG_MIBCR       0x84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  335) #define MAC_REG_EERSV       0x85
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  336) #define MAC_REG_REVID       0x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  337) #define MAC_REG_MIBREAD     0x88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  338) #define MAC_REG_BPMA        0x8C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  339) #define MAC_REG_EEWR_DATA   0x8C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  340) #define MAC_REG_BPMD_WR     0x8F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  341) #define MAC_REG_BPCMD       0x90
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  342) #define MAC_REG_BPMD_RD     0x91
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  343) #define MAC_REG_EECHKSUM    0x92
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  344) #define MAC_REG_EECSR       0x93
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  345) #define MAC_REG_EERD_DATA   0x94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  346) #define MAC_REG_EADDR       0x96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  347) #define MAC_REG_EMBCMD      0x97
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  348) #define MAC_REG_JMPSR0      0x98
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  349) #define MAC_REG_JMPSR1      0x99
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  350) #define MAC_REG_JMPSR2      0x9A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  351) #define MAC_REG_JMPSR3      0x9B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  352) #define MAC_REG_CHIPGSR     0x9C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  353) #define MAC_REG_TESTCFG     0x9D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  354) #define MAC_REG_DEBUG       0x9E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  355) #define MAC_REG_CHIPGCR     0x9F	/* Chip Operation and Diagnostic Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  356) #define MAC_REG_WOLCR0_SET  0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  357) #define MAC_REG_WOLCR1_SET  0xA1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  358) #define MAC_REG_PWCFG_SET   0xA2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  359) #define MAC_REG_WOLCFG_SET  0xA3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  360) #define MAC_REG_WOLCR0_CLR  0xA4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  361) #define MAC_REG_WOLCR1_CLR  0xA5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  362) #define MAC_REG_PWCFG_CLR   0xA6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  363) #define MAC_REG_WOLCFG_CLR  0xA7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  364) #define MAC_REG_WOLSR0_SET  0xA8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  365) #define MAC_REG_WOLSR1_SET  0xA9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  366) #define MAC_REG_WOLSR0_CLR  0xAC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  367) #define MAC_REG_WOLSR1_CLR  0xAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  368) #define MAC_REG_PATRN_CRC0  0xB0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  369) #define MAC_REG_PATRN_CRC1  0xB2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  370) #define MAC_REG_PATRN_CRC2  0xB4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  371) #define MAC_REG_PATRN_CRC3  0xB6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  372) #define MAC_REG_PATRN_CRC4  0xB8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  373) #define MAC_REG_PATRN_CRC5  0xBA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  374) #define MAC_REG_PATRN_CRC6  0xBC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  375) #define MAC_REG_PATRN_CRC7  0xBE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  376) #define MAC_REG_BYTEMSK0_0  0xC0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  377) #define MAC_REG_BYTEMSK0_1  0xC4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  378) #define MAC_REG_BYTEMSK0_2  0xC8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  379) #define MAC_REG_BYTEMSK0_3  0xCC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  380) #define MAC_REG_BYTEMSK1_0  0xD0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  381) #define MAC_REG_BYTEMSK1_1  0xD4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  382) #define MAC_REG_BYTEMSK1_2  0xD8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  383) #define MAC_REG_BYTEMSK1_3  0xDC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  384) #define MAC_REG_BYTEMSK2_0  0xE0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  385) #define MAC_REG_BYTEMSK2_1  0xE4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  386) #define MAC_REG_BYTEMSK2_2  0xE8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  387) #define MAC_REG_BYTEMSK2_3  0xEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  388) #define MAC_REG_BYTEMSK3_0  0xF0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  389) #define MAC_REG_BYTEMSK3_1  0xF4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  390) #define MAC_REG_BYTEMSK3_2  0xF8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  391) #define MAC_REG_BYTEMSK3_3  0xFC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  393) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  394)  *	Bits in the RCR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  395)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  397) #define RCR_AS              0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  398) #define RCR_AP              0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  399) #define RCR_AL              0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  400) #define RCR_PROM            0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  401) #define RCR_AB              0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  402) #define RCR_AM              0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  403) #define RCR_AR              0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  404) #define RCR_SEP             0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  405) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  406) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  407)  *	Bits in the TCR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  408)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  410) #define TCR_TB2BDIS         0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  411) #define TCR_COLTMC1         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  412) #define TCR_COLTMC0         0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  413) #define TCR_LB1             0x02	/* loopback[1] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  414) #define TCR_LB0             0x01	/* loopback[0] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  415) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  416) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  417)  *	Bits in the CR0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  418)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  419) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  420) #define CR0_TXON            0x00000008UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  421) #define CR0_RXON            0x00000004UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  422) #define CR0_STOP            0x00000002UL	/* stop MAC, default = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  423) #define CR0_STRT            0x00000001UL	/* start MAC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  424) #define CR0_SFRST           0x00008000UL	/* software reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  425) #define CR0_TM1EN           0x00004000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  426) #define CR0_TM0EN           0x00002000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  427) #define CR0_DPOLL           0x00000800UL	/* disable rx/tx auto polling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  428) #define CR0_DISAU           0x00000100UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  429) #define CR0_XONEN           0x00800000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  430) #define CR0_FDXTFCEN        0x00400000UL	/* full-duplex TX flow control enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  431) #define CR0_FDXRFCEN        0x00200000UL	/* full-duplex RX flow control enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  432) #define CR0_HDXFCEN         0x00100000UL	/* half-duplex flow control enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  433) #define CR0_XHITH1          0x00080000UL	/* TX XON high threshold 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  434) #define CR0_XHITH0          0x00040000UL	/* TX XON high threshold 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  435) #define CR0_XLTH1           0x00020000UL	/* TX pause frame low threshold 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  436) #define CR0_XLTH0           0x00010000UL	/* TX pause frame low threshold 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  437) #define CR0_GSPRST          0x80000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  438) #define CR0_FORSRST         0x40000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  439) #define CR0_FPHYRST         0x20000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  440) #define CR0_DIAG            0x10000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  441) #define CR0_INTPCTL         0x04000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  442) #define CR0_GINTMSK1        0x02000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  443) #define CR0_GINTMSK0        0x01000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  444) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  445) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  446)  *	Bits in the CR1 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  447)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  448) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  449) #define CR1_SFRST           0x80	/* software reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  450) #define CR1_TM1EN           0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  451) #define CR1_TM0EN           0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  452) #define CR1_DPOLL           0x08	/* disable rx/tx auto polling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  453) #define CR1_DISAU           0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  454) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  455) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  456)  *	Bits in the CR2 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  457)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  458) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  459) #define CR2_XONEN           0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  460) #define CR2_FDXTFCEN        0x40	/* full-duplex TX flow control enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  461) #define CR2_FDXRFCEN        0x20	/* full-duplex RX flow control enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  462) #define CR2_HDXFCEN         0x10	/* half-duplex flow control enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  463) #define CR2_XHITH1          0x08	/* TX XON high threshold 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  464) #define CR2_XHITH0          0x04	/* TX XON high threshold 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  465) #define CR2_XLTH1           0x02	/* TX pause frame low threshold 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  466) #define CR2_XLTH0           0x01	/* TX pause frame low threshold 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  467) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  468) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  469)  *	Bits in the CR3 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  470)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  471) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  472) #define CR3_GSPRST          0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  473) #define CR3_FORSRST         0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  474) #define CR3_FPHYRST         0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  475) #define CR3_DIAG            0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  476) #define CR3_INTPCTL         0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  477) #define CR3_GINTMSK1        0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  478) #define CR3_GINTMSK0        0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  479) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  480) #define ISRCTL_UDPINT       0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  481) #define ISRCTL_TSUPDIS      0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  482) #define ISRCTL_RSUPDIS      0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  483) #define ISRCTL_PMSK1        0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  484) #define ISRCTL_PMSK0        0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  485) #define ISRCTL_INTPD        0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  486) #define ISRCTL_HCRLD        0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  487) #define ISRCTL_SCRLD        0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  488) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  489) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  490)  *	Bits in the ISR_CTL1 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  491)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  493) #define ISRCTL1_UDPINT      0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  494) #define ISRCTL1_TSUPDIS     0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  495) #define ISRCTL1_RSUPDIS     0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  496) #define ISRCTL1_PMSK1       0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  497) #define ISRCTL1_PMSK0       0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  498) #define ISRCTL1_INTPD       0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  499) #define ISRCTL1_HCRLD       0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  500) #define ISRCTL1_SCRLD       0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  501) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  502) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  503)  *	Bits in the TXE_SR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  504)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  505) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  506) #define TXESR_TFDBS         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  507) #define TXESR_TDWBS         0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  508) #define TXESR_TDRBS         0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  509) #define TXESR_TDSTR         0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  511) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  512)  *	Bits in the RXE_SR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  513)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  514) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  515) #define RXESR_RFDBS         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  516) #define RXESR_RDWBS         0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  517) #define RXESR_RDRBS         0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  518) #define RXESR_RDSTR         0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  519) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  520) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  521)  *	Bits in the ISR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  522)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  523) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  524) #define ISR_ISR3            0x80000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  525) #define ISR_ISR2            0x40000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  526) #define ISR_ISR1            0x20000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  527) #define ISR_ISR0            0x10000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  528) #define ISR_TXSTLI          0x02000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  529) #define ISR_RXSTLI          0x01000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  530) #define ISR_HFLD            0x00800000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  531) #define ISR_UDPI            0x00400000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  532) #define ISR_MIBFI           0x00200000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  533) #define ISR_SHDNI           0x00100000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  534) #define ISR_PHYI            0x00080000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  535) #define ISR_PWEI            0x00040000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  536) #define ISR_TMR1I           0x00020000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  537) #define ISR_TMR0I           0x00010000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  538) #define ISR_SRCI            0x00008000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  539) #define ISR_LSTPEI          0x00004000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  540) #define ISR_LSTEI           0x00002000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  541) #define ISR_OVFI            0x00001000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  542) #define ISR_FLONI           0x00000800UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  543) #define ISR_RACEI           0x00000400UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  544) #define ISR_TXWB1I          0x00000200UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  545) #define ISR_TXWB0I          0x00000100UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  546) #define ISR_PTX3I           0x00000080UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  547) #define ISR_PTX2I           0x00000040UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  548) #define ISR_PTX1I           0x00000020UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  549) #define ISR_PTX0I           0x00000010UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  550) #define ISR_PTXI            0x00000008UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  551) #define ISR_PRXI            0x00000004UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  552) #define ISR_PPTXI           0x00000002UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  553) #define ISR_PPRXI           0x00000001UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  555) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  556)  *	Bits in the IMR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  557)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  558) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  559) #define IMR_TXSTLM          0x02000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  560) #define IMR_UDPIM           0x00400000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  561) #define IMR_MIBFIM          0x00200000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  562) #define IMR_SHDNIM          0x00100000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  563) #define IMR_PHYIM           0x00080000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  564) #define IMR_PWEIM           0x00040000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  565) #define IMR_TMR1IM          0x00020000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  566) #define IMR_TMR0IM          0x00010000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  568) #define IMR_SRCIM           0x00008000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  569) #define IMR_LSTPEIM         0x00004000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  570) #define IMR_LSTEIM          0x00002000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  571) #define IMR_OVFIM           0x00001000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  572) #define IMR_FLONIM          0x00000800UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  573) #define IMR_RACEIM          0x00000400UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  574) #define IMR_TXWB1IM         0x00000200UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  575) #define IMR_TXWB0IM         0x00000100UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  576) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  577) #define IMR_PTX3IM          0x00000080UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  578) #define IMR_PTX2IM          0x00000040UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  579) #define IMR_PTX1IM          0x00000020UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  580) #define IMR_PTX0IM          0x00000010UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  581) #define IMR_PTXIM           0x00000008UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  582) #define IMR_PRXIM           0x00000004UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  583) #define IMR_PPTXIM          0x00000002UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  584) #define IMR_PPRXIM          0x00000001UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  585) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  586) /* 0x0013FB0FUL  =  initial value of IMR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  587) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  588) #define INT_MASK_DEF        (IMR_PPTXIM|IMR_PPRXIM|IMR_PTXIM|IMR_PRXIM|\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  589)                             IMR_PWEIM|IMR_TXWB0IM|IMR_TXWB1IM|IMR_FLONIM|\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  590)                             IMR_OVFIM|IMR_LSTEIM|IMR_LSTPEIM|IMR_SRCIM|IMR_MIBFIM|\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  591)                             IMR_SHDNIM|IMR_TMR1IM|IMR_TMR0IM|IMR_TXSTLM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  592) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  593) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  594)  *	Bits in the TDCSR0/1, RDCSR0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  595)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  596) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  597) #define TRDCSR_DEAD         0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  598) #define TRDCSR_WAK          0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  599) #define TRDCSR_ACT          0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  600) #define TRDCSR_RUN	    0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  602) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  603)  *	Bits in the CAMADDR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  604)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  605) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  606) #define CAMADDR_CAMEN       0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  607) #define CAMADDR_VCAMSL      0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  608) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  609) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  610)  *	Bits in the CAMCR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  611)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  612) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  613) #define CAMCR_PS1           0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  614) #define CAMCR_PS0           0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  615) #define CAMCR_AITRPKT       0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  616) #define CAMCR_AITR16        0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  617) #define CAMCR_CAMRD         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  618) #define CAMCR_CAMWR         0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  619) #define CAMCR_PS_CAM_MASK   0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  620) #define CAMCR_PS_CAM_DATA   0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  621) #define CAMCR_PS_MAR        0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  622) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  623) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  624)  *	Bits in the MIICFG register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  625)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  626) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  627) #define MIICFG_MPO1         0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  628) #define MIICFG_MPO0         0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  629) #define MIICFG_MFDC         0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  630) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  631) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  632)  *	Bits in the MIISR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  633)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  634) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  635) #define MIISR_MIDLE         0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  636) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  637) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  638)  *	 Bits in the PHYSR0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  639)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  640) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  641) #define PHYSR0_PHYRST       0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  642) #define PHYSR0_LINKGD       0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  643) #define PHYSR0_FDPX         0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  644) #define PHYSR0_SPDG         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  645) #define PHYSR0_SPD10        0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  646) #define PHYSR0_RXFLC        0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  647) #define PHYSR0_TXFLC        0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  648) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  649) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  650)  *	Bits in the PHYSR1 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  651)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  652) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  653) #define PHYSR1_PHYTBI       0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  655) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  656)  *	Bits in the MIICR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  657)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  658) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  659) #define MIICR_MAUTO         0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  660) #define MIICR_RCMD          0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  661) #define MIICR_WCMD          0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  662) #define MIICR_MDPM          0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  663) #define MIICR_MOUT          0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  664) #define MIICR_MDO           0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  665) #define MIICR_MDI           0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  666) #define MIICR_MDC           0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  667) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  668) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  669)  *	Bits in the MIIADR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  670)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  671) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  672) #define MIIADR_SWMPL        0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  673) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  674) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  675)  *	Bits in the CFGA register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  676)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  677) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  678) #define CFGA_PMHCTG         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  679) #define CFGA_GPIO1PD        0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  680) #define CFGA_ABSHDN         0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  681) #define CFGA_PACPI          0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  682) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  683) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  684)  *	Bits in the CFGB register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  685)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  686) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  687) #define CFGB_GTCKOPT        0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  688) #define CFGB_MIIOPT         0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  689) #define CFGB_CRSEOPT        0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  690) #define CFGB_OFSET          0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  691) #define CFGB_CRANDOM        0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  692) #define CFGB_CAP            0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  693) #define CFGB_MBA            0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  694) #define CFGB_BAKOPT         0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  695) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  696) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  697)  *	Bits in the CFGC register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  698)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  699) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  700) #define CFGC_EELOAD         0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  701) #define CFGC_BROPT          0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  702) #define CFGC_DLYEN          0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  703) #define CFGC_DTSEL          0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  704) #define CFGC_BTSEL          0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  705) #define CFGC_BPS2           0x04	/* bootrom select[2] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  706) #define CFGC_BPS1           0x02	/* bootrom select[1] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  707) #define CFGC_BPS0           0x01	/* bootrom select[0] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  708) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  709) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  710)  * Bits in the CFGD register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  711)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  712) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  713) #define CFGD_IODIS          0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  714) #define CFGD_MSLVDACEN      0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  715) #define CFGD_CFGDACEN       0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  716) #define CFGD_PCI64EN        0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  717) #define CFGD_HTMRL4         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  718) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  719) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  720)  *	Bits in the DCFG1 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  721)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  722) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  723) #define DCFG_XMWI           0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  724) #define DCFG_XMRM           0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  725) #define DCFG_XMRL           0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  726) #define DCFG_PERDIS         0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  727) #define DCFG_MRWAIT         0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  728) #define DCFG_MWWAIT         0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  729) #define DCFG_LATMEN         0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  731) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  732)  *	Bits in the MCFG0 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  733)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  734) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  735) #define MCFG_RXARB          0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  736) #define MCFG_RFT1           0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  737) #define MCFG_RFT0           0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  738) #define MCFG_LOWTHOPT       0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  739) #define MCFG_PQEN           0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  740) #define MCFG_RTGOPT         0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  741) #define MCFG_VIDFR          0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  742) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  743) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  744)  *	Bits in the MCFG1 register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  745)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  746) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  747) #define MCFG_TXARB          0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  748) #define MCFG_TXQBK1         0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  749) #define MCFG_TXQBK0         0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  750) #define MCFG_TXQNOBK        0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  751) #define MCFG_SNAPOPT        0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  752) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  753) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  754)  *	Bits in the PMCC  register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  755)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  756) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  757) #define PMCC_DSI            0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  758) #define PMCC_D2_DIS         0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  759) #define PMCC_D1_DIS         0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  760) #define PMCC_D3C_EN         0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  761) #define PMCC_D3H_EN         0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  762) #define PMCC_D2_EN          0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  763) #define PMCC_D1_EN          0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  764) #define PMCC_D0_EN          0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  765) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  766) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  767)  *	Bits in STICKHW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  768)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  769) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  770) #define STICKHW_SWPTAG      0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  771) #define STICKHW_WOLSR       0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  772) #define STICKHW_WOLEN       0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  773) #define STICKHW_DS1         0x02	/* R/W by software/cfg cycle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  774) #define STICKHW_DS0         0x01	/* suspend well DS write port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  775) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  776) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  777)  *	Bits in the MIBCR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  778)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  779) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  780) #define MIBCR_MIBISTOK      0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  781) #define MIBCR_MIBISTGO      0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  782) #define MIBCR_MIBINC        0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  783) #define MIBCR_MIBHI         0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  784) #define MIBCR_MIBFRZ        0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  785) #define MIBCR_MIBFLSH       0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  786) #define MIBCR_MPTRINI       0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  787) #define MIBCR_MIBCLR        0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  788) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  789) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  790)  *	Bits in the EERSV register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  791)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  792) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  793) #define EERSV_BOOT_RPL      ((u8) 0x01)	 /* Boot method selection for VT6110 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  795) #define EERSV_BOOT_MASK     ((u8) 0x06)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  796) #define EERSV_BOOT_INT19    ((u8) 0x00)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  797) #define EERSV_BOOT_INT18    ((u8) 0x02)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  798) #define EERSV_BOOT_LOCAL    ((u8) 0x04)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  799) #define EERSV_BOOT_BEV      ((u8) 0x06)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  800) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  801) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  802) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  803)  *	Bits in BPCMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  804)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  805) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  806) #define BPCMD_BPDNE         0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  807) #define BPCMD_EBPWR         0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  808) #define BPCMD_EBPRD         0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  809) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  810) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  811)  *	Bits in the EECSR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  812)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  813) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  814) #define EECSR_EMBP          0x40	/* eeprom embedded programming */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  815) #define EECSR_RELOAD        0x20	/* eeprom content reload */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  816) #define EECSR_DPM           0x10	/* eeprom direct programming */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  817) #define EECSR_ECS           0x08	/* eeprom CS pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  818) #define EECSR_ECK           0x04	/* eeprom CK pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  819) #define EECSR_EDI           0x02	/* eeprom DI pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  820) #define EECSR_EDO           0x01	/* eeprom DO pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  821) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  822) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  823)  *	Bits in the EMBCMD register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  824)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  825) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  826) #define EMBCMD_EDONE        0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  827) #define EMBCMD_EWDIS        0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  828) #define EMBCMD_EWEN         0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  829) #define EMBCMD_EWR          0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  830) #define EMBCMD_ERD          0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  831) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  832) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  833)  *	Bits in TESTCFG register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  834)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  835) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  836) #define TESTCFG_HBDIS       0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  837) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  838) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  839)  *	Bits in CHIPGCR register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  840)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  841) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  842) #define CHIPGCR_FCGMII      0x80	/* force GMII (else MII only) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  843) #define CHIPGCR_FCFDX       0x40	/* force full duplex */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  844) #define CHIPGCR_FCRESV      0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  845) #define CHIPGCR_FCMODE      0x10	/* enable MAC forced mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  846) #define CHIPGCR_LPSOPT      0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  847) #define CHIPGCR_TM1US       0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  848) #define CHIPGCR_TM0US       0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  849) #define CHIPGCR_PHYINTEN    0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  850) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  851) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  852)  *	Bits in WOLCR0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  853)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  854) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  855) #define WOLCR_MSWOLEN7      0x0080	/* enable pattern match filtering */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  856) #define WOLCR_MSWOLEN6      0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  857) #define WOLCR_MSWOLEN5      0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  858) #define WOLCR_MSWOLEN4      0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  859) #define WOLCR_MSWOLEN3      0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  860) #define WOLCR_MSWOLEN2      0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  861) #define WOLCR_MSWOLEN1      0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  862) #define WOLCR_MSWOLEN0      0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  863) #define WOLCR_ARP_EN        0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  864) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  865) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  866)  *	Bits in WOLCR1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  867)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  868) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  869) #define WOLCR_LINKOFF_EN      0x0800	/* link off detected enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  870) #define WOLCR_LINKON_EN       0x0400	/* link on detected enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  871) #define WOLCR_MAGIC_EN        0x0200	/* magic packet filter enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  872) #define WOLCR_UNICAST_EN      0x0100	/* unicast filter enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  873) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  874) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  875) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  876)  *	Bits in PWCFG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  877)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  878) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  879) #define PWCFG_PHYPWOPT          0x80	/* internal MII I/F timing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  880) #define PWCFG_PCISTICK          0x40	/* PCI sticky R/W enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  881) #define PWCFG_WOLTYPE           0x20	/* pulse(1) or button (0) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  882) #define PWCFG_LEGCY_WOL         0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  883) #define PWCFG_PMCSR_PME_SR      0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  884) #define PWCFG_PMCSR_PME_EN      0x04	/* control by PCISTICK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  885) #define PWCFG_LEGACY_WOLSR      0x02	/* Legacy WOL_SR shadow */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  886) #define PWCFG_LEGACY_WOLEN      0x01	/* Legacy WOL_EN shadow */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  887) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  888) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  889)  *	Bits in WOLCFG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  890)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  891) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  892) #define WOLCFG_PMEOVR           0x80	/* for legacy use, force PMEEN always */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  893) #define WOLCFG_SAM              0x20	/* accept multicast case reset, default=0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  894) #define WOLCFG_SAB              0x10	/* accept broadcast case reset, default=0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  895) #define WOLCFG_SMIIACC          0x08	/* ?? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  896) #define WOLCFG_SGENWH           0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  897) #define WOLCFG_PHYINTEN         0x01	/* 0:PHYINT trigger enable, 1:use internal MII
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  898) 					  to report status change */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  899) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  900)  *	Bits in WOLSR1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  901)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  902) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  903) #define WOLSR_LINKOFF_INT      0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  904) #define WOLSR_LINKON_INT       0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  905) #define WOLSR_MAGIC_INT        0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  906) #define WOLSR_UNICAST_INT      0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  907) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  908) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  909)  *	Ethernet address filter type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  910)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  911) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  912) #define PKT_TYPE_NONE               0x0000	/* Turn off receiver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  913) #define PKT_TYPE_DIRECTED           0x0001	/* obselete, directed address is always accepted */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  914) #define PKT_TYPE_MULTICAST          0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  915) #define PKT_TYPE_ALL_MULTICAST      0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  916) #define PKT_TYPE_BROADCAST          0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  917) #define PKT_TYPE_PROMISCUOUS        0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  918) #define PKT_TYPE_LONG               0x2000	/* NOTE.... the definition of LONG is >2048 bytes in our chip */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  919) #define PKT_TYPE_RUNT               0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  920) #define PKT_TYPE_ERROR              0x8000	/* Accept error packets, e.g. CRC error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  921) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  922) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  923)  *	Loopback mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  924)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  925) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  926) #define MAC_LB_NONE         0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  927) #define MAC_LB_INTERNAL     0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  928) #define MAC_LB_EXTERNAL     0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  929) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  930) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  931)  *	Enabled mask value of irq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  932)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  933) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  934) #if defined(_SIM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  935) #define IMR_MASK_VALUE      0x0033FF0FUL	/* initial value of IMR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  936) 						   set IMR0 to 0x0F according to spec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  937) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  938) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  939) #define IMR_MASK_VALUE      0x0013FB0FUL	/* initial value of IMR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  940) 						   ignore MIBFI,RACEI to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  941) 						   reduce intr. frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  942) 						   NOTE.... do not enable NoBuf int mask at driver driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  943) 						      when (1) NoBuf -> RxThreshold = SF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  944) 							   (2) OK    -> RxThreshold = original value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  945) 						 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  946) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  947) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  948) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  949)  *	Revision id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  950)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  951) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  952) #define REV_ID_VT3119_A0	0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  953) #define REV_ID_VT3119_A1	0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  954) #define REV_ID_VT3216_A0	0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  955) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  956) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  957)  *	Max time out delay time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  958)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  959) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  960) #define W_MAX_TIMEOUT       0x0FFFU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  961) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  962) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  963) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  964)  *	MAC registers as a structure. Cannot be directly accessed this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  965)  *	way but generates offsets for readl/writel() calls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  966)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  967) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  968) struct mac_regs {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  969) 	volatile u8 PAR[6];		/* 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  970) 	volatile u8 RCR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  971) 	volatile u8 TCR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  972) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  973) 	volatile __le32 CR0Set;		/* 0x08 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  974) 	volatile __le32 CR0Clr;		/* 0x0C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  975) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  976) 	volatile u8 MARCAM[8];		/* 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  977) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  978) 	volatile __le32 DecBaseHi;	/* 0x18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  979) 	volatile __le16 DbfBaseHi;	/* 0x1C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  980) 	volatile __le16 reserved_1E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  982) 	volatile __le16 ISRCTL;		/* 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  983) 	volatile u8 TXESR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  984) 	volatile u8 RXESR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  985) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  986) 	volatile __le32 ISR;		/* 0x24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  987) 	volatile __le32 IMR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  988) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  989) 	volatile __le32 TDStatusPort;	/* 0x2C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  990) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  991) 	volatile __le16 TDCSRSet;	/* 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  992) 	volatile u8 RDCSRSet;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  993) 	volatile u8 reserved_33;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  994) 	volatile __le16 TDCSRClr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  995) 	volatile u8 RDCSRClr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  996) 	volatile u8 reserved_37;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  997) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  998) 	volatile __le32 RDBaseLo;	/* 0x38 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  999) 	volatile __le16 RDIdx;		/* 0x3C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) 	volatile u8 TQETMR;		/* 0x3E, VT3216 and above only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) 	volatile u8 RQETMR;		/* 0x3F, VT3216 and above only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) 	volatile __le32 TDBaseLo[4];	/* 0x40 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) 	volatile __le16 RDCSize;	/* 0x50 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) 	volatile __le16 TDCSize;	/* 0x52 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) 	volatile __le16 TDIdx[4];	/* 0x54 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) 	volatile __le16 tx_pause_timer;	/* 0x5C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) 	volatile __le16 RBRDU;		/* 0x5E */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) 	volatile __le32 FIFOTest0;	/* 0x60 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) 	volatile __le32 FIFOTest1;	/* 0x64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) 	volatile u8 CAMADDR;		/* 0x68 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) 	volatile u8 CAMCR;		/* 0x69 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) 	volatile u8 GFTEST;		/* 0x6A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) 	volatile u8 FTSTCMD;		/* 0x6B */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) 	volatile u8 MIICFG;		/* 0x6C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) 	volatile u8 MIISR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) 	volatile u8 PHYSR0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) 	volatile u8 PHYSR1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) 	volatile u8 MIICR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) 	volatile u8 MIIADR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) 	volatile __le16 MIIDATA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) 	volatile __le16 SoftTimer0;	/* 0x74 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) 	volatile __le16 SoftTimer1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) 	volatile u8 CFGA;		/* 0x78 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) 	volatile u8 CFGB;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) 	volatile u8 CFGC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 	volatile u8 CFGD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) 	volatile __le16 DCFG;		/* 0x7C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) 	volatile __le16 MCFG;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) 	volatile u8 TBIST;		/* 0x80 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) 	volatile u8 RBIST;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) 	volatile u8 PMCPORT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) 	volatile u8 STICKHW;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) 	volatile u8 MIBCR;		/* 0x84 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) 	volatile u8 reserved_85;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) 	volatile u8 rev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) 	volatile u8 PORSTS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) 	volatile __le32 MIBData;	/* 0x88 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) 	volatile __le16 EEWrData;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) 	volatile u8 reserved_8E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) 	volatile u8 BPMDWr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) 	volatile u8 BPCMD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) 	volatile u8 BPMDRd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) 	volatile u8 EECHKSUM;		/* 0x92 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) 	volatile u8 EECSR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) 	volatile __le16 EERdData;	/* 0x94 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) 	volatile u8 EADDR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) 	volatile u8 EMBCMD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) 	volatile u8 JMPSR0;		/* 0x98 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) 	volatile u8 JMPSR1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) 	volatile u8 JMPSR2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) 	volatile u8 JMPSR3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) 	volatile u8 CHIPGSR;		/* 0x9C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) 	volatile u8 TESTCFG;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) 	volatile u8 DEBUG;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) 	volatile u8 CHIPGCR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) 	volatile __le16 WOLCRSet;	/* 0xA0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 	volatile u8 PWCFGSet;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) 	volatile u8 WOLCFGSet;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) 	volatile __le16 WOLCRClr;	/* 0xA4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) 	volatile u8 PWCFGCLR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) 	volatile u8 WOLCFGClr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) 	volatile __le16 WOLSRSet;	/* 0xA8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) 	volatile __le16 reserved_AA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) 	volatile __le16 WOLSRClr;	/* 0xAC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) 	volatile __le16 reserved_AE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 	volatile __le16 PatternCRC[8];	/* 0xB0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) 	volatile __le32 ByteMask[4][4];	/* 0xC0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) enum hw_mib {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) 	HW_MIB_ifRxAllPkts = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) 	HW_MIB_ifRxOkPkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) 	HW_MIB_ifTxOkPkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) 	HW_MIB_ifRxErrorPkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) 	HW_MIB_ifRxRuntOkPkt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) 	HW_MIB_ifRxRuntErrPkt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) 	HW_MIB_ifRx64Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) 	HW_MIB_ifTx64Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) 	HW_MIB_ifRx65To127Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) 	HW_MIB_ifTx65To127Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) 	HW_MIB_ifRx128To255Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) 	HW_MIB_ifTx128To255Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) 	HW_MIB_ifRx256To511Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) 	HW_MIB_ifTx256To511Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) 	HW_MIB_ifRx512To1023Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) 	HW_MIB_ifTx512To1023Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) 	HW_MIB_ifRx1024To1518Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) 	HW_MIB_ifTx1024To1518Pkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) 	HW_MIB_ifTxEtherCollisions,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) 	HW_MIB_ifRxPktCRCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) 	HW_MIB_ifRxJumboPkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) 	HW_MIB_ifTxJumboPkts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) 	HW_MIB_ifRxMacControlFrames,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) 	HW_MIB_ifTxMacControlFrames,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) 	HW_MIB_ifRxPktFAE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) 	HW_MIB_ifRxLongOkPkt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) 	HW_MIB_ifRxLongPktErrPkt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) 	HW_MIB_ifTXSQEErrors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) 	HW_MIB_ifRxNobuf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) 	HW_MIB_ifRxSymbolErrors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) 	HW_MIB_ifInRangeLengthErrors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) 	HW_MIB_ifLateCollisions,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) 	HW_MIB_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) enum chip_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) 	CHIP_TYPE_VT6110 = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) struct velocity_info_tbl {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) 	enum chip_type chip_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) 	int txqueue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) #define mac_hw_mibs_init(regs) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) 	BYTE_REG_BITS_ON(MIBCR_MIBFRZ,&((regs)->MIBCR));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) 	BYTE_REG_BITS_ON(MIBCR_MIBCLR,&((regs)->MIBCR));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) 	do {}\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) 		while (BYTE_REG_BITS_IS_ON(MIBCR_MIBCLR,&((regs)->MIBCR)));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) 	BYTE_REG_BITS_OFF(MIBCR_MIBFRZ,&((regs)->MIBCR));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) #define mac_read_isr(regs)  		readl(&((regs)->ISR))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) #define mac_write_isr(regs, x)  	writel((x),&((regs)->ISR))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) #define mac_clear_isr(regs) 		writel(0xffffffffL,&((regs)->ISR))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) #define mac_write_int_mask(mask, regs) 	writel((mask),&((regs)->IMR));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) #define mac_disable_int(regs)       	writel(CR0_GINTMSK1,&((regs)->CR0Clr))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) #define mac_enable_int(regs)    	writel(CR0_GINTMSK1,&((regs)->CR0Set))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) #define mac_set_dma_length(regs, n) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) 	BYTE_REG_BITS_SET((n),0x07,&((regs)->DCFG));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) #define mac_set_rx_thresh(regs, n) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) 	BYTE_REG_BITS_SET((n),(MCFG_RFT0|MCFG_RFT1),&((regs)->MCFG));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) #define mac_rx_queue_run(regs) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) 	writeb(TRDCSR_RUN, &((regs)->RDCSRSet));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) #define mac_rx_queue_wake(regs) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) 	writeb(TRDCSR_WAK, &((regs)->RDCSRSet));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) #define mac_tx_queue_run(regs, n) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) 	writew(TRDCSR_RUN<<((n)*4),&((regs)->TDCSRSet));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) #define mac_tx_queue_wake(regs, n) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) 	writew(TRDCSR_WAK<<(n*4),&((regs)->TDCSRSet));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) static inline void mac_eeprom_reload(struct mac_regs __iomem * regs) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) 	int i=0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) 	BYTE_REG_BITS_ON(EECSR_RELOAD,&(regs->EECSR));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) 	do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) 		udelay(10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) 		if (i++>0x1000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) 	} while (BYTE_REG_BITS_IS_ON(EECSR_RELOAD,&(regs->EECSR)));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192)  * Header for WOL definitions. Used to compute hashes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) typedef u8 MCAM_ADDR[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) struct arp_packet {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) 	u8 dest_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) 	u8 src_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) 	__be16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) 	__be16 ar_hrd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) 	__be16 ar_pro;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) 	u8 ar_hln;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) 	u8 ar_pln;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) 	__be16 ar_op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) 	u8 ar_sha[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) 	u8 ar_sip[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) 	u8 ar_tha[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) 	u8 ar_tip[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) struct _magic_packet {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) 	u8 dest_mac[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) 	u8 src_mac[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) 	__be16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) 	u8 MAC[16][6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) 	u8 password[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221)  *	Store for chip context when saving and restoring status. Not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222)  *	all fields are saved/restored currently.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) struct velocity_context {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) 	u8 mac_reg[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) 	MCAM_ADDR cam_addr[MCAM_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) 	u16 vcam[VCAM_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) 	u32 cammask[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) 	u32 patcrc[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) 	u32 pattern[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235)  *	Registers in the MII (offset unit is WORD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) // Marvell 88E1000/88E1000S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) #define MII_REG_PSCR        0x10	// PHY specific control register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) // Bits in the Silicon revision register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) #define TCSR_ECHODIS        0x2000	//
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) #define AUXCR_MDPPS         0x0004	//
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) // Bits in the PLED register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) #define PLED_LALBE			0x0004	//
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) // Marvell 88E1000/88E1000S Bits in the PHY specific control register (10h)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) #define PSCR_ACRSTX         0x0800	// Assert CRS on Transmit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) #define PHYID_CICADA_CS8201 0x000FC410UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) #define PHYID_VT3216_32BIT  0x000FC610UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) #define PHYID_VT3216_64BIT  0x000FC600UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) #define PHYID_MARVELL_1000  0x01410C50UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) #define PHYID_MARVELL_1000S 0x01410C40UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) #define PHYID_ICPLUS_IP101A 0x02430C54UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) #define PHYID_REV_ID_MASK   0x0000000FUL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) #define PHYID_GET_PHY_ID(i)         ((i) & ~PHYID_REV_ID_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) #define MII_REG_BITS_ON(x,i,p) do {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265)     u16 w;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266)     velocity_mii_read((p),(i),&(w));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267)     (w)|=(x);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268)     velocity_mii_write((p),(i),(w));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) #define MII_REG_BITS_OFF(x,i,p) do {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272)     u16 w;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273)     velocity_mii_read((p),(i),&(w));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274)     (w)&=(~(x));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275)     velocity_mii_write((p),(i),(w));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) #define MII_REG_BITS_IS_ON(x,i,p) ({\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279)     u16 w;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280)     velocity_mii_read((p),(i),&(w));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281)     ((int) ((w) & (x)));})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) #define MII_GET_PHY_ID(p) ({\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284)     u32 id;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285)     velocity_mii_read((p),MII_PHYSID2,(u16 *) &id);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286)     velocity_mii_read((p),MII_PHYSID1,((u16 *) &id)+1);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287)     (id);})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) #define     VELOCITY_WOL_MAGIC             0x00000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) #define     VELOCITY_WOL_PHY               0x00000001UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) #define     VELOCITY_WOL_ARP               0x00000002UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) #define     VELOCITY_WOL_UCAST             0x00000004UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) #define     VELOCITY_WOL_BCAST             0x00000010UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) #define     VELOCITY_WOL_MCAST             0x00000020UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) #define     VELOCITY_WOL_MAGIC_SEC         0x00000040UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298)  *	Flags for options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) #define     VELOCITY_FLAGS_TAGGING         0x00000001UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) #define     VELOCITY_FLAGS_RX_CSUM         0x00000004UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) #define     VELOCITY_FLAGS_IP_ALIGN        0x00000008UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) #define     VELOCITY_FLAGS_VAL_PKT_LEN     0x00000010UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) #define     VELOCITY_FLAGS_FLOW_CTRL       0x01000000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309)  *	Flags for driver status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) #define     VELOCITY_FLAGS_OPENED          0x00010000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) #define     VELOCITY_FLAGS_VMNS_CONNECTED  0x00020000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) #define     VELOCITY_FLAGS_VMNS_COMMITTED  0x00040000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) #define     VELOCITY_FLAGS_WOL_ENABLED     0x00080000UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318)  *	Flags for MII status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) #define     VELOCITY_LINK_FAIL             0x00000001UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) #define     VELOCITY_SPEED_10              0x00000002UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) #define     VELOCITY_SPEED_100             0x00000004UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) #define     VELOCITY_SPEED_1000            0x00000008UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) #define     VELOCITY_DUPLEX_FULL           0x00000010UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) #define     VELOCITY_AUTONEG_ENABLE        0x00000020UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) #define     VELOCITY_FORCED_BY_EEPROM      0x00000040UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330)  *	For velocity_set_media_duplex
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) #define     VELOCITY_LINK_CHANGE           0x00000001UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) enum speed_opt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) 	SPD_DPX_AUTO = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) 	SPD_DPX_100_HALF = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) 	SPD_DPX_100_FULL = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) 	SPD_DPX_10_HALF = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) 	SPD_DPX_10_FULL = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) 	SPD_DPX_1000_FULL = 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) enum velocity_init_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) 	VELOCITY_INIT_COLD = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) 	VELOCITY_INIT_RESET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) 	VELOCITY_INIT_WOL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) enum velocity_flow_cntl_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) 	FLOW_CNTL_DEFAULT = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) 	FLOW_CNTL_TX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) 	FLOW_CNTL_RX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) 	FLOW_CNTL_TX_RX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) 	FLOW_CNTL_DISABLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) struct velocity_opt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) 	int numrx;			/* Number of RX descriptors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) 	int numtx;			/* Number of TX descriptors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) 	enum speed_opt spd_dpx;		/* Media link mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) 	int DMA_length;			/* DMA length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) 	int rx_thresh;			/* RX_THRESH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) 	int flow_cntl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) 	int wol_opts;			/* Wake on lan options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) 	int td_int_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) 	int int_works;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) 	int rx_bandwidth_hi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) 	int rx_bandwidth_lo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) 	int rx_bandwidth_en;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) 	int rxqueue_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) 	int txqueue_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) 	int tx_intsup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) 	int rx_intsup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) #define AVAIL_TD(p,q)   ((p)->options.numtx-((p)->tx.used[(q)]))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) #define GET_RD_BY_IDX(vptr, idx)   (vptr->rd_ring[idx])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) struct velocity_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) 	struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) 	struct pci_dev *pdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) 	struct net_device *netdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) 	int no_eeprom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) 	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) 	u8 ip_addr[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) 	enum chip_type chip_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) 	struct mac_regs __iomem * mac_regs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) 	unsigned long memaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) 	unsigned long ioaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) 	struct tx_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) 		int numq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) 		/* FIXME: the locality of the data seems rather poor. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) 		int used[TX_QUEUE_NO];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) 		int curr[TX_QUEUE_NO];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) 		int tail[TX_QUEUE_NO];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) 		struct tx_desc *rings[TX_QUEUE_NO];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) 		struct velocity_td_info *infos[TX_QUEUE_NO];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) 		dma_addr_t pool_dma[TX_QUEUE_NO];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) 	} tx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) 	struct rx_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) 		int buf_sz;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) 		int dirty;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) 		int curr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) 		u32 filled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) 		struct rx_desc *ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) 		struct velocity_rd_info *info;	/* It's an array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) 		dma_addr_t pool_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) 	} rx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) 	u32 mib_counter[MAX_HW_MIB_COUNTER];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) 	struct velocity_opt options;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) 	u32 int_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) 	u32 mii_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) 	u32 phy_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) 	int multicast_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) 	u8 vCAMmask[(VCAM_SIZE / 8)];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) 	u8 mCAMmask[(MCAM_SIZE / 8)];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) 	int wol_opts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) 	u8 wol_passwd[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) 	struct velocity_context context;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) 	u32 ticks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) 	u32 ethtool_ops_nesting;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) 	u8 rev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) 	struct napi_struct napi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450)  *	velocity_get_ip		-	find an IP address for the device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451)  *	@vptr: Velocity to query
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453)  *	Dig out an IP address for this interface so that we can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454)  *	configure wakeup with WOL for ARP. If there are multiple IP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455)  *	addresses on this chain then we use the first - multi-IP WOL is not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456)  *	supported.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) static inline int velocity_get_ip(struct velocity_info *vptr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) 	struct in_device *in_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) 	struct in_ifaddr *ifa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) 	int res = -ENOENT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) 	rcu_read_lock();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) 	in_dev = __in_dev_get_rcu(vptr->netdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) 	if (in_dev != NULL) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) 		ifa = rcu_dereference(in_dev->ifa_list);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) 		if (ifa != NULL) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) 			memcpy(vptr->ip_addr, &ifa->ifa_address, 4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) 			res = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) 	rcu_read_unlock();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) 	return res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480)  *	velocity_update_hw_mibs	-	fetch MIB counters from chip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481)  *	@vptr: velocity to update
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483)  *	The velocity hardware keeps certain counters in the hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484)  * 	side. We need to read these when the user asks for statistics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485)  *	or when they overflow (causing an interrupt). The read of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486)  *	statistic clears it, so we keep running master counters in user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487)  *	space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) static inline void velocity_update_hw_mibs(struct velocity_info *vptr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) 	u32 tmp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) 	BYTE_REG_BITS_ON(MIBCR_MIBFLSH, &(vptr->mac_regs->MIBCR));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) 	while (BYTE_REG_BITS_IS_ON(MIBCR_MIBFLSH, &(vptr->mac_regs->MIBCR)));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) 	BYTE_REG_BITS_ON(MIBCR_MPTRINI, &(vptr->mac_regs->MIBCR));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) 	for (i = 0; i < HW_MIB_SIZE; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) 		tmp = readl(&(vptr->mac_regs->MIBData)) & 0x00FFFFFFUL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) 		vptr->mib_counter[i] += tmp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506)  *	init_flow_control_register 	-	set up flow control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507)  *	@vptr: velocity to configure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509)  *	Configure the flow control registers for this velocity device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) static inline void init_flow_control_register(struct velocity_info *vptr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) 	struct mac_regs __iomem * regs = vptr->mac_regs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) 	/* Set {XHITH1, XHITH0, XLTH1, XLTH0} in FlowCR1 to {1, 0, 1, 1}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) 	   depend on RD=64, and Turn on XNOEN in FlowCR1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) 	writel((CR0_XONEN | CR0_XHITH1 | CR0_XLTH1 | CR0_XLTH0), &regs->CR0Set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) 	writel((CR0_FDXTFCEN | CR0_FDXRFCEN | CR0_HDXFCEN | CR0_XHITH0), &regs->CR0Clr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) 	/* Set TxPauseTimer to 0xFFFF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) 	writew(0xFFFF, &regs->tx_pause_timer);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) 	/* Initialize RBRDU to Rx buffer count. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) 	writew(vptr->options.numrx, &regs->RBRDU);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) #endif