Commit e5652756ff36ed9e1283121f788e6a17117efcab
Committed by
John W. Linville
1 parent
8524982847
ssb: pci: Standardize a function to get mac address
Don't require alignment of mac addresses to u16. Signed-off-by: Joe Perches <joe@perches.com> Tested-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Showing 1 changed file with 18 additions and 26 deletions Side-by-side Diff
drivers/ssb/pci.c
... | ... | @@ -231,6 +231,15 @@ |
231 | 231 | return t[crc ^ data]; |
232 | 232 | } |
233 | 233 | |
234 | +static void sprom_get_mac(char *mac, const u16 *in) | |
235 | +{ | |
236 | + int i; | |
237 | + for (i = 0; i < 3; i++) { | |
238 | + *mac++ = in[i]; | |
239 | + *mac++ = in[i] >> 8; | |
240 | + } | |
241 | +} | |
242 | + | |
234 | 243 | static u8 ssb_sprom_crc(const u16 *sprom, u16 size) |
235 | 244 | { |
236 | 245 | int word; |
... | ... | @@ -341,8 +350,6 @@ |
341 | 350 | |
342 | 351 | static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in) |
343 | 352 | { |
344 | - int i; | |
345 | - u16 v; | |
346 | 353 | u16 loc[3]; |
347 | 354 | |
348 | 355 | if (out->revision == 3) /* rev 3 moved MAC */ |
349 | 356 | |
... | ... | @@ -352,19 +359,10 @@ |
352 | 359 | loc[1] = SSB_SPROM1_ET0MAC; |
353 | 360 | loc[2] = SSB_SPROM1_ET1MAC; |
354 | 361 | } |
355 | - for (i = 0; i < 3; i++) { | |
356 | - v = in[SPOFF(loc[0]) + i]; | |
357 | - *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v); | |
358 | - } | |
362 | + sprom_get_mac(out->il0mac, &in[SPOFF(loc[0])]); | |
359 | 363 | if (out->revision < 3) { /* only rev 1-2 have et0, et1 */ |
360 | - for (i = 0; i < 3; i++) { | |
361 | - v = in[SPOFF(loc[1]) + i]; | |
362 | - *(((__be16 *)out->et0mac) + i) = cpu_to_be16(v); | |
363 | - } | |
364 | - for (i = 0; i < 3; i++) { | |
365 | - v = in[SPOFF(loc[2]) + i]; | |
366 | - *(((__be16 *)out->et1mac) + i) = cpu_to_be16(v); | |
367 | - } | |
364 | + sprom_get_mac(out->et0mac, &in[SPOFF(loc[1])]); | |
365 | + sprom_get_mac(out->et1mac, &in[SPOFF(loc[2])]); | |
368 | 366 | } |
369 | 367 | SPEX(et0phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0A, 0); |
370 | 368 | SPEX(et1phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1A, |
371 | 369 | |
... | ... | @@ -454,19 +452,15 @@ |
454 | 452 | |
455 | 453 | static void sprom_extract_r45(struct ssb_sprom *out, const u16 *in) |
456 | 454 | { |
457 | - int i; | |
458 | - u16 v; | |
459 | 455 | u16 il0mac_offset; |
460 | 456 | |
461 | 457 | if (out->revision == 4) |
462 | 458 | il0mac_offset = SSB_SPROM4_IL0MAC; |
463 | 459 | else |
464 | 460 | il0mac_offset = SSB_SPROM5_IL0MAC; |
465 | - /* extract the MAC address */ | |
466 | - for (i = 0; i < 3; i++) { | |
467 | - v = in[SPOFF(il0mac_offset) + i]; | |
468 | - *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v); | |
469 | - } | |
461 | + | |
462 | + sprom_get_mac(out->il0mac, &in[SPOFF(il0mac_offset)]); | |
463 | + | |
470 | 464 | SPEX(et0phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET0A, 0); |
471 | 465 | SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A, |
472 | 466 | SSB_SPROM4_ETHPHY_ET1A_SHIFT); |
... | ... | @@ -530,7 +524,7 @@ |
530 | 524 | static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) |
531 | 525 | { |
532 | 526 | int i; |
533 | - u16 v, o; | |
527 | + u16 o; | |
534 | 528 | u16 pwr_info_offset[] = { |
535 | 529 | SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, |
536 | 530 | SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 |
... | ... | @@ -539,10 +533,8 @@ |
539 | 533 | ARRAY_SIZE(out->core_pwr_info)); |
540 | 534 | |
541 | 535 | /* extract the MAC address */ |
542 | - for (i = 0; i < 3; i++) { | |
543 | - v = in[SPOFF(SSB_SPROM8_IL0MAC) + i]; | |
544 | - *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v); | |
545 | - } | |
536 | + sprom_get_mac(out->il0mac, &in[SPOFF(SSB_SPROM8_IL0MAC)]); | |
537 | + | |
546 | 538 | SPEX(board_rev, SSB_SPROM8_BOARDREV, 0xFFFF, 0); |
547 | 539 | SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8); |
548 | 540 | SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0); |