diff options
author | Tushar Behera <tushar.behera@linaro.org> | 2013-02-04 18:07:54 +0530 |
---|---|---|
committer | Tushar Behera <tushar.behera@linaro.org> | 2013-02-04 18:07:59 +0530 |
commit | da156b115a7912583324dbb0df34a6c0c20dc34f (patch) | |
tree | d74a14bcc51413cc3220d4677639e854b8fb039d | |
parent | 61e4df5d7917a3fb7d170ece75fb453e5f43e37e (diff) |
asix: Add support to read MAC address from cmdlinetracking-samslt-all-ll-20130211.0tracking-samslt-all-ll-20130208.0tracking-samslt-all-ll-20130206.0tracking-samslt-all-ll-20130205.0samsung-lt-v3.8-rc4-3
Inherited from arch/mips/rb532/devices.c
Example: bootargs="mac=00:40:5c:26:0a:5b"
Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
-rw-r--r-- | Documentation/kernel-parameters.txt | 4 | ||||
-rw-r--r-- | drivers/net/usb/asix_devices.c | 32 |
2 files changed, 36 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index c6ec1631d9c..2ae8a50c9ca 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -1468,6 +1468,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ltpc= [NET] Format: <io>,<irq>,<dma> + mac= [NET] + Used ASIX drivers. + Example: mac=12:34:56:78:ab:cd + machvec= [IA-64] Force the use of a particular machine-vector (machvec) in a generic kernel. Example: machvec=hpzx1_swiotlb diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c index 7a6e758f48e..89879ea1dc2 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; @@ -66,6 +95,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 { |