Lines Matching refs:card

55 static struct qeth_ipaddr *qeth_l3_find_addr_by_ip(struct qeth_card *card,
62 hash_for_each_possible(card->rx_mode_addrs, addr, hnode, key)
66 hash_for_each_possible(card->ip_htable, addr, hnode, key)
87 static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
95 if (!card->ipato.enabled)
102 list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
113 if ((addr->proto == QETH_PROT_IPV4) && card->ipato.invert4)
115 else if ((addr->proto == QETH_PROT_IPV6) && card->ipato.invert6)
121 static int qeth_l3_delete_ip(struct qeth_card *card,
128 QETH_CARD_TEXT(card, 2, "delrxip");
130 QETH_CARD_TEXT(card, 2, "delvipa");
132 QETH_CARD_TEXT(card, 2, "delip");
135 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
137 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
138 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
141 addr = qeth_l3_find_addr_by_ip(card, tmp_addr);
149 if (qeth_card_hw_is_reachable(card))
150 rc = qeth_l3_deregister_addr_entry(card, addr);
158 static int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
165 QETH_CARD_TEXT(card, 2, "addrxip");
167 QETH_CARD_TEXT(card, 2, "addvipa");
169 QETH_CARD_TEXT(card, 2, "addip");
172 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
174 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
175 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
178 addr = qeth_l3_find_addr_by_ip(card, tmp_addr);
188 dev_warn(&card->gdev->dev,
196 if (qeth_l3_is_addr_covered_by_ipato(card, addr)) {
197 QETH_CARD_TEXT(card, 2, "tkovaddr");
200 hash_add(card->ip_htable, &addr->hnode,
203 if (!qeth_card_hw_is_reachable(card)) {
208 rc = qeth_l3_register_addr_entry(card, addr);
220 static int qeth_l3_modify_ip(struct qeth_card *card, struct qeth_ipaddr *addr,
225 mutex_lock(&card->ip_lock);
226 rc = add ? qeth_l3_add_ip(card, addr) : qeth_l3_delete_ip(card, addr);
227 mutex_unlock(&card->ip_lock);
232 static void qeth_l3_drain_rx_mode_cache(struct qeth_card *card)
238 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) {
244 static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)
250 QETH_CARD_TEXT(card, 4, "clearip");
252 mutex_lock(&card->ip_lock);
254 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
264 mutex_unlock(&card->ip_lock);
267 static void qeth_l3_recover_ip(struct qeth_card *card)
274 QETH_CARD_TEXT(card, 4, "recovrip");
276 mutex_lock(&card->ip_lock);
278 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
280 rc = qeth_l3_register_addr_entry(card, addr);
293 mutex_unlock(&card->ip_lock);
296 static int qeth_l3_setdelip_cb(struct qeth_card *card, struct qeth_reply *reply,
315 static int qeth_l3_send_setdelmc(struct qeth_card *card,
322 QETH_CARD_TEXT(card, 4, "setdelmc");
324 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto,
337 return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL);
366 static int qeth_l3_send_setdelip(struct qeth_card *card,
374 QETH_CARD_TEXT(card, 4, "setdelip");
376 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto,
383 QETH_CARD_TEXT_(card, 4, "flags%02X", flags);
396 return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL);
399 static int qeth_l3_send_setrouting(struct qeth_card *card,
406 QETH_CARD_TEXT(card, 4, "setroutg");
407 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_SETRTG, prot,
413 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
418 static int qeth_l3_correct_routing_type(struct qeth_card *card,
421 if (IS_IQD(card)) {
438 if (qeth_is_ipafunc_supported(card, prot,
451 int qeth_l3_setrouting_v4(struct qeth_card *card)
455 QETH_CARD_TEXT(card, 3, "setrtg4");
457 rc = qeth_l3_correct_routing_type(card, &card->options.route4.type,
462 rc = qeth_l3_send_setrouting(card, card->options.route4.type,
465 card->options.route4.type = NO_ROUTER;
467 rc, CARD_DEVID(card));
472 int qeth_l3_setrouting_v6(struct qeth_card *card)
476 QETH_CARD_TEXT(card, 3, "setrtg6");
478 if (!qeth_is_supported(card, IPA_IPV6))
480 rc = qeth_l3_correct_routing_type(card, &card->options.route6.type,
485 rc = qeth_l3_send_setrouting(card, card->options.route6.type,
488 card->options.route6.type = NO_ROUTER;
490 rc, CARD_DEVID(card));
504 void qeth_l3_update_ipato(struct qeth_card *card)
509 hash_for_each(card->ip_htable, i, addr, hnode) {
512 addr->ipato = qeth_l3_is_addr_covered_by_ipato(card, addr);
516 static void qeth_l3_clear_ipato_list(struct qeth_card *card)
520 mutex_lock(&card->ip_lock);
522 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
527 qeth_l3_update_ipato(card);
528 mutex_unlock(&card->ip_lock);
531 int qeth_l3_add_ipato_entry(struct qeth_card *card,
537 QETH_CARD_TEXT(card, 2, "addipato");
539 mutex_lock(&card->ip_lock);
541 list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
553 list_add_tail(&new->entry, &card->ipato.entries);
554 qeth_l3_update_ipato(card);
557 mutex_unlock(&card->ip_lock);
562 int qeth_l3_del_ipato_entry(struct qeth_card *card,
569 QETH_CARD_TEXT(card, 2, "delipato");
571 mutex_lock(&card->ip_lock);
573 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
580 qeth_l3_update_ipato(card);
586 mutex_unlock(&card->ip_lock);
591 int qeth_l3_modify_rxip_vipa(struct qeth_card *card, bool add, const u8 *ip,
603 return qeth_l3_modify_ip(card, &addr, add);
606 int qeth_l3_modify_hsuid(struct qeth_card *card, bool add)
615 addr.u.a6.addr.s6_addr[8+i] = card->options.hsuid[i];
617 return qeth_l3_modify_ip(card, &addr, add);
620 static int qeth_l3_register_addr_entry(struct qeth_card *card,
627 if (card->options.sniffer)
631 QETH_CARD_TEXT(card, 2, "setaddr4");
632 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
634 QETH_CARD_TEXT(card, 2, "setaddr6");
635 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
636 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
638 QETH_CARD_TEXT(card, 2, "setaddr?");
639 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
643 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_SETIPM);
645 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP);
647 QETH_CARD_TEXT(card, 2, "failed");
650 QETH_CARD_TEXT(card, 2, "FAILED");
652 dev_warn(&card->gdev->dev,
658 static int qeth_l3_deregister_addr_entry(struct qeth_card *card,
663 if (card->options.sniffer)
667 QETH_CARD_TEXT(card, 2, "deladdr4");
668 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
670 QETH_CARD_TEXT(card, 2, "deladdr6");
671 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
672 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
674 QETH_CARD_TEXT(card, 2, "deladdr?");
675 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
678 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM);
680 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP);
682 QETH_CARD_TEXT(card, 2, "failed");
687 static int qeth_l3_setadapter_parms(struct qeth_card *card)
691 QETH_CARD_TEXT(card, 2, "setadprm");
693 if (qeth_adp_supported(card, IPA_SETADP_ALTER_MAC_ADDRESS)) {
694 rc = qeth_setadpparms_change_macaddr(card);
696 dev_warn(&card->gdev->dev, "Reading the adapter MAC"
703 static int qeth_l3_start_ipa_arp_processing(struct qeth_card *card)
707 QETH_CARD_TEXT(card, 3, "ipaarp");
709 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
710 dev_info(&card->gdev->dev,
712 netdev_name(card->dev));
715 rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
718 dev_warn(&card->gdev->dev,
720 netdev_name(card->dev));
725 static int qeth_l3_start_ipa_source_mac(struct qeth_card *card)
729 QETH_CARD_TEXT(card, 3, "stsrcmac");
731 if (!qeth_is_supported(card, IPA_SOURCE_MAC)) {
732 dev_info(&card->gdev->dev,
734 netdev_name(card->dev));
738 rc = qeth_send_simple_setassparms(card, IPA_SOURCE_MAC,
741 dev_warn(&card->gdev->dev,
743 netdev_name(card->dev));
747 static int qeth_l3_start_ipa_vlan(struct qeth_card *card)
751 QETH_CARD_TEXT(card, 3, "strtvlan");
753 if (!qeth_is_supported(card, IPA_FULL_VLAN)) {
754 dev_info(&card->gdev->dev,
755 "VLAN not supported on %s\n", netdev_name(card->dev));
759 rc = qeth_send_simple_setassparms(card, IPA_VLAN_PRIO,
762 dev_warn(&card->gdev->dev,
764 netdev_name(card->dev));
766 dev_info(&card->gdev->dev, "VLAN enabled\n");
771 static int qeth_l3_start_ipa_multicast(struct qeth_card *card)
775 QETH_CARD_TEXT(card, 3, "stmcast");
777 if (!qeth_is_supported(card, IPA_MULTICASTING)) {
778 dev_info(&card->gdev->dev,
780 netdev_name(card->dev));
784 rc = qeth_send_simple_setassparms(card, IPA_MULTICASTING,
787 dev_warn(&card->gdev->dev,
789 netdev_name(card->dev));
791 dev_info(&card->gdev->dev, "Multicast enabled\n");
792 card->dev->flags |= IFF_MULTICAST;
797 static int qeth_l3_softsetup_ipv6(struct qeth_card *card)
802 QETH_CARD_TEXT(card, 3, "softipv6");
804 if (IS_IQD(card))
807 rc = qeth_send_simple_setassparms(card, IPA_IPV6, IPA_CMD_ASS_START,
810 dev_err(&card->gdev->dev,
812 netdev_name(card->dev));
815 rc = qeth_send_simple_setassparms_v6(card, IPA_IPV6, IPA_CMD_ASS_START,
818 dev_err(&card->gdev->dev,
820 netdev_name(card->dev));
823 rc = qeth_send_simple_setassparms_v6(card, IPA_PASSTHRU,
826 dev_warn(&card->gdev->dev,
828 netdev_name(card->dev));
832 dev_info(&card->gdev->dev, "IPV6 enabled\n");
836 static int qeth_l3_start_ipa_ipv6(struct qeth_card *card)
838 QETH_CARD_TEXT(card, 3, "strtipv6");
840 if (!qeth_is_supported(card, IPA_IPV6)) {
841 dev_info(&card->gdev->dev,
842 "IPv6 not supported on %s\n", netdev_name(card->dev));
845 return qeth_l3_softsetup_ipv6(card);
848 static int qeth_l3_start_ipa_broadcast(struct qeth_card *card)
853 QETH_CARD_TEXT(card, 3, "stbrdcst");
854 card->info.broadcast_capable = 0;
855 if (!qeth_is_supported(card, IPA_FILTERING)) {
856 dev_info(&card->gdev->dev,
858 netdev_name(card->dev));
862 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
865 dev_warn(&card->gdev->dev,
867 netdev_name(card->dev));
871 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
874 dev_warn(&card->gdev->dev,
876 netdev_name(card->dev));
879 card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO;
880 dev_info(&card->gdev->dev, "Broadcast enabled\n");
881 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
884 dev_warn(&card->gdev->dev,
886 netdev_name(card->dev));
889 card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO;
891 if (card->info.broadcast_capable)
892 card->dev->flags |= IFF_BROADCAST;
894 card->dev->flags &= ~IFF_BROADCAST;
898 static void qeth_l3_start_ipassists(struct qeth_card *card)
900 QETH_CARD_TEXT(card, 3, "strtipas");
902 qeth_l3_start_ipa_arp_processing(card); /* go on*/
903 qeth_l3_start_ipa_source_mac(card); /* go on*/
904 qeth_l3_start_ipa_vlan(card); /* go on*/
905 qeth_l3_start_ipa_multicast(card); /* go on*/
906 qeth_l3_start_ipa_ipv6(card); /* go on*/
907 qeth_l3_start_ipa_broadcast(card); /* go on*/
910 static int qeth_l3_iqd_read_initial_mac_cb(struct qeth_card *card,
920 eth_hw_addr_set(card->dev, cmd->data.create_destroy_addr.mac_addr);
924 static int qeth_l3_iqd_read_initial_mac(struct qeth_card *card)
929 QETH_CARD_TEXT(card, 2, "hsrmac");
931 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6,
936 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_iqd_read_initial_mac_cb,
941 static int qeth_l3_get_unique_id_cb(struct qeth_card *card,
952 dev_warn(&card->gdev->dev, "The network adapter failed to generate a unique ID\n");
956 static u16 qeth_l3_get_unique_id(struct qeth_card *card, u16 uid)
960 QETH_CARD_TEXT(card, 2, "guniqeid");
962 if (!qeth_is_supported(card, IPA_IPV6))
965 iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6,
971 qeth_send_ipa_cmd(card, iob, qeth_l3_get_unique_id_cb, &uid);
978 qeth_diags_trace_cb(struct qeth_card *card, struct qeth_reply *reply,
984 QETH_CARD_TEXT(card, 2, "diastrcb");
989 QETH_CARD_TEXT_(card, 2, "dxter%x", rc);
997 card->info.promisc_mode = SET_PROMISC_MODE_OFF;
998 dev_info(&card->gdev->dev, "The HiperSockets network "
1008 card->info.promisc_mode = SET_PROMISC_MODE_ON;
1009 dev_info(&card->gdev->dev, "The HiperSockets network "
1013 dev_warn(&card->gdev->dev, "The device is not "
1018 dev_warn(&card->gdev->dev, "A HiperSockets "
1028 cmd->data.diagass.action, CARD_DEVID(card));
1035 qeth_diags_trace(struct qeth_card *card, enum qeth_diags_trace_cmds diags_cmd)
1040 QETH_CARD_TEXT(card, 2, "diagtrac");
1042 iob = qeth_get_diag_cmd(card, QETH_DIAGS_CMD_TRACE, 0);
1048 return qeth_send_ipa_cmd(card, iob, qeth_diags_trace_cb, NULL);
1053 struct qeth_card *card = arg;
1061 QETH_CARD_TEXT(card, 4, "addmc");
1078 ipm = qeth_l3_find_addr_by_ip(card, &tmp);
1089 hash_add(card->rx_mode_addrs, &ipm->hnode,
1094 if (!qeth_is_supported(card, IPA_IPV6))
1110 ipm = qeth_l3_find_addr_by_ip(card, &tmp);
1121 hash_add(card->rx_mode_addrs, &ipm->hnode,
1130 static void qeth_l3_set_promisc_mode(struct qeth_card *card)
1132 bool enable = card->dev->flags & IFF_PROMISC;
1134 if (card->info.promisc_mode == enable)
1137 if (IS_VM_NIC(card)) { /* Guestlan trace */
1138 if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
1139 qeth_setadp_promisc_mode(card, enable);
1140 } else if (card->options.sniffer && /* HiperSockets trace */
1141 qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) {
1143 QETH_CARD_TEXT(card, 3, "+promisc");
1144 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_ENABLE);
1146 QETH_CARD_TEXT(card, 3, "-promisc");
1147 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
1154 struct qeth_card *card = container_of(work, struct qeth_card,
1160 QETH_CARD_TEXT(card, 3, "setmulti");
1162 if (!card->options.sniffer) {
1164 qeth_l3_add_mcast_rtnl(card->dev, 0, card);
1165 if (qeth_is_supported(card, IPA_FULL_VLAN))
1166 vlan_for_each(card->dev, qeth_l3_add_mcast_rtnl, card);
1169 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) {
1172 rc = qeth_l3_deregister_addr_entry(card, addr);
1179 rc = qeth_l3_register_addr_entry(card, addr);
1193 qeth_l3_set_promisc_mode(card);
1213 static int qeth_l3_arp_cmd_cb(struct qeth_card *card, struct qeth_reply *reply,
1218 qeth_setassparms_cb(card, reply, data);
1222 static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
1227 QETH_CARD_TEXT(card, 3, "arpstnoe");
1234 if (IS_VM_NIC(card))
1236 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1240 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1248 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1251 CARD_DEVID(card), rc);
1255 static __u32 get_arp_entry_size(struct qeth_card *card,
1264 QETH_CARD_TEXT(card, 4, "arpev4");
1273 QETH_CARD_TEXT(card, 4, "arpev6");
1284 QETH_CARD_TEXT(card, 4, "arpinv");
1297 static int qeth_l3_arp_query_cb(struct qeth_card *card,
1308 QETH_CARD_TEXT(card, 3, "arpquecb");
1312 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.prot_version);
1314 QETH_CARD_TEXT(card, 4, "arpcberr");
1315 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
1320 QETH_CARD_TEXT(card, 4, "setaperr");
1321 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
1325 QETH_CARD_TEXT_(card, 4, "anoen%i", qdata->no_entries);
1338 QETH_CARD_TEXT(card, 4, "pmis");
1339 QETH_CARD_TEXT_(card, 4, "%i", etype->ip);
1342 esize = get_arp_entry_size(card, qdata, etype,
1344 QETH_CARD_TEXT_(card, 5, "esz%i", esize);
1349 QETH_CARD_TEXT_(card, 4, "qaer3%i", -ENOSPC);
1365 QETH_CARD_TEXT_(card, 4, "nove%i", qinfo->no_entries);
1372 QETH_CARD_TEXT_(card, 4, "rc%i", 0);
1376 static int qeth_l3_query_arp_cache_info(struct qeth_card *card,
1384 QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot);
1386 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1393 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_query_cb, qinfo);
1396 CARD_DEVID(card), rc);
1400 static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata)
1405 QETH_CARD_TEXT(card, 3, "arpquery");
1407 if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/
1409 QETH_CARD_TEXT(card, 3, "arpqnsup");
1424 rc = qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV4, &qinfo);
1432 qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV6, &qinfo);
1435 QETH_CARD_TEXT(card, 4, "qactf");
1439 QETH_CARD_TEXT(card, 4, "qacts");
1447 static int qeth_l3_arp_modify_entry(struct qeth_card *card,
1456 QETH_CARD_TEXT(card, 3, "arpadd");
1458 QETH_CARD_TEXT(card, 3, "arpdel");
1465 if (IS_VM_NIC(card))
1467 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1471 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, arp_cmd,
1480 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1483 arp_cmd, CARD_DEVID(card), rc);
1487 static int qeth_l3_arp_flush_cache(struct qeth_card *card)
1492 QETH_CARD_TEXT(card, 3, "arpflush");
1499 if (IS_VM_NIC(card) || IS_IQD(card))
1501 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1505 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1511 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1514 CARD_DEVID(card), rc);
1521 struct qeth_card *card = dev->ml_priv;
1532 rc = qeth_l3_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue);
1539 rc = qeth_l3_arp_query(card, data);
1551 return qeth_l3_arp_modify_entry(card, &arp_entry, arp_cmd);
1557 rc = qeth_l3_arp_flush_cache(card);
1632 struct qeth_card *card = queue->card;
1651 if (proto == htons(ETH_P_IP) || IS_IQD(card)) {
1665 if (IS_IQD(card) && skb_get_queue_mapping(skb) != QETH_IQD_MCAST_TXQ)
1680 if (!IS_IQD(card))
1710 static int qeth_l3_xmit(struct qeth_card *card, struct sk_buff *skb,
1725 return qeth_xmit(card, skb, queue, proto, qeth_l3_fill_header);
1731 struct qeth_card *card = dev->ml_priv;
1739 if (IS_IQD(card)) {
1740 queue = card->qdio.out_qs[qeth_iqd_translate_txq(dev, txq)];
1742 if (card->options.sniffer)
1747 if (card->options.cq != QETH_CQ_ENABLED)
1752 if (card->options.cq == QETH_CQ_ENABLED)
1759 queue = card->qdio.out_qs[txq];
1766 if (proto == htons(ETH_P_IP) || IS_IQD(card))
1767 rc = qeth_l3_xmit(card, skb, queue, proto);
1769 rc = qeth_xmit(card, skb, queue, proto, qeth_l3_fill_header);
1782 struct qeth_card *card = dev->ml_priv;
1784 schedule_work(&card->rx_mode_work);
1861 static int qeth_l3_setup_netdev(struct qeth_card *card)
1863 struct net_device *dev = card->dev;
1867 if (IS_OSD(card) || IS_OSX(card)) {
1868 card->dev->netdev_ops = &qeth_l3_osa_netdev_ops;
1871 dev->dev_id = qeth_l3_get_unique_id(card, dev->dev_id);
1873 if (!IS_VM_NIC(card)) {
1874 card->dev->features |= NETIF_F_SG;
1875 card->dev->hw_features |= NETIF_F_TSO |
1877 card->dev->vlan_features |= NETIF_F_TSO |
1881 if (qeth_is_supported6(card, IPA_OUTBOUND_CHECKSUM_V6)) {
1882 card->dev->hw_features |= NETIF_F_IPV6_CSUM;
1883 card->dev->vlan_features |= NETIF_F_IPV6_CSUM;
1885 if (qeth_is_supported6(card, IPA_OUTBOUND_TSO)) {
1886 card->dev->hw_features |= NETIF_F_TSO6;
1887 card->dev->vlan_features |= NETIF_F_TSO6;
1891 if (card->dev->hw_features & NETIF_F_TSO6)
1893 else if (card->dev->hw_features & NETIF_F_TSO)
1897 } else if (IS_IQD(card)) {
1898 card->dev->flags |= IFF_NOARP;
1899 card->dev->netdev_ops = &qeth_l3_netdev_ops;
1902 rc = qeth_l3_iqd_read_initial_mac(card);
1908 card->dev->needed_headroom = headroom;
1909 card->dev->features |= NETIF_F_HW_VLAN_CTAG_TX |
1912 netif_keep_dst(card->dev);
1913 if (card->dev->hw_features & (NETIF_F_TSO | NETIF_F_TSO6))
1914 netif_set_tso_max_size(card->dev,
1915 PAGE_SIZE * (QETH_MAX_BUFFER_ELEMENTS(card) - 1));
1917 netif_napi_add(card->dev, &card->napi, qeth_poll);
1918 return register_netdev(card->dev);
1928 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
1931 hash_init(card->ip_htable);
1932 mutex_init(&card->ip_lock);
1933 card->cmd_wq = alloc_ordered_workqueue("%s_cmd", 0,
1935 if (!card->cmd_wq)
1941 destroy_workqueue(card->cmd_wq);
1948 INIT_WORK(&card->rx_mode_work, qeth_l3_rx_mode_work);
1954 struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
1959 qeth_set_allowed_threads(card, 0, 1);
1960 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
1963 qeth_set_offline(card, card->discipline, false);
1965 if (card->dev->reg_state == NETREG_REGISTERED)
1966 unregister_netdev(card->dev);
1968 destroy_workqueue(card->cmd_wq);
1969 qeth_l3_clear_ip_htable(card, 0);
1970 qeth_l3_clear_ipato_list(card);
1973 static int qeth_l3_set_online(struct qeth_card *card, bool carrier_ok)
1975 struct net_device *dev = card->dev;
1979 QETH_CARD_TEXT(card, 2, "softsetp");
1981 rc = qeth_l3_setadapter_parms(card);
1983 QETH_CARD_TEXT_(card, 2, "2err%04x", rc);
1984 if (!card->options.sniffer) {
1985 qeth_l3_start_ipassists(card);
1987 rc = qeth_l3_setrouting_v4(card);
1989 QETH_CARD_TEXT_(card, 2, "4err%04x", rc);
1990 rc = qeth_l3_setrouting_v6(card);
1992 QETH_CARD_TEXT_(card, 2, "5err%04x", rc);
1995 card->state = CARD_STATE_SOFTSETUP;
1997 qeth_set_allowed_threads(card, 0xffffffff, 0);
1998 qeth_l3_recover_ip(card);
2001 rc = qeth_l3_setup_netdev(card);
2009 rc = qeth_set_real_num_tx_queues(card,
2010 qeth_tx_actual_queues(card));
2026 napi_schedule(&card->napi);
2036 qeth_set_allowed_threads(card, 0, 1);
2037 card->state = CARD_STATE_DOWN;
2038 qeth_l3_clear_ip_htable(card, 1);
2042 static void qeth_l3_set_offline(struct qeth_card *card)
2044 qeth_set_allowed_threads(card, 0, 1);
2045 qeth_l3_drain_rx_mode_cache(card);
2047 if (card->options.sniffer &&
2048 (card->info.promisc_mode == SET_PROMISC_MODE_ON))
2049 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
2051 if (card->state == CARD_STATE_SOFTSETUP) {
2052 card->state = CARD_STATE_DOWN;
2053 qeth_l3_clear_ip_htable(card, 1);
2058 static int qeth_l3_control_event(struct qeth_card *card,
2073 static int qeth_l3_handle_ip_event(struct qeth_card *card,
2079 qeth_l3_modify_ip(card, addr, true);
2082 qeth_l3_modify_ip(card, addr, false);
2091 struct qeth_card *card;
2101 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, true);
2109 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, false);
2129 struct qeth_card *card;
2131 card = qeth_l3_get_card_from_dev(dev);
2132 if (!card)
2134 QETH_CARD_TEXT(card, 3, "ipevent");
2140 return qeth_l3_handle_ip_event(card, &addr, event);
2154 struct qeth_card *card;
2159 card = qeth_l3_get_card_from_dev(dev);
2160 if (!card)
2162 QETH_CARD_TEXT(card, 3, "ip6event");
2163 if (!qeth_is_supported(card, IPA_IPV6))
2175 ip_work->card = card;
2181 queue_work(card->cmd_wq, &ip_work->work);