[PATCH net-next 13/19] net: hns: add get_coalesce_range api for hns

2016-06-20 Thread Yisen Zhuang
From: Daode Huang 

This patch adds get_coalesce_range api for hns, it shows
range of coalesce usecs and frames that can be set on
this interface.

Signed-off-by: Daode Huang 
Signed-off-by: Yisen Zhuang 
---
 drivers/net/ethernet/hisilicon/hns/hnae.h |  5 +
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 25 +++
 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c  | 10 +
 3 files changed, 40 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.h 
b/drivers/net/ethernet/hisilicon/hns/hnae.h
index 529cb13..962e445 100644
--- a/drivers/net/ethernet/hisilicon/hns/hnae.h
+++ b/drivers/net/ethernet/hisilicon/hns/hnae.h
@@ -473,6 +473,11 @@ struct hnae_ae_ops {
int (*set_coalesce_usecs)(struct hnae_handle *handle, u32 timeout);
int (*set_coalesce_frames)(struct hnae_handle *handle,
   u32 coalesce_frames);
+   void (*get_coalesce_range)(struct hnae_handle *handle,
+  u32 *tx_frames_low, u32 *rx_frames_low,
+  u32 *tx_frames_high, u32 *rx_frames_high,
+  u32 *tx_usecs_low, u32 *rx_usecs_low,
+  u32 *tx_usecs_high, u32 *rx_usecs_high);
void (*set_promisc_mode)(struct hnae_handle *handle, u32 en);
int (*get_mac_addr)(struct hnae_handle *handle, void **p);
int (*set_mac_addr)(struct hnae_handle *handle, void *p);
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c 
b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index b97cc75..6b3796f 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -465,6 +465,30 @@ static int  hns_ae_set_coalesce_frames(struct hnae_handle 
*handle,
ring_pair->port_id_in_comm, coalesce_frames);
 }
 
