cvs commit: src/sys/dev/sk if_sk.c if_skreg.h xmaciireg.h yukonreg.h

Pyun YongHyeon yongari at
Thu Apr 27 05:59:10 UTC 2006

yongari     2006-04-27 05:59:09 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/sk           if_sk.c if_skreg.h xmaciireg.h yukonreg.h 
  Bring busdmafied sk(4) to all architectures.
  - MPSAFE. No more recursive lock required.
  - bus_dma(9) conversion. I think it should work on all architectures.
  - optimized Rx handler for each normal and jumbo frames. Previously
    sk(4) used jumbo frame management code to handle normal sized
    frames. As the handler needs an additional lock to protect jumbo
    frame management structure from races, it used two lock operations
    for each received packet. Now sk(4) uses single lock operation for
    normal frame.(Jumbo frame still needs two lock operations as before.)
    The hardware supports DMA scatter operations for Rx descriptors such
    that it's possible to take advantagee of m_cljget(9) for jumbo frames.
    However, due to a unknown reasons it resulted in poor performance on
    sparc64. So I dropped m_cljget(9) approach. This should be revisited
    since it would reduce one lock operation for jumbo frame handling.
  - Tx TCP/Rx IP checksum offload support. According to the data sheet
    of SK-NET GENESIS the hardware supports Rx IP/TCP/UDP offload.
    But I couldn't make it work on my Yukon hardware. So Rx TCP/UDP was
    disabled at the moment. It seems that newer Yukon chips can support
    Tx UDP checksum offload too. But I need more documentation first.
  - Added more wait time in reading VPD data. It seems that ASUS LOM
    takes a very long time to respond VPD read signal.
  - Added an additional lock for MII register access callbacks.
  - Added more strict received packet validation routine. Previously it
    passed corrupted packets to upper layers under certain conditions.
  - A new function sk_yukon_tick() to handle auto-negotiation properly.
  - Interrupt handler now checks shared interrupt source and protects
    the interrupt handler from NULL pointer dereference which was caused
    by odd status word value. The status word can returns 0xffffffff if
    cable is unplugged while Rx/Tx/auto-negotiation is in progress.
  - suspend/resume support(not tested).
  - Added Rx/Tx FIFO flush routine for Yukon
  - Activate Tx descriptor poll timer in order to protect possible loss
    of SK_TXBMU_TX_START command. Previously the driver continuously issued
    SK_TXBMU_TX_START when it notices pending Tx descriptors not processed
    yet in interrupt handler. That approach would add additional PCI
    write access overhead under high Tx load situations and it might fail
    if the first SK_TXBMU_TX_START was lost and no interrupt is generated
    from the first SK_TXBMU_TX_START command.
  - s/printf/if_printf/, s/printf/device_printf/, Axe sk_unit in softc.
  - Setting multicast/station address is now safe on strict-alignment
  - Fix long standing bug in VLAN header length setup.
  - Added/corrected register definitions for Yukon.
    (Register information from Linux skge driver.)
  - Added Rx status definition for Marvell Yukon/XaQti XMAC.
    (Rx status register information from Linux skge driver.)
  - Update if_oerrors if we encounter watchdog error.
  - callout(9) conversion
  Special thanks to jkim who let me know RX status differences between
  Yukon and XaQti XMAC.
  It seems that there is still occasional watchdog timeout error but I
  couldn't reproduce it and need more information to analyze it from
  Tested by:      bz(amd64), me(i386, sparc64), current ML
                  Frank Behrens frank ! pinky ( sax $ de
  Revision  Changes     Path
  1.121     +1571 -538  src/sys/dev/sk/if_sk.c
  1.33      +95 -43     src/sys/dev/sk/if_skreg.h
  1.5       +3 -0       src/sys/dev/sk/xmaciireg.h
  1.3       +30 -11     src/sys/dev/sk/yukonreg.h

More information about the cvs-src mailing list