@@ -691,8 +691,7 @@ static void cas_mif_poll(struct cas *cp, const int enable)
691
691
}
692
692
693
693
/* Must be invoked under cp->lock */
694
- static void cas_begin_auto_negotiation (struct cas * cp ,
695
- const struct ethtool_link_ksettings * ep )
694
+ static void cas_begin_auto_negotiation (struct cas * cp , struct ethtool_cmd * ep )
696
695
{
697
696
u16 ctl ;
698
697
#if 1
@@ -705,16 +704,16 @@ static void cas_begin_auto_negotiation(struct cas *cp,
705
704
if (!ep )
706
705
goto start_aneg ;
707
706
lcntl = cp -> link_cntl ;
708
- if (ep -> base . autoneg == AUTONEG_ENABLE ) {
707
+ if (ep -> autoneg == AUTONEG_ENABLE )
709
708
cp -> link_cntl = BMCR_ANENABLE ;
710
- } else {
711
- u32 speed = ep -> base . speed ;
709
+ else {
710
+ u32 speed = ethtool_cmd_speed ( ep ) ;
712
711
cp -> link_cntl = 0 ;
713
712
if (speed == SPEED_100 )
714
713
cp -> link_cntl |= BMCR_SPEED100 ;
715
714
else if (speed == SPEED_1000 )
716
715
cp -> link_cntl |= CAS_BMCR_SPEED1000 ;
717
- if (ep -> base . duplex == DUPLEX_FULL )
716
+ if (ep -> duplex == DUPLEX_FULL )
718
717
cp -> link_cntl |= BMCR_FULLDPLX ;
719
718
}
720
719
#if 1
@@ -4529,37 +4528,37 @@ static void cas_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info
4529
4528
strlcpy (info -> bus_info , pci_name (cp -> pdev ), sizeof (info -> bus_info ));
4530
4529
}
4531
4530
4532
- static int cas_get_link_ksettings (struct net_device * dev ,
4533
- struct ethtool_link_ksettings * cmd )
4531
+ static int cas_get_settings (struct net_device * dev , struct ethtool_cmd * cmd )
4534
4532
{
4535
4533
struct cas * cp = netdev_priv (dev );
4536
4534
u16 bmcr ;
4537
4535
int full_duplex , speed , pause ;
4538
4536
unsigned long flags ;
4539
4537
enum link_state linkstate = link_up ;
4540
- u32 supported , advertising ;
4541
4538
4542
- advertising = 0 ;
4543
- supported = SUPPORTED_Autoneg ;
4539
+ cmd -> advertising = 0 ;
4540
+ cmd -> supported = SUPPORTED_Autoneg ;
4544
4541
if (cp -> cas_flags & CAS_FLAG_1000MB_CAP ) {
4545
- supported |= SUPPORTED_1000baseT_Full ;
4546
- advertising |= ADVERTISED_1000baseT_Full ;
4542
+ cmd -> supported |= SUPPORTED_1000baseT_Full ;
4543
+ cmd -> advertising |= ADVERTISED_1000baseT_Full ;
4547
4544
}
4548
4545
4549
4546
/* Record PHY settings if HW is on. */
4550
4547
spin_lock_irqsave (& cp -> lock , flags );
4551
4548
bmcr = 0 ;
4552
4549
linkstate = cp -> lstate ;
4553
4550
if (CAS_PHY_MII (cp -> phy_type )) {
4554
- cmd -> base .port = PORT_MII ;
4555
- cmd -> base .phy_address = cp -> phy_addr ;
4556
- advertising |= ADVERTISED_TP | ADVERTISED_MII |
4551
+ cmd -> port = PORT_MII ;
4552
+ cmd -> transceiver = (cp -> cas_flags & CAS_FLAG_SATURN ) ?
4553
+ XCVR_INTERNAL : XCVR_EXTERNAL ;
4554
+ cmd -> phy_address = cp -> phy_addr ;
4555
+ cmd -> advertising |= ADVERTISED_TP | ADVERTISED_MII |
4557
4556
ADVERTISED_10baseT_Half |
4558
4557
ADVERTISED_10baseT_Full |
4559
4558
ADVERTISED_100baseT_Half |
4560
4559
ADVERTISED_100baseT_Full ;
4561
4560
4562
- supported |=
4561
+ cmd -> supported |=
4563
4562
(SUPPORTED_10baseT_Half |
4564
4563
SUPPORTED_10baseT_Full |
4565
4564
SUPPORTED_100baseT_Half |
@@ -4575,10 +4574,11 @@ static int cas_get_link_ksettings(struct net_device *dev,
4575
4574
}
4576
4575
4577
4576
} else {
4578
- cmd -> base .port = PORT_FIBRE ;
4579
- cmd -> base .phy_address = 0 ;
4580
- supported |= SUPPORTED_FIBRE ;
4581
- advertising |= ADVERTISED_FIBRE ;
4577
+ cmd -> port = PORT_FIBRE ;
4578
+ cmd -> transceiver = XCVR_INTERNAL ;
4579
+ cmd -> phy_address = 0 ;
4580
+ cmd -> supported |= SUPPORTED_FIBRE ;
4581
+ cmd -> advertising |= ADVERTISED_FIBRE ;
4582
4582
4583
4583
if (cp -> hw_running ) {
4584
4584
/* pcs uses the same bits as mii */
@@ -4590,20 +4590,21 @@ static int cas_get_link_ksettings(struct net_device *dev,
4590
4590
spin_unlock_irqrestore (& cp -> lock , flags );
4591
4591
4592
4592
if (bmcr & BMCR_ANENABLE ) {
4593
- advertising |= ADVERTISED_Autoneg ;
4594
- cmd -> base . autoneg = AUTONEG_ENABLE ;
4595
- cmd -> base . speed = ((speed == 10 ) ?
4593
+ cmd -> advertising |= ADVERTISED_Autoneg ;
4594
+ cmd -> autoneg = AUTONEG_ENABLE ;
4595
+ ethtool_cmd_speed_set ( cmd , ((speed == 10 ) ?
4596
4596
SPEED_10 :
4597
4597
((speed == 1000 ) ?
4598
- SPEED_1000 : SPEED_100 ));
4599
- cmd -> base . duplex = full_duplex ? DUPLEX_FULL : DUPLEX_HALF ;
4598
+ SPEED_1000 : SPEED_100 ))) ;
4599
+ cmd -> duplex = full_duplex ? DUPLEX_FULL : DUPLEX_HALF ;
4600
4600
} else {
4601
- cmd -> base . autoneg = AUTONEG_DISABLE ;
4602
- cmd -> base . speed = ((bmcr & CAS_BMCR_SPEED1000 ) ?
4601
+ cmd -> autoneg = AUTONEG_DISABLE ;
4602
+ ethtool_cmd_speed_set ( cmd , ((bmcr & CAS_BMCR_SPEED1000 ) ?
4603
4603
SPEED_1000 :
4604
4604
((bmcr & BMCR_SPEED100 ) ?
4605
- SPEED_100 : SPEED_10 ));
4606
- cmd -> base .duplex = (bmcr & BMCR_FULLDPLX ) ?
4605
+ SPEED_100 : SPEED_10 )));
4606
+ cmd -> duplex =
4607
+ (bmcr & BMCR_FULLDPLX ) ?
4607
4608
DUPLEX_FULL : DUPLEX_HALF ;
4608
4609
}
4609
4610
if (linkstate != link_up ) {
@@ -4618,46 +4619,39 @@ static int cas_get_link_ksettings(struct net_device *dev,
4618
4619
* settings that we configured.
4619
4620
*/
4620
4621
if (cp -> link_cntl & BMCR_ANENABLE ) {
4621
- cmd -> base . speed = 0 ;
4622
- cmd -> base . duplex = 0xff ;
4622
+ ethtool_cmd_speed_set ( cmd , 0 ) ;
4623
+ cmd -> duplex = 0xff ;
4623
4624
} else {
4624
- cmd -> base . speed = SPEED_10 ;
4625
+ ethtool_cmd_speed_set ( cmd , SPEED_10 ) ;
4625
4626
if (cp -> link_cntl & BMCR_SPEED100 ) {
4626
- cmd -> base . speed = SPEED_100 ;
4627
+ ethtool_cmd_speed_set ( cmd , SPEED_100 ) ;
4627
4628
} else if (cp -> link_cntl & CAS_BMCR_SPEED1000 ) {
4628
- cmd -> base . speed = SPEED_1000 ;
4629
+ ethtool_cmd_speed_set ( cmd , SPEED_1000 ) ;
4629
4630
}
4630
- cmd -> base . duplex = (cp -> link_cntl & BMCR_FULLDPLX ) ?
4631
+ cmd -> duplex = (cp -> link_cntl & BMCR_FULLDPLX )?
4631
4632
DUPLEX_FULL : DUPLEX_HALF ;
4632
4633
}
4633
4634
}
4634
-
4635
- ethtool_convert_legacy_u32_to_link_mode (cmd -> link_modes .supported ,
4636
- supported );
4637
- ethtool_convert_legacy_u32_to_link_mode (cmd -> link_modes .advertising ,
4638
- advertising );
4639
-
4640
4635
return 0 ;
4641
4636
}
4642
4637
4643
- static int cas_set_link_ksettings (struct net_device * dev ,
4644
- const struct ethtool_link_ksettings * cmd )
4638
+ static int cas_set_settings (struct net_device * dev , struct ethtool_cmd * cmd )
4645
4639
{
4646
4640
struct cas * cp = netdev_priv (dev );
4647
4641
unsigned long flags ;
4648
- u32 speed = cmd -> base . speed ;
4642
+ u32 speed = ethtool_cmd_speed ( cmd ) ;
4649
4643
4650
4644
/* Verify the settings we care about. */
4651
- if (cmd -> base . autoneg != AUTONEG_ENABLE &&
4652
- cmd -> base . autoneg != AUTONEG_DISABLE )
4645
+ if (cmd -> autoneg != AUTONEG_ENABLE &&
4646
+ cmd -> autoneg != AUTONEG_DISABLE )
4653
4647
return - EINVAL ;
4654
4648
4655
- if (cmd -> base . autoneg == AUTONEG_DISABLE &&
4649
+ if (cmd -> autoneg == AUTONEG_DISABLE &&
4656
4650
((speed != SPEED_1000 &&
4657
4651
speed != SPEED_100 &&
4658
4652
speed != SPEED_10 ) ||
4659
- (cmd -> base . duplex != DUPLEX_HALF &&
4660
- cmd -> base . duplex != DUPLEX_FULL )))
4653
+ (cmd -> duplex != DUPLEX_HALF &&
4654
+ cmd -> duplex != DUPLEX_FULL )))
4661
4655
return - EINVAL ;
4662
4656
4663
4657
/* Apply settings and restart link process. */
@@ -4759,6 +4753,8 @@ static void cas_get_ethtool_stats(struct net_device *dev,
4759
4753
4760
4754
static const struct ethtool_ops cas_ethtool_ops = {
4761
4755
.get_drvinfo = cas_get_drvinfo ,
4756
+ .get_settings = cas_get_settings ,
4757
+ .set_settings = cas_set_settings ,
4762
4758
.nway_reset = cas_nway_reset ,
4763
4759
.get_link = cas_get_link ,
4764
4760
.get_msglevel = cas_get_msglevel ,
@@ -4768,8 +4764,6 @@ static const struct ethtool_ops cas_ethtool_ops = {
4768
4764
.get_sset_count = cas_get_sset_count ,
4769
4765
.get_strings = cas_get_strings ,
4770
4766
.get_ethtool_stats = cas_get_ethtool_stats ,
4771
- .get_link_ksettings = cas_get_link_ksettings ,
4772
- .set_link_ksettings = cas_set_link_ksettings ,
4773
4767
};
4774
4768
4775
4769
static int cas_ioctl (struct net_device * dev , struct ifreq * ifr , int cmd )
0 commit comments