X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fbitbang.h;h=577717ebd241a6ba8e1ab83e6d2fd0e453ffafd4;hp=77f69546118de802b078f3bcb746f735869fd70b;hb=HEAD;hpb=de0130a0aad83c1ef692ee4d68ab996a8668424d diff --git a/src/jtag/drivers/bitbang.h b/src/jtag/drivers/bitbang.h index 77f6954611..dc941796e2 100644 --- a/src/jtag/drivers/bitbang.h +++ b/src/jtag/drivers/bitbang.h @@ -1,40 +1,72 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + /*************************************************************************** * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * * Copyright (C) 2007,2008 Øyvind Harboe * * oyvind.harboe@zylin.com * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * 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., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef BITBANG_H -#define BITBANG_H +#ifndef OPENOCD_JTAG_DRIVERS_BITBANG_H +#define OPENOCD_JTAG_DRIVERS_BITBANG_H + +#include +#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 and return the value. */ + 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); + + /** Blink led (optional). */ + int (*blink)(int on); + + /** Sample SWDIO and return the value. */ + int (*swdio_read)(void); + + /** Set direction of SWDIO. */ + void (*swdio_drive)(bool on); + + /** Set SWCLK and SWDIO to the given value. */ + int (*swd_write)(int swclk, int swdio); + + /** Sleep for some number of microseconds. **/ + int (*sleep)(unsigned int microseconds); + + /** Force a flush. */ + int (*flush)(void); }; -int bitbang_execute_queue(void); +extern const struct swd_driver bitbang_swd; + +int bitbang_execute_queue(struct jtag_command *cmd_queue); extern struct bitbang_interface *bitbang_interface; -#endif /* BITBANG_H */ +#endif /* OPENOCD_JTAG_DRIVERS_BITBANG_H */