diff --git a/src/add-ons/kernel/bus_managers/usb/Pipe.cpp b/src/add-ons/kernel/bus_managers/usb/Pipe.cpp index e1dcd33c93..e2bcc13dab 100644 --- a/src/add-ons/kernel/bus_managers/usb/Pipe.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Pipe.cpp @@ -26,8 +26,6 @@ Pipe::~Pipe() } - - void Pipe::InitCommon(int8 deviceAddress, uint8 endpointAddress, usb_speed speed, pipeDirection direction, size_t maxPacketSize, uint8 interval, diff --git a/src/add-ons/kernel/bus_managers/usb/Stack.cpp b/src/add-ons/kernel/bus_managers/usb/Stack.cpp index 699a78cbc2..e0c6b3b34c 100644 --- a/src/add-ons/kernel/bus_managers/usb/Stack.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Stack.cpp @@ -57,7 +57,7 @@ Stack::Stack() size_t bufferSize = sizeof(moduleName); TRACE(("USB Stack: looking for host controller modules\n")); - while(read_next_module_name(moduleList, moduleName, &bufferSize) == B_OK) { + while (read_next_module_name(moduleList, moduleName, &bufferSize) == B_OK) { bufferSize = sizeof(moduleName); TRACE(("USB Stack: found module %s\n", moduleName)); @@ -81,6 +81,12 @@ Stack::Stack() fExploreThread = spawn_kernel_thread(ExploreThread, "usb explore", B_LOW_PRIORITY, this); resume_thread(fExploreThread); + + // wait for the first explore to complete. this ensures that a driver that + // is opening the module does not get rescanned while or before installing + // its hooks. + while (!fFirstExploreDone) + snooze(100); } @@ -110,7 +116,6 @@ Stack::InitCheck() { if (fBusManagers.Count() == 0) return ENODEV; - return B_OK; } @@ -355,7 +360,7 @@ Stack::RescanDrivers(rescan_item *rescanItem) close(devFS); #else // use the private devfs API under Haiku - //devfs_rescan_driver(name); + devfs_rescan_driver(rescanItem->name); #endif rescan_item *next = rescanItem->link; @@ -436,11 +441,6 @@ Stack::InstallNotify(const char *driverName, const usb_notify_hooks *hooks) { TRACE(("USB Stack: installing notify hooks for driver \"%s\"\n", driverName)); - // wait for the first explore to complete - // this ensures that we get all initial devices - while (!fFirstExploreDone) - snooze(1000); - usb_driver_info *element = fDriverList; while (element) { if (strcmp(element->driver_name, driverName) == 0) {