|  | @@ -105,18 +105,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 | 
		
	
		
			
			| 105 | 105 |  #define SMSCUSB_MII_DATA_GET(mii_data) \
 | 
		
	
		
			
			| 106 | 106 |  	( ( (mii_data) >> 0 ) & 0xffff )		/**< Get data */
 | 
		
	
		
			
			| 107 | 107 |  
 | 
		
	
		
			
			| 108 |  | -/** PHY interrupt source MII register */
 | 
		
	
		
			
			| 109 |  | -#define SMSCUSB_MII_PHY_INTR_SOURCE 29
 | 
		
	
		
			
			| 110 |  | -
 | 
		
	
		
			
			| 111 |  | -/** PHY interrupt mask MII register */
 | 
		
	
		
			
			| 112 |  | -#define SMSCUSB_MII_PHY_INTR_MASK 30
 | 
		
	
		
			
			| 113 |  | -
 | 
		
	
		
			
			| 114 |  | -/** PHY interrupt: auto-negotiation complete */
 | 
		
	
		
			
			| 115 |  | -#define SMSCUSB_PHY_INTR_ANEG_DONE 0x0040
 | 
		
	
		
			
			| 116 |  | -
 | 
		
	
		
			
			| 117 |  | -/** PHY interrupt: link down */
 | 
		
	
		
			
			| 118 |  | -#define SMSCUSB_PHY_INTR_LINK_DOWN 0x0010
 | 
		
	
		
			
			| 119 |  | -
 | 
		
	
		
			
			| 120 | 108 |  /** Maximum time to wait for MII (in milliseconds) */
 | 
		
	
		
			
			| 121 | 109 |  #define SMSCUSB_MII_MAX_WAIT_MS 100
 | 
		
	
		
			
			| 122 | 110 |  
 | 
		
	
	
		
			
			|  | @@ -166,6 +154,8 @@ struct smscusb_device {
 | 
		
	
		
			
			| 166 | 154 |  	struct mii_interface mii;
 | 
		
	
		
			
			| 167 | 155 |  	/** MII register base */
 | 
		
	
		
			
			| 168 | 156 |  	uint16_t mii_base;
 | 
		
	
		
			
			|  | 157 | +	/** PHY interrupt source register */
 | 
		
	
		
			
			|  | 158 | +	uint16_t phy_source;
 | 
		
	
		
			
			| 169 | 159 |  	/** Interrupt status */
 | 
		
	
		
			
			| 170 | 160 |  	uint32_t int_sts;
 | 
		
	
		
			
			| 171 | 161 |  };
 | 
		
	
	
		
			
			|  | @@ -279,12 +269,15 @@ smscusb_init ( struct smscusb_device *smscusb, struct net_device *netdev,
 | 
		
	
		
			
			| 279 | 269 |   *
 | 
		
	
		
			
			| 280 | 270 |   * @v smscusb		SMSC USB device
 | 
		
	
		
			
			| 281 | 271 |   * @v mii_base		MII register base
 | 
		
	
		
			
			|  | 272 | + * @v phy_source	Interrupt source PHY register
 | 
		
	
		
			
			| 282 | 273 |   */
 | 
		
	
		
			
			| 283 | 274 |  static inline __attribute__ (( always_inline )) void
 | 
		
	
		
			
			| 284 |  | -smscusb_mii_init ( struct smscusb_device *smscusb, unsigned int mii_base ) {
 | 
		
	
		
			
			|  | 275 | +smscusb_mii_init ( struct smscusb_device *smscusb, unsigned int mii_base,
 | 
		
	
		
			
			|  | 276 | +		   unsigned int phy_source ) {
 | 
		
	
		
			
			| 285 | 277 |  
 | 
		
	
		
			
			| 286 | 278 |  	mii_init ( &smscusb->mii, &smscusb_mii_operations );
 | 
		
	
		
			
			| 287 | 279 |  	smscusb->mii_base = mii_base;
 | 
		
	
		
			
			|  | 280 | +	smscusb->phy_source = phy_source;
 | 
		
	
		
			
			| 288 | 281 |  }
 | 
		
	
		
			
			| 289 | 282 |  
 | 
		
	
		
			
			| 290 | 283 |  extern int smscusb_eeprom_fetch_mac ( struct smscusb_device *smscusb,
 | 
		
	
	
		
			
			|  | @@ -292,7 +285,8 @@ extern int smscusb_eeprom_fetch_mac ( struct smscusb_device *smscusb,
 | 
		
	
		
			
			| 292 | 285 |  extern int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb,
 | 
		
	
		
			
			| 293 | 286 |  				   unsigned int otp_base );
 | 
		
	
		
			
			| 294 | 287 |  extern int smscusb_mii_check_link ( struct smscusb_device *smscusb );
 | 
		
	
		
			
			| 295 |  | -extern int smscusb_mii_open ( struct smscusb_device *smscusb );
 | 
		
	
		
			
			|  | 288 | +extern int smscusb_mii_open ( struct smscusb_device *smscusb,
 | 
		
	
		
			
			|  | 289 | +			      unsigned int phy_mask, unsigned int intrs );
 | 
		
	
		
			
			| 296 | 290 |  extern int smscusb_set_address ( struct smscusb_device *smscusb,
 | 
		
	
		
			
			| 297 | 291 |  				 unsigned int addr_base );
 | 
		
	
		
			
			| 298 | 292 |  extern int smscusb_set_filter ( struct smscusb_device *smscusb,
 |