Lines Matching refs:fcf

114 static inline int fcoe_ctlr_mtu_valid(const struct fcoe_fcf *fcf)  in fcoe_ctlr_mtu_valid()  argument
116 return (fcf->flags & FIP_FL_SOL) != 0; in fcoe_ctlr_mtu_valid()
125 static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf) in fcoe_ctlr_fcf_usable() argument
129 return (fcf->flags & flags) == flags; in fcoe_ctlr_fcf_usable()
283 struct fcoe_fcf *fcf; in fcoe_ctlr_reset_fcfs() local
287 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_reset_fcfs()
288 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_reset_fcfs()
332 struct fcoe_fcf *fcf; in fcoe_ctlr_announce() local
339 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_announce()
340 fcf->flogi_sent = 0; in fcoe_ctlr_announce()
387 static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf) in fcoe_ctlr_solicit() argument
408 memcpy(sol->eth.h_dest, fcf ? fcf->fcf_mac : fcoe_all_fcfs, ETH_ALEN); in fcoe_ctlr_solicit()
440 if (!fcf) in fcoe_ctlr_solicit()
550 struct fcoe_fcf *fcf; in fcoe_ctlr_send_keep_alive() local
552 fcf = fip->sel_fcf; in fcoe_ctlr_send_keep_alive()
554 if (!fcf || (ports && !lp->port_id)) in fcoe_ctlr_send_keep_alive()
564 memcpy(kal->eth.h_dest, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_send_keep_alive()
621 struct fcoe_fcf *fcf; in fcoe_ctlr_encaps() local
637 fcf = fip->sel_fcf; in fcoe_ctlr_encaps()
638 if (!fcf) in fcoe_ctlr_encaps()
640 fip_flags = fcf->flags; in fcoe_ctlr_encaps()
645 memcpy(cap->eth.h_dest, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_encaps()
828 struct fcoe_fcf *fcf; in fcoe_ctlr_age_fcfs() local
840 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_age_fcfs()
841 deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2; in fcoe_ctlr_age_fcfs()
842 if (fip->sel_fcf == fcf) { in fcoe_ctlr_age_fcfs()
848 fip->lp->host->host_no, fcf->fabric_name, in fcoe_ctlr_age_fcfs()
854 deadline += fcf->fka_period; in fcoe_ctlr_age_fcfs()
856 if (fip->sel_fcf == fcf) in fcoe_ctlr_age_fcfs()
863 list_del(&fcf->list); in fcoe_ctlr_age_fcfs()
864 list_add(&fcf->list, &del_list); in fcoe_ctlr_age_fcfs()
869 if (fcoe_ctlr_mtu_valid(fcf) && in fcoe_ctlr_age_fcfs()
870 (!sel_time || time_before(sel_time, fcf->time))) in fcoe_ctlr_age_fcfs()
871 sel_time = fcf->time; in fcoe_ctlr_age_fcfs()
876 list_for_each_entry_safe(fcf, next, &del_list, list) { in fcoe_ctlr_age_fcfs()
878 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_age_fcfs()
899 struct sk_buff *skb, struct fcoe_fcf *fcf) in fcoe_ctlr_parse_adv() argument
911 memset(fcf, 0, sizeof(*fcf)); in fcoe_ctlr_parse_adv()
912 fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA); in fcoe_ctlr_parse_adv()
915 fcf->flags = ntohs(fiph->fip_flags); in fcoe_ctlr_parse_adv()
943 fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri; in fcoe_ctlr_parse_adv()
949 memcpy(fcf->fcf_mac, in fcoe_ctlr_parse_adv()
952 memcpy(fcf->fcoe_mac, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_parse_adv()
953 if (!is_valid_ether_addr(fcf->fcf_mac)) { in fcoe_ctlr_parse_adv()
956 fcf->fcf_mac); in fcoe_ctlr_parse_adv()
965 fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn); in fcoe_ctlr_parse_adv()
972 fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn); in fcoe_ctlr_parse_adv()
973 fcf->vfid = ntohs(fab->fd_vfid); in fcoe_ctlr_parse_adv()
974 fcf->fc_map = ntoh24(fab->fd_map); in fcoe_ctlr_parse_adv()
982 fcf->fd_flags = 1; in fcoe_ctlr_parse_adv()
985 fcf->fka_period = msecs_to_jiffies(t); in fcoe_ctlr_parse_adv()
1005 if (!fcf->fc_map || (fcf->fc_map & 0x10000)) in fcoe_ctlr_parse_adv()
1007 if (!fcf->switch_name) in fcoe_ctlr_parse_adv()
1029 struct fcoe_fcf *fcf; in fcoe_ctlr_recv_adv() local
1042 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_recv_adv()
1043 if (fcf->switch_name == new.switch_name && in fcoe_ctlr_recv_adv()
1044 fcf->fabric_name == new.fabric_name && in fcoe_ctlr_recv_adv()
1045 fcf->fc_map == new.fc_map && in fcoe_ctlr_recv_adv()
1046 ether_addr_equal(fcf->fcf_mac, new.fcf_mac)) { in fcoe_ctlr_recv_adv()
1055 fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC); in fcoe_ctlr_recv_adv()
1056 if (!fcf) in fcoe_ctlr_recv_adv()
1059 memcpy(fcf, &new, sizeof(new)); in fcoe_ctlr_recv_adv()
1060 fcf->fip = fip; in fcoe_ctlr_recv_adv()
1061 rc = fcoe_sysfs_fcf_add(fcf); in fcoe_ctlr_recv_adv()
1066 kfree(fcf); in fcoe_ctlr_recv_adv()
1076 fcf->fd_flags = new.fd_flags; in fcoe_ctlr_recv_adv()
1077 if (!fcoe_ctlr_fcf_usable(fcf)) in fcoe_ctlr_recv_adv()
1078 fcf->flags = new.flags; in fcoe_ctlr_recv_adv()
1080 if (fcf == fip->sel_fcf && !fcf->fd_flags) { in fcoe_ctlr_recv_adv()
1081 fip->ctlr_ka_time -= fcf->fka_period; in fcoe_ctlr_recv_adv()
1086 fcf->fka_period = new.fka_period; in fcoe_ctlr_recv_adv()
1087 memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN); in fcoe_ctlr_recv_adv()
1090 mtu_valid = fcoe_ctlr_mtu_valid(fcf); in fcoe_ctlr_recv_adv()
1091 fcf->time = jiffies; in fcoe_ctlr_recv_adv()
1094 fcf->fabric_name, fcf->fcf_mac); in fcoe_ctlr_recv_adv()
1101 fcoe_ctlr_solicit(fip, fcf); in fcoe_ctlr_recv_adv()
1119 list_move(&fcf->list, &fip->fcfs); in fcoe_ctlr_recv_adv()
1126 fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_recv_adv()
1328 struct fcoe_fcf *fcf = fip->sel_fcf; in fcoe_ctlr_recv_clr_vlink() local
1340 if (!fcf) { in fcoe_ctlr_recv_clr_vlink()
1358 if (!ether_addr_equal(eh->h_source, fcf->fcf_mac)) { in fcoe_ctlr_recv_clr_vlink()
1416 if (!ether_addr_equal(mp->fd_mac, fcf->fcf_mac)) in fcoe_ctlr_recv_clr_vlink()
1424 if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name) in fcoe_ctlr_recv_clr_vlink()
1632 struct fcoe_fcf *fcf; in fcoe_ctlr_select() local
1635 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_select()
1639 fcf->fabric_name, fcf->vfid, fcf->fcf_mac, in fcoe_ctlr_select()
1640 fcf->fc_map, fcoe_ctlr_mtu_valid(fcf), in fcoe_ctlr_select()
1641 fcf->flogi_sent, fcf->pri); in fcoe_ctlr_select()
1642 if (!fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_select()
1645 fcf->fabric_name, fcf->fc_map, in fcoe_ctlr_select()
1646 (fcf->flags & FIP_FL_SOL) ? "" : "in", in fcoe_ctlr_select()
1647 (fcf->flags & FIP_FL_AVAIL) ? in fcoe_ctlr_select()
1651 if (!best || fcf->pri < best->pri || best->flogi_sent) in fcoe_ctlr_select()
1652 best = fcf; in fcoe_ctlr_select()
1653 if (fcf->fabric_name != best->fabric_name || in fcoe_ctlr_select()
1654 fcf->vfid != best->vfid || in fcoe_ctlr_select()
1655 fcf->fc_map != best->fc_map) { in fcoe_ctlr_select()
1722 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_retry() local
1728 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_retry()
1729 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_retry()
1753 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_send() local
1756 fcf = fip->sel_fcf; in fcoe_ctlr_flogi_send()
1757 if (!fcf || !fip->flogi_req_send) in fcoe_ctlr_flogi_send()
1766 if (fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1768 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1769 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1771 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_flogi_send()
1772 fcf->flogi_sent = 0; in fcoe_ctlr_flogi_send()
1773 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1776 if (fcf) { in fcoe_ctlr_flogi_send()
1812 struct fcoe_fcf *fcf; in fcoe_ctlr_timer_work() local
1824 fcf = fip->sel_fcf; in fcoe_ctlr_timer_work()
1838 else if (!sel && fcf) in fcoe_ctlr_timer_work()
3243 struct fcoe_fcf *fcf; in fcoe_fcf_get_selected() local
3248 fcf = fcoe_fcf_device_priv(fcf_dev); in fcoe_fcf_get_selected()
3249 if (fcf) in fcoe_fcf_get_selected()
3250 fcf_dev->selected = (fcf == fip->sel_fcf) ? 1 : 0; in fcoe_fcf_get_selected()