Index: UniNEnet.cpp =================================================================== RCS file: /CVSRoot/IO/Drivers/Ethernet/AppleGMACEthernet/UniNEnet.cpp,v retrieving revision 1.11 retrieving revision 1.11.6.1 diff -u -d -b -w -r1.11 -r1.11.6.1 --- UniNEnet.cpp 2001/07/24 22:40:31 1.11 +++ UniNEnet.cpp 2001/08/22 17:30:28 1.11.6.1 @@ -37,6 +37,11 @@ #include "UniNEnetMII.h" #include +extern "C" +{ + extern boolean_t ml_probe_read( vm_offset_t physAddr, unsigned int *val ); +} + #define super IOEthernetController @@ -626,7 +631,8 @@ bool UniNEnet::wakeUp() { bool rc = false; - UInt32 gemReg; + bool regAvail; + UInt32 gemReg = 0; ELG( this, 0, 'Wake', "UniNEnet::wakeUp" ); @@ -649,9 +655,30 @@ // Set PHY and Cell to full power: callPlatformFunction( "EnableUniNEthernetClock", true, (void*)true, 0, 0, 0 ); - OSSynchronizeIO(); - } + if ( ioMapEnet ) // Probe register access if able: + { + IOSleep( 10 ); + + regAvail = ml_probe_read( (vm_offset_t)&fpRegsPhys->Status, + &(unsigned int)gemReg ); + + if ( !regAvail ) // try again if cell clock disabled: + { + IOLog( "UniNEnet::wakeUp - ethernet cell's clock is disabled.\n" ); + callPlatformFunction( "EnableUniNEthernetClock", true, (void*)true, 0, 0, 0 ); + IOSleep( 10 ); + regAvail = ml_probe_read( (vm_offset_t)&fpRegsPhys->Status, + &(unsigned int)gemReg ); + if ( !regAvail ) // return FALSE if cell clock still disabled. + { + IOLog( "UniNEnet::wakeUp - ethernet cell's clock is still disabled.\n" ); + goto wakeUp_exit; + }/* end IF still disabled */ + }/* end IF need to try again. */ + }/* end IF can probe UniN register access */ + }/* end IF builtin ethernet */ + /* BUS MASTER, MEM I/O Space, MEM WR & INV */ nub->configWrite32( 0x04, 0x16 ); // write to the Config space @@ -669,6 +696,8 @@ fpRegs = (GMAC_Registers*)ioMapEnet->getVirtualAddress(); g.pRegs = (UInt32)fpRegs; ELG( ioMapEnet, fpRegs, 'Adrs', "start - base eNet addr" ); + // for ml_probe_read on Wake: + fpRegsPhys = (GMAC_Registers*)ioMapEnet->getPhysicalAddress(); } if ( !initRxRing() || !initTxRing() ) Index: UniNEnet.h =================================================================== RCS file: /CVSRoot/IO/Drivers/Ethernet/AppleGMACEthernet/UniNEnet.h,v retrieving revision 1.10 retrieving revision 1.10.4.1 diff -u -d -b -w -r1.10 -r1.10.4.1 --- UniNEnet.h 2001/08/02 16:20:19 1.10 +++ UniNEnet.h 2001/08/22 17:30:29 1.10.4.1 @@ -139,6 +139,7 @@ globals *fpGlobals; // ptr to ELG structure volatile GMAC_Registers *fpRegs; + GMAC_Registers *fpRegsPhys; // for ml_probe_read IOPCIDevice * nub; IOMemoryMap * ioMapEnet; volatile IOPPCAddress ioBaseEnet;