summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2025-11-28 11:41:26 +0800
committersakumisu <[email protected]>2025-11-28 11:45:20 +0800
commit3e28c528a4c1302b9e8352c9eadb2d176865344b (patch)
tree84bb1d7f4b2d9749d203f51ea0b64fdb892528e5
parente10b44f64e33ed5817caaf3a0779a5b55050dd12 (diff)
update(class/hub): remove hport sources safely
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--class/hub/usbh_hub.c11
-rw-r--r--core/usbh_core.h2
2 files changed, 12 insertions, 1 deletions
diff --git a/class/hub/usbh_hub.c b/class/hub/usbh_hub.c
index c261c97f..f134fca2 100644
--- a/class/hub/usbh_hub.c
+++ b/class/hub/usbh_hub.c
@@ -688,7 +688,9 @@ static void usbh_hub_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV)
if (ret < 0) {
continue;
}
+ usb_osal_mutex_take(bus->mutex);
usbh_hub_events(hub);
+ usb_osal_mutex_give(bus->mutex);
}
}
@@ -718,6 +720,12 @@ int usbh_hub_initialize(struct usbh_bus *bus)
return -1;
}
+ bus->mutex = usb_osal_mutex_create();
+ if (bus->mutex == NULL) {
+ USB_LOG_ERR("Failed to create bus mutex\r\n");
+ return -1;
+ }
+
snprintf(thread_name, 32, "usbh_hub%u", bus->busid);
bus->hub_thread = usb_osal_thread_create(thread_name, CONFIG_USBHOST_PSC_STACKSIZE, CONFIG_USBHOST_PSC_PRIO, usbh_hub_thread, bus);
if (bus->hub_thread == NULL) {
@@ -732,6 +740,7 @@ int usbh_hub_deinitialize(struct usbh_bus *bus)
struct usbh_hubport *hport;
struct usbh_hub *hub;
+ usb_osal_mutex_take(bus->mutex);
hub = &bus->hcd.roothub;
for (uint8_t port = 0; port < hub->nports; port++) {
hport = &hub->child[port];
@@ -744,6 +753,8 @@ int usbh_hub_deinitialize(struct usbh_bus *bus)
usb_osal_thread_delete(bus->hub_thread);
usb_osal_mq_delete(bus->hub_mq);
+ usb_osal_mutex_give(bus->mutex);
+ usb_osal_mutex_delete(bus->mutex);
return 0;
}
diff --git a/core/usbh_core.h b/core/usbh_core.h
index 633fe44e..153c8a36 100644
--- a/core/usbh_core.h
+++ b/core/usbh_core.h
@@ -201,7 +201,7 @@ struct usbh_bus {
struct usbh_devaddr_map devgen;
usb_osal_thread_t hub_thread;
usb_osal_mq_t hub_mq;
-
+ usb_osal_mutex_t mutex;
void (*event_handler)(uint8_t busid, uint8_t hub_index, uint8_t hub_port, uint8_t intf, uint8_t event);
};