diff --git a/qdf/inc/qdf_event.h b/qdf/inc/qdf_event.h index 27de4c7936..04e09434f2 100644 --- a/qdf/inc/qdf_event.h +++ b/qdf/inc/qdf_event.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2018, 2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -41,8 +41,36 @@ typedef __qdf_event_t qdf_event_t; QDF_STATUS qdf_event_create(qdf_event_t *event); +/** + * qdf_event_set() - sets a QDF event for single waiting threads + * @event: The event to set to the signalled state + * + * The state of the specified event is set to signalled by calling + * qdf_event_set(). + * + * Single thread waiting on the event as a result of a qdf_event_wait() will + * be unblocked and available to be scheduled for execution when the event + * is signaled by a call to qdf_event_set(). + * + * Return: QDF status + */ QDF_STATUS qdf_event_set(qdf_event_t *event); +/** + * qdf_event_set_all() - sets a QDF event for all waiting threads + * @event: The event to set to the signalled state + * + * The state of the specified event is set to signalled by calling + * qdf_event_set_all(). + * + * Any threads waiting on the event as a result of a qdf_event_wait() will + * be unblocked and available to be scheduled for execution when the event + * is signaled by a call to qdf_event_set(). + * + * Return: QDF status + */ +QDF_STATUS qdf_event_set_all(qdf_event_t *event); + QDF_STATUS qdf_event_reset(qdf_event_t *event); QDF_STATUS qdf_event_destroy(qdf_event_t *event); diff --git a/qdf/linux/src/qdf_event.c b/qdf/linux/src/qdf_event.c index f52fa1b9f6..d391ae95a6 100644 --- a/qdf/linux/src/qdf_event.c +++ b/qdf/linux/src/qdf_event.c @@ -77,19 +77,6 @@ QDF_STATUS qdf_event_create(qdf_event_t *event) } qdf_export_symbol(qdf_event_create); -/** - * qdf_event_set() - sets a QDF event - * @event: The event to set to the signalled state - * - * The state of the specified event is set to signalled by calling - * qdf_event_set(). - * - * Any threads waiting on the event as a result of a qdf_event_wait() will - * be unblocked and available to be scheduled for execution when the event - * is signaled by a call to qdf_event_set(). - * - * Return: QDF status - */ QDF_STATUS qdf_event_set(qdf_event_t *event) { QDF_BUG(event); @@ -106,8 +93,28 @@ QDF_STATUS qdf_event_set(qdf_event_t *event) return QDF_STATUS_SUCCESS; } + qdf_export_symbol(qdf_event_set); +QDF_STATUS qdf_event_set_all(qdf_event_t *event) +{ + QDF_BUG(event); + if (!event) + return QDF_STATUS_E_FAULT; + + /* ensure event is initialized */ + QDF_BUG(event->cookie == LINUX_EVENT_COOKIE); + if (event->cookie != LINUX_EVENT_COOKIE) + return QDF_STATUS_E_INVAL; + + event->done = true; + complete_all(&event->complete); + + return QDF_STATUS_SUCCESS; +} + +qdf_export_symbol(qdf_event_set_all); + /** * qdf_event_reset() - resets a QDF event * @event: The event to set to the NOT signalled state