Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rrunner: use offsetof() instead of homegrown insanity

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by

Al Viro and committed by
Jeff Garzik
cf962378 95e0918d

+25 -26
+24 -25
drivers/net/rrunner.c
··· 294 294 { 295 295 struct rr_private *rrpriv; 296 296 struct rr_regs __iomem *regs; 297 - struct eeprom *hw = NULL; 298 297 u32 start_pc; 299 298 int i; 300 299 ··· 380 381 writel(RBURST_64|WBURST_64, &regs->PciState); 381 382 wmb(); 382 383 383 - start_pc = rr_read_eeprom_word(rrpriv, &hw->rncd_info.FwStart); 384 + start_pc = rr_read_eeprom_word(rrpriv, 385 + offsetof(struct eeprom, rncd_info.FwStart)); 384 386 385 387 #if (DEBUG > 1) 386 388 printk("%s: Executing firmware at address 0x%06x\n", ··· 438 438 * it to our CPU byte-order. 439 439 */ 440 440 static u32 rr_read_eeprom_word(struct rr_private *rrpriv, 441 - void * offset) 441 + size_t offset) 442 442 { 443 - u32 word; 443 + __be32 word; 444 444 445 - if ((rr_read_eeprom(rrpriv, (unsigned long)offset, 446 - (char *)&word, 4) == 4)) 445 + if ((rr_read_eeprom(rrpriv, offset, 446 + (unsigned char *)&word, 4) == 4)) 447 447 return be32_to_cpu(word); 448 448 return 0; 449 449 } ··· 510 510 { 511 511 struct rr_private *rrpriv; 512 512 struct rr_regs __iomem *regs; 513 - struct eeprom *hw = NULL; 514 513 u32 sram_size, rev; 515 514 DECLARE_MAC_BUF(mac); 516 515 ··· 544 545 * other method I've seen. -VAL 545 546 */ 546 547 547 - *(u16 *)(dev->dev_addr) = 548 - htons(rr_read_eeprom_word(rrpriv, &hw->manf.BoardULA)); 549 - *(u32 *)(dev->dev_addr+2) = 550 - htonl(rr_read_eeprom_word(rrpriv, &hw->manf.BoardULA[4])); 548 + *(__be16 *)(dev->dev_addr) = 549 + htons(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA))); 550 + *(__be32 *)(dev->dev_addr+2) = 551 + htonl(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA[4]))); 551 552 552 553 printk(" MAC: %s\n", print_mac(mac, dev->dev_addr)); 553 554 554 - sram_size = rr_read_eeprom_word(rrpriv, (void *)8); 555 + sram_size = rr_read_eeprom_word(rrpriv, 8); 555 556 printk(" SRAM size 0x%06x\n", sram_size); 556 557 557 558 return 0; ··· 1476 1477 { 1477 1478 struct rr_private *rrpriv; 1478 1479 struct rr_regs __iomem *regs; 1479 - unsigned long eptr, segptr; 1480 + size_t eptr, segptr; 1480 1481 int i, j; 1481 1482 u32 localctrl, sptr, len, tmp; 1482 1483 u32 p2len, p2size, nr_seg, revision, io, sram_size; 1483 - struct eeprom *hw = NULL; 1484 1484 1485 1485 rrpriv = netdev_priv(dev); 1486 1486 regs = rrpriv->regs; ··· 1507 1509 */ 1508 1510 io = readl(&regs->ExtIo); 1509 1511 writel(0, &regs->ExtIo); 1510 - sram_size = rr_read_eeprom_word(rrpriv, (void *)8); 1512 + sram_size = rr_read_eeprom_word(rrpriv, 8); 1511 1513 1512 1514 for (i = 200; i < sram_size / 4; i++){ 1513 1515 writel(i * 4, &regs->WinBase); ··· 1518 1520 writel(io, &regs->ExtIo); 1519 1521 mb(); 1520 1522 1521 - eptr = (unsigned long)rr_read_eeprom_word(rrpriv, 1522 - &hw->rncd_info.AddrRunCodeSegs); 1523 + eptr = rr_read_eeprom_word(rrpriv, 1524 + offsetof(struct eeprom, rncd_info.AddrRunCodeSegs)); 1523 1525 eptr = ((eptr & 0x1fffff) >> 3); 1524 1526 1525 - p2len = rr_read_eeprom_word(rrpriv, (void *)(0x83*4)); 1527 + p2len = rr_read_eeprom_word(rrpriv, 0x83*4); 1526 1528 p2len = (p2len << 2); 1527 - p2size = rr_read_eeprom_word(rrpriv, (void *)(0x84*4)); 1529 + p2size = rr_read_eeprom_word(rrpriv, 0x84*4); 1528 1530 p2size = ((p2size & 0x1fffff) >> 3); 1529 1531 1530 1532 if ((eptr < p2size) || (eptr > (p2size + p2len))){ ··· 1532 1534 goto out; 1533 1535 } 1534 1536 1535 - revision = rr_read_eeprom_word(rrpriv, &hw->manf.HeaderFmt); 1537 + revision = rr_read_eeprom_word(rrpriv, 1538 + offsetof(struct eeprom, manf.HeaderFmt)); 1536 1539 1537 1540 if (revision != 1){ 1538 1541 printk("%s: invalid firmware format (%i)\n", ··· 1541 1542 goto out; 1542 1543 } 1543 1544 1544 - nr_seg = rr_read_eeprom_word(rrpriv, (void *)eptr); 1545 + nr_seg = rr_read_eeprom_word(rrpriv, eptr); 1545 1546 eptr +=4; 1546 1547 #if (DEBUG > 1) 1547 1548 printk("%s: nr_seg %i\n", dev->name, nr_seg); 1548 1549 #endif 1549 1550 1550 1551 for (i = 0; i < nr_seg; i++){ 1551 - sptr = rr_read_eeprom_word(rrpriv, (void *)eptr); 1552 + sptr = rr_read_eeprom_word(rrpriv, eptr); 1552 1553 eptr += 4; 1553 - len = rr_read_eeprom_word(rrpriv, (void *)eptr); 1554 + len = rr_read_eeprom_word(rrpriv, eptr); 1554 1555 eptr += 4; 1555 - segptr = (unsigned long)rr_read_eeprom_word(rrpriv, (void *)eptr); 1556 + segptr = rr_read_eeprom_word(rrpriv, eptr); 1556 1557 segptr = ((segptr & 0x1fffff) >> 3); 1557 1558 eptr += 4; 1558 1559 #if (DEBUG > 1) ··· 1560 1561 dev->name, i, sptr, len, segptr); 1561 1562 #endif 1562 1563 for (j = 0; j < len; j++){ 1563 - tmp = rr_read_eeprom_word(rrpriv, (void *)segptr); 1564 + tmp = rr_read_eeprom_word(rrpriv, segptr); 1564 1565 writel(sptr, &regs->WinBase); 1565 1566 mb(); 1566 1567 writel(tmp, &regs->WinData);
+1 -1
drivers/net/rrunner.h
··· 838 838 unsigned long offset, 839 839 unsigned char *buf, 840 840 unsigned long length); 841 - static u32 rr_read_eeprom_word(struct rr_private *rrpriv, void * offset); 841 + static u32 rr_read_eeprom_word(struct rr_private *rrpriv, size_t offset); 842 842 static int rr_load_firmware(struct net_device *dev); 843 843 static inline void rr_raz_tx(struct rr_private *, struct net_device *); 844 844 static inline void rr_raz_rx(struct rr_private *, struct net_device *);