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);
57 spin_lock_irqsave(&fnic->fnic_lock, flags);
59 if (fnic->stop_rx_link_events) {
60 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
64 old_link_down_cnt = fnic->link_down_cnt;
65 old_link_status = fnic->link_status;
67 &fnic->fnic_stats.misc_stats.current_port_speed);
69 fnic->link_status = vnic_dev_link_status(fnic->vdev);
70 fnic->link_down_cnt = vnic_dev_link_down_cnt(fnic->vdev);
72 new_port_speed = vnic_dev_port_speed(fnic->vdev);
73 atomic64_set(&fnic->fnic_stats.misc_stats.current_port_speed,
76 shost_printk(KERN_INFO, fnic->lport->host,
80 switch (vnic_dev_port_speed(fnic->vdev)) {
82 fc_host_speed(fnic->lport->host) = FC_PORTSPEED_10GBIT;
83 fnic->lport->link_supported_speeds = FC_PORTSPEED_10GBIT;
86 fc_host_speed(fnic->lport->host) = FC_PORTSPEED_20GBIT;
87 fnic->lport->link_supported_speeds = FC_PORTSPEED_20GBIT;
90 fc_host_speed(fnic->lport->host) = FC_PORTSPEED_25GBIT;
91 fnic->lport->link_supported_speeds = FC_PORTSPEED_25GBIT;
95 fc_host_speed(fnic->lport->host) = FC_PORTSPEED_40GBIT;
96 fnic->lport->link_supported_speeds = FC_PORTSPEED_40GBIT;
99 fc_host_speed(fnic->lport->host) = FC_PORTSPEED_100GBIT;
100 fnic->lport->link_supported_speeds = FC_PORTSPEED_100GBIT;
103 fc_host_speed(fnic->lport->host) = FC_PORTSPEED_UNKNOWN;
104 fnic->lport->link_supported_speeds = FC_PORTSPEED_UNKNOWN;
108 if (old_link_status == fnic->link_status) {
109 if (!fnic->link_status) {
111 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
112 fnic_fc_trace_set_data(fnic->lport->host->host_no,
116 if (old_link_down_cnt != fnic->link_down_cnt) {
118 fnic->lport->host_stats.link_failure_count++;
119 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
121 fnic->lport->host->host_no,
126 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
128 fcoe_ctlr_link_down(&fnic->ctlr);
129 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
132 fnic->lport->host->host_no,
138 fnic_fcoe_send_vlan_req(fnic);
141 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
143 fcoe_ctlr_link_up(&fnic->ctlr);
146 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
148 fnic->lport->host->host_no, FNIC_FC_LE,
153 } else if (fnic->link_status) {
155 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
156 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
159 fnic->lport->host->host_no,
162 fnic_fcoe_send_vlan_req(fnic);
165 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host, "link up\n");
166 fnic_fc_trace_set_data(fnic->lport->host->host_no, FNIC_FC_LE,
168 fcoe_ctlr_link_up(&fnic->ctlr);
171 fnic->lport->host_stats.link_failure_count++;
172 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
173 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host, "link down\n");
175 fnic->lport->host->host_no, FNIC_FC_LE,
178 if (fnic->config.flags & VFCF_FIP_CAPABLE) {
179 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
181 del_timer_sync(&fnic->fip_timer);
183 fcoe_ctlr_link_down(&fnic->ctlr);
193 struct fnic *fnic = container_of(work, struct fnic, frame_work);
194 struct fc_lport *lp = fnic->lport;
199 while ((skb = skb_dequeue(&fnic->frame_queue))) {
201 spin_lock_irqsave(&fnic->fnic_lock, flags);
202 if (fnic->stop_rx_link_events) {
203 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
213 if (fnic->state != FNIC_IN_FC_MODE &&
214 fnic->state != FNIC_IN_ETH_MODE) {
215 skb_queue_head(&fnic->frame_queue, skb);
216 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
219 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
225 void fnic_fcoe_evlist_free(struct fnic *fnic)
231 spin_lock_irqsave(&fnic->fnic_lock, flags);
232 if (list_empty(&fnic->evlist)) {
233 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
237 list_for_each_entry_safe(fevt, next, &fnic->evlist, list) {
241 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
246 struct fnic *fnic = container_of(work, struct fnic, event_work);
251 spin_lock_irqsave(&fnic->fnic_lock, flags);
252 if (list_empty(&fnic->evlist)) {
253 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
257 list_for_each_entry_safe(fevt, next, &fnic->evlist, list) {
258 if (fnic->stop_rx_link_events) {
261 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
268 if (fnic->state != FNIC_IN_FC_MODE &&
269 fnic->state != FNIC_IN_ETH_MODE) {
270 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
277 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
278 fnic_fcoe_send_vlan_req(fnic);
279 spin_lock_irqsave(&fnic->fnic_lock, flags);
282 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
284 fnic_fcoe_start_fcf_disc(fnic);
287 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
293 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
369 static void fnic_fcoe_send_vlan_req(struct fnic *fnic)
371 struct fcoe_ctlr *fip = &fnic->ctlr;
372 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
378 fnic_fcoe_reset_vlans(fnic);
379 fnic->set_vlan(fnic, 0);
382 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
419 mod_timer(&fnic->fip_timer, round_jiffies(vlan_tov));
422 static void fnic_fcoe_process_vlan_resp(struct fnic *fnic, struct sk_buff *skb)
424 struct fcoe_ctlr *fip = &fnic->ctlr;
427 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
435 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
440 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
445 fnic_fcoe_reset_vlans(fnic);
446 spin_lock_irqsave(&fnic->vlans_lock, flags);
453 shost_printk(KERN_INFO, fnic->lport->host,
458 spin_unlock_irqrestore(&fnic->vlans_lock,
464 list_add_tail(&vlan->list, &fnic->vlans);
472 if (list_empty(&fnic->vlans)) {
475 FNIC_FCS_DBG(KERN_INFO, fnic->lport->host,
477 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
481 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
482 fnic->set_vlan(fnic, vlan->vid);
485 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
491 mod_timer(&fnic->fip_timer, round_jiffies(sol_time));
496 static void fnic_fcoe_start_fcf_disc(struct fnic *fnic)
502 spin_lock_irqsave(&fnic->vlans_lock, flags);
503 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
504 fnic->set_vlan(fnic, vlan->vid);
507 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
510 fcoe_ctlr_link_up(&fnic->ctlr);
513 mod_timer(&fnic->fip_timer, round_jiffies(sol_time));
516 static int fnic_fcoe_vlan_check(struct fnic *fnic, u16 flag)
521 spin_lock_irqsave(&fnic->vlans_lock, flags);
522 if (list_empty(&fnic->vlans)) {
523 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
527 fvlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
529 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
535 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
538 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
542 static void fnic_event_enq(struct fnic *fnic, enum fnic_evt ev)
551 fevt->fnic = fnic;
554 spin_lock_irqsave(&fnic->fnic_lock, flags);
555 list_add_tail(&fevt->list, &fnic->evlist);
556 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
558 schedule_work(&fnic->event_work);
561 static int fnic_fcoe_handle_fip_frame(struct fnic *fnic, struct sk_buff *skb)
585 if (fnic_fcoe_vlan_check(fnic, ntohs(fiph->fip_flags)))
591 fnic_fcoe_process_vlan_resp(fnic, skb);
595 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
605 struct fnic *fnic = container_of(work, struct fnic, fip_frame_work);
606 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
611 while ((skb = skb_dequeue(&fnic->fip_frame_queue))) {
612 spin_lock_irqsave(&fnic->fnic_lock, flags);
613 if (fnic->stop_rx_link_events) {
614 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
622 if (fnic->state != FNIC_IN_FC_MODE &&
623 fnic->state != FNIC_IN_ETH_MODE) {
624 skb_queue_head(&fnic->fip_frame_queue, skb);
625 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
628 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
632 if (fnic_fcoe_handle_fip_frame(fnic, skb) <= 0) {
640 if (is_fnic_fip_flogi_reject(&fnic->ctlr, skb)) {
643 shost_printk(KERN_INFO, fnic->lport->host,
645 fcoe_ctlr_link_down(&fnic->ctlr);
647 fnic_fcoe_send_vlan_req(fnic);
651 fcoe_ctlr_recv(&fnic->ctlr, skb);
659 * @fnic: fnic instance.
662 static inline int fnic_import_rq_eth_pkt(struct fnic *fnic, struct sk_buff *skb)
679 if (!(fnic->config.flags & VFCF_FIP_CAPABLE)) {
685 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no,
687 printk(KERN_ERR "fnic ctlr frame trace error!!!");
689 skb_queue_tail(&fnic->fip_frame_queue, skb);
690 queue_work(fnic_fip_queue, &fnic->fip_frame_work);
719 * @fnic: fnic instance.
722 * Called with the fnic lock held.
724 void fnic_update_mac_locked(struct fnic *fnic, u8 *new)
726 u8 *ctl = fnic->ctlr.ctl_src_addr;
727 u8 *data = fnic->data_src_addr;
733 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host, "update_mac %pM\n", new);
735 vnic_dev_del_addr(fnic->vdev, data);
738 vnic_dev_add_addr(fnic->vdev, new);
748 struct fnic *fnic = lport_priv(lport);
750 spin_lock_irq(&fnic->fnic_lock);
751 fnic_update_mac_locked(fnic, new);
752 spin_unlock_irq(&fnic->fnic_lock);
771 struct fnic *fnic = lport_priv(lport);
783 fnic_update_mac(lport, fnic->ctlr.ctl_src_addr);
784 fnic_set_eth_mode(fnic);
792 fcoe_ctlr_recv_flogi(&fnic->ctlr, lport, fp);
798 spin_lock_irq(&fnic->fnic_lock);
799 if (fnic->state == FNIC_IN_ETH_MODE || fnic->state == FNIC_IN_FC_MODE)
800 fnic->state = FNIC_IN_ETH_TRANS_FC_MODE;
802 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
803 "Unexpected fnic state %s while"
805 fnic_state_to_str(fnic->state));
806 spin_unlock_irq(&fnic->fnic_lock);
809 spin_unlock_irq(&fnic->fnic_lock);
815 ret = fnic_flogi_reg_handler(fnic, port_id);
818 spin_lock_irq(&fnic->fnic_lock);
819 if (fnic->state == FNIC_IN_ETH_TRANS_FC_MODE)
820 fnic->state = FNIC_IN_ETH_MODE;
821 spin_unlock_irq(&fnic->fnic_lock);
830 struct fnic *fnic = vnic_dev_priv(rq->vdev);
833 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
848 dma_unmap_single(&fnic->pdev->dev, buf->dma_addr, buf->len,
882 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
886 if (fnic_import_rq_eth_pkt(fnic, skb))
891 shost_printk(KERN_ERR, fnic->lport->host,
892 "fnic rq_cmpl wrong cq type x%x\n", type);
898 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
899 "fnic rq_cmpl fcoe x%x fcsok x%x"
907 spin_lock_irqsave(&fnic->fnic_lock, flags);
908 if (fnic->stop_rx_link_events) {
909 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
912 fr_dev(fp) = fnic->lport;
913 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
914 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no, FNIC_FC_RECV,
916 printk(KERN_ERR "fnic ctlr frame trace error!!!");
919 skb_queue_tail(&fnic->frame_queue, skb);
920 queue_work(fnic_event_queue, &fnic->frame_work);
932 struct fnic *fnic = vnic_dev_priv(vdev);
934 vnic_rq_service(&fnic->rq[q_number], cq_desc, completed_index,
940 int fnic_rq_cmpl_handler(struct fnic *fnic, int rq_work_to_do)
946 for (i = 0; i < fnic->rq_count; i++) {
947 cur_work_done = vnic_cq_service(&fnic->cq[i], rq_work_to_do,
951 err = vnic_rq_fill(&fnic->rq[i], fnic_alloc_rq_frame);
953 shost_printk(KERN_ERR, fnic->lport->host,
970 struct fnic *fnic = vnic_dev_priv(rq->vdev);
979 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
987 pa = dma_map_single(&fnic->pdev->dev, skb->data, len, DMA_FROM_DEVICE);
988 if (dma_mapping_error(&fnic->pdev->dev, pa)) {
1005 struct fnic *fnic = vnic_dev_priv(rq->vdev);
1007 dma_unmap_single(&fnic->pdev->dev, buf->dma_addr, buf->len,
1021 struct fnic *fnic = fnic_from_ctlr(fip);
1022 struct vnic_wq *wq = &fnic->wq[0];
1028 if (!fnic->vlan_hw_insert) {
1034 vlan_hdr->h_vlan_TCI = htons(fnic->vlan_id);
1035 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no,
1037 printk(KERN_ERR "fnic ctlr frame trace error!!!");
1040 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no,
1042 printk(KERN_ERR "fnic ctlr frame trace error!!!");
1046 pa = dma_map_single(&fnic->pdev->dev, skb->data, skb->len,
1048 if (dma_mapping_error(&fnic->pdev->dev, pa)) {
1053 spin_lock_irqsave(&fnic->wq_lock[0], flags);
1059 fnic->vlan_id, 1);
1060 spin_unlock_irqrestore(&fnic->wq_lock[0], flags);
1064 spin_unlock_irqrestore(&fnic->wq_lock[0], flags);
1065 dma_unmap_single(&fnic->pdev->dev, pa, skb->len, DMA_TO_DEVICE);
1073 static int fnic_send_frame(struct fnic *fnic, struct fc_frame *fp)
1075 struct vnic_wq *wq = &fnic->wq[0];
1090 fcoe_ctlr_els_send(&fnic->ctlr, fnic->lport, skb))
1093 if (!fnic->vlan_hw_insert) {
1099 vlan_hdr->h_vlan_TCI = htons(fnic->vlan_id);
1108 if (fnic->ctlr.map_dest)
1111 memcpy(eth_hdr->h_dest, fnic->ctlr.dest_addr, ETH_ALEN);
1112 memcpy(eth_hdr->h_source, fnic->data_src_addr, ETH_ALEN);
1122 pa = dma_map_single(&fnic->pdev->dev, eth_hdr, tot_len, DMA_TO_DEVICE);
1123 if (dma_mapping_error(&fnic->pdev->dev, pa)) {
1129 if ((fnic_fc_trace_set_data(fnic->lport->host->host_no, FNIC_FC_SEND,
1131 printk(KERN_ERR "fnic ctlr frame trace error!!!");
1134 spin_lock_irqsave(&fnic->wq_lock[0], flags);
1137 dma_unmap_single(&fnic->pdev->dev, pa, tot_len, DMA_TO_DEVICE);
1144 fnic->vlan_id, 1, 1, 1);
1147 spin_unlock_irqrestore(&fnic->wq_lock[0], flags);
1162 struct fnic *fnic = lport_priv(lp);
1165 if (fnic->in_remove) {
1174 spin_lock_irqsave(&fnic->fnic_lock, flags);
1175 if (fnic->state != FNIC_IN_FC_MODE && fnic->state != FNIC_IN_ETH_MODE) {
1176 skb_queue_tail(&fnic->tx_queue, fp_skb(fp));
1177 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1180 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1182 return fnic_send_frame(fnic, fp);
1187 * @fnic: fnic device
1195 void fnic_flush_tx(struct fnic *fnic)
1200 while ((skb = skb_dequeue(&fnic->tx_queue))) {
1202 fnic_send_frame(fnic, fp);
1207 * fnic_set_eth_mode() - put fnic into ethernet mode.
1208 * @fnic: fnic device
1210 * Called without fnic lock held.
1212 static void fnic_set_eth_mode(struct fnic *fnic)
1218 spin_lock_irqsave(&fnic->fnic_lock, flags);
1220 old_state = fnic->state;
1225 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE;
1226 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1228 ret = fnic_fw_reset_handler(fnic);
1230 spin_lock_irqsave(&fnic->fnic_lock, flags);
1231 if (fnic->state != FNIC_IN_FC_TRANS_ETH_MODE)
1234 fnic->state = old_state;
1241 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1250 struct fnic *fnic = vnic_dev_priv(wq->vdev);
1252 dma_unmap_single(&fnic->pdev->dev, buf->dma_addr, buf->len,
1263 struct fnic *fnic = vnic_dev_priv(vdev);
1266 spin_lock_irqsave(&fnic->wq_lock[q_number], flags);
1267 vnic_wq_service(&fnic->wq[q_number], cq_desc, completed_index,
1269 spin_unlock_irqrestore(&fnic->wq_lock[q_number], flags);
1274 int fnic_wq_cmpl_handler(struct fnic *fnic, int work_to_do)
1279 for (i = 0; i < fnic->raw_wq_count; i++) {
1280 wq_work_done += vnic_cq_service(&fnic->cq[fnic->rq_count+i],
1293 struct fnic *fnic = vnic_dev_priv(wq->vdev);
1295 dma_unmap_single(&fnic->pdev->dev, buf->dma_addr, buf->len,
1302 void fnic_fcoe_reset_vlans(struct fnic *fnic)
1313 spin_lock_irqsave(&fnic->vlans_lock, flags);
1314 if (!list_empty(&fnic->vlans)) {
1315 list_for_each_entry_safe(vlan, next, &fnic->vlans, list) {
1320 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1323 void fnic_handle_fip_timer(struct fnic *fnic)
1327 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
1330 spin_lock_irqsave(&fnic->fnic_lock, flags);
1331 if (fnic->stop_rx_link_events) {
1332 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1335 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
1337 if (fnic->ctlr.mode == FIP_MODE_NON_FIP)
1340 spin_lock_irqsave(&fnic->vlans_lock, flags);
1341 if (list_empty(&fnic->vlans)) {
1342 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1345 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
1347 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
1351 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan, list);
1352 shost_printk(KERN_DEBUG, fnic->lport->host,
1357 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
1359 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1362 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1365 FNIC_FCS_DBG(KERN_DEBUG, fnic->lport->host,
1367 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
1375 shost_printk(KERN_INFO, fnic->lport->host,
1381 if (list_empty(&fnic->vlans)) {
1383 spin_unlock_irqrestore(&fnic->vlans_lock,
1385 shost_printk(KERN_INFO, fnic->lport->host,
1388 fnic_event_enq(fnic, FNIC_EVT_START_VLAN_DISC);
1392 vlan = list_first_entry(&fnic->vlans, struct fcoe_vlan,
1394 fnic->set_vlan(fnic, vlan->vid);
1397 spin_unlock_irqrestore(&fnic->vlans_lock, flags);
1402 mod_timer(&fnic->fip_timer, round_jiffies(sol_time));