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.
10 #include <linux/module.h>
11 #include <linux/netdevice.h>
12 #include <linux/ethtool.h>
13 #include <linux/mii.h>
14 #include <linux/usb.h>
15 #include <linux/crc32.h>
16 #include <linux/if_vlan.h>
17 #include <linux/usb/cdc.h>
18 #include <linux/usb/usbnet.h>
19 #include <linux/linkmode.h>
23 #define DRIVER_NAME "aqc111"
25 static int aqc111_read_cmd_nopm(struct usbnet
*dev
, u8 cmd
, u16 value
,
26 u16 index
, u16 size
, void *data
)
30 ret
= usbnet_read_cmd_nopm(dev
, cmd
, USB_DIR_IN
| USB_TYPE_VENDOR
|
31 USB_RECIP_DEVICE
, value
, index
, data
, size
);
33 if (unlikely(ret
< 0))
35 "Failed to read(0x%x) reg index 0x%04x: %d\n",
41 static int aqc111_read_cmd(struct usbnet
*dev
, u8 cmd
, u16 value
,
42 u16 index
, u16 size
, void *data
)
46 ret
= usbnet_read_cmd(dev
, cmd
, USB_DIR_IN
| USB_TYPE_VENDOR
|
47 USB_RECIP_DEVICE
, value
, index
, data
, size
);
49 if (unlikely(ret
< 0))
51 "Failed to read(0x%x) reg index 0x%04x: %d\n",
57 static int aqc111_read16_cmd_nopm(struct usbnet
*dev
, u8 cmd
, u16 value
,
62 ret
= aqc111_read_cmd_nopm(dev
, cmd
, value
, index
, sizeof(*data
), data
);
68 static int aqc111_read16_cmd(struct usbnet
*dev
, u8 cmd
, u16 value
,
73 ret
= aqc111_read_cmd(dev
, cmd
, value
, index
, sizeof(*data
), data
);
79 static int __aqc111_write_cmd(struct usbnet
*dev
, u8 cmd
, u8 reqtype
,
80 u16 value
, u16 index
, u16 size
, const void *data
)
86 "%s cmd=%#x reqtype=%#x value=%#x index=%#x size=%d\n",
87 __func__
, cmd
, reqtype
, value
, index
, size
);
90 buf
= kmemdup(data
, size
, GFP_KERNEL
);
95 err
= usb_control_msg(dev
->udev
, usb_sndctrlpipe(dev
->udev
, 0),
96 cmd
, reqtype
, value
, index
, buf
, size
,
97 (cmd
== AQ_PHY_POWER
) ? AQ_USB_PHY_SET_TIMEOUT
:
100 if (unlikely(err
< 0))
101 netdev_warn(dev
->net
,
102 "Failed to write(0x%x) reg index 0x%04x: %d\n",
110 static int aqc111_write_cmd_nopm(struct usbnet
*dev
, u8 cmd
, u16 value
,
111 u16 index
, u16 size
, void *data
)
115 ret
= __aqc111_write_cmd(dev
, cmd
, USB_DIR_OUT
| USB_TYPE_VENDOR
|
116 USB_RECIP_DEVICE
, value
, index
, size
, data
);
121 static int aqc111_write_cmd(struct usbnet
*dev
, u8 cmd
, u16 value
,
122 u16 index
, u16 size
, void *data
)
126 if (usb_autopm_get_interface(dev
->intf
) < 0)
129 ret
= __aqc111_write_cmd(dev
, cmd
, USB_DIR_OUT
| USB_TYPE_VENDOR
|
130 USB_RECIP_DEVICE
, value
, index
, size
, data
);
132 usb_autopm_put_interface(dev
->intf
);
137 static int aqc111_write16_cmd_nopm(struct usbnet
*dev
, u8 cmd
, u16 value
,
138 u16 index
, u16
*data
)
144 return aqc111_write_cmd_nopm(dev
, cmd
, value
, index
, sizeof(tmp
), &tmp
);
147 static int aqc111_write16_cmd(struct usbnet
*dev
, u8 cmd
, u16 value
,
148 u16 index
, u16
*data
)
154 return aqc111_write_cmd(dev
, cmd
, value
, index
, sizeof(tmp
), &tmp
);
157 static int aqc111_write32_cmd_nopm(struct usbnet
*dev
, u8 cmd
, u16 value
,
158 u16 index
, u32
*data
)
164 return aqc111_write_cmd_nopm(dev
, cmd
, value
, index
, sizeof(tmp
), &tmp
);
167 static int aqc111_write32_cmd(struct usbnet
*dev
, u8 cmd
, u16 value
,
168 u16 index
, u32
*data
)
174 return aqc111_write_cmd(dev
, cmd
, value
, index
, sizeof(tmp
), &tmp
);
177 static int aqc111_write_cmd_async(struct usbnet
*dev
, u8 cmd
, u16 value
,
178 u16 index
, u16 size
, void *data
)
180 return usbnet_write_cmd_async(dev
, cmd
, USB_DIR_OUT
| USB_TYPE_VENDOR
|
181 USB_RECIP_DEVICE
, value
, index
, data
,
185 static int aqc111_write16_cmd_async(struct usbnet
*dev
, u8 cmd
, u16 value
,
186 u16 index
, u16
*data
)
192 return aqc111_write_cmd_async(dev
, cmd
, value
, index
,
196 static void aqc111_get_drvinfo(struct net_device
*net
,
197 struct ethtool_drvinfo
*info
)
199 struct usbnet
*dev
= netdev_priv(net
);
200 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
202 /* Inherit standard device info */
203 usbnet_get_drvinfo(net
, info
);
204 strlcpy(info
->driver
, DRIVER_NAME
, sizeof(info
->driver
));
205 snprintf(info
->fw_version
, sizeof(info
->fw_version
), "%u.%u.%u",
206 aqc111_data
->fw_ver
.major
,
207 aqc111_data
->fw_ver
.minor
,
208 aqc111_data
->fw_ver
.rev
);
209 info
->eedump_len
= 0x00;
210 info
->regdump_len
= 0x00;
213 static void aqc111_get_wol(struct net_device
*net
,
214 struct ethtool_wolinfo
*wolinfo
)
216 struct usbnet
*dev
= netdev_priv(net
);
217 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
219 wolinfo
->supported
= WAKE_MAGIC
;
220 wolinfo
->wolopts
= 0;
222 if (aqc111_data
->wol_flags
& AQ_WOL_FLAG_MP
)
223 wolinfo
->wolopts
|= WAKE_MAGIC
;
226 static int aqc111_set_wol(struct net_device
*net
,
227 struct ethtool_wolinfo
*wolinfo
)
229 struct usbnet
*dev
= netdev_priv(net
);
230 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
232 if (wolinfo
->wolopts
& ~WAKE_MAGIC
)
235 aqc111_data
->wol_flags
= 0;
236 if (wolinfo
->wolopts
& WAKE_MAGIC
)
237 aqc111_data
->wol_flags
|= AQ_WOL_FLAG_MP
;
242 static void aqc111_speed_to_link_mode(u32 speed
,
243 struct ethtool_link_ksettings
*elk
)
247 ethtool_link_ksettings_add_link_mode(elk
, advertising
,
251 ethtool_link_ksettings_add_link_mode(elk
, advertising
,
255 ethtool_link_ksettings_add_link_mode(elk
, advertising
,
259 ethtool_link_ksettings_add_link_mode(elk
, advertising
,
265 static int aqc111_get_link_ksettings(struct net_device
*net
,
266 struct ethtool_link_ksettings
*elk
)
268 struct usbnet
*dev
= netdev_priv(net
);
269 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
270 enum usb_device_speed usb_speed
= dev
->udev
->speed
;
271 u32 speed
= SPEED_UNKNOWN
;
273 ethtool_link_ksettings_zero_link_mode(elk
, supported
);
274 ethtool_link_ksettings_add_link_mode(elk
, supported
,
276 ethtool_link_ksettings_add_link_mode(elk
, supported
,
278 if (usb_speed
== USB_SPEED_SUPER
) {
279 ethtool_link_ksettings_add_link_mode(elk
, supported
,
281 ethtool_link_ksettings_add_link_mode(elk
, supported
,
284 ethtool_link_ksettings_add_link_mode(elk
, supported
, TP
);
285 ethtool_link_ksettings_add_link_mode(elk
, supported
, Autoneg
);
287 elk
->base
.port
= PORT_TP
;
288 elk
->base
.transceiver
= XCVR_INTERNAL
;
290 elk
->base
.mdio_support
= 0x00; /*Not supported*/
292 if (aqc111_data
->autoneg
)
293 linkmode_copy(elk
->link_modes
.advertising
,
294 elk
->link_modes
.supported
);
296 aqc111_speed_to_link_mode(aqc111_data
->advertised_speed
, elk
);
298 elk
->base
.autoneg
= aqc111_data
->autoneg
;
300 switch (aqc111_data
->link_speed
) {
301 case AQ_INT_SPEED_5G
:
304 case AQ_INT_SPEED_2_5G
:
307 case AQ_INT_SPEED_1G
:
310 case AQ_INT_SPEED_100M
:
314 elk
->base
.duplex
= DUPLEX_FULL
;
315 elk
->base
.speed
= speed
;
320 static void aqc111_set_phy_speed(struct usbnet
*dev
, u8 autoneg
, u16 speed
)
322 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
324 aqc111_data
->phy_cfg
&= ~AQ_ADV_MASK
;
325 aqc111_data
->phy_cfg
|= AQ_PAUSE
;
326 aqc111_data
->phy_cfg
|= AQ_ASYM_PAUSE
;
327 aqc111_data
->phy_cfg
|= AQ_DOWNSHIFT
;
328 aqc111_data
->phy_cfg
&= ~AQ_DSH_RETRIES_MASK
;
329 aqc111_data
->phy_cfg
|= (3 << AQ_DSH_RETRIES_SHIFT
) &
332 if (autoneg
== AUTONEG_ENABLE
) {
335 aqc111_data
->phy_cfg
|= AQ_ADV_5G
;
338 aqc111_data
->phy_cfg
|= AQ_ADV_2G5
;
341 aqc111_data
->phy_cfg
|= AQ_ADV_1G
;
344 aqc111_data
->phy_cfg
|= AQ_ADV_100M
;
350 aqc111_data
->phy_cfg
|= AQ_ADV_5G
;
353 aqc111_data
->phy_cfg
|= AQ_ADV_2G5
;
356 aqc111_data
->phy_cfg
|= AQ_ADV_1G
;
359 aqc111_data
->phy_cfg
|= AQ_ADV_100M
;
364 aqc111_write32_cmd(dev
, AQ_PHY_OPS
, 0, 0, &aqc111_data
->phy_cfg
);
367 static int aqc111_set_link_ksettings(struct net_device
*net
,
368 const struct ethtool_link_ksettings
*elk
)
370 struct usbnet
*dev
= netdev_priv(net
);
371 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
372 enum usb_device_speed usb_speed
= dev
->udev
->speed
;
373 u8 autoneg
= elk
->base
.autoneg
;
374 u32 speed
= elk
->base
.speed
;
376 if (autoneg
== AUTONEG_ENABLE
) {
377 if (aqc111_data
->autoneg
!= AUTONEG_ENABLE
) {
378 aqc111_data
->autoneg
= AUTONEG_ENABLE
;
379 aqc111_data
->advertised_speed
=
380 (usb_speed
== USB_SPEED_SUPER
) ?
381 SPEED_5000
: SPEED_1000
;
382 aqc111_set_phy_speed(dev
, aqc111_data
->autoneg
,
383 aqc111_data
->advertised_speed
);
386 if (speed
!= SPEED_100
&&
387 speed
!= SPEED_1000
&&
388 speed
!= SPEED_2500
&&
389 speed
!= SPEED_5000
&&
390 speed
!= SPEED_UNKNOWN
)
393 if (elk
->base
.duplex
!= DUPLEX_FULL
)
396 if (usb_speed
!= USB_SPEED_SUPER
&& speed
> SPEED_1000
)
399 aqc111_data
->autoneg
= AUTONEG_DISABLE
;
400 if (speed
!= SPEED_UNKNOWN
)
401 aqc111_data
->advertised_speed
= speed
;
403 aqc111_set_phy_speed(dev
, aqc111_data
->autoneg
,
404 aqc111_data
->advertised_speed
);
410 static const struct ethtool_ops aqc111_ethtool_ops
= {
411 .get_drvinfo
= aqc111_get_drvinfo
,
412 .get_wol
= aqc111_get_wol
,
413 .set_wol
= aqc111_set_wol
,
414 .get_msglevel
= usbnet_get_msglevel
,
415 .set_msglevel
= usbnet_set_msglevel
,
416 .get_link
= ethtool_op_get_link
,
417 .get_link_ksettings
= aqc111_get_link_ksettings
,
418 .set_link_ksettings
= aqc111_set_link_ksettings
421 static int aqc111_change_mtu(struct net_device
*net
, int new_mtu
)
423 struct usbnet
*dev
= netdev_priv(net
);
428 dev
->hard_mtu
= net
->mtu
+ net
->hard_header_len
;
430 aqc111_read16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
433 reg16
|= SFR_MEDIUM_JUMBO_EN
;
435 reg16
&= ~SFR_MEDIUM_JUMBO_EN
;
437 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
440 if (dev
->net
->mtu
> 12500) {
441 memcpy(buf
, &AQC111_BULKIN_SIZE
[2], 5);
442 /* RX bulk configuration */
443 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_RX_BULKIN_QCTRL
,
447 /* Set high low water level */
448 if (dev
->net
->mtu
<= 4500)
450 else if (dev
->net
->mtu
<= 9500)
452 else if (dev
->net
->mtu
<= 12500)
457 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_PAUSE_WATERLVL_LOW
,
463 static int aqc111_set_mac_addr(struct net_device
*net
, void *p
)
465 struct usbnet
*dev
= netdev_priv(net
);
468 ret
= eth_mac_addr(net
, p
);
472 /* Set the MAC address */
473 return aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_NODE_ID
, ETH_ALEN
,
474 ETH_ALEN
, net
->dev_addr
);
477 static int aqc111_vlan_rx_kill_vid(struct net_device
*net
,
478 __be16 proto
, u16 vid
)
480 struct usbnet
*dev
= netdev_priv(net
);
485 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
490 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_ADDRESS
, 1, 1, ®8
);
492 reg8
= vlan_ctrl
| SFR_VLAN_CONTROL_RD
;
493 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
494 aqc111_read16_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_DATA0
, 2, ®16
);
495 reg16
&= ~(1 << (vid
% 16));
496 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_DATA0
, 2, ®16
);
497 reg8
= vlan_ctrl
| SFR_VLAN_CONTROL_WE
;
498 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
503 static int aqc111_vlan_rx_add_vid(struct net_device
*net
, __be16 proto
, u16 vid
)
505 struct usbnet
*dev
= netdev_priv(net
);
510 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
515 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_ADDRESS
, 1, 1, ®8
);
517 reg8
= vlan_ctrl
| SFR_VLAN_CONTROL_RD
;
518 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
519 aqc111_read16_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_DATA0
, 2, ®16
);
520 reg16
|= (1 << (vid
% 16));
521 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_DATA0
, 2, ®16
);
522 reg8
= vlan_ctrl
| SFR_VLAN_CONTROL_WE
;
523 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
528 static void aqc111_set_rx_mode(struct net_device
*net
)
530 struct usbnet
*dev
= netdev_priv(net
);
531 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
534 mc_count
= netdev_mc_count(net
);
536 aqc111_data
->rxctl
&= ~(SFR_RX_CTL_PRO
| SFR_RX_CTL_AMALL
|
539 if (net
->flags
& IFF_PROMISC
) {
540 aqc111_data
->rxctl
|= SFR_RX_CTL_PRO
;
541 } else if ((net
->flags
& IFF_ALLMULTI
) || mc_count
> AQ_MAX_MCAST
) {
542 aqc111_data
->rxctl
|= SFR_RX_CTL_AMALL
;
543 } else if (!netdev_mc_empty(net
)) {
544 u8 m_filter
[AQ_MCAST_FILTER_SIZE
] = { 0 };
545 struct netdev_hw_addr
*ha
= NULL
;
548 netdev_for_each_mc_addr(ha
, net
) {
549 crc_bits
= ether_crc(ETH_ALEN
, ha
->addr
) >> 26;
550 m_filter
[crc_bits
>> 3] |= BIT(crc_bits
& 7);
553 aqc111_write_cmd_async(dev
, AQ_ACCESS_MAC
,
554 SFR_MULTI_FILTER_ARRY
,
555 AQ_MCAST_FILTER_SIZE
,
556 AQ_MCAST_FILTER_SIZE
, m_filter
);
558 aqc111_data
->rxctl
|= SFR_RX_CTL_AM
;
561 aqc111_write16_cmd_async(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
,
562 2, &aqc111_data
->rxctl
);
565 static int aqc111_set_features(struct net_device
*net
,
566 netdev_features_t features
)
568 struct usbnet
*dev
= netdev_priv(net
);
569 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
570 netdev_features_t changed
= net
->features
^ features
;
574 if (changed
& NETIF_F_IP_CSUM
) {
575 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_TXCOE_CTL
, 1, 1, ®8
);
576 reg8
^= SFR_TXCOE_TCP
| SFR_TXCOE_UDP
;
577 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_TXCOE_CTL
,
581 if (changed
& NETIF_F_IPV6_CSUM
) {
582 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_TXCOE_CTL
, 1, 1, ®8
);
583 reg8
^= SFR_TXCOE_TCPV6
| SFR_TXCOE_UDPV6
;
584 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_TXCOE_CTL
,
588 if (changed
& NETIF_F_RXCSUM
) {
589 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_RXCOE_CTL
, 1, 1, ®8
);
590 if (features
& NETIF_F_RXCSUM
) {
591 aqc111_data
->rx_checksum
= 1;
592 reg8
&= ~(SFR_RXCOE_IP
| SFR_RXCOE_TCP
| SFR_RXCOE_UDP
|
593 SFR_RXCOE_TCPV6
| SFR_RXCOE_UDPV6
);
595 aqc111_data
->rx_checksum
= 0;
596 reg8
|= SFR_RXCOE_IP
| SFR_RXCOE_TCP
| SFR_RXCOE_UDP
|
597 SFR_RXCOE_TCPV6
| SFR_RXCOE_UDPV6
;
600 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_RXCOE_CTL
,
603 if (changed
& NETIF_F_HW_VLAN_CTAG_FILTER
) {
604 if (features
& NETIF_F_HW_VLAN_CTAG_FILTER
) {
607 for (i
= 0; i
< 256; i
++) {
610 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
,
614 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
,
617 reg8
= SFR_VLAN_CONTROL_WE
;
618 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
,
622 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
,
624 reg8
|= SFR_VLAN_CONTROL_VFE
;
625 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
,
626 SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
628 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
,
630 reg8
&= ~SFR_VLAN_CONTROL_VFE
;
631 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
,
632 SFR_VLAN_ID_CONTROL
, 1, 1, ®8
);
639 static const struct net_device_ops aqc111_netdev_ops
= {
640 .ndo_open
= usbnet_open
,
641 .ndo_stop
= usbnet_stop
,
642 .ndo_start_xmit
= usbnet_start_xmit
,
643 .ndo_tx_timeout
= usbnet_tx_timeout
,
644 .ndo_get_stats64
= usbnet_get_stats64
,
645 .ndo_change_mtu
= aqc111_change_mtu
,
646 .ndo_set_mac_address
= aqc111_set_mac_addr
,
647 .ndo_validate_addr
= eth_validate_addr
,
648 .ndo_vlan_rx_add_vid
= aqc111_vlan_rx_add_vid
,
649 .ndo_vlan_rx_kill_vid
= aqc111_vlan_rx_kill_vid
,
650 .ndo_set_rx_mode
= aqc111_set_rx_mode
,
651 .ndo_set_features
= aqc111_set_features
,
654 static int aqc111_read_perm_mac(struct usbnet
*dev
)
659 ret
= aqc111_read_cmd(dev
, AQ_FLASH_PARAMETERS
, 0, 0, ETH_ALEN
, buf
);
663 ether_addr_copy(dev
->net
->perm_addr
, buf
);
670 static void aqc111_read_fw_version(struct usbnet
*dev
,
671 struct aqc111_data
*aqc111_data
)
673 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, AQ_FW_VER_MAJOR
,
674 1, 1, &aqc111_data
->fw_ver
.major
);
675 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, AQ_FW_VER_MINOR
,
676 1, 1, &aqc111_data
->fw_ver
.minor
);
677 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, AQ_FW_VER_REV
,
678 1, 1, &aqc111_data
->fw_ver
.rev
);
680 if (aqc111_data
->fw_ver
.major
& 0x80)
681 aqc111_data
->fw_ver
.major
&= ~0x80;
684 static int aqc111_bind(struct usbnet
*dev
, struct usb_interface
*intf
)
686 struct usb_device
*udev
= interface_to_usbdev(intf
);
687 enum usb_device_speed usb_speed
= udev
->speed
;
688 struct aqc111_data
*aqc111_data
;
691 /* Check if vendor configuration */
692 if (udev
->actconfig
->desc
.bConfigurationValue
!= 1) {
693 usb_driver_set_configuration(udev
, 1);
697 usb_reset_configuration(dev
->udev
);
699 ret
= usbnet_get_endpoints(dev
, intf
);
701 netdev_dbg(dev
->net
, "usbnet_get_endpoints failed");
705 aqc111_data
= kzalloc(sizeof(*aqc111_data
), GFP_KERNEL
);
709 /* store aqc111_data pointer in device data field */
710 dev
->driver_priv
= aqc111_data
;
712 /* Init the MAC address */
713 ret
= aqc111_read_perm_mac(dev
);
717 ether_addr_copy(dev
->net
->dev_addr
, dev
->net
->perm_addr
);
719 /* Set Rx urb size */
720 dev
->rx_urb_size
= URB_SIZE
;
722 /* Set TX needed headroom & tailroom */
723 dev
->net
->needed_headroom
+= sizeof(u64
);
724 dev
->net
->needed_tailroom
+= sizeof(u64
);
726 dev
->net
->max_mtu
= 16334;
728 dev
->net
->netdev_ops
= &aqc111_netdev_ops
;
729 dev
->net
->ethtool_ops
= &aqc111_ethtool_ops
;
731 if (usb_device_no_sg_constraint(dev
->udev
))
734 dev
->net
->hw_features
|= AQ_SUPPORT_HW_FEATURE
;
735 dev
->net
->features
|= AQ_SUPPORT_FEATURE
;
736 dev
->net
->vlan_features
|= AQ_SUPPORT_VLAN_FEATURE
;
738 netif_set_gso_max_size(dev
->net
, 65535);
740 aqc111_read_fw_version(dev
, aqc111_data
);
741 aqc111_data
->autoneg
= AUTONEG_ENABLE
;
742 aqc111_data
->advertised_speed
= (usb_speed
== USB_SPEED_SUPER
) ?
743 SPEED_5000
: SPEED_1000
;
752 static void aqc111_unbind(struct usbnet
*dev
, struct usb_interface
*intf
)
754 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
758 reg16
= SFR_PHYPWR_RSTCTL_BZ
;
759 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_PHYPWR_RSTCTL
,
762 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_PHYPWR_RSTCTL
,
765 /* Power down ethernet PHY */
766 aqc111_data
->phy_cfg
&= ~AQ_ADV_MASK
;
767 aqc111_data
->phy_cfg
|= AQ_LOW_POWER
;
768 aqc111_data
->phy_cfg
&= ~AQ_PHY_POWER_EN
;
769 aqc111_write32_cmd_nopm(dev
, AQ_PHY_OPS
, 0, 0,
770 &aqc111_data
->phy_cfg
);
775 static void aqc111_status(struct usbnet
*dev
, struct urb
*urb
)
777 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
778 u64
*event_data
= NULL
;
781 if (urb
->actual_length
< sizeof(*event_data
))
784 event_data
= urb
->transfer_buffer
;
785 le64_to_cpus(event_data
);
787 if (*event_data
& AQ_LS_MASK
)
792 aqc111_data
->link_speed
= (*event_data
& AQ_SPEED_MASK
) >>
794 aqc111_data
->link
= link
;
796 if (netif_carrier_ok(dev
->net
) != link
)
797 usbnet_defer_kevent(dev
, EVENT_LINK_RESET
);
800 static void aqc111_configure_rx(struct usbnet
*dev
,
801 struct aqc111_data
*aqc111_data
)
803 enum usb_device_speed usb_speed
= dev
->udev
->speed
;
804 u16 link_speed
= 0, usb_host
= 0;
813 switch (aqc111_data
->link_speed
) {
814 case AQ_INT_SPEED_5G
:
819 case AQ_INT_SPEED_2_5G
:
823 case AQ_INT_SPEED_1G
:
827 case AQ_INT_SPEED_100M
:
836 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_INTER_PACKET_GAP_0
,
839 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_TX_PAUSE_RESEND_T
, 3, 3, buf
);
842 case USB_SPEED_SUPER
:
858 if (dev
->net
->mtu
> 12500 && dev
->net
->mtu
<= 16334)
859 queue_num
= 2; /* For Jumbo packet 16KB */
861 memcpy(buf
, &AQC111_BULKIN_SIZE
[queue_num
], 5);
862 /* RX bulk configuration */
863 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_RX_BULKIN_QCTRL
, 5, 5, buf
);
865 /* Set high low water level */
866 if (dev
->net
->mtu
<= 4500)
868 else if (dev
->net
->mtu
<= 9500)
870 else if (dev
->net
->mtu
<= 12500)
872 else if (dev
->net
->mtu
<= 16334)
875 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_PAUSE_WATERLVL_LOW
,
877 netdev_info(dev
->net
, "Link Speed %d, USB %d", link_speed
, usb_host
);
880 static void aqc111_configure_csum_offload(struct usbnet
*dev
)
884 if (dev
->net
->features
& NETIF_F_RXCSUM
) {
885 reg8
|= SFR_RXCOE_IP
| SFR_RXCOE_TCP
| SFR_RXCOE_UDP
|
886 SFR_RXCOE_TCPV6
| SFR_RXCOE_UDPV6
;
888 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_RXCOE_CTL
, 1, 1, ®8
);
891 if (dev
->net
->features
& NETIF_F_IP_CSUM
)
892 reg8
|= SFR_TXCOE_IP
| SFR_TXCOE_TCP
| SFR_TXCOE_UDP
;
894 if (dev
->net
->features
& NETIF_F_IPV6_CSUM
)
895 reg8
|= SFR_TXCOE_TCPV6
| SFR_TXCOE_UDPV6
;
897 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_TXCOE_CTL
, 1, 1, ®8
);
900 static int aqc111_link_reset(struct usbnet
*dev
)
902 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
906 if (aqc111_data
->link
== 1) { /* Link up */
907 aqc111_configure_rx(dev
, aqc111_data
);
909 /* Vlan Tag Filter */
910 reg8
= SFR_VLAN_CONTROL_VSO
;
911 if (dev
->net
->features
& NETIF_F_HW_VLAN_CTAG_FILTER
)
912 reg8
|= SFR_VLAN_CONTROL_VFE
;
914 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_VLAN_ID_CONTROL
,
918 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BMRX_DMA_CONTROL
,
921 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BMTX_DMA_CONTROL
,
924 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_ARC_CTRL
, 1, 1, ®8
);
926 reg16
= SFR_RX_CTL_IPE
| SFR_RX_CTL_AB
;
927 aqc111_data
->rxctl
= reg16
;
928 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
, 2, ®16
);
930 reg8
= SFR_RX_PATH_READY
;
931 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_ETH_MAC_PATH
,
934 reg8
= SFR_BULK_OUT_EFF_EN
;
935 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BULK_OUT_CTRL
,
939 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
942 reg16
= SFR_MEDIUM_XGMIIMODE
| SFR_MEDIUM_FULL_DUPLEX
;
943 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
946 aqc111_configure_csum_offload(dev
);
948 aqc111_set_rx_mode(dev
->net
);
950 aqc111_read16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
953 if (dev
->net
->mtu
> 1500)
954 reg16
|= SFR_MEDIUM_JUMBO_EN
;
956 reg16
|= SFR_MEDIUM_RECEIVE_EN
| SFR_MEDIUM_RXFLOW_CTRLEN
|
957 SFR_MEDIUM_TXFLOW_CTRLEN
;
958 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
961 aqc111_data
->rxctl
|= SFR_RX_CTL_START
;
962 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
,
963 2, &aqc111_data
->rxctl
);
965 netif_carrier_on(dev
->net
);
967 aqc111_read16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
969 reg16
&= ~SFR_MEDIUM_RECEIVE_EN
;
970 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
973 aqc111_data
->rxctl
&= ~SFR_RX_CTL_START
;
974 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
,
975 2, &aqc111_data
->rxctl
);
977 reg8
= SFR_BULK_OUT_FLUSH_EN
| SFR_BULK_OUT_EFF_EN
;
978 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BULK_OUT_CTRL
,
980 reg8
= SFR_BULK_OUT_EFF_EN
;
981 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BULK_OUT_CTRL
,
984 netif_carrier_off(dev
->net
);
989 static int aqc111_reset(struct usbnet
*dev
)
991 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
994 dev
->rx_urb_size
= URB_SIZE
;
996 if (usb_device_no_sg_constraint(dev
->udev
))
999 dev
->net
->hw_features
|= AQ_SUPPORT_HW_FEATURE
;
1000 dev
->net
->features
|= AQ_SUPPORT_FEATURE
;
1001 dev
->net
->vlan_features
|= AQ_SUPPORT_VLAN_FEATURE
;
1003 /* Power up ethernet PHY */
1004 aqc111_data
->phy_cfg
= AQ_PHY_POWER_EN
;
1005 aqc111_write32_cmd(dev
, AQ_PHY_OPS
, 0, 0,
1006 &aqc111_data
->phy_cfg
);
1008 /* Set the MAC address */
1009 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_NODE_ID
, ETH_ALEN
,
1010 ETH_ALEN
, dev
->net
->dev_addr
);
1013 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BM_INT_MASK
, 1, 1, ®8
);
1016 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_SWP_CTRL
, 1, 1, ®8
);
1018 aqc111_read_cmd(dev
, AQ_ACCESS_MAC
, SFR_MONITOR_MODE
, 1, 1, ®8
);
1019 reg8
&= ~(SFR_MONITOR_MODE_EPHYRW
| SFR_MONITOR_MODE_RWLC
|
1020 SFR_MONITOR_MODE_RWMP
| SFR_MONITOR_MODE_RWWF
|
1021 SFR_MONITOR_MODE_RW_FLAG
);
1022 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_MONITOR_MODE
, 1, 1, ®8
);
1024 netif_carrier_off(dev
->net
);
1027 aqc111_set_phy_speed(dev
, aqc111_data
->autoneg
,
1028 aqc111_data
->advertised_speed
);
1033 static int aqc111_stop(struct usbnet
*dev
)
1035 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
1038 aqc111_read16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
1040 reg16
&= ~SFR_MEDIUM_RECEIVE_EN
;
1041 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
1044 aqc111_write16_cmd(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
, 2, ®16
);
1046 /* Put PHY to low power*/
1047 aqc111_data
->phy_cfg
|= AQ_LOW_POWER
;
1048 aqc111_write32_cmd(dev
, AQ_PHY_OPS
, 0, 0,
1049 &aqc111_data
->phy_cfg
);
1051 netif_carrier_off(dev
->net
);
1056 static void aqc111_rx_checksum(struct sk_buff
*skb
, u64 pkt_desc
)
1060 skb
->ip_summed
= CHECKSUM_NONE
;
1061 /* checksum error bit is set */
1062 if (pkt_desc
& AQ_RX_PD_L4_ERR
|| pkt_desc
& AQ_RX_PD_L3_ERR
)
1065 pkt_type
= pkt_desc
& AQ_RX_PD_L4_TYPE_MASK
;
1066 /* It must be a TCP or UDP packet with a valid checksum */
1067 if (pkt_type
== AQ_RX_PD_L4_TCP
|| pkt_type
== AQ_RX_PD_L4_UDP
)
1068 skb
->ip_summed
= CHECKSUM_UNNECESSARY
;
1071 static int aqc111_rx_fixup(struct usbnet
*dev
, struct sk_buff
*skb
)
1073 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
1074 struct sk_buff
*new_skb
= NULL
;
1075 u32 pkt_total_offset
= 0;
1076 u64
*pkt_desc_ptr
= NULL
;
1077 u32 start_of_descs
= 0;
1078 u32 desc_offset
= 0; /*RX Header Offset*/
1091 /* RX Descriptor Header */
1092 skb_trim(skb
, skb
->len
- sizeof(desc_hdr
));
1093 desc_hdr
= le64_to_cpup((u64
*)skb_tail_pointer(skb
));
1095 /* Check these packets */
1096 desc_offset
= (desc_hdr
& AQ_RX_DH_DESC_OFFSET_MASK
) >>
1097 AQ_RX_DH_DESC_OFFSET_SHIFT
;
1098 pkt_count
= desc_hdr
& AQ_RX_DH_PKT_CNT_MASK
;
1099 start_of_descs
= skb_len
- ((pkt_count
+ 1) * sizeof(desc_hdr
));
1101 /* self check descs position */
1102 if (start_of_descs
!= desc_offset
)
1105 /* self check desc_offset from header*/
1106 if (desc_offset
>= skb_len
)
1112 /* Get the first RX packet descriptor */
1113 pkt_desc_ptr
= (u64
*)(skb
->data
+ desc_offset
);
1115 while (pkt_count
--) {
1116 u64 pkt_desc
= le64_to_cpup(pkt_desc_ptr
);
1117 u32 pkt_len_with_padd
= 0;
1120 pkt_len
= (u32
)((pkt_desc
& AQ_RX_PD_LEN_MASK
) >>
1121 AQ_RX_PD_LEN_SHIFT
);
1122 pkt_len_with_padd
= ((pkt_len
+ 7) & 0x7FFF8);
1124 pkt_total_offset
+= pkt_len_with_padd
;
1125 if (pkt_total_offset
> desc_offset
||
1126 (pkt_count
== 0 && pkt_total_offset
!= desc_offset
)) {
1130 if (pkt_desc
& AQ_RX_PD_DROP
||
1131 !(pkt_desc
& AQ_RX_PD_RX_OK
) ||
1132 pkt_len
> (dev
->hard_mtu
+ AQ_RX_HW_PAD
)) {
1133 skb_pull(skb
, pkt_len_with_padd
);
1134 /* Next RX Packet Descriptor */
1140 new_skb
= skb_clone(skb
, GFP_ATOMIC
);
1145 new_skb
->len
= pkt_len
;
1146 skb_pull(new_skb
, AQ_RX_HW_PAD
);
1147 skb_set_tail_pointer(new_skb
, new_skb
->len
);
1149 new_skb
->truesize
= SKB_TRUESIZE(new_skb
->len
);
1150 if (aqc111_data
->rx_checksum
)
1151 aqc111_rx_checksum(new_skb
, pkt_desc
);
1153 if (pkt_desc
& AQ_RX_PD_VLAN
) {
1154 vlan_tag
= pkt_desc
>> AQ_RX_PD_VLAN_SHIFT
;
1155 __vlan_hwaccel_put_tag(new_skb
, htons(ETH_P_8021Q
),
1156 vlan_tag
& VLAN_VID_MASK
);
1159 usbnet_skb_return(dev
, new_skb
);
1163 skb_pull(skb
, pkt_len_with_padd
);
1165 /* Next RX Packet Header */
1177 static struct sk_buff
*aqc111_tx_fixup(struct usbnet
*dev
, struct sk_buff
*skb
,
1180 int frame_size
= dev
->maxpacket
;
1181 struct sk_buff
*new_skb
= NULL
;
1182 u64
*tx_desc_ptr
= NULL
;
1183 int padding_size
= 0;
1189 /*Length of actual data*/
1190 tx_desc
|= skb
->len
& AQ_TX_DESC_LEN_MASK
;
1193 tx_desc
|= ((u64
)(skb_shinfo(skb
)->gso_size
& AQ_TX_DESC_MSS_MASK
)) <<
1194 AQ_TX_DESC_MSS_SHIFT
;
1196 headroom
= (skb
->len
+ sizeof(tx_desc
)) % 8;
1198 padding_size
= 8 - headroom
;
1200 if (((skb
->len
+ sizeof(tx_desc
) + padding_size
) % frame_size
) == 0) {
1202 tx_desc
|= AQ_TX_DESC_DROP_PADD
;
1206 if (vlan_get_tag(skb
, &tci
) >= 0) {
1207 tx_desc
|= AQ_TX_DESC_VLAN
;
1208 tx_desc
|= ((u64
)tci
& AQ_TX_DESC_VLAN_MASK
) <<
1209 AQ_TX_DESC_VLAN_SHIFT
;
1212 if (!dev
->can_dma_sg
&& (dev
->net
->features
& NETIF_F_SG
) &&
1216 headroom
= skb_headroom(skb
);
1217 tailroom
= skb_tailroom(skb
);
1219 if (!(headroom
>= sizeof(tx_desc
) && tailroom
>= padding_size
)) {
1220 new_skb
= skb_copy_expand(skb
, sizeof(tx_desc
),
1221 padding_size
, flags
);
1222 dev_kfree_skb_any(skb
);
1227 if (padding_size
!= 0)
1228 skb_put_zero(skb
, padding_size
);
1229 /* Copy TX header */
1230 tx_desc_ptr
= skb_push(skb
, sizeof(tx_desc
));
1231 *tx_desc_ptr
= cpu_to_le64(tx_desc
);
1233 usbnet_set_skb_tx_stats(skb
, 1, 0);
1238 static const struct driver_info aqc111_info
= {
1239 .description
= "Aquantia AQtion USB to 5GbE Controller",
1240 .bind
= aqc111_bind
,
1241 .unbind
= aqc111_unbind
,
1242 .status
= aqc111_status
,
1243 .link_reset
= aqc111_link_reset
,
1244 .reset
= aqc111_reset
,
1245 .stop
= aqc111_stop
,
1246 .flags
= FLAG_ETHER
| FLAG_FRAMING_AX
|
1247 FLAG_AVOID_UNLINK_URBS
| FLAG_MULTI_PACKET
,
1248 .rx_fixup
= aqc111_rx_fixup
,
1249 .tx_fixup
= aqc111_tx_fixup
,
1252 #define ASIX111_DESC \
1253 "ASIX USB 3.1 Gen1 to 5G Multi-Gigabit Ethernet Adapter"
1255 static const struct driver_info asix111_info
= {
1256 .description
= ASIX111_DESC
,
1257 .bind
= aqc111_bind
,
1258 .unbind
= aqc111_unbind
,
1259 .status
= aqc111_status
,
1260 .link_reset
= aqc111_link_reset
,
1261 .reset
= aqc111_reset
,
1262 .stop
= aqc111_stop
,
1263 .flags
= FLAG_ETHER
| FLAG_FRAMING_AX
|
1264 FLAG_AVOID_UNLINK_URBS
| FLAG_MULTI_PACKET
,
1265 .rx_fixup
= aqc111_rx_fixup
,
1266 .tx_fixup
= aqc111_tx_fixup
,
1271 #define ASIX112_DESC \
1272 "ASIX USB 3.1 Gen1 to 2.5G Multi-Gigabit Ethernet Adapter"
1274 static const struct driver_info asix112_info
= {
1275 .description
= ASIX112_DESC
,
1276 .bind
= aqc111_bind
,
1277 .unbind
= aqc111_unbind
,
1278 .status
= aqc111_status
,
1279 .link_reset
= aqc111_link_reset
,
1280 .reset
= aqc111_reset
,
1281 .stop
= aqc111_stop
,
1282 .flags
= FLAG_ETHER
| FLAG_FRAMING_AX
|
1283 FLAG_AVOID_UNLINK_URBS
| FLAG_MULTI_PACKET
,
1284 .rx_fixup
= aqc111_rx_fixup
,
1285 .tx_fixup
= aqc111_tx_fixup
,
1290 static const struct driver_info trendnet_info
= {
1291 .description
= "USB-C 3.1 to 5GBASE-T Ethernet Adapter",
1292 .bind
= aqc111_bind
,
1293 .unbind
= aqc111_unbind
,
1294 .status
= aqc111_status
,
1295 .link_reset
= aqc111_link_reset
,
1296 .reset
= aqc111_reset
,
1297 .stop
= aqc111_stop
,
1298 .flags
= FLAG_ETHER
| FLAG_FRAMING_AX
|
1299 FLAG_AVOID_UNLINK_URBS
| FLAG_MULTI_PACKET
,
1300 .rx_fixup
= aqc111_rx_fixup
,
1301 .tx_fixup
= aqc111_tx_fixup
,
1304 static const struct driver_info qnap_info
= {
1305 .description
= "QNAP QNA-UC5G1T USB to 5GbE Adapter",
1306 .bind
= aqc111_bind
,
1307 .unbind
= aqc111_unbind
,
1308 .status
= aqc111_status
,
1309 .link_reset
= aqc111_link_reset
,
1310 .reset
= aqc111_reset
,
1311 .stop
= aqc111_stop
,
1312 .flags
= FLAG_ETHER
| FLAG_FRAMING_AX
|
1313 FLAG_AVOID_UNLINK_URBS
| FLAG_MULTI_PACKET
,
1314 .rx_fixup
= aqc111_rx_fixup
,
1315 .tx_fixup
= aqc111_tx_fixup
,
1318 static int aqc111_suspend(struct usb_interface
*intf
, pm_message_t message
)
1320 struct usbnet
*dev
= usb_get_intfdata(intf
);
1321 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
1322 u16 temp_rx_ctrl
= 0x00;
1326 usbnet_suspend(intf
, message
);
1328 aqc111_read16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
, 2, ®16
);
1329 temp_rx_ctrl
= reg16
;
1330 /* Stop RX operations*/
1331 reg16
&= ~SFR_RX_CTL_START
;
1332 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
, 2, ®16
);
1334 aqc111_read16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_PHYPWR_RSTCTL
,
1336 reg16
|= SFR_PHYPWR_RSTCTL_BZ
;
1337 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_PHYPWR_RSTCTL
,
1340 reg8
= SFR_BULK_OUT_EFF_EN
;
1341 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_BULK_OUT_CTRL
,
1344 temp_rx_ctrl
&= ~(SFR_RX_CTL_START
| SFR_RX_CTL_RF_WAK
|
1345 SFR_RX_CTL_AP
| SFR_RX_CTL_AM
);
1346 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
,
1350 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_ETH_MAC_PATH
,
1353 if (aqc111_data
->wol_flags
) {
1354 struct aqc111_wol_cfg wol_cfg
;
1356 memset(&wol_cfg
, 0, sizeof(struct aqc111_wol_cfg
));
1358 aqc111_data
->phy_cfg
|= AQ_WOL
;
1359 ether_addr_copy(wol_cfg
.hw_addr
, dev
->net
->dev_addr
);
1360 wol_cfg
.flags
= aqc111_data
->wol_flags
;
1362 temp_rx_ctrl
|= (SFR_RX_CTL_AB
| SFR_RX_CTL_START
);
1363 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
,
1366 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_BM_INT_MASK
,
1368 reg8
= SFR_BMRX_DMA_EN
;
1369 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_BMRX_DMA_CONTROL
,
1371 reg8
= SFR_RX_PATH_READY
;
1372 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_ETH_MAC_PATH
,
1375 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_BULKIN_QCTRL
,
1378 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
,
1379 SFR_RX_BULKIN_QTIMR_LOW
, 1, 1, ®8
);
1380 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
,
1381 SFR_RX_BULKIN_QTIMR_HIGH
, 1, 1, ®8
);
1383 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_BULKIN_QSIZE
,
1385 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_BULKIN_QIFG
,
1388 aqc111_read16_cmd_nopm(dev
, AQ_ACCESS_MAC
,
1389 SFR_MEDIUM_STATUS_MODE
, 2, ®16
);
1390 reg16
|= SFR_MEDIUM_RECEIVE_EN
;
1391 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
,
1392 SFR_MEDIUM_STATUS_MODE
, 2, ®16
);
1394 aqc111_write_cmd(dev
, AQ_WOL_CFG
, 0, 0,
1395 WOL_CFG_SIZE
, &wol_cfg
);
1396 aqc111_write32_cmd(dev
, AQ_PHY_OPS
, 0, 0,
1397 &aqc111_data
->phy_cfg
);
1399 aqc111_data
->phy_cfg
|= AQ_LOW_POWER
;
1400 aqc111_write32_cmd(dev
, AQ_PHY_OPS
, 0, 0,
1401 &aqc111_data
->phy_cfg
);
1403 /* Disable RX path */
1404 aqc111_read16_cmd_nopm(dev
, AQ_ACCESS_MAC
,
1405 SFR_MEDIUM_STATUS_MODE
, 2, ®16
);
1406 reg16
&= ~SFR_MEDIUM_RECEIVE_EN
;
1407 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
,
1408 SFR_MEDIUM_STATUS_MODE
, 2, ®16
);
1414 static int aqc111_resume(struct usb_interface
*intf
)
1416 struct usbnet
*dev
= usb_get_intfdata(intf
);
1417 struct aqc111_data
*aqc111_data
= dev
->driver_priv
;
1421 netif_carrier_off(dev
->net
);
1423 /* Power up ethernet PHY */
1424 aqc111_data
->phy_cfg
|= AQ_PHY_POWER_EN
;
1425 aqc111_data
->phy_cfg
&= ~AQ_LOW_POWER
;
1426 aqc111_data
->phy_cfg
&= ~AQ_WOL
;
1429 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_BM_INT_MASK
,
1431 /* Configure RX control register => start operation */
1432 reg16
= aqc111_data
->rxctl
;
1433 reg16
&= ~SFR_RX_CTL_START
;
1434 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
, 2, ®16
);
1436 reg16
|= SFR_RX_CTL_START
;
1437 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_RX_CTL
, 2, ®16
);
1439 aqc111_set_phy_speed(dev
, aqc111_data
->autoneg
,
1440 aqc111_data
->advertised_speed
);
1442 aqc111_read16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
1444 reg16
|= SFR_MEDIUM_RECEIVE_EN
;
1445 aqc111_write16_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_MEDIUM_STATUS_MODE
,
1447 reg8
= SFR_RX_PATH_READY
;
1448 aqc111_write_cmd_nopm(dev
, AQ_ACCESS_MAC
, SFR_ETH_MAC_PATH
,
1451 aqc111_write_cmd(dev
, AQ_ACCESS_MAC
, SFR_BMRX_DMA_CONTROL
, 1, 1, ®8
);
1453 return usbnet_resume(intf
);
1456 #define AQC111_USB_ETH_DEV(vid, pid, table) \
1457 USB_DEVICE_INTERFACE_CLASS((vid), (pid), USB_CLASS_VENDOR_SPEC), \
1458 .driver_info = (unsigned long)&(table) \
1461 USB_DEVICE_AND_INTERFACE_INFO((vid), (pid), \
1463 USB_CDC_SUBCLASS_ETHERNET, \
1464 USB_CDC_PROTO_NONE), \
1465 .driver_info = (unsigned long)&(table),
1467 static const struct usb_device_id products
[] = {
1468 {AQC111_USB_ETH_DEV(0x2eca, 0xc101, aqc111_info
)},
1469 {AQC111_USB_ETH_DEV(0x0b95, 0x2790, asix111_info
)},
1470 {AQC111_USB_ETH_DEV(0x0b95, 0x2791, asix112_info
)},
1471 {AQC111_USB_ETH_DEV(0x20f4, 0xe05a, trendnet_info
)},
1472 {AQC111_USB_ETH_DEV(0x1c04, 0x0015, qnap_info
)},
1475 MODULE_DEVICE_TABLE(usb
, products
);
1477 static struct usb_driver aq_driver
= {
1479 .id_table
= products
,
1480 .probe
= usbnet_probe
,
1481 .suspend
= aqc111_suspend
,
1482 .resume
= aqc111_resume
,
1483 .disconnect
= usbnet_disconnect
,
1486 module_usb_driver(aq_driver
);
1488 MODULE_DESCRIPTION("Aquantia AQtion USB to 5/2.5GbE Controllers");
1489 MODULE_LICENSE("GPL");