1*4b1a56afSjsg /* $OpenBSD: aic7xxx_cam.h,v 1.10 2022/01/09 05:42:38 jsg Exp $ */ 2bff5382bSkrw /* $NetBSD: aic7xxx_cam.h,v 1.3 2003/04/20 11:17:20 fvdl Exp $ */ 3bff5382bSkrw 4bff5382bSkrw /* 5bff5382bSkrw * Data structures and definitions for the CAM system. 6bff5382bSkrw * 7bff5382bSkrw * Copyright (c) 1997 Justin T. Gibbs. 8bff5382bSkrw * Copyright (c) 2000 Adaptec Inc. 9bff5382bSkrw * All rights reserved. 10bff5382bSkrw * 11bff5382bSkrw * Redistribution and use in source and binary forms, with or without 12bff5382bSkrw * modification, are permitted provided that the following conditions 13bff5382bSkrw * are met: 14bff5382bSkrw * 1. Redistributions of source code must retain the above copyright 15bff5382bSkrw * notice, this list of conditions, and the following disclaimer, 16bff5382bSkrw * without modification. 17bff5382bSkrw * 2. The name of the author may not be used to endorse or promote products 18bff5382bSkrw * derived from this software without specific prior written permission. 19bff5382bSkrw * 20bff5382bSkrw * Alternatively, this software may be distributed under the terms of the 21bff5382bSkrw * GNU General Public License ("GPL"). 22bff5382bSkrw * 23bff5382bSkrw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 24bff5382bSkrw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25bff5382bSkrw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26bff5382bSkrw * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 27bff5382bSkrw * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28bff5382bSkrw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29bff5382bSkrw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30bff5382bSkrw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31bff5382bSkrw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32bff5382bSkrw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33bff5382bSkrw * SUCH DAMAGE. 34bff5382bSkrw * 35bff5382bSkrw */ 36bff5382bSkrw /* 37bff5382bSkrw * Ported from FreeBSD by Pascal Renauld, Network Storage Solutions, Inc. - April 2003 38bff5382bSkrw */ 39bff5382bSkrw 40bff5382bSkrw #ifndef _AIC7XXX_CAM_H 41bff5382bSkrw #define _AIC7XXX_CAM_H 42bff5382bSkrw 43bff5382bSkrw #define CAM_BUS_WILDCARD ((u_int)~0) 44bff5382bSkrw #define CAM_TARGET_WILDCARD ((u_int)~0) 45bff5382bSkrw #define CAM_LUN_WILDCARD -1 46bff5382bSkrw 47bff5382bSkrw /* 483ed70badSkrw * Translate FreeBSD names for SCSI status byte values to OpenBSD names. 49bff5382bSkrw */ 50bff5382bSkrw #define SCSI_STATUS_OK SCSI_OK 51bff5382bSkrw #define SCSI_STATUS_CHECK_COND SCSI_CHECK 52bff5382bSkrw #define SCSI_STATUS_COND_MET SCSI_COND_MET 53bff5382bSkrw #define SCSI_STATUS_BUSY SCSI_BUSY 54bff5382bSkrw #define SCSI_STATUS_INTERMED SCSI_INTERM 55bff5382bSkrw #define SCSI_STATUS_INTERMED_COND_MET SCSI_INTERMED_COND_MET 56bff5382bSkrw #define SCSI_STATUS_RESERV_CONFLICT SCSI_RESERV_CONFLICT 57bff5382bSkrw #define SCSI_STATUS_CMD_TERMINATED SCSI_TERMINATED 58bff5382bSkrw #define SCSI_STATUS_QUEUE_FULL SCSI_QUEUE_FULL 59bff5382bSkrw 60bff5382bSkrw #define XS_CTL_DATA_IN SCSI_DATA_IN 61bff5382bSkrw #define XS_CTL_POLL SCSI_POLL 62bff5382bSkrw #define XS_CTL_RESET SCSI_RESET 63bff5382bSkrw 64298a2796Skrw #define MSG_EXT_PPR_QAS_REQ MSG_EXT_PPR_PROT_QAS 65298a2796Skrw #define MSG_EXT_PPR_IU_REQ MSG_EXT_PPR_PROT_IUS 66bff5382bSkrw #define MSG_EXT_PPR_DT_REQ MSG_EXT_PPR_PROT_DT 67bff5382bSkrw #define MSG_ORDERED_TASK MSG_ORDERED_Q_TAG 68bff5382bSkrw #define MSG_SIMPLE_TASK MSG_SIMPLE_Q_TAG 69bff5382bSkrw #define MSG_ABORT_TASK MSG_ABORT_TAG 70bff5382bSkrw 7188398cf2Skrw #define callout_reset(timer, timeout, func, arg) do { \ 7288398cf2Skrw if (!timeout_initialized((timer))) \ 7388398cf2Skrw timeout_set((timer), (func), (arg)); \ 7488398cf2Skrw timeout_add((timer), (timeout)); \ 7588398cf2Skrw } while (0) 76bff5382bSkrw 776ffc4d0cSkrw #define aic_delay DELAY 786ffc4d0cSkrw 796ffc4d0cSkrw #define aic_htobe16(x) htobe16(x) 806ffc4d0cSkrw #define aic_htobe32(x) htobe32(x) 816ffc4d0cSkrw #define aic_htobe64(x) htobe64(x) 826ffc4d0cSkrw #define aic_htole16(x) htole16(x) 836ffc4d0cSkrw #define aic_htole32(x) htole32(x) 846ffc4d0cSkrw #define aic_htole64(x) htole64(x) 856ffc4d0cSkrw 866ffc4d0cSkrw #define aic_be16toh(x) be16toh(x) 876ffc4d0cSkrw #define aic_be32toh(x) be32toh(x) 886ffc4d0cSkrw #define aic_be64toh(x) be64toh(x) 896ffc4d0cSkrw #define aic_le16toh(x) letoh16(x) 906ffc4d0cSkrw #define aic_le32toh(x) letoh32(x) 916ffc4d0cSkrw #define aic_le64toh(x) letoh64(x) 926ffc4d0cSkrw 93bff5382bSkrw #define xs_control flags 94bff5382bSkrw #define xs_callout stimeout 95bff5382bSkrw #define xs_status status 96bff5382bSkrw 97bff5382bSkrw /* CAM Status field values */ 98bff5382bSkrw typedef enum { 99bff5382bSkrw CAM_REQ_INPROG, /* CCB request is in progress */ 100bff5382bSkrw CAM_REQ_CMP, /* CCB request completed without error */ 101bff5382bSkrw CAM_REQ_ABORTED, /* CCB request aborted by the host */ 102bff5382bSkrw CAM_UA_ABORT, /* Unable to abort CCB request */ 103bff5382bSkrw CAM_REQ_CMP_ERR, /* CCB request completed with an error */ 104*4b1a56afSjsg CAM_BUSY, /* CAM subsystem is busy */ 105bff5382bSkrw CAM_REQ_INVALID, /* CCB request was invalid */ 106bff5382bSkrw CAM_PATH_INVALID, /* Supplied Path ID is invalid */ 107bff5382bSkrw CAM_SEL_TIMEOUT, /* Target Selection Timeout */ 108bff5382bSkrw CAM_CMD_TIMEOUT, /* Command timeout */ 109bff5382bSkrw CAM_SCSI_STATUS_ERROR, /* SCSI error, look at error code in CCB */ 110bff5382bSkrw CAM_SCSI_BUS_RESET, /* SCSI Bus Reset Sent/Received */ 111bff5382bSkrw CAM_UNCOR_PARITY, /* Uncorrectable parity error occurred */ 112bff5382bSkrw CAM_AUTOSENSE_FAIL, /* Autosense: request sense cmd fail */ 113bff5382bSkrw CAM_NO_HBA, /* No HBA Detected Error */ 114bff5382bSkrw CAM_DATA_RUN_ERR, /* Data Overrun error */ 115bff5382bSkrw CAM_UNEXP_BUSFREE, /* Unexpected Bus Free */ 116bff5382bSkrw CAM_SEQUENCE_FAIL, /* Protocol Violation */ 117bff5382bSkrw CAM_CCB_LEN_ERR, /* CCB length supplied is inadequate */ 118bff5382bSkrw CAM_PROVIDE_FAIL, /* Unable to provide requested capability */ 119bff5382bSkrw CAM_BDR_SENT, /* A SCSI BDR msg was sent to target */ 120bff5382bSkrw CAM_REQ_TERMIO, /* CCB request terminated by the host */ 121bff5382bSkrw CAM_UNREC_HBA_ERROR, /* Unrecoverable Host Bus Adapter Error */ 122bff5382bSkrw CAM_REQ_TOO_BIG, /* The request was too large for this host */ 123bff5382bSkrw CAM_UA_TERMIO, /* Unable to terminate I/O CCB request */ 124bff5382bSkrw CAM_MSG_REJECT_REC, /* Message Reject Received */ 125bff5382bSkrw CAM_DEV_NOT_THERE, /* SCSI Device Not Installed/there */ 126bff5382bSkrw CAM_RESRC_UNAVAIL, /* Resource Unavailable */ 127bff5382bSkrw /* 128bff5382bSkrw * This request should be requeued to preserve 129bff5382bSkrw * transaction ordering. This typically occurs 130bff5382bSkrw * when the SIM recognizes an error that should 131bff5382bSkrw * freeze the queue and must place additional 132bff5382bSkrw * requests for the target at the sim level 133bff5382bSkrw * back into the XPT queue. 134bff5382bSkrw */ 135bff5382bSkrw CAM_REQUEUE_REQ, 136bff5382bSkrw CAM_DEV_QFRZN = 0x40, 137bff5382bSkrw 138bff5382bSkrw CAM_STATUS_MASK = 0x3F 139bff5382bSkrw } cam_status; 140bff5382bSkrw 141bff5382bSkrw typedef enum { 1423ed70badSkrw CAM_DIR_IN = SCSI_DATA_IN, 143435e2388Skrw CAM_DIR_OUT = SCSI_DATA_OUT 144bff5382bSkrw } ccb_flags; 145bff5382bSkrw 146bff5382bSkrw typedef enum { 147bff5382bSkrw AC_BUS_RESET = 0x001, 148bff5382bSkrw AC_UNSOL_RESEL = 0x002, 149bff5382bSkrw AC_SCSI_AEN = 0x008, 150bff5382bSkrw AC_SENT_BDR = 0x010, 151bff5382bSkrw AC_PATH_REGISTERED = 0x020, 152bff5382bSkrw AC_PATH_DEREGISTERED = 0x040, 153bff5382bSkrw AC_FOUND_DEVICE = 0x080, 154bff5382bSkrw AC_LOST_DEVICE = 0x100, 155bff5382bSkrw AC_TRANSFER_NEG = 0x200, 156bff5382bSkrw AC_INQ_CHANGED = 0x400, 157435e2388Skrw AC_GETDEV_CHANGED = 0x800 158bff5382bSkrw } ac_code; 159bff5382bSkrw 160bff5382bSkrw #endif /* _AIC7XXX_CAM_H */ 161