[U-Boot] [PATCH][Net] Convert SMC91111 Ethernet driver to CONFIG_NET_MULTI API
Mike Frysinger
vapier at gentoo.org
Tue Jul 28 02:10:12 CEST 2009
On Monday 27 July 2009 17:43:22 Ben Warren wrote:
> All in-tree boards that use this controller have CONFIG_NET_MULTI
> added
> Also:
> - changed CONFIG_DRIVER_SMC91111 to CONFIG_SMC91111
> - cleaned up line lengths
> - modified all boards that override weak function in this driver
> - modified all eeprom standalone apps to work with new driver
annoyingly, i dont have any of the boards with me, so my attached changes are
only compile tested for Blackfin boards.
- fix enetaddr handling
- scrub dead functions
- drop stub func indirection
- fix possible memleak in initialize func
- tweak Blackin board style
-mike
diff --git a/board/bf533-ezkit/bf533-ezkit.c b/board/bf533-ezkit/bf533-ezkit.c
index ff0e15e..8727dee 100644
--- a/board/bf533-ezkit/bf533-ezkit.c
+++ b/board/bf533-ezkit/bf533-ezkit.c
@@ -59,13 +59,9 @@ int misc_init_r(void)
return 0;
}
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/board/bf533-stamp/bf533-stamp.c b/board/bf533-stamp/bf533-stamp.c
index 32e7174..a226910 100644
--- a/board/bf533-stamp/bf533-stamp.c
+++ b/board/bf533-stamp/bf533-stamp.c
@@ -285,13 +285,9 @@ void __led_toggle(led_id_t mask)
#endif
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/board/bf538f-ezkit/bf538f-ezkit.c b/board/bf538f-ezkit/bf538f-ezkit.c
index 1897405..15916fa 100644
--- a/board/bf538f-ezkit/bf538f-ezkit.c
+++ b/board/bf538f-ezkit/bf538f-ezkit.c
@@ -27,13 +27,9 @@ phys_size_t initdram(int board_type)
return gd->bd->bi_memsize;
}
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/board/bf561-ezkit/bf561-ezkit.c b/board/bf561-ezkit/bf561-ezkit.c
index 24347e2..e5d7eb3 100644
--- a/board/bf561-ezkit/bf561-ezkit.c
+++ b/board/bf561-ezkit/bf561-ezkit.c
@@ -45,13 +45,9 @@ phys_size_t initdram(int board_type)
return gd->bd->bi_memsize;
}
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/board/blackstamp/blackstamp.c b/board/blackstamp/blackstamp.c
index 524c86c..f55ab97 100644
--- a/board/blackstamp/blackstamp.c
+++ b/board/blackstamp/blackstamp.c
@@ -46,13 +46,9 @@ void swap_to(int device_id)
}
#endif
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/board/cm-bf533/cm-bf533.c b/board/cm-bf533/cm-bf533.c
index 6598e27..ab0bf3b 100644
--- a/board/cm-bf533/cm-bf533.c
+++ b/board/cm-bf533/cm-bf533.c
@@ -25,13 +25,9 @@ phys_size_t initdram(int board_type)
return gd->bd->bi_memsize;
}
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/board/cm-bf561/cm-bf561.c b/board/cm-bf561/cm-bf561.c
index b204d7c..f21a015 100644
--- a/board/cm-bf561/cm-bf561.c
+++ b/board/cm-bf561/cm-bf561.c
@@ -25,13 +25,9 @@ phys_size_t initdram(int board_type)
return gd->bd->bi_memsize;
}
-#ifdef CONFIG_CMD_NET
+#ifdef CONFIG_SMC91111
int board_eth_init(bd_t *bis)
{
- int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
- return rc;
+ return smc91111_initialize(0, CONFIG_SMC91111_BASE);
}
#endif
diff --git a/drivers/net/smc91111.c b/drivers/net/smc91111.c
index 5974c4d..673b52d 100644
--- a/drivers/net/smc91111.c
+++ b/drivers/net/smc91111.c
@@ -123,7 +123,6 @@ static const char version[] =
. what you are doing.
.
-------------------------------------------------------------------------*/
-#define CARDNAME "LAN91C111"
/* Memory sizing constant */
#define LAN91C111_MEMORY_MULTIPLIER (1024*2)
@@ -147,33 +146,15 @@ static const char version[] =
#else
#undef USE_32_BIT
#endif
-/*-----------------------------------------------------------------
- .
- . The driver can be entered at any of the following entry points.
- .
- .------------------------------------------------------------------ */
#ifdef SHARED_RESOURCES
- extern void swap_to(int device_id);
+extern void swap_to(int device_id);
#endif
-/*
- . This is called by unregister_netdev(). It is responsible for
- . cleaning up before the driver is finally unregistered and discarded.
-*/
-void smc_destructor(void);
-
#ifndef CONFIG_SMC91111_EXT_PHY
static void smc_phy_configure(struct eth_device *dev);
#endif /* !CONFIG_SMC91111_EXT_PHY */
-/* See if a MAC address is defined in the current environment. If so use it.
- * If not, print a warning and set the environment and other globals with the
- * default. If an EEPROM is present it really should be consulted.
- */
-static int smc_get_ethaddr(struct eth_device *dev);
-static int get_rom_mac(struct eth_device *dev, uchar *v_rom_mac);
-
/*
------------------------------------------------------------
.
@@ -257,60 +238,6 @@ static inline void SMC_outsw(struct eth_device *dev, dword offset,
}
#endif /* CONFIG_SMC_USE_IOFUNCS */
-static char unsigned smc_mac_addr[6] = {0x02, 0x80, 0xad, 0x20, 0x31, 0xb8};
-
-/*
- * This function must be called before smc_open() if you want to override
- * the default mac address.
- */
-
-void smc_set_mac_addr(const unsigned char *addr) {
- int i;
-
- for (i=0; i < sizeof(smc_mac_addr); i++){
- smc_mac_addr[i] = addr[i];
- }
-}
-
-/*
- * smc_get_macaddr is no longer used. If you want to override the default
- * mac address, call smc_get_mac_addr as a part of the board initialization.
- */
-
-#if 0
-void smc_get_macaddr( byte *addr ) {
- /* MAC ADDRESS AT FLASHBLOCK 1 / OFFSET 0x10 */
- unsigned char *dnp1110_mac = (unsigned char *) (0xE8000000 + 0x20010);
- int i;
-
-
- for (i=0; i<6; i++) {
- addr[0] = *(dnp1110_mac+0);
- addr[1] = *(dnp1110_mac+1);
- addr[2] = *(dnp1110_mac+2);
- addr[3] = *(dnp1110_mac+3);
- addr[4] = *(dnp1110_mac+4);
- addr[5] = *(dnp1110_mac+5);
- }
-}
-#endif /* 0 */
-
-/***********************************************
- * Show available memory *
- ***********************************************/
-void dump_memory_info(struct eth_device *dev)
-{
- word mem_info;
- word old_bank;
-
- old_bank = SMC_inw(dev, BANK_SELECT)&0xF;
-
- SMC_SELECT_BANK(dev, 0);
- mem_info = SMC_inw( dev, MIR_REG );
- PRINTK2("Memory: %4d available\n", (mem_info >> 8)*2048);
-
- SMC_SELECT_BANK(dev, old_bank);
-}
/*
. A rather simple routine to print out a packet for debugging purposes.
*/
@@ -449,7 +376,7 @@ static void smc_enable(struct eth_device *dev)
}
/*
- . Function: smc_shutdown
+ . Function: smc_halt
. Purpose: closes down the SMC91xxx chip.
. Method:
. 1. zero the interrupt mask
@@ -462,9 +389,9 @@ static void smc_enable(struct eth_device *dev)
. the manual says that it will wake up in response to any I/O requests
. in the register space. Empirical results do not show this working.
*/
-static void smc_shutdown(struct eth_device *dev)
+static void smc_halt(struct eth_device *dev)
{
- PRINTK2(CARDNAME ": smc_shutdown\n");
+ PRINTK2("%s: smc_halt\n", SMC_DEV_NAME);
/* no more interrupts for me */
SMC_SELECT_BANK( dev, 2 );
@@ -481,7 +408,7 @@ static void smc_shutdown(struct eth_device *dev)
/*
- . Function: smc_hardware_send_packet(struct net_device * )
+ . Function: smc_send(struct net_device * )
. Purpose:
. This sends the actual packet to the SMC9xxx chip.
.
@@ -498,7 +425,7 @@ static void smc_shutdown(struct eth_device *dev)
. Enable the transmit interrupt, so I know if it failed
. Free the kernel data if I actually sent it.
*/
-static int smc_send_packet (struct eth_device *dev, volatile void *packet,
+static int smc_send(struct eth_device *dev, volatile void *packet,
int packet_length)
{
byte packet_no;
@@ -726,34 +653,21 @@ again:
return length;
}
-/*-------------------------------------------------------------------------
- |
- | smc_destructor( struct net_device * dev )
- | Input parameters:
- | dev, pointer to the device structure
- |
- | Output:
- | None.
- |
- ---------------------------------------------------------------------------
-*/
-void smc_destructor()
-{
- PRINTK2(CARDNAME ": smc_destructor\n");
-}
-
-
/*
* Open and Initialize the board
*
* Set up everything, reset the card, etc ..
*
*/
-static int smc_open (struct eth_device *dev)
+static int smc_init(struct eth_device *dev, bd_t *bd)
{
- int i, err;
+ int i;
- PRINTK2 ("%s: smc_open\n", SMC_DEV_NAME);
+#ifdef SHARED_RESOURCES
+ swap_to(ETHERNET);
+#endif
+
+ PRINTK2 ("%s: smc_init\n", SMC_DEV_NAME);
/* reset the hardware */
smc_reset (dev);
@@ -769,21 +683,17 @@ static int smc_open (struct eth_device *dev)
/* SMC_outw(dev, 0, RPC_REG); */
SMC_SELECT_BANK (dev, 1);
- /* set smc_mac_addr, and sync it with u-boot globals */
- err = smc_get_ethaddr (dev);
- if (err < 0)
- return -1;
#ifdef USE_32_BIT
for (i = 0; i < 6; i += 2) {
word address;
- address = smc_mac_addr[i + 1] << 8;
- address |= smc_mac_addr[i];
- SMC_outw (dev, address, (ADDR0_REG + i));
+ address = dev->enetaddr[i + 1] << 8;
+ address |= dev->enetaddr[i];
+ SMC_outw(dev, address, (ADDR0_REG + i));
}
#else
for (i = 0; i < 6; i++)
- SMC_outb (dev, smc_mac_addr[i], (ADDR0_REG + i));
+ SMC_outb(dev, dev->enetaddr[i], (ADDR0_REG + i));
#endif
return 0;
@@ -922,25 +832,6 @@ static int smc_rcv(struct eth_device *dev)
}
-/*----------------------------------------------------
- . smc_close
- .
- . this makes the board clean up everything that it can
- . and not talk to the outside world. Caused by
- . an 'ifconfig ethX down'
- .
- -----------------------------------------------------*/
-static int smc_close(struct eth_device *dev)
-{
- PRINTK2("%s: smc_close\n", SMC_DEV_NAME);
-
- /* clear everything */
- smc_shutdown(dev);
-
- return 0;
-}
-
-
#if 0
/*------------------------------------------------------------
. Modify a bit in the LAN91C111 register set
@@ -1453,91 +1344,33 @@ static void print_packet( byte * buf, int length )
}
#endif
-static int smc91111_init(struct eth_device *dev, bd_t *bd) {
-#ifdef SHARED_RESOURCES
- swap_to(ETHERNET);
-#endif
- return (smc_open(dev));
-}
-
-static void smc91111_halt(struct eth_device *dev) {
- smc_close(dev);
-}
-
-static int smc91111_rx(struct eth_device *dev) {
- return smc_rcv(dev);
-}
-
-static int smc91111_send(struct eth_device *dev, volatile void *packet,
- int length) {
- return smc_send_packet(dev, packet, length);
-}
-
-static int smc_get_ethaddr (struct eth_device *dev)
-{
- uchar v_mac[6];
- char env_parm_name[10]; /* Long enough for ethxxaddr */
- u8 dev_num = ((struct smc91111_priv *)(dev->priv))->dev_num;
-
- if (dev_num == 0)
- strncpy(env_parm_name, "ethaddr", 7);
- else
- sprintf(env_parm_name, "eth%huaddr", dev_num);
-
-
- if (!eth_getenv_enetaddr(env_parm_name, v_mac)) {
- /* get ROM mac value if any */
- if (!get_rom_mac(dev, v_mac)) {
- printf("\n*** ERROR: %s is NOT set !!\n", env_parm_name);
- return -1;
- }
- eth_setenv_enetaddr(env_parm_name, v_mac);
- }
-
- smc_set_mac_addr(v_mac); /* use old function to update smc default */
- PRINTK("Using MAC Address %pM\n", v_mac);
- return 0;
-}
-
-static int get_rom_mac (struct eth_device *dev, uchar *v_rom_mac)
+int smc91111_initialize(u8 dev_num, int base_addr)
{
-#ifdef HARDCODE_MAC /* used for testing or to supress run time warnings */
- char hw_mac_addr[] = { 0x02, 0x80, 0xad, 0x20, 0x31, 0xb8 };
-
- memcpy (v_rom_mac, hw_mac_addr, 6);
- return (1);
-#else
+ struct smc91111_priv *priv;
+ struct eth_device *dev;
int i;
- int valid_mac = 0;
-
- SMC_SELECT_BANK (dev, 1);
- for (i=0; i<6; i++)
- {
- v_rom_mac[i] = SMC_inb (dev, (ADDR0_REG + i));
- valid_mac |= v_rom_mac[i];
- }
-
- return (valid_mac ? 1 : 0);
-#endif
-
-}
-int smc91111_initialize(u8 dev_num, int base_addr)
-{
- struct smc91111_priv *priv = malloc(sizeof(struct smc91111_priv));
+ priv = malloc(sizeof(*priv));
if (!priv)
return 0;
- struct eth_device *dev = malloc(sizeof(struct eth_device));
- if (!dev)
+ dev = malloc(sizeof(*dev));
+ if (!dev) {
+ free(priv);
return 0;
+ }
+
priv->dev_num = dev_num;
dev->priv = priv;
dev->iobase = base_addr;
- dev->init = smc91111_init;
- dev->halt = smc91111_halt;
- dev->send = smc91111_send;
- dev->recv = smc91111_rx;
+ SMC_SELECT_BANK(dev, 1);
+ for (i = 0; i < 6; ++i)
+ dev->enetaddr[i] = SMC_inb(dev, (ADDR0_REG + i));
+
+ dev->init = smc_init;
+ dev->halt = smc_halt;
+ dev->send = smc_send;
+ dev->recv = smc_rcv;
sprintf(dev->name, "%s-%hu", SMC_DEV_NAME, dev_num);
eth_register(dev);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20090727/27dfcb49/attachment-0001.pgp
More information about the U-Boot
mailing list