ULINK driver: Implement command to manually force downloading firmware image from...
[fw/openocd] / src / target / arm.h
index 36763b4a0539d36c296055d0517340934ff702b0..ce8cbe193e8bf2bfdd3d2e259668ec1b9b5bf0ec 100644 (file)
@@ -26,8 +26,8 @@
 #ifndef ARM_H
 #define ARM_H
 
-#include <target/target.h>
 #include <helper/command.h>
+#include "target.h"
 
 
 /**
  */
 
 /**
- * These numbers match the five low bits of the *PSR registers on
+ * Represent state of an ARM core.
+ *
+ * Most numbers match the five low bits of the *PSR registers on
  * "classic ARM" processors, which build on the ARMv4 processor
  * modes and register set.
+ *
+ * ARM_MODE_ANY is a magic value, often used as a wildcard.
+ *
+ * Only the microcontroller cores (ARMv6-M, ARMv7-M) support ARM_MODE_THREAD,
+ * ARM_MODE_USER_THREAD, and ARM_MODE_HANDLER.  Those are the only modes
+ * they support.
  */
 enum arm_mode {
        ARM_MODE_USR = 16,
@@ -53,6 +61,11 @@ enum arm_mode {
        ARM_MODE_MON = 26,
        ARM_MODE_UND = 27,
        ARM_MODE_SYS = 31,
+
+       ARM_MODE_THREAD,
+       ARM_MODE_USER_THREAD,
+       ARM_MODE_HANDLER,
+
        ARM_MODE_ANY = -1
 };
 
@@ -67,8 +80,6 @@ enum arm_state {
        ARM_STATE_THUMB_EE,
 };
 
-extern const char *arm_state_strings[];
-
 #define ARM_COMMON_MAGIC 0x0A450A45
 
 /**
@@ -82,6 +93,9 @@ struct arm {
        int common_magic;
        struct reg_cache *core_cache;
 
+       /** Handle to the PC; valid in all core modes. */
+       struct reg *pc;
+
        /** Handle to the CPSR; valid in all core modes. */
        struct reg *cpsr;
 
@@ -96,6 +110,8 @@ struct arm {
         * ARM_MODE_ANY indicates the standard set of 37 registers,
         * seen on for example ARM7TDMI cores.  ARM_MODE_MON indicates three
         * more registers are shadowed, for "Secure Monitor" mode.
+        * ARM_MODE_THREAD indicates a microcontroller profile core,
+        * which only shadows SP.
         */
        enum arm_mode core_type;
 
@@ -114,6 +130,8 @@ struct arm {
        /** Value to be returned by semihosting SYS_ERRNO request. */
        int semihosting_errno;
 
+       int (*setup_semihosting)(struct target *target, int enable);
+
        /** Backpointer to the target. */
        struct target *target;
 
@@ -147,6 +165,12 @@ struct arm {
                        uint32_t value);
 
        void *arch_info;
+
+       /** For targets conforming to ARM Debug Interface v5,
+        * this handle references the Debug Access Port (DAP)
+        * used to make requests to the target.
+        */
+       struct adiv5_dap *dap;
 };
 
 /** Convert target handle to generic ARM target state handle. */