Lines Matching refs:fcf

112 static inline int fcoe_ctlr_mtu_valid(const struct fcoe_fcf *fcf)  in fcoe_ctlr_mtu_valid()  argument
114 return (fcf->flags & FIP_FL_SOL) != 0; in fcoe_ctlr_mtu_valid()
123 static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf) in fcoe_ctlr_fcf_usable() argument
127 return (fcf->flags & flags) == flags; in fcoe_ctlr_fcf_usable()
280 struct fcoe_fcf *fcf; in fcoe_ctlr_reset_fcfs() local
284 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_reset_fcfs()
285 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_reset_fcfs()
329 struct fcoe_fcf *fcf; in fcoe_ctlr_announce() local
336 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_announce()
337 fcf->flogi_sent = 0; in fcoe_ctlr_announce()
384 static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf) in fcoe_ctlr_solicit() argument
405 memcpy(sol->eth.h_dest, fcf ? fcf->fcf_mac : fcoe_all_fcfs, ETH_ALEN); in fcoe_ctlr_solicit()
437 if (!fcf) in fcoe_ctlr_solicit()
547 struct fcoe_fcf *fcf; in fcoe_ctlr_send_keep_alive() local
549 fcf = fip->sel_fcf; in fcoe_ctlr_send_keep_alive()
551 if (!fcf || (ports && !lp->port_id)) in fcoe_ctlr_send_keep_alive()
561 memcpy(kal->eth.h_dest, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_send_keep_alive()
618 struct fcoe_fcf *fcf; in fcoe_ctlr_encaps() local
634 fcf = fip->sel_fcf; in fcoe_ctlr_encaps()
635 if (!fcf) in fcoe_ctlr_encaps()
637 fip_flags = fcf->flags; in fcoe_ctlr_encaps()
642 memcpy(cap->eth.h_dest, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_encaps()
824 struct fcoe_fcf *fcf; in fcoe_ctlr_age_fcfs() local
836 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_age_fcfs()
837 deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2; in fcoe_ctlr_age_fcfs()
838 if (fip->sel_fcf == fcf) { in fcoe_ctlr_age_fcfs()
844 fip->lp->host->host_no, fcf->fabric_name, in fcoe_ctlr_age_fcfs()
850 deadline += fcf->fka_period; in fcoe_ctlr_age_fcfs()
852 if (fip->sel_fcf == fcf) in fcoe_ctlr_age_fcfs()
859 list_del(&fcf->list); in fcoe_ctlr_age_fcfs()
860 list_add(&fcf->list, &del_list); in fcoe_ctlr_age_fcfs()
865 if (fcoe_ctlr_mtu_valid(fcf) && in fcoe_ctlr_age_fcfs()
866 (!sel_time || time_before(sel_time, fcf->time))) in fcoe_ctlr_age_fcfs()
867 sel_time = fcf->time; in fcoe_ctlr_age_fcfs()
872 list_for_each_entry_safe(fcf, next, &del_list, list) { in fcoe_ctlr_age_fcfs()
874 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_age_fcfs()
895 struct sk_buff *skb, struct fcoe_fcf *fcf) in fcoe_ctlr_parse_adv() argument
907 memset(fcf, 0, sizeof(*fcf)); in fcoe_ctlr_parse_adv()
908 fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA); in fcoe_ctlr_parse_adv()
911 fcf->flags = ntohs(fiph->fip_flags); in fcoe_ctlr_parse_adv()
939 fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri; in fcoe_ctlr_parse_adv()
945 memcpy(fcf->fcf_mac, in fcoe_ctlr_parse_adv()
948 memcpy(fcf->fcoe_mac, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_parse_adv()
949 if (!is_valid_ether_addr(fcf->fcf_mac)) { in fcoe_ctlr_parse_adv()
952 fcf->fcf_mac); in fcoe_ctlr_parse_adv()
961 fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn); in fcoe_ctlr_parse_adv()
968 fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn); in fcoe_ctlr_parse_adv()
969 fcf->vfid = ntohs(fab->fd_vfid); in fcoe_ctlr_parse_adv()
970 fcf->fc_map = ntoh24(fab->fd_map); in fcoe_ctlr_parse_adv()
978 fcf->fd_flags = 1; in fcoe_ctlr_parse_adv()
981 fcf->fka_period = msecs_to_jiffies(t); in fcoe_ctlr_parse_adv()
1001 if (!fcf->fc_map || (fcf->fc_map & 0x10000)) in fcoe_ctlr_parse_adv()
1003 if (!fcf->switch_name) in fcoe_ctlr_parse_adv()
1025 struct fcoe_fcf *fcf; in fcoe_ctlr_recv_adv() local
1038 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_recv_adv()
1039 if (fcf->switch_name == new.switch_name && in fcoe_ctlr_recv_adv()
1040 fcf->fabric_name == new.fabric_name && in fcoe_ctlr_recv_adv()
1041 fcf->fc_map == new.fc_map && in fcoe_ctlr_recv_adv()
1042 ether_addr_equal(fcf->fcf_mac, new.fcf_mac)) { in fcoe_ctlr_recv_adv()
1051 fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC); in fcoe_ctlr_recv_adv()
1052 if (!fcf) in fcoe_ctlr_recv_adv()
1055 memcpy(fcf, &new, sizeof(new)); in fcoe_ctlr_recv_adv()
1056 fcf->fip = fip; in fcoe_ctlr_recv_adv()
1057 rc = fcoe_sysfs_fcf_add(fcf); in fcoe_ctlr_recv_adv()
1062 kfree(fcf); in fcoe_ctlr_recv_adv()
1072 fcf->fd_flags = new.fd_flags; in fcoe_ctlr_recv_adv()
1073 if (!fcoe_ctlr_fcf_usable(fcf)) in fcoe_ctlr_recv_adv()
1074 fcf->flags = new.flags; in fcoe_ctlr_recv_adv()
1076 if (fcf == fip->sel_fcf && !fcf->fd_flags) { in fcoe_ctlr_recv_adv()
1077 fip->ctlr_ka_time -= fcf->fka_period; in fcoe_ctlr_recv_adv()
1082 fcf->fka_period = new.fka_period; in fcoe_ctlr_recv_adv()
1083 memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN); in fcoe_ctlr_recv_adv()
1086 mtu_valid = fcoe_ctlr_mtu_valid(fcf); in fcoe_ctlr_recv_adv()
1087 fcf->time = jiffies; in fcoe_ctlr_recv_adv()
1090 fcf->fabric_name, fcf->fcf_mac); in fcoe_ctlr_recv_adv()
1097 fcoe_ctlr_solicit(fip, fcf); in fcoe_ctlr_recv_adv()
1115 list_move(&fcf->list, &fip->fcfs); in fcoe_ctlr_recv_adv()
1121 if (mtu_valid && !fip->sel_fcf && fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_recv_adv()
1323 struct fcoe_fcf *fcf = fip->sel_fcf; in fcoe_ctlr_recv_clr_vlink() local
1333 if (!fcf || !lport->port_id) { in fcoe_ctlr_recv_clr_vlink()
1382 if (!ether_addr_equal(mp->fd_mac, fcf->fcf_mac)) in fcoe_ctlr_recv_clr_vlink()
1390 if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name) in fcoe_ctlr_recv_clr_vlink()
1591 struct fcoe_fcf *fcf; in fcoe_ctlr_select() local
1594 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_select()
1598 fcf->fabric_name, fcf->vfid, fcf->fcf_mac, in fcoe_ctlr_select()
1599 fcf->fc_map, fcoe_ctlr_mtu_valid(fcf), in fcoe_ctlr_select()
1600 fcf->flogi_sent, fcf->pri); in fcoe_ctlr_select()
1601 if (!fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_select()
1604 fcf->fabric_name, fcf->fc_map, in fcoe_ctlr_select()
1605 (fcf->flags & FIP_FL_SOL) ? "" : "in", in fcoe_ctlr_select()
1606 (fcf->flags & FIP_FL_AVAIL) ? in fcoe_ctlr_select()
1610 if (!best || fcf->pri < best->pri || best->flogi_sent) in fcoe_ctlr_select()
1611 best = fcf; in fcoe_ctlr_select()
1612 if (fcf->fabric_name != best->fabric_name || in fcoe_ctlr_select()
1613 fcf->vfid != best->vfid || in fcoe_ctlr_select()
1614 fcf->fc_map != best->fc_map) { in fcoe_ctlr_select()
1681 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_retry() local
1687 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_retry()
1688 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_retry()
1712 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_send() local
1715 fcf = fip->sel_fcf; in fcoe_ctlr_flogi_send()
1716 if (!fcf || !fip->flogi_req_send) in fcoe_ctlr_flogi_send()
1725 if (fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1727 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1728 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1730 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_flogi_send()
1731 fcf->flogi_sent = 0; in fcoe_ctlr_flogi_send()
1732 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1735 if (fcf) { in fcoe_ctlr_flogi_send()
1771 struct fcoe_fcf *fcf; in fcoe_ctlr_timer_work() local
1783 fcf = fip->sel_fcf; in fcoe_ctlr_timer_work()
1797 else if (!sel && fcf) in fcoe_ctlr_timer_work()
2929 struct fcoe_fcf *fcf; in fcoe_fcf_get_selected() local
2934 fcf = fcoe_fcf_device_priv(fcf_dev); in fcoe_fcf_get_selected()
2935 if (fcf) in fcoe_fcf_get_selected()
2936 fcf_dev->selected = (fcf == fip->sel_fcf) ? 1 : 0; in fcoe_fcf_get_selected()