Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes
[linux-2.6] / drivers / s390 / scsi / zfcp_dbf.h
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 total;
39         u32 ready;
40         u32 running;
41 };
42
43 struct zfcp_rec_dbf_record_target {
44         u64 ref;
45         u32 status;
46         u32 d_id;
47         u64 wwpn;
48         u64 fcp_lun;
49         u32 erp_count;
50 };
51
52 struct zfcp_rec_dbf_record_trigger {
53         u8 want;
54         u8 need;
55         u32 as;
56         u32 ps;
57         u32 us;
58         u64 ref;
59         u64 action;
60         u64 wwpn;
61         u64 fcp_lun;
62 };
63
64 struct zfcp_rec_dbf_record_action {
65         u32 status;
66         u32 step;
67         u64 action;
68         u64 fsf_req;
69 };
70
71 struct zfcp_rec_dbf_record {
72         u8 id;
73         u8 id2;
74         union {
75                 struct zfcp_rec_dbf_record_action action;
76                 struct zfcp_rec_dbf_record_thread thread;
77                 struct zfcp_rec_dbf_record_target target;
78                 struct zfcp_rec_dbf_record_trigger trigger;
79         } u;
80 };
81
82 enum {
83         ZFCP_REC_DBF_ID_ACTION,
84         ZFCP_REC_DBF_ID_THREAD,
85         ZFCP_REC_DBF_ID_TARGET,
86         ZFCP_REC_DBF_ID_TRIGGER,
87 };
88
89 struct zfcp_hba_dbf_record_response {
90         u32 fsf_command;
91         u64 fsf_reqid;
92         u32 fsf_seqno;
93         u64 fsf_issued;
94         u32 fsf_prot_status;
95         u32 fsf_status;
96         u8 fsf_prot_status_qual[FSF_PROT_STATUS_QUAL_SIZE];
97         u8 fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE];
98         u32 fsf_req_status;
99         u8 sbal_first;
100         u8 sbal_last;
101         u8 sbal_response;
102         u8 pool;
103         u64 erp_action;
104         union {
105                 struct {
106                         u64 cmnd;
107                         u64 serial;
108                 } fcp;
109                 struct {
110                         u64 wwpn;
111                         u32 d_id;
112                         u32 port_handle;
113                 } port;
114                 struct {
115                         u64 wwpn;
116                         u64 fcp_lun;
117                         u32 port_handle;
118                         u32 lun_handle;
119                 } unit;
120                 struct {
121                         u32 d_id;
122                         u8 ls_code;
123                 } els;
124         } u;
125 } __attribute__ ((packed));
126
127 struct zfcp_hba_dbf_record_status {
128         u8 failed;
129         u32 status_type;
130         u32 status_subtype;
131         struct fsf_queue_designator
132          queue_designator;
133         u32 payload_size;
134 #define ZFCP_DBF_UNSOL_PAYLOAD                          80
135 #define ZFCP_DBF_UNSOL_PAYLOAD_SENSE_DATA_AVAIL         32
136 #define ZFCP_DBF_UNSOL_PAYLOAD_BIT_ERROR_THRESHOLD      56
137 #define ZFCP_DBF_UNSOL_PAYLOAD_FEATURE_UPDATE_ALERT     2 * sizeof(u32)
138         u8 payload[ZFCP_DBF_UNSOL_PAYLOAD];
139 } __attribute__ ((packed));
140
141 struct zfcp_hba_dbf_record_qdio {
142         u32 qdio_error;
143         u8 sbal_index;
144         u8 sbal_count;
145 } __attribute__ ((packed));
146
147 struct zfcp_hba_dbf_record {
148         u8 tag[ZFCP_DBF_TAG_SIZE];
149         u8 tag2[ZFCP_DBF_TAG_SIZE];
150         union {
151                 struct zfcp_hba_dbf_record_response response;
152                 struct zfcp_hba_dbf_record_status status;
153                 struct zfcp_hba_dbf_record_qdio qdio;
154                 struct fsf_bit_error_payload berr;
155         } u;
156 } __attribute__ ((packed));
157
158 struct zfcp_san_dbf_record_ct_request {
159         u16 cmd_req_code;
160         u8 revision;
161         u8 gs_type;
162         u8 gs_subtype;
163         u8 options;
164         u16 max_res_size;
165         u32 len;
166 } __attribute__ ((packed));
167
168 struct zfcp_san_dbf_record_ct_response {
169         u16 cmd_rsp_code;
170         u8 revision;
171         u8 reason_code;
172         u8 expl;
173         u8 vendor_unique;
174         u16 max_res_size;
175         u32 len;
176 } __attribute__ ((packed));
177
178 struct zfcp_san_dbf_record_els {
179         u8 ls_code;
180         u32 len;
181 } __attribute__ ((packed));
182
183 struct zfcp_san_dbf_record {
184         u8 tag[ZFCP_DBF_TAG_SIZE];
185         u64 fsf_reqid;
186         u32 fsf_seqno;
187         u32 s_id;
188         u32 d_id;
189         union {
190                 struct zfcp_san_dbf_record_ct_request ct_req;
191                 struct zfcp_san_dbf_record_ct_response ct_resp;
192                 struct zfcp_san_dbf_record_els els;
193         } u;
194 #define ZFCP_DBF_SAN_MAX_PAYLOAD 1024
195         u8 payload[32];
196 } __attribute__ ((packed));
197
198 struct zfcp_scsi_dbf_record {
199         u8 tag[ZFCP_DBF_TAG_SIZE];
200         u8 tag2[ZFCP_DBF_TAG_SIZE];
201         u32 scsi_id;
202         u32 scsi_lun;
203         u32 scsi_result;
204         u64 scsi_cmnd;
205         u64 scsi_serial;
206 #define ZFCP_DBF_SCSI_OPCODE    16
207         u8 scsi_opcode[ZFCP_DBF_SCSI_OPCODE];
208         u8 scsi_retries;
209         u8 scsi_allowed;
210         u64 fsf_reqid;
211         u32 fsf_seqno;
212         u64 fsf_issued;
213         u64 old_fsf_reqid;
214         u8 rsp_validity;
215         u8 rsp_scsi_status;
216         u32 rsp_resid;
217         u8 rsp_code;
218 #define ZFCP_DBF_SCSI_FCP_SNS_INFO      16
219 #define ZFCP_DBF_SCSI_MAX_FCP_SNS_INFO  256
220         u32 sns_info_len;
221         u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO];
222 } __attribute__ ((packed));
223
224 #endif /* ZFCP_DBF_H */