MIPS: AR7: rewrite of cpmac_get_mac()
PATCH 1/1 MIPS: AR7: rewrite of cpmac_get_mac()
Shamelessly stealing wisdom from pasemi_mac.c, I found char2hex() could be replaced with a single call to sscanf(), looks cleaner to me at least. The result is 100 bytes trimmed off the size of a compiled cpmac_get_mac() and as an extra bonus it grumbles and gracefully fails over to using random_ether_addr() when an attempt to parse an invalid MAC address is made.
Signed-off-by Alexander Clouter <[email protected]>
--- arch/mips/ar7/platform.c | 42 +++++++++++++++--------------------------- 1 files changed, 15 insertions(+), 27 deletions(-)
arch/mips/ar7/platform.c +15 -27
@@ -292,40 +292,28 @@ static struct platform_device cpmac_high = { .num_resources = ARRAY_SIZE(cpmac_high_res), }; -static inline unsigned char char2hex (char h) +static void __init cpmac_get_mac (int instance,unsigned char *dev_addr) { -switch (h) { -case '0' :case '1' :case '2' :case '3' :case '4' : -case '5' :case '6' :case '7' :case '8' :case '9' : -return h -'0' ; -case 'A' :case 'B' :case 'C' :case 'D' :case 'E' :case 'F' : -return h -'A' +10 ; -case 'a' :case 'b' :case 'c' :case 'd' :case 'e' :case 'f' : -return h -'a' +10 ; -default : -return 0 ; - } -} - -static void cpmac_get_mac (int instance,unsigned char *dev_addr) -{ -int i; -char name[5 ], default_mac[ETH_ALEN ], *mac; +char name[5 ], *mac; - mac =NULL ;sprintf (name,"mac%c" ,'a' + instance); mac =prom_getenv (name); -if (!mac) { +if (!mac && instance) {sprintf (name,"mac%c" ,'a' ); mac =prom_getenv (name); } -if (!mac) { -random_ether_addr (default_mac); - mac = default_mac; - } -for (i =0 ; i <6 ; i++) - dev_addr[i] = (char2hex (mac[i *3 ]) <<4 ) + -char2hex (mac[i *3 +1 ]); + +if (mac) { +if (sscanf (mac,"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx" , + &dev_addr[0 ], &dev_addr[1 ], + &dev_addr[2 ], &dev_addr[3 ], + &dev_addr[4 ], &dev_addr[5 ]) !=6 ) { +pr_warning ("cannot parse mac address, " +"using random address\n" ); +random_ether_addr (dev_addr); + } + }else +random_ether_addr (dev_addr); }/*****************************************************************************
Signature · 1 line
1.7.1
Thanks, queued for 2.6.36.
Ralf