From 8fd431a1b3bd4ade60e7f0263aae78436b3f7704 Mon Sep 17 00:00:00 2001 From: Mieze Date: Fri, 23 Apr 2021 21:56:35 +0200 Subject: [PATCH] Version 2.4.2d0 - Reworked auto-negotiation to fix issue with 100 MBit/s. --- RealtekRTL8111.xcodeproj/project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 69909 -> 51521 bytes RealtekRTL8111/RealtekRTL8111-Info.plist | 2 - RealtekRTL8111/RealtekRTL8111.cpp | 50 +++----- RealtekRTL8111/RealtekRTL8111.hpp | 1 - RealtekRTL8111/RealtekRTL8111Hardware.cpp | 116 ++++++------------ 6 files changed, 53 insertions(+), 120 deletions(-) diff --git a/RealtekRTL8111.xcodeproj/project.pbxproj b/RealtekRTL8111.xcodeproj/project.pbxproj index 90f7f3a..996a8e1 100644 --- a/RealtekRTL8111.xcodeproj/project.pbxproj +++ b/RealtekRTL8111.xcodeproj/project.pbxproj @@ -255,7 +255,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = "$(MODULE_VERSION)"; MODULE_NAME = com.insanelymac.RealtekRTL8111; - MODULE_VERSION = 2.4.0; + MODULE_VERSION = 2.4.2d0; PRODUCT_BUNDLE_IDENTIFIER = "com.insanelymac.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = RealtekRTL8111; RUN_CLANG_STATIC_ANALYZER = YES; @@ -285,7 +285,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = "$(MODULE_VERSION)"; MODULE_NAME = com.insanelymac.RealtekRTL8111; - MODULE_VERSION = 2.4.0; + MODULE_VERSION = 2.4.2d0; PRODUCT_BUNDLE_IDENTIFIER = "com.insanelymac.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = RealtekRTL8111; SDKROOT = macosx; diff --git a/RealtekRTL8111.xcodeproj/project.xcworkspace/xcuserdata/laura.xcuserdatad/UserInterfaceState.xcuserstate b/RealtekRTL8111.xcodeproj/project.xcworkspace/xcuserdata/laura.xcuserdatad/UserInterfaceState.xcuserstate index 97ff4077678f690a74f33bba73ff8e97fb504b68..4671a9a0ecff1671b11e68d31b3985541fbab4b6 100644 GIT binary patch delta 23194 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 MxbmM5%{M#!KUs}A?EnA( delta 29049 zcmaf*2S60Z_xN{b@3!yJ(Yphrh)9txMN~kFq6kR0fhb5-6tS1viJ*W|7h5#;*tsFVDDnfu@%^6Yzwv(+lFn&c4G&ygV-VL6!sBz8v7Lc z3_FW`f!)Av8n9c~m)KqGJM1C$J@yFu1$&15ieosA1DwEBIE`E2mbewJ#dWwI_rSa2 zp12q8jr-vtcqkr*hvU(BA3O$6zz5<<_z-+3J`5j@=is^c2s|Gz!^hy0@hSLJd>TF- zpMi^b6W)xs;1b@7FTfXq)4=c+kjEYxTsH|0Xs*WnX%1Py->a6lmd8xXo{8d4!5LLLUrz%p_M-`_s^ivH`C8-9f z(p6ciA*$i35vozD(W+uqnW|h>p_-_gqMELnrGly|)m&Abs$SKkl2i*-OH|8LD^#mh z@2fVbHmkO&cB=NM_Nfl24y%r-PO46;K2@DnT~J+CeXjaKbxUO0jV)sLzt zs%NU-Re!4fR{g66YPCU4t2wnsZKbwVcTnrpj%sJMo4SkIQ|+VnQwOTMtHab0>fY*T zb*#Fty1#m$Iz^qP&QuRp4^!u=N2&|dMe0)ZSoL^yrFyb@ntG;MRL@q=QP-;Hs~goV z>ILe>>ZR)C>Q(Bs>haFS>>fP$S>JQb2)JN4P)P|4LpQz8M&#Nz~ud1)BZ>n#r z@2bC1KTvg)K>X#%=sz{1tNrAK^ZAg1kOFEF9NLSLG>`Ho*zGMIy zOooy@$X;X=8AHaC31lLfOs0~VC$fM+^T~Kk^#%2a`hj{({Yd>p{Y*Wfo>G5M z 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 enableCSO6 - enableEEE - enableTSO4 enableTSO6 diff --git a/RealtekRTL8111/RealtekRTL8111.cpp b/RealtekRTL8111/RealtekRTL8111.cpp index 88afacb..1a4c369 100644 --- a/RealtekRTL8111/RealtekRTL8111.cpp +++ b/RealtekRTL8111/RealtekRTL8111.cpp @@ -71,11 +71,12 @@ bool RTL8111::init(OSDictionary *properties) mtu = ETH_DATA_LEN; powerState = 0; - speed = SPEED_1000; + speed = 0; duplex = DUPLEX_FULL; autoneg = AUTONEG_ENABLE; flowCtl = kFlowControlOff; linuxData.eee_adv_t = 0; + linuxData.eee_enabled = 1; eeeCap = 0; linuxData.aspm = 0; linuxData.s0_magic_packet = 0; @@ -348,7 +349,7 @@ IOReturn RTL8111::enable(IONetworkInterface *netif) DebugLog("[RealtekRTL8111]: No medium selected. Falling back to autonegotiation.\n"); selectedMedium = mediumTable[MEDIUM_INDEX_AUTO]; } - selectMedium(selectedMedium); + setCurrentMedium(selectedMedium); enableRTL8111(); /* We have to enable the interrupt because we are using a msi interrupt. */ @@ -936,8 +937,9 @@ IOReturn RTL8111::selectMedium(const IONetworkMedium *medium) DebugLog("selectMedium() ===>\n"); if (medium) { + autoneg = AUTONEG_DISABLE; flowCtl = kFlowControlOff; - linuxData.eee_adv_t = 0; + linuxData.eee_enabled = 0; switch (medium->getIndex()) { case MEDIUM_INDEX_AUTO: @@ -945,85 +947,74 @@ IOReturn RTL8111::selectMedium(const IONetworkMedium *medium) speed = 0; duplex = DUPLEX_FULL; flowCtl = kFlowControlOn; - linuxData.eee_adv_t = eeeCap; + linuxData.eee_enabled = 1; break; case MEDIUM_INDEX_10HD: - autoneg = AUTONEG_DISABLE; speed = SPEED_10; duplex = DUPLEX_HALF; break; case MEDIUM_INDEX_10FD: - autoneg = AUTONEG_ENABLE; speed = SPEED_10; duplex = DUPLEX_FULL; break; case MEDIUM_INDEX_100HD: - autoneg = AUTONEG_DISABLE; speed = SPEED_100; duplex = DUPLEX_HALF; break; case MEDIUM_INDEX_100FD: - autoneg = AUTONEG_ENABLE; speed = SPEED_100; duplex = DUPLEX_FULL; break; case MEDIUM_INDEX_100FDFC: - autoneg = AUTONEG_ENABLE; speed = SPEED_100; duplex = DUPLEX_FULL; flowCtl = kFlowControlOn; break; case MEDIUM_INDEX_1000FD: - autoneg = AUTONEG_ENABLE; speed = SPEED_1000; duplex = DUPLEX_FULL; break; case MEDIUM_INDEX_1000FDFC: - autoneg = AUTONEG_ENABLE; speed = SPEED_1000; duplex = DUPLEX_FULL; flowCtl = kFlowControlOn; break; case MEDIUM_INDEX_100FDEEE: - autoneg = AUTONEG_ENABLE; speed = SPEED_100; duplex = DUPLEX_FULL; - linuxData.eee_adv_t = eeeCap; + linuxData.eee_enabled = 1; break; case MEDIUM_INDEX_100FDFCEEE: - autoneg = AUTONEG_ENABLE; speed = SPEED_100; duplex = DUPLEX_FULL; flowCtl = kFlowControlOn; - linuxData.eee_adv_t = eeeCap; + linuxData.eee_enabled = 1; break; case MEDIUM_INDEX_1000FDEEE: - autoneg = AUTONEG_ENABLE; speed = SPEED_1000; duplex = DUPLEX_FULL; - linuxData.eee_adv_t = eeeCap; + linuxData.eee_enabled = 1; break; case MEDIUM_INDEX_1000FDFCEEE: - autoneg = AUTONEG_ENABLE; speed = SPEED_1000; duplex = DUPLEX_FULL; flowCtl = kFlowControlOn; - linuxData.eee_adv_t = eeeCap; + linuxData.eee_enabled = 1; break; } - setPhyMedium(); setCurrentMedium(medium); + restartRTL8111(); } DebugLog("selectMedium() <===\n"); @@ -1103,7 +1094,6 @@ void RTL8111::getParams() { OSDictionary *params; OSNumber *intrMit; - OSBoolean *enableEEE; OSBoolean *poll; OSBoolean *tso4; OSBoolean *tso6; @@ -1122,15 +1112,6 @@ void RTL8111::getParams() DebugLog("[RealtekRTL8111]: PCIe ASPM support %s.\n", disableASPM ? offName : onName); - enableEEE = OSDynamicCast(OSBoolean, params->getObject(kEnableEeeName)); - - if (enableEEE) - linuxData.eee_enabled = (enableEEE->getValue()) ? 1 : 0; - else - linuxData.eee_enabled = 0; - - IOLog("[RealtekRTL8111]: EEE support %s.\n", linuxData.eee_enabled ? onName : offName); - poll = OSDynamicCast(OSBoolean, params->getObject(kEnableRxPollName)); rxPoll = (poll) ? poll->getValue() : false; @@ -1173,7 +1154,6 @@ void RTL8111::getParams() } } else { disableASPM = true; - linuxData.eee_enabled = 1; rxPoll = true; enableTSO4 = true; enableTSO6 = true; @@ -1822,6 +1802,8 @@ void RTL8111::checkLinkStatus() UInt16 newIntrMitigate = 0x5f51; UInt8 currLinkState; + DebugLog("Link change interrupt: Check link status.\n"); + if (tp->mcfg == CFG_METHOD_11) rtl8168dp_10mbps_gphy_para(tp); @@ -2235,9 +2217,9 @@ void RTL8111::getChecksumResult(mbuf_t m, UInt32 status1, UInt32 status2) static const char *speed1GName = "1-Gigabit"; static const char *speed100MName = "100-Megabit"; static const char *speed10MName = "10-Megabit"; -static const char *duplexFullName = "Full-duplex"; -static const char *duplexHalfName = "Half-duplex"; -static const char *offFlowName = "No flow-control"; +static const char *duplexFullName = "full-duplex"; +static const char *duplexHalfName = "half-duplex"; +static const char *offFlowName = "no flow-control"; static const char *onFlowName = "flow-control"; static const char* eeeNames[kEEETypeCount] = { diff --git a/RealtekRTL8111/RealtekRTL8111.hpp b/RealtekRTL8111/RealtekRTL8111.hpp index 9e67629..5100e6f 100644 --- a/RealtekRTL8111/RealtekRTL8111.hpp +++ b/RealtekRTL8111/RealtekRTL8111.hpp @@ -174,7 +174,6 @@ enum }; #define kParamName "Driver Parameters" -#define kEnableEeeName "enableEEE" #define kEnableCSO6Name "enableCSO6" #define kEnableTSO4Name "enableTSO4" #define kEnableTSO6Name "enableTSO6" diff --git a/RealtekRTL8111/RealtekRTL8111Hardware.cpp b/RealtekRTL8111/RealtekRTL8111Hardware.cpp index 7cd7f0b..3f8734d 100644 --- a/RealtekRTL8111/RealtekRTL8111Hardware.cpp +++ b/RealtekRTL8111/RealtekRTL8111Hardware.cpp @@ -208,10 +208,10 @@ bool RTL8111::initRTL8111() tp->HwPkgDet = (tp->HwPkgDet >> 3) & 0x0F; break; } - +/* if (HW_DASH_SUPPORT_TYPE_3(tp) && tp->HwPkgDet == 0x06) tp->eee_enabled = 0; - +*/ switch (tp->mcfg) { case CFG_METHOD_21: case CFG_METHOD_22: @@ -1587,9 +1587,11 @@ void RTL8111::setPhyMedium() struct rtl8168_private *tp = &linuxData; int autoNego = 0; int gigaCtrl = 0; - int force = 0; - int use_default = 0; + if ((speed != SPEED_1000) && (speed != SPEED_100) && (speed != SPEED_10)) { + duplex = DUPLEX_FULL; + autoneg = AUTONEG_ENABLE; + } if (tp->mcfg == CFG_METHOD_29 || tp->mcfg == CFG_METHOD_30 || tp->mcfg == CFG_METHOD_31 || tp->mcfg == CFG_METHOD_32) { /* Disable Giga Lite. */ @@ -1602,94 +1604,46 @@ void RTL8111::setPhyMedium() rtl8168_mdio_write(tp, 0x1F, 0x0A40); rtl8168_mdio_write(tp, 0x1F, 0x0000); } - if ((speed != SPEED_1000) && (speed != SPEED_100) && (speed != SPEED_10)) { - speed = SPEED_1000; - duplex = DUPLEX_FULL; - autoneg = AUTONEG_ENABLE; - use_default = 1; - } autoNego = rtl8168_mdio_read(tp, MII_ADVERTISE); autoNego &= ~(ADVERTISE_10HALF | ADVERTISE_10FULL | ADVERTISE_100HALF | ADVERTISE_100FULL | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); gigaCtrl = rtl8168_mdio_read(tp, MII_CTRL1000); gigaCtrl &= ~(ADVERTISE_1000HALF | ADVERTISE_1000FULL); - if (tp->HwHasWrRamCodeToMicroP == TRUE) { - if ((tp->eee_enabled) && (linuxData.eee_adv_t != 0)) { - rtl8168_enable_EEE(tp); - DebugLog("Enable EEE support.\n"); + if (autoneg == AUTONEG_ENABLE) { + /* The default medium has been selected. */ + gigaCtrl |= ADVERTISE_1000FULL; + autoNego |= ADVERTISE_100HALF | ADVERTISE_100FULL | ADVERTISE_10HALF | ADVERTISE_10FULL; + } else if (speed == SPEED_1000) { + gigaCtrl |= ADVERTISE_1000FULL; + } else if (speed == SPEED_100) { + if (duplex == DUPLEX_HALF) { + autoNego |= ADVERTISE_100HALF; } else { - rtl8168_disable_EEE(tp); - DebugLog("Disable EEE support.\n"); + autoNego |= ADVERTISE_100FULL; } - } - if (autoneg == AUTONEG_ENABLE) { - /* n-way force */ - if (speed == SPEED_1000) { - if (use_default) { - /* The default medium has been selected. */ - gigaCtrl |= ADVERTISE_1000HALF | ADVERTISE_1000FULL; - autoNego |= ADVERTISE_100HALF | ADVERTISE_100FULL | ADVERTISE_10HALF | ADVERTISE_10FULL; - } else { - if (duplex == DUPLEX_HALF) { - gigaCtrl |= ADVERTISE_1000HALF; - } else { - gigaCtrl |= ADVERTISE_1000FULL; - } - } - } else if (speed == SPEED_100) { - if (duplex == DUPLEX_HALF) { - autoNego |= ADVERTISE_100HALF; - } else { - autoNego |= ADVERTISE_100FULL; - } - } else { /* speed == SPEED_10 */ - if (duplex == DUPLEX_HALF) { - autoNego |= ADVERTISE_10HALF; - } else { - autoNego |= ADVERTISE_10FULL; - } + } else { /* speed == SPEED_10 */ + if (duplex == DUPLEX_HALF) { + autoNego |= ADVERTISE_10HALF; + } else { + autoNego |= ADVERTISE_10FULL; } + } + /* Set flow control support. */ + if (flowCtl == kFlowControlOn) + autoNego |= ADVERTISE_PAUSE_CAP|ADVERTISE_PAUSE_ASYM; - /* Set flow control support. */ - if (flowCtl == kFlowControlOn) - autoNego |= ADVERTISE_PAUSE_CAP|ADVERTISE_PAUSE_ASYM; - - tp->phy_auto_nego_reg = autoNego; - tp->phy_1000_ctrl_reg = gigaCtrl; - - /* Setup EEE advertisement. */ - if (eeeCap) { - if ((tp->mcfg >= CFG_METHOD_14) && (tp->mcfg < CFG_METHOD_21)) { - rtl8168_mdio_write(&linuxData, 0x0D, 0x0007); - rtl8168_mdio_write(&linuxData, 0x0E, 0x003C); - rtl8168_mdio_write(&linuxData, 0x0D, 0x4007); - rtl8168_mdio_write(&linuxData, 0x0E, linuxData.eee_adv_t); - rtl8168_mdio_write(tp, 0x1F, 0x0000); - } - } - rtl8168_mdio_write(tp, 0x1f, 0x0000); - rtl8168_mdio_write(tp, MII_ADVERTISE, autoNego); - rtl8168_mdio_write(tp, MII_CTRL1000, gigaCtrl); - rtl8168_mdio_write(tp, 0x1f, 0x0000); - rtl8168_mdio_write(tp, MII_BMCR, BMCR_RESET | BMCR_ANENABLE | BMCR_ANRESTART); - mdelay(20); - } else { - /* true force */ - if ((speed == SPEED_10) && (duplex == DUPLEX_HALF)) { - force = BMCR_SPEED10; - } else if ((speed == SPEED_10) && (duplex == DUPLEX_FULL)) { - force = BMCR_SPEED10 | BMCR_FULLDPLX; - } else if ((speed == SPEED_100) && (duplex == DUPLEX_HALF)) { - force = BMCR_SPEED100; - } else if ((speed == SPEED_100) && (duplex == DUPLEX_FULL)) { - force = BMCR_SPEED100 | BMCR_FULLDPLX; - } + tp->phy_auto_nego_reg = autoNego; + tp->phy_1000_ctrl_reg = gigaCtrl; - rtl8168_mdio_write(tp, 0x1f, 0x0000); - rtl8168_mdio_write(tp, MII_BMCR, force); - } - tp->autoneg = autoneg; + rtl8168_mdio_write(tp, 0x1f, 0x0000); + rtl8168_mdio_write(tp, MII_ADVERTISE, autoNego); + rtl8168_mdio_write(tp, MII_CTRL1000, gigaCtrl); + rtl8168_mdio_write(tp, 0x1f, 0x0000); + rtl8168_mdio_write(tp, MII_BMCR, BMCR_RESET | BMCR_ANENABLE | BMCR_ANRESTART); + mdelay(20); + + tp->autoneg = AUTONEG_ENABLE; tp->speed = speed; tp->duplex = duplex;