Lines Matching refs:hba

35 static int		emlxs_sli4_init_extents(emlxs_hba_t *hba,
37 static uint32_t emlxs_sli4_read_status(emlxs_hba_t *hba);
39 static int emlxs_init_bootstrap_mb(emlxs_hba_t *hba);
41 static uint32_t emlxs_sli4_read_sema(emlxs_hba_t *hba);
43 static uint32_t emlxs_sli4_read_mbdb(emlxs_hba_t *hba);
45 static void emlxs_sli4_write_mbdb(emlxs_hba_t *hba, uint64_t phys,
48 static void emlxs_sli4_write_wqdb(emlxs_hba_t *hba, uint16_t qid,
51 static void emlxs_sli4_write_mqdb(emlxs_hba_t *hba, uint16_t qid,
54 static void emlxs_sli4_write_rqdb(emlxs_hba_t *hba, uint16_t qid,
57 static void emlxs_sli4_write_eqdb(emlxs_hba_t *hba, uint16_t qid,
59 static void emlxs_sli4_write_cqdb(emlxs_hba_t *hba, uint16_t qid,
62 static int emlxs_sli4_create_queues(emlxs_hba_t *hba,
64 static int emlxs_sli4_post_hdr_tmplates(emlxs_hba_t *hba,
66 static int emlxs_sli4_post_sgl_pages(emlxs_hba_t *hba,
69 static int emlxs_sli4_read_eq(emlxs_hba_t *hba, EQ_DESC_t *eq);
71 static int emlxs_sli4_map_hdw(emlxs_hba_t *hba);
73 static void emlxs_sli4_unmap_hdw(emlxs_hba_t *hba);
75 static int32_t emlxs_sli4_online(emlxs_hba_t *hba);
77 static void emlxs_sli4_offline(emlxs_hba_t *hba,
80 static uint32_t emlxs_sli4_hba_reset(emlxs_hba_t *hba, uint32_t restart,
82 static void emlxs_sli4_hba_kill(emlxs_hba_t *hba);
84 static uint32_t emlxs_sli4_hba_init(emlxs_hba_t *hba);
89 static void emlxs_sli4_issue_iocb_cmd(emlxs_hba_t *hba,
91 static uint32_t emlxs_sli4_issue_mbox_cmd(emlxs_hba_t *hba,
93 static uint32_t emlxs_sli4_issue_mbox_cmd4quiesce(emlxs_hba_t *hba,
110 static void emlxs_sli4_poll_intr(emlxs_hba_t *hba);
117 static void emlxs_sli4_resource_free(emlxs_hba_t *hba);
119 static int emlxs_sli4_resource_alloc(emlxs_hba_t *hba);
120 extern void emlxs_sli4_zero_queue_stat(emlxs_hba_t *hba);
125 static void emlxs_sli4_enable_intr(emlxs_hba_t *hba);
127 static void emlxs_sli4_disable_intr(emlxs_hba_t *hba, uint32_t att);
129 static void emlxs_sli4_timer(emlxs_hba_t *hba);
131 static void emlxs_sli4_timer_check_mbox(emlxs_hba_t *hba);
133 static void emlxs_sli4_gpio_timer_start(emlxs_hba_t *hba);
135 static void emlxs_sli4_gpio_timer_stop(emlxs_hba_t *hba);
139 static void emlxs_sli4_check_gpio(emlxs_hba_t *hba);
141 static uint32_t emlxs_sli4_fix_gpio(emlxs_hba_t *hba,
144 static uint32_t emlxs_sli4_fix_gpio_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq);
146 static void emlxs_sli4_poll_erratt(emlxs_hba_t *hba);
161 static void emlxs_sli4_handle_fc_link_att(emlxs_hba_t *hba,
163 static void emlxs_sli4_handle_fcoe_link_event(emlxs_hba_t *hba,
167 static uint16_t emlxs_sli4_rqid_to_index(emlxs_hba_t *hba,
169 static uint16_t emlxs_sli4_wqid_to_index(emlxs_hba_t *hba,
171 static uint16_t emlxs_sli4_cqid_to_index(emlxs_hba_t *hba,
207 emlxs_sli4_set_default_params(emlxs_hba_t *hba) in emlxs_sli4_set_default_params() argument
211 bzero((char *)&hba->sli.sli4.param, sizeof (sli_params_t)); in emlxs_sli4_set_default_params()
213 hba->sli.sli4.param.ProtocolType = 0x3; /* FC/FCoE */ in emlxs_sli4_set_default_params()
215 hba->sli.sli4.param.SliHint2 = 0; in emlxs_sli4_set_default_params()
216 hba->sli.sli4.param.SliHint1 = 0; in emlxs_sli4_set_default_params()
217 hba->sli.sli4.param.IfType = 0; in emlxs_sli4_set_default_params()
218 hba->sli.sli4.param.SliFamily = 0; in emlxs_sli4_set_default_params()
219 hba->sli.sli4.param.Revision = 0x4; /* SLI4 */ in emlxs_sli4_set_default_params()
220 hba->sli.sli4.param.FT = 0; in emlxs_sli4_set_default_params()
222 hba->sli.sli4.param.EqeCntMethod = 0x1; /* Bit pattern */ in emlxs_sli4_set_default_params()
223 hba->sli.sli4.param.EqPageSize = 0x1; /* 4096 */ in emlxs_sli4_set_default_params()
224 hba->sli.sli4.param.EqeSize = 0x1; /* 4 byte */ in emlxs_sli4_set_default_params()
225 hba->sli.sli4.param.EqPageCnt = 8; in emlxs_sli4_set_default_params()
226 hba->sli.sli4.param.EqeCntMask = 0x1F; /* 256-4096 elements */ in emlxs_sli4_set_default_params()
228 hba->sli.sli4.param.CqeCntMethod = 0x1; /* Bit pattern */ in emlxs_sli4_set_default_params()
229 hba->sli.sli4.param.CqPageSize = 0x1; /* 4096 */ in emlxs_sli4_set_default_params()
230 hba->sli.sli4.param.CQV = 0; in emlxs_sli4_set_default_params()
231 hba->sli.sli4.param.CqeSize = 0x3; /* 16 byte */ in emlxs_sli4_set_default_params()
232 hba->sli.sli4.param.CqPageCnt = 4; in emlxs_sli4_set_default_params()
233 hba->sli.sli4.param.CqeCntMask = 0x70; /* 256-1024 elements */ in emlxs_sli4_set_default_params()
235 hba->sli.sli4.param.MqeCntMethod = 0x1; /* Bit pattern */ in emlxs_sli4_set_default_params()
236 hba->sli.sli4.param.MqPageSize = 0x1; /* 4096 */ in emlxs_sli4_set_default_params()
237 hba->sli.sli4.param.MQV = 0; in emlxs_sli4_set_default_params()
238 hba->sli.sli4.param.MqPageCnt = 8; in emlxs_sli4_set_default_params()
239 hba->sli.sli4.param.MqeCntMask = 0x0F; /* 16-128 elements */ in emlxs_sli4_set_default_params()
241 hba->sli.sli4.param.WqeCntMethod = 0; /* Page Count */ in emlxs_sli4_set_default_params()
242 hba->sli.sli4.param.WqPageSize = 0x1; /* 4096 */ in emlxs_sli4_set_default_params()
243 hba->sli.sli4.param.WQV = 0; in emlxs_sli4_set_default_params()
244 hba->sli.sli4.param.WqeSize = 0x5; /* 64 byte */ in emlxs_sli4_set_default_params()
245 hba->sli.sli4.param.WqPageCnt = 4; in emlxs_sli4_set_default_params()
246 hba->sli.sli4.param.WqeCntMask = 0x10; /* 256 elements */ in emlxs_sli4_set_default_params()
248 hba->sli.sli4.param.RqeCntMethod = 0; /* Page Count */ in emlxs_sli4_set_default_params()
249 hba->sli.sli4.param.RqPageSize = 0x1; /* 4096 */ in emlxs_sli4_set_default_params()
250 hba->sli.sli4.param.RQV = 0; in emlxs_sli4_set_default_params()
251 hba->sli.sli4.param.RqeSize = 0x2; /* 8 byte */ in emlxs_sli4_set_default_params()
252 hba->sli.sli4.param.RqPageCnt = 8; in emlxs_sli4_set_default_params()
253 hba->sli.sli4.param.RqDbWin = 1; in emlxs_sli4_set_default_params()
254 hba->sli.sli4.param.RqeCntMask = 0x100; /* 4096 elements */ in emlxs_sli4_set_default_params()
256 hba->sli.sli4.param.Loopback = 0xf; /* unsupported */ in emlxs_sli4_set_default_params()
257 hba->sli.sli4.param.PHWQ = 0; in emlxs_sli4_set_default_params()
258 hba->sli.sli4.param.PHON = 0; in emlxs_sli4_set_default_params()
259 hba->sli.sli4.param.TRIR = 0; in emlxs_sli4_set_default_params()
260 hba->sli.sli4.param.TRTY = 0; in emlxs_sli4_set_default_params()
261 hba->sli.sli4.param.TCCA = 0; in emlxs_sli4_set_default_params()
262 hba->sli.sli4.param.MWQE = 0; in emlxs_sli4_set_default_params()
263 hba->sli.sli4.param.ASSI = 0; in emlxs_sli4_set_default_params()
264 hba->sli.sli4.param.TERP = 0; in emlxs_sli4_set_default_params()
265 hba->sli.sli4.param.TGT = 0; in emlxs_sli4_set_default_params()
266 hba->sli.sli4.param.AREG = 0; in emlxs_sli4_set_default_params()
267 hba->sli.sli4.param.FBRR = 0; in emlxs_sli4_set_default_params()
268 hba->sli.sli4.param.SGLR = 1; in emlxs_sli4_set_default_params()
269 hba->sli.sli4.param.HDRR = 1; in emlxs_sli4_set_default_params()
270 hba->sli.sli4.param.EXT = 0; in emlxs_sli4_set_default_params()
271 hba->sli.sli4.param.FCOE = 1; in emlxs_sli4_set_default_params()
273 hba->sli.sli4.param.SgeLength = (64 * 1024); in emlxs_sli4_set_default_params()
274 hba->sli.sli4.param.SglAlign = 0x7 /* 4096 */; in emlxs_sli4_set_default_params()
275 hba->sli.sli4.param.SglPageSize = 0x1; /* 4096 */ in emlxs_sli4_set_default_params()
276 hba->sli.sli4.param.SglPageCnt = 2; in emlxs_sli4_set_default_params()
278 hba->sli.sli4.param.MinRqSize = 128; in emlxs_sli4_set_default_params()
279 hba->sli.sli4.param.MaxRqSize = 2048; in emlxs_sli4_set_default_params()
281 hba->sli.sli4.param.RPIMax = 0x3ff; in emlxs_sli4_set_default_params()
282 hba->sli.sli4.param.XRIMax = 0x3ff; in emlxs_sli4_set_default_params()
283 hba->sli.sli4.param.VFIMax = 0xff; in emlxs_sli4_set_default_params()
284 hba->sli.sli4.param.VPIMax = 0xff; in emlxs_sli4_set_default_params()
298 emlxs_sli4_online(emlxs_hba_t *hba) in emlxs_sli4_online() argument
324 hba->sli_mode = sli_mode; in emlxs_sli4_online()
330 (hba->fw_flag & FW_UPDATE_KERNEL)) { in emlxs_sli4_online()
334 hba->mbox_queue_flag = 0; in emlxs_sli4_online()
335 hba->fc_edtov = FF_DEF_EDTOV; in emlxs_sli4_online()
336 hba->fc_ratov = FF_DEF_RATOV; in emlxs_sli4_online()
337 hba->fc_altov = FF_DEF_ALTOV; in emlxs_sli4_online()
338 hba->fc_arbtov = FF_DEF_ARBTOV; in emlxs_sli4_online()
347 hba->chan_count = hba->intr_count * cfg[CFG_NUM_WQ].current; in emlxs_sli4_online()
348 if (hba->chan_count > MAX_CHANNEL) { in emlxs_sli4_online()
353 hba->chan_count = hba->intr_count * cfg[CFG_NUM_WQ].current; in emlxs_sli4_online()
355 hba->channel_fcp = 0; /* First channel */ in emlxs_sli4_online()
358 hba->channel_ip = hba->chan_count - 1; in emlxs_sli4_online()
359 hba->channel_els = hba->chan_count - 1; in emlxs_sli4_online()
360 hba->channel_ct = hba->chan_count - 1; in emlxs_sli4_online()
362 hba->fc_iotag = 1; in emlxs_sli4_online()
363 hba->io_count = 0; in emlxs_sli4_online()
364 hba->channel_tx_count = 0; in emlxs_sli4_online()
367 if (hba->model_info.flags & EMLXS_GPIO_LEDS) { in emlxs_sli4_online()
369 if (hba->pci_function_number) { in emlxs_sli4_online()
370 hba->gpio_pin[EMLXS_GPIO_PIN_LO] = 27; in emlxs_sli4_online()
371 hba->gpio_pin[EMLXS_GPIO_PIN_HI] = 28; in emlxs_sli4_online()
372 hba->gpio_pin[EMLXS_GPIO_PIN_ACT] = 29; in emlxs_sli4_online()
373 hba->gpio_pin[EMLXS_GPIO_PIN_LASER] = 8; in emlxs_sli4_online()
375 hba->gpio_pin[EMLXS_GPIO_PIN_LO] = 13; in emlxs_sli4_online()
376 hba->gpio_pin[EMLXS_GPIO_PIN_HI] = 25; in emlxs_sli4_online()
377 hba->gpio_pin[EMLXS_GPIO_PIN_ACT] = 26; in emlxs_sli4_online()
378 hba->gpio_pin[EMLXS_GPIO_PIN_LASER] = 12; in emlxs_sli4_online()
383 bzero(&hba->sli.sli4.dump_region, sizeof (MBUF_INFO)); in emlxs_sli4_online()
384 hba->sli.sli4.dump_region.size = EMLXS_DUMP_REGION_SIZE; in emlxs_sli4_online()
385 hba->sli.sli4.dump_region.flags = FC_MBUF_DMA | FC_MBUF_SNGLSG; in emlxs_sli4_online()
386 hba->sli.sli4.dump_region.align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_online()
388 (void) emlxs_mem_alloc(hba, &hba->sli.sli4.dump_region); in emlxs_sli4_online()
390 if (hba->sli.sli4.dump_region.virt == NULL) { in emlxs_sli4_online()
406 if (emlxs_sli4_hba_init(hba)) { in emlxs_sli4_online()
416 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_online()
418 if ((emlxs_fm_check_acc_handle(hba, hba->pci_acc_handle) in emlxs_sli4_online()
420 (emlxs_fm_check_acc_handle(hba, in emlxs_sli4_online()
421 hba->sli.sli4.bar0_acc_handle) != DDI_FM_OK) || in emlxs_sli4_online()
422 (emlxs_fm_check_acc_handle(hba, in emlxs_sli4_online()
423 hba->sli.sli4.bar1_acc_handle) != DDI_FM_OK)) { in emlxs_sli4_online()
432 if ((emlxs_fm_check_acc_handle(hba, hba->pci_acc_handle) in emlxs_sli4_online()
434 (emlxs_fm_check_acc_handle(hba, in emlxs_sli4_online()
435 hba->sli.sli4.bar0_acc_handle) != DDI_FM_OK)) { in emlxs_sli4_online()
444 if ((emlxs_fm_check_acc_handle(hba, in emlxs_sli4_online()
445 hba->pci_acc_handle) != DDI_FM_OK) || in emlxs_sli4_online()
446 (emlxs_fm_check_acc_handle(hba, in emlxs_sli4_online()
447 hba->sli.sli4.bar1_acc_handle) != DDI_FM_OK) || in emlxs_sli4_online()
448 (emlxs_fm_check_acc_handle(hba, in emlxs_sli4_online()
449 hba->sli.sli4.bar2_acc_handle) != DDI_FM_OK)) { in emlxs_sli4_online()
483 EMLXS_STATE_CHANGE(hba, FC_INIT_REV); in emlxs_sli4_online()
485 emlxs_mb_get_sli4_params(hba, mbq); in emlxs_sli4_online()
486 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_online()
492 emlxs_sli4_set_default_params(hba); in emlxs_sli4_online()
497 (char *)&hba->sli.sli4.param, sizeof (sli_params_t)); in emlxs_sli4_online()
500 (uint32_t *)&hba->sli.sli4.param, in emlxs_sli4_online()
507 emlxs_mb_get_port_name(hba, mbq); in emlxs_sli4_online()
508 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_online()
513 bzero(hba->sli.sli4.port_name, in emlxs_sli4_online()
514 sizeof (hba->sli.sli4.port_name)); in emlxs_sli4_online()
518 (char *)&hba->sli.sli4.port_name, in emlxs_sli4_online()
519 sizeof (hba->sli.sli4.port_name)); in emlxs_sli4_online()
525 emlxs_mb_read_rev(hba, mbq, 0); in emlxs_sli4_online()
526 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_online()
548 hba->flag &= ~FC_FIP_SUPPORTED; in emlxs_sli4_online()
552 hba->flag |= FC_FIP_SUPPORTED; in emlxs_sli4_online()
566 hba->sli.sli4.flag |= EMLXS_SLI4_FCOE_MODE; in emlxs_sli4_online()
568 hba->sli.sli4.flag &= ~EMLXS_SLI4_FCOE_MODE; in emlxs_sli4_online()
590 if ((hba->model_info.chip & EMLXS_LANCER_CHIPS) != 0) { in emlxs_sli4_online()
600 if (hba->model_info.chip == EMLXS_BE2_CHIP) { in emlxs_sli4_online()
603 } else if (hba->model_info.chip == EMLXS_BE3_CHIP) { in emlxs_sli4_online()
606 } else if (hba->model_info.chip == EMLXS_LANCER_CHIP) { in emlxs_sli4_online()
609 } else if (hba->model_info.chip == EMLXS_LANCERG6_CHIP) { in emlxs_sli4_online()
612 } else if (hba->model_info.chip == EMLXS_PRISMG7_CHIP) { in emlxs_sli4_online()
634 emlxs_mb_dump_vpd(hba, mbq, 0); in emlxs_sli4_online()
635 vpd_data = hba->sli.sli4.dump_region.virt; in emlxs_sli4_online()
637 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_online()
648 EMLXS_MPDATA_SYNC(hba->sli.sli4.dump_region.dma_handle, in emlxs_sli4_online()
652 if (hba->sli.sli4.dump_region.dma_handle) { in emlxs_sli4_online()
653 if (emlxs_fm_check_dma_handle(hba, in emlxs_sli4_online()
654 hba->sli.sli4.dump_region.dma_handle) in emlxs_sli4_online()
659 hba->sli.sli4.dump_region. in emlxs_sli4_online()
671 (void) emlxs_parse_vpd(hba, (uint8_t *)vpd_data, in emlxs_sli4_online()
687 (strcmp(&vpd->model[0], hba->model_info.model) != 0)) { in emlxs_sli4_online()
695 &hba->model_info, in emlxs_sli4_online()
704 (strcmp(&vpd->part_num[0], hba->model_info.model) != 0)) { in emlxs_sli4_online()
712 &hba->model_info, in emlxs_sli4_online()
720 if (hba->model_info.chip & EMLXS_BE_CHIPS) { in emlxs_sli4_online()
721 ssvid = ddi_get16(hba->pci_acc_handle, in emlxs_sli4_online()
722 (uint16_t *)(hba->pci_addr + PCI_SSVID_REGISTER)); in emlxs_sli4_online()
738 (void) strncpy(hba->model_info.model_desc, in emlxs_sli4_online()
740 (sizeof (hba->model_info.model_desc)-1)); in emlxs_sli4_online()
745 (void) strncpy(hba->model_info.model, vpd->model, in emlxs_sli4_online()
746 (sizeof (hba->model_info.model)-1)); in emlxs_sli4_online()
751 emlxs_parse_prog_types(hba, vpd->prog_types); in emlxs_sli4_online()
759 if (hba->model_info.flags & EMLXS_NOT_SUPPORTED) { in emlxs_sli4_online()
763 "Model:%s", hba->model_info.id, hba->model_info.vendor_id, in emlxs_sli4_online()
764 hba->model_info.device_id, hba->model_info.ssdid, in emlxs_sli4_online()
765 hba->model_info.model); in emlxs_sli4_online()
775 emlxs_get_fcode_version(hba); in emlxs_sli4_online()
792 hba->fw_flag = 0; in emlxs_sli4_online()
793 hba->fw_timer = 0; in emlxs_sli4_online()
796 (hba->model_info.flags & EMLXS_ORACLE_BRANDED) && in emlxs_sli4_online()
797 hba->model_info.fwid) || in emlxs_sli4_online()
798 ((fw_check & 0x2) && hba->model_info.fwid)) { in emlxs_sli4_online()
803 if (emlxs_fw_table[i].id == hba->model_info.fwid) { in emlxs_sli4_online()
815 if (hba->model_info.chip & EMLXS_BE_CHIPS) { in emlxs_sli4_online()
816 (void) emlxs_be_read_fw_version(hba, &hba_fw); in emlxs_sli4_online()
830 hba->fw_flag |= FW_UPDATE_NEEDED; in emlxs_sli4_online()
842 hba->model_info.id, hba->model_info.fwid); in emlxs_sli4_online()
851 emlxs_fw_load(hba, fw); in emlxs_sli4_online()
857 rc = emlxs_fw_download(hba, in emlxs_sli4_online()
864 hba->fw_flag |= in emlxs_sli4_online()
872 emlxs_fw_unload(hba, fw); in emlxs_sli4_online()
880 hba->fw_flag |= FW_UPDATE_NEEDED; in emlxs_sli4_online()
896 hba->model_info.id, hba->model_info.fwid); in emlxs_sli4_online()
903 emlxs_mb_dump_fcoe(hba, mbq, 0); in emlxs_sli4_online()
905 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_online()
914 (void) emlxs_parse_fcoe(hba, in emlxs_sli4_online()
915 (uint8_t *)hba->sli.sli4.dump_region.virt, in emlxs_sli4_online()
936 if (hba->sli.sli4.param.PHON) { in emlxs_sli4_online()
941 emlxs_mb_request_features(hba, mbq, status); in emlxs_sli4_online()
943 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_online()
979 if ((hba->pm_state == EMLXS_PM_IN_ATTACH) && in emlxs_sli4_online()
1009 if ((hba->pm_state == EMLXS_PM_IN_ATTACH) && in emlxs_sli4_online()
1030 hba->flag |= FC_NPIV_ENABLED; in emlxs_sli4_online()
1034 hba->sli.sli4.flag |= EMLXS_SLI4_PHON; in emlxs_sli4_online()
1035 if (hba->sli.sli4.param.PHWQ) { in emlxs_sli4_online()
1036 hba->sli.sli4.flag |= EMLXS_SLI4_PHWQ; in emlxs_sli4_online()
1043 emlxs_mb_read_config(hba, mbq); in emlxs_sli4_online()
1044 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_online()
1055 hba->sli.sli4.XRICount = mb->un.varRdConfig4.XRICount; in emlxs_sli4_online()
1056 hba->sli.sli4.XRIExtCount = 1; in emlxs_sli4_online()
1057 hba->sli.sli4.XRIExtSize = hba->sli.sli4.XRICount; in emlxs_sli4_online()
1058 hba->sli.sli4.XRIBase[0] = mb->un.varRdConfig4.XRIBase; in emlxs_sli4_online()
1060 hba->sli.sli4.RPICount = mb->un.varRdConfig4.RPICount; in emlxs_sli4_online()
1061 hba->sli.sli4.RPIExtCount = 1; in emlxs_sli4_online()
1062 hba->sli.sli4.RPIExtSize = hba->sli.sli4.RPICount; in emlxs_sli4_online()
1063 hba->sli.sli4.RPIBase[0] = mb->un.varRdConfig4.RPIBase; in emlxs_sli4_online()
1065 hba->sli.sli4.VPICount = mb->un.varRdConfig4.VPICount; in emlxs_sli4_online()
1066 hba->sli.sli4.VPIExtCount = 1; in emlxs_sli4_online()
1067 hba->sli.sli4.VPIExtSize = hba->sli.sli4.VPICount; in emlxs_sli4_online()
1068 hba->sli.sli4.VPIBase[0] = mb->un.varRdConfig4.VPIBase; in emlxs_sli4_online()
1070 hba->sli.sli4.VFICount = mb->un.varRdConfig4.VFICount; in emlxs_sli4_online()
1071 hba->sli.sli4.VFIExtCount = 1; in emlxs_sli4_online()
1072 hba->sli.sli4.VFIExtSize = hba->sli.sli4.VFICount; in emlxs_sli4_online()
1073 hba->sli.sli4.VFIBase[0] = mb->un.varRdConfig4.VFIBase; in emlxs_sli4_online()
1075 hba->sli.sli4.FCFICount = mb->un.varRdConfig4.FCFICount; in emlxs_sli4_online()
1079 hba->sli.sli4.XRICount, in emlxs_sli4_online()
1080 hba->sli.sli4.RPICount, in emlxs_sli4_online()
1081 hba->sli.sli4.VPICount, in emlxs_sli4_online()
1082 hba->sli.sli4.VFICount, in emlxs_sli4_online()
1083 hba->sli.sli4.FCFICount); in emlxs_sli4_online()
1085 if ((hba->sli.sli4.XRICount == 0) || in emlxs_sli4_online()
1086 (hba->sli.sli4.RPICount == 0) || in emlxs_sli4_online()
1087 (hba->sli.sli4.VPICount == 0) || in emlxs_sli4_online()
1088 (hba->sli.sli4.VFICount == 0) || in emlxs_sli4_online()
1089 (hba->sli.sli4.FCFICount == 0)) { in emlxs_sli4_online()
1093 hba->sli.sli4.XRICount, in emlxs_sli4_online()
1094 hba->sli.sli4.RPICount, in emlxs_sli4_online()
1095 hba->sli.sli4.VPICount, in emlxs_sli4_online()
1096 hba->sli.sli4.VFICount, in emlxs_sli4_online()
1097 hba->sli.sli4.FCFICount); in emlxs_sli4_online()
1104 if (emlxs_sli4_init_extents(hba, mbq)) { in emlxs_sli4_online()
1115 hba->sli.sli4.port_name[0], in emlxs_sli4_online()
1116 hba->sli.sli4.port_name[1], in emlxs_sli4_online()
1117 hba->sli.sli4.port_name[2], in emlxs_sli4_online()
1118 hba->sli.sli4.port_name[3]); in emlxs_sli4_online()
1127 hba->sli.sli4.link_number = mb->un.varRdConfig4.link_number; in emlxs_sli4_online()
1129 hba->sli.sli4.link_number = (uint32_t)-1; in emlxs_sli4_online()
1132 if (hba->sli.sli4.VPICount) { in emlxs_sli4_online()
1133 hba->vpi_max = min(hba->sli.sli4.VPICount, MAX_VPORTS) - 1; in emlxs_sli4_online()
1138 hba->max_nodes = in emlxs_sli4_online()
1140 hba->sli.sli4.RPICount); in emlxs_sli4_online()
1142 hba->max_nodes = hba->sli.sli4.RPICount; in emlxs_sli4_online()
1146 hba->io_throttle = hba->sli.sli4.XRICount - IO_THROTTLE_RESERVE; in emlxs_sli4_online()
1150 hba->max_iotag = hba->sli.sli4.XRICount + 1; in emlxs_sli4_online()
1153 hba->max_iotag = min(hba->max_iotag, in emlxs_sli4_online()
1158 hba->fc_oor_iotag = hba->max_iotag; in emlxs_sli4_online()
1162 emlxs_process_link_speed(hba); in emlxs_sli4_online()
1167 if (emlxs_mem_alloc_buffer(hba) == 0) { in emlxs_sli4_online()
1175 if (emlxs_sli4_resource_alloc(hba)) { in emlxs_sli4_online()
1182 emlxs_data_dump(port, "XRIp", (uint32_t *)hba->sli.sli4.XRIp, 18, 0); in emlxs_sli4_online()
1183 emlxs_sli4_zero_queue_stat(hba); in emlxs_sli4_online()
1186 if ((cfg[CFG_NPIV_ENABLE].current) && (hba->flag & FC_NPIV_ENABLED)) { in emlxs_sli4_online()
1187 hba->fca_tran->fca_num_npivports = hba->vpi_max; in emlxs_sli4_online()
1194 if (emlxs_sli4_post_sgl_pages(hba, mbq)) { in emlxs_sli4_online()
1205 if (emlxs_sli4_post_hdr_tmplates(hba, mbq)) { in emlxs_sli4_online()
1218 if (EMLXS_INTR_ADD(hba) != DDI_SUCCESS) { in emlxs_sli4_online()
1230 if (emlxs_sli4_create_queues(hba, mbq)) { in emlxs_sli4_online()
1238 EMLXS_STATE_CHANGE(hba, FC_INIT_CFGPORT); in emlxs_sli4_online()
1241 emlxs_decode_firmware_rev(hba, vpd); in emlxs_sli4_online()
1244 EMLXS_STATE_CHANGE(hba, FC_INIT_INITLINK); in emlxs_sli4_online()
1250 emlxs_mb_config_link(hba, mbq); in emlxs_sli4_online()
1251 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_online()
1269 (void) emlxs_mb_read_sparam(hba, mbq); in emlxs_sli4_online()
1271 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_online()
1281 emlxs_mem_put(hba, MEM_BUF, (void *)mp); in emlxs_sli4_online()
1286 outptr = (uint8_t *)&hba->wwpn.IEEE[0]; in emlxs_sli4_online()
1327 p_dip = ddi_get_parent(hba->dip); in emlxs_sli4_online()
1331 while (c_dip && (hba->dip != c_dip)) { in emlxs_sli4_online()
1348 if (hba->model_info.channels == EMLXS_MULTI_CHANNEL) { in emlxs_sli4_online()
1358 hba->model_info.model_desc, vpd->port_index); in emlxs_sli4_online()
1363 (void) strncpy(vpd->manufacturer, hba->model_info.manufacturer, in emlxs_sli4_online()
1368 (void) strncpy(vpd->part_num, hba->model_info.model, in emlxs_sli4_online()
1375 hba->model_info.model_desc, vpd->port_index); in emlxs_sli4_online()
1379 (void) strncpy(vpd->model, hba->model_info.model, in emlxs_sli4_online()
1384 emlxs_build_prog_types(hba, vpd); in emlxs_sli4_online()
1388 (void) snprintf(hba->snn, (sizeof (hba->snn)-1), in emlxs_sli4_online()
1390 hba->model_info.manufacturer, hba->model_info.model, in emlxs_sli4_online()
1391 hba->vpd.fw_version, emlxs_version, in emlxs_sli4_online()
1394 (void) snprintf(hba->spn, (sizeof (hba->spn)-1), in emlxs_sli4_online()
1396 hba->model_info.manufacturer, in emlxs_sli4_online()
1397 hba->wwpn.nameType, hba->wwpn.IEEEextMsn, hba->wwpn.IEEEextLsb, in emlxs_sli4_online()
1398 hba->wwpn.IEEE[0], hba->wwpn.IEEE[1], hba->wwpn.IEEE[2], in emlxs_sli4_online()
1399 hba->wwpn.IEEE[3], hba->wwpn.IEEE[4], hba->wwpn.IEEE[5]); in emlxs_sli4_online()
1402 EMLXS_STATE_CHANGE(hba, FC_LINK_DOWN); in emlxs_sli4_online()
1403 emlxs_sli4_enable_intr(hba); in emlxs_sli4_online()
1407 EMLXS_STATE_CHANGE(hba, FC_LINK_DOWN_PERSIST); in emlxs_sli4_online()
1424 emlxs_timer_start(hba); in emlxs_sli4_online()
1430 emlxs_mb_init_link(hba, mbq, in emlxs_sli4_online()
1433 rval = emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0); in emlxs_sli4_online()
1446 while (i && (hba->state < FC_LINK_UP)) { in emlxs_sli4_online()
1448 if (hba->state == FC_ERROR) { in emlxs_sli4_online()
1477 if (hba->model_info.flags & EMLXS_GPIO_LEDS) in emlxs_sli4_online()
1478 emlxs_sli4_gpio_timer_start(hba); in emlxs_sli4_online()
1483 emlxs_timer_stop(hba); in emlxs_sli4_online()
1486 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_online()
1489 emlxs_mem_put(hba, MEM_BUF, (void *)mp); in emlxs_sli4_online()
1494 if (hba->intr_flags & EMLXS_MSI_ADDED) { in emlxs_sli4_online()
1495 (void) EMLXS_INTR_REMOVE(hba); in emlxs_sli4_online()
1498 emlxs_sli4_resource_free(hba); in emlxs_sli4_online()
1501 (void) emlxs_mem_free_buffer(hba); in emlxs_sli4_online()
1510 if (hba->sli.sli4.dump_region.virt) { in emlxs_sli4_online()
1512 (void) emlxs_mem_free(hba, &hba->sli.sli4.dump_region); in emlxs_sli4_online()
1526 emlxs_sli4_offline(emlxs_hba_t *hba, uint32_t reset_requested) in emlxs_sli4_offline() argument
1530 if (hba->model_info.flags & EMLXS_GPIO_LEDS) in emlxs_sli4_offline()
1531 emlxs_sli4_gpio_timer_stop(hba); in emlxs_sli4_offline()
1534 if (hba->flag & FC_INTERLOCKED) { in emlxs_sli4_offline()
1541 (void) emlxs_sli4_hba_reset(hba, 0, 0, 0); in emlxs_sli4_offline()
1545 emlxs_sli4_hba_kill(hba); in emlxs_sli4_offline()
1550 emlxs_sli4_resource_free(hba); in emlxs_sli4_offline()
1553 (void) emlxs_mem_free_buffer(hba); in emlxs_sli4_offline()
1557 (void) emlxs_mem_free(hba, &hba->sli.sli4.dump_region); in emlxs_sli4_offline()
1563 emlxs_map_g7_bars(emlxs_hba_t *hba) in emlxs_map_g7_bars() argument
1572 if (ddi_prop_lookup_int_array(DDI_DEV_T_ANY, hba->dip, 0, in emlxs_map_g7_bars()
1577 dip = (dev_info_t *)hba->dip; in emlxs_map_g7_bars()
1610 if (hba->sli.sli4.bar0_acc_handle == 0) { in emlxs_map_g7_bars()
1611 hba->sli.sli4.bar0_addr = addr; in emlxs_map_g7_bars()
1612 hba->sli.sli4.bar0_acc_handle = in emlxs_map_g7_bars()
1617 if (hba->sli.sli4.bar1_acc_handle == 0) { in emlxs_map_g7_bars()
1618 hba->sli.sli4.bar1_addr = addr; in emlxs_map_g7_bars()
1619 hba->sli.sli4.bar1_acc_handle = in emlxs_map_g7_bars()
1624 if (hba->sli.sli4.bar2_acc_handle == 0) { in emlxs_map_g7_bars()
1625 hba->sli.sli4.bar2_addr = addr; in emlxs_map_g7_bars()
1626 hba->sli.sli4.bar2_acc_handle = in emlxs_map_g7_bars()
1638 emlxs_sli4_map_hdw(emlxs_hba_t *hba) in emlxs_sli4_map_hdw() argument
1645 dip = (dev_info_t *)hba->dip; in emlxs_sli4_map_hdw()
1648 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_map_hdw()
1653 if (hba->sli.sli4.bar1_acc_handle == 0) { in emlxs_sli4_map_hdw()
1655 (caddr_t *)&hba->sli.sli4.bar1_addr, in emlxs_sli4_map_hdw()
1656 0, 0, &dev_attr, &hba->sli.sli4.bar1_acc_handle); in emlxs_sli4_map_hdw()
1662 status, &hba->sli.sli4.bar1_addr, &dev_attr, in emlxs_sli4_map_hdw()
1663 &hba->sli.sli4.bar1_acc_handle); in emlxs_sli4_map_hdw()
1668 if (hba->sli.sli4.bar2_acc_handle == 0) { in emlxs_sli4_map_hdw()
1670 (caddr_t *)&hba->sli.sli4.bar2_addr, in emlxs_sli4_map_hdw()
1671 0, 0, &dev_attr, &hba->sli.sli4.bar2_acc_handle); in emlxs_sli4_map_hdw()
1682 hba->sli.sli4.MPUEPSemaphore_reg_addr = in emlxs_sli4_map_hdw()
1683 (uint32_t *)(hba->sli.sli4.bar1_addr + in emlxs_sli4_map_hdw()
1685 hba->sli.sli4.MBDB_reg_addr = in emlxs_sli4_map_hdw()
1686 (uint32_t *)(hba->sli.sli4.bar2_addr + PD_MB_DB_OFFSET); in emlxs_sli4_map_hdw()
1687 hba->sli.sli4.CQDB_reg_addr = in emlxs_sli4_map_hdw()
1688 (uint32_t *)(hba->sli.sli4.bar2_addr + PD_CQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1689 hba->sli.sli4.MQDB_reg_addr = in emlxs_sli4_map_hdw()
1690 (uint32_t *)(hba->sli.sli4.bar2_addr + PD_MQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1691 hba->sli.sli4.WQDB_reg_addr = in emlxs_sli4_map_hdw()
1692 (uint32_t *)(hba->sli.sli4.bar2_addr + PD_WQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1693 hba->sli.sli4.RQDB_reg_addr = in emlxs_sli4_map_hdw()
1694 (uint32_t *)(hba->sli.sli4.bar2_addr + PD_RQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1696 hba->sli.sli4.STATUS_reg_addr = 0; in emlxs_sli4_map_hdw()
1697 hba->sli.sli4.CNTL_reg_addr = 0; in emlxs_sli4_map_hdw()
1699 hba->sli.sli4.ERR1_reg_addr = in emlxs_sli4_map_hdw()
1700 (uint32_t *)(hba->pci_addr + PCICFG_UE_STATUS_LO_OFFSET); in emlxs_sli4_map_hdw()
1701 hba->sli.sli4.ERR2_reg_addr = in emlxs_sli4_map_hdw()
1702 (uint32_t *)(hba->pci_addr + PCICFG_UE_STATUS_HI_OFFSET); in emlxs_sli4_map_hdw()
1704 hba->sli.sli4.PHYSDEV_reg_addr = 0; in emlxs_sli4_map_hdw()
1711 if (hba->sli.sli4.bar0_acc_handle == 0) { in emlxs_sli4_map_hdw()
1713 (caddr_t *)&hba->sli.sli4.bar0_addr, in emlxs_sli4_map_hdw()
1714 0, 0, &dev_attr, &hba->sli.sli4.bar0_acc_handle); in emlxs_sli4_map_hdw()
1720 status, &hba->sli.sli4.bar0_addr, &dev_attr, in emlxs_sli4_map_hdw()
1721 &hba->sli.sli4.bar0_acc_handle); in emlxs_sli4_map_hdw()
1727 hba->sli.sli4.MPUEPSemaphore_reg_addr = in emlxs_sli4_map_hdw()
1728 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1730 hba->sli.sli4.MBDB_reg_addr = in emlxs_sli4_map_hdw()
1731 (uint32_t *)(hba->sli.sli4.bar0_addr + PD_MB_DB_OFFSET); in emlxs_sli4_map_hdw()
1732 hba->sli.sli4.CQDB_reg_addr = in emlxs_sli4_map_hdw()
1733 (uint32_t *)(hba->sli.sli4.bar0_addr + PD_CQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1734 hba->sli.sli4.MQDB_reg_addr = in emlxs_sli4_map_hdw()
1735 (uint32_t *)(hba->sli.sli4.bar0_addr + PD_MQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1736 hba->sli.sli4.WQDB_reg_addr = in emlxs_sli4_map_hdw()
1737 (uint32_t *)(hba->sli.sli4.bar0_addr + PD_WQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1738 hba->sli.sli4.RQDB_reg_addr = in emlxs_sli4_map_hdw()
1739 (uint32_t *)(hba->sli.sli4.bar0_addr + PD_RQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1741 hba->sli.sli4.STATUS_reg_addr = in emlxs_sli4_map_hdw()
1742 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1744 hba->sli.sli4.CNTL_reg_addr = in emlxs_sli4_map_hdw()
1745 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1747 hba->sli.sli4.ERR1_reg_addr = in emlxs_sli4_map_hdw()
1748 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1750 hba->sli.sli4.ERR2_reg_addr = in emlxs_sli4_map_hdw()
1751 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1753 hba->sli.sli4.PHYSDEV_reg_addr = in emlxs_sli4_map_hdw()
1754 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1761 if (!emlxs_map_g7_bars(hba)) in emlxs_sli4_map_hdw()
1764 hba->sli.sli4.MPUEPSemaphore_reg_addr = in emlxs_sli4_map_hdw()
1765 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1767 hba->sli.sli4.MBDB_reg_addr = in emlxs_sli4_map_hdw()
1768 (uint32_t *)(hba->sli.sli4.bar0_addr + PD_MB_DB_OFFSET); in emlxs_sli4_map_hdw()
1769 hba->sli.sli4.EQDB_reg_addr = in emlxs_sli4_map_hdw()
1770 (uint32_t *)(hba->sli.sli4.bar1_addr + PD_IF6_EQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1771 hba->sli.sli4.CQDB_reg_addr = in emlxs_sli4_map_hdw()
1772 (uint32_t *)(hba->sli.sli4.bar1_addr + PD_IF6_CQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1773 hba->sli.sli4.MQDB_reg_addr = in emlxs_sli4_map_hdw()
1774 (uint32_t *)(hba->sli.sli4.bar1_addr + PD_IF6_MQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1775 hba->sli.sli4.WQDB_reg_addr = in emlxs_sli4_map_hdw()
1776 (uint32_t *)(hba->sli.sli4.bar1_addr + PD_IF6_WQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1777 hba->sli.sli4.RQDB_reg_addr = in emlxs_sli4_map_hdw()
1778 (uint32_t *)(hba->sli.sli4.bar1_addr + PD_IF6_RQ_DB_OFFSET); in emlxs_sli4_map_hdw()
1780 hba->sli.sli4.STATUS_reg_addr = in emlxs_sli4_map_hdw()
1781 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1783 hba->sli.sli4.CNTL_reg_addr = in emlxs_sli4_map_hdw()
1784 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1786 hba->sli.sli4.ERR1_reg_addr = in emlxs_sli4_map_hdw()
1787 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1789 hba->sli.sli4.ERR2_reg_addr = in emlxs_sli4_map_hdw()
1790 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1792 hba->sli.sli4.PHYSDEV_reg_addr = in emlxs_sli4_map_hdw()
1793 (uint32_t *)(hba->sli.sli4.bar0_addr + in emlxs_sli4_map_hdw()
1803 (hba->sli_intf & SLI_INTF_IF_TYPE_MASK)); in emlxs_sli4_map_hdw()
1808 if (hba->sli.sli4.bootstrapmb.virt == 0) { in emlxs_sli4_map_hdw()
1819 (void) emlxs_mem_alloc(hba, buf_info); in emlxs_sli4_map_hdw()
1825 hba->sli.sli4.bootstrapmb.virt = buf_info->virt; in emlxs_sli4_map_hdw()
1826 hba->sli.sli4.bootstrapmb.phys = buf_info->phys; in emlxs_sli4_map_hdw()
1827 hba->sli.sli4.bootstrapmb.size = EMLXS_BOOTSTRAP_MB_SIZE + in emlxs_sli4_map_hdw()
1829 hba->sli.sli4.bootstrapmb.data_handle = buf_info->data_handle; in emlxs_sli4_map_hdw()
1830 hba->sli.sli4.bootstrapmb.dma_handle = buf_info->dma_handle; in emlxs_sli4_map_hdw()
1831 bzero((char *)hba->sli.sli4.bootstrapmb.virt, in emlxs_sli4_map_hdw()
1835 hba->chan_count = MAX_CHANNEL; in emlxs_sli4_map_hdw()
1841 emlxs_sli4_unmap_hdw(hba); in emlxs_sli4_map_hdw()
1850 emlxs_sli4_unmap_hdw(emlxs_hba_t *hba) in emlxs_sli4_unmap_hdw() argument
1856 if (hba->sli.sli4.bar0_acc_handle) { in emlxs_sli4_unmap_hdw()
1857 ddi_regs_map_free(&hba->sli.sli4.bar0_acc_handle); in emlxs_sli4_unmap_hdw()
1858 hba->sli.sli4.bar0_acc_handle = 0; in emlxs_sli4_unmap_hdw()
1861 if (hba->sli.sli4.bar1_acc_handle) { in emlxs_sli4_unmap_hdw()
1862 ddi_regs_map_free(&hba->sli.sli4.bar1_acc_handle); in emlxs_sli4_unmap_hdw()
1863 hba->sli.sli4.bar1_acc_handle = 0; in emlxs_sli4_unmap_hdw()
1866 if (hba->sli.sli4.bar2_acc_handle) { in emlxs_sli4_unmap_hdw()
1867 ddi_regs_map_free(&hba->sli.sli4.bar2_acc_handle); in emlxs_sli4_unmap_hdw()
1868 hba->sli.sli4.bar2_acc_handle = 0; in emlxs_sli4_unmap_hdw()
1871 if (hba->sli.sli4.bootstrapmb.virt) { in emlxs_sli4_unmap_hdw()
1874 if (hba->sli.sli4.bootstrapmb.phys) { in emlxs_sli4_unmap_hdw()
1875 buf_info->phys = hba->sli.sli4.bootstrapmb.phys; in emlxs_sli4_unmap_hdw()
1877 hba->sli.sli4.bootstrapmb.data_handle; in emlxs_sli4_unmap_hdw()
1879 hba->sli.sli4.bootstrapmb.dma_handle; in emlxs_sli4_unmap_hdw()
1883 buf_info->virt = hba->sli.sli4.bootstrapmb.virt; in emlxs_sli4_unmap_hdw()
1884 buf_info->size = hba->sli.sli4.bootstrapmb.size; in emlxs_sli4_unmap_hdw()
1885 emlxs_mem_free(hba, buf_info); in emlxs_sli4_unmap_hdw()
1887 hba->sli.sli4.bootstrapmb.virt = NULL; in emlxs_sli4_unmap_hdw()
1896 emlxs_check_hdw_ready(emlxs_hba_t *hba) in emlxs_check_hdw_ready() argument
1907 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_check_hdw_ready()
1909 status = emlxs_sli4_read_sema(hba); in emlxs_check_hdw_ready()
1917 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_check_hdw_ready()
1928 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_check_hdw_ready()
1945 status = emlxs_sli4_read_status(hba); in emlxs_check_hdw_ready()
1957 err1 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_check_hdw_ready()
1958 hba->sli.sli4.ERR1_reg_addr); in emlxs_check_hdw_ready()
1959 err2 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_check_hdw_ready()
1960 hba->sli.sli4.ERR2_reg_addr); in emlxs_check_hdw_ready()
1979 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_check_hdw_ready()
1987 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_check_hdw_ready()
1997 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_check_hdw_ready()
1999 err1 = ddi_get32(hba->pci_acc_handle, in emlxs_check_hdw_ready()
2000 hba->sli.sli4.ERR1_reg_addr); in emlxs_check_hdw_ready()
2001 err2 = ddi_get32(hba->pci_acc_handle, in emlxs_check_hdw_ready()
2002 hba->sli.sli4.ERR2_reg_addr); in emlxs_check_hdw_ready()
2006 err1 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_check_hdw_ready()
2007 hba->sli.sli4.ERR1_reg_addr); in emlxs_check_hdw_ready()
2008 err2 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_check_hdw_ready()
2009 hba->sli.sli4.ERR2_reg_addr); in emlxs_check_hdw_ready()
2023 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_check_hdw_ready()
2031 emlxs_sli4_read_status(emlxs_hba_t *hba) in emlxs_sli4_read_status() argument
2038 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_read_status()
2041 status = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_read_status()
2042 hba->sli.sli4.STATUS_reg_addr); in emlxs_sli4_read_status()
2045 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli4.bar0_acc_handle); in emlxs_sli4_read_status()
2059 emlxs_sli4_read_sema(emlxs_hba_t *hba) in emlxs_sli4_read_sema() argument
2066 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_read_sema()
2068 status = ddi_get32(hba->sli.sli4.bar1_acc_handle, in emlxs_sli4_read_sema()
2069 hba->sli.sli4.MPUEPSemaphore_reg_addr); in emlxs_sli4_read_sema()
2072 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli4.bar1_acc_handle); in emlxs_sli4_read_sema()
2078 status = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_read_sema()
2079 hba->sli.sli4.MPUEPSemaphore_reg_addr); in emlxs_sli4_read_sema()
2082 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli4.bar0_acc_handle); in emlxs_sli4_read_sema()
2096 emlxs_sli4_read_mbdb(emlxs_hba_t *hba) in emlxs_sli4_read_mbdb() argument
2103 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_read_mbdb()
2105 status = ddi_get32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_read_mbdb()
2106 hba->sli.sli4.MBDB_reg_addr); in emlxs_sli4_read_mbdb()
2110 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli4.bar2_acc_handle); in emlxs_sli4_read_mbdb()
2116 status = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_read_mbdb()
2117 hba->sli.sli4.MBDB_reg_addr); in emlxs_sli4_read_mbdb()
2120 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli4.bar0_acc_handle); in emlxs_sli4_read_mbdb()
2134 emlxs_sli4_write_mbdb(emlxs_hba_t *hba, uint64_t phys, boolean_t high) in emlxs_sli4_write_mbdb() argument
2151 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_write_mbdb()
2153 ddi_put32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_write_mbdb()
2154 hba->sli.sli4.MBDB_reg_addr, db); in emlxs_sli4_write_mbdb()
2159 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_write_mbdb()
2160 hba->sli.sli4.MBDB_reg_addr, db); in emlxs_sli4_write_mbdb()
2168 emlxs_sli4_write_eqdb(emlxs_hba_t *hba, uint16_t qid, uint32_t count, in emlxs_sli4_write_eqdb() argument
2179 if ((hba->sli_intf & SLI_INTF_IF_TYPE_MASK) == SLI_INTF_IF_TYPE_6) { in emlxs_sli4_write_eqdb()
2206 EMLXS_MSGF(&hba->port[0], _FILENO_, __LINE__, &emlxs_sli_detail_msg, in emlxs_sli4_write_eqdb()
2210 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_write_eqdb()
2213 ddi_put32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_write_eqdb()
2214 hba->sli.sli4.CQDB_reg_addr, db.word); in emlxs_sli4_write_eqdb()
2219 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_write_eqdb()
2220 hba->sli.sli4.CQDB_reg_addr, db.word); in emlxs_sli4_write_eqdb()
2224 ddi_put32(hba->sli.sli4.bar1_acc_handle, in emlxs_sli4_write_eqdb()
2225 hba->sli.sli4.EQDB_reg_addr, db.word); in emlxs_sli4_write_eqdb()
2232 emlxs_sli4_write_cqdb(emlxs_hba_t *hba, uint16_t qid, uint32_t count, in emlxs_sli4_write_cqdb() argument
2243 if ((hba->sli_intf & SLI_INTF_IF_TYPE_MASK) == SLI_INTF_IF_TYPE_6) { in emlxs_sli4_write_cqdb()
2263 EMLXS_MSGF(&hba->port[0], _FILENO_, __LINE__, &emlxs_sli_detail_msg, in emlxs_sli4_write_cqdb()
2267 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_write_cqdb()
2269 ddi_put32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_write_cqdb()
2270 hba->sli.sli4.CQDB_reg_addr, db.word); in emlxs_sli4_write_cqdb()
2274 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_write_cqdb()
2275 hba->sli.sli4.CQDB_reg_addr, db.word); in emlxs_sli4_write_cqdb()
2279 ddi_put32(hba->sli.sli4.bar1_acc_handle, in emlxs_sli4_write_cqdb()
2280 hba->sli.sli4.CQDB_reg_addr, db.word); in emlxs_sli4_write_cqdb()
2287 emlxs_sli4_write_rqdb(emlxs_hba_t *hba, uint16_t qid, uint_t count) in emlxs_sli4_write_rqdb() argument
2295 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_write_rqdb()
2297 ddi_put32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_write_rqdb()
2298 hba->sli.sli4.RQDB_reg_addr, rqdb.word); in emlxs_sli4_write_rqdb()
2302 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_write_rqdb()
2303 hba->sli.sli4.RQDB_reg_addr, rqdb.word); in emlxs_sli4_write_rqdb()
2307 ddi_put32(hba->sli.sli4.bar1_acc_handle, in emlxs_sli4_write_rqdb()
2308 hba->sli.sli4.RQDB_reg_addr, rqdb.word); in emlxs_sli4_write_rqdb()
2317 emlxs_sli4_write_mqdb(emlxs_hba_t *hba, uint16_t qid, uint_t count) in emlxs_sli4_write_mqdb() argument
2324 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_write_mqdb()
2326 ddi_put32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_write_mqdb()
2327 hba->sli.sli4.MQDB_reg_addr, db); in emlxs_sli4_write_mqdb()
2331 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_write_mqdb()
2332 hba->sli.sli4.MQDB_reg_addr, db); in emlxs_sli4_write_mqdb()
2335 ddi_put32(hba->sli.sli4.bar1_acc_handle, in emlxs_sli4_write_mqdb()
2336 hba->sli.sli4.MQDB_reg_addr, db); in emlxs_sli4_write_mqdb()
2344 emlxs_sli4_write_wqdb(emlxs_hba_t *hba, uint16_t qid, uint_t posted, in emlxs_sli4_write_wqdb() argument
2352 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_write_wqdb()
2355 ddi_put32(hba->sli.sli4.bar2_acc_handle, in emlxs_sli4_write_wqdb()
2356 hba->sli.sli4.WQDB_reg_addr, db); in emlxs_sli4_write_wqdb()
2361 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_write_wqdb()
2362 hba->sli.sli4.WQDB_reg_addr, db); in emlxs_sli4_write_wqdb()
2366 ddi_put32(hba->sli.sli4.bar1_acc_handle, in emlxs_sli4_write_wqdb()
2367 hba->sli.sli4.WQDB_reg_addr, db); in emlxs_sli4_write_wqdb()
2373 EMLXS_MSGF(&hba->port[0], _FILENO_, __LINE__, &emlxs_sli_detail_msg, in emlxs_sli4_write_wqdb()
2380 emlxs_check_bootstrap_ready(emlxs_hba_t *hba, uint32_t tmo) in emlxs_check_bootstrap_ready() argument
2389 status = emlxs_sli4_read_mbdb(hba); in emlxs_check_bootstrap_ready()
2403 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_check_bootstrap_ready()
2405 err1 = ddi_get32(hba->pci_acc_handle, in emlxs_check_bootstrap_ready()
2406 hba->sli.sli4.ERR1_reg_addr); in emlxs_check_bootstrap_ready()
2407 err2 = ddi_get32(hba->pci_acc_handle, in emlxs_check_bootstrap_ready()
2408 hba->sli.sli4.ERR2_reg_addr); in emlxs_check_bootstrap_ready()
2412 err1 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_check_bootstrap_ready()
2413 hba->sli.sli4.ERR1_reg_addr); in emlxs_check_bootstrap_ready()
2414 err2 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_check_bootstrap_ready()
2415 hba->sli.sli4.ERR2_reg_addr); in emlxs_check_bootstrap_ready()
2424 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_check_bootstrap_ready()
2432 emlxs_issue_bootstrap_mb(emlxs_hba_t *hba, uint32_t tmo) in emlxs_issue_bootstrap_mb() argument
2443 emlxs_sli4_write_mbdb(hba, hba->sli.sli4.bootstrapmb.phys, B_TRUE); in emlxs_issue_bootstrap_mb()
2445 tmo = emlxs_check_bootstrap_ready(hba, tmo); in emlxs_issue_bootstrap_mb()
2451 emlxs_sli4_write_mbdb(hba, hba->sli.sli4.bootstrapmb.phys, B_FALSE); in emlxs_issue_bootstrap_mb()
2453 tmo = emlxs_check_bootstrap_ready(hba, tmo); in emlxs_issue_bootstrap_mb()
2458 iptr = (uint32_t *)hba->sli.sli4.bootstrapmb.virt; in emlxs_issue_bootstrap_mb()
2462 hba->sli.sli4.bootstrapmb.virt, in emlxs_issue_bootstrap_mb()
2471 emlxs_init_bootstrap_mb(emlxs_hba_t *hba) in emlxs_init_bootstrap_mb() argument
2479 if (emlxs_check_hdw_ready(hba)) { in emlxs_init_bootstrap_mb()
2483 if (hba->flag & FC_BOOTSTRAPMB_INIT) { in emlxs_init_bootstrap_mb()
2488 tmo = emlxs_check_bootstrap_ready(hba, 3000); in emlxs_init_bootstrap_mb()
2496 iptr = (uint32_t *)hba->sli.sli4.bootstrapmb.virt; in emlxs_init_bootstrap_mb()
2500 EMLXS_MPDATA_SYNC(hba->sli.sli4.bootstrapmb.dma_handle, 0, in emlxs_init_bootstrap_mb()
2504 if (!emlxs_issue_bootstrap_mb(hba, tmo)) { in emlxs_init_bootstrap_mb()
2509 if (emlxs_fm_check_dma_handle(hba, hba->sli.sli4.bootstrapmb.dma_handle) in emlxs_init_bootstrap_mb()
2514 hba->sli.sli4.bootstrapmb.dma_handle); in emlxs_init_bootstrap_mb()
2518 hba->flag |= FC_BOOTSTRAPMB_INIT; in emlxs_init_bootstrap_mb()
2527 emlxs_sli4_hba_init(emlxs_hba_t *hba) in emlxs_sli4_hba_init() argument
2537 if (emlxs_sli4_hba_reset(hba, 1, 0, 0)) { in emlxs_sli4_hba_init()
2541 for (i = 0; i < hba->chan_count; i++) { in emlxs_sli4_hba_init()
2542 cp = &hba->chan[i]; in emlxs_sli4_hba_init()
2543 cp->iopath = (void *)&hba->sli.sli4.wq[i]; in emlxs_sli4_hba_init()
2547 hba->vpi_max = 0; in emlxs_sli4_hba_init()
2550 vport->hba = hba; in emlxs_sli4_hba_init()
2562 if (hba->max_nodes == 0) { in emlxs_sli4_hba_init()
2564 hba->max_nodes = cfg[CFG_NUM_NODES].current; in emlxs_sli4_hba_init()
2566 hba->max_nodes = 4096; in emlxs_sli4_hba_init()
2570 rc = emlxs_init_bootstrap_mb(hba); in emlxs_sli4_hba_init()
2575 hba->sli.sli4.cfgFCOE.FCMap[0] = FCOE_FCF_MAP0; in emlxs_sli4_hba_init()
2576 hba->sli.sli4.cfgFCOE.FCMap[1] = FCOE_FCF_MAP1; in emlxs_sli4_hba_init()
2577 hba->sli.sli4.cfgFCOE.FCMap[2] = FCOE_FCF_MAP2; in emlxs_sli4_hba_init()
2579 if ((hba->sli_intf & SLI_INTF_IF_TYPE_MASK) == SLI_INTF_IF_TYPE_0) { in emlxs_sli4_hba_init()
2581 hba->sli.sli4.ue_mask_lo = ddi_get32(hba->pci_acc_handle, in emlxs_sli4_hba_init()
2582 (uint32_t *)(hba->pci_addr + PCICFG_UE_MASK_LO_OFFSET)); in emlxs_sli4_hba_init()
2583 hba->sli.sli4.ue_mask_hi = ddi_get32(hba->pci_acc_handle, in emlxs_sli4_hba_init()
2584 (uint32_t *)(hba->pci_addr + PCICFG_UE_MASK_HI_OFFSET)); in emlxs_sli4_hba_init()
2594 emlxs_sli4_hba_reset(emlxs_hba_t *hba, uint32_t restart, uint32_t skip_post, in emlxs_sli4_hba_reset() argument
2614 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_hba_reset()
2619 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_hba_reset()
2622 emlxs_sli4_hba_kill(hba); in emlxs_sli4_hba_reset()
2628 rc = emlxs_init_bootstrap_mb(hba); in emlxs_sli4_hba_reset()
2635 emlxs_mb_resetport(hba, &mboxq); in emlxs_sli4_hba_reset()
2638 if (emlxs_sli4_issue_mbox_cmd(hba, &mboxq, in emlxs_sli4_hba_reset()
2644 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_hba_reset()
2649 if (emlxs_sli4_issue_mbox_cmd4quiesce(hba, &mboxq, in emlxs_sli4_hba_reset()
2651 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_hba_reset()
2662 emlxs_sli4_hba_kill(hba); in emlxs_sli4_hba_reset()
2665 rc = emlxs_check_hdw_ready(hba); in emlxs_sli4_hba_reset()
2673 err1 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_hba_reset()
2674 hba->sli.sli4.ERR1_reg_addr); in emlxs_sli4_hba_reset()
2675 err2 = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_hba_reset()
2676 hba->sli.sli4.ERR2_reg_addr); in emlxs_sli4_hba_reset()
2689 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_hba_reset()
2690 hba->sli.sli4.CNTL_reg_addr, value); in emlxs_sli4_hba_reset()
2697 hba->flag &= FC_RESET_MASK; in emlxs_sli4_hba_reset()
2699 for (channelno = 0; channelno < hba->chan_count; channelno++) { in emlxs_sli4_hba_reset()
2700 cp = &hba->chan[channelno]; in emlxs_sli4_hba_reset()
2701 cp->hba = hba; in emlxs_sli4_hba_reset()
2705 hba->channel_tx_count = 0; in emlxs_sli4_hba_reset()
2706 hba->io_count = 0; in emlxs_sli4_hba_reset()
2707 hba->iodone_count = 0; in emlxs_sli4_hba_reset()
2708 hba->topology = 0; in emlxs_sli4_hba_reset()
2709 hba->linkspeed = 0; in emlxs_sli4_hba_reset()
2710 hba->heartbeat_active = 0; in emlxs_sli4_hba_reset()
2711 hba->discovery_timer = 0; in emlxs_sli4_hba_reset()
2712 hba->linkup_timer = 0; in emlxs_sli4_hba_reset()
2713 hba->loopback_tics = 0; in emlxs_sli4_hba_reset()
2716 if (hba->model_info.flags & EMLXS_GPIO_LEDS) { in emlxs_sli4_hba_reset()
2718 hba->gpio_current = in emlxs_sli4_hba_reset()
2720 hba->gpio_desired = 0; in emlxs_sli4_hba_reset()
2721 hba->gpio_bit = 0; in emlxs_sli4_hba_reset()
2748 if (emlxs_check_hdw_ready(hba)) { in emlxs_sli4_hba_reset()
2753 status = emlxs_sli4_read_status(hba); in emlxs_sli4_hba_reset()
2775 emlxs_hba_t *hba = HBA; in emlxs_pkt_to_sgl() local
2900 emlxs_hba_t *hba = HBA; in emlxs_sli4_bde_setup() local
2955 if (hba->sli.sli4.flag & EMLXS_SLI4_PHON) { in emlxs_sli4_bde_setup()
3021 emlxs_hba_t *hba = HBA; in emlxs_sli4_fct_bde_setup() local
3070 mp = emlxs_mem_buf_alloc(hba, EMLXS_XFER_RDY_SIZE); in emlxs_sli4_fct_bde_setup()
3174 if (hba->sli.sli4.flag & EMLXS_SLI4_PHON) { in emlxs_sli4_fct_bde_setup()
3190 emlxs_sli4_issue_iocb_cmd(emlxs_hba_t *hba, CHANNEL *cp, IOCBQ *iocbq) in emlxs_sli4_issue_iocb_cmd() argument
3220 if (iocbq && (iocbq->flag & IOCB_FCP_CMD) && (hba->state != FC_READY)) { in emlxs_sli4_issue_iocb_cmd()
3232 if ((hba->io_count - in emlxs_sli4_issue_iocb_cmd()
3233 hba->channel_tx_count) > 10) { in emlxs_sli4_issue_iocb_cmd()
3249 throttle = hba->io_throttle - hba->io_active; in emlxs_sli4_issue_iocb_cmd()
3355 if ((channelno == hba->channel_els) && in emlxs_sli4_issue_iocb_cmd()
3375 atomic_inc_32(&hba->io_active); in emlxs_sli4_issue_iocb_cmd()
3419 if (hba->sli.sli4.param.PHWQ) { in emlxs_sli4_issue_iocb_cmd()
3430 hba->sli.sli4.slim2.virt)); in emlxs_sli4_issue_iocb_cmd()
3441 emlxs_sli4_write_wqdb(hba, wq->qid, 1, wq->host_index); in emlxs_sli4_issue_iocb_cmd()
3445 emlxs_mem_put(hba, MEM_IOCB, (void *)iocbq); in emlxs_sli4_issue_iocb_cmd()
3450 throttle = hba->io_throttle - hba->io_active; in emlxs_sli4_issue_iocb_cmd()
3495 emlxs_hba_t *hba = HBA; in emlxs_sli4_issue_mq() local
3505 hba->mbox_mqe = (void *)mqe; in emlxs_sli4_issue_mq()
3516 EMLXS_MPDATA_SYNC(hba->sli.sli4.mq.addr.dma_handle, 0, in emlxs_sli4_issue_mq()
3549 hba->sli.sli4.mq.addr.virt) - in emlxs_sli4_issue_mq()
3551 hba->sli.sli4.slim2.virt)); in emlxs_sli4_issue_mq()
3553 EMLXS_MPDATA_SYNC(hba->sli.sli4.mq.addr.dma_handle, offset, in emlxs_sli4_issue_mq()
3565 "MQ RING: Qid %04x", hba->sli.sli4.mq.qid); in emlxs_sli4_issue_mq()
3568 emlxs_sli4_write_mqdb(hba, hba->sli.sli4.mq.qid, 1); in emlxs_sli4_issue_mq()
3577 emlxs_sli4_issue_bootstrap(emlxs_hba_t *hba, MAILBOX *mb, uint32_t tmo) in emlxs_sli4_issue_bootstrap() argument
3589 hba->mbox_mqe = hba->sli.sli4.bootstrapmb.virt; in emlxs_sli4_issue_bootstrap()
3597 iptr = (uint32_t *)hba->sli.sli4.bootstrapmb.virt; in emlxs_sli4_issue_bootstrap()
3601 EMLXS_MPDATA_SYNC(hba->sli.sli4.bootstrapmb.dma_handle, 0, in emlxs_sli4_issue_bootstrap()
3625 iptr = (uint32_t *)hba->sli.sli4.bootstrapmb.virt; in emlxs_sli4_issue_bootstrap()
3629 EMLXS_MPDATA_SYNC(hba->sli.sli4.bootstrapmb.dma_handle, 0, in emlxs_sli4_issue_bootstrap()
3643 if (!emlxs_issue_bootstrap_mb(hba, tmo)) { in emlxs_sli4_issue_bootstrap()
3649 EMLXS_MPDATA_SYNC(hba->sli.sli4.bootstrapmb.dma_handle, 0, in emlxs_sli4_issue_bootstrap()
3652 iptr = (uint32_t *)hba->sli.sli4.bootstrapmb.virt; in emlxs_sli4_issue_bootstrap()
3659 EMLXS_MPDATA_SYNC(hba->sli.sli4.bootstrapmb.dma_handle, 0, in emlxs_sli4_issue_bootstrap()
3668 iptr = (uint32_t *)hba->sli.sli4.bootstrapmb.virt; in emlxs_sli4_issue_bootstrap()
3679 if (emlxs_fm_check_dma_handle(hba, mp->dma_handle) in emlxs_sli4_issue_bootstrap()
3689 if (emlxs_fm_check_dma_handle(hba, in emlxs_sli4_issue_bootstrap()
3690 hba->sli.sli4.bootstrapmb.dma_handle) in emlxs_sli4_issue_bootstrap()
3695 hba->sli.sli4.bootstrapmb.dma_handle); in emlxs_sli4_issue_bootstrap()
3707 emlxs_sli4_issue_mbox_cmd(emlxs_hba_t *hba, MAILBOXQ *mbq, int32_t flag, in emlxs_sli4_issue_mbox_cmd() argument
3823 if (hba->sli.sli4.flag & EMLXS_SLI4_INTR_ENABLED) { in emlxs_sli4_issue_mbox_cmd()
3830 if (!(hba->sli.sli4.flag & EMLXS_SLI4_INTR_ENABLED)) { in emlxs_sli4_issue_mbox_cmd()
3844 if ((hba->flag & FC_HARDWARE_ERROR) && in emlxs_sli4_issue_mbox_cmd()
3859 if (hba->mbox_queue_flag) { in emlxs_sli4_issue_mbox_cmd()
3866 emlxs_mb_put(hba, mbq); in emlxs_sli4_issue_mbox_cmd()
3875 while (hba->mbox_queue_flag) { in emlxs_sli4_issue_mbox_cmd()
3895 if ((hba->flag & FC_HARDWARE_ERROR) && in emlxs_sli4_issue_mbox_cmd()
3916 emlxs_mb_init(hba, mbq, flag, tmo); in emlxs_sli4_issue_mbox_cmd()
3919 hba->sli.sli4.flag |= EMLXS_SLI4_DOWN_LINK; in emlxs_sli4_issue_mbox_cmd()
3938 iptr = hba->sli.sli4.mq.addr.virt; in emlxs_sli4_issue_mbox_cmd()
3939 iptr += (hba->sli.sli4.mq.host_index * MAILBOX_CMD_SLI4_WSIZE); in emlxs_sli4_issue_mbox_cmd()
3940 hba->sli.sli4.mq.host_index++; in emlxs_sli4_issue_mbox_cmd()
3941 if (hba->sli.sli4.mq.host_index >= hba->sli.sli4.mq.max_index) { in emlxs_sli4_issue_mbox_cmd()
3942 hba->sli.sli4.mq.host_index = 0; in emlxs_sli4_issue_mbox_cmd()
3967 rc = emlxs_sli4_issue_bootstrap(hba, mb, tmo_local); in emlxs_sli4_issue_mbox_cmd()
3977 hba->flag |= FC_MBOX_TIMEOUT; in emlxs_sli4_issue_mbox_cmd()
3978 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_issue_mbox_cmd()
3979 emlxs_mb_fini(hba, NULL, MBX_TIMEOUT); in emlxs_sli4_issue_mbox_cmd()
3997 (void) (mbq->mbox_cmpl)(hba, mbq); in emlxs_sli4_issue_mbox_cmd()
4001 emlxs_mb_fini(hba, NULL, mb->mbxStatus); in emlxs_sli4_issue_mbox_cmd()
4020 mbq = (MAILBOXQ *)emlxs_mb_get(hba); in emlxs_sli4_issue_mbox_cmd()
4023 i = emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli4_issue_mbox_cmd()
4025 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli4_issue_mbox_cmd()
4040 iptr = hba->sli.sli4.mq.addr.virt; in emlxs_sli4_issue_mbox_cmd()
4041 iptr += (hba->sli.sli4.mq.host_index * MAILBOX_CMD_SLI4_WSIZE); in emlxs_sli4_issue_mbox_cmd()
4042 hba->sli.sli4.mq.host_index++; in emlxs_sli4_issue_mbox_cmd()
4043 if (hba->sli.sli4.mq.host_index >= hba->sli.sli4.mq.max_index) { in emlxs_sli4_issue_mbox_cmd()
4044 hba->sli.sli4.mq.host_index = 0; in emlxs_sli4_issue_mbox_cmd()
4106 emlxs_sli4_issue_mbox_cmd4quiesce(emlxs_hba_t *hba, MAILBOXQ *mbq, int32_t flag, in emlxs_sli4_issue_mbox_cmd4quiesce() argument
4131 if (hba->flag & FC_HARDWARE_ERROR) { in emlxs_sli4_issue_mbox_cmd4quiesce()
4137 emlxs_mb_init(hba, mbq, flag, tmo); in emlxs_sli4_issue_mbox_cmd4quiesce()
4143 rc = emlxs_sli4_issue_bootstrap(hba, mb, tmo_local); in emlxs_sli4_issue_mbox_cmd4quiesce()
4147 hba->flag |= FC_MBOX_TIMEOUT; in emlxs_sli4_issue_mbox_cmd4quiesce()
4148 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_issue_mbox_cmd4quiesce()
4149 emlxs_mb_fini(hba, NULL, MBX_TIMEOUT); in emlxs_sli4_issue_mbox_cmd4quiesce()
4155 (void) (mbq->mbox_cmpl)(hba, mbq); in emlxs_sli4_issue_mbox_cmd4quiesce()
4159 emlxs_mb_fini(hba, NULL, mb->mbxStatus); in emlxs_sli4_issue_mbox_cmd4quiesce()
4191 emlxs_hba_t *hba = HBA; in emlxs_sli4_prep_fct_iocb() local
4274 if (hba->state >= FC_LINK_UP) { in emlxs_sli4_prep_fct_iocb()
4281 cmd_sbp->ticks = hba->timer_tics + pkt->pkt_timeout + in emlxs_sli4_prep_fct_iocb()
4378 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_fct_iocb()
4388 cmd_sbp->ticks = hba->timer_tics + timeout + in emlxs_sli4_prep_fct_iocb()
4446 ((2 * hba->fc_ratov) < 60) ? 60 : (2 * hba->fc_ratov); in emlxs_sli4_prep_fct_iocb()
4451 hba->timer_tics + timeout + ((timeout > 0xff) ? 0 : 10); in emlxs_sli4_prep_fct_iocb()
4497 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_fct_iocb()
4518 emlxs_hba_t *hba = HBA; in emlxs_sli4_prep_fcp_iocb() local
4532 cp = &hba->chan[channel]; in emlxs_sli4_prep_fcp_iocb()
4625 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_fcp_iocb()
4669 emlxs_hba_t *hba = HBA; in emlxs_sli4_prep_els_iocb() local
4695 cp = &hba->chan[hba->channel_els]; in emlxs_sli4_prep_els_iocb()
4763 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_els_iocb()
4827 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_els_iocb()
4879 if ((hba->sli_intf & SLI_INTF_IF_TYPE_MASK) == in emlxs_sli4_prep_els_iocb()
4888 if (hba->flag & FC_FIP_SUPPORTED) { in emlxs_sli4_prep_els_iocb()
4892 if (hba->topology == TOPOLOGY_LOOP) { in emlxs_sli4_prep_els_iocb()
4903 if (hba->flag & FC_FIP_SUPPORTED) { in emlxs_sli4_prep_els_iocb()
4911 (hba->flag & FC_FIP_SUPPORTED)) { in emlxs_sli4_prep_els_iocb()
4921 if (hba->flag & FC_PT_TO_PT) { in emlxs_sli4_prep_els_iocb()
5008 emlxs_hba_t *hba = HBA; in emlxs_sli4_prep_ct_iocb() local
5028 cp = &hba->chan[hba->channel_ct]; in emlxs_sli4_prep_ct_iocb()
5080 if (!(hba->model_info.chip & EMLXS_BE_CHIPS)) { in emlxs_sli4_prep_ct_iocb()
5084 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_ct_iocb()
5155 if (!(hba->sli.sli4.param.PHWQ)) { in emlxs_sli4_prep_ct_iocb()
5227 emlxs_sli4_read_eq(emlxs_hba_t *hba, EQ_DESC_t *eq) in emlxs_sli4_read_eq() argument
5242 hba->sli.sli4.slim2.virt)); in emlxs_sli4_read_eq()
5262 emlxs_sli4_poll_intr(emlxs_hba_t *hba) in emlxs_sli4_poll_intr() argument
5270 for (i = 0; i < hba->intr_count; i++) { in emlxs_sli4_poll_intr()
5271 rc = emlxs_sli4_read_eq(hba, &hba->sli.sli4.eq[i]); in emlxs_sli4_poll_intr()
5281 (void) emlxs_sli4_msi_intr((char *)hba, in emlxs_sli4_poll_intr()
5291 emlxs_sli4_process_async_event(emlxs_hba_t *hba, CQE_ASYNC_t *cqe) in emlxs_sli4_process_async_event() argument
5297 if (hba->link_event_tag == cqe->un.link.event_tag) { in emlxs_sli4_process_async_event()
5299 } else if (hba->link_event_tag + 1 < cqe->un.link.event_tag) { in emlxs_sli4_process_async_event()
5302 hba->link_event_tag = cqe->un.link.event_tag; in emlxs_sli4_process_async_event()
5322 emlxs_sli4_handle_fcoe_link_event(hba, cqe); in emlxs_sli4_process_async_event()
5331 emlxs_sli4_handle_fcoe_link_event(hba, cqe); in emlxs_sli4_process_async_event()
5340 emlxs_sli4_handle_fcoe_link_event(hba, cqe); in emlxs_sli4_process_async_event()
5380 emlxs_sli4_vpi_to_index(hba, in emlxs_sli4_process_async_event()
5408 hba->qos_linkspeed = cqe->un.qos.qos_link_speed; in emlxs_sli4_process_async_event()
5420 emlxs_sli4_handle_fc_link_att(hba, cqe); in emlxs_sli4_process_async_event()
5429 emlxs_sli4_handle_fc_link_att(hba, cqe); in emlxs_sli4_process_async_event()
5448 DRIVER_NAME, hba->ddiinst, in emlxs_sli4_process_async_event()
5458 DRIVER_NAME, hba->ddiinst); in emlxs_sli4_process_async_event()
5465 cqe->un.port.link_status[hba->sli.sli4.link_number]; in emlxs_sli4_process_async_event()
5471 "functional", hba->sli.sli4.link_number); in emlxs_sli4_process_async_event()
5482 DRIVER_NAME, hba->ddiinst); in emlxs_sli4_process_async_event()
5493 DRIVER_NAME, hba->ddiinst); in emlxs_sli4_process_async_event()
5504 DRIVER_NAME, hba->ddiinst); in emlxs_sli4_process_async_event()
5514 DRIVER_NAME, hba->ddiinst, status); in emlxs_sli4_process_async_event()
5543 emlxs_sli4_process_mbox_event(emlxs_hba_t *hba, CQE_MBOX_t *cqe) in emlxs_sli4_process_mbox_event() argument
5562 switch (hba->mbox_queue_flag) { in emlxs_sli4_process_mbox_event()
5579 mbq = (MAILBOXQ *)hba->mbox_mbq; in emlxs_sli4_process_mbox_event()
5595 if (hba->mbox_timer) { in emlxs_sli4_process_mbox_event()
5596 hba->mbox_timer = 0; in emlxs_sli4_process_mbox_event()
5599 mbq = (MAILBOXQ *)hba->mbox_mbq; in emlxs_sli4_process_mbox_event()
5617 hba->mbox_queue_flag); in emlxs_sli4_process_mbox_event()
5627 hba->sli.sli4.mq.addr.virt) - in emlxs_sli4_process_mbox_event()
5629 hba->sli.sli4.slim2.virt)); in emlxs_sli4_process_mbox_event()
5632 EMLXS_MPDATA_SYNC(hba->sli.sli4.mq.addr.dma_handle, offset, in emlxs_sli4_process_mbox_event()
5635 BE_SWAP32_BCOPY((uint8_t *)hba->mbox_mqe, (uint8_t *)mb, in emlxs_sli4_process_mbox_event()
5643 emlxs_data_dump(port, "MBOX CMP", (uint32_t *)hba->mbox_mqe, in emlxs_sli4_process_mbox_event()
5661 if (emlxs_fm_check_dma_handle(hba, mbox_bp->dma_handle) in emlxs_sli4_process_mbox_event()
5683 if (emlxs_fm_check_dma_handle(hba, in emlxs_sli4_process_mbox_event()
5699 hba->heartbeat_active = 0; in emlxs_sli4_process_mbox_event()
5703 if (hba->mbox_queue_flag == MBX_SLEEP) { in emlxs_sli4_process_mbox_event()
5733 rc = (mbq->mbox_cmpl)(hba, mbq); in emlxs_sli4_process_mbox_event()
5744 emlxs_mb_fini(hba, (MAILBOX *)mb, mb->mbxStatus); in emlxs_sli4_process_mbox_event()
5747 mbq = (MAILBOXQ *)emlxs_mb_get(hba); in emlxs_sli4_process_mbox_event()
5750 rc = emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli4_process_mbox_event()
5752 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli4_process_mbox_event()
5762 emlxs_CQE_to_IOCB(emlxs_hba_t *hba, CQE_CmplWQ_t *cqe, emlxs_buf_t *sbp) in emlxs_CQE_to_IOCB() argument
5849 emlxs_mem_buf_free(hba, iocbq->bp); in emlxs_CQE_to_IOCB()
5866 emlxs_sli4_hba_flush_chipq(emlxs_hba_t *hba) in emlxs_sli4_hba_flush_chipq() argument
5877 for (i = 0; i < hba->max_iotag; i++) { in emlxs_sli4_hba_flush_chipq()
5878 sbp = hba->fc_table[i]; in emlxs_sli4_hba_flush_chipq()
5882 hba->fc_table[i] = STALE_PACKET; in emlxs_sli4_hba_flush_chipq()
5883 hba->io_count--; in emlxs_sli4_hba_flush_chipq()
5905 atomic_dec_32(&hba->io_active); in emlxs_sli4_hba_flush_chipq()
5915 emlxs_CQE_to_IOCB(hba, &cqe, sbp); in emlxs_sli4_hba_flush_chipq()
5936 emlxs_proc_channel_event(hba, cp, iocbq); in emlxs_sli4_hba_flush_chipq()
5943 for (i = 0; i < hba->chan_count; i++) { in emlxs_sli4_hba_flush_chipq()
5944 cp = &hba->chan[i]; in emlxs_sli4_hba_flush_chipq()
5957 emlxs_sli4_process_oor_wqe_cmpl(emlxs_hba_t *hba, in emlxs_sli4_process_oor_wqe_cmpl() argument
5981 emlxs_sli4_process_wqe_cmpl(emlxs_hba_t *hba, CQ_DESC_t *cq, CQE_CmplWQ_t *cqe) in emlxs_sli4_process_wqe_cmpl() argument
6001 sbp = hba->fc_table[request_tag]; in emlxs_sli4_process_wqe_cmpl()
6021 atomic_add_32(&hba->io_active, -1); in emlxs_sli4_process_wqe_cmpl()
6046 emlxs_CQE_to_IOCB(hba, cqe, sbp); in emlxs_sli4_process_wqe_cmpl()
6100 emlxs_proc_channel_event(hba, cp, iocbq); in emlxs_sli4_process_wqe_cmpl()
6108 emlxs_sli4_process_release_wqe(emlxs_hba_t *hba, CQ_DESC_t *cq, in emlxs_sli4_process_release_wqe() argument
6117 wqi = emlxs_sli4_wqid_to_index(hba, (uint16_t)cqe->WQid); in emlxs_sli4_process_release_wqe()
6127 wq = &hba->sli.sli4.wq[wqi]; in emlxs_sli4_process_release_wqe()
6138 for (i = 0; i < hba->chan_count; i++) { in emlxs_sli4_process_release_wqe()
6139 cp = &hba->chan[i]; in emlxs_sli4_process_release_wqe()
6141 emlxs_sli4_issue_iocb_cmd(hba, cp, 0); in emlxs_sli4_process_release_wqe()
6150 emlxs_sli4_rxq_get(emlxs_hba_t *hba, fc_frame_hdr_t *fchdr) in emlxs_sli4_rxq_get() argument
6160 rxq = &hba->sli.sli4.rxq[EMLXS_RXQ_ELS]; in emlxs_sli4_rxq_get()
6163 rxq = &hba->sli.sli4.rxq[EMLXS_RXQ_CT]; in emlxs_sli4_rxq_get()
6210 emlxs_sli4_rxq_put(emlxs_hba_t *hba, emlxs_iocbq_t *iocbq) in emlxs_sli4_rxq_put() argument
6220 rxq = &hba->sli.sli4.rxq[EMLXS_RXQ_ELS]; in emlxs_sli4_rxq_put()
6223 rxq = &hba->sli.sli4.rxq[EMLXS_RXQ_CT]; in emlxs_sli4_rxq_put()
6254 emlxs_hba_t *hba = HBA; in emlxs_sli4_rq_post() local
6261 emlxs_sli4_write_rqdb(hba, rqid, 1); in emlxs_sli4_rq_post()
6268 emlxs_sli4_process_unsol_rcv(emlxs_hba_t *hba, CQ_DESC_t *cq, in emlxs_sli4_process_unsol_rcv() argument
6355 hdr_rqi = emlxs_sli4_rqid_to_index(hba, rqid); in emlxs_sli4_process_unsol_rcv()
6365 hdr_rq = &hba->sli.sli4.rq[hdr_rqi]; in emlxs_sli4_process_unsol_rcv()
6366 data_rq = &hba->sli.sli4.rq[hdr_rqi + 1]; in emlxs_sli4_process_unsol_rcv()
6377 mutex_enter(&hba->sli.sli4.rq[hdr_rqi].lock); in emlxs_sli4_process_unsol_rcv()
6385 mutex_exit(&hba->sli.sli4.rq[hdr_rqi].lock); in emlxs_sli4_process_unsol_rcv()
6391 (uint64_t)((unsigned long)hba->sli.sli4.slim2.virt)); in emlxs_sli4_process_unsol_rcv()
6432 cp = &hba->chan[hba->channel_els]; in emlxs_sli4_process_unsol_rcv()
6447 cp = &hba->chan[hba->channel_els]; in emlxs_sli4_process_unsol_rcv()
6462 cp = &hba->chan[hba->channel_ct]; in emlxs_sli4_process_unsol_rcv()
6477 cp = &hba->chan[hba->CHANNEL_FCT]; in emlxs_sli4_process_unsol_rcv()
6490 iocbq = emlxs_sli4_rxq_get(hba, &fchdr); in emlxs_sli4_process_unsol_rcv()
6527 !(hba->flag & FC_PT_TO_PT))) { in emlxs_sli4_process_unsol_rcv()
6537 iocbq = (emlxs_iocbq_t *)emlxs_mem_get(hba, MEM_IOCB); in emlxs_sli4_process_unsol_rcv()
6551 seq_mp = (MATCHMAP *)emlxs_mem_get(hba, buf_type); in emlxs_sli4_process_unsol_rcv()
6624 hba->sli.sli4.slim2.virt)); in emlxs_sli4_process_unsol_rcv()
6666 emlxs_sli4_rxq_put(hba, iocbq); in emlxs_sli4_process_unsol_rcv()
6710 emlxs_mem_put(hba, MEM_IOCB, (void *)iocbq); in emlxs_sli4_process_unsol_rcv()
6794 sbp->ticks = hba->timer_tics + 30; in emlxs_sli4_process_unsol_rcv()
6796 emlxs_sli4_issue_iocb_cmd(hba, iocbq->channel, iocbq); in emlxs_sli4_process_unsol_rcv()
6818 if (hba->flag & FC_PT_TO_PT) { in emlxs_sli4_process_unsol_rcv()
6960 !(hba->flag & FC_LOOPBACK_MODE)) { in emlxs_sli4_process_unsol_rcv()
7052 emlxs_mem_put(hba, buf_type, (void *)iocbq->bp); in emlxs_sli4_process_unsol_rcv()
7056 emlxs_mem_put(hba, MEM_IOCB, (void *)iocbq); in emlxs_sli4_process_unsol_rcv()
7060 if (emlxs_fm_check_dma_handle(hba, in emlxs_sli4_process_unsol_rcv()
7061 hba->sli.sli4.slim2.dma_handle) in emlxs_sli4_process_unsol_rcv()
7066 hba->sli.sli4.slim2.dma_handle); in emlxs_sli4_process_unsol_rcv()
7068 emlxs_thread_spawn(hba, emlxs_restart_thread, in emlxs_sli4_process_unsol_rcv()
7079 emlxs_sli4_process_xri_aborted(emlxs_hba_t *hba, CQ_DESC_t *cq, in emlxs_sli4_process_xri_aborted() argument
7121 emlxs_sli4_process_cq(emlxs_hba_t *hba, CQ_DESC_t *cq) in emlxs_sli4_process_cq() argument
7137 hba->sli.sli4.slim2.virt)); in emlxs_sli4_process_cq()
7168 if (hba->sli.sli4.param.CqAV) in emlxs_sli4_process_cq()
7178 if (hba->sli.sli4.param.CqAV) in emlxs_sli4_process_cq()
7188 emlxs_sli4_process_async_event(hba, in emlxs_sli4_process_cq()
7191 emlxs_sli4_process_mbox_event(hba, in emlxs_sli4_process_cq()
7198 hba->max_iotag) { in emlxs_sli4_process_cq()
7199 emlxs_sli4_process_wqe_cmpl(hba, cq, in emlxs_sli4_process_cq()
7202 emlxs_sli4_process_oor_wqe_cmpl(hba, cq, in emlxs_sli4_process_cq()
7207 emlxs_sli4_process_release_wqe(hba, cq, in emlxs_sli4_process_cq()
7212 emlxs_sli4_process_unsol_rcv(hba, cq, in emlxs_sli4_process_cq()
7216 emlxs_sli4_process_xri_aborted(hba, cq, in emlxs_sli4_process_cq()
7244 emlxs_sli4_write_cqdb(hba, cq->qid, num_entries, B_TRUE); in emlxs_sli4_process_cq()
7253 emlxs_sli4_process_eq(emlxs_hba_t *hba, EQ_DESC_t *eq) in emlxs_sli4_process_eq() argument
7266 hba->intr_busy_cnt ++; in emlxs_sli4_process_eq()
7274 hba->sli.sli4.slim2.virt)); in emlxs_sli4_process_eq()
7300 if (hba->sli.sli4.param.EqAV) in emlxs_sli4_process_eq()
7309 if (hba->sli.sli4.param.EqAV) in emlxs_sli4_process_eq()
7315 cqi = emlxs_sli4_cqid_to_index(hba, eqe.entry.CQId); in emlxs_sli4_process_eq()
7333 emlxs_sli4_process_cq(hba, &hba->sli.sli4.cq[cqi]); in emlxs_sli4_process_eq()
7346 for (i = 0; i < hba->chan_count; i++) { in emlxs_sli4_process_eq()
7347 cp = &hba->chan[i]; in emlxs_sli4_process_eq()
7356 emlxs_sli4_write_eqdb(hba, eq->qid, num_entries, B_TRUE); in emlxs_sli4_process_eq()
7360 hba->intr_busy_cnt --; in emlxs_sli4_process_eq()
7370 emlxs_hba_t *hba = (emlxs_hba_t *)arg1; in emlxs_sli4_msi_intr() local
7383 if (hba->intr_type == DDI_INTR_TYPE_FIXED) { in emlxs_sli4_msi_intr()
7392 if (msgid >= hba->intr_count) { in emlxs_sli4_msi_intr()
7397 if ((hba->state == FC_KILLED) || (hba->flag & FC_OFFLINE_MODE)) { in emlxs_sli4_msi_intr()
7403 emlxs_sli4_process_eq(hba, &hba->sli.sli4.eq[msgid]); in emlxs_sli4_msi_intr()
7416 emlxs_hba_t *hba = (emlxs_hba_t *)arg; in emlxs_sli4_intx_intr() local
7428 if ((hba->state == FC_KILLED) || (hba->flag & FC_OFFLINE_MODE)) { in emlxs_sli4_intx_intr()
7433 emlxs_sli4_process_eq(hba, &hba->sli.sli4.eq[0]); in emlxs_sli4_intx_intr()
7441 emlxs_sli4_hba_kill(emlxs_hba_t *hba) in emlxs_sli4_hba_kill() argument
7447 if (hba->flag & FC_INTERLOCKED) { in emlxs_sli4_hba_kill()
7448 EMLXS_STATE_CHANGE_LOCKED(hba, FC_KILLED); in emlxs_sli4_hba_kill()
7457 if ((hba->mbox_queue_flag == 0) && in emlxs_sli4_hba_kill()
7458 (hba->intr_busy_cnt == 0)) { in emlxs_sli4_hba_kill()
7467 if ((hba->mbox_queue_flag != 0) || (hba->intr_busy_cnt > 0)) { in emlxs_sli4_hba_kill()
7470 hba->mbox_queue_flag, hba->intr_busy_cnt); in emlxs_sli4_hba_kill()
7475 hba->flag |= FC_INTERLOCKED; in emlxs_sli4_hba_kill()
7477 EMLXS_STATE_CHANGE_LOCKED(hba, FC_KILLED); in emlxs_sli4_hba_kill()
7485 emlxs_sli4_hba_reset_all(emlxs_hba_t *hba, uint32_t flag) in emlxs_sli4_hba_reset_all() argument
7492 if ((hba->sli_intf & SLI_INTF_IF_TYPE_MASK) != SLI_INTF_IF_TYPE_2 && in emlxs_sli4_hba_reset_all()
7493 (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) != SLI_INTF_IF_TYPE_6) { in emlxs_sli4_hba_reset_all()
7507 ddi_put32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_hba_reset_all()
7508 hba->sli.sli4.PHYSDEV_reg_addr, value); in emlxs_sli4_hba_reset_all()
7516 emlxs_sli4_enable_intr(emlxs_hba_t *hba) in emlxs_sli4_enable_intr() argument
7522 hba->sli.sli4.flag |= EMLXS_SLI4_INTR_ENABLED; in emlxs_sli4_enable_intr()
7524 num_cq = (hba->intr_count * cfg[CFG_NUM_WQ].current) + in emlxs_sli4_enable_intr()
7529 emlxs_sli4_write_cqdb(hba, hba->sli.sli4.cq[i].qid, 0, B_TRUE); in emlxs_sli4_enable_intr()
7532 for (i = 0; i < hba->intr_count; i++) { in emlxs_sli4_enable_intr()
7533 emlxs_sli4_write_eqdb(hba, hba->sli.sli4.eq[i].qid, 0, B_TRUE); in emlxs_sli4_enable_intr()
7539 emlxs_sli4_disable_intr(emlxs_hba_t *hba, uint32_t att) in emlxs_sli4_disable_intr() argument
7545 hba->sli.sli4.flag &= ~EMLXS_SLI4_INTR_ENABLED; in emlxs_sli4_disable_intr()
7551 emlxs_sli4_resource_free(emlxs_hba_t *hba) in emlxs_sli4_resource_free() argument
7557 buf_info = &hba->sli.sli4.slim2; in emlxs_sli4_resource_free()
7563 emlxs_fcf_fini(hba); in emlxs_sli4_resource_free()
7567 buf_info = &hba->sli.sli4.HeaderTmplate; in emlxs_sli4_resource_free()
7572 if (hba->sli.sli4.XRIp) { in emlxs_sli4_resource_free()
7575 if ((hba->sli.sli4.XRIinuse_f != in emlxs_sli4_resource_free()
7576 (XRIobj_t *)&hba->sli.sli4.XRIinuse_f) || in emlxs_sli4_resource_free()
7577 (hba->sli.sli4.XRIinuse_b != in emlxs_sli4_resource_free()
7578 (XRIobj_t *)&hba->sli.sli4.XRIinuse_f)) { in emlxs_sli4_resource_free()
7579 xrip = (XRIobj_t *)hba->sli.sli4.XRIinuse_f; in emlxs_sli4_resource_free()
7580 while (xrip != (XRIobj_t *)&hba->sli.sli4.XRIinuse_f) { in emlxs_sli4_resource_free()
7584 hba->sli.sli4.XRIinuse_f, in emlxs_sli4_resource_free()
7585 hba->sli.sli4.XRIinuse_b, xrip, xrip->XRI, in emlxs_sli4_resource_free()
7591 xrip = hba->sli.sli4.XRIp; in emlxs_sli4_resource_free()
7592 for (i = 0; i < hba->sli.sli4.XRICount; i++) { in emlxs_sli4_resource_free()
7593 xrip->XRI = emlxs_sli4_index_to_xri(hba, i); in emlxs_sli4_resource_free()
7596 emlxs_mem_put(hba, xrip->SGSeg, xrip->SGList); in emlxs_sli4_resource_free()
7601 kmem_free(hba->sli.sli4.XRIp, in emlxs_sli4_resource_free()
7602 (sizeof (XRIobj_t) * hba->sli.sli4.XRICount)); in emlxs_sli4_resource_free()
7603 hba->sli.sli4.XRIp = NULL; in emlxs_sli4_resource_free()
7605 hba->sli.sli4.XRIfree_f = in emlxs_sli4_resource_free()
7606 (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_resource_free()
7607 hba->sli.sli4.XRIfree_b = in emlxs_sli4_resource_free()
7608 (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_resource_free()
7609 hba->sli.sli4.xrif_count = 0; in emlxs_sli4_resource_free()
7612 for (i = 0; i < hba->intr_count; i++) { in emlxs_sli4_resource_free()
7613 mutex_destroy(&hba->sli.sli4.eq[i].lastwq_lock); in emlxs_sli4_resource_free()
7614 bzero(&hba->sli.sli4.eq[i], sizeof (EQ_DESC_t)); in emlxs_sli4_resource_free()
7615 hba->sli.sli4.eq[i].qid = 0xffff; in emlxs_sli4_resource_free()
7618 bzero(&hba->sli.sli4.cq[i], sizeof (CQ_DESC_t)); in emlxs_sli4_resource_free()
7619 hba->sli.sli4.cq[i].qid = 0xffff; in emlxs_sli4_resource_free()
7622 bzero(&hba->sli.sli4.wq[i], sizeof (WQ_DESC_t)); in emlxs_sli4_resource_free()
7623 hba->sli.sli4.wq[i].qid = 0xffff; in emlxs_sli4_resource_free()
7626 mutex_destroy(&hba->sli.sli4.rxq[i].lock); in emlxs_sli4_resource_free()
7627 bzero(&hba->sli.sli4.rxq[i], sizeof (RXQ_DESC_t)); in emlxs_sli4_resource_free()
7630 mutex_destroy(&hba->sli.sli4.rq[i].lock); in emlxs_sli4_resource_free()
7631 bzero(&hba->sli.sli4.rq[i], sizeof (RQ_DESC_t)); in emlxs_sli4_resource_free()
7632 hba->sli.sli4.rq[i].qid = 0xffff; in emlxs_sli4_resource_free()
7636 bzero(&hba->sli.sli4.mq, sizeof (MQ_DESC_t)); in emlxs_sli4_resource_free()
7639 buf_info = &hba->sli.sli4.slim2; in emlxs_sli4_resource_free()
7642 emlxs_mem_free(hba, buf_info); in emlxs_sli4_resource_free()
7649 if (hba->model_info.flags & EMLXS_GPIO_LEDS) in emlxs_sli4_resource_free()
7650 mutex_destroy(&hba->gpio_lock); in emlxs_sli4_resource_free()
7656 emlxs_sli4_resource_alloc(emlxs_hba_t *hba) in emlxs_sli4_resource_alloc() argument
7686 buf_info = &hba->sli.sli4.slim2; in emlxs_sli4_resource_alloc()
7692 emlxs_fcf_init(hba); in emlxs_sli4_resource_alloc()
7694 switch (hba->sli.sli4.param.CQV) { in emlxs_sli4_resource_alloc()
7706 num_eq = hba->intr_count; in emlxs_sli4_resource_alloc()
7734 if (hba->sli.sli4.param.HDRR) { in emlxs_sli4_resource_alloc()
7736 j = hba->sli.sli4.RPIExtSize * sizeof (RPIHdrTmplate_t); in emlxs_sli4_resource_alloc()
7742 hddr_size = (k * hba->sli.sli4.RPIExtCount * 4096); in emlxs_sli4_resource_alloc()
7748 buf_info = &hba->sli.sli4.slim2; in emlxs_sli4_resource_alloc()
7751 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7756 (void) emlxs_mem_alloc(hba, buf_info); in emlxs_sli4_resource_alloc()
7780 bzero(&hba->sli.sli4.eq[i], sizeof (EQ_DESC_t)); in emlxs_sli4_resource_alloc()
7782 buf_info = &hba->sli.sli4.eq[i].addr; in emlxs_sli4_resource_alloc()
7785 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7794 hba->sli.sli4.eq[i].max_index = EQ_DEPTH; in emlxs_sli4_resource_alloc()
7795 hba->sli.sli4.eq[i].qid = 0xffff; in emlxs_sli4_resource_alloc()
7797 mutex_init(&hba->sli.sli4.eq[i].lastwq_lock, NULL, in emlxs_sli4_resource_alloc()
7799 hba->sli.sli4.eq[i].qe_valid = 1; in emlxs_sli4_resource_alloc()
7805 bzero(&hba->sli.sli4.cq[i], sizeof (CQ_DESC_t)); in emlxs_sli4_resource_alloc()
7807 buf_info = &hba->sli.sli4.cq[i].addr; in emlxs_sli4_resource_alloc()
7810 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7819 hba->sli.sli4.cq[i].max_index = cq_depth; in emlxs_sli4_resource_alloc()
7820 hba->sli.sli4.cq[i].qid = 0xffff; in emlxs_sli4_resource_alloc()
7821 hba->sli.sli4.cq[i].qe_valid = 1; in emlxs_sli4_resource_alloc()
7828 bzero(&hba->sli.sli4.wq[i], sizeof (WQ_DESC_t)); in emlxs_sli4_resource_alloc()
7830 buf_info = &hba->sli.sli4.wq[i].addr; in emlxs_sli4_resource_alloc()
7833 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7842 hba->sli.sli4.wq[i].max_index = WQ_DEPTH; in emlxs_sli4_resource_alloc()
7843 hba->sli.sli4.wq[i].release_depth = WQE_RELEASE_DEPTH; in emlxs_sli4_resource_alloc()
7844 hba->sli.sli4.wq[i].qid = 0xFFFF; in emlxs_sli4_resource_alloc()
7850 bzero(&hba->sli.sli4.mq, sizeof (MQ_DESC_t)); in emlxs_sli4_resource_alloc()
7852 buf_info = &hba->sli.sli4.mq.addr; in emlxs_sli4_resource_alloc()
7855 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7864 hba->sli.sli4.mq.max_index = MQ_DEPTH; in emlxs_sli4_resource_alloc()
7869 bzero(&hba->sli.sli4.rxq[i], sizeof (RXQ_DESC_t)); in emlxs_sli4_resource_alloc()
7871 mutex_init(&hba->sli.sli4.rxq[i].lock, NULL, MUTEX_DRIVER, in emlxs_sli4_resource_alloc()
7879 bzero(&hba->sli.sli4.rq[i], sizeof (RQ_DESC_t)); in emlxs_sli4_resource_alloc()
7881 buf_info = &hba->sli.sli4.rq[i].addr; in emlxs_sli4_resource_alloc()
7884 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7893 hba->sli.sli4.rq[i].max_index = RQ_DEPTH; in emlxs_sli4_resource_alloc()
7894 hba->sli.sli4.rq[i].qid = 0xFFFF; in emlxs_sli4_resource_alloc()
7896 mutex_init(&hba->sli.sli4.rq[i].lock, NULL, MUTEX_DRIVER, NULL); in emlxs_sli4_resource_alloc()
7907 rqe = (RQE_t *)hba->sli.sli4.rq[i].addr.virt; in emlxs_sli4_resource_alloc()
7918 rqb = &hba->sli.sli4.rq[i]. in emlxs_sli4_resource_alloc()
7922 rqb->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7941 hba->sli.sli4.rq[i].addr.virt) - in emlxs_sli4_resource_alloc()
7943 hba->sli.sli4.slim2.virt)); in emlxs_sli4_resource_alloc()
7946 EMLXS_MPDATA_SYNC(hba->sli.sli4.rq[i].addr.dma_handle, offset, in emlxs_sli4_resource_alloc()
7947 hba->sli.sli4.rq[i].addr.size, DDI_DMA_SYNC_FORDEV); in emlxs_sli4_resource_alloc()
7956 if (hba->sli.sli4.param.HDRR) { in emlxs_sli4_resource_alloc()
7957 buf_info = &hba->sli.sli4.HeaderTmplate; in emlxs_sli4_resource_alloc()
7961 buf_info->align = ddi_ptob(hba->dip, 1L); in emlxs_sli4_resource_alloc()
7972 hba->sli.sli4.XRICount, sizeof (XRIobj_t), size); in emlxs_sli4_resource_alloc()
7975 hba->sli.sli4.XRIinuse_f = in emlxs_sli4_resource_alloc()
7976 (XRIobj_t *)&hba->sli.sli4.XRIinuse_f; in emlxs_sli4_resource_alloc()
7977 hba->sli.sli4.XRIinuse_b = in emlxs_sli4_resource_alloc()
7978 (XRIobj_t *)&hba->sli.sli4.XRIinuse_f; in emlxs_sli4_resource_alloc()
7979 hba->sli.sli4.xria_count = 0; in emlxs_sli4_resource_alloc()
7981 hba->sli.sli4.XRIfree_f = in emlxs_sli4_resource_alloc()
7982 (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_resource_alloc()
7983 hba->sli.sli4.XRIfree_b = in emlxs_sli4_resource_alloc()
7984 (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_resource_alloc()
7985 hba->sli.sli4.xrif_count = 0; in emlxs_sli4_resource_alloc()
7987 switch (hba->sli.sli4.mem_sgl_size) { in emlxs_sli4_resource_alloc()
8000 "Unsupported SGL Size: %d", hba->sli.sli4.mem_sgl_size); in emlxs_sli4_resource_alloc()
8004 hba->sli.sli4.XRIp = (XRIobj_t *)kmem_zalloc( in emlxs_sli4_resource_alloc()
8005 (sizeof (XRIobj_t) * hba->sli.sli4.XRICount), KM_SLEEP); in emlxs_sli4_resource_alloc()
8007 xrip = hba->sli.sli4.XRIp; in emlxs_sli4_resource_alloc()
8010 for (i = 0; i < hba->sli.sli4.XRICount; i++) { in emlxs_sli4_resource_alloc()
8011 xrip->XRI = emlxs_sli4_index_to_xri(hba, i); in emlxs_sli4_resource_alloc()
8022 (hba->sli.sli4.mem_sgl_size / sizeof (ULP_SGE64)); in emlxs_sli4_resource_alloc()
8025 xrip->_b = hba->sli.sli4.XRIfree_b; in emlxs_sli4_resource_alloc()
8026 hba->sli.sli4.XRIfree_b->_f = xrip; in emlxs_sli4_resource_alloc()
8027 xrip->_f = (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_resource_alloc()
8028 hba->sli.sli4.XRIfree_b = xrip; in emlxs_sli4_resource_alloc()
8029 hba->sli.sli4.xrif_count++; in emlxs_sli4_resource_alloc()
8033 xrip->SGList = emlxs_mem_get(hba, xrip->SGSeg); in emlxs_sli4_resource_alloc()
8048 if (hba->model_info.flags & EMLXS_GPIO_LEDS) in emlxs_sli4_resource_alloc()
8049 mutex_init(&hba->gpio_lock, NULL, MUTEX_DRIVER, NULL); in emlxs_sli4_resource_alloc()
8052 if (hba->sli.sli4.slim2.dma_handle) { in emlxs_sli4_resource_alloc()
8053 if (emlxs_fm_check_dma_handle(hba, in emlxs_sli4_resource_alloc()
8054 hba->sli.sli4.slim2.dma_handle) in emlxs_sli4_resource_alloc()
8059 hba->sli.sli4.slim2.dma_handle); in emlxs_sli4_resource_alloc()
8069 (void) emlxs_sli4_resource_free(hba); in emlxs_sli4_resource_alloc()
8076 emlxs_sli4_zero_queue_stat(emlxs_hba_t *hba) in emlxs_sli4_zero_queue_stat() argument
8084 for (i = 0; i < hba->intr_count; i++) { in emlxs_sli4_zero_queue_stat()
8085 hba->sli.sli4.eq[i].num_proc = 0; in emlxs_sli4_zero_queue_stat()
8086 hba->sli.sli4.eq[i].max_proc = 0; in emlxs_sli4_zero_queue_stat()
8087 hba->sli.sli4.eq[i].isr_count = 0; in emlxs_sli4_zero_queue_stat()
8089 num_wq = cfg[CFG_NUM_WQ].current * hba->intr_count; in emlxs_sli4_zero_queue_stat()
8092 hba->sli.sli4.cq[i].num_proc = 0; in emlxs_sli4_zero_queue_stat()
8093 hba->sli.sli4.cq[i].max_proc = 0; in emlxs_sli4_zero_queue_stat()
8094 hba->sli.sli4.cq[i].isr_count = 0; in emlxs_sli4_zero_queue_stat()
8098 hba->sli.sli4.wq[i].num_proc = 0; in emlxs_sli4_zero_queue_stat()
8099 hba->sli.sli4.wq[i].num_busy = 0; in emlxs_sli4_zero_queue_stat()
8103 hba->sli.sli4.rq[i].num_proc = 0; in emlxs_sli4_zero_queue_stat()
8106 hba->sli.sli4.que_stat_timer = (uint32_t)time; in emlxs_sli4_zero_queue_stat()
8115 emlxs_hba_t *hba = HBA; in emlxs_sli4_reserve_xri() local
8121 xrip = hba->sli.sli4.XRIfree_f; in emlxs_sli4_reserve_xri()
8123 if (xrip == (XRIobj_t *)&hba->sli.sli4.XRIfree_f) { in emlxs_sli4_reserve_xri()
8136 ((hba->fc_table[iotag] != NULL) && in emlxs_sli4_reserve_xri()
8137 (hba->fc_table[iotag] != STALE_PACKET))) { in emlxs_sli4_reserve_xri()
8163 hba->sli.sli4.xrif_count--; in emlxs_sli4_reserve_xri()
8166 xrip->_b = hba->sli.sli4.XRIinuse_b; in emlxs_sli4_reserve_xri()
8167 hba->sli.sli4.XRIinuse_b->_f = xrip; in emlxs_sli4_reserve_xri()
8168 xrip->_f = (XRIobj_t *)&hba->sli.sli4.XRIinuse_f; in emlxs_sli4_reserve_xri()
8169 hba->sli.sli4.XRIinuse_b = xrip; in emlxs_sli4_reserve_xri()
8170 hba->sli.sli4.xria_count++; in emlxs_sli4_reserve_xri()
8181 emlxs_hba_t *hba = HBA; in emlxs_sli4_unreserve_xri() local
8217 (hba->fc_table[xrip->iotag] != NULL) && in emlxs_sli4_unreserve_xri()
8218 (hba->fc_table[xrip->iotag] != STALE_PACKET)) { in emlxs_sli4_unreserve_xri()
8221 xrip->XRI, hba->fc_table[xrip->iotag], xrip->type); in emlxs_sli4_unreserve_xri()
8223 hba->fc_table[xrip->iotag] = NULL; in emlxs_sli4_unreserve_xri()
8224 hba->io_count--; in emlxs_sli4_unreserve_xri()
8249 hba->sli.sli4.xria_count--; in emlxs_sli4_unreserve_xri()
8252 xrip->_b = hba->sli.sli4.XRIfree_b; in emlxs_sli4_unreserve_xri()
8253 hba->sli.sli4.XRIfree_b->_f = xrip; in emlxs_sli4_unreserve_xri()
8254 xrip->_f = (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_unreserve_xri()
8255 hba->sli.sli4.XRIfree_b = xrip; in emlxs_sli4_unreserve_xri()
8256 hba->sli.sli4.xrif_count++; in emlxs_sli4_unreserve_xri()
8271 emlxs_hba_t *hba = HBA; in emlxs_sli4_register_xri() local
8307 ((hba->fc_table[iotag] != NULL) && in emlxs_sli4_register_xri()
8308 (hba->fc_table[iotag] != STALE_PACKET))) { in emlxs_sli4_register_xri()
8313 xrip->XRI, iotag, hba->fc_table[iotag]); in emlxs_sli4_register_xri()
8319 hba->fc_table[iotag] = sbp; in emlxs_sli4_register_xri()
8320 hba->io_count++; in emlxs_sli4_register_xri()
8354 emlxs_hba_t *hba = HBA; in emlxs_sli4_alloc_xri() local
8360 xrip = hba->sli.sli4.XRIfree_f; in emlxs_sli4_alloc_xri()
8362 if (xrip == (XRIobj_t *)&hba->sli.sli4.XRIfree_f) { in emlxs_sli4_alloc_xri()
8372 ((hba->fc_table[iotag] != NULL) && in emlxs_sli4_alloc_xri()
8373 (hba->fc_table[iotag] != STALE_PACKET))) { in emlxs_sli4_alloc_xri()
8379 iotag, hba->fc_table[iotag], type); in emlxs_sli4_alloc_xri()
8385 hba->fc_table[iotag] = sbp; in emlxs_sli4_alloc_xri()
8386 hba->io_count++; in emlxs_sli4_alloc_xri()
8404 hba->sli.sli4.xrif_count--; in emlxs_sli4_alloc_xri()
8407 xrip->_b = hba->sli.sli4.XRIinuse_b; in emlxs_sli4_alloc_xri()
8408 hba->sli.sli4.XRIinuse_b->_f = xrip; in emlxs_sli4_alloc_xri()
8409 xrip->_f = (XRIobj_t *)&hba->sli.sli4.XRIinuse_f; in emlxs_sli4_alloc_xri()
8410 hba->sli.sli4.XRIinuse_b = xrip; in emlxs_sli4_alloc_xri()
8411 hba->sli.sli4.xria_count++; in emlxs_sli4_alloc_xri()
8424 emlxs_hba_t *hba = HBA; in emlxs_sli4_find_xri() local
8427 xrip = (XRIobj_t *)hba->sli.sli4.XRIinuse_f; in emlxs_sli4_find_xri()
8428 while (xrip != (XRIobj_t *)&hba->sli.sli4.XRIinuse_f) { in emlxs_sli4_find_xri()
8450 emlxs_hba_t *hba = HBA; in emlxs_sli4_free_xri() local
8472 (hba->fc_table[xrip->iotag] != NULL) && in emlxs_sli4_free_xri()
8473 (hba->fc_table[xrip->iotag] != STALE_PACKET)) { in emlxs_sli4_free_xri()
8474 hba->fc_table[xrip->iotag] = NULL; in emlxs_sli4_free_xri()
8475 hba->io_count--; in emlxs_sli4_free_xri()
8497 hba->sli.sli4.xria_count--; in emlxs_sli4_free_xri()
8500 xrip->_b = hba->sli.sli4.XRIfree_b; in emlxs_sli4_free_xri()
8501 hba->sli.sli4.XRIfree_b->_f = xrip; in emlxs_sli4_free_xri()
8502 xrip->_f = (XRIobj_t *)&hba->sli.sli4.XRIfree_f; in emlxs_sli4_free_xri()
8503 hba->sli.sli4.XRIfree_b = xrip; in emlxs_sli4_free_xri()
8504 hba->sli.sli4.xrif_count++; in emlxs_sli4_free_xri()
8527 if (sbp == hba->fc_table[sbp->iotag]) { in emlxs_sli4_free_xri()
8528 hba->fc_table[sbp->iotag] = NULL; in emlxs_sli4_free_xri()
8529 hba->io_count--; in emlxs_sli4_free_xri()
8552 hba->channel_tx_count--; in emlxs_sli4_free_xri()
8570 emlxs_sli4_post_sgl_pages(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli4_post_sgl_pages() argument
8588 if ((mp = emlxs_mem_buf_alloc(hba, EMLXS_MAX_NONEMBED_SIZE)) == 0) { in emlxs_sli4_post_sgl_pages()
8607 xrip = hba->sli.sli4.XRIp; in emlxs_sli4_post_sgl_pages()
8610 for (j = 0; j < hba->sli.sli4.XRIExtCount; j++) { in emlxs_sli4_post_sgl_pages()
8611 cnt = hba->sli.sli4.XRIExtSize; in emlxs_sli4_post_sgl_pages()
8656 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_post_sgl_pages()
8664 emlxs_mem_buf_free(hba, mp); in emlxs_sli4_post_sgl_pages()
8671 emlxs_mem_buf_free(hba, mp); in emlxs_sli4_post_sgl_pages()
8679 emlxs_sli4_post_hdr_tmplates(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli4_post_hdr_tmplates() argument
8689 if (!(hba->sli.sli4.param.HDRR)) { in emlxs_sli4_post_hdr_tmplates()
8694 j = hba->sli.sli4.RPIExtSize * sizeof (RPIHdrTmplate_t); in emlxs_sli4_post_hdr_tmplates()
8699 addr = hba->sli.sli4.HeaderTmplate.phys; in emlxs_sli4_post_hdr_tmplates()
8702 for (j = 0; j < hba->sli.sli4.RPIExtCount; j++) { in emlxs_sli4_post_hdr_tmplates()
8728 post_hdr->params.request.rpi_offset = hba->sli.sli4.RPIBase[j]; in emlxs_sli4_post_hdr_tmplates()
8738 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_post_hdr_tmplates()
8755 emlxs_sli4_create_queues(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli4_create_queues() argument
8780 for (i = 0; i < hba->intr_count; i++) { in emlxs_sli4_create_queues()
8781 emlxs_mb_eq_create(hba, mbq, i); in emlxs_sli4_create_queues()
8782 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_create_queues()
8790 hba->sli.sli4.eq[i].qid = eq->params.response.EQId; in emlxs_sli4_create_queues()
8791 hba->sli.sli4.eq[i].lastwq = total_wq; in emlxs_sli4_create_queues()
8792 hba->sli.sli4.eq[i].msix_vector = i; in emlxs_sli4_create_queues()
8807 hba->sli.sli4.cq[total_cq].eqid = in emlxs_sli4_create_queues()
8808 hba->sli.sli4.eq[i].qid; in emlxs_sli4_create_queues()
8810 emlxs_mb_cq_create(hba, mbq, total_cq); in emlxs_sli4_create_queues()
8811 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_create_queues()
8816 total_cq, hba, mb->mbxCommand, in emlxs_sli4_create_queues()
8822 hba->sli.sli4.cq[total_cq].qid = in emlxs_sli4_create_queues()
8828 hba->sli.sli4.cq[total_cq].type = in emlxs_sli4_create_queues()
8834 hba->sli.sli4.cq[total_cq].type = in emlxs_sli4_create_queues()
8840 hba->sli.sli4.cq[total_cq].type = in emlxs_sli4_create_queues()
8842 hba->sli.sli4.cq[total_cq].channelp = in emlxs_sli4_create_queues()
8843 &hba->chan[total_cq - EMLXS_CQ_OFFSET_WQ]; in emlxs_sli4_create_queues()
8846 hba->sli.sli4.cq[total_cq].qe_valid = 1; in emlxs_sli4_create_queues()
8857 hba->sli.sli4.wq[total_wq].cqid = in emlxs_sli4_create_queues()
8858 hba->sli.sli4.cq[total_wq + EMLXS_CQ_OFFSET_WQ].qid; in emlxs_sli4_create_queues()
8860 emlxs_mb_wq_create(hba, mbq, total_wq); in emlxs_sli4_create_queues()
8861 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_create_queues()
8871 hba->sli.sli4.wq[total_wq].qid = in emlxs_sli4_create_queues()
8874 hba->sli.sli4.wq[total_wq].cqid = in emlxs_sli4_create_queues()
8875 hba->sli.sli4.cq[total_wq+EMLXS_CQ_OFFSET_WQ].qid; in emlxs_sli4_create_queues()
8880 hba->last_msiid = i; in emlxs_sli4_create_queues()
8889 hba->sli.sli4.rq[i].cqid = in emlxs_sli4_create_queues()
8890 hba->sli.sli4.cq[EMLXS_CQ_RCV].qid; in emlxs_sli4_create_queues()
8893 hba->sli.sli4.rq[i].cqid = in emlxs_sli4_create_queues()
8894 hba->sli.sli4.cq[EMLXS_CQ_RCV].qid; in emlxs_sli4_create_queues()
8897 hba->sli.sli4.rq[i].cqid = 0xffff; in emlxs_sli4_create_queues()
8903 emlxs_mb_rq_create(hba, mbq, i); in emlxs_sli4_create_queues()
8904 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_create_queues()
8913 hba->sli.sli4.rq[i].qid = rq->params.response.RQId; in emlxs_sli4_create_queues()
8918 i, hba->sli.sli4.rq[i].qid, hba->sli.sli4.rq[i].cqid); in emlxs_sli4_create_queues()
8921 hba->sli.sli4.rq[i].host_index = 0; in emlxs_sli4_create_queues()
8928 emlxs_sli4_write_rqdb(hba, hba->sli.sli4.rq[i-1].qid, in emlxs_sli4_create_queues()
8933 hba->sli.sli4.rq[i-1].qid, RQB_COUNT); in emlxs_sli4_create_queues()
8940 hba->sli.sli4.mq.cqid = hba->sli.sli4.cq[EMLXS_CQ_MBOX].qid; in emlxs_sli4_create_queues()
8945 emlxs_mb_mq_create_ext(hba, mbq); in emlxs_sli4_create_queues()
8946 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_create_queues()
8955 emlxs_mb_mq_create(hba, mbq); in emlxs_sli4_create_queues()
8956 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli4_create_queues()
8965 hba->sli.sli4.mq.qid = mq->params.response.MQId; in emlxs_sli4_create_queues()
8970 hba->sli.sli4.mq.qid = mq_ext->params.response.MQId; in emlxs_sli4_create_queues()
8977 emlxs_sli4_timer(emlxs_hba_t *hba) in emlxs_sli4_timer() argument
8981 emlxs_fcf_timer_notify(hba); in emlxs_sli4_timer()
8983 emlxs_sli4_timer_check_mbox(hba); in emlxs_sli4_timer()
8991 emlxs_sli4_timer_check_mbox(emlxs_hba_t *hba) in emlxs_sli4_timer_check_mbox() argument
9004 if (!hba->mbox_timer || (hba->timer_tics < hba->mbox_timer)) { in emlxs_sli4_timer_check_mbox()
9010 hba->mbox_timer = 0; in emlxs_sli4_timer_check_mbox()
9012 if (hba->mbox_queue_flag) { in emlxs_sli4_timer_check_mbox()
9013 if (hba->mbox_mbq) { in emlxs_sli4_timer_check_mbox()
9014 mb = (MAILBOX *)hba->mbox_mbq; in emlxs_sli4_timer_check_mbox()
9019 switch (hba->mbox_queue_flag) { in emlxs_sli4_timer_check_mbox()
9044 mb, hba->mbox_queue_flag); in emlxs_sli4_timer_check_mbox()
9051 hba->flag |= FC_MBOX_TIMEOUT; in emlxs_sli4_timer_check_mbox()
9052 EMLXS_STATE_CHANGE_LOCKED(hba, FC_ERROR); in emlxs_sli4_timer_check_mbox()
9058 emlxs_mb_fini(hba, NULL, MBX_TIMEOUT); in emlxs_sli4_timer_check_mbox()
9061 emlxs_thread_spawn(hba, emlxs_shutdown_thread, 0, 0); in emlxs_sli4_timer_check_mbox()
9068 emlxs_sli4_gpio_timer_start(emlxs_hba_t *hba) in emlxs_sli4_gpio_timer_start() argument
9070 mutex_enter(&hba->gpio_lock); in emlxs_sli4_gpio_timer_start()
9072 if (!hba->gpio_timer) { in emlxs_sli4_gpio_timer_start()
9073 hba->gpio_timer = timeout(emlxs_sli4_gpio_timer, (void *)hba, in emlxs_sli4_gpio_timer_start()
9077 mutex_exit(&hba->gpio_lock); in emlxs_sli4_gpio_timer_start()
9082 emlxs_sli4_gpio_timer_stop(emlxs_hba_t *hba) in emlxs_sli4_gpio_timer_stop() argument
9084 mutex_enter(&hba->gpio_lock); in emlxs_sli4_gpio_timer_stop()
9086 if (hba->gpio_timer) { in emlxs_sli4_gpio_timer_stop()
9087 (void) untimeout(hba->gpio_timer); in emlxs_sli4_gpio_timer_stop()
9088 hba->gpio_timer = 0; in emlxs_sli4_gpio_timer_stop()
9091 mutex_exit(&hba->gpio_lock); in emlxs_sli4_gpio_timer_stop()
9099 emlxs_hba_t *hba = (emlxs_hba_t *)arg; in emlxs_sli4_gpio_timer() local
9101 mutex_enter(&hba->gpio_lock); in emlxs_sli4_gpio_timer()
9103 if (hba->gpio_timer) { in emlxs_sli4_gpio_timer()
9104 emlxs_sli4_check_gpio(hba); in emlxs_sli4_gpio_timer()
9105 hba->gpio_timer = timeout(emlxs_sli4_gpio_timer, (void *)hba, in emlxs_sli4_gpio_timer()
9109 mutex_exit(&hba->gpio_lock); in emlxs_sli4_gpio_timer()
9113 emlxs_sli4_check_gpio(emlxs_hba_t *hba) in emlxs_sli4_check_gpio() argument
9115 hba->gpio_desired = 0; in emlxs_sli4_check_gpio()
9117 if (hba->flag & FC_GPIO_LINK_UP) { in emlxs_sli4_check_gpio()
9118 if (hba->io_active) in emlxs_sli4_check_gpio()
9119 hba->gpio_desired |= EMLXS_GPIO_ACT; in emlxs_sli4_check_gpio()
9123 switch (hba->linkspeed) { in emlxs_sli4_check_gpio()
9125 hba->gpio_desired |= EMLXS_GPIO_LO; in emlxs_sli4_check_gpio()
9129 hba->gpio_desired |= EMLXS_GPIO_HI; in emlxs_sli4_check_gpio()
9133 hba->gpio_desired |= in emlxs_sli4_check_gpio()
9139 if (hba->gpio_current != hba->gpio_desired) { in emlxs_sli4_check_gpio()
9146 if (!emlxs_sli4_fix_gpio(hba, &pin, &pinval)) in emlxs_sli4_check_gpio()
9149 if ((mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX)) == NULL) { in emlxs_sli4_check_gpio()
9153 hba->gpio_bit = 0; in emlxs_sli4_check_gpio()
9157 emlxs_mb_gpio_write(hba, mbq, pin, pinval); in emlxs_sli4_check_gpio()
9160 rval = emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli4_check_gpio()
9166 hba->gpio_bit = 0; in emlxs_sli4_check_gpio()
9167 emlxs_mem_put(hba, MEM_MBOX, mbq); in emlxs_sli4_check_gpio()
9174 emlxs_sli4_fix_gpio(emlxs_hba_t *hba, uint8_t *pin, uint8_t *pinval) in emlxs_sli4_fix_gpio() argument
9176 uint8_t dif = hba->gpio_desired ^ hba->gpio_current; in emlxs_sli4_fix_gpio()
9182 if (dif == 0 || hba->gpio_bit) in emlxs_sli4_fix_gpio()
9188 hba->gpio_bit = bit; in emlxs_sli4_fix_gpio()
9189 dif = hba->gpio_current ^ bit; in emlxs_sli4_fix_gpio()
9198 *pin = hba->gpio_pin[i]; in emlxs_sli4_fix_gpio()
9205 emlxs_sli4_fix_gpio_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli4_fix_gpio_mbcmpl() argument
9213 mutex_enter(&hba->gpio_lock); in emlxs_sli4_fix_gpio_mbcmpl()
9216 hba->gpio_current ^= hba->gpio_bit; in emlxs_sli4_fix_gpio_mbcmpl()
9218 hba->gpio_bit = 0; in emlxs_sli4_fix_gpio_mbcmpl()
9220 if (emlxs_sli4_fix_gpio(hba, &pin, &pinval)) { in emlxs_sli4_fix_gpio_mbcmpl()
9232 if ((mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX)) == NULL) { in emlxs_sli4_fix_gpio_mbcmpl()
9236 hba->gpio_bit = 0; in emlxs_sli4_fix_gpio_mbcmpl()
9240 emlxs_mb_gpio_write(hba, mbq, pin, pinval); in emlxs_sli4_fix_gpio_mbcmpl()
9243 rval = emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli4_fix_gpio_mbcmpl()
9249 hba->gpio_bit = 0; in emlxs_sli4_fix_gpio_mbcmpl()
9250 emlxs_mem_put(hba, MEM_MBOX, mbq); in emlxs_sli4_fix_gpio_mbcmpl()
9256 mutex_exit(&hba->gpio_lock); in emlxs_sli4_fix_gpio_mbcmpl()
9316 emlxs_ue_dump(emlxs_hba_t *hba, char *str) in emlxs_ue_dump() argument
9325 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_ue_dump()
9327 ue_l = ddi_get32(hba->pci_acc_handle, in emlxs_ue_dump()
9328 hba->sli.sli4.ERR1_reg_addr); in emlxs_ue_dump()
9329 ue_h = ddi_get32(hba->pci_acc_handle, in emlxs_ue_dump()
9330 hba->sli.sli4.ERR2_reg_addr); in emlxs_ue_dump()
9332 on1 = ddi_get32(hba->pci_acc_handle, in emlxs_ue_dump()
9333 (uint32_t *)(hba->pci_addr + PCICFG_UE_STATUS_ONLINE1)); in emlxs_ue_dump()
9334 on2 = ddi_get32(hba->pci_acc_handle, in emlxs_ue_dump()
9335 (uint32_t *)(hba->pci_addr + PCICFG_UE_STATUS_ONLINE2)); in emlxs_ue_dump()
9344 status = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_ue_dump()
9345 hba->sli.sli4.STATUS_reg_addr); in emlxs_ue_dump()
9347 ue_l = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_ue_dump()
9348 hba->sli.sli4.ERR1_reg_addr); in emlxs_ue_dump()
9349 ue_h = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_ue_dump()
9350 hba->sli.sli4.ERR2_reg_addr); in emlxs_ue_dump()
9361 EMLXS_CHK_ACC_HANDLE(hba, hba->pci_acc_handle); in emlxs_ue_dump()
9368 emlxs_sli4_poll_erratt(emlxs_hba_t *hba) in emlxs_sli4_poll_erratt() argument
9376 if (hba->flag & FC_HARDWARE_ERROR) { in emlxs_sli4_poll_erratt()
9380 switch (hba->sli_intf & SLI_INTF_IF_TYPE_MASK) { in emlxs_sli4_poll_erratt()
9382 ue_l = ddi_get32(hba->pci_acc_handle, in emlxs_sli4_poll_erratt()
9383 hba->sli.sli4.ERR1_reg_addr); in emlxs_sli4_poll_erratt()
9384 ue_h = ddi_get32(hba->pci_acc_handle, in emlxs_sli4_poll_erratt()
9385 hba->sli.sli4.ERR2_reg_addr); in emlxs_sli4_poll_erratt()
9387 if ((~hba->sli.sli4.ue_mask_lo & ue_l) || in emlxs_sli4_poll_erratt()
9388 (~hba->sli.sli4.ue_mask_hi & ue_h) || in emlxs_sli4_poll_erratt()
9389 (hba->sli.sli4.flag & EMLXS_SLI4_HW_ERROR)) { in emlxs_sli4_poll_erratt()
9393 ue_l, ue_h, hba->sli.sli4.ue_mask_lo, in emlxs_sli4_poll_erratt()
9394 hba->sli.sli4.ue_mask_hi, hba->sli.sli4.flag); in emlxs_sli4_poll_erratt()
9402 status = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_poll_erratt()
9403 hba->sli.sli4.STATUS_reg_addr); in emlxs_sli4_poll_erratt()
9406 (hba->sli.sli4.flag & EMLXS_SLI4_HW_ERROR)) { in emlxs_sli4_poll_erratt()
9407 ue_l = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_poll_erratt()
9408 hba->sli.sli4.ERR1_reg_addr); in emlxs_sli4_poll_erratt()
9409 ue_h = ddi_get32(hba->sli.sli4.bar0_acc_handle, in emlxs_sli4_poll_erratt()
9410 hba->sli.sli4.ERR2_reg_addr); in emlxs_sli4_poll_erratt()
9418 status, ue_l, ue_h, hba->sli.sli4.flag); in emlxs_sli4_poll_erratt()
9424 status, ue_l, ue_h, hba->sli.sli4.flag); in emlxs_sli4_poll_erratt()
9431 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_poll_erratt()
9433 emlxs_sli4_hba_flush_chipq(hba); in emlxs_sli4_poll_erratt()
9435 emlxs_thread_spawn(hba, emlxs_shutdown_thread, 0, 0); in emlxs_sli4_poll_erratt()
9438 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli4_poll_erratt()
9440 emlxs_sli4_hba_flush_chipq(hba); in emlxs_sli4_poll_erratt()
9442 emlxs_thread_spawn(hba, emlxs_restart_thread, 0, 0); in emlxs_sli4_poll_erratt()
9447 EMLXS_CHK_ACC_HANDLE(hba, hba->pci_acc_handle); in emlxs_sli4_poll_erratt()
9457 emlxs_hba_t *hba = HBA; in emlxs_sli4_reg_did() local
9463 if ((did == 0) && (!(hba->flag & FC_LOOPBACK_MODE))) { in emlxs_sli4_reg_did()
9472 if ((did == port->did) && (!(hba->flag & FC_LOOPBACK_MODE))) { in emlxs_sli4_reg_did()
9477 if ((rval = emlxs_mb_check_sparm(hba, param))) { in emlxs_sli4_reg_did()
9487 if (port->node_count >= hba->max_nodes) { in emlxs_sli4_reg_did()
9616 emlxs_sli4_handle_fcoe_link_event(emlxs_hba_t *hba, CQE_ASYNC_t *cqe) in emlxs_sli4_handle_fcoe_link_event() argument
9626 hba->sli.sli4.flag &= ~EMLXS_SLI4_DOWN_LINK; in emlxs_sli4_handle_fcoe_link_event()
9636 hba->linkspeed = LA_1GHZ_LINK; in emlxs_sli4_handle_fcoe_link_event()
9639 hba->linkspeed = LA_10GHZ_LINK; in emlxs_sli4_handle_fcoe_link_event()
9645 hba->linkspeed = 0; in emlxs_sli4_handle_fcoe_link_event()
9650 hba->qos_linkspeed = cqe->un.link.qos_link_speed; in emlxs_sli4_handle_fcoe_link_event()
9653 hba->topology = TOPOLOGY_PT_PT; in emlxs_sli4_handle_fcoe_link_event()
9656 hba->sli.sli4.flag &= ~EMLXS_SLI4_DOWN_LINK; in emlxs_sli4_handle_fcoe_link_event()
9667 emlxs_sli4_handle_fc_link_att(emlxs_hba_t *hba, CQE_ASYNC_t *cqe) in emlxs_sli4_handle_fc_link_att() argument
9676 hba->sli.sli4.flag &= ~EMLXS_SLI4_DOWN_LINK; in emlxs_sli4_handle_fc_link_att()
9686 hba->linkspeed = LA_1GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9689 hba->linkspeed = LA_2GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9692 hba->linkspeed = LA_4GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9695 hba->linkspeed = LA_8GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9698 hba->linkspeed = LA_10GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9701 hba->linkspeed = LA_16GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9704 hba->linkspeed = LA_32GHZ_LINK; in emlxs_sli4_handle_fc_link_att()
9710 hba->linkspeed = 0; in emlxs_sli4_handle_fc_link_att()
9715 hba->qos_linkspeed = cqe->un.fc.link_speed; in emlxs_sli4_handle_fc_link_att()
9718 hba->topology = cqe->un.fc.topology; in emlxs_sli4_handle_fc_link_att()
9721 hba->sli.sli4.flag &= ~EMLXS_SLI4_DOWN_LINK; in emlxs_sli4_handle_fc_link_att()
9732 emlxs_sli4_init_extents(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli4_init_extents() argument
9740 if (!(hba->sli.sli4.param.EXT)) { in emlxs_sli4_init_extents()
9748 emlxs_mb_get_extents_info(hba, mbq, RSC_TYPE_FCOE_XRI); in emlxs_sli4_init_extents()
9750 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9759 hba->sli.sli4.XRIExtSize = ep->params.response.ExtentSize; in emlxs_sli4_init_extents()
9764 emlxs_mb_alloc_extents(hba, mbq, RSC_TYPE_FCOE_XRI, ExtentCnt); in emlxs_sli4_init_extents()
9766 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9776 (uint8_t *)hba->sli.sli4.XRIBase, in emlxs_sli4_init_extents()
9779 hba->sli.sli4.XRIExtCount = ep->params.response.ExtentCnt; in emlxs_sli4_init_extents()
9780 hba->sli.sli4.XRICount = hba->sli.sli4.XRIExtCount * in emlxs_sli4_init_extents()
9781 hba->sli.sli4.XRIExtSize; in emlxs_sli4_init_extents()
9785 hba->sli.sli4.XRIExtSize, in emlxs_sli4_init_extents()
9786 hba->sli.sli4.XRIExtCount, ExtentCnt); in emlxs_sli4_init_extents()
9791 hba->sli.sli4.XRIBase[i], in emlxs_sli4_init_extents()
9792 hba->sli.sli4.XRIBase[i+1], in emlxs_sli4_init_extents()
9793 hba->sli.sli4.XRIBase[i+2], in emlxs_sli4_init_extents()
9794 hba->sli.sli4.XRIBase[i+3]); in emlxs_sli4_init_extents()
9800 emlxs_mb_get_extents_info(hba, mbq, RSC_TYPE_FCOE_RPI); in emlxs_sli4_init_extents()
9802 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9811 hba->sli.sli4.RPIExtSize = ep->params.response.ExtentSize; in emlxs_sli4_init_extents()
9816 emlxs_mb_alloc_extents(hba, mbq, RSC_TYPE_FCOE_RPI, ExtentCnt); in emlxs_sli4_init_extents()
9818 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9828 (uint8_t *)hba->sli.sli4.RPIBase, in emlxs_sli4_init_extents()
9831 hba->sli.sli4.RPIExtCount = ep->params.response.ExtentCnt; in emlxs_sli4_init_extents()
9832 hba->sli.sli4.RPICount = hba->sli.sli4.RPIExtCount * in emlxs_sli4_init_extents()
9833 hba->sli.sli4.RPIExtSize; in emlxs_sli4_init_extents()
9837 hba->sli.sli4.RPIExtSize, in emlxs_sli4_init_extents()
9838 hba->sli.sli4.RPIExtCount, ExtentCnt); in emlxs_sli4_init_extents()
9843 hba->sli.sli4.RPIBase[i], in emlxs_sli4_init_extents()
9844 hba->sli.sli4.RPIBase[i+1], in emlxs_sli4_init_extents()
9845 hba->sli.sli4.RPIBase[i+2], in emlxs_sli4_init_extents()
9846 hba->sli.sli4.RPIBase[i+3]); in emlxs_sli4_init_extents()
9852 emlxs_mb_get_extents_info(hba, mbq, RSC_TYPE_FCOE_VPI); in emlxs_sli4_init_extents()
9854 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9863 hba->sli.sli4.VPIExtSize = ep->params.response.ExtentSize; in emlxs_sli4_init_extents()
9868 emlxs_mb_alloc_extents(hba, mbq, RSC_TYPE_FCOE_VPI, ExtentCnt); in emlxs_sli4_init_extents()
9870 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9880 (uint8_t *)hba->sli.sli4.VPIBase, in emlxs_sli4_init_extents()
9883 hba->sli.sli4.VPIExtCount = ep->params.response.ExtentCnt; in emlxs_sli4_init_extents()
9884 hba->sli.sli4.VPICount = hba->sli.sli4.VPIExtCount * in emlxs_sli4_init_extents()
9885 hba->sli.sli4.VPIExtSize; in emlxs_sli4_init_extents()
9889 hba->sli.sli4.VPIExtSize, in emlxs_sli4_init_extents()
9890 hba->sli.sli4.VPIExtCount, ExtentCnt); in emlxs_sli4_init_extents()
9895 hba->sli.sli4.VPIBase[i], in emlxs_sli4_init_extents()
9896 hba->sli.sli4.VPIBase[i+1], in emlxs_sli4_init_extents()
9897 hba->sli.sli4.VPIBase[i+2], in emlxs_sli4_init_extents()
9898 hba->sli.sli4.VPIBase[i+3]); in emlxs_sli4_init_extents()
9903 emlxs_mb_get_extents_info(hba, mbq, RSC_TYPE_FCOE_VFI); in emlxs_sli4_init_extents()
9905 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9914 hba->sli.sli4.VFIExtSize = ep->params.response.ExtentSize; in emlxs_sli4_init_extents()
9919 emlxs_mb_alloc_extents(hba, mbq, RSC_TYPE_FCOE_VFI, ExtentCnt); in emlxs_sli4_init_extents()
9921 if (emlxs_sli4_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli4_init_extents()
9931 (uint8_t *)hba->sli.sli4.VFIBase, in emlxs_sli4_init_extents()
9934 hba->sli.sli4.VFIExtCount = ep->params.response.ExtentCnt; in emlxs_sli4_init_extents()
9935 hba->sli.sli4.VFICount = hba->sli.sli4.VFIExtCount * in emlxs_sli4_init_extents()
9936 hba->sli.sli4.VFIExtSize; in emlxs_sli4_init_extents()
9940 hba->sli.sli4.VFIExtSize, in emlxs_sli4_init_extents()
9941 hba->sli.sli4.VFIExtCount, ExtentCnt); in emlxs_sli4_init_extents()
9946 hba->sli.sli4.VFIBase[i], in emlxs_sli4_init_extents()
9947 hba->sli.sli4.VFIBase[i+1], in emlxs_sli4_init_extents()
9948 hba->sli.sli4.VFIBase[i+2], in emlxs_sli4_init_extents()
9949 hba->sli.sli4.VFIBase[i+3]); in emlxs_sli4_init_extents()
9958 emlxs_sli4_index_to_rpi(emlxs_hba_t *hba, uint32_t index) in emlxs_sli4_index_to_rpi() argument
9964 i = index / hba->sli.sli4.RPIExtSize; in emlxs_sli4_index_to_rpi()
9965 j = index % hba->sli.sli4.RPIExtSize; in emlxs_sli4_index_to_rpi()
9966 rpi = hba->sli.sli4.RPIBase[i] + j; in emlxs_sli4_index_to_rpi()
9974 emlxs_sli4_rpi_to_index(emlxs_hba_t *hba, uint32_t rpi) in emlxs_sli4_rpi_to_index() argument
9979 uint32_t index = hba->sli.sli4.RPICount; in emlxs_sli4_rpi_to_index()
9981 for (i = 0; i < hba->sli.sli4.RPIExtCount; i++) { in emlxs_sli4_rpi_to_index()
9982 lo = hba->sli.sli4.RPIBase[i]; in emlxs_sli4_rpi_to_index()
9983 hi = lo + hba->sli.sli4.RPIExtSize; in emlxs_sli4_rpi_to_index()
9986 index = (i * hba->sli.sli4.RPIExtSize) + (rpi - lo); in emlxs_sli4_rpi_to_index()
9997 emlxs_sli4_index_to_xri(emlxs_hba_t *hba, uint32_t index) in emlxs_sli4_index_to_xri() argument
10003 i = index / hba->sli.sli4.XRIExtSize; in emlxs_sli4_index_to_xri()
10004 j = index % hba->sli.sli4.XRIExtSize; in emlxs_sli4_index_to_xri()
10005 xri = hba->sli.sli4.XRIBase[i] + j; in emlxs_sli4_index_to_xri()
10015 emlxs_sli4_index_to_vpi(emlxs_hba_t *hba, uint32_t index) in emlxs_sli4_index_to_vpi() argument
10021 i = index / hba->sli.sli4.VPIExtSize; in emlxs_sli4_index_to_vpi()
10022 j = index % hba->sli.sli4.VPIExtSize; in emlxs_sli4_index_to_vpi()
10023 vpi = hba->sli.sli4.VPIBase[i] + j; in emlxs_sli4_index_to_vpi()
10031 emlxs_sli4_vpi_to_index(emlxs_hba_t *hba, uint32_t vpi) in emlxs_sli4_vpi_to_index() argument
10036 uint32_t index = hba->sli.sli4.VPICount; in emlxs_sli4_vpi_to_index()
10038 for (i = 0; i < hba->sli.sli4.VPIExtCount; i++) { in emlxs_sli4_vpi_to_index()
10039 lo = hba->sli.sli4.VPIBase[i]; in emlxs_sli4_vpi_to_index()
10040 hi = lo + hba->sli.sli4.VPIExtSize; in emlxs_sli4_vpi_to_index()
10043 index = (i * hba->sli.sli4.VPIExtSize) + (vpi - lo); in emlxs_sli4_vpi_to_index()
10056 emlxs_sli4_index_to_vfi(emlxs_hba_t *hba, uint32_t index) in emlxs_sli4_index_to_vfi() argument
10062 i = index / hba->sli.sli4.VFIExtSize; in emlxs_sli4_index_to_vfi()
10063 j = index % hba->sli.sli4.VFIExtSize; in emlxs_sli4_index_to_vfi()
10064 vfi = hba->sli.sli4.VFIBase[i] + j; in emlxs_sli4_index_to_vfi()
10072 emlxs_sli4_rqid_to_index(emlxs_hba_t *hba, uint16_t rqid) in emlxs_sli4_rqid_to_index() argument
10078 if (hba->sli.sli4.rq[i].qid == rqid) { in emlxs_sli4_rqid_to_index()
10090 emlxs_sli4_wqid_to_index(emlxs_hba_t *hba, uint16_t wqid) in emlxs_sli4_wqid_to_index() argument
10096 if (hba->sli.sli4.wq[i].qid == wqid) { in emlxs_sli4_wqid_to_index()
10108 emlxs_sli4_cqid_to_index(emlxs_hba_t *hba, uint16_t cqid) in emlxs_sli4_cqid_to_index() argument
10114 if (hba->sli.sli4.cq[i].qid == cqid) { in emlxs_sli4_cqid_to_index()