From 7242a223a1a8d60027239e3959e03fb1958beafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 3 Nov 2007 13:00:12 +0000 Subject: [PATCH] * Added miibus_linkchg and miibus_mediainit methods to device_set_driver(); this was the actual reason the MII bus did not work as mediainit was never called. * Got rid of the delayed MII bus scanning again; not only did it not solve the problem, it was also completely unnecessary. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22812 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/libs/compat/freebsd_network/compat.c | 30 +++++-------------- .../freebsd_network/compat/sys/haiku-module.h | 1 - src/libs/compat/freebsd_network/device.c | 9 ++---- 3 files changed, 10 insertions(+), 30 deletions(-) diff --git a/src/libs/compat/freebsd_network/compat.c b/src/libs/compat/freebsd_network/compat.c index 4ab9bdad7a..e64246940e 100644 --- a/src/libs/compat/freebsd_network/compat.c +++ b/src/libs/compat/freebsd_network/compat.c @@ -1,5 +1,6 @@ /* * Copyright 2007, Hugo Santos, hugosantos@gmail.com. All Rights Reserved. + * Copyright 2007, Axel Dörfler, axeld@pinc-software.de. All Rights Reserved. * Copyright 2004, Marcus Overhagen. All Rights Reserved. * * Distributed under the terms of the MIT License. @@ -310,6 +311,10 @@ device_set_driver(device_t dev, driver_t *driver) dev->methods.miibus_writereg = (void *)mth->method; else if (strcmp(mth->name, "miibus_statchg") == 0) dev->methods.miibus_statchg = (void *)mth->method; + else if (!strcmp(mth->name, "miibus_linkchg")) + dev->methods.miibus_linkchg = (void *)mth->method; + else if (!strcmp(mth->name, "miibus_mediainit")) + dev->methods.miibus_mediainit = (void *)mth->method; } return 0; @@ -393,19 +398,11 @@ __haiku_probe_miibus(device_t dev, driver_t *drivers[], int count) void -__haiku_scan_miibus(device_t dev) +bus_generic_attach(device_t dev) { - device_t miibus = NULL; device_t child = NULL; - // find miibus - - while ((miibus = list_get_next_item(&dev->children, miibus)) != NULL) { - if (miibus->driver == &miibus_driver) - break; - } - - while ((child = list_get_next_item(&miibus->children, child)) != NULL) { + while ((child = list_get_next_item(&dev->children, child)) != NULL) { if (child->driver == NULL) { driver_t *driver = __haiku_select_miibus_driver(child); if (driver) { @@ -417,18 +414,7 @@ __haiku_scan_miibus(device_t dev) device_printf(dev, "No PHY module found (%x/%x)!\n", ma->mii_id1, ma->mii_id2); } - } - } -} - - -void -bus_generic_attach(device_t dev) -{ - device_t child = NULL; - - while ((child = list_get_next_item(&dev->children, child)) != NULL) { - if (child->driver == &miibus_driver) + } else if (child->driver == &miibus_driver) child->methods.probe(child); if (child->driver != NULL) diff --git a/src/libs/compat/freebsd_network/compat/sys/haiku-module.h b/src/libs/compat/freebsd_network/compat/sys/haiku-module.h index 9b5ac7e02e..ecbb0ea9c1 100644 --- a/src/libs/compat/freebsd_network/compat/sys/haiku-module.h +++ b/src/libs/compat/freebsd_network/compat/sys/haiku-module.h @@ -54,7 +54,6 @@ void _fbsd_uninit_driver(driver_t *); extern const char gDriverName[]; driver_t *__haiku_select_miibus_driver(device_t dev); driver_t *__haiku_probe_miibus(device_t dev, driver_t *drivers[], int count); -void __haiku_scan_miibus(device_t dev); /* we define the driver methods with HAIKU_FBSD_DRIVER_GLUE to * force the rest of the stuff to be linked back with the driver. diff --git a/src/libs/compat/freebsd_network/device.c b/src/libs/compat/freebsd_network/device.c index 1bb555fb16..5a70e1dc32 100644 --- a/src/libs/compat/freebsd_network/device.c +++ b/src/libs/compat/freebsd_network/device.c @@ -1,11 +1,8 @@ /* * Copyright 2007, Hugo Santos. All Rights Reserved. + * Copyright 2004, Marcus Overhagen. All Rights Reserved. + * * Distributed under the terms of the MIT License. - * - * Authors: - * Hugo Santos, hugosantos@gmail.com - * - * Some of this code is based on previous work by Marcus Overhagen. */ #include "device.h" @@ -127,8 +124,6 @@ compat_open(const char *name, uint32 flags, void **cookie) struct ifnet *ifp = dev->ifp; struct ifreq ifr; - __haiku_scan_miibus(DEVNET(dev)); - ifp->if_flags &= ~IFF_UP; ifp->if_ioctl(ifp, SIOCSIFFLAGS, NULL);