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 /* 2202b636c6Sjdunham * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 2302b636c6Sjdunham * Use is subject to license terms. 2402b636c6Sjdunham */ 2502b636c6Sjdunham 2602b636c6Sjdunham #ifndef _SYS_SCSI_GENERIC_PERSIST_H 2702b636c6Sjdunham #define _SYS_SCSI_GENERIC_PERSIST_H 2802b636c6Sjdunham 2902b636c6Sjdunham #pragma ident "%Z%%M% %I% %E% SMI" 3002b636c6Sjdunham 3102b636c6Sjdunham #ifdef __cplusplus 3202b636c6Sjdunham extern "C" { 3302b636c6Sjdunham #endif 3402b636c6Sjdunham 3502b636c6Sjdunham /* 3602b636c6Sjdunham * SCSI Persistence Data 3702b636c6Sjdunham * 3802b636c6Sjdunham * Format of data returned as a result of PERSISTENCE RESERVER { IN | OUT } 3902b636c6Sjdunham */ 4002b636c6Sjdunham 4102b636c6Sjdunham /* 4202b636c6Sjdunham * SPC-3 revision 23, Section 6.11.1, Table 102 4302b636c6Sjdunham * Persistent Reservations 4402b636c6Sjdunham * Persistent Reserve In service actions 4502b636c6Sjdunham */ 4602b636c6Sjdunham #define PR_IN_READ_KEYS 0x0 /* Read all registered reservation keys */ 4702b636c6Sjdunham #define PR_IN_READ_RESERVATION 0x1 /* Reads th persistent reservations */ 4802b636c6Sjdunham #define PR_IN_REPORT_CAPABILITIES 0x2 /* Returns capability information */ 4902b636c6Sjdunham #define PR_IN_READ_FULL_STATUS 0x3 /* Reads complete information about all */ 5002b636c6Sjdunham /* registrations and the persistent */ 5102b636c6Sjdunham /* reservations, if any */ 5202b636c6Sjdunham /* 5302b636c6Sjdunham * SPC-3 revision 23, Section 6.11.3.3, Table 106 5402b636c6Sjdunham * Persistent reservation scope codes 5502b636c6Sjdunham */ 5602b636c6Sjdunham #define PR_LU_SCOPE 0x0 /* Persistent reservation applies to */ 5702b636c6Sjdunham /* full logical unit */ 5802b636c6Sjdunham /* 5902b636c6Sjdunham * SPC-3 revision 23, Section 6.11.3.4, Table 107 6002b636c6Sjdunham * Persistent Reservations 6102b636c6Sjdunham * Persistent reservation type codes 6202b636c6Sjdunham */ 6302b636c6Sjdunham #define PGR_TYPE_WR_EX 0x1 /* Write Exclusive */ 6402b636c6Sjdunham #define PGR_TYPE_EX_AC 0x3 /* Exclusive Access */ 6502b636c6Sjdunham #define PGR_TYPE_WR_EX_RO 0x5 /* Write Exclusive, Registrants Only */ 6602b636c6Sjdunham #define PGR_TYPE_EX_AC_RO 0x6 /* Exclusive Access, Registrants Only */ 6702b636c6Sjdunham #define PGR_TYPE_WR_EX_AR 0x7 /* Write Exclusive, All Registrants */ 6802b636c6Sjdunham #define PGR_TYPE_EX_AC_AR 0x8 /* Exclusive Access, All Registrants */ 6902b636c6Sjdunham 7002b636c6Sjdunham /* 7102b636c6Sjdunham * Information obtained from: 7202b636c6Sjdunham * SPC-3, Revision 23 7302b636c6Sjdunham * Section 6.11.5 PERSISTENCE RESERVE IN 7402b636c6Sjdunham * Table 111 - full status descriptor format 7502b636c6Sjdunham */ 7602b636c6Sjdunham /* Table 289 - iSCSI Initiator Device TransportID format */ 7702b636c6Sjdunham 7802b636c6Sjdunham #define iSCSI_PROTOCOL_ID 0x5 /* Table 262 - iSCSI Protocol ID */ 7902b636c6Sjdunham #define WW_UID_DEVICE_NAME 0x0 /* Table 288 - iSCSI Transport IDs */ 8002b636c6Sjdunham 8102b636c6Sjdunham 8202b636c6Sjdunham #if defined(_BIT_FIELDS_LTOH) 8302b636c6Sjdunham /* 8402b636c6Sjdunham * Information obtained from: 8502b636c6Sjdunham * SPC-3, Revision 23 8602b636c6Sjdunham * Section 6.11.1 PERSISTENCE RESERVE IN 8702b636c6Sjdunham * Table 101 - PERSISTENCE RESERVE IN command 8802b636c6Sjdunham */ 8902b636c6Sjdunham typedef struct scsi_cdb_prin { 9002b636c6Sjdunham uint8_t cmd; 9102b636c6Sjdunham uint8_t action : 5, 9202b636c6Sjdunham resbits : 3; 9302b636c6Sjdunham uint8_t resbytes[5]; 9402b636c6Sjdunham uint8_t alloc_len[2]; 9502b636c6Sjdunham uint8_t control; 9602b636c6Sjdunham } scsi_cdb_prin_t; 9702b636c6Sjdunham 9802b636c6Sjdunham /* 9902b636c6Sjdunham * Information obtained from: 10002b636c6Sjdunham * SPC-3, Revision 23 10102b636c6Sjdunham * Section 6.11.2 PERSISTENCE RESERVE IN 10202b636c6Sjdunham * Table 103/104/105 - parameter data for READS KEYS 10302b636c6Sjdunham */ 10402b636c6Sjdunham typedef struct scsi_prin_rsrvdesc { 10502b636c6Sjdunham uint8_t reservation_key[8]; 10602b636c6Sjdunham uint8_t obsolete1[4]; 10702b636c6Sjdunham uint8_t resbytes; 10802b636c6Sjdunham uint8_t type : 4, 10902b636c6Sjdunham scope : 4; 11002b636c6Sjdunham uint8_t obsolete2[2]; 11102b636c6Sjdunham } scsi_prin_rsrvdesc_t; 11202b636c6Sjdunham typedef struct scsi_prin_readrsrv { 11302b636c6Sjdunham uint8_t PRgeneration[4]; 11402b636c6Sjdunham uint8_t add_len[4]; 115*68941780Sjdunham union { 116*68941780Sjdunham uint64_t service_key[1]; 117*68941780Sjdunham scsi_prin_rsrvdesc_t res_key_list[1]; 118*68941780Sjdunham } key_list; 11902b636c6Sjdunham } scsi_prin_readrsrv_t; 12002b636c6Sjdunham 12102b636c6Sjdunham /* 12202b636c6Sjdunham * Information obtained from: 12302b636c6Sjdunham * SPC-3, Revision 23 12402b636c6Sjdunham * Section 6.11.4 PERSISTENCE RESERVE IN 12502b636c6Sjdunham * Table 108 - parameter data for REPORT CAPABILTIES 12602b636c6Sjdunham */ 12702b636c6Sjdunham typedef struct scsi_per_res_type { 12802b636c6Sjdunham uint8_t resbits1 : 1, 12902b636c6Sjdunham wr_ex : 1, 13002b636c6Sjdunham resbits2 : 1, 13102b636c6Sjdunham ex_ac : 1, 13202b636c6Sjdunham resbits3 : 1, 13302b636c6Sjdunham wr_ex_ro : 1, 13402b636c6Sjdunham ex_ac_ro : 1, 13502b636c6Sjdunham wr_ex_ar : 1; 13602b636c6Sjdunham uint8_t ex_ac_ar : 1, 13702b636c6Sjdunham resbits4 : 7; 13802b636c6Sjdunham } scsi_per_res_type_t; 13902b636c6Sjdunham typedef struct scsi_prin_rpt_cap { 14002b636c6Sjdunham uint8_t length[2]; 14102b636c6Sjdunham uint8_t ptpl_c : 1, 14202b636c6Sjdunham resbits1 : 1, 14302b636c6Sjdunham atp_c : 1, 14402b636c6Sjdunham sip_c : 1, 14502b636c6Sjdunham crh : 1, 14602b636c6Sjdunham resbits2 : 3; 14702b636c6Sjdunham uint8_t ptpl_a : 1, 14802b636c6Sjdunham resbits3 : 6, 14902b636c6Sjdunham tmv : 1; 15002b636c6Sjdunham scsi_per_res_type_t pr_type; 15102b636c6Sjdunham uint8_t resbytes[2]; 15202b636c6Sjdunham } scsi_prin_rpt_cap_t; 15302b636c6Sjdunham 15402b636c6Sjdunham /* 15502b636c6Sjdunham * Information obtained from: 15602b636c6Sjdunham * SPC-3, Revision 23 15702b636c6Sjdunham * Section 6.11.5 PERSISTENCE RESERVE IN 15802b636c6Sjdunham * Table 110/111 - parameter data for READ FULL STATUS 15902b636c6Sjdunham * Table 281 - TransportId format 16002b636c6Sjdunham */ 16102b636c6Sjdunham typedef struct scsi_transport_id { 16202b636c6Sjdunham uint8_t protocol_id : 4, 16302b636c6Sjdunham resbits : 2, 16402b636c6Sjdunham format_code : 2; 16502b636c6Sjdunham uint8_t add_len[2]; 16602b636c6Sjdunham char iscsi_name[1]; 16702b636c6Sjdunham } scsi_transport_id_t; 16802b636c6Sjdunham typedef struct scsi_prin_status_t { 16902b636c6Sjdunham uint8_t reservation_key[8]; 17002b636c6Sjdunham uint8_t resbytes1[4]; 17102b636c6Sjdunham uint8_t r_holder : 1, 17202b636c6Sjdunham all_tg_pt : 1, 17302b636c6Sjdunham resbits : 6; 17402b636c6Sjdunham uint8_t type : 4, 17502b636c6Sjdunham scope : 4; 17602b636c6Sjdunham uint8_t resbytes2[4]; 17702b636c6Sjdunham uint8_t rel_tgt_port_id[2]; 17802b636c6Sjdunham uint8_t add_len[4]; 17902b636c6Sjdunham scsi_transport_id_t trans_id; 18002b636c6Sjdunham } scsi_prin_status_t; 18102b636c6Sjdunham typedef struct scsi_prin_full_status { 18202b636c6Sjdunham uint8_t PRgeneration[4]; 18302b636c6Sjdunham uint8_t add_len[4]; 18402b636c6Sjdunham scsi_prin_status_t full_desc[1]; 18502b636c6Sjdunham } scsi_prin_full_status_t; 18602b636c6Sjdunham 18702b636c6Sjdunham /* 18802b636c6Sjdunham * Information obtained from: 18902b636c6Sjdunham * SPC-3, Revision 23 19002b636c6Sjdunham * Section 6.12.1 PERSISTENCE RESERVE OUT 19102b636c6Sjdunham * Table 112 - PERSISTENCE RESERVE OUT command 19202b636c6Sjdunham */ 19302b636c6Sjdunham typedef struct scsi_cdb_prout { 19402b636c6Sjdunham uint8_t cmd; 19502b636c6Sjdunham uint8_t action : 5, 19602b636c6Sjdunham resbits : 3; 19702b636c6Sjdunham uint8_t type : 4, 19802b636c6Sjdunham scope : 4; 19902b636c6Sjdunham uint8_t resbytes[2]; 20002b636c6Sjdunham uint8_t param_len[4]; 20102b636c6Sjdunham uint8_t control; 20202b636c6Sjdunham } scsi_cdb_prout_t; 20302b636c6Sjdunham 20402b636c6Sjdunham /* 20502b636c6Sjdunham * Information obtained from: 20602b636c6Sjdunham * SPC-3, Revision 23 20702b636c6Sjdunham * Section 6.12.3 PERSISTENCE RESERVE OUT 20802b636c6Sjdunham * Table 114 - PERSISTENCE RESERVE OUT parameter list 20902b636c6Sjdunham */ 21002b636c6Sjdunham typedef struct scsi_prout_plist { 21102b636c6Sjdunham uint8_t reservation_key[8]; 21202b636c6Sjdunham uint8_t service_key[8]; 21302b636c6Sjdunham uint8_t obsolete1[4]; 21402b636c6Sjdunham uint8_t aptpl : 1, 21502b636c6Sjdunham resbits1 : 1, 21602b636c6Sjdunham all_tg_pt : 1, 21702b636c6Sjdunham spec_i_pt : 1, 21802b636c6Sjdunham resbits2 : 4; 21902b636c6Sjdunham uint8_t resbytes1; 22002b636c6Sjdunham uint8_t obsolete2[2]; 22102b636c6Sjdunham uint8_t apd[1]; 22202b636c6Sjdunham } scsi_prout_plist_t; 22302b636c6Sjdunham 22402b636c6Sjdunham #elif defined(_BIT_FIELDS_HTOL) 22502b636c6Sjdunham /* 22602b636c6Sjdunham * Information obtained from: 22702b636c6Sjdunham * SPC-3, Revision 23 22802b636c6Sjdunham * Section 6.11.1 PERSISTENCE RESERVE IN 22902b636c6Sjdunham * Table 101 - PERSISTENCE RESERVE IN command 23002b636c6Sjdunham */ 23102b636c6Sjdunham typedef struct scsi_cdb_prin { 23202b636c6Sjdunham uint8_t cmd; 23302b636c6Sjdunham uint8_t resbits : 3, 23402b636c6Sjdunham action : 5; 23502b636c6Sjdunham uint8_t resbytes[5]; 23602b636c6Sjdunham uint8_t alloc_len[2]; 23702b636c6Sjdunham uint8_t control; 23802b636c6Sjdunham } scsi_cdb_prin_t; 23902b636c6Sjdunham 24002b636c6Sjdunham /* 24102b636c6Sjdunham * Information obtained from: 24202b636c6Sjdunham * SPC-3, Revision 23 24302b636c6Sjdunham * Section 6.11.2 PERSISTENCE RESERVE IN 24402b636c6Sjdunham * Table 103/104/105 - parameter data for READS KEYS 24502b636c6Sjdunham */ 24602b636c6Sjdunham typedef struct scsi_prin_rsrvdesc { 24702b636c6Sjdunham uint8_t reservation_key[8]; 24802b636c6Sjdunham uint8_t obsolete1[4]; 24902b636c6Sjdunham uint8_t resbytes; 25002b636c6Sjdunham uint8_t scope : 4, 25102b636c6Sjdunham type : 4; 252*68941780Sjdunham uint8_t obsolete2[2]; 25302b636c6Sjdunham } scsi_prin_rsrvdesc_t; 25402b636c6Sjdunham typedef struct scsi_prin_readrsrv { 25502b636c6Sjdunham uint8_t PRgeneration[4]; 25602b636c6Sjdunham uint8_t add_len[4]; 257*68941780Sjdunham union { 258*68941780Sjdunham uint64_t service_key[1]; 259*68941780Sjdunham scsi_prin_rsrvdesc_t res_key_list[1]; 260*68941780Sjdunham } key_list; 26102b636c6Sjdunham } scsi_prin_readrsrv_t; 26202b636c6Sjdunham 26302b636c6Sjdunham /* 26402b636c6Sjdunham * Information obtained from: 26502b636c6Sjdunham * SPC-3, Revision 23 26602b636c6Sjdunham * Section 6.11.4 PERSISTENCE RESERVE IN 26702b636c6Sjdunham * Table 108 - parameter data for REPORT CAPABILTIES 26802b636c6Sjdunham */ 26902b636c6Sjdunham typedef struct scsi_per_res_type { 27002b636c6Sjdunham uint8_t wr_ex_ar : 1, 27102b636c6Sjdunham ex_ac_ro : 1, 27202b636c6Sjdunham wr_ex_ro : 1, 27302b636c6Sjdunham resbits3 : 1, 27402b636c6Sjdunham ex_ac : 1, 27502b636c6Sjdunham resbits2 : 1, 27602b636c6Sjdunham wr_ex : 1, 27702b636c6Sjdunham resbits1 : 1; 27802b636c6Sjdunham uint8_t resbits4 : 7, 27902b636c6Sjdunham ex_ac_ar : 1; 28002b636c6Sjdunham } scsi_per_res_type_t; 28102b636c6Sjdunham typedef struct scsi_prin_rpt_cap { 28202b636c6Sjdunham uint8_t length[2]; 28302b636c6Sjdunham uint8_t resbits2 : 3, 28402b636c6Sjdunham crh : 1, 28502b636c6Sjdunham sip_c : 1, 28602b636c6Sjdunham atp_c : 1, 28702b636c6Sjdunham resbits1 : 1, 28802b636c6Sjdunham ptpl_c : 1; 28902b636c6Sjdunham uint8_t tmv : 1, 29002b636c6Sjdunham resbits3 : 6, 29102b636c6Sjdunham ptpl_a : 1; 29202b636c6Sjdunham scsi_per_res_type_t pr_type; 29302b636c6Sjdunham uint8_t resbytes[2]; 29402b636c6Sjdunham } scsi_prin_rpt_cap_t; 29502b636c6Sjdunham 29602b636c6Sjdunham /* 29702b636c6Sjdunham * Information obtained from: 29802b636c6Sjdunham * SPC-3, Revision 23 29902b636c6Sjdunham * Section 6.11.5 PERSISTENCE RESERVE IN 30002b636c6Sjdunham * Table 110/111 - parameter data for READ FULL STATUS 30102b636c6Sjdunham * Table 281 - TransportId format 30202b636c6Sjdunham */ 30302b636c6Sjdunham typedef struct scsi_transport_id { 30402b636c6Sjdunham uint8_t format_code : 2, 30502b636c6Sjdunham resbits : 2, 30602b636c6Sjdunham protocol_id : 4; 30702b636c6Sjdunham uint8_t add_len[2]; 30802b636c6Sjdunham char iscsi_name[1]; 30902b636c6Sjdunham } scsi_transport_id_t; 31002b636c6Sjdunham typedef struct scsi_prin_status_t { 31102b636c6Sjdunham uint8_t reservation_key[8]; 31202b636c6Sjdunham uint8_t resbytes1[4]; 31302b636c6Sjdunham uint8_t resbits : 6, 31402b636c6Sjdunham all_tg_pt : 1, 31502b636c6Sjdunham r_holder : 1; 31602b636c6Sjdunham uint8_t scope : 4, 31702b636c6Sjdunham type : 4; 31802b636c6Sjdunham uint8_t resbytes2[4]; 31902b636c6Sjdunham uint8_t rel_tgt_port_id[2]; 32002b636c6Sjdunham uint8_t add_len[4]; 32102b636c6Sjdunham scsi_transport_id_t trans_id; 32202b636c6Sjdunham } scsi_prin_status_t; 32302b636c6Sjdunham typedef struct scsi_prin_full_status { 32402b636c6Sjdunham uint8_t PRgeneration[4]; 32502b636c6Sjdunham uint8_t add_len[4]; 32602b636c6Sjdunham scsi_prin_status_t full_desc[1]; 32702b636c6Sjdunham } scsi_prin_full_status_t; 32802b636c6Sjdunham 32902b636c6Sjdunham /* 33002b636c6Sjdunham * Information obtained from: 33102b636c6Sjdunham * SPC-3, Revision 23 33202b636c6Sjdunham * Section 6.12.1 PERSISTENCE RESERVE OUT 33302b636c6Sjdunham * Table 112 - PERSISTENCE RESERVE OUT command 33402b636c6Sjdunham */ 33502b636c6Sjdunham typedef struct scsi_cdb_prout { 33602b636c6Sjdunham uint8_t cmd; 33702b636c6Sjdunham uint8_t resbits : 3, 33802b636c6Sjdunham action : 5; 33902b636c6Sjdunham uint8_t scope : 4, 34002b636c6Sjdunham type : 4; 34102b636c6Sjdunham uint8_t resbytes[2]; 34202b636c6Sjdunham uint8_t param_len[4]; 34302b636c6Sjdunham uint8_t control; 34402b636c6Sjdunham } scsi_cdb_prout_t; 34502b636c6Sjdunham 34602b636c6Sjdunham /* 34702b636c6Sjdunham * Information obtained from: 34802b636c6Sjdunham * SPC-3, Revision 23 34902b636c6Sjdunham * Section 6.12.3 PERSISTENCE RESERVE OUT 35002b636c6Sjdunham * Table 114 - PERSISTENCE RESERVE OUT parameter list 35102b636c6Sjdunham */ 35202b636c6Sjdunham typedef struct scsi_prout_plist { 35302b636c6Sjdunham uint8_t reservation_key[8]; 35402b636c6Sjdunham uint8_t service_key[8]; 35502b636c6Sjdunham uint8_t obsolete1[4]; 35602b636c6Sjdunham uint8_t resbits1 : 4, 35702b636c6Sjdunham spec_i_pt : 1, 35802b636c6Sjdunham all_tg_pt : 1, 35902b636c6Sjdunham resbits2 : 1, 36002b636c6Sjdunham aptpl : 1; 36102b636c6Sjdunham uint8_t resbytes1; 36202b636c6Sjdunham uint8_t obsolete2[2]; 36302b636c6Sjdunham uint8_t apd[1]; 36402b636c6Sjdunham } scsi_prout_plist_t; 36502b636c6Sjdunham 36602b636c6Sjdunham #else 36702b636c6Sjdunham #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 36802b636c6Sjdunham #endif /* _BIT_FIELDS_LTOH */ 36902b636c6Sjdunham 37002b636c6Sjdunham 37102b636c6Sjdunham /* 37202b636c6Sjdunham * SPC-3 revision 23, Section 6.12.2, Table 113 37302b636c6Sjdunham * Persistent Reservations 37402b636c6Sjdunham * Persistent Reserve Out service action codes 37502b636c6Sjdunham */ 37602b636c6Sjdunham #define PR_OUT_REGISTER 0x0 /* Register/unregister a reservation */ 37702b636c6Sjdunham /* key with the device server */ 37802b636c6Sjdunham #define PR_OUT_RESERVE 0x1 /* Create a persistent reservation */ 37902b636c6Sjdunham /* having a specified SCOPE & TYPE */ 38002b636c6Sjdunham #define PR_OUT_RELEASE 0x2 /* Release the selected persistent */ 38102b636c6Sjdunham /* reservation */ 38202b636c6Sjdunham #define PR_OUT_CLEAR 0x3 /* Clears all reservation keys and */ 38302b636c6Sjdunham /* all persistent reservations */ 38402b636c6Sjdunham #define PR_OUT_PREEMPT 0x4 /* Preempts persistent reservations */ 38502b636c6Sjdunham /* and/or removes reservations */ 38602b636c6Sjdunham #define PR_OUT_PREEMPT_ABORT 0x5 /* Preempts persistent reservations */ 38702b636c6Sjdunham /* and/or removes reservations, and */ 38802b636c6Sjdunham /* aborts all tasks for all preempted */ 38902b636c6Sjdunham /* I_T nexuses */ 39002b636c6Sjdunham #define PR_OUT_REGISTER_AND_IGNORE_EXISTING_KEY 0x06 39102b636c6Sjdunham /* Register a reservation key with */ 39202b636c6Sjdunham /* the device server, or unregister a */ 39302b636c6Sjdunham /* reservation key */ 39402b636c6Sjdunham #define PR_OUT_REGISTER_MOVE 0x7 /* Register a reservation key for */ 39502b636c6Sjdunham /* another I_T nexus with the device */ 39602b636c6Sjdunham /* server and move a persistent */ 39702b636c6Sjdunham /* reservation to the I_T nexus */ 39802b636c6Sjdunham 39902b636c6Sjdunham 40002b636c6Sjdunham #ifdef __cplusplus 40102b636c6Sjdunham } 40202b636c6Sjdunham #endif 40302b636c6Sjdunham 40402b636c6Sjdunham #endif /* _SYS_SCSI_GENERIC_PERSIST_H */ 405