lkml.org 
[lkml]   [2017]   [Dec]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V5 net-next 15/17] net: hns3: add support for querying advertised pause frame by ethtool ethx
    Date
    This patch adds support for querying advertised pause frame by using
    ethtool command(ethtool ethx).

    Fixes: 496d03e960ae ("net: hns3: Add Ethtool support to HNS3 driver")
    Signed-off-by: Peng Li <lipeng321@huawei.com>
    Signed-off-by: Fuyun Liang <liangfuyun1@huawei.com>
    ---
    drivers/net/ethernet/hisilicon/hns3/hnae3.h | 2 ++
    drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 15 +++++++++++++++
    drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 15 +++++++++++++++
    3 files changed, 32 insertions(+)

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
    index a67d02a9..82e9a80 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
    +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
    @@ -394,6 +394,8 @@ struct hnae3_ae_ops {
    void (*get_tqps_and_rss_info)(struct hnae3_handle *h,
    u16 *free_tqps, u16 *max_rss_size);
    int (*set_channels)(struct hnae3_handle *handle, u32 new_tqps_num);
    + void (*get_flowctrl_adv)(struct hnae3_handle *handle,
    + u32 *flowctrl_adv);
    };

    struct hnae3_dcb_ops {
    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
    index b829ec7..2ae4d39 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
    @@ -575,6 +575,7 @@ static int hns3_get_link_ksettings(struct net_device *netdev,
    struct ethtool_link_ksettings *cmd)
    {
    struct hnae3_handle *h = hns3_get_handle(netdev);
    + u32 flowctrl_adv = 0;
    u32 supported_caps;
    u32 advertised_caps;
    u8 media_type = HNAE3_MEDIA_TYPE_UNKNOWN;
    @@ -650,6 +651,8 @@ static int hns3_get_link_ksettings(struct net_device *netdev,
    if (!cmd->base.autoneg)
    advertised_caps &= ~HNS3_LM_AUTONEG_BIT;

    + advertised_caps &= ~HNS3_LM_PAUSE_BIT;
    +
    /* now, map driver link modes to ethtool link modes */
    hns3_driv_to_eth_caps(supported_caps, cmd, false);
    hns3_driv_to_eth_caps(advertised_caps, cmd, true);
    @@ -662,6 +665,18 @@ static int hns3_get_link_ksettings(struct net_device *netdev,
    /* 4.mdio_support */
    cmd->base.mdio_support = ETH_MDIO_SUPPORTS_C22;

    + /* 5.get flow control setttings */
    + if (h->ae_algo->ops->get_flowctrl_adv)
    + h->ae_algo->ops->get_flowctrl_adv(h, &flowctrl_adv);
    +
    + if (flowctrl_adv & ADVERTISED_Pause)
    + ethtool_link_ksettings_add_link_mode(cmd, advertising,
    + Pause);
    +
    + if (flowctrl_adv & ADVERTISED_Asym_Pause)
    + ethtool_link_ksettings_add_link_mode(cmd, advertising,
    + Asym_Pause);
    +
    return 0;
    }

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
    index bb31212..4d69688 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
    @@ -4660,6 +4660,20 @@ static u32 hclge_get_fw_version(struct hnae3_handle *handle)
    return hdev->fw_version;
    }

    +static void hclge_get_flowctrl_adv(struct hnae3_handle *handle,
    + u32 *flowctrl_adv)
    +{
    + struct hclge_vport *vport = hclge_get_vport(handle);
    + struct hclge_dev *hdev = vport->back;
    + struct phy_device *phydev = hdev->hw.mac.phydev;
    +
    + if (!phydev)
    + return;
    +
    + *flowctrl_adv |= (phydev->advertising & ADVERTISED_Pause) |
    + (phydev->advertising & ADVERTISED_Asym_Pause);
    +}
    +
    static void hclge_set_flowctrl_adv(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
    {
    struct phy_device *phydev = hdev->hw.mac.phydev;
    @@ -5478,6 +5492,7 @@ static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num)
    .get_tqps_and_rss_info = hclge_get_tqps_and_rss_info,
    .set_channels = hclge_set_channels,
    .get_channels = hclge_get_channels,
    + .get_flowctrl_adv = hclge_get_flowctrl_adv,
    };

    static struct hnae3_ae_algo ae_algo = {
    --
    1.9.1
    \
     
     \ /
      Last update: 2017-12-22 04:56    [W:8.640 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site