Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/*
  2 * altera-jtag.h
  3 *
  4 * altera FPGA driver
  5 *
  6 * Copyright (C) Altera Corporation 1998-2001
  7 * Copyright (C) 2010 NetUP Inc.
  8 * Copyright (C) 2010 Igor M. Liplianin <liplianin@netup.ru>
  9 *
 10 * This program is free software; you can redistribute it and/or modify
 11 * it under the terms of the GNU General Public License as published by
 12 * the Free Software Foundation; either version 2 of the License, or
 13 * (at your option) any later version.
 14 *
 15 * This program is distributed in the hope that it will be useful,
 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 18 *
 19 * GNU General Public License for more details.
 20 *
 21 * You should have received a copy of the GNU General Public License
 22 * along with this program; if not, write to the Free Software
 23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 24 */
 25
 26#ifndef ALTERA_JTAG_H
 27#define ALTERA_JTAG_H
 28
 29/* Function Prototypes */
 30enum altera_jtag_state {
 31	ILLEGAL_JTAG_STATE = -1,
 32	RESET = 0,
 33	IDLE = 1,
 34	DRSELECT = 2,
 35	DRCAPTURE = 3,
 36	DRSHIFT = 4,
 37	DREXIT1 = 5,
 38	DRPAUSE = 6,
 39	DREXIT2 = 7,
 40	DRUPDATE = 8,
 41	IRSELECT = 9,
 42	IRCAPTURE = 10,
 43	IRSHIFT = 11,
 44	IREXIT1 = 12,
 45	IRPAUSE = 13,
 46	IREXIT2 = 14,
 47	IRUPDATE = 15
 48
 49};
 50
 51struct altera_jtag {
 52	/* Global variable to store the current JTAG state */
 53	enum altera_jtag_state jtag_state;
 54
 55	/* Store current stop-state for DR and IR scan commands */
 56	enum altera_jtag_state drstop_state;
 57	enum altera_jtag_state irstop_state;
 58
 59	/* Store current padding values */
 60	u32 dr_pre;
 61	u32 dr_post;
 62	u32 ir_pre;
 63	u32 ir_post;
 64	u32 dr_length;
 65	u32 ir_length;
 66	u8 *dr_pre_data;
 67	u8 *dr_post_data;
 68	u8 *ir_pre_data;
 69	u8 *ir_post_data;
 70	u8 *dr_buffer;
 71	u8 *ir_buffer;
 72};
 73
 74#define ALTERA_STACK_SIZE 128
 75#define ALTERA_MESSAGE_LENGTH 1024
 76
 77struct altera_state {
 78	struct altera_config	*config;
 79	struct altera_jtag	js;
 80	char			msg_buff[ALTERA_MESSAGE_LENGTH + 1];
 81	long			stack[ALTERA_STACK_SIZE];
 82};
 83
 84int altera_jinit(struct altera_state *astate);
 85int altera_set_drstop(struct altera_jtag *js, enum altera_jtag_state state);
 86int altera_set_irstop(struct altera_jtag *js, enum altera_jtag_state state);
 87int altera_set_dr_pre(struct altera_jtag *js, u32 count, u32 start_index,
 88				u8 *preamble_data);
 89int altera_set_ir_pre(struct altera_jtag *js, u32 count, u32 start_index,
 90				u8 *preamble_data);
 91int altera_set_dr_post(struct altera_jtag *js, u32 count, u32 start_index,
 92				u8 *postamble_data);
 93int altera_set_ir_post(struct altera_jtag *js, u32 count, u32 start_index,
 94				u8 *postamble_data);
 95int altera_goto_jstate(struct altera_state *astate,
 96				enum altera_jtag_state state);
 97int altera_wait_cycles(struct altera_state *astate, s32 cycles,
 98				enum altera_jtag_state wait_state);
 99int altera_wait_msecs(struct altera_state *astate, s32 microseconds,
100				enum altera_jtag_state wait_state);
101int altera_irscan(struct altera_state *astate, u32 count,
102				u8 *tdi_data, u32 start_index);
103int altera_swap_ir(struct altera_state *astate,
104				u32 count, u8 *in_data,
105				u32 in_index, u8 *out_data,
106				u32 out_index);
107int altera_drscan(struct altera_state *astate, u32 count,
108				u8 *tdi_data, u32 start_index);
109int altera_swap_dr(struct altera_state *astate, u32 count,
110				u8 *in_data, u32 in_index,
111				u8 *out_data, u32 out_index);
112void altera_free_buffers(struct altera_state *astate);
113#endif /* ALTERA_JTAG_H */