cvs commit: src/sys/dev/uart uart_dev_z8530.c

Marcel Moolenaar marcel at FreeBSD.org
Wed Apr 27 14:57:51 PDT 2005


marcel      2005-04-27 21:57:51 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/uart         uart_dev_z8530.c 
  Log:
  Make the Z8530 more reliable as low-level console by making use of the
  fact that access to RR0 does not need a prior write to the register
  index because the index always reverts to 0 after the indexed register
  has been accessed.
  
  Typically when a RR or WR is to accessed, one programs the index (which
  is a write to the control register), followed by a read or write to the
  actual indexed register (a read pr write to the same control register).
  When this non-atomic sequence is interrupted after having written the
  index and low-level console I/O is done in that situation, the write to
  program the index will actually write to the indexed register and nuke
  state. This almost always yields a wedge.
  
  By not programming the index register and instead just reading from RR0,
  the worst case scenario is non-fatal. For if we don't actually read from
  RR0 but some other register we get an invalid status, which may lead us
  to conclude that the transit data register is empty when it's not or that
  the receive data register contains data when it doesn't. Hence, we may
  lose an output character or get a sporadic input character, but given
  the situation this is a non-issue.
  
  Full serialization is not possible due to the fact that this code needs
  to work from DDB and before mutex initialization has happened.
  
  In collaboration with: kris@, marius@
  Tested by: kris@
  MFC after: 1 day
  X-MFC: 5.4-RELEASE candidate
  
  Revision  Changes    Path
  1.12      +3 -3      src/sys/dev/uart/uart_dev_z8530.c


More information about the cvs-all mailing list