Message ID | c3e956e94127fb826afbfd8218257626a156e371.1729070678.git.jerome.forissier@linaro.org |
---|---|
State | Accepted |
Commit | 7ad5e878cd850102e13ee2a5f8a5fb69742f70b0 |
Headers | show |
Series | Introduce the lwIP network stack | expand |
On Wed, 16 Oct 2024 at 13:04, Jerome Forissier <jerome.forissier@linaro.org> wrote: > > Add a function to start a given network device, and update eth_init() > to use it. > > Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> > --- > include/net-common.h | 1 + > net/eth-uclass.c | 38 +++++++++++++++++++++++++------------- > 2 files changed, 26 insertions(+), 13 deletions(-) > > diff --git a/include/net-common.h b/include/net-common.h > index 543f528a4a4..6bc76658d9d 100644 > --- a/include/net-common.h > +++ b/include/net-common.h > @@ -192,6 +192,7 @@ int eth_env_set_enetaddr_by_index(const char *base_name, int index, > int usb_ether_init(void); > > int eth_init(void); /* Initialize the device */ > +int eth_start_udev(struct udevice *dev); /* ->start() if not already running */ > int eth_send(void *packet, int length); /* Send a packet */ > #if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER) > int eth_receive(void *packet, int length); /* Receive a packet*/ > diff --git a/net/eth-uclass.c b/net/eth-uclass.c > index e34d7af0229..5555f82f23e 100644 > --- a/net/eth-uclass.c > +++ b/net/eth-uclass.c > @@ -284,6 +284,27 @@ static int on_ethaddr(const char *name, const char *value, enum env_op op, > } > U_BOOT_ENV_CALLBACK(ethaddr, on_ethaddr); > > +int eth_start_udev(struct udevice *dev) > +{ > + struct eth_device_priv *priv = dev_get_uclass_priv(dev); > + int ret; > + > + if (priv->running) > + return 0; > + > + if (!device_active(dev)) > + return -EINVAL; > + > + ret = eth_get_ops(dev)->start(dev); > + if (ret < 0) > + return ret; > + > + priv->state = ETH_STATE_ACTIVE; > + priv->running = true; > + > + return 0; > +} > + > int eth_init(void) > { > struct udevice *current = NULL; > @@ -328,20 +349,11 @@ int eth_init(void) > if (current) { > debug("Trying %s\n", current->name); > > - if (device_active(current)) { > - ret = eth_get_ops(current)->start(current); > - if (ret >= 0) { > - struct eth_device_priv *priv = > - dev_get_uclass_priv(current); > - > - priv->state = ETH_STATE_ACTIVE; > - priv->running = true; > - ret = 0; > - goto end; > - } > - } else { > + ret = eth_start_udev(current); > + if (ret < 0) > ret = eth_errno; > - } > + else > + break; > > debug("FAIL\n"); > } else { > -- > 2.40.1 > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
diff --git a/include/net-common.h b/include/net-common.h index 543f528a4a4..6bc76658d9d 100644 --- a/include/net-common.h +++ b/include/net-common.h @@ -192,6 +192,7 @@ int eth_env_set_enetaddr_by_index(const char *base_name, int index, int usb_ether_init(void); int eth_init(void); /* Initialize the device */ +int eth_start_udev(struct udevice *dev); /* ->start() if not already running */ int eth_send(void *packet, int length); /* Send a packet */ #if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER) int eth_receive(void *packet, int length); /* Receive a packet*/ diff --git a/net/eth-uclass.c b/net/eth-uclass.c index e34d7af0229..5555f82f23e 100644 --- a/net/eth-uclass.c +++ b/net/eth-uclass.c @@ -284,6 +284,27 @@ static int on_ethaddr(const char *name, const char *value, enum env_op op, } U_BOOT_ENV_CALLBACK(ethaddr, on_ethaddr); +int eth_start_udev(struct udevice *dev) +{ + struct eth_device_priv *priv = dev_get_uclass_priv(dev); + int ret; + + if (priv->running) + return 0; + + if (!device_active(dev)) + return -EINVAL; + + ret = eth_get_ops(dev)->start(dev); + if (ret < 0) + return ret; + + priv->state = ETH_STATE_ACTIVE; + priv->running = true; + + return 0; +} + int eth_init(void) { struct udevice *current = NULL; @@ -328,20 +349,11 @@ int eth_init(void) if (current) { debug("Trying %s\n", current->name); - if (device_active(current)) { - ret = eth_get_ops(current)->start(current); - if (ret >= 0) { - struct eth_device_priv *priv = - dev_get_uclass_priv(current); - - priv->state = ETH_STATE_ACTIVE; - priv->running = true; - ret = 0; - goto end; - } - } else { + ret = eth_start_udev(current); + if (ret < 0) ret = eth_errno; - } + else + break; debug("FAIL\n"); } else {
Add a function to start a given network device, and update eth_init() to use it. Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> --- include/net-common.h | 1 + net/eth-uclass.c | 38 +++++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-)