MAJOR CHANGES: [contributed by Chuck Cranor <chuck@ccrc.wustl.edu> and
authorchuck <chuck@openbsd.org>
Thu, 20 Mar 1997 22:03:03 +0000 (22:03 +0000)
committerchuck <chuck@openbsd.org>
Thu, 20 Mar 1997 22:03:03 +0000 (22:03 +0000)
commitff70edd09ec3e7bd34b6067ee76998bd46b6ba54
treed1eb8df3f9d8be26f11b1ec9418fa23314018192
parentc141e8986312e6895ee8db3d1d8bd127289b2122
MAJOR CHANGES: [contributed by Chuck Cranor <chuck@ccrc.wustl.edu> and
                Anne Hutton <hutton@isi.edu>]:
   - add support for Adaptec 155 PCI ATM cards (e.g. ANA-5940)
          - add sc->is_adaptec to handle differences between cards.
          - break out MID_MK_TXQ/MID_MK_RXQ seperate macros to handle
                  the new Adaptec format TXQ/RXQ.
          - adjust en_dqneed to return 1 on ADP (since the Adaptec can
                  DMA anything in one DRQ/DTQ!)
          - add hook for a bus specific reset function (adaptec has
                  a seperate reset register that needs to be hit when
                  resettting the midway).
          - adjust DMA test to not worry about burst sizes on the
                  adaptec (since it handles it all for us!) and to handle
                  the new DTQ/DRQ format.
          - add Adaptec DMA support to en_txlaunch() and en_service()

BUG FIXES:
   - fixed receiver panic under heavy load ("lost mbuf in slot 0!").
          when the reassembly buffer overflows, the T-bit is set in
          the RDB and the data field is empty.  en_service() sets up
          a 4-byte (RDB size) dummy DMA without IF_ENQUEUE.  but the
          recv intr handling in en_intr() always does IF_DEQUEUE.
          as a result, a successive recv intr loses its mbuf and
          leads to a panic.  the solution is to only IF_DEQUEUE if
          the interrupt has non-zero length (indicating that there
          is an mbuf to get).   in order for this to work, EN_DQ_MK
          must always be non-zero.   we do this by or'ing in an unused
          bit (0x80000).
                  reported by: Kenjiro Cho <kjc@csl.sony.co.jp>

   - fix setting of transmit channel when txspeed[] is non-zero
          (e.g. traffic shaping).    the old scheme didn't work
          properly (it allowed the same VCI to use multiple tx channels
          thus defeating the txspeed[] parameter).   the new scheme
          statically assigns a VC to a channel when txspeed[] is set.
          [note that the code to set txspeed[] isn't in the driver right
          now since a MI interface to do this hasn't been made yet]
          we add sc->txvc2slot[] and sc->txslot[n].nref for this.
                  reported by: Kenjiro Cho <kjc@csl.sony.co.jp>,
                                  Milind M Buddihikot <milind@ccrc.wustl.edu>,
                                  Dong Lin <dong@eecs.harvard.edu>

    - if aal5 frame has a CRC error then the length field in the aal5 trailer
          may not be valid, so we can not use it [and we must dump the frame]
                  contributed by: Yuhang Sun <sunyh@dworkin.wustl.edu> & chuck

   - when doing SRAM copies, be sure to round up the length to the next
          largest word (otherwise the driver will try to do a byte clean
          up DMA and then get an ID error interrupt).

MINOR CLEANUPS:
   - add some extra support for a few more versions of FreeBSD
                  contributed by: Kenjiro Cho <kjc@csl.sony.co.jp>

   - clean up loops in DMA test
                  contributed by: Kenjiro Cho <kjc@csl.sony.co.jp>

   - restructure and cleanup of en_read/en_write macros/inlines

   - clean up some byte ordering stuff so that we are consistant throughout
          the driver
sys/dev/ic/midway.c
sys/dev/ic/midwayreg.h
sys/dev/ic/midwayvar.h