NetXen: Updates, removal of unsupported features and minor bug fixes.

Signed-off-by: Mithlesh Thukral <mithlesh@netxen.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Linsys Contractor Mithlesh Thukral and committed by Jeff Garzik 0c25cfe1 d518725f

+36 -123
+3 -1
drivers/net/netxen/netxen_nic.h
··· 72 72 #define FLASH_SECTOR_SIZE (64 * 1024) 73 73 #define FLASH_TOTAL_SIZE (NUM_FLASH_SECTORS * FLASH_SECTOR_SIZE) 74 74 75 + #define PHAN_VENDOR_ID 0x4040 76 + 75 77 #define RCV_DESC_RINGSIZE \ 76 78 (sizeof(struct rcv_desc) * adapter->max_rx_desc_count) 77 79 #define STATUS_DESC_RINGSIZE \ ··· 84 82 (sizeof(struct netxen_cmd_buffer) * adapter->max_tx_desc_count) 85 83 #define RCV_BUFFSIZE \ 86 84 (sizeof(struct netxen_rx_buffer) * rcv_desc->max_rx_desc_count) 87 - #define find_diff_among(a,b,range) ((a)<(b)?((b)-(a)):((b)+(range)-(a))) 85 + #define find_diff_among(a,b,range) ((a)<=(b)?((b)-(a)):((b)+(range)-(a))) 88 86 89 87 #define NETXEN_NETDEV_STATUS 0x1 90 88 #define NETXEN_RCV_PRODUCER_OFFSET 0
+28 -120
drivers/net/netxen/netxen_nic_ethtool.c
··· 82 82 #define NETXEN_NIC_STATS_LEN ARRAY_SIZE(netxen_nic_gstrings_stats) 83 83 84 84 static const char netxen_nic_gstrings_test[][ETH_GSTRING_LEN] = { 85 - "Register_Test_offline", "EEPROM_Test_offline", 86 - "Interrupt_Test_offline", "Loopback_Test_offline", 85 + "Register_Test_on_offline", 87 86 "Link_Test_on_offline" 88 87 }; 89 88 ··· 393 394 } 394 395 } 395 396 396 - static void 397 - netxen_nic_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 398 - { 399 - wol->supported = WAKE_UCAST | WAKE_MCAST | WAKE_BCAST | WAKE_MAGIC; 400 - /* options can be added depending upon the mode */ 401 - wol->wolopts = 0; 402 - } 403 - 404 397 static u32 netxen_nic_test_link(struct net_device *dev) 405 398 { 406 399 struct netxen_port *port = netdev_priv(dev); 407 400 struct netxen_adapter *adapter = port->adapter; 408 401 __u32 status; 402 + int val; 409 403 410 404 /* read which mode */ 411 405 if (adapter->ahw.board_type == NETXEN_NIC_GBE) { ··· 407 415 NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, 408 416 &status) != 0) 409 417 return -EIO; 410 - else 411 - return (netxen_get_phy_link(status)); 418 + else { 419 + val = netxen_get_phy_link(status); 420 + return !val; 421 + } 412 422 } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { 413 - int val = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_XG_STATE)); 414 - return val == XG_LINK_UP; 423 + val = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_XG_STATE)); 424 + return (val == XG_LINK_UP) ? 0 : 1; 415 425 } 416 426 return -EIO; 417 427 } ··· 600 606 601 607 static int netxen_nic_reg_test(struct net_device *dev) 602 608 { 603 - struct netxen_port *port = netdev_priv(dev); 604 - struct netxen_adapter *adapter = port->adapter; 605 - u32 data_read, data_written, save; 606 - __u32 mode; 609 + struct netxen_adapter *adapter = netdev_priv(dev); 610 + u32 data_read, data_written; 607 611 608 - /* 609 - * first test the "Read Only" registers by writing which mode 610 - */ 611 - netxen_nic_read_w0(adapter, NETXEN_NIU_MODE, &mode); 612 - if (netxen_get_niu_enable_ge(mode)) { /* GB Mode */ 613 - netxen_nic_read_w0(adapter, 614 - NETXEN_NIU_GB_MII_MGMT_STATUS(port->portnum), 615 - &data_read); 616 - 617 - save = data_read; 618 - if (data_read) 619 - data_written = data_read & NETXEN_NIC_INVALID_DATA; 620 - else 621 - data_written = NETXEN_NIC_INVALID_DATA; 622 - netxen_nic_write_w0(adapter, 623 - NETXEN_NIU_GB_MII_MGMT_STATUS(port-> 624 - portnum), 625 - data_written); 626 - netxen_nic_read_w0(adapter, 627 - NETXEN_NIU_GB_MII_MGMT_STATUS(port->portnum), 628 - &data_read); 629 - 630 - if (data_written == data_read) { 631 - netxen_nic_write_w0(adapter, 632 - NETXEN_NIU_GB_MII_MGMT_STATUS(port-> 633 - portnum), 634 - save); 635 - 636 - return 0; 637 - } 638 - 639 - /* netxen_niu_gb_mii_mgmt_indicators is read only */ 640 - netxen_nic_read_w0(adapter, 641 - NETXEN_NIU_GB_MII_MGMT_INDICATE(port-> 642 - portnum), 643 - &data_read); 644 - 645 - save = data_read; 646 - if (data_read) 647 - data_written = data_read & NETXEN_NIC_INVALID_DATA; 648 - else 649 - data_written = NETXEN_NIC_INVALID_DATA; 650 - netxen_nic_write_w0(adapter, 651 - NETXEN_NIU_GB_MII_MGMT_INDICATE(port-> 652 - portnum), 653 - data_written); 654 - 655 - netxen_nic_read_w0(adapter, 656 - NETXEN_NIU_GB_MII_MGMT_INDICATE(port-> 657 - portnum), 658 - &data_read); 659 - 660 - if (data_written == data_read) { 661 - netxen_nic_write_w0(adapter, 662 - NETXEN_NIU_GB_MII_MGMT_INDICATE 663 - (port->portnum), save); 664 - return 0; 665 - } 666 - 667 - /* netxen_niu_gb_interface_status is read only */ 668 - netxen_nic_read_w0(adapter, 669 - NETXEN_NIU_GB_INTERFACE_STATUS(port-> 670 - portnum), 671 - &data_read); 672 - 673 - save = data_read; 674 - if (data_read) 675 - data_written = data_read & NETXEN_NIC_INVALID_DATA; 676 - else 677 - data_written = NETXEN_NIC_INVALID_DATA; 678 - netxen_nic_write_w0(adapter, 679 - NETXEN_NIU_GB_INTERFACE_STATUS(port-> 680 - portnum), 681 - data_written); 682 - 683 - netxen_nic_read_w0(adapter, 684 - NETXEN_NIU_GB_INTERFACE_STATUS(port-> 685 - portnum), 686 - &data_read); 687 - 688 - if (data_written == data_read) { 689 - netxen_nic_write_w0(adapter, 690 - NETXEN_NIU_GB_INTERFACE_STATUS 691 - (port->portnum), save); 692 - 693 - return 0; 694 - } 695 - } /* GB Mode */ 612 + netxen_nic_read_w0(adapter, NETXEN_PCIX_PH_REG(0), &data_read); 613 + if ((data_read & 0xffff) != PHAN_VENDOR_ID) 696 614 return 1; 615 + 616 + data_written = (u32)0xa5a5a5a5; 617 + 618 + netxen_nic_reg_write(adapter, CRB_SCRATCHPAD_TEST, data_written); 619 + data_read = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_SCRATCHPAD_TEST)); 620 + if (data_written != data_read) 621 + return 1; 622 + 623 + return 0; 697 624 } 698 625 699 626 static int netxen_nic_diag_test_count(struct net_device *dev) ··· 628 713 { 629 714 if (eth_test->flags == ETH_TEST_FL_OFFLINE) { /* offline tests */ 630 715 /* link test */ 631 - if (!(data[4] = (u64) netxen_nic_test_link(dev))) 716 + if ((data[1] = (u64) netxen_nic_test_link(dev))) 632 717 eth_test->flags |= ETH_TEST_FL_FAILED; 633 - 634 - if (netif_running(dev)) 635 - dev->stop(dev); 636 718 637 719 /* register tests */ 638 - if (!(data[0] = netxen_nic_reg_test(dev))) 720 + if ((data[0] = netxen_nic_reg_test(dev))) 639 721 eth_test->flags |= ETH_TEST_FL_FAILED; 640 - /* other tests pass as of now */ 641 - data[1] = data[2] = data[3] = 1; 642 - if (netif_running(dev)) 643 - dev->open(dev); 644 722 } else { /* online tests */ 645 - /* link test */ 646 - if (!(data[4] = (u64) netxen_nic_test_link(dev))) 723 + /* register tests */ 724 + if((data[0] = netxen_nic_reg_test(dev))) 647 725 eth_test->flags |= ETH_TEST_FL_FAILED; 648 726 649 - /* other tests pass by default */ 650 - data[0] = data[1] = data[2] = data[3] = 1; 727 + /* link test */ 728 + if ((data[1] = (u64) netxen_nic_test_link(dev))) 729 + eth_test->flags |= ETH_TEST_FL_FAILED; 651 730 } 652 731 } 653 732 ··· 692 783 .get_drvinfo = netxen_nic_get_drvinfo, 693 784 .get_regs_len = netxen_nic_get_regs_len, 694 785 .get_regs = netxen_nic_get_regs, 695 - .get_wol = netxen_nic_get_wol, 696 786 .get_link = ethtool_op_get_link, 697 787 .get_eeprom_len = netxen_nic_get_eeprom_len, 698 788 .get_eeprom = netxen_nic_get_eeprom,
+2 -2
drivers/net/netxen/netxen_nic_main.c
··· 42 42 #include <linux/dma-mapping.h> 43 43 #include <linux/vmalloc.h> 44 44 45 - #define PHAN_VENDOR_ID 0x4040 46 - 47 45 MODULE_DESCRIPTION("NetXen Multi port (1/10) Gigabit Network Driver"); 48 46 MODULE_LICENSE("GPL"); 49 47 MODULE_VERSION(NETXEN_NIC_LINUX_VERSIONID); ··· 376 378 netdev->change_mtu = netxen_nic_change_mtu; 377 379 netdev->tx_timeout = netxen_tx_timeout; 378 380 netdev->watchdog_timeo = HZ; 381 + 382 + netxen_nic_change_mtu(netdev, netdev->mtu); 379 383 380 384 SET_ETHTOOL_OPS(netdev, &netxen_nic_ethtool_ops); 381 385 netdev->poll = netxen_nic_poll;
+3
drivers/net/netxen/netxen_nic_phan_reg.h
··· 102 102 #define CRB_CMD_CONSUMER_OFFSET_1 NETXEN_NIC_REG(0x1b0) 103 103 #define CRB_TEMP_STATE NETXEN_NIC_REG(0x1b4) 104 104 105 + /* used for ethtool tests */ 106 + #define CRB_SCRATCHPAD_TEST NETXEN_NIC_REG(0x280) 107 + 105 108 /* 106 109 * CrbPortPhanCntrHi/Lo is used to pass the address of HostPhantomIndex address 107 110 * which can be read by the Phantom host to get producer/consumer indexes from