aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/osal
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-08-17 11:04:57 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-08-17 11:04:57 +0000
commit4f49b546b101841d523df17806bea67b269a2a85 (patch)
tree4690183f1989a0caff203b688c0dbdf25f9c26d6 /os/hal/osal
parentbfa3ba9f00d263a15d6d6b2dec2aa0b81058df27 (diff)
downloadChibiOS-4f49b546b101841d523df17806bea67b269a2a85.tar.gz
ChibiOS-4f49b546b101841d523df17806bea67b269a2a85.tar.bz2
ChibiOS-4f49b546b101841d523df17806bea67b269a2a85.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6167 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/osal')
-rw-r--r--os/hal/osal/chibios/osal.c149
-rw-r--r--os/hal/osal/chibios/osal.h131
2 files changed, 113 insertions, 167 deletions
diff --git a/os/hal/osal/chibios/osal.c b/os/hal/osal/chibios/osal.c
index da3746eaf..d46840e91 100644
--- a/os/hal/osal/chibios/osal.c
+++ b/os/hal/osal/chibios/osal.c
@@ -84,153 +84,4 @@ void osalSysHalt(const char *reason) {
chSysHalt();
}
-/**
- * @brief Sends the current thread sleeping and sets a reference variable.
- * @note This function must reschedule, it can only be called from thread
- * context.
- *
- * @param[in] trp a pointer to a thread reference object
- * @return The wake up message.
- *
- * @sclass
- */
-msg_t osalThreadSuspendS(thread_reference_t *trp) {
-
- chDbgAssert(*trp == NULL, "not NULL");
-
- *trp = (thread_reference_t)chThdGetSelfX();
- chSchGoSleepS(CH_STATE_SUSPENDED);
- return chThdGetSelfX()->p_msg;
-}
-
-/**
- * @brief Wakes up a thread waiting on a thread reference object.
- * @note This function must not reschedule because it can be called from
- * ISR context.
- *
- * @param[in] trp a pointer to a thread reference object
- * @param[in] msg the message code
- *
- * @iclass
- */
-void osalThreadResumeI(thread_reference_t *trp, msg_t msg) {
-
- if (*trp != NULL) {
-
- chDbgAssert((*trp)->p_state == CH_STATE_SUSPENDED,
- "not THD_STATE_SUSPENDED");
-
- (*trp)->p_u.rdymsg = msg;
- chSchReadyI((thread_t *)*trp);
- *trp = NULL;
- }
-}
-
-/**
- * @brief Wakes up a thread waiting on a thread reference object.
- * @note This function must reschedule, it can only be called from thread
- * context.
- *
- * @param[in] trp a pointer to a thread reference object
- * @param[in] msg the message code
- *
- * @iclass
- */
-void osalThreadResumeS(thread_reference_t *trp, msg_t msg) {
-
- if (*trp != NULL) {
- thread_t *tp = (thread_t *)*trp;
-
- chDbgAssert(tp->p_state == CH_STATE_SUSPENDED, "not THD_STATE_SUSPENDED");
-
- *trp = NULL;
- chSchWakeupS(tp, msg);
- }
-}
-
-/**
- * @brief Enqueues the caller thread.
- * @details The caller thread is enqueued and put to sleep until it is
- * dequeued or the specified timeouts expires.
- *
- * @param[in] tqp pointer to the threads queue object
- * @param[in] time the timeout in system ticks, the special values are
- * handled as follow:
- * - @a TIME_INFINITE the thread enters an infinite sleep
- * state.
- * - @a TIME_IMMEDIATE the thread is not enqueued and
- * the function returns @p MSG_TIMEOUT as if a timeout
- * occurred.
- * .
- * @return The message from @p osalQueueWakeupOneI() or
- * @p osalQueueWakeupAllI() functions.
- * @retval RDY_TIMEOUT if the thread has not been dequeued within the
- * specified timeout or if the function has been
- * invoked with @p TIME_IMMEDIATE as timeout
- * specification.
- *
- * @sclass
- */
-msg_t osalQueueGoSleepTimeoutS(threads_queue_t *tqp, systime_t time) {
-
- void wakeup(void *p) {
- thread_t *tp = (thread_t *)p;
-
- chSysUnlockFromISR();
- tp->p_u.rdymsg = RDY_TIMEOUT;
- chSchReadyI(queue_dequeue(tp));
- chSysUnlockFromISR();
- }
-
- if (TIME_IMMEDIATE == time)
- return MSG_TIMEOUT;
-
- queue_insert(currp, tqp);
- if (TIME_INFINITE == time)
- chSchGoSleepS(CH_STATE_SUSPENDED);
- else {
- virtual_timer_t vt;
-
- chVTDoSetI(&vt, time, wakeup, currp);
- chSchGoSleepS(CH_STATE_SUSPENDED);
- if (chVTIsArmedI(&vt))
- chVTDoResetI(&vt);
- }
- return currp->p_u.rdymsg;
-}
-
-/**
- * @brief Dequeues and wakes up one thread from the queue, if any.
- *
- * @param[in] tqp pointer to the threads queue object
- * @param[in] msg the message code
- *
- * @iclass
- */
-void osalQueueWakeupOneI(threads_queue_t *tqp, msg_t msg) {
-
- if (queue_notempty(tqp)) {
- thread_t *tp = queue_fifo_remove(tqp);
- tp->p_u.rdymsg = msg;
- chSchReadyI(tp);
- }
-}
-
-/**
- * @brief Dequeues and wakes up all threads from the queue.
- *
- * @param[in] tqp pointer to the threads queue object
- * @param[in] msg the message code
- *
- * @iclass
- */
-void osalQueueWakeupAllI(threads_queue_t *tqp, msg_t msg) {
-
- while (queue_notempty(tqp)) {
- thread_t *tp = queue_fifo_remove(tqp);
- tp->p_u.rdymsg = msg;
- chSchReadyI(tp);
- }
-}
-
/** @} */
diff --git a/os/hal/osal/chibios/osal.h b/os/hal/osal/chibios/osal.h
index fa48f3aa6..b3d0fae2b 100644
--- a/os/hal/osal/chibios/osal.h
+++ b/os/hal/osal/chibios/osal.h
@@ -130,10 +130,12 @@ typedef uint32_t systime_t;
typedef uint32_t rtcnt_t;
#endif
+#if 0
/**
* @brief Type of a thread reference.
*/
typedef thread_t * thread_reference_t;
+#endif
#if 0
/**
@@ -257,12 +259,6 @@ extern "C" {
#endif
void osalInit(void);
void osalSysHalt(const char *reason);
- msg_t osalThreadSuspendS(thread_reference_t *trp);
- void osalThreadResumeI(thread_reference_t *trp, msg_t msg);
- void osalThreadResumeS(thread_reference_t *trp, msg_t msg);
- msg_t osalQueueGoSleepTimeoutS(threads_queue_t *tqp, systime_t time);
- void osalQueueWakeupOneI(threads_queue_t *tqp, msg_t msg);
- void osalQueueWakeupAllI(threads_queue_t *tqp, msg_t msg);
#ifdef __cplusplus
}
#endif
@@ -392,6 +388,117 @@ static inline void osalThreadSleep(systime_t time) {
}
/**
+ * @brief Sends the current thread sleeping and sets a reference variable.
+ * @note This function must reschedule, it can only be called from thread
+ * context.
+ *
+ * @param[in] trp a pointer to a thread reference object
+ * @return The wake up message.
+ *
+ * @sclass
+ */
+static inline msg_t osalThreadSuspendS(thread_reference_t *trp) {
+
+ return osalThreadSuspendS(trp);
+}
+
+/**
+ * @brief Wakes up a thread waiting on a thread reference object.
+ * @note This function must not reschedule because it can be called from
+ * ISR context.
+ *
+ * @param[in] trp a pointer to a thread reference object
+ * @param[in] msg the message code
+ *
+ * @iclass
+ */
+static inline void osalThreadResumeI(thread_reference_t *trp, msg_t msg) {
+
+ chThreadResumeI(trp, msg);
+}
+
+/**
+ * @brief Wakes up a thread waiting on a thread reference object.
+ * @note This function must reschedule, it can only be called from thread
+ * context.
+ *
+ * @param[in] trp a pointer to a thread reference object
+ * @param[in] msg the message code
+ *
+ * @iclass
+ */
+static inline void osalThreadResumeS(thread_reference_t *trp, msg_t msg) {
+
+ chThreadResumeS(trp, msg);
+}
+
+/**
+ * @brief Initializes a threads queue object.
+ *
+ * @param[out] tqp pointer to the threads queue object
+ *
+ * @init
+ */
+static inline void osalQueueObjectInit(threads_queue_t *tqp) {
+
+ queue_init(tqp);
+}
+
+/**
+ * @brief Enqueues the caller thread.
+ * @details The caller thread is enqueued and put to sleep until it is
+ * dequeued or the specified timeouts expires.
+ *
+ * @param[in] tqp pointer to the threads queue object
+ * @param[in] time the timeout in system ticks, the special values are
+ * handled as follow:
+ * - @a TIME_INFINITE the thread enters an infinite sleep
+ * state.
+ * - @a TIME_IMMEDIATE the thread is not enqueued and
+ * the function returns @p MSG_TIMEOUT as if a timeout
+ * occurred.
+ * .
+ * @return The message from @p osalQueueWakeupOneI() or
+ * @p osalQueueWakeupAllI() functions.
+ * @retval RDY_TIMEOUT if the thread has not been dequeued within the
+ * specified timeout or if the function has been
+ * invoked with @p TIME_IMMEDIATE as timeout
+ * specification.
+ *
+ * @sclass
+ */
+static inline msg_t osalQueueGoSleepTimeoutS(threads_queue_t *tqp, systime_t time) {
+
+ return chQueueGoSleepTimeoutS(tqp, time);
+}
+
+/**
+ * @brief Dequeues and wakes up one thread from the queue, if any.
+ *
+ * @param[in] tqp pointer to the threads queue object
+ * @param[in] msg the message code
+ *
+ * @iclass
+ */
+static inline void osalQueueWakeupOneI(threads_queue_t *tqp, msg_t msg) {
+
+ chQueueWakeupOneI(tqp, msg);
+}
+
+/**
+ * @brief Dequeues and wakes up all threads from the queue.
+ *
+ * @param[in] tqp pointer to the threads queue object
+ * @param[in] msg the message code
+ *
+ * @iclass
+ */
+static inline void osalQueueWakeupAllI(threads_queue_t *tqp, msg_t msg) {
+
+ chQueueWakeupAllI(tqp, msg);
+}
+
+/**
* @brief Initializes an event flags object.
*
* @param[out] esp pointer to the event flags object
@@ -494,18 +601,6 @@ static inline void osalMutexUnlock(mutex_t *mp) {
#endif
}
-/**
- * @brief Initializes a threads queue object.
- *
- * @param[out] tqp pointer to the threads queue object
- *
- * @init
- */
-static inline void osalQueueObjectInit(threads_queue_t *tqp) {
-
- queue_init(tqp);
-}
-
#endif /* _OSAL_H_ */
/** @} */