|
@@ -21,6 +21,7 @@
|
|
#include <linux/hash.h>
|
|
#include <linux/hash.h>
|
|
#include <linux/hashtable.h>
|
|
#include <linux/hashtable.h>
|
|
#include <linux/string.h>
|
|
#include <linux/string.h>
|
|
|
|
+#include <asm/setup.h>
|
|
#include "qeth_core.h"
|
|
#include "qeth_core.h"
|
|
#include "qeth_l2.h"
|
|
#include "qeth_l2.h"
|
|
|
|
|
|
@@ -505,9 +506,19 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
|
|
int rc = 0;
|
|
int rc = 0;
|
|
char vendor_pre[] = {0x02, 0x00, 0x00};
|
|
char vendor_pre[] = {0x02, 0x00, 0x00};
|
|
|
|
|
|
- QETH_DBF_TEXT(SETUP, 2, "doL2init");
|
|
|
|
|
|
+ QETH_DBF_TEXT(SETUP, 2, "l2reqmac");
|
|
QETH_DBF_TEXT_(SETUP, 2, "doL2%s", CARD_BUS_ID(card));
|
|
QETH_DBF_TEXT_(SETUP, 2, "doL2%s", CARD_BUS_ID(card));
|
|
|
|
|
|
|
|
+ if (MACHINE_IS_VM) {
|
|
|
|
+ rc = qeth_vm_request_mac(card);
|
|
|
|
+ if (!rc)
|
|
|
|
+ goto out;
|
|
|
|
+ QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device %s: x%x\n",
|
|
|
|
+ CARD_BUS_ID(card), rc);
|
|
|
|
+ QETH_DBF_TEXT_(SETUP, 2, "err%04x", rc);
|
|
|
|
+ /* fall back to alternative mechanism: */
|
|
|
|
+ }
|
|
|
|
+
|
|
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) {
|
|
if (rc) {
|
|
@@ -528,11 +539,12 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
|
|
QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc);
|
|
QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc);
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
- QETH_DBF_HEX(SETUP, 2, card->dev->dev_addr, OSA_ADDR_LEN);
|
|
|
|
} else {
|
|
} else {
|
|
eth_random_addr(card->dev->dev_addr);
|
|
eth_random_addr(card->dev->dev_addr);
|
|
memcpy(card->dev->dev_addr, vendor_pre, 3);
|
|
memcpy(card->dev->dev_addr, vendor_pre, 3);
|
|
}
|
|
}
|
|
|
|
+out:
|
|
|
|
+ QETH_DBF_HEX(SETUP, 2, card->dev->dev_addr, card->dev->addr_len);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|