Sorry, Maybe last_tranceiver_status and tranceiver_polltime should not be
in ixgbe_hw struct. It is better in ixgbe struct. I will change it soon.

Zhu Yanjun

On Wed, Jun 15, 2016 at 9:36 PM, <zyjzyj2...@gmail.com> wrote:

> From: Zhu Yanjun <zyjzyj2...@gmail.com>
>
> When the fiber tranceiver is plugged/unplugged, a netdev notifier is
>  sent. The userspace tools or kernel can receive this notifier.
>
> Signed-off-by: Zhu Yanjun <zyjzyj2...@gmail.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   24
> +++++++++++++++++++++++-
>  drivers/net/ethernet/intel/ixgbe/ixgbe_type.h |    2 ++
>  2 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> index 088c47c..1d8c1ff 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> @@ -5635,6 +5635,8 @@ static int ixgbe_sw_init(struct ixgbe_adapter
> *adapter)
>         hw->revision_id = pdev->revision;
>         hw->subsystem_vendor_id = pdev->subsystem_vendor;
>         hw->subsystem_device_id = pdev->subsystem_device;
> +       hw->last_tranceiver_status = IXGBE_NOT_IMPLEMENTED;
> +       hw->tranceiver_polltime = 0;
>
>         /* Set common capability flags and settings */
>         rss = min_t(int, ixgbe_max_rss_indices(adapter),
> num_online_cpus());
> @@ -7067,7 +7069,27 @@ static void ixgbe_watchdog_subtask(struct
> ixgbe_adapter *adapter)
>  static void ixgbe_sfp_detection_subtask(struct ixgbe_adapter *adapter)
>  {
>         struct ixgbe_hw *hw = &adapter->hw;
> -       s32 err;
> +       s32 err, status;
> +
> +       if ((hw->mac.ops.get_media_type(hw) == ixgbe_media_type_fiber) &&
> +           time_after(jiffies, hw->tranceiver_polltime)) {
> +               status = IXGBE_READ_REG(hw, IXGBE_ESDP) & IXGBE_ESDP_SDP2;
> +               if (status != hw->last_tranceiver_status) {
> +                       unsigned long val;
> +
> +                       if (!status) {
> +                               hw->phy.sfp_type =
> ixgbe_sfp_type_not_present;
> +                               val = NETDEV_FIBER_TRANCEIVER_UNPLUG;
> +                       } else {
> +                               val = NETDEV_FIBER_TRANCEIVER_PLUG;
> +                       }
> +                       rtnl_lock();
> +                       call_netdevice_notifiers(val, adapter->netdev);
> +                       rtnl_unlock();
> +               }
> +               hw->last_tranceiver_status = status;
> +               hw->tranceiver_polltime = jiffies + 3 * HZ;
> +       }
>
>         /* If crosstalk fix enabled verify the SFP+ cage is full */
>         if (adapter->need_crosstalk_fix) {
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
> b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
> index da3d835..fe19899 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
> @@ -3525,6 +3525,8 @@ struct ixgbe_hw {
>         bool                            force_full_reset;
>         bool                            allow_unsupported_sfp;
>         bool                            wol_enabled;
> +       s32                             last_tranceiver_status;
> +       unsigned long                   tranceiver_polltime;
>  };
>
>  struct ixgbe_info {
> --
> 1.7.9.5
>
>
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://pubads.g.doubleclick.net/gampad/clk?id=1444514421&iu=/41014381
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to