Lines Matching refs:fnic

33 #include "fnic.h"
42 static void fnic_set_eth_mode(struct fnic *);
43 static void fnic_fcoe_send_vlan_req(struct fnic *fnic);
44 static void fnic_fcoe_start_fcf_disc(struct fnic *fnic);
45 static void fnic_fcoe_process_vlan_resp(struct fnic *fnic, struct sk_buff *);
46 static int fnic_fcoe_vlan_check(struct fnic *fnic, u16 flag);
47 static int fnic_fcoe_handle_fip_frame(struct fnic *fnic, struct sk_buff *skb);
51 struct fnic *fnic = container_of(work, struct fnic, link_work);
56 spin_lock_irqsave(&fnic->fnic_lock, flags);
58 if (fnic->stop_rx_link_events) {
59 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
63 old_link_down_cnt = fnic->link_down_cnt;
64 old_link_status = fnic->link_status;
65 fnic->link_status = vnic_dev_link_status(fnic->vdev);
66 fnic->link_down_cnt = vnic_dev_link_down_cnt(fnic->vdev);
68 if (old_link_status == fnic->link_status) {
69 if (!fnic->link_status) {
71 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
72 fnic_fc_trace_set_data(fnic->lport->host->host_no,
76 if (old_link_down_cnt != fnic->link_down_cnt) {
78 fnic->lport->host_stats.link_failure_count++;
79 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
81 fnic->lport->host->host_no,
86 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
88 fcoe_ctlr_link_down(&fnic->ctlr);
89 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
92 fnic->lport->host->host_no,
98 fnic_fcoe_send_vlan_req(fnic);
101 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
103 fcoe_ctlr_link_up(&fnic->ctlr);
106 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
108 fnic->lport->host->host_no, FNIC_FC_LE,
113 } else if (fnic->link_status) {
115 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
116 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
119 fnic->lport->host->host_no,
122 fnic_fcoe_send_vlan_req(fnic);
125 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host, "link up\n");
126 fnic_fc_trace_set_data(fnic->lport->host->host_no, FNIC_FC_LE,
128 fcoe_ctlr_link_up(&fnic->ctlr);
131 fnic->lport->host_stats.link_failure_count++;
132 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
133 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host, "link down\n");
135 fnic->lport->host->host_no, FNIC_FC_LE,
138 fcoe_ctlr_link_down(&fnic->ctlr);
148 struct fnic *fnic = container_of(work, struct fnic, frame_work);
149 struct fc_lport *lp = fnic->lport;
154 while ((skb = skb_dequeue(&fnic->frame_queue))) {
156 spin_lock_irqsave(&fnic->fnic_lock, flags);
157 if (fnic->stop_rx_link_events) {
158 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
168 if (fnic->state != FNIC_IN_FC_MODE &&
169 fnic->state != FNIC_IN_ETH_MODE) {
170 skb_queue_head(&fnic->frame_queue, skb);
171 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
174 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
180 void fnic_fcoe_evlist_free(struct fnic *fnic)
186 spin_lock_irqsave(&fnic->fnic_lock, flags);
187 if (list_empty(&fnic->evlist)) {
188 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
192 list_for_each_entry_safe(fevt, next, &fnic->evlist, list) {
196 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
201 struct fnic *fnic = container_of(work, struct fnic, event_work);
206 spin_lock_irqsave(&fnic->fnic_lock, flags);
207 if (list_empty(&fnic->evlist)) {
208 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
212 list_for_each_entry_safe(fevt, next, &fnic->evlist, list) {
213 if (fnic->stop_rx_link_events) {
216 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
223 if (fnic->state != FNIC_IN_FC_MODE &&
224 fnic->state != FNIC_IN_ETH_MODE) {
225 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
232 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
233 fnic_fcoe_send_vlan_req(fnic);
234 spin_lock_irqsave(&fnic->fnic_lock, flags);
237 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
239 fnic_fcoe_start_fcf_disc(fnic);
242 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
248 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
328 static void fnic_fcoe_send_vlan_req(struct fnic *fnic)
330 struct fcoe_ctlr *fip = &fnic->ctlr;
331 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
338 fnic_fcoe_reset_vlans(fnic);
339 fnic->set_vlan(fnic, 0);
340 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
377 mod_timer(&fnic->fip_timer, round_jiffies(vlan_tov));
380 static void fnic_fcoe_process_vlan_resp(struct fnic *fnic, struct sk_buff *skb)
382 struct fcoe_ctlr *fip = &fnic->ctlr;
385 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
393 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
398 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
403 fnic_fcoe_reset_vlans(fnic);
404 spin_lock_irqsave(&fnic->vlans_lock, flags);
411 shost_printk(KERN_INFO, fnic->lport->host,
417 spin_unlock_irqrestore(&fnic->vlans_lock,
424 list_add_tail(&vlan->list, &fnic->vlans);
432 if (list_empty(&fnic->vlans)) {
435 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
437 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
441 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
442 fnic->set_vlan(fnic, vlan->vid);
445 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
451 mod_timer(&fnic->fip_timer, round_jiffies(sol_time));
456 static void fnic_fcoe_start_fcf_disc(struct fnic *fnic)
462 spin_lock_irqsave(&fnic->vlans_lock, flags);
463 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
464 fnic->set_vlan(fnic, vlan->vid);
467 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
470 fcoe_ctlr_link_up(&fnic->ctlr);
473 mod_timer(&fnic->fip_timer, round_jiffies(sol_time));
476 static int fnic_fcoe_vlan_check(struct fnic *fnic, u16 flag)
481 spin_lock_irqsave(&fnic->vlans_lock, flags);
482 if (list_empty(&fnic->vlans)) {
483 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
487 fvlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
489 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
495 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
498 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
502 static void fnic_event_enq(struct fnic *fnic, enum fnic_evt ev)
511 fevt->fnic = fnic;
514 spin_lock_irqsave(&fnic->fnic_lock, flags);
515 list_add_tail(&fevt->list, &fnic->evlist);
516 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
518 schedule_work(&fnic->event_work);
521 static int fnic_fcoe_handle_fip_frame(struct fnic *fnic, struct sk_buff *skb)
545 if (fnic_fcoe_vlan_check(fnic, ntohs(fiph->fip_flags)))
551 fnic_fcoe_process_vlan_resp(fnic, skb);
555 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
565 struct fnic *fnic = container_of(work, struct fnic, fip_frame_work);
566 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
571 while ((skb = skb_dequeue(&fnic->fip_frame_queue))) {
572 spin_lock_irqsave(&fnic->fnic_lock, flags);
573 if (fnic->stop_rx_link_events) {
574 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
582 if (fnic->state != FNIC_IN_FC_MODE &&
583 fnic->state != FNIC_IN_ETH_MODE) {
584 skb_queue_head(&fnic->fip_frame_queue, skb);
585 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
588 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
592 if (fnic_fcoe_handle_fip_frame(fnic, skb) <= 0) {
600 if (is_fnic_fip_flogi_reject(&fnic->ctlr, skb)) {
603 shost_printk(KERN_INFO, fnic->lport->host,
605 fcoe_ctlr_link_down(&fnic->ctlr);
607 fnic_fcoe_send_vlan_req(fnic);
611 fcoe_ctlr_recv(&fnic->ctlr, skb);
619 * @fnic: fnic instance.
622 static inline int fnic_import_rq_eth_pkt(struct fnic *fnic, struct sk_buff *skb)
639 if (!(fnic->config.flags & VFCF_FIP_CAPABLE)) {
645 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no,
647 printk(KERN_ERR "fnic ctlr frame trace error!!!");
649 skb_queue_tail(&fnic->fip_frame_queue, skb);
650 queue_work(fnic_fip_queue, &fnic->fip_frame_work);
679 * @fnic: fnic instance.
682 * Called with the fnic lock held.
684 void fnic_update_mac_locked(struct fnic *fnic, u8 *new)
686 u8 *ctl = fnic->ctlr.ctl_src_addr;
687 u8 *data = fnic->data_src_addr;
693 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host, "update_mac %pM\n", new);
695 vnic_dev_del_addr(fnic->vdev, data);
698 vnic_dev_add_addr(fnic->vdev, new);
708 struct fnic *fnic = lport_priv(lport);
710 spin_lock_irq(&fnic->fnic_lock);
711 fnic_update_mac_locked(fnic, new);
712 spin_unlock_irq(&fnic->fnic_lock);
731 struct fnic *fnic = lport_priv(lport);
743 fnic_update_mac(lport, fnic->ctlr.ctl_src_addr);
744 fnic_set_eth_mode(fnic);
752 fcoe_ctlr_recv_flogi(&fnic->ctlr, lport, fp);
758 spin_lock_irq(&fnic->fnic_lock);
759 if (fnic->state == FNIC_IN_ETH_MODE || fnic->state == FNIC_IN_FC_MODE)
760 fnic->state = FNIC_IN_ETH_TRANS_FC_MODE;
762 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
763 "Unexpected fnic state %s while"
765 fnic_state_to_str(fnic->state));
766 spin_unlock_irq(&fnic->fnic_lock);
769 spin_unlock_irq(&fnic->fnic_lock);
775 ret = fnic_flogi_reg_handler(fnic, port_id);
778 spin_lock_irq(&fnic->fnic_lock);
779 if (fnic->state == FNIC_IN_ETH_TRANS_FC_MODE)
780 fnic->state = FNIC_IN_ETH_MODE;
781 spin_unlock_irq(&fnic->fnic_lock);
790 struct fnic *fnic = vnic_dev_priv(rq->vdev);
793 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
809 pci_unmap_single(fnic->pdev, buf->dma_addr, buf->len,
845 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
849 if (fnic_import_rq_eth_pkt(fnic, skb))
854 shost_printk(KERN_ERR, fnic->lport->host,
855 "fnic rq_cmpl wrong cq type x%x\n", type);
861 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
862 "fnic rq_cmpl fcoe x%x fcsok x%x"
870 spin_lock_irqsave(&fnic->fnic_lock, flags);
871 if (fnic->stop_rx_link_events) {
872 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
875 fr_dev(fp) = fnic->lport;
876 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
877 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no, FNIC_FC_RECV,
879 printk(KERN_ERR "fnic ctlr frame trace error!!!");
882 skb_queue_tail(&fnic->frame_queue, skb);
883 queue_work(fnic_event_queue, &fnic->frame_work);
895 struct fnic *fnic = vnic_dev_priv(vdev);
897 vnic_rq_service(&fnic->rq[q_number], cq_desc, completed_index,
903 int fnic_rq_cmpl_handler(struct fnic *fnic, int rq_work_to_do)
909 for (i = 0; i < fnic->rq_count; i++) {
910 cur_work_done = vnic_cq_service(&fnic->cq[i], rq_work_to_do,
914 err = vnic_rq_fill(&fnic->rq[i], fnic_alloc_rq_frame);
916 shost_printk(KERN_ERR, fnic->lport->host,
933 struct fnic *fnic = vnic_dev_priv(rq->vdev);
941 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
949 pa = pci_map_single(fnic->pdev, skb->data, len, PCI_DMA_FROMDEVICE);
957 struct fnic *fnic = vnic_dev_priv(rq->vdev);
959 pci_unmap_single(fnic->pdev, buf->dma_addr, buf->len,
973 struct fnic *fnic = fnic_from_ctlr(fip);
974 struct vnic_wq *wq = &fnic->wq[0];
980 if (!fnic->vlan_hw_insert) {
987 vlan_hdr->h_vlan_TCI = htons(fnic->vlan_id);
988 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no,
990 printk(KERN_ERR "fnic ctlr frame trace error!!!");
993 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no,
995 printk(KERN_ERR "fnic ctlr frame trace error!!!");
999 pa = pci_map_single(fnic->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
1001 spin_lock_irqsave(&fnic->wq_lock[0], flags);
1003 pci_unmap_single(fnic->pdev, pa, skb->len, PCI_DMA_TODEVICE);
1004 spin_unlock_irqrestore(&fnic->wq_lock[0], flags);
1011 fnic->vlan_id, 1);
1012 spin_unlock_irqrestore(&fnic->wq_lock[0], flags);
1018 static int fnic_send_frame(struct fnic *fnic, struct fc_frame *fp)
1020 struct vnic_wq *wq = &fnic->wq[0];
1035 fcoe_ctlr_els_send(&fnic->ctlr, fnic->lport, skb))
1038 if (!fnic->vlan_hw_insert) {
1044 vlan_hdr->h_vlan_TCI = htons(fnic->vlan_id);
1053 if (fnic->ctlr.map_dest)
1056 memcpy(eth_hdr->h_dest, fnic->ctlr.dest_addr, ETH_ALEN);
1057 memcpy(eth_hdr->h_source, fnic->data_src_addr, ETH_ALEN);
1067 pa = pci_map_single(fnic->pdev, eth_hdr, tot_len, PCI_DMA_TODEVICE);
1069 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no, FNIC_FC_SEND,
1071 printk(KERN_ERR "fnic ctlr frame trace error!!!");
1074 spin_lock_irqsave(&fnic->wq_lock[0], flags);
1077 pci_unmap_single(fnic->pdev, pa,
1085 fnic->vlan_id, 1, 1, 1);
1087 spin_unlock_irqrestore(&fnic->wq_lock[0], flags);
1101 struct fnic *fnic = lport_priv(lp);
1104 if (fnic->in_remove) {
1113 spin_lock_irqsave(&fnic->fnic_lock, flags);
1114 if (fnic->state != FNIC_IN_FC_MODE && fnic->state != FNIC_IN_ETH_MODE) {
1115 skb_queue_tail(&fnic->tx_queue, fp_skb(fp));
1116 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1119 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1121 return fnic_send_frame(fnic, fp);
1126 * @fnic: fnic device
1134 void fnic_flush_tx(struct fnic *fnic)
1139 while ((skb = skb_dequeue(&fnic->tx_queue))) {
1141 fnic_send_frame(fnic, fp);
1146 * fnic_set_eth_mode() - put fnic into ethernet mode.
1147 * @fnic: fnic device
1149 * Called without fnic lock held.
1151 static void fnic_set_eth_mode(struct fnic *fnic)
1157 spin_lock_irqsave(&fnic->fnic_lock, flags);
1159 old_state = fnic->state;
1164 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE;
1165 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1167 ret = fnic_fw_reset_handler(fnic);
1169 spin_lock_irqsave(&fnic->fnic_lock, flags);
1170 if (fnic->state != FNIC_IN_FC_TRANS_ETH_MODE)
1173 fnic->state = old_state;
1180 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1189 struct fnic *fnic = vnic_dev_priv(wq->vdev);
1191 pci_unmap_single(fnic->pdev, buf->dma_addr,
1202 struct fnic *fnic = vnic_dev_priv(vdev);
1205 spin_lock_irqsave(&fnic->wq_lock[q_number], flags);
1206 vnic_wq_service(&fnic->wq[q_number], cq_desc, completed_index,
1208 spin_unlock_irqrestore(&fnic->wq_lock[q_number], flags);
1213 int fnic_wq_cmpl_handler(struct fnic *fnic, int work_to_do)
1218 for (i = 0; i < fnic->raw_wq_count; i++) {
1219 wq_work_done += vnic_cq_service(&fnic->cq[fnic->rq_count+i],
1232 struct fnic *fnic = vnic_dev_priv(wq->vdev);
1234 pci_unmap_single(fnic->pdev, buf->dma_addr,
1241 void fnic_fcoe_reset_vlans(struct fnic *fnic)
1252 spin_lock_irqsave(&fnic->vlans_lock, flags);
1253 if (!list_empty(&fnic->vlans)) {
1254 list_for_each_entry_safe(vlan, next, &fnic->vlans, list) {
1259 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1262 void fnic_handle_fip_timer(struct fnic *fnic)
1266 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
1269 spin_lock_irqsave(&fnic->fnic_lock, flags);
1270 if (fnic->stop_rx_link_events) {
1271 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1274 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1276 if (fnic->ctlr.mode == FIP_ST_NON_FIP)
1279 spin_lock_irqsave(&fnic->vlans_lock, flags);
1280 if (list_empty(&fnic->vlans)) {
1282 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
1284 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1285 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
1289 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
1290 shost_printk(KERN_DEBUG, fnic->lport->host,
1295 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
1297 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1301 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
1303 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1304 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
1312 shost_printk(KERN_INFO, fnic->lport->host,
1318 if (list_empty(&fnic->vlans)) {
1320 spin_unlock_irqrestore(&fnic->vlans_lock,
1322 shost_printk(KERN_INFO, fnic->lport->host,
1325 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
1329 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan,
1331 fnic->set_vlan(fnic, vlan->vid);
1334 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1339 mod_timer(&fnic->fip_timer, round_jiffies(sol_time));