summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/debug.c31
-rw-r--r--firmware/export/config-ifp7xx.h2
-rw-r--r--firmware/export/debug.h5
-rw-r--r--firmware/export/gdb_api.h35
4 files changed, 73 insertions, 0 deletions
diff --git a/firmware/debug.c b/firmware/debug.c
index ba19a96..4031ba4 100644
--- a/firmware/debug.c
+++ b/firmware/debug.c
@@ -22,6 +22,9 @@
#include <stdarg.h>
#include "config.h"
#include "cpu.h"
+#ifdef HAVE_GDB_API
+#include "gdb_api.h"
+#endif
#ifdef DEBUG
static char debugmembuf[200];
@@ -196,6 +199,34 @@ static void debug(const char *msg)
putpacket(debugbuf);
}
#endif /* SH7034 */
+
+#ifdef HAVE_GDB_API
+static void *get_api_function(int n)
+{
+ struct gdb_api *api = (struct gdb_api *)GDB_API_ADDRESS;
+ if (api->magic == GDB_API_MAGIC)
+ return api->func[n];
+ else
+ return NULL;
+}
+
+void breakpoint(void)
+{
+ void (*f)(void) = get_api_function(0);
+ if (f) (*f)();
+}
+
+static void debug(char *msg)
+{
+ void (*f)(char *) = get_api_function(1);
+ if (f) (*f)(msg);
+}
+
+void debug_init()
+{
+}
+
+#endif /* HAVE_GDB_API */
#endif /* end of DEBUG section */
#ifdef __GNUC__
diff --git a/firmware/export/config-ifp7xx.h b/firmware/export/config-ifp7xx.h
index 086b455..9e5a432 100644
--- a/firmware/export/config-ifp7xx.h
+++ b/firmware/export/config-ifp7xx.h
@@ -84,6 +84,8 @@
#define USB_ISP1582
+#define HAVE_GDB_API
+
/* Virtual LED (icon) */
#define CONFIG_LED LED_VIRTUAL
diff --git a/firmware/export/debug.h b/firmware/export/debug.h
index 0506ff1..52b6687 100644
--- a/firmware/export/debug.h
+++ b/firmware/export/debug.h
@@ -31,6 +31,11 @@ extern void ldebugf(const char* file, int line, const char *fmt, ...);
#define LDEBUGF(...) ldebugf(__FILE__, __LINE__, __VA_ARGS__)
#else
#if defined(DEBUG)
+
+#ifdef HAVE_GDB_API
+void breakpoint(void);
+#endif
+
#define DEBUGF debugf
#define LDEBUGF debugf
#else
diff --git a/firmware/export/gdb_api.h b/firmware/export/gdb_api.h
new file mode 100644
index 0000000..896c8d3
--- /dev/null
+++ b/firmware/export/gdb_api.h
@@ -0,0 +1,35 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Tomasz Malesinski
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#ifndef _GDB_API_H_
+#define _GDB_API_H_
+
+#include "config.h"
+
+#define GDB_API_MAGIC 0x6db570b
+#ifdef IRIVER_IFP7XX_SERIES
+#define GDB_API_ADDRESS 0x24006000
+#endif
+
+struct gdb_api
+{
+ unsigned long magic;
+ void *func[];
+};
+#endif