Commit e5652756ff36ed9e1283121f788e6a17117efcab

Authored by Joe Perches
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

... ... @@ -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);