]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Rework link state tracking and TX/RX MAC configuration.
authoryongari <yongari@FreeBSD.org>
Wed, 7 Dec 2011 21:29:51 +0000 (21:29 +0000)
committeryongari <yongari@FreeBSD.org>
Wed, 7 Dec 2011 21:29:51 +0000 (21:29 +0000)
commit3185636e8556df8d59e8fb523b111b4df478144e
treee9f61c3ac4e29b6220bdc812a7c3f3e4525110c9
parentcac815ea0554d211072533625da9c9fa4ac5da7d
Rework link state tracking and TX/RX MAC configuration.
 o Do not report link status if driver is not running.
 o TX/RX MAC configuration should be done with resolved speed,
   duplex and flow control after establishing a link so it can't
   be done in driver initialization routine.
   Move the configuration to miibus_statchg callback which will be
   called whenever any link state change is detected.
   At this moment, flow-control is not enabled yet mainly because
   I was not able to set correct flow control parameters to
   generate TX pause frames.
 o Now TX/RX MAC is enabled only when a valid link is detected.
   Rearragnge hardware initialization routine a bit to leave
   enabling MAC to miibus_statchg callback.  In order to that,
   TX/RX DMA engine is enabled in et_init_locked().
 o Introduce ET_FLAG_LINK flag to track current link state.
 o Introduce ET_FLAG_FASTETHER flag to mark whether controller is
   fast ethernet.  This flag is checked in miibus_statchg callback
   to know whether PHY established a valid link.
 o In et_stop(), TX/RX MAC is explicitly disabled instead of
   relying on et_reset().  And move et_reset() from et_stop() to
   controller initialization.  Controler reset is not required here
   and it would also clear critial registers(i.e station address,
   RX filter configuration, WOL etc) that are required to make WOL
   work.
 o Switching to current media is done in et_init_locked() after
   setting IFF_DRV_RUNNING flag.  This should ensure reliable
   auto-negotiation/manual link establishment.
 o In et_start_locked(), check whether driver got a valid link
   before trying to send frames.
 o Remove checking a link in et_tick() as this is done by
   miibus_statchg callback.
sys/dev/et/if_et.c
sys/dev/et/if_etvar.h