|
@@ -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
|
|
|
|
-eth_init(bd_t * bd)
|
|
|
|
|
|
+static int dm9000_init(struct eth_device *dev, 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
|
|
|
|
-eth_send(volatile void *packet, int length)
|
|
|
|
|
|
+static int dm9000_send(struct eth_device *netdev, volatile void *packet,
|
|
|
|
+ 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
|
|
|
|
-eth_halt(void)
|
|
|
|
|
|
+static void dm9000_halt(struct eth_device *netdev)
|
|
{
|
|
{
|
|
- 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
|
|
|
|
-eth_rx(void)
|
|
|
|
|
|
+static int dm9000_rx(struct eth_device *netdev)
|
|
{
|
|
{
|
|
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;
|
|
|
|
+}
|