forked from Minki/linux
qlge: Add ethtool blink function.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1d30df24ec
commit
d8eb59dc8b
@ -805,6 +805,9 @@ enum {
|
||||
MB_CMD_SET_PORT_CFG = 0x00000122,
|
||||
MB_CMD_GET_PORT_CFG = 0x00000123,
|
||||
MB_CMD_GET_LINK_STS = 0x00000124,
|
||||
MB_CMD_SET_LED_CFG = 0x00000125, /* Set LED Configuration Register */
|
||||
QL_LED_BLINK = 0x03e803e8,
|
||||
MB_CMD_GET_LED_CFG = 0x00000126, /* Get LED Configuration Register */
|
||||
MB_CMD_SET_MGMNT_TFK_CTL = 0x00000160, /* Set Mgmnt Traffic Control */
|
||||
MB_SET_MPI_TFK_STOP = (1 << 0),
|
||||
MB_SET_MPI_TFK_RESUME = (1 << 1),
|
||||
@ -1551,6 +1554,7 @@ struct ql_adapter {
|
||||
u32 port_init;
|
||||
u32 link_status;
|
||||
u32 link_config;
|
||||
u32 led_config;
|
||||
u32 max_frame_size;
|
||||
|
||||
union flash_params flash;
|
||||
@ -1642,6 +1646,8 @@ int ql_mb_get_fw_state(struct ql_adapter *qdev);
|
||||
int ql_cam_route_initialize(struct ql_adapter *qdev);
|
||||
int ql_read_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 *data);
|
||||
int ql_mb_about_fw(struct ql_adapter *qdev);
|
||||
int ql_mb_set_led_cfg(struct ql_adapter *qdev, u32 led_config);
|
||||
int ql_mb_get_led_cfg(struct ql_adapter *qdev);
|
||||
void ql_link_on(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);
|
||||
|
@ -371,6 +371,33 @@ static void ql_get_drvinfo(struct net_device *ndev,
|
||||
drvinfo->eedump_len = 0;
|
||||
}
|
||||
|
||||
|
||||
static int ql_phys_id(struct net_device *ndev, u32 data)
|
||||
{
|
||||
struct ql_adapter *qdev = netdev_priv(ndev);
|
||||
u32 led_reg, i;
|
||||
int status;
|
||||
|
||||
/* Save the current LED settings */
|
||||
status = ql_mb_get_led_cfg(qdev);
|
||||
if (status)
|
||||
return status;
|
||||
led_reg = qdev->led_config;
|
||||
|
||||
/* Start blinking the led */
|
||||
if (!data || data > 300)
|
||||
data = 300;
|
||||
|
||||
for (i = 0; i < (data * 10); i++)
|
||||
ql_mb_set_led_cfg(qdev, QL_LED_BLINK);
|
||||
|
||||
/* Restore LED settings */
|
||||
status = ql_mb_set_led_cfg(qdev, led_reg);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int ql_get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
{
|
||||
struct ql_adapter *qdev = netdev_priv(dev);
|
||||
@ -499,6 +526,7 @@ const struct ethtool_ops qlge_ethtool_ops = {
|
||||
.get_msglevel = ql_get_msglevel,
|
||||
.set_msglevel = ql_set_msglevel,
|
||||
.get_link = ethtool_op_get_link,
|
||||
.phys_id = ql_phys_id,
|
||||
.get_pauseparam = ql_get_pauseparam,
|
||||
.set_pauseparam = ql_set_pauseparam,
|
||||
.get_rx_csum = ql_get_rx_csum,
|
||||
|
@ -751,6 +751,61 @@ static int ql_idc_wait(struct ql_adapter *qdev)
|
||||
return status;
|
||||
}
|
||||
|
||||
int ql_mb_set_led_cfg(struct ql_adapter *qdev, u32 led_config)
|
||||
{
|
||||
struct mbox_params mbc;
|
||||
struct mbox_params *mbcp = &mbc;
|
||||
int status;
|
||||
|
||||
memset(mbcp, 0, sizeof(struct mbox_params));
|
||||
|
||||
mbcp->in_count = 2;
|
||||
mbcp->out_count = 1;
|
||||
|
||||
mbcp->mbox_in[0] = MB_CMD_SET_LED_CFG;
|
||||
mbcp->mbox_in[1] = led_config;
|
||||
|
||||
|
||||
status = ql_mailbox_command(qdev, mbcp);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
if (mbcp->mbox_out[0] != MB_CMD_STS_GOOD) {
|
||||
QPRINTK(qdev, DRV, ERR,
|
||||
"Failed to set LED Configuration.\n");
|
||||
status = -EIO;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int ql_mb_get_led_cfg(struct ql_adapter *qdev)
|
||||
{
|
||||
struct mbox_params mbc;
|
||||
struct mbox_params *mbcp = &mbc;
|
||||
int status;
|
||||
|
||||
memset(mbcp, 0, sizeof(struct mbox_params));
|
||||
|
||||
mbcp->in_count = 1;
|
||||
mbcp->out_count = 2;
|
||||
|
||||
mbcp->mbox_in[0] = MB_CMD_GET_LED_CFG;
|
||||
|
||||
status = ql_mailbox_command(qdev, mbcp);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
if (mbcp->mbox_out[0] != MB_CMD_STS_GOOD) {
|
||||
QPRINTK(qdev, DRV, ERR,
|
||||
"Failed to get LED Configuration.\n");
|
||||
status = -EIO;
|
||||
} else
|
||||
qdev->led_config = mbcp->mbox_out[1];
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int ql_mb_set_mgmnt_traffic_ctl(struct ql_adapter *qdev, u32 control)
|
||||
{
|
||||
struct mbox_params mbc;
|
||||
|
Loading…
Reference in New Issue
Block a user