Switch to new kernel config files.
[bertos.git] / bertos / drv / ser.c
index 0ab31aaa93e27437af693809ee903598eb295e8a..bd27486b189beea4bdf3a8506beb5936a1d6949c 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
 
 #include "ser.h"
 #include "wdt.h"
+#include "timer.h"
 #include "ser_p.h"
 
 #include "cfg/cfg_ser.h"
-#include "cfg/cfg_kern.h"
+#include "cfg/cfg_proc.h"
 #include <cfg/debug.h>
 
 #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.
  */
-#if !defined(CONFIG_KERNEL) || ((CONFIG_KERNEL != 0) && CONFIG_KERNEL != 1)
-       #error CONFIG_KERNEL must be set to either 0 or 1 in config.h
+#if !defined(CONFIG_KERN) || ((CONFIG_KERN != 0) && CONFIG_KERN != 1)
+       #error CONFIG_KERN must be set to either 0 or 1 in cfg_kern.h
 #endif
 #if !defined(CONFIG_SER_RXTIMEOUT)
-       #error CONFIG_SER_TXTIMEOUT missing in config.h
+       #error CONFIG_SER_TXTIMEOUT missing in cfg_ser.h
 #endif
 #if !defined(CONFIG_SER_RXTIMEOUT)
-       #error CONFIG_SER_RXTIMEOUT missing in config.h
+       #error CONFIG_SER_RXTIMEOUT missing in cfg_ser.h
 #endif
 #if !defined(CONFIG_SER_DEFBAUDRATE)
-       #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>
+       #error CONFIG_SER_DEFBAUDRATE missing in cfg_ser.h
 #endif
 
 
@@ -113,11 +107,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 +149,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)
                        {
@@ -210,7 +199,7 @@ int ser_getchar_nowait(struct Serial *fd)
  */
 static size_t ser_read(struct KFile *fd, void *_buf, size_t size)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
 
        size_t i = 0;
        char *buf = (char *)_buf;
@@ -235,7 +224,7 @@ static size_t ser_read(struct KFile *fd, void *_buf, size_t size)
  */
 static size_t ser_write(struct KFile *fd, const void *_buf, size_t size)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
        const char *buf = (const char *)_buf;
        size_t i = 0;
 
@@ -298,13 +287,13 @@ void ser_setparity(struct Serial *fd, int parity)
 
 static int ser_error(struct KFile *fd)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
        return ser_getstatus(fds);
 }
 
 static void ser_clearerr(struct KFile *fd)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
        ser_setstatus(fds, 0);
 }
 
@@ -346,7 +335,7 @@ void ser_purgeTx(struct Serial *fd)
  */
 static int ser_flush(struct KFile *fd)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
 
        /*
         * Wait until the FIFO becomes empty, and then until the byte currently in
@@ -354,13 +343,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;
 }
 
@@ -411,7 +394,7 @@ static struct Serial *ser_open(struct Serial *fd, unsigned int unit)
  */
 static int ser_close(struct KFile *fd)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
        Serial *port = fds;
 
        ASSERT(port->is_open);
@@ -436,7 +419,7 @@ static int ser_close(struct KFile *fd)
  */
 static struct KFile *ser_reopen(struct KFile *fd)
 {
-       Serial *fds = SERIAL(fd);
+       Serial *fds = SERIAL_CAST(fd);
 
        ser_close(fd);
        ser_open(fds, fds->unit);
@@ -469,7 +452,7 @@ void ser_init(struct Serial *fds, unsigned int unit)
  */
 static size_t spimaster_read(struct KFile *fd, void *_buf, size_t size)
 {
-       Serial *fd_spi = SERIAL(fd);
+       Serial *fd_spi = SERIAL_CAST(fd);
 
        ser_flush(&fd_spi->fd);
        ser_purgeRx(fd_spi);
@@ -500,7 +483,7 @@ static size_t spimaster_read(struct KFile *fd, void *_buf, size_t size)
  */
 static size_t spimaster_write(struct KFile *fd, const void *buf, size_t size)
 {
-       Serial *fd_spi = SERIAL(fd);
+       Serial *fd_spi = SERIAL_CAST(fd);
 
        ser_purgeRx(fd_spi);