Lines Matching refs:skge

106 static void skge_phy_reset(struct skge_port *skge);
110 static void genesis_get_stats(struct skge_port *skge, u64 *data);
111 static void yukon_get_stats(struct skge_port *skge, u64 *data);
114 static void genesis_link_up(struct skge_port *skge);
148 const struct skge_port *skge = netdev_priv(dev); in skge_get_regs() local
149 const void __iomem *io = skge->hw->regs; in skge_get_regs()
171 static void skge_wol_init(struct skge_port *skge) in skge_wol_init() argument
173 struct skge_hw *hw = skge->hw; in skge_wol_init()
174 int port = skge->port; in skge_wol_init()
223 skge->netdev->dev_addr, ETH_ALEN); in skge_wol_init()
228 if (skge->wol & WAKE_PHY) in skge_wol_init()
233 if (skge->wol & WAKE_MAGIC) in skge_wol_init()
247 struct skge_port *skge = netdev_priv(dev); in skge_get_wol() local
249 wol->supported = wol_supported(skge->hw); in skge_get_wol()
250 wol->wolopts = skge->wol; in skge_get_wol()
255 struct skge_port *skge = netdev_priv(dev); in skge_set_wol() local
256 struct skge_hw *hw = skge->hw; in skge_set_wol()
262 skge->wol = wol->wolopts; in skge_set_wol()
264 device_set_wakeup_enable(&hw->pdev->dev, skge->wol); in skge_set_wol()
306 struct skge_port *skge = netdev_priv(dev); in skge_get_link_ksettings() local
307 struct skge_hw *hw = skge->hw; in skge_get_link_ksettings()
318 advertising = skge->advertising; in skge_get_link_ksettings()
319 cmd->base.autoneg = skge->autoneg; in skge_get_link_ksettings()
320 cmd->base.speed = skge->speed; in skge_get_link_ksettings()
321 cmd->base.duplex = skge->duplex; in skge_get_link_ksettings()
334 struct skge_port *skge = netdev_priv(dev); in skge_set_link_ksettings() local
335 const struct skge_hw *hw = skge->hw; in skge_set_link_ksettings()
345 skge->duplex = -1; in skge_set_link_ksettings()
346 skge->speed = -1; in skge_set_link_ksettings()
384 skge->speed = speed; in skge_set_link_ksettings()
385 skge->duplex = cmd->base.duplex; in skge_set_link_ksettings()
388 skge->autoneg = cmd->base.autoneg; in skge_set_link_ksettings()
389 skge->advertising = advertising; in skge_set_link_ksettings()
406 struct skge_port *skge = netdev_priv(dev); in skge_get_drvinfo() local
410 strlcpy(info->bus_info, pci_name(skge->hw->pdev), in skge_get_drvinfo()
458 struct skge_port *skge = netdev_priv(dev); in skge_get_ethtool_stats() local
460 if (is_genesis(skge->hw)) in skge_get_ethtool_stats()
461 genesis_get_stats(skge, data); in skge_get_ethtool_stats()
463 yukon_get_stats(skge, data); in skge_get_ethtool_stats()
472 struct skge_port *skge = netdev_priv(dev); in skge_get_stats() local
475 if (is_genesis(skge->hw)) in skge_get_stats()
476 genesis_get_stats(skge, data); in skge_get_stats()
478 yukon_get_stats(skge, data); in skge_get_stats()
507 struct skge_port *skge = netdev_priv(dev); in skge_get_ring_param() local
512 p->rx_pending = skge->rx_ring.count; in skge_get_ring_param()
513 p->tx_pending = skge->tx_ring.count; in skge_get_ring_param()
519 struct skge_port *skge = netdev_priv(dev); in skge_set_ring_param() local
526 skge->rx_ring.count = p->rx_pending; in skge_set_ring_param()
527 skge->tx_ring.count = p->tx_pending; in skge_set_ring_param()
541 struct skge_port *skge = netdev_priv(netdev); in skge_get_msglevel() local
542 return skge->msg_enable; in skge_get_msglevel()
547 struct skge_port *skge = netdev_priv(netdev); in skge_set_msglevel() local
548 skge->msg_enable = value; in skge_set_msglevel()
553 struct skge_port *skge = netdev_priv(dev); in skge_nway_reset() local
555 if (skge->autoneg != AUTONEG_ENABLE || !netif_running(dev)) in skge_nway_reset()
558 skge_phy_reset(skge); in skge_nway_reset()
565 struct skge_port *skge = netdev_priv(dev); in skge_get_pauseparam() local
567 ecmd->rx_pause = ((skge->flow_control == FLOW_MODE_SYMMETRIC) || in skge_get_pauseparam()
568 (skge->flow_control == FLOW_MODE_SYM_OR_REM)); in skge_get_pauseparam()
570 (skge->flow_control == FLOW_MODE_LOC_SEND)); in skge_get_pauseparam()
578 struct skge_port *skge = netdev_priv(dev); in skge_set_pauseparam() local
585 skge->flow_control = ecmd->autoneg ? FLOW_MODE_NONE : FLOW_MODE_SYMMETRIC; in skge_set_pauseparam()
588 skge->flow_control = FLOW_MODE_SYMMETRIC; in skge_set_pauseparam()
590 skge->flow_control = FLOW_MODE_SYM_OR_REM; in skge_set_pauseparam()
592 skge->flow_control = FLOW_MODE_LOC_SEND; in skge_set_pauseparam()
594 skge->flow_control = FLOW_MODE_NONE; in skge_set_pauseparam()
630 struct skge_port *skge = netdev_priv(dev); in skge_get_coalesce() local
631 struct skge_hw *hw = skge->hw; in skge_get_coalesce()
632 int port = skge->port; in skge_get_coalesce()
654 struct skge_port *skge = netdev_priv(dev); in skge_set_coalesce() local
655 struct skge_hw *hw = skge->hw; in skge_set_coalesce()
656 int port = skge->port; in skge_set_coalesce()
691 static void skge_led(struct skge_port *skge, enum led_mode mode) in skge_led() argument
693 struct skge_hw *hw = skge->hw; in skge_led()
694 int port = skge->port; in skge_led()
754 (skge->speed == SPEED_100 ? in skge_led()
774 struct skge_port *skge = netdev_priv(dev); in skge_set_phys_id() local
781 skge_led(skge, LED_MODE_TST); in skge_set_phys_id()
785 skge_led(skge, LED_MODE_OFF); in skge_set_phys_id()
790 skge_led(skge, netif_running(dev) ? LED_MODE_ON : LED_MODE_OFF); in skge_set_phys_id()
798 struct skge_port *skge = netdev_priv(dev); in skge_get_eeprom_len() local
801 pci_read_config_dword(skge->hw->pdev, PCI_DEV_REG2, &reg2); in skge_get_eeprom_len()
833 struct skge_port *skge = netdev_priv(dev); in skge_get_eeprom() local
834 struct pci_dev *pdev = skge->hw->pdev; in skge_get_eeprom()
859 struct skge_port *skge = netdev_priv(dev); in skge_set_eeprom() local
860 struct pci_dev *pdev = skge->hw->pdev; in skge_set_eeprom()
945 static int skge_rx_setup(struct skge_port *skge, struct skge_element *e, in skge_rx_setup() argument
951 map = pci_map_single(skge->hw->pdev, skb->data, bufsize, in skge_rx_setup()
954 if (pci_dma_mapping_error(skge->hw->pdev, map)) in skge_rx_setup()
991 static void skge_rx_clean(struct skge_port *skge) in skge_rx_clean() argument
993 struct skge_hw *hw = skge->hw; in skge_rx_clean()
994 struct skge_ring *ring = &skge->rx_ring; in skge_rx_clean()
1018 struct skge_port *skge = netdev_priv(dev); in skge_rx_fill() local
1019 struct skge_ring *ring = &skge->rx_ring; in skge_rx_fill()
1026 skb = __netdev_alloc_skb(dev, skge->rx_buf_size + NET_IP_ALIGN, in skge_rx_fill()
1032 if (skge_rx_setup(skge, e, skb, skge->rx_buf_size) < 0) { in skge_rx_fill()
1059 static void skge_link_up(struct skge_port *skge) in skge_link_up() argument
1061 skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), in skge_link_up()
1064 netif_carrier_on(skge->netdev); in skge_link_up()
1065 netif_wake_queue(skge->netdev); in skge_link_up()
1067 netif_info(skge, link, skge->netdev, in skge_link_up()
1069 skge->speed, in skge_link_up()
1070 skge->duplex == DUPLEX_FULL ? "full" : "half", in skge_link_up()
1071 skge_pause(skge->flow_status)); in skge_link_up()
1074 static void skge_link_down(struct skge_port *skge) in skge_link_down() argument
1076 skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), LED_REG_OFF); in skge_link_down()
1077 netif_carrier_off(skge->netdev); in skge_link_down()
1078 netif_stop_queue(skge->netdev); in skge_link_down()
1080 netif_info(skge, link, skge->netdev, "Link is down\n"); in skge_link_down()
1086 struct skge_port *skge = netdev_priv(dev); in xm_link_down() local
1091 skge_link_down(skge); in xm_link_down()
1222 struct skge_port *skge = netdev_priv(dev); in bcom_check_link() local
1234 if (skge->autoneg == AUTONEG_ENABLE) { in bcom_check_link()
1251 skge->duplex = DUPLEX_FULL; in bcom_check_link()
1254 skge->duplex = DUPLEX_HALF; in bcom_check_link()
1264 skge->flow_status = FLOW_STAT_SYMMETRIC; in bcom_check_link()
1267 skge->flow_status = FLOW_STAT_REM_SEND; in bcom_check_link()
1270 skge->flow_status = FLOW_STAT_LOC_SEND; in bcom_check_link()
1273 skge->flow_status = FLOW_STAT_NONE; in bcom_check_link()
1275 skge->speed = SPEED_1000; in bcom_check_link()
1279 genesis_link_up(skge); in bcom_check_link()
1285 static void bcom_phy_init(struct skge_port *skge) in bcom_phy_init() argument
1287 struct skge_hw *hw = skge->hw; in bcom_phy_init()
1288 int port = skge->port; in bcom_phy_init()
1350 if (skge->autoneg == AUTONEG_ENABLE) { in bcom_phy_init()
1357 if (skge->advertising & ADVERTISED_1000baseT_Half) in bcom_phy_init()
1359 if (skge->advertising & ADVERTISED_1000baseT_Full) in bcom_phy_init()
1365 if (skge->duplex == DUPLEX_FULL) in bcom_phy_init()
1373 phy_pause_map[skge->flow_control] | PHY_AN_CSMA); in bcom_phy_init()
1391 static void xm_phy_init(struct skge_port *skge) in xm_phy_init() argument
1393 struct skge_hw *hw = skge->hw; in xm_phy_init()
1394 int port = skge->port; in xm_phy_init()
1397 if (skge->autoneg == AUTONEG_ENABLE) { in xm_phy_init()
1398 if (skge->advertising & ADVERTISED_1000baseT_Half) in xm_phy_init()
1400 if (skge->advertising & ADVERTISED_1000baseT_Full) in xm_phy_init()
1403 ctrl |= fiber_pause_map[skge->flow_control]; in xm_phy_init()
1411 if (skge->duplex == DUPLEX_FULL) in xm_phy_init()
1422 mod_timer(&skge->link_timer, jiffies + LINK_HZ); in xm_phy_init()
1427 struct skge_port *skge = netdev_priv(dev); in xm_check_link() local
1428 struct skge_hw *hw = skge->hw; in xm_check_link()
1429 int port = skge->port; in xm_check_link()
1441 if (skge->autoneg == AUTONEG_ENABLE) { in xm_check_link()
1458 skge->duplex = DUPLEX_FULL; in xm_check_link()
1461 skge->duplex = DUPLEX_HALF; in xm_check_link()
1469 if ((skge->flow_control == FLOW_MODE_SYMMETRIC || in xm_check_link()
1470 skge->flow_control == FLOW_MODE_SYM_OR_REM) && in xm_check_link()
1472 skge->flow_status = FLOW_STAT_SYMMETRIC; in xm_check_link()
1473 else if (skge->flow_control == FLOW_MODE_SYM_OR_REM && in xm_check_link()
1476 skge->flow_status = FLOW_STAT_REM_SEND; in xm_check_link()
1477 else if (skge->flow_control == FLOW_MODE_LOC_SEND && in xm_check_link()
1480 skge->flow_status = FLOW_STAT_LOC_SEND; in xm_check_link()
1482 skge->flow_status = FLOW_STAT_NONE; in xm_check_link()
1484 skge->speed = SPEED_1000; in xm_check_link()
1488 genesis_link_up(skge); in xm_check_link()
1500 struct skge_port *skge = from_timer(skge, t, link_timer); in xm_link_timer() local
1501 struct net_device *dev = skge->netdev; in xm_link_timer()
1502 struct skge_hw *hw = skge->hw; in xm_link_timer()
1503 int port = skge->port; in xm_link_timer()
1529 mod_timer(&skge->link_timer, in xm_link_timer()
1538 struct skge_port *skge = netdev_priv(dev); in genesis_mac_init() local
1580 xm_phy_init(skge); in genesis_mac_init()
1583 bcom_phy_init(skge); in genesis_mac_init()
1609 if (skge->duplex == DUPLEX_HALF) { in genesis_mac_init()
1693 static void genesis_stop(struct skge_port *skge) in genesis_stop() argument
1695 struct skge_hw *hw = skge->hw; in genesis_stop()
1696 int port = skge->port; in genesis_stop()
1741 static void genesis_get_stats(struct skge_port *skge, u64 *data) in genesis_get_stats() argument
1743 struct skge_hw *hw = skge->hw; in genesis_get_stats()
1744 int port = skge->port; in genesis_get_stats()
1772 struct skge_port *skge = netdev_priv(dev); in genesis_mac_intr() local
1775 netif_printk(skge, intr, KERN_DEBUG, skge->netdev, in genesis_mac_intr()
1780 mod_timer(&skge->link_timer, jiffies + 1); in genesis_mac_intr()
1789 static void genesis_link_up(struct skge_port *skge) in genesis_link_up() argument
1791 struct skge_hw *hw = skge->hw; in genesis_link_up()
1792 int port = skge->port; in genesis_link_up()
1802 if (skge->flow_status == FLOW_STAT_NONE || in genesis_link_up()
1803 skge->flow_status == FLOW_STAT_LOC_SEND) in genesis_link_up()
1813 if (skge->flow_status == FLOW_STAT_SYMMETRIC || in genesis_link_up()
1814 skge->flow_status == FLOW_STAT_LOC_SEND) { in genesis_link_up()
1852 if (hw->phy_type != SK_PHY_XMAC && skge->duplex == DUPLEX_FULL) in genesis_link_up()
1869 skge_link_up(skge); in genesis_link_up()
1873 static inline void bcom_phy_intr(struct skge_port *skge) in bcom_phy_intr() argument
1875 struct skge_hw *hw = skge->hw; in bcom_phy_intr()
1876 int port = skge->port; in bcom_phy_intr()
1880 netif_printk(skge, intr, KERN_DEBUG, skge->netdev, in bcom_phy_intr()
1952 struct skge_port *skge = netdev_priv(hw->dev[port]); in yukon_init() local
1955 if (skge->autoneg == AUTONEG_ENABLE) { in yukon_init()
1968 if (skge->autoneg == AUTONEG_DISABLE) in yukon_init()
1978 if (skge->autoneg == AUTONEG_ENABLE) { in yukon_init()
1980 if (skge->advertising & ADVERTISED_1000baseT_Full) in yukon_init()
1982 if (skge->advertising & ADVERTISED_1000baseT_Half) in yukon_init()
1984 if (skge->advertising & ADVERTISED_100baseT_Full) in yukon_init()
1986 if (skge->advertising & ADVERTISED_100baseT_Half) in yukon_init()
1988 if (skge->advertising & ADVERTISED_10baseT_Full) in yukon_init()
1990 if (skge->advertising & ADVERTISED_10baseT_Half) in yukon_init()
1994 adv |= phy_pause_map[skge->flow_control]; in yukon_init()
1996 if (skge->advertising & ADVERTISED_1000baseT_Full) in yukon_init()
1998 if (skge->advertising & ADVERTISED_1000baseT_Half) in yukon_init()
2001 adv |= fiber_pause_map[skge->flow_control]; in yukon_init()
2010 if (skge->duplex == DUPLEX_FULL) in yukon_init()
2013 switch (skge->speed) { in yukon_init()
2031 if (skge->autoneg == AUTONEG_ENABLE) in yukon_init()
2068 struct skge_port *skge = netdev_priv(hw->dev[port]); in yukon_mac_init() local
2104 if (skge->autoneg == AUTONEG_DISABLE) { in yukon_mac_init()
2109 switch (skge->speed) { in yukon_mac_init()
2123 if (skge->duplex == DUPLEX_FULL) in yukon_mac_init()
2128 switch (skge->flow_control) { in yukon_mac_init()
2235 static void yukon_stop(struct skge_port *skge) in yukon_stop() argument
2237 struct skge_hw *hw = skge->hw; in yukon_stop()
2238 int port = skge->port; in yukon_stop()
2255 static void yukon_get_stats(struct skge_port *skge, u64 *data) in yukon_get_stats() argument
2257 struct skge_hw *hw = skge->hw; in yukon_get_stats()
2258 int port = skge->port; in yukon_get_stats()
2274 struct skge_port *skge = netdev_priv(dev); in yukon_mac_intr() local
2277 netif_printk(skge, intr, KERN_DEBUG, skge->netdev, in yukon_mac_intr()
2304 static void yukon_link_up(struct skge_port *skge) in yukon_link_up() argument
2306 struct skge_hw *hw = skge->hw; in yukon_link_up()
2307 int port = skge->port; in yukon_link_up()
2314 if (skge->duplex == DUPLEX_FULL || skge->autoneg == AUTONEG_ENABLE) in yukon_link_up()
2322 skge_link_up(skge); in yukon_link_up()
2325 static void yukon_link_down(struct skge_port *skge) in yukon_link_down() argument
2327 struct skge_hw *hw = skge->hw; in yukon_link_down()
2328 int port = skge->port; in yukon_link_down()
2335 if (skge->flow_status == FLOW_STAT_REM_SEND) { in yukon_link_down()
2342 skge_link_down(skge); in yukon_link_down()
2347 static void yukon_phy_intr(struct skge_port *skge) in yukon_phy_intr() argument
2349 struct skge_hw *hw = skge->hw; in yukon_phy_intr()
2350 int port = skge->port; in yukon_phy_intr()
2357 netif_printk(skge, intr, KERN_DEBUG, skge->netdev, in yukon_phy_intr()
2377 skge->duplex = (phystat & PHY_M_PS_FULL_DUP) in yukon_phy_intr()
2379 skge->speed = yukon_speed(hw, phystat); in yukon_phy_intr()
2384 skge->flow_status = FLOW_STAT_SYMMETRIC; in yukon_phy_intr()
2387 skge->flow_status = FLOW_STAT_REM_SEND; in yukon_phy_intr()
2390 skge->flow_status = FLOW_STAT_LOC_SEND; in yukon_phy_intr()
2393 skge->flow_status = FLOW_STAT_NONE; in yukon_phy_intr()
2396 if (skge->flow_status == FLOW_STAT_NONE || in yukon_phy_intr()
2397 (skge->speed < SPEED_1000 && skge->duplex == DUPLEX_HALF)) in yukon_phy_intr()
2401 yukon_link_up(skge); in yukon_phy_intr()
2406 skge->speed = yukon_speed(hw, phystat); in yukon_phy_intr()
2409 skge->duplex = (phystat & PHY_M_PS_FULL_DUP) ? DUPLEX_FULL : DUPLEX_HALF; in yukon_phy_intr()
2412 yukon_link_up(skge); in yukon_phy_intr()
2414 yukon_link_down(skge); in yukon_phy_intr()
2418 pr_err("%s: autonegotiation failed (%s)\n", skge->netdev->name, reason); in yukon_phy_intr()
2423 static void skge_phy_reset(struct skge_port *skge) in skge_phy_reset() argument
2425 struct skge_hw *hw = skge->hw; in skge_phy_reset()
2426 int port = skge->port; in skge_phy_reset()
2429 netif_stop_queue(skge->netdev); in skge_phy_reset()
2430 netif_carrier_off(skge->netdev); in skge_phy_reset()
2449 struct skge_port *skge = netdev_priv(dev); in skge_ioctl() local
2450 struct skge_hw *hw = skge->hw; in skge_ioctl()
2466 err = __xm_phy_read(hw, skge->port, data->reg_num & 0x1f, &val); in skge_ioctl()
2468 err = __gm_phy_read(hw, skge->port, data->reg_num & 0x1f, &val); in skge_ioctl()
2477 err = xm_phy_write(hw, skge->port, data->reg_num & 0x1f, in skge_ioctl()
2480 err = gm_phy_write(hw, skge->port, data->reg_num & 0x1f, in skge_ioctl()
2519 static void skge_qset(struct skge_port *skge, u16 q, in skge_qset() argument
2522 struct skge_hw *hw = skge->hw; in skge_qset()
2524 u64 base = skge->dma + (e->desc - skge->mem); in skge_qset()
2538 struct skge_port *skge = netdev_priv(dev); in skge_up() local
2539 struct skge_hw *hw = skge->hw; in skge_up()
2540 int port = skge->port; in skge_up()
2548 netif_info(skge, ifup, skge->netdev, "enabling interface\n"); in skge_up()
2551 skge->rx_buf_size = dev->mtu + ETH_HLEN; in skge_up()
2553 skge->rx_buf_size = RX_BUF_SIZE; in skge_up()
2556 rx_size = skge->rx_ring.count * sizeof(struct skge_rx_desc); in skge_up()
2557 tx_size = skge->tx_ring.count * sizeof(struct skge_tx_desc); in skge_up()
2558 skge->mem_size = tx_size + rx_size; in skge_up()
2559 skge->mem = pci_alloc_consistent(hw->pdev, skge->mem_size, &skge->dma); in skge_up()
2560 if (!skge->mem) in skge_up()
2563 BUG_ON(skge->dma & 7); in skge_up()
2565 if (upper_32_bits(skge->dma) != upper_32_bits(skge->dma + skge->mem_size)) { in skge_up()
2571 memset(skge->mem, 0, skge->mem_size); in skge_up()
2573 err = skge_ring_alloc(&skge->rx_ring, skge->mem, skge->dma); in skge_up()
2581 err = skge_ring_alloc(&skge->tx_ring, skge->mem + rx_size, in skge_up()
2582 skge->dma + rx_size); in skge_up()
2610 skge_qset(skge, rxqaddr[port], skge->rx_ring.to_clean); in skge_up()
2612 BUG_ON(skge->tx_ring.to_use != skge->tx_ring.to_clean); in skge_up()
2614 skge_qset(skge, txqaddr[port], skge->tx_ring.to_use); in skge_up()
2619 skge_led(skge, LED_MODE_ON); in skge_up()
2627 napi_enable(&skge->napi); in skge_up()
2634 kfree(skge->tx_ring.start); in skge_up()
2636 skge_rx_clean(skge); in skge_up()
2637 kfree(skge->rx_ring.start); in skge_up()
2639 pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma); in skge_up()
2640 skge->mem = NULL; in skge_up()
2656 struct skge_port *skge = netdev_priv(dev); in skge_down() local
2657 struct skge_hw *hw = skge->hw; in skge_down()
2658 int port = skge->port; in skge_down()
2660 if (!skge->mem) in skge_down()
2663 netif_info(skge, ifdown, skge->netdev, "disabling interface\n"); in skge_down()
2668 del_timer_sync(&skge->link_timer); in skge_down()
2670 napi_disable(&skge->napi); in skge_down()
2682 skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), LED_REG_OFF); in skge_down()
2684 genesis_stop(skge); in skge_down()
2686 yukon_stop(skge); in skge_down()
2719 skge_led(skge, LED_MODE_OFF); in skge_down()
2725 skge_rx_clean(skge); in skge_down()
2727 kfree(skge->rx_ring.start); in skge_down()
2728 kfree(skge->tx_ring.start); in skge_down()
2729 pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma); in skge_down()
2730 skge->mem = NULL; in skge_down()
2744 struct skge_port *skge = netdev_priv(dev); in skge_xmit_frame() local
2745 struct skge_hw *hw = skge->hw; in skge_xmit_frame()
2755 if (unlikely(skge_avail(&skge->tx_ring) < skb_shinfo(skb)->nr_frags + 1)) in skge_xmit_frame()
2758 e = skge->tx_ring.to_use; in skge_xmit_frame()
2826 skge_write8(hw, Q_ADDR(txqaddr[skge->port], Q_CSR), CSR_START); in skge_xmit_frame()
2828 netif_printk(skge, tx_queued, KERN_DEBUG, skge->netdev, in skge_xmit_frame()
2830 e - skge->tx_ring.start, skb->len); in skge_xmit_frame()
2832 skge->tx_ring.to_use = e->next; in skge_xmit_frame()
2835 if (skge_avail(&skge->tx_ring) <= TX_LOW_WATER) { in skge_xmit_frame()
2843 e = skge->tx_ring.to_use; in skge_xmit_frame()
2882 struct skge_port *skge = netdev_priv(dev); in skge_tx_clean() local
2885 for (e = skge->tx_ring.to_clean; e != skge->tx_ring.to_use; e = e->next) { in skge_tx_clean()
2888 skge_tx_unmap(skge->hw->pdev, e, td->control); in skge_tx_clean()
2896 skge->tx_ring.to_clean = e; in skge_tx_clean()
2901 struct skge_port *skge = netdev_priv(dev); in skge_tx_timeout() local
2903 netif_printk(skge, timer, KERN_DEBUG, skge->netdev, "tx timeout\n"); in skge_tx_timeout()
2905 skge_write8(skge->hw, Q_ADDR(txqaddr[skge->port], Q_CSR), CSR_STOP); in skge_tx_timeout()
2943 struct skge_port *skge = netdev_priv(dev); in genesis_set_multicast() local
2944 struct skge_hw *hw = skge->hw; in genesis_set_multicast()
2945 int port = skge->port; in genesis_set_multicast()
2962 if (skge->flow_status == FLOW_STAT_REM_SEND || in genesis_set_multicast()
2963 skge->flow_status == FLOW_STAT_SYMMETRIC) in genesis_set_multicast()
2982 struct skge_port *skge = netdev_priv(dev); in yukon_set_multicast() local
2983 struct skge_hw *hw = skge->hw; in yukon_set_multicast()
2984 int port = skge->port; in yukon_set_multicast()
2986 int rx_pause = (skge->flow_status == FLOW_STAT_REM_SEND || in yukon_set_multicast()
2987 skge->flow_status == FLOW_STAT_SYMMETRIC); in yukon_set_multicast()
3044 struct skge_port *skge = netdev_priv(dev); in skge_set_multicast() local
3046 if (is_genesis(skge->hw)) in skge_set_multicast()
3061 struct skge_port *skge = netdev_priv(dev); in skge_rx_get() local
3065 netif_printk(skge, rx_status, KERN_DEBUG, skge->netdev, in skge_rx_get()
3067 e - skge->rx_ring.start, status, len); in skge_rx_get()
3069 if (len > skge->rx_buf_size) in skge_rx_get()
3075 if (bad_phy_status(skge->hw, status)) in skge_rx_get()
3078 if (phy_length(skge->hw, status) != len) in skge_rx_get()
3086 pci_dma_sync_single_for_cpu(skge->hw->pdev, in skge_rx_get()
3091 pci_dma_sync_single_for_device(skge->hw->pdev, in skge_rx_get()
3095 skge_rx_reuse(e, skge->rx_buf_size); in skge_rx_get()
3100 nskb = netdev_alloc_skb_ip_align(dev, skge->rx_buf_size); in skge_rx_get()
3109 if (skge_rx_setup(skge, e, nskb, skge->rx_buf_size) < 0) { in skge_rx_get()
3114 pci_unmap_single(skge->hw->pdev, in skge_rx_get()
3132 netif_printk(skge, rx_err, KERN_DEBUG, skge->netdev, in skge_rx_get()
3134 e - skge->rx_ring.start, control, status); in skge_rx_get()
3136 if (is_genesis(skge->hw)) { in skge_rx_get()
3153 skge_rx_reuse(e, skge->rx_buf_size); in skge_rx_get()
3160 struct skge_port *skge = netdev_priv(dev); in skge_tx_done() local
3161 struct skge_ring *ring = &skge->tx_ring; in skge_tx_done()
3165 skge_write8(skge->hw, Q_ADDR(txqaddr[skge->port], Q_CSR), CSR_IRQ_CL_F); in skge_tx_done()
3173 skge_tx_unmap(skge->hw->pdev, e, control); in skge_tx_done()
3176 netif_printk(skge, tx_done, KERN_DEBUG, skge->netdev, in skge_tx_done()
3178 e - skge->tx_ring.start); in skge_tx_done()
3187 skge->tx_ring.to_clean = e; in skge_tx_done()
3193 skge_avail(&skge->tx_ring) > TX_LOW_WATER)) { in skge_tx_done()
3196 skge_avail(&skge->tx_ring) > TX_LOW_WATER)) { in skge_tx_done()
3206 struct skge_port *skge = container_of(napi, struct skge_port, napi); in skge_poll() local
3207 struct net_device *dev = skge->netdev; in skge_poll()
3208 struct skge_hw *hw = skge->hw; in skge_poll()
3209 struct skge_ring *ring = &skge->rx_ring; in skge_poll()
3215 skge_write8(hw, Q_ADDR(rxqaddr[skge->port], Q_CSR), CSR_IRQ_CL_F); in skge_poll()
3237 skge_write8(hw, Q_ADDR(rxqaddr[skge->port], Q_CSR), CSR_START); in skge_poll()
3243 hw->intr_mask |= napimask[skge->port]; in skge_poll()
3365 struct skge_port *skge = netdev_priv(dev); in skge_extirq() local
3369 yukon_phy_intr(skge); in skge_extirq()
3371 bcom_phy_intr(skge); in skge_extirq()
3403 struct skge_port *skge = netdev_priv(hw->dev[0]); in skge_intr() local
3405 napi_schedule(&skge->napi); in skge_intr()
3421 struct skge_port *skge = netdev_priv(hw->dev[1]); in skge_intr() local
3425 napi_schedule(&skge->napi); in skge_intr()
3453 struct skge_port *skge = netdev_priv(dev); in skge_netpoll() local
3456 skge_intr(dev->irq, skge->hw); in skge_netpoll()
3463 struct skge_port *skge = netdev_priv(dev); in skge_set_mac_address() local
3464 struct skge_hw *hw = skge->hw; in skge_set_mac_address()
3465 unsigned port = skge->port; in skge_set_mac_address()
3703 const struct skge_port *skge = netdev_priv(dev); in skge_debug_show() local
3704 const struct skge_hw *hw = skge->hw; in skge_debug_show()
3713 seq_printf(seq, "Tx Ring: (%d)\n", skge_avail(&skge->tx_ring)); in skge_debug_show()
3714 for (e = skge->tx_ring.to_clean; e != skge->tx_ring.to_use; e = e->next) { in skge_debug_show()
3722 for (e = skge->rx_ring.to_clean; ; e = e->next) { in skge_debug_show()
3757 struct skge_port *skge; in skge_device_event() local
3763 skge = netdev_priv(dev); in skge_device_event()
3766 if (skge->debugfs) { in skge_device_event()
3767 d = debugfs_rename(skge_debug, skge->debugfs, in skge_device_event()
3770 skge->debugfs = d; in skge_device_event()
3773 debugfs_remove(skge->debugfs); in skge_device_event()
3779 if (skge->debugfs) { in skge_device_event()
3780 debugfs_remove(skge->debugfs); in skge_device_event()
3781 skge->debugfs = NULL; in skge_device_event()
3792 skge->debugfs = d; in skge_device_event()
3854 struct skge_port *skge; in skge_devinit() local
3855 struct net_device *dev = alloc_etherdev(sizeof(*skge)); in skge_devinit()
3873 skge = netdev_priv(dev); in skge_devinit()
3874 netif_napi_add(dev, &skge->napi, skge_poll, NAPI_WEIGHT); in skge_devinit()
3875 skge->netdev = dev; in skge_devinit()
3876 skge->hw = hw; in skge_devinit()
3877 skge->msg_enable = netif_msg_init(debug, default_msg); in skge_devinit()
3879 skge->tx_ring.count = DEFAULT_TX_RING_SIZE; in skge_devinit()
3880 skge->rx_ring.count = DEFAULT_RX_RING_SIZE; in skge_devinit()
3883 skge->autoneg = AUTONEG_ENABLE; in skge_devinit()
3884 skge->flow_control = FLOW_MODE_SYM_OR_REM; in skge_devinit()
3885 skge->duplex = -1; in skge_devinit()
3886 skge->speed = -1; in skge_devinit()
3887 skge->advertising = skge_supported_modes(hw); in skge_devinit()
3890 skge->wol = wol_supported(hw) & WAKE_MAGIC; in skge_devinit()
3891 device_set_wakeup_enable(&hw->pdev->dev, skge->wol); in skge_devinit()
3896 skge->port = port; in skge_devinit()
3900 timer_setup(&skge->link_timer, xm_link_timer, 0); in skge_devinit()
3915 const struct skge_port *skge = netdev_priv(dev); in skge_show_addr() local
3917 netif_info(skge, probe, skge->netdev, "addr %pM\n", dev->dev_addr); in skge_show_addr()
4114 struct skge_port *skge = netdev_priv(dev); in skge_suspend() local
4119 if (skge->wol) in skge_suspend()
4120 skge_wol_init(skge); in skge_suspend()
4176 struct skge_port *skge = netdev_priv(dev); in skge_shutdown() local
4178 if (skge->wol) in skge_shutdown()
4179 skge_wol_init(skge); in skge_shutdown()