aqc111.c (361459cd9642631f048719169da9ef14cbf4a932) aqc111.c (0203146646be831de832e7fd2dc4ef1f32958f51)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* Aquantia Corp. Aquantia AQtion USB to 5GbE Controller
3 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
4 * Copyright (C) 2005 Phil Chang <pchang23@sbcglobal.net>
5 * Copyright (C) 2002-2003 TiVo Inc.
6 * Copyright (C) 2017-2018 ASIX
7 * Copyright (C) 2018 Aquantia Corp.
8 */

--- 425 unchanged lines hidden (view full) ---

434 /* Set high low water level */
435 reg16 = 0x0810;
436
437 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW,
438 2, &reg16);
439 netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host);
440}
441
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* Aquantia Corp. Aquantia AQtion USB to 5GbE Controller
3 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
4 * Copyright (C) 2005 Phil Chang <pchang23@sbcglobal.net>
5 * Copyright (C) 2002-2003 TiVo Inc.
6 * Copyright (C) 2017-2018 ASIX
7 * Copyright (C) 2018 Aquantia Corp.
8 */

--- 425 unchanged lines hidden (view full) ---

434 /* Set high low water level */
435 reg16 = 0x0810;
436
437 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW,
438 2, &reg16);
439 netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host);
440}
441
442static void aqc111_configure_csum_offload(struct usbnet *dev)
443{
444 u8 reg8 = 0;
445
446 if (dev->net->features & NETIF_F_RXCSUM) {
447 reg8 |= SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP |
448 SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6;
449 }
450 aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, &reg8);
451
452 reg8 = 0;
453 if (dev->net->features & NETIF_F_IP_CSUM)
454 reg8 |= SFR_TXCOE_IP | SFR_TXCOE_TCP | SFR_TXCOE_UDP;
455
456 if (dev->net->features & NETIF_F_IPV6_CSUM)
457 reg8 |= SFR_TXCOE_TCPV6 | SFR_TXCOE_UDPV6;
458
459 aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, &reg8);
460}
461
442static int aqc111_link_reset(struct usbnet *dev)
443{
444 struct aqc111_data *aqc111_data = dev->driver_priv;
445 u16 reg16 = 0;
446 u8 reg8 = 0;
447
448 if (aqc111_data->link == 1) { /* Link up */
449 aqc111_configure_rx(dev, aqc111_data);

--- 27 unchanged lines hidden (view full) ---

477 reg16 = 0;
478 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
479 2, &reg16);
480
481 reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX;
482 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
483 2, &reg16);
484
462static int aqc111_link_reset(struct usbnet *dev)
463{
464 struct aqc111_data *aqc111_data = dev->driver_priv;
465 u16 reg16 = 0;
466 u8 reg8 = 0;
467
468 if (aqc111_data->link == 1) { /* Link up */
469 aqc111_configure_rx(dev, aqc111_data);

--- 27 unchanged lines hidden (view full) ---

497 reg16 = 0;
498 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
499 2, &reg16);
500
501 reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX;
502 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
503 2, &reg16);
504
505 aqc111_configure_csum_offload(dev);
506
485 aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
486 2, &reg16);
487
488 reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN |
489 SFR_MEDIUM_TXFLOW_CTRLEN;
490 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
491 2, &reg16);
492

--- 85 unchanged lines hidden (view full) ---

578 aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0,
579 &aqc111_data->phy_cfg);
580
581 netif_carrier_off(dev->net);
582
583 return 0;
584}
585
507 aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
508 2, &reg16);
509
510 reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN |
511 SFR_MEDIUM_TXFLOW_CTRLEN;
512 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
513 2, &reg16);
514

--- 85 unchanged lines hidden (view full) ---

600 aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0,
601 &aqc111_data->phy_cfg);
602
603 netif_carrier_off(dev->net);
604
605 return 0;
606}
607
608static void aqc111_rx_checksum(struct sk_buff *skb, u64 pkt_desc)
609{
610 u32 pkt_type = 0;
611
612 skb->ip_summed = CHECKSUM_NONE;
613 /* checksum error bit is set */
614 if (pkt_desc & AQ_RX_PD_L4_ERR || pkt_desc & AQ_RX_PD_L3_ERR)
615 return;
616
617 pkt_type = pkt_desc & AQ_RX_PD_L4_TYPE_MASK;
618 /* It must be a TCP or UDP packet with a valid checksum */
619 if (pkt_type == AQ_RX_PD_L4_TCP || pkt_type == AQ_RX_PD_L4_UDP)
620 skb->ip_summed = CHECKSUM_UNNECESSARY;
621}
622
586static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
587{
588 struct sk_buff *new_skb = NULL;
589 u32 pkt_total_offset = 0;
590 u64 *pkt_desc_ptr = NULL;
591 u32 start_of_descs = 0;
592 u32 desc_offset = 0; /*RX Header Offset*/
593 u16 pkt_count = 0;

--- 61 unchanged lines hidden (view full) ---

655 if (!new_skb)
656 goto err;
657
658 new_skb->len = pkt_len;
659 skb_pull(new_skb, AQ_RX_HW_PAD);
660 skb_set_tail_pointer(new_skb, new_skb->len);
661
662 new_skb->truesize = SKB_TRUESIZE(new_skb->len);
623static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
624{
625 struct sk_buff *new_skb = NULL;
626 u32 pkt_total_offset = 0;
627 u64 *pkt_desc_ptr = NULL;
628 u32 start_of_descs = 0;
629 u32 desc_offset = 0; /*RX Header Offset*/
630 u16 pkt_count = 0;

--- 61 unchanged lines hidden (view full) ---

692 if (!new_skb)
693 goto err;
694
695 new_skb->len = pkt_len;
696 skb_pull(new_skb, AQ_RX_HW_PAD);
697 skb_set_tail_pointer(new_skb, new_skb->len);
698
699 new_skb->truesize = SKB_TRUESIZE(new_skb->len);
700 aqc111_rx_checksum(new_skb, pkt_desc);
663
664 usbnet_skb_return(dev, new_skb);
665 if (pkt_count == 0)
666 break;
667
668 skb_pull(skb, pkt_len_with_padd);
669
670 /* Next RX Packet Header */

--- 102 unchanged lines hidden ---
701
702 usbnet_skb_return(dev, new_skb);
703 if (pkt_count == 0)
704 break;
705
706 skb_pull(skb, pkt_len_with_padd);
707
708 /* Next RX Packet Header */

--- 102 unchanged lines hidden ---