Loading drivers/net/qlge/qlge.h +6 −0 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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; Loading Loading @@ -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); Loading drivers/net/qlge/qlge_ethtool.c +28 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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, Loading drivers/net/qlge/qlge_mpi.c +55 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
drivers/net/qlge/qlge.h +6 −0 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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; Loading Loading @@ -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); Loading
drivers/net/qlge/qlge_ethtool.c +28 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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, Loading
drivers/net/qlge/qlge_mpi.c +55 −0 Original line number Diff line number Diff line Loading @@ -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