Lines Matching refs:snic
80 snic_queue_report_tgt_req(struct snic *snic) in snic_queue_report_tgt_req() argument
88 rqi = snic_req_init(snic, 1); in snic_queue_report_tgt_req()
94 if (snic->fwinfo.max_tgts) in snic_queue_report_tgt_req()
95 ntgts = min_t(u32, snic->fwinfo.max_tgts, snic->shost->max_id); in snic_queue_report_tgt_req()
97 ntgts = snic->shost->max_id; in snic_queue_report_tgt_req()
105 snic_req_free(snic, rqi); in snic_queue_report_tgt_req()
106 SNIC_HOST_ERR(snic->shost, "Resp Buf Alloc Failed.\n"); in snic_queue_report_tgt_req()
114 pa = pci_map_single(snic->pdev, buf, buf_len, PCI_DMA_FROMDEVICE); in snic_queue_report_tgt_req()
115 if (pci_dma_mapping_error(snic->pdev, pa)) { in snic_queue_report_tgt_req()
117 snic_req_free(snic, rqi); in snic_queue_report_tgt_req()
118 SNIC_HOST_ERR(snic->shost, in snic_queue_report_tgt_req()
131 snic->config.hid, in snic_queue_report_tgt_req()
137 snic_handle_untagged_req(snic, rqi); in snic_queue_report_tgt_req()
139 ret = snic_queue_wq_desc(snic, rqi->req, rqi->req_len); in snic_queue_report_tgt_req()
141 pci_unmap_single(snic->pdev, pa, buf_len, PCI_DMA_FROMDEVICE); in snic_queue_report_tgt_req()
144 snic_release_untagged_req(snic, rqi); in snic_queue_report_tgt_req()
145 SNIC_HOST_ERR(snic->shost, "Queuing Report Tgts Failed.\n"); in snic_queue_report_tgt_req()
150 SNIC_DISC_DBG(snic->shost, "Report Targets Issued.\n"); in snic_queue_report_tgt_req()
155 SNIC_HOST_ERR(snic->shost, in snic_queue_report_tgt_req()
185 snic_tgt_lookup(struct snic *snic, struct snic_tgt_id *tgtid) in snic_tgt_lookup() argument
190 list_for_each_safe(cur, nxt, &snic->disc.tgt_list) { in snic_tgt_lookup()
248 snic_tgt_create(struct snic *snic, struct snic_tgt_id *tgtid) in snic_tgt_create() argument
254 tgt = snic_tgt_lookup(snic, tgtid); in snic_tgt_create()
262 SNIC_HOST_ERR(snic->shost, "Failure to allocate snic_tgt.\n"); in snic_tgt_create()
281 tgt->dev.parent = get_device(&snic->shost->shost_gendev); in snic_tgt_create()
288 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
293 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
297 SNIC_HOST_INFO(snic->shost, "Target type Unknown Detected.\n"); in snic_tgt_create()
299 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
303 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_create()
304 list_add_tail(&tgt->list, &snic->disc.tgt_list); in snic_tgt_create()
305 tgt->scsi_tgt_id = snic->disc.nxt_tgt_id++; in snic_tgt_create()
307 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_create()
309 SNIC_HOST_INFO(snic->shost, in snic_tgt_create()
315 SNIC_HOST_ERR(snic->shost, in snic_tgt_create()
319 put_device(&snic->shost->shost_gendev); in snic_tgt_create()
326 SNIC_HOST_INFO(snic->shost, "Scanning %s.\n", dev_name(&tgt->dev)); in snic_tgt_create()
328 scsi_queue_work(snic->shost, &tgt->scan_work); in snic_tgt_create()
337 struct snic *snic = container_of(work, struct snic, tgt_work); in snic_handle_tgt_disc() local
343 spin_lock_irqsave(&snic->snic_lock, flags); in snic_handle_tgt_disc()
344 if (snic->in_remove) { in snic_handle_tgt_disc()
345 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
346 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
350 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
352 mutex_lock(&snic->disc.mutex); in snic_handle_tgt_disc()
354 if (snic->disc.req_cnt) { in snic_handle_tgt_disc()
355 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
356 snic->disc.req_cnt = 0; in snic_handle_tgt_disc()
357 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
358 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
359 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
361 SNIC_HOST_INFO(snic->shost, "tgt_disc: Discovery restart.\n"); in snic_handle_tgt_disc()
363 snic_disc_start(snic); in snic_handle_tgt_disc()
368 tgtid = (struct snic_tgt_id *)snic->disc.rtgt_info; in snic_handle_tgt_disc()
370 SNIC_BUG_ON(snic->disc.rtgt_cnt == 0 || tgtid == NULL); in snic_handle_tgt_disc()
372 for (i = 0; i < snic->disc.rtgt_cnt; i++) { in snic_handle_tgt_disc()
373 tgt = snic_tgt_create(snic, &tgtid[i]); in snic_handle_tgt_disc()
375 int buf_sz = snic->disc.rtgt_cnt * sizeof(*tgtid); in snic_handle_tgt_disc()
377 SNIC_HOST_ERR(snic->shost, "Failed to create tgt.\n"); in snic_handle_tgt_disc()
383 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
384 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
385 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
387 SNIC_HOST_INFO(snic->shost, "Discovery Completed.\n"); in snic_handle_tgt_disc()
394 snic_report_tgt_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq) in snic_report_tgt_cmpl_handler() argument
410 SNIC_HOST_ERR(snic->shost, "No Targets Found on this host.\n"); in snic_report_tgt_cmpl_handler()
417 SNIC_HOST_INFO(snic->shost, "Target Count = %d\n", tgt_cnt); in snic_report_tgt_cmpl_handler()
419 SNIC_BUG_ON(tgt_cnt > snic->fwinfo.max_tgts); in snic_report_tgt_cmpl_handler()
422 SNIC_HOST_INFO(snic->shost, in snic_report_tgt_cmpl_handler()
430 snic->disc.rtgt_cnt = tgt_cnt; in snic_report_tgt_cmpl_handler()
431 snic->disc.rtgt_info = (u8 *) tgtid; in snic_report_tgt_cmpl_handler()
432 queue_work(snic_glob->event_q, &snic->tgt_work); in snic_report_tgt_cmpl_handler()
437 snic_pci_unmap_rsp_buf(snic, rqi); in snic_report_tgt_cmpl_handler()
442 snic_release_untagged_req(snic, rqi); in snic_report_tgt_cmpl_handler()
464 snic_disc_term(struct snic *snic) in snic_disc_term() argument
466 struct snic_disc *disc = &snic->disc; in snic_disc_term()
471 SNIC_SCSI_DBG(snic->shost, "Terminating Discovery.\n"); in snic_disc_term()
480 snic_disc_start(struct snic *snic) in snic_disc_start() argument
482 struct snic_disc *disc = &snic->disc; in snic_disc_start()
485 SNIC_SCSI_DBG(snic->shost, "Discovery Start.\n"); in snic_disc_start()
497 ret = snic_queue_report_tgt_req(snic); in snic_disc_start()
499 SNIC_HOST_INFO(snic->shost, "Discovery Failed, err=%d.\n", ret); in snic_disc_start()
510 struct snic *snic = container_of(work, struct snic, disc_work); in snic_handle_disc() local
513 SNIC_HOST_INFO(snic->shost, "disc_work: Discovery\n"); in snic_handle_disc()
515 ret = snic_disc_start(snic); in snic_handle_disc()
520 SNIC_HOST_ERR(snic->shost, in snic_handle_disc()
530 snic_tgt_del_all(struct snic *snic) in snic_tgt_del_all() argument
536 mutex_lock(&snic->disc.mutex); in snic_tgt_del_all()
537 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_del_all()
539 list_for_each_safe(cur, nxt, &snic->disc.tgt_list) { in snic_tgt_del_all()
543 SNIC_HOST_INFO(snic->shost, "Tgt %d q'ing for del\n", tgt->id); in snic_tgt_del_all()
547 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_del_all()
549 scsi_flush_work(snic->shost); in snic_tgt_del_all()
550 mutex_unlock(&snic->disc.mutex); in snic_tgt_del_all()