ipa_name, com, CARD_DEVID(card));
 }
 
+static void qeth_default_link_info(struct qeth_card *card)
+{
+       struct qeth_link_info *link_info = &card->info.link_info;
+
+       QETH_CARD_TEXT(card, 2, "dftlinfo");
+       link_info->duplex = DUPLEX_FULL;
+
+       if (IS_IQD(card) || IS_VM_NIC(card)) {
+               link_info->speed = SPEED_10000;
+               link_info->port = PORT_FIBRE;
+               link_info->link_mode = QETH_LINK_MODE_FIBRE_SHORT;
+       } else {
+               switch (card->info.link_type) {
+               case QETH_LINK_TYPE_FAST_ETH:
+               case QETH_LINK_TYPE_LANE_ETH100:
+                       link_info->speed = SPEED_100;
+                       link_info->port = PORT_TP;
+                       break;
+               case QETH_LINK_TYPE_GBIT_ETH:
+               case QETH_LINK_TYPE_LANE_ETH1000:
+                       link_info->speed = SPEED_1000;
+                       link_info->port = PORT_FIBRE;
+                       break;
+               case QETH_LINK_TYPE_10GBIT_ETH:
+                       link_info->speed = SPEED_10000;
+                       link_info->port = PORT_FIBRE;
+                       break;
+               case QETH_LINK_TYPE_25GBIT_ETH:
+                       link_info->speed = SPEED_25000;
+                       link_info->port = PORT_FIBRE;
+                       break;
+               default:
+                       dev_info(&card->gdev->dev,
+                                "Unknown link type %x\n",
+                                card->info.link_type);
+                       link_info->speed = SPEED_UNKNOWN;
+                       link_info->port = PORT_OTHER;
+               }
+
+               link_info->link_mode = QETH_LINK_MODE_UNKNOWN;
+       }
+}
+
 static struct qeth_ipa_cmd *qeth_check_ipa_data(struct qeth_card *card,
                                                struct qeth_ipa_cmd *cmd)
 {
                                 netdev_name(card->dev), card->info.chpid);
                        qeth_issue_ipa_msg(cmd, cmd->hdr.return_code, card);
                        netif_carrier_off(card->dev);
+                       qeth_default_link_info(card);
                }
                return NULL;
        case IPA_CMD_STARTLAN:
        return rc;
 }
 
-static int qeth_query_card_info_cb(struct qeth_card *card,
-                                  struct qeth_reply *reply, unsigned long data)
-{
-       struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *)data;
-       struct qeth_link_info *link_info = reply->param;
-       struct qeth_query_card_info *card_info;
-
-       QETH_CARD_TEXT(card, 2, "qcrdincb");
-       if (qeth_setadpparms_inspect_rc(cmd))
-               return -EIO;
-
-       card_info = &cmd->data.setadapterparms.data.card_info;
-       netdev_dbg(card->dev,
-                  "card info: card_type=0x%02x, port_mode=0x%04x, port_speed=0x%08x\n",
-                  card_info->card_type, card_info->port_mode,
-                  card_info->port_speed);
-
-       switch (card_info->port_mode) {
-       case CARD_INFO_PORTM_FULLDUPLEX:
-               link_info->duplex = DUPLEX_FULL;
-               break;
-       case CARD_INFO_PORTM_HALFDUPLEX:
-               link_info->duplex = DUPLEX_HALF;
-               break;
-       default:
-               link_info->duplex = DUPLEX_UNKNOWN;
-       }
-
-       switch (card_info->card_type) {
-       case CARD_INFO_TYPE_1G_COPPER_A:
-       case CARD_INFO_TYPE_1G_COPPER_B:
-               link_info->speed = SPEED_1000;
-               link_info->port = PORT_TP;
-               break;
-       case CARD_INFO_TYPE_1G_FIBRE_A:
-       case CARD_INFO_TYPE_1G_FIBRE_B:
-               link_info->speed = SPEED_1000;
-               link_info->port = PORT_FIBRE;
-               break;
-       case CARD_INFO_TYPE_10G_FIBRE_A:
-       case CARD_INFO_TYPE_10G_FIBRE_B:
-               link_info->speed = SPEED_10000;
-               link_info->port = PORT_FIBRE;
-               break;
-       default:
-               switch (card_info->port_speed) {
-               case CARD_INFO_PORTS_10M:
-                       link_info->speed = SPEED_10;
-                       break;
-               case CARD_INFO_PORTS_100M:
-                       link_info->speed = SPEED_100;
-                       break;
-               case CARD_INFO_PORTS_1G:
-                       link_info->speed = SPEED_1000;
-                       break;
-               case CARD_INFO_PORTS_10G:
-                       link_info->speed = SPEED_10000;
-                       break;
-               case CARD_INFO_PORTS_25G:
-                       link_info->speed = SPEED_25000;
-                       break;
-               default:
-                       link_info->speed = SPEED_UNKNOWN;
-               }
-
-               link_info->port = PORT_OTHER;
-       }
-
-       return 0;
-}
-
-int qeth_query_card_info(struct qeth_card *card,
-                        struct qeth_link_info *link_info)
-{
-       struct qeth_cmd_buffer *iob;
-
-       QETH_CARD_TEXT(card, 2, "qcrdinfo");
-       if (!qeth_adp_supported(card, IPA_SETADP_QUERY_CARD_INFO))
-               return -EOPNOTSUPP;
-       iob = qeth_get_adapter_cmd(card, IPA_SETADP_QUERY_CARD_INFO, 0);
-       if (!iob)
-               return -ENOMEM;
-
-       return qeth_send_ipa_cmd(card, iob, qeth_query_card_info_cb, link_info);
-}
-
 static int qeth_init_link_info_oat_cb(struct qeth_card *card,
                                      struct qeth_reply *reply_priv,
                                      unsigned long data)
        struct qeth_query_oat_physical_if *phys_if;
        struct qeth_query_oat_reply *reply;
 
