Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[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 #define ZFCP_DBF_CT_PAYLOAD     24
167         u8 payload[ZFCP_DBF_CT_PAYLOAD];
168 } __attribute__ ((packed));
169
170 struct zfcp_san_dbf_record_ct_response {
171         u16 cmd_rsp_code;
172         u8 revision;
173         u8 reason_code;
174         u8 expl;
175         u8 vendor_unique;
176         u32 len;
177         u8 payload[ZFCP_DBF_CT_PAYLOAD];
178 } __attribute__ ((packed));
179
180 struct zfcp_san_dbf_record_els {
181         u8 ls_code;
182         u32 len;
183 #define ZFCP_DBF_ELS_PAYLOAD    32
184 #define ZFCP_DBF_ELS_MAX_PAYLOAD 1024
185         u8 payload[ZFCP_DBF_ELS_PAYLOAD];
186 } __attribute__ ((packed));
187
188 struct zfcp_san_dbf_record {
189         u8 tag[ZFCP_DBF_TAG_SIZE];
190         u64 fsf_reqid;
191         u32 fsf_seqno;
192         u32 s_id;
193         u32 d_id;
194         union {
195                 struct zfcp_san_dbf_record_ct_request ct_req;
196                 struct zfcp_san_dbf_record_ct_response ct_resp;
197                 struct zfcp_san_dbf_record_els els;
198         } u;
199 } __attribute__ ((packed));
200
201 struct zfcp_scsi_dbf_record {
202         u8 tag[ZFCP_DBF_TAG_SIZE];
203         u8 tag2[ZFCP_DBF_TAG_SIZE];
204         u32 scsi_id;
205         u32 scsi_lun;
206         u32 scsi_result;
207         u64 scsi_cmnd;
208         u64 scsi_serial;
209 #define ZFCP_DBF_SCSI_OPCODE    16
210         u8 scsi_opcode[ZFCP_DBF_SCSI_OPCODE];
211         u8 scsi_retries;
212         u8 scsi_allowed;
213         u64 fsf_reqid;
214         u32 fsf_seqno;
215         u64 fsf_issued;
216         u64 old_fsf_reqid;
217         u8 rsp_validity;
218         u8 rsp_scsi_status;
219         u32 rsp_resid;
220         u8 rsp_code;
221 #define ZFCP_DBF_SCSI_FCP_SNS_INFO      16
222 #define ZFCP_DBF_SCSI_MAX_FCP_SNS_INFO  256
223         u32 sns_info_len;
224         u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO];
225 } __attribute__ ((packed));
226
227 #endif /* ZFCP_DBF_H */