|
@@ -1362,26 +1362,29 @@ static int qeth_read_conf_data(struct qeth_card *card, void **buffer,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int qeth_get_unitaddr(struct qeth_card *card)
|
|
|
+static void qeth_configure_unitaddr(struct qeth_card *card, char *prcd)
|
|
|
{
|
|
|
- int length;
|
|
|
- char *prcd;
|
|
|
- int rc;
|
|
|
-
|
|
|
- QETH_DBF_TEXT(SETUP, 2, "getunit");
|
|
|
- rc = qeth_read_conf_data(card, (void **) &prcd, &length);
|
|
|
- if (rc) {
|
|
|
- QETH_DBF_MESSAGE(2, "%s qeth_read_conf_data returned %i\n",
|
|
|
- dev_name(&card->gdev->dev), rc);
|
|
|
- return rc;
|
|
|
- }
|
|
|
+ QETH_DBF_TEXT(SETUP, 2, "cfgunit");
|
|
|
card->info.chpid = prcd[30];
|
|
|
card->info.unit_addr2 = prcd[31];
|
|
|
card->info.cula = prcd[63];
|
|
|
card->info.guestlan = ((prcd[0x10] == _ascebc['V']) &&
|
|
|
(prcd[0x11] == _ascebc['M']));
|
|
|
- kfree(prcd);
|
|
|
- return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void qeth_configure_blkt_default(struct qeth_card *card, char *prcd)
|
|
|
+{
|
|
|
+ QETH_DBF_TEXT(SETUP, 2, "cfgblkt");
|
|
|
+
|
|
|
+ if (prcd[74] == 0xF0 && prcd[75] == 0xF0 && prcd[76] == 0xF5) {
|
|
|
+ card->info.blkt.time_total = 250;
|
|
|
+ card->info.blkt.inter_packet = 5;
|
|
|
+ card->info.blkt.inter_packet_jumbo = 15;
|
|
|
+ } else {
|
|
|
+ card->info.blkt.time_total = 0;
|
|
|
+ card->info.blkt.inter_packet = 0;
|
|
|
+ card->info.blkt.inter_packet_jumbo = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void qeth_init_tokens(struct qeth_card *card)
|
|
@@ -4169,6 +4172,8 @@ void qeth_core_free_discipline(struct qeth_card *card)
|
|
|
static void qeth_determine_capabilities(struct qeth_card *card)
|
|
|
{
|
|
|
int rc;
|
|
|
+ int length;
|
|
|
+ char *prcd;
|
|
|
|
|
|
QETH_DBF_TEXT(SETUP, 2, "detcapab");
|
|
|
rc = ccw_device_set_online(CARD_DDEV(card));
|
|
@@ -4177,11 +4182,17 @@ static void qeth_determine_capabilities(struct qeth_card *card)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- rc = qeth_get_unitaddr(card);
|
|
|
+
|
|
|
+ rc = qeth_read_conf_data(card, (void **) &prcd, &length);
|
|
|
if (rc) {
|
|
|
+ QETH_DBF_MESSAGE(2, "%s qeth_read_conf_data returned %i\n",
|
|
|
+ dev_name(&card->gdev->dev), rc);
|
|
|
QETH_DBF_TEXT_(SETUP, 2, "5err%d", rc);
|
|
|
goto out_offline;
|
|
|
}
|
|
|
+ qeth_configure_unitaddr(card, prcd);
|
|
|
+ qeth_configure_blkt_default(card, prcd);
|
|
|
+ kfree(prcd);
|
|
|
|
|
|
rc = qdio_get_ssqd_desc(CARD_DDEV(card), &card->ssqd);
|
|
|
if (rc)
|