* [PATCHv2 NEXT 0/2]net: external loopback suport in ethtool
@ 2011-06-30 6:00 amit.salecha
2011-06-30 6:00 ` [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test amit.salecha
2011-06-30 6:00 ` [PATCHv2 NEXT 2/2] qlcnic: add external loopback support amit.salecha
0 siblings, 2 replies; 6+ messages in thread
From: amit.salecha @ 2011-06-30 6:00 UTC (permalink / raw)
To: davem, bhutchings; +Cc: netdev, ameen.rahman, sucheta.chakraborty
Hi,
Sending revised patch incorporating Ben Hutchings comment.
Comment in kernel-doc format and adding one more flag to convey
that driver performed the external loopback test.
-Amit
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test
2011-06-30 6:00 [PATCHv2 NEXT 0/2]net: external loopback suport in ethtool amit.salecha
@ 2011-06-30 6:00 ` amit.salecha
2011-06-30 13:25 ` Ben Hutchings
2011-07-01 6:58 ` David Miller
2011-06-30 6:00 ` [PATCHv2 NEXT 2/2] qlcnic: add external loopback support amit.salecha
1 sibling, 2 replies; 6+ messages in thread
From: amit.salecha @ 2011-06-30 6:00 UTC (permalink / raw)
To: davem, bhutchings
Cc: netdev, ameen.rahman, sucheta.chakraborty, Amit Kumar Salecha
From: Amit Kumar Salecha <amit.salecha@qlogic.com>
External loopback test can be performed by application without any driver
support on normal Ethernet cards.
But on CNA devices, where multiple functions share same physical port.
Here internal loopback test and external loopback test can be initiated by
multiple functions at same time. To co exist all functions, firmware need
to regulate what test can be run by which function. So before performing external
loopback test, command need to send to firmware, which will quiescent other functions.
User may not want to run external loopback test always. As special cable need to be
connected for this test.
So adding explicit flag in ethtool self test, which will specify interface
to perform external loopback test.
ETH_TEST_FL_EXTERNAL_LB: Application set to request external loopback test
ETH_TEST_FL_EXTERNAL_LB_DONE: Driver ack if test performed
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
---
include/linux/ethtool.h | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 048d0fa..c6e427a 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -310,9 +310,21 @@ struct ethtool_sset_info {
__u32's, etc. */
};
+/**
+ * enum ethtool_test_flags - flags definition of ethtool_test
+ * @ETH_TEST_FL_OFFLINE: if set perform online and offline tests, otherwise
+ * only online tests.
+ * @ETH_TEST_FL_FAILED: Driver set this flag if test fails.
+ * @ETH_TEST_FL_EXTERNAL_LB: Application request to perform external loopback
+ * test.
+ * @ETH_TEST_FL_EXTERNAL_LB_DONE: Driver performed the external loopback test
+ */
+
enum ethtool_test_flags {
- ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */
- ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */
+ ETH_TEST_FL_OFFLINE = (1 << 0),
+ ETH_TEST_FL_FAILED = (1 << 1),
+ ETH_TEST_FL_EXTERNAL_LB = (1 << 2),
+ ETH_TEST_FL_EXTERNAL_LB_DONE = (1 << 3),
};
/* for requesting NIC test and getting results*/
--
1.7.3.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCHv2 NEXT 2/2] qlcnic: add external loopback support
2011-06-30 6:00 [PATCHv2 NEXT 0/2]net: external loopback suport in ethtool amit.salecha
2011-06-30 6:00 ` [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test amit.salecha
@ 2011-06-30 6:00 ` amit.salecha
2011-07-01 6:58 ` David Miller
1 sibling, 1 reply; 6+ messages in thread
From: amit.salecha @ 2011-06-30 6:00 UTC (permalink / raw)
To: davem, bhutchings
Cc: netdev, ameen.rahman, sucheta.chakraborty, Amit Kumar Salecha
From: Amit Kumar Salecha <amit.salecha@qlogic.com>
o Add external loopback test in self test:
- Send set external loopback mode request to fw.
To quiscent other storage functions.
- Perform test
- Send unset loopback mode request to fw.
o Rename ilb to lb.
o Update driver version 5.0.20.
Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
---
drivers/net/qlcnic/qlcnic.h | 5 +++--
drivers/net/qlcnic/qlcnic_ethtool.c | 26 +++++++++++++++++---------
drivers/net/qlcnic/qlcnic_init.c | 3 ++-
3 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/drivers/net/qlcnic/qlcnic.h b/drivers/net/qlcnic/qlcnic.h
index e545450..9899a79 100644
--- a/drivers/net/qlcnic/qlcnic.h
+++ b/drivers/net/qlcnic/qlcnic.h
@@ -36,8 +36,8 @@
#define _QLCNIC_LINUX_MAJOR 5
#define _QLCNIC_LINUX_MINOR 0
-#define _QLCNIC_LINUX_SUBVERSION 19
-#define QLCNIC_LINUX_VERSIONID "5.0.19"
+#define _QLCNIC_LINUX_SUBVERSION 20
+#define QLCNIC_LINUX_VERSIONID "5.0.20"
#define QLCNIC_DRV_IDC_VER 0x01
#define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\
(_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
@@ -782,6 +782,7 @@ struct qlcnic_mac_list_s {
#define QLCNIC_IP_DOWN 3
#define QLCNIC_ILB_MODE 0x1
+#define QLCNIC_ELB_MODE 0x2
#define QLCNIC_LINKEVENT 0x1
#define QLCNIC_LB_RESPONSE 0x2
diff --git a/drivers/net/qlcnic/qlcnic_ethtool.c b/drivers/net/qlcnic/qlcnic_ethtool.c
index 743035e..3ea04e7 100644
--- a/drivers/net/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/qlcnic/qlcnic_ethtool.c
@@ -85,7 +85,8 @@ static const char qlcnic_gstrings_test[][ETH_GSTRING_LEN] = {
"Register_Test_on_offline",
"Link_Test_on_offline",
"Interrupt_Test_offline",
- "Loopback_Test_offline"
+ "Internal_Loopback_offline",
+ "External_Loopback_offline"
};
#define QLCNIC_TEST_LEN ARRAY_SIZE(qlcnic_gstrings_test)
@@ -709,7 +710,7 @@ int qlcnic_check_loopback_buff(unsigned char *data, u8 mac[])
return memcmp(data, buff, QLCNIC_ILB_PKT_SIZE);
}
-static int qlcnic_do_ilb_test(struct qlcnic_adapter *adapter)
+static int qlcnic_do_lb_test(struct qlcnic_adapter *adapter)
{
struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
struct qlcnic_host_sds_ring *sds_ring = &recv_ctx->sds_rings[0];
@@ -735,19 +736,19 @@ static int qlcnic_do_ilb_test(struct qlcnic_adapter *adapter)
dev_kfree_skb_any(skb);
if (!adapter->diag_cnt)
- dev_warn(&adapter->pdev->dev, "ILB Test: %dth packet"
+ dev_warn(&adapter->pdev->dev, "LB Test: %dth packet"
" not recevied\n", i + 1);
else
cnt++;
}
if (cnt != i) {
- dev_warn(&adapter->pdev->dev, "ILB Test failed\n");
+ dev_warn(&adapter->pdev->dev, "LB Test failed\n");
return -1;
}
return 0;
}
-static int qlcnic_iloopback_test(struct net_device *netdev)
+static int qlcnic_loopback_test(struct net_device *netdev, u8 mode)
{
struct qlcnic_adapter *adapter = netdev_priv(netdev);
int max_sds_rings = adapter->max_sds_rings;
@@ -755,7 +756,8 @@ static int qlcnic_iloopback_test(struct net_device *netdev)
int loop = 0;
int ret;
- netdev_info(netdev, "%s: in progress\n", __func__);
+ netdev_info(netdev, "%s loopback test in progress\n",
+ mode == QLCNIC_ILB_MODE ? "internal" : "external");
if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) {
netdev_warn(netdev, "Loopback test not supported for non "
"privilege function\n");
@@ -772,7 +774,7 @@ static int qlcnic_iloopback_test(struct net_device *netdev)
sds_ring = &adapter->recv_ctx->sds_rings[0];
- ret = qlcnic_set_lb_mode(adapter, QLCNIC_ILB_MODE);
+ ret = qlcnic_set_lb_mode(adapter, mode);
if (ret)
goto free_res;
@@ -790,7 +792,7 @@ static int qlcnic_iloopback_test(struct net_device *netdev)
goto free_res;
}
- ret = qlcnic_do_ilb_test(adapter);
+ ret = qlcnic_do_lb_test(adapter);
qlcnic_clear_lb_mode(adapter);
@@ -822,10 +824,16 @@ qlcnic_diag_test(struct net_device *dev, struct ethtool_test *eth_test,
if (data[2])
eth_test->flags |= ETH_TEST_FL_FAILED;
- data[3] = qlcnic_iloopback_test(dev);
+ data[3] = qlcnic_loopback_test(dev, QLCNIC_ILB_MODE);
if (data[3])
eth_test->flags |= ETH_TEST_FL_FAILED;
+ if (eth_test->flags & ETH_TEST_FL_EXTERNAL_LB) {
+ data[4] = qlcnic_loopback_test(dev, QLCNIC_ELB_MODE);
+ if (data[4])
+ eth_test->flags |= ETH_TEST_FL_FAILED;
+ eth_test->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
+ }
}
}
diff --git a/drivers/net/qlcnic/qlcnic_init.c b/drivers/net/qlcnic/qlcnic_init.c
index 9d5bee0..6ec1baa 100644
--- a/drivers/net/qlcnic/qlcnic_init.c
+++ b/drivers/net/qlcnic/qlcnic_init.c
@@ -1303,7 +1303,8 @@ qlcnic_handle_linkevent(struct qlcnic_adapter *adapter,
dev_info(&netdev->dev, "unsupported cable length %d\n",
cable_len);
- if (!link_status && (lb_status == 1))
+ if (!link_status && (lb_status == QLCNIC_ILB_MODE ||
+ lb_status == QLCNIC_ELB_MODE))
adapter->ahw->loopback_state |= QLCNIC_LINKEVENT;
qlcnic_advert_link_change(adapter, link_status);
--
1.7.3.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test
2011-06-30 6:00 ` [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test amit.salecha
@ 2011-06-30 13:25 ` Ben Hutchings
2011-07-01 6:58 ` David Miller
1 sibling, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2011-06-30 13:25 UTC (permalink / raw)
To: amit.salecha; +Cc: davem, netdev, ameen.rahman, sucheta.chakraborty
On Wed, 2011-06-29 at 23:00 -0700, amit.salecha@qlogic.com wrote:
> From: Amit Kumar Salecha <amit.salecha@qlogic.com>
>
> External loopback test can be performed by application without any driver
> support on normal Ethernet cards.
> But on CNA devices, where multiple functions share same physical port.
> Here internal loopback test and external loopback test can be initiated by
> multiple functions at same time. To co exist all functions, firmware need
> to regulate what test can be run by which function. So before performing external
> loopback test, command need to send to firmware, which will quiescent other functions.
>
> User may not want to run external loopback test always. As special cable need to be
> connected for this test.
> So adding explicit flag in ethtool self test, which will specify interface
> to perform external loopback test.
> ETH_TEST_FL_EXTERNAL_LB: Application set to request external loopback test
> ETH_TEST_FL_EXTERNAL_LB_DONE: Driver ack if test performed
>
> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Reviewed-by: Ben Hutchings <bhutchings@solarflare.com>
Ben.
> ---
> include/linux/ethtool.h | 16 ++++++++++++++--
> 1 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
> index 048d0fa..c6e427a 100644
> --- a/include/linux/ethtool.h
> +++ b/include/linux/ethtool.h
> @@ -310,9 +310,21 @@ struct ethtool_sset_info {
> __u32's, etc. */
> };
>
> +/**
> + * enum ethtool_test_flags - flags definition of ethtool_test
> + * @ETH_TEST_FL_OFFLINE: if set perform online and offline tests, otherwise
> + * only online tests.
> + * @ETH_TEST_FL_FAILED: Driver set this flag if test fails.
> + * @ETH_TEST_FL_EXTERNAL_LB: Application request to perform external loopback
> + * test.
> + * @ETH_TEST_FL_EXTERNAL_LB_DONE: Driver performed the external loopback test
> + */
> +
> enum ethtool_test_flags {
> - ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */
> - ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */
> + ETH_TEST_FL_OFFLINE = (1 << 0),
> + ETH_TEST_FL_FAILED = (1 << 1),
> + ETH_TEST_FL_EXTERNAL_LB = (1 << 2),
> + ETH_TEST_FL_EXTERNAL_LB_DONE = (1 << 3),
> };
>
> /* for requesting NIC test and getting results*/
--
Ben Hutchings, Senior Software Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test
2011-06-30 6:00 ` [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test amit.salecha
2011-06-30 13:25 ` Ben Hutchings
@ 2011-07-01 6:58 ` David Miller
1 sibling, 0 replies; 6+ messages in thread
From: David Miller @ 2011-07-01 6:58 UTC (permalink / raw)
To: amit.salecha; +Cc: bhutchings, netdev, ameen.rahman, sucheta.chakraborty
From: amit.salecha@qlogic.com
Date: Wed, 29 Jun 2011 23:00:49 -0700
> From: Amit Kumar Salecha <amit.salecha@qlogic.com>
>
> External loopback test can be performed by application without any driver
> support on normal Ethernet cards.
> But on CNA devices, where multiple functions share same physical port.
> Here internal loopback test and external loopback test can be initiated by
> multiple functions at same time. To co exist all functions, firmware need
> to regulate what test can be run by which function. So before performing external
> loopback test, command need to send to firmware, which will quiescent other functions.
>
> User may not want to run external loopback test always. As special cable need to be
> connected for this test.
> So adding explicit flag in ethtool self test, which will specify interface
> to perform external loopback test.
> ETH_TEST_FL_EXTERNAL_LB: Application set to request external loopback test
> ETH_TEST_FL_EXTERNAL_LB_DONE: Driver ack if test performed
>
> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCHv2 NEXT 2/2] qlcnic: add external loopback support
2011-06-30 6:00 ` [PATCHv2 NEXT 2/2] qlcnic: add external loopback support amit.salecha
@ 2011-07-01 6:58 ` David Miller
0 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2011-07-01 6:58 UTC (permalink / raw)
To: amit.salecha; +Cc: bhutchings, netdev, ameen.rahman, sucheta.chakraborty
From: amit.salecha@qlogic.com
Date: Wed, 29 Jun 2011 23:00:50 -0700
> From: Amit Kumar Salecha <amit.salecha@qlogic.com>
>
> o Add external loopback test in self test:
> - Send set external loopback mode request to fw.
> To quiscent other storage functions.
> - Perform test
> - Send unset loopback mode request to fw.
>
> o Rename ilb to lb.
> o Update driver version 5.0.20.
>
> Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-07-01 6:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-30 6:00 [PATCHv2 NEXT 0/2]net: external loopback suport in ethtool amit.salecha
2011-06-30 6:00 ` [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test amit.salecha
2011-06-30 13:25 ` Ben Hutchings
2011-07-01 6:58 ` David Miller
2011-06-30 6:00 ` [PATCHv2 NEXT 2/2] qlcnic: add external loopback support amit.salecha
2011-07-01 6:58 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).