提交 02c2c51c 编写于 作者: T Tom Rini

Merge branch 'master' of git://git.denx.de/u-boot-net

...@@ -474,7 +474,9 @@ ulong bootm_disable_interrupts(void) ...@@ -474,7 +474,9 @@ ulong bootm_disable_interrupts(void)
#ifdef CONFIG_NETCONSOLE #ifdef CONFIG_NETCONSOLE
/* Stop the ethernet stack if NetConsole could have left it up */ /* Stop the ethernet stack if NetConsole could have left it up */
eth_halt(); eth_halt();
# ifndef CONFIG_DM_ETH
eth_unregister(eth_get_dev()); eth_unregister(eth_get_dev());
# endif
#endif #endif
#if defined(CONFIG_CMD_USB) #if defined(CONFIG_CMD_USB)
......
...@@ -11,5 +11,6 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER,SUNXI_GMAC,RGMII,MACPWR=SUNXI_GPH(23),AHC ...@@ -11,5 +11,6 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER,SUNXI_GMAC,RGMII,MACPWR=SUNXI_GPH(23),AHC
# CONFIG_CMD_IMLS is not set # CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set # CONFIG_CMD_FLASH is not set
# CONFIG_CMD_FPGA is not set # CONFIG_CMD_FPGA is not set
CONFIG_NETCONSOLE=y
CONFIG_ETH_DESIGNWARE=y CONFIG_ETH_DESIGNWARE=y
CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD=y
...@@ -13,5 +13,6 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER,SUNXI_GMAC,RGMII,MACPWR=SUNXI_GPH(23),AHC ...@@ -13,5 +13,6 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER,SUNXI_GMAC,RGMII,MACPWR=SUNXI_GPH(23),AHC
# CONFIG_CMD_IMLS is not set # CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set # CONFIG_CMD_FLASH is not set
# CONFIG_CMD_FPGA is not set # CONFIG_CMD_FPGA is not set
CONFIG_NETCONSOLE=y
CONFIG_ETH_DESIGNWARE=y CONFIG_ETH_DESIGNWARE=y
CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD=y
...@@ -170,7 +170,11 @@ int nc_input_packet(uchar *pkt, struct in_addr src_ip, unsigned dest_port, ...@@ -170,7 +170,11 @@ int nc_input_packet(uchar *pkt, struct in_addr src_ip, unsigned dest_port,
static void nc_send_packet(const char *buf, int len) static void nc_send_packet(const char *buf, int len)
{ {
#ifdef CONFIG_DM_ETH
struct udevice *eth;
#else
struct eth_device *eth; struct eth_device *eth;
#endif
int inited = 0; int inited = 0;
uchar *pkt; uchar *pkt;
uchar *ether; uchar *ether;
...@@ -183,7 +187,7 @@ static void nc_send_packet(const char *buf, int len) ...@@ -183,7 +187,7 @@ static void nc_send_packet(const char *buf, int len)
return; return;
if (!memcmp(nc_ether, net_null_ethaddr, 6)) { if (!memcmp(nc_ether, net_null_ethaddr, 6)) {
if (eth->state == ETH_STATE_ACTIVE) if (eth_is_active(eth))
return; /* inside net loop */ return; /* inside net loop */
output_packet = buf; output_packet = buf;
output_packet_len = len; output_packet_len = len;
...@@ -194,7 +198,7 @@ static void nc_send_packet(const char *buf, int len) ...@@ -194,7 +198,7 @@ static void nc_send_packet(const char *buf, int len)
return; return;
} }
if (eth->state != ETH_STATE_ACTIVE) { if (!eth_is_active(eth)) {
if (eth_is_on_demand_init()) { if (eth_is_on_demand_init()) {
if (eth_init() < 0) if (eth_init() < 0)
return; return;
...@@ -292,7 +296,11 @@ static int nc_stdio_getc(struct stdio_dev *dev) ...@@ -292,7 +296,11 @@ static int nc_stdio_getc(struct stdio_dev *dev)
static int nc_stdio_tstc(struct stdio_dev *dev) static int nc_stdio_tstc(struct stdio_dev *dev)
{ {
#ifdef CONFIG_DM_ETH
struct udevice *eth;
#else
struct eth_device *eth; struct eth_device *eth;
#endif
if (input_recursion) if (input_recursion)
return 0; return 0;
...@@ -301,7 +309,7 @@ static int nc_stdio_tstc(struct stdio_dev *dev) ...@@ -301,7 +309,7 @@ static int nc_stdio_tstc(struct stdio_dev *dev)
return 1; return 1;
eth = eth_get_dev(); eth = eth_get_dev();
if (eth && eth->state == ETH_STATE_ACTIVE) if (eth_is_active(eth))
return 0; /* inside net loop */ return 0; /* inside net loop */
input_recursion = 1; input_recursion = 1;
......
...@@ -571,7 +571,7 @@ static struct phy_device *phy_device_create(struct mii_dev *bus, int addr, ...@@ -571,7 +571,7 @@ static struct phy_device *phy_device_create(struct mii_dev *bus, int addr,
memset(dev, 0, sizeof(*dev)); memset(dev, 0, sizeof(*dev));
dev->duplex = -1; dev->duplex = -1;
dev->link = 1; dev->link = 0;
dev->interface = interface; dev->interface = interface;
dev->autoneg = AUTONEG_ENABLE; dev->autoneg = AUTONEG_ENABLE;
......
...@@ -149,7 +149,9 @@ struct udevice *eth_get_dev(void); /* get the current device */ ...@@ -149,7 +149,9 @@ struct udevice *eth_get_dev(void); /* get the current device */
*/ */
struct udevice *eth_get_dev_by_name(const char *devname); struct udevice *eth_get_dev_by_name(const char *devname);
unsigned char *eth_get_ethaddr(void); /* get the current device MAC */ unsigned char *eth_get_ethaddr(void); /* get the current device MAC */
/* Used only when NetConsole is enabled */ /* Used only when NetConsole is enabled */
int eth_is_active(struct udevice *dev); /* Test device for active state */
int eth_init_state_only(void); /* Set active state */ int eth_init_state_only(void); /* Set active state */
void eth_halt_state_only(void); /* Set passive state */ void eth_halt_state_only(void); /* Set passive state */
#endif #endif
...@@ -195,6 +197,8 @@ static inline unsigned char *eth_get_ethaddr(void) ...@@ -195,6 +197,8 @@ static inline unsigned char *eth_get_ethaddr(void)
return NULL; return NULL;
} }
/* Used only when NetConsole is enabled */
int eth_is_active(struct eth_device *dev); /* Test device for active state */
/* Set active state */ /* Set active state */
static inline __attribute__((always_inline)) int eth_init_state_only(void) static inline __attribute__((always_inline)) int eth_init_state_only(void)
{ {
......
...@@ -16,4 +16,10 @@ config NET_RANDOM_ETHADDR ...@@ -16,4 +16,10 @@ config NET_RANDOM_ETHADDR
A new MAC address will be generated on every boot and it will A new MAC address will be generated on every boot and it will
not be added to the environment. not be added to the environment.
config NETCONSOLE
bool "NetConsole support"
help
Support the 'nc' input/output device for networked console.
See README.NetConsole for details.
endif # if NET endif # if NET
...@@ -389,6 +389,17 @@ void eth_halt(void) ...@@ -389,6 +389,17 @@ void eth_halt(void)
priv->state = ETH_STATE_PASSIVE; priv->state = ETH_STATE_PASSIVE;
} }
int eth_is_active(struct udevice *dev)
{
struct eth_device_priv *priv;
if (!dev || !device_active(dev))
return 0;
priv = dev_get_uclass_priv(dev);
return priv->state == ETH_STATE_ACTIVE;
}
int eth_send(void *packet, int length) int eth_send(void *packet, int length)
{ {
struct udevice *current; struct udevice *current;
...@@ -580,7 +591,7 @@ UCLASS_DRIVER(eth) = { ...@@ -580,7 +591,7 @@ UCLASS_DRIVER(eth) = {
.per_device_auto_alloc_size = sizeof(struct eth_device_priv), .per_device_auto_alloc_size = sizeof(struct eth_device_priv),
.flags = DM_UC_FLAG_SEQ_ALIAS, .flags = DM_UC_FLAG_SEQ_ALIAS,
}; };
#endif #endif /* #ifdef CONFIG_DM_ETH */
#ifndef CONFIG_DM_ETH #ifndef CONFIG_DM_ETH
...@@ -918,6 +929,11 @@ void eth_halt(void) ...@@ -918,6 +929,11 @@ void eth_halt(void)
eth_current->state = ETH_STATE_PASSIVE; eth_current->state = ETH_STATE_PASSIVE;
} }
int eth_is_active(struct eth_device *dev)
{
return dev && dev->state == ETH_STATE_ACTIVE;
}
int eth_send(void *packet, int length) int eth_send(void *packet, int length)
{ {
if (!eth_current) if (!eth_current)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册