Lines Matching refs:snic

32 #include "snic.h"
37 /* Supported devices by snic module */
45 MODULE_PARM_DESC(snic_log_level, "bitmask for snic logging levels");
51 "Total allocated memory pages for snic trace buffer");
80 struct snic *snic = shost_priv(sdev->host);
89 if (snic->fwinfo.io_tmo > 1)
90 tmo = snic->fwinfo.io_tmo * HZ;
101 struct snic *snic = shost_priv(sdev->host);
106 atomic64_inc(&snic->s_stats.misc.qsz_rampdown);
108 atomic64_inc(&snic->s_stats.misc.qsz_rampup);
110 atomic64_set(&snic->s_stats.misc.last_qsz, sdev->queue_depth);
142 snic_handle_link_event(struct snic *snic)
146 spin_lock_irqsave(&snic->snic_lock, flags);
147 if (snic->stop_link_events) {
148 spin_unlock_irqrestore(&snic->snic_lock, flags);
152 spin_unlock_irqrestore(&snic->snic_lock, flags);
154 queue_work(snic_glob->event_q, &snic->link_work);
160 * Note: snic supports only MSIX interrupts, in which we can just call
164 snic_notify_set(struct snic *snic)
169 intr_mode = svnic_dev_get_intr_mode(snic->vdev);
172 ret = svnic_dev_notify_set(snic->vdev, SNIC_MSIX_ERR_NOTIFY);
174 SNIC_HOST_ERR(snic->shost,
224 * Stops the snic device, masks all interrupts, Completed CQ entries are
228 snic_cleanup(struct snic *snic)
233 svnic_dev_disable(snic->vdev);
234 for (i = 0; i < snic->intr_count; i++)
235 svnic_intr_mask(&snic->intr[i]);
237 for (i = 0; i < snic->wq_count; i++) {
238 ret = svnic_wq_disable(&snic->wq[i]);
244 snic_fwcq_cmpl_handler(snic, -1);
246 snic_wq_cmpl_handler(snic, -1);
249 for (i = 0; i < snic->wq_count; i++)
250 svnic_wq_clean(&snic->wq[i], snic_free_wq_buf);
252 for (i = 0; i < snic->cq_count; i++)
253 svnic_cq_clean(&snic->cq[i]);
255 for (i = 0; i < snic->intr_count; i++)
256 svnic_intr_clean(&snic->intr[i]);
258 /* Cleanup snic specific requests */
259 snic_free_all_untagged_reqs(snic);
262 snic_shutdown_scsi_cleanup(snic);
265 mempool_destroy(snic->req_pool[i]);
272 snic_iounmap(struct snic *snic)
274 if (snic->bar0.vaddr)
275 iounmap(snic->bar0.vaddr);
284 struct snic *snic = svnic_dev_priv(vdev);
293 SNIC_HOST_INFO(snic->shost, "VNIC_DEV_OPEN Timedout.\n");
310 "snic: scsi_add_host failed. %d\n",
341 snic_get_state(struct snic *snic)
343 return atomic_read(&snic->state);
347 snic_set_state(struct snic *snic, enum snic_state state)
349 SNIC_HOST_INFO(snic->shost, "snic state change from %s to %s\n",
350 snic_state_to_str(snic_get_state(snic)),
353 atomic_set(&snic->state, state);
357 * snic_probe : Initialize the snic interface.
363 struct snic *snic;
370 SNIC_INFO("snic device %4x:%4x:%4x:%4x: ",
374 SNIC_INFO("snic device bus %x: slot %x: fn %x\n",
379 * Allocate SCSI Host and setup association between host, and snic
381 shost = scsi_host_alloc(&snic_host_template, sizeof(struct snic));
388 snic = shost_priv(shost);
389 snic->shost = shost;
391 snprintf(snic->name, sizeof(snic->name) - 1, "%s%d", SNIC_DRV_NAME,
395 "snic%d = %p shost = %p device bus %x: slot %x: fn %x\n",
396 shost->host_no, snic, shost, pdev->bus->number,
399 /* Per snic debugfs init */
400 snic_stats_debugfs_init(snic);
404 pci_set_drvdata(pdev, snic);
405 snic->pdev = pdev;
451 snic->bar0.vaddr = pci_iomap(pdev, 0, 0);
452 if (!snic->bar0.vaddr) {
460 snic->bar0.bus_addr = pci_resource_start(pdev, 0);
461 snic->bar0.len = pci_resource_len(pdev, 0);
462 SNIC_BUG_ON(snic->bar0.bus_addr == 0);
465 snic->vdev = svnic_dev_alloc_discover(NULL, snic, pdev, &snic->bar0, 1);
466 if (!snic->vdev) {
473 ret = svnic_dev_cmd_init(snic->vdev, 0);
480 ret = snic_dev_wait(snic->vdev, svnic_dev_open, snic_vdev_open_done, 0);
489 ret = svnic_dev_init(snic->vdev, 0);
499 ret = snic_get_vnic_config(snic);
509 max_ios = snic->config.io_throttle_count;
514 snic->max_tag_id = shost->can_queue;
516 shost->max_lun = snic->config.luns_per_tgt;
521 snic_get_res_counts(snic);
526 ret = snic_set_intr_mode(snic);
535 ret = snic_alloc_vnic_res(snic);
545 INIT_LIST_HEAD(&snic->list);
548 * spl_cmd_list for maintaining snic specific cmds
551 INIT_LIST_HEAD(&snic->spl_cmd_list);
552 spin_lock_init(&snic->spl_cmd_lock);
554 /* initialize all snic locks */
555 spin_lock_init(&snic->snic_lock);
558 spin_lock_init(&snic->wq_lock[i]);
561 spin_lock_init(&snic->io_req_lock[i]);
572 snic->req_pool[SNIC_REQ_CACHE_DFLT_SGL] = pool;
583 snic->req_pool[SNIC_REQ_CACHE_MAX_SGL] = pool;
588 SNIC_HOST_ERR(shost, "snic tmreq info pool creation failed.\n");
594 snic->req_pool[SNIC_REQ_TM_CACHE] = pool;
596 /* Initialize snic state */
597 atomic_set(&snic->state, SNIC_INIT);
599 atomic_set(&snic->ios_inflight, 0);
602 ret = snic_notify_set(snic);
612 list_add_tail(&snic->list, &snic_glob->snic_list);
615 snic_disc_init(&snic->disc);
616 INIT_WORK(&snic->tgt_work, snic_handle_tgt_disc);
617 INIT_WORK(&snic->disc_work, snic_handle_disc);
618 INIT_WORK(&snic->link_work, snic_handle_link);
621 for (i = 0; i < snic->wq_count; i++)
622 svnic_wq_enable(&snic->wq[i]);
624 ret = svnic_dev_enable_wait(snic->vdev);
633 ret = snic_request_intr(snic);
640 for (i = 0; i < snic->intr_count; i++)
641 svnic_intr_unmask(&snic->intr[i]);
643 /* Get snic params */
644 ret = snic_get_conf(snic);
647 "Failed to get snic io config from FW w err %d\n",
666 snic_set_state(snic, SNIC_ONLINE);
668 ret = snic_disc_start(snic);
681 snic_free_all_untagged_reqs(snic);
683 for (i = 0; i < snic->intr_count; i++)
684 svnic_intr_mask(&snic->intr[i]);
686 snic_free_intr(snic);
689 svnic_dev_disable(snic->vdev);
692 svnic_dev_notify_unset(snic->vdev);
694 for (i = 0; i < snic->wq_count; i++) {
697 rc = svnic_wq_disable(&snic->wq[i]);
705 snic_del_host(snic->shost);
708 mempool_destroy(snic->req_pool[SNIC_REQ_TM_CACHE]);
711 mempool_destroy(snic->req_pool[SNIC_REQ_CACHE_MAX_SGL]);
714 mempool_destroy(snic->req_pool[SNIC_REQ_CACHE_DFLT_SGL]);
717 snic_free_vnic_res(snic);
720 snic_clear_intr_mode(snic);
723 svnic_dev_close(snic->vdev);
726 svnic_dev_unregister(snic->vdev);
729 snic_iounmap(snic);
739 snic_stats_debugfs_remove(snic);
760 struct snic *snic = pci_get_drvdata(pdev);
763 if (!snic) {
764 SNIC_INFO("sNIC dev: bus %d slot %d fn %d snic inst is null.\n",
775 * items on the snic workqueue
777 snic_set_state(snic, SNIC_OFFLINE);
778 spin_lock_irqsave(&snic->snic_lock, flags);
779 snic->stop_link_events = 1;
780 spin_unlock_irqrestore(&snic->snic_lock, flags);
783 snic_disc_term(snic);
785 spin_lock_irqsave(&snic->snic_lock, flags);
786 snic->in_remove = 1;
787 spin_unlock_irqrestore(&snic->snic_lock, flags);
790 * This stops the snic device, masks all interrupts, Completed
794 snic_cleanup(snic);
797 list_del(&snic->list);
800 snic_tgt_del_all(snic);
802 snic_stats_debugfs_remove(snic);
804 snic_del_host(snic->shost);
806 svnic_dev_notify_unset(snic->vdev);
807 snic_free_intr(snic);
808 snic_free_vnic_res(snic);
809 snic_clear_intr_mode(snic);
810 svnic_dev_close(snic->vdev);
811 svnic_dev_unregister(snic->vdev);
812 snic_iounmap(snic);
817 /* this frees Scsi_Host and snic memory (continuous chunk) */
818 scsi_host_put(snic->shost);
847 /* Create debugfs entries for snic */
869 SNIC_ERR("Failed to create snic default sgl slab\n");
882 SNIC_ERR("Failed to create snic max sgl slab\n");
893 SNIC_ERR("Failed to create snic tm req slab\n");
903 SNIC_ERR("snic event queue create failed\n");