static int eth_pre_unbind(struct udevice *dev) { /* Don't hang onto a pointer that is going away */ if (dev == eth_get_uclass_priv()->current) eth_set_dev(NULL); return 0; }
/* * Typically this will just store a device pointer. * In case it was not probed, we will attempt to do so. * dev may be NULL to unset the active device. */ void eth_set_dev(struct udevice *dev) { if (dev && !device_active(dev)) { eth_errno = device_probe(dev); if (eth_errno) dev = NULL; } eth_get_uclass_priv()->current = dev; }
/* * Typically this will simply return the active device. * In the case where the most recent active device was unset, this will attempt * to return the first device. If that device doesn't exist or fails to probe, * this function will return NULL. */ struct udevice *eth_get_dev(void) { struct eth_uclass_priv *uc_priv; uc_priv = eth_get_uclass_priv(); if (!uc_priv->current) eth_errno = uclass_first_device(UCLASS_ETH, &uc_priv->current); return uc_priv->current; }
void eth_set_current_to_next(void) { struct eth_uclass_priv *uc_priv; uc_priv = eth_get_uclass_priv(); if (uc_priv->current) uclass_next_device(&uc_priv->current); if (!uc_priv->current) uclass_first_device(UCLASS_ETH, &uc_priv->current); }
/* * Typically this will just store a device pointer. * In case it was not probed, we will attempt to do so. * dev may be NULL to unset the active device. */ static void eth_set_dev(struct udevice *dev) { if (dev && !device_active(dev)) eth_errno = device_probe(dev); eth_get_uclass_priv()->current = dev; }