|
@@ -28,40 +28,50 @@
|
|
|
#include <net.h>
|
|
|
#include "../drivers/net/smc91111.h"
|
|
|
|
|
|
-static u16 read_eeprom_reg(struct eth_device *dev, u16 reg)
|
|
|
+static struct eth_device dev = {
|
|
|
+ .iobase = CONFIG_SMC91111_BASE
|
|
|
+};
|
|
|
+
|
|
|
+static u16 read_eeprom_reg(u16 reg)
|
|
|
{
|
|
|
int timeout;
|
|
|
|
|
|
- SMC_SELECT_BANK(dev, 2);
|
|
|
- SMC_outw(dev, reg, PTR_REG);
|
|
|
+ SMC_SELECT_BANK(&dev, 2);
|
|
|
+ SMC_outw(&dev, reg, PTR_REG);
|
|
|
+
|
|
|
+ SMC_SELECT_BANK(&dev, 1);
|
|
|
+ SMC_outw(&dev, SMC_inw(&dev, CTL_REG) | CTL_EEPROM_SELECT |
|
|
|
+ CTL_RELOAD, CTL_REG);
|
|
|
|
|
|
- SMC_SELECT_BANK(dev, 1);
|
|
|
- SMC_outw(dev, SMC_inw (dev, CTL_REG) | CTL_EEPROM_SELECT | CTL_RELOAD,
|
|
|
- CTL_REG);
|
|
|
timeout = 100;
|
|
|
- while((SMC_inw (dev, CTL_REG) & CTL_RELOAD) && --timeout)
|
|
|
+
|
|
|
+ while ((SMC_inw(&dev, CTL_REG) & CTL_RELOAD) && --timeout)
|
|
|
udelay(100);
|
|
|
if (timeout == 0) {
|
|
|
printf("Timeout Reading EEPROM register %02x\n", reg);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- return SMC_inw (dev, GP_REG);
|
|
|
+ return SMC_inw(&dev, GP_REG);
|
|
|
}
|
|
|
|
|
|
-static int write_eeprom_reg(struct eth_device *dev, u16 value, u16 reg)
|
|
|
+static int write_eeprom_reg(u16 value, u16 reg)
|
|
|
{
|
|
|
int timeout;
|
|
|
|
|
|
- SMC_SELECT_BANK(dev, 2);
|
|
|
- SMC_outw(dev, reg, PTR_REG);
|
|
|
+ SMC_SELECT_BANK(&dev, 2);
|
|
|
+ SMC_outw(&dev, reg, PTR_REG);
|
|
|
+
|
|
|
+ SMC_SELECT_BANK(&dev, 1);
|
|
|
+
|
|
|
+ SMC_outw(&dev, value, GP_REG);
|
|
|
+ SMC_outw(&dev, SMC_inw(&dev, CTL_REG) | CTL_EEPROM_SELECT |
|
|
|
+ CTL_STORE, CTL_REG);
|
|
|
|
|
|
- SMC_SELECT_BANK(dev, 1);
|
|
|
- SMC_outw(dev, value, GP_REG);
|
|
|
- SMC_outw(dev, SMC_inw (dev, CTL_REG) | CTL_EEPROM_SELECT | CTL_STORE, CTL_REG);
|
|
|
timeout = 100;
|
|
|
- while ((SMC_inw(dev, CTL_REG) & CTL_STORE) && --timeout)
|
|
|
- udelay (100);
|
|
|
+
|
|
|
+ while ((SMC_inw(&dev, CTL_REG) & CTL_STORE) && --timeout)
|
|
|
+ udelay(100);
|
|
|
if (timeout == 0) {
|
|
|
printf("Timeout Writing EEPROM register %02x\n", reg);
|
|
|
return 0;
|
|
@@ -70,17 +80,17 @@ static int write_eeprom_reg(struct eth_device *dev, u16 value, u16 reg)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-static int write_data(struct eth_device *dev, u16 *buf, int len)
|
|
|
+static int write_data(u16 *buf, int len)
|
|
|
{
|
|
|
u16 reg = 0x23;
|
|
|
|
|
|
while (len--)
|
|
|
- write_eeprom_reg(dev, *buf++, reg++);
|
|
|
+ write_eeprom_reg(*buf++, reg++);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int verify_macaddr(struct eth_device *dev, char *s)
|
|
|
+static int verify_macaddr(char *s)
|
|
|
{
|
|
|
u16 reg;
|
|
|
int i, err = 0;
|
|
@@ -88,7 +98,7 @@ static int verify_macaddr(struct eth_device *dev, char *s)
|
|
|
printf("MAC Address: ");
|
|
|
err = i = 0;
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
- reg = read_eeprom_reg(dev, 0x20 + i);
|
|
|
+ reg = read_eeprom_reg(0x20 + i);
|
|
|
printf("%02x:%02x%c", reg & 0xff, reg >> 8, i != 2 ? ':' : '\n');
|
|
|
if (s)
|
|
|
err |= reg != ((u16 *)s)[i];
|
|
@@ -97,7 +107,7 @@ static int verify_macaddr(struct eth_device *dev, char *s)
|
|
|
return err ? 0 : 1;
|
|
|
}
|
|
|
|
|
|
-static int set_mac(struct eth_device *dev, char *s)
|
|
|
+static int set_mac(char *s)
|
|
|
{
|
|
|
int i;
|
|
|
char *e, eaddr[6];
|
|
@@ -109,7 +119,7 @@ static int set_mac(struct eth_device *dev, char *s)
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < 3; i++)
|
|
|
- write_eeprom_reg(dev, *(((u16 *)eaddr) + i), 0x20 + i);
|
|
|
+ write_eeprom_reg(*(((u16 *)eaddr) + i), 0x20 + i);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -145,10 +155,6 @@ int eeprom(int argc, char *argv[])
|
|
|
int i, len, ret;
|
|
|
unsigned char buf[58], *p;
|
|
|
|
|
|
- struct eth_device dev = {
|
|
|
- .iobase = CONFIG_SMC91111_BASE
|
|
|
- };
|
|
|
-
|
|
|
app_startup(argv);
|
|
|
if (get_version() != XF_VERSION) {
|
|
|
printf("Wrong XF_VERSION.\n");
|
|
@@ -157,14 +163,14 @@ int eeprom(int argc, char *argv[])
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
- if ((SMC_inw (&dev, BANK_SELECT) & 0xFF00) != 0x3300) {
|
|
|
+ if ((SMC_inw(&dev, BANK_SELECT) & 0xFF00) != 0x3300) {
|
|
|
printf("SMSC91111 not found.\n");
|
|
|
return 2;
|
|
|
}
|
|
|
|
|
|
/* Called without parameters - print MAC address */
|
|
|
if (argc < 2) {
|
|
|
- verify_macaddr(&dev, NULL);
|
|
|
+ verify_macaddr(NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -198,8 +204,8 @@ int eeprom(int argc, char *argv[])
|
|
|
}
|
|
|
|
|
|
/* First argument (MAC) is mandatory */
|
|
|
- set_mac(&dev, argv[1]);
|
|
|
- if (verify_macaddr(&dev, argv[1])) {
|
|
|
+ set_mac(argv[1]);
|
|
|
+ if (verify_macaddr(argv[1])) {
|
|
|
printf("*** MAC address does not match! ***\n");
|
|
|
return 4;
|
|
|
}
|
|
@@ -207,7 +213,7 @@ int eeprom(int argc, char *argv[])
|
|
|
while (len--)
|
|
|
*p++ = 0;
|
|
|
|
|
|
- write_data(&dev, (u16 *)buf, sizeof(buf) >> 1);
|
|
|
+ write_data((u16 *)buf, sizeof(buf) >> 1);
|
|
|
|
|
|
return 0;
|
|
|
}
|