X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Farm.h;h=ce8cbe193e8bf2bfdd3d2e259668ec1b9b5bf0ec;hb=1163435e19f316a4a97fd33f1467f5c1684db654;hp=36763b4a0539d36c296055d0517340934ff702b0;hpb=e7acbdf5dbfcea427fc8b0fc7e8dd2e1005a4cc8;p=openocd.git diff --git a/src/target/arm.h b/src/target/arm.h index 36763b4a05..ce8cbe193e 100644 --- a/src/target/arm.h +++ b/src/target/arm.h @@ -26,8 +26,8 @@ #ifndef ARM_H #define ARM_H -#include #include +#include "target.h" /** @@ -40,9 +40,17 @@ */ /** - * 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. */