/***************************************************************************
- * Copyright (C) 2007-2008 by Øyvind Harboe *
+ * Copyright (C) 2007-2010 by Øyvind Harboe *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#include <cyg/hal/hal_io.h> // low level i/o
-
-//#define VERBOSE(a) a
-#define VERBOSE(a)
-
/* used to test manual mode */
#define TEST_MANUAL() 0
+#define VERBOSE(a)
-#if 0
-int diag_printf(const char *fmt, ...);
-#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b); diag_printf("poke 0x%08x,0x%08x\n", a, b)
-#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b); diag_printf("peek 0x%08x = 0x%08x\n", a, b)
-#else
-#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b)
+#if BUILD_ZY1000_MASTER
+
+#if BUILD_ECOSBOARD
+#include <cyg/hal/hal_io.h> // low level i/o
+#include <cyg/hal/hal_intr.h> // low level i/o
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b)
+#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b)
+#else
+#define ZY1000_PEEK(a, b) do {b = *( ( volatile uint32_t *)(a) );} while (0)
+#define ZY1000_POKE(a, b) do {*( ( volatile uint32_t *)(a) ) = b;} while (0)
+extern volatile void *zy1000_jtag_master;
+#define ZY1000_JTAG_BASE ((unsigned long)zy1000_jtag_master)
#endif
+#else
+
+/* redirect this to TCP/IP */
+#define ZY1000_JTAG_BASE 0
+extern void zy1000_tcpout(uint32_t address, uint32_t data);
+extern uint32_t zy1000_tcpin(uint32_t address);
+#define ZY1000_PEEK(a, b) b=zy1000_tcpin(a)
+#define ZY1000_POKE(a, b) zy1000_tcpout(a, b)
+
+#endif
+
+
+
+#if BUILD_ZY1000_MASTER
// FIFO empty?
static __inline__ void waitIdle(void)
{
- cyg_uint32 empty;
+ uint32_t empty;
do
{
ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty);
} while ((empty & 0x100) == 0);
}
+static __inline__ void zy1000_flush_readqueue(void)
+{
+ /* Not used w/hardware fifo */
+}
+static __inline__ void zy1000_flush_callbackqueue(void)
+{
+ /* Not used w/hardware fifo */
+}
+#else
+extern void waitIdle(void);
+void zy1000_flush_readqueue(void);
+void zy1000_flush_callbackqueue(void);
+void zy1000_jtag_add_callback4(jtag_callback_t callback, jtag_callback_data_t data0, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3);
+void zy1000_jtag_add_callback(jtag_callback1_t callback, jtag_callback_data_t data0);
+#endif
+
static __inline__ void waitQueue(void)
{
// waitIdle();
}
-static void sampleShiftRegister(void)
+static __inline__ void sampleShiftRegister(void)
{
#if 0
- cyg_uint32 dummy;
+ uint32_t dummy;
waitIdle();
ZY1000_PEEK(ZY1000_JTAG_BASE + 0xc, dummy);
#endif
}
-/* -O3 will inline this for us */
-static void setCurrentState(enum tap_state state)
+static __inline__ void setCurrentState(enum tap_state state)
{
- cyg_uint32 a;
+ uint32_t a;
a = state;
int repeat = 0;
if (state == TAP_RESET)
* Enter state and cause repeat transitions *out* of that state. So if the endState != state, then
* the transition from state to endState counts as a transition out of state.
*/
-static __inline__ void shiftValueInner(const enum tap_state state, const enum tap_state endState, int repeat, cyg_uint32 value)
+static __inline__ void shiftValueInner(const enum tap_state state, const enum tap_state endState, int repeat, uint32_t value)
{
- cyg_uint32 a,b;
+ uint32_t a,b;
a = state;
b = endState;
waitQueue();
-static __inline__ void interface_jtag_add_dr_out_core(struct jtag_tap *struct targetap,
+static __inline__ void interface_jtag_add_dr_out_core(struct jtag_tap *target_tap,
int num_fields,
const int *num_bits,
const uint32_t *value,
{
pause_state = end_state;
}
- if (tap == struct targetap)
+ if (tap == target_tap)
{
int j;
for (j = 0; j < (num_fields-1); j++)
}
}
-static __inline__ void interface_jtag_add_dr_out(struct jtag_tap *struct targetap,
+static __inline__ void interface_jtag_add_dr_out(struct jtag_tap *target_tap,
int num_fields,
const int *num_bits,
const uint32_t *value,
shiftValueInner(TAP_DRSHIFT, end_state, num_bits[1], value[1]);
} else
{
- interface_jtag_add_dr_out_core(struct targetap, num_fields, num_bits, value, end_state);
+ interface_jtag_add_dr_out_core(target_tap, num_fields, num_bits, value, end_state);
}
}
+#if BUILD_ZY1000_MASTER
#define interface_jtag_add_callback(callback, in) callback(in)
-
#define interface_jtag_add_callback4(callback, in, data1, data2, data3) jtag_set_error(callback(in, data1, data2, data3))
+#else
+#define interface_jtag_add_callback(callback, in) zy1000_jtag_add_callback(callback, in)
+#define interface_jtag_add_callback4(callback, in, data1, data2, data3) zy1000_jtag_add_callback4(callback, in, data1, data2, data3)
+#endif