Lines Matching refs:fcf

102 static inline int fcoe_ctlr_mtu_valid(const struct fcoe_fcf *fcf)  in fcoe_ctlr_mtu_valid()  argument
104 return (fcf->flags & FIP_FL_SOL) != 0; in fcoe_ctlr_mtu_valid()
113 static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf) in fcoe_ctlr_fcf_usable() argument
117 return (fcf->flags & flags) == flags; in fcoe_ctlr_fcf_usable()
272 struct fcoe_fcf *fcf; in fcoe_ctlr_reset_fcfs() local
276 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_reset_fcfs()
277 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_reset_fcfs()
321 struct fcoe_fcf *fcf; in fcoe_ctlr_announce() local
328 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_announce()
329 fcf->flogi_sent = 0; in fcoe_ctlr_announce()
376 static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf) in fcoe_ctlr_solicit() argument
397 memcpy(sol->eth.h_dest, fcf ? fcf->fcf_mac : fcoe_all_fcfs, ETH_ALEN); in fcoe_ctlr_solicit()
429 if (!fcf) in fcoe_ctlr_solicit()
542 struct fcoe_fcf *fcf; in fcoe_ctlr_send_keep_alive() local
544 fcf = fip->sel_fcf; in fcoe_ctlr_send_keep_alive()
546 if (!fcf || (ports && !lp->port_id)) in fcoe_ctlr_send_keep_alive()
556 memcpy(kal->eth.h_dest, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_send_keep_alive()
614 struct fcoe_fcf *fcf; in fcoe_ctlr_encaps() local
630 fcf = fip->sel_fcf; in fcoe_ctlr_encaps()
631 if (!fcf) in fcoe_ctlr_encaps()
633 fip_flags = fcf->flags; in fcoe_ctlr_encaps()
638 memcpy(cap->eth.h_dest, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_encaps()
821 struct fcoe_fcf *fcf; in fcoe_ctlr_age_fcfs() local
830 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_age_fcfs()
831 deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2; in fcoe_ctlr_age_fcfs()
832 if (fip->sel_fcf == fcf) { in fcoe_ctlr_age_fcfs()
840 fip->lp->host->host_no, fcf->fabric_name, in fcoe_ctlr_age_fcfs()
846 deadline += fcf->fka_period; in fcoe_ctlr_age_fcfs()
848 if (fip->sel_fcf == fcf) in fcoe_ctlr_age_fcfs()
855 list_del(&fcf->list); in fcoe_ctlr_age_fcfs()
856 list_add(&fcf->list, &del_list); in fcoe_ctlr_age_fcfs()
861 if (fcoe_ctlr_mtu_valid(fcf) && in fcoe_ctlr_age_fcfs()
862 (!sel_time || time_before(sel_time, fcf->time))) in fcoe_ctlr_age_fcfs()
863 sel_time = fcf->time; in fcoe_ctlr_age_fcfs()
867 list_for_each_entry_safe(fcf, next, &del_list, list) { in fcoe_ctlr_age_fcfs()
869 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_age_fcfs()
890 struct sk_buff *skb, struct fcoe_fcf *fcf) in fcoe_ctlr_parse_adv() argument
902 memset(fcf, 0, sizeof(*fcf)); in fcoe_ctlr_parse_adv()
903 fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA); in fcoe_ctlr_parse_adv()
906 fcf->flags = ntohs(fiph->fip_flags); in fcoe_ctlr_parse_adv()
934 fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri; in fcoe_ctlr_parse_adv()
940 memcpy(fcf->fcf_mac, in fcoe_ctlr_parse_adv()
943 memcpy(fcf->fcoe_mac, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_parse_adv()
944 if (!is_valid_ether_addr(fcf->fcf_mac)) { in fcoe_ctlr_parse_adv()
947 fcf->fcf_mac); in fcoe_ctlr_parse_adv()
956 fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn); in fcoe_ctlr_parse_adv()
963 fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn); in fcoe_ctlr_parse_adv()
964 fcf->vfid = ntohs(fab->fd_vfid); in fcoe_ctlr_parse_adv()
965 fcf->fc_map = ntoh24(fab->fd_map); in fcoe_ctlr_parse_adv()
973 fcf->fd_flags = 1; in fcoe_ctlr_parse_adv()
976 fcf->fka_period = msecs_to_jiffies(t); in fcoe_ctlr_parse_adv()
996 if (!fcf->fc_map || (fcf->fc_map & 0x10000)) in fcoe_ctlr_parse_adv()
998 if (!fcf->switch_name) in fcoe_ctlr_parse_adv()
1020 struct fcoe_fcf *fcf; in fcoe_ctlr_recv_adv() local
1033 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_recv_adv()
1034 if (fcf->switch_name == new.switch_name && in fcoe_ctlr_recv_adv()
1035 fcf->fabric_name == new.fabric_name && in fcoe_ctlr_recv_adv()
1036 fcf->fc_map == new.fc_map && in fcoe_ctlr_recv_adv()
1037 ether_addr_equal(fcf->fcf_mac, new.fcf_mac)) { in fcoe_ctlr_recv_adv()
1046 fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC); in fcoe_ctlr_recv_adv()
1047 if (!fcf) in fcoe_ctlr_recv_adv()
1050 memcpy(fcf, &new, sizeof(new)); in fcoe_ctlr_recv_adv()
1051 fcf->fip = fip; in fcoe_ctlr_recv_adv()
1052 rc = fcoe_sysfs_fcf_add(fcf); in fcoe_ctlr_recv_adv()
1057 kfree(fcf); in fcoe_ctlr_recv_adv()
1067 fcf->fd_flags = new.fd_flags; in fcoe_ctlr_recv_adv()
1068 if (!fcoe_ctlr_fcf_usable(fcf)) in fcoe_ctlr_recv_adv()
1069 fcf->flags = new.flags; in fcoe_ctlr_recv_adv()
1071 if (fcf == fip->sel_fcf && !fcf->fd_flags) { in fcoe_ctlr_recv_adv()
1072 fip->ctlr_ka_time -= fcf->fka_period; in fcoe_ctlr_recv_adv()
1077 fcf->fka_period = new.fka_period; in fcoe_ctlr_recv_adv()
1078 memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN); in fcoe_ctlr_recv_adv()
1081 mtu_valid = fcoe_ctlr_mtu_valid(fcf); in fcoe_ctlr_recv_adv()
1082 fcf->time = jiffies; in fcoe_ctlr_recv_adv()
1085 fcf->fabric_name, fcf->fcf_mac); in fcoe_ctlr_recv_adv()
1092 fcoe_ctlr_solicit(fip, fcf); in fcoe_ctlr_recv_adv()
1110 list_move(&fcf->list, &fip->fcfs); in fcoe_ctlr_recv_adv()
1117 fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_recv_adv()
1316 struct fcoe_fcf *fcf = fip->sel_fcf; in fcoe_ctlr_recv_clr_vlink() local
1328 if (!fcf) { in fcoe_ctlr_recv_clr_vlink()
1346 if (!ether_addr_equal(eh->h_source, fcf->fcf_mac)) { in fcoe_ctlr_recv_clr_vlink()
1404 if (!ether_addr_equal(mp->fd_mac, fcf->fcf_mac)) in fcoe_ctlr_recv_clr_vlink()
1412 if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name) in fcoe_ctlr_recv_clr_vlink()
1617 struct fcoe_fcf *fcf; in fcoe_ctlr_select() local
1620 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_select()
1624 fcf->fabric_name, fcf->vfid, fcf->fcf_mac, in fcoe_ctlr_select()
1625 fcf->fc_map, fcoe_ctlr_mtu_valid(fcf), in fcoe_ctlr_select()
1626 fcf->flogi_sent, fcf->pri); in fcoe_ctlr_select()
1627 if (!fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_select()
1630 fcf->fabric_name, fcf->fc_map, in fcoe_ctlr_select()
1631 (fcf->flags & FIP_FL_SOL) ? "" : "in", in fcoe_ctlr_select()
1632 (fcf->flags & FIP_FL_AVAIL) ? in fcoe_ctlr_select()
1636 if (!best || fcf->pri < best->pri || best->flogi_sent) in fcoe_ctlr_select()
1637 best = fcf; in fcoe_ctlr_select()
1638 if (fcf->fabric_name != best->fabric_name || in fcoe_ctlr_select()
1639 fcf->vfid != best->vfid || in fcoe_ctlr_select()
1640 fcf->fc_map != best->fc_map) { in fcoe_ctlr_select()
1707 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_retry() local
1713 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_retry()
1714 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_retry()
1738 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_send() local
1741 fcf = fip->sel_fcf; in fcoe_ctlr_flogi_send()
1742 if (!fcf || !fip->flogi_req_send) in fcoe_ctlr_flogi_send()
1751 if (fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1753 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1754 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1756 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_flogi_send()
1757 fcf->flogi_sent = 0; in fcoe_ctlr_flogi_send()
1758 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1761 if (fcf) { in fcoe_ctlr_flogi_send()
1797 struct fcoe_fcf *fcf; in fcoe_ctlr_timer_work() local
1809 fcf = fip->sel_fcf; in fcoe_ctlr_timer_work()
1823 else if (!sel && fcf) in fcoe_ctlr_timer_work()
3218 struct fcoe_fcf *fcf; in fcoe_fcf_get_selected() local
3223 fcf = fcoe_fcf_device_priv(fcf_dev); in fcoe_fcf_get_selected()
3224 if (fcf) in fcoe_fcf_get_selected()
3225 fcf_dev->selected = (fcf == fip->sel_fcf) ? 1 : 0; in fcoe_fcf_get_selected()