Lines Matching refs:snic

66 snic_queue_report_tgt_req(struct snic *snic)  in snic_queue_report_tgt_req()  argument
74 rqi = snic_req_init(snic, 1); in snic_queue_report_tgt_req()
80 if (snic->fwinfo.max_tgts) in snic_queue_report_tgt_req()
81 ntgts = min_t(u32, snic->fwinfo.max_tgts, snic->shost->max_id); in snic_queue_report_tgt_req()
83 ntgts = snic->shost->max_id; in snic_queue_report_tgt_req()
91 snic_req_free(snic, rqi); in snic_queue_report_tgt_req()
92 SNIC_HOST_ERR(snic->shost, "Resp Buf Alloc Failed.\n"); in snic_queue_report_tgt_req()
100 pa = dma_map_single(&snic->pdev->dev, buf, buf_len, DMA_FROM_DEVICE); in snic_queue_report_tgt_req()
101 if (dma_mapping_error(&snic->pdev->dev, pa)) { in snic_queue_report_tgt_req()
102 SNIC_HOST_ERR(snic->shost, in snic_queue_report_tgt_req()
106 snic_req_free(snic, rqi); in snic_queue_report_tgt_req()
117 snic->config.hid, in snic_queue_report_tgt_req()
123 snic_handle_untagged_req(snic, rqi); in snic_queue_report_tgt_req()
125 ret = snic_queue_wq_desc(snic, rqi->req, rqi->req_len); in snic_queue_report_tgt_req()
127 dma_unmap_single(&snic->pdev->dev, pa, buf_len, in snic_queue_report_tgt_req()
131 snic_release_untagged_req(snic, rqi); in snic_queue_report_tgt_req()
132 SNIC_HOST_ERR(snic->shost, "Queuing Report Tgts Failed.\n"); in snic_queue_report_tgt_req()
137 SNIC_DISC_DBG(snic->shost, "Report Targets Issued.\n"); in snic_queue_report_tgt_req()
142 SNIC_HOST_ERR(snic->shost, in snic_queue_report_tgt_req()
172 snic_tgt_lookup(struct snic *snic, struct snic_tgt_id *tgtid) in snic_tgt_lookup() argument
177 list_for_each_safe(cur, nxt, &snic->disc.tgt_list) { in snic_tgt_lookup()
235 snic_tgt_create(struct snic *snic, struct snic_tgt_id *tgtid) in snic_tgt_create() argument
241 tgt = snic_tgt_lookup(snic, tgtid); in snic_tgt_create()
249 SNIC_HOST_ERR(snic->shost, "Failure to allocate snic_tgt.\n"); in snic_tgt_create()
268 tgt->dev.parent = get_device(&snic->shost->shost_gendev); in snic_tgt_create()
275 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
280 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
284 SNIC_HOST_INFO(snic->shost, "Target type Unknown Detected.\n"); in snic_tgt_create()
286 snic->shost->host_no, tgt->channel, tgt->id); in snic_tgt_create()
290 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_create()
291 list_add_tail(&tgt->list, &snic->disc.tgt_list); in snic_tgt_create()
292 tgt->scsi_tgt_id = snic->disc.nxt_tgt_id++; in snic_tgt_create()
294 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_create()
296 SNIC_HOST_INFO(snic->shost, in snic_tgt_create()
302 SNIC_HOST_ERR(snic->shost, in snic_tgt_create()
306 put_device(&snic->shost->shost_gendev); in snic_tgt_create()
307 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_create()
309 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_create()
316 SNIC_HOST_INFO(snic->shost, "Scanning %s.\n", dev_name(&tgt->dev)); in snic_tgt_create()
318 scsi_queue_work(snic->shost, &tgt->scan_work); in snic_tgt_create()
327 struct snic *snic = container_of(work, struct snic, tgt_work); in snic_handle_tgt_disc() local
333 spin_lock_irqsave(&snic->snic_lock, flags); in snic_handle_tgt_disc()
334 if (snic->in_remove) { in snic_handle_tgt_disc()
335 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
336 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
340 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
342 mutex_lock(&snic->disc.mutex); in snic_handle_tgt_disc()
344 if (snic->disc.req_cnt) { in snic_handle_tgt_disc()
345 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
346 snic->disc.req_cnt = 0; in snic_handle_tgt_disc()
347 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
348 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
349 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
351 SNIC_HOST_INFO(snic->shost, "tgt_disc: Discovery restart.\n"); in snic_handle_tgt_disc()
353 snic_disc_start(snic); in snic_handle_tgt_disc()
358 tgtid = (struct snic_tgt_id *)snic->disc.rtgt_info; in snic_handle_tgt_disc()
360 SNIC_BUG_ON(snic->disc.rtgt_cnt == 0 || tgtid == NULL); in snic_handle_tgt_disc()
362 for (i = 0; i < snic->disc.rtgt_cnt; i++) { in snic_handle_tgt_disc()
363 tgt = snic_tgt_create(snic, &tgtid[i]); in snic_handle_tgt_disc()
365 int buf_sz = snic->disc.rtgt_cnt * sizeof(*tgtid); in snic_handle_tgt_disc()
367 SNIC_HOST_ERR(snic->shost, "Failed to create tgt.\n"); in snic_handle_tgt_disc()
373 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
374 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
375 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
377 SNIC_HOST_INFO(snic->shost, "Discovery Completed.\n"); in snic_handle_tgt_disc()
384 snic_report_tgt_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq) in snic_report_tgt_cmpl_handler() argument
400 SNIC_HOST_ERR(snic->shost, "No Targets Found on this host.\n"); in snic_report_tgt_cmpl_handler()
407 SNIC_HOST_INFO(snic->shost, "Target Count = %d\n", tgt_cnt); in snic_report_tgt_cmpl_handler()
409 SNIC_BUG_ON(tgt_cnt > snic->fwinfo.max_tgts); in snic_report_tgt_cmpl_handler()
412 SNIC_HOST_INFO(snic->shost, in snic_report_tgt_cmpl_handler()
420 snic->disc.rtgt_cnt = tgt_cnt; in snic_report_tgt_cmpl_handler()
421 snic->disc.rtgt_info = (u8 *) tgtid; in snic_report_tgt_cmpl_handler()
422 queue_work(snic_glob->event_q, &snic->tgt_work); in snic_report_tgt_cmpl_handler()
427 snic_pci_unmap_rsp_buf(snic, rqi); in snic_report_tgt_cmpl_handler()
432 snic_release_untagged_req(snic, rqi); in snic_report_tgt_cmpl_handler()
454 snic_disc_term(struct snic *snic) in snic_disc_term() argument
456 struct snic_disc *disc = &snic->disc; in snic_disc_term()
461 SNIC_SCSI_DBG(snic->shost, "Terminating Discovery.\n"); in snic_disc_term()
470 snic_disc_start(struct snic *snic) in snic_disc_start() argument
472 struct snic_disc *disc = &snic->disc; in snic_disc_start()
476 SNIC_SCSI_DBG(snic->shost, "Discovery Start.\n"); in snic_disc_start()
478 spin_lock_irqsave(&snic->snic_lock, flags); in snic_disc_start()
479 if (snic->in_remove) { in snic_disc_start()
480 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_disc_start()
486 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_disc_start()
498 ret = snic_queue_report_tgt_req(snic); in snic_disc_start()
500 SNIC_HOST_INFO(snic->shost, "Discovery Failed, err=%d.\n", ret); in snic_disc_start()
511 struct snic *snic = container_of(work, struct snic, disc_work); in snic_handle_disc() local
514 SNIC_HOST_INFO(snic->shost, "disc_work: Discovery\n"); in snic_handle_disc()
516 ret = snic_disc_start(snic); in snic_handle_disc()
521 SNIC_HOST_ERR(snic->shost, in snic_handle_disc()
531 snic_tgt_del_all(struct snic *snic) in snic_tgt_del_all() argument
537 scsi_flush_work(snic->shost); in snic_tgt_del_all()
539 mutex_lock(&snic->disc.mutex); in snic_tgt_del_all()
540 spin_lock_irqsave(snic->shost->host_lock, flags); in snic_tgt_del_all()
542 list_for_each_safe(cur, nxt, &snic->disc.tgt_list) { in snic_tgt_del_all()
546 SNIC_HOST_INFO(snic->shost, "Tgt %d q'ing for del\n", tgt->id); in snic_tgt_del_all()
550 spin_unlock_irqrestore(snic->shost->host_lock, flags); in snic_tgt_del_all()
551 mutex_unlock(&snic->disc.mutex); in snic_tgt_del_all()