X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Farm_adi_v5.h;h=638fc4eac538fb7b25ce10d6f381969d812bc250;hb=2aada5b8d9869ebc69984223710253ba905d61cd;hp=7f1ebf5ef25775e5d157e949ee09e0ad9d3a074e;hpb=4e47519f6c519b792297efaa482852cd9eef554a;p=openocd.git diff --git a/src/target/arm_adi_v5.h b/src/target/arm_adi_v5.h index 7f1ebf5ef2..638fc4eac5 100644 --- a/src/target/arm_adi_v5.h +++ b/src/target/arm_adi_v5.h @@ -116,6 +116,7 @@ /* 30:24 - implementation-defined! */ #define CSW_HPROT (1 << 25) /* ? */ #define CSW_MASTER_DEBUG (1 << 29) /* ? */ +#define CSW_SPROT (1 << 30) #define CSW_DBGSWENABLE (1 << 31) /** @@ -141,6 +142,7 @@ struct adiv5_dap { /* Control config */ uint32_t dp_ctrl_stat; + uint32_t apcsw[256]; uint32_t apsel; /** @@ -216,6 +218,9 @@ struct dap_ops { /** AP register write. */ int (*queue_ap_write)(struct adiv5_dap *dap, unsigned reg, uint32_t data); + /** AP read block. */ + int (*queue_ap_read_block)(struct adiv5_dap *dap, unsigned reg, + uint32_t blocksize, uint8_t *buffer); /** AP operation abort. */ int (*queue_ap_abort)(struct adiv5_dap *dap, uint8_t *ack); @@ -321,6 +326,24 @@ static inline int dap_queue_ap_write(struct adiv5_dap *dap, return dap->ops->queue_ap_write(dap, reg, data); } +/** + * Queue an AP block read. + * + * @param dap The DAP used for reading. + * @param reg The number of the AP register being read. + * @param blocksize The number of the AP register being read. + * @param buffer Pointer saying where to store the data + * (in host endianness). + * + * @return ERROR_OK for success, else a fault code. + */ +static inline int dap_queue_ap_read_block(struct adiv5_dap *dap, + unsigned reg, unsigned blocksize, uint8_t *buffer) +{ + assert(dap->ops != NULL); + return dap->ops->queue_ap_read_block(dap, reg, blocksize, buffer); +} + /** * Queue an AP abort operation. The current AP transaction is aborted, * including any update of the transaction counter. The AP is left in