uli526x: fix endianness issues in the setup frame

This patch fixes uli526x driver's issues on a PowerPC boards: uli chip
is unable to receive the packets.

It appears that send_frame_filter prepares the setup frame in the
endianness unsafe manner. On a big endian machines we should shift
the address nibble by two bytes.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>

authored by Anton Vorontsov and committed by Jeff Garzik e284e5c6 afd8e399

+18 -12
+18 -12
drivers/net/tulip/uli526x.c
··· 1368 1368 * This setup frame initialize ULI526X address filter mode 1369 1369 */ 1370 1370 1371 + #ifdef __BIG_ENDIAN 1372 + #define FLT_SHIFT 16 1373 + #else 1374 + #define FLT_SHIFT 0 1375 + #endif 1376 + 1371 1377 static void send_filter_frame(struct net_device *dev, int mc_cnt) 1372 1378 { 1373 1379 struct uli526x_board_info *db = netdev_priv(dev); ··· 1390 1384 1391 1385 /* Node address */ 1392 1386 addrptr = (u16 *) dev->dev_addr; 1393 - *suptr++ = addrptr[0]; 1394 - *suptr++ = addrptr[1]; 1395 - *suptr++ = addrptr[2]; 1387 + *suptr++ = addrptr[0] << FLT_SHIFT; 1388 + *suptr++ = addrptr[1] << FLT_SHIFT; 1389 + *suptr++ = addrptr[2] << FLT_SHIFT; 1396 1390 1397 1391 /* broadcast address */ 1398 - *suptr++ = 0xffff; 1399 - *suptr++ = 0xffff; 1400 - *suptr++ = 0xffff; 1392 + *suptr++ = 0xffff << FLT_SHIFT; 1393 + *suptr++ = 0xffff << FLT_SHIFT; 1394 + *suptr++ = 0xffff << FLT_SHIFT; 1401 1395 1402 1396 /* fit the multicast address */ 1403 1397 for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { 1404 1398 addrptr = (u16 *) mcptr->dmi_addr; 1405 - *suptr++ = addrptr[0]; 1406 - *suptr++ = addrptr[1]; 1407 - *suptr++ = addrptr[2]; 1399 + *suptr++ = addrptr[0] << FLT_SHIFT; 1400 + *suptr++ = addrptr[1] << FLT_SHIFT; 1401 + *suptr++ = addrptr[2] << FLT_SHIFT; 1408 1402 } 1409 1403 1410 1404 for (; i<14; i++) { 1411 - *suptr++ = 0xffff; 1412 - *suptr++ = 0xffff; 1413 - *suptr++ = 0xffff; 1405 + *suptr++ = 0xffff << FLT_SHIFT; 1406 + *suptr++ = 0xffff << FLT_SHIFT; 1407 + *suptr++ = 0xffff << FLT_SHIFT; 1414 1408 } 1415 1409 1416 1410 /* prepare the setup frame */