/*************************************************************************** * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * * 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 * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef XSCALE_H #define XSCALE_H #include "target.h" #include "register.h" #include "armv4_5.h" #include "armv4_5_mmu.h" #define XSCALE_COMMON_MAGIC 0x58534341 typedef struct xscale_jtag_s { /* position in JTAG scan chain */ int chain_pos; /* IR length and instructions */ int ir_length; u32 dbgrx; u32 dbgtx; u32 ldic; u32 dcsr; } xscale_jtag_t; enum xscale_debug_reason { XSCALE_DBG_REASON_GENERIC, XSCALE_DBG_REASON_RESET, XSCALE_DBG_REASON_TB_FULL, }; typedef struct xscale_common_s { int common_magic; /* XScale registers (CP15, DBG) */ reg_cache_t *reg_cache; /* pxa250, pxa255, pxa27x, ixp42x, ... */ char *variant; xscale_jtag_t jtag_info; /* current state of the debug handler */ int handler_installed; int handler_running; u32 handler_address; /* target-endian buffers with exception vectors */ u32 low_vectors[8]; u32 high_vectors[8]; /* static low vectors */ u8 static_low_vectors_set; /* bit field with static vectors set by the user */ u8 static_high_vectors_set; /* bit field with static vectors set by the user */ u32 static_low_vectors[8]; u32 static_high_vectors[8]; /* DCache cleaning */ u32 cache_clean_address; /* whether hold_rst and ext_dbg_break should be set */ int hold_rst; int external_debug_break; /* breakpoint / watchpoint handling */ int force_hw_bkpts; int dbr_available; int dbr0_used; int dbr1_used; int ibcr_available; int ibcr0_used; int ibcr1_used; u32 arm_bkpt; u16 thumb_bkpt; u8 vector_catch; int trace_buffer_enabled; int trace_buffer_fill; int arch_debug_reason; /* armv4/5 common stuff */ armv4_5_common_t armv4_5_common; /* MMU/Caches */ armv4_5_mmu_common_t armv4_5_mmu; u32 cp15_control_reg; /* possible future enhancements that go beyond XScale common stuff */ void *arch_info; } xscale_common_t; typedef struct xscale_reg_s { int dbg_handler_number; target_t *target; } xscale_reg_t; enum { XSCALE_MAINID, /* 0 */ XSCALE_CACHETYPE, XSCALE_CTRL, XSCALE_AUXCTRL, XSCALE_TTB, XSCALE_DAC, XSCALE_FSR, XSCALE_FAR, XSCALE_PID, XSCALE_CPACCESS, XSCALE_IBCR0, /* 10 */ XSCALE_IBCR1, XSCALE_DBR0, XSCALE_DBR1, XSCALE_DBCON, XSCALE_TBREG, XSCALE_CHKPT0, XSCALE_CHKPT1, XSCALE_DCSR, XSCALE_TX, XSCALE_RX, /* 20 */ XSCALE_TXRXCTRL, }; #endif /* XSCALE_H */