4 * Cable driver interface
5 * Copyright (C) 2003 ETC s.r.o.
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22 * Written by Marcel Telka <marcel@telka.sk>, 2003.
31 typedef struct cable_t cable_t;
38 typedef struct cable_driver_t cable_driver_t;
48 struct cable_driver_t {
50 const char *description;
51 int (*connect)( char *params[], cable_t *cable );
52 void (*disconnect)( cable_t *cable );
53 void (*cable_free)( cable_t *cable );
54 int (*init)( cable_t * );
55 void (*done)( cable_t * );
56 void (*set_frequency)( cable_t *, uint32_t freq );
57 void (*clock)( cable_t *, int, int, int );
58 int (*get_tdo)( cable_t * );
59 int (*transfer)( cable_t *, int, char *, char * );
60 int (*set_signal)( cable_t *, int, int );
61 int (*get_signal)( cable_t *, pod_sigsel_t );
62 void (*flush)( cable_t *, cable_flush_amount_t );
63 void (*help)( const char * );
66 typedef struct cable_queue_t cable_queue_t;
68 struct cable_queue_t {
100 typedef struct cable_queue_info_t cable_queue_info_t;
102 struct cable_queue_info_t {
111 cable_driver_t *driver;
118 cable_queue_info_t todo;
119 cable_queue_info_t done;
124 void cable_free( cable_t *cable );
125 int cable_init( cable_t *cable );
126 void cable_done( cable_t *cable );
127 void cable_flush( cable_t *cable, cable_flush_amount_t );
128 void cable_clock( cable_t *cable, int tms, int tdi, int n );
129 int cable_defer_clock( cable_t *cable, int tms, int tdi, int n );
130 int cable_get_tdo( cable_t *cable );
131 int cable_get_tdo_late( cable_t *cable );
132 int cable_defer_get_tdo( cable_t *cable );
133 int cable_set_signal( cable_t *cable, int mask, int val );
134 int cable_defer_set_signal( cable_t *cable, int mask, int val );
135 int cable_get_signal( cable_t *cable, pod_sigsel_t sig );
136 int cable_get_signal_late( cable_t *cable, pod_sigsel_t sig );
137 int cable_defer_get_signal( cable_t *cable, pod_sigsel_t sig );
138 int cable_transfer( cable_t *cable, int len, char *in, char *out );
139 int cable_transfer_late( cable_t *cable, char *out );
140 int cable_defer_transfer( cable_t *cable, int len, char *in, char *out );
142 void cable_set_frequency( cable_t *cable, uint32_t frequency );
143 uint32_t cable_get_frequency( cable_t *cable );
144 void cable_wait( cable_t *cable );
145 void cable_purge_queue( cable_queue_info_t *q, int io );
146 int cable_add_queue_item( cable_t *cable, cable_queue_info_t *q );
147 int cable_get_queue_item( cable_t *cable, cable_queue_info_t *q );
149 extern cable_driver_t *cable_drivers[];