26 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
29 #include <linux/kernel.h>
30 #include <linux/module.h>
32 #include <linux/netdevice.h>
34 #include <linux/ethtool.h>
35 #include <linux/pci.h>
36 #include <linux/if_vlan.h>
42 #include <linux/sched.h>
44 #include <linux/mii.h>
45 #include <linux/slab.h>
47 #include <linux/prefetch.h>
52 #define DRV_NAME "skge"
53 #define DRV_VERSION "1.14"
55 #define DEFAULT_TX_RING_SIZE 128
56 #define DEFAULT_RX_RING_SIZE 512
57 #define MAX_TX_RING_SIZE 1024
58 #define TX_LOW_WATER (MAX_SKB_FRAGS + 1)
59 #define MAX_RX_RING_SIZE 4096
60 #define RX_COPY_THRESHOLD 128
61 #define RX_BUF_SIZE 1536
62 #define PHY_RETRIES 1000
63 #define ETH_JUMBO_MTU 9000
64 #define TX_WATCHDOG (5 * HZ)
65 #define NAPI_WEIGHT 64
69 #define SKGE_EEPROM_MAGIC 0x9933aabb
81 static int debug = -1;
88 #ifdef CONFIG_SKGE_GENESIS
106 static void skge_phy_reset(
struct skge_port *skge);
114 static void genesis_link_up(
struct skge_port *skge);
119 static const int txqaddr[] = {
Q_XA1,
Q_XA2 };
120 static const int rxqaddr[] = {
Q_R1,
Q_R2 };
126 static inline bool is_genesis(
const struct skge_hw *
hw)
128 #ifdef CONFIG_SKGE_GENESIS
148 const struct skge_port *skge = netdev_priv(dev);
171 static void skge_wol_init(
struct skge_port *skge)
247 struct skge_port *skge = netdev_priv(dev);
255 struct skge_port *skge = netdev_priv(dev);
258 if ((wol->
wolopts & ~wol_supported(hw)) ||
259 !device_can_wakeup(&hw->
pdev->dev))
272 static u32 skge_supported_modes(
const struct skge_hw *hw)
303 static int skge_get_settings(
struct net_device *dev,
306 struct skge_port *skge = netdev_priv(dev);
310 ecmd->
supported = skge_supported_modes(hw);
320 ethtool_cmd_speed_set(ecmd, skge->
speed);
327 struct skge_port *skge = netdev_priv(dev);
329 u32 supported = skge_supported_modes(hw);
338 u32 speed = ethtool_cmd_speed(ecmd);
370 if ((setting & supported) == 0)
380 if (netif_running(dev)) {
392 static void skge_get_drvinfo(
struct net_device *dev,
395 struct skge_port *skge = netdev_priv(dev);
403 static const struct skge_stat {
434 static int skge_get_sset_count(
struct net_device *dev,
int sset)
444 static void skge_get_ethtool_stats(
struct net_device *dev,
447 struct skge_port *skge = netdev_priv(dev);
449 if (is_genesis(skge->
hw))
450 genesis_get_stats(skge, data);
452 yukon_get_stats(skge, data);
461 struct skge_port *skge = netdev_priv(dev);
464 if (is_genesis(skge->
hw))
465 genesis_get_stats(skge, data);
467 yukon_get_stats(skge, data);
469 dev->
stats.tx_bytes = data[0];
470 dev->
stats.rx_bytes = data[1];
471 dev->
stats.tx_packets = data[2] + data[4] + data[6];
472 dev->
stats.rx_packets = data[3] + data[5] + data[7];
473 dev->
stats.multicast = data[3] + data[5];
474 dev->
stats.collisions = data[10];
475 dev->
stats.tx_aborted_errors = data[12];
480 static void skge_get_strings(
struct net_device *dev,
u32 stringset,
u8 *data)
488 skge_stats[i].
name, ETH_GSTRING_LEN);
493 static void skge_get_ring_param(
struct net_device *dev,
496 struct skge_port *skge = netdev_priv(dev);
505 static int skge_set_ring_param(
struct net_device *dev,
508 struct skge_port *skge = netdev_priv(dev);
518 if (netif_running(dev)) {
530 struct skge_port *skge = netdev_priv(netdev);
536 struct skge_port *skge = netdev_priv(netdev);
540 static int skge_nway_reset(
struct net_device *dev)
542 struct skge_port *skge = netdev_priv(dev);
547 skge_phy_reset(skge);
551 static void skge_get_pauseparam(
struct net_device *dev,
554 struct skge_port *skge = netdev_priv(dev);
564 static int skge_set_pauseparam(
struct net_device *dev,
567 struct skge_port *skge = netdev_priv(dev);
571 skge_get_pauseparam(dev, &old);
573 if (ecmd->
autoneg != old.autoneg)
586 if (netif_running(dev)) {
599 static inline u32 hwkhz(
const struct skge_hw *hw)
601 return is_genesis(hw) ? 53125 : 78125;
607 return (ticks * 1000) / hwkhz(hw);
611 static inline u32 skge_usecs2clk(
const struct skge_hw *hw,
u32 usec)
613 return hwkhz(hw) * usec / 1000;
616 static int skge_get_coalesce(
struct net_device *dev,
619 struct skge_port *skge = netdev_priv(dev);
621 int port = skge->
port;
630 if (msk & rxirqmask[port])
632 if (msk & txirqmask[port])
640 static int skge_set_coalesce(
struct net_device *dev,
643 struct skge_port *skge = netdev_priv(dev);
645 int port = skge->
port;
650 msk &= ~rxirqmask[
port];
655 msk |= rxirqmask[
port];
660 msk &= ~txirqmask[
port];
665 msk |= txirqmask[
port];
673 skge_write32(hw,
B2_IRQM_INI, skge_usecs2clk(hw, delay));
683 int port = skge->
port;
686 if (is_genesis(hw)) {
760 static int skge_set_phys_id(
struct net_device *dev,
763 struct skge_port *skge = netdev_priv(dev);
785 static int skge_get_eeprom_len(
struct net_device *dev)
787 struct skge_port *skge = netdev_priv(dev);
798 pci_write_config_word(pdev, cap +
PCI_VPD_ADDR, offset);
801 pci_read_config_word(pdev, cap +
PCI_VPD_ADDR, &offset);
808 static void skge_vpd_write(
struct pci_dev *pdev,
int cap,
u16 offset,
u32 val)
815 pci_read_config_word(pdev, cap +
PCI_VPD_ADDR, &offset);
822 struct skge_port *skge = netdev_priv(dev);
834 u32 val = skge_vpd_read(pdev, cap, offset);
835 int n =
min_t(
int, length,
sizeof(val));
848 struct skge_port *skge = netdev_priv(dev);
851 int length = eeprom->
len;
862 int n =
min_t(
int, length,
sizeof(val));
865 val = skge_vpd_read(pdev, cap, offset);
868 skge_vpd_write(pdev, cap, offset, val);
877 static const struct ethtool_ops skge_ethtool_ops = {
878 .get_settings = skge_get_settings,
879 .set_settings = skge_set_settings,
880 .get_drvinfo = skge_get_drvinfo,
881 .get_regs_len = skge_get_regs_len,
882 .get_regs = skge_get_regs,
883 .get_wol = skge_get_wol,
884 .set_wol = skge_set_wol,
885 .get_msglevel = skge_get_msglevel,
886 .set_msglevel = skge_set_msglevel,
887 .nway_reset = skge_nway_reset,
889 .get_eeprom_len = skge_get_eeprom_len,
890 .get_eeprom = skge_get_eeprom,
891 .set_eeprom = skge_set_eeprom,
892 .get_ringparam = skge_get_ring_param,
893 .set_ringparam = skge_set_ring_param,
894 .get_pauseparam = skge_get_pauseparam,
895 .set_pauseparam = skge_set_pauseparam,
896 .get_coalesce = skge_get_coalesce,
897 .set_coalesce = skge_set_coalesce,
898 .get_strings = skge_get_strings,
899 .set_phys_id = skge_set_phys_id,
900 .get_sset_count = skge_get_sset_count,
901 .get_ethtool_stats = skge_get_ethtool_stats,
918 for (i = 0, e = ring->
start, d = vaddr; i < ring->
count; i++, e++, d++) {
920 if (i == ring->
count - 1) {
940 map = pci_map_single(skge->
hw->pdev, skb->
data, bufsize,
976 static void skge_rx_clean(
struct skge_port *skge)
987 pci_unmap_single(hw->
pdev,
991 dev_kfree_skb(e->
skb);
1001 static int skge_rx_fill(
struct net_device *dev)
1003 struct skge_port *skge = netdev_priv(dev);
1004 struct skge_ring *ring = &skge->rx_ring;
1036 return "indeterminated";
1041 static void skge_link_up(
struct skge_port *skge)
1047 netif_wake_queue(skge->
netdev);
1050 "Link is up at %d Mbps, %s duplex, flow control %s\n",
1056 static void skge_link_down(
struct skge_port *skge)
1060 netif_stop_queue(skge->
netdev);
1065 static void xm_link_down(
struct skge_hw *hw,
int port)
1068 struct skge_port *skge = netdev_priv(dev);
1072 if (netif_carrier_ok(dev))
1073 skge_link_down(skge);
1099 static u16 xm_phy_read(
struct skge_hw *hw,
int port,
u16 reg)
1102 if (__xm_phy_read(hw, port, reg, &v))
1103 pr_warning(
"%s: phy read timed out\n", hw->
dev[port]->name);
1107 static int xm_phy_write(
struct skge_hw *hw,
int port,
u16 reg,
u16 val)
1129 static void genesis_init(
struct skge_hw *hw)
1157 static void genesis_reset(
struct skge_hw *hw,
int port)
1159 static const u8 zero[8] = { 0 };
1167 xm_write32(hw, port,
XM_MODE, 0);
1175 xm_outhash(hw, port,
XM_HSM, zero);
1178 reg = xm_read32(hw, port,
XM_MODE);
1184 static const u16 phy_pause_map[] = {
1192 static const u16 fiber_pause_map[] = {
1201 static void bcom_check_link(
struct skge_hw *hw,
int port)
1204 struct skge_port *skge = netdev_priv(dev);
1212 xm_link_down(hw, port);
1224 netdev_notice(dev,
"remote fault\n");
1239 netdev_notice(dev,
"duplex mismatch\n");
1245 case PHY_B_AS_PAUSE_MSK:
1260 if (!netif_carrier_ok(dev))
1261 genesis_link_up(skge);
1267 static void bcom_phy_init(
struct skge_port *skge)
1270 int port = skge->
port;
1275 static const struct {
1279 { 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1104 },
1280 { 0x17, 0x0013 }, { 0x15, 0x0404 }, { 0x17, 0x8006 },
1281 { 0x15, 0x0132 }, { 0x17, 0x8006 }, { 0x15, 0x0232 },
1282 { 0x17, 0x800D }, { 0x15, 0x000F }, { 0x18, 0x0420 },
1284 { 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1204 },
1285 { 0x17, 0x0013 }, { 0x15, 0x0A04 }, { 0x18, 0x0420 },
1303 xm_phy_write(hw, port,
1304 C0hack[i].reg, C0hack[i].val);
1313 xm_phy_write(hw, port,
1314 A1hack[i].reg, A1hack[i].val);
1373 static void xm_phy_init(
struct skge_port *skge)
1376 int port = skge->
port;
1407 static int xm_check_link(
struct net_device *dev)
1409 struct skge_port *skge = netdev_priv(dev);
1411 int port = skge->
port;
1418 if ((status & PHY_ST_LSYNC) == 0) {
1419 xm_link_down(hw, port);
1426 if (!(status & PHY_ST_AN_OVER))
1430 if (lpa & PHY_B_AN_RF) {
1431 netdev_notice(dev,
"remote fault\n");
1446 netdev_notice(dev,
"duplex mismatch\n");
1469 if (!netif_carrier_ok(dev))
1470 genesis_link_up(skge);
1480 static void xm_link_timer(
unsigned long arg)
1485 int port = skge->
port;
1487 unsigned long flags;
1489 if (!netif_running(dev))
1498 for (i = 0; i < 3; i++) {
1504 if (xm_check_link(dev)) {
1507 xm_write16(hw, port,
XM_IMSK, msk);
1514 spin_unlock_irqrestore(&hw->
phy_lock, flags);
1517 static void genesis_mac_init(
struct skge_hw *hw,
int port)
1520 struct skge_port *skge = netdev_priv(dev);
1524 static const u8 zero[6] = { 0 };
1526 for (i = 0; i < 10; i++) {
1534 netdev_warn(dev,
"genesis reset failed\n");
1565 bcom_phy_init(skge);
1566 bcom_check_link(hw, port);
1573 for (i = 1; i < 16; i++)
1574 xm_outaddr(hw, port,
XM_EXM(i), zero);
1605 if (hw->
ports > 1 && jumbo)
1675 static void genesis_stop(
struct skge_port *skge)
1678 int port = skge->
port;
1687 genesis_reset(hw, port);
1699 }
while (--retries > 0);
1723 static void genesis_get_stats(
struct skge_port *skge,
u64 *data)
1726 int port = skge->
port;
1730 xm_write16(hw, port,
1748 data[i] = xm_read32(hw, port, skge_stats[i].xmac_offset);
1751 static void genesis_mac_intr(
struct skge_hw *hw,
int port)
1754 struct skge_port *skge = netdev_priv(dev);
1758 "mac interrupt status 0x%x\n", status);
1761 xm_link_down(hw, port);
1767 ++dev->
stats.tx_fifo_errors;
1771 static void genesis_link_up(
struct skge_port *skge)
1774 int port = skge->
port;
1794 mode = xm_read32(hw, port,
XM_MODE);
1823 xm_write32(hw, port,
XM_MODE, mode);
1826 msk = xm_read16(hw, port,
XM_IMSK);
1828 xm_write16(hw, port,
XM_IMSK, msk);
1855 static inline void bcom_phy_intr(
struct skge_port *skge)
1858 int port = skge->
port;
1863 "phy interrupt status 0x%x\n", isrc);
1866 pr_err(
"%s: uncorrectable pair swap error\n",
1867 hw->
dev[port]->name);
1881 bcom_check_link(hw, port);
1885 static int gm_phy_write(
struct skge_hw *hw,
int port,
u16 reg,
u16 val)
1903 static int __gm_phy_read(
struct skge_hw *hw,
int port,
u16 reg,
u16 *val)
1923 static u16 gm_phy_read(
struct skge_hw *hw,
int port,
u16 reg)
1926 if (__gm_phy_read(hw, port, reg, &v))
1932 static void yukon_init(
struct skge_hw *hw,
int port)
1995 switch (skge->
speed) {
2019 static void yukon_reset(
struct skge_hw *hw,
int port)
2033 static int is_yukon_lite_a0(
struct skge_hw *hw)
2041 reg = skge_read32(hw,
B2_FAR);
2042 skge_write8(hw,
B2_FAR + 3, 0xff);
2043 ret = (skge_read8(hw,
B2_FAR + 3) != 0);
2044 skge_write32(hw,
B2_FAR, reg);
2048 static void yukon_mac_init(
struct skge_hw *hw,
int port)
2091 switch (skge->
speed) {
2128 yukon_init(hw, port);
2181 if (is_yukon_lite_a0(hw))
2199 static void yukon_suspend(
struct skge_hw *hw,
int port)
2217 static void yukon_stop(
struct skge_port *skge)
2220 int port = skge->
port;
2223 yukon_reset(hw, port);
2230 yukon_suspend(hw, port);
2237 static void yukon_get_stats(
struct skge_port *skge,
u64 *data)
2240 int port = skge->
port;
2249 data[i] = gma_read32(hw, port,
2250 skge_stats[i].gma_offset);
2253 static void yukon_mac_intr(
struct skge_hw *hw,
int port)
2256 struct skge_port *skge = netdev_priv(dev);
2260 "mac interrupt status 0x%x\n", status);
2263 ++dev->
stats.rx_fifo_errors;
2268 ++dev->
stats.tx_fifo_errors;
2286 static void yukon_link_up(
struct skge_port *skge)
2289 int port = skge->
port;
2307 static void yukon_link_down(
struct skge_port *skge)
2310 int port = skge->
port;
2324 skge_link_down(skge);
2326 yukon_init(hw, port);
2329 static void yukon_phy_intr(
struct skge_port *skge)
2332 int port = skge->
port;
2334 u16 istatus, phystat;
2340 "phy interrupt status 0x%x 0x%x\n", istatus, phystat);
2345 reason =
"remote fault";
2350 reason =
"master/slave fault";
2355 reason =
"speed/duplex";
2361 skge->
speed = yukon_speed(hw, phystat);
2365 case PHY_M_PS_PAUSE_MSK:
2383 yukon_link_up(skge);
2388 skge->
speed = yukon_speed(hw, phystat);
2394 yukon_link_up(skge);
2396 yukon_link_down(skge);
2400 pr_err(
"%s: autonegotiation failed (%s)\n", skge->
netdev->name, reason);
2405 static void skge_phy_reset(
struct skge_port *skge)
2408 int port = skge->
port;
2411 netif_stop_queue(skge->
netdev);
2415 if (is_genesis(hw)) {
2416 genesis_reset(hw, port);
2417 genesis_mac_init(hw, port);
2419 yukon_reset(hw, port);
2420 yukon_init(hw, port);
2424 skge_set_multicast(dev);
2428 static int skge_ioctl(
struct net_device *dev,
struct ifreq *ifr,
int cmd)
2431 struct skge_port *skge = netdev_priv(dev);
2435 if (!netif_running(dev))
2448 err = __xm_phy_read(hw, skge->
port, data->
reg_num & 0x1f, &val);
2450 err = __gm_phy_read(hw, skge->
port, data->
reg_num & 0x1f, &val);
2459 err = xm_phy_write(hw, skge->
port, data->
reg_num & 0x1f,
2462 err = gm_phy_write(hw, skge->
port, data->
reg_num & 0x1f,
2476 end = start + len - 1;
2505 u32 watermark = 0x600;
2513 skge_write32(hw,
Q_ADDR(q,
Q_F), watermark);
2520 struct skge_port *skge = netdev_priv(dev);
2522 int port = skge->
port;
2524 size_t rx_size, tx_size;
2527 if (!is_valid_ether_addr(dev->
dev_addr))
2538 rx_size = skge->rx_ring.count *
sizeof(
struct skge_rx_desc);
2540 skge->
mem_size = tx_size + rx_size;
2548 dev_err(&hw->
pdev->dev,
"pci_alloc_consistent region crosses 4G boundary\n");
2555 err = skge_ring_alloc(&skge->rx_ring, skge->
mem, skge->
dma);
2559 err = skge_rx_fill(dev);
2563 err = skge_ring_alloc(&skge->
tx_ring, skge->
mem + rx_size,
2564 skge->
dma + rx_size);
2568 if (hw->
ports == 1) {
2572 netdev_err(dev,
"Unable to allocate interrupt %d error: %d\n",
2573 hw->
pdev->irq, err);
2582 genesis_mac_init(hw, port);
2584 yukon_mac_init(hw, port);
2591 skge_ramset(hw, rxqaddr[port], ram_addr, chunk);
2592 skge_qset(skge, rxqaddr[port], skge->rx_ring.to_clean);
2595 skge_ramset(hw, txqaddr[port], ram_addr+chunk, chunk);
2596 skge_qset(skge, txqaddr[port], skge->
tx_ring.to_use);
2607 spin_unlock_irq(&hw->
hw_lock);
2609 napi_enable(&skge->
napi);
2611 skge_set_multicast(dev);
2618 skge_rx_clean(skge);
2619 kfree(skge->rx_ring.start);
2628 static void skge_rx_stop(
struct skge_hw *hw,
int port)
2638 struct skge_port *skge = netdev_priv(dev);
2640 int port = skge->
port;
2647 netif_tx_disable(dev);
2652 napi_disable(&skge->
napi);
2659 spin_unlock_irq(&hw->
hw_lock);
2691 skge_rx_stop(hw, port);
2693 if (is_genesis(hw)) {
2703 netif_tx_lock_bh(dev);
2705 netif_tx_unlock_bh(dev);
2707 skge_rx_clean(skge);
2709 kfree(skge->rx_ring.start);
2716 static inline int skge_avail(
const struct skge_ring *ring)
2726 struct skge_port *skge = netdev_priv(dev);
2737 if (
unlikely(skge_avail(&skge->
tx_ring) < skb_shinfo(skb)->nr_frags + 1))
2744 len = skb_headlen(skb);
2753 const int offset = skb_checksum_start_offset(skb);
2770 if (!skb_shinfo(skb)->nr_frags)
2776 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2779 map = skb_frag_dma_map(&hw->
pdev->dev, frag, 0,
2801 netdev_sent_queue(dev, skb->
len);
2806 "tx queued, slot %td, len %d\n",
2814 netif_stop_queue(dev);
2837 static void skge_tx_clean(
struct net_device *dev)
2839 struct skge_port *skge = netdev_priv(dev);
2845 skge_tx_unmap(skge->
hw->pdev, e, td->
control);
2848 dev_kfree_skb(e->
skb);
2852 netdev_reset_queue(dev);
2856 static void skge_tx_timeout(
struct net_device *dev)
2858 struct skge_port *skge = netdev_priv(dev);
2864 netif_wake_queue(dev);
2867 static int skge_change_mtu(
struct net_device *dev,
int new_mtu)
2874 if (!netif_running(dev)) {
2890 static const u8 pause_mc_addr[
ETH_ALEN] = { 0x1, 0x80, 0xc2, 0x0, 0x0, 0x1 };
2892 static void genesis_add_filter(
u8 filter[8],
const u8 *addr)
2898 filter[bit/8] |= 1 << (bit%8);
2901 static void genesis_set_multicast(
struct net_device *dev)
2903 struct skge_port *skge = netdev_priv(dev);
2905 int port = skge->
port;
2910 mode = xm_read32(hw, port,
XM_MODE);
2918 memset(filter, 0xff,
sizeof(filter));
2920 memset(filter, 0,
sizeof(filter));
2924 genesis_add_filter(filter, pause_mc_addr);
2927 genesis_add_filter(filter, ha->addr);
2930 xm_write32(hw, port,
XM_MODE, mode);
2931 xm_outhash(hw, port,
XM_HSM, filter);
2934 static
void yukon_add_filter(
u8 filter[8],
const u8 *addr)
2937 filter[bit/8] |= 1 << (bit%8);
2940 static void yukon_set_multicast(
struct net_device *dev)
2942 struct skge_port *skge = netdev_priv(dev);
2944 int port = skge->
port;
2951 memset(filter, 0,
sizeof(filter));
2959 memset(filter, 0xff,
sizeof(filter));
2966 yukon_add_filter(filter, pause_mc_addr);
2969 yukon_add_filter(filter, ha->addr);
2974 (
u16)filter[0] | ((
u16)filter[1] << 8));
2976 (
u16)filter[2] | ((
u16)filter[3] << 8));
2978 (
u16)filter[4] | ((
u16)filter[5] << 8));
2980 (
u16)filter[6] | ((
u16)filter[7] << 8));
2993 static inline int bad_phy_status(
const struct skge_hw *hw,
u32 status)
3002 static void skge_set_multicast(
struct net_device *dev)
3004 struct skge_port *skge = netdev_priv(dev);
3006 if (is_genesis(skge->
hw))
3007 genesis_set_multicast(dev);
3009 yukon_set_multicast(dev);
3021 struct skge_port *skge = netdev_priv(dev);
3026 "rx slot %td status 0x%x len %d\n",
3027 e - skge->rx_ring.start, status, len);
3035 if (bad_phy_status(skge->
hw, status))
3038 if (phy_length(skge->
hw, status) != len)
3042 skb = netdev_alloc_skb_ip_align(dev, len);
3046 pci_dma_sync_single_for_cpu(skge->
hw->pdev,
3049 skb_copy_from_linear_data(e->
skb, skb->
data, len);
3050 pci_dma_sync_single_for_device(skge->
hw->pdev,
3057 nskb = netdev_alloc_skb_ip_align(dev, skge->
rx_buf_size);
3061 pci_unmap_single(skge->
hw->pdev,
3083 "rx err, slot %td control 0x%x status 0x%x\n",
3084 e - skge->rx_ring.start, control, status);
3086 if (is_genesis(skge->
hw)) {
3088 dev->
stats.rx_length_errors++;
3090 dev->
stats.rx_frame_errors++;
3092 dev->
stats.rx_crc_errors++;
3095 dev->
stats.rx_length_errors++;
3097 dev->
stats.rx_frame_errors++;
3099 dev->
stats.rx_crc_errors++;
3108 static void skge_tx_done(
struct net_device *dev)
3110 struct skge_port *skge = netdev_priv(dev);
3113 unsigned int bytes_compl = 0, pkts_compl = 0;
3123 skge_tx_unmap(skge->
hw->pdev, e, control);
3127 "tx done slot %td\n",
3131 bytes_compl += e->
skb->len;
3133 dev_kfree_skb(e->
skb);
3136 netdev_completed_queue(dev, pkts_compl, bytes_compl);
3142 if (
unlikely(netif_queue_stopped(dev) &&
3145 if (
unlikely(netif_queue_stopped(dev) &&
3147 netif_wake_queue(dev);
3150 netif_tx_unlock(dev);
3159 struct skge_ring *ring = &skge->rx_ring;
3174 if (control & BMU_OWN)
3177 skb = skge_rx_get(dev, e, control, rd->
status, rd->
csum2);
3189 if (work_done < to_do) {
3190 unsigned long flags;
3198 spin_unlock_irqrestore(&hw->
hw_lock, flags);
3207 static void skge_mac_parity(
struct skge_hw *hw,
int port)
3211 ++dev->
stats.tx_heartbeat_errors;
3223 static void skge_mac_intr(
struct skge_hw *hw,
int port)
3226 genesis_mac_intr(hw, port);
3228 yukon_mac_intr(hw, port);
3232 static void skge_error_irq(
struct skge_hw *hw)
3237 if (is_genesis(hw)) {
3250 dev_err(&pdev->
dev,
"Ram read data parity error\n");
3255 dev_err(&pdev->
dev,
"Ram write data parity error\n");
3260 skge_mac_parity(hw, 0);
3263 skge_mac_parity(hw, 1);
3266 dev_err(&pdev->
dev,
"%s: receive queue parity error\n",
3272 dev_err(&pdev->
dev,
"%s: receive queue parity error\n",
3278 u16 pci_status, pci_cmd;
3280 pci_read_config_word(pdev,
PCI_COMMAND, &pci_cmd);
3281 pci_read_config_word(pdev,
PCI_STATUS, &pci_status);
3283 dev_err(&pdev->
dev,
"PCI error cmd=%#x status=%#x\n",
3284 pci_cmd, pci_status);
3291 pci_write_config_word(pdev,
PCI_STATUS, pci_status);
3297 dev_warn(&hw->
pdev->dev,
"unable to clear error (so ignoring them)\n");
3308 static void skge_extirq(
unsigned long arg)
3313 for (port = 0; port < hw->
ports; port++) {
3316 if (netif_running(dev)) {
3317 struct skge_port *skge = netdev_priv(dev);
3320 if (!is_genesis(hw))
3321 yukon_phy_intr(skge);
3323 bcom_phy_intr(skge);
3332 spin_unlock_irq(&hw->
hw_lock);
3344 if (status == 0 || status == ~0)
3357 napi_schedule(&skge->
napi);
3364 ++hw->
dev[0]->stats.rx_over_errors;
3370 skge_mac_intr(hw, 0);
3377 napi_schedule(&skge->
napi);
3381 ++hw->
dev[1]->stats.rx_over_errors;
3389 skge_mac_intr(hw, 1);
3403 #ifdef CONFIG_NET_POLL_CONTROLLER
3404 static void skge_netpoll(
struct net_device *dev)
3406 struct skge_port *skge = netdev_priv(dev);
3409 skge_intr(dev->
irq, skge->
hw);
3414 static int skge_set_mac_address(
struct net_device *dev,
void *p)
3416 struct skge_port *skge = netdev_priv(dev);
3418 unsigned port = skge->
port;
3422 if (!is_valid_ether_addr(addr->
sa_data))
3427 if (!netif_running(dev)) {
3453 static const struct {
3463 static const char *skge_board_name(
const struct skge_hw *hw)
3466 static char buf[16];
3469 if (skge_chips[i].
id == hw->
chip_id)
3470 return skge_chips[
i].name;
3481 static int skge_reset(
struct skge_hw *hw)
3484 u16 ctst, pci_status;
3485 u8 t8, mac_cfg, pmd_type;
3488 ctst = skge_read16(hw,
B0_CTST);
3511 hw->
copper = (pmd_type ==
'T' || pmd_type ==
'1');
3515 #ifdef CONFIG_SKGE_GENESIS
3524 dev_err(&hw->
pdev->dev,
"unsupported phy type 0x%x\n",
3530 dev_err(&hw->
pdev->dev,
"Genesis chip detected but not configured\n");
3544 dev_err(&hw->
pdev->dev,
"unsupported chip type 0x%x\n",
3554 t8 = skge_read8(hw,
B2_E_0);
3555 if (is_genesis(hw)) {
3583 dev_warn(&hw->
pdev->dev,
"stuck hardware sensor bit\n");
3595 for (i = 0; i < hw->
ports; i++) {
3607 for (i = 0; i < hw->
ports; i++)
3632 skge_write32(hw,
B2_IRQM_INI, skge_usecs2clk(hw, 100));
3638 for (i = 0; i < hw->
ports; i++) {
3640 genesis_reset(hw, i);
3649 #ifdef CONFIG_SKGE_DEBUG
3651 static struct dentry *skge_debug;
3653 static int skge_debug_show(
struct seq_file *seq,
void *v)
3656 const struct skge_port *skge = netdev_priv(dev);
3660 if (!netif_running(dev))
3669 seq_printf(seq,
"%#x dma=%#x%08x %#x csum=%#x/%x/%x\n",
3675 for (e = skge->rx_ring.to_clean; ; e = e->
next) {
3681 seq_printf(seq,
"%#x dma=%#x%08x %#x %#x csum=%#x/%x\n",
3696 .open = skge_debug_open,
3713 if (dev->
netdev_ops->ndo_open != &skge_up || !skge_debug)
3716 skge = netdev_priv(dev);
3719 if (skge->debugfs) {
3721 skge_debug, dev->
name);
3725 netdev_info(dev,
"rename failed\n");
3732 if (skge->debugfs) {
3734 skge->debugfs =
NULL;
3742 if (!d || IS_ERR(d))
3743 netdev_info(dev,
"debugfs create failed\n");
3763 if (!ent || IS_ERR(ent)) {
3764 pr_info(
"debugfs create directory failed\n");
3782 #define skge_debug_init()
3783 #define skge_debug_cleanup()
3787 .ndo_open = skge_up,
3788 .ndo_stop = skge_down,
3789 .ndo_start_xmit = skge_xmit_frame,
3790 .ndo_do_ioctl = skge_ioctl,
3791 .ndo_get_stats = skge_get_stats,
3792 .ndo_tx_timeout = skge_tx_timeout,
3793 .ndo_change_mtu = skge_change_mtu,
3795 .ndo_set_rx_mode = skge_set_multicast,
3796 .ndo_set_mac_address = skge_set_mac_address,
3797 #ifdef CONFIG_NET_POLL_CONTROLLER
3798 .ndo_poll_controller = skge_netpoll,
3808 struct net_device *dev = alloc_etherdev(
sizeof(*skge));
3822 skge = netdev_priv(dev);
3838 if (device_can_wakeup(&hw->
pdev->dev)) {
3865 const struct skge_port *skge = netdev_priv(dev);
3870 static int only_32bit_dma;
3877 int err, using_dac = 0;
3881 dev_err(&pdev->
dev,
"cannot enable PCI device\n");
3887 dev_err(&pdev->
dev,
"cannot obtain PCI resources\n");
3888 goto err_out_disable_pdev;
3893 if (!only_32bit_dma && !pci_set_dma_mask(pdev,
DMA_BIT_MASK(64))) {
3895 err = pci_set_consistent_dma_mask(pdev,
DMA_BIT_MASK(64));
3896 }
else if (!(err = pci_set_dma_mask(pdev,
DMA_BIT_MASK(32)))) {
3898 err = pci_set_consistent_dma_mask(pdev,
DMA_BIT_MASK(32));
3902 dev_err(&pdev->
dev,
"no usable DMA configuration\n");
3903 goto err_out_free_regions;
3922 dev_err(&pdev->
dev,
"cannot allocate hardware struct\n");
3923 goto err_out_free_regions;
3934 dev_err(&pdev->
dev,
"cannot map device registers\n");
3935 goto err_out_free_hw;
3938 err = skge_reset(hw);
3940 goto err_out_iounmap;
3942 pr_info(
"%s addr 0x%llx irq %d chip %s rev %d\n",
3945 skge_board_name(hw), hw->
chip_rev);
3947 dev = skge_devinit(hw, 0, using_dac);
3950 goto err_out_led_off;
3954 if (!is_valid_ether_addr(dev->
dev_addr))
3955 dev_warn(&pdev->
dev,
"bad (zero?) ethernet address in rom\n");
3959 dev_err(&pdev->
dev,
"cannot register net device\n");
3960 goto err_out_free_netdev;
3963 skge_show_addr(dev);
3965 if (hw->
ports > 1) {
3966 dev1 = skge_devinit(hw, 1, using_dac);
3969 goto err_out_unregister;
3974 dev_err(&pdev->
dev,
"cannot register second net device\n");
3975 goto err_out_free_dev1;
3981 dev_err(&pdev->
dev,
"cannot assign irq %d\n",
3983 goto err_out_unregister_dev1;
3986 skge_show_addr(dev1);
3988 pci_set_drvdata(pdev, hw);
3992 err_out_unregister_dev1:
3998 err_out_free_netdev:
4006 err_out_free_regions:
4008 err_out_disable_pdev:
4010 pci_set_drvdata(pdev,
NULL);
4017 struct skge_hw *hw = pci_get_drvdata(pdev);
4034 if (hw->
ports > 1) {
4039 spin_unlock_irq(&hw->
hw_lock);
4054 pci_set_drvdata(pdev,
NULL);
4057 #ifdef CONFIG_PM_SLEEP
4058 static int skge_suspend(
struct device *dev)
4061 struct skge_hw *hw = pci_get_drvdata(pdev);
4067 for (i = 0; i < hw->
ports; i++) {
4069 struct skge_port *skge = netdev_priv(dev);
4071 if (netif_running(dev))
4075 skge_wol_init(skge);
4083 static int skge_resume(
struct device *dev)
4086 struct skge_hw *hw = pci_get_drvdata(pdev);
4092 err = skge_reset(hw);
4096 for (i = 0; i < hw->
ports; i++) {
4099 if (netif_running(dev)) {
4103 netdev_err(dev,
"could not up: %d\n", err);
4114 #define SKGE_PM_OPS (&skge_pm_ops)
4118 #define SKGE_PM_OPS NULL
4121 static void skge_shutdown(
struct pci_dev *pdev)
4123 struct skge_hw *hw = pci_get_drvdata(pdev);
4129 for (i = 0; i < hw->
ports; i++) {
4131 struct skge_port *skge = netdev_priv(dev);
4134 skge_wol_init(skge);
4143 .id_table = skge_id_table,
4144 .probe = skge_probe,
4146 .shutdown = skge_shutdown,
4152 .ident =
"Gigabyte nForce boards",
4159 .ident =
"ASUS P5NSLI",
4168 static int __init skge_init_module(
void)
4173 return pci_register_driver(&skge_driver);
4176 static void __exit skge_cleanup_module(
void)