1- /* $NetBSD: if_ure.c,v 1.60 2024/05/12 17:17:56 christos Exp $ */
1+ /* $NetBSD: if_ure.c,v 1.61 2026/01/24 23:11:41 jmcneill Exp $ */
22/* $OpenBSD: if_ure.c,v 1.10 2018/11/02 21:32:30 jcs Exp $ */
33
44/*-
3030/* RealTek RTL8152/RTL8153 10/100/Gigabit USB Ethernet device */
3131
3232#include <sys/cdefs.h>
33- __KERNEL_RCSID (0 , "$NetBSD: if_ure.c,v 1.60 2024/05/12 17:17:56 christos Exp $" );
33+ __KERNEL_RCSID (0 , "$NetBSD: if_ure.c,v 1.61 2026/01/24 23:11:41 jmcneill Exp $" );
3434
3535#ifdef _KERNEL_OPT
3636#include "opt_usb.h"
@@ -76,7 +76,9 @@ static const struct usb_devno ure_devs[] = {
7676 { USB_VENDOR_TPLINK , USB_PRODUCT_TPLINK_UE300 },
7777};
7878
79- #define URE_BUFSZ (16 * 1024)
79+ #define URE_TX_BUFSZ (16 * 1024)
80+ #define URE_RX_BUFSZ_16K (16 * 1024)
81+ #define URE_RX_BUFSZ_32K (32 * 1024)
8082
8183static void ure_reset (struct usbnet * );
8284static uint32_t ure_txcsum (struct mbuf * );
@@ -584,7 +586,7 @@ ure_rtl8153_init(struct usbnet *un)
584586 ~URE_LED_MODE_MASK );
585587
586588 if ((un -> un_flags & URE_FLAG_VER_5C10 ) &&
587- un -> un_udev -> ud_speed != USB_SPEED_SUPER )
589+ un -> un_udev -> ud_speed < USB_SPEED_SUPER )
588590 val = URE_LPM_TIMER_500MS ;
589591 else
590592 val = URE_LPM_TIMER_500US ;
@@ -765,7 +767,7 @@ ure_init_fifo(struct usbnet *un)
765767 /* Configure Rx FIFO threshold and coalescing. */
766768 ure_write_4 (un , URE_PLA_RXFIFO_CTRL0 , URE_MCU_TYPE_PLA ,
767769 URE_RXFIFO_THR1_NORMAL );
768- if (un -> un_udev -> ud_speed = = USB_SPEED_FULL ) {
770+ if (un -> un_udev -> ud_speed < = USB_SPEED_FULL ) {
769771 rx_fifo1 = URE_RXFIFO_THR2_FULL ;
770772 rx_fifo2 = URE_RXFIFO_THR3_FULL ;
771773 } else {
@@ -810,6 +812,9 @@ ure_attach(device_t parent, device_t self, void *aux)
810812 aprint_normal_dev (self , "%s\n" , devinfop );
811813 usbd_devinfo_free (devinfop );
812814
815+ if (uaa -> uaa_product == USB_PRODUCT_REALTEK_RTL8152 )
816+ un -> un_flags |= URE_FLAG_8152 ;
817+
813818 un -> un_dev = self ;
814819 un -> un_udev = dev ;
815820 un -> un_sc = un ;
@@ -818,8 +823,13 @@ ure_attach(device_t parent, device_t self, void *aux)
818823 un -> un_tx_xfer_flags = USBD_FORCE_SHORT_XFER ;
819824 un -> un_rx_list_cnt = URE_RX_LIST_CNT ;
820825 un -> un_tx_list_cnt = URE_TX_LIST_CNT ;
821- un -> un_rx_bufsz = URE_BUFSZ ;
822- un -> un_tx_bufsz = URE_BUFSZ ;
826+ un -> un_tx_bufsz = URE_TX_BUFSZ ;
827+ if (un -> un_udev -> ud_speed < USB_SPEED_SUPER ||
828+ (un -> un_flags & URE_FLAG_8152 ) != 0 ) {
829+ un -> un_rx_bufsz = URE_RX_BUFSZ_16K ;
830+ } else {
831+ un -> un_rx_bufsz = URE_RX_BUFSZ_32K ;
832+ }
823833
824834#define URE_CONFIG_NO 1 /* XXX */
825835 error = usbd_set_config_no (dev , URE_CONFIG_NO , 1 );
@@ -829,9 +839,6 @@ ure_attach(device_t parent, device_t self, void *aux)
829839 return ; /* XXX */
830840 }
831841
832- if (uaa -> uaa_product == USB_PRODUCT_REALTEK_RTL8152 )
833- un -> un_flags |= URE_FLAG_8152 ;
834-
835842#define URE_IFACE_IDX 0 /* XXX */
836843 error = usbd_device2interface_handle (dev , URE_IFACE_IDX , & un -> un_iface );
837844 if (error ) {
0 commit comments