diff options
Diffstat (limited to 'drivers/net/qlge/qlge_ethtool.c')
-rw-r--r-- | drivers/net/qlge/qlge_ethtool.c | 93 |
1 files changed, 36 insertions, 57 deletions
diff --git a/drivers/net/qlge/qlge_ethtool.c b/drivers/net/qlge/qlge_ethtool.c index 4892d64f4e05..19b00fa0eaf0 100644 --- a/drivers/net/qlge/qlge_ethtool.c +++ b/drivers/net/qlge/qlge_ethtool.c | |||
@@ -356,7 +356,7 @@ static int ql_get_settings(struct net_device *ndev, | |||
356 | ecmd->port = PORT_FIBRE; | 356 | ecmd->port = PORT_FIBRE; |
357 | } | 357 | } |
358 | 358 | ||
359 | ecmd->speed = SPEED_10000; | 359 | ethtool_cmd_speed_set(ecmd, SPEED_10000); |
360 | ecmd->duplex = DUPLEX_FULL; | 360 | ecmd->duplex = DUPLEX_FULL; |
361 | 361 | ||
362 | return 0; | 362 | return 0; |
@@ -375,7 +375,10 @@ static void ql_get_drvinfo(struct net_device *ndev, | |||
375 | strncpy(drvinfo->bus_info, pci_name(qdev->pdev), 32); | 375 | strncpy(drvinfo->bus_info, pci_name(qdev->pdev), 32); |
376 | drvinfo->n_stats = 0; | 376 | drvinfo->n_stats = 0; |
377 | drvinfo->testinfo_len = 0; | 377 | drvinfo->testinfo_len = 0; |
378 | drvinfo->regdump_len = 0; | 378 | if (!test_bit(QL_FRC_COREDUMP, &qdev->flags)) |
379 | drvinfo->regdump_len = sizeof(struct ql_mpi_coredump); | ||
380 | else | ||
381 | drvinfo->regdump_len = sizeof(struct ql_reg_dump); | ||
379 | drvinfo->eedump_len = 0; | 382 | drvinfo->eedump_len = 0; |
380 | } | 383 | } |
381 | 384 | ||
@@ -409,31 +412,31 @@ static int ql_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) | |||
409 | return 0; | 412 | return 0; |
410 | } | 413 | } |
411 | 414 | ||
412 | static int ql_phys_id(struct net_device *ndev, u32 data) | 415 | static int ql_set_phys_id(struct net_device *ndev, |
416 | enum ethtool_phys_id_state state) | ||
417 | |||
413 | { | 418 | { |
414 | struct ql_adapter *qdev = netdev_priv(ndev); | 419 | struct ql_adapter *qdev = netdev_priv(ndev); |
415 | u32 led_reg, i; | ||
416 | int status; | ||
417 | 420 | ||
418 | /* Save the current LED settings */ | 421 | switch (state) { |
419 | status = ql_mb_get_led_cfg(qdev); | 422 | case ETHTOOL_ID_ACTIVE: |
420 | if (status) | 423 | /* Save the current LED settings */ |
421 | return status; | 424 | if (ql_mb_get_led_cfg(qdev)) |
422 | led_reg = qdev->led_config; | 425 | return -EIO; |
423 | 426 | ||
424 | /* Start blinking the led */ | 427 | /* Start blinking */ |
425 | if (!data || data > 300) | ||
426 | data = 300; | ||
427 | |||
428 | for (i = 0; i < (data * 10); i++) | ||
429 | ql_mb_set_led_cfg(qdev, QL_LED_BLINK); | 428 | ql_mb_set_led_cfg(qdev, QL_LED_BLINK); |
429 | return 0; | ||
430 | 430 | ||
431 | /* Restore LED settings */ | 431 | case ETHTOOL_ID_INACTIVE: |
432 | status = ql_mb_set_led_cfg(qdev, led_reg); | 432 | /* Restore LED settings */ |
433 | if (status) | 433 | if (ql_mb_set_led_cfg(qdev, qdev->led_config)) |
434 | return status; | 434 | return -EIO; |
435 | return 0; | ||
435 | 436 | ||
436 | return 0; | 437 | default: |
438 | return -EINVAL; | ||
439 | } | ||
437 | } | 440 | } |
438 | 441 | ||
439 | static int ql_start_loopback(struct ql_adapter *qdev) | 442 | static int ql_start_loopback(struct ql_adapter *qdev) |
@@ -547,7 +550,12 @@ static void ql_self_test(struct net_device *ndev, | |||
547 | 550 | ||
548 | static int ql_get_regs_len(struct net_device *ndev) | 551 | static int ql_get_regs_len(struct net_device *ndev) |
549 | { | 552 | { |
550 | return sizeof(struct ql_reg_dump); | 553 | struct ql_adapter *qdev = netdev_priv(ndev); |
554 | |||
555 | if (!test_bit(QL_FRC_COREDUMP, &qdev->flags)) | ||
556 | return sizeof(struct ql_mpi_coredump); | ||
557 | else | ||
558 | return sizeof(struct ql_reg_dump); | ||
551 | } | 559 | } |
552 | 560 | ||
553 | static void ql_get_regs(struct net_device *ndev, | 561 | static void ql_get_regs(struct net_device *ndev, |
@@ -555,7 +563,12 @@ static void ql_get_regs(struct net_device *ndev, | |||
555 | { | 563 | { |
556 | struct ql_adapter *qdev = netdev_priv(ndev); | 564 | struct ql_adapter *qdev = netdev_priv(ndev); |
557 | 565 | ||
558 | ql_gen_reg_dump(qdev, p); | 566 | ql_get_dump(qdev, p); |
567 | qdev->core_is_dumped = 0; | ||
568 | if (!test_bit(QL_FRC_COREDUMP, &qdev->flags)) | ||
569 | regs->len = sizeof(struct ql_mpi_coredump); | ||
570 | else | ||
571 | regs->len = sizeof(struct ql_reg_dump); | ||
559 | } | 572 | } |
560 | 573 | ||
561 | static int ql_get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) | 574 | static int ql_get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) |
@@ -642,32 +655,6 @@ static int ql_set_pauseparam(struct net_device *netdev, | |||
642 | return status; | 655 | return status; |
643 | } | 656 | } |
644 | 657 | ||
645 | static u32 ql_get_rx_csum(struct net_device *netdev) | ||
646 | { | ||
647 | struct ql_adapter *qdev = netdev_priv(netdev); | ||
648 | return qdev->rx_csum; | ||
649 | } | ||
650 | |||
651 | static int ql_set_rx_csum(struct net_device *netdev, uint32_t data) | ||
652 | { | ||
653 | struct ql_adapter *qdev = netdev_priv(netdev); | ||
654 | qdev->rx_csum = data; | ||
655 | return 0; | ||
656 | } | ||
657 | |||
658 | static int ql_set_tso(struct net_device *ndev, uint32_t data) | ||
659 | { | ||
660 | |||
661 | if (data) { | ||
662 | ndev->features |= NETIF_F_TSO; | ||
663 | ndev->features |= NETIF_F_TSO6; | ||
664 | } else { | ||
665 | ndev->features &= ~NETIF_F_TSO; | ||
666 | ndev->features &= ~NETIF_F_TSO6; | ||
667 | } | ||
668 | return 0; | ||
669 | } | ||
670 | |||
671 | static u32 ql_get_msglevel(struct net_device *ndev) | 658 | static u32 ql_get_msglevel(struct net_device *ndev) |
672 | { | 659 | { |
673 | struct ql_adapter *qdev = netdev_priv(ndev); | 660 | struct ql_adapter *qdev = netdev_priv(ndev); |
@@ -690,18 +677,10 @@ const struct ethtool_ops qlge_ethtool_ops = { | |||
690 | .get_msglevel = ql_get_msglevel, | 677 | .get_msglevel = ql_get_msglevel, |
691 | .set_msglevel = ql_set_msglevel, | 678 | .set_msglevel = ql_set_msglevel, |
692 | .get_link = ethtool_op_get_link, | 679 | .get_link = ethtool_op_get_link, |
693 | .phys_id = ql_phys_id, | 680 | .set_phys_id = ql_set_phys_id, |
694 | .self_test = ql_self_test, | 681 | .self_test = ql_self_test, |
695 | .get_pauseparam = ql_get_pauseparam, | 682 | .get_pauseparam = ql_get_pauseparam, |
696 | .set_pauseparam = ql_set_pauseparam, | 683 | .set_pauseparam = ql_set_pauseparam, |
697 | .get_rx_csum = ql_get_rx_csum, | ||
698 | .set_rx_csum = ql_set_rx_csum, | ||
699 | .get_tx_csum = ethtool_op_get_tx_csum, | ||
700 | .set_tx_csum = ethtool_op_set_tx_csum, | ||
701 | .get_sg = ethtool_op_get_sg, | ||
702 | .set_sg = ethtool_op_set_sg, | ||
703 | .get_tso = ethtool_op_get_tso, | ||
704 | .set_tso = ql_set_tso, | ||
705 | .get_coalesce = ql_get_coalesce, | 684 | .get_coalesce = ql_get_coalesce, |
706 | .set_coalesce = ql_set_coalesce, | 685 | .set_coalesce = ql_set_coalesce, |
707 | .get_sset_count = ql_get_sset_count, | 686 | .get_sset_count = ql_get_sset_count, |