diff --git a/src/add-ons/kernel/drivers/network/usb_asix/ASIXVendorRequests.h b/src/add-ons/kernel/drivers/network/usb_asix/ASIXVendorRequests.h index d383368a45..535a60216d 100644 --- a/src/add-ons/kernel/drivers/network/usb_asix/ASIXVendorRequests.h +++ b/src/add-ons/kernel/drivers/network/usb_asix/ASIXVendorRequests.h @@ -66,7 +66,11 @@ enum ASIXRXControl { RXCTL_MULTICAST = 0x0010, RXCTL_AP = 0x0020, // AX88772-178 RXCTL_START = 0x0080, - RXCTL_USB_MFB = 0x0100 // AX88772-178 + RXCTL_USB_MFB_2048 = 0x0000, // AX88772-178 + RXCTL_USB_MFB_4096 = 0x0100, // AX88772-178 + RXCTL_USB_MFB_8192 = 0x0200, // AX88772-178 + RXCTL_USB_MFB_MAX = 0x0300, // aka 16384 + mask AX88772-178 + RXCTL_LOOPBACK = 0x1000, // AX88772A / AX88772B }; diff --git a/src/add-ons/kernel/drivers/network/usb_asix/AX88772Device.cpp b/src/add-ons/kernel/drivers/network/usb_asix/AX88772Device.cpp index 8bb1e4b9a7..66dba422cd 100644 --- a/src/add-ons/kernel/drivers/network/usb_asix/AX88772Device.cpp +++ b/src/add-ons/kernel/drivers/network/usb_asix/AX88772Device.cpp @@ -157,9 +157,18 @@ enum AX88772_BBState { LINK_STATE_MDINT = 0x08 }; +// RX Control Register bits (772B) +enum ASIX772RXControl { + RXCTL_HDR_TYPE_0 = 0x0000, + RXCTL_HDR_TYPE_1 = 0x0100, + RXCTL_HDR_IPALIGN = 0x0200, + RXCTL_ADD_CHKSUM = 0x0400, +}; + // EEPROM Map. enum AX88772B_EEPROM { - EEPROM_772B_NODE_ID = 0x04 + EEPROM_772B_NODE_ID = 0x04, + EEPROM_772B_PHY_PWRCFG = 0x18 }; enum AX88772B_MFB { @@ -511,8 +520,11 @@ AX88772Device::StartDevice() TRACE_ALWAYS("Error of writing frame burst:%#010x\n", result); return result; } - - rxcontrol = RXCTL_USB_MFB; + rxcontrol = RXCTL_HDR_TYPE_1; + } else { + // TODO: FreeBSD documents this to speed up xfers, I don't + // have the hardware to test however. + //rxcontrol = RXCTL_USB_MFB_MAX; } rxcontrol |= RXCTL_START | RXCTL_BROADCAST;