Lines Matching refs:card
54 static struct qeth_ipaddr *qeth_l3_find_addr_by_ip(struct qeth_card *card, in qeth_l3_find_addr_by_ip() argument
61 hash_for_each_possible(card->rx_mode_addrs, addr, hnode, key) in qeth_l3_find_addr_by_ip()
65 hash_for_each_possible(card->ip_htable, addr, hnode, key) in qeth_l3_find_addr_by_ip()
86 static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card, in qeth_l3_is_addr_covered_by_ipato() argument
94 if (!card->ipato.enabled) in qeth_l3_is_addr_covered_by_ipato()
101 list_for_each_entry(ipatoe, &card->ipato.entries, entry) { in qeth_l3_is_addr_covered_by_ipato()
115 if ((addr->proto == QETH_PROT_IPV4) && card->ipato.invert4) in qeth_l3_is_addr_covered_by_ipato()
117 else if ((addr->proto == QETH_PROT_IPV6) && card->ipato.invert6) in qeth_l3_is_addr_covered_by_ipato()
123 static int qeth_l3_delete_ip(struct qeth_card *card, in qeth_l3_delete_ip() argument
130 QETH_CARD_TEXT(card, 2, "delrxip"); in qeth_l3_delete_ip()
132 QETH_CARD_TEXT(card, 2, "delvipa"); in qeth_l3_delete_ip()
134 QETH_CARD_TEXT(card, 2, "delip"); in qeth_l3_delete_ip()
137 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4); in qeth_l3_delete_ip()
139 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8); in qeth_l3_delete_ip()
140 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8); in qeth_l3_delete_ip()
143 addr = qeth_l3_find_addr_by_ip(card, tmp_addr); in qeth_l3_delete_ip()
151 if (qeth_card_hw_is_reachable(card)) in qeth_l3_delete_ip()
152 rc = qeth_l3_deregister_addr_entry(card, addr); in qeth_l3_delete_ip()
160 static int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr) in qeth_l3_add_ip() argument
167 QETH_CARD_TEXT(card, 2, "addrxip"); in qeth_l3_add_ip()
169 QETH_CARD_TEXT(card, 2, "addvipa"); in qeth_l3_add_ip()
171 QETH_CARD_TEXT(card, 2, "addip"); in qeth_l3_add_ip()
174 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4); in qeth_l3_add_ip()
176 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8); in qeth_l3_add_ip()
177 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8); in qeth_l3_add_ip()
180 addr = qeth_l3_find_addr_by_ip(card, tmp_addr); in qeth_l3_add_ip()
190 dev_warn(&card->gdev->dev, in qeth_l3_add_ip()
198 if (qeth_l3_is_addr_covered_by_ipato(card, addr)) { in qeth_l3_add_ip()
199 QETH_CARD_TEXT(card, 2, "tkovaddr"); in qeth_l3_add_ip()
202 hash_add(card->ip_htable, &addr->hnode, in qeth_l3_add_ip()
205 if (!qeth_card_hw_is_reachable(card)) { in qeth_l3_add_ip()
210 rc = qeth_l3_register_addr_entry(card, addr); in qeth_l3_add_ip()
222 static int qeth_l3_modify_ip(struct qeth_card *card, struct qeth_ipaddr *addr, in qeth_l3_modify_ip() argument
227 mutex_lock(&card->ip_lock); in qeth_l3_modify_ip()
228 rc = add ? qeth_l3_add_ip(card, addr) : qeth_l3_delete_ip(card, addr); in qeth_l3_modify_ip()
229 mutex_unlock(&card->ip_lock); in qeth_l3_modify_ip()
234 static void qeth_l3_drain_rx_mode_cache(struct qeth_card *card) in qeth_l3_drain_rx_mode_cache() argument
240 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) { in qeth_l3_drain_rx_mode_cache()
246 static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover) in qeth_l3_clear_ip_htable() argument
252 QETH_CARD_TEXT(card, 4, "clearip"); in qeth_l3_clear_ip_htable()
254 mutex_lock(&card->ip_lock); in qeth_l3_clear_ip_htable()
256 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) { in qeth_l3_clear_ip_htable()
265 mutex_unlock(&card->ip_lock); in qeth_l3_clear_ip_htable()
268 static void qeth_l3_recover_ip(struct qeth_card *card) in qeth_l3_recover_ip() argument
275 QETH_CARD_TEXT(card, 4, "recovrip"); in qeth_l3_recover_ip()
277 mutex_lock(&card->ip_lock); in qeth_l3_recover_ip()
279 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) { in qeth_l3_recover_ip()
281 rc = qeth_l3_register_addr_entry(card, addr); in qeth_l3_recover_ip()
292 mutex_unlock(&card->ip_lock); in qeth_l3_recover_ip()
295 static int qeth_l3_setdelip_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_l3_setdelip_cb() argument
314 static int qeth_l3_send_setdelmc(struct qeth_card *card, in qeth_l3_send_setdelmc() argument
321 QETH_CARD_TEXT(card, 4, "setdelmc"); in qeth_l3_send_setdelmc()
323 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto, in qeth_l3_send_setdelmc()
336 return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL); in qeth_l3_send_setdelmc()
365 static int qeth_l3_send_setdelip(struct qeth_card *card, in qeth_l3_send_setdelip() argument
373 QETH_CARD_TEXT(card, 4, "setdelip"); in qeth_l3_send_setdelip()
375 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto, in qeth_l3_send_setdelip()
382 QETH_CARD_TEXT_(card, 4, "flags%02X", flags); in qeth_l3_send_setdelip()
395 return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL); in qeth_l3_send_setdelip()
398 static int qeth_l3_send_setrouting(struct qeth_card *card, in qeth_l3_send_setrouting() argument
405 QETH_CARD_TEXT(card, 4, "setroutg"); in qeth_l3_send_setrouting()
406 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_SETRTG, prot, in qeth_l3_send_setrouting()
412 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL); in qeth_l3_send_setrouting()
417 static int qeth_l3_correct_routing_type(struct qeth_card *card, in qeth_l3_correct_routing_type() argument
420 if (IS_IQD(card)) { in qeth_l3_correct_routing_type()
437 if (qeth_is_ipafunc_supported(card, prot, in qeth_l3_correct_routing_type()
449 int qeth_l3_setrouting_v4(struct qeth_card *card) in qeth_l3_setrouting_v4() argument
453 QETH_CARD_TEXT(card, 3, "setrtg4"); in qeth_l3_setrouting_v4()
455 rc = qeth_l3_correct_routing_type(card, &card->options.route4.type, in qeth_l3_setrouting_v4()
460 rc = qeth_l3_send_setrouting(card, card->options.route4.type, in qeth_l3_setrouting_v4()
463 card->options.route4.type = NO_ROUTER; in qeth_l3_setrouting_v4()
465 rc, CARD_DEVID(card)); in qeth_l3_setrouting_v4()
470 int qeth_l3_setrouting_v6(struct qeth_card *card) in qeth_l3_setrouting_v6() argument
474 QETH_CARD_TEXT(card, 3, "setrtg6"); in qeth_l3_setrouting_v6()
476 if (!qeth_is_supported(card, IPA_IPV6)) in qeth_l3_setrouting_v6()
478 rc = qeth_l3_correct_routing_type(card, &card->options.route6.type, in qeth_l3_setrouting_v6()
483 rc = qeth_l3_send_setrouting(card, card->options.route6.type, in qeth_l3_setrouting_v6()
486 card->options.route6.type = NO_ROUTER; in qeth_l3_setrouting_v6()
488 rc, CARD_DEVID(card)); in qeth_l3_setrouting_v6()
502 void qeth_l3_update_ipato(struct qeth_card *card) in qeth_l3_update_ipato() argument
507 hash_for_each(card->ip_htable, i, addr, hnode) { in qeth_l3_update_ipato()
510 addr->ipato = qeth_l3_is_addr_covered_by_ipato(card, addr); in qeth_l3_update_ipato()
514 static void qeth_l3_clear_ipato_list(struct qeth_card *card) in qeth_l3_clear_ipato_list() argument
518 mutex_lock(&card->ip_lock); in qeth_l3_clear_ipato_list()
520 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) { in qeth_l3_clear_ipato_list()
525 qeth_l3_update_ipato(card); in qeth_l3_clear_ipato_list()
526 mutex_unlock(&card->ip_lock); in qeth_l3_clear_ipato_list()
529 int qeth_l3_add_ipato_entry(struct qeth_card *card, in qeth_l3_add_ipato_entry() argument
535 QETH_CARD_TEXT(card, 2, "addipato"); in qeth_l3_add_ipato_entry()
537 mutex_lock(&card->ip_lock); in qeth_l3_add_ipato_entry()
539 list_for_each_entry(ipatoe, &card->ipato.entries, entry) { in qeth_l3_add_ipato_entry()
551 list_add_tail(&new->entry, &card->ipato.entries); in qeth_l3_add_ipato_entry()
552 qeth_l3_update_ipato(card); in qeth_l3_add_ipato_entry()
555 mutex_unlock(&card->ip_lock); in qeth_l3_add_ipato_entry()
560 int qeth_l3_del_ipato_entry(struct qeth_card *card, in qeth_l3_del_ipato_entry() argument
567 QETH_CARD_TEXT(card, 2, "delipato"); in qeth_l3_del_ipato_entry()
569 mutex_lock(&card->ip_lock); in qeth_l3_del_ipato_entry()
571 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) { in qeth_l3_del_ipato_entry()
578 qeth_l3_update_ipato(card); in qeth_l3_del_ipato_entry()
584 mutex_unlock(&card->ip_lock); in qeth_l3_del_ipato_entry()
589 int qeth_l3_modify_rxip_vipa(struct qeth_card *card, bool add, const u8 *ip, in qeth_l3_modify_rxip_vipa() argument
601 return qeth_l3_modify_ip(card, &addr, add); in qeth_l3_modify_rxip_vipa()
604 int qeth_l3_modify_hsuid(struct qeth_card *card, bool add) in qeth_l3_modify_hsuid() argument
613 addr.u.a6.addr.s6_addr[8+i] = card->options.hsuid[i]; in qeth_l3_modify_hsuid()
615 return qeth_l3_modify_ip(card, &addr, add); in qeth_l3_modify_hsuid()
618 static int qeth_l3_register_addr_entry(struct qeth_card *card, in qeth_l3_register_addr_entry() argument
625 if (card->options.sniffer) in qeth_l3_register_addr_entry()
629 QETH_CARD_TEXT(card, 2, "setaddr4"); in qeth_l3_register_addr_entry()
630 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int)); in qeth_l3_register_addr_entry()
632 QETH_CARD_TEXT(card, 2, "setaddr6"); in qeth_l3_register_addr_entry()
633 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8); in qeth_l3_register_addr_entry()
634 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8); in qeth_l3_register_addr_entry()
636 QETH_CARD_TEXT(card, 2, "setaddr?"); in qeth_l3_register_addr_entry()
637 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr)); in qeth_l3_register_addr_entry()
641 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_SETIPM); in qeth_l3_register_addr_entry()
643 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP); in qeth_l3_register_addr_entry()
645 QETH_CARD_TEXT(card, 2, "failed"); in qeth_l3_register_addr_entry()
648 QETH_CARD_TEXT(card, 2, "FAILED"); in qeth_l3_register_addr_entry()
650 dev_warn(&card->gdev->dev, in qeth_l3_register_addr_entry()
656 static int qeth_l3_deregister_addr_entry(struct qeth_card *card, in qeth_l3_deregister_addr_entry() argument
661 if (card->options.sniffer) in qeth_l3_deregister_addr_entry()
665 QETH_CARD_TEXT(card, 2, "deladdr4"); in qeth_l3_deregister_addr_entry()
666 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int)); in qeth_l3_deregister_addr_entry()
668 QETH_CARD_TEXT(card, 2, "deladdr6"); in qeth_l3_deregister_addr_entry()
669 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8); in qeth_l3_deregister_addr_entry()
670 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8); in qeth_l3_deregister_addr_entry()
672 QETH_CARD_TEXT(card, 2, "deladdr?"); in qeth_l3_deregister_addr_entry()
673 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr)); in qeth_l3_deregister_addr_entry()
676 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM); in qeth_l3_deregister_addr_entry()
678 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP); in qeth_l3_deregister_addr_entry()
680 QETH_CARD_TEXT(card, 2, "failed"); in qeth_l3_deregister_addr_entry()
685 static int qeth_l3_setadapter_parms(struct qeth_card *card) in qeth_l3_setadapter_parms() argument
689 QETH_CARD_TEXT(card, 2, "setadprm"); in qeth_l3_setadapter_parms()
691 if (qeth_adp_supported(card, IPA_SETADP_ALTER_MAC_ADDRESS)) { in qeth_l3_setadapter_parms()
692 rc = qeth_setadpparms_change_macaddr(card); in qeth_l3_setadapter_parms()
694 dev_warn(&card->gdev->dev, "Reading the adapter MAC" in qeth_l3_setadapter_parms()
701 static int qeth_l3_start_ipa_arp_processing(struct qeth_card *card) in qeth_l3_start_ipa_arp_processing() argument
705 QETH_CARD_TEXT(card, 3, "ipaarp"); in qeth_l3_start_ipa_arp_processing()
707 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { in qeth_l3_start_ipa_arp_processing()
708 dev_info(&card->gdev->dev, in qeth_l3_start_ipa_arp_processing()
710 netdev_name(card->dev)); in qeth_l3_start_ipa_arp_processing()
713 rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING, in qeth_l3_start_ipa_arp_processing()
716 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_arp_processing()
718 netdev_name(card->dev)); in qeth_l3_start_ipa_arp_processing()
723 static int qeth_l3_start_ipa_source_mac(struct qeth_card *card) in qeth_l3_start_ipa_source_mac() argument
727 QETH_CARD_TEXT(card, 3, "stsrcmac"); in qeth_l3_start_ipa_source_mac()
729 if (!qeth_is_supported(card, IPA_SOURCE_MAC)) { in qeth_l3_start_ipa_source_mac()
730 dev_info(&card->gdev->dev, in qeth_l3_start_ipa_source_mac()
732 netdev_name(card->dev)); in qeth_l3_start_ipa_source_mac()
736 rc = qeth_send_simple_setassparms(card, IPA_SOURCE_MAC, in qeth_l3_start_ipa_source_mac()
739 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_source_mac()
741 netdev_name(card->dev)); in qeth_l3_start_ipa_source_mac()
745 static int qeth_l3_start_ipa_vlan(struct qeth_card *card) in qeth_l3_start_ipa_vlan() argument
749 QETH_CARD_TEXT(card, 3, "strtvlan"); in qeth_l3_start_ipa_vlan()
751 if (!qeth_is_supported(card, IPA_FULL_VLAN)) { in qeth_l3_start_ipa_vlan()
752 dev_info(&card->gdev->dev, in qeth_l3_start_ipa_vlan()
753 "VLAN not supported on %s\n", netdev_name(card->dev)); in qeth_l3_start_ipa_vlan()
757 rc = qeth_send_simple_setassparms(card, IPA_VLAN_PRIO, in qeth_l3_start_ipa_vlan()
760 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_vlan()
762 netdev_name(card->dev)); in qeth_l3_start_ipa_vlan()
764 dev_info(&card->gdev->dev, "VLAN enabled\n"); in qeth_l3_start_ipa_vlan()
769 static int qeth_l3_start_ipa_multicast(struct qeth_card *card) in qeth_l3_start_ipa_multicast() argument
773 QETH_CARD_TEXT(card, 3, "stmcast"); in qeth_l3_start_ipa_multicast()
775 if (!qeth_is_supported(card, IPA_MULTICASTING)) { in qeth_l3_start_ipa_multicast()
776 dev_info(&card->gdev->dev, in qeth_l3_start_ipa_multicast()
778 netdev_name(card->dev)); in qeth_l3_start_ipa_multicast()
782 rc = qeth_send_simple_setassparms(card, IPA_MULTICASTING, in qeth_l3_start_ipa_multicast()
785 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_multicast()
787 netdev_name(card->dev)); in qeth_l3_start_ipa_multicast()
789 dev_info(&card->gdev->dev, "Multicast enabled\n"); in qeth_l3_start_ipa_multicast()
790 card->dev->flags |= IFF_MULTICAST; in qeth_l3_start_ipa_multicast()
795 static int qeth_l3_softsetup_ipv6(struct qeth_card *card) in qeth_l3_softsetup_ipv6() argument
800 QETH_CARD_TEXT(card, 3, "softipv6"); in qeth_l3_softsetup_ipv6()
802 if (IS_IQD(card)) in qeth_l3_softsetup_ipv6()
805 rc = qeth_send_simple_setassparms(card, IPA_IPV6, IPA_CMD_ASS_START, in qeth_l3_softsetup_ipv6()
808 dev_err(&card->gdev->dev, in qeth_l3_softsetup_ipv6()
810 netdev_name(card->dev)); in qeth_l3_softsetup_ipv6()
813 rc = qeth_send_simple_setassparms_v6(card, IPA_IPV6, IPA_CMD_ASS_START, in qeth_l3_softsetup_ipv6()
816 dev_err(&card->gdev->dev, in qeth_l3_softsetup_ipv6()
818 netdev_name(card->dev)); in qeth_l3_softsetup_ipv6()
821 rc = qeth_send_simple_setassparms_v6(card, IPA_PASSTHRU, in qeth_l3_softsetup_ipv6()
824 dev_warn(&card->gdev->dev, in qeth_l3_softsetup_ipv6()
826 netdev_name(card->dev)); in qeth_l3_softsetup_ipv6()
830 dev_info(&card->gdev->dev, "IPV6 enabled\n"); in qeth_l3_softsetup_ipv6()
834 static int qeth_l3_start_ipa_ipv6(struct qeth_card *card) in qeth_l3_start_ipa_ipv6() argument
836 QETH_CARD_TEXT(card, 3, "strtipv6"); in qeth_l3_start_ipa_ipv6()
838 if (!qeth_is_supported(card, IPA_IPV6)) { in qeth_l3_start_ipa_ipv6()
839 dev_info(&card->gdev->dev, in qeth_l3_start_ipa_ipv6()
840 "IPv6 not supported on %s\n", netdev_name(card->dev)); in qeth_l3_start_ipa_ipv6()
843 return qeth_l3_softsetup_ipv6(card); in qeth_l3_start_ipa_ipv6()
846 static int qeth_l3_start_ipa_broadcast(struct qeth_card *card) in qeth_l3_start_ipa_broadcast() argument
851 QETH_CARD_TEXT(card, 3, "stbrdcst"); in qeth_l3_start_ipa_broadcast()
852 card->info.broadcast_capable = 0; in qeth_l3_start_ipa_broadcast()
853 if (!qeth_is_supported(card, IPA_FILTERING)) { in qeth_l3_start_ipa_broadcast()
854 dev_info(&card->gdev->dev, in qeth_l3_start_ipa_broadcast()
856 netdev_name(card->dev)); in qeth_l3_start_ipa_broadcast()
860 rc = qeth_send_simple_setassparms(card, IPA_FILTERING, in qeth_l3_start_ipa_broadcast()
863 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_broadcast()
865 netdev_name(card->dev)); in qeth_l3_start_ipa_broadcast()
869 rc = qeth_send_simple_setassparms(card, IPA_FILTERING, in qeth_l3_start_ipa_broadcast()
872 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_broadcast()
874 netdev_name(card->dev)); in qeth_l3_start_ipa_broadcast()
877 card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO; in qeth_l3_start_ipa_broadcast()
878 dev_info(&card->gdev->dev, "Broadcast enabled\n"); in qeth_l3_start_ipa_broadcast()
879 rc = qeth_send_simple_setassparms(card, IPA_FILTERING, in qeth_l3_start_ipa_broadcast()
882 dev_warn(&card->gdev->dev, in qeth_l3_start_ipa_broadcast()
884 netdev_name(card->dev)); in qeth_l3_start_ipa_broadcast()
887 card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO; in qeth_l3_start_ipa_broadcast()
889 if (card->info.broadcast_capable) in qeth_l3_start_ipa_broadcast()
890 card->dev->flags |= IFF_BROADCAST; in qeth_l3_start_ipa_broadcast()
892 card->dev->flags &= ~IFF_BROADCAST; in qeth_l3_start_ipa_broadcast()
896 static void qeth_l3_start_ipassists(struct qeth_card *card) in qeth_l3_start_ipassists() argument
898 QETH_CARD_TEXT(card, 3, "strtipas"); in qeth_l3_start_ipassists()
900 qeth_l3_start_ipa_arp_processing(card); /* go on*/ in qeth_l3_start_ipassists()
901 qeth_l3_start_ipa_source_mac(card); /* go on*/ in qeth_l3_start_ipassists()
902 qeth_l3_start_ipa_vlan(card); /* go on*/ in qeth_l3_start_ipassists()
903 qeth_l3_start_ipa_multicast(card); /* go on*/ in qeth_l3_start_ipassists()
904 qeth_l3_start_ipa_ipv6(card); /* go on*/ in qeth_l3_start_ipassists()
905 qeth_l3_start_ipa_broadcast(card); /* go on*/ in qeth_l3_start_ipassists()
908 static int qeth_l3_iqd_read_initial_mac_cb(struct qeth_card *card, in qeth_l3_iqd_read_initial_mac_cb() argument
918 ether_addr_copy(card->dev->dev_addr, in qeth_l3_iqd_read_initial_mac_cb()
923 static int qeth_l3_iqd_read_initial_mac(struct qeth_card *card) in qeth_l3_iqd_read_initial_mac() argument
928 QETH_CARD_TEXT(card, 2, "hsrmac"); in qeth_l3_iqd_read_initial_mac()
930 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6, in qeth_l3_iqd_read_initial_mac()
935 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_iqd_read_initial_mac_cb, in qeth_l3_iqd_read_initial_mac()
940 static int qeth_l3_get_unique_id_cb(struct qeth_card *card, in qeth_l3_get_unique_id_cb() argument
951 dev_warn(&card->gdev->dev, "The network adapter failed to generate a unique ID\n"); in qeth_l3_get_unique_id_cb()
955 static u16 qeth_l3_get_unique_id(struct qeth_card *card, u16 uid) in qeth_l3_get_unique_id() argument
959 QETH_CARD_TEXT(card, 2, "guniqeid"); in qeth_l3_get_unique_id()
961 if (!qeth_is_supported(card, IPA_IPV6)) in qeth_l3_get_unique_id()
964 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6, in qeth_l3_get_unique_id()
970 qeth_send_ipa_cmd(card, iob, qeth_l3_get_unique_id_cb, &uid); in qeth_l3_get_unique_id()
977 qeth_diags_trace_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_diags_trace_cb() argument
983 QETH_CARD_TEXT(card, 2, "diastrcb"); in qeth_diags_trace_cb()
988 QETH_CARD_TEXT_(card, 2, "dxter%x", rc); in qeth_diags_trace_cb()
996 card->info.promisc_mode = SET_PROMISC_MODE_OFF; in qeth_diags_trace_cb()
997 dev_info(&card->gdev->dev, "The HiperSockets network " in qeth_diags_trace_cb()
1007 card->info.promisc_mode = SET_PROMISC_MODE_ON; in qeth_diags_trace_cb()
1008 dev_info(&card->gdev->dev, "The HiperSockets network " in qeth_diags_trace_cb()
1012 dev_warn(&card->gdev->dev, "The device is not " in qeth_diags_trace_cb()
1017 dev_warn(&card->gdev->dev, "A HiperSockets " in qeth_diags_trace_cb()
1027 cmd->data.diagass.action, CARD_DEVID(card)); in qeth_diags_trace_cb()
1034 qeth_diags_trace(struct qeth_card *card, enum qeth_diags_trace_cmds diags_cmd) in qeth_diags_trace() argument
1039 QETH_CARD_TEXT(card, 2, "diagtrac"); in qeth_diags_trace()
1041 iob = qeth_get_diag_cmd(card, QETH_DIAGS_CMD_TRACE, 0); in qeth_diags_trace()
1047 return qeth_send_ipa_cmd(card, iob, qeth_diags_trace_cb, NULL); in qeth_diags_trace()
1052 struct qeth_card *card = arg; in qeth_l3_add_mcast_rtnl() local
1060 QETH_CARD_TEXT(card, 4, "addmc"); in qeth_l3_add_mcast_rtnl()
1077 ipm = qeth_l3_find_addr_by_ip(card, &tmp); in qeth_l3_add_mcast_rtnl()
1088 hash_add(card->rx_mode_addrs, &ipm->hnode, in qeth_l3_add_mcast_rtnl()
1093 if (!qeth_is_supported(card, IPA_IPV6)) in qeth_l3_add_mcast_rtnl()
1108 ipm = qeth_l3_find_addr_by_ip(card, &tmp); in qeth_l3_add_mcast_rtnl()
1119 hash_add(card->rx_mode_addrs, &ipm->hnode, in qeth_l3_add_mcast_rtnl()
1132 struct qeth_card *card = dev->ml_priv; in qeth_l3_vlan_rx_add_vid() local
1134 QETH_CARD_TEXT_(card, 4, "aid:%d", vid); in qeth_l3_vlan_rx_add_vid()
1141 struct qeth_card *card = dev->ml_priv; in qeth_l3_vlan_rx_kill_vid() local
1143 QETH_CARD_TEXT_(card, 4, "kid:%d", vid); in qeth_l3_vlan_rx_kill_vid()
1147 static void qeth_l3_set_promisc_mode(struct qeth_card *card) in qeth_l3_set_promisc_mode() argument
1149 bool enable = card->dev->flags & IFF_PROMISC; in qeth_l3_set_promisc_mode()
1151 if (card->info.promisc_mode == enable) in qeth_l3_set_promisc_mode()
1154 if (IS_VM_NIC(card)) { /* Guestlan trace */ in qeth_l3_set_promisc_mode()
1155 if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE)) in qeth_l3_set_promisc_mode()
1156 qeth_setadp_promisc_mode(card, enable); in qeth_l3_set_promisc_mode()
1157 } else if (card->options.sniffer && /* HiperSockets trace */ in qeth_l3_set_promisc_mode()
1158 qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) { in qeth_l3_set_promisc_mode()
1160 QETH_CARD_TEXT(card, 3, "+promisc"); in qeth_l3_set_promisc_mode()
1161 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_ENABLE); in qeth_l3_set_promisc_mode()
1163 QETH_CARD_TEXT(card, 3, "-promisc"); in qeth_l3_set_promisc_mode()
1164 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE); in qeth_l3_set_promisc_mode()
1171 struct qeth_card *card = container_of(work, struct qeth_card, in qeth_l3_rx_mode_work() local
1177 QETH_CARD_TEXT(card, 3, "setmulti"); in qeth_l3_rx_mode_work()
1179 if (!card->options.sniffer) { in qeth_l3_rx_mode_work()
1181 qeth_l3_add_mcast_rtnl(card->dev, 0, card); in qeth_l3_rx_mode_work()
1182 if (qeth_is_supported(card, IPA_FULL_VLAN)) in qeth_l3_rx_mode_work()
1183 vlan_for_each(card->dev, qeth_l3_add_mcast_rtnl, card); in qeth_l3_rx_mode_work()
1186 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) { in qeth_l3_rx_mode_work()
1189 rc = qeth_l3_deregister_addr_entry(card, addr); in qeth_l3_rx_mode_work()
1196 rc = qeth_l3_register_addr_entry(card, addr); in qeth_l3_rx_mode_work()
1210 qeth_l3_set_promisc_mode(card); in qeth_l3_rx_mode_work()
1230 static int qeth_l3_arp_cmd_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_l3_arp_cmd_cb() argument
1235 qeth_setassparms_cb(card, reply, data); in qeth_l3_arp_cmd_cb()
1239 static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries) in qeth_l3_arp_set_no_entries() argument
1244 QETH_CARD_TEXT(card, 3, "arpstnoe"); in qeth_l3_arp_set_no_entries()
1251 if (IS_VM_NIC(card)) in qeth_l3_arp_set_no_entries()
1253 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { in qeth_l3_arp_set_no_entries()
1257 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, in qeth_l3_arp_set_no_entries()
1265 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL); in qeth_l3_arp_set_no_entries()
1268 CARD_DEVID(card), rc); in qeth_l3_arp_set_no_entries()
1272 static __u32 get_arp_entry_size(struct qeth_card *card, in get_arp_entry_size() argument
1281 QETH_CARD_TEXT(card, 4, "arpev4"); in get_arp_entry_size()
1290 QETH_CARD_TEXT(card, 4, "arpev6"); in get_arp_entry_size()
1301 QETH_CARD_TEXT(card, 4, "arpinv"); in get_arp_entry_size()
1314 static int qeth_l3_arp_query_cb(struct qeth_card *card, in qeth_l3_arp_query_cb() argument
1325 QETH_CARD_TEXT(card, 3, "arpquecb"); in qeth_l3_arp_query_cb()
1329 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.prot_version); in qeth_l3_arp_query_cb()
1331 QETH_CARD_TEXT(card, 4, "arpcberr"); in qeth_l3_arp_query_cb()
1332 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code); in qeth_l3_arp_query_cb()
1337 QETH_CARD_TEXT(card, 4, "setaperr"); in qeth_l3_arp_query_cb()
1338 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code); in qeth_l3_arp_query_cb()
1342 QETH_CARD_TEXT_(card, 4, "anoen%i", qdata->no_entries); in qeth_l3_arp_query_cb()
1355 QETH_CARD_TEXT(card, 4, "pmis"); in qeth_l3_arp_query_cb()
1356 QETH_CARD_TEXT_(card, 4, "%i", etype->ip); in qeth_l3_arp_query_cb()
1359 esize = get_arp_entry_size(card, qdata, etype, in qeth_l3_arp_query_cb()
1361 QETH_CARD_TEXT_(card, 5, "esz%i", esize); in qeth_l3_arp_query_cb()
1366 QETH_CARD_TEXT_(card, 4, "qaer3%i", -ENOSPC); in qeth_l3_arp_query_cb()
1382 QETH_CARD_TEXT_(card, 4, "nove%i", qinfo->no_entries); in qeth_l3_arp_query_cb()
1389 QETH_CARD_TEXT_(card, 4, "rc%i", 0); in qeth_l3_arp_query_cb()
1393 static int qeth_l3_query_arp_cache_info(struct qeth_card *card, in qeth_l3_query_arp_cache_info() argument
1401 QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot); in qeth_l3_query_arp_cache_info()
1403 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, in qeth_l3_query_arp_cache_info()
1410 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_query_cb, qinfo); in qeth_l3_query_arp_cache_info()
1413 CARD_DEVID(card), rc); in qeth_l3_query_arp_cache_info()
1417 static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata) in qeth_l3_arp_query() argument
1422 QETH_CARD_TEXT(card, 3, "arpquery"); in qeth_l3_arp_query()
1424 if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/ in qeth_l3_arp_query()
1426 QETH_CARD_TEXT(card, 3, "arpqnsup"); in qeth_l3_arp_query()
1441 rc = qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV4, &qinfo); in qeth_l3_arp_query()
1449 qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV6, &qinfo); in qeth_l3_arp_query()
1452 QETH_CARD_TEXT(card, 4, "qactf"); in qeth_l3_arp_query()
1456 QETH_CARD_TEXT(card, 4, "qacts"); in qeth_l3_arp_query()
1464 static int qeth_l3_arp_modify_entry(struct qeth_card *card, in qeth_l3_arp_modify_entry() argument
1473 QETH_CARD_TEXT(card, 3, "arpadd"); in qeth_l3_arp_modify_entry()
1475 QETH_CARD_TEXT(card, 3, "arpdel"); in qeth_l3_arp_modify_entry()
1482 if (IS_VM_NIC(card)) in qeth_l3_arp_modify_entry()
1484 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { in qeth_l3_arp_modify_entry()
1488 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, arp_cmd, in qeth_l3_arp_modify_entry()
1497 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL); in qeth_l3_arp_modify_entry()
1500 arp_cmd, CARD_DEVID(card), rc); in qeth_l3_arp_modify_entry()
1504 static int qeth_l3_arp_flush_cache(struct qeth_card *card) in qeth_l3_arp_flush_cache() argument
1509 QETH_CARD_TEXT(card, 3, "arpflush"); in qeth_l3_arp_flush_cache()
1516 if (IS_VM_NIC(card) || IS_IQD(card)) in qeth_l3_arp_flush_cache()
1518 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { in qeth_l3_arp_flush_cache()
1522 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, in qeth_l3_arp_flush_cache()
1528 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL); in qeth_l3_arp_flush_cache()
1531 CARD_DEVID(card), rc); in qeth_l3_arp_flush_cache()
1537 struct qeth_card *card = dev->ml_priv; in qeth_l3_do_ioctl() local
1548 rc = qeth_l3_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue); in qeth_l3_do_ioctl()
1555 rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data); in qeth_l3_do_ioctl()
1567 return qeth_l3_arp_modify_entry(card, &arp_entry, arp_cmd); in qeth_l3_do_ioctl()
1573 rc = qeth_l3_arp_flush_cache(card); in qeth_l3_do_ioctl()
1647 struct qeth_card *card = queue->card; in qeth_l3_fill_header() local
1674 if (ipv == 4 || IS_IQD(card)) { in qeth_l3_fill_header()
1688 if (IS_IQD(card) && skb_get_queue_mapping(skb) != QETH_IQD_MCAST_TXQ) in qeth_l3_fill_header()
1701 if (!IS_IQD(card)) in qeth_l3_fill_header()
1724 static int qeth_l3_xmit(struct qeth_card *card, struct sk_buff *skb, in qeth_l3_xmit() argument
1739 return qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header); in qeth_l3_xmit()
1745 struct qeth_card *card = dev->ml_priv; in qeth_l3_hard_start_xmit() local
1753 if (IS_IQD(card)) { in qeth_l3_hard_start_xmit()
1754 queue = card->qdio.out_qs[qeth_iqd_translate_txq(dev, txq)]; in qeth_l3_hard_start_xmit()
1756 if (card->options.sniffer) in qeth_l3_hard_start_xmit()
1758 if ((card->options.cq != QETH_CQ_ENABLED && !ipv) || in qeth_l3_hard_start_xmit()
1759 (card->options.cq == QETH_CQ_ENABLED && in qeth_l3_hard_start_xmit()
1763 queue = card->qdio.out_qs[txq]; in qeth_l3_hard_start_xmit()
1770 if (ipv == 4 || IS_IQD(card)) in qeth_l3_hard_start_xmit()
1771 rc = qeth_l3_xmit(card, skb, queue, ipv); in qeth_l3_hard_start_xmit()
1773 rc = qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header); in qeth_l3_hard_start_xmit()
1786 struct qeth_card *card = dev->ml_priv; in qeth_l3_set_rx_mode() local
1788 schedule_work(&card->rx_mode_work); in qeth_l3_set_rx_mode()
1834 struct qeth_card *card = dev->ml_priv; in qeth_l3_osa_select_queue() local
1836 if (qeth_uses_tx_prio_queueing(card)) in qeth_l3_osa_select_queue()
1837 return qeth_get_priority_queue(card, skb); in qeth_l3_osa_select_queue()
1876 static int qeth_l3_setup_netdev(struct qeth_card *card) in qeth_l3_setup_netdev() argument
1878 struct net_device *dev = card->dev; in qeth_l3_setup_netdev()
1882 if (IS_OSD(card) || IS_OSX(card)) { in qeth_l3_setup_netdev()
1883 card->dev->netdev_ops = &qeth_l3_osa_netdev_ops; in qeth_l3_setup_netdev()
1886 dev->dev_id = qeth_l3_get_unique_id(card, dev->dev_id); in qeth_l3_setup_netdev()
1888 if (!IS_VM_NIC(card)) { in qeth_l3_setup_netdev()
1889 card->dev->features |= NETIF_F_SG; in qeth_l3_setup_netdev()
1890 card->dev->hw_features |= NETIF_F_TSO | in qeth_l3_setup_netdev()
1892 card->dev->vlan_features |= NETIF_F_TSO | in qeth_l3_setup_netdev()
1896 if (qeth_is_supported6(card, IPA_OUTBOUND_CHECKSUM_V6)) { in qeth_l3_setup_netdev()
1897 card->dev->hw_features |= NETIF_F_IPV6_CSUM; in qeth_l3_setup_netdev()
1898 card->dev->vlan_features |= NETIF_F_IPV6_CSUM; in qeth_l3_setup_netdev()
1900 if (qeth_is_supported6(card, IPA_OUTBOUND_TSO)) { in qeth_l3_setup_netdev()
1901 card->dev->hw_features |= NETIF_F_TSO6; in qeth_l3_setup_netdev()
1902 card->dev->vlan_features |= NETIF_F_TSO6; in qeth_l3_setup_netdev()
1906 if (card->dev->hw_features & NETIF_F_TSO6) in qeth_l3_setup_netdev()
1908 else if (card->dev->hw_features & NETIF_F_TSO) in qeth_l3_setup_netdev()
1912 } else if (IS_IQD(card)) { in qeth_l3_setup_netdev()
1913 card->dev->flags |= IFF_NOARP; in qeth_l3_setup_netdev()
1914 card->dev->netdev_ops = &qeth_l3_netdev_ops; in qeth_l3_setup_netdev()
1917 rc = qeth_l3_iqd_read_initial_mac(card); in qeth_l3_setup_netdev()
1923 card->dev->needed_headroom = headroom; in qeth_l3_setup_netdev()
1924 card->dev->features |= NETIF_F_HW_VLAN_CTAG_TX | in qeth_l3_setup_netdev()
1928 netif_keep_dst(card->dev); in qeth_l3_setup_netdev()
1929 if (card->dev->hw_features & (NETIF_F_TSO | NETIF_F_TSO6)) in qeth_l3_setup_netdev()
1930 netif_set_gso_max_size(card->dev, in qeth_l3_setup_netdev()
1931 PAGE_SIZE * (QETH_MAX_BUFFER_ELEMENTS(card) - 1)); in qeth_l3_setup_netdev()
1933 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); in qeth_l3_setup_netdev()
1934 return register_netdev(card->dev); in qeth_l3_setup_netdev()
1944 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_l3_probe_device() local
1947 hash_init(card->ip_htable); in qeth_l3_probe_device()
1948 mutex_init(&card->ip_lock); in qeth_l3_probe_device()
1949 card->cmd_wq = alloc_ordered_workqueue("%s_cmd", 0, in qeth_l3_probe_device()
1951 if (!card->cmd_wq) in qeth_l3_probe_device()
1957 destroy_workqueue(card->cmd_wq); in qeth_l3_probe_device()
1962 INIT_WORK(&card->rx_mode_work, qeth_l3_rx_mode_work); in qeth_l3_probe_device()
1968 struct qeth_card *card = dev_get_drvdata(&cgdev->dev); in qeth_l3_remove_device() local
1973 qeth_set_allowed_threads(card, 0, 1); in qeth_l3_remove_device()
1974 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0); in qeth_l3_remove_device()
1977 qeth_set_offline(card, card->discipline, false); in qeth_l3_remove_device()
1979 cancel_work_sync(&card->close_dev_work); in qeth_l3_remove_device()
1980 if (card->dev->reg_state == NETREG_REGISTERED) in qeth_l3_remove_device()
1981 unregister_netdev(card->dev); in qeth_l3_remove_device()
1983 flush_workqueue(card->cmd_wq); in qeth_l3_remove_device()
1984 destroy_workqueue(card->cmd_wq); in qeth_l3_remove_device()
1985 qeth_l3_clear_ip_htable(card, 0); in qeth_l3_remove_device()
1986 qeth_l3_clear_ipato_list(card); in qeth_l3_remove_device()
1989 static int qeth_l3_set_online(struct qeth_card *card, bool carrier_ok) in qeth_l3_set_online() argument
1991 struct net_device *dev = card->dev; in qeth_l3_set_online()
1995 QETH_CARD_TEXT(card, 2, "softsetp"); in qeth_l3_set_online()
1997 rc = qeth_l3_setadapter_parms(card); in qeth_l3_set_online()
1999 QETH_CARD_TEXT_(card, 2, "2err%04x", rc); in qeth_l3_set_online()
2000 if (!card->options.sniffer) { in qeth_l3_set_online()
2001 qeth_l3_start_ipassists(card); in qeth_l3_set_online()
2003 rc = qeth_l3_setrouting_v4(card); in qeth_l3_set_online()
2005 QETH_CARD_TEXT_(card, 2, "4err%04x", rc); in qeth_l3_set_online()
2006 rc = qeth_l3_setrouting_v6(card); in qeth_l3_set_online()
2008 QETH_CARD_TEXT_(card, 2, "5err%04x", rc); in qeth_l3_set_online()
2011 card->state = CARD_STATE_SOFTSETUP; in qeth_l3_set_online()
2013 qeth_set_allowed_threads(card, 0xffffffff, 0); in qeth_l3_set_online()
2014 qeth_l3_recover_ip(card); in qeth_l3_set_online()
2017 rc = qeth_l3_setup_netdev(card); in qeth_l3_set_online()
2025 rc = qeth_set_real_num_tx_queues(card, in qeth_l3_set_online()
2026 qeth_tx_actual_queues(card)); in qeth_l3_set_online()
2040 if (card->info.open_when_online) { in qeth_l3_set_online()
2041 card->info.open_when_online = 0; in qeth_l3_set_online()
2050 qeth_set_allowed_threads(card, 0, 1); in qeth_l3_set_online()
2051 card->state = CARD_STATE_DOWN; in qeth_l3_set_online()
2052 qeth_l3_clear_ip_htable(card, 1); in qeth_l3_set_online()
2056 static void qeth_l3_set_offline(struct qeth_card *card) in qeth_l3_set_offline() argument
2058 qeth_set_allowed_threads(card, 0, 1); in qeth_l3_set_offline()
2059 qeth_l3_drain_rx_mode_cache(card); in qeth_l3_set_offline()
2061 if (card->options.sniffer && in qeth_l3_set_offline()
2062 (card->info.promisc_mode == SET_PROMISC_MODE_ON)) in qeth_l3_set_offline()
2063 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE); in qeth_l3_set_offline()
2065 if (card->state == CARD_STATE_SOFTSETUP) { in qeth_l3_set_offline()
2066 card->state = CARD_STATE_DOWN; in qeth_l3_set_offline()
2067 qeth_l3_clear_ip_htable(card, 1); in qeth_l3_set_offline()
2072 static int qeth_l3_control_event(struct qeth_card *card, in qeth_l3_control_event() argument
2089 static int qeth_l3_handle_ip_event(struct qeth_card *card, in qeth_l3_handle_ip_event() argument
2095 qeth_l3_modify_ip(card, addr, true); in qeth_l3_handle_ip_event()
2098 qeth_l3_modify_ip(card, addr, false); in qeth_l3_handle_ip_event()
2107 struct qeth_card *card; member
2117 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, true); in qeth_l3_add_ip_worker()
2125 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, false); in qeth_l3_delete_ip_worker()
2145 struct qeth_card *card; in qeth_l3_ip_event() local
2147 card = qeth_l3_get_card_from_dev(dev); in qeth_l3_ip_event()
2148 if (!card) in qeth_l3_ip_event()
2150 QETH_CARD_TEXT(card, 3, "ipevent"); in qeth_l3_ip_event()
2156 return qeth_l3_handle_ip_event(card, &addr, event); in qeth_l3_ip_event()
2170 struct qeth_card *card; in qeth_l3_ip6_event() local
2175 card = qeth_l3_get_card_from_dev(dev); in qeth_l3_ip6_event()
2176 if (!card) in qeth_l3_ip6_event()
2178 QETH_CARD_TEXT(card, 3, "ip6event"); in qeth_l3_ip6_event()
2179 if (!qeth_is_supported(card, IPA_IPV6)) in qeth_l3_ip6_event()
2191 ip_work->card = card; in qeth_l3_ip6_event()
2197 queue_work(card->cmd_wq, &ip_work->work); in qeth_l3_ip6_event()