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 = dma_map_single(&snic->pdev->dev, buf, buf_len, DMA_FROM_DEVICE); in snic_queue_report_tgt_req()
115 if (dma_mapping_error(&snic->pdev->dev, pa)) { in snic_queue_report_tgt_req()
116 SNIC_HOST_ERR(snic->shost, in snic_queue_report_tgt_req()
120 snic_req_free(snic, rqi); 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 dma_unmap_single(&snic->pdev->dev, pa, buf_len, in snic_queue_report_tgt_req()
145 snic_release_untagged_req(snic, rqi); in snic_queue_report_tgt_req()
146 SNIC_HOST_ERR(snic->shost, "Queuing Report Tgts Failed.\n"); in snic_queue_report_tgt_req()
151 SNIC_DISC_DBG(snic->shost, "Report Targets Issued.\n"); in snic_queue_report_tgt_req()
156 SNIC_HOST_ERR(snic->shost, in snic_queue_report_tgt_req()
186 snic_tgt_lookup(struct snic *snic, struct snic_tgt_id *tgtid) in snic_tgt_lookup() argument
191 list_for_each_safe(cur, nxt, &snic->disc.tgt_list) { in snic_tgt_lookup()
249 snic_tgt_create(struct snic *snic, struct snic_tgt_id *tgtid) in snic_tgt_create() argument
255 tgt = snic_tgt_lookup(snic, tgtid); in snic_tgt_create()
263 SNIC_HOST_ERR(snic->shost, "Failure to allocate snic_tgt.\n"); in snic_tgt_create()
282 tgt->dev.parent = get_device(&snic->shost->shost_gendev); in snic_tgt_create()
289 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
294 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
298 SNIC_HOST_INFO(snic->shost, "Target type Unknown Detected.\n"); in snic_tgt_create()
300 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
304 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_create()
305 list_add_tail(&tgt->list, &snic->disc.tgt_list); in snic_tgt_create()
306 tgt->scsi_tgt_id = snic->disc.nxt_tgt_id++; in snic_tgt_create()
308 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_create()
310 SNIC_HOST_INFO(snic->shost, in snic_tgt_create()
316 SNIC_HOST_ERR(snic->shost, in snic_tgt_create()
320 put_device(&snic->shost->shost_gendev); in snic_tgt_create()
327 SNIC_HOST_INFO(snic->shost, "Scanning %s.\n", dev_name(&tgt->dev)); in snic_tgt_create()
329 scsi_queue_work(snic->shost, &tgt->scan_work); in snic_tgt_create()
338 struct snic *snic = container_of(work, struct snic, tgt_work); in snic_handle_tgt_disc() local
344 spin_lock_irqsave(&snic->snic_lock, flags); in snic_handle_tgt_disc()
345 if (snic->in_remove) { in snic_handle_tgt_disc()
346 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
347 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
351 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
353 mutex_lock(&snic->disc.mutex); in snic_handle_tgt_disc()
355 if (snic->disc.req_cnt) { in snic_handle_tgt_disc()
356 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
357 snic->disc.req_cnt = 0; in snic_handle_tgt_disc()
358 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
359 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
360 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
362 SNIC_HOST_INFO(snic->shost, "tgt_disc: Discovery restart.\n"); in snic_handle_tgt_disc()
364 snic_disc_start(snic); in snic_handle_tgt_disc()
369 tgtid = (struct snic_tgt_id *)snic->disc.rtgt_info; in snic_handle_tgt_disc()
371 SNIC_BUG_ON(snic->disc.rtgt_cnt == 0 || tgtid == NULL); in snic_handle_tgt_disc()
373 for (i = 0; i < snic->disc.rtgt_cnt; i++) { in snic_handle_tgt_disc()
374 tgt = snic_tgt_create(snic, &tgtid[i]); in snic_handle_tgt_disc()
376 int buf_sz = snic->disc.rtgt_cnt * sizeof(*tgtid); in snic_handle_tgt_disc()
378 SNIC_HOST_ERR(snic->shost, "Failed to create tgt.\n"); in snic_handle_tgt_disc()
384 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
385 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
386 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
388 SNIC_HOST_INFO(snic->shost, "Discovery Completed.\n"); in snic_handle_tgt_disc()
395 snic_report_tgt_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq) in snic_report_tgt_cmpl_handler() argument
411 SNIC_HOST_ERR(snic->shost, "No Targets Found on this host.\n"); in snic_report_tgt_cmpl_handler()
418 SNIC_HOST_INFO(snic->shost, "Target Count = %d\n", tgt_cnt); in snic_report_tgt_cmpl_handler()
420 SNIC_BUG_ON(tgt_cnt > snic->fwinfo.max_tgts); in snic_report_tgt_cmpl_handler()
423 SNIC_HOST_INFO(snic->shost, in snic_report_tgt_cmpl_handler()
431 snic->disc.rtgt_cnt = tgt_cnt; in snic_report_tgt_cmpl_handler()
432 snic->disc.rtgt_info = (u8 *) tgtid; in snic_report_tgt_cmpl_handler()
433 queue_work(snic_glob->event_q, &snic->tgt_work); in snic_report_tgt_cmpl_handler()
438 snic_pci_unmap_rsp_buf(snic, rqi); in snic_report_tgt_cmpl_handler()
443 snic_release_untagged_req(snic, rqi); in snic_report_tgt_cmpl_handler()
465 snic_disc_term(struct snic *snic) in snic_disc_term() argument
467 struct snic_disc *disc = &snic->disc; in snic_disc_term()
472 SNIC_SCSI_DBG(snic->shost, "Terminating Discovery.\n"); in snic_disc_term()
481 snic_disc_start(struct snic *snic) in snic_disc_start() argument
483 struct snic_disc *disc = &snic->disc; in snic_disc_start()
487 SNIC_SCSI_DBG(snic->shost, "Discovery Start.\n"); in snic_disc_start()
489 spin_lock_irqsave(&snic->snic_lock, flags); in snic_disc_start()
490 if (snic->in_remove) { in snic_disc_start()
491 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_disc_start()
497 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_disc_start()
509 ret = snic_queue_report_tgt_req(snic); in snic_disc_start()
511 SNIC_HOST_INFO(snic->shost, "Discovery Failed, err=%d.\n", ret); in snic_disc_start()
522 struct snic *snic = container_of(work, struct snic, disc_work); in snic_handle_disc() local
525 SNIC_HOST_INFO(snic->shost, "disc_work: Discovery\n"); in snic_handle_disc()
527 ret = snic_disc_start(snic); in snic_handle_disc()
532 SNIC_HOST_ERR(snic->shost, in snic_handle_disc()
542 snic_tgt_del_all(struct snic *snic) in snic_tgt_del_all() argument
548 scsi_flush_work(snic->shost); in snic_tgt_del_all()
550 mutex_lock(&snic->disc.mutex); in snic_tgt_del_all()
551 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_del_all()
553 list_for_each_safe(cur, nxt, &snic->disc.tgt_list) { in snic_tgt_del_all()
557 SNIC_HOST_INFO(snic->shost, "Tgt %d q'ing for del\n", tgt->id); in snic_tgt_del_all()
561 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_del_all()
562 mutex_unlock(&snic->disc.mutex); in snic_tgt_del_all()