diff options
author | Gary S. Robertson <gary.robertson@linaro.org> | 2013-08-15 08:34:20 -0500 |
---|---|---|
committer | Gary S. Robertson <gary.robertson@linaro.org> | 2013-08-15 08:34:20 -0500 |
commit | 28d300d66aa0fd443a46d20553ea55c6baeac04e (patch) | |
tree | b331e188b2512682f3f99813b5bee358578d67d9 /drivers/net/usb/asix_devices.c | |
parent | 6001813966b55a2cfcc7704513daec4cc9ba96d6 (diff) | |
parent | 798b1d99db1361c312d2845990fe4c80751bd640 (diff) |
Merge 3.10.4-rt1 with linaro-no-preempt-rt
Diffstat (limited to 'drivers/net/usb/asix_devices.c')
-rw-r--r-- | drivers/net/usb/asix_devices.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c index ad5d1e4384db..defda0e64bde 100644 --- a/drivers/net/usb/asix_devices.c +++ b/drivers/net/usb/asix_devices.c @@ -44,6 +44,35 @@ struct ax88172_int_data { __le16 res3; } __packed; +static char asix_mac_addr[6]; +static int __init asix_setup_mac(char *macstr) +{ + int i, h, l; + + if (!macstr) + return 0; + + for (i = 0; i < 6; i++) { + if (i != 5 && *(macstr + 2) != ':') + return 0; + + h = hex_to_bin(*macstr++); + if (h == -1) + return 0; + + l = hex_to_bin(*macstr++); + if (l == -1) + return 0; + + macstr++; + asix_mac_addr[i] = (h << 4) + l; + } + + return 0; +} + +__setup("mac=", asix_setup_mac); + static void asix_status(struct usbnet *dev, struct urb *urb) { struct ax88172_int_data *event; @@ -62,6 +91,9 @@ static void asix_status(struct usbnet *dev, struct urb *urb) static void asix_set_netdev_dev_addr(struct usbnet *dev, u8 *addr) { + if (!is_valid_ether_addr(addr)) + memcpy(addr, asix_mac_addr, ETH_ALEN); + if (is_valid_ether_addr(addr)) { memcpy(dev->net->dev_addr, addr, ETH_ALEN); } else { |