1 /* 2 * This file is part of the zfcp device driver for 3 * FCP adapters for IBM System z9 and zSeries. 4 * 5 * Copyright IBM Corp. 2008, 2008 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2, or (at your option) 10 * any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 */ 21 22 #ifndef ZFCP_DBF_H 23 #define ZFCP_DBF_H 24 25 #include "zfcp_fsf.h" 26 27 #define ZFCP_DBF_TAG_SIZE 4 28 29 struct zfcp_dbf_dump { 30 u8 tag[ZFCP_DBF_TAG_SIZE]; 31 u32 total_size; /* size of total dump data */ 32 u32 offset; /* how much data has being already dumped */ 33 u32 size; /* how much data comes with this record */ 34 u8 data[]; /* dump data */ 35 } __attribute__ ((packed)); 36 37 struct zfcp_rec_dbf_record_thread { 38 u32 sema; 39 u32 total; 40 u32 ready; 41 u32 running; 42 } __attribute__ ((packed)); 43 44 struct zfcp_rec_dbf_record_target { 45 u64 ref; 46 u32 status; 47 u32 d_id; 48 u64 wwpn; 49 u64 fcp_lun; 50 u32 erp_count; 51 } __attribute__ ((packed)); 52 53 struct zfcp_rec_dbf_record_trigger { 54 u8 want; 55 u8 need; 56 u32 as; 57 u32 ps; 58 u32 us; 59 u64 ref; 60 u64 action; 61 u64 wwpn; 62 u64 fcp_lun; 63 } __attribute__ ((packed)); 64 65 struct zfcp_rec_dbf_record_action { 66 u32 status; 67 u32 step; 68 u64 action; 69 u64 fsf_req; 70 } __attribute__ ((packed)); 71 72 struct zfcp_rec_dbf_record { 73 u8 id; 74 u8 id2; 75 union { 76 struct zfcp_rec_dbf_record_action action; 77 struct zfcp_rec_dbf_record_thread thread; 78 struct zfcp_rec_dbf_record_target target; 79 struct zfcp_rec_dbf_record_trigger trigger; 80 } u; 81 } __attribute__ ((packed)); 82 83 enum { 84 ZFCP_REC_DBF_ID_ACTION, 85 ZFCP_REC_DBF_ID_THREAD, 86 ZFCP_REC_DBF_ID_TARGET, 87 ZFCP_REC_DBF_ID_TRIGGER, 88 }; 89 90 struct zfcp_hba_dbf_record_response { 91 u32 fsf_command; 92 u64 fsf_reqid; 93 u32 fsf_seqno; 94 u64 fsf_issued; 95 u32 fsf_prot_status; 96 u32 fsf_status; 97 u8 fsf_prot_status_qual[FSF_PROT_STATUS_QUAL_SIZE]; 98 u8 fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE]; 99 u32 fsf_req_status; 100 u8 sbal_first; 101 u8 sbal_curr; 102 u8 sbal_last; 103 u8 pool; 104 u64 erp_action; 105 union { 106 struct { 107 u64 scsi_cmnd; 108 u64 scsi_serial; 109 } send_fcp; 110 struct { 111 u64 wwpn; 112 u32 d_id; 113 u32 port_handle; 114 } port; 115 struct { 116 u64 wwpn; 117 u64 fcp_lun; 118 u32 port_handle; 119 u32 lun_handle; 120 } unit; 121 struct { 122 u32 d_id; 123 u8 ls_code; 124 } send_els; 125 } data; 126 } __attribute__ ((packed)); 127 128 struct zfcp_hba_dbf_record_status { 129 u8 failed; 130 u32 status_type; 131 u32 status_subtype; 132 struct fsf_queue_designator 133 queue_designator; 134 u32 payload_size; 135 #define ZFCP_DBF_UNSOL_PAYLOAD 80 136 #define ZFCP_DBF_UNSOL_PAYLOAD_SENSE_DATA_AVAIL 32 137 #define ZFCP_DBF_UNSOL_PAYLOAD_BIT_ERROR_THRESHOLD 56 138 #define ZFCP_DBF_UNSOL_PAYLOAD_FEATURE_UPDATE_ALERT 2 * sizeof(u32) 139 u8 payload[ZFCP_DBF_UNSOL_PAYLOAD]; 140 } __attribute__ ((packed)); 141 142 struct zfcp_hba_dbf_record_qdio { 143 u32 status; 144 u32 qdio_error; 145 u32 siga_error; 146 u8 sbal_index; 147 u8 sbal_count; 148 } __attribute__ ((packed)); 149 150 struct zfcp_hba_dbf_record { 151 u8 tag[ZFCP_DBF_TAG_SIZE]; 152 u8 tag2[ZFCP_DBF_TAG_SIZE]; 153 union { 154 struct zfcp_hba_dbf_record_response response; 155 struct zfcp_hba_dbf_record_status status; 156 struct zfcp_hba_dbf_record_qdio qdio; 157 } type; 158 } __attribute__ ((packed)); 159 160 struct zfcp_san_dbf_record_ct { 161 union { 162 struct { 163 u16 cmd_req_code; 164 u8 revision; 165 u8 gs_type; 166 u8 gs_subtype; 167 u8 options; 168 u16 max_res_size; 169 } request; 170 struct { 171 u16 cmd_rsp_code; 172 u8 revision; 173 u8 reason_code; 174 u8 reason_code_expl; 175 u8 vendor_unique; 176 } response; 177 } type; 178 u32 payload_size; 179 #define ZFCP_DBF_CT_PAYLOAD 24 180 u8 payload[ZFCP_DBF_CT_PAYLOAD]; 181 } __attribute__ ((packed)); 182 183 struct zfcp_san_dbf_record_els { 184 u8 ls_code; 185 u32 payload_size; 186 #define ZFCP_DBF_ELS_PAYLOAD 32 187 #define ZFCP_DBF_ELS_MAX_PAYLOAD 1024 188 u8 payload[ZFCP_DBF_ELS_PAYLOAD]; 189 } __attribute__ ((packed)); 190 191 struct zfcp_san_dbf_record { 192 u8 tag[ZFCP_DBF_TAG_SIZE]; 193 u64 fsf_reqid; 194 u32 fsf_seqno; 195 u32 s_id; 196 u32 d_id; 197 union { 198 struct zfcp_san_dbf_record_ct ct; 199 struct zfcp_san_dbf_record_els els; 200 } type; 201 } __attribute__ ((packed)); 202 203 struct zfcp_scsi_dbf_record { 204 u8 tag[ZFCP_DBF_TAG_SIZE]; 205 u8 tag2[ZFCP_DBF_TAG_SIZE]; 206 u32 scsi_id; 207 u32 scsi_lun; 208 u32 scsi_result; 209 u64 scsi_cmnd; 210 u64 scsi_serial; 211 #define ZFCP_DBF_SCSI_OPCODE 16 212 u8 scsi_opcode[ZFCP_DBF_SCSI_OPCODE]; 213 u8 scsi_retries; 214 u8 scsi_allowed; 215 u64 fsf_reqid; 216 u32 fsf_seqno; 217 u64 fsf_issued; 218 union { 219 u64 old_fsf_reqid; 220 struct { 221 u8 rsp_validity; 222 u8 rsp_scsi_status; 223 u32 rsp_resid; 224 u8 rsp_code; 225 #define ZFCP_DBF_SCSI_FCP_SNS_INFO 16 226 #define ZFCP_DBF_SCSI_MAX_FCP_SNS_INFO 256 227 u32 sns_info_len; 228 u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO]; 229 } fcp; 230 } type; 231 } __attribute__ ((packed)); 232 233 #endif /* ZFCP_DBF_H */ 234