/* * Copyright (c) 2013 Johannes Berg <[email protected]> * * This file is free software: you may copy, redistribute and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 2 of the License, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * This file incorporates work covered by the following copyright and * permission notice: * * Copyright (c) 2012 Qualcomm Atheros, Inc. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <linux/pci.h> #include <linux/ip.h> #include <linux/tcp.h> #include <linux/netdevice.h> #include <linux/etherdevice.h> #include <linux/ethtool.h> #include <linux/mdio.h> #include <linux/interrupt.h> #include <asm/byteorder.h> #include "alx.h" #include "reg.h" #include "hw.h" /* The order of these strings must match the order of the fields in * struct alx_hw_stats * See hw.h */ static const char alx_gstrings_stats[][ETH_GSTRING_LEN] = …; #define ALX_NUM_STATS … static u32 alx_get_supported_speeds(struct alx_hw *hw) { … } static int alx_get_link_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *cmd) { … } static int alx_set_link_ksettings(struct net_device *netdev, const struct ethtool_link_ksettings *cmd) { … } static void alx_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause) { … } static int alx_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause) { … } static u32 alx_get_msglevel(struct net_device *netdev) { … } static void alx_set_msglevel(struct net_device *netdev, u32 data) { … } static void alx_get_ethtool_stats(struct net_device *netdev, struct ethtool_stats *estats, u64 *data) { … } static void alx_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) { … } static int alx_get_sset_count(struct net_device *netdev, int sset) { … } const struct ethtool_ops alx_ethtool_ops = …;