Commit 1d30df24 authored by Ron Mercer's avatar Ron Mercer Committed by David S. Miller

qlge: Add ethtool get/set pause parameter.

Signed-off-by: default avatarRon Mercer <ron.mercer@qlogic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a4ee3ce3
...@@ -1645,6 +1645,8 @@ int ql_mb_about_fw(struct ql_adapter *qdev); ...@@ -1645,6 +1645,8 @@ int ql_mb_about_fw(struct ql_adapter *qdev);
void ql_link_on(struct ql_adapter *qdev); void ql_link_on(struct ql_adapter *qdev);
void ql_link_off(struct ql_adapter *qdev); void ql_link_off(struct ql_adapter *qdev);
int ql_mb_set_mgmnt_traffic_ctl(struct ql_adapter *qdev, u32 control); int ql_mb_set_mgmnt_traffic_ctl(struct ql_adapter *qdev, u32 control);
int ql_mb_get_port_cfg(struct ql_adapter *qdev);
int ql_mb_set_port_cfg(struct ql_adapter *qdev);
int ql_wait_fifo_empty(struct ql_adapter *qdev); int ql_wait_fifo_empty(struct ql_adapter *qdev);
#if 1 #if 1
......
...@@ -424,6 +424,37 @@ static int ql_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *c) ...@@ -424,6 +424,37 @@ static int ql_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *c)
return ql_update_ring_coalescing(qdev); return ql_update_ring_coalescing(qdev);
} }
static void ql_get_pauseparam(struct net_device *netdev,
struct ethtool_pauseparam *pause)
{
struct ql_adapter *qdev = netdev_priv(netdev);
ql_mb_get_port_cfg(qdev);
if (qdev->link_config & CFG_PAUSE_STD) {
pause->rx_pause = 1;
pause->tx_pause = 1;
}
}
static int ql_set_pauseparam(struct net_device *netdev,
struct ethtool_pauseparam *pause)
{
struct ql_adapter *qdev = netdev_priv(netdev);
int status = 0;
if ((pause->rx_pause) && (pause->tx_pause))
qdev->link_config |= CFG_PAUSE_STD;
else if (!pause->rx_pause && !pause->tx_pause)
qdev->link_config &= ~CFG_PAUSE_STD;
else
return -EINVAL;
status = ql_mb_set_port_cfg(qdev);
if (status)
return status;
return status;
}
static u32 ql_get_rx_csum(struct net_device *netdev) static u32 ql_get_rx_csum(struct net_device *netdev)
{ {
struct ql_adapter *qdev = netdev_priv(netdev); struct ql_adapter *qdev = netdev_priv(netdev);
...@@ -468,6 +499,8 @@ const struct ethtool_ops qlge_ethtool_ops = { ...@@ -468,6 +499,8 @@ const struct ethtool_ops qlge_ethtool_ops = {
.get_msglevel = ql_get_msglevel, .get_msglevel = ql_get_msglevel,
.set_msglevel = ql_set_msglevel, .set_msglevel = ql_set_msglevel,
.get_link = ethtool_op_get_link, .get_link = ethtool_op_get_link,
.get_pauseparam = ql_get_pauseparam,
.set_pauseparam = ql_set_pauseparam,
.get_rx_csum = ql_get_rx_csum, .get_rx_csum = ql_get_rx_csum,
.set_rx_csum = ql_set_rx_csum, .set_rx_csum = ql_set_rx_csum,
.get_tx_csum = ethtool_op_get_tx_csum, .get_tx_csum = ethtool_op_get_tx_csum,
......
...@@ -637,7 +637,7 @@ int ql_mb_idc_ack(struct ql_adapter *qdev) ...@@ -637,7 +637,7 @@ int ql_mb_idc_ack(struct ql_adapter *qdev)
* for the current port. * for the current port.
* Most likely will block. * Most likely will block.
*/ */
static int ql_mb_set_port_cfg(struct ql_adapter *qdev) int ql_mb_set_port_cfg(struct ql_adapter *qdev)
{ {
struct mbox_params mbc; struct mbox_params mbc;
struct mbox_params *mbcp = &mbc; struct mbox_params *mbcp = &mbc;
...@@ -672,7 +672,7 @@ static int ql_mb_set_port_cfg(struct ql_adapter *qdev) ...@@ -672,7 +672,7 @@ static int ql_mb_set_port_cfg(struct ql_adapter *qdev)
* for the current port. * for the current port.
* Most likely will block. * Most likely will block.
*/ */
static int ql_mb_get_port_cfg(struct ql_adapter *qdev) int ql_mb_get_port_cfg(struct ql_adapter *qdev)
{ {
struct mbox_params mbc; struct mbox_params mbc;
struct mbox_params *mbcp = &mbc; struct mbox_params *mbcp = &mbc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment