xref: /openbsd/sys/dev/ic/aic7xxx_cam.h (revision 4b1a56af)
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