X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fbitbang.h;h=577717ebd241a6ba8e1ab83e6d2fd0e453ffafd4;hb=refs%2Fchanges%2F12%2F4312%2F9;hp=6b7d63aa78d819cae693213a5b667b36f7c22d13;hpb=08d4411b59dd8bd0e7d8009003b71d23acbf6eee;p=openocd.git diff --git a/src/jtag/drivers/bitbang.h b/src/jtag/drivers/bitbang.h index 6b7d63aa78..577717ebd2 100644 --- a/src/jtag/drivers/bitbang.h +++ b/src/jtag/drivers/bitbang.h @@ -16,25 +16,55 @@ * GNU General Public License for more details. * * * * 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., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + * along with this program. If not, see . * ***************************************************************************/ -#ifndef BITBANG_H -#define BITBANG_H +#ifndef OPENOCD_JTAG_DRIVERS_BITBANG_H +#define OPENOCD_JTAG_DRIVERS_BITBANG_H +#include + +typedef enum { + BB_LOW, + BB_HIGH, + BB_ERROR +} bb_value_t; + +/** Low level callbacks (for bitbang). + * + * Either read(), or sample() and read_sample() must be implemented. + * + * The sample functions allow an interface to batch a number of writes and + * sample requests together. Not waiting for a value to come back can greatly + * increase throughput. */ struct bitbang_interface { - /* low level callbacks (for bitbang) - */ - int (*read)(void); - void (*write)(int tck, int tms, int tdi); - void (*reset)(int trst, int srst); - void (*blink)(int on); + /** Sample TDO. */ + bb_value_t (*read)(void); + + /** The number of TDO samples that can be buffered up before the caller has + * to call read_sample. */ + size_t buf_size; + /** Sample TDO and put the result in a buffer. */ + int (*sample)(void); + /** Return the next unread value from the buffer. */ + bb_value_t (*read_sample)(void); + + /** Set TCK, TMS, and TDI to the given values. */ + int (*write)(int tck, int tms, int tdi); + int (*reset)(int trst, int srst); + int (*blink)(int on); + int (*swdio_read)(void); + void (*swdio_drive)(bool on); }; +const struct swd_driver bitbang_swd; + +extern bool swd_mode; + int bitbang_execute_queue(void); extern struct bitbang_interface *bitbang_interface; +void bitbang_switch_to_swd(void); +int bitbang_swd_switch_seq(enum swd_special_seq seq); -#endif /* BITBANG_H */ +#endif /* OPENOCD_JTAG_DRIVERS_BITBANG_H */