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
833 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) { in fcoe_ctlr_age_fcfs()
834 deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2; in fcoe_ctlr_age_fcfs()
835 if (fip->sel_fcf == fcf) { in fcoe_ctlr_age_fcfs()
841 fip->lp->host->host_no, fcf->fabric_name, in fcoe_ctlr_age_fcfs()
847 deadline += fcf->fka_period; in fcoe_ctlr_age_fcfs()
849 if (fip->sel_fcf == fcf) in fcoe_ctlr_age_fcfs()
856 list_del(&fcf->list); in fcoe_ctlr_age_fcfs()
857 list_add(&fcf->list, &del_list); in fcoe_ctlr_age_fcfs()
862 if (fcoe_ctlr_mtu_valid(fcf) && in fcoe_ctlr_age_fcfs()
863 (!sel_time || time_before(sel_time, fcf->time))) in fcoe_ctlr_age_fcfs()
864 sel_time = fcf->time; in fcoe_ctlr_age_fcfs()
869 list_for_each_entry_safe(fcf, next, &del_list, list) { in fcoe_ctlr_age_fcfs()
871 fcoe_sysfs_fcf_del(fcf); in fcoe_ctlr_age_fcfs()
892 struct sk_buff *skb, struct fcoe_fcf *fcf) in fcoe_ctlr_parse_adv() argument
904 memset(fcf, 0, sizeof(*fcf)); in fcoe_ctlr_parse_adv()
905 fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA); in fcoe_ctlr_parse_adv()
908 fcf->flags = ntohs(fiph->fip_flags); in fcoe_ctlr_parse_adv()
936 fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri; in fcoe_ctlr_parse_adv()
942 memcpy(fcf->fcf_mac, in fcoe_ctlr_parse_adv()
945 memcpy(fcf->fcoe_mac, fcf->fcf_mac, ETH_ALEN); in fcoe_ctlr_parse_adv()
946 if (!is_valid_ether_addr(fcf->fcf_mac)) { in fcoe_ctlr_parse_adv()
949 fcf->fcf_mac); in fcoe_ctlr_parse_adv()
958 fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn); in fcoe_ctlr_parse_adv()
965 fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn); in fcoe_ctlr_parse_adv()
966 fcf->vfid = ntohs(fab->fd_vfid); in fcoe_ctlr_parse_adv()
967 fcf->fc_map = ntoh24(fab->fd_map); in fcoe_ctlr_parse_adv()
975 fcf->fd_flags = 1; in fcoe_ctlr_parse_adv()
978 fcf->fka_period = msecs_to_jiffies(t); in fcoe_ctlr_parse_adv()
998 if (!fcf->fc_map || (fcf->fc_map & 0x10000)) in fcoe_ctlr_parse_adv()
1000 if (!fcf->switch_name) in fcoe_ctlr_parse_adv()
1022 struct fcoe_fcf *fcf; in fcoe_ctlr_recv_adv() local
1035 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_recv_adv()
1036 if (fcf->switch_name == new.switch_name && in fcoe_ctlr_recv_adv()
1037 fcf->fabric_name == new.fabric_name && in fcoe_ctlr_recv_adv()
1038 fcf->fc_map == new.fc_map && in fcoe_ctlr_recv_adv()
1039 ether_addr_equal(fcf->fcf_mac, new.fcf_mac)) { in fcoe_ctlr_recv_adv()
1048 fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC); in fcoe_ctlr_recv_adv()
1049 if (!fcf) in fcoe_ctlr_recv_adv()
1052 memcpy(fcf, &new, sizeof(new)); in fcoe_ctlr_recv_adv()
1053 fcf->fip = fip; in fcoe_ctlr_recv_adv()
1054 rc = fcoe_sysfs_fcf_add(fcf); in fcoe_ctlr_recv_adv()
1059 kfree(fcf); in fcoe_ctlr_recv_adv()
1069 fcf->fd_flags = new.fd_flags; in fcoe_ctlr_recv_adv()
1070 if (!fcoe_ctlr_fcf_usable(fcf)) in fcoe_ctlr_recv_adv()
1071 fcf->flags = new.flags; in fcoe_ctlr_recv_adv()
1073 if (fcf == fip->sel_fcf && !fcf->fd_flags) { in fcoe_ctlr_recv_adv()
1074 fip->ctlr_ka_time -= fcf->fka_period; in fcoe_ctlr_recv_adv()
1079 fcf->fka_period = new.fka_period; in fcoe_ctlr_recv_adv()
1080 memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN); in fcoe_ctlr_recv_adv()
1083 mtu_valid = fcoe_ctlr_mtu_valid(fcf); in fcoe_ctlr_recv_adv()
1084 fcf->time = jiffies; in fcoe_ctlr_recv_adv()
1087 fcf->fabric_name, fcf->fcf_mac); in fcoe_ctlr_recv_adv()
1094 fcoe_ctlr_solicit(fip, fcf); in fcoe_ctlr_recv_adv()
1112 list_move(&fcf->list, &fip->fcfs); in fcoe_ctlr_recv_adv()
1119 fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_recv_adv()
1321 struct fcoe_fcf *fcf = fip->sel_fcf; in fcoe_ctlr_recv_clr_vlink() local
1333 if (!fcf) { in fcoe_ctlr_recv_clr_vlink()
1351 if (!ether_addr_equal(eh->h_source, fcf->fcf_mac)) { in fcoe_ctlr_recv_clr_vlink()
1409 if (!ether_addr_equal(mp->fd_mac, fcf->fcf_mac)) in fcoe_ctlr_recv_clr_vlink()
1417 if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name) in fcoe_ctlr_recv_clr_vlink()
1625 struct fcoe_fcf *fcf; in fcoe_ctlr_select() local
1628 list_for_each_entry(fcf, &fip->fcfs, list) { in fcoe_ctlr_select()
1632 fcf->fabric_name, fcf->vfid, fcf->fcf_mac, in fcoe_ctlr_select()
1633 fcf->fc_map, fcoe_ctlr_mtu_valid(fcf), in fcoe_ctlr_select()
1634 fcf->flogi_sent, fcf->pri); in fcoe_ctlr_select()
1635 if (!fcoe_ctlr_fcf_usable(fcf)) { in fcoe_ctlr_select()
1638 fcf->fabric_name, fcf->fc_map, in fcoe_ctlr_select()
1639 (fcf->flags & FIP_FL_SOL) ? "" : "in", in fcoe_ctlr_select()
1640 (fcf->flags & FIP_FL_AVAIL) ? in fcoe_ctlr_select()
1644 if (!best || fcf->pri < best->pri || best->flogi_sent) in fcoe_ctlr_select()
1645 best = fcf; in fcoe_ctlr_select()
1646 if (fcf->fabric_name != best->fabric_name || in fcoe_ctlr_select()
1647 fcf->vfid != best->vfid || in fcoe_ctlr_select()
1648 fcf->fc_map != best->fc_map) { in fcoe_ctlr_select()
1715 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_retry() local
1721 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_retry()
1722 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_retry()
1746 struct fcoe_fcf *fcf; in fcoe_ctlr_flogi_send() local
1749 fcf = fip->sel_fcf; in fcoe_ctlr_flogi_send()
1750 if (!fcf || !fip->flogi_req_send) in fcoe_ctlr_flogi_send()
1759 if (fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1761 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1762 if (!fcf || fcf->flogi_sent) { in fcoe_ctlr_flogi_send()
1764 list_for_each_entry(fcf, &fip->fcfs, list) in fcoe_ctlr_flogi_send()
1765 fcf->flogi_sent = 0; in fcoe_ctlr_flogi_send()
1766 fcf = fcoe_ctlr_select(fip); in fcoe_ctlr_flogi_send()
1769 if (fcf) { in fcoe_ctlr_flogi_send()
1805 struct fcoe_fcf *fcf; in fcoe_ctlr_timer_work() local
1817 fcf = fip->sel_fcf; in fcoe_ctlr_timer_work()
1831 else if (!sel && fcf) in fcoe_ctlr_timer_work()
3226 struct fcoe_fcf *fcf; in fcoe_fcf_get_selected() local
3231 fcf = fcoe_fcf_device_priv(fcf_dev); in fcoe_fcf_get_selected()
3232 if (fcf) in fcoe_fcf_get_selected()
3233 fcf_dev->selected = (fcf == fip->sel_fcf) ? 1 : 0; in fcoe_fcf_get_selected()