home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / inc&ad2.0 / includes / devices / scsidisk.i < prev    next >
Text File  |  1992-09-01  |  4KB  |  119 lines

  1.     IFND    DEVICES_SCSIDISK_I
  2. DEVICES_SCSIDISK_I    EQU    1
  3. **
  4. **    $Filename: devices/scsidisk.i $
  5. **    $Release: 2.04 Includes, V37.4 $
  6. **    $Revision: 36.2 $
  7. **    $Date: 90/11/07 $
  8. **
  9. **    SCSI exec-level device command
  10. **
  11. **    (C) Copyright 1988-1991 Commodore-Amiga, Inc.
  12. **        All Rights Reserved
  13. **
  14.  
  15.  
  16.     IFND EXEC_TYPES_I
  17.     INCLUDE "exec/types.i"
  18.     ENDC ; EXEC_TYPES_I
  19.  
  20.  
  21. ;---------------------------------------------------------------------
  22. ;
  23. ;   SCSI Command
  24. ;    Several Amiga SCSI controller manufacturers are converging on
  25. ;    standard ways to talk to their controllers.  This include
  26. ;    file describes an exec-device command (e.g. for hddisk.device)
  27. ;    that can be used to issue SCSI commands
  28. ;
  29. ;   UNIT NUMBERS
  30. ;    Unit numbers to the OpenDevice call have encoded in them which
  31. ;    SCSI device is being referred to.  The three decimal digits of
  32. ;    the unit number refer to the SCSI Target ID (bus address) in
  33. ;    the 1's digit, the SCSI logical unit (LUN) in the 10's digit,
  34. ;    and the controller board in the 100's digit.
  35. ;
  36. ;    Examples:
  37. ;          0    drive at address 0
  38. ;         12    LUN 1 on multiple drive controller at address 2
  39. ;        104    second controller board, address 4
  40. ;         88    not valid: both logical units and addresses
  41. ;            range from 0..7.
  42. ;
  43. ;   CAVEATS
  44. ;    Original 2090 code did not support this command.
  45. ;
  46. ;    Commodore 2090/2090A unit numbers are different.  The SCSI
  47. ;    logical unit is the 100's digit, and the SCSI Target ID
  48. ;    is a permuted 1's digit: Target ID 0..6 maps to unit 3..9
  49. ;    (7 is reserved for the controller).
  50. ;
  51. ;        Examples:
  52. ;          3    drive at address 0
  53. ;        109    drive at address 6, logical unit 1
  54. ;          1    not valid: this is not a SCSI unit.  Perhaps
  55. ;            it's an ST506 unit.
  56. ;
  57. ;    Some controller boards generate a unique name (e.g. 2090A's
  58. ;    iddisk.device) for the second controller board, instead of
  59. ;    implementing the 100's digit.
  60. ;
  61. ;    There are optional restrictions on the alignment, bus
  62. ;    accessability, and size of the data for the data phase.
  63. ;    Be conservative to work with all manufacturer's controllers.
  64. ;
  65. ;---------------------------------------------------------------------
  66.  
  67. HD_SCSICMD    EQU    28    ; issue a SCSI command to the unit
  68.                 ; io_Data points to a SCSICmd
  69.                 ; io_Length is sizeof(struct SCSICmd)
  70.                 ; io_Actual and io_Offset are not used
  71.  
  72.  STRUCTURE    SCSICmd,0
  73.     APTR    scsi_Data        ; word aligned data for SCSI Data Phase
  74.                 ; (optional) data need not be byte aligned
  75.                 ; (optional) data need not be bus accessable
  76.     ULONG   scsi_Length        ; even length of Data area
  77.                 ; (optional) data can have odd length
  78.                 ; (optional) data length can be > 2**24
  79.     ULONG   scsi_Actual        ; actual Data used
  80.     APTR    scsi_Command    ; SCSI Command (same options as scsi_Data)
  81.     UWORD   scsi_CmdLength    ; length of Command
  82.     UWORD   scsi_CmdActual    ; actual Command used
  83.     UBYTE   scsi_Flags        ; includes intended data direction
  84.     UBYTE   scsi_Status        ; SCSI status of command
  85.     APTR    scsi_SenseData    ; sense data: filled if SCSIF_[OLD]AUTOSENSE
  86.                 ; is set and scsi_Status has CHECK CONDITION
  87.                 ; (bit 1) set
  88.     UWORD   scsi_SenseLength    ; size of scsi_SenseData, also bytes to
  89.                 ; request w/ SCSIF_AUTOSENSE, must be 4..255
  90.     UWORD   scsi_SenseActual    ; amount actually fetched (0 means no sense)
  91.     LABEL   scsi_SIZEOF
  92.  
  93.  
  94. ;------ scsi_Flags ------
  95. SCSIF_WRITE        EQU    0    ; intended data direction is out
  96. SCSIF_READ        EQU    1    ; intended data direction is in
  97. SCSIB_READ_WRITE    EQU    0    ; (the bit to test)
  98.  
  99. SCSIF_NOSENSE        EQU    0    ; no automatic request sense
  100. SCSIF_AUTOSENSE        EQU    2    ; do standard extended request sense
  101.                     ; on check condition
  102. SCSIF_OLDAUTOSENSE    EQU    6    ; do 4 byte non-extended request
  103.                     ; sense on check condition
  104. SCSIB_AUTOSENSE        EQU    1    ; (the bit to test)
  105. SCSIB_OLDAUTOSENSE    EQU    2    ; (the bit to test)
  106.  
  107. ;------ SCSI io_Error values ------
  108. HFERR_SelfUnit        EQU    40    ; cannot issue SCSI command to self
  109. HFERR_DMA        EQU    41    ; DMA error
  110. HFERR_Phase        EQU    42    ; illegal or unexpected SCSI phase
  111. HFERR_Parity        EQU    43    ; SCSI parity error
  112. HFERR_SelTimeout    EQU    44    ; Select timed out
  113. HFERR_BadStatus        EQU    45    ; status and/or sense error
  114.  
  115. ;------ OpenDevice io_Error values ------
  116. HFERR_NoBoard        EQU    50    ; Open failed for non-existant board
  117.  
  118.     ENDC    ; DEVICES_SCSIDISK_I
  119.