Convert DM9000 driver for CONFIG_NET_MULTI

All drivers need to be converted to CONFIG_NET_MULTI.
This patch converts the dm9000 driver.

Signed-off-by: Thomas Smits <ts.smits@gmail.com>
Signed-off-by: Remy Bohmer <linux@bohmer.net>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
This commit is contained in:
Remy Bohmer 2009-05-02 21:49:18 +02:00 committed by Ben Warren
parent 9131589ada
commit 60f61e6d76
10 changed files with 64 additions and 17 deletions

View file

@ -36,6 +36,7 @@
#include <atmel_lcdc.h> #include <atmel_lcdc.h>
#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_DRIVER_DM9000) #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_DRIVER_DM9000)
#include <net.h> #include <net.h>
#include <netdev.h>
#endif #endif
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -227,6 +228,12 @@ int board_init(void)
return 0; return 0;
} }
#ifdef CONFIG_DRIVER_DM9000
int board_eth_init(bd_t *bis)
{
return dm9000_initialize(bis);
}
#endif
int dram_init(void) int dram_init(void)
{ {
gd->bd->bi_dram[0].start = PHYS_SDRAM; gd->bd->bi_dram[0].start = PHYS_SDRAM;

View file

@ -26,6 +26,7 @@
#include <common.h> #include <common.h>
#include <asm/immap.h> #include <asm/immap.h>
#include <netdev.h>
int checkboard(void) int checkboard(void)
{ {
@ -138,3 +139,11 @@ void ide_set_reset(int idereset)
} }
} }
#endif /* CONFIG_CMD_IDE */ #endif /* CONFIG_CMD_IDE */
#ifdef CONFIG_DRIVER_DM9000
int board_eth_init(bd_t *bis)
{
return dm9000_initialize(bis);
}
#endif

View file

@ -19,6 +19,7 @@
*/ */
#include <common.h> #include <common.h>
#include <netdev.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -70,3 +71,10 @@ void show_boot_progress (int status)
{ {
return; return;
} }
#ifdef CONFIG_DRIVER_DM9000
int board_eth_init(bd_t *bis)
{
return dm9000_initialize(bis);
}
#endif

View file

@ -33,6 +33,7 @@
#include <common.h> #include <common.h>
#include <asm/arch/pxa-regs.h> #include <asm/arch/pxa-regs.h>
#include <netdev.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -144,3 +145,10 @@ int dram_init (void)
return 0; return 0;
} }
#ifdef CONFIG_DRIVER_DM9000
int board_eth_init(bd_t *bis)
{
return dm9000_initialize(bis);
}
#endif

View file

