diff options
| -rw-r--r-- | board/atmel/at91sam9261ek/at91sam9261ek.c | 7 | ||||
| -rw-r--r-- | board/freescale/m5253demo/m5253demo.c | 9 | ||||
| -rw-r--r-- | board/scb9328/scb9328.c | 8 | ||||
| -rw-r--r-- | board/trizepsiv/conxs.c | 8 | ||||
| -rw-r--r-- | drivers/net/dm9000x.c | 44 | ||||
| -rw-r--r-- | include/configs/M5253DEMO.h | 1 | ||||
| -rw-r--r-- | include/configs/at91sam9261ek.h | 1 | ||||
| -rw-r--r-- | include/configs/scb9328.h | 1 | ||||
| -rw-r--r-- | include/configs/trizepsiv.h | 1 | ||||
| -rw-r--r-- | include/netdev.h | 1 | 
10 files changed, 64 insertions, 17 deletions
| diff --git a/board/atmel/at91sam9261ek/at91sam9261ek.c b/board/atmel/at91sam9261ek/at91sam9261ek.c index a89cb8bf2..0817e6015 100644 --- a/board/atmel/at91sam9261ek/at91sam9261ek.c +++ b/board/atmel/at91sam9261ek/at91sam9261ek.c @@ -36,6 +36,7 @@  #include <atmel_lcdc.h>  #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_DRIVER_DM9000)  #include <net.h> +#include <netdev.h>  #endif  DECLARE_GLOBAL_DATA_PTR; @@ -227,6 +228,12 @@ int board_init(void)  	return 0;  } +#ifdef CONFIG_DRIVER_DM9000 + int board_eth_init(bd_t *bis) + { +	return dm9000_initialize(bis); + } + #endif  int dram_init(void)  {  	gd->bd->bi_dram[0].start = PHYS_SDRAM; diff --git a/board/freescale/m5253demo/m5253demo.c b/board/freescale/m5253demo/m5253demo.c index b39cd4d7a..4772074d8 100644 --- a/board/freescale/m5253demo/m5253demo.c +++ b/board/freescale/m5253demo/m5253demo.c @@ -26,6 +26,7 @@  #include <common.h>  #include <asm/immap.h> +#include <netdev.h>  int checkboard(void)  { @@ -138,3 +139,11 @@ void ide_set_reset(int idereset)  	}  }  #endif				/* CONFIG_CMD_IDE */ + + +#ifdef CONFIG_DRIVER_DM9000 +int board_eth_init(bd_t *bis) +{ +	return dm9000_initialize(bis); +} +#endif diff --git a/board/scb9328/scb9328.c b/board/scb9328/scb9328.c index 3f6831be5..428e8c9e1 100644 --- a/board/scb9328/scb9328.c +++ b/board/scb9328/scb9328.c @@ -19,6 +19,7 @@   */  #include <common.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -70,3 +71,10 @@ void show_boot_progress (int status)  {  	return;  } + +#ifdef CONFIG_DRIVER_DM9000 +int board_eth_init(bd_t *bis) +{ +	return dm9000_initialize(bis); +} +#endif diff --git a/board/trizepsiv/conxs.c b/board/trizepsiv/conxs.c index 7c6c85500..5c0eb41d4 100644 --- a/board/trizepsiv/conxs.c +++ b/board/trizepsiv/conxs.c @@ -33,6 +33,7 @@  #include <common.h>  #include <asm/arch/pxa-regs.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -144,3 +145,10 @@ int dram_init (void)  	return 0;  } + +#ifdef CONFIG_DRIVER_DM9000 +int board_eth_init(bd_t *bis) +{ +	return dm9000_initialize(bis); +} +#endif diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c index f1394354e..efe913589 100644 --- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -103,14 +103,12 @@ typedef struct board_info {  	void (*outblk)(volatile void *data_ptr, int count);  	void (*inblk)(void *data_ptr, int count);  	void (*rx_status)(u16 *RxStatus, u16 *RxLen); +	struct eth_device netdev;  } board_info_t;  static board_info_t dm9000_info; +  /* function declaration ------------------------------------- */ -int eth_init(bd_t * bd); -int eth_send(volatile void *, int); -int eth_rx(void); -void eth_halt(void);  static int dm9000_probe(void);  static u16 phy_read(int);  static void phy_write(int, u16); @@ -279,17 +277,16 @@ dm9000_reset(void)  		printf("ERROR: resetting DM9000 -> not responding\n");  } -/* Initilize dm9000 board +/* Initialize dm9000 board  */ -int -eth_init(bd_t * bd) +static int dm9000_init(struct eth_device *dev, bd_t *bd)  {  	int i, oft, lnk;  	u8 io_mode;  	struct board_info *db = &dm9000_info;  	uchar enetaddr[6]; -	DM9000_DBG("eth_init()\n"); +	DM9000_DBG("%s\n", __func__);  	/* RESET device */  	dm9000_reset(); @@ -411,13 +408,13 @@ eth_init(bd_t * bd)    Hardware start transmission.    Send a packet to media from the upper layer.  */ -int -eth_send(volatile void *packet, int length) +static int dm9000_send(struct eth_device *netdev, volatile void *packet, +		     int length)  {  	int tmo;  	struct board_info *db = &dm9000_info; -	DM9000_DMP_PACKET("eth_send", packet, length); +	DM9000_DMP_PACKET(__func__ , packet, length);  	DM9000_iow(DM9000_ISR, IMR_PTM); /* Clear Tx bit in ISR */ @@ -453,10 +450,9 @@ eth_send(volatile void *packet, int length)    Stop the interface.    The interface is stopped when it is brought.  */ -void -eth_halt(void) +static void dm9000_halt(struct eth_device *netdev)  { -	DM9000_DBG("eth_halt\n"); +	DM9000_DBG("%s\n", __func__);  	/* RESET devie */  	phy_write(0, 0x8000);	/* PHY RESET */ @@ -468,8 +464,7 @@ eth_halt(void)  /*    Received a packet and pass to upper layer  */ -int -eth_rx(void) +static int dm9000_rx(struct eth_device *netdev)  {  	u8 rxbyte, *rdptr = (u8 *) NetRxPackets[0];  	u16 RxStatus, RxLen = 0; @@ -529,7 +524,7 @@ eth_rx(void)  				dm9000_reset();  			}  		} else { -			DM9000_DMP_PACKET("eth_rx", rdptr, RxLen); +			DM9000_DMP_PACKET(__func__ , rdptr, RxLen);  			DM9000_DBG("passing packet to upper layer\n");  			NetReceive(NetRxPackets[0], RxLen); @@ -621,3 +616,18 @@ phy_write(int reg, u16 value)  	DM9000_iow(DM9000_EPCR, 0x0);	/* Clear phyxcer write command */  	DM9000_DBG("phy_write(reg:0x%x, value:0x%x)\n", reg, value);  } + +int dm9000_initialize(bd_t *bis) +{ +	struct eth_device *dev = &(dm9000_info.netdev); + +	dev->init = dm9000_init; +	dev->halt = dm9000_halt; +	dev->send = dm9000_send; +	dev->recv = dm9000_rx; +	sprintf(dev->name, "dm9000"); + +	eth_register(dev); + +	return 0; +} diff --git a/include/configs/M5253DEMO.h b/include/configs/M5253DEMO.h index 1fea6c36a..50b3a03a0 100644 --- a/include/configs/M5253DEMO.h +++ b/include/configs/M5253DEMO.h @@ -88,6 +88,7 @@  #	define _IO_BASE			0  #endif +#define CONFIG_NET_MULTI		1  #define CONFIG_DRIVER_DM9000  #ifdef CONFIG_DRIVER_DM9000  #	define CONFIG_DM9000_BASE	(CONFIG_SYS_CS1_BASE | 0x300) diff --git a/include/configs/at91sam9261ek.h b/include/configs/at91sam9261ek.h index 4f6b64011..83e05b343 100644 --- a/include/configs/at91sam9261ek.h +++ b/include/configs/at91sam9261ek.h @@ -131,6 +131,7 @@  #define CONFIG_SYS_NO_FLASH			1  /* Ethernet */ +#define CONFIG_NET_MULTI		1  #define CONFIG_DRIVER_DM9000		1  #define CONFIG_DM9000_BASE		0x30000000  #define DM9000_IO			CONFIG_DM9000_BASE diff --git a/include/configs/scb9328.h b/include/configs/scb9328.h index 893c3d3c2..555671464 100644 --- a/include/configs/scb9328.h +++ b/include/configs/scb9328.h @@ -255,6 +255,7 @@  #define CONFIG_SYS_CS5U_VAL 0x00008400  #define CONFIG_SYS_CS5L_VAL 0x00000D03 +#define CONFIG_NET_MULTI		1  #define CONFIG_DRIVER_DM9000		1  #define CONFIG_DM9000_BASE		0x16000000  #define DM9000_IO			CONFIG_DM9000_BASE diff --git a/include/configs/trizepsiv.h b/include/configs/trizepsiv.h index 49045fd06..bfa715721 100644 --- a/include/configs/trizepsiv.h +++ b/include/configs/trizepsiv.h @@ -278,6 +278,7 @@  #define CONFIG_SYS_MCIO0_VAL		0x00008407  #define CONFIG_SYS_MCIO1_VAL		0x0000c108 +#define CONFIG_NET_MULTI		1  #define CONFIG_DRIVER_DM9000		1  #define CONFIG_DM9000_BASE	0x08000000  #define DM9000_IO			CONFIG_DM9000_BASE diff --git a/include/netdev.h b/include/netdev.h index 55710705f..aed5c4cce 100644 --- a/include/netdev.h +++ b/include/netdev.h @@ -75,6 +75,7 @@ int tsi108_eth_initialize(bd_t *bis);  int uec_initialize(int index);  int uli526x_initialize(bd_t *bis);  int sh_eth_initialize(bd_t *bis); +int dm9000_initialize(bd_t *bis);  /* Boards with PCI network controllers can call this from their board_eth_init()   * function to initialize whatever's on board. |