cvs commit: src/sys/dev/hme if_hme.c if_hmevar.h

Marius Strobl marius at
Sat Sep 15 03:45:35 PDT 2007

marius      2007-09-15 10:45:34 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_6)
    sys/dev/hme          if_hme.c if_hmevar.h 
  MFC: if_hme.c 1.50, 1.51, 1.52, 1.53; if_hmevar.h 1.10
  o Revised MII support:
    - In hme_stop() mask all interrupts.
    - In hme_eint() print MIF register contents on MIF interrupts.
    - In hme_mifinit() don't bother to preserve the previous MIF config.
      This was mainly done in order to preserve the PHY select bit (external
      or internal PHY) but which only needs to be set as appropriate when
      reading from or writing to the desired PHY in hme_mii_{read,write}reg().
      Similarly don't bother to set the PHY select bit in hme_mii_statchg().
    - In hme_mii_{read,write}reg() ignore requests to PHYs other than the
      external and internal PHY one.
    - Move enabling/disabling the MII drivers of the external transceiver from
      hme_init_locked() and based on the sheer presence of an external one
      to hme_mifinit() and based on the currently selected media, defaulting
      to the internal transceiver when the media hasn't been set, yet.
      Invoke hme_mifinit() from the newly added hme_mediachange_locked() so
      the setting of the MII drivers is updated when changing media.
      These changes keep the MII bus from wedging (which manifests in the HME
      and the PHYs no longer being able to communicate with each other) when
      the PHY device drivers isolate the unused PHY in two-PHY configurations
      as present in f.e. Netra t1 100 while changing media, either from
      hme_init_locked() (see also below) or via ifconfig(8) (not with the
      RELENG_6 ifconfig(8) and miibus(4) though). They also allow for using
      both transceivers/PHYs.
    - In the newly added hme_mediachange_locked() also reset the PHYs in two-
      PHY configurations before invoking mii_mediachg(). This is required
      for successfully unisolating the previously unused PHY when switching
      between PHYs.
    - Now that changing media should no longer cause problems back out rev.
      1.27 and re-enable setting the current media in hme_init_locked() (see
      the commit message of rev. 1.23 for more info).
    These changes are roughly a merge of NetBSD hme.c rev. 1.32 - 1.35 (1.30
    was already fixed differently in our 1.36; 1.31 and 1.32 were wrong) with
    some parts reworked and things that don't make sense like setting the MII
    drivers and restoring the previous MIF and XIF settings in hme_mii_{read,
    write}reg() omitted.
  o Use the hme_tick() callout instead of if_slowtimo() for driving
    hme_watchdog() in order to avoid races accessing if_timer.
  o Use bus_get_dma_tag() so hme(4) works on platforms requiring it.
  o Don't bother to set if_mtu to ETHERMTU, ether_ifattach() does that.
  o Remove invalid BUS_DMA_ALLOCNOW when creating a tag which is used for
    a "static" memory allocation only.
  Revision   Changes    Path  +112 -63   src/sys/dev/hme/if_hme.c    +1 -0      src/sys/dev/hme/if_hmevar.h

More information about the cvs-src mailing list