Lines Matching refs:card
54 static struct qeth_ipaddr *qeth_l3_find_addr_by_ip(struct qeth_card *card,
61 hash_for_each_possible(card->rx_mode_addrs, addr, hnode, key)
65 hash_for_each_possible(card->ip_htable, addr, hnode, key)
86 static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
94 if (!card->ipato.enabled)
101 list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
115 if ((addr->proto == QETH_PROT_IPV4) && card->ipato.invert4)
117 else if ((addr->proto == QETH_PROT_IPV6) && card->ipato.invert6)
123 static int qeth_l3_delete_ip(struct qeth_card *card,
130 QETH_CARD_TEXT(card, 2, "delrxip");
132 QETH_CARD_TEXT(card, 2, "delvipa");
134 QETH_CARD_TEXT(card, 2, "delip");
137 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
139 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
140 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
143 addr = qeth_l3_find_addr_by_ip(card, tmp_addr);
151 if (qeth_card_hw_is_reachable(card))
152 rc = qeth_l3_deregister_addr_entry(card, addr);
160 static int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
167 QETH_CARD_TEXT(card, 2, "addrxip");
169 QETH_CARD_TEXT(card, 2, "addvipa");
171 QETH_CARD_TEXT(card, 2, "addip");
174 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
176 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
177 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
180 addr = qeth_l3_find_addr_by_ip(card, tmp_addr);
190 dev_warn(&card->gdev->dev,
198 if (qeth_l3_is_addr_covered_by_ipato(card, addr)) {
199 QETH_CARD_TEXT(card, 2, "tkovaddr");
202 hash_add(card->ip_htable, &addr->hnode,
205 if (!qeth_card_hw_is_reachable(card)) {
210 rc = qeth_l3_register_addr_entry(card, addr);
222 static int qeth_l3_modify_ip(struct qeth_card *card, struct qeth_ipaddr *addr,
227 mutex_lock(&card->ip_lock);
228 rc = add ? qeth_l3_add_ip(card, addr) : qeth_l3_delete_ip(card, addr);
229 mutex_unlock(&card->ip_lock);
234 static void qeth_l3_drain_rx_mode_cache(struct qeth_card *card)
240 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) {
246 static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)
252 QETH_CARD_TEXT(card, 4, "clearip");
254 mutex_lock(&card->ip_lock);
256 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
266 mutex_unlock(&card->ip_lock);
269 static void qeth_l3_recover_ip(struct qeth_card *card)
276 QETH_CARD_TEXT(card, 4, "recovrip");
278 mutex_lock(&card->ip_lock);
280 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
282 rc = qeth_l3_register_addr_entry(card, addr);
295 mutex_unlock(&card->ip_lock);
298 static int qeth_l3_setdelip_cb(struct qeth_card *card, struct qeth_reply *reply,
317 static int qeth_l3_send_setdelmc(struct qeth_card *card,
324 QETH_CARD_TEXT(card, 4, "setdelmc");
326 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto,
339 return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL);
368 static int qeth_l3_send_setdelip(struct qeth_card *card,
376 QETH_CARD_TEXT(card, 4, "setdelip");
378 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto,
385 QETH_CARD_TEXT_(card, 4, "flags%02X", flags);
398 return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL);
401 static int qeth_l3_send_setrouting(struct qeth_card *card,
408 QETH_CARD_TEXT(card, 4, "setroutg");
409 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_SETRTG, prot,
415 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
420 static int qeth_l3_correct_routing_type(struct qeth_card *card,
423 if (IS_IQD(card)) {
440 if (qeth_is_ipafunc_supported(card, prot,
452 int qeth_l3_setrouting_v4(struct qeth_card *card)
456 QETH_CARD_TEXT(card, 3, "setrtg4");
458 rc = qeth_l3_correct_routing_type(card, &card->options.route4.type,
463 rc = qeth_l3_send_setrouting(card, card->options.route4.type,
466 card->options.route4.type = NO_ROUTER;
468 rc, CARD_DEVID(card));
473 int qeth_l3_setrouting_v6(struct qeth_card *card)
477 QETH_CARD_TEXT(card, 3, "setrtg6");
479 if (!qeth_is_supported(card, IPA_IPV6))
481 rc = qeth_l3_correct_routing_type(card, &card->options.route6.type,
486 rc = qeth_l3_send_setrouting(card, card->options.route6.type,
489 card->options.route6.type = NO_ROUTER;
491 rc, CARD_DEVID(card));
505 void qeth_l3_update_ipato(struct qeth_card *card)
510 hash_for_each(card->ip_htable, i, addr, hnode) {
513 addr->ipato = qeth_l3_is_addr_covered_by_ipato(card, addr);
517 static void qeth_l3_clear_ipato_list(struct qeth_card *card)
521 mutex_lock(&card->ip_lock);
523 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
528 qeth_l3_update_ipato(card);
529 mutex_unlock(&card->ip_lock);
532 int qeth_l3_add_ipato_entry(struct qeth_card *card,
538 QETH_CARD_TEXT(card, 2, "addipato");
540 mutex_lock(&card->ip_lock);
542 list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
554 list_add_tail(&new->entry, &card->ipato.entries);
555 qeth_l3_update_ipato(card);
558 mutex_unlock(&card->ip_lock);
563 int qeth_l3_del_ipato_entry(struct qeth_card *card,
570 QETH_CARD_TEXT(card, 2, "delipato");
572 mutex_lock(&card->ip_lock);
574 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
581 qeth_l3_update_ipato(card);
587 mutex_unlock(&card->ip_lock);
592 int qeth_l3_modify_rxip_vipa(struct qeth_card *card, bool add, const u8 *ip,
604 return qeth_l3_modify_ip(card, &addr, add);
607 int qeth_l3_modify_hsuid(struct qeth_card *card, bool add)
616 addr.u.a6.addr.s6_addr[8+i] = card->options.hsuid[i];
618 return qeth_l3_modify_ip(card, &addr, add);
621 static int qeth_l3_register_addr_entry(struct qeth_card *card,
628 if (card->options.sniffer)
632 QETH_CARD_TEXT(card, 2, "setaddr4");
633 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
635 QETH_CARD_TEXT(card, 2, "setaddr6");
636 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
637 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
639 QETH_CARD_TEXT(card, 2, "setaddr?");
640 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
644 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_SETIPM);
646 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP);
648 QETH_CARD_TEXT(card, 2, "failed");
651 QETH_CARD_TEXT(card, 2, "FAILED");
653 dev_warn(&card->gdev->dev,
659 static int qeth_l3_deregister_addr_entry(struct qeth_card *card,
664 if (card->options.sniffer)
668 QETH_CARD_TEXT(card, 2, "deladdr4");
669 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
671 QETH_CARD_TEXT(card, 2, "deladdr6");
672 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
673 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
675 QETH_CARD_TEXT(card, 2, "deladdr?");
676 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
679 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM);
681 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP);
683 QETH_CARD_TEXT(card, 2, "failed");
688 static int qeth_l3_setadapter_parms(struct qeth_card *card)
692 QETH_CARD_TEXT(card, 2, "setadprm");
694 if (qeth_adp_supported(card, IPA_SETADP_ALTER_MAC_ADDRESS)) {
695 rc = qeth_setadpparms_change_macaddr(card);
697 dev_warn(&card->gdev->dev, "Reading the adapter MAC"
704 static int qeth_l3_start_ipa_arp_processing(struct qeth_card *card)
708 QETH_CARD_TEXT(card, 3, "ipaarp");
710 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
711 dev_info(&card->gdev->dev,
713 netdev_name(card->dev));
716 rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
719 dev_warn(&card->gdev->dev,
721 netdev_name(card->dev));
726 static int qeth_l3_start_ipa_source_mac(struct qeth_card *card)
730 QETH_CARD_TEXT(card, 3, "stsrcmac");
732 if (!qeth_is_supported(card, IPA_SOURCE_MAC)) {
733 dev_info(&card->gdev->dev,
735 netdev_name(card->dev));
739 rc = qeth_send_simple_setassparms(card, IPA_SOURCE_MAC,
742 dev_warn(&card->gdev->dev,
744 netdev_name(card->dev));
748 static int qeth_l3_start_ipa_vlan(struct qeth_card *card)
752 QETH_CARD_TEXT(card, 3, "strtvlan");
754 if (!qeth_is_supported(card, IPA_FULL_VLAN)) {
755 dev_info(&card->gdev->dev,
756 "VLAN not supported on %s\n", netdev_name(card->dev));
760 rc = qeth_send_simple_setassparms(card, IPA_VLAN_PRIO,
763 dev_warn(&card->gdev->dev,
765 netdev_name(card->dev));
767 dev_info(&card->gdev->dev, "VLAN enabled\n");
772 static int qeth_l3_start_ipa_multicast(struct qeth_card *card)
776 QETH_CARD_TEXT(card, 3, "stmcast");
778 if (!qeth_is_supported(card, IPA_MULTICASTING)) {
779 dev_info(&card->gdev->dev,
781 netdev_name(card->dev));
785 rc = qeth_send_simple_setassparms(card, IPA_MULTICASTING,
788 dev_warn(&card->gdev->dev,
790 netdev_name(card->dev));
792 dev_info(&card->gdev->dev, "Multicast enabled\n");
793 card->dev->flags |= IFF_MULTICAST;
798 static int qeth_l3_softsetup_ipv6(struct qeth_card *card)
803 QETH_CARD_TEXT(card, 3, "softipv6");
805 if (IS_IQD(card))
808 rc = qeth_send_simple_setassparms(card, IPA_IPV6, IPA_CMD_ASS_START,
811 dev_err(&card->gdev->dev,
813 netdev_name(card->dev));
816 rc = qeth_send_simple_setassparms_v6(card, IPA_IPV6, IPA_CMD_ASS_START,
819 dev_err(&card->gdev->dev,
821 netdev_name(card->dev));
824 rc = qeth_send_simple_setassparms_v6(card, IPA_PASSTHRU,
827 dev_warn(&card->gdev->dev,
829 netdev_name(card->dev));
833 dev_info(&card->gdev->dev, "IPV6 enabled\n");
837 static int qeth_l3_start_ipa_ipv6(struct qeth_card *card)
839 QETH_CARD_TEXT(card, 3, "strtipv6");
841 if (!qeth_is_supported(card, IPA_IPV6)) {
842 dev_info(&card->gdev->dev,
843 "IPv6 not supported on %s\n", netdev_name(card->dev));
846 return qeth_l3_softsetup_ipv6(card);
849 static int qeth_l3_start_ipa_broadcast(struct qeth_card *card)
854 QETH_CARD_TEXT(card, 3, "stbrdcst");
855 card->info.broadcast_capable = 0;
856 if (!qeth_is_supported(card, IPA_FILTERING)) {
857 dev_info(&card->gdev->dev,
859 netdev_name(card->dev));
863 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
866 dev_warn(&card->gdev->dev,
868 netdev_name(card->dev));
872 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
875 dev_warn(&card->gdev->dev,
877 netdev_name(card->dev));
880 card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO;
881 dev_info(&card->gdev->dev, "Broadcast enabled\n");
882 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
885 dev_warn(&card->gdev->dev,
887 netdev_name(card->dev));
890 card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO;
892 if (card->info.broadcast_capable)
893 card->dev->flags |= IFF_BROADCAST;
895 card->dev->flags &= ~IFF_BROADCAST;
899 static void qeth_l3_start_ipassists(struct qeth_card *card)
901 QETH_CARD_TEXT(card, 3, "strtipas");
903 qeth_l3_start_ipa_arp_processing(card); /* go on*/
904 qeth_l3_start_ipa_source_mac(card); /* go on*/
905 qeth_l3_start_ipa_vlan(card); /* go on*/
906 qeth_l3_start_ipa_multicast(card); /* go on*/
907 qeth_l3_start_ipa_ipv6(card); /* go on*/
908 qeth_l3_start_ipa_broadcast(card); /* go on*/
911 static int qeth_l3_iqd_read_initial_mac_cb(struct qeth_card *card,
921 ether_addr_copy(card->dev->dev_addr,
926 static int qeth_l3_iqd_read_initial_mac(struct qeth_card *card)
931 QETH_CARD_TEXT(card, 2, "hsrmac");
933 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6,
938 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_iqd_read_initial_mac_cb,
943 static int qeth_l3_get_unique_id_cb(struct qeth_card *card,
954 dev_warn(&card->gdev->dev, "The network adapter failed to generate a unique ID\n");
958 static u16 qeth_l3_get_unique_id(struct qeth_card *card, u16 uid)
962 QETH_CARD_TEXT(card, 2, "guniqeid");
964 if (!qeth_is_supported(card, IPA_IPV6))
967 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6,
973 qeth_send_ipa_cmd(card, iob, qeth_l3_get_unique_id_cb, &uid);
980 qeth_diags_trace_cb(struct qeth_card *card, struct qeth_reply *reply,
986 QETH_CARD_TEXT(card, 2, "diastrcb");
991 QETH_CARD_TEXT_(card, 2, "dxter%x", rc);
999 card->info.promisc_mode = SET_PROMISC_MODE_OFF;
1000 dev_info(&card->gdev->dev, "The HiperSockets network "
1010 card->info.promisc_mode = SET_PROMISC_MODE_ON;
1011 dev_info(&card->gdev->dev, "The HiperSockets network "
1015 dev_warn(&card->gdev->dev, "The device is not "
1020 dev_warn(&card->gdev->dev, "A HiperSockets "
1030 cmd->data.diagass.action, CARD_DEVID(card));
1037 qeth_diags_trace(struct qeth_card *card, enum qeth_diags_trace_cmds diags_cmd)
1042 QETH_CARD_TEXT(card, 2, "diagtrac");
1044 iob = qeth_get_diag_cmd(card, QETH_DIAGS_CMD_TRACE, 0);
1050 return qeth_send_ipa_cmd(card, iob, qeth_diags_trace_cb, NULL);
1055 struct qeth_card *card = arg;
1063 QETH_CARD_TEXT(card, 4, "addmc");
1080 ipm = qeth_l3_find_addr_by_ip(card, &tmp);
1091 hash_add(card->rx_mode_addrs, &ipm->hnode,
1096 if (!qeth_is_supported(card, IPA_IPV6))
1111 ipm = qeth_l3_find_addr_by_ip(card, &tmp);
1122 hash_add(card->rx_mode_addrs, &ipm->hnode,
1135 struct qeth_card *card = dev->ml_priv;
1137 QETH_CARD_TEXT_(card, 4, "aid:%d", vid);
1144 struct qeth_card *card = dev->ml_priv;
1146 QETH_CARD_TEXT_(card, 4, "kid:%d", vid);
1150 static void qeth_l3_set_promisc_mode(struct qeth_card *card)
1152 bool enable = card->dev->flags & IFF_PROMISC;
1154 if (card->info.promisc_mode == enable)
1157 if (IS_VM_NIC(card)) { /* Guestlan trace */
1158 if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
1159 qeth_setadp_promisc_mode(card, enable);
1160 } else if (card->options.sniffer && /* HiperSockets trace */
1161 qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) {
1163 QETH_CARD_TEXT(card, 3, "+promisc");
1164 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_ENABLE);
1166 QETH_CARD_TEXT(card, 3, "-promisc");
1167 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
1174 struct qeth_card *card = container_of(work, struct qeth_card,
1180 QETH_CARD_TEXT(card, 3, "setmulti");
1182 if (!card->options.sniffer) {
1184 qeth_l3_add_mcast_rtnl(card->dev, 0, card);
1185 if (qeth_is_supported(card, IPA_FULL_VLAN))
1186 vlan_for_each(card->dev, qeth_l3_add_mcast_rtnl, card);
1189 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) {
1192 rc = qeth_l3_deregister_addr_entry(card, addr);
1199 rc = qeth_l3_register_addr_entry(card, addr);
1213 qeth_l3_set_promisc_mode(card);
1233 static int qeth_l3_arp_cmd_cb(struct qeth_card *card, struct qeth_reply *reply,
1238 qeth_setassparms_cb(card, reply, data);
1242 static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
1247 QETH_CARD_TEXT(card, 3, "arpstnoe");
1254 if (IS_VM_NIC(card))
1256 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1260 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1268 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1271 CARD_DEVID(card), rc);
1275 static __u32 get_arp_entry_size(struct qeth_card *card,
1284 QETH_CARD_TEXT(card, 4, "arpev4");
1293 QETH_CARD_TEXT(card, 4, "arpev6");
1304 QETH_CARD_TEXT(card, 4, "arpinv");
1317 static int qeth_l3_arp_query_cb(struct qeth_card *card,
1328 QETH_CARD_TEXT(card, 3, "arpquecb");
1332 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.prot_version);
1334 QETH_CARD_TEXT(card, 4, "arpcberr");
1335 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
1340 QETH_CARD_TEXT(card, 4, "setaperr");
1341 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
1345 QETH_CARD_TEXT_(card, 4, "anoen%i", qdata->no_entries);
1358 QETH_CARD_TEXT(card, 4, "pmis");
1359 QETH_CARD_TEXT_(card, 4, "%i", etype->ip);
1362 esize = get_arp_entry_size(card, qdata, etype,
1364 QETH_CARD_TEXT_(card, 5, "esz%i", esize);
1369 QETH_CARD_TEXT_(card, 4, "qaer3%i", -ENOSPC);
1385 QETH_CARD_TEXT_(card, 4, "nove%i", qinfo->no_entries);
1392 QETH_CARD_TEXT_(card, 4, "rc%i", 0);
1396 static int qeth_l3_query_arp_cache_info(struct qeth_card *card,
1404 QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot);
1406 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1413 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_query_cb, qinfo);
1416 CARD_DEVID(card), rc);
1420 static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata)
1425 QETH_CARD_TEXT(card, 3, "arpquery");
1427 if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/
1429 QETH_CARD_TEXT(card, 3, "arpqnsup");
1444 rc = qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV4, &qinfo);
1452 qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV6, &qinfo);
1455 QETH_CARD_TEXT(card, 4, "qactf");
1459 QETH_CARD_TEXT(card, 4, "qacts");
1467 static int qeth_l3_arp_modify_entry(struct qeth_card *card,
1476 QETH_CARD_TEXT(card, 3, "arpadd");
1478 QETH_CARD_TEXT(card, 3, "arpdel");
1485 if (IS_VM_NIC(card))
1487 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1491 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, arp_cmd,
1500 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1503 arp_cmd, CARD_DEVID(card), rc);
1507 static int qeth_l3_arp_flush_cache(struct qeth_card *card)
1512 QETH_CARD_TEXT(card, 3, "arpflush");
1519 if (IS_VM_NIC(card) || IS_IQD(card))
1521 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1525 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1531 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1534 CARD_DEVID(card), rc);
1540 struct qeth_card *card = dev->ml_priv;
1551 rc = qeth_l3_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue);
1558 rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data);
1570 return qeth_l3_arp_modify_entry(card, &arp_entry, arp_cmd);
1576 rc = qeth_l3_arp_flush_cache(card);
1650 struct qeth_card *card = queue->card;
1677 if (ipv == 4 || IS_IQD(card)) {
1691 if (IS_IQD(card) && skb_get_queue_mapping(skb) != QETH_IQD_MCAST_TXQ)
1704 if (!IS_IQD(card))
1727 static int qeth_l3_xmit(struct qeth_card *card, struct sk_buff *skb,
1742 return qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header);
1748 struct qeth_card *card = dev->ml_priv;
1756 if (IS_IQD(card)) {
1757 queue = card->qdio.out_qs[qeth_iqd_translate_txq(dev, txq)];
1759 if (card->options.sniffer)
1761 if ((card->options.cq != QETH_CQ_ENABLED && !ipv) ||
1762 (card->options.cq == QETH_CQ_ENABLED &&
1766 queue = card->qdio.out_qs[txq];
1773 if (ipv == 4 || IS_IQD(card))
1774 rc = qeth_l3_xmit(card, skb, queue, ipv);
1776 rc = qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header);
1789 struct qeth_card *card = dev->ml_priv;
1791 schedule_work(&card->rx_mode_work);
1837 struct qeth_card *card = dev->ml_priv;
1839 if (qeth_uses_tx_prio_queueing(card))
1840 return qeth_get_priority_queue(card, skb);
1879 static int qeth_l3_setup_netdev(struct qeth_card *card)
1881 struct net_device *dev = card->dev;
1885 if (IS_OSD(card) || IS_OSX(card)) {
1886 card->dev->netdev_ops = &qeth_l3_osa_netdev_ops;
1889 dev->dev_id = qeth_l3_get_unique_id(card, dev->dev_id);
1891 if (!IS_VM_NIC(card)) {
1892 card->dev->features |= NETIF_F_SG;
1893 card->dev->hw_features |= NETIF_F_TSO |
1895 card->dev->vlan_features |= NETIF_F_TSO |
1899 if (qeth_is_supported6(card, IPA_OUTBOUND_CHECKSUM_V6)) {
1900 card->dev->hw_features |= NETIF_F_IPV6_CSUM;
1901 card->dev->vlan_features |= NETIF_F_IPV6_CSUM;
1903 if (qeth_is_supported6(card, IPA_OUTBOUND_TSO)) {
1904 card->dev->hw_features |= NETIF_F_TSO6;
1905 card->dev->vlan_features |= NETIF_F_TSO6;
1909 if (card->dev->hw_features & NETIF_F_TSO6)
1911 else if (card->dev->hw_features & NETIF_F_TSO)
1915 } else if (IS_IQD(card)) {
1916 card->dev->flags |= IFF_NOARP;
1917 card->dev->netdev_ops = &qeth_l3_netdev_ops;
1920 rc = qeth_l3_iqd_read_initial_mac(card);
1926 card->dev->needed_headroom = headroom;
1927 card->dev->features |= NETIF_F_HW_VLAN_CTAG_TX |
1931 netif_keep_dst(card->dev);
1932 if (card->dev->hw_features & (NETIF_F_TSO | NETIF_F_TSO6))
1933 netif_set_gso_max_size(card->dev,
1934 PAGE_SIZE * (QETH_MAX_BUFFER_ELEMENTS(card) - 1));
1936 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
1937 return register_netdev(card->dev);
1947 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
1950 hash_init(card->ip_htable);
1951 mutex_init(&card->ip_lock);
1952 card->cmd_wq = alloc_ordered_workqueue("%s_cmd", 0,
1954 if (!card->cmd_wq)
1960 destroy_workqueue(card->cmd_wq);
1965 INIT_WORK(&card->rx_mode_work, qeth_l3_rx_mode_work);
1971 struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
1976 qeth_set_allowed_threads(card, 0, 1);
1977 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
1980 qeth_set_offline(card, card->discipline, false);
1982 cancel_work_sync(&card->close_dev_work);
1983 if (card->dev->reg_state == NETREG_REGISTERED)
1984 unregister_netdev(card->dev);
1986 flush_workqueue(card->cmd_wq);
1987 destroy_workqueue(card->cmd_wq);
1988 qeth_l3_clear_ip_htable(card, 0);
1989 qeth_l3_clear_ipato_list(card);
1992 static int qeth_l3_set_online(struct qeth_card *card, bool carrier_ok)
1994 struct net_device *dev = card->dev;
1998 QETH_CARD_TEXT(card, 2, "softsetp");
2000 rc = qeth_l3_setadapter_parms(card);
2002 QETH_CARD_TEXT_(card, 2, "2err%04x", rc);
2003 if (!card->options.sniffer) {
2004 qeth_l3_start_ipassists(card);
2006 rc = qeth_l3_setrouting_v4(card);
2008 QETH_CARD_TEXT_(card, 2, "4err%04x", rc);
2009 rc = qeth_l3_setrouting_v6(card);
2011 QETH_CARD_TEXT_(card, 2, "5err%04x", rc);
2014 card->state = CARD_STATE_SOFTSETUP;
2016 qeth_set_allowed_threads(card, 0xffffffff, 0);
2017 qeth_l3_recover_ip(card);
2020 rc = qeth_l3_setup_netdev(card);
2028 rc = qeth_set_real_num_tx_queues(card,
2029 qeth_tx_actual_queues(card));
2045 napi_schedule(&card->napi);
2055 qeth_set_allowed_threads(card, 0, 1);
2056 card->state = CARD_STATE_DOWN;
2057 qeth_l3_clear_ip_htable(card, 1);
2061 static void qeth_l3_set_offline(struct qeth_card *card)
2063 qeth_set_allowed_threads(card, 0, 1);
2064 qeth_l3_drain_rx_mode_cache(card);
2066 if (card->options.sniffer &&
2067 (card->info.promisc_mode == SET_PROMISC_MODE_ON))
2068 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
2070 if (card->state == CARD_STATE_SOFTSETUP) {
2071 card->state = CARD_STATE_DOWN;
2072 qeth_l3_clear_ip_htable(card, 1);
2077 static int qeth_l3_control_event(struct qeth_card *card,
2094 static int qeth_l3_handle_ip_event(struct qeth_card *card,
2100 qeth_l3_modify_ip(card, addr, true);
2103 qeth_l3_modify_ip(card, addr, false);
2112 struct qeth_card *card;
2122 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, true);
2130 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, false);
2150 struct qeth_card *card;
2152 card = qeth_l3_get_card_from_dev(dev);
2153 if (!card)
2155 QETH_CARD_TEXT(card, 3, "ipevent");
2161 return qeth_l3_handle_ip_event(card, &addr, event);
2175 struct qeth_card *card;
2180 card = qeth_l3_get_card_from_dev(dev);
2181 if (!card)
2183 QETH_CARD_TEXT(card, 3, "ip6event");
2184 if (!qeth_is_supported(card, IPA_IPV6))
2196 ip_work->card = card;
2202 queue_work(card->cmd_wq, &ip_work->work);