home *** CD-ROM | disk | FTP | other *** search
- RISC OS SCSIdriver
- ==================
-
- Author: Nick Reeves, Richard Manby, BC
- Version: 0.18
-
- History
-
- 1) 24-Nov-88 NR: Initial draft
- 2) 02-Dec-88 NR: Added a) timeout parameter for SCSI_Op
- b) SCSI_Op to return operation id number, which
- can be used to abort operation.
- c) parameter for number of bytes of extended
- sense
- 0.03: 31-Jan-89 RCM: Copy placed in Arf:doc
- 0.04: 1-Mar-89 RCM: Defined data returned by 'Determine Device'
- 0.05: 15-Mar-89 RCM: Removed 'Establish Device' and 'Remove Device'
- reason codes from SWI SCSI_Initialise.
- Changed reason codes for 'Determine Device' in
- SWI SCSI_Initialise from 4 to 2.
- Removed 'Return error statistics' from
- SWI SCSI_Status.
- SWI SCSI_Op; Moved transfer direction, Scatter,
- Poll, Retry & Background Bits in R0 into MSByte to
- leave room for its device ID field to grow.
- Added 'Set Error Response','Set Queue Behaviour' &
- 'Disconnect' to SWI SCSI_Control.
- 0.06: 17-Apr-89 RCM: Removed the scatter list Bit from SWI SCSI_Op, this
- Bit is now reserved.
- Commands execute totaly in the foreground or in the
- background. The 'return-after-some-of-the-data-has-
- been-transfered' cannot be supported by SCSI.
- Added section on error messages.
- 0.07: 25-Apr-89 RCM: Tidied up some of the error messages
- Full definition of Host ID and Device ID
- 0.08: 16-May-89 RCM: Reordered reason codes for
- SCSI_Control-SetErrorResponse.
- SetErrorResponse, SetTimeout & ControlDisconnect
- now return their previous settings.
- 0.09: 08-Jun-89 BC+RCM: Changed spec of SCSI_Version to indicate the
- hardware and software types as a Bitset. Added all
- the error messages and their numbers,
- documented *Devices. Admitted to total reentrancy
- and interrupt kosherness.
- Scatter list reimplemented.
-
- 0.10: 26-Jun-89 RCM: Removed restrictions on device having to be idle
- before issuing SWI SCSI_Control (eg on SetTimeout).
- Defined bit value for 'supports scatterlist' and for
- 'supports device reservation'.
- Added SWI SCSI_Reserve.
- Added R8 (access key) to any dangerous operations.
- 0.11: 30-Jun-89 RCM: Reordered the error message section, so it made
- more sense.
- Added recommendations to SCSI_Control about the use
- of the control_disconnect reason code.
- 0.12: 04-Jul-89 RCM: Changed "Device reserved" to "Reservation error"
- 0.13: 12-Jul-89 RCM: Added SWI SCSI_List, *ScsiBlock
- 0.14: 23-Aug-89 RCM: Added accesskey to *ScsiBlock
- 0.15: 29-Aug-89 RCM: Added reason code 3 to SWI SCSI_Initialise.
- 0.16: 04-Sep-89 RCM: Changed "Reservation error" to
- "SCSI driver reservation error"
- 0.17: 19-Oct-89 RCM: Reset Bus restores various defaults.
- 0.18: 20-Oct-89 RCM: Added SBIC bug warning.
-
- ============================================
- INTERFACE FOR THE RISC OS SCSI DEVICE DRIVER
- ============================================
-
-
- Introduction
- ============
- The SCSI device driver for RISC OS is a relocatable module whose
- interface consists of the following SWIs:
-
- SCSI_Version 403C0 603C0
- SCSI_Initialise 403C1 603C1
- SCSI_Control 403C2 603C2
- SCSI_Op 403C3 603C3
- SCSI_Status 403C4 603C4
- SCSI_ReadControlLines 403C5 603C5
- SCSI_EEProm 403C6 603C6
- SCSI_Reserve 403C7 603C7
- SCSI_List 403C8 603C8
-
- and the following * commands:
-
- *Devices
- *ScsiBlock (N.B. NOT IMPLEMENTED BY ACORN SCSIdriver)
-
-
-
-
- Note on Device ID and Host ID
- -----------------------------
-
- The device ID is a composite of the SCSI id number, the logical unit number
- (LUN) within the device and the logical slot number of the SCSI card.
- They are packed into 8 bits as follows:
-
- Bits 2..0 SCSI device id (0..7)
- Bits 4..3 Logical SCSI card number (0..3)
- Bits 7..5 Logical unit number (0..7)
-
-
- The SCSI card numbering is based on the relative slot positions of any SCSI
- cards in the machine, thus in a machine with 2 cards, in physical slots 2
- and 4 they are refered to as logical SCSI card numbers 0 and 1. In a machine
- with 1 card it may be placed in any slot refered to as logical SCSI card
- number 0.
-
- The host ID is a similar composite, but of SCSI id number and logical slot
- number, with no LUN field.
-
- Bits 2..0 Host device id (0..7) - Usually 7
- Bits 4..3 Logical SCSI card number (0..3)
-
-
- The Host device id is usually 7 and there must be no other devices on the
- bus with the same id.
-
-
- The SWIs
- ========
-
- All SWIs conform to the RISC OS standard that is
- a) Any registers not explicitly defined as result parameters are preserved
- b) The processor flags N,Z and C are preserved.
- c) Errors are indicated by setting V and returning with R0 pointing at an
- error block (If the Bit 17 clear version is called control passes to
- the error handler instead).
- d) All SWIs preserve the interrupt state unless stated otherwise, and so
- they may be called from interrupt or event routines.
- e) All SWIs are reentrant.
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_Version (403C0 & 603C0)
- ============
- This SWI is used to determine the version number of the drivers, whether it
- supports any particular later extension, and what particular hardware
- implementation is present.
-
- entry: no parameters
-
- exit:
- R0 Bits 0..7 software minor version number, 0 for any release
- Bits 8..31 software major version number eg 100 for 1.00
- R1 Bitset of software features
- R2 Bits 0..7 hardware minor version number, 0 for any release
- Bits 8..31 hardware major version number eg 100 for 1.00
- R3 Bitset of hardware features
-
- The Bitset of software features is defined as follows;
- Bit 31 Supports target mode
- Bit 30 Supports configuration
- Bit 29 Supports reading control lines
- Bit 28 Supports device reservation
- Bit 27 Supports multiple SCSI cards (and hence SWI SCSI_List)
- Bit 26 Supports *ScsiBlock
- Bits 25..16 Reserved must be 0
- Bits 15..7 Reserved must be 1
- Bit 6 Supports *Devices
- Bit 5 Supports scatter list for SWI SCSI_Op
- Bit 4 Supports messaging
- Bit 3 Supports automatic "Request Sense"
- Bit 2 Supports command queueing
- Bit 1 Supports background data transfer
- Bit 0 Supports target disconnect/reconnect
-
- The Bitset of hardware features is defined as follows;
- Bit 31 Supports configuration
- Bits 30..16 Reserved must be 0
- Bits 15..1 Reserved must be 1
- Bit 0 Supports target mode
-
- errors: none
-
-
- ---------------------------------------------------------------------------
-
-
- SCSI_Initialise (403C1 & 603C1)
- ===============
- This SWI performs various initialisations determined by a reason code in R0.
- Any additional parameters are given in subsequent registers.
-
-
- 'Reset Bus'
- -----------
- entry:
- R0 0
- R1 host ID
-
- This call resets all options set by SCSI_Control to their default states and
- removes any device reservations. In addition it sets a new host ID and
- causes a full reset of the SCSI bus by driving the SCSI bus RESET line.
-
- The default states set for each device are
- Reservation - none
- Timeout=0 - no timeout
- Error response - report check condition as an error
- Queue behaviour - wait until slot becomes free
- Disconnect - allow disconnect/reselect
-
-
- success exit: no results
-
- errors:
- &00020100 - No room for SCSI driver workspace
- &00020103 - SCSI bus failed to reset
- &00020104 - Invalid SCSI host ID
-
-
- 'Reset Device' - initiates the reset operation and returns immediately.
- --------------
- entry:
- R0 1
- R1 device ID
- R8 access key
-
- success exit: no results
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- 'Determine Device' - performs an Inquiry command to see what type the device
- ------------------ is and then performs the appropriate Read-Capacity
- command depending on the device type.
- entry:
- R0 2
- R1 device ID
- R2 pointer to buffer for description, (16 bytes, word aligned).
-
- success exit: buffer filled in
-
- Offset
- R2 --> 0 Type = &00 Direct-access (eg magnetic disk)
- &01 Sequential-access (eg magnetic tape)
- &02 Printer device
- &03 Processor device
- &04 Write-once read-multiple (eg some optical discs)
- &05 Read-only (eg some optical discs)
- &06-7E Reserved
- &7F Logical unit not present
- &80-FF Vendor unique
-
- 1 Removable medium Bit (Bit7)/Device-Type Qualifier (Bits 0..6)
- 2 ISO (b7..6)/ECMA (b5..3)/ANSI (b2..0) version
- 3 Reserved (reserved field returned by inquiry command)
-
- 4 Additional length, extra data that could be obtained by an
- inquiry command
- 5 }
- 6 } Reserved (by device driver - currently zero)
- 7 }
-
- 8..11 word highest logical block number (converted to normal)
- 12..15 word block length ( ARM byte sex)
-
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010A - Timeout
-
-
- Bytes 0..4 are the first 5 bytes returned by an inquiry command, byte 5 is
- provided to indicate how much additional data (vendor ID,product ID etc)
- could be obtained by an Inquiry command Bytes 5..7 are reserved by the
- device driver
-
- Bytes 8..11 (word 2) & 12..15 (word 3) are the highest block count and block
- size returned by a Read Capacity command but have had the byte sex reversed
- to suit ARM's LDR instruction.
-
-
- 'Enumerate Device' - performs an Inquiry command to see what type the device
- ------------------ is and then performs the appropriate Read-Capacity
- Data returned as formatted text.
- entry:
- R0 3
- R1 device ID
- R2 pointer to buffer for description, word aligned).
- R3 buffer size
-
- The data returned is a zero terminated string of the same form as that
- printed by *devices, ie
-
- "ddd ttttttttttttttttt cccc Mbytes vvvvvvvv pppppppppppppppp rrrr"
-
- where the fields are device number, type, capacity, vendor, product and
- revision number.
-
- If a device doesn't respond, a string containing just the device number is
- returned, if the device responds, but the 'read-capacity' call fails, the
- capacity field will be set to unknown.
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_Control (403C2 & 603C2)
- ============
- This SWI issuess various control commands determined by a reason code in R0.
- Any additional parameters are given in subsequent registers.
-
-
- 'Abort device' - cancels all outstanding operations on a device. 'Abort op'
- -------------- should normally be used instead wherever possible.
- entry:
- R0 0
- R1 device ID
- R8 access key
-
- success exit: no results
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- 'Abort op' - cancels a particular operation on a device.
- ----------
- entry:
- R0 1
- R1 device ID
- R2 operation id as returned by SCSI_Op
- R8 access key
-
- success exit: no results
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- Reserved
- --------
- entry:
- R0 2
- R8 access key
-
-
- 'Set Timeout' - sets the default timeout for a device.
- -------------
- entry:
- R0 3
- R1 device ID
- R2 timeout value in centi-seconds or zero for no timeout
- R8 access key
-
- exit:
- R2 previous timeout setting
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- 'Set Error Response' - controls the behaviour of CHECK CONDITION status.
- --------------------
- entry:
- R0 4
- R1 device ID
- R2 0 If device returns 'check condition', return that as an error message.
- This is for badly behaved devices with non-standard request sense
- return blocks.
- 1 If device returns 'check condition' do a request sense automaticaly,
- report the error.
- 2 If device returns 'check condition' do a request sense automaticaly,
- if 'unit attention', ignore it and reissue the command else report
- the error.
- -1 no action, return previous setting.
- R8 access key
-
- exit:
- R2 previous setting
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- 'Set Queue Behaviour'
- ---------------------
-
- The driver supports disconnection/reselection and queueing of commands,
- this implies that when a command is issued, the podule hardware may be in
- use servicing another command, a command maybe queued/running for the target
- device or the queue may be full.
-
- entry:
- R0 5
- R1 device ID
- R2 0 ie if queue full loop until a slot becomes free
- if command operates totally in the background
- control returns to the caller as soon as the
- command is queued
- if the command operates in the forground,
- portion, control returns when the command
- completes.
- 1 Reject if queue full ie command accepted only if it can be queued/run
- without waiting.
- if command operates totally in background,
- control returns to the caller as soon as the
- command is queued
- if the command operates in the forground,
- portion, control returns when the command
- completes.
- 2 Reject if device busy ie command accepted only there are no other
- (or queue full) queued/running for this device.
- 3 Reject if podule busy ie accept command only if it will run immediatly
- -1 no action, return previous setting.
- R8 access key
-
- exit:
- R2 previous setting
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- 'Disconnect' - Allow/Inhibit disconnect/reselect
- ------------
-
- entry:
- R0 6
- R1 device ID
- R2 0 allow disconnect/reselect
- (ie when the bus selection phase is complete, the driver will attempt
- to send an IDENTIFY message with bit6 set, this tells the target that
- it may disconnect if it wants to).
- 1 inhibit disconnect/reselect, so that once started, a command will proceed
- to completion without allowing any other command to start/reconnect.
- (ie when the bus selection phase is complete the driver will attempt
- to send an IDENTIFY message with bit6 clear).
- 2 inhibit disconnect/reselect by not sending an identify message
- -1 no action, return previous setting.
- R8 access key
-
- exit:
- R2 previous setting
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- Note codes 0/1 cause SWI SCSI_Op to attempt to send an identify message once
- the bus selection phase is complete. The target may choose not to take the
- message (Not an error), in which case the driver proceedes to the command
- phase. The target may reply to the message with a message reject.
- These two cases do not produce an error from SCSI_Op, as the command may
- still complete successfully, it will however remain connected all the
- time.
-
- Note Applications/filing systems are NOT expected to issue this call, as
- all software/hardware should work happily regardless of any disconnections
- that occur.
-
- It should only be issued by:
-
- 1) The user (in his/her boot file) if his/her particular device
- mis-behaves when sent messages.
-
- 2) Application/filing system software specific to one vendors product that
- is known to mis-behave when sent messages.
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_Op (403C3 & 603C3) - issues a SCSI command to a device.
- ======= Can be called in the background.
-
- R0 Bits 0..7 Device ID
- Bits 24..25 00 => no data transfer, 01 => read, 10=>write, 11=>reserved
- Bit 26 Scatter Bit, if set, R3 is a pointer to a scatter list.
- Bit 27 If clear, poll escape during transfer and abort if escape
- pressed
- Bit 28 If set, repeatedly retry on timeout
- Bit 29 Set if a background transfer (possibly 0 length).
- R1 Length of SCSI control block
- R2 Ptr to SCSI control block
- R3 RAM ptr for start of transfer or pointer to scatter list of address length
- pairs if Bit 26 of R0 is set. After each chunk in the scatter list is
- transferred the address should be incremented and the length set to 0.
- R4 Length of transfer (in bytes).
- R5 Timeout in centiseconds or 0 for default timeout
- R6 Address to call back when transfer is complete if background Bit set.
- The call is made in IRQ mode with IRQs disabled.
- If an error has occurred, V is set, R0 points to a non-dynamic error
- block, (ie a pointer to a fixed block in the module rather than built
- up in a buffer), R1 indicates the cause of the error and R2 the logical
- address on the device of where the error occured.
- R7 Workspace pointer to pass in R12 for background call back.
- R8 access key
-
- exit (V clear)
- R0 returns a 32 Bit id incremented for each operation. Used to cancel op.
- R3 updated to indicate how much of transfer was successful (if scatter
- list, pointer to first unused/partially used entry).
- R4 updated to the amount untransferred
-
- exit (V set)
- R0 points to an error block
- R1 indicates the cause of the error
- R2 hold the logical address on the device of where the error occured.
- R3 updated to indicate how much of transfer was successful (if scatter
- list, points to first unused entry, entry is updated to indicate amount
- transfered).
- R4 updated to the amount untransferred
-
- errors:
- many
-
- Interrupts may be enabled by the call, this does not affect it's reentrancy.
-
- N.B. See below for detailed description of errors
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_Status (403C4 & 603C4)
- ===========
- This SWI issues various control commands determined by a reason code in R0.
- Any additional parameters are given in subsequent registers.
-
-
- 'Check Device Status' - returns the status of the selected device
- ---------------------
- entry:
- R0 0
- R1 device ID
-
- success exit:
- R0 status
- 1 => Idle
- 2 => Busy
- 4 => Error
- 16 => not available
-
- errors:
- &00020105 - Invalid SCSI device ID
-
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_ReadControlLines (403C5 & 603C5) N.B. NOT IMPLEMENTED BY ACORN SCSIdriver
- =====================
-
- Returns current state of SCSI bus lines
-
- entry:
- R0 host ID
-
- success exit:
- R0 SCSI data bus
- R1 Control lines, 1 = asserted :
- Bit 7 6 5 4 3 2 1 0
- RST BSY REQ MSG C/D I/O SEL DBP
-
- R2 Control lines, 1 = asserted :
- Bit 7 6 5 4 3 2 1 0
- ATN ACK
- (Bits 7..2 are Bits of 5380 bus & status register)
-
- errors:
- &00020104 - Invalid SCSI host ID
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_EEProm (403C6 & 603C6) N.B. NOT IMPLEMENTED BY ACORN SCSIdriver
- ===========
-
- Reads/writes EEProm on SCSI podule
-
- entry:
- R0 Bits 0..3 address of 16 Bit word
- Bit 10 set for write, clear for read
- R1 Bits 0..15 write data (if R0 Bit 10 set)
-
- success exit:
- R0 data read if R0 Bit 10 was set on entry
- R0 preserved if R0 Bit 10 was clear on entry
-
- errors:
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_Reserve (403C7 & 603C7)
- ============
-
- This SWI allows the caller to claim exclusive use of a device and may prevent
- data corruption problems that may arise if a program (by accident or on
- purpose) issues a Write/Format/ModeSelect command to a device currently mounted
- by SCSIFS.
-
- It also provides for a clean change of device ownership from one user to
- another, as SCSIdm for example is entitled to modify your disc, (to map out
- defects/format/partition it etc) but must only do so once SCSIFS has closed
- down all open files and dismounted the disc.
-
-
- 'Claim' - Claim exclusive use of a device
- -------
-
- This call attempts to claim exclusive use of the given device.
- If the call is successful, the caller will be granted sole use of the
- 'dangerous' SCSIdriver calls for that device and may use them itself, only
- by supplying the access key registered at 'Claim' time. Other callers
- may only use safe calls such as SCSI_Initialise-DetermineDevice.
-
- If the device has already been claimed, an error message
- 'SCSI driver reservation error' will be returned.
-
- entry
- R0 0
- R1 device ID
- R2 release address
- R3 workspace pointer, to be passed in R12 when release address is called
- R8 access key
-
- exit
- VC
- VS & R0-> error
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- 'ForceClaim'
- ------------
-
- This call is similar to 'Claim' above, however, if the device is already
- claimed, it will ask the current claimant to release it, by calling the
- release address registered for that device.
- The current owner should try to tidy up, and call 'Release' but may refuse
- by returning VS and R0 pointing to an error message
-
- Aside: This call is used by SCSIdm to ask SCSIfs to close files and dismount
- etc
-
- entry
- R0 1
- R1 device ID
- R2 release address
- R3 workspace pointer, to be passed in R12 when release address is called
- R8 access key
-
- exit
- VC
- VS & R0-> error
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
- OR an error message passed back by the current claimant.
-
- When the current claimant is called R0 will hold a reason code indicating:
- R0 = 1 called from ForceClaim
-
-
- 'Release'
- ---------
- This call will remove the reservation of a device.
-
- entry
- R0 2
- R1 device ID
- R8 access key (to prove you actually claimed it)
-
- exit
- VC
- VS -> error
-
- errors:
- &00020105 - Invalid SCSI device ID
- &0002010E - SCSI driver reservation error
-
-
- Passing access key value to SCSI SWI's
- ======================================
- The access key (probably WorkSpacePointer) should be passed in R8
- and is only checked if the specified device is claimed and the call/reason
- code is 'dangerous'.
-
-
- ----------------------------------------------------------------------------
-
-
- SCSI_List (403C8 & 603C8)
- =========
-
- This is used by the ScsiLog module as part of the multiple SCSI card
- initialisation sequence (see separate SCSILog documentation).
-
- exit:
- R0 -> Null terminated list of podule addresses
-
- This SWI returns a pointer to a null terminated list of SCSI podules
- available to SCSIdriver. The addresses are those of the 'slow access' space
- for the podule, ie,
- &03240000, &03244000, &03248000 or &0324C000 for podule slot 0,1,2 or 3.
-
-
- ----------------------------------------------------------------------------
-
- SCSI messages & error codes
- ===========================
-
- Errors reported by the SCSIdriver fall into 3 classes:
- 1) Those generated/detected by the driver
- 2) Interpretations of the SCSI status byte returned on command completion.
- 3) Interpretation of the sense data (collected on CHECK CONDITION status if
- the error response is set to 0 or 1).
-
-
- Device driver errors
- ====================
-
- &00020100 = "No room for SCSI driver workspace"
- &00020101 = "Unknown SCSI SWI number"
- &00020102 = "Unknown reason code for SCSI SWI"
- &00020103 = "SCSI bus failed to reset
- &00020104 = "Invalid SCSI host ID"
- &00020105 = "Invalid SCSI device ID
- &00020109 = "Device not idle"
- &0002010A = "Timeout" ; During selection phase
- &0002010B = "Timeout" ; During any other phase
- &0002010C = "Command queue not empty"
- &0002010D = "Command queue full"
- &0002010E = "SCSI driver reservation error"
- &0002010F = "Invalid parameters"
- &00020110 = "Parameter error"
- &00020111 = "Not callable from IRQ routine" (reported by podule loader)
- &00020112 = "Operation aborted"
- &00020113 = "Unexpected disconnection"
-
- Interpretation of the returned SCSI status byte
- ===============================================
-
- On completion of the command, the target returns a status byte.
- The Vendor unique Bits are masked out and the following interpretations
- placed on the result. If the returned status is GOOD then that is not an
- error so there will not be an error returned. If the status retured is not
- GOOD then it will be translated into one of the following three errors;
-
- &00020180 = "Target status - Check condition"
- &00020181 = "Target status - Busy"
- &00020182 = "Target status - Unknown"
-
- Any other value, including GOOD/CHECK CONDITION/BUSY with reserved Bit 7
- set, is reported as an error "Target status - Unknown"
-
- If the error response level is 1 or 2, then on 'CHECK CONDITION', the driver
- will automatically perform a request sense.
-
-
- Interpretation of the Sense data
- ================================
-
- The first byte of returned sense data is masked to leave the
- Error-class/error-code code Bits these are interpreted as:
-
- 0x..6x vendor unique error (non extended sense) } Reported as
- 71..7E reserved error (extended sense) } "Target error - Unknown"
- 7F vendor unique error (extended sense) }
-
- 70 (extended sense), the error is given by examination
- of the 'sense key' in byte 2 of the sense data
-
-
- &000201C0 = "Target error - No sense"
- &000201C1 = "Target error - Recovered error"
- &000201C2 = "Target error - Not ready"
- &000201C3 = "Target error - Medium error"
- &000201C4 = "Target error - Hardware error"
- &000201C5 = "Target error - Illegal request"
- &000201C6 = "Target error - Unit attention"
- &000201C7 = "Target error - Data protect"
- &000201C8 = "Target error - Blank check"
- &000201C9 = "Target error - Vendor unique"
- &000201CA = "Target error - Copy aborted"
- &000201CB = "Target error - Aborted command"
- &000201CC = "Target error - Equal"
- &000201CD = "Target error - Volume overflow"
- &000201CE = "Target error - Miscompare"
- &000201CF = "Target error - Reserved sense key"
-
- &000201D0 = "Target error - Unknown"
-
-
- Errors produced by calling SWI SCSI_Op
- ======================================
-
- When an error is returned by a call of SWI SCSI_Op, in addition to the normal
- error pointer in R0, R1 and R2 provide extra information:
-
- R0 -> error message - a standard RISC OS error block, consisting of a 1
- word error number, followed by an error message
- R1 = error indication - this is a composite of the LSB of the above error
- number and the status/sense-errorclass/sense key
- that produced the error.
- R2 = logical address on the device of where the error occured.
-
-
-
- Device driver detected errors
- =============================
-
- R1 MSB = the LSB of the RISC OS error number. ie 0..127
- R1 = 0 (see note below)
- R1 = TBA } If error was due to an unexpected bus phase, the phase could
- R1 LSB = TBA } be indicated here - assume undefined for now.
-
- R2 = undefined
- R3 = undefined
- R4 = undefined
-
-
- Status byte errors
- ==================
-
- R1 MSB = the LSB of the RISC OS error number. ie 128..195
- R1 = 0 (see note below)
- R1 = 0
- R1 LSB = returned status byte (unmasked)
-
- R2 = undefined
- R3 = indicates amount of data transfered
- R4 = amount of data not transfered
-
-
-
- Returned Sense data
- ===================
-
- Non-extended sense data returned
- --------------------------------
- R1 MSB = the LSB of the RISC OS error number. ie 196..255
- R1 UMB = Bits 23..16 holds byte 0 of the returned sense data
- Bit 23 is the 'Valid' Bit and is set if the 'Logical block
- address' in the returned sense data (in R2) is valid.
- Bits 22..20 are the 'error class'
- Bits 19..16 are the 'error code'
- R1 LMB = Bits 15..13 are the 'vendor unique' Bits from byte 1
- Bits 12..8 are zero
- R1 LSB = Bits 7..0
-
- R2 = 'Logical block address' returned in bytes 1..3 of the returned sense
- data (the vendor unique Bits masked out).
- R3 = indicates amount of data transfered
- R4 = amount of data not transfered
-
-
- Extended sense data returned
- ----------------------------
- R1 MSB = the LSB of the RISC OS error number. ie 196..255
- R1 = byte 0 of the returned sense data
- Bit 23 is the 'Valid' Bit and is set if the 'Information bytes'
- in the returned sense data (now in R2) are valid.
- Bits 22..20 are the 'error class'
- Bits 19..16 are the 'error code'
- R1 = 'segment number' ie byte 1 of the returned sense data
- R1 byte 2 of the returned sense data
- Bit7 is 'Filemark'
- Bit6 is 'EOM'
- Bit5 is 'ILI'
- Bit4 is 'reserved'
- Bits 3..0 hold the 'sense key'
- R2 = the 'information bytes' returned as bytes 3..6 of the sense data,
- (byte sex reversed to suit ARM).
- R3 = indicates amount of data transfered
- R4 = amount of data not transfered
-
-
- NOTE Bit 23 of R1 always indicates data-in-R2-is-valid, as it is either the
- 'valid' Bit returned by the request sense command, or zero.
-
-
-
- ----------------------------------------------------------------------------
-
- The * commands
- ==============
-
- *Devices
- ========
-
- *Devices displays information on the devices attached to the SCSI
- bus(es). The resulting display shows the type of each device this can be
- either "Direct-access", "Sequential-access", "Printer", "Processor", "WORM",
- "Read-only", "Scanner", "Optical memory", "Changer", Communications",
- "Unknown", and "Host". The capacity is calculated by multiplying the
- highest block number by the block size, as returned by a Read Capacity
- command. The Vendor, Product and Revision fields are provided by the
- Inquiry command, and are displayed with mimimal formating. An example of
- the output of this command is shown below;
-
- Device Type Capacity Vendor Product Revision
- 0 Direct-access 18 Mbytes RODIME RO652 5.02
- 1
- 2 Direct-access 100 Mbytes CONNER Cp3100-100mb-3.5 0.0C
- 3 Read-only 27 Mbytes HITACHI CDR 0004
- 4
- 5 Direct-access 43 Mbytes RODIME RO3000S 1.24
- 6
- 7 Host ACORN SCSI expansion 0000
-
-
- *ScsiBlock N.B. NOT IMPLEMENTED BY ACORN SCSIdriver
- ==========
-
-
-
- *ScsiBlock adr accesskey devID cdb0 cdb1 cdb2...
-
-
-
- *ScsiBlock issues a SCSI command to the target device.
- adr is the address data transfer address
- devID is the SCSI deviceID
- cbd0 onwards (maximum of 12 parameters) are the bytes of the SCSI command
- block to be sent.
-
- errors unique to this command
- &0002010F - "Invalid parameters"
- &00020110 - "Parameter error"
-
-
-
- Warning
- =======
- The use of SWI SCSI_Control with R0=1 (Abort Op), or the use of command
- timeouts may prove unreliable with certain versions of the WD33C93A SCSI bus
- interface controller. The current version of the chip, revision C, is known
- to exhibit problems, it is expected that later revisions will not.
-
- The SBIC has a tendancy to hang if a RaiseATN command (issued by the device
- driver abort command code) is issued during a data-out phase.
-
-