UDA(4)                 OpenBSD Programmer's Manual (VAX)                UDA(4)

NAME
     uda - UDA50 disk controller interface

SYNOPSIS
     controller uda0 at uba0 csr 0172150 vector udaintr
     disk ra0 at uda0 drive 0
     options MSCP_PARANOIA

DESCRIPTION
     This is a driver for the DEC UDA50 disk controller and other compatible
     controllers.  The UDA50 communicates with the host through a packet pro-
     tocol known as the Mass Storage Control Protocol (MSCP). Consult the file
     <vax/mscp.h> for a detailed description of this protocol.

     The uda driver is a typical block-device disk driver; see physio(4) for a
     description of block I/O. The script MAKEDEV(8) should be used to create
     the uda special files; should a special file need to be created by hand,
     consult mknod(8).

     The MSCP_PARANOIA option enables runtime checking on all transfer comple-
     tion responses from the controller.  This increases disk I/O overhead and
     may be undesirable on slow machines, but is otherwise recommended.

     The first sector of each disk contains both a first-stage bootstrap pro-
     gram and a disk label containing geometry information and partition lay-
     outs (see disklabel(5)). This sector is normally write-protected, and
     disk-to-disk copies should avoid copying this sector.  The label may be
     updated with disklabel(8), which can also be used to write-enable and
     write-disable the sector.  The next 15 sectors contain a second-stage
     bootstrap program.

DISK SUPPORT
     During autoconfiguration, as well as when a drive is opened after all
     partitions are closed, the first sector of the drive is examined for a
     disk label.  If a label is found, the geometry of the drive and the par-
     tition tables are taken from it.  If no label is found, the driver con-
     figures the type of each drive when it is first encountered.  A default
     partition table in the driver is used for each type of disk when a pack
     is not labelled.  The origin and size (in sectors) of the default pseudo-
     disks on each drive are shown below.  Not all partitions begin on cylin-
     der boundaries, as on other drives, because previous drivers used one
     partition table for all drive types.  Variants of the partition tables
     are common; check the driver and the file /etc/disktab (disktab(5)) for
     other possibilities.

     Special file names begin with `ra' and `rra' for the block and character
     files respectively. The second component of the name, a drive unit number
     in the range of zero to seven, is represented by a `?' in the disk lay-
     outs below. The last component of the name is the file system partition
     designated by a letter from `a' to `h' and which corresponds to a minor
     device number set: zero to seven, eight to 15, 16 to 23 and so forth for
     drive zero, drive two and drive three respectively, (see physio(4)). The
     location and size (in sectors) of the partitions:

     RA60 partitions
     disk      start    length
               ra?a     0            15884
               ra?b     15884        33440
               ra?c     0            400176
               ra?d     49324        82080     same as 4.2BSD ra?g
               ra?e     131404       268772    same as 4.2BSD ra?h
               ra?f     49324        350852
               ra?g     242606       157570
               ra?h     49324        193282

     RA70 partitions
     disk      start    length
               ra?a     0            15884
               ra?b     15972        33440
               ra?c     0            547041
               ra?d     34122        15884
               ra?e     357192       55936
               ra?f     413457       133584
               ra?g     341220       205821
               ra?h     49731        29136

     RA80 partitions
     disk      start    length
               ra?a     0            15884
               ra?b     15884        33440
               ra?c     0            242606
               ra?e     49324        193282    same as old Berkeley ra?g
               ra?f     49324        82080     same as 4.2BSD ra?g
               ra?g     49910        192696
               ra?h     131404       111202    same as 4.2BSD

     RA81 partitions
     disk      start    length
               ra?a     0            15884
               ra?b     16422        66880
               ra?c     0            891072
               ra?d     375564       15884
               ra?e     391986       307200
               ra?f     699720       191352
               ra?g     375564       515508
               ra?h     83538        291346

     RA81 partitions with 4.2BSD-compatible partitions
     disk      start    length
               ra?a     0            15884
               ra?b     16422        66880
               ra?c     0            891072
               ra?d     49324        82080     same as 4.2BSD ra?g
               ra?e     131404       759668    same as 4.2BSD ra?h
               ra?f     412490       478582    same as 4.2BSD ra?f
               ra?g     375564       515508
               ra?h     83538        291346

     RA82 partitions
     disk      start    length
               ra?a     0            15884
               ra?b     16245        66880
               ra?c     0            1135554
               ra?d     375345       15884
               ra?e     391590       307200
               ra?f     669390       466164
               ra?g     375345       760209
               ra?h     83790        291346

     The ra?a partition is normally used for the root file system, the ra?b
     partition as a paging area, and the ra?c partition for pack-pack copying
     (it maps the entire disk).

