Re: [RTnet-developers] [PATCH 5/6] e1000e: add ForceSpeedDuplex module parameter
Brought to you by:
bet-frogger,
kiszka
From: Jan K. <jan...@si...> - 2011-10-25 13:05:27
|
On 2011-10-06 22:35, Arnout Vandecappelle (Essensium/Mind) wrote: > From: "Arnout Vandecappelle (Essensium/Mind)" <ar...@mi...> > That's a replacement interface for missing ethtool support, right? Please use the commit log for an explanation of the why. Jan > Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <ar...@mi...> > --- > drivers/experimental/e1000e/hw.h | 2 +- > drivers/experimental/e1000e/netdev.c | 5 ++++ > drivers/experimental/e1000e/param.c | 40 ++++++++++++++++++++++++++++++++++ > 3 files changed, 46 insertions(+), 1 deletions(-) > > diff --git a/drivers/experimental/e1000e/hw.h b/drivers/experimental/e1000e/hw.h > index 11f3b7c..0c5ddb3 100644 > --- a/drivers/experimental/e1000e/hw.h > +++ b/drivers/experimental/e1000e/hw.h > @@ -810,7 +810,7 @@ struct e1000_mac_info { > u16 mta_reg_count; > u16 rar_entry_count; > > - u8 forced_speed_duplex; > + u32 forced_speed_duplex; > > bool arc_subsystem_valid; > bool autoneg; > diff --git a/drivers/experimental/e1000e/netdev.c b/drivers/experimental/e1000e/netdev.c > index bf2b916..d005956 100644 > --- a/drivers/experimental/e1000e/netdev.c > +++ b/drivers/experimental/e1000e/netdev.c > @@ -5055,6 +5055,11 @@ static int __devinit e1000_probe(struct pci_dev *pdev, > adapter->hw.fc.current_mode = e1000_fc_default; > adapter->hw.phy.autoneg_advertised = 0x2f; > > + if (adapter->hw.mac.forced_speed_duplex != 0) { > + adapter->hw.mac.autoneg = false; > + adapter->hw.phy.autoneg_advertised = adapter->hw.mac.forced_speed_duplex; > + } > + > /* ring size defaults */ > adapter->rx_ring->count = 256; > adapter->tx_ring->count = 256; > diff --git a/drivers/experimental/e1000e/param.c b/drivers/experimental/e1000e/param.c > index bb20552..a57ddb8 100644 > --- a/drivers/experimental/e1000e/param.c > +++ b/drivers/experimental/e1000e/param.c > @@ -64,6 +64,22 @@ unsigned int copybreak = COPYBREAK_DEFAULT; > > > /* > + * Force speed and duplex. > + * > + * Valid Values: > + * 0x00: Auto-negotiate (default) > + * 0x01: 10Mbps Half-Duplex > + * 0x02: 10Mbps Full-Duplex > + * 0x04: 100Mbps Half-Duplex > + * 0x08: 100Mbps Full-Duplex > + * 0x20: 1000Mbps Full-Duplex > + * > + * Note: although these values are the same as the flags for advertising, it > + * is not valid to specify multiple flags. > + */ > +E1000_PARAM(ForceSpeedDuplex, "Forced Speed and Duplex"); > + > +/* > * Transmit Interrupt Delay in units of 1.024 microseconds > * Tx interrupt delay needs to typically be set to something non zero > * > @@ -247,6 +263,30 @@ void __devinit e1000e_check_options(struct e1000_adapter *adapter) > e_notice("Using defaults for all values\n"); > } > > + { /* Force speed and duplex */ > + struct e1000_opt_list fsd_list[] = > + {{ ADVERTISE_10_HALF, "10 Mbps Half-Duplex" }, > + { ADVERTISE_10_FULL, "10 Mbps Full-Duplex" }, > + { ADVERTISE_100_HALF, "100 Mbps Half-Duplex" }, > + { ADVERTISE_100_FULL, "100 Mbps Full-Duplex" }, > + { ADVERTISE_1000_FULL, "1000 Mbps Full-Duplex" }}; > + const struct e1000_option opt = { > + .type = list_option, > + .name = "Forced Speed and Duplex", > + .err = "defaulting to Auto-Negotiate", > + .def = 0, > + .arg = { .l = { .nr = ARRAY_SIZE(fsd_list), > + .p = fsd_list } } > + }; > + if (num_ForceSpeedDuplex > bd) { > + adapter->hw.mac.forced_speed_duplex = ForceSpeedDuplex[bd]; > + e1000_validate_option(&adapter->hw.mac.forced_speed_duplex, &opt, > + adapter); > + } else { > + adapter->hw.mac.forced_speed_duplex = opt.def; > + } > + } > + > { /* Transmit Interrupt Delay */ > const struct e1000_option opt = { > .type = range_option, -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux |