Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.16 145 lines 3.8 kB view raw
1/* 2 * Network device driver for Cell Processor-Based Blade 3 * 4 * (C) Copyright IBM Corp. 2005 5 * 6 * Authors : Utz Bacher <utz.bacher@de.ibm.com> 7 * Jens Osterkamp <Jens.Osterkamp@de.ibm.com> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2, or (at your option) 12 * any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 */ 23 24#include <linux/netdevice.h> 25#include <linux/ethtool.h> 26#include <linux/pci.h> 27 28#include "spider_net.h" 29 30static int 31spider_net_ethtool_get_settings(struct net_device *netdev, 32 struct ethtool_cmd *cmd) 33{ 34 struct spider_net_card *card; 35 card = netdev_priv(netdev); 36 37 cmd->supported = (SUPPORTED_1000baseT_Full | 38 SUPPORTED_FIBRE); 39 cmd->advertising = (ADVERTISED_1000baseT_Full | 40 ADVERTISED_FIBRE); 41 cmd->port = PORT_FIBRE; 42 cmd->speed = card->phy.speed; 43 cmd->duplex = DUPLEX_FULL; 44 45 return 0; 46} 47 48static void 49spider_net_ethtool_get_drvinfo(struct net_device *netdev, 50 struct ethtool_drvinfo *drvinfo) 51{ 52 struct spider_net_card *card; 53 card = netdev_priv(netdev); 54 55 /* clear and fill out info */ 56 memset(drvinfo, 0, sizeof(struct ethtool_drvinfo)); 57 strncpy(drvinfo->driver, spider_net_driver_name, 32); 58 strncpy(drvinfo->version, "0.1", 32); 59 strcpy(drvinfo->fw_version, "no information"); 60 strncpy(drvinfo->bus_info, pci_name(card->pdev), 32); 61} 62 63static void 64spider_net_ethtool_get_wol(struct net_device *netdev, 65 struct ethtool_wolinfo *wolinfo) 66{ 67 /* no support for wol */ 68 wolinfo->supported = 0; 69 wolinfo->wolopts = 0; 70} 71 72static u32 73spider_net_ethtool_get_msglevel(struct net_device *netdev) 74{ 75 struct spider_net_card *card; 76 card = netdev_priv(netdev); 77 return card->msg_enable; 78} 79 80static void 81spider_net_ethtool_set_msglevel(struct net_device *netdev, 82 u32 level) 83{ 84 struct spider_net_card *card; 85 card = netdev_priv(netdev); 86 card->msg_enable = level; 87} 88 89static int 90spider_net_ethtool_nway_reset(struct net_device *netdev) 91{ 92 if (netif_running(netdev)) { 93 spider_net_stop(netdev); 94 spider_net_open(netdev); 95 } 96 return 0; 97} 98 99static u32 100spider_net_ethtool_get_rx_csum(struct net_device *netdev) 101{ 102 struct spider_net_card *card = netdev->priv; 103 104 return card->options.rx_csum; 105} 106 107static int 108spider_net_ethtool_set_rx_csum(struct net_device *netdev, u32 n) 109{ 110 struct spider_net_card *card = netdev->priv; 111 112 card->options.rx_csum = n; 113 return 0; 114} 115 116static uint32_t 117spider_net_ethtool_get_tx_csum(struct net_device *netdev) 118{ 119 return (netdev->features & NETIF_F_HW_CSUM) != 0; 120} 121 122static int 123spider_net_ethtool_set_tx_csum(struct net_device *netdev, uint32_t data) 124{ 125 if (data) 126 netdev->features |= NETIF_F_HW_CSUM; 127 else 128 netdev->features &= ~NETIF_F_HW_CSUM; 129 130 return 0; 131} 132 133struct ethtool_ops spider_net_ethtool_ops = { 134 .get_settings = spider_net_ethtool_get_settings, 135 .get_drvinfo = spider_net_ethtool_get_drvinfo, 136 .get_wol = spider_net_ethtool_get_wol, 137 .get_msglevel = spider_net_ethtool_get_msglevel, 138 .set_msglevel = spider_net_ethtool_set_msglevel, 139 .nway_reset = spider_net_ethtool_nway_reset, 140 .get_rx_csum = spider_net_ethtool_get_rx_csum, 141 .set_rx_csum = spider_net_ethtool_set_rx_csum, 142 .get_tx_csum = spider_net_ethtool_get_tx_csum, 143 .set_tx_csum = spider_net_ethtool_set_tx_csum, 144}; 145