Include top-level headers from cfg/ subdir.
[bertos.git] / drv / ser_dsp56k.c
index 901362d8b7394bd0a4e94e86fc9975f9fa9e76d5..01767f7e503f4a3c9eb793e0c05482e2cda25ae0 100755 (executable)
 
 /*#*
  *#* $Log$
+ *#* Revision 1.12  2005/04/11 19:10:27  bernie
+ *#* Include top-level headers from cfg/ subdir.
+ *#*
+ *#* Revision 1.11  2005/01/25 07:42:04  bernie
+ *#* Simplify.
+ *#*
+ *#* Revision 1.10  2005/01/14 00:48:33  aleph
+ *#* Rename callbacks; SerialHardwareVT.txSending: New callback.
+ *#*
  *#* Revision 1.9  2004/12/08 09:42:55  bernie
  *#* Add support for multiplexed serial ports.
  *#*
@@ -40,7 +49,7 @@
 #include "ser.h"
 #include "ser_p.h"
 #include <drv/irq.h>
-#include <debug.h>
+#include <cfg/debug.h>
 #include <hw.h>
 #include <DSP56F807.h>
 
@@ -109,33 +118,36 @@ static inline void disable_rx_irq_bare(volatile struct REG_SCI_STRUCT* regs)
 static inline void disable_tx_irq(struct SerialHardware* _hw)
 {
        struct SCI* hw = (struct SCI*)_hw;
-       volatile struct REG_SCI_STRUCT* regs = hw->regs;
 
-       disable_tx_irq_bare(regs);
+       disable_tx_irq_bare(hw->regs);
 }
 
 static inline void disable_rx_irq(struct SerialHardware* _hw)
 {
        struct SCI* hw = (struct SCI*)_hw;
-       volatile struct REG_SCI_STRUCT* regs = hw->regs;
 
-       disable_rx_irq_bare(regs);
+       disable_rx_irq_bare(hw->regs);
 }
 
 static inline void enable_tx_irq(struct SerialHardware* _hw)
 {
        struct SCI* hw = (struct SCI*)_hw;
-       volatile struct REG_SCI_STRUCT* regs = hw->regs;
 
-       enable_tx_irq_bare(regs);
+       enable_tx_irq_bare(hw->regs);
 }
 
 static inline void enable_rx_irq(struct SerialHardware* _hw)
 {
        struct SCI* hw = (struct SCI*)_hw;
-       volatile struct REG_SCI_STRUCT* regs = hw->regs;
 
-       enable_rx_irq_bare(regs);
+       enable_rx_irq_bare(hw->regs);
+}
+
+static inline bool tx_irq_enabled(struct SerialHardware* _hw)
+{
+       struct SCI* hw = (struct SCI*)_hw;
+
+       return (hw->regs->CR & REG_SCI_CR_TEIE);
 }
 
 static void tx_isr(const struct SCI *hw)
@@ -218,16 +230,12 @@ static void cleanup(struct SerialHardware* _hw)
 {
        struct SCI* hw = (struct SCI*)_hw;
 
-       // Wait until we finish sending everything
-       ser_drain(hw->serial);
-       ser_purge(hw->serial);
-
        // Uninstall the ISRs
        disable_rx_irq(_hw);
        disable_tx_irq(_hw);
        irq_uninstall(hw->irq_tx);
        irq_uninstall(hw->irq_rx);
-} 
+}
 
 static void setbaudrate(struct SerialHardware* _hw, unsigned long rate)
 {
@@ -295,9 +303,10 @@ static const struct SerialHardwareVT SCI_VT =
 {
        .init = init,
        .cleanup = cleanup,
-       .setbaudrate = setbaudrate,
-       .setparity = setparity,
-       .enabletxirq = enable_tx_irq,
+       .setBaudrate = setbaudrate,
+       .setParity = setparity,
+       .txStart = enable_tx_irq,
+       .txSending = tx_irq_enabled,
 };
 
 #if CONFIG_SER_MULTI
@@ -305,9 +314,10 @@ static const struct SerialHardwareVT SCI_MULTI_VT =
 {
        .init = init_lock,
        .cleanup = cleanup_unlock,
-       .setbaudrate = setbaudrate,
-       .setparity = setparity,
-       .enabletxirq = enable_tx_irq,
+       .setBaudrate = setbaudrate,
+       .setParity = setparity,
+       .txStart = enable_tx_irq,
+       .txSending = tx_irq_enabled,
 };
 #endif /* CONFIG_SER_MULTI */