/* defer IP assist if device is offline (until discipline->set_online)*/
        card->options.prev_isolation = card->options.isolation;
        card->options.isolation = isolation;
-       if (card->state == CARD_STATE_SOFTSETUP ||
-           card->state == CARD_STATE_UP) {
+       if (qeth_card_hw_is_reachable(card)) {
                int ipa_rc = qeth_set_access_ctrl_online(card, 1);
                if (ipa_rc != 0)
                        rc = ipa_rc;
        if (!card)
                return -EINVAL;
 
-       if (card->state != CARD_STATE_SOFTSETUP && card->state != CARD_STATE_UP)
+       if (!qeth_card_hw_is_reachable(card))
                return sprintf(buf, "n/a\n");
 
        rc = qeth_query_switch_attributes(card, &sw_info);
                return -EINVAL;
 
        mutex_lock(&card->conf_mutex);
-       if (card->state == CARD_STATE_SOFTSETUP || card->state == CARD_STATE_UP)
+       if (qeth_card_hw_is_reachable(card))
                state = 1;
        tmp = strsep(&curtoken, "\n");
 
 
        if (!card)
                return -ENODEV;
 
-       if ((card->state != CARD_STATE_UP) &&
-               (card->state != CARD_STATE_SOFTSETUP))
+       if (!qeth_card_hw_is_reachable(card))
                return -ENODEV;
 
        if (card->info.type == QETH_CARD_TYPE_OSN)
        if (!card)
                return -ENODEV;
        QETH_CARD_TEXT(card, 2, "osnsdmc");
-       if ((card->state != CARD_STATE_UP) &&
-           (card->state != CARD_STATE_SOFTSETUP))
+       if (!qeth_card_hw_is_reachable(card))
                return -ENODEV;
        iob = qeth_wait_for_buffer(&card->write);
        memcpy(iob->data+IPA_PDU_HEADER_SIZE, data, data_len);
 
        QETH_CARD_TEXT(card, 2, "sdiplist");
        QETH_CARD_HEX(card, 2, &card, sizeof(void *));
 
-       if ((card->state != CARD_STATE_UP &&
-            card->state != CARD_STATE_SOFTSETUP) || card->options.sniffer) {
+       if (!qeth_card_hw_is_reachable(card) || card->options.sniffer)
                return;
-       }
 
        spin_lock_irqsave(&card->ip_lock, flags);
        tbd_list = card->ip_tbd_list;
        if (!card)
                return -ENODEV;
 
-       if ((card->state != CARD_STATE_UP) &&
-               (card->state != CARD_STATE_SOFTSETUP))
+       if (!qeth_card_hw_is_reachable(card))
                return -ENODEV;
 
        switch (cmd) {
 
                rc = -EINVAL;
                goto out;
        }
-       if (((card->state == CARD_STATE_SOFTSETUP) ||
-            (card->state == CARD_STATE_UP)) &&
+       if (qeth_card_hw_is_reachable(card) &&
            (old_route_type != route->type)) {
                if (prot == QETH_PROT_IPV4)
                        rc = qeth_l3_setrouting_v4(card);