From f7f37ea289f837077fd41f549ec367e597d64251 Mon Sep 17 00:00:00 2001
From: oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Tue, 24 Mar 2009 11:27:49 +0000
Subject: [PATCH] Hiroshi Ito <ito@mlb.co.jp> Linux for arm has arm generic
 debug option which send debug messages via DCC channel.

git-svn-id: svn://svn.berlios.de/openocd/trunk@1432 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 doc/openocd.texi            |  4 ++--
 src/target/target_request.c | 15 ++++++++++-----
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/doc/openocd.texi b/doc/openocd.texi
index d3e119cf3..c67e34b73 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -2871,9 +2871,9 @@ encoding of the [M4:M0] bits of the PSR.
 OpenOCD can handle certain target requests, currently debugmsg are only supported for arm7_9 and cortex_m3.
 See libdcc in the contrib dir for more details.
 @itemize @bullet
-@item @b{target_request debugmsgs} <@var{enable}|@var{disable}>
+@item @b{target_request debugmsgs} <@var{enable}|@var{disable}|@var{charmsg}>
 @cindex target_request debugmsgs
-@*Enable/disable target debugmsgs requests. debugmsgs enable messages to be sent to the debugger while the target is running.
+@*Enable/disable target debugmsgs requests. debugmsgs enable messages to be sent to the debugger while the target is running. @var{charmsg} recives the message like linux kernel ``Kernel low-level debugging via EmbeddedICE DCC channel'' option way.
 @end itemize
 
 @node JTAG Commands
diff --git a/src/target/target_request.c b/src/target/target_request.c
index b266fea5e..9c8551f52 100644
--- a/src/target/target_request.c
+++ b/src/target/target_request.c
@@ -39,6 +39,7 @@
 #include <string.h>
 
 command_t *target_request_cmd = NULL;
+static int charmsg_mode = 0;
 
 int target_asciimsg(target_t *target, u32 length)
 {
@@ -119,7 +120,11 @@ int target_hexmsg(target_t *target, int size, u32 length)
 int target_request(target_t *target, u32 request)
 {
 	target_req_cmd_t target_req_cmd = request & 0xff;
-	
+
+	if ( charmsg_mode ) {
+		target_charmsg(target, target_req_cmd );
+		return ERROR_OK;
+	}
 	switch (target_req_cmd)
 	{
 		case TARGET_REQ_TRACEMSG:
@@ -268,7 +273,7 @@ int handle_target_request_debugmsgs_command(struct command_context_s *cmd_ctx, c
 
 	if (argc > 0)
 	{
-		if (!strcmp(args[0], "enable"))
+		if (!strcmp(args[0], "enable") || !strcmp(args[0], "charmsg"))
 		{
 			/* don't register if this command context is already receiving */
 			if (!receiving)
@@ -276,6 +281,7 @@ int handle_target_request_debugmsgs_command(struct command_context_s *cmd_ctx, c
 				receiving = 1;
 				add_debug_msg_receiver(cmd_ctx, target);
 			}
+			charmsg_mode = !strcmp(args[0], "charmsg");
 		}
 		else if (!strcmp(args[0], "disable"))
 		{
@@ -288,13 +294,12 @@ int handle_target_request_debugmsgs_command(struct command_context_s *cmd_ctx, c
 		}
 		else
 		{
-			command_print(cmd_ctx, "usage: target_request debugmsgs ['enable'|'disable']");
+			command_print(cmd_ctx, "usage: target_request debugmsgs ['enable'|'disable'|'charmsg']");
 		}
 	}
 	
 	command_print(cmd_ctx, "receiving debug messages from current target %s",
-			(receiving) ? "enabled" : "disabled");
-	
+		      (receiving) ? (charmsg_mode?"charmsg":"enabled") : "disabled" );
 	return ERROR_OK;
 }
 
-- 
GitLab