diff --git a/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h b/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h index 71ddf0dc1b..f698811225 100644 --- a/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h +++ b/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h @@ -2,10 +2,12 @@ #define _USB_BEOS_COMPATIBILITY_H_ #ifndef HAIKU_TARGET_PLATFORM_HAIKU -#include +// prevent inclusion of original lock.h as it conflicts with what we have here +#define _KERNEL_LOCK_H + #include #include - +#include #define IS_USER_ADDRESS(x) (((uint32)x & 0x80000000) > 0) #define IS_KERNEL_ADDRESS(x) (((uint32)x & 0x80000000) == 0) @@ -27,6 +29,13 @@ enum { }; #endif + +typedef struct benaphore { + sem_id sem; + int32 count; +} benaphore; + + inline status_t benaphore_init(benaphore *ben, const char *name) { @@ -50,6 +59,24 @@ benaphore_destroy(benaphore *ben) } +inline status_t +benaphore_lock(benaphore *ben) +{ + if (atomic_add(&ben->count, -1) <= 0) + return acquire_sem(ben->sem); + return B_OK; +} + + +inline status_t +benaphore_unlock(benaphore *ben) +{ + if (atomic_add(&ben->count, 1) < 0) + return release_sem(ben->sem); + return B_OK; +} + + inline void load_driver_symbols(char *driver) { @@ -67,5 +94,10 @@ snprintf(char *buffer, size_t bufferSize, const char *format, ...) return result; } +#undef B_KERNEL_READ_AREA +#define B_KERNEL_READ_AREA B_READ_AREA +#undef B_KERNEL_WRITE_AREA +#define B_KERNEL_WRITE_AREA B_WRITE_AREA + #endif // !HAIKU_TARGET_PLATFORM_HAIKU #endif // !_USB_BEOS_COMPATIBILITY_H_ diff --git a/src/add-ons/kernel/bus_managers/usb/usb.cpp b/src/add-ons/kernel/bus_managers/usb/usb.cpp index 1cb69ef800..4443f44eea 100644 --- a/src/add-ons/kernel/bus_managers/usb/usb.cpp +++ b/src/add-ons/kernel/bus_managers/usb/usb.cpp @@ -20,6 +20,7 @@ bus_std_ops(int32 op, ...) { switch (op) { case B_MODULE_INIT: { + TRACE(("usb_module: init\n")); if (gUSBStack) return B_OK; @@ -28,6 +29,7 @@ bus_std_ops(int32 op, ...) if (shared >= B_OK && clone_area("usb stack clone", &address, B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA, shared) >= B_OK) { gUSBStack = *((Stack **)address); + TRACE(("usb_module: found shared stack at %p\n", gUSBStack)); return B_OK; } @@ -36,9 +38,9 @@ bus_std_ops(int32 op, ...) #ifndef __HAIKU__ load_driver_symbols("usb"); #endif - TRACE(("usb_module: init\n")); #endif Stack *stack = new(std::nothrow) Stack(); + TRACE(("usb_module: stack created %p\n", stack)); if (!stack) return B_NO_MEMORY; diff --git a/src/add-ons/kernel/bus_managers/usb/usb_p.h b/src/add-ons/kernel/bus_managers/usb/usb_p.h index 3bf535a9cf..b138293637 100644 --- a/src/add-ons/kernel/bus_managers/usb/usb_p.h +++ b/src/add-ons/kernel/bus_managers/usb/usb_p.h @@ -10,9 +10,9 @@ #ifndef _USB_P_ #define _USB_P_ -#include -#include "usbspec_p.h" #include "BeOSCompatibility.h" +#include "usbspec_p.h" +#include #ifdef TRACE_USB diff --git a/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp b/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp index 4dba5df44f..2f472e9892 100644 --- a/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp +++ b/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp @@ -6,14 +6,15 @@ * Michael Lotz */ +#include "BeOSCompatibility.h" +#include "usb_raw.h" + #include #include #include #include #include #include -#include "usb_raw.h" -#include "BeOSCompatibility.h" //#define TRACE_USB_RAW #ifdef TRACE_USB_RAW