+static void hns_ae_get_coalesce_range(struct hnae_handle *handle,
+ u32 *tx_frames_low, u32 *rx_frames_low,
+ u32 *tx_frames_high, u32 *rx_frames_high,
+ u32 *tx_usecs_low, u32 *rx_usecs_low,
+ u32 *tx_usecs_high, u32 *rx_usecs_high)
+{
+   struct dsaf_device *dsaf_dev;
+
+   dsaf_dev = hns_ae_get_dsaf_dev(handle->dev);
+
+   *tx_frames_low  = HNS_RCB_MIN_COALESCED_FRAMES;
+   *rx_frames_low  = HNS_RCB_MIN_COALESCED_FRAMES;
+   *tx_frames_high =
+   (dsaf_dev->desc_num - 1 > HNS_RCB_MAX_COALESCED_FRAMES) ?
+   HNS_RCB_MAX_COALESCED_FRAMES : dsaf_dev->desc_num - 1;
+   *rx_frames_high =
+   (dsaf_dev->desc_num - 1 > HNS_RCB_MAX_COALESCED_FRAMES) ?
+HNS_RCB_MAX_COALESCED_FRAMES : dsaf_dev->desc_num - 1;
+   *tx_usecs_low   = 0;
+   *rx_usecs_low   = 0;
+   *tx_usecs_high  = HNS_RCB_MAX_COALESCED_USECS;
+   *rx_usecs_high  = HNS_RCB_MAX_COALESCED_USECS;
+}
+
 void hns_ae_update_stats(struct hnae_handle *handle,
 struct net_device_stats *net_stats)
 {
@@ -798,6 +822,7 @@ static struct hnae_ae_ops hns_dsaf_ops = {
.get_rx_max_coalesced_frames = hns_ae_get_rx_max_coalesced_frames,
.set_coalesce_usecs = hns_ae_set_coalesce_usecs,
.set_coalesce_frames = hns_ae_set_coalesce_frames,
+   .get_coalesce_range = hns_ae_get_coalesce_range,
.set_promisc_mode = hns_ae_set_promisc_mode,
.set_mac_addr = hns_ae_set_mac_address,
.set_mc_addr = hns_ae_set_multicast_one,
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c 
b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
index 564ae1e..a395ca1 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
@@ -751,6 +751,16 @@ static int hns_get_coalesce(struct net_device *net_dev,
>tx_max_coalesced_frames,
>rx_max_coalesced_frames);
 
+   ops->get_coalesce_range(priv->ae_handle,
+   >tx_max_coalesced_frames_low,
+   >rx_max_coalesced_frames_low,
+   >tx_max_coalesced_frames_high,
+   >rx_max_coalesced_frames_high,
+   >tx_coalesce_usecs_low,
+   >rx_coalesce_usecs_low,
+   >tx_coalesce_usecs_high,
+   >rx_coalesce_usecs_high);
+
return 0;
 }
 
-- 
1.9.1



[PATCH net-next 13/19] net: hns: add get_coalesce_range api for hns

2016-06-20 Thread Yisen Zhuang
From: Daode Huang 

This patch adds get_coalesce_range api for hns, it shows
range of coalesce usecs and frames that can be set on
this interface.

Signed-off-by: Daode Huang 
Signed-off-by: Yisen Zhuang 
---
 drivers/net/ethernet/hisilicon/hns/hnae.h |  5 +
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 25 +++
 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c  | 10 +
 3 files changed, 40 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.h 
b/drivers/net/ethernet/hisilicon/hns/hnae.h
index 529cb13..962e445 100644
--- a/drivers/net/ethernet/hisilicon/hns/hnae.h
+++ b/drivers/net/ethernet/hisilicon/hns/hnae.h
@@ -473,6 +473,11 @@ struct hnae_ae_ops {
int (*set_coalesce_usecs)(struct hnae_handle *handle, u32 timeout);
int (*set_coalesce_frames)(struct hnae_handle *handle,
   u32 coalesce_frames);
+   void (*get_coalesce_range)(struct hnae_handle *handle,
+  u32 *tx_frames_low, u32 *rx_frames_low,
+  u32 *tx_frames_high, u32 *rx_frames_high,
+  u32 *tx_usecs_low, u32 *rx_usecs_low,
+  u32 *tx_usecs_high, u32 *rx_usecs_high);
void (*set_promisc_mode)(struct hnae_handle *handle, u32 en);
int (*get_mac_addr)(struct hnae_handle *handle, void **p);
int (*set_mac_addr)(struct hnae_handle *handle, void *p);
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c 
b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index b97cc75..6b3796f 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -465,6 +465,30 @@ static int  hns_ae_set_coalesce_frames(struct hnae_handle 
*handle,
ring_pair->port_id_in_comm, coalesce_frames);
 }
 
+static void hns_ae_get_coalesce_range(struct hnae_handle *handle,
+ u32 *tx_frames_low, u32 *rx_frames_low,
+ u32 *tx_frames_high, u32 *rx_frames_high,
+ u32 *tx_usecs_low, u32 *rx_usecs_low,
+ u32 *tx_usecs_high, u32 *rx_usecs_high)
+{
+   struct dsaf_device *dsaf_dev;
+
+   dsaf_dev = hns_ae_get_dsaf_dev(handle->dev);
+
+   *tx_frames_low  = HNS_RCB_MIN_COALESCED_FRAMES;
+   *rx_frames_low  = HNS_RCB_MIN_COALESCED_FRAMES;
+   *tx_frames_high =
+   (dsaf_dev->desc_num - 1 > HNS_RCB_MAX_COALESCED_FRAMES) ?
+   HNS_RCB_MAX_COALESCED_FRAMES : dsaf_dev->desc_num - 1;
+   *rx_frames_high =
+   (dsaf_dev->desc_num - 1 > HNS_RCB_MAX_COALESCED_FRAMES) ?
+HNS_RCB_MAX_COALESCED_FRAMES : dsaf_dev->desc_num - 1;
+   *tx_usecs_low   = 0;
+   *rx_usecs_low   = 0;
+   *tx_usecs_high  = HNS_RCB_MAX_COALESCED_USECS;
+   *rx_usecs_high  = HNS_RCB_MAX_COALESCED_USECS;
+}
+
 void hns_ae_update_stats(struct hnae_handle *handle,
 struct net_device_stats *net_stats)
 {
@@ -798,6 +822,7 @@ static struct hnae_ae_ops hns_dsaf_ops = {
.get_rx_max_coalesced_frames = hns_ae_get_rx_max_coalesced_frames,
.set_coalesce_usecs = hns_ae_set_coalesce_usecs,
.set_coalesce_frames = hns_ae_set_coalesce_frames,
+   .get_coalesce_range = hns_ae_get_coalesce_range,
.set_promisc_mode = hns_ae_set_promisc_mode,
.set_mac_addr = hns_ae_set_mac_address,
.set_mc_addr = hns_ae_set_multicast_one,
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c 
b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
index 564ae1e..a395ca1 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
@@ -751,6 +751,16 @@ static int hns_get_coalesce(struct net_device *net_dev,
>tx_max_coalesced_frames,
>rx_max_coalesced_frames);
 
+   ops->get_coalesce_range(priv->ae_handle,
+   >tx_max_coalesced_frames_low,
+   >rx_max_coalesced_frames_low,
+   >tx_max_coalesced_frames_high,
+   >rx_max_coalesced_frames_high,
+   >tx_coalesce_usecs_low,
+   >rx_coalesce_usecs_low,
+   >tx_coalesce_usecs_high,
+   >rx_coalesce_usecs_high);
+
return 0;
 }
 
-- 
1.9.1