From 6fb23419e1aaca83f99a21d6b39cb3e62d31dece Mon Sep 17 00:00:00 2001 From: Marcel Telka Date: Mon, 26 Aug 2002 22:29:38 +0000 Subject: [PATCH] Added initial support for data_register. git-svn-id: https://urjtag.svn.sourceforge.net/svnroot/urjtag/trunk@113 b68d4a1b-bc3d-0410-92ed-d4ac073336b7 --- include/jtag/data_register.h | 42 ++++++++++++++++++++ jtag/src/part/Makefile.am | 1 + jtag/src/part/data_register.c | 73 +++++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 include/jtag/data_register.h create mode 100644 jtag/src/part/data_register.c diff --git a/include/jtag/data_register.h b/include/jtag/data_register.h new file mode 100644 index 00000000..5d9cb4d1 --- /dev/null +++ b/include/jtag/data_register.h @@ -0,0 +1,42 @@ +/* + * $Id$ + * + * Copyright (C) 2002 ETC s.r.o. + * + * 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. + * + * Written by Marcel Telka , 2002. + * + */ + +#ifndef JTAG_DATA_REGISTER_H +#define JTAG_DATA_REGISTER_H + +#include + +typedef struct data_register data_register; + +struct data_register { + char *name; /* (public) register name */ + tap_register *value; /* (public) register value */ + tap_register *oldval; /* (private) temporary (old) register value */ + data_register *next; +}; + +data_register *data_register_alloc( const char *name, int len ); +void data_register_free( data_register *dr ); + +#endif /* JTAG_DATA_REGISTER_H */ diff --git a/jtag/src/part/Makefile.am b/jtag/src/part/Makefile.am index 41d076b3..35ba423b 100644 --- a/jtag/src/part/Makefile.am +++ b/jtag/src/part/Makefile.am @@ -26,6 +26,7 @@ noinst_LIBRARIES = libpart.a libpart_a_SOURCES = \ signal.c \ instruction.c \ + data_register.c \ bsbit.c \ part.c \ parse.c diff --git a/jtag/src/part/data_register.c b/jtag/src/part/data_register.c new file mode 100644 index 00000000..40e40c2e --- /dev/null +++ b/jtag/src/part/data_register.c @@ -0,0 +1,73 @@ +/* + * $Id$ + * + * Copyright (C) 2002 ETC s.r.o. + * + * 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. + * + * Written by Marcel Telka , 2002. + * + */ + +#include +#include + +#include + +data_register * +data_register_alloc( const char *name, int len ) +{ + data_register *dr; + + if (!name) + return NULL; + + dr = malloc( sizeof *dr ); + if (!dr) + return NULL; + + dr->name = strdup( name ); + if (!dr->name) { + free( dr ); + return NULL; + } + + dr->value = register_alloc( len ); + dr->oldval = register_alloc( len ); + if (!dr->value || dr->oldval) { + free( dr->value ); + free( dr->oldval ); + free( dr->name ); + free( dr ); + return NULL; + } + + dr->next = NULL; + + return dr; +} + +void +data_register_free( data_register *dr ) +{ + if (!dr) + return; + + free( dr->name ); + register_free( dr->value ); + register_free( dr->oldval ); + free( dr ); +}