|  | @@ -0,0 +1,309 @@
 | 
		
	
		
			
			|  | 1 | +#ifndef _SMSC75XX_H
 | 
		
	
		
			
			|  | 2 | +#define _SMSC75XX_H
 | 
		
	
		
			
			|  | 3 | +
 | 
		
	
		
			
			|  | 4 | +/** @file
 | 
		
	
		
			
			|  | 5 | + *
 | 
		
	
		
			
			|  | 6 | + * SMSC LAN75xx USB Ethernet driver
 | 
		
	
		
			
			|  | 7 | + *
 | 
		
	
		
			
			|  | 8 | + */
 | 
		
	
		
			
			|  | 9 | +
 | 
		
	
		
			
			|  | 10 | +FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 | 
		
	
		
			
			|  | 11 | +
 | 
		
	
		
			
			|  | 12 | +#include <ipxe/usb.h>
 | 
		
	
		
			
			|  | 13 | +#include <ipxe/usbnet.h>
 | 
		
	
		
			
			|  | 14 | +#include <ipxe/if_ether.h>
 | 
		
	
		
			
			|  | 15 | +#include <ipxe/mii.h>
 | 
		
	
		
			
			|  | 16 | +
 | 
		
	
		
			
			|  | 17 | +/** Register write command */
 | 
		
	
		
			
			|  | 18 | +#define SMSC75XX_REGISTER_WRITE					\
 | 
		
	
		
			
			|  | 19 | +	( USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE |	\
 | 
		
	
		
			
			|  | 20 | +	  USB_REQUEST_TYPE ( 0xa0 ) )
 | 
		
	
		
			
			|  | 21 | +
 | 
		
	
		
			
			|  | 22 | +/** Register read command */
 | 
		
	
		
			
			|  | 23 | +#define SMSC75XX_REGISTER_READ					\
 | 
		
	
		
			
			|  | 24 | +	( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE |	\
 | 
		
	
		
			
			|  | 25 | +	  USB_REQUEST_TYPE ( 0xa1 ) )
 | 
		
	
		
			
			|  | 26 | +
 | 
		
	
		
			
			|  | 27 | +/** Get statistics command */
 | 
		
	
		
			
			|  | 28 | +#define SMSC75XX_GET_STATISTICS					\
 | 
		
	
		
			
			|  | 29 | +	( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE |	\
 | 
		
	
		
			
			|  | 30 | +	  USB_REQUEST_TYPE ( 0xa2 ) )
 | 
		
	
		
			
			|  | 31 | +
 | 
		
	
		
			
			|  | 32 | +/** Interrupt status register */
 | 
		
	
		
			
			|  | 33 | +#define SMSC75XX_INT_STS 0x00c
 | 
		
	
		
			
			|  | 34 | +#define SMSC75XX_INT_STS_RDFO_INT	0x00400000UL	/**< RX FIFO overflow */
 | 
		
	
		
			
			|  | 35 | +#define SMSC75XX_INT_STS_PHY_INT	0x00020000UL	/**< PHY interrupt */
 | 
		
	
		
			
			|  | 36 | +
 | 
		
	
		
			
			|  | 37 | +/** Hardware configuration register */
 | 
		
	
		
			
			|  | 38 | +#define SMSC75XX_HW_CFG 0x010
 | 
		
	
		
			
			|  | 39 | +#define SMSC75XX_HW_CFG_BIR		0x00000080UL	/**< Bulk IN use NAK */
 | 
		
	
		
			
			|  | 40 | +#define SMSC75XX_HW_CFG_LRST		0x00000002UL	/**< Soft lite reset */
 | 
		
	
		
			
			|  | 41 | +
 | 
		
	
		
			
			|  | 42 | +/** Interrupt endpoint control register */
 | 
		
	
		
			
			|  | 43 | +#define SMSC75XX_INT_EP_CTL 0x038
 | 
		
	
		
			
			|  | 44 | +#define SMSC75XX_INT_EP_CTL_RDFO_EN	0x00400000UL	/**< RX FIFO overflow */
 | 
		
	
		
			
			|  | 45 | +#define SMSC75XX_INT_EP_CTL_PHY_EN	0x00020000UL	/**< PHY interrupt */
 | 
		
	
		
			
			|  | 46 | +
 | 
		
	
		
			
			|  | 47 | +/** Bulk IN delay register */
 | 
		
	
		
			
			|  | 48 | +#define SMSC75XX_BULK_IN_DLY 0x03c
 | 
		
	
		
			
			|  | 49 | +#define SMSC75XX_BULK_IN_DLY_SET(ticks)	( (ticks) << 0 ) /**< Delay / 16.7ns */
 | 
		
	
		
			
			|  | 50 | +
 | 
		
	
		
			
			|  | 51 | +/** EEPROM command register */
 | 
		
	
		
			
			|  | 52 | +#define SMSC75XX_E2P_CMD 0x040
 | 
		
	
		
			
			|  | 53 | +#define SMSC75XX_E2P_CMD_EPC_BSY	0x80000000UL	/**< EPC busy */
 | 
		
	
		
			
			|  | 54 | +#define SMSC75XX_E2P_CMD_EPC_CMD_READ	0x00000000UL	/**< READ command */
 | 
		
	
		
			
			|  | 55 | +#define SMSC75XX_E2P_CMD_EPC_ADDR(addr) ( (addr) << 0 )	/**< EPC address */
 | 
		
	
		
			
			|  | 56 | +
 | 
		
	
		
			
			|  | 57 | +/** EEPROM data register */
 | 
		
	
		
			
			|  | 58 | +#define SMSC75XX_E2P_DATA 0x044
 | 
		
	
		
			
			|  | 59 | +#define SMSC75XX_E2P_DATA_GET(e2p_data) \
 | 
		
	
		
			
			|  | 60 | +	( ( (e2p_data) >> 0 ) & 0xff )			/**< EEPROM data */
 | 
		
	
		
			
			|  | 61 | +
 | 
		
	
		
			
			|  | 62 | +/** MAC address EEPROM address */
 | 
		
	
		
			
			|  | 63 | +#define SMSC75XX_EEPROM_MAC 0x01
 | 
		
	
		
			
			|  | 64 | +
 | 
		
	
		
			
			|  | 65 | +/** Receive filtering engine control register */
 | 
		
	
		
			
			|  | 66 | +#define SMSC75XX_RFE_CTL 0x060
 | 
		
	
		
			
			|  | 67 | +#define SMSC75XX_RFE_CTL_AB		0x00000400UL	/**< Accept broadcast */
 | 
		
	
		
			
			|  | 68 | +#define SMSC75XX_RFE_CTL_AM		0x00000200UL	/**< Accept multicast */
 | 
		
	
		
			
			|  | 69 | +#define SMSC75XX_RFE_CTL_AU		0x00000100UL	/**< Accept unicast */
 | 
		
	
		
			
			|  | 70 | +
 | 
		
	
		
			
			|  | 71 | +/** FIFO controller RX FIFO control register */
 | 
		
	
		
			
			|  | 72 | +#define SMSC75XX_FCT_RX_CTL 0x090
 | 
		
	
		
			
			|  | 73 | +#define SMSC75XX_FCT_RX_CTL_EN		0x80000000UL	/**< FCT RX enable */
 | 
		
	
		
			
			|  | 74 | +#define SMSC75XX_FCT_RX_CTL_BAD		0x02000000UL	/**< Store bad frames */
 | 
		
	
		
			
			|  | 75 | +
 | 
		
	
		
			
			|  | 76 | +/** FIFO controller TX FIFO control register */
 | 
		
	
		
			
			|  | 77 | +#define SMSC75XX_FCT_TX_CTL 0x094
 | 
		
	
		
			
			|  | 78 | +#define SMSC75XX_FCT_TX_CTL_EN		0x80000000UL	/**< FCT TX enable */
 | 
		
	
		
			
			|  | 79 | +
 | 
		
	
		
			
			|  | 80 | +/** MAC receive register */
 | 
		
	
		
			
			|  | 81 | +#define SMSC75XX_MAC_RX 0x104
 | 
		
	
		
			
			|  | 82 | +#define SMSC75XX_MAC_RX_MAX_SIZE(mtu)	( (mtu) << 16 )	/**< Max frame size */
 | 
		
	
		
			
			|  | 83 | +#define SMSC75XX_MAC_RX_MAX_SIZE_DEFAULT \
 | 
		
	
		
			
			|  | 84 | +	SMSC75XX_MAC_RX_MAX_SIZE ( ETH_FRAME_LEN + 4 /* VLAN */ + 4 /* CRC */ )
 | 
		
	
		
			
			|  | 85 | +#define SMSC75XX_MAC_RX_FCS		0x00000010UL	/**< FCS stripping */
 | 
		
	
		
			
			|  | 86 | +#define SMSC75XX_MAC_RX_EN		0x00000001UL	/**< RX enable */
 | 
		
	
		
			
			|  | 87 | +
 | 
		
	
		
			
			|  | 88 | +/** MAC transmit register */
 | 
		
	
		
			
			|  | 89 | +#define SMSC75XX_MAC_TX 0x108
 | 
		
	
		
			
			|  | 90 | +#define SMSC75XX_MAC_TX_EN		0x00000001UL	/**< TX enable */
 | 
		
	
		
			
			|  | 91 | +
 | 
		
	
		
			
			|  | 92 | +/** MAC receive address high register */
 | 
		
	
		
			
			|  | 93 | +#define SMSC75XX_RX_ADDRH 0x118
 | 
		
	
		
			
			|  | 94 | +
 | 
		
	
		
			
			|  | 95 | +/** MAC receive address low register */
 | 
		
	
		
			
			|  | 96 | +#define SMSC75XX_RX_ADDRL 0x11c
 | 
		
	
		
			
			|  | 97 | +
 | 
		
	
		
			
			|  | 98 | +/** MII access register */
 | 
		
	
		
			
			|  | 99 | +#define SMSC75XX_MII_ACCESS 0x120
 | 
		
	
		
			
			|  | 100 | +#define SMSC75XX_MII_ACCESS_PHY_ADDRESS	0x00000800UL	/**< PHY address */
 | 
		
	
		
			
			|  | 101 | +#define SMSC75XX_MII_ACCESS_MIIRINDA(addr) ( (addr) << 6 ) /**< MII register */
 | 
		
	
		
			
			|  | 102 | +#define SMSC75XX_MII_ACCESS_MIIWNR	0x00000002UL	/**< MII write */
 | 
		
	
		
			
			|  | 103 | +#define SMSC75XX_MII_ACCESS_MIIBZY	0x00000001UL	/**< MII busy */
 | 
		
	
		
			
			|  | 104 | +
 | 
		
	
		
			
			|  | 105 | +/** MII data register */
 | 
		
	
		
			
			|  | 106 | +#define SMSC75XX_MII_DATA 0x124
 | 
		
	
		
			
			|  | 107 | +#define SMSC75XX_MII_DATA_SET(data)	( (data) << 0 )	/**< Set data */
 | 
		
	
		
			
			|  | 108 | +#define SMSC75XX_MII_DATA_GET(mii_data) \
 | 
		
	
		
			
			|  | 109 | +	( ( (mii_data) >> 0 ) & 0xffff )		/**< Get data */
 | 
		
	
		
			
			|  | 110 | +
 | 
		
	
		
			
			|  | 111 | +/** PHY interrupt source MII register */
 | 
		
	
		
			
			|  | 112 | +#define SMSC75XX_MII_PHY_INTR_SOURCE 29
 | 
		
	
		
			
			|  | 113 | +
 | 
		
	
		
			
			|  | 114 | +/** PHY interrupt mask MII register */
 | 
		
	
		
			
			|  | 115 | +#define SMSC75XX_MII_PHY_INTR_MASK 30
 | 
		
	
		
			
			|  | 116 | +
 | 
		
	
		
			
			|  | 117 | +/** PHY interrupt: auto-negotiation complete */
 | 
		
	
		
			
			|  | 118 | +#define SMSC75XX_PHY_INTR_ANEG_DONE	0x0040
 | 
		
	
		
			
			|  | 119 | +
 | 
		
	
		
			
			|  | 120 | +/** PHY interrupt: link down */
 | 
		
	
		
			
			|  | 121 | +#define SMSC75XX_PHY_INTR_LINK_DOWN	0x0010
 | 
		
	
		
			
			|  | 122 | +
 | 
		
	
		
			
			|  | 123 | +/** MAC address perfect filter N high register */
 | 
		
	
		
			
			|  | 124 | +#define SMSC75XX_ADDR_FILTH(n) ( 0x300 + ( 8 * (n) ) )
 | 
		
	
		
			
			|  | 125 | +#define SMSC75XX_ADDR_FILTH_VALID	0x80000000UL	/**< Address valid */
 | 
		
	
		
			
			|  | 126 | +
 | 
		
	
		
			
			|  | 127 | +/** MAC address perfect filter N low register */
 | 
		
	
		
			
			|  | 128 | +#define SMSC75XX_ADDR_FILTL(n) ( 0x304 + ( 8 * (n) ) )
 | 
		
	
		
			
			|  | 129 | +
 | 
		
	
		
			
			|  | 130 | +/** MAC address */
 | 
		
	
		
			
			|  | 131 | +union smsc75xx_mac {
 | 
		
	
		
			
			|  | 132 | +	/** MAC receive address registers */
 | 
		
	
		
			
			|  | 133 | +	struct {
 | 
		
	
		
			
			|  | 134 | +		/** MAC receive address low register */
 | 
		
	
		
			
			|  | 135 | +		uint32_t l;
 | 
		
	
		
			
			|  | 136 | +		/** MAC receive address high register */
 | 
		
	
		
			
			|  | 137 | +		uint32_t h;
 | 
		
	
		
			
			|  | 138 | +	} __attribute__ (( packed )) addr;
 | 
		
	
		
			
			|  | 139 | +	/** Raw MAC address */
 | 
		
	
		
			
			|  | 140 | +	uint8_t raw[ETH_ALEN];
 | 
		
	
		
			
			|  | 141 | +};
 | 
		
	
		
			
			|  | 142 | +
 | 
		
	
		
			
			|  | 143 | +/** Receive packet header */
 | 
		
	
		
			
			|  | 144 | +struct smsc75xx_rx_header {
 | 
		
	
		
			
			|  | 145 | +	/** RX command word */
 | 
		
	
		
			
			|  | 146 | +	uint32_t command;
 | 
		
	
		
			
			|  | 147 | +	/** VLAN tag */
 | 
		
	
		
			
			|  | 148 | +	uint16_t vtag;
 | 
		
	
		
			
			|  | 149 | +	/** Checksum */
 | 
		
	
		
			
			|  | 150 | +	uint16_t csum;
 | 
		
	
		
			
			|  | 151 | +	/** Two-byte padding used to align Ethernet payload */
 | 
		
	
		
			
			|  | 152 | +	uint16_t pad;
 | 
		
	
		
			
			|  | 153 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 154 | +
 | 
		
	
		
			
			|  | 155 | +/** Receive error detected */
 | 
		
	
		
			
			|  | 156 | +#define SMSC75XX_RX_RED 0x00400000UL
 | 
		
	
		
			
			|  | 157 | +
 | 
		
	
		
			
			|  | 158 | +/** Transmit packet header */
 | 
		
	
		
			
			|  | 159 | +struct smsc75xx_tx_header {
 | 
		
	
		
			
			|  | 160 | +	/** TX command word */
 | 
		
	
		
			
			|  | 161 | +	uint32_t command;
 | 
		
	
		
			
			|  | 162 | +	/** VLAN tag */
 | 
		
	
		
			
			|  | 163 | +	uint16_t tag;
 | 
		
	
		
			
			|  | 164 | +	/** Maximum segment size */
 | 
		
	
		
			
			|  | 165 | +	uint16_t mss;
 | 
		
	
		
			
			|  | 166 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 167 | +
 | 
		
	
		
			
			|  | 168 | +/** Insert frame checksum and pad */
 | 
		
	
		
			
			|  | 169 | +#define SMSC75XX_TX_FCS 0x00400000UL
 | 
		
	
		
			
			|  | 170 | +
 | 
		
	
		
			
			|  | 171 | +/** Interrupt packet format */
 | 
		
	
		
			
			|  | 172 | +struct smsc75xx_interrupt {
 | 
		
	
		
			
			|  | 173 | +	/** Current value of INT_STS register */
 | 
		
	
		
			
			|  | 174 | +	uint32_t int_sts;
 | 
		
	
		
			
			|  | 175 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 176 | +
 | 
		
	
		
			
			|  | 177 | +/** Byte count statistics */
 | 
		
	
		
			
			|  | 178 | +struct smsc75xx_byte_statistics {
 | 
		
	
		
			
			|  | 179 | +	/** Unicast byte count */
 | 
		
	
		
			
			|  | 180 | +	uint32_t unicast;
 | 
		
	
		
			
			|  | 181 | +	/** Broadcast byte count */
 | 
		
	
		
			
			|  | 182 | +	uint32_t broadcast;
 | 
		
	
		
			
			|  | 183 | +	/** Multicast byte count */
 | 
		
	
		
			
			|  | 184 | +	uint32_t multicast;
 | 
		
	
		
			
			|  | 185 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 186 | +
 | 
		
	
		
			
			|  | 187 | +/** Frame count statistics */
 | 
		
	
		
			
			|  | 188 | +struct smsc75xx_frame_statistics {
 | 
		
	
		
			
			|  | 189 | +	/** Unicast frames */
 | 
		
	
		
			
			|  | 190 | +	uint32_t unicast;
 | 
		
	
		
			
			|  | 191 | +	/** Broadcast frames */
 | 
		
	
		
			
			|  | 192 | +	uint32_t broadcast;
 | 
		
	
		
			
			|  | 193 | +	/** Multicast frames */
 | 
		
	
		
			
			|  | 194 | +	uint32_t multicast;
 | 
		
	
		
			
			|  | 195 | +	/** Pause frames */
 | 
		
	
		
			
			|  | 196 | +	uint32_t pause;
 | 
		
	
		
			
			|  | 197 | +	/** Frames by length category */
 | 
		
	
		
			
			|  | 198 | +	uint32_t len[7];
 | 
		
	
		
			
			|  | 199 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 200 | +
 | 
		
	
		
			
			|  | 201 | +/** Receive error statistics */
 | 
		
	
		
			
			|  | 202 | +struct smsc75xx_rx_error_statistics {
 | 
		
	
		
			
			|  | 203 | +	/** FCS errors */
 | 
		
	
		
			
			|  | 204 | +	uint32_t fcs;
 | 
		
	
		
			
			|  | 205 | +	/** Alignment errors */
 | 
		
	
		
			
			|  | 206 | +	uint32_t alignment;
 | 
		
	
		
			
			|  | 207 | +	/** Fragment errors */
 | 
		
	
		
			
			|  | 208 | +	uint32_t fragment;
 | 
		
	
		
			
			|  | 209 | +	/** Jabber errors */
 | 
		
	
		
			
			|  | 210 | +	uint32_t jabber;
 | 
		
	
		
			
			|  | 211 | +	/** Undersize frame errors */
 | 
		
	
		
			
			|  | 212 | +	uint32_t undersize;
 | 
		
	
		
			
			|  | 213 | +	/** Oversize frame errors */
 | 
		
	
		
			
			|  | 214 | +	uint32_t oversize;
 | 
		
	
		
			
			|  | 215 | +	/** Dropped frame errors */
 | 
		
	
		
			
			|  | 216 | +	uint32_t dropped;
 | 
		
	
		
			
			|  | 217 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 218 | +
 | 
		
	
		
			
			|  | 219 | +/** Receive statistics */
 | 
		
	
		
			
			|  | 220 | +struct smsc75xx_rx_statistics {
 | 
		
	
		
			
			|  | 221 | +	/** Error statistics */
 | 
		
	
		
			
			|  | 222 | +	struct smsc75xx_rx_error_statistics err;
 | 
		
	
		
			
			|  | 223 | +	/** Byte count statistics */
 | 
		
	
		
			
			|  | 224 | +	struct smsc75xx_byte_statistics byte;
 | 
		
	
		
			
			|  | 225 | +	/** Frame count statistics */
 | 
		
	
		
			
			|  | 226 | +	struct smsc75xx_frame_statistics frame;
 | 
		
	
		
			
			|  | 227 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 228 | +
 | 
		
	
		
			
			|  | 229 | +/** Transmit error statistics */
 | 
		
	
		
			
			|  | 230 | +struct smsc75xx_tx_error_statistics {
 | 
		
	
		
			
			|  | 231 | +	/** FCS errors */
 | 
		
	
		
			
			|  | 232 | +	uint32_t fcs;
 | 
		
	
		
			
			|  | 233 | +	/** Excess deferral errors */
 | 
		
	
		
			
			|  | 234 | +	uint32_t deferral;
 | 
		
	
		
			
			|  | 235 | +	/** Carrier errors */
 | 
		
	
		
			
			|  | 236 | +	uint32_t carrier;
 | 
		
	
		
			
			|  | 237 | +	/** Bad byte count */
 | 
		
	
		
			
			|  | 238 | +	uint32_t count;
 | 
		
	
		
			
			|  | 239 | +	/** Single collisions */
 | 
		
	
		
			
			|  | 240 | +	uint32_t single;
 | 
		
	
		
			
			|  | 241 | +	/** Multiple collisions */
 | 
		
	
		
			
			|  | 242 | +	uint32_t multiple;
 | 
		
	
		
			
			|  | 243 | +	/** Excession collisions */
 | 
		
	
		
			
			|  | 244 | +	uint32_t excessive;
 | 
		
	
		
			
			|  | 245 | +	/** Late collisions */
 | 
		
	
		
			
			|  | 246 | +	uint32_t late;
 | 
		
	
		
			
			|  | 247 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 248 | +
 | 
		
	
		
			
			|  | 249 | +/** Transmit statistics */
 | 
		
	
		
			
			|  | 250 | +struct smsc75xx_tx_statistics {
 | 
		
	
		
			
			|  | 251 | +	/** Error statistics */
 | 
		
	
		
			
			|  | 252 | +	struct smsc75xx_tx_error_statistics err;
 | 
		
	
		
			
			|  | 253 | +	/** Byte count statistics */
 | 
		
	
		
			
			|  | 254 | +	struct smsc75xx_byte_statistics byte;
 | 
		
	
		
			
			|  | 255 | +	/** Frame count statistics */
 | 
		
	
		
			
			|  | 256 | +	struct smsc75xx_frame_statistics frame;
 | 
		
	
		
			
			|  | 257 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 258 | +
 | 
		
	
		
			
			|  | 259 | +/** Statistics */
 | 
		
	
		
			
			|  | 260 | +struct smsc75xx_statistics {
 | 
		
	
		
			
			|  | 261 | +	/** Receive statistics */
 | 
		
	
		
			
			|  | 262 | +	struct smsc75xx_rx_statistics rx;
 | 
		
	
		
			
			|  | 263 | +	/** Transmit statistics */
 | 
		
	
		
			
			|  | 264 | +	struct smsc75xx_tx_statistics tx;
 | 
		
	
		
			
			|  | 265 | +} __attribute__ (( packed ));
 | 
		
	
		
			
			|  | 266 | +
 | 
		
	
		
			
			|  | 267 | +/** A SMSC75xx network device */
 | 
		
	
		
			
			|  | 268 | +struct smsc75xx_device {
 | 
		
	
		
			
			|  | 269 | +	/** USB device */
 | 
		
	
		
			
			|  | 270 | +	struct usb_device *usb;
 | 
		
	
		
			
			|  | 271 | +	/** USB bus */
 | 
		
	
		
			
			|  | 272 | +	struct usb_bus *bus;
 | 
		
	
		
			
			|  | 273 | +	/** Network device */
 | 
		
	
		
			
			|  | 274 | +	struct net_device *netdev;
 | 
		
	
		
			
			|  | 275 | +	/** USB network device */
 | 
		
	
		
			
			|  | 276 | +	struct usbnet_device usbnet;
 | 
		
	
		
			
			|  | 277 | +	/** MII interface */
 | 
		
	
		
			
			|  | 278 | +	struct mii_interface mii;
 | 
		
	
		
			
			|  | 279 | +	/** Interrupt status */
 | 
		
	
		
			
			|  | 280 | +	uint32_t int_sts;
 | 
		
	
		
			
			|  | 281 | +};
 | 
		
	
		
			
			|  | 282 | +
 | 
		
	
		
			
			|  | 283 | +/** Reset delay (in microseconds) */
 | 
		
	
		
			
			|  | 284 | +#define SMSC75XX_RESET_DELAY_US 2
 | 
		
	
		
			
			|  | 285 | +
 | 
		
	
		
			
			|  | 286 | +/** Maximum time to wait for EEPROM (in milliseconds) */
 | 
		
	
		
			
			|  | 287 | +#define SMSC75XX_EEPROM_MAX_WAIT_MS 100
 | 
		
	
		
			
			|  | 288 | +
 | 
		
	
		
			
			|  | 289 | +/** Maximum time to wait for MII (in milliseconds) */
 | 
		
	
		
			
			|  | 290 | +#define SMSC75XX_MII_MAX_WAIT_MS 100
 | 
		
	
		
			
			|  | 291 | +
 | 
		
	
		
			
			|  | 292 | +/** Interrupt maximum fill level
 | 
		
	
		
			
			|  | 293 | + *
 | 
		
	
		
			
			|  | 294 | + * This is a policy decision.
 | 
		
	
		
			
			|  | 295 | + */
 | 
		
	
		
			
			|  | 296 | +#define SMSC75XX_INTR_MAX_FILL 2
 | 
		
	
		
			
			|  | 297 | +
 | 
		
	
		
			
			|  | 298 | +/** Bulk IN maximum fill level
 | 
		
	
		
			
			|  | 299 | + *
 | 
		
	
		
			
			|  | 300 | + * This is a policy decision.
 | 
		
	
		
			
			|  | 301 | + */
 | 
		
	
		
			
			|  | 302 | +#define SMSC75XX_IN_MAX_FILL 8
 | 
		
	
		
			
			|  | 303 | +
 | 
		
	
		
			
			|  | 304 | +/** Bulk IN buffer size */
 | 
		
	
		
			
			|  | 305 | +#define SMSC75XX_IN_MTU						\
 | 
		
	
		
			
			|  | 306 | +	( sizeof ( struct smsc75xx_rx_header ) +		\
 | 
		
	
		
			
			|  | 307 | +	  ETH_FRAME_LEN + 4 /* possible VLAN header */ )
 | 
		
	
		
			
			|  | 308 | +
 | 
		
	
		
			
			|  | 309 | +#endif /* _SMSC75XX_H */
 |