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()
313 SNIC_HOST_INFO(snic->shost, "Scanning %s.\n", dev_name(&tgt->dev)); in snic_tgt_create()
315 scsi_queue_work(snic->shost, &tgt->scan_work); in snic_tgt_create()
324 struct snic *snic = container_of(work, struct snic, tgt_work); in snic_handle_tgt_disc() local
330 spin_lock_irqsave(&snic->snic_lock, flags); in snic_handle_tgt_disc()
331 if (snic->in_remove) { in snic_handle_tgt_disc()
332 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
333 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
337 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_handle_tgt_disc()
339 mutex_lock(&snic->disc.mutex); in snic_handle_tgt_disc()
341 if (snic->disc.req_cnt) { in snic_handle_tgt_disc()
342 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
343 snic->disc.req_cnt = 0; in snic_handle_tgt_disc()
344 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
345 kfree(snic->disc.rtgt_info); in snic_handle_tgt_disc()
346 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
348 SNIC_HOST_INFO(snic->shost, "tgt_disc: Discovery restart.\n"); in snic_handle_tgt_disc()
350 snic_disc_start(snic); in snic_handle_tgt_disc()
355 tgtid = (struct snic_tgt_id *)snic->disc.rtgt_info; in snic_handle_tgt_disc()
357 SNIC_BUG_ON(snic->disc.rtgt_cnt == 0 || tgtid == NULL); in snic_handle_tgt_disc()
359 for (i = 0; i < snic->disc.rtgt_cnt; i++) { in snic_handle_tgt_disc()
360 tgt = snic_tgt_create(snic, &tgtid[i]); in snic_handle_tgt_disc()
362 int buf_sz = snic->disc.rtgt_cnt * sizeof(*tgtid); in snic_handle_tgt_disc()
364 SNIC_HOST_ERR(snic->shost, "Failed to create tgt.\n"); in snic_handle_tgt_disc()
370 snic->disc.rtgt_info = NULL; in snic_handle_tgt_disc()
371 snic->disc.state = SNIC_DISC_DONE; in snic_handle_tgt_disc()
372 mutex_unlock(&snic->disc.mutex); in snic_handle_tgt_disc()
374 SNIC_HOST_INFO(snic->shost, "Discovery Completed.\n"); in snic_handle_tgt_disc()
381 snic_report_tgt_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq) in snic_report_tgt_cmpl_handler() argument
397 SNIC_HOST_ERR(snic->shost, "No Targets Found on this host.\n"); in snic_report_tgt_cmpl_handler()
404 SNIC_HOST_INFO(snic->shost, "Target Count = %d\n", tgt_cnt); in snic_report_tgt_cmpl_handler()
406 SNIC_BUG_ON(tgt_cnt > snic->fwinfo.max_tgts); in snic_report_tgt_cmpl_handler()
409 SNIC_HOST_INFO(snic->shost, in snic_report_tgt_cmpl_handler()
417 snic->disc.rtgt_cnt = tgt_cnt; in snic_report_tgt_cmpl_handler()
418 snic->disc.rtgt_info = (u8 *) tgtid; in snic_report_tgt_cmpl_handler()
419 queue_work(snic_glob->event_q, &snic->tgt_work); in snic_report_tgt_cmpl_handler()
424 snic_pci_unmap_rsp_buf(snic, rqi); in snic_report_tgt_cmpl_handler()
429 snic_release_untagged_req(snic, rqi); in snic_report_tgt_cmpl_handler()
451 snic_disc_term(struct snic *snic) in snic_disc_term() argument
453 struct snic_disc *disc = &snic->disc; in snic_disc_term()
458 SNIC_SCSI_DBG(snic->shost, "Terminating Discovery.\n"); in snic_disc_term()
467 snic_disc_start(struct snic *snic) in snic_disc_start() argument
469 struct snic_disc *disc = &snic->disc; in snic_disc_start()
473 SNIC_SCSI_DBG(snic->shost, "Discovery Start.\n"); in snic_disc_start()
475 spin_lock_irqsave(&snic->snic_lock, flags); in snic_disc_start()
476 if (snic->in_remove) { in snic_disc_start()
477 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_disc_start()
483 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_disc_start()
495 ret = snic_queue_report_tgt_req(snic); in snic_disc_start()
497 SNIC_HOST_INFO(snic->shost, "Discovery Failed, err=%d.\n", ret); in snic_disc_start()
508 struct snic *snic = container_of(work, struct snic, disc_work); in snic_handle_disc() local
511 SNIC_HOST_INFO(snic->shost, "disc_work: Discovery\n"); in snic_handle_disc()
513 ret = snic_disc_start(snic); in snic_handle_disc()
518 SNIC_HOST_ERR(snic->shost, in snic_handle_disc()
528 snic_tgt_del_all(struct snic *snic) in snic_tgt_del_all() argument
534 scsi_flush_work(snic->shost); in snic_tgt_del_all()
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()
548 mutex_unlock(&snic->disc.mutex); in snic_tgt_del_all()