X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fswd.h;h=b75a83e369cdc81205d44ac62fbf62086a9405d1;hb=36772a7ed0c31a99c721d1ea9131a8ecc56a263d;hp=9a591f38c6d96dd994e3deed1c6fb51f1a77cc28;hpb=38f8e5eefac748a30a4bf5e9d7a7313c8ae0e4e9;p=openocd.git diff --git a/src/jtag/swd.h b/src/jtag/swd.h index 9a591f38c6..b75a83e369 100644 --- a/src/jtag/swd.h +++ b/src/jtag/swd.h @@ -14,9 +14,12 @@ * 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 SWD_H +#define SWD_H + /* Bits in SWD command packets, written from host to target * first bit on the wire is START */ @@ -29,17 +32,6 @@ #define SWD_CMD_PARK (0 << 7) /* not driven by host (pull high) */ /* followed by TRN, 3-bits of ACK, TRN */ -/* pbit16 holds precomputed parity bits for each nibble */ -#define pbit(parity, nibble) (parity << nibble) - -static const uint16_t pbit16 = - pbit(0, 0) | pbit(1, 1) | pbit(1, 2) | pbit(0, 3) - | pbit(1, 4) | pbit(0, 5) | pbit(0, 6) | pbit(1, 7) - | pbit(1, 8) | pbit(0, 9) | pbit(0, 0xa) | pbit(1, 0xb) - | pbit(0, 0xc) | pbit(1, 0xd) | pbit(1, 0xe) | pbit(0, 0xf); - -#define nibble_parity(nibble) (pbit16 & pbit(1, nibble)) - /** * Construct a "cmd" byte, in lSB bit order, which swd_driver.read_reg() * and swd_driver.write_reg() methods will use directly. @@ -51,7 +43,7 @@ static inline uint8_t swd_cmd(bool is_read, bool is_ap, uint8_t regnum) | ((regnum & 0xc) << 1); /* 8 cmd bits 4:1 may be set */ - if (nibble_parity(cmd >> 1)) + if (parity_u32(cmd)) cmd |= SWD_CMD_PARITY; /* driver handles START, STOP, and TRN */ @@ -63,7 +55,7 @@ static inline uint8_t swd_cmd(bool is_read, bool is_ap, uint8_t regnum) /* * FOR NOW ... SWD driver ops are synchronous and return ACK - * status ... no quueueing. + * status ... no queuing. * * Individual ops are request/response, and fast-fail permits much * better fault handling. Upper layers may queue if desired. @@ -107,12 +99,6 @@ struct swd_driver { */ int (*write_reg)(uint8_t cmd, uint32_t value); - /* XXX START WITH enough to: - * init (synch mode, WCR) - * for async, TRN > 1 - * read IDCODE from DP - */ - /** * Configures data collection from the Single-wire * trace (SWO) signal. @@ -128,4 +114,10 @@ struct swd_driver { int *(*trace)(bool swo); }; +int swd_init_reset(struct command_context *cmd_ctx); +void swd_add_reset(int req_srst); + bool transport_is_swd(void); +bool transport_is_cmsis_dap(void); + +#endif /* SWD_H */