Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 75171
b: refs/heads/master
c: cf96237
h: refs/heads/master
i:
  75169: 0693890
  75167: 31ec2cb
v: v3
  • Loading branch information
Al Viro authored and Jeff Garzik committed Dec 23, 2007
1 parent 9719e67 commit c81ff4d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 95e0918dbb6d83020ef3eb0a4276413264abd14d
refs/heads/master: cf96237837ec6d4fc48bc2f735c71027cc0fc5fa
49 changes: 24 additions & 25 deletions trunk/drivers/net/rrunner.c
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,6 @@ static int rr_reset(struct net_device *dev)
{
struct rr_private *rrpriv;
struct rr_regs __iomem *regs;
struct eeprom *hw = NULL;
u32 start_pc;
int i;

Expand Down Expand Up @@ -381,7 +380,8 @@ static int rr_reset(struct net_device *dev)
writel(RBURST_64|WBURST_64, &regs->PciState);
wmb();

start_pc = rr_read_eeprom_word(rrpriv, &hw->rncd_info.FwStart);
start_pc = rr_read_eeprom_word(rrpriv,
offsetof(struct eeprom, rncd_info.FwStart));

#if (DEBUG > 1)
printk("%s: Executing firmware at address 0x%06x\n",
Expand Down Expand Up @@ -438,12 +438,12 @@ static unsigned int rr_read_eeprom(struct rr_private *rrpriv,
* it to our CPU byte-order.
*/
static u32 rr_read_eeprom_word(struct rr_private *rrpriv,
void * offset)
size_t offset)
{
u32 word;
__be32 word;

if ((rr_read_eeprom(rrpriv, (unsigned long)offset,
(char *)&word, 4) == 4))
if ((rr_read_eeprom(rrpriv, offset,
(unsigned char *)&word, 4) == 4))
return be32_to_cpu(word);
return 0;
}
Expand Down Expand Up @@ -510,7 +510,6 @@ static int __devinit rr_init(struct net_device *dev)
{
struct rr_private *rrpriv;
struct rr_regs __iomem *regs;
struct eeprom *hw = NULL;
u32 sram_size, rev;
DECLARE_MAC_BUF(mac);

Expand Down Expand Up @@ -545,14 +544,14 @@ static int __devinit rr_init(struct net_device *dev)
* other method I've seen. -VAL
*/

*(u16 *)(dev->dev_addr) =
htons(rr_read_eeprom_word(rrpriv, &hw->manf.BoardULA));
*(u32 *)(dev->dev_addr+2) =
htonl(rr_read_eeprom_word(rrpriv, &hw->manf.BoardULA[4]));
*(__be16 *)(dev->dev_addr) =
htons(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA)));
*(__be32 *)(dev->dev_addr+2) =
htonl(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA[4])));

printk(" MAC: %s\n", print_mac(mac, dev->dev_addr));

sram_size = rr_read_eeprom_word(rrpriv, (void *)8);
sram_size = rr_read_eeprom_word(rrpriv, 8);
printk(" SRAM size 0x%06x\n", sram_size);

return 0;
Expand Down Expand Up @@ -1477,11 +1476,10 @@ static int rr_load_firmware(struct net_device *dev)
{
struct rr_private *rrpriv;
struct rr_regs __iomem *regs;
unsigned long eptr, segptr;
size_t eptr, segptr;
int i, j;
u32 localctrl, sptr, len, tmp;
u32 p2len, p2size, nr_seg, revision, io, sram_size;
struct eeprom *hw = NULL;

rrpriv = netdev_priv(dev);
regs = rrpriv->regs;
Expand Down Expand Up @@ -1509,7 +1507,7 @@ static int rr_load_firmware(struct net_device *dev)
*/
io = readl(&regs->ExtIo);
writel(0, &regs->ExtIo);
sram_size = rr_read_eeprom_word(rrpriv, (void *)8);
sram_size = rr_read_eeprom_word(rrpriv, 8);

for (i = 200; i < sram_size / 4; i++){
writel(i * 4, &regs->WinBase);
Expand All @@ -1520,48 +1518,49 @@ static int rr_load_firmware(struct net_device *dev)
writel(io, &regs->ExtIo);
mb();

eptr = (unsigned long)rr_read_eeprom_word(rrpriv,
&hw->rncd_info.AddrRunCodeSegs);
eptr = rr_read_eeprom_word(rrpriv,
offsetof(struct eeprom, rncd_info.AddrRunCodeSegs));
eptr = ((eptr & 0x1fffff) >> 3);

p2len = rr_read_eeprom_word(rrpriv, (void *)(0x83*4));
p2len = rr_read_eeprom_word(rrpriv, 0x83*4);
p2len = (p2len << 2);
p2size = rr_read_eeprom_word(rrpriv, (void *)(0x84*4));
p2size = rr_read_eeprom_word(rrpriv, 0x84*4);
p2size = ((p2size & 0x1fffff) >> 3);

if ((eptr < p2size) || (eptr > (p2size + p2len))){
printk("%s: eptr is invalid\n", dev->name);
goto out;
}

revision = rr_read_eeprom_word(rrpriv, &hw->manf.HeaderFmt);
revision = rr_read_eeprom_word(rrpriv,
offsetof(struct eeprom, manf.HeaderFmt));

if (revision != 1){
printk("%s: invalid firmware format (%i)\n",
dev->name, revision);
goto out;
}

nr_seg = rr_read_eeprom_word(rrpriv, (void *)eptr);
nr_seg = rr_read_eeprom_word(rrpriv, eptr);
eptr +=4;
#if (DEBUG > 1)
printk("%s: nr_seg %i\n", dev->name, nr_seg);
#endif

for (i = 0; i < nr_seg; i++){
sptr = rr_read_eeprom_word(rrpriv, (void *)eptr);
sptr = rr_read_eeprom_word(rrpriv, eptr);
eptr += 4;
len = rr_read_eeprom_word(rrpriv, (void *)eptr);
len = rr_read_eeprom_word(rrpriv, eptr);
eptr += 4;
segptr = (unsigned long)rr_read_eeprom_word(rrpriv, (void *)eptr);
segptr = rr_read_eeprom_word(rrpriv, eptr);
segptr = ((segptr & 0x1fffff) >> 3);
eptr += 4;
#if (DEBUG > 1)
printk("%s: segment %i, sram address %06x, length %04x, segptr %06x\n",
dev->name, i, sptr, len, segptr);
#endif
for (j = 0; j < len; j++){
tmp = rr_read_eeprom_word(rrpriv, (void *)segptr);
tmp = rr_read_eeprom_word(rrpriv, segptr);
writel(sptr, &regs->WinBase);
mb();
writel(tmp, &regs->WinData);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/rrunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,7 @@ static unsigned int rr_read_eeprom(struct rr_private *rrpriv,
unsigned long offset,
unsigned char *buf,
unsigned long length);
static u32 rr_read_eeprom_word(struct rr_private *rrpriv, void * offset);
static u32 rr_read_eeprom_word(struct rr_private *rrpriv, size_t offset);
static int rr_load_firmware(struct net_device *dev);
static inline void rr_raz_tx(struct rr_private *, struct net_device *);
static inline void rr_raz_rx(struct rr_private *, struct net_device *);
Expand Down

0 comments on commit c81ff4d

Please sign in to comment.