s390/qeth: issue STARTLAN as first IPA command
STARTLAN needs to be the first IPA command after MPC initialization completes. So move the qeth_send_startlan() call from the layer disciplines into the core path, right after the MPC handshake. While at it, replace the magic LAN OFFLINE return code with the existing enum. Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com> Reviewed-by: Thomas Richter <tmricht@linux.vnet.ibm.com> Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ac988d78dc
commit
1034051045
|
@ -913,7 +913,6 @@ void qeth_clear_thread_running_bit(struct qeth_card *, unsigned long);
|
||||||
int qeth_core_hardsetup_card(struct qeth_card *);
|
int qeth_core_hardsetup_card(struct qeth_card *);
|
||||||
void qeth_print_status_message(struct qeth_card *);
|
void qeth_print_status_message(struct qeth_card *);
|
||||||
int qeth_init_qdio_queues(struct qeth_card *);
|
int qeth_init_qdio_queues(struct qeth_card *);
|
||||||
int qeth_send_startlan(struct qeth_card *);
|
|
||||||
int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
|
int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
|
||||||
int (*reply_cb)
|
int (*reply_cb)
|
||||||
(struct qeth_card *, struct qeth_reply *, unsigned long),
|
(struct qeth_card *, struct qeth_reply *, unsigned long),
|
||||||
|
|
|
@ -2944,7 +2944,7 @@ int qeth_send_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(qeth_send_ipa_cmd);
|
EXPORT_SYMBOL_GPL(qeth_send_ipa_cmd);
|
||||||
|
|
||||||
int qeth_send_startlan(struct qeth_card *card)
|
static int qeth_send_startlan(struct qeth_card *card)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
struct qeth_cmd_buffer *iob;
|
struct qeth_cmd_buffer *iob;
|
||||||
|
@ -2957,7 +2957,6 @@ int qeth_send_startlan(struct qeth_card *card)
|
||||||
rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
|
rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(qeth_send_startlan);
|
|
||||||
|
|
||||||
static int qeth_default_setadapterparms_cb(struct qeth_card *card,
|
static int qeth_default_setadapterparms_cb(struct qeth_card *card,
|
||||||
struct qeth_reply *reply, unsigned long data)
|
struct qeth_reply *reply, unsigned long data)
|
||||||
|
@ -5087,6 +5086,20 @@ retriable:
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = qeth_send_startlan(card);
|
||||||
|
if (rc) {
|
||||||
|
QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc);
|
||||||
|
if (rc == IPA_RC_LAN_OFFLINE) {
|
||||||
|
dev_warn(&card->gdev->dev,
|
||||||
|
"The LAN is offline\n");
|
||||||
|
card->lan_online = 0;
|
||||||
|
} else {
|
||||||
|
rc = -ENODEV;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
card->lan_online = 1;
|
||||||
|
|
||||||
card->options.ipa4.supported_funcs = 0;
|
card->options.ipa4.supported_funcs = 0;
|
||||||
card->options.ipa6.supported_funcs = 0;
|
card->options.ipa6.supported_funcs = 0;
|
||||||
card->options.adp.supported_funcs = 0;
|
card->options.adp.supported_funcs = 0;
|
||||||
|
@ -5098,14 +5111,14 @@ retriable:
|
||||||
if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) {
|
if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) {
|
||||||
rc = qeth_query_setadapterparms(card);
|
rc = qeth_query_setadapterparms(card);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc);
|
QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) {
|
if (qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) {
|
||||||
rc = qeth_query_setdiagass(card);
|
rc = qeth_query_setdiagass(card);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc);
|
QETH_DBF_TEXT_(SETUP, 2, "8err%d", rc);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1177,21 +1177,6 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
|
||||||
/* softsetup */
|
/* softsetup */
|
||||||
QETH_DBF_TEXT(SETUP, 2, "softsetp");
|
QETH_DBF_TEXT(SETUP, 2, "softsetp");
|
||||||
|
|
||||||
rc = qeth_send_startlan(card);
|
|
||||||
if (rc) {
|
|
||||||
QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
|
|
||||||
if (rc == 0xe080) {
|
|
||||||
dev_warn(&card->gdev->dev,
|
|
||||||
"The LAN is offline\n");
|
|
||||||
card->lan_online = 0;
|
|
||||||
goto contin;
|
|
||||||
}
|
|
||||||
rc = -ENODEV;
|
|
||||||
goto out_remove;
|
|
||||||
} else
|
|
||||||
card->lan_online = 1;
|
|
||||||
|
|
||||||
contin:
|
|
||||||
if ((card->info.type == QETH_CARD_TYPE_OSD) ||
|
if ((card->info.type == QETH_CARD_TYPE_OSD) ||
|
||||||
(card->info.type == QETH_CARD_TYPE_OSX)) {
|
(card->info.type == QETH_CARD_TYPE_OSX)) {
|
||||||
rc = qeth_l2_start_ipassists(card);
|
rc = qeth_l2_start_ipassists(card);
|
||||||
|
|
|
@ -3227,21 +3227,6 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
|
||||||
/* softsetup */
|
/* softsetup */
|
||||||
QETH_DBF_TEXT(SETUP, 2, "softsetp");
|
QETH_DBF_TEXT(SETUP, 2, "softsetp");
|
||||||
|
|
||||||
rc = qeth_send_startlan(card);
|
|
||||||
if (rc) {
|
|
||||||
QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
|
|
||||||
if (rc == 0xe080) {
|
|
||||||
dev_warn(&card->gdev->dev,
|
|
||||||
"The LAN is offline\n");
|
|
||||||
card->lan_online = 0;
|
|
||||||
goto contin;
|
|
||||||
}
|
|
||||||
rc = -ENODEV;
|
|
||||||
goto out_remove;
|
|
||||||
} else
|
|
||||||
card->lan_online = 1;
|
|
||||||
|
|
||||||
contin:
|
|
||||||
rc = qeth_l3_setadapter_parms(card);
|
rc = qeth_l3_setadapter_parms(card);
|
||||||
if (rc)
|
if (rc)
|
||||||
QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
|
QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
|
||||||
|
|
Loading…
Reference in New Issue