cam.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Data structures and definitions for the CAM system.
  3.  *
  4.  * Copyright (c) 1997 Justin T. Gibbs.
  5.  * Copyright (c) 2000 Adaptec Inc.
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions, and the following disclaimer,
  13.  *    without modification.
  14.  * 2. The name of the author may not be used to endorse or promote products
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * Alternatively, this software may be distributed under the terms of the
  18.  * GNU General Public License ("GPL").
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  21.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  24.  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30.  * SUCH DAMAGE.
  31.  *
  32.  * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/cam.h#11 $
  33.  */
  34. #ifndef _AIC7XXX_CAM_H
  35. #define _AIC7XXX_CAM_H 1
  36. /* Provide a mapping from CAM constructs to Linux SCSI constructs */
  37. #define CAM_BUS_WILDCARD ((u_int)~0)
  38. #define CAM_TARGET_WILDCARD ((u_int)~0)
  39. #define CAM_LUN_WILDCARD ((u_int)~0)
  40. /* CAM Status field values */
  41. typedef enum {
  42. /* CCB request is in progress */
  43. CAM_REQ_INPROG = 0x3F, /* Some value unused by Linux */
  44. /* CCB request completed without error */
  45. CAM_REQ_CMP = DID_OK,
  46. /* CCB request aborted by the host */
  47. CAM_REQ_ABORTED = DID_ABORT,
  48. /* Unable to abort CCB request */
  49. CAM_UA_ABORT = DID_ERROR,
  50. /* CCB request completed with an error */
  51. CAM_REQ_CMP_ERR = DID_ERROR,
  52. /* CAM subsytem is busy */
  53. CAM_BUSY = DID_BUS_BUSY,
  54. /* CCB request was invalid */
  55. CAM_REQ_INVALID = DID_BAD_TARGET,
  56. /* Supplied Path ID is invalid */
  57. CAM_PATH_INVALID = DID_BAD_TARGET,
  58. /* Target Selection Timeout */
  59. CAM_SEL_TIMEOUT = DID_NO_CONNECT,
  60. /* Command timeout */
  61. CAM_CMD_TIMEOUT = DID_ERROR, /*
  62.       * Should never occur in Linux
  63.       * as the upper level code
  64.       * handles all timeout processing.
  65.       */
  66. /* SCSI error, look at error code in CCB */
  67. CAM_SCSI_STATUS_ERROR = DID_OK, /* Linux looks at status byte */
  68. /* SCSI Bus Reset Sent/Received */
  69. CAM_SCSI_BUS_RESET = DID_RESET,
  70. /* Uncorrectable parity error occurred */
  71. CAM_UNCOR_PARITY = DID_PARITY,
  72. /* Autosense: request sense cmd fail */
  73. CAM_AUTOSENSE_FAIL = DID_ERROR,
  74. /* No HBA Detected Error */
  75. CAM_NO_HBA = DID_ERROR,
  76. /* Data Overrun error */
  77. CAM_DATA_RUN_ERR = DID_ERROR,
  78. /* Unexpected Bus Free */
  79. CAM_UNEXP_BUSFREE = DID_ERROR,
  80. /* CCB length supplied is inadequate */
  81. CAM_CCB_LEN_ERR = DID_ERROR,
  82. /* Unable to provide requested capability */
  83. CAM_PROVIDE_FAIL = DID_ERROR,
  84. /* A SCSI BDR msg was sent to target */
  85. CAM_BDR_SENT = DID_RESET,
  86. /* CCB request terminated by the host */
  87. CAM_REQ_TERMIO = DID_ERROR,
  88. /* Unrecoverable Host Bus Adapter Error */
  89. CAM_UNREC_HBA_ERROR = DID_ERROR,
  90. /* The request was too large for this host */
  91. CAM_REQ_TOO_BIG = DID_ERROR,
  92. /*
  93.  * This request should be requeued to preserve
  94.  * transaction ordering.  This typically occurs
  95.  * when the SIM recognizes an error that should
  96.  * freeze the queue and must place additional
  97.  * requests for the target at the sim level
  98.  * back into the XPT queue.
  99.  */
  100. CAM_REQUEUE_REQ = DID_BUS_BUSY,
  101. CAM_STATUS_MASK = 0x3F
  102. } cam_status;
  103. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
  104. #define SCSI_DATA_READ 1
  105. #define SCSI_DATA_WRITE 2
  106. #define SCSI_DATA_NONE  3
  107. #endif
  108. /*
  109.  * Definitions for the asynchronous callback CCB fields.
  110.  */
  111. typedef enum {
  112. AC_GETDEV_CHANGED = 0x800,/* Getdev info might have changed */
  113. AC_INQ_CHANGED = 0x400,/* Inquiry info might have changed */
  114. AC_TRANSFER_NEG = 0x200,/* New transfer settings in effect */
  115. AC_LOST_DEVICE = 0x100,/* A device went away */
  116. AC_FOUND_DEVICE = 0x080,/* A new device was found */
  117. AC_PATH_DEREGISTERED = 0x040,/* A path has de-registered */
  118. AC_PATH_REGISTERED = 0x020,/* A new path has been registered */
  119. AC_SENT_BDR = 0x010,/* A BDR message was sent to target */
  120. AC_SCSI_AEN = 0x008,/* A SCSI AEN has been received */
  121. AC_UNSOL_RESEL = 0x002,/* Unsolicited reselection occurred */
  122. AC_BUS_RESET = 0x001 /* A SCSI bus reset occurred */
  123. } ac_code;
  124. typedef enum {
  125. CAM_DIR_IN = SCSI_DATA_READ,
  126. CAM_DIR_OUT = SCSI_DATA_WRITE,
  127. CAM_DIR_NONE = SCSI_DATA_NONE
  128. } ccb_flags;
  129. #endif /* _AIC7XXX_CAM_H */