FILES
     /dev/ra[0-9][a-f]
     /dev/rra[0-9][a-f]

DIAGNOSTICS


     panic: udaslave  No command packets were available while the driver was
     looking for disk drives.  The controller is not extending enough credits
     to use the drives.

     uda%d: no response to Get Unit Status request  A disk drive was found,
     but did not respond to a status request.  This is either a hardware prob-
     lem or someone pulling unit number plugs very fast.

     uda%d: unit %d off line  While searching for drives, the controller found
     one that seems to be manually disabled.  It is ignored.

     uda%d: unable to get unit status  Something went wrong while trying to
     determine the status of a disk drive.  This is followed by an error de-
     tail.

     uda%d: unit %d, next %d  This probably never happens, but I wanted to
     know if it did.  I have no idea what one should do about it.

     uda%d: cannot handle unit number %d (max is %d)  The controller found a
     drive whose unit number is too large.  Valid unit numbers are those in
     the range [0..7].

     ra%d: don't have a partition table for %s; using (s,t,c)=(%d,%d,%d)  The
     controller found a drive whose media identifier (e.g. `RA 25') does not
     have a default partition table.  A temporary partition table containing
     only an `a' partition has been created covering the entire disk, which
     has the indicated numbers of sectors per track (s), tracks per cylinder
     (t), and total cylinders (c).  Give the pack a label with the disklabel
     utility.

     uda%d: uballoc map failed  Unibus resource map allocation failed during
     initialisation.  This can only happen if you have 496 devices on a
     Unibus.

     uda%d: timeout during init  The controller did not initialise within ten
     seconds.  A hardware problem, but it sometimes goes away if you try
     again.

     uda%d: init failed, sa=%b  The controller refused to initialise.

     uda%d: controller hung  The controller never finished initialisation.
     Retrying may sometimes fix it.

     ra%d: drive will not come on line  The drive will not come on line, prob-
     ably because it is spun down.  This should be preceded by a message giv-
     ing details as to why the drive stayed off line.

     uda%d: still hung  When the controller hangs, the driver occasionally
     tries to reinitialise it.  This means it just tried, without success.

     panic: udastart: bp==NULL  A bug in the driver has put an empty drive
     queue on a controller queue.

     uda%d: command ring too small  If you increase NCMDL2, you may see a per-
     formance improvement.  (See /sys/vaxuba/uda.c.)

     panic: udastart  A drive was found marked for status or on-line functions
     while performing status or on-line functions.  This indicates a bug in
     the driver.

     uda%d: controller error, sa=0%o (%s)  The controller reported an error.
     The error code is printed in octal, along with a short description if the
     code is known (see the UDA50 Maintenance Guide, DEC part number AA-M185B-
     TC, pp. 18-22).  If this occurs during normal operation, the driver will
     reset it and retry pending I/O. If it occurs during configuration, the
     controller may be ignored.

     uda%d: stray intr  The controller interrupted when it should have stayed
     quiet.  The interrupt has been ignored.

     uda%d: init step %d failed, sa=%b  The controller reported an error dur-
     ing the named initialisation step.  The driver will retry initialisation
     later.

     uda%d: version %d model %d  An informational message giving the revision
     level of the controller.

     uda%d: DMA burst size set to %d  An informational message showing the DMA
     burst size, in words.

     panic: udaintr  Indicates a bug in the generic MSCP code.

     uda%d: driver bug, state %d  The driver has a bogus value for the con-
     troller state.  Something is quite wrong.  This is immediately followed
     by a `panic: udastate'.

     uda%d: purge bdp %d  A benign message tracing BDP purges.  I have been
     trying to figure out what BDP purges are for.  You might want to comment
     out this call to log() in /sys/vaxuba/uda.c.

     uda%d: SETCTLRC failed: `detail'  The Set Controller Characteristics com-
     mand (the last part of the controller initialisation sequence) failed.
     The detail message tells why.

     uda%d: attempt to bring ra%d on line failed:  `detail'  The drive could
     not be brought on line.  The detail message tells why.

     uda%d: ra%d: unknown type %d  The type index of the named drive is not
     known to the driver, so the drive will be ignored.

     ra%d: changed types! was %d now %d  A drive somehow changed from one kind
     to another, e.g., from an RA80 to an RA60. The numbers printed are the
     encoded media identifiers (see <vax/mscp.h> for the encoding).  The driv-
     er believes the new type.

     ra%d: uda%d, unit %d, size = %d sectors  The named drive is on the indi-
     cated controller as the given unit, and has that many sectors of user-
     file area.  This is printed during configuration.

     uda%d: attempt to get status for ra%d failed:  `detail'  A status request
     failed.  The detail message should tell why.

     ra%d: bad block report: %d  The drive has reported the given block as
     bad.  If there are multiple bad blocks, the drive will report only the
     first; in this case this message will be followed by `+ others'.  Get DEC
     to forward the block with EVRLK.

     ra%d: serious exception reported  I have no idea what this really means.

     panic: udareplace  The controller reported completion of a REPLACE opera-
     tion.  The driver never issues any REPLACEs, so something is wrong.

     panic: udabb  The controller reported completion of bad block related
     I/O. The driver never issues any such, so something is wrong.

     uda%d: lost interrupt  The controller has gone out to lunch, and is being
     reset to try to bring it back.

     panic: mscp_go: AEB_MAX_BP too small  You defined AVOID_EMULEX_BUG and
     increased NCMDL2 and Emulex has new firmware.  Raise AEB_MAX_BP or turn
     off AVOID_EMULEX_BUG.


     uda%d: unit %d: unknown message type 0x%x ignored  The controller re-
     sponded with a mysterious message type. See /sys/vax/mscp.h for a list of
     known message types.  This is probably a controller hardware problem.

     uda%d: unit %d out of range  The disk drive unit number (the unit plug)
     is higher than the maximum number the driver allows (currently 7).

     uda%d: unit %d not configured, message ignored  The named disk drive has
     announced its presence to the controller, but was not, or cannot now be,
     configured into the running system.  Message is one of `available atten-
     tion' (an `I am here' message) or `stray response op 0x%x status 0x%x'
     (anything else).

     ra%d: bad lbn (%d)?  The drive has reported an invalid command error,
     probably due to an invalid block number.  If the lbn value is very much
     greater than the size reported by the drive, this is the problem.  It is
     probably due to an improperly configured partition table.  Other invalid
     commands indicate a bug in the driver, or hardware trouble.

     ra%d: duplicate ONLINE ignored  The drive has come on-line while already
     on-line.  This condition can probably be ignored (and has been).

     ra%d: io done, but no buffer?  Hardware trouble, or a bug; the drive has
     finished an I/O request, but the response has an invalid (zero) command
     reference number.

     Emulex SC41/MS screwup: uda%d, got %d correct, then changed 0x%x to
     0x%x  You turned on AVOID_EMULEX_BUG, and the driver successfully avoided
     the bug.  The number of correctly handled requests is reported, along
     with the expected and actual values relating to the bug being avoided.

     panic: unrecoverable Emulex screwup  You turned on AVOID_EMULEX_BUG, but
     Emulex was too clever and avoided the avoidance.  Try turning on
     MSCP_PARANOIA instead.

     uda%d: bad response packet ignored  You turned on MSCP_PARANOIA, and the
     driver caught the controller in a lie.  The lie has been ignored, and the
     controller will soon be reset (after a `lost' interrupt).  This is fol-
     lowed by a hex dump of the offending packet.

     ra%d: bogus REPLACE end  The drive has reported finishing a bad sector
     replacement, but the driver never issues bad sector replacement commands.
     The report is ignored.  This is likely a hardware problem.

     ra%d: unknown opcode 0x%x status 0x%x ignored  The drive has reported
     something that the driver cannot understand.  Perhaps DEC has been inven-
     tive, or perhaps your hardware is ill.  This is followed by a hex dump of
     the offending packet.

     ra%d%c: hard error %sing fsbn %d [of %d-%d] (ra%d bn %d cn %d tn %d sn
     %d).  An unrecoverable error occurred during transfer of the specified
     filesystem block number(s), which are logical block numbers on the indi-
     cated partition.  If the transfer involved multiple blocks, the block
     range is printed as well.  The parenthesized fields list the actual disk
     sector number relative to the beginning of the drive, as well as the
     cylinder, track and sector number of the block.

     uda%d: %s error datagram  The controller has reported some kind of error,
     either `hard' (unrecoverable) or `soft' (recoverable).  If the controller
     is going on (attempting to fix the problem), this message includes the
     remark `(continuing)'.  Emulex controllers wrongly claim that all soft
     errors are hard errors.  This message may be followed by one of the fol-
     lowing 5 messages, depending on its type, and will always be followed by
     a failure detail message (also listed below).


           memory addr 0x%x  A host memory access error; this is the address
           that could not be read.

           unit %d: level %d retry %d, %s %d  A typical disk error; the retry
           count and error recovery levels are printed, along with the block
           type (`lbn', or logical block; or `rbn', or replacement block) and
           number.  If the string is something else, DEC has been clever, or
           your hardware has gone to Australia for vacation (unless you live
           there; then it might be in New Zealand, or Brazil).

           unit %d: %s %d  Also a disk error, but an `SDI' error, whatever
           that is.  (I doubt it has anything to do with Ronald Reagan.)  This
           lists the block type (`lbn' or `rbn') and number.  This is followed
           by a second message indicating a microprocessor error code and a
           front panel code.  These latter codes are drive-specific, and are
           intended to be used by field service as an aid in locating failing
           hardware.  The codes for RA81s can be found in the RA81 Maintenance
           Guide, DEC order number AA-M879A-TC, in appendices E and F.

           unit %d: small disk error, cyl %d  Yet another kind of disk error,
           but for small disks.  (`That's what it says, guv'nor.  Dunnask me
           what it means.')

           unit %d: unknown error, format 0x%x  A mysterious error: the given
           format code is not known.

     The detail messages are as follows:


           success (%s) (code 0, subcode %d)  Everything worked, but the con-
           troller thought it would let you know that something went wrong.
           No matter what subcode, this can probably be ignored.

           invalid command (%s) (code 1, subcode %d)  This probably cannot oc-
           cur unless the hardware is out; %s should be `invalid msg length',
           meaning some command was too short or too long.

           command aborted (unknown subcode) (code 2, subcode %d)  This should
           never occur, as the driver never aborts commands.

           unit offline (%s) (code 3, subcode %d)  The drive is offline, ei-
           ther because it is not around (`unknown drive'), stopped (`not
           mounted'), out of order (`inoperative'), has the same unit number
           as some other drive (`duplicate'), or has been disabled for diag-
           nostics (`in diagnosis').

           unit available (unknown subcode) (code 4, subcode %d)  The con-
           troller has decided to report a perfectly normal event as an error.
           (Why?)

           media format error (%s) (code 5, subcode %d)  The drive cannot be
           used without reformatting.  The Format Control Table cannot be read
           (`fct unread - edc'), there is a bad sector header (`invalid sector
           header'), the drive is not set for 512-byte sectors (`not 512 sec-
           tors'), the drive is not formatted (`not formatted'), or the FCT
           has an uncorrectable ECC error (`fct ecc').

           write protected (%s) (code 6, subcode %d)  The drive is write pro-
           tected, either by the front panel switch (`hardware') or via the
           driver (`software').  The driver never sets software write protect.

           compare error (unknown subcode) (code 7, subcode %d)  A compare op-
           eration showed some sort of difference.  The driver never uses com-
           pare operations.


           data error (%s) (code 7, subcode %d)  Something went wrong reading
           or writing a data sector.  A `forced error' is a software-asserted
           error used to mark a sector that contains suspect data.  Rewriting
           the sector will clear the forced error.  This is normally set only
           during bad block replacement, and the driver does no bad block re-
           placement, so these should not occur.  A `header compare' error
           probably means the block is shot.  A `sync timeout' presumably has
           something to do with sector synchronisation.  An `uncorrectable
           ecc' error is an ordinary data error that cannot be fixed via ECC
           logic.  A `%d symbol ecc' error is a data error that can be (and
           presumably has been) corrected by the ECC logic.  It might indicate
           a sector that is imperfect but usable, or that is starting to go
           bad.  If any of these errors recur, the sector may need to be re-
           placed.

           host buffer access error (%s) (code %d, subcode %d)  Something went
           wrong while trying to copy data to or from the host (Vax).  The
           subcode is one of `odd xfer addr', `odd xfer count', `non-exist.
           memory', or `memory parity'.  The first two could be a software
           glitch; the last two indicate hardware problems.

           controller error (%s) (code %d, subcode %d)  The controller has de-
           tected a hardware error in itself.  A `serdes overrun' is a seri-
           aliser / deserialiser overrun; `edc' probably stands for `error de-
           tection code'; and `inconsistent internal data struct' is obvious.

           drive error (%s) (code %d, subcode %d)  Either the controller or
           the drive has detected a hardware error in the drive.  I am not
           sure what an `sdi command timeout' is, but these seem to occur be-
           nignly on occasion.  A `ctlr detected protocol' error means that
           the controller and drive do not agree on a protocol; this could be
           a cabling problem, or a version mismatch.  A `positioner' error
           means the drive seek hardware is ailing; `lost rd/wr ready' means
           the drive read/write logic is sick; and `drive clock dropout' means
           that the drive clock logic is bad, or the media is hopelessly
           scrambled.  I have no idea what `lost recvr ready' means.  A `drive
           detected error' is a catch-all for drive hardware trouble; `ctlr
           detected pulse or parity' errors are often caused by cabling prob-
           lems.

SEE ALSO
     disklabel(5), disklabel(8)

HISTORY
     The uda driver appeared in 4.2BSD.

OpenBSD 2.9                     March 27, 1991                               7
