rtos: Rewrite rtos_create() for readability
[fw/openocd] / contrib / libdcc / dcc_stdio.c
index 3d8dfc7141f66c819685897b5ec663656fc269aa..356ddbdaf2667f3ee2b03c3d0a420db44b3991c9 100644 (file)
 
 #include "dcc_stdio.h"
 
-#if defined(__ARM_ARCH_7M__)
+#define TARGET_REQ_TRACEMSG                                    0x00
+#define TARGET_REQ_DEBUGMSG_ASCII                      0x01
+#define TARGET_REQ_DEBUGMSG_HEXMSG(size)       (0x01 | ((size & 0xff) << 8))
+#define TARGET_REQ_DEBUGCHAR                           0x02
 
-/* we use the cortex_m3 DCRDR reg to simulate a arm7_9 dcc channel
+#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_6SM__)
+
+/* we use the System Control Block DCRDR reg to simulate a arm7_9 dcc channel
  * DCRDR[7:0] is used by target for status
  * DCRDR[15:8] is used by target for write buffer
  * DCRDR[23:16] is used for by host for status
  * DCRDR[31:24] is used for by host for write buffer */
 
-#define NVIC_DBG_DATA_R         (*((volatile unsigned short *)0xE000EDF8))
-
-#define TARGET_REQ_TRACEMSG                 0x00
-#define TARGET_REQ_DEBUGMSG_ASCII           0x01
-#define TARGET_REQ_DEBUGMSG_HEXMSG(size)    (0x01 | ((size & 0xff)  << 8))
-#define TARGET_REQ_DEBUGCHAR                0x02
+#define NVIC_DBG_DATA_R                (*((volatile unsigned short *)0xE000EDF8))
 
 #define        BUSY    1
 
 void dbg_write(unsigned long dcc_data)
 {
        int len = 4;
-       
+
        while (len--)
        {
                /* wait for data ready */
                while (NVIC_DBG_DATA_R & BUSY);
-               
+
                /* write our data and set write flag - tell host there is data*/
                NVIC_DBG_DATA_R = (unsigned short)(((dcc_data & 0xff) << 8) | BUSY);
                dcc_data >>= 8;
        }
 }
 
-#elif defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5TE__)
-                                       
+#elif defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5T__)
+
 void dbg_write(unsigned long dcc_data)
 {
        unsigned long dcc_status;
-       
+
        do {
                asm volatile("mrc p14, 0, %0, c0, c0" : "=r" (dcc_status));
        } while (dcc_status & 0x2);
-       
+
        asm volatile("mcr p14, 0, %0, c1, c0" : : "r" (dcc_data));
 }
 
@@ -74,18 +74,18 @@ void dbg_write(unsigned long dcc_data)
 #endif
 
 void dbg_trace_point(unsigned long number)
-{      
+{
        dbg_write(TARGET_REQ_TRACEMSG | (number << 8));
 }
 
 void dbg_write_u32(const unsigned long *val, long len)
-{      
+{
        dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(4) | ((len & 0xffff) << 16));
 
        while (len > 0)
        {
                dbg_write(*val);
-               
+
                val++;
                len--;
        }
@@ -94,23 +94,23 @@ void dbg_write_u32(const unsigned long *val, long len)
 void dbg_write_u16(const unsigned short *val, long len)
 {
        unsigned long dcc_data;
-               
+
        dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(2) | ((len & 0xffff) << 16));
 
        while (len > 0)
        {
-               dcc_data = val[0] 
+               dcc_data = val[0]
                        | ((len > 1) ? val[1] << 16: 0x0000);
-               
+
                dbg_write(dcc_data);
-               
+
                val += 2;
                len -= 2;
        }
 }
 
 void dbg_write_u8(const unsigned char *val, long len)
-{      
+{
        unsigned long dcc_data;
 
        dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(1) | ((len & 0xffff) << 16));
@@ -121,9 +121,9 @@ void dbg_write_u8(const unsigned char *val, long len)
                        | ((len > 1) ? val[1] << 8 : 0x00)
                        | ((len > 2) ? val[2] << 16 : 0x00)
                        | ((len > 3) ? val[3] << 24 : 0x00);
-               
+
                dbg_write(dcc_data);
-               
+
                val += 4;
                len -= 4;
        }
@@ -133,11 +133,11 @@ void dbg_write_str(const char *msg)
 {
        long len;
        unsigned long dcc_data;
-       
+
        for (len = 0; msg[len] && (len < 65536); len++);
-       
+
        dbg_write(TARGET_REQ_DEBUGMSG_ASCII | ((len & 0xffff) << 16));
-       
+
        while (len > 0)
        {
                dcc_data = msg[0]
@@ -145,13 +145,13 @@ void dbg_write_str(const char *msg)
                        | ((len > 2) ? msg[2] << 16 : 0x00)
                        | ((len > 3) ? msg[3] << 24 : 0x00);
                dbg_write(dcc_data);
-               
+
                msg += 4;
                len -= 4;
        }
 }
 
 void dbg_write_char(char msg)
-{      
+{
        dbg_write(TARGET_REQ_DEBUGCHAR | ((msg & 0xff) << 16));
 }