timer_setSoftInt(): rename from timer_set_event_softint().
[bertos.git] / bertos / drv / ser.c
index 65a333daf746d21da6ee54fb19b8bc0583147c35..cbcc33a388d9bdc435e2408f0de2950f2fde2134 100644 (file)
@@ -28,7 +28,6 @@
  *
  * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
  * Copyright 2000 Bernie Innocenti <bernie@codewiz.org>
- *
  * -->
  *
  * \brief Buffered serial I/O driver
@@ -61,7 +60,9 @@
 
 #include <mware/formatwr.h>
 
-#include <string.h> /* memset */
+#include <cpu/power.h> /* cpu_relax() */
+
+#include <string.h> /* memset() */
 
 /*
  * Sanity check for config parameters required by this module.
        #error CONFIG_SER_DEFBAUDRATE missing in config.h
 #endif
 
-#if CONFIG_KERNEL
-       #include <kern/proc.h>
-#endif
-
-#if CONFIG_SER_TXTIMEOUT != -1 || CONFIG_SER_RXTIMEOUT != -1
-       #include <drv/timer.h>
-#endif
-
 
 struct Serial *ser_handles[SER_CNT];
 
@@ -113,11 +106,8 @@ static int ser_putchar(int c, struct Serial *port)
                /* Wait while buffer is full... */
                do
                {
-                       wdt_reset();
-#if CONFIG_KERNEL && CONFIG_KERN_SCHED
-                       /* Give up timeslice to other processes. */
-                       proc_switch();
-#endif
+                       cpu_relax();
+
 #if CONFIG_SER_TXTIMEOUT != -1
                        if (timer_clock() - start_time >= port->txtimeout)
                        {
@@ -158,14 +148,12 @@ static int ser_getchar(struct Serial *port)
 
                ticks_t start_time = timer_clock();
 #endif
+
                /* Wait while buffer is empty */
                do
                {
-                       wdt_reset();
-#if CONFIG_KERNEL && CONFIG_KERN_SCHED
-                       /* Give up timeslice to other processes. */
-                       proc_switch();
-#endif
+                       cpu_relax();
+
 #if CONFIG_SER_RXTIMEOUT != -1
                        if (timer_clock() - start_time >= port->rxtimeout)
                        {
@@ -354,13 +342,7 @@ static int ser_flush(struct KFile *fd)
         */
        while (!fifo_isempty(&fds->txfifo)
               || fds->hw->table->txSending(fds->hw))
-       {
-               #if CONFIG_KERNEL && CONFIG_KERN_SCHED
-                       /* Give up timeslice to other processes. */
-                       proc_switch();
-               #endif
-                       wdt_reset();
-       }
+               cpu_relax();
        return 0;
 }