diff options
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_gs.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_gs.c | 479 |
1 files changed, 243 insertions, 236 deletions
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c index c2a4bfbcb05b..db8de063e1cb 100644 --- a/drivers/scsi/qla2xxx/qla_gs.c +++ b/drivers/scsi/qla2xxx/qla_gs.c | |||
@@ -22,8 +22,9 @@ static int qla2x00_sns_rnn_id(scsi_qla_host_t *); | |||
22 | * Returns a pointer to the @ha's ms_iocb. | 22 | * Returns a pointer to the @ha's ms_iocb. |
23 | */ | 23 | */ |
24 | void * | 24 | void * |
25 | qla2x00_prep_ms_iocb(scsi_qla_host_t *ha, uint32_t req_size, uint32_t rsp_size) | 25 | qla2x00_prep_ms_iocb(scsi_qla_host_t *vha, uint32_t req_size, uint32_t rsp_size) |
26 | { | 26 | { |
27 | struct qla_hw_data *ha = vha->hw; | ||
27 | ms_iocb_entry_t *ms_pkt; | 28 | ms_iocb_entry_t *ms_pkt; |
28 | 29 | ||
29 | ms_pkt = ha->ms_iocb; | 30 | ms_pkt = ha->ms_iocb; |
@@ -59,8 +60,9 @@ qla2x00_prep_ms_iocb(scsi_qla_host_t *ha, uint32_t req_size, uint32_t rsp_size) | |||
59 | * Returns a pointer to the @ha's ms_iocb. | 60 | * Returns a pointer to the @ha's ms_iocb. |
60 | */ | 61 | */ |
61 | void * | 62 | void * |
62 | qla24xx_prep_ms_iocb(scsi_qla_host_t *ha, uint32_t req_size, uint32_t rsp_size) | 63 | qla24xx_prep_ms_iocb(scsi_qla_host_t *vha, uint32_t req_size, uint32_t rsp_size) |
63 | { | 64 | { |
65 | struct qla_hw_data *ha = vha->hw; | ||
64 | struct ct_entry_24xx *ct_pkt; | 66 | struct ct_entry_24xx *ct_pkt; |
65 | 67 | ||
66 | ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; | 68 | ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; |
@@ -82,7 +84,7 @@ qla24xx_prep_ms_iocb(scsi_qla_host_t *ha, uint32_t req_size, uint32_t rsp_size) | |||
82 | ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma)); | 84 | ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma)); |
83 | ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma)); | 85 | ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma)); |
84 | ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count; | 86 | ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count; |
85 | ct_pkt->vp_index = ha->vp_idx; | 87 | ct_pkt->vp_index = vha->vp_idx; |
86 | 88 | ||
87 | return (ct_pkt); | 89 | return (ct_pkt); |
88 | } | 90 | } |
@@ -110,16 +112,17 @@ qla2x00_prep_ct_req(struct ct_sns_req *ct_req, uint16_t cmd, uint16_t rsp_size) | |||
110 | } | 112 | } |
111 | 113 | ||
112 | static int | 114 | static int |
113 | qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt, | 115 | qla2x00_chk_ms_status(scsi_qla_host_t *vha, ms_iocb_entry_t *ms_pkt, |
114 | struct ct_sns_rsp *ct_rsp, const char *routine) | 116 | struct ct_sns_rsp *ct_rsp, const char *routine) |
115 | { | 117 | { |
116 | int rval; | 118 | int rval; |
117 | uint16_t comp_status; | 119 | uint16_t comp_status; |
120 | struct qla_hw_data *ha = vha->hw; | ||
118 | 121 | ||
119 | rval = QLA_FUNCTION_FAILED; | 122 | rval = QLA_FUNCTION_FAILED; |
120 | if (ms_pkt->entry_status != 0) { | 123 | if (ms_pkt->entry_status != 0) { |
121 | DEBUG2_3(printk("scsi(%ld): %s failed, error status (%x).\n", | 124 | DEBUG2_3(printk("scsi(%ld): %s failed, error status (%x).\n", |
122 | ha->host_no, routine, ms_pkt->entry_status)); | 125 | vha->host_no, routine, ms_pkt->entry_status)); |
123 | } else { | 126 | } else { |
124 | if (IS_FWI2_CAPABLE(ha)) | 127 | if (IS_FWI2_CAPABLE(ha)) |
125 | comp_status = le16_to_cpu( | 128 | comp_status = le16_to_cpu( |
@@ -133,7 +136,7 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt, | |||
133 | if (ct_rsp->header.response != | 136 | if (ct_rsp->header.response != |
134 | __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) { | 137 | __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) { |
135 | DEBUG2_3(printk("scsi(%ld): %s failed, " | 138 | DEBUG2_3(printk("scsi(%ld): %s failed, " |
136 | "rejected request:\n", ha->host_no, | 139 | "rejected request:\n", vha->host_no, |
137 | routine)); | 140 | routine)); |
138 | DEBUG2_3(qla2x00_dump_buffer( | 141 | DEBUG2_3(qla2x00_dump_buffer( |
139 | (uint8_t *)&ct_rsp->header, | 142 | (uint8_t *)&ct_rsp->header, |
@@ -144,7 +147,7 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt, | |||
144 | break; | 147 | break; |
145 | default: | 148 | default: |
146 | DEBUG2_3(printk("scsi(%ld): %s failed, completion " | 149 | DEBUG2_3(printk("scsi(%ld): %s failed, completion " |
147 | "status (%x).\n", ha->host_no, routine, | 150 | "status (%x).\n", vha->host_no, routine, |
148 | comp_status)); | 151 | comp_status)); |
149 | break; | 152 | break; |
150 | } | 153 | } |
@@ -160,21 +163,21 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt, | |||
160 | * Returns 0 on success. | 163 | * Returns 0 on success. |
161 | */ | 164 | */ |
162 | int | 165 | int |
163 | qla2x00_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | 166 | qla2x00_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport) |
164 | { | 167 | { |
165 | int rval; | 168 | int rval; |
166 | 169 | ||
167 | ms_iocb_entry_t *ms_pkt; | 170 | ms_iocb_entry_t *ms_pkt; |
168 | struct ct_sns_req *ct_req; | 171 | struct ct_sns_req *ct_req; |
169 | struct ct_sns_rsp *ct_rsp; | 172 | struct ct_sns_rsp *ct_rsp; |
173 | struct qla_hw_data *ha = vha->hw; | ||
170 | 174 | ||
171 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 175 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
172 | return (qla2x00_sns_ga_nxt(ha, fcport)); | 176 | return qla2x00_sns_ga_nxt(vha, fcport); |
173 | } | ||
174 | 177 | ||
175 | /* Issue GA_NXT */ | 178 | /* Issue GA_NXT */ |
176 | /* Prepare common MS IOCB */ | 179 | /* Prepare common MS IOCB */ |
177 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, GA_NXT_REQ_SIZE, | 180 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GA_NXT_REQ_SIZE, |
178 | GA_NXT_RSP_SIZE); | 181 | GA_NXT_RSP_SIZE); |
179 | 182 | ||
180 | /* Prepare CT request */ | 183 | /* Prepare CT request */ |
@@ -188,13 +191,13 @@ qla2x00_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
188 | ct_req->req.port_id.port_id[2] = fcport->d_id.b.al_pa; | 191 | ct_req->req.port_id.port_id[2] = fcport->d_id.b.al_pa; |
189 | 192 | ||
190 | /* Execute MS IOCB */ | 193 | /* Execute MS IOCB */ |
191 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 194 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
192 | sizeof(ms_iocb_entry_t)); | 195 | sizeof(ms_iocb_entry_t)); |
193 | if (rval != QLA_SUCCESS) { | 196 | if (rval != QLA_SUCCESS) { |
194 | /*EMPTY*/ | 197 | /*EMPTY*/ |
195 | DEBUG2_3(printk("scsi(%ld): GA_NXT issue IOCB failed (%d).\n", | 198 | DEBUG2_3(printk("scsi(%ld): GA_NXT issue IOCB failed (%d).\n", |
196 | ha->host_no, rval)); | 199 | vha->host_no, rval)); |
197 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "GA_NXT") != | 200 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "GA_NXT") != |
198 | QLA_SUCCESS) { | 201 | QLA_SUCCESS) { |
199 | rval = QLA_FUNCTION_FAILED; | 202 | rval = QLA_FUNCTION_FAILED; |
200 | } else { | 203 | } else { |
@@ -216,7 +219,7 @@ qla2x00_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
216 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " | 219 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " |
217 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " | 220 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " |
218 | "portid=%02x%02x%02x.\n", | 221 | "portid=%02x%02x%02x.\n", |
219 | ha->host_no, | 222 | vha->host_no, |
220 | fcport->node_name[0], fcport->node_name[1], | 223 | fcport->node_name[0], fcport->node_name[1], |
221 | fcport->node_name[2], fcport->node_name[3], | 224 | fcport->node_name[2], fcport->node_name[3], |
222 | fcport->node_name[4], fcport->node_name[5], | 225 | fcport->node_name[4], fcport->node_name[5], |
@@ -242,7 +245,7 @@ qla2x00_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
242 | * Returns 0 on success. | 245 | * Returns 0 on success. |
243 | */ | 246 | */ |
244 | int | 247 | int |
245 | qla2x00_gid_pt(scsi_qla_host_t *ha, sw_info_t *list) | 248 | qla2x00_gid_pt(scsi_qla_host_t *vha, sw_info_t *list) |
246 | { | 249 | { |
247 | int rval; | 250 | int rval; |
248 | uint16_t i; | 251 | uint16_t i; |
@@ -252,16 +255,16 @@ qla2x00_gid_pt(scsi_qla_host_t *ha, sw_info_t *list) | |||
252 | struct ct_sns_rsp *ct_rsp; | 255 | struct ct_sns_rsp *ct_rsp; |
253 | 256 | ||
254 | struct ct_sns_gid_pt_data *gid_data; | 257 | struct ct_sns_gid_pt_data *gid_data; |
258 | struct qla_hw_data *ha = vha->hw; | ||
255 | 259 | ||
256 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 260 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
257 | return (qla2x00_sns_gid_pt(ha, list)); | 261 | return qla2x00_sns_gid_pt(vha, list); |
258 | } | ||
259 | 262 | ||
260 | gid_data = NULL; | 263 | gid_data = NULL; |
261 | 264 | ||
262 | /* Issue GID_PT */ | 265 | /* Issue GID_PT */ |
263 | /* Prepare common MS IOCB */ | 266 | /* Prepare common MS IOCB */ |
264 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, GID_PT_REQ_SIZE, | 267 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GID_PT_REQ_SIZE, |
265 | GID_PT_RSP_SIZE); | 268 | GID_PT_RSP_SIZE); |
266 | 269 | ||
267 | /* Prepare CT request */ | 270 | /* Prepare CT request */ |
@@ -273,13 +276,13 @@ qla2x00_gid_pt(scsi_qla_host_t *ha, sw_info_t *list) | |||
273 | ct_req->req.gid_pt.port_type = NS_NX_PORT_TYPE; | 276 | ct_req->req.gid_pt.port_type = NS_NX_PORT_TYPE; |
274 | 277 | ||
275 | /* Execute MS IOCB */ | 278 | /* Execute MS IOCB */ |
276 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 279 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
277 | sizeof(ms_iocb_entry_t)); | 280 | sizeof(ms_iocb_entry_t)); |
278 | if (rval != QLA_SUCCESS) { | 281 | if (rval != QLA_SUCCESS) { |
279 | /*EMPTY*/ | 282 | /*EMPTY*/ |
280 | DEBUG2_3(printk("scsi(%ld): GID_PT issue IOCB failed (%d).\n", | 283 | DEBUG2_3(printk("scsi(%ld): GID_PT issue IOCB failed (%d).\n", |
281 | ha->host_no, rval)); | 284 | vha->host_no, rval)); |
282 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "GID_PT") != | 285 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "GID_PT") != |
283 | QLA_SUCCESS) { | 286 | QLA_SUCCESS) { |
284 | rval = QLA_FUNCTION_FAILED; | 287 | rval = QLA_FUNCTION_FAILED; |
285 | } else { | 288 | } else { |
@@ -320,7 +323,7 @@ qla2x00_gid_pt(scsi_qla_host_t *ha, sw_info_t *list) | |||
320 | * Returns 0 on success. | 323 | * Returns 0 on success. |
321 | */ | 324 | */ |
322 | int | 325 | int |
323 | qla2x00_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | 326 | qla2x00_gpn_id(scsi_qla_host_t *vha, sw_info_t *list) |
324 | { | 327 | { |
325 | int rval; | 328 | int rval; |
326 | uint16_t i; | 329 | uint16_t i; |
@@ -328,15 +331,15 @@ qla2x00_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
328 | ms_iocb_entry_t *ms_pkt; | 331 | ms_iocb_entry_t *ms_pkt; |
329 | struct ct_sns_req *ct_req; | 332 | struct ct_sns_req *ct_req; |
330 | struct ct_sns_rsp *ct_rsp; | 333 | struct ct_sns_rsp *ct_rsp; |
334 | struct qla_hw_data *ha = vha->hw; | ||
331 | 335 | ||
332 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 336 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
333 | return (qla2x00_sns_gpn_id(ha, list)); | 337 | return qla2x00_sns_gpn_id(vha, list); |
334 | } | ||
335 | 338 | ||
336 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { | 339 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { |
337 | /* Issue GPN_ID */ | 340 | /* Issue GPN_ID */ |
338 | /* Prepare common MS IOCB */ | 341 | /* Prepare common MS IOCB */ |
339 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, GPN_ID_REQ_SIZE, | 342 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GPN_ID_REQ_SIZE, |
340 | GPN_ID_RSP_SIZE); | 343 | GPN_ID_RSP_SIZE); |
341 | 344 | ||
342 | /* Prepare CT request */ | 345 | /* Prepare CT request */ |
@@ -350,13 +353,13 @@ qla2x00_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
350 | ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa; | 353 | ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa; |
351 | 354 | ||
352 | /* Execute MS IOCB */ | 355 | /* Execute MS IOCB */ |
353 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 356 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
354 | sizeof(ms_iocb_entry_t)); | 357 | sizeof(ms_iocb_entry_t)); |
355 | if (rval != QLA_SUCCESS) { | 358 | if (rval != QLA_SUCCESS) { |
356 | /*EMPTY*/ | 359 | /*EMPTY*/ |
357 | DEBUG2_3(printk("scsi(%ld): GPN_ID issue IOCB failed " | 360 | DEBUG2_3(printk("scsi(%ld): GPN_ID issue IOCB failed " |
358 | "(%d).\n", ha->host_no, rval)); | 361 | "(%d).\n", vha->host_no, rval)); |
359 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, | 362 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, |
360 | "GPN_ID") != QLA_SUCCESS) { | 363 | "GPN_ID") != QLA_SUCCESS) { |
361 | rval = QLA_FUNCTION_FAILED; | 364 | rval = QLA_FUNCTION_FAILED; |
362 | } else { | 365 | } else { |
@@ -381,23 +384,22 @@ qla2x00_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
381 | * Returns 0 on success. | 384 | * Returns 0 on success. |
382 | */ | 385 | */ |
383 | int | 386 | int |
384 | qla2x00_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | 387 | qla2x00_gnn_id(scsi_qla_host_t *vha, sw_info_t *list) |
385 | { | 388 | { |
386 | int rval; | 389 | int rval; |
387 | uint16_t i; | 390 | uint16_t i; |
388 | 391 | struct qla_hw_data *ha = vha->hw; | |
389 | ms_iocb_entry_t *ms_pkt; | 392 | ms_iocb_entry_t *ms_pkt; |
390 | struct ct_sns_req *ct_req; | 393 | struct ct_sns_req *ct_req; |
391 | struct ct_sns_rsp *ct_rsp; | 394 | struct ct_sns_rsp *ct_rsp; |
392 | 395 | ||
393 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 396 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
394 | return (qla2x00_sns_gnn_id(ha, list)); | 397 | return qla2x00_sns_gnn_id(vha, list); |
395 | } | ||
396 | 398 | ||
397 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { | 399 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { |
398 | /* Issue GNN_ID */ | 400 | /* Issue GNN_ID */ |
399 | /* Prepare common MS IOCB */ | 401 | /* Prepare common MS IOCB */ |
400 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, GNN_ID_REQ_SIZE, | 402 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GNN_ID_REQ_SIZE, |
401 | GNN_ID_RSP_SIZE); | 403 | GNN_ID_RSP_SIZE); |
402 | 404 | ||
403 | /* Prepare CT request */ | 405 | /* Prepare CT request */ |
@@ -411,13 +413,13 @@ qla2x00_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
411 | ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa; | 413 | ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa; |
412 | 414 | ||
413 | /* Execute MS IOCB */ | 415 | /* Execute MS IOCB */ |
414 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 416 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
415 | sizeof(ms_iocb_entry_t)); | 417 | sizeof(ms_iocb_entry_t)); |
416 | if (rval != QLA_SUCCESS) { | 418 | if (rval != QLA_SUCCESS) { |
417 | /*EMPTY*/ | 419 | /*EMPTY*/ |
418 | DEBUG2_3(printk("scsi(%ld): GNN_ID issue IOCB failed " | 420 | DEBUG2_3(printk("scsi(%ld): GNN_ID issue IOCB failed " |
419 | "(%d).\n", ha->host_no, rval)); | 421 | "(%d).\n", vha->host_no, rval)); |
420 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, | 422 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, |
421 | "GNN_ID") != QLA_SUCCESS) { | 423 | "GNN_ID") != QLA_SUCCESS) { |
422 | rval = QLA_FUNCTION_FAILED; | 424 | rval = QLA_FUNCTION_FAILED; |
423 | } else { | 425 | } else { |
@@ -429,7 +431,7 @@ qla2x00_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
429 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " | 431 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " |
430 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " | 432 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " |
431 | "portid=%02x%02x%02x.\n", | 433 | "portid=%02x%02x%02x.\n", |
432 | ha->host_no, | 434 | vha->host_no, |
433 | list[i].node_name[0], list[i].node_name[1], | 435 | list[i].node_name[0], list[i].node_name[1], |
434 | list[i].node_name[2], list[i].node_name[3], | 436 | list[i].node_name[2], list[i].node_name[3], |
435 | list[i].node_name[4], list[i].node_name[5], | 437 | list[i].node_name[4], list[i].node_name[5], |
@@ -457,21 +459,20 @@ qla2x00_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
457 | * Returns 0 on success. | 459 | * Returns 0 on success. |
458 | */ | 460 | */ |
459 | int | 461 | int |
460 | qla2x00_rft_id(scsi_qla_host_t *ha) | 462 | qla2x00_rft_id(scsi_qla_host_t *vha) |
461 | { | 463 | { |
462 | int rval; | 464 | int rval; |
463 | 465 | struct qla_hw_data *ha = vha->hw; | |
464 | ms_iocb_entry_t *ms_pkt; | 466 | ms_iocb_entry_t *ms_pkt; |
465 | struct ct_sns_req *ct_req; | 467 | struct ct_sns_req *ct_req; |
466 | struct ct_sns_rsp *ct_rsp; | 468 | struct ct_sns_rsp *ct_rsp; |
467 | 469 | ||
468 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 470 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
469 | return (qla2x00_sns_rft_id(ha)); | 471 | return qla2x00_sns_rft_id(vha); |
470 | } | ||
471 | 472 | ||
472 | /* Issue RFT_ID */ | 473 | /* Issue RFT_ID */ |
473 | /* Prepare common MS IOCB */ | 474 | /* Prepare common MS IOCB */ |
474 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, RFT_ID_REQ_SIZE, | 475 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, RFT_ID_REQ_SIZE, |
475 | RFT_ID_RSP_SIZE); | 476 | RFT_ID_RSP_SIZE); |
476 | 477 | ||
477 | /* Prepare CT request */ | 478 | /* Prepare CT request */ |
@@ -480,25 +481,25 @@ qla2x00_rft_id(scsi_qla_host_t *ha) | |||
480 | ct_rsp = &ha->ct_sns->p.rsp; | 481 | ct_rsp = &ha->ct_sns->p.rsp; |
481 | 482 | ||
482 | /* Prepare CT arguments -- port_id, FC-4 types */ | 483 | /* Prepare CT arguments -- port_id, FC-4 types */ |
483 | ct_req->req.rft_id.port_id[0] = ha->d_id.b.domain; | 484 | ct_req->req.rft_id.port_id[0] = vha->d_id.b.domain; |
484 | ct_req->req.rft_id.port_id[1] = ha->d_id.b.area; | 485 | ct_req->req.rft_id.port_id[1] = vha->d_id.b.area; |
485 | ct_req->req.rft_id.port_id[2] = ha->d_id.b.al_pa; | 486 | ct_req->req.rft_id.port_id[2] = vha->d_id.b.al_pa; |
486 | 487 | ||
487 | ct_req->req.rft_id.fc4_types[2] = 0x01; /* FCP-3 */ | 488 | ct_req->req.rft_id.fc4_types[2] = 0x01; /* FCP-3 */ |
488 | 489 | ||
489 | /* Execute MS IOCB */ | 490 | /* Execute MS IOCB */ |
490 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 491 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
491 | sizeof(ms_iocb_entry_t)); | 492 | sizeof(ms_iocb_entry_t)); |
492 | if (rval != QLA_SUCCESS) { | 493 | if (rval != QLA_SUCCESS) { |
493 | /*EMPTY*/ | 494 | /*EMPTY*/ |
494 | DEBUG2_3(printk("scsi(%ld): RFT_ID issue IOCB failed (%d).\n", | 495 | DEBUG2_3(printk("scsi(%ld): RFT_ID issue IOCB failed (%d).\n", |
495 | ha->host_no, rval)); | 496 | vha->host_no, rval)); |
496 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RFT_ID") != | 497 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RFT_ID") != |
497 | QLA_SUCCESS) { | 498 | QLA_SUCCESS) { |
498 | rval = QLA_FUNCTION_FAILED; | 499 | rval = QLA_FUNCTION_FAILED; |
499 | } else { | 500 | } else { |
500 | DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n", | 501 | DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n", |
501 | ha->host_no)); | 502 | vha->host_no)); |
502 | } | 503 | } |
503 | 504 | ||
504 | return (rval); | 505 | return (rval); |
@@ -511,23 +512,23 @@ qla2x00_rft_id(scsi_qla_host_t *ha) | |||
511 | * Returns 0 on success. | 512 | * Returns 0 on success. |
512 | */ | 513 | */ |
513 | int | 514 | int |
514 | qla2x00_rff_id(scsi_qla_host_t *ha) | 515 | qla2x00_rff_id(scsi_qla_host_t *vha) |
515 | { | 516 | { |
516 | int rval; | 517 | int rval; |
517 | 518 | struct qla_hw_data *ha = vha->hw; | |
518 | ms_iocb_entry_t *ms_pkt; | 519 | ms_iocb_entry_t *ms_pkt; |
519 | struct ct_sns_req *ct_req; | 520 | struct ct_sns_req *ct_req; |
520 | struct ct_sns_rsp *ct_rsp; | 521 | struct ct_sns_rsp *ct_rsp; |
521 | 522 | ||
522 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 523 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { |
523 | DEBUG2(printk("scsi(%ld): RFF_ID call unsupported on " | 524 | DEBUG2(printk("scsi(%ld): RFF_ID call unsupported on " |
524 | "ISP2100/ISP2200.\n", ha->host_no)); | 525 | "ISP2100/ISP2200.\n", vha->host_no)); |
525 | return (QLA_SUCCESS); | 526 | return (QLA_SUCCESS); |
526 | } | 527 | } |
527 | 528 | ||
528 | /* Issue RFF_ID */ | 529 | /* Issue RFF_ID */ |
529 | /* Prepare common MS IOCB */ | 530 | /* Prepare common MS IOCB */ |
530 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, RFF_ID_REQ_SIZE, | 531 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, RFF_ID_REQ_SIZE, |
531 | RFF_ID_RSP_SIZE); | 532 | RFF_ID_RSP_SIZE); |
532 | 533 | ||
533 | /* Prepare CT request */ | 534 | /* Prepare CT request */ |
@@ -536,26 +537,26 @@ qla2x00_rff_id(scsi_qla_host_t *ha) | |||
536 | ct_rsp = &ha->ct_sns->p.rsp; | 537 | ct_rsp = &ha->ct_sns->p.rsp; |
537 | 538 | ||
538 | /* Prepare CT arguments -- port_id, FC-4 feature, FC-4 type */ | 539 | /* Prepare CT arguments -- port_id, FC-4 feature, FC-4 type */ |
539 | ct_req->req.rff_id.port_id[0] = ha->d_id.b.domain; | 540 | ct_req->req.rff_id.port_id[0] = vha->d_id.b.domain; |
540 | ct_req->req.rff_id.port_id[1] = ha->d_id.b.area; | 541 | ct_req->req.rff_id.port_id[1] = vha->d_id.b.area; |
541 | ct_req->req.rff_id.port_id[2] = ha->d_id.b.al_pa; | 542 | ct_req->req.rff_id.port_id[2] = vha->d_id.b.al_pa; |
542 | 543 | ||
543 | ct_req->req.rff_id.fc4_feature = BIT_1; | 544 | ct_req->req.rff_id.fc4_feature = BIT_1; |
544 | ct_req->req.rff_id.fc4_type = 0x08; /* SCSI - FCP */ | 545 | ct_req->req.rff_id.fc4_type = 0x08; /* SCSI - FCP */ |
545 | 546 | ||
546 | /* Execute MS IOCB */ | 547 | /* Execute MS IOCB */ |
547 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 548 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
548 | sizeof(ms_iocb_entry_t)); | 549 | sizeof(ms_iocb_entry_t)); |
549 | if (rval != QLA_SUCCESS) { | 550 | if (rval != QLA_SUCCESS) { |
550 | /*EMPTY*/ | 551 | /*EMPTY*/ |
551 | DEBUG2_3(printk("scsi(%ld): RFF_ID issue IOCB failed (%d).\n", | 552 | DEBUG2_3(printk("scsi(%ld): RFF_ID issue IOCB failed (%d).\n", |
552 | ha->host_no, rval)); | 553 | vha->host_no, rval)); |
553 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RFF_ID") != | 554 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RFF_ID") != |
554 | QLA_SUCCESS) { | 555 | QLA_SUCCESS) { |
555 | rval = QLA_FUNCTION_FAILED; | 556 | rval = QLA_FUNCTION_FAILED; |
556 | } else { | 557 | } else { |
557 | DEBUG2(printk("scsi(%ld): RFF_ID exiting normally.\n", | 558 | DEBUG2(printk("scsi(%ld): RFF_ID exiting normally.\n", |
558 | ha->host_no)); | 559 | vha->host_no)); |
559 | } | 560 | } |
560 | 561 | ||
561 | return (rval); | 562 | return (rval); |
@@ -568,21 +569,20 @@ qla2x00_rff_id(scsi_qla_host_t *ha) | |||
568 | * Returns 0 on success. | 569 | * Returns 0 on success. |
569 | */ | 570 | */ |
570 | int | 571 | int |
571 | qla2x00_rnn_id(scsi_qla_host_t *ha) | 572 | qla2x00_rnn_id(scsi_qla_host_t *vha) |
572 | { | 573 | { |
573 | int rval; | 574 | int rval; |
574 | 575 | struct qla_hw_data *ha = vha->hw; | |
575 | ms_iocb_entry_t *ms_pkt; | 576 | ms_iocb_entry_t *ms_pkt; |
576 | struct ct_sns_req *ct_req; | 577 | struct ct_sns_req *ct_req; |
577 | struct ct_sns_rsp *ct_rsp; | 578 | struct ct_sns_rsp *ct_rsp; |
578 | 579 | ||
579 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 580 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) |
580 | return (qla2x00_sns_rnn_id(ha)); | 581 | return qla2x00_sns_rnn_id(vha); |
581 | } | ||
582 | 582 | ||
583 | /* Issue RNN_ID */ | 583 | /* Issue RNN_ID */ |
584 | /* Prepare common MS IOCB */ | 584 | /* Prepare common MS IOCB */ |
585 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, RNN_ID_REQ_SIZE, | 585 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, RNN_ID_REQ_SIZE, |
586 | RNN_ID_RSP_SIZE); | 586 | RNN_ID_RSP_SIZE); |
587 | 587 | ||
588 | /* Prepare CT request */ | 588 | /* Prepare CT request */ |
@@ -591,33 +591,34 @@ qla2x00_rnn_id(scsi_qla_host_t *ha) | |||
591 | ct_rsp = &ha->ct_sns->p.rsp; | 591 | ct_rsp = &ha->ct_sns->p.rsp; |
592 | 592 | ||
593 | /* Prepare CT arguments -- port_id, node_name */ | 593 | /* Prepare CT arguments -- port_id, node_name */ |
594 | ct_req->req.rnn_id.port_id[0] = ha->d_id.b.domain; | 594 | ct_req->req.rnn_id.port_id[0] = vha->d_id.b.domain; |
595 | ct_req->req.rnn_id.port_id[1] = ha->d_id.b.area; | 595 | ct_req->req.rnn_id.port_id[1] = vha->d_id.b.area; |
596 | ct_req->req.rnn_id.port_id[2] = ha->d_id.b.al_pa; | 596 | ct_req->req.rnn_id.port_id[2] = vha->d_id.b.al_pa; |
597 | 597 | ||
598 | memcpy(ct_req->req.rnn_id.node_name, ha->node_name, WWN_SIZE); | 598 | memcpy(ct_req->req.rnn_id.node_name, vha->node_name, WWN_SIZE); |
599 | 599 | ||
600 | /* Execute MS IOCB */ | 600 | /* Execute MS IOCB */ |
601 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 601 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
602 | sizeof(ms_iocb_entry_t)); | 602 | sizeof(ms_iocb_entry_t)); |
603 | if (rval != QLA_SUCCESS) { | 603 | if (rval != QLA_SUCCESS) { |
604 | /*EMPTY*/ | 604 | /*EMPTY*/ |
605 | DEBUG2_3(printk("scsi(%ld): RNN_ID issue IOCB failed (%d).\n", | 605 | DEBUG2_3(printk("scsi(%ld): RNN_ID issue IOCB failed (%d).\n", |
606 | ha->host_no, rval)); | 606 | vha->host_no, rval)); |
607 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RNN_ID") != | 607 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RNN_ID") != |
608 | QLA_SUCCESS) { | 608 | QLA_SUCCESS) { |
609 | rval = QLA_FUNCTION_FAILED; | 609 | rval = QLA_FUNCTION_FAILED; |
610 | } else { | 610 | } else { |
611 | DEBUG2(printk("scsi(%ld): RNN_ID exiting normally.\n", | 611 | DEBUG2(printk("scsi(%ld): RNN_ID exiting normally.\n", |
612 | ha->host_no)); | 612 | vha->host_no)); |
613 | } | 613 | } |
614 | 614 | ||
615 | return (rval); | 615 | return (rval); |
616 | } | 616 | } |
617 | 617 | ||
618 | void | 618 | void |
619 | qla2x00_get_sym_node_name(scsi_qla_host_t *ha, uint8_t *snn) | 619 | qla2x00_get_sym_node_name(scsi_qla_host_t *vha, uint8_t *snn) |
620 | { | 620 | { |
621 | struct qla_hw_data *ha = vha->hw; | ||
621 | sprintf(snn, "%s FW:v%d.%02d.%02d DVR:v%s",ha->model_number, | 622 | sprintf(snn, "%s FW:v%d.%02d.%02d DVR:v%s",ha->model_number, |
622 | ha->fw_major_version, ha->fw_minor_version, | 623 | ha->fw_major_version, ha->fw_minor_version, |
623 | ha->fw_subminor_version, qla2x00_version_str); | 624 | ha->fw_subminor_version, qla2x00_version_str); |
@@ -630,23 +631,24 @@ qla2x00_get_sym_node_name(scsi_qla_host_t *ha, uint8_t *snn) | |||
630 | * Returns 0 on success. | 631 | * Returns 0 on success. |
631 | */ | 632 | */ |
632 | int | 633 | int |
633 | qla2x00_rsnn_nn(scsi_qla_host_t *ha) | 634 | qla2x00_rsnn_nn(scsi_qla_host_t *vha) |
634 | { | 635 | { |
635 | int rval; | 636 | int rval; |
637 | struct qla_hw_data *ha = vha->hw; | ||
636 | ms_iocb_entry_t *ms_pkt; | 638 | ms_iocb_entry_t *ms_pkt; |
637 | struct ct_sns_req *ct_req; | 639 | struct ct_sns_req *ct_req; |
638 | struct ct_sns_rsp *ct_rsp; | 640 | struct ct_sns_rsp *ct_rsp; |
639 | 641 | ||
640 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 642 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { |
641 | DEBUG2(printk("scsi(%ld): RSNN_ID call unsupported on " | 643 | DEBUG2(printk("scsi(%ld): RSNN_ID call unsupported on " |
642 | "ISP2100/ISP2200.\n", ha->host_no)); | 644 | "ISP2100/ISP2200.\n", vha->host_no)); |
643 | return (QLA_SUCCESS); | 645 | return (QLA_SUCCESS); |
644 | } | 646 | } |
645 | 647 | ||
646 | /* Issue RSNN_NN */ | 648 | /* Issue RSNN_NN */ |
647 | /* Prepare common MS IOCB */ | 649 | /* Prepare common MS IOCB */ |
648 | /* Request size adjusted after CT preparation */ | 650 | /* Request size adjusted after CT preparation */ |
649 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, 0, RSNN_NN_RSP_SIZE); | 651 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, 0, RSNN_NN_RSP_SIZE); |
650 | 652 | ||
651 | /* Prepare CT request */ | 653 | /* Prepare CT request */ |
652 | ct_req = qla2x00_prep_ct_req(&ha->ct_sns->p.req, RSNN_NN_CMD, | 654 | ct_req = qla2x00_prep_ct_req(&ha->ct_sns->p.req, RSNN_NN_CMD, |
@@ -654,10 +656,10 @@ qla2x00_rsnn_nn(scsi_qla_host_t *ha) | |||
654 | ct_rsp = &ha->ct_sns->p.rsp; | 656 | ct_rsp = &ha->ct_sns->p.rsp; |
655 | 657 | ||
656 | /* Prepare CT arguments -- node_name, symbolic node_name, size */ | 658 | /* Prepare CT arguments -- node_name, symbolic node_name, size */ |
657 | memcpy(ct_req->req.rsnn_nn.node_name, ha->node_name, WWN_SIZE); | 659 | memcpy(ct_req->req.rsnn_nn.node_name, vha->node_name, WWN_SIZE); |
658 | 660 | ||
659 | /* Prepare the Symbolic Node Name */ | 661 | /* Prepare the Symbolic Node Name */ |
660 | qla2x00_get_sym_node_name(ha, ct_req->req.rsnn_nn.sym_node_name); | 662 | qla2x00_get_sym_node_name(vha, ct_req->req.rsnn_nn.sym_node_name); |
661 | 663 | ||
662 | /* Calculate SNN length */ | 664 | /* Calculate SNN length */ |
663 | ct_req->req.rsnn_nn.name_len = | 665 | ct_req->req.rsnn_nn.name_len = |
@@ -669,18 +671,18 @@ qla2x00_rsnn_nn(scsi_qla_host_t *ha) | |||
669 | ms_pkt->dseg_req_length = ms_pkt->req_bytecount; | 671 | ms_pkt->dseg_req_length = ms_pkt->req_bytecount; |
670 | 672 | ||
671 | /* Execute MS IOCB */ | 673 | /* Execute MS IOCB */ |
672 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 674 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
673 | sizeof(ms_iocb_entry_t)); | 675 | sizeof(ms_iocb_entry_t)); |
674 | if (rval != QLA_SUCCESS) { | 676 | if (rval != QLA_SUCCESS) { |
675 | /*EMPTY*/ | 677 | /*EMPTY*/ |
676 | DEBUG2_3(printk("scsi(%ld): RSNN_NN issue IOCB failed (%d).\n", | 678 | DEBUG2_3(printk("scsi(%ld): RSNN_NN issue IOCB failed (%d).\n", |
677 | ha->host_no, rval)); | 679 | vha->host_no, rval)); |
678 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RSNN_NN") != | 680 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RSNN_NN") != |
679 | QLA_SUCCESS) { | 681 | QLA_SUCCESS) { |
680 | rval = QLA_FUNCTION_FAILED; | 682 | rval = QLA_FUNCTION_FAILED; |
681 | } else { | 683 | } else { |
682 | DEBUG2(printk("scsi(%ld): RSNN_NN exiting normally.\n", | 684 | DEBUG2(printk("scsi(%ld): RSNN_NN exiting normally.\n", |
683 | ha->host_no)); | 685 | vha->host_no)); |
684 | } | 686 | } |
685 | 687 | ||
686 | return (rval); | 688 | return (rval); |
@@ -696,11 +698,12 @@ qla2x00_rsnn_nn(scsi_qla_host_t *ha) | |||
696 | * Returns a pointer to the @ha's sns_cmd. | 698 | * Returns a pointer to the @ha's sns_cmd. |
697 | */ | 699 | */ |
698 | static inline struct sns_cmd_pkt * | 700 | static inline struct sns_cmd_pkt * |
699 | qla2x00_prep_sns_cmd(scsi_qla_host_t *ha, uint16_t cmd, uint16_t scmd_len, | 701 | qla2x00_prep_sns_cmd(scsi_qla_host_t *vha, uint16_t cmd, uint16_t scmd_len, |
700 | uint16_t data_size) | 702 | uint16_t data_size) |
701 | { | 703 | { |
702 | uint16_t wc; | 704 | uint16_t wc; |
703 | struct sns_cmd_pkt *sns_cmd; | 705 | struct sns_cmd_pkt *sns_cmd; |
706 | struct qla_hw_data *ha = vha->hw; | ||
704 | 707 | ||
705 | sns_cmd = ha->sns_cmd; | 708 | sns_cmd = ha->sns_cmd; |
706 | memset(sns_cmd, 0, sizeof(struct sns_cmd_pkt)); | 709 | memset(sns_cmd, 0, sizeof(struct sns_cmd_pkt)); |
@@ -726,15 +729,15 @@ qla2x00_prep_sns_cmd(scsi_qla_host_t *ha, uint16_t cmd, uint16_t scmd_len, | |||
726 | * Returns 0 on success. | 729 | * Returns 0 on success. |
727 | */ | 730 | */ |
728 | static int | 731 | static int |
729 | qla2x00_sns_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | 732 | qla2x00_sns_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport) |
730 | { | 733 | { |
731 | int rval; | 734 | int rval; |
732 | 735 | struct qla_hw_data *ha = vha->hw; | |
733 | struct sns_cmd_pkt *sns_cmd; | 736 | struct sns_cmd_pkt *sns_cmd; |
734 | 737 | ||
735 | /* Issue GA_NXT. */ | 738 | /* Issue GA_NXT. */ |
736 | /* Prepare SNS command request. */ | 739 | /* Prepare SNS command request. */ |
737 | sns_cmd = qla2x00_prep_sns_cmd(ha, GA_NXT_CMD, GA_NXT_SNS_SCMD_LEN, | 740 | sns_cmd = qla2x00_prep_sns_cmd(vha, GA_NXT_CMD, GA_NXT_SNS_SCMD_LEN, |
738 | GA_NXT_SNS_DATA_SIZE); | 741 | GA_NXT_SNS_DATA_SIZE); |
739 | 742 | ||
740 | /* Prepare SNS command arguments -- port_id. */ | 743 | /* Prepare SNS command arguments -- port_id. */ |
@@ -743,16 +746,16 @@ qla2x00_sns_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
743 | sns_cmd->p.cmd.param[2] = fcport->d_id.b.domain; | 746 | sns_cmd->p.cmd.param[2] = fcport->d_id.b.domain; |
744 | 747 | ||
745 | /* Execute SNS command. */ | 748 | /* Execute SNS command. */ |
746 | rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, GA_NXT_SNS_CMD_SIZE / 2, | 749 | rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, GA_NXT_SNS_CMD_SIZE / 2, |
747 | sizeof(struct sns_cmd_pkt)); | 750 | sizeof(struct sns_cmd_pkt)); |
748 | if (rval != QLA_SUCCESS) { | 751 | if (rval != QLA_SUCCESS) { |
749 | /*EMPTY*/ | 752 | /*EMPTY*/ |
750 | DEBUG2_3(printk("scsi(%ld): GA_NXT Send SNS failed (%d).\n", | 753 | DEBUG2_3(printk("scsi(%ld): GA_NXT Send SNS failed (%d).\n", |
751 | ha->host_no, rval)); | 754 | vha->host_no, rval)); |
752 | } else if (sns_cmd->p.gan_data[8] != 0x80 || | 755 | } else if (sns_cmd->p.gan_data[8] != 0x80 || |
753 | sns_cmd->p.gan_data[9] != 0x02) { | 756 | sns_cmd->p.gan_data[9] != 0x02) { |
754 | DEBUG2_3(printk("scsi(%ld): GA_NXT failed, rejected request, " | 757 | DEBUG2_3(printk("scsi(%ld): GA_NXT failed, rejected request, " |
755 | "ga_nxt_rsp:\n", ha->host_no)); | 758 | "ga_nxt_rsp:\n", vha->host_no)); |
756 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gan_data, 16)); | 759 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gan_data, 16)); |
757 | rval = QLA_FUNCTION_FAILED; | 760 | rval = QLA_FUNCTION_FAILED; |
758 | } else { | 761 | } else { |
@@ -772,7 +775,7 @@ qla2x00_sns_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
772 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " | 775 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " |
773 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " | 776 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " |
774 | "portid=%02x%02x%02x.\n", | 777 | "portid=%02x%02x%02x.\n", |
775 | ha->host_no, | 778 | vha->host_no, |
776 | fcport->node_name[0], fcport->node_name[1], | 779 | fcport->node_name[0], fcport->node_name[1], |
777 | fcport->node_name[2], fcport->node_name[3], | 780 | fcport->node_name[2], fcport->node_name[3], |
778 | fcport->node_name[4], fcport->node_name[5], | 781 | fcport->node_name[4], fcport->node_name[5], |
@@ -800,33 +803,33 @@ qla2x00_sns_ga_nxt(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
800 | * Returns 0 on success. | 803 | * Returns 0 on success. |
801 | */ | 804 | */ |
802 | static int | 805 | static int |
803 | qla2x00_sns_gid_pt(scsi_qla_host_t *ha, sw_info_t *list) | 806 | qla2x00_sns_gid_pt(scsi_qla_host_t *vha, sw_info_t *list) |
804 | { | 807 | { |
805 | int rval; | 808 | int rval; |
806 | 809 | struct qla_hw_data *ha = vha->hw; | |
807 | uint16_t i; | 810 | uint16_t i; |
808 | uint8_t *entry; | 811 | uint8_t *entry; |
809 | struct sns_cmd_pkt *sns_cmd; | 812 | struct sns_cmd_pkt *sns_cmd; |
810 | 813 | ||
811 | /* Issue GID_PT. */ | 814 | /* Issue GID_PT. */ |
812 | /* Prepare SNS command request. */ | 815 | /* Prepare SNS command request. */ |
813 | sns_cmd = qla2x00_prep_sns_cmd(ha, GID_PT_CMD, GID_PT_SNS_SCMD_LEN, | 816 | sns_cmd = qla2x00_prep_sns_cmd(vha, GID_PT_CMD, GID_PT_SNS_SCMD_LEN, |
814 | GID_PT_SNS_DATA_SIZE); | 817 | GID_PT_SNS_DATA_SIZE); |
815 | 818 | ||
816 | /* Prepare SNS command arguments -- port_type. */ | 819 | /* Prepare SNS command arguments -- port_type. */ |
817 | sns_cmd->p.cmd.param[0] = NS_NX_PORT_TYPE; | 820 | sns_cmd->p.cmd.param[0] = NS_NX_PORT_TYPE; |
818 | 821 | ||
819 | /* Execute SNS command. */ | 822 | /* Execute SNS command. */ |
820 | rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, GID_PT_SNS_CMD_SIZE / 2, | 823 | rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, GID_PT_SNS_CMD_SIZE / 2, |
821 | sizeof(struct sns_cmd_pkt)); | 824 | sizeof(struct sns_cmd_pkt)); |
822 | if (rval != QLA_SUCCESS) { | 825 | if (rval != QLA_SUCCESS) { |
823 | /*EMPTY*/ | 826 | /*EMPTY*/ |
824 | DEBUG2_3(printk("scsi(%ld): GID_PT Send SNS failed (%d).\n", | 827 | DEBUG2_3(printk("scsi(%ld): GID_PT Send SNS failed (%d).\n", |
825 | ha->host_no, rval)); | 828 | vha->host_no, rval)); |
826 | } else if (sns_cmd->p.gid_data[8] != 0x80 || | 829 | } else if (sns_cmd->p.gid_data[8] != 0x80 || |
827 | sns_cmd->p.gid_data[9] != 0x02) { | 830 | sns_cmd->p.gid_data[9] != 0x02) { |
828 | DEBUG2_3(printk("scsi(%ld): GID_PT failed, rejected request, " | 831 | DEBUG2_3(printk("scsi(%ld): GID_PT failed, rejected request, " |
829 | "gid_rsp:\n", ha->host_no)); | 832 | "gid_rsp:\n", vha->host_no)); |
830 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gid_data, 16)); | 833 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gid_data, 16)); |
831 | rval = QLA_FUNCTION_FAILED; | 834 | rval = QLA_FUNCTION_FAILED; |
832 | } else { | 835 | } else { |
@@ -867,17 +870,17 @@ qla2x00_sns_gid_pt(scsi_qla_host_t *ha, sw_info_t *list) | |||
867 | * Returns 0 on success. | 870 | * Returns 0 on success. |
868 | */ | 871 | */ |
869 | static int | 872 | static int |
870 | qla2x00_sns_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | 873 | qla2x00_sns_gpn_id(scsi_qla_host_t *vha, sw_info_t *list) |
871 | { | 874 | { |
872 | int rval; | 875 | int rval; |
873 | 876 | struct qla_hw_data *ha = vha->hw; | |
874 | uint16_t i; | 877 | uint16_t i; |
875 | struct sns_cmd_pkt *sns_cmd; | 878 | struct sns_cmd_pkt *sns_cmd; |
876 | 879 | ||
877 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { | 880 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { |
878 | /* Issue GPN_ID */ | 881 | /* Issue GPN_ID */ |
879 | /* Prepare SNS command request. */ | 882 | /* Prepare SNS command request. */ |
880 | sns_cmd = qla2x00_prep_sns_cmd(ha, GPN_ID_CMD, | 883 | sns_cmd = qla2x00_prep_sns_cmd(vha, GPN_ID_CMD, |
881 | GPN_ID_SNS_SCMD_LEN, GPN_ID_SNS_DATA_SIZE); | 884 | GPN_ID_SNS_SCMD_LEN, GPN_ID_SNS_DATA_SIZE); |
882 | 885 | ||
883 | /* Prepare SNS command arguments -- port_id. */ | 886 | /* Prepare SNS command arguments -- port_id. */ |
@@ -886,16 +889,16 @@ qla2x00_sns_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
886 | sns_cmd->p.cmd.param[2] = list[i].d_id.b.domain; | 889 | sns_cmd->p.cmd.param[2] = list[i].d_id.b.domain; |
887 | 890 | ||
888 | /* Execute SNS command. */ | 891 | /* Execute SNS command. */ |
889 | rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, | 892 | rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, |
890 | GPN_ID_SNS_CMD_SIZE / 2, sizeof(struct sns_cmd_pkt)); | 893 | GPN_ID_SNS_CMD_SIZE / 2, sizeof(struct sns_cmd_pkt)); |
891 | if (rval != QLA_SUCCESS) { | 894 | if (rval != QLA_SUCCESS) { |
892 | /*EMPTY*/ | 895 | /*EMPTY*/ |
893 | DEBUG2_3(printk("scsi(%ld): GPN_ID Send SNS failed " | 896 | DEBUG2_3(printk("scsi(%ld): GPN_ID Send SNS failed " |
894 | "(%d).\n", ha->host_no, rval)); | 897 | "(%d).\n", vha->host_no, rval)); |
895 | } else if (sns_cmd->p.gpn_data[8] != 0x80 || | 898 | } else if (sns_cmd->p.gpn_data[8] != 0x80 || |
896 | sns_cmd->p.gpn_data[9] != 0x02) { | 899 | sns_cmd->p.gpn_data[9] != 0x02) { |
897 | DEBUG2_3(printk("scsi(%ld): GPN_ID failed, rejected " | 900 | DEBUG2_3(printk("scsi(%ld): GPN_ID failed, rejected " |
898 | "request, gpn_rsp:\n", ha->host_no)); | 901 | "request, gpn_rsp:\n", vha->host_no)); |
899 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gpn_data, 16)); | 902 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gpn_data, 16)); |
900 | rval = QLA_FUNCTION_FAILED; | 903 | rval = QLA_FUNCTION_FAILED; |
901 | } else { | 904 | } else { |
@@ -922,17 +925,17 @@ qla2x00_sns_gpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
922 | * Returns 0 on success. | 925 | * Returns 0 on success. |
923 | */ | 926 | */ |
924 | static int | 927 | static int |
925 | qla2x00_sns_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | 928 | qla2x00_sns_gnn_id(scsi_qla_host_t *vha, sw_info_t *list) |
926 | { | 929 | { |
927 | int rval; | 930 | int rval; |
928 | 931 | struct qla_hw_data *ha = vha->hw; | |
929 | uint16_t i; | 932 | uint16_t i; |
930 | struct sns_cmd_pkt *sns_cmd; | 933 | struct sns_cmd_pkt *sns_cmd; |
931 | 934 | ||
932 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { | 935 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { |
933 | /* Issue GNN_ID */ | 936 | /* Issue GNN_ID */ |
934 | /* Prepare SNS command request. */ | 937 | /* Prepare SNS command request. */ |
935 | sns_cmd = qla2x00_prep_sns_cmd(ha, GNN_ID_CMD, | 938 | sns_cmd = qla2x00_prep_sns_cmd(vha, GNN_ID_CMD, |
936 | GNN_ID_SNS_SCMD_LEN, GNN_ID_SNS_DATA_SIZE); | 939 | GNN_ID_SNS_SCMD_LEN, GNN_ID_SNS_DATA_SIZE); |
937 | 940 | ||
938 | /* Prepare SNS command arguments -- port_id. */ | 941 | /* Prepare SNS command arguments -- port_id. */ |
@@ -941,16 +944,16 @@ qla2x00_sns_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
941 | sns_cmd->p.cmd.param[2] = list[i].d_id.b.domain; | 944 | sns_cmd->p.cmd.param[2] = list[i].d_id.b.domain; |
942 | 945 | ||
943 | /* Execute SNS command. */ | 946 | /* Execute SNS command. */ |
944 | rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, | 947 | rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, |
945 | GNN_ID_SNS_CMD_SIZE / 2, sizeof(struct sns_cmd_pkt)); | 948 | GNN_ID_SNS_CMD_SIZE / 2, sizeof(struct sns_cmd_pkt)); |
946 | if (rval != QLA_SUCCESS) { | 949 | if (rval != QLA_SUCCESS) { |
947 | /*EMPTY*/ | 950 | /*EMPTY*/ |
948 | DEBUG2_3(printk("scsi(%ld): GNN_ID Send SNS failed " | 951 | DEBUG2_3(printk("scsi(%ld): GNN_ID Send SNS failed " |
949 | "(%d).\n", ha->host_no, rval)); | 952 | "(%d).\n", vha->host_no, rval)); |
950 | } else if (sns_cmd->p.gnn_data[8] != 0x80 || | 953 | } else if (sns_cmd->p.gnn_data[8] != 0x80 || |
951 | sns_cmd->p.gnn_data[9] != 0x02) { | 954 | sns_cmd->p.gnn_data[9] != 0x02) { |
952 | DEBUG2_3(printk("scsi(%ld): GNN_ID failed, rejected " | 955 | DEBUG2_3(printk("scsi(%ld): GNN_ID failed, rejected " |
953 | "request, gnn_rsp:\n", ha->host_no)); | 956 | "request, gnn_rsp:\n", vha->host_no)); |
954 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gnn_data, 16)); | 957 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.gnn_data, 16)); |
955 | rval = QLA_FUNCTION_FAILED; | 958 | rval = QLA_FUNCTION_FAILED; |
956 | } else { | 959 | } else { |
@@ -962,7 +965,7 @@ qla2x00_sns_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
962 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " | 965 | "nn %02x%02x%02x%02x%02x%02x%02x%02x " |
963 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " | 966 | "pn %02x%02x%02x%02x%02x%02x%02x%02x " |
964 | "portid=%02x%02x%02x.\n", | 967 | "portid=%02x%02x%02x.\n", |
965 | ha->host_no, | 968 | vha->host_no, |
966 | list[i].node_name[0], list[i].node_name[1], | 969 | list[i].node_name[0], list[i].node_name[1], |
967 | list[i].node_name[2], list[i].node_name[3], | 970 | list[i].node_name[2], list[i].node_name[3], |
968 | list[i].node_name[4], list[i].node_name[5], | 971 | list[i].node_name[4], list[i].node_name[5], |
@@ -992,40 +995,40 @@ qla2x00_sns_gnn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
992 | * Returns 0 on success. | 995 | * Returns 0 on success. |
993 | */ | 996 | */ |
994 | static int | 997 | static int |
995 | qla2x00_sns_rft_id(scsi_qla_host_t *ha) | 998 | qla2x00_sns_rft_id(scsi_qla_host_t *vha) |
996 | { | 999 | { |
997 | int rval; | 1000 | int rval; |
998 | 1001 | struct qla_hw_data *ha = vha->hw; | |
999 | struct sns_cmd_pkt *sns_cmd; | 1002 | struct sns_cmd_pkt *sns_cmd; |
1000 | 1003 | ||
1001 | /* Issue RFT_ID. */ | 1004 | /* Issue RFT_ID. */ |
1002 | /* Prepare SNS command request. */ | 1005 | /* Prepare SNS command request. */ |
1003 | sns_cmd = qla2x00_prep_sns_cmd(ha, RFT_ID_CMD, RFT_ID_SNS_SCMD_LEN, | 1006 | sns_cmd = qla2x00_prep_sns_cmd(vha, RFT_ID_CMD, RFT_ID_SNS_SCMD_LEN, |
1004 | RFT_ID_SNS_DATA_SIZE); | 1007 | RFT_ID_SNS_DATA_SIZE); |
1005 | 1008 | ||
1006 | /* Prepare SNS command arguments -- port_id, FC-4 types */ | 1009 | /* Prepare SNS command arguments -- port_id, FC-4 types */ |
1007 | sns_cmd->p.cmd.param[0] = ha->d_id.b.al_pa; | 1010 | sns_cmd->p.cmd.param[0] = vha->d_id.b.al_pa; |
1008 | sns_cmd->p.cmd.param[1] = ha->d_id.b.area; | 1011 | sns_cmd->p.cmd.param[1] = vha->d_id.b.area; |
1009 | sns_cmd->p.cmd.param[2] = ha->d_id.b.domain; | 1012 | sns_cmd->p.cmd.param[2] = vha->d_id.b.domain; |
1010 | 1013 | ||
1011 | sns_cmd->p.cmd.param[5] = 0x01; /* FCP-3 */ | 1014 | sns_cmd->p.cmd.param[5] = 0x01; /* FCP-3 */ |
1012 | 1015 | ||
1013 | /* Execute SNS command. */ | 1016 | /* Execute SNS command. */ |
1014 | rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, RFT_ID_SNS_CMD_SIZE / 2, | 1017 | rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, RFT_ID_SNS_CMD_SIZE / 2, |
1015 | sizeof(struct sns_cmd_pkt)); | 1018 | sizeof(struct sns_cmd_pkt)); |
1016 | if (rval != QLA_SUCCESS) { | 1019 | if (rval != QLA_SUCCESS) { |
1017 | /*EMPTY*/ | 1020 | /*EMPTY*/ |
1018 | DEBUG2_3(printk("scsi(%ld): RFT_ID Send SNS failed (%d).\n", | 1021 | DEBUG2_3(printk("scsi(%ld): RFT_ID Send SNS failed (%d).\n", |
1019 | ha->host_no, rval)); | 1022 | vha->host_no, rval)); |
1020 | } else if (sns_cmd->p.rft_data[8] != 0x80 || | 1023 | } else if (sns_cmd->p.rft_data[8] != 0x80 || |
1021 | sns_cmd->p.rft_data[9] != 0x02) { | 1024 | sns_cmd->p.rft_data[9] != 0x02) { |
1022 | DEBUG2_3(printk("scsi(%ld): RFT_ID failed, rejected request, " | 1025 | DEBUG2_3(printk("scsi(%ld): RFT_ID failed, rejected request, " |
1023 | "rft_rsp:\n", ha->host_no)); | 1026 | "rft_rsp:\n", vha->host_no)); |
1024 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.rft_data, 16)); | 1027 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.rft_data, 16)); |
1025 | rval = QLA_FUNCTION_FAILED; | 1028 | rval = QLA_FUNCTION_FAILED; |
1026 | } else { | 1029 | } else { |
1027 | DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n", | 1030 | DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n", |
1028 | ha->host_no)); | 1031 | vha->host_no)); |
1029 | } | 1032 | } |
1030 | 1033 | ||
1031 | return (rval); | 1034 | return (rval); |
@@ -1041,47 +1044,47 @@ qla2x00_sns_rft_id(scsi_qla_host_t *ha) | |||
1041 | * Returns 0 on success. | 1044 | * Returns 0 on success. |
1042 | */ | 1045 | */ |
1043 | static int | 1046 | static int |
1044 | qla2x00_sns_rnn_id(scsi_qla_host_t *ha) | 1047 | qla2x00_sns_rnn_id(scsi_qla_host_t *vha) |
1045 | { | 1048 | { |
1046 | int rval; | 1049 | int rval; |
1047 | 1050 | struct qla_hw_data *ha = vha->hw; | |
1048 | struct sns_cmd_pkt *sns_cmd; | 1051 | struct sns_cmd_pkt *sns_cmd; |
1049 | 1052 | ||
1050 | /* Issue RNN_ID. */ | 1053 | /* Issue RNN_ID. */ |
1051 | /* Prepare SNS command request. */ | 1054 | /* Prepare SNS command request. */ |
1052 | sns_cmd = qla2x00_prep_sns_cmd(ha, RNN_ID_CMD, RNN_ID_SNS_SCMD_LEN, | 1055 | sns_cmd = qla2x00_prep_sns_cmd(vha, RNN_ID_CMD, RNN_ID_SNS_SCMD_LEN, |
1053 | RNN_ID_SNS_DATA_SIZE); | 1056 | RNN_ID_SNS_DATA_SIZE); |
1054 | 1057 | ||
1055 | /* Prepare SNS command arguments -- port_id, nodename. */ | 1058 | /* Prepare SNS command arguments -- port_id, nodename. */ |
1056 | sns_cmd->p.cmd.param[0] = ha->d_id.b.al_pa; | 1059 | sns_cmd->p.cmd.param[0] = vha->d_id.b.al_pa; |
1057 | sns_cmd->p.cmd.param[1] = ha->d_id.b.area; | 1060 | sns_cmd->p.cmd.param[1] = vha->d_id.b.area; |
1058 | sns_cmd->p.cmd.param[2] = ha->d_id.b.domain; | 1061 | sns_cmd->p.cmd.param[2] = vha->d_id.b.domain; |
1059 | 1062 | ||
1060 | sns_cmd->p.cmd.param[4] = ha->node_name[7]; | 1063 | sns_cmd->p.cmd.param[4] = vha->node_name[7]; |
1061 | sns_cmd->p.cmd.param[5] = ha->node_name[6]; | 1064 | sns_cmd->p.cmd.param[5] = vha->node_name[6]; |
1062 | sns_cmd->p.cmd.param[6] = ha->node_name[5]; | 1065 | sns_cmd->p.cmd.param[6] = vha->node_name[5]; |
1063 | sns_cmd->p.cmd.param[7] = ha->node_name[4]; | 1066 | sns_cmd->p.cmd.param[7] = vha->node_name[4]; |
1064 | sns_cmd->p.cmd.param[8] = ha->node_name[3]; | 1067 | sns_cmd->p.cmd.param[8] = vha->node_name[3]; |
1065 | sns_cmd->p.cmd.param[9] = ha->node_name[2]; | 1068 | sns_cmd->p.cmd.param[9] = vha->node_name[2]; |
1066 | sns_cmd->p.cmd.param[10] = ha->node_name[1]; | 1069 | sns_cmd->p.cmd.param[10] = vha->node_name[1]; |
1067 | sns_cmd->p.cmd.param[11] = ha->node_name[0]; | 1070 | sns_cmd->p.cmd.param[11] = vha->node_name[0]; |
1068 | 1071 | ||
1069 | /* Execute SNS command. */ | 1072 | /* Execute SNS command. */ |
1070 | rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, RNN_ID_SNS_CMD_SIZE / 2, | 1073 | rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, RNN_ID_SNS_CMD_SIZE / 2, |
1071 | sizeof(struct sns_cmd_pkt)); | 1074 | sizeof(struct sns_cmd_pkt)); |
1072 | if (rval != QLA_SUCCESS) { | 1075 | if (rval != QLA_SUCCESS) { |
1073 | /*EMPTY*/ | 1076 | /*EMPTY*/ |
1074 | DEBUG2_3(printk("scsi(%ld): RNN_ID Send SNS failed (%d).\n", | 1077 | DEBUG2_3(printk("scsi(%ld): RNN_ID Send SNS failed (%d).\n", |
1075 | ha->host_no, rval)); | 1078 | vha->host_no, rval)); |
1076 | } else if (sns_cmd->p.rnn_data[8] != 0x80 || | 1079 | } else if (sns_cmd->p.rnn_data[8] != 0x80 || |
1077 | sns_cmd->p.rnn_data[9] != 0x02) { | 1080 | sns_cmd->p.rnn_data[9] != 0x02) { |
1078 | DEBUG2_3(printk("scsi(%ld): RNN_ID failed, rejected request, " | 1081 | DEBUG2_3(printk("scsi(%ld): RNN_ID failed, rejected request, " |
1079 | "rnn_rsp:\n", ha->host_no)); | 1082 | "rnn_rsp:\n", vha->host_no)); |
1080 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.rnn_data, 16)); | 1083 | DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.rnn_data, 16)); |
1081 | rval = QLA_FUNCTION_FAILED; | 1084 | rval = QLA_FUNCTION_FAILED; |
1082 | } else { | 1085 | } else { |
1083 | DEBUG2(printk("scsi(%ld): RNN_ID exiting normally.\n", | 1086 | DEBUG2(printk("scsi(%ld): RNN_ID exiting normally.\n", |
1084 | ha->host_no)); | 1087 | vha->host_no)); |
1085 | } | 1088 | } |
1086 | 1089 | ||
1087 | return (rval); | 1090 | return (rval); |
@@ -1094,25 +1097,25 @@ qla2x00_sns_rnn_id(scsi_qla_host_t *ha) | |||
1094 | * Returns 0 on success. | 1097 | * Returns 0 on success. |
1095 | */ | 1098 | */ |
1096 | static int | 1099 | static int |
1097 | qla2x00_mgmt_svr_login(scsi_qla_host_t *ha) | 1100 | qla2x00_mgmt_svr_login(scsi_qla_host_t *vha) |
1098 | { | 1101 | { |
1099 | int ret; | 1102 | int ret; |
1100 | uint16_t mb[MAILBOX_REGISTER_COUNT]; | 1103 | uint16_t mb[MAILBOX_REGISTER_COUNT]; |
1101 | 1104 | struct qla_hw_data *ha = vha->hw; | |
1102 | ret = QLA_SUCCESS; | 1105 | ret = QLA_SUCCESS; |
1103 | if (ha->flags.management_server_logged_in) | 1106 | if (vha->flags.management_server_logged_in) |
1104 | return ret; | 1107 | return ret; |
1105 | 1108 | ||
1106 | ha->isp_ops->fabric_login(ha, ha->mgmt_svr_loop_id, 0xff, 0xff, 0xfa, | 1109 | ha->isp_ops->fabric_login(vha, vha->mgmt_svr_loop_id, 0xff, 0xff, 0xfa, |
1107 | mb, BIT_1); | 1110 | mb, BIT_1); |
1108 | if (mb[0] != MBS_COMMAND_COMPLETE) { | 1111 | if (mb[0] != MBS_COMMAND_COMPLETE) { |
1109 | DEBUG2_13(printk("%s(%ld): Failed MANAGEMENT_SERVER login: " | 1112 | DEBUG2_13(printk("%s(%ld): Failed MANAGEMENT_SERVER login: " |
1110 | "loop_id=%x mb[0]=%x mb[1]=%x mb[2]=%x mb[6]=%x mb[7]=%x\n", | 1113 | "loop_id=%x mb[0]=%x mb[1]=%x mb[2]=%x mb[6]=%x mb[7]=%x\n", |
1111 | __func__, ha->host_no, ha->mgmt_svr_loop_id, mb[0], mb[1], | 1114 | __func__, vha->host_no, vha->mgmt_svr_loop_id, mb[0], mb[1], |
1112 | mb[2], mb[6], mb[7])); | 1115 | mb[2], mb[6], mb[7])); |
1113 | ret = QLA_FUNCTION_FAILED; | 1116 | ret = QLA_FUNCTION_FAILED; |
1114 | } else | 1117 | } else |
1115 | ha->flags.management_server_logged_in = 1; | 1118 | vha->flags.management_server_logged_in = 1; |
1116 | 1119 | ||
1117 | return ret; | 1120 | return ret; |
1118 | } | 1121 | } |
@@ -1126,17 +1129,17 @@ qla2x00_mgmt_svr_login(scsi_qla_host_t *ha) | |||
1126 | * Returns a pointer to the @ha's ms_iocb. | 1129 | * Returns a pointer to the @ha's ms_iocb. |
1127 | */ | 1130 | */ |
1128 | void * | 1131 | void * |
1129 | qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size, | 1132 | qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *vha, uint32_t req_size, |
1130 | uint32_t rsp_size) | 1133 | uint32_t rsp_size) |
1131 | { | 1134 | { |
1132 | ms_iocb_entry_t *ms_pkt; | 1135 | ms_iocb_entry_t *ms_pkt; |
1133 | 1136 | struct qla_hw_data *ha = vha->hw; | |
1134 | ms_pkt = ha->ms_iocb; | 1137 | ms_pkt = ha->ms_iocb; |
1135 | memset(ms_pkt, 0, sizeof(ms_iocb_entry_t)); | 1138 | memset(ms_pkt, 0, sizeof(ms_iocb_entry_t)); |
1136 | 1139 | ||
1137 | ms_pkt->entry_type = MS_IOCB_TYPE; | 1140 | ms_pkt->entry_type = MS_IOCB_TYPE; |
1138 | ms_pkt->entry_count = 1; | 1141 | ms_pkt->entry_count = 1; |
1139 | SET_TARGET_ID(ha, ms_pkt->loop_id, ha->mgmt_svr_loop_id); | 1142 | SET_TARGET_ID(ha, ms_pkt->loop_id, vha->mgmt_svr_loop_id); |
1140 | ms_pkt->control_flags = __constant_cpu_to_le16(CF_READ | CF_HEAD_TAG); | 1143 | ms_pkt->control_flags = __constant_cpu_to_le16(CF_READ | CF_HEAD_TAG); |
1141 | ms_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); | 1144 | ms_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); |
1142 | ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1); | 1145 | ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1); |
@@ -1164,17 +1167,18 @@ qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size, | |||
1164 | * Returns a pointer to the @ha's ms_iocb. | 1167 | * Returns a pointer to the @ha's ms_iocb. |
1165 | */ | 1168 | */ |
1166 | void * | 1169 | void * |
1167 | qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size, | 1170 | qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *vha, uint32_t req_size, |
1168 | uint32_t rsp_size) | 1171 | uint32_t rsp_size) |
1169 | { | 1172 | { |
1170 | struct ct_entry_24xx *ct_pkt; | 1173 | struct ct_entry_24xx *ct_pkt; |
1174 | struct qla_hw_data *ha = vha->hw; | ||
1171 | 1175 | ||
1172 | ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; | 1176 | ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; |
1173 | memset(ct_pkt, 0, sizeof(struct ct_entry_24xx)); | 1177 | memset(ct_pkt, 0, sizeof(struct ct_entry_24xx)); |
1174 | 1178 | ||
1175 | ct_pkt->entry_type = CT_IOCB_TYPE; | 1179 | ct_pkt->entry_type = CT_IOCB_TYPE; |
1176 | ct_pkt->entry_count = 1; | 1180 | ct_pkt->entry_count = 1; |
1177 | ct_pkt->nport_handle = cpu_to_le16(ha->mgmt_svr_loop_id); | 1181 | ct_pkt->nport_handle = cpu_to_le16(vha->mgmt_svr_loop_id); |
1178 | ct_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); | 1182 | ct_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); |
1179 | ct_pkt->cmd_dsd_count = __constant_cpu_to_le16(1); | 1183 | ct_pkt->cmd_dsd_count = __constant_cpu_to_le16(1); |
1180 | ct_pkt->rsp_dsd_count = __constant_cpu_to_le16(1); | 1184 | ct_pkt->rsp_dsd_count = __constant_cpu_to_le16(1); |
@@ -1188,14 +1192,15 @@ qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size, | |||
1188 | ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma)); | 1192 | ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma)); |
1189 | ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma)); | 1193 | ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma)); |
1190 | ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count; | 1194 | ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count; |
1191 | ct_pkt->vp_index = ha->vp_idx; | 1195 | ct_pkt->vp_index = vha->vp_idx; |
1192 | 1196 | ||
1193 | return ct_pkt; | 1197 | return ct_pkt; |
1194 | } | 1198 | } |
1195 | 1199 | ||
1196 | static inline ms_iocb_entry_t * | 1200 | static inline ms_iocb_entry_t * |
1197 | qla2x00_update_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size) | 1201 | qla2x00_update_ms_fdmi_iocb(scsi_qla_host_t *vha, uint32_t req_size) |
1198 | { | 1202 | { |
1203 | struct qla_hw_data *ha = vha->hw; | ||
1199 | ms_iocb_entry_t *ms_pkt = ha->ms_iocb; | 1204 | ms_iocb_entry_t *ms_pkt = ha->ms_iocb; |
1200 | struct ct_entry_24xx *ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; | 1205 | struct ct_entry_24xx *ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; |
1201 | 1206 | ||
@@ -1240,7 +1245,7 @@ qla2x00_prep_ct_fdmi_req(struct ct_sns_req *ct_req, uint16_t cmd, | |||
1240 | * Returns 0 on success. | 1245 | * Returns 0 on success. |
1241 | */ | 1246 | */ |
1242 | static int | 1247 | static int |
1243 | qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | 1248 | qla2x00_fdmi_rhba(scsi_qla_host_t *vha) |
1244 | { | 1249 | { |
1245 | int rval, alen; | 1250 | int rval, alen; |
1246 | uint32_t size, sn; | 1251 | uint32_t size, sn; |
@@ -1250,11 +1255,12 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1250 | struct ct_sns_rsp *ct_rsp; | 1255 | struct ct_sns_rsp *ct_rsp; |
1251 | uint8_t *entries; | 1256 | uint8_t *entries; |
1252 | struct ct_fdmi_hba_attr *eiter; | 1257 | struct ct_fdmi_hba_attr *eiter; |
1258 | struct qla_hw_data *ha = vha->hw; | ||
1253 | 1259 | ||
1254 | /* Issue RHBA */ | 1260 | /* Issue RHBA */ |
1255 | /* Prepare common MS IOCB */ | 1261 | /* Prepare common MS IOCB */ |
1256 | /* Request size adjusted after CT preparation */ | 1262 | /* Request size adjusted after CT preparation */ |
1257 | ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(ha, 0, RHBA_RSP_SIZE); | 1263 | ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, RHBA_RSP_SIZE); |
1258 | 1264 | ||
1259 | /* Prepare CT request */ | 1265 | /* Prepare CT request */ |
1260 | ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, RHBA_CMD, | 1266 | ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, RHBA_CMD, |
@@ -1262,9 +1268,9 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1262 | ct_rsp = &ha->ct_sns->p.rsp; | 1268 | ct_rsp = &ha->ct_sns->p.rsp; |
1263 | 1269 | ||
1264 | /* Prepare FDMI command arguments -- attribute block, attributes. */ | 1270 | /* Prepare FDMI command arguments -- attribute block, attributes. */ |
1265 | memcpy(ct_req->req.rhba.hba_identifier, ha->port_name, WWN_SIZE); | 1271 | memcpy(ct_req->req.rhba.hba_identifier, vha->port_name, WWN_SIZE); |
1266 | ct_req->req.rhba.entry_count = __constant_cpu_to_be32(1); | 1272 | ct_req->req.rhba.entry_count = __constant_cpu_to_be32(1); |
1267 | memcpy(ct_req->req.rhba.port_name, ha->port_name, WWN_SIZE); | 1273 | memcpy(ct_req->req.rhba.port_name, vha->port_name, WWN_SIZE); |
1268 | size = 2 * WWN_SIZE + 4 + 4; | 1274 | size = 2 * WWN_SIZE + 4 + 4; |
1269 | 1275 | ||
1270 | /* Attributes */ | 1276 | /* Attributes */ |
@@ -1276,11 +1282,11 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1276 | eiter = (struct ct_fdmi_hba_attr *) (entries + size); | 1282 | eiter = (struct ct_fdmi_hba_attr *) (entries + size); |
1277 | eiter->type = __constant_cpu_to_be16(FDMI_HBA_NODE_NAME); | 1283 | eiter->type = __constant_cpu_to_be16(FDMI_HBA_NODE_NAME); |
1278 | eiter->len = __constant_cpu_to_be16(4 + WWN_SIZE); | 1284 | eiter->len = __constant_cpu_to_be16(4 + WWN_SIZE); |
1279 | memcpy(eiter->a.node_name, ha->node_name, WWN_SIZE); | 1285 | memcpy(eiter->a.node_name, vha->node_name, WWN_SIZE); |
1280 | size += 4 + WWN_SIZE; | 1286 | size += 4 + WWN_SIZE; |
1281 | 1287 | ||
1282 | DEBUG13(printk("%s(%ld): NODENAME=%02x%02x%02x%02x%02x%02x%02x%02x.\n", | 1288 | DEBUG13(printk("%s(%ld): NODENAME=%02x%02x%02x%02x%02x%02x%02x%02x.\n", |
1283 | __func__, ha->host_no, | 1289 | __func__, vha->host_no, |
1284 | eiter->a.node_name[0], eiter->a.node_name[1], eiter->a.node_name[2], | 1290 | eiter->a.node_name[0], eiter->a.node_name[1], eiter->a.node_name[2], |
1285 | eiter->a.node_name[3], eiter->a.node_name[4], eiter->a.node_name[5], | 1291 | eiter->a.node_name[3], eiter->a.node_name[4], eiter->a.node_name[5], |
1286 | eiter->a.node_name[6], eiter->a.node_name[7])); | 1292 | eiter->a.node_name[6], eiter->a.node_name[7])); |
@@ -1294,7 +1300,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1294 | eiter->len = cpu_to_be16(4 + alen); | 1300 | eiter->len = cpu_to_be16(4 + alen); |
1295 | size += 4 + alen; | 1301 | size += 4 + alen; |
1296 | 1302 | ||
1297 | DEBUG13(printk("%s(%ld): MANUFACTURER=%s.\n", __func__, ha->host_no, | 1303 | DEBUG13(printk("%s(%ld): MANUFACTURER=%s.\n", __func__, vha->host_no, |
1298 | eiter->a.manufacturer)); | 1304 | eiter->a.manufacturer)); |
1299 | 1305 | ||
1300 | /* Serial number. */ | 1306 | /* Serial number. */ |
@@ -1307,7 +1313,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1307 | eiter->len = cpu_to_be16(4 + alen); | 1313 | eiter->len = cpu_to_be16(4 + alen); |
1308 | size += 4 + alen; | 1314 | size += 4 + alen; |
1309 | 1315 | ||
1310 | DEBUG13(printk("%s(%ld): SERIALNO=%s.\n", __func__, ha->host_no, | 1316 | DEBUG13(printk("%s(%ld): SERIALNO=%s.\n", __func__, vha->host_no, |
1311 | eiter->a.serial_num)); | 1317 | eiter->a.serial_num)); |
1312 | 1318 | ||
1313 | /* Model name. */ | 1319 | /* Model name. */ |
@@ -1319,7 +1325,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1319 | eiter->len = cpu_to_be16(4 + alen); | 1325 | eiter->len = cpu_to_be16(4 + alen); |
1320 | size += 4 + alen; | 1326 | size += 4 + alen; |
1321 | 1327 | ||
1322 | DEBUG13(printk("%s(%ld): MODEL_NAME=%s.\n", __func__, ha->host_no, | 1328 | DEBUG13(printk("%s(%ld): MODEL_NAME=%s.\n", __func__, vha->host_no, |
1323 | eiter->a.model)); | 1329 | eiter->a.model)); |
1324 | 1330 | ||
1325 | /* Model description. */ | 1331 | /* Model description. */ |
@@ -1332,7 +1338,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1332 | eiter->len = cpu_to_be16(4 + alen); | 1338 | eiter->len = cpu_to_be16(4 + alen); |
1333 | size += 4 + alen; | 1339 | size += 4 + alen; |
1334 | 1340 | ||
1335 | DEBUG13(printk("%s(%ld): MODEL_DESC=%s.\n", __func__, ha->host_no, | 1341 | DEBUG13(printk("%s(%ld): MODEL_DESC=%s.\n", __func__, vha->host_no, |
1336 | eiter->a.model_desc)); | 1342 | eiter->a.model_desc)); |
1337 | 1343 | ||
1338 | /* Hardware version. */ | 1344 | /* Hardware version. */ |
@@ -1344,7 +1350,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1344 | eiter->len = cpu_to_be16(4 + alen); | 1350 | eiter->len = cpu_to_be16(4 + alen); |
1345 | size += 4 + alen; | 1351 | size += 4 + alen; |
1346 | 1352 | ||
1347 | DEBUG13(printk("%s(%ld): HARDWAREVER=%s.\n", __func__, ha->host_no, | 1353 | DEBUG13(printk("%s(%ld): HARDWAREVER=%s.\n", __func__, vha->host_no, |
1348 | eiter->a.hw_version)); | 1354 | eiter->a.hw_version)); |
1349 | 1355 | ||
1350 | /* Driver version. */ | 1356 | /* Driver version. */ |
@@ -1356,7 +1362,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1356 | eiter->len = cpu_to_be16(4 + alen); | 1362 | eiter->len = cpu_to_be16(4 + alen); |
1357 | size += 4 + alen; | 1363 | size += 4 + alen; |
1358 | 1364 | ||
1359 | DEBUG13(printk("%s(%ld): DRIVERVER=%s.\n", __func__, ha->host_no, | 1365 | DEBUG13(printk("%s(%ld): DRIVERVER=%s.\n", __func__, vha->host_no, |
1360 | eiter->a.driver_version)); | 1366 | eiter->a.driver_version)); |
1361 | 1367 | ||
1362 | /* Option ROM version. */ | 1368 | /* Option ROM version. */ |
@@ -1368,27 +1374,27 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1368 | eiter->len = cpu_to_be16(4 + alen); | 1374 | eiter->len = cpu_to_be16(4 + alen); |
1369 | size += 4 + alen; | 1375 | size += 4 + alen; |
1370 | 1376 | ||
1371 | DEBUG13(printk("%s(%ld): OPTROMVER=%s.\n", __func__, ha->host_no, | 1377 | DEBUG13(printk("%s(%ld): OPTROMVER=%s.\n", __func__, vha->host_no, |
1372 | eiter->a.orom_version)); | 1378 | eiter->a.orom_version)); |
1373 | 1379 | ||
1374 | /* Firmware version */ | 1380 | /* Firmware version */ |
1375 | eiter = (struct ct_fdmi_hba_attr *) (entries + size); | 1381 | eiter = (struct ct_fdmi_hba_attr *) (entries + size); |
1376 | eiter->type = __constant_cpu_to_be16(FDMI_HBA_FIRMWARE_VERSION); | 1382 | eiter->type = __constant_cpu_to_be16(FDMI_HBA_FIRMWARE_VERSION); |
1377 | ha->isp_ops->fw_version_str(ha, eiter->a.fw_version); | 1383 | ha->isp_ops->fw_version_str(vha, eiter->a.fw_version); |
1378 | alen = strlen(eiter->a.fw_version); | 1384 | alen = strlen(eiter->a.fw_version); |
1379 | alen += (alen & 3) ? (4 - (alen & 3)) : 4; | 1385 | alen += (alen & 3) ? (4 - (alen & 3)) : 4; |
1380 | eiter->len = cpu_to_be16(4 + alen); | 1386 | eiter->len = cpu_to_be16(4 + alen); |
1381 | size += 4 + alen; | 1387 | size += 4 + alen; |
1382 | 1388 | ||
1383 | DEBUG13(printk("%s(%ld): FIRMWAREVER=%s.\n", __func__, ha->host_no, | 1389 | DEBUG13(printk("%s(%ld): FIRMWAREVER=%s.\n", __func__, vha->host_no, |
1384 | eiter->a.fw_version)); | 1390 | eiter->a.fw_version)); |
1385 | 1391 | ||
1386 | /* Update MS request size. */ | 1392 | /* Update MS request size. */ |
1387 | qla2x00_update_ms_fdmi_iocb(ha, size + 16); | 1393 | qla2x00_update_ms_fdmi_iocb(vha, size + 16); |
1388 | 1394 | ||
1389 | DEBUG13(printk("%s(%ld): RHBA identifier=" | 1395 | DEBUG13(printk("%s(%ld): RHBA identifier=" |
1390 | "%02x%02x%02x%02x%02x%02x%02x%02x size=%d.\n", __func__, | 1396 | "%02x%02x%02x%02x%02x%02x%02x%02x size=%d.\n", __func__, |
1391 | ha->host_no, ct_req->req.rhba.hba_identifier[0], | 1397 | vha->host_no, ct_req->req.rhba.hba_identifier[0], |
1392 | ct_req->req.rhba.hba_identifier[1], | 1398 | ct_req->req.rhba.hba_identifier[1], |
1393 | ct_req->req.rhba.hba_identifier[2], | 1399 | ct_req->req.rhba.hba_identifier[2], |
1394 | ct_req->req.rhba.hba_identifier[3], | 1400 | ct_req->req.rhba.hba_identifier[3], |
@@ -1399,25 +1405,25 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1399 | DEBUG13(qla2x00_dump_buffer(entries, size)); | 1405 | DEBUG13(qla2x00_dump_buffer(entries, size)); |
1400 | 1406 | ||
1401 | /* Execute MS IOCB */ | 1407 | /* Execute MS IOCB */ |
1402 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 1408 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
1403 | sizeof(ms_iocb_entry_t)); | 1409 | sizeof(ms_iocb_entry_t)); |
1404 | if (rval != QLA_SUCCESS) { | 1410 | if (rval != QLA_SUCCESS) { |
1405 | /*EMPTY*/ | 1411 | /*EMPTY*/ |
1406 | DEBUG2_3(printk("scsi(%ld): RHBA issue IOCB failed (%d).\n", | 1412 | DEBUG2_3(printk("scsi(%ld): RHBA issue IOCB failed (%d).\n", |
1407 | ha->host_no, rval)); | 1413 | vha->host_no, rval)); |
1408 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RHBA") != | 1414 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RHBA") != |
1409 | QLA_SUCCESS) { | 1415 | QLA_SUCCESS) { |
1410 | rval = QLA_FUNCTION_FAILED; | 1416 | rval = QLA_FUNCTION_FAILED; |
1411 | if (ct_rsp->header.reason_code == CT_REASON_CANNOT_PERFORM && | 1417 | if (ct_rsp->header.reason_code == CT_REASON_CANNOT_PERFORM && |
1412 | ct_rsp->header.explanation_code == | 1418 | ct_rsp->header.explanation_code == |
1413 | CT_EXPL_ALREADY_REGISTERED) { | 1419 | CT_EXPL_ALREADY_REGISTERED) { |
1414 | DEBUG2_13(printk("%s(%ld): HBA already registered.\n", | 1420 | DEBUG2_13(printk("%s(%ld): HBA already registered.\n", |
1415 | __func__, ha->host_no)); | 1421 | __func__, vha->host_no)); |
1416 | rval = QLA_ALREADY_REGISTERED; | 1422 | rval = QLA_ALREADY_REGISTERED; |
1417 | } | 1423 | } |
1418 | } else { | 1424 | } else { |
1419 | DEBUG2(printk("scsi(%ld): RHBA exiting normally.\n", | 1425 | DEBUG2(printk("scsi(%ld): RHBA exiting normally.\n", |
1420 | ha->host_no)); | 1426 | vha->host_no)); |
1421 | } | 1427 | } |
1422 | 1428 | ||
1423 | return rval; | 1429 | return rval; |
@@ -1430,17 +1436,17 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *ha) | |||
1430 | * Returns 0 on success. | 1436 | * Returns 0 on success. |
1431 | */ | 1437 | */ |
1432 | static int | 1438 | static int |
1433 | qla2x00_fdmi_dhba(scsi_qla_host_t *ha) | 1439 | qla2x00_fdmi_dhba(scsi_qla_host_t *vha) |
1434 | { | 1440 | { |
1435 | int rval; | 1441 | int rval; |
1436 | 1442 | struct qla_hw_data *ha = vha->hw; | |
1437 | ms_iocb_entry_t *ms_pkt; | 1443 | ms_iocb_entry_t *ms_pkt; |
1438 | struct ct_sns_req *ct_req; | 1444 | struct ct_sns_req *ct_req; |
1439 | struct ct_sns_rsp *ct_rsp; | 1445 | struct ct_sns_rsp *ct_rsp; |
1440 | 1446 | ||
1441 | /* Issue RPA */ | 1447 | /* Issue RPA */ |
1442 | /* Prepare common MS IOCB */ | 1448 | /* Prepare common MS IOCB */ |
1443 | ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(ha, DHBA_REQ_SIZE, | 1449 | ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, DHBA_REQ_SIZE, |
1444 | DHBA_RSP_SIZE); | 1450 | DHBA_RSP_SIZE); |
1445 | 1451 | ||
1446 | /* Prepare CT request */ | 1452 | /* Prepare CT request */ |
@@ -1449,28 +1455,28 @@ qla2x00_fdmi_dhba(scsi_qla_host_t *ha) | |||
1449 | ct_rsp = &ha->ct_sns->p.rsp; | 1455 | ct_rsp = &ha->ct_sns->p.rsp; |
1450 | 1456 | ||
1451 | /* Prepare FDMI command arguments -- portname. */ | 1457 | /* Prepare FDMI command arguments -- portname. */ |
1452 | memcpy(ct_req->req.dhba.port_name, ha->port_name, WWN_SIZE); | 1458 | memcpy(ct_req->req.dhba.port_name, vha->port_name, WWN_SIZE); |
1453 | 1459 | ||
1454 | DEBUG13(printk("%s(%ld): DHBA portname=" | 1460 | DEBUG13(printk("%s(%ld): DHBA portname=" |
1455 | "%02x%02x%02x%02x%02x%02x%02x%02x.\n", __func__, ha->host_no, | 1461 | "%02x%02x%02x%02x%02x%02x%02x%02x.\n", __func__, vha->host_no, |
1456 | ct_req->req.dhba.port_name[0], ct_req->req.dhba.port_name[1], | 1462 | ct_req->req.dhba.port_name[0], ct_req->req.dhba.port_name[1], |
1457 | ct_req->req.dhba.port_name[2], ct_req->req.dhba.port_name[3], | 1463 | ct_req->req.dhba.port_name[2], ct_req->req.dhba.port_name[3], |
1458 | ct_req->req.dhba.port_name[4], ct_req->req.dhba.port_name[5], | 1464 | ct_req->req.dhba.port_name[4], ct_req->req.dhba.port_name[5], |
1459 | ct_req->req.dhba.port_name[6], ct_req->req.dhba.port_name[7])); | 1465 | ct_req->req.dhba.port_name[6], ct_req->req.dhba.port_name[7])); |
1460 | 1466 | ||
1461 | /* Execute MS IOCB */ | 1467 | /* Execute MS IOCB */ |
1462 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 1468 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
1463 | sizeof(ms_iocb_entry_t)); | 1469 | sizeof(ms_iocb_entry_t)); |
1464 | if (rval != QLA_SUCCESS) { | 1470 | if (rval != QLA_SUCCESS) { |
1465 | /*EMPTY*/ | 1471 | /*EMPTY*/ |
1466 | DEBUG2_3(printk("scsi(%ld): DHBA issue IOCB failed (%d).\n", | 1472 | DEBUG2_3(printk("scsi(%ld): DHBA issue IOCB failed (%d).\n", |
1467 | ha->host_no, rval)); | 1473 | vha->host_no, rval)); |
1468 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "DHBA") != | 1474 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "DHBA") != |
1469 | QLA_SUCCESS) { | 1475 | QLA_SUCCESS) { |
1470 | rval = QLA_FUNCTION_FAILED; | 1476 | rval = QLA_FUNCTION_FAILED; |
1471 | } else { | 1477 | } else { |
1472 | DEBUG2(printk("scsi(%ld): DHBA exiting normally.\n", | 1478 | DEBUG2(printk("scsi(%ld): DHBA exiting normally.\n", |
1473 | ha->host_no)); | 1479 | vha->host_no)); |
1474 | } | 1480 | } |
1475 | 1481 | ||
1476 | return rval; | 1482 | return rval; |
@@ -1483,11 +1489,11 @@ qla2x00_fdmi_dhba(scsi_qla_host_t *ha) | |||
1483 | * Returns 0 on success. | 1489 | * Returns 0 on success. |
1484 | */ | 1490 | */ |
1485 | static int | 1491 | static int |
1486 | qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | 1492 | qla2x00_fdmi_rpa(scsi_qla_host_t *vha) |
1487 | { | 1493 | { |
1488 | int rval, alen; | 1494 | int rval, alen; |
1489 | uint32_t size, max_frame_size; | 1495 | uint32_t size, max_frame_size; |
1490 | 1496 | struct qla_hw_data *ha = vha->hw; | |
1491 | ms_iocb_entry_t *ms_pkt; | 1497 | ms_iocb_entry_t *ms_pkt; |
1492 | struct ct_sns_req *ct_req; | 1498 | struct ct_sns_req *ct_req; |
1493 | struct ct_sns_rsp *ct_rsp; | 1499 | struct ct_sns_rsp *ct_rsp; |
@@ -1498,7 +1504,7 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1498 | /* Issue RPA */ | 1504 | /* Issue RPA */ |
1499 | /* Prepare common MS IOCB */ | 1505 | /* Prepare common MS IOCB */ |
1500 | /* Request size adjusted after CT preparation */ | 1506 | /* Request size adjusted after CT preparation */ |
1501 | ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(ha, 0, RPA_RSP_SIZE); | 1507 | ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, RPA_RSP_SIZE); |
1502 | 1508 | ||
1503 | /* Prepare CT request */ | 1509 | /* Prepare CT request */ |
1504 | ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, RPA_CMD, | 1510 | ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, RPA_CMD, |
@@ -1506,7 +1512,7 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1506 | ct_rsp = &ha->ct_sns->p.rsp; | 1512 | ct_rsp = &ha->ct_sns->p.rsp; |
1507 | 1513 | ||
1508 | /* Prepare FDMI command arguments -- attribute block, attributes. */ | 1514 | /* Prepare FDMI command arguments -- attribute block, attributes. */ |
1509 | memcpy(ct_req->req.rpa.port_name, ha->port_name, WWN_SIZE); | 1515 | memcpy(ct_req->req.rpa.port_name, vha->port_name, WWN_SIZE); |
1510 | size = WWN_SIZE + 4; | 1516 | size = WWN_SIZE + 4; |
1511 | 1517 | ||
1512 | /* Attributes */ | 1518 | /* Attributes */ |
@@ -1521,8 +1527,9 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1521 | eiter->a.fc4_types[2] = 0x01; | 1527 | eiter->a.fc4_types[2] = 0x01; |
1522 | size += 4 + 32; | 1528 | size += 4 + 32; |
1523 | 1529 | ||
1524 | DEBUG13(printk("%s(%ld): FC4_TYPES=%02x %02x.\n", __func__, ha->host_no, | 1530 | DEBUG13(printk("%s(%ld): FC4_TYPES=%02x %02x.\n", __func__, |
1525 | eiter->a.fc4_types[2], eiter->a.fc4_types[1])); | 1531 | vha->host_no, eiter->a.fc4_types[2], |
1532 | eiter->a.fc4_types[1])); | ||
1526 | 1533 | ||
1527 | /* Supported speed. */ | 1534 | /* Supported speed. */ |
1528 | eiter = (struct ct_fdmi_port_attr *) (entries + size); | 1535 | eiter = (struct ct_fdmi_port_attr *) (entries + size); |
@@ -1544,7 +1551,7 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1544 | FDMI_PORT_SPEED_1GB); | 1551 | FDMI_PORT_SPEED_1GB); |
1545 | size += 4 + 4; | 1552 | size += 4 + 4; |
1546 | 1553 | ||
1547 | DEBUG13(printk("%s(%ld): SUPPORTED_SPEED=%x.\n", __func__, ha->host_no, | 1554 | DEBUG13(printk("%s(%ld): SUPPORTED_SPEED=%x.\n", __func__, vha->host_no, |
1548 | eiter->a.sup_speed)); | 1555 | eiter->a.sup_speed)); |
1549 | 1556 | ||
1550 | /* Current speed. */ | 1557 | /* Current speed. */ |
@@ -1575,7 +1582,7 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1575 | } | 1582 | } |
1576 | size += 4 + 4; | 1583 | size += 4 + 4; |
1577 | 1584 | ||
1578 | DEBUG13(printk("%s(%ld): CURRENT_SPEED=%x.\n", __func__, ha->host_no, | 1585 | DEBUG13(printk("%s(%ld): CURRENT_SPEED=%x.\n", __func__, vha->host_no, |
1579 | eiter->a.cur_speed)); | 1586 | eiter->a.cur_speed)); |
1580 | 1587 | ||
1581 | /* Max frame size. */ | 1588 | /* Max frame size. */ |
@@ -1588,7 +1595,7 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1588 | eiter->a.max_frame_size = cpu_to_be32(max_frame_size); | 1595 | eiter->a.max_frame_size = cpu_to_be32(max_frame_size); |
1589 | size += 4 + 4; | 1596 | size += 4 + 4; |
1590 | 1597 | ||
1591 | DEBUG13(printk("%s(%ld): MAX_FRAME_SIZE=%x.\n", __func__, ha->host_no, | 1598 | DEBUG13(printk("%s(%ld): MAX_FRAME_SIZE=%x.\n", __func__, vha->host_no, |
1592 | eiter->a.max_frame_size)); | 1599 | eiter->a.max_frame_size)); |
1593 | 1600 | ||
1594 | /* OS device name. */ | 1601 | /* OS device name. */ |
@@ -1600,32 +1607,32 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1600 | eiter->len = cpu_to_be16(4 + alen); | 1607 | eiter->len = cpu_to_be16(4 + alen); |
1601 | size += 4 + alen; | 1608 | size += 4 + alen; |
1602 | 1609 | ||
1603 | DEBUG13(printk("%s(%ld): OS_DEVICE_NAME=%s.\n", __func__, ha->host_no, | 1610 | DEBUG13(printk("%s(%ld): OS_DEVICE_NAME=%s.\n", __func__, vha->host_no, |
1604 | eiter->a.os_dev_name)); | 1611 | eiter->a.os_dev_name)); |
1605 | 1612 | ||
1606 | /* Hostname. */ | 1613 | /* Hostname. */ |
1607 | if (strlen(fc_host_system_hostname(ha->host))) { | 1614 | if (strlen(fc_host_system_hostname(vha->host))) { |
1608 | ct_req->req.rpa.attrs.count = | 1615 | ct_req->req.rpa.attrs.count = |
1609 | __constant_cpu_to_be32(FDMI_PORT_ATTR_COUNT); | 1616 | __constant_cpu_to_be32(FDMI_PORT_ATTR_COUNT); |
1610 | eiter = (struct ct_fdmi_port_attr *) (entries + size); | 1617 | eiter = (struct ct_fdmi_port_attr *) (entries + size); |
1611 | eiter->type = __constant_cpu_to_be16(FDMI_PORT_HOST_NAME); | 1618 | eiter->type = __constant_cpu_to_be16(FDMI_PORT_HOST_NAME); |
1612 | snprintf(eiter->a.host_name, sizeof(eiter->a.host_name), | 1619 | snprintf(eiter->a.host_name, sizeof(eiter->a.host_name), |
1613 | "%s", fc_host_system_hostname(ha->host)); | 1620 | "%s", fc_host_system_hostname(vha->host)); |
1614 | alen = strlen(eiter->a.host_name); | 1621 | alen = strlen(eiter->a.host_name); |
1615 | alen += (alen & 3) ? (4 - (alen & 3)) : 4; | 1622 | alen += (alen & 3) ? (4 - (alen & 3)) : 4; |
1616 | eiter->len = cpu_to_be16(4 + alen); | 1623 | eiter->len = cpu_to_be16(4 + alen); |
1617 | size += 4 + alen; | 1624 | size += 4 + alen; |
1618 | 1625 | ||
1619 | DEBUG13(printk("%s(%ld): HOSTNAME=%s.\n", __func__, | 1626 | DEBUG13(printk("%s(%ld): HOSTNAME=%s.\n", __func__, |
1620 | ha->host_no, eiter->a.host_name)); | 1627 | vha->host_no, eiter->a.host_name)); |
1621 | } | 1628 | } |
1622 | 1629 | ||
1623 | /* Update MS request size. */ | 1630 | /* Update MS request size. */ |
1624 | qla2x00_update_ms_fdmi_iocb(ha, size + 16); | 1631 | qla2x00_update_ms_fdmi_iocb(vha, size + 16); |
1625 | 1632 | ||
1626 | DEBUG13(printk("%s(%ld): RPA portname=" | 1633 | DEBUG13(printk("%s(%ld): RPA portname=" |
1627 | "%02x%02x%02x%02x%02x%02x%02x%02x size=%d.\n", __func__, | 1634 | "%02x%02x%02x%02x%02x%02x%02x%02x size=%d.\n", __func__, |
1628 | ha->host_no, ct_req->req.rpa.port_name[0], | 1635 | vha->host_no, ct_req->req.rpa.port_name[0], |
1629 | ct_req->req.rpa.port_name[1], ct_req->req.rpa.port_name[2], | 1636 | ct_req->req.rpa.port_name[1], ct_req->req.rpa.port_name[2], |
1630 | ct_req->req.rpa.port_name[3], ct_req->req.rpa.port_name[4], | 1637 | ct_req->req.rpa.port_name[3], ct_req->req.rpa.port_name[4], |
1631 | ct_req->req.rpa.port_name[5], ct_req->req.rpa.port_name[6], | 1638 | ct_req->req.rpa.port_name[5], ct_req->req.rpa.port_name[6], |
@@ -1633,18 +1640,18 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1633 | DEBUG13(qla2x00_dump_buffer(entries, size)); | 1640 | DEBUG13(qla2x00_dump_buffer(entries, size)); |
1634 | 1641 | ||
1635 | /* Execute MS IOCB */ | 1642 | /* Execute MS IOCB */ |
1636 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 1643 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
1637 | sizeof(ms_iocb_entry_t)); | 1644 | sizeof(ms_iocb_entry_t)); |
1638 | if (rval != QLA_SUCCESS) { | 1645 | if (rval != QLA_SUCCESS) { |
1639 | /*EMPTY*/ | 1646 | /*EMPTY*/ |
1640 | DEBUG2_3(printk("scsi(%ld): RPA issue IOCB failed (%d).\n", | 1647 | DEBUG2_3(printk("scsi(%ld): RPA issue IOCB failed (%d).\n", |
1641 | ha->host_no, rval)); | 1648 | vha->host_no, rval)); |
1642 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RPA") != | 1649 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RPA") != |
1643 | QLA_SUCCESS) { | 1650 | QLA_SUCCESS) { |
1644 | rval = QLA_FUNCTION_FAILED; | 1651 | rval = QLA_FUNCTION_FAILED; |
1645 | } else { | 1652 | } else { |
1646 | DEBUG2(printk("scsi(%ld): RPA exiting normally.\n", | 1653 | DEBUG2(printk("scsi(%ld): RPA exiting normally.\n", |
1647 | ha->host_no)); | 1654 | vha->host_no)); |
1648 | } | 1655 | } |
1649 | 1656 | ||
1650 | return rval; | 1657 | return rval; |
@@ -1657,34 +1664,34 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha) | |||
1657 | * Returns 0 on success. | 1664 | * Returns 0 on success. |
1658 | */ | 1665 | */ |
1659 | int | 1666 | int |
1660 | qla2x00_fdmi_register(scsi_qla_host_t *ha) | 1667 | qla2x00_fdmi_register(scsi_qla_host_t *vha) |
1661 | { | 1668 | { |
1662 | int rval; | 1669 | int rval; |
1663 | 1670 | ||
1664 | if (IS_QLA2100(ha) || IS_QLA2200(ha)) { | 1671 | if (IS_QLA2100(vha->hw) || IS_QLA2200(vha->hw)) { |
1665 | DEBUG2(printk("scsi(%ld): FDMI unsupported on " | 1672 | DEBUG2(printk("scsi(%ld): FDMI unsupported on " |
1666 | "ISP2100/ISP2200.\n", ha->host_no)); | 1673 | "ISP2100/ISP2200.\n", vha->host_no)); |
1667 | return QLA_SUCCESS; | 1674 | return QLA_SUCCESS; |
1668 | } | 1675 | } |
1669 | 1676 | ||
1670 | rval = qla2x00_mgmt_svr_login(ha); | 1677 | rval = qla2x00_mgmt_svr_login(vha); |
1671 | if (rval) | 1678 | if (rval) |
1672 | return rval; | 1679 | return rval; |
1673 | 1680 | ||
1674 | rval = qla2x00_fdmi_rhba(ha); | 1681 | rval = qla2x00_fdmi_rhba(vha); |
1675 | if (rval) { | 1682 | if (rval) { |
1676 | if (rval != QLA_ALREADY_REGISTERED) | 1683 | if (rval != QLA_ALREADY_REGISTERED) |
1677 | return rval; | 1684 | return rval; |
1678 | 1685 | ||
1679 | rval = qla2x00_fdmi_dhba(ha); | 1686 | rval = qla2x00_fdmi_dhba(vha); |
1680 | if (rval) | 1687 | if (rval) |
1681 | return rval; | 1688 | return rval; |
1682 | 1689 | ||
1683 | rval = qla2x00_fdmi_rhba(ha); | 1690 | rval = qla2x00_fdmi_rhba(vha); |
1684 | if (rval) | 1691 | if (rval) |
1685 | return rval; | 1692 | return rval; |
1686 | } | 1693 | } |
1687 | rval = qla2x00_fdmi_rpa(ha); | 1694 | rval = qla2x00_fdmi_rpa(vha); |
1688 | 1695 | ||
1689 | return rval; | 1696 | return rval; |
1690 | } | 1697 | } |
@@ -1697,11 +1704,11 @@ qla2x00_fdmi_register(scsi_qla_host_t *ha) | |||
1697 | * Returns 0 on success. | 1704 | * Returns 0 on success. |
1698 | */ | 1705 | */ |
1699 | int | 1706 | int |
1700 | qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list) | 1707 | qla2x00_gfpn_id(scsi_qla_host_t *vha, sw_info_t *list) |
1701 | { | 1708 | { |
1702 | int rval; | 1709 | int rval; |
1703 | uint16_t i; | 1710 | uint16_t i; |
1704 | 1711 | struct qla_hw_data *ha = vha->hw; | |
1705 | ms_iocb_entry_t *ms_pkt; | 1712 | ms_iocb_entry_t *ms_pkt; |
1706 | struct ct_sns_req *ct_req; | 1713 | struct ct_sns_req *ct_req; |
1707 | struct ct_sns_rsp *ct_rsp; | 1714 | struct ct_sns_rsp *ct_rsp; |
@@ -1712,7 +1719,7 @@ qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
1712 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { | 1719 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { |
1713 | /* Issue GFPN_ID */ | 1720 | /* Issue GFPN_ID */ |
1714 | /* Prepare common MS IOCB */ | 1721 | /* Prepare common MS IOCB */ |
1715 | ms_pkt = ha->isp_ops->prep_ms_iocb(ha, GFPN_ID_REQ_SIZE, | 1722 | ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GFPN_ID_REQ_SIZE, |
1716 | GFPN_ID_RSP_SIZE); | 1723 | GFPN_ID_RSP_SIZE); |
1717 | 1724 | ||
1718 | /* Prepare CT request */ | 1725 | /* Prepare CT request */ |
@@ -1726,13 +1733,13 @@ qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
1726 | ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa; | 1733 | ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa; |
1727 | 1734 | ||
1728 | /* Execute MS IOCB */ | 1735 | /* Execute MS IOCB */ |
1729 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 1736 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
1730 | sizeof(ms_iocb_entry_t)); | 1737 | sizeof(ms_iocb_entry_t)); |
1731 | if (rval != QLA_SUCCESS) { | 1738 | if (rval != QLA_SUCCESS) { |
1732 | /*EMPTY*/ | 1739 | /*EMPTY*/ |
1733 | DEBUG2_3(printk("scsi(%ld): GFPN_ID issue IOCB " | 1740 | DEBUG2_3(printk("scsi(%ld): GFPN_ID issue IOCB " |
1734 | "failed (%d).\n", ha->host_no, rval)); | 1741 | "failed (%d).\n", vha->host_no, rval)); |
1735 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, | 1742 | } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, |
1736 | "GFPN_ID") != QLA_SUCCESS) { | 1743 | "GFPN_ID") != QLA_SUCCESS) { |
1737 | rval = QLA_FUNCTION_FAILED; | 1744 | rval = QLA_FUNCTION_FAILED; |
1738 | } else { | 1745 | } else { |
@@ -1750,17 +1757,17 @@ qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
1750 | } | 1757 | } |
1751 | 1758 | ||
1752 | static inline void * | 1759 | static inline void * |
1753 | qla24xx_prep_ms_fm_iocb(scsi_qla_host_t *ha, uint32_t req_size, | 1760 | qla24xx_prep_ms_fm_iocb(scsi_qla_host_t *vha, uint32_t req_size, |
1754 | uint32_t rsp_size) | 1761 | uint32_t rsp_size) |
1755 | { | 1762 | { |
1756 | struct ct_entry_24xx *ct_pkt; | 1763 | struct ct_entry_24xx *ct_pkt; |
1757 | 1764 | struct qla_hw_data *ha = vha->hw; | |
1758 | ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; | 1765 | ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; |
1759 | memset(ct_pkt, 0, sizeof(struct ct_entry_24xx)); | 1766 | memset(ct_pkt, 0, sizeof(struct ct_entry_24xx)); |
1760 | 1767 | ||
1761 | ct_pkt->entry_type = CT_IOCB_TYPE; | 1768 | ct_pkt->entry_type = CT_IOCB_TYPE; |
1762 | ct_pkt->entry_count = 1; | 1769 | ct_pkt->entry_count = 1; |
1763 | ct_pkt->nport_handle = cpu_to_le16(ha->mgmt_svr_loop_id); | 1770 | ct_pkt->nport_handle = cpu_to_le16(vha->mgmt_svr_loop_id); |
1764 | ct_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); | 1771 | ct_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); |
1765 | ct_pkt->cmd_dsd_count = __constant_cpu_to_le16(1); | 1772 | ct_pkt->cmd_dsd_count = __constant_cpu_to_le16(1); |
1766 | ct_pkt->rsp_dsd_count = __constant_cpu_to_le16(1); | 1773 | ct_pkt->rsp_dsd_count = __constant_cpu_to_le16(1); |
@@ -1774,7 +1781,7 @@ qla24xx_prep_ms_fm_iocb(scsi_qla_host_t *ha, uint32_t req_size, | |||
1774 | ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma)); | 1781 | ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma)); |
1775 | ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma)); | 1782 | ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma)); |
1776 | ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count; | 1783 | ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count; |
1777 | ct_pkt->vp_index = ha->vp_idx; | 1784 | ct_pkt->vp_index = vha->vp_idx; |
1778 | 1785 | ||
1779 | return ct_pkt; | 1786 | return ct_pkt; |
1780 | } | 1787 | } |
@@ -1803,11 +1810,11 @@ qla24xx_prep_ct_fm_req(struct ct_sns_req *ct_req, uint16_t cmd, | |||
1803 | * Returns 0 on success. | 1810 | * Returns 0 on success. |
1804 | */ | 1811 | */ |
1805 | int | 1812 | int |
1806 | qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | 1813 | qla2x00_gpsc(scsi_qla_host_t *vha, sw_info_t *list) |
1807 | { | 1814 | { |
1808 | int rval; | 1815 | int rval; |
1809 | uint16_t i; | 1816 | uint16_t i; |
1810 | 1817 | struct qla_hw_data *ha = vha->hw; | |
1811 | ms_iocb_entry_t *ms_pkt; | 1818 | ms_iocb_entry_t *ms_pkt; |
1812 | struct ct_sns_req *ct_req; | 1819 | struct ct_sns_req *ct_req; |
1813 | struct ct_sns_rsp *ct_rsp; | 1820 | struct ct_sns_rsp *ct_rsp; |
@@ -1817,14 +1824,14 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | |||
1817 | if (!ha->flags.gpsc_supported) | 1824 | if (!ha->flags.gpsc_supported) |
1818 | return QLA_FUNCTION_FAILED; | 1825 | return QLA_FUNCTION_FAILED; |
1819 | 1826 | ||
1820 | rval = qla2x00_mgmt_svr_login(ha); | 1827 | rval = qla2x00_mgmt_svr_login(vha); |
1821 | if (rval) | 1828 | if (rval) |
1822 | return rval; | 1829 | return rval; |
1823 | 1830 | ||
1824 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { | 1831 | for (i = 0; i < MAX_FIBRE_DEVICES; i++) { |
1825 | /* Issue GFPN_ID */ | 1832 | /* Issue GFPN_ID */ |
1826 | /* Prepare common MS IOCB */ | 1833 | /* Prepare common MS IOCB */ |
1827 | ms_pkt = qla24xx_prep_ms_fm_iocb(ha, GPSC_REQ_SIZE, | 1834 | ms_pkt = qla24xx_prep_ms_fm_iocb(vha, GPSC_REQ_SIZE, |
1828 | GPSC_RSP_SIZE); | 1835 | GPSC_RSP_SIZE); |
1829 | 1836 | ||
1830 | /* Prepare CT request */ | 1837 | /* Prepare CT request */ |
@@ -1837,13 +1844,13 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | |||
1837 | WWN_SIZE); | 1844 | WWN_SIZE); |
1838 | 1845 | ||
1839 | /* Execute MS IOCB */ | 1846 | /* Execute MS IOCB */ |
1840 | rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma, | 1847 | rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, |
1841 | sizeof(ms_iocb_entry_t)); | 1848 | sizeof(ms_iocb_entry_t)); |
1842 | if (rval != QLA_SUCCESS) { | 1849 | if (rval != QLA_SUCCESS) { |
1843 | /*EMPTY*/ | 1850 | /*EMPTY*/ |
1844 | DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB " | 1851 | DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB " |
1845 | "failed (%d).\n", ha->host_no, rval)); | 1852 | "failed (%d).\n", vha->host_no, rval)); |
1846 | } else if ((rval = qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, | 1853 | } else if ((rval = qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, |
1847 | "GPSC")) != QLA_SUCCESS) { | 1854 | "GPSC")) != QLA_SUCCESS) { |
1848 | /* FM command unsupported? */ | 1855 | /* FM command unsupported? */ |
1849 | if (rval == QLA_INVALID_COMMAND && | 1856 | if (rval == QLA_INVALID_COMMAND && |
@@ -1853,7 +1860,7 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | |||
1853 | CT_REASON_COMMAND_UNSUPPORTED)) { | 1860 | CT_REASON_COMMAND_UNSUPPORTED)) { |
1854 | DEBUG2(printk("scsi(%ld): GPSC command " | 1861 | DEBUG2(printk("scsi(%ld): GPSC command " |
1855 | "unsupported, disabling query...\n", | 1862 | "unsupported, disabling query...\n", |
1856 | ha->host_no)); | 1863 | vha->host_no)); |
1857 | ha->flags.gpsc_supported = 0; | 1864 | ha->flags.gpsc_supported = 0; |
1858 | rval = QLA_FUNCTION_FAILED; | 1865 | rval = QLA_FUNCTION_FAILED; |
1859 | break; | 1866 | break; |
@@ -1878,7 +1885,7 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | |||
1878 | 1885 | ||
1879 | DEBUG2_3(printk("scsi(%ld): GPSC ext entry - " | 1886 | DEBUG2_3(printk("scsi(%ld): GPSC ext entry - " |
1880 | "fpn %02x%02x%02x%02x%02x%02x%02x%02x speeds=%04x " | 1887 | "fpn %02x%02x%02x%02x%02x%02x%02x%02x speeds=%04x " |
1881 | "speed=%04x.\n", ha->host_no, | 1888 | "speed=%04x.\n", vha->host_no, |
1882 | list[i].fabric_port_name[0], | 1889 | list[i].fabric_port_name[0], |
1883 | list[i].fabric_port_name[1], | 1890 | list[i].fabric_port_name[1], |
1884 | list[i].fabric_port_name[2], | 1891 | list[i].fabric_port_name[2], |