@ -103,14 +103,12 @@ typedef struct board_info {
void (*outblk)(volatile void *data_ptr, int count); void (*outblk)(volatile void *data_ptr, int count);
void (*inblk)(void *data_ptr, int count); void (*inblk)(void *data_ptr, int count);
void (*rx_status)(u16 *RxStatus, u16 *RxLen); void (*rx_status)(u16 *RxStatus, u16 *RxLen);
struct eth_device netdev;
} board_info_t; } board_info_t;
static board_info_t dm9000_info; static board_info_t dm9000_info;
/* function declaration ------------------------------------- */ /* 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 int dm9000_probe(void);
static u16 phy_read(int); static u16 phy_read(int);
static void phy_write(int, u16); static void phy_write(int, u16);
@ -279,17 +277,16 @@ dm9000_reset(void)
printf("ERROR: resetting DM9000 -> not responding\n"); printf("ERROR: resetting DM9000 -> not responding\n");
} }
/* Initilize dm9000 board /* Initialize dm9000 board
*/ */
int static int dm9000_init(struct eth_device *dev, bd_t *bd)
eth_init(bd_t * bd)
{ {
int i, oft, lnk; int i, oft, lnk;
u8 io_mode; u8 io_mode;
struct board_info *db = &dm9000_info; struct board_info *db = &dm9000_info;
uchar enetaddr[6]; uchar enetaddr[6];
DM9000_DBG("eth_init()\n"); DM9000_DBG("%s\n", __func__);
/* RESET device */ /* RESET device */
dm9000_reset(); dm9000_reset();
@ -411,13 +408,13 @@ eth_init(bd_t * bd)
Hardware start transmission. Hardware start transmission.
Send a packet to media from the upper layer. Send a packet to media from the upper layer.
*/ */
int static int dm9000_send(struct eth_device *netdev, volatile void *packet,
eth_send(volatile void *packet, int length) int length)
{ {
int tmo; int tmo;
struct board_info *db = &dm9000_info; 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 */ 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. Stop the interface.
The interface is stopped when it is brought. The interface is stopped when it is brought.
*/ */
void static void dm9000_halt(struct eth_device *netdev)
eth_halt(void)
{ {
DM9000_DBG("eth_halt\n"); DM9000_DBG("%s\n", __func__);
/* RESET devie */ /* RESET devie */
phy_write(0, 0x8000); /* PHY RESET */ phy_write(0, 0x8000); /* PHY RESET */
@ -468,8 +464,7 @@ eth_halt(void)
/* /*
Received a packet and pass to upper layer Received a packet and pass to upper layer
*/ */
int static int dm9000_rx(struct eth_device *netdev)
eth_rx(void)
{ {
u8 rxbyte, *rdptr = (u8 *) NetRxPackets[0]; u8 rxbyte, *rdptr = (u8 *) NetRxPackets[0];
u16 RxStatus, RxLen = 0; u16 RxStatus, RxLen = 0;
@ -529,7 +524,7 @@ eth_rx(void)
dm9000_reset(); dm9000_reset();
} }
} else { } else {
DM9000_DMP_PACKET("eth_rx", rdptr, RxLen); DM9000_DMP_PACKET(__func__ , rdptr, RxLen);
DM9000_DBG("passing packet to upper layer\n"); DM9000_DBG("passing packet to upper layer\n");
NetReceive(NetRxPackets[0], RxLen); NetReceive(NetRxPackets[0], RxLen);
@ -621,3 +616,18 @@ phy_write(int reg, u16 value)
DM9000_iow(DM9000_EPCR, 0x0); /* Clear phyxcer write command */ DM9000_iow(DM9000_EPCR, 0x0); /* Clear phyxcer write command */
DM9000_DBG("phy_write(reg:0x%x, value:0x%x)\n", reg, value); 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;
}

View file

@ -88,6 +88,7 @@
# define _IO_BASE 0 # define _IO_BASE 0
#endif #endif
#define CONFIG_NET_MULTI 1
#define CONFIG_DRIVER_DM9000 #define CONFIG_DRIVER_DM9000
#ifdef CONFIG_DRIVER_DM9000 #ifdef CONFIG_DRIVER_DM9000
# define CONFIG_DM9000_BASE (CONFIG_SYS_CS1_BASE | 0x300) # define CONFIG_DM9000_BASE (CONFIG_SYS_CS1_BASE | 0x300)

View file

@ -131,6 +131,7 @@
#define CONFIG_SYS_NO_FLASH 1 #define CONFIG_SYS_NO_FLASH 1
/* Ethernet */ /* Ethernet */
#define CONFIG_NET_MULTI 1
#define CONFIG_DRIVER_DM9000 1 #define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x30000000 #define CONFIG_DM9000_BASE 0x30000000
#define DM9000_IO CONFIG_DM9000_BASE #define DM9000_IO CONFIG_DM9000_BASE

View file

@ -255,6 +255,7 @@
#define CONFIG_SYS_CS5U_VAL 0x00008400 #define CONFIG_SYS_CS5U_VAL 0x00008400
#define CONFIG_SYS_CS5L_VAL 0x00000D03 #define CONFIG_SYS_CS5L_VAL 0x00000D03
#define CONFIG_NET_MULTI 1
#define CONFIG_DRIVER_DM9000 1 #define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x16000000 #define CONFIG_DM9000_BASE 0x16000000
#define DM9000_IO CONFIG_DM9000_BASE #define DM9000_IO CONFIG_DM9000_BASE

View file

@ -278,6 +278,7 @@
#define CONFIG_SYS_MCIO0_VAL 0x00008407 #define CONFIG_SYS_MCIO0_VAL 0x00008407
#define CONFIG_SYS_MCIO1_VAL 0x0000c108 #define CONFIG_SYS_MCIO1_VAL 0x0000c108
#define CONFIG_NET_MULTI 1
#define CONFIG_DRIVER_DM9000 1 #define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x08000000 #define CONFIG_DM9000_BASE 0x08000000
#define DM9000_IO CONFIG_DM9000_BASE #define DM9000_IO CONFIG_DM9000_BASE

View file

@ -75,6 +75,7 @@ int tsi108_eth_initialize(bd_t *bis);
int uec_initialize(int index); int uec_initialize(int index);
int uli526x_initialize(bd_t *bis); int uli526x_initialize(bd_t *bis);
int sh_eth_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() /* Boards with PCI network controllers can call this from their board_eth_init()
* function to initialize whatever's on board. * function to initialize whatever's on board.