diff options
author | Anirban Chakraborty <anirban.chakraborty@qlogic.com> | 2008-11-06 13:40:19 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-12-29 12:24:15 -0500 |
commit | 7b867cf76fbcc8d77867cbec6f509f71dce8a98f (patch) | |
tree | ef5fcc1e21701ed1baa1b131c7c29f29cd41d5d6 /drivers/scsi/qla2xxx/qla_gs.c | |
parent | a9b589d90e3d7748dae459031c2d912cd9e83c88 (diff) |
[SCSI] qla2xxx: Refactor qla data structures
Following changes have been made to the qla2xxx FC driver in
preparation for the multi- queue and future SR IOV hardware.
1. scsi_qla_host structure has been changed to contain scsi host
specific data only.
2. A new structure, qla_hw_data is created to contain HBA specific
hardware data.
3. Request and response IO specific data strucures are created.
4. The global list of fcports for the hba is not maintained anymore,
instead a fcport list is construted on per scsi_qla_host.
Signed-of-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
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], |