diff options
Diffstat (limited to 'fpga/xilinx/programmer/dependencies/libxsvf/scan.c')
| -rw-r--r-- | fpga/xilinx/programmer/dependencies/libxsvf/scan.c | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/fpga/xilinx/programmer/dependencies/libxsvf/scan.c b/fpga/xilinx/programmer/dependencies/libxsvf/scan.c new file mode 100644 index 0000000..cb24e56 --- /dev/null +++ b/fpga/xilinx/programmer/dependencies/libxsvf/scan.c @@ -0,0 +1,58 @@ +/* + *  Lib(X)SVF  -  A library for implementing SVF and XSVF JTAG players + * + *  Copyright (C) 2009  RIEGL Research ForschungsGmbH + *  Copyright (C) 2009  Clifford Wolf <clifford@clifford.at> + *   + *  Permission to use, copy, modify, and/or distribute this software for any + *  purpose with or without fee is hereby granted, provided that the above + *  copyright notice and this permission notice appear in all copies. + *   + *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "libxsvf.h" + +int libxsvf_scan(struct libxsvf_host *h) +{ +	int i, j; + +	if (libxsvf_tap_walk(h, LIBXSVF_TAP_RESET) < 0) +		return -1; + +	if (libxsvf_tap_walk(h, LIBXSVF_TAP_DRSHIFT) < 0) +		return -1; + +	for (i=0; i<256; i++) +	{ +		int bit = LIBXSVF_HOST_PULSE_TCK(0, 1, -1, 0, 1); + +		if (bit < 0) +			return -1; + +		if (bit == 0) { +			LIBXSVF_HOST_REPORT_DEVICE(0); +		} else { +			unsigned long idcode = 1; +			for (j=1; j<32; j++) { +				int bit = LIBXSVF_HOST_PULSE_TCK(0, 1, -1, 0, 1); +				if (bit < 0) +					return -1; +				idcode |= ((unsigned long)bit) << j; +			} +			if (idcode == 0xffffffff) +				break; +			LIBXSVF_HOST_REPORT_DEVICE(idcode); +		} +	} + +	return 0; +} + | 
