X-Git-Url: https://bbs.cooldavid.org/git/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fbenet%2Fbe_ethtool.c;h=280471e1869503345264585db77853c356d9aeaf;hb=fad9ab2cefd3a3b4754f49eb41e2f43ea314cdce;hp=333729bd6d92b50c897e40d6fb2b0b1f5d88b6d3;hpb=3b885787ea4112eaa80945999ea0901bf742707f;p=net-next-2.6.git diff --git a/drivers/net/benet/be_ethtool.c b/drivers/net/benet/be_ethtool.c index 333729bd6d9..280471e1869 100644 --- a/drivers/net/benet/be_ethtool.c +++ b/drivers/net/benet/be_ethtool.c @@ -337,6 +337,35 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd) return status; } +static int +be_phys_id(struct net_device *netdev, u32 data) +{ + struct be_adapter *adapter = netdev_priv(netdev); + int status; + u32 cur; + + if (!netif_running(netdev)) + return 0; + + be_cmd_get_beacon_state(adapter, adapter->port_num, &cur); + + if (cur == BEACON_STATE_ENABLED) + return 0; + + if (data < 2) + data = 2; + + status = be_cmd_set_beacon_state(adapter, adapter->port_num, 0, 0, + BEACON_STATE_ENABLED); + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(data*HZ); + + status = be_cmd_set_beacon_state(adapter, adapter->port_num, 0, 0, + BEACON_STATE_DISABLED); + + return status; +} + static int be_do_flash(struct net_device *netdev, struct ethtool_flash *efl) { @@ -369,6 +398,7 @@ const struct ethtool_ops be_ethtool_ops = { .get_tso = ethtool_op_get_tso, .set_tso = ethtool_op_set_tso, .get_strings = be_get_stat_strings, + .phys_id = be_phys_id, .get_sset_count = be_get_sset_count, .get_ethtool_stats = be_get_ethtool_stats, .flash_device = be_do_flash,