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, ®16); 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, ®16); 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, ®8); 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, ®8); 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, ®16); 480 481 reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX; 482 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 483 2, ®16); 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, ®16); 500 501 reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX; 502 aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 503 2, ®16); 504 |
505 aqc111_configure_csum_offload(dev); 506 |
|
485 aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 486 2, ®16); 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, ®16); 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, ®16); 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, ®16); 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 --- |