102b636c6Sjdunham /*
202b636c6Sjdunham  * CDDL HEADER START
302b636c6Sjdunham  *
402b636c6Sjdunham  * The contents of this file are subject to the terms of the
502b636c6Sjdunham  * Common Development and Distribution License (the "License").
602b636c6Sjdunham  * You may not use this file except in compliance with the License.
702b636c6Sjdunham  *
802b636c6Sjdunham  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
902b636c6Sjdunham  * or http://www.opensolaris.org/os/licensing.
1002b636c6Sjdunham  * See the License for the specific language governing permissions
1102b636c6Sjdunham  * and limitations under the License.
1202b636c6Sjdunham  *
1302b636c6Sjdunham  * When distributing Covered Code, include this CDDL HEADER in each
1402b636c6Sjdunham  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1502b636c6Sjdunham  * If applicable, add the following below this CDDL HEADER, with the
1602b636c6Sjdunham  * fields enclosed by brackets "[]" replaced with your own identifying
1702b636c6Sjdunham  * information: Portions Copyright [yyyy] [name of copyright owner]
1802b636c6Sjdunham  *
1902b636c6Sjdunham  * CDDL HEADER END
2002b636c6Sjdunham  */
2102b636c6Sjdunham /*
22*716c1805SNattuvetty Bhavyan  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
2302b636c6Sjdunham  */
2402b636c6Sjdunham 
2502b636c6Sjdunham #ifndef	_SYS_SCSI_GENERIC_PERSIST_H
2602b636c6Sjdunham #define	_SYS_SCSI_GENERIC_PERSIST_H
2702b636c6Sjdunham 
2802b636c6Sjdunham #ifdef	__cplusplus
2902b636c6Sjdunham extern "C" {
3002b636c6Sjdunham #endif
3102b636c6Sjdunham 
3202b636c6Sjdunham /*
3302b636c6Sjdunham  * SCSI Persistence Data
3402b636c6Sjdunham  *
3502b636c6Sjdunham  * Format of data returned as a result of PERSISTENCE RESERVER { IN | OUT }
3602b636c6Sjdunham  */
3702b636c6Sjdunham 
3802b636c6Sjdunham /*
3902b636c6Sjdunham  * SPC-3 revision 23, Section 6.11.1, Table 102
4002b636c6Sjdunham  * Persistent Reservations
4102b636c6Sjdunham  * Persistent Reserve In service actions
4202b636c6Sjdunham  */
4302b636c6Sjdunham #define	PR_IN_READ_KEYS		0x0 /* Read all registered reservation keys */
4402b636c6Sjdunham #define	PR_IN_READ_RESERVATION	0x1 /* Reads th persistent reservations */
4502b636c6Sjdunham #define	PR_IN_REPORT_CAPABILITIES 0x2 /* Returns capability information */
4602b636c6Sjdunham #define	PR_IN_READ_FULL_STATUS	0x3 /* Reads complete information about all */
4702b636c6Sjdunham 				    /* registrations and the persistent */
4802b636c6Sjdunham 				    /* reservations, if any */
4902b636c6Sjdunham /*
5002b636c6Sjdunham  * SPC-3 revision 23, Section 6.11.3.3, Table 106
5102b636c6Sjdunham  * Persistent reservation scope codes
5202b636c6Sjdunham  */
5302b636c6Sjdunham #define	PR_LU_SCOPE		0x0	/* Persistent reservation applies to */
5402b636c6Sjdunham 					/* full logical unit */
5502b636c6Sjdunham /*
5602b636c6Sjdunham  * SPC-3 revision 23, Section 6.11.3.4, Table 107
5702b636c6Sjdunham  * Persistent Reservations
5802b636c6Sjdunham  * Persistent reservation type codes
5902b636c6Sjdunham  */
6002b636c6Sjdunham #define	PGR_TYPE_WR_EX		0x1	/* Write Exclusive */
6102b636c6Sjdunham #define	PGR_TYPE_EX_AC		0x3	/* Exclusive Access */
6202b636c6Sjdunham #define	PGR_TYPE_WR_EX_RO	0x5	/* Write Exclusive, Registrants Only */
6302b636c6Sjdunham #define	PGR_TYPE_EX_AC_RO	0x6	/* Exclusive Access, Registrants Only */
6402b636c6Sjdunham #define	PGR_TYPE_WR_EX_AR	0x7	/* Write Exclusive, All Registrants */
6502b636c6Sjdunham #define	PGR_TYPE_EX_AC_AR	0x8	/* Exclusive Access, All Registrants */
6602b636c6Sjdunham 
67*716c1805SNattuvetty Bhavyan /*
68*716c1805SNattuvetty Bhavyan  * SPC-3 revision 23, Section 6.12.2, Table 113
69*716c1805SNattuvetty Bhavyan  * Persistent Reservations
70*716c1805SNattuvetty Bhavyan  * Persistent Reserve Out service action codes
71*716c1805SNattuvetty Bhavyan  */
72*716c1805SNattuvetty Bhavyan #define	PR_OUT_REGISTER		0x0	/* Register/unregister a reservation */
73*716c1805SNattuvetty Bhavyan 					/* key with the device server */
74*716c1805SNattuvetty Bhavyan #define	PR_OUT_RESERVE		0x1	/* Create a persistent reservation */
75*716c1805SNattuvetty Bhavyan 					/* having a specified SCOPE & TYPE */
76*716c1805SNattuvetty Bhavyan #define	PR_OUT_RELEASE		0x2	/* Release the selected persistent */
77*716c1805SNattuvetty Bhavyan 					/* reservation */
78*716c1805SNattuvetty Bhavyan #define	PR_OUT_CLEAR		0x3	/* Clears all reservation keys and */
79*716c1805SNattuvetty Bhavyan 					/* all persistent reservations */
80*716c1805SNattuvetty Bhavyan #define	PR_OUT_PREEMPT		0x4	/* Preempts persistent reservations */
81*716c1805SNattuvetty Bhavyan 					/* and/or removes reservations */
82*716c1805SNattuvetty Bhavyan #define	PR_OUT_PREEMPT_ABORT	0x5	/* Preempts persistent reservations */
83*716c1805SNattuvetty Bhavyan 					/* and/or removes reservations, and */
84*716c1805SNattuvetty Bhavyan 					/* aborts all tasks for all preempted */
85*716c1805SNattuvetty Bhavyan 					/* I_T nexuses */
86*716c1805SNattuvetty Bhavyan #define	PR_OUT_REGISTER_AND_IGNORE_EXISTING_KEY	0x06
87*716c1805SNattuvetty Bhavyan 					/* Register a reservation key with */
88*716c1805SNattuvetty Bhavyan 					/* the device server, or unregister a */
89*716c1805SNattuvetty Bhavyan 					/* reservation key */
90*716c1805SNattuvetty Bhavyan #define	PR_OUT_REGISTER_MOVE	0x7	/* Register a reservation key for */
91*716c1805SNattuvetty Bhavyan 					/* another I_T nexus with the device */
92*716c1805SNattuvetty Bhavyan 					/* server and move a persistent */
93*716c1805SNattuvetty Bhavyan 					/* reservation to the I_T nexus */
94*716c1805SNattuvetty Bhavyan 
95*716c1805SNattuvetty Bhavyan 
9602b636c6Sjdunham /*
9702b636c6Sjdunham  * Information obtained from:
9802b636c6Sjdunham  *	SPC-3, Revision 23
9902b636c6Sjdunham  *	Section 6.11.5 PERSISTENCE RESERVE IN
10002b636c6Sjdunham  *	Table 111 - full status descriptor format
10102b636c6Sjdunham  */
10202b636c6Sjdunham /* Table 289 - iSCSI Initiator Device TransportID format */
10302b636c6Sjdunham 
10402b636c6Sjdunham #define	iSCSI_PROTOCOL_ID	0x5	/* Table 262 - iSCSI Protocol ID  */
10502b636c6Sjdunham #define	WW_UID_DEVICE_NAME	0x0	/* Table 288 - iSCSI Transport IDs */
10602b636c6Sjdunham 
107*716c1805SNattuvetty Bhavyan /*
108*716c1805SNattuvetty Bhavyan  * Definitions related SCSI Transport ID
109*716c1805SNattuvetty Bhavyan  * SPC3 rev 23, Tables 284-287
110*716c1805SNattuvetty Bhavyan  */
111*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_SIZE			24
112*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_FC_PORT_NAME_SIZE	8
113*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_SPI_ADDRESS_LEN	2
114*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_SPI_REL_TGTPTID_LEN	2
115*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_SBP_PORT_NAME_LEN	8
116*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_SRP_PORT_NAME_LEN	16
117*716c1805SNattuvetty Bhavyan #define	SCSI_TPTID_ISCSI_ISID_SEPERATOR	",i,0x"
11802b636c6Sjdunham 
11902b636c6Sjdunham #if defined(_BIT_FIELDS_LTOH)
12002b636c6Sjdunham /*
12102b636c6Sjdunham  * Information obtained from:
12202b636c6Sjdunham  *	SPC-3, Revision 23
12302b636c6Sjdunham  *	Section 6.11.1 PERSISTENCE RESERVE IN
12402b636c6Sjdunham  *	Table 101 - PERSISTENCE RESERVE IN command
12502b636c6Sjdunham  */
12602b636c6Sjdunham typedef struct scsi_cdb_prin {
12702b636c6Sjdunham 	uint8_t			cmd;
12802b636c6Sjdunham 	uint8_t			action : 5,
12902b636c6Sjdunham 				resbits : 3;
13002b636c6Sjdunham 	uint8_t			resbytes[5];
13102b636c6Sjdunham 	uint8_t			alloc_len[2];
13202b636c6Sjdunham 	uint8_t			control;
13302b636c6Sjdunham } scsi_cdb_prin_t;
13402b636c6Sjdunham 
13502b636c6Sjdunham /*
13602b636c6Sjdunham  * Information obtained from:
13702b636c6Sjdunham  *	SPC-3, Revision 23
13802b636c6Sjdunham  *	Section 6.11.2 PERSISTENCE RESERVE IN
13902b636c6Sjdunham  *	Table 103/104/105 - parameter data for READS KEYS
14002b636c6Sjdunham  */
14102b636c6Sjdunham typedef struct scsi_prin_rsrvdesc {
14202b636c6Sjdunham 	uint8_t			reservation_key[8];
14302b636c6Sjdunham 	uint8_t			obsolete1[4];
14402b636c6Sjdunham 	uint8_t			resbytes;
14502b636c6Sjdunham 	uint8_t			type : 4,
14602b636c6Sjdunham 				scope : 4;
14702b636c6Sjdunham 	uint8_t			obsolete2[2];
14802b636c6Sjdunham } scsi_prin_rsrvdesc_t;
14902b636c6Sjdunham typedef struct scsi_prin_readrsrv {
15002b636c6Sjdunham 	uint8_t			PRgeneration[4];
15102b636c6Sjdunham 	uint8_t			add_len[4];
15268941780Sjdunham 	union {
15368941780Sjdunham 		uint64_t		service_key[1];
15468941780Sjdunham 		scsi_prin_rsrvdesc_t	res_key_list[1];
15568941780Sjdunham 	} key_list;
15602b636c6Sjdunham } scsi_prin_readrsrv_t;
15702b636c6Sjdunham 
15802b636c6Sjdunham /*
15902b636c6Sjdunham  * Information obtained from:
16002b636c6Sjdunham  *	SPC-3, Revision 23
16102b636c6Sjdunham  *	Section 6.11.4 PERSISTENCE RESERVE IN
16202b636c6Sjdunham  * 	Table 108 - parameter data for REPORT CAPABILTIES
16302b636c6Sjdunham  */
16402b636c6Sjdunham typedef struct scsi_per_res_type {
16502b636c6Sjdunham 	uint8_t			resbits1 : 1,
16602b636c6Sjdunham 				wr_ex : 1,
16702b636c6Sjdunham 				resbits2 : 1,
16802b636c6Sjdunham 				ex_ac : 1,
16902b636c6Sjdunham 				resbits3 : 1,
17002b636c6Sjdunham 				wr_ex_ro : 1,
17102b636c6Sjdunham 				ex_ac_ro : 1,
17202b636c6Sjdunham 				wr_ex_ar : 1;
17302b636c6Sjdunham 	uint8_t			ex_ac_ar : 1,
17402b636c6Sjdunham 				resbits4 : 7;
17502b636c6Sjdunham } scsi_per_res_type_t;
17670c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 
17770c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States /*
17870c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Refer SPC-3, Revision 23
17970c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Section 6.11.4 REPORT CAPABILITIES service action
18070c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States  */
18102b636c6Sjdunham typedef struct scsi_prin_rpt_cap {
18202b636c6Sjdunham 	uint8_t			length[2];
18302b636c6Sjdunham 	uint8_t			ptpl_c : 1,
18402b636c6Sjdunham 				resbits1 : 1,
18502b636c6Sjdunham 				atp_c : 1,
18602b636c6Sjdunham 				sip_c : 1,
18702b636c6Sjdunham 				crh : 1,
18802b636c6Sjdunham 				resbits2 : 3;
18902b636c6Sjdunham 	uint8_t			ptpl_a : 1,
19002b636c6Sjdunham 				resbits3 : 6,
19102b636c6Sjdunham 				tmv : 1;
19202b636c6Sjdunham 	scsi_per_res_type_t	pr_type;
19302b636c6Sjdunham 	uint8_t			resbytes[2];
19402b636c6Sjdunham } scsi_prin_rpt_cap_t;
19502b636c6Sjdunham 
19602b636c6Sjdunham /*
1978fe96085Stim szeto  * Refer SPC-3, Revision 23
1988fe96085Stim szeto  * Section 7.5.4 TransportID identifiers
19902b636c6Sjdunham  */
20002b636c6Sjdunham typedef struct scsi_transport_id {
20102b636c6Sjdunham 	uint8_t			protocol_id : 4,
20202b636c6Sjdunham 				resbits : 2,
20302b636c6Sjdunham 				format_code : 2;
2048fe96085Stim szeto 	uint8_t			protocol_data[1];
2058fe96085Stim szeto } scsi_transport_id_t;
2068fe96085Stim szeto 
2078fe96085Stim szeto typedef struct scsi_fc_transport_id {
2088fe96085Stim szeto 	uint8_t			protocol_id : 4,
2098fe96085Stim szeto 				resbits : 2,
2108fe96085Stim szeto 				format_code : 2;
2118fe96085Stim szeto 	uint8_t			rsvbytes1[7];
2128fe96085Stim szeto 	uint8_t			port_name[8];
2138fe96085Stim szeto 	uint8_t			rsvbytes2[8];
2148fe96085Stim szeto } scsi_fc_transport_id_t;
2158fe96085Stim szeto 
2168fe96085Stim szeto typedef struct iscsi_transport_id {
2178fe96085Stim szeto 	uint8_t			protocol_id : 4,
2188fe96085Stim szeto 				resbits : 2,
2198fe96085Stim szeto 				format_code : 2;
2208fe96085Stim szeto 	uint8_t			rsvbyte1;
22102b636c6Sjdunham 	uint8_t			add_len[2];
22202b636c6Sjdunham 	char			iscsi_name[1];
2238fe96085Stim szeto } iscsi_transport_id_t;
2248fe96085Stim szeto 
22570c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States typedef struct scsi_srp_transport_id {
22670c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint8_t			protocol_id : 4,
22770c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 				resbits : 2,
22870c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 				format_code : 2;
22970c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint8_t			rsvbytes1[7];
23070c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint8_t			srp_name[16];
23170c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States } scsi_srp_transport_id_t;
23270c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 
2338fe96085Stim szeto /*
2348fe96085Stim szeto  * Information obtained from:
2358fe96085Stim szeto  *	SPC-3, Revision 23
2368fe96085Stim szeto  *	Section 6.11.5 PERSISTENCE RESERVE IN
2378fe96085Stim szeto  * 	Table 110/111 - parameter data for READ FULL STATUS
2388fe96085Stim szeto  *	Table 281 - TransportId format
2398fe96085Stim szeto  */
2408fe96085Stim szeto 
24102b636c6Sjdunham typedef struct scsi_prin_status_t {
24202b636c6Sjdunham 	uint8_t			reservation_key[8];
24302b636c6Sjdunham 	uint8_t			resbytes1[4];
24402b636c6Sjdunham 	uint8_t			r_holder : 1,
24502b636c6Sjdunham 				all_tg_pt : 1,
24602b636c6Sjdunham 				resbits : 6;
24702b636c6Sjdunham 	uint8_t			type : 4,
24802b636c6Sjdunham 				scope : 4;
24902b636c6Sjdunham 	uint8_t			resbytes2[4];
25002b636c6Sjdunham 	uint8_t			rel_tgt_port_id[2];
25102b636c6Sjdunham 	uint8_t			add_len[4];
25202b636c6Sjdunham 	scsi_transport_id_t	trans_id;
25302b636c6Sjdunham } scsi_prin_status_t;
25470c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 
25502b636c6Sjdunham typedef struct scsi_prin_full_status {
25602b636c6Sjdunham 	uint8_t			PRgeneration[4];
25702b636c6Sjdunham 	uint8_t			add_len[4];
25802b636c6Sjdunham 	scsi_prin_status_t	full_desc[1];
25902b636c6Sjdunham } scsi_prin_full_status_t;
26002b636c6Sjdunham 
26102b636c6Sjdunham /*
26202b636c6Sjdunham  * Information obtained from:
26302b636c6Sjdunham  *	SPC-3, Revision 23
26402b636c6Sjdunham  *	Section 6.12.1 PERSISTENCE RESERVE OUT
26502b636c6Sjdunham  *	Table 112 - PERSISTENCE RESERVE OUT command
26602b636c6Sjdunham  */
26702b636c6Sjdunham typedef struct scsi_cdb_prout {
26802b636c6Sjdunham 	uint8_t			cmd;
26902b636c6Sjdunham 	uint8_t			action : 5,
27002b636c6Sjdunham 				resbits : 3;
27102b636c6Sjdunham 	uint8_t			type : 4,
27202b636c6Sjdunham 				scope : 4;
27302b636c6Sjdunham 	uint8_t			resbytes[2];
27402b636c6Sjdunham 	uint8_t			param_len[4];
27502b636c6Sjdunham 	uint8_t			control;
27602b636c6Sjdunham } scsi_cdb_prout_t;
27702b636c6Sjdunham 
27802b636c6Sjdunham /*
27902b636c6Sjdunham  * Information obtained from:
28002b636c6Sjdunham  *	SPC-3, Revision 23
28102b636c6Sjdunham  *	Section 6.12.3 PERSISTENCE RESERVE OUT
28202b636c6Sjdunham  *	Table 114 - PERSISTENCE RESERVE OUT parameter list
28302b636c6Sjdunham  */
28402b636c6Sjdunham typedef struct scsi_prout_plist {
28502b636c6Sjdunham 	uint8_t			reservation_key[8];
28602b636c6Sjdunham 	uint8_t			service_key[8];
28702b636c6Sjdunham 	uint8_t			obsolete1[4];
28802b636c6Sjdunham 	uint8_t			aptpl : 1,
28902b636c6Sjdunham 				resbits1 : 1,
29002b636c6Sjdunham 				all_tg_pt : 1,
29102b636c6Sjdunham 				spec_i_pt : 1,
29202b636c6Sjdunham 				resbits2 : 4;
29302b636c6Sjdunham 	uint8_t			resbytes1;
29402b636c6Sjdunham 	uint8_t			obsolete2[2];
29502b636c6Sjdunham 	uint8_t			apd[1];
29602b636c6Sjdunham } scsi_prout_plist_t;
29702b636c6Sjdunham 
2988fe96085Stim szeto /*
2998fe96085Stim szeto  * Information obtained from:
3008fe96085Stim szeto  *	SPC-3, Revision 23
3018fe96085Stim szeto  *	Section 6.12.4 PERSISTENCE RESERVE OUT command with REGISTER AND MOVE
3028fe96085Stim szeto  *	Table 117 - REGISTER and MOVE service action  parameter list
3038fe96085Stim szeto  */
3048fe96085Stim szeto typedef struct scsi_prout_reg_move_plist {
3058fe96085Stim szeto 	uint8_t			reservation_key[8];
3068fe96085Stim szeto 	uint8_t			service_key[8];
3078fe96085Stim szeto 	uint8_t			resbytes1;
3088fe96085Stim szeto 	uint8_t			aptpl : 1,
3098fe96085Stim szeto 				unreg : 1,
3108fe96085Stim szeto 				resbits1 : 6;
3118fe96085Stim szeto 	uint8_t			rel_tgt_port_id[2];
3128fe96085Stim szeto 	uint8_t			tptid_len[4];
3138fe96085Stim szeto 	uint8_t			tptid[1];
3148fe96085Stim szeto } scsi_prout_reg_move_plist_t;
3158fe96085Stim szeto 
31602b636c6Sjdunham #elif defined(_BIT_FIELDS_HTOL)
31702b636c6Sjdunham /*
31802b636c6Sjdunham  * Information obtained from:
31902b636c6Sjdunham  *	SPC-3, Revision 23
32002b636c6Sjdunham  *	Section 6.11.1 PERSISTENCE RESERVE IN
32102b636c6Sjdunham  *	Table 101 - PERSISTENCE RESERVE IN command
32202b636c6Sjdunham  */
32302b636c6Sjdunham typedef struct scsi_cdb_prin {
32402b636c6Sjdunham 	uint8_t			cmd;
32502b636c6Sjdunham 	uint8_t			resbits : 3,
32602b636c6Sjdunham 				action : 5;
32702b636c6Sjdunham 	uint8_t			resbytes[5];
32802b636c6Sjdunham 	uint8_t			alloc_len[2];
32902b636c6Sjdunham 	uint8_t			control;
33002b636c6Sjdunham } scsi_cdb_prin_t;
33102b636c6Sjdunham 
33202b636c6Sjdunham /*
33302b636c6Sjdunham  * Information obtained from:
33402b636c6Sjdunham  *	SPC-3, Revision 23
33502b636c6Sjdunham  *	Section 6.11.2 PERSISTENCE RESERVE IN
33602b636c6Sjdunham  *	Table 103/104/105 - parameter data for READS KEYS
33702b636c6Sjdunham  */
33802b636c6Sjdunham typedef struct scsi_prin_rsrvdesc {
33902b636c6Sjdunham 	uint8_t			reservation_key[8];
34002b636c6Sjdunham 	uint8_t			obsolete1[4];
34102b636c6Sjdunham 	uint8_t			resbytes;
34202b636c6Sjdunham 	uint8_t			scope : 4,
34302b636c6Sjdunham 				type : 4;
34468941780Sjdunham 	uint8_t			obsolete2[2];
34502b636c6Sjdunham } scsi_prin_rsrvdesc_t;
34602b636c6Sjdunham typedef struct scsi_prin_readrsrv {
34702b636c6Sjdunham 	uint8_t			PRgeneration[4];
34802b636c6Sjdunham 	uint8_t			add_len[4];
34968941780Sjdunham 	union {
35068941780Sjdunham 		uint64_t		service_key[1];
35168941780Sjdunham 		scsi_prin_rsrvdesc_t	res_key_list[1];
35268941780Sjdunham 	} key_list;
35302b636c6Sjdunham } scsi_prin_readrsrv_t;
35402b636c6Sjdunham 
35502b636c6Sjdunham /*
35602b636c6Sjdunham  * Information obtained from:
35702b636c6Sjdunham  *	SPC-3, Revision 23
35802b636c6Sjdunham  *	Section 6.11.4 PERSISTENCE RESERVE IN
35902b636c6Sjdunham  * 	Table 108 - parameter data for REPORT CAPABILTIES
36002b636c6Sjdunham  */
36102b636c6Sjdunham typedef struct scsi_per_res_type {
36202b636c6Sjdunham 	uint8_t			wr_ex_ar : 1,
36302b636c6Sjdunham 				ex_ac_ro : 1,
36402b636c6Sjdunham 				wr_ex_ro : 1,
36502b636c6Sjdunham 				resbits3 : 1,
36602b636c6Sjdunham 				ex_ac : 1,
36702b636c6Sjdunham 				resbits2 : 1,
36802b636c6Sjdunham 				wr_ex : 1,
36902b636c6Sjdunham 				resbits1 : 1;
37002b636c6Sjdunham 	uint8_t			resbits4 : 7,
37102b636c6Sjdunham 				ex_ac_ar : 1;
37202b636c6Sjdunham } scsi_per_res_type_t;
37370c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States /*
37470c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Refer SPC-3, Revision 23
37570c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States  * Section 6.11.4 REPORT CAPABILITIES service action
37670c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States  */
37702b636c6Sjdunham typedef struct scsi_prin_rpt_cap {
37802b636c6Sjdunham 	uint8_t			length[2];
37902b636c6Sjdunham 	uint8_t			resbits2 : 3,
38002b636c6Sjdunham 				crh : 1,
38102b636c6Sjdunham 				sip_c : 1,
38202b636c6Sjdunham 				atp_c : 1,
38302b636c6Sjdunham 				resbits1 : 1,
38402b636c6Sjdunham 				ptpl_c : 1;
38502b636c6Sjdunham 	uint8_t			tmv : 1,
38602b636c6Sjdunham 				resbits3 : 6,
38702b636c6Sjdunham 				ptpl_a : 1;
38802b636c6Sjdunham 	scsi_per_res_type_t	pr_type;
38902b636c6Sjdunham 	uint8_t			resbytes[2];
39002b636c6Sjdunham } scsi_prin_rpt_cap_t;
39102b636c6Sjdunham 
39202b636c6Sjdunham /*
3938fe96085Stim szeto  * Refer SPC-3, Revision 23
3948fe96085Stim szeto  * Section 7.5.4 TransportID identifiers
39502b636c6Sjdunham  */
39602b636c6Sjdunham typedef struct scsi_transport_id {
39702b636c6Sjdunham 	uint8_t			format_code : 2,
39802b636c6Sjdunham 				resbits : 2,
39902b636c6Sjdunham 				protocol_id : 4;
4008fe96085Stim szeto 	uint8_t			protocol_data[1];
4018fe96085Stim szeto } scsi_transport_id_t;
4028fe96085Stim szeto 
4038fe96085Stim szeto typedef struct scsi_fc_transport_id {
4048fe96085Stim szeto 	uint8_t			format_code : 2,
4058fe96085Stim szeto 				resbits : 2,
4068fe96085Stim szeto 				protocol_id : 4;
4078fe96085Stim szeto 	uint8_t			rsvbytes1[7];
4088fe96085Stim szeto 	uint8_t			port_name[8];
4098fe96085Stim szeto 	uint8_t			rsvbytes2[8];
4108fe96085Stim szeto } scsi_fc_transport_id_t;
4118fe96085Stim szeto 
4128fe96085Stim szeto typedef struct iscsi_transport_id {
4138fe96085Stim szeto 	uint8_t			format_code : 2,
4148fe96085Stim szeto 				resbits : 2,
4158fe96085Stim szeto 				protocol_id : 4;
4168fe96085Stim szeto 	uint8_t			rsvbyte1;
41702b636c6Sjdunham 	uint8_t			add_len[2];
41802b636c6Sjdunham 	char			iscsi_name[1];
4198fe96085Stim szeto } iscsi_transport_id_t;
4208fe96085Stim szeto 
42170c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 
42270c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States typedef struct scsi_srp_transport_id {
42370c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint8_t			format_code : 2,
42470c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 				resbits : 2,
42570c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 				protocol_id : 4;
42670c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint8_t			rsvbytes1[7];
42770c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 	uint8_t			srp_name[16];
42870c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States } scsi_srp_transport_id_t;
42970c284caSPeter Cudhea - Sun Microsystems - Burlington, MA United States 
4308fe96085Stim szeto /*
4318fe96085Stim szeto  * Information obtained from:
4328fe96085Stim szeto  *	SPC-3, Revision 23
4338fe96085Stim szeto  *	Section 6.11.5 PERSISTENCE RESERVE IN
4348fe96085Stim szeto  * 	Table 110/111 - parameter data for READ FULL STATUS
4358fe96085Stim szeto  *	Table 281 - TransportId format
4368fe96085Stim szeto  */
4378fe96085Stim szeto 
43802b636c6Sjdunham typedef struct scsi_prin_status_t {
43902b636c6Sjdunham 	uint8_t			reservation_key[8];
44002b636c6Sjdunham 	uint8_t			resbytes1[4];
44102b636c6Sjdunham 	uint8_t			resbits : 6,
44202b636c6Sjdunham 				all_tg_pt : 1,
44302b636c6Sjdunham 				r_holder : 1;
44402b636c6Sjdunham 	uint8_t			scope : 4,
44502b636c6Sjdunham 				type : 4;
44602b636c6Sjdunham 	uint8_t			resbytes2[4];
44702b636c6Sjdunham 	uint8_t			rel_tgt_port_id[2];
44802b636c6Sjdunham 	uint8_t			add_len[4];
44902b636c6Sjdunham 	scsi_transport_id_t	trans_id;
45002b636c6Sjdunham } scsi_prin_status_t;
45102b636c6Sjdunham typedef struct scsi_prin_full_status {
45202b636c6Sjdunham 	uint8_t			PRgeneration[4];
45302b636c6Sjdunham 	uint8_t			add_len[4];
45402b636c6Sjdunham 	scsi_prin_status_t	full_desc[1];
45502b636c6Sjdunham } scsi_prin_full_status_t;
45602b636c6Sjdunham 
45702b636c6Sjdunham /*
45802b636c6Sjdunham  * Information obtained from:
45902b636c6Sjdunham  *	SPC-3, Revision 23
46002b636c6Sjdunham  *	Section 6.12.1 PERSISTENCE RESERVE OUT
46102b636c6Sjdunham  *	Table 112 - PERSISTENCE RESERVE OUT command
46202b636c6Sjdunham  */
46302b636c6Sjdunham typedef struct scsi_cdb_prout {
46402b636c6Sjdunham 	uint8_t			cmd;
46502b636c6Sjdunham 	uint8_t			resbits : 3,
46602b636c6Sjdunham 				action : 5;
46702b636c6Sjdunham 	uint8_t			scope : 4,
46802b636c6Sjdunham 				type : 4;
46902b636c6Sjdunham 	uint8_t			resbytes[2];
47002b636c6Sjdunham 	uint8_t			param_len[4];
47102b636c6Sjdunham 	uint8_t			control;
47202b636c6Sjdunham } scsi_cdb_prout_t;
47302b636c6Sjdunham 
47402b636c6Sjdunham /*
47502b636c6Sjdunham  * Information obtained from:
47602b636c6Sjdunham  *	SPC-3, Revision 23
47702b636c6Sjdunham  *	Section 6.12.3 PERSISTENCE RESERVE OUT
47802b636c6Sjdunham  *	Table 114 - PERSISTENCE RESERVE OUT parameter list
47902b636c6Sjdunham  */
48002b636c6Sjdunham typedef struct scsi_prout_plist {
48102b636c6Sjdunham 	uint8_t			reservation_key[8];
48202b636c6Sjdunham 	uint8_t			service_key[8];
48302b636c6Sjdunham 	uint8_t			obsolete1[4];
48402b636c6Sjdunham 	uint8_t			resbits1 : 4,
48502b636c6Sjdunham 				spec_i_pt : 1,
48602b636c6Sjdunham 				all_tg_pt : 1,
48702b636c6Sjdunham 				resbits2 : 1,
48802b636c6Sjdunham 				aptpl : 1;
48902b636c6Sjdunham 	uint8_t			resbytes1;
49002b636c6Sjdunham 	uint8_t			obsolete2[2];
49102b636c6Sjdunham 	uint8_t			apd[1];
49202b636c6Sjdunham } scsi_prout_plist_t;
49302b636c6Sjdunham 
4948fe96085Stim szeto /*
4958fe96085Stim szeto  * Information obtained from:
4968fe96085Stim szeto  *	SPC-3, Revision 23
4978fe96085Stim szeto  *	Section 6.12.4 PERSISTENCE RESERVE OUT command with REGISTER AND MOVE
4988fe96085Stim szeto  *	Table 117 - REGISTER and MOVE service action  parameter list
4998fe96085Stim szeto  */
5008fe96085Stim szeto typedef struct scsi_prout_reg_move_plist {
5018fe96085Stim szeto 	uint8_t			reservation_key[8];
5028fe96085Stim szeto 	uint8_t			service_key[8];
5038fe96085Stim szeto 	uint8_t			resbytes1;
5048fe96085Stim szeto 	uint8_t			resbits1 : 6,
5058fe96085Stim szeto 				unreg    : 1,
5068fe96085Stim szeto 				aptpl    : 1;
5078fe96085Stim szeto 	uint8_t			rel_tgt_port_id[2];
5088fe96085Stim szeto 	uint8_t			tptid_len[4];
5098fe96085Stim szeto 	uint8_t			tptid[1];
5108fe96085Stim szeto } scsi_prout_reg_move_plist_t;
5118fe96085Stim szeto 
51202b636c6Sjdunham #else
51302b636c6Sjdunham #error	One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
51402b636c6Sjdunham #endif	/* _BIT_FIELDS_LTOH */
51502b636c6Sjdunham #ifdef	__cplusplus
51602b636c6Sjdunham }
51702b636c6Sjdunham #endif
51802b636c6Sjdunham 
51902b636c6Sjdunham #endif	/* _SYS_SCSI_GENERIC_PERSIST_H */
520