+       QETH_CARD_TEXT(card, 2, "qoatincb");
        if (qeth_setadpparms_inspect_rc(cmd))
                return -EIO;
 
 
 static void qeth_init_link_info(struct qeth_card *card)
 {
-       card->info.link_info.duplex = DUPLEX_FULL;
-
-       if (IS_IQD(card) || IS_VM_NIC(card)) {
-               card->info.link_info.speed = SPEED_10000;
-               card->info.link_info.port = PORT_FIBRE;
-               card->info.link_info.link_mode = QETH_LINK_MODE_FIBRE_SHORT;
-       } else {
-               switch (card->info.link_type) {
-               case QETH_LINK_TYPE_FAST_ETH:
-               case QETH_LINK_TYPE_LANE_ETH100:
-                       card->info.link_info.speed = SPEED_100;
-                       card->info.link_info.port = PORT_TP;
-                       break;
-               case QETH_LINK_TYPE_GBIT_ETH:
-               case QETH_LINK_TYPE_LANE_ETH1000:
-                       card->info.link_info.speed = SPEED_1000;
-                       card->info.link_info.port = PORT_FIBRE;
-                       break;
-               case QETH_LINK_TYPE_10GBIT_ETH:
-                       card->info.link_info.speed = SPEED_10000;
-                       card->info.link_info.port = PORT_FIBRE;
-                       break;
-               case QETH_LINK_TYPE_25GBIT_ETH:
-                       card->info.link_info.speed = SPEED_25000;
-                       card->info.link_info.port = PORT_FIBRE;
-                       break;
-               default:
-                       dev_info(&card->gdev->dev, "Unknown link type %x\n",
-                                card->info.link_type);
-                       card->info.link_info.speed = SPEED_UNKNOWN;
-                       card->info.link_info.port = PORT_OTHER;
-               }
-
-               card->info.link_info.link_mode = QETH_LINK_MODE_UNKNOWN;
-       }
+       qeth_default_link_info(card);
 
        /* Get more accurate data via QUERY OAT: */
        if (qeth_adp_supported(card, IPA_SETADP_QUERY_OAT)) {
        qeth_clear_working_pool_list(card);
        qeth_flush_local_addrs(card);
        card->info.promisc_mode = 0;
+       qeth_default_link_info(card);
 
        rc  = qeth_stop_channel(&card->data);
        rc2 = qeth_stop_channel(&card->write);