target: add generic Xtensa LX support
[fw/openocd] / src / target / xscale.h
index 49d4c71eccf445defdb126e89ab635461ee0066a..36a69bca3998b3bc10b6c1751058d1f4362756bf 100644 (file)
@@ -1,33 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
  *   Copyright (C) 2007,2008 Ã˜yvind Harboe                                 *
  *   oyvind.harboe@zylin.com                                               *
- *                                                                         *
- *   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
+
+#ifndef OPENOCD_TARGET_XSCALE_H
+#define OPENOCD_TARGET_XSCALE_H
 
 #include "arm.h"
 #include "armv4_5_mmu.h"
 #include "trace.h"
 
-#define        XSCALE_COMMON_MAGIC 0x58534341
+#define        XSCALE_COMMON_MAGIC 0x58534341U
 
 /* These four JTAG instructions are architecturally defined.
  * Lengths are core-specific; originally 5 bits, later 7.
 #define        XSCALE_IXP4XX_PXA2XX    0x0
 #define        XSCALE_PXA3XX           0x4
 
-enum xscale_debug_reason
-{
+enum xscale_debug_reason {
        XSCALE_DBG_REASON_GENERIC,
        XSCALE_DBG_REASON_RESET,
        XSCALE_DBG_REASON_TB_FULL,
 };
 
-enum xscale_trace_entry_type
-{
+enum xscale_trace_entry_type {
        XSCALE_TRACE_MESSAGE = 0x0,
        XSCALE_TRACE_ADDRESS = 0x1,
 };
 
-struct xscale_trace_entry
-{
+struct xscale_trace_entry {
        uint8_t data;
        enum xscale_trace_entry_type type;
 };
 
-struct xscale_trace_data
-{
+struct xscale_trace_data {
        struct xscale_trace_entry *entries;
        int depth;
        uint32_t chkpt0;
@@ -71,30 +55,27 @@ struct xscale_trace_data
        struct xscale_trace_data *next;
 };
 
-enum trace_mode
-{
-   XSCALE_TRACE_DISABLED,
-   XSCALE_TRACE_FILL,
-   XSCALE_TRACE_WRAP
+enum trace_mode {
+       XSCALE_TRACE_DISABLED,
+       XSCALE_TRACE_FILL,
+       XSCALE_TRACE_WRAP
 };
 
-struct xscale_trace
-{
+struct xscale_trace {
        struct image *image;                                    /* source for target opcodes */
        struct xscale_trace_data *data;         /* linked list of collected trace data */
        int buffer_fill;                                /* maximum number of trace runs to read */
-    int fill_counter;                          /* running count during trace collection */
-    enum trace_mode mode;
+       int fill_counter;                               /* running count during trace collection */
+       enum trace_mode mode;
        enum arm_state core_state;      /* current core state (ARM, Thumb) */
 };
 
-struct xscale_common
-{
+struct xscale_common {
+       unsigned int common_magic;
+
        /* armv4/5 common stuff */
        struct arm arm;
 
-       int common_magic;
-
        /* XScale registers (CP15, DBG) */
        struct reg_cache *reg_cache;
 
@@ -147,18 +128,15 @@ struct xscale_common
 static inline struct xscale_common *
 target_to_xscale(struct target *target)
 {
-       return container_of(target->arch_info, struct xscale_common,
-                       arm);
+       return container_of(target->arch_info, struct xscale_common, arm);
 }
 
-struct xscale_reg
-{
+struct xscale_reg {
        int dbg_handler_number;
        struct target *target;
 };
 
-enum
-{
+enum {
        XSCALE_MAINID,          /* 0 */
        XSCALE_CACHETYPE,
        XSCALE_CTRL,
@@ -185,4 +163,15 @@ enum
 
 #define ERROR_XSCALE_NO_TRACE_DATA     (-700)
 
-#endif /* XSCALE_H */
+/* DCSR bit and field definitions */
+#define DCSR_TR        (1 << 16)
+#define DCSR_TU        (1 << 17)
+#define DCSR_TS        (1 << 18)
+#define DCSR_TA        (1 << 19)
+#define DCSR_TD        (1 << 20)
+#define DCSR_TI        (1 << 22)
+#define DCSR_TF        (1 << 23)
+#define DCSR_TRAP_MASK \
+       (DCSR_TF | DCSR_TI | DCSR_TD | DCSR_TA | DCSR_TS | DCSR_TU | DCSR_TR)
+
+#endif /* OPENOCD_TARGET_XSCALE_H */