Clean up many C99 integer types format specifiers
[fw/openocd] / src / target / arm_adi_v5.h
index 7f1ebf5ef25775e5d157e949ee09e0ad9d3a074e..f5c185c92d4350b67631141be79baa844d5ef86f 100644 (file)
@@ -18,7 +18,7 @@
  *   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.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
 
 #ifndef ARM_ADI_V5_H
@@ -60,8 +60,8 @@
 #define DP_SELECT              0x8             /* JTAG: r/w; SWD: write */
 #define DP_RDBUFF              0xC             /* read-only */
 
-#define WCR_TO_TRN(wcr) (1 + (3 & ((wcr)) >> 8))       /* 1..4 clocks */
-#define WCR_TO_PRESCALE(wcr) (7 & ((wcr)))             /* impl defined */
+#define WCR_TO_TRN(wcr) ((uint32_t)(1 + (3 & ((wcr)) >> 8)))   /* 1..4 clocks */
+#define WCR_TO_PRESCALE(wcr) ((uint32_t)(7 & ((wcr))))         /* impl defined */
 
 /* Fields of the DP's AP ABORT register */
 #define DAPABORT               (1 << 0)
 /* 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;
 
        /**
@@ -184,6 +186,9 @@ struct adiv5_dap {
 
        /* Size of TAR autoincrement block, ARM ADI Specification requires at least 10 bits */
        uint32_t tar_autoincr_block;
+
+       /* true if packed transfers are supported by the MEM-AP */
+       bool packed_transfers;
 };
 
 /**
@@ -216,6 +221,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 +329,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
@@ -384,6 +410,8 @@ int mem_ap_read_buf_u16(struct adiv5_dap *swjdp,
                uint8_t *buffer, int count, uint32_t address);
 int mem_ap_read_buf_u32(struct adiv5_dap *swjdp,
                uint8_t *buffer, int count, uint32_t address, bool addr_incr);
+int mem_ap_read(struct adiv5_dap *dap, uint8_t *buffer, uint32_t size,
+               uint32_t count, uint32_t address, bool addrinc);
 
 int mem_ap_write_buf_u8(struct adiv5_dap *swjdp,
                const uint8_t *buffer, int count, uint32_t address);
@@ -391,6 +419,9 @@ int mem_ap_write_buf_u16(struct adiv5_dap *swjdp,
                const uint8_t *buffer, int count, uint32_t address);
 int mem_ap_write_buf_u32(struct adiv5_dap *swjdp,
                const uint8_t *buffer, int count, uint32_t address, bool addr_incr);
+int mem_ap_write(struct adiv5_dap *dap, const uint8_t *buffer, uint32_t size,
+               uint32_t count, uint32_t address, bool addrinc);
+
 
 /* Queued MEM-AP memory mapped single word transfers with selection of ap */
 int mem_ap_sel_read_u32(struct adiv5_dap *swjdp, uint8_t ap,