scgcmd.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:4k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)scgcmd.h 2.15 99/10/18 Copyright 1986 J. Schilling */
  2. /*
  3.  * Definitions for the SCSI general driver 'scg'
  4.  *
  5.  * Copyright (c) 1986 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #ifndef _SCG_SCGCMD_H
  23. #define _SCG_SCGCMD_H
  24. #include <utypes.h>
  25. #include <btorder.h>
  26. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  27. #elif defined(_BIT_FIELDS_HTOL) /* Motorola byteorder */
  28. #else 
  29. /*
  30.  * #error will not work for all compilers (e.g. sunos4)
  31.  * The following line will abort compilation on all compilers
  32.  * if none of the above is defines. And that's  what we want.
  33.  */
  34. error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
  35. #endif
  36. #include <scg/scsisense.h>
  37. #include <scg/scsicdb.h>
  38. #include <intcvt.h>
  39. /*
  40.  * Messages that SCSI can send.
  41.  */
  42. #define SC_COMMAND_COMPLETE 0x00
  43. #define SC_SYNCHRONOUS 0x01
  44. #define SC_SAVE_DATA_PTR 0x02
  45. #define SC_RESTORE_PTRS 0x03
  46. #define SC_DISCONNECT 0x04
  47. #define SC_ABORT 0x06
  48. #define SC_MSG_REJECT 0x07
  49. #define SC_NO_OP 0x08
  50. #define SC_PARITY 0x09
  51. #define SC_IDENTIFY 0x80
  52. #define SC_DR_IDENTIFY 0xc0
  53. #define SC_DEVICE_RESET 0x0c
  54. #define SC_G0_CDBLEN 6 /* Len of Group 0 commands */
  55. #define SC_G1_CDBLEN 10 /* Len of Group 1 commands */
  56. #define SC_G5_CDBLEN 12 /* Len of Group 5 commands */
  57. #define SCG_MAX_CMD 24 /* 24 bytes max. size is supported */
  58. #define SCG_MAX_STATUS 3 /* XXX (sollte 4 allign.) Mamimum Status Len */
  59. #define SCG_MAX_SENSE 32 /* Mamimum Sense Len for auto Req. Sense */
  60. #define DEF_SENSE_LEN 16 /* Default Sense Len */
  61. #define CCS_SENSE_LEN 18 /* Sense Len for CCS compatible devices */
  62. struct scg_cmd {
  63. caddr_t addr; /* Address of data in user space */
  64. int size; /* DMA count for data transfer */
  65. int flags; /* see below for definition */
  66. int cdb_len; /* Size of SCSI command in bytes */
  67. /* NOTE: rel 4 uses this field only */
  68. /* with commands not in group 1 or 2*/
  69. int sense_len; /* for intr() if -1 don't get sense */
  70. int timeout; /* timeout in seconds */
  71. /* NOTE: actual resolution depends */
  72. /* on driver implementation */
  73. int kdebug; /* driver kernel debug level */
  74. int resid; /* Bytes not transfered */
  75. int error; /* Error code from scgintr() */
  76. int ux_errno; /* UNIX error code */
  77. #ifdef comment
  78. XXX struct scsi_status scb; ??? /* Status returnd by command */
  79. #endif
  80. union {
  81. struct scsi_status Scb;/* Status returnd by command */
  82. u_char cmd_scb[SCG_MAX_STATUS];
  83. } u_scb;
  84. #define scb u_scb.Scb
  85. #ifdef comment
  86. XXX struct scsi_sense sense; ??? /* Sense bytes from command */
  87. #endif
  88. union {
  89. struct scsi_sense Sense;/* Sense bytes from command */
  90. u_char cmd_sense[SCG_MAX_SENSE];
  91. } u_sense;
  92. #define sense u_sense.Sense
  93. int sense_count; /* Number of bytes valid in sense */
  94. int target; /* SCSI target id */
  95. union { /* SCSI command descriptor block */
  96. struct scsi_g0cdb g0_cdb;
  97. struct scsi_g1cdb g1_cdb;
  98. struct scsi_g5cdb g5_cdb;
  99. u_char cmd_cdb[SCG_MAX_CMD];
  100. } cdb; /* 24 bytes max. size is supported */
  101. };
  102. #define dma_read flags /* 1 if DMA to Sun, 0 otherwise */
  103. /*
  104.  * definition for flags field in scg_cmd struct
  105.  */
  106. #define SCG_RECV_DATA 0x0001 /* DMA direction to Sun */
  107. #define SCG_DISRE_ENA 0x0002 /* enable disconnect/reconnect */
  108. #define SCG_SILENT 0x0004 /* be silent on errors */
  109. #define SCG_CMD_RETRY 0x0008 /* enable retries */
  110. #define SCG_NOPARITY 0x0010 /* disable parity for this command */
  111. /*
  112.  * definition for error field in scg_cmd struct
  113.  *
  114.  * The codes refer to SCSI general errors, not to device
  115.  * specific errors.  Device specific errors are discovered
  116.  * by checking the sense data.
  117.  * The distinction between retryable and fatal is somewhat ad hoc.
  118.  */
  119. #define SCG_NO_ERROR 0 /* cdb transported without error */
  120. #define SCG_RETRYABLE 1 /* any other case */
  121. #define SCG_FATAL 2 /* could not select target */
  122. #define SCG_TIMEOUT 3 /* driver timed out */
  123. #endif /* _SCG_SCGCMD_H */