Lines Matching refs:fnic
43 #include "fnic.h"
55 /* Supported devices by fnic module */
70 MODULE_PARM_DESC(fnic_log_level, "bit mask of fnic logging levels");
80 "for fnic trace buffer");
178 struct fnic *fnic = lport_priv(lp);
179 u32 port_speed = vnic_dev_port_speed(fnic->vdev);
209 struct fnic *fnic = lport_priv(lp);
214 if (time_before(jiffies, fnic->stats_time + HZ / FNIC_STATS_RATE_LIMIT))
216 fnic->stats_time = jiffies;
218 spin_lock_irqsave(&fnic->fnic_lock, flags);
219 ret = vnic_dev_stats_dump(fnic->vdev, &fnic->stats);
220 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
223 FNIC_MAIN_DBG(KERN_DEBUG, fnic->lport->host,
224 "fnic: Get vnic stats failed"
228 vs = fnic->stats;
237 (jiffies - fnic->stats_reset_time) / HZ;
238 stats->fcp_input_megabytes = div_u64(fnic->fcp_input_bytes, 1000000);
239 stats->fcp_output_megabytes = div_u64(fnic->fcp_output_bytes, 1000000);
252 "fnic: seconds since last reset = %llu\n",
255 "fnic: tx frames = %llu\n",
258 "fnic: tx words = %llu\n",
261 "fnic: rx frames = %llu\n",
264 "fnic: rx words = %llu\n",
267 "fnic: lip count = %llu\n",
270 "fnic: nos count = %llu\n",
273 "fnic: error frames = %llu\n",
276 "fnic: dumped frames = %llu\n",
279 "fnic: link failure count = %llu\n",
282 "fnic: loss of sync count = %llu\n",
285 "fnic: loss of signal count = %llu\n",
288 "fnic: prim seq protocol err count = %llu\n",
291 "fnic: invalid tx word count= %llu\n",
294 "fnic: invalid crc count = %llu\n",
297 "fnic: fcp input requests = %llu\n",
300 "fnic: fcp output requests = %llu\n",
303 "fnic: fcp control requests = %llu\n",
306 "fnic: fcp input megabytes = %llu\n",
309 "fnic: fcp output megabytes = %llu\n",
322 struct fnic *fnic = lport_priv(lp);
330 spin_lock_irqsave(&fnic->fnic_lock, flags);
331 ret = vnic_dev_stats_clear(fnic->vdev);
332 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
335 FNIC_MAIN_DBG(KERN_DEBUG, fnic->lport->host,
336 "fnic: Reset vnic stats failed"
340 fnic->stats_reset_time = jiffies;
346 void fnic_log_q_error(struct fnic *fnic)
351 for (i = 0; i < fnic->raw_wq_count; i++) {
352 error_status = ioread32(&fnic->wq[i].ctrl->error_status);
354 shost_printk(KERN_ERR, fnic->lport->host,
359 for (i = 0; i < fnic->rq_count; i++) {
360 error_status = ioread32(&fnic->rq[i].ctrl->error_status);
362 shost_printk(KERN_ERR, fnic->lport->host,
367 for (i = 0; i < fnic->wq_copy_count; i++) {
368 error_status = ioread32(&fnic->wq_copy[i].ctrl->error_status);
370 shost_printk(KERN_ERR, fnic->lport->host,
376 void fnic_handle_link_event(struct fnic *fnic)
380 spin_lock_irqsave(&fnic->fnic_lock, flags);
381 if (fnic->stop_rx_link_events) {
382 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
385 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
387 queue_work(fnic_event_queue, &fnic->link_work);
391 static int fnic_notify_set(struct fnic *fnic)
395 switch (vnic_dev_get_intr_mode(fnic->vdev)) {
397 err = vnic_dev_notify_set(fnic->vdev, FNIC_INTX_NOTIFY);
400 err = vnic_dev_notify_set(fnic->vdev, -1);
403 err = vnic_dev_notify_set(fnic->vdev, FNIC_MSIX_ERR_NOTIFY);
406 shost_printk(KERN_ERR, fnic->lport->host,
409 vnic_dev_get_intr_mode(fnic->vdev));
419 struct fnic *fnic = from_timer(fnic, t, notify_timer);
421 fnic_handle_link_event(fnic);
422 mod_timer(&fnic->notify_timer,
428 struct fnic *fnic = from_timer(fnic, t, fip_timer);
430 fnic_handle_fip_timer(fnic);
433 static void fnic_notify_timer_start(struct fnic *fnic)
435 switch (vnic_dev_get_intr_mode(fnic->vdev)) {
441 mod_timer(&fnic->notify_timer, jiffies);
485 static int fnic_cleanup(struct fnic *fnic)
490 vnic_dev_disable(fnic->vdev);
491 for (i = 0; i < fnic->intr_count; i++)
492 vnic_intr_mask(&fnic->intr[i]);
494 for (i = 0; i < fnic->rq_count; i++) {
495 err = vnic_rq_disable(&fnic->rq[i]);
499 for (i = 0; i < fnic->raw_wq_count; i++) {
500 err = vnic_wq_disable(&fnic->wq[i]);
504 for (i = 0; i < fnic->wq_copy_count; i++) {
505 err = vnic_wq_copy_disable(&fnic->wq_copy[i]);
511 fnic_wq_copy_cmpl_handler(fnic, io_completions);
512 fnic_wq_cmpl_handler(fnic, -1);
513 fnic_rq_cmpl_handler(fnic, -1);
516 for (i = 0; i < fnic->raw_wq_count; i++)
517 vnic_wq_clean(&fnic->wq[i], fnic_free_wq_buf);
518 for (i = 0; i < fnic->rq_count; i++)
519 vnic_rq_clean(&fnic->rq[i], fnic_free_rq_buf);
520 for (i = 0; i < fnic->wq_copy_count; i++)
521 vnic_wq_copy_clean(&fnic->wq_copy[i],
524 for (i = 0; i < fnic->cq_count; i++)
525 vnic_cq_clean(&fnic->cq[i]);
526 for (i = 0; i < fnic->intr_count; i++)
527 vnic_intr_clean(&fnic->intr[i]);
529 mempool_destroy(fnic->io_req_pool);
531 mempool_destroy(fnic->io_sgl_pool[i]);
536 static void fnic_iounmap(struct fnic *fnic)
538 if (fnic->bar0.vaddr)
539 iounmap(fnic->bar0.vaddr);
548 struct fnic *fnic = lport_priv(lport);
550 return fnic->data_src_addr;
553 static void fnic_set_vlan(struct fnic *fnic, u16 vlan_id)
555 vnic_dev_set_default_vlan(fnic->vdev, vlan_id);
562 struct fnic *fnic;
570 * local port, and fnic
572 lp = libfc_host_alloc(&fnic_host_template, sizeof(struct fnic));
579 fnic = lport_priv(lp);
580 fnic->lport = lp;
581 fnic->ctlr.lp = lp;
583 snprintf(fnic->name, sizeof(fnic->name) - 1, "%s%d", DRV_NAME,
588 fnic_stats_debugfs_init(fnic);
591 pci_set_drvdata(pdev, fnic);
593 fnic->pdev = pdev;
597 shost_printk(KERN_ERR, fnic->lport->host,
604 shost_printk(KERN_ERR, fnic->lport->host,
619 shost_printk(KERN_ERR, fnic->lport->host,
628 shost_printk(KERN_ERR, fnic->lport->host,
634 fnic->bar0.vaddr = pci_iomap(pdev, 0, 0);
635 fnic->bar0.bus_addr = pci_resource_start(pdev, 0);
636 fnic->bar0.len = pci_resource_len(pdev, 0);
638 if (!fnic->bar0.vaddr) {
639 shost_printk(KERN_ERR, fnic->lport->host,
646 fnic->vdev = vnic_dev_register(NULL, fnic, pdev, &fnic->bar0);
647 if (!fnic->vdev) {
648 shost_printk(KERN_ERR, fnic->lport->host,
655 err = vnic_dev_cmd_init(fnic->vdev);
657 shost_printk(KERN_ERR, fnic->lport->host,
663 err = fnic_dev_wait(fnic->vdev, vnic_dev_open,
666 shost_printk(KERN_ERR, fnic->lport->host,
671 err = vnic_dev_init(fnic->vdev, 0);
673 shost_printk(KERN_ERR, fnic->lport->host,
678 err = vnic_dev_mac_addr(fnic->vdev, fnic->ctlr.ctl_src_addr);
680 shost_printk(KERN_ERR, fnic->lport->host,
685 memcpy(fnic->data_src_addr, fnic->ctlr.ctl_src_addr, ETH_ALEN);
688 err = fnic_get_vnic_config(fnic);
690 shost_printk(KERN_ERR, fnic->lport->host,
697 if (fnic->config.io_throttle_count != FNIC_UCSM_DFLT_THROTTLE_CNT_BLD) {
700 fnic->config.io_throttle_count));
702 fnic->fnic_max_tag_id = host->can_queue;
704 host->max_lun = fnic->config.luns_per_tgt;
708 fnic_get_res_counts(fnic);
710 err = fnic_set_intr_mode(fnic);
712 shost_printk(KERN_ERR, fnic->lport->host,
718 err = fnic_alloc_vnic_resources(fnic);
720 shost_printk(KERN_ERR, fnic->lport->host,
727 /* initialize all fnic locks */
728 spin_lock_init(&fnic->fnic_lock);
731 spin_lock_init(&fnic->wq_lock[i]);
734 spin_lock_init(&fnic->wq_copy_lock[i]);
735 fnic->wq_copy_desc_low[i] = DESC_CLEAN_LOW_WATERMARK;
736 fnic->fw_ack_recd[i] = 0;
737 fnic->fw_ack_index[i] = -1;
741 spin_lock_init(&fnic->io_req_lock[i]);
744 fnic->io_req_pool = mempool_create_slab_pool(2, fnic_io_req_cache);
745 if (!fnic->io_req_pool)
751 fnic->io_sgl_pool[FNIC_SGL_CACHE_DFLT] = pool;
756 fnic->io_sgl_pool[FNIC_SGL_CACHE_MAX] = pool;
759 fnic->vlan_hw_insert = 1;
760 fnic->vlan_id = 0;
763 fnic->ctlr.send = fnic_eth_send;
764 fnic->ctlr.update_mac = fnic_update_mac;
765 fnic->ctlr.get_src_addr = fnic_get_mac;
766 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
767 shost_printk(KERN_INFO, fnic->lport->host,
770 vnic_dev_packet_filter(fnic->vdev, 1, 1, 0, 0, 0);
771 vnic_dev_add_addr(fnic->vdev, FIP_ALL_ENODE_MACS);
772 vnic_dev_add_addr(fnic->vdev, fnic->ctlr.ctl_src_addr);
773 fnic->set_vlan = fnic_set_vlan;
774 fcoe_ctlr_init(&fnic->ctlr, FIP_MODE_AUTO);
775 timer_setup(&fnic->fip_timer, fnic_fip_notify_timer, 0);
776 spin_lock_init(&fnic->vlans_lock);
777 INIT_WORK(&fnic->fip_frame_work, fnic_handle_fip_frame);
778 INIT_WORK(&fnic->event_work, fnic_handle_event);
779 skb_queue_head_init(&fnic->fip_frame_queue);
780 INIT_LIST_HEAD(&fnic->evlist);
781 INIT_LIST_HEAD(&fnic->vlans);
783 shost_printk(KERN_INFO, fnic->lport->host,
785 fcoe_ctlr_init(&fnic->ctlr, FIP_MODE_NON_FIP);
786 fnic->ctlr.state = FIP_ST_NON_FIP;
788 fnic->state = FNIC_IN_FC_MODE;
790 atomic_set(&fnic->in_flight, 0);
791 fnic->state_flags = FNIC_FLAGS_NONE;
794 fnic_set_nic_config(fnic, 0, 0, 0, 0, 0, 0, 1);
797 err = fnic_notify_set(fnic);
799 shost_printk(KERN_ERR, fnic->lport->host,
805 if (vnic_dev_get_intr_mode(fnic->vdev) == VNIC_DEV_INTR_MODE_MSI)
806 timer_setup(&fnic->notify_timer, fnic_notify_timer, 0);
809 for (i = 0; i < fnic->rq_count; i++) {
810 vnic_rq_enable(&fnic->rq[i]);
811 err = vnic_rq_fill(&fnic->rq[i], fnic_alloc_rq_frame);
813 shost_printk(KERN_ERR, fnic->lport->host,
826 shost_printk(KERN_ERR, fnic->lport->host,
827 "fnic: scsi_add_host failed...exiting\n");
835 lp->max_retry_count = fnic->config.flogi_retries;
836 lp->max_rport_retry_count = fnic->config.plogi_retries;
839 if (fnic->config.flags & VFCF_FCP_SEQ_LVL_ERR)
843 lp->e_d_tov = fnic->config.ed_tov;
844 lp->r_a_tov = fnic->config.ra_tov;
846 fc_set_wwnn(lp, fnic->config.node_wwn);
847 fc_set_wwpn(lp, fnic->config.port_wwn);
849 fcoe_libfc_config(lp, &fnic->ctlr, &fnic_transport_template, 0);
858 fnic->stats_reset_time = jiffies;
862 if (fc_set_mfs(lp, fnic->config.maxdatafieldsize +
868 fc_host_dev_loss_tmo(lp->host) = fnic->config.port_down_timeout / 1000;
871 DRV_NAME " v" DRV_VERSION " over %s", fnic->name);
874 list_add_tail(&fnic->list, &fnic_list);
877 INIT_WORK(&fnic->link_work, fnic_handle_link);
878 INIT_WORK(&fnic->frame_work, fnic_handle_frame);
879 skb_queue_head_init(&fnic->frame_queue);
880 skb_queue_head_init(&fnic->tx_queue);
883 for (i = 0; i < fnic->raw_wq_count; i++)
884 vnic_wq_enable(&fnic->wq[i]);
885 for (i = 0; i < fnic->wq_copy_count; i++)
886 vnic_wq_copy_enable(&fnic->wq_copy[i]);
890 err = fnic_request_intr(fnic);
892 shost_printk(KERN_ERR, fnic->lport->host,
897 vnic_dev_enable(fnic->vdev);
899 for (i = 0; i < fnic->intr_count; i++)
900 vnic_intr_unmask(&fnic->intr[i]);
902 fnic_notify_timer_start(fnic);
912 for (i = 0; i < fnic->rq_count; i++)
913 vnic_rq_clean(&fnic->rq[i], fnic_free_rq_buf);
914 vnic_dev_notify_unset(fnic->vdev);
916 mempool_destroy(fnic->io_sgl_pool[FNIC_SGL_CACHE_MAX]);
918 mempool_destroy(fnic->io_sgl_pool[FNIC_SGL_CACHE_DFLT]);
920 mempool_destroy(fnic->io_req_pool);
922 fnic_free_vnic_resources(fnic);
924 fnic_clear_intr_mode(fnic);
926 vnic_dev_close(fnic->vdev);
929 vnic_dev_unregister(fnic->vdev);
931 fnic_iounmap(fnic);
937 fnic_stats_debugfs_remove(fnic);
945 struct fnic *fnic = pci_get_drvdata(pdev);
946 struct fc_lport *lp = fnic->lport;
953 * creating work items on the fnic workqueue
955 spin_lock_irqsave(&fnic->fnic_lock, flags);
956 fnic->stop_rx_link_events = 1;
957 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
959 if (vnic_dev_get_intr_mode(fnic->vdev) == VNIC_DEV_INTR_MODE_MSI)
960 del_timer_sync(&fnic->notify_timer);
963 * Flush the fnic event queue. After this call, there should
964 * be no event queued for this fnic device in the workqueue
967 skb_queue_purge(&fnic->frame_queue);
968 skb_queue_purge(&fnic->tx_queue);
970 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
971 del_timer_sync(&fnic->fip_timer);
972 skb_queue_purge(&fnic->fip_frame_queue);
973 fnic_fcoe_reset_vlans(fnic);
974 fnic_fcoe_evlist_free(fnic);
982 fc_fabric_logoff(fnic->lport);
984 spin_lock_irqsave(&fnic->fnic_lock, flags);
985 fnic->in_remove = 1;
986 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
988 fcoe_ctlr_destroy(&fnic->ctlr);
990 fnic_stats_debugfs_remove(fnic);
993 * This stops the fnic device, masks all interrupts. Completed
997 fnic_cleanup(fnic);
999 BUG_ON(!skb_queue_empty(&fnic->frame_queue));
1000 BUG_ON(!skb_queue_empty(&fnic->tx_queue));
1003 list_del(&fnic->list);
1006 fc_remove_host(fnic->lport->host);
1007 scsi_remove_host(fnic->lport->host);
1008 fc_exch_mgr_free(fnic->lport);
1009 vnic_dev_notify_unset(fnic->vdev);
1010 fnic_free_intr(fnic);
1011 fnic_free_vnic_resources(fnic);
1012 fnic_clear_intr_mode(fnic);
1013 vnic_dev_close(fnic->vdev);
1014 vnic_dev_unregister(fnic->vdev);
1015 fnic_iounmap(fnic);
1035 /* Create debugfs entries for fnic */
1038 printk(KERN_ERR PFX "Failed to create fnic directory "
1067 printk(KERN_ERR PFX "failed to create fnic dflt sgl slab\n");
1079 printk(KERN_ERR PFX "failed to create fnic max sgl slab\n");
1089 printk(KERN_ERR PFX "failed to create fnic io_req slab\n");
1096 printk(KERN_ERR PFX "fnic work queue create failed\n");
1106 printk(KERN_ERR PFX "fnic FIP work queue create failed\n");