Index: /trunk/communication/gate_2/caba/metadata/gate_2.sd
===================================================================
--- /trunk/communication/gate_2/caba/metadata/gate_2.sd	(revision 8)
+++ /trunk/communication/gate_2/caba/metadata/gate_2.sd	(revision 8)
@@ -0,0 +1,32 @@
+# -*- python -*-
+
+__id__ = "$Id: gate.sd 917 2009-03-12 10:10:06Z nipo $"
+__version__ = "$Revision: 917 $"
+
+Signal('caba:gate_2',
+	   classname = 'soclib::caba::GateSignals2',
+	   accepts = {'caba:gate_initiator_2':1,
+		      'caba:gate_target_2':1},
+	   header_files = ['../source/include/gate_signals_2.h'],
+           tmpl_parameters = [
+                parameter.Int('ring_cmd_data_size'),
+                parameter.Int('ring_rsp_data_size'),
+           ],
+  
+	   )
+
+PortDecl('caba:gate_initiator_2',
+         classname = 'soclib::caba::GateInitiator2',
+	 signal = 'caba:gate_2',
+	 header_files = ['../source/include/gate_ports_2.h'],
+	 
+	 )
+
+PortDecl('caba:gate_target_2',
+         classname = 'soclib::caba::GateTarget2',
+	 signal = 'caba:gate_2',
+	 header_files = ['../source/include/gate_ports_2.h'],
+	 
+	 )
+
+
Index: /trunk/communication/gate_2/caba/source/include/gate_ports_2.h
===================================================================
--- /trunk/communication/gate_2/caba/source/include/gate_ports_2.h	(revision 8)
+++ /trunk/communication/gate_2/caba/source/include/gate_ports_2.h	(revision 8)
@@ -0,0 +1,139 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Authors  : Franck WAJSBÜRT, Abdelmalek SI MERABET 
+ * Date     : january 2009
+ * Copyright: UPMC - LIP6
+ */
+
+#ifndef SOCLIB_CABA_GATE_PORTS_H_
+#define SOCLIB_CABA_GATE_PORTS_H_
+
+#include "gate_signals_2.h"
+
+namespace soclib { namespace caba {
+
+template<int ring_cmd_data_size, int ring_rsp_data_size>
+class GateTarget2
+{
+public:
+
+	sc_out<sc_uint<ring_cmd_data_size> > cmd_data;
+	sc_in<bool> cmd_wok;
+	sc_out<bool> cmd_w;
+
+	sc_in<sc_uint<ring_rsp_data_size> > rsp_data;
+	sc_out<bool> rsp_r;
+	sc_in<bool> rsp_rok;
+
+	GateTarget2(const std::string &name = sc_gen_unique_name("gate_target_2_"))
+		:   cmd_data     ((name+"cmd_data").c_str()),
+		    cmd_wok      ((name+"cmd_wok").c_str()),
+                    cmd_w        ((name+"cmd_w").c_str()),
+
+		    rsp_data     ((name+"rsp_data").c_str()),
+		    rsp_r        ((name+"rsp_r").c_str()),
+                    rsp_rok      ((name+"rsp_rok").c_str())
+		{ }
+    
+	void operator () (GateSignals2<ring_cmd_data_size, ring_rsp_data_size> &sig)
+	{
+		
+                cmd_data    		(sig.cmd_data);	
+		cmd_wok    		(sig.cmd_r_wok);	
+		cmd_w    		(sig.cmd_w_rok);	
+		
+		rsp_data    		(sig.rsp_data);
+		rsp_r    		(sig.rsp_r_wok);
+		rsp_rok    		(sig.rsp_w_rok);
+		
+	}
+
+        void operator () (GateTarget2 &port)
+	{
+	      	cmd_data    		(port.cmd_data);	
+		cmd_wok    		(port.cmd_wok);	
+		cmd_w    		(port.cmd_w);	
+		
+		rsp_data    		(port.rsp_data);
+		rsp_r    		(port.rsp_r);
+		rsp_rok    		(port.rsp_rok);
+  		
+	}
+
+};
+
+template<int ring_cmd_data_size, int ring_rsp_data_size>
+class GateInitiator2
+{
+public:
+	
+	sc_in<sc_uint<ring_cmd_data_size> > cmd_data;
+	sc_out<bool> cmd_r;
+	sc_in<bool> cmd_rok;
+
+	sc_out<sc_uint<ring_rsp_data_size> > rsp_data;
+	sc_in<bool> rsp_wok;
+	sc_out<bool> rsp_w;
+	
+	GateInitiator2(const std::string &name = sc_gen_unique_name("gate_initiator_2_"))
+		:  
+
+		cmd_data     ((name+"cmd_data").c_str()),
+		cmd_r        ((name+"cmd_r").c_str()),
+                cmd_rok      ((name+"cmd_rok").c_str()),
+
+		rsp_data     ((name+"rsp_data").c_str()),
+		rsp_wok      ((name+"rsp_wok").c_str()),
+                rsp_w        ((name+"rsp_w").c_str())
+    		{ }
+    
+	void operator () (GateSignals2<ring_cmd_data_size, ring_rsp_data_size> &sig)
+	{
+		cmd_data    		(sig.cmd_data);
+		cmd_r    		(sig.cmd_r_wok);
+		cmd_rok    		(sig.cmd_w_rok);
+		
+                rsp_data    		(sig.rsp_data);	
+		rsp_wok    		(sig.rsp_r_wok);	
+		rsp_w    		(sig.rsp_w_rok);
+	}
+
+        void operator () (GateInitiator2 &port)
+	{
+
+		cmd_data    		(port.cmd_data);
+		cmd_r    		(port.cmd_r);
+		cmd_rok    		(port.cmd_rok);
+
+	      	rsp_data    		(port.rsp_data);	
+		rsp_wok    		(port.rsp_wok);	
+		rsp_w    		(port.rsp_w);
+	}
+	    
+	
+};
+
+}}
+
+#endif // SOCLIB_CABA_GATE_PORTS_H_
+
+
Index: /trunk/communication/gate_2/caba/source/include/gate_signals_2.h
===================================================================
--- /trunk/communication/gate_2/caba/source/include/gate_signals_2.h	(revision 8)
+++ /trunk/communication/gate_2/caba/source/include/gate_signals_2.h	(revision 8)
@@ -0,0 +1,58 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Authors  : Franck WAJSBÜRT, Abdelmalek SI MERABET 
+ * Date     : january 2009
+ * Copyright: UPMC - LIP6
+ */
+
+#ifndef SOCLIB_CABA_GATE_SIGNALS_H_
+#define SOCLIB_CABA_GATE_SIGNALS_H_
+
+namespace soclib { namespace caba {
+
+template<int ring_cmd_data_size, int ring_rsp_data_size>
+class GateSignals2
+{
+public:
+
+	sc_signal<sc_uint<ring_cmd_data_size> > cmd_data;
+	sc_signal<bool> cmd_r_wok;
+	sc_signal<bool> cmd_w_rok;
+
+	sc_signal<sc_uint<ring_rsp_data_size> > rsp_data;
+	sc_signal<bool> rsp_r_wok;
+	sc_signal<bool> rsp_w_rok;
+
+	GateSignals2(std::string name = (std::string)sc_gen_unique_name("gate_signals_2_"))
+	  : 	cmd_data	((name+"cmd_data").c_str()),
+		cmd_r_wok       ((name+"cmd_r_wok").c_str()),
+		cmd_w_rok	((name+"cmd_w_rok").c_str()),
+		
+		rsp_data	((name+"rsp_data").c_str()),
+		rsp_r_wok       ((name+"rsp_r_wok").c_str()),
+		rsp_w_rok	((name+"rsp_w_rok").c_str())
+	  { }
+};
+
+}} // end namespace
+
+#endif /* SOCLIB_CABA_GATE_SIGNALS_H_ */
Index: /trunk/lib/ring_signals_2/caba/metadata/ring_signals_2.sd
===================================================================
--- /trunk/lib/ring_signals_2/caba/metadata/ring_signals_2.sd	(revision 8)
+++ /trunk/lib/ring_signals_2/caba/metadata/ring_signals_2.sd	(revision 8)
@@ -0,0 +1,10 @@
+# -*- python -*-
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+
+Module('caba:ring_signals_2',
+	classname = 'soclib::caba::RingSignals2',
+	header_files = ['../source/include/ring_signals_2.h',],
+
+)
Index: /trunk/lib/ring_signals_2/caba/source/include/ring_signals_2.h
===================================================================
--- /trunk/lib/ring_signals_2/caba/source/include/ring_signals_2.h	(revision 8)
+++ /trunk/lib/ring_signals_2/caba/source/include/ring_signals_2.h	(revision 8)
@@ -0,0 +1,62 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : september 2008
+ * Copyright: UPMC - LIP6
+ */
+
+#ifndef SOCLIB_CABA_RING_SIGNALS_H_
+#define SOCLIB_CABA_RING_SIGNALS_H_
+
+namespace soclib { namespace caba {
+
+class RingSignals2
+{
+public:
+	bool       cmd_grant;
+        uint64_t   cmd_data;
+    	bool       cmd_w;       // in : cmd_rok
+    	bool       cmd_r;       // in : cmd_wok
+    	bool       rsp_grant;   
+    	uint64_t   rsp_data;
+    	bool       rsp_w;       // in : rsp_rok
+    	bool       rsp_r;       // in : rsp_wok
+
+	RingSignals2()
+	{}
+/*
+	RingSignals2(std::string name = (std::string)sc_gen_unique_name("ring_signals_2_"))
+	  : 	cmd_grant	((name+"cmd_grant").c_str()),
+		cmd_data        ((name+"cmd_data").c_str()),
+		cmd_w    	((name+"cmd_w").c_str()),
+		cmd_r    	((name+"cmd_r").c_str()),	
+		rsp_grant	((name+"rsp_grant").c_str()),
+		rsp_data        ((name+"rsp_data").c_str()),
+		rsp_w           ((name+"rsp_w").c_str()),
+		rsp_r    	((name+"rsp_r").c_str()) 
+	{ }
+*/
+};
+
+}} // end namespace
+
+#endif /* SOCLIB_CABA_RING_SIGNALS_H_ */
Index: /trunk/lib/save_src_to_soclib
===================================================================
--- /trunk/lib/save_src_to_soclib	(revision 8)
+++ /trunk/lib/save_src_to_soclib	(revision 8)
@@ -0,0 +1,123 @@
+#!/bin/sh 
+
+SOCLIB_PATH=$1
+
+#mkdir $SOCLIB_PATH/half_gateway_initiator
+#mkdir $SOCLIB_PATH/half_gateway_initiator/caba
+#mkdir $SOCLIB_PATH/half_gateway_initiator/caba/metadata
+#mkdir $SOCLIB_PATH/half_gateway_initiator/caba/source
+#mkdir $SOCLIB_PATH/half_gateway_initiator/caba/source/include
+#mkdir $SOCLIB_PATH/half_gateway_initiator/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/half_gateway_target
+#mkdir $SOCLIB_PATH/half_gateway_target/caba
+#mkdir $SOCLIB_PATH/half_gateway_target/caba/metadata
+#mkdir $SOCLIB_PATH/half_gateway_target/caba/source
+#mkdir $SOCLIB_PATH/half_gateway_target/caba/source/include
+#mkdir $SOCLIB_PATH/half_gateway_target/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/ring_gateway
+#mkdir $SOCLIB_PATH/ring_gateway/caba
+#mkdir $SOCLIB_PATH/ring_gateway/caba/metadata
+#mkdir $SOCLIB_PATH/ring_gateway/caba/source
+#mkdir $SOCLIB_PATH/ring_gateway/caba/source/include
+#mkdir $SOCLIB_PATH/ring_gateway/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/vci_local_ring_network_2
+#mkdir $SOCLIB_PATH/vci_local_ring_network_2/caba
+#mkdir $SOCLIB_PATH/vci_local_ring_network_2/caba/metadata
+#mkdir $SOCLIB_PATH/vci_local_ring_network_2/caba/source
+#mkdir $SOCLIB_PATH/vci_local_ring_network_2/caba/source/include
+#mkdir $SOCLIB_PATH/vci_local_ring_network_2/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/vci_simple_ring_network_2
+#mkdir $SOCLIB_PATH/vci_simple_ring_network_2/caba
+#mkdir $SOCLIB_PATH/vci_simple_ring_network_2/caba/metadata
+#mkdir $SOCLIB_PATH/vci_simple_ring_network_2/caba/source
+#mkdir $SOCLIB_PATH/vci_simple_ring_network_2/caba/source/include
+#mkdir $SOCLIB_PATH/vci_simple_ring_network_2/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/vci_ring_initiator
+#mkdir $SOCLIB_PATH/vci_ring_initiator/caba
+#mkdir $SOCLIB_PATH/vci_ring_initiator/caba/metadata
+#mkdir $SOCLIB_PATH/vci_ring_initiator/caba/source
+#mkdir $SOCLIB_PATH/vci_ring_initiator/caba/source/include
+#mkdir $SOCLIB_PATH/vci_ring_initiator/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/vci_ring_target
+#mkdir $SOCLIB_PATH/vci_ring_target/caba
+#mkdir $SOCLIB_PATH/vci_ring_target/caba/metadata
+#mkdir $SOCLIB_PATH/vci_ring_target/caba/source
+#mkdir $SOCLIB_PATH/vci_ring_target/caba/source/include
+#mkdir $SOCLIB_PATH/vci_ring_target/caba/source/src
+#m
+#mkdir $SOCLIB_PATH/communication
+#mkdir $SOCLIB_PATH/communication/ring
+#mkdir $SOCLIB_PATH/communication/ring/caba
+#mkdir $SOCLIB_PATH/communication/ring/caba/metadata
+#mkdir $SOCLIB_PATH/communication/ring/caba/source
+#mkdir $SOCLIB_PATH/communication/ring/caba/source/src
+#mkdir $SOCLIB_PATH/communication/ring/caba/source/include
+#m
+#mkdir $SOCLIB_PATH/communication/gate
+#mkdir $SOCLIB_PATH/communication/gate/caba
+#mkdir $SOCLIB_PATH/communication/gate/caba/metadata
+#mkdir $SOCLIB_PATH/communication/gate/caba/source
+#mkdir $SOCLIB_PATH/communication/gate/caba/source/src
+#mkdir $SOCLIB_PATH/communication/gate/caba/source/include
+
+# half_gateway_initiator
+
+cp half_gateway_initiator.h  $SOCLIB_PATH/half_gateway_initiator/caba/source/include/
+cp half_gateway_initiator.cpp  $SOCLIB_PATH/half_gateway_initiator/caba/source/src/
+cp half_gateway_initiator.sd  $SOCLIB_PATH/half_gateway_initiator/caba/metadata/ 
+
+# half_gateway_target
+
+cp half_gateway_target.h    $SOCLIB_PATH/half_gateway_target/caba/source/include/
+cp half_gateway_target.cpp  $SOCLIB_PATH/half_gateway_target/caba/source/src/
+cp half_gateway_target.sd   $SOCLIB_PATH/half_gateway_target/caba/metadata/
+
+# ring_gateway
+
+cp ring_gateway.h  $SOCLIB_PATH/ring_gateway/caba/source/include/
+cp ring_gateway.cpp  $SOCLIB_PATH/ring_gateway/caba/source/src/
+cp ring_gateway.sd  $SOCLIB_PATH/ring_gateway/caba/metadata/
+
+# vci_local_ring_network_2
+
+cp vci_local_ring_network_2.h  $SOCLIB_PATH/vci_local_ring_network_2/caba/source/include/
+cp vci_local_ring_network_2.cpp  $SOCLIB_PATH/vci_local_ring_network_2/caba/source/src/
+cp vci_local_ring_network_2.sd  $SOCLIB_PATH/vci_local_ring_network_2/caba/metadata/
+
+
+# vci_simple_ring_network_2
+
+cp vci_simple_ring_network_2.h  $SOCLIB_PATH/vci_simple_ring_network_2/caba/source/include/
+cp vci_simple_ring_network_2.cpp  $SOCLIB_PATH/vci_simple_ring_network_2/caba/source/src/
+cp vci_simple_ring_network_2.sd  $SOCLIB_PATH/vci_simple_ring_network_2/caba/metadata/
+
+# vci_ring_target
+
+cp vci_ring_target.h  $SOCLIB_PATH/vci_ring_target/caba/source/include/
+cp vci_ring_target.cpp  $SOCLIB_PATH/vci_ring_target/caba/source/src/
+cp vci_ring_target.sd  $SOCLIB_PATH/vci_ring_target/caba/metadata/
+
+# vci_ring_initiator
+
+cp vci_ring_initiator.h  $SOCLIB_PATH/vci_ring_initiator/caba/source/include/
+cp vci_ring_initiator.cpp  $SOCLIB_PATH/vci_ring_initiator/caba/source/src/
+cp vci_ring_initiator.sd  $SOCLIB_PATH/vci_ring_initiator/caba/metadata/ 
+
+# ring_signals, ring_ports
+
+cp ring_ports.h    $SOCLIB_PATH/communication/ring/caba/source/include/
+cp ring_signals.h  $SOCLIB_PATH/communication/ring/caba/source/include/
+cp ring.sd         $SOCLIB_PATH/communication/ring/caba/metadata/
+
+# gate_signals, gate_ports
+
+cp gate_ports_2.h    $SOCLIB_PATH/communication/gate/caba/source/include/
+cp gate_signals_2.h  $SOCLIB_PATH/communication/gate/caba/source/include/
+cp gate.sd         $SOCLIB_PATH/communication/gate/caba/metadata/
+
Index: /trunk/lib/vci_ring_initiator/caba/metadata/vci_ring_initiator.sd
===================================================================
--- /trunk/lib/vci_ring_initiator/caba/metadata/vci_ring_initiator.sd	(revision 8)
+++ /trunk/lib/vci_ring_initiator/caba/metadata/vci_ring_initiator.sd	(revision 8)
@@ -0,0 +1,11 @@
+
+# -*- python -*-
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+
+Module('caba:vci_ring_initiator',
+	classname = 'soclib::caba::VciRingInitiator',
+
+	header_files = ['../source/include/vci_ring_initiator.h',],
+)
Index: /trunk/lib/vci_ring_initiator/caba/source/include/vci_ring_initiator.h
===================================================================
--- /trunk/lib/vci_ring_initiator/caba/source/include/vci_ring_initiator.h	(revision 8)
+++ /trunk/lib/vci_ring_initiator/caba/source/include/vci_ring_initiator.h	(revision 8)
@@ -0,0 +1,661 @@
+ /* SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : March 2010
+ * Copyright: UPMC - LIP6
+ */
+#include "vci_target.h"
+#include "generic_fifo.h"
+#include "mapping_table.h"
+#include "ring_signals_2.h"
+#include <systemc.h>
+
+//#define I_DEBUG
+//#define IR_DEBUG
+//#define I_DEBUG_FSM
+
+namespace soclib { namespace caba {
+
+using namespace sc_core;
+
+#ifdef I_DEBUG_FSM
+namespace {
+        const char *vci_cmd_fsm_state_str_i[] = {
+                "CMD_FIRST_HEADER",
+                "CMD_SECOND_HEADER",
+                "WDATA",
+        };
+        const char *vci_rsp_fsm_state_str_i[] = {
+                "RSP_HEADER",
+                "RSP_DATA",
+        };
+        const char *ring_cmd_fsm_state_str_i[] = {
+                "CMD_IDLE",
+                "DEFAULT",
+                "KEEP",
+        };
+        const char *ring_rsp_fsm_state_str_i[] = {
+                "RSP_IDLE",
+                "LOCAL",
+                "RING",
+        };
+}
+#endif
+
+template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size>
+class VciRingInitiator
+{
+
+typedef soclib::caba::VciTarget<vci_param> vci_target_t;
+typedef RingSignals2 ring_signal_t;
+
+private:
+        enum vci_cmd_fsm_state_e {
+            CMD_FIRST_HEADER,     // first  flit for a ring cmd packet (read or write)
+            CMD_SECOND_HEADER,   //  second flit for a ring cmd packet 
+            WDATA,              //   data flit for a ring cmd write packet
+        };
+        
+        enum vci_rsp_fsm_state_e {
+            RSP_HEADER,     // first flit for a ring rsp packet (read or write)
+            RSP_DATA,       // next  flit for a ring rsp packet
+            
+        };
+        
+        enum ring_rsp_fsm_state_e {
+            	RSP_IDLE,    // waiting for first flit of a response packet
+            	LOCAL,      // next flit of a local rsp packet
+            	RING,  	    // next flit of a ring rsp packet
+            };
+        
+        // cmd token allocation fsm
+        enum ring_cmd_fsm_state_e {
+            	CMD_IDLE,	    
+             	DEFAULT,  	
+            	KEEP,          	    
+            };
+        
+        // structural parameters
+        bool                m_alloc_init;
+        uint32_t            m_srcid;
+        std::string         m_name;
+ 
+        // internal registers
+        sc_signal<int>	    r_ring_cmd_fsm;    // ring command packet FSM (distributed)
+        sc_signal<int>	    r_ring_rsp_fsm;    // ring response packet FSM
+        sc_signal<int>	    r_vci_cmd_fsm;    // vci command packet FSM
+        sc_signal<int>	    r_vci_rsp_fsm;    // vci response packet FSM
+        
+        sc_signal<bool>     r_read_ack;       // vci ack  if vci cmd read 
+         
+        sc_signal<sc_uint<vci_param::S> >      r_srcid_save;
+        sc_signal<sc_uint<vci_param::T> >      r_trdid_save;
+        sc_signal<sc_uint<vci_param::P> >      r_pktid_save;
+        sc_signal<sc_uint<vci_param::E> >      r_error_save;
+           
+        // internal fifos 
+        GenericFifo<uint64_t > m_cmd_fifo;     // fifo for the local command packet
+        GenericFifo<uint64_t > m_rsp_fifo;     // fifo for the local response packet
+        
+        // routing table
+        soclib::common::AddressMaskingTable<uint32_t> m_rt;
+        soclib::common::AddressDecodingTable<uint32_t, bool> m_lt;
+
+bool trace(int sc_time_stamp)
+{
+int time_stamp=0;
+char *ctime_stamp= getenv("FROM_CYCLE");
+
+if (ctime_stamp) time_stamp=atoi(ctime_stamp); 	
+
+return sc_time_stamp >= time_stamp;
+
+}
+
+public :
+
+VciRingInitiator(
+	const char     *name,
+        bool            alloc_init,
+        const int       &wrapper_fifo_depth,
+        const soclib::common::MappingTable &mt,
+        const soclib::common::IntTab &ringid,
+        const uint32_t &srcid)
+      : m_name(name),
+        m_alloc_init(alloc_init),
+        m_cmd_fifo("m_cmd_fifo", wrapper_fifo_depth),
+        m_rsp_fifo("m_rsp_fifo", wrapper_fifo_depth),
+        m_rt(mt.getIdMaskingTable(ringid.level())),
+        m_lt(mt.getIdLocalityTable(ringid)),
+        m_srcid(srcid),
+        r_ring_cmd_fsm("r_ring_cmd_fsm"),
+        r_ring_rsp_fsm("r_ring_rsp_fsm"),
+	r_vci_cmd_fsm("r_vci_cmd_fsm"),
+	r_vci_rsp_fsm("r_vci_rsp_fsm")
+  
+ {} //  end constructor
+
+void reset()
+{
+	if(m_alloc_init)
+		r_ring_cmd_fsm = DEFAULT;
+	else
+		r_ring_cmd_fsm = CMD_IDLE;
+
+	r_vci_cmd_fsm = CMD_FIRST_HEADER;
+	r_vci_rsp_fsm = RSP_HEADER;
+	r_ring_rsp_fsm = RSP_IDLE;
+	m_cmd_fifo.init();
+	m_rsp_fifo.init();
+}
+
+void transition(const vci_target_t &p_vci, const ring_signal_t p_ring_in)       
+{
+
+	bool      cmd_fifo_get = false;
+	bool      cmd_fifo_put = false;
+	uint64_t  cmd_fifo_data = 0;
+
+	bool      rsp_fifo_get = false;
+	bool      rsp_fifo_put = false;
+	uint64_t  rsp_fifo_data = 0;
+
+#ifdef I_DEBUG_FSM
+    std::cout << "--------------------------------------------" << std::endl;
+    std::cout             << " vci cmd fsm  = " << vci_cmd_fsm_state_str_i[r_vci_cmd_fsm] << std::endl
+                          << " vci rsp fsm  = " << vci_rsp_fsm_state_str_i[r_vci_rsp_fsm] << std::endl
+                          << " ring cmd fsm = " << ring_cmd_fsm_state_str_i[r_ring_cmd_fsm] << std::endl
+                          << " ring rsp fsm = " << ring_rsp_fsm_state_str_i[r_ring_rsp_fsm] << std::endl;
+#endif
+//////////// VCI CMD FSM /////////////////////////
+	switch ( r_vci_cmd_fsm ) 
+	{
+		case CMD_FIRST_HEADER:       
+			if ( p_vci.cmdval.read() ) 
+			{  
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name  
+          << " -- r_vci_cmd_fsm -- CMD_FIRST_HEADER "
+          << " -- vci_cmdval : " << p_vci.cmdval.read()
+          << " -- vci_address : " << std::hex << p_vci.address.read()
+          << " -- vci_srcid : " << p_vci.srcid.read()
+          << " -- fifo_wok : " << m_cmd_fifo.wok()
+          << std::endl;
+#endif
+                                cmd_fifo_data = (uint64_t) ((p_vci.address.read() >> 2) << 1); 
+                                r_read_ack = p_vci.eop.read() 
+                                                && ((p_vci.cmd.read() == vci_param::CMD_READ) 
+                                                ||  (p_vci.cmd.read() == vci_param::CMD_LOCKED_READ)); 
+
+                                if(m_cmd_fifo.wok())
+                                {       
+                                        cmd_fifo_put  = true;
+
+                                        // test sur broadcast
+                                        if ((p_vci.address.read() & 0x3) == 0x3)     
+                                        {
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " -- " << " broadcast " << std::endl;
+#endif
+                                              cmd_fifo_data = cmd_fifo_data | ((uint64_t) 0x1) |
+                                                                              (((uint64_t) 0x5) << 1) | 
+                                                                              (((uint64_t) p_vci.srcid.read()) << 20) | 
+                                                                              (((uint64_t) (p_vci.trdid.read() & 0xF)) << 16);
+
+                                              r_vci_cmd_fsm = WDATA;
+   
+                                        }
+                                        else
+                                        {
+					        r_vci_cmd_fsm = CMD_SECOND_HEADER;
+     
+                                        }                                   
+                                } // end fifo wok
+
+
+			} // end if cmdval             
+		break;
+   
+		case CMD_SECOND_HEADER:
+
+
+			if ( p_vci.cmdval.read() && m_cmd_fifo.wok() ) 
+			{
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_cmd_fsm -- CMD_SECOND_HEADER "
+              << " -- vci_cmdval : " << p_vci.cmdval.read()
+              << " -- fifo_wok : " << m_cmd_fifo.wok()
+              << " -- vci_cmd : " << std::hex << p_vci.cmd.read()
+              << " -- vci_plen : " << p_vci.plen.read()              
+              << std::endl;
+#endif
+				cmd_fifo_put  = true;
+				cmd_fifo_data =  (((uint64_t) p_vci.srcid.read()) << 20)| 
+                                                 (((uint64_t) (p_vci.cmd.read()   & 0x3))  << 18) |
+                                                 (((uint64_t) (p_vci.plen.read()  & 0xFF)) << 8) | 
+                                                 (((uint64_t) (p_vci.pktid.read() & 0xF))  << 4) | 
+                                                 (uint64_t) (p_vci.trdid.read() & 0xF);  
+				if (p_vci.contig == true)
+					cmd_fifo_data = cmd_fifo_data | ((uint64_t) 0x1) << 17; 
+				if (p_vci.cons == true)
+					cmd_fifo_data = cmd_fifo_data | ((uint64_t) 0x1) << 16;
+                                if(r_read_ack)
+				{
+					cmd_fifo_data =  cmd_fifo_data | (((uint64_t) 0x1) << (ring_cmd_data_size-1)); //39 
+					r_vci_cmd_fsm = CMD_FIRST_HEADER;
+				} 
+				else     // write command
+				{
+					r_vci_cmd_fsm = WDATA;          
+				}                                      
+			} // endif cmdval
+		break;    
+
+		case WDATA:  
+
+  
+			if ( p_vci.cmdval.read() && m_cmd_fifo.wok() ) 
+			{
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_cmd_fsm -- WDATA "
+              << " -- vci_cmdval : " << p_vci.cmdval.read()
+              << " -- fifo_wok : " << m_cmd_fifo.wok()
+              << " -- vci_wdata : " << std::hex << p_vci.wdata.read()
+              << " -- vci_be : " << p_vci.be.read() 
+              << " -- vci_eop : " << p_vci.eop.read()             
+              << std::endl;
+#endif
+
+
+				cmd_fifo_put  = true;
+				cmd_fifo_data =  ((uint64_t) p_vci.wdata.read()) | (((uint64_t) p_vci.be.read()) << 32);
+				if ( p_vci.eop.read() == true ) 
+				{
+					r_vci_cmd_fsm = CMD_FIRST_HEADER;
+					cmd_fifo_data = cmd_fifo_data | (((uint64_t) 0x1) << (ring_cmd_data_size-1)); //39 
+				}
+				else 
+					r_vci_cmd_fsm = WDATA;
+			} // end if cmdval
+		break;
+        
+	} // end switch r_vci_cmd_fsm  
+
+/////////// VCI RSP FSM /////////////////////////
+	switch ( r_vci_rsp_fsm ) 
+	{
+		case RSP_HEADER:
+ 
+			if ( m_rsp_fifo.rok() ) 
+			{
+
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_rsp_fsm -- RSP_HEADER "
+              << " -- fifo_rsp_rok : " << m_rsp_fifo.rok()
+              << std::endl;
+#endif
+				rsp_fifo_get = true;
+				r_srcid_save = ((sc_uint<vci_param::S>) m_rsp_fifo.read()) >> 12;
+				r_trdid_save = (sc_uint<vci_param::T>) (m_rsp_fifo.read() & 0xF); 
+				r_pktid_save = (((sc_uint<vci_param::P>) m_rsp_fifo.read()) >> 4) & 0xF;            
+				r_error_save = (((sc_uint<vci_param::E>) m_rsp_fifo.read()) >> 8) & 0x1;
+				r_vci_rsp_fsm = RSP_DATA;
+			}       
+		break;
+
+		case RSP_DATA:
+
+			if ( p_vci.rspack.read() && m_rsp_fifo.rok() ) 
+			{
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_rsp_fsm -- RSP_DATA "
+              << " -- rsrcid : " << std::hex << r_srcid_save.read()
+              << " -- rdata : " <<  m_rsp_fifo.read()
+              << " -- rerror : " << r_error_save.read()
+              << std::endl;
+#endif
+				rsp_fifo_get = true;            
+				if(((m_rsp_fifo.read()  >> 32) & 0x1) == 0x1)  
+					r_vci_rsp_fsm = RSP_HEADER;                   
+			} // endif rspack && rok
+		break;
+
+	} // end switch r_vci_rsp_fsm
+
+//////////// RING CMD FSM /////////////////////////
+	switch( r_ring_cmd_fsm ) 
+	{
+		case CMD_IDLE:    
+#ifdef IR_DEBUG
+if( trace(sc_time_stamp()))  
+std::cout << sc_time_stamp() << " -- " << m_name << " -- r_ring_cmd_fsm : CMD_IDLE "
+          << " -- fifo ROK : " << m_cmd_fifo.rok()
+          << " -- in grant : " << p_ring_in.cmd_grant
+          << " -- fifo _data : " << std::hex << m_cmd_fifo.read()
+          << std::endl;
+
+#endif
+    
+			if ( p_ring_in.cmd_grant && m_cmd_fifo.rok() )  
+                        {
+// debug above is here
+                		r_ring_cmd_fsm = KEEP; 
+                        }
+		break;
+
+		case DEFAULT: 
+#ifdef IR_DEBUG
+if( trace(sc_time_stamp())) 
+std::cout << sc_time_stamp() << " -- " << m_name << " -- r_ring_cmd_fsm : DEFAULT "
+          << " -- fifo ROK : " << m_cmd_fifo.rok()
+          << " -- in grant : " << p_ring_in.cmd_grant
+          << " -- fifo _data : " << std::hex << m_cmd_fifo.read()
+          << std::endl;
+
+#endif
+
+        
+			if ( m_cmd_fifo.rok() ) 
+			{
+// debug above is here
+				cmd_fifo_get = p_ring_in.cmd_r;  
+				r_ring_cmd_fsm = KEEP;             
+			}   
+			else if ( !p_ring_in.cmd_grant )
+				r_ring_cmd_fsm = CMD_IDLE; 
+		break;
+
+		case KEEP:   
+#ifdef IR_DEBUG
+if( trace(sc_time_stamp())) 
+std::cout << sc_time_stamp() << " -- " << m_name 
+	  << " -- r_ring_cmd_fsm : KEEP "
+          << " -- fifo_rok : " << m_cmd_fifo.rok()
+          << " -- in grant : " << p_ring_in.cmd_grant
+          << " -- ring_in_wok : " << p_ring_in.cmd_r
+          << " -- fifo_out_data : " << std::hex << m_cmd_fifo.read()
+          << std::endl;
+#endif
+                         
+			if(m_cmd_fifo.rok() && p_ring_in.cmd_r ) 
+			{
+// debug above is here
+				cmd_fifo_get = true;  
+				if (((int) (m_cmd_fifo.read() >> (ring_cmd_data_size - 1) ) & 0x1) == 1)  // 39
+				{  
+					if ( p_ring_in.cmd_grant )
+						r_ring_cmd_fsm = DEFAULT;  
+					else   
+						r_ring_cmd_fsm = CMD_IDLE; 
+				}        
+			}      
+		break;
+
+	} // end switch ring cmd fsm
+ 
+/////////// RING RSP FSM ////////////////////////
+    
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:  
+		{
+			int  rsrcid  = (int)  ((p_ring_in.rsp_data >> 12) & 0x3FFF);
+			bool islocal = m_lt[rsrcid] && (m_rt[rsrcid] == m_srcid);
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1; 
+#ifdef IR_DEBUG
+if( trace(sc_time_stamp()))
+	std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_rsp_fsm -- RSP_IDLE "
+              << " -- islocal : " << islocal
+              << " -- eop : " << reop
+              << " -- rsrcid : " << std::hex << rsrcid
+              << " -- in rok : " << p_ring_in.rsp_w
+              << " -- in wok : " << p_ring_in.rsp_r
+              << " -- fifo wok : " <<  m_rsp_fifo.wok()         
+              << std::endl;
+#endif
+			if (p_ring_in.rsp_w  &&  !reop && islocal) 
+			{   
+				r_ring_rsp_fsm = LOCAL;
+				rsp_fifo_put  = m_rsp_fifo.wok();
+				rsp_fifo_data = p_ring_in.rsp_data;
+			}
+			if (p_ring_in.rsp_w  &&  !reop && !islocal) 
+			{
+				r_ring_rsp_fsm = RING;  
+			}
+			if (!p_ring_in.rsp_w  || reop ) 
+			{			
+				r_ring_rsp_fsm = RSP_IDLE;
+			}
+		}
+		break;
+
+		case LOCAL:
+		{
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+
+#ifdef IR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_rsp_fsm -- LOCAL "
+              << " -- in rok : " << p_ring_in.rsp_w
+              << " -- fifo wok : " <<  m_rsp_fifo.wok()   
+              << " -- in data : " << std::hex << p_ring_in.rsp_data
+	      << " -- eop : " << reop
+              << std::endl;
+#endif
+
+
+			if (p_ring_in.rsp_w && m_rsp_fifo.wok() && reop)         
+			{
+
+				rsp_fifo_put  = true;
+				rsp_fifo_data = p_ring_in.rsp_data;
+				r_ring_rsp_fsm = RSP_IDLE;             
+			}
+			if (!p_ring_in.rsp_w || !m_rsp_fifo.wok() || !reop)         
+			{
+
+				rsp_fifo_put  = p_ring_in.rsp_w && m_rsp_fifo.wok();
+				rsp_fifo_data = p_ring_in.rsp_data;
+				r_ring_rsp_fsm = LOCAL;             
+			}
+		} 
+		break;
+
+		case RING:    
+		{
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+
+#ifdef IR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_rsp_fsm -- RING "
+              << " -- in rok : " << p_ring_in.rsp_w
+              << " -- in wok : " <<  p_ring_in.rsp_r   
+              << " -- in data : " << std::hex << p_ring_in.rsp_data
+	      << " -- eop : " << reop	
+              << std::endl;
+#endif
+
+
+			if (p_ring_in.rsp_w && reop)
+			{
+				r_ring_rsp_fsm = RSP_IDLE; 
+			}
+			else
+			{
+				r_ring_rsp_fsm = RING;
+			}
+		}	
+		break;
+
+	} // end switch rsp fsm
+      
+    ////////////////////////
+    //  fifos update      //
+   ////////////////////////
+
+// local cmd fifo update
+	if (  cmd_fifo_put &&  cmd_fifo_get ) m_cmd_fifo.put_and_get(cmd_fifo_data);
+	else if (  cmd_fifo_put && !cmd_fifo_get ) m_cmd_fifo.simple_put(cmd_fifo_data);
+	else if ( !cmd_fifo_put &&  cmd_fifo_get ) m_cmd_fifo.simple_get();
+	
+// local rsp fifo update
+	if (  rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.put_and_get(rsp_fifo_data);
+	else if (  rsp_fifo_put && !rsp_fifo_get ) m_rsp_fifo.simple_put(rsp_fifo_data);
+	else if ( !rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.simple_get();
+     
+}  // end Transition()
+
+///////////////////////////////////////////////////////////////////
+void genMoore(vci_target_t &p_vci)
+///////////////////////////////////////////////////////////////////
+{
+
+	switch ( r_vci_cmd_fsm ) 
+	{
+		case CMD_FIRST_HEADER:
+			p_vci.cmdack = false;
+		break;
+
+		case CMD_SECOND_HEADER:
+			p_vci.cmdack = r_read_ack;
+		break;
+
+		case WDATA:
+			p_vci.cmdack = m_cmd_fifo.wok();
+		break;    
+
+	} // end switch fsm
+
+	switch ( r_vci_rsp_fsm ) 
+	{
+		case RSP_HEADER:
+			p_vci.rspval = false;
+		break;
+	
+		case RSP_DATA:
+			p_vci.rspval = m_rsp_fifo.rok();
+			p_vci.rsrcid = r_srcid_save;
+			p_vci.rtrdid = r_trdid_save;
+			p_vci.rpktid = r_pktid_save;
+			p_vci.rerror = r_error_save;
+			p_vci.rdata  = (sc_uint<32>) (m_rsp_fifo.read());       
+			if (((m_rsp_fifo.read() >> 32) & 0x1) == 0x1)
+				p_vci.reop   = true;
+			else 
+				p_vci.reop   = false;
+		break;
+	
+	} // end switch fsm
+} // end genMoore
+
+///////////////////////////////////////////////////////////////////
+void update_ring_signals(ring_signal_t p_ring_in, ring_signal_t &p_ring_out)
+///////////////////////////////////////////////////////////////////
+{    
+	switch( r_ring_cmd_fsm ) 
+	{
+		case CMD_IDLE:
+			p_ring_out.cmd_grant = p_ring_in.cmd_grant && !m_cmd_fifo.rok();
+
+                     	p_ring_out.cmd_r     = p_ring_in.cmd_r;
+
+        		p_ring_out.cmd_w     = p_ring_in.cmd_w;
+	        	p_ring_out.cmd_data  = p_ring_in.cmd_data;
+		break;
+	
+		case DEFAULT:        
+			p_ring_out.cmd_grant = !( m_cmd_fifo.rok());  
+
+                   	p_ring_out.cmd_r    = 1;
+
+	        	p_ring_out.cmd_w    =  m_cmd_fifo.rok();
+		        p_ring_out.cmd_data =  m_cmd_fifo.read();
+		break;
+	
+		case KEEP:  
+			int cmd_fifo_eop = (int) ((m_cmd_fifo.read() >> (ring_cmd_data_size - 1)) & 0x1) ; //39
+			p_ring_out.cmd_grant = m_cmd_fifo.rok() && p_ring_in.cmd_r && (cmd_fifo_eop == 1);
+
+                   	p_ring_out.cmd_r    = 1;	
+
+        		p_ring_out.cmd_w    =  m_cmd_fifo.rok();
+	        	p_ring_out.cmd_data =  m_cmd_fifo.read();
+		break;
+	
+	} // end switch
+
+	p_ring_out.rsp_grant = p_ring_in.rsp_grant;
+
+	p_ring_out.rsp_w    = p_ring_in.rsp_w;
+	p_ring_out.rsp_data = p_ring_in.rsp_data;
+
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:	
+		{
+			int  rsrcid   = (int)  ((p_ring_in.rsp_data >> 12 ) & 0x3FFF);
+			bool islocal  = m_lt[rsrcid] && (m_rt[rsrcid] == m_srcid);
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+
+			if(p_ring_in.rsp_w && !reop && islocal) {
+				p_ring_out.rsp_r = m_rsp_fifo.wok();
+			}
+			if(p_ring_in.rsp_w && !reop && !islocal) {
+				p_ring_out.rsp_r = p_ring_in.rsp_r;
+			}
+			if(!p_ring_in.rsp_w || reop)  {
+				p_ring_out.rsp_r = p_ring_in.rsp_r;
+			}
+ 
+		}
+		break;
+	
+		case LOCAL:
+			p_ring_out.rsp_r = m_rsp_fifo.wok();
+		break;
+	
+		case RING:
+			p_ring_out.rsp_r = p_ring_in.rsp_r;
+		break;    
+	} // end switch
+
+
+} // end update_ring_signals
+
+};
+
+}} // end namespace
+
+
Index: /trunk/lib/vci_ring_target/caba/metadata/vci_ring_target.sd
===================================================================
--- /trunk/lib/vci_ring_target/caba/metadata/vci_ring_target.sd	(revision 8)
+++ /trunk/lib/vci_ring_target/caba/metadata/vci_ring_target.sd	(revision 8)
@@ -0,0 +1,11 @@
+
+# -*- python -*-
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+
+Module('caba:vci_ring_target',
+	classname = 'soclib::caba::VciRingTarget',
+	header_files = ['../source/include/vci_ring_target.h',],
+
+)
Index: /trunk/lib/vci_ring_target/caba/source/include/vci_ring_target.h
===================================================================
--- /trunk/lib/vci_ring_target/caba/source/include/vci_ring_target.h	(revision 8)
+++ /trunk/lib/vci_ring_target/caba/source/include/vci_ring_target.h	(revision 8)
@@ -0,0 +1,797 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : March 2010
+ *
+ * Copyright: UPMC - LIP6
+ */
+#include "vci_initiator.h"
+#include "generic_fifo.h"
+#include "mapping_table.h"
+#include "ring_signals_2.h"
+
+//#define T_DEBUG
+//#define TR_DEBUG
+//#define T_DEBUG_FSM
+
+namespace soclib { namespace caba {
+#ifdef T_DEBUG_FSM
+namespace {
+        const char *vci_cmd_fsm_state_str_t[] = {
+                "CMD_FIRST_HEADER",
+                "CMD_SECOND_HEADER",
+                "WDATA",
+        };
+        const char *vci_rsp_fsm_state_str_t[] = {
+                "RSP_HEADER",
+                "RSP_DATA",
+        };
+        const char *ring_rsp_fsm_state_str_t[] = {
+                "RSP_IDLE",
+                "DEFAULT",
+                "KEEP",
+        };
+        const char *ring_cmd_fsm_state_str_t[] = {
+                "CMD_IDLE",
+                "BROADCAST_0",
+                "BROADCAST_1",
+                "LOCAL",
+                "RING",
+        };
+}
+#endif
+
+template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size>
+class VciRingTarget
+{
+
+typedef typename vci_param::fast_addr_t vci_addr_t;
+typedef RingSignals2 ring_signal_t; 
+typedef soclib::caba::VciInitiator<vci_param> vci_initiator_t;
+
+private:
+        enum vci_cmd_fsm_state_e {
+        	CMD_FIRST_HEADER,     // first flit for a ring cmd packet (read or write)
+                CMD_SECOND_HEADER,   //  second flit for a ring cmd packet
+        	WDATA,               //  data flit for a ring cmd write packet
+            };
+        
+        enum vci_rsp_fsm_state_e {
+        	RSP_HEADER,     // first flit for a ring rsp packet (read or write)
+                DATA,          // next flit for a ring rsp packet
+            };
+        
+        enum ring_cmd_fsm_state_e {
+        	CMD_IDLE,	 // waiting for first flit of a command packet
+                BROADCAST_0,
+                BROADCAST_1,
+        	LOCAL,  	// next flit of a local cmd packet
+        	RING,  	       // next flit of a ring cmd packet
+        };
+        
+        // cmd token allocation fsm
+        enum ring_rsp_fsm_state_e {
+        	RSP_IDLE,	    
+        	DEFAULT,  	
+        	KEEP,  	            
+        };
+        
+        // structural parameters
+        bool          m_alloc_target;
+        int           m_tgtid;
+	std::string   m_name;
+       
+        // internal registers
+        sc_signal<int>	        r_ring_cmd_fsm;	    // ring command packet FSM 
+        sc_signal<int>		r_ring_rsp_fsm;	    // ring response packet FSM
+        sc_signal<int>		r_vci_cmd_fsm;	    // vci command packet FSM
+        sc_signal<int>		r_vci_rsp_fsm;	    // vci response packet FSM
+        
+        sc_signal<sc_uint<vci_param::S> >      r_srcid;
+        sc_signal<sc_uint<2> >                 r_cmd;
+        sc_signal<sc_uint<vci_param::T> >      r_trdid;
+        sc_signal<sc_uint<vci_param::P> >      r_pktid;
+        sc_signal<sc_uint<vci_param::K> >      r_plen;
+        sc_signal<sc_uint<1> >                 r_contig;
+        sc_signal<sc_uint<1> >                 r_const;
+        sc_signal<sc_uint<vci_param::N> >      r_addr;
+            
+        // internal fifos 
+        GenericFifo<uint64_t > m_cmd_fifo;     // fifo for the local command paquet
+        GenericFifo<uint64_t > m_rsp_fifo;     // fifo for the local response paquet
+        
+        // routing table 
+        soclib::common::AddressDecodingTable<vci_addr_t, int> m_rt;
+        // locality table
+        soclib::common::AddressDecodingTable<vci_addr_t, bool> m_lt;
+
+bool trace(int sc_time_stamp)
+{
+int time_stamp=0;
+char *ctime_stamp= getenv("FROM_CYCLE");
+
+if (ctime_stamp) time_stamp=atoi(ctime_stamp); 	
+
+return sc_time_stamp >= time_stamp;
+
+}
+
+public :
+
+VciRingTarget(
+	const char     *name,
+        bool            alloc_target,
+        const int       &wrapper_fifo_depth,
+        const soclib::common::MappingTable &mt,
+        const soclib::common::IntTab &ringid,
+        const int &tgtid)
+     :  m_name(name),
+        m_alloc_target(alloc_target),
+        m_cmd_fifo("m_cmd_fifo", wrapper_fifo_depth),
+        m_rsp_fifo("m_rsp_fifo", wrapper_fifo_depth),
+        m_rt(mt.getRoutingTable<typename vci_param::fast_addr_t>(ringid)),
+        m_lt(mt.getLocalityTable<typename vci_param::fast_addr_t>(ringid)),
+        m_tgtid(tgtid),
+        r_ring_cmd_fsm("r_ring_cmd_fsm"),
+	r_ring_rsp_fsm("r_ring_rsp_fsm"),
+	r_vci_cmd_fsm("r_vci_cmd_fsm"),
+	r_vci_rsp_fsm("r_vci_rsp_fsm"),
+        r_srcid("r_srcid"),
+        r_cmd("r_cmd"),
+        r_trdid("r_trdid"),
+        r_pktid("r_pktid"),
+        r_plen("r_plen"),
+        r_contig("r_contig"),
+        r_const("r_const"),
+        r_addr("r_addr")
+
+{} //  end constructor
+
+void reset()
+{
+        if(m_alloc_target)
+        	r_ring_rsp_fsm = DEFAULT;
+        else
+        	r_ring_rsp_fsm = RSP_IDLE;
+        
+        r_vci_cmd_fsm = CMD_FIRST_HEADER;
+        r_vci_rsp_fsm = RSP_HEADER;
+        r_ring_cmd_fsm = CMD_IDLE;
+        m_cmd_fifo.init();
+        m_rsp_fifo.init();       
+}
+void transition(const vci_initiator_t &p_vci, const ring_signal_t p_ring_in)       
+{
+
+	bool      cmd_fifo_get = false;
+	bool      cmd_fifo_put = false;
+	uint64_t  cmd_fifo_data = 0;
+	
+	bool      rsp_fifo_get = false;
+	bool      rsp_fifo_put = false;
+	uint64_t  rsp_fifo_data = 0;
+
+#ifdef T_DEBUG_FSM
+    std::cout << "--------------------------------------------" << std::endl;
+    std::cout             << " vci cmd fsm  = " << vci_cmd_fsm_state_str_t[r_vci_cmd_fsm] << std::endl
+                          << " vci rsp fsm  = " << vci_rsp_fsm_state_str_t[r_vci_rsp_fsm] << std::endl
+                          << " ring cmd fsm = " << ring_cmd_fsm_state_str_t[r_ring_cmd_fsm] << std::endl
+                          << " ring rsp fsm = " << ring_rsp_fsm_state_str_t[r_ring_rsp_fsm] << std::endl;
+#endif
+	
+//////////// VCI CMD FSM /////////////////////////
+	switch ( r_vci_cmd_fsm ) 
+	{
+
+		case CMD_FIRST_HEADER:
+                        if (m_cmd_fifo.rok() == true)
+                        {
+#ifdef T_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_cmd_fsm -- CMD_FIRST_HEADER "
+              << " -- fifo_rok : " << m_cmd_fifo.rok()
+              << " -- fifo_data : " << std::hex << m_cmd_fifo.read()
+              << std::endl;
+#endif
+
+                                cmd_fifo_get = true; 
+				
+                                if (m_cmd_fifo.read() & 0x1 == 0x1) // broadcast
+                                {
+#ifdef I_DEBUG
+std::cout << sc_time_stamp() << " -- " << m_name << " --  broadcast " << std::endl;
+#endif
+                                        r_addr   = (sc_uint<vci_param::N>) 0x3;     
+                                        r_srcid  = (sc_uint<vci_param::S>) (m_cmd_fifo.read() >> 20); 
+ 					r_cmd    = (sc_uint<2>)  0x2; 
+ 					r_contig = (sc_uint<1>)  0x1; 
+ 					r_const  = (sc_uint<1>)  0x0; 
+ 					r_plen   = (sc_uint<vci_param::K>) 0x04; 
+ 					r_pktid  = (sc_uint<vci_param::P>) 0x0; 
+ 					r_trdid  = (sc_uint<vci_param::T>) ((m_cmd_fifo.read() >> 16) & 0xF); 
+
+                                        r_vci_cmd_fsm = WDATA; 
+                                }
+                                else
+                                {
+                                        r_addr = (sc_uint<vci_param::N>) (m_cmd_fifo.read() << 1);
+                                        r_vci_cmd_fsm = CMD_SECOND_HEADER; 
+                                }
+
+         
+			}  // end if rok
+		break;
+
+		case CMD_SECOND_HEADER:        
+			if ( m_cmd_fifo.rok() ) 
+			{
+
+#ifdef T_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_cmd_fsm -- CMD_SECOND_HEADER "
+              << " -- r_addr : " << std::hex << r_addr 
+              << " -- fifo_rok : " << m_cmd_fifo.rok()
+              << " -- fifo_data : " << m_cmd_fifo.read()
+              << " -- vci cmdack : " << p_vci.cmdack.read()
+              << std::endl;
+#endif
+				if(((int) (m_cmd_fifo.read() >> (ring_cmd_data_size - 1) ) & 0x1) == 1)  // read command
+				{
+
+					if (p_vci.cmdack.read())
+					{
+
+						cmd_fifo_get = true;
+						r_vci_cmd_fsm = CMD_FIRST_HEADER;
+					} 
+				}
+				else  // write command
+				{
+#ifdef T_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_cmd_fsm -- CMD_SECOND_HEADER & !EOP (WRITE)"
+              << std::endl;
+#endif
+ 					cmd_fifo_get =  true;
+ 					r_srcid  = (sc_uint<vci_param::S>)  (m_cmd_fifo.read() >> 20) ; 
+ 					r_cmd    = (sc_uint<2>)  ((m_cmd_fifo.read() >> 18) & 0x3); 
+ 					r_contig = (sc_uint<1>)  ((m_cmd_fifo.read() >> 17) & 0x1); 
+ 					r_const =  (sc_uint<1>)  ((m_cmd_fifo.read() >> 16) & 0x1); 
+ 					r_plen  =  (sc_uint<vci_param::K>) ((m_cmd_fifo.read() >> 8) & 0xFF); 
+ 					r_pktid  = (sc_uint<vci_param::P>) ((m_cmd_fifo.read() >> 4) & 0xF); 
+ 					r_trdid  = (sc_uint<vci_param::T>) (m_cmd_fifo.read()  & 0xF); 
+ 					r_vci_cmd_fsm = WDATA;
+				}                                          
+			} 
+		break;
+
+		case WDATA:
+#ifdef T_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_cmd_fsm -- WDATA "
+              << " -- vci_cmdack : " << p_vci.cmdack.read()
+              << " -- fifo_rok : " << m_cmd_fifo.rok()
+              << " -- fifo_data : " << std::hex << m_cmd_fifo.read()
+              << " -- r_plen : " << r_plen.read()
+              << std::endl;
+#endif
+			if ( p_vci.cmdack.read() && m_cmd_fifo.rok() ) 
+			{
+
+				cmd_fifo_get = true; 
+				sc_uint<1> contig = r_contig;
+				if(contig == 0x1)    
+					r_addr = r_addr.read() + vci_param::B ;                        
+				if(( (m_cmd_fifo.read() >> (ring_cmd_data_size - 1) ) & 0x1) == 1)
+					r_vci_cmd_fsm = CMD_FIRST_HEADER;   
+				else 
+					r_vci_cmd_fsm = WDATA;                                   
+			} // end if cmdack
+		break;
+        
+	} // end switch r_vci_cmd_fsm
+
+/////////// VCI RSP FSM /////////////////////////
+	switch ( r_vci_rsp_fsm ) 
+	{
+		case RSP_HEADER:
+
+			if((p_vci.rspval.read() == true) && (m_rsp_fifo.wok()))
+			{
+#ifdef T_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_rsp_fsm -- RSP_HEADER "
+              << " -- fifo_rsp_wok : " << m_rsp_fifo.wok()
+              << " -- vci_rspval : " << p_vci.rspval.read()
+              << " -- rsrcid : " << std::hex << p_vci.rsrcid.read()
+              << " --  rerror : " << p_vci.rerror.read()
+              << std::endl;
+#endif
+				rsp_fifo_data = (((uint64_t) p_vci.rsrcid.read() & 0x3FFF) << 12) |
+                                                (((uint64_t) p_vci.rerror.read() & 0x1) << 8) | 
+                                                (((uint64_t) p_vci.rpktid.read() & 0xF) << 4) | 
+                                                 ((uint64_t) p_vci.rtrdid.read() & 0xF); 
+				rsp_fifo_put = true; 
+				r_vci_rsp_fsm = DATA;
+			}
+		break;
+
+		case DATA:
+              
+			if((p_vci.rspval.read() == true) && (m_rsp_fifo.wok())) 
+			{
+#ifdef T_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- r_vci_rsp_fsm -- RSP_DATA "
+              << " -- fifo_rsp_wok : " << m_rsp_fifo.wok()
+              << " -- vci_rspval : " << p_vci.rspval.read()
+              << " -- rdata : " << std::hex << p_vci.rdata.read()
+              << " -- reop : " << p_vci.reop.read()
+              << std::endl;
+#endif
+
+				rsp_fifo_put = true;
+				rsp_fifo_data = (uint64_t) p_vci.rdata.read();  
+         
+				if (p_vci.reop.read()) 
+				{ 
+					rsp_fifo_data = rsp_fifo_data |  (((uint64_t) 0x1) << (ring_rsp_data_size-1)) ;
+					r_vci_rsp_fsm = RSP_HEADER;
+				}           		    
+			}  
+		break;
+
+	} // end switch r_vci_rsp_fsm
+   
+//////////// RING RSP FSM (distributed) /////////////////////////
+        
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:   
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name <<  " -- ring_rsp_fsm : RSP_IDLE"
+          << " -- fifo rok : " <<  m_rsp_fifo.rok()
+          << " -- in rok : " <<  p_ring_in.rsp_w
+          << " -- in wok : " <<  p_ring_in.rsp_r
+          << " -- in rsp grant : " << p_ring_in.rsp_grant
+          << " -- in rsp data  : " << p_ring_in.rsp_data
+          << std::endl;
+#endif    
+			if ( p_ring_in.rsp_grant && m_rsp_fifo.rok() ) 
+
+				r_ring_rsp_fsm = KEEP;           
+                
+		break;
+
+		case DEFAULT:  
+			
+                        if ( m_rsp_fifo.rok())  
+			{
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name <<  " -- ring_rsp_fsm : DEFAULT " 
+          << " -- fifo data : " << std::hex << m_rsp_fifo.read()
+          << std::endl;
+#endif
+				rsp_fifo_get = p_ring_in.rsp_r; //true;
+				r_ring_rsp_fsm = KEEP;
+			}   
+			else if ( !p_ring_in.rsp_grant )
+				r_ring_rsp_fsm = RSP_IDLE;  
+		break;
+
+		case KEEP:   
+             
+			if(m_rsp_fifo.rok() && p_ring_in.rsp_r) 
+			{
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name <<  " -- ring_rsp_fsm : KEEP "
+          << " -- fifo rok : " << m_rsp_fifo.rok()
+          << " -- in wok : " << p_ring_in.rsp_r
+          << " -- fifo data : " << std::hex << m_rsp_fifo.read()
+          << std::endl;
+#endif
+				rsp_fifo_get = true;              
+				if ((int) ((m_rsp_fifo.read() >> 32 ) & 0x1) == 1)  
+				{             
+					if ( p_ring_in.rsp_grant )
+						r_ring_rsp_fsm = DEFAULT;  
+					else   
+						r_ring_rsp_fsm = RSP_IDLE;                
+				} 
+			}           
+		break;
+
+	} // end switch ring cmd fsm
+
+/////////// RING CMD FSM ////////////////////////
+	switch( r_ring_cmd_fsm ) 
+	{
+
+		case CMD_IDLE:  
+		{ // for variable scope
+
+			vci_addr_t rtgtid = (vci_addr_t) ((p_ring_in.cmd_data >> 1) << 2);
+			bool islocal = m_lt[rtgtid]  && (m_rt[rtgtid] == (vci_addr_t) m_tgtid); 
+                        bool brdcst  = (p_ring_in.cmd_data & 0x1) == 0X1 ;
+                        bool eop     = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1); 
+
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " - ring_cmd_fsm -- CMD_IDLE "
+              << " - in rok : " << p_ring_in.cmd_w
+              << " - isloc : " << islocal
+              << " - addr : " << std::hex << rtgtid
+              << " - brdcst : " << brdcst
+              << " - in wok : " << p_ring_in.cmd_r
+              << " - fifo wok : " << m_cmd_fifo.wok()
+              << " - eop : " << eop  
+              << std::endl;
+#endif
+                      if(p_ring_in.cmd_w && !eop && brdcst && !m_cmd_fifo.wok()) {
+                              r_ring_cmd_fsm = BROADCAST_0; 
+                      }  
+        
+                      if(p_ring_in.cmd_w && !eop && brdcst && m_cmd_fifo.wok()) {
+                              r_ring_cmd_fsm = BROADCAST_1;
+                              cmd_fifo_put  = true;
+                      	      cmd_fifo_data = p_ring_in.cmd_data;
+
+                      }  
+        
+                      if (p_ring_in.cmd_w && !eop && !brdcst && islocal) {
+                              r_ring_cmd_fsm = LOCAL; 
+                              cmd_fifo_put   = m_cmd_fifo.wok();
+                              cmd_fifo_data  = p_ring_in.cmd_data;  
+
+                      } 
+        
+                      if (p_ring_in.cmd_w && !eop && !brdcst && !islocal) {
+                              r_ring_cmd_fsm = RING;
+                      }  
+
+                      if (!p_ring_in.cmd_w || eop) {
+                              r_ring_cmd_fsm = CMD_IDLE;
+                      }
+
+                }
+
+		break;
+
+                case BROADCAST_0:
+
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_cmd_fsm -- BROADCAST_0 "
+              << " -- ringin cmd rok : " << p_ring_in.cmd_w
+              << " -- ringin cmd wok : " << p_ring_in.cmd_r 
+              << " -- ringin data : " << std::hex << p_ring_in.cmd_data
+              << " -- fifo cmd wok : " << m_cmd_fifo.wok()
+              << std::endl;
+#endif
+                	if ( m_cmd_fifo.wok() )
+                        { 
+				cmd_fifo_data = p_ring_in.cmd_data;
+				r_ring_cmd_fsm = BROADCAST_1;
+
+                        } else {
+				r_ring_cmd_fsm = BROADCAST_0;
+                        }
+
+		break;
+
+                case BROADCAST_1:
+                {
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_cmd_fsm -- BROADCAST_1 "
+              << " -- ringin cmd rok : " << p_ring_in.cmd_w
+              << " -- ringin cmd wok : " << p_ring_in.cmd_r 
+              << " -- ringin data : " << std::hex << p_ring_in.cmd_data
+              << " -- fifo cmd wok : " << m_cmd_fifo.wok()
+              << std::endl;
+#endif
+
+                        bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+
+                	if ( p_ring_in.cmd_w && m_cmd_fifo.wok() && eop )
+                        { 
+				cmd_fifo_data = p_ring_in.cmd_data;
+				cmd_fifo_put  = 1;
+				r_ring_cmd_fsm = CMD_IDLE;
+
+                        }
+                        else {        		 
+                		r_ring_cmd_fsm = BROADCAST_1;
+                        }
+                        
+                } 
+ 		break;
+
+		case LOCAL:   
+                {
+
+                        bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_cmd_fsm -- LOCAL "
+              << " -- in cmd rok : " << p_ring_in.cmd_w
+              << " -- in cmd wok : " << p_ring_in.cmd_r 
+              << " -- in data : " << std::hex << p_ring_in.cmd_data
+              << " -- fifo wok : " << m_cmd_fifo.wok()
+              << " -- eop : " << eop
+              << std::endl;
+#endif
+
+                 	if ( p_ring_in.cmd_w && m_cmd_fifo.wok() && eop )
+                        { 
+
+				cmd_fifo_put  = true;
+				cmd_fifo_data = p_ring_in.cmd_data;
+			     	r_ring_cmd_fsm = CMD_IDLE;
+			     		
+                        }
+                        
+                 	if ( !p_ring_in.cmd_w || !m_cmd_fifo.wok() || !eop )
+                        { 
+
+				cmd_fifo_put  = p_ring_in.cmd_w && m_cmd_fifo.wok();
+				cmd_fifo_data = p_ring_in.cmd_data;
+			     	r_ring_cmd_fsm = LOCAL;
+			     		
+                        }                        
+                } 
+		break;
+
+		case RING:   
+                { 
+  
+			bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+
+#ifdef TR_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_cmd_fsm -- RING "
+              << " -- in cmd rok : " << p_ring_in.cmd_w
+              << " -- in data : " << std::hex << p_ring_in.cmd_data
+              << " -- in wok : " << p_ring_in.cmd_r
+              << " -- eop : " << eop
+              << std::endl;
+#endif
+			if ( p_ring_in.cmd_w && eop ) {        
+        			r_ring_cmd_fsm = CMD_IDLE;
+                        }
+                        else {
+ 				r_ring_cmd_fsm = RING;
+                        }
+                }
+		break;
+
+	} // end switch cmd fsm 
+
+    ////////////////////////
+    //  fifos update      //
+   ////////////////////////
+
+// local cmd fifo update
+	if ( cmd_fifo_put && cmd_fifo_get ) m_cmd_fifo.put_and_get(cmd_fifo_data);
+	else if (  cmd_fifo_put && !cmd_fifo_get ) m_cmd_fifo.simple_put(cmd_fifo_data);
+	else if ( !cmd_fifo_put && cmd_fifo_get ) m_cmd_fifo.simple_get();
+// local rsp fifo update
+	if (  rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.put_and_get(rsp_fifo_data);
+	else if (  rsp_fifo_put && !rsp_fifo_get ) m_rsp_fifo.simple_put(rsp_fifo_data);
+	else if ( !rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.simple_get();
+ 
+}  // end Transition()
+  
+///////////////////////////////////////////////////////////////////
+void genMoore(vci_initiator_t &p_vci)
+///////////////////////////////////////////////////////////////////
+{
+	if( r_vci_rsp_fsm == RSP_HEADER ) 
+		p_vci.rspack = false;
+	else
+		p_vci.rspack = m_rsp_fifo.wok();
+
+	switch ( r_vci_cmd_fsm ) 
+	{
+		case CMD_FIRST_HEADER:                        			  
+		        p_vci.cmdval = false;
+
+		break;
+
+		case CMD_SECOND_HEADER:         
+			if(((int) (m_cmd_fifo.read() >> (ring_cmd_data_size - 1) ) & 0x1) == 1) // eop
+			{
+				p_vci.cmdval = m_cmd_fifo.rok(); 
+				p_vci.address = (sc_uint<vci_param::N>) r_addr.read();
+				p_vci.cmd = (sc_uint<2>)  ((m_cmd_fifo.read() >> 18) & 0x3);
+                                p_vci.be    = 0xF;
+				p_vci.wdata = 0;
+				p_vci.pktid = (sc_uint<vci_param::P>) ((m_cmd_fifo.read() >> 4) & 0xF);
+				p_vci.srcid = (sc_uint<vci_param::S>)  (m_cmd_fifo.read() >> 20) ;
+				p_vci.trdid = (sc_uint<vci_param::T>)  (m_cmd_fifo.read() & 0xF);
+				p_vci.plen =  (sc_uint<vci_param::K>)  ((m_cmd_fifo.read() >> 8) & 0xFF);
+				p_vci.eop = true;         
+				sc_uint<1> cons = (sc_uint<1>)  ((m_cmd_fifo.read() >> 16) & 0x1) ; 
+				if (cons == 0x1)
+					p_vci.cons = true;
+				else
+					p_vci.cons = false;        
+				sc_uint<1> contig = (sc_uint<1>)  ((m_cmd_fifo.read() >> 17) & 0x1);
+				if(contig == 0x1) 
+					p_vci.contig = true;
+				else
+					p_vci.contig = false;          	    
+			} 
+			else 
+				p_vci.cmdval = false;         
+		break;
+    
+		case WDATA:
+		{   // for variable scope
+
+			p_vci.cmdval = m_cmd_fifo.rok();
+			p_vci.address = (sc_uint<vci_param::N>) r_addr.read();
+			p_vci.be = (sc_uint<vci_param::B>)((m_cmd_fifo.read()  >> 32) & 0xF);
+			p_vci.cmd = r_cmd;
+			p_vci.wdata = (sc_uint<32>)(m_cmd_fifo.read()); 
+			p_vci.pktid = r_pktid;
+			p_vci.srcid = r_srcid;
+			p_vci.trdid = r_trdid;
+			p_vci.plen  = r_plen;        
+			sc_uint<1> cons = r_const;         
+			if (cons == 0x1)
+				p_vci.cons = true;
+			else
+				p_vci.cons = false;        
+			sc_uint<1> contig = r_contig;
+			if(contig == 0x1)                     
+				p_vci.contig = true;           
+			else
+				p_vci.contig = false;
+                        if(((int) (m_cmd_fifo.read() >> (ring_cmd_data_size - 1) ) & 0x1) == 1)
+				p_vci.eop = true;
+			else    
+				p_vci.eop = false; 
+		}
+		break;
+            
+	} // end switch fsm
+} // end genMoore
+
+///////////////////////////////////////////////////////////////////
+void update_ring_signals(ring_signal_t p_ring_in, ring_signal_t &p_ring_out)
+///////////////////////////////////////////////////////////////////
+{
+
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:
+			p_ring_out.rsp_grant = p_ring_in.rsp_grant && !m_rsp_fifo.rok();
+
+	        	p_ring_out.rsp_w    = p_ring_in.rsp_w;
+		        p_ring_out.rsp_data = p_ring_in.rsp_data;
+
+                	p_ring_out.rsp_r = p_ring_in.rsp_r;
+		break;
+
+		case DEFAULT:
+			p_ring_out.rsp_grant = !( m_rsp_fifo.rok()); 
+
+        		p_ring_out.rsp_w    =  m_rsp_fifo.rok();
+	        	p_ring_out.rsp_data =  m_rsp_fifo.read(); 
+
+                	p_ring_out.rsp_r = 1;
+		break;
+
+		case KEEP:  
+			int rsp_fifo_eop = (int) ((m_rsp_fifo.read() >> 32) & 0x1);
+			p_ring_out.rsp_grant = m_rsp_fifo.rok() && p_ring_in.rsp_r && (rsp_fifo_eop == 1);
+
+        		p_ring_out.rsp_w    =  m_rsp_fifo.rok();
+	        	p_ring_out.rsp_data =  m_rsp_fifo.read();
+
+                	p_ring_out.rsp_r = 1;
+
+		break; 
+
+	} // end switch
+
+	p_ring_out.cmd_w    = p_ring_in.cmd_w;
+	p_ring_out.cmd_data = p_ring_in.cmd_data;
+
+	p_ring_out.cmd_grant = p_ring_in.cmd_grant;
+
+	switch( r_ring_cmd_fsm ) 
+	{
+		case CMD_IDLE:
+		{
+			vci_addr_t rtgtid = (vci_addr_t) ((p_ring_in.cmd_data >> 1) << 2);
+		        bool islocal = m_lt[rtgtid]  && (m_rt[rtgtid] == (vci_addr_t) m_tgtid); 
+                        bool brdcst  = (p_ring_in.cmd_data & 0x1) == 0X1 ;
+                        bool eop     = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1); 
+
+                        if(p_ring_in.cmd_w && !eop && brdcst && !m_cmd_fifo.wok()) {
+                                p_ring_out.cmd_r = m_cmd_fifo.wok() && p_ring_in.cmd_r;
+                        }  
+        
+                        if(p_ring_in.cmd_w && !eop && brdcst && m_cmd_fifo.wok()) {
+                                p_ring_out.cmd_r = m_cmd_fifo.wok() && p_ring_in.cmd_r;
+
+                        }  
+        
+                        if (p_ring_in.cmd_w && !eop && !brdcst && islocal) {
+                                p_ring_out.cmd_r =  m_cmd_fifo.wok();
+
+                        } 
+        
+                        if (p_ring_in.cmd_w && !eop && !brdcst && !islocal) {
+                                p_ring_out.cmd_r =  p_ring_in.cmd_r; 
+                        }  
+
+                        if (!p_ring_in.cmd_w || eop) {
+                                p_ring_out.cmd_r =  p_ring_in.cmd_r; 
+                        }
+
+
+		}
+		break;
+
+                case BROADCAST_0:
+                        p_ring_out.cmd_r =  m_cmd_fifo.wok() && p_ring_in.cmd_r; 
+                break;
+
+                case BROADCAST_1:
+                        p_ring_out.cmd_r =  m_cmd_fifo.wok() && p_ring_in.cmd_r; 
+                break;
+
+		case LOCAL:
+
+                        p_ring_out.cmd_r =  m_cmd_fifo.wok(); 	
+		break;
+
+		case RING:
+
+			p_ring_out.cmd_r = p_ring_in.cmd_r;
+		break; 
+	} // end switch
+
+} // end update_ring_signals 
+  
+};
+
+}} // end namespace
+
+
Index: /trunk/modules/half_gateway_initiator_2/caba/metadata/half_gateway_initiator_2.sd
===================================================================
--- /trunk/modules/half_gateway_initiator_2/caba/metadata/half_gateway_initiator_2.sd	(revision 8)
+++ /trunk/modules/half_gateway_initiator_2/caba/metadata/half_gateway_initiator_2.sd	(revision 8)
@@ -0,0 +1,10 @@
+
+# -*- python -*-
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+
+Module('caba:half_gateway_initiator_2',
+	classname = 'soclib::caba::HalfGatewayInitiator2',
+	header_files = ['../source/include/half_gateway_initiator_2.h',],
+)
Index: /trunk/modules/half_gateway_initiator_2/caba/source/include/half_gateway_initiator_2.h
===================================================================
--- /trunk/modules/half_gateway_initiator_2/caba/source/include/half_gateway_initiator_2.h	(revision 8)
+++ /trunk/modules/half_gateway_initiator_2/caba/source/include/half_gateway_initiator_2.h	(revision 8)
@@ -0,0 +1,434 @@
+ /* SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : March 2010
+ * Copyright: UPMC - LIP6
+ */
+#include <systemc>
+#include "caba_base_module.h"
+#include "generic_fifo.h"
+#include "mapping_table.h"
+#include "ring_signals_2.h"
+#include "gate_ports_2.h"
+
+//#define HI_DEBUG
+//#define HI_DEBUG_FSM
+
+namespace soclib { namespace caba {
+
+using namespace sc_core;
+
+#ifdef HI_DEBUG_FSM
+namespace {
+
+        const char *ring_cmd_fsm_state_str_hi[] = {
+                "CMD_IDLE",
+                "DEFAULT",
+                "KEEP",
+        };
+        const char *ring_rsp_fsm_state_str_hi[] = {
+                "RSP_IDLE",
+                "LOCAL",
+                "RING",
+        };
+}
+#endif
+
+template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size>
+class HalfGatewayInitiator2
+{
+
+typedef RingSignals2 ring_signal_t;
+typedef soclib::caba::GateInitiator2<ring_cmd_data_size, ring_rsp_data_size> gate_initiator_t;
+
+private:
+        
+        enum ring_rsp_fsm_state_e {
+            	RSP_IDLE,    // waiting for first flit of a response packet
+            	LOCAL,      // next flit of a local rsp packet
+            	RING,  	    // next flit of a ring rsp packet
+            };
+        
+        // cmd token allocation fsm
+        enum ring_cmd_fsm_state_e {
+            	CMD_IDLE,	    
+             	DEFAULT,  	
+            	KEEP,          	    
+            };
+        
+        // structural parameters
+        bool                m_alloc_init;
+        bool                m_local;
+ 	std::string         m_name;
+       
+        // internal registers
+        sc_signal<int>	    r_ring_cmd_fsm;    // ring command packet FSM (distributed)
+        sc_signal<int>	    r_ring_rsp_fsm;    // ring response packet FSM
+        
+           
+        // internal fifos 
+        GenericFifo<uint64_t > m_cmd_fifo;     // fifo for the local command packet
+        GenericFifo<uint64_t > m_rsp_fifo;     // fifo for the local response packet
+        
+        // routing table
+        soclib::common::AddressDecodingTable<uint32_t, bool> m_lt;
+
+bool trace(int sc_time_stamp)
+{
+int time_stamp=0;
+char *ctime_stamp= getenv("FROM_CYCLE");
+
+if (ctime_stamp) time_stamp=atoi(ctime_stamp); 	
+
+return sc_time_stamp >= time_stamp;
+
+}
+
+public :
+
+HalfGatewayInitiator2(
+	const char     *name,
+        bool            alloc_init,
+        const int       &wrapper_fifo_depth,
+        const soclib::common::MappingTable &mt,
+        const soclib::common::IntTab &ringid,
+        bool local)
+      : m_name(name),
+        m_alloc_init(alloc_init),
+        m_cmd_fifo("m_cmd_fifo", wrapper_fifo_depth),
+        m_rsp_fifo("m_rsp_fifo", wrapper_fifo_depth),
+        m_lt(mt.getIdLocalityTable(ringid)),
+        m_local(local),
+        r_ring_cmd_fsm("r_ring_cmd_fsm"),
+        r_ring_rsp_fsm("r_ring_rsp_fsm")
+ { } //  end constructor
+
+void reset()
+{
+	if(m_alloc_init)
+		r_ring_cmd_fsm = DEFAULT;
+	else
+		r_ring_cmd_fsm = CMD_IDLE;
+
+	r_ring_rsp_fsm = RSP_IDLE;
+	m_cmd_fifo.init();
+	m_rsp_fifo.init();
+}
+
+void transition(const gate_initiator_t &p_gate_initiator, const ring_signal_t p_ring_in)       
+{
+
+	bool      cmd_fifo_get = false;
+	bool      cmd_fifo_put = false;
+	uint64_t  cmd_fifo_data = 0;
+
+//	bool      rsp_fifo_get = false;
+	bool      rsp_fifo_put = false;
+	uint64_t  rsp_fifo_data = 0;
+
+#ifdef HI_DEBUG_FSM
+    std::cout << "--------------------------------------------" << std::endl;
+    std::cout << " ring cmd fsm = " << ring_cmd_fsm_state_str_hi[r_ring_cmd_fsm] << std::endl;
+    std::cout << " ring rsp fsm = " << ring_rsp_fsm_state_str_hi[r_ring_rsp_fsm] << std::endl;
+#endif
+//////////// VCI CMD FSM /////////////////////////
+
+	if (p_gate_initiator.cmd_rok.read()) {
+		cmd_fifo_data = (uint64_t) p_gate_initiator.cmd_data.read();
+		cmd_fifo_put =  m_cmd_fifo.wok();
+	}
+
+	bool rsp_fifo_get = p_gate_initiator.rsp_wok.read();
+
+//////////// RING CMD FSM /////////////////////////
+	switch( r_ring_cmd_fsm ) 
+	{
+		case CMD_IDLE:    
+#ifdef HI_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " -- r_ring_cmd_fsm : CMD_IDLE "
+          << " -- fifo ROK : " << m_cmd_fifo.rok()
+          << " -- in grant : " << p_ring_in.cmd_grant
+          << " -- fifo _data : " << std::hex << m_cmd_fifo.read()
+          << std::endl;
+#endif
+    
+			if ( p_ring_in.cmd_grant && m_cmd_fifo.rok() )  
+                        {
+// debug above is here
+                		r_ring_cmd_fsm = KEEP; 
+                        }
+		break;
+
+		case DEFAULT: 
+#ifdef HI_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " -- r_ring_cmd_fsm : DEFAULT "
+          << " -- fifo ROK : " << m_cmd_fifo.rok()
+          << " -- in grant : " << p_ring_in.cmd_grant
+          << " -- fifo _data : " << std::hex << m_cmd_fifo.read()
+          << std::endl;
+#endif
+        
+			if ( m_cmd_fifo.rok() ) 
+			{
+// debug above is here
+				cmd_fifo_get = p_ring_in.cmd_r;  
+				r_ring_cmd_fsm = KEEP;             
+			}   
+			else if ( !p_ring_in.cmd_grant )
+				r_ring_cmd_fsm = CMD_IDLE; 
+		break;
+
+		case KEEP:   
+ #ifdef HI_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " -- r_ring_cmd_fsm : KEEP "
+          << " -- fifo_rok : " << m_cmd_fifo.rok()
+          << " -- in grant : " << p_ring_in.cmd_grant
+          << " -- ring_in_wok : " << p_ring_in.cmd_r
+          << " -- fifo_out_data : " << std::hex << m_cmd_fifo.read()
+          << std::endl;
+#endif
+                         
+			if(m_cmd_fifo.rok() && p_ring_in.cmd_r ) 
+			{
+// debug above is here
+				cmd_fifo_get = true;  
+				if (((int) (m_cmd_fifo.read() >> (ring_cmd_data_size - 1) ) & 0x1) == 1)  // 39
+				{  
+					if ( p_ring_in.cmd_grant )
+						r_ring_cmd_fsm = DEFAULT;  
+					else   
+						r_ring_cmd_fsm = CMD_IDLE; 
+				}        
+			}      
+		break;
+
+	} // end switch ring cmd fsm
+ 
+/////////// RING RSP FSM ////////////////////////
+    
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:  
+		{
+			int rsrcid   = (int)  ((p_ring_in.rsp_data >> 12 ) & 0x3FFF);
+			bool islocal = (m_lt[rsrcid] && m_local) || (!m_lt[rsrcid] && !m_local);
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+
+#ifdef HI_DEBUG
+if( trace(sc_time_stamp()))
+	std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_rsp_fsm -- RSP_IDLE "
+              << " -- islocal : " << islocal
+              << " -- eop : " << reop
+              << " -- rsrcid : " << std::hex << rsrcid
+              << " -- in rok : " << p_ring_in.rsp_w
+              << " -- in wok : " << p_ring_in.rsp_r
+              << " -- fifo wok : " <<  m_rsp_fifo.wok()         
+              << std::endl;
+#endif
+			if (p_ring_in.rsp_w  &&  !reop && islocal) 
+			{   
+				r_ring_rsp_fsm = LOCAL;
+				rsp_fifo_put  = m_rsp_fifo.wok();
+				rsp_fifo_data = p_ring_in.rsp_data;
+			}
+			if (p_ring_in.rsp_w  &&  !reop && !islocal) 
+			{
+				r_ring_rsp_fsm = RING;  
+			}
+			if (!p_ring_in.rsp_w  || reop ) 
+			{			
+				r_ring_rsp_fsm = RSP_IDLE;
+			} 
+		}
+		break;
+
+		case LOCAL:
+		{
+
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+#ifdef HI_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_rsp_fsm -- LOCAL "
+              << " -- in rok : " << p_ring_in.rsp_w
+              << " -- fifo wok : " <<  m_rsp_fifo.wok()   
+              << " -- in data : " << std::hex << p_ring_in.rsp_data
+	      << " -- eop : " << reop
+              << std::endl;
+#endif
+
+
+			if (p_ring_in.rsp_w && m_rsp_fifo.wok() && reop)         
+			{
+
+				rsp_fifo_put  = true;
+				rsp_fifo_data = p_ring_in.rsp_data;
+				r_ring_rsp_fsm = RSP_IDLE;             
+			}
+			if (!p_ring_in.rsp_w || !m_rsp_fifo.wok() || !reop)         
+			{
+
+				rsp_fifo_put  = p_ring_in.rsp_w && m_rsp_fifo.wok();
+				rsp_fifo_data = p_ring_in.rsp_data;
+				r_ring_rsp_fsm = LOCAL;             
+			}
+		} 
+		break;
+
+		case RING:     
+		{
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+
+#ifdef I_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_rsp_fsm -- RING "
+              << " -- in rok : " << p_ring_in.rsp_w
+              << " -- in wok : " <<  p_ring_in.rsp_r   
+              << " -- in data : " << std::hex << p_ring_in.rsp_data
+	      << " -- eop : " << reop	
+              << std::endl;
+#endif
+
+
+			if (p_ring_in.rsp_w && reop)
+			{
+				r_ring_rsp_fsm = RSP_IDLE; 
+			}
+			else
+			{
+				r_ring_rsp_fsm = RING;
+			}
+		}
+		break;
+
+	} // end switch rsp fsm
+      
+    ////////////////////////
+    //  fifos update      //
+   ////////////////////////
+
+// local cmd fifo update
+	if (  cmd_fifo_put &&  cmd_fifo_get ) m_cmd_fifo.put_and_get(cmd_fifo_data);
+	else if (  cmd_fifo_put && !cmd_fifo_get ) m_cmd_fifo.simple_put(cmd_fifo_data);
+	else if ( !cmd_fifo_put &&  cmd_fifo_get ) m_cmd_fifo.simple_get();
+	
+// local rsp fifo update
+	if (  rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.put_and_get(rsp_fifo_data);
+	else if (  rsp_fifo_put && !rsp_fifo_get ) m_rsp_fifo.simple_put(rsp_fifo_data);
+	else if ( !rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.simple_get();
+     
+}  // end Transition()
+
+///////////////////////////////////////////////////////////////////
+void genMoore(gate_initiator_t &p_gate_initiator)
+///////////////////////////////////////////////////////////////////
+{
+	p_gate_initiator.rsp_w    = m_rsp_fifo.rok();
+	p_gate_initiator.rsp_data = m_rsp_fifo.read();
+
+	p_gate_initiator.cmd_r= m_cmd_fifo.wok();
+
+} // end genMoore
+
+///////////////////////////////////////////////////////////////////
+void update_ring_signals(ring_signal_t p_ring_in, ring_signal_t &p_ring_out)
+///////////////////////////////////////////////////////////////////
+{    
+	switch( r_ring_cmd_fsm ) 
+	{
+		case CMD_IDLE:
+			p_ring_out.cmd_grant = p_ring_in.cmd_grant && !m_cmd_fifo.rok();
+
+                     	p_ring_out.cmd_r     = p_ring_in.cmd_r;
+
+        		p_ring_out.cmd_w     = p_ring_in.cmd_w;
+	        	p_ring_out.cmd_data  = p_ring_in.cmd_data;
+		break;
+	
+		case DEFAULT:        
+			p_ring_out.cmd_grant = !( m_cmd_fifo.rok());  
+
+                   	p_ring_out.cmd_r    = 1;
+
+	        	p_ring_out.cmd_w    =  m_cmd_fifo.rok();
+		        p_ring_out.cmd_data =  m_cmd_fifo.read();
+		break;
+	
+		case KEEP:  
+			int cmd_fifo_eop = (int) ((m_cmd_fifo.read() >> (ring_cmd_data_size - 1)) & 0x1) ; //39
+			p_ring_out.cmd_grant = m_cmd_fifo.rok() && p_ring_in.cmd_r && (cmd_fifo_eop == 1);
+
+                   	p_ring_out.cmd_r    = 1;	
+
+        		p_ring_out.cmd_w    =  m_cmd_fifo.rok();
+	        	p_ring_out.cmd_data =  m_cmd_fifo.read();
+		break;
+	
+	} // end switch
+
+	p_ring_out.rsp_grant = p_ring_in.rsp_grant;
+
+	p_ring_out.rsp_w    = p_ring_in.rsp_w;
+	p_ring_out.rsp_data = p_ring_in.rsp_data;
+
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:	
+		{
+			int rsrcid   = (int)  ((p_ring_in.rsp_data >> 12 ) & 0x3FFF);
+			bool islocal = (m_lt[rsrcid] && m_local) || (!m_lt[rsrcid] && !m_local);
+			bool reop     = ((p_ring_in.rsp_data >> (ring_rsp_data_size - 1)) & 0x1) == 1;
+
+			if(p_ring_in.rsp_w && !reop && islocal) {
+				p_ring_out.rsp_r = m_rsp_fifo.wok();
+			}
+			if(p_ring_in.rsp_w && !reop && !islocal) {
+				p_ring_out.rsp_r = p_ring_in.rsp_r;
+			}
+			if(!p_ring_in.rsp_w || reop)  {
+				p_ring_out.rsp_r = p_ring_in.rsp_r;
+			}
+ 
+		}
+		break;
+	
+		case LOCAL:
+			p_ring_out.rsp_r = m_rsp_fifo.wok();
+		break;
+	
+		case RING:
+			p_ring_out.rsp_r = p_ring_in.rsp_r;
+		break;    
+	} // end switch
+
+
+} // end update_ring_signals
+
+};
+
+}} // end namespace
+
+
Index: /trunk/modules/half_gateway_target_2/caba/metadata/half_gateway_target_2.sd
===================================================================
--- /trunk/modules/half_gateway_target_2/caba/metadata/half_gateway_target_2.sd	(revision 8)
+++ /trunk/modules/half_gateway_target_2/caba/metadata/half_gateway_target_2.sd	(revision 8)
@@ -0,0 +1,10 @@
+
+# -*- python -*-
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+
+Module('caba:half_gateway_target_2',
+	classname = 'soclib::caba::HalfGatewayTarget2',
+	header_files = ['../source/include/half_gateway_target_2.h',],
+)
Index: /trunk/modules/half_gateway_target_2/caba/source/include/half_gateway_target_2.h
===================================================================
--- /trunk/modules/half_gateway_target_2/caba/source/include/half_gateway_target_2.h	(revision 8)
+++ /trunk/modules/half_gateway_target_2/caba/source/include/half_gateway_target_2.h	(revision 8)
@@ -0,0 +1,530 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : March 2010
+ *
+ * Copyright: UPMC - LIP6
+ */
+#include "vci_initiator.h"
+#include "generic_fifo.h"
+#include "mapping_table.h"
+#include "ring_signals_2.h"
+#include "gate_ports_2.h"
+
+//#define HT_DEBUG
+//#define HT_DEBUG_FSM
+
+namespace soclib { namespace caba {
+
+using soclib::common::IntTab;
+
+#ifdef HT_DEBUG_FSM
+namespace {
+        const char *ring_rsp_fsm_state_str_ht[] = {
+                "RSP_IDLE",
+                "DEFAULT",
+                "KEEP",
+        };
+        const char *ring_cmd_fsm_state_str_ht[] = {
+                "CMD_IDLE",
+                "BROADCAST_0",
+                "BROADCAST_1",
+                "LOCAL",
+                "RING",
+        };
+}
+#endif
+
+template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size>
+class HalfGatewayTarget2
+{
+
+typedef typename vci_param::fast_addr_t vci_addr_t;
+typedef RingSignals2 ring_signal_t; 
+typedef soclib::caba::GateTarget2<ring_cmd_data_size, ring_rsp_data_size> gate_target_t;
+
+private:
+        
+        enum ring_cmd_fsm_state_e {
+        	CMD_IDLE,	 // waiting for first flit of a command packet
+                BROADCAST_0,
+                BROADCAST_1,
+        	LOCAL,  	// next flit of a local cmd packet
+        	RING,  	       // next flit of a ring cmd packet
+        };
+        
+        // cmd token allocation fsm
+        enum ring_rsp_fsm_state_e {
+        	RSP_IDLE,	    
+        	DEFAULT,  	
+        	KEEP,  	            
+        };
+        
+        // structural parameters
+        bool          m_alloc_target;
+        bool          m_local;
+ 	std::string   m_name;
+      
+        // internal registers
+        sc_signal<int>	        r_ring_cmd_fsm;	    // ring command packet FSM 
+        sc_signal<int>		r_ring_rsp_fsm;	    // ring response packet FSM
+        
+            
+        // internal fifos 
+        GenericFifo<uint64_t > m_cmd_fifo;     // fifo for the local command paquet
+        GenericFifo<uint64_t > m_rsp_fifo;     // fifo for the local response paquet
+        
+        // locality table 
+	soclib::common::AddressDecodingTable<vci_addr_t, bool> m_lt;
+        soclib::common::IntTab m_ringid;
+
+bool trace(int sc_time_stamp)
+{
+int time_stamp=0;
+char *ctime_stamp= getenv("FROM_CYCLE");
+
+if (ctime_stamp) time_stamp=atoi(ctime_stamp); 	
+
+return sc_time_stamp >= time_stamp;
+
+}
+
+public :
+
+HalfGatewayTarget2(
+	const char     *name,
+        bool            alloc_target,
+        const int       &wrapper_fifo_depth,
+        const soclib::common::MappingTable &mt,
+        const soclib::common::IntTab &ringid,
+        bool  local) 
+    :   m_name(name), 
+        m_alloc_target(alloc_target),
+        m_cmd_fifo("m_cmd_fifo", wrapper_fifo_depth),
+        m_rsp_fifo("m_rsp_fifo", wrapper_fifo_depth),
+        m_lt(mt.getLocalityTable<typename vci_param::fast_addr_t>(ringid)),
+        m_ringid(ringid),
+        m_local(local),
+       	r_ring_cmd_fsm("r_ring_cmd_fsm"),
+	r_ring_rsp_fsm("r_ring_rsp_fsm")
+{
+} //  end constructor
+
+void reset()
+{
+        if(m_alloc_target)
+        	r_ring_rsp_fsm = DEFAULT;
+        else
+        	r_ring_rsp_fsm = RSP_IDLE;
+        
+        r_ring_cmd_fsm = CMD_IDLE;
+        m_cmd_fifo.init();
+        m_rsp_fifo.init();       
+}
+////////////////////////////////
+//	transition 
+////////////////////////////////
+void transition(const gate_target_t &p_gate_target, const ring_signal_t p_ring_in)       
+{
+
+//	bool      cmd_fifo_get = false;
+	bool      cmd_fifo_put = false;
+	uint64_t  cmd_fifo_data = 0;
+	
+	bool      rsp_fifo_get = false;
+	bool      rsp_fifo_put = false;
+	uint64_t  rsp_fifo_data = 0;
+
+#ifdef HT_DEBUG_FSM
+    std::cout << "--------------------------------------------" << std::endl;
+    std::cout             << " ring cmd fsm = " << ring_cmd_fsm_state_str_ht[r_ring_cmd_fsm] << std::endl
+                          << " ring rsp fsm = " << ring_rsp_fsm_state_str_ht[r_ring_rsp_fsm] << std::endl;
+#endif
+	
+//////////// VCI CMD FSM /////////////////////////
+
+	if (p_gate_target.rsp_rok.read()) {
+		rsp_fifo_data = (uint64_t) p_gate_target.rsp_data.read();
+		rsp_fifo_put =  m_rsp_fifo.wok();
+	}
+
+	bool cmd_fifo_get = p_gate_target.cmd_wok.read();
+   
+//////////// RING RSP FSM (distributed) /////////////////////////
+        
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:   
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " -- ring_rsp_fsm : RSP_IDLE"
+          << " -- fifo rok : " <<  m_rsp_fifo.rok()
+          << " -- ring rok : " <<  p_ring_in.rsp_w
+          << " -- ringin rsp grant : " << p_ring_in.rsp_grant
+          << " -- ringin rsp data  : " << p_ring_in.rsp_data
+          << std::endl;
+#endif    
+			if ( p_ring_in.rsp_grant && m_rsp_fifo.rok() ) 
+
+				r_ring_rsp_fsm = KEEP;           
+                
+		break;
+
+		case DEFAULT:  
+			
+                        if ( m_rsp_fifo.rok()) // && p_ring_in.rsp_r ) 
+			{
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " --  ring_rsp_fsm : DEFAULT " 
+          << " -- fifo_rsp_data : " << std::hex << m_rsp_fifo.read()
+          << std::endl;
+#endif
+				rsp_fifo_get = p_ring_in.rsp_r; //true;
+				r_ring_rsp_fsm = KEEP;
+			}   
+			else if ( !p_ring_in.rsp_grant )
+				r_ring_rsp_fsm = RSP_IDLE;  
+		break;
+
+		case KEEP:   
+             
+			if(m_rsp_fifo.rok() && p_ring_in.rsp_r) 
+			{
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+std::cout << sc_time_stamp() << " -- " << m_name << " -- ring_rsp_fsm : KEEP "
+          << " -- fifo_rok : " << m_rsp_fifo.rok()
+          << " -- ring_in_wok : " << p_ring_in.rsp_r
+          << " -- fifo_out_data : " << std::hex << m_rsp_fifo.read()
+          << std::endl;
+#endif
+				rsp_fifo_get = true;              
+				if ((int) ((m_rsp_fifo.read() >> 32 ) & 0x1) == 1)  
+				{             
+					if ( p_ring_in.rsp_grant )
+						r_ring_rsp_fsm = DEFAULT;  
+					else   
+						r_ring_rsp_fsm = RSP_IDLE;                
+				} 
+			}           
+		break;
+
+	} // end switch ring cmd fsm
+
+/////////// RING CMD FSM ////////////////////////
+	switch( r_ring_cmd_fsm ) 
+	{
+
+		case CMD_IDLE: 
+		{
+                        vci_addr_t rtgtid = (vci_addr_t) ((p_ring_in.cmd_data >> 1) << 2);
+                        uint32_t cluster = (uint32_t) ((p_ring_in.cmd_data >> 24) & 0xF); // a voir FF
+                        bool brdcst = (IntTab(cluster) == m_ringid) && ((p_ring_in.cmd_data & 0x1) == 0X1) ;                       
+                        bool loc = !((p_ring_in.cmd_data & 0x1) == 0x1) && !m_lt[rtgtid] && !m_local;
+                        bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+ 
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp())) {
+std::cout     << sc_time_stamp() << " -- " << m_name 
+              << " -- ring_cmd_fsm -- CMD_IDLE "
+              << " -- in rok : " << p_ring_in.cmd_w
+	      << " -- addr : " << std::hex << rtgtid
+              << " -- brdcst : " << brdcst
+	      << " -- eop : " << eop
+              << " -- isloc : " << loc 
+              << " -- in wok : " << p_ring_in.cmd_r
+              << " -- fifo wok : " << m_cmd_fifo.wok()
+//            << " -- cluster : " << std::hex << cluster
+//            << " -- intTab : " << IntTab(cluster)
+              << std::endl;
+}
+#endif
+                      if(p_ring_in.cmd_w && !eop && brdcst && !m_cmd_fifo.wok()) {
+                              r_ring_cmd_fsm = BROADCAST_0; 
+                      }  
+        
+                      if(p_ring_in.cmd_w && !eop && brdcst && m_cmd_fifo.wok()) {
+                              r_ring_cmd_fsm = BROADCAST_1;
+                              cmd_fifo_put  = true;
+                      	      cmd_fifo_data = p_ring_in.cmd_data;
+
+                      }  
+        
+                      if (p_ring_in.cmd_w && !eop && !brdcst && loc) {
+                              r_ring_cmd_fsm = LOCAL; 
+                              cmd_fifo_put   = m_cmd_fifo.wok();
+                              cmd_fifo_data  = p_ring_in.cmd_data;  
+
+                      } 
+        
+                      if (p_ring_in.cmd_w && !eop && !brdcst && !loc) {
+                              r_ring_cmd_fsm = RING;
+                      }  
+
+                      if (!p_ring_in.cmd_w || eop) {
+                              r_ring_cmd_fsm = CMD_IDLE;
+                      }
+
+                }
+
+		break;
+
+                case BROADCAST_0:
+
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name  
+              << " -- ring_cmd_fsm -- BROADCAST_0 "
+              << " -- ringin cmd rok : " << p_ring_in.cmd_w
+              << " -- ringin cmd wok : " << p_ring_in.cmd_r 
+              << " -- ringin data : " << std::hex << p_ring_in.cmd_data
+              << " -- fifo cmd wok : " << m_cmd_fifo.wok()
+              << std::endl;
+#endif
+                	if ( m_cmd_fifo.wok() )
+                        { 
+				cmd_fifo_data = p_ring_in.cmd_data;
+				r_ring_cmd_fsm = BROADCAST_1;
+
+                        } else {
+				r_ring_cmd_fsm = BROADCAST_0;
+                        }
+
+		break;
+
+                case BROADCAST_1:
+                {
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name 
+              << " -- ring_cmd_fsm -- BROADCAST_1 "
+              << " -- ringin cmd rok : " << p_ring_in.cmd_w
+              << " -- ringin cmd wok : " << p_ring_in.cmd_r 
+              << " -- ringin data : " << std::hex << p_ring_in.cmd_data
+              << " -- fifo cmd wok : " << m_cmd_fifo.wok()
+              << std::endl;
+#endif
+
+                        bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+
+                	if ( p_ring_in.cmd_w && m_cmd_fifo.wok() && eop )
+                        { 
+				cmd_fifo_data = p_ring_in.cmd_data;
+				cmd_fifo_put  = 1;
+				r_ring_cmd_fsm = CMD_IDLE;
+
+                        }
+                        else {        		 
+                		r_ring_cmd_fsm = BROADCAST_1;
+                        }
+                        
+                } 
+ 		break;
+
+		case LOCAL:   
+                {
+                        bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name 
+              << " -- ring_cmd_fsm -- LOCAL "
+              << " -- in cmd rok : " << p_ring_in.cmd_w
+              << " -- in cmd wok : " << p_ring_in.cmd_r 
+              << " -- in data : " << std::hex << p_ring_in.cmd_data
+              << " -- fifo wok : " << m_cmd_fifo.wok()	
+	      << " -- eop : " << eop
+              << std::endl;
+#endif
+
+                 	if ( p_ring_in.cmd_w && m_cmd_fifo.wok() && eop )
+                        { 
+
+				cmd_fifo_put  = true;
+				cmd_fifo_data = p_ring_in.cmd_data;
+			     	r_ring_cmd_fsm = CMD_IDLE;
+			     		
+                        }
+                        
+                 	if ( !p_ring_in.cmd_w || !m_cmd_fifo.wok() || !eop )
+                        { 
+
+				cmd_fifo_put  = p_ring_in.cmd_w && m_cmd_fifo.wok();
+				cmd_fifo_data = p_ring_in.cmd_data;
+			     	r_ring_cmd_fsm = LOCAL;
+			     		
+                        }                        
+                } 
+		break;
+
+		case RING:   
+                { 
+ 
+			bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+#ifdef HT_DEBUG
+if( trace(sc_time_stamp()))
+         std::cout << sc_time_stamp() << " -- " << m_name 
+              << " -- ring_cmd_fsm -- RING "
+              << " -- in cmd rok : " << p_ring_in.cmd_w
+              << " -- in data : " << std::hex << p_ring_in.cmd_data
+              << " -- in wok : " << p_ring_in.cmd_r
+	      << " -- eop : " << eop
+
+              << std::endl;
+#endif 
+
+			if ( p_ring_in.cmd_w && eop ) {        
+        			r_ring_cmd_fsm = CMD_IDLE;
+                        }
+                        else {
+ 				r_ring_cmd_fsm = RING;
+                        }
+                }
+		break;
+	} // end switch cmd fsm
+
+    ////////////////////////
+    //  fifos update      //
+   ////////////////////////
+
+// local cmd fifo update
+	if ( cmd_fifo_put && cmd_fifo_get ) m_cmd_fifo.put_and_get(cmd_fifo_data);
+	else if (  cmd_fifo_put && !cmd_fifo_get ) m_cmd_fifo.simple_put(cmd_fifo_data);
+	else if ( !cmd_fifo_put && cmd_fifo_get ) m_cmd_fifo.simple_get();
+// local rsp fifo update
+	if (  rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.put_and_get(rsp_fifo_data);
+	else if (  rsp_fifo_put && !rsp_fifo_get ) m_rsp_fifo.simple_put(rsp_fifo_data);
+	else if ( !rsp_fifo_put &&  rsp_fifo_get ) m_rsp_fifo.simple_get();
+ 
+}  // end Transition()
+  
+///////////////////////////////////////////////////////////////////
+void genMoore(gate_target_t &p_gate_target)
+///////////////////////////////////////////////////////////////////
+{
+	p_gate_target.cmd_w    = m_cmd_fifo.rok();
+	p_gate_target.cmd_data = m_cmd_fifo.read();
+
+	p_gate_target.rsp_r= m_rsp_fifo.wok();
+} // end genMoore
+
+///////////////////////////////////////////////////////////////////
+void update_ring_signals(ring_signal_t p_ring_in, ring_signal_t &p_ring_out)
+///////////////////////////////////////////////////////////////////
+{
+
+	switch( r_ring_rsp_fsm ) 
+	{
+		case RSP_IDLE:
+			p_ring_out.rsp_grant = p_ring_in.rsp_grant && !m_rsp_fifo.rok();
+
+	        	p_ring_out.rsp_w    = p_ring_in.rsp_w;
+		        p_ring_out.rsp_data = p_ring_in.rsp_data;
+
+                	p_ring_out.rsp_r = p_ring_in.rsp_r;
+		break;
+
+		case DEFAULT:
+			p_ring_out.rsp_grant = !( m_rsp_fifo.rok()); 
+
+        		p_ring_out.rsp_w    =  m_rsp_fifo.rok();
+	        	p_ring_out.rsp_data =  m_rsp_fifo.read(); 
+
+                	p_ring_out.rsp_r = 1;
+		break;
+
+		case KEEP:  
+			int rsp_fifo_eop = (int) ((m_rsp_fifo.read() >> 32) & 0x1);
+			p_ring_out.rsp_grant = m_rsp_fifo.rok() && p_ring_in.rsp_r && (rsp_fifo_eop == 1);
+
+        		p_ring_out.rsp_w    =  m_rsp_fifo.rok();
+	        	p_ring_out.rsp_data =  m_rsp_fifo.read();
+
+                	p_ring_out.rsp_r = 1;
+
+		break; 
+
+	} // end switch
+
+	p_ring_out.cmd_w    = p_ring_in.cmd_w;
+	p_ring_out.cmd_data = p_ring_in.cmd_data;
+
+	p_ring_out.cmd_grant = p_ring_in.cmd_grant;
+
+	switch( r_ring_cmd_fsm ) 
+	{
+		case CMD_IDLE:
+		{
+
+                        vci_addr_t rtgtid = (vci_addr_t) ((p_ring_in.cmd_data >> 1) << 2);
+                        uint32_t cluster = (uint32_t) ((p_ring_in.cmd_data >> 24) & 0xF); // a voir FF
+                        bool brdcst = (IntTab(cluster) == m_ringid) && ((p_ring_in.cmd_data & 0x1) == 0X1) ;
+                        bool loc = !((p_ring_in.cmd_data & 0x1) == 0x1) && !m_lt[rtgtid] && !m_local;
+                        bool eop = ( (int) ((p_ring_in.cmd_data >> (ring_cmd_data_size - 1) ) & 0x1) == 1);
+
+                        if(p_ring_in.cmd_w && !eop && brdcst && !m_cmd_fifo.wok()) {
+                                p_ring_out.cmd_r = m_cmd_fifo.wok() && p_ring_in.cmd_r;
+                        }  
+                        if(p_ring_in.cmd_w && !eop && brdcst && m_cmd_fifo.wok()) {
+                                p_ring_out.cmd_r = m_cmd_fifo.wok() && p_ring_in.cmd_r;
+
+                        }  
+                        if (p_ring_in.cmd_w && !eop && !brdcst && loc) {
+                                p_ring_out.cmd_r =  m_cmd_fifo.wok();
+
+                        } 
+                        if (p_ring_in.cmd_w && !eop && !brdcst && !loc) {
+                                p_ring_out.cmd_r =  p_ring_in.cmd_r; 
+                        }  
+
+                        if (!p_ring_in.cmd_w || eop) {
+                                p_ring_out.cmd_r =  p_ring_in.cmd_r; 
+                        }
+		}
+		break;
+               case BROADCAST_0:
+                        p_ring_out.cmd_r =  m_cmd_fifo.wok() && p_ring_in.cmd_r; 
+                break;
+
+                case BROADCAST_1:
+                        p_ring_out.cmd_r =  m_cmd_fifo.wok() && p_ring_in.cmd_r; 
+                break;
+
+		case LOCAL:
+
+                        p_ring_out.cmd_r =  m_cmd_fifo.wok(); 	
+		break;
+
+		case RING:
+
+			p_ring_out.cmd_r = p_ring_in.cmd_r;
+		break;
+
+	} // end switch
+
+} // end update_ring_signals 
+  
+};
+
+}} // end namespace
+
+
Index: /trunk/modules/vci_local_ring_network_2/caba/metadata/vci_local_ring_network_2.sd
===================================================================
--- /trunk/modules/vci_local_ring_network_2/caba/metadata/vci_local_ring_network_2.sd	(revision 8)
+++ /trunk/modules/vci_local_ring_network_2/caba/metadata/vci_local_ring_network_2.sd	(revision 8)
@@ -0,0 +1,49 @@
+# -*- python -*-
+
+__id__ = "$Id: vci_local_ring_network_2.sd 917 2009-03-12 10:10:06Z nipo $"
+__version__ = "$Revision: 917 $"
+
+Module('caba:vci_local_ring_network_2',
+	classname = 'soclib::caba::VciLocalRingNetwork2',
+	tmpl_parameters = [
+	    parameter.Module('vci_param', default = 'caba:vci_param'),
+            parameter.Int('ring_cmd_data_size'),
+            parameter.Int('ring_rsp_data_size'),           	    
+	],
+	header_files = ['../source/include/vci_local_ring_network_2.h',],
+	implementation_files = ['../source/src/vci_local_ring_network_2.cpp',],
+	ports = [
+            Port('caba:vci_initiator', 'p_to_target', parameter.Reference('nb_attached_target')),
+	    Port('caba:vci_target', 'p_to_initiator', parameter.Reference('nb_attached_initiator')),
+	    # FIXME: Ports vci
+	    Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+	    Port('caba:clock_in', 'p_clk', auto = 'clock'),
+            Port('caba:gate_initiator_2', 'p_gate_initiator'),
+	    Port('caba:gate_target_2',    'p_gate_target'), 
+
+	],
+	instance_parameters = [
+		parameter.Module('mt', 'common:mapping_table', auto='env:mapping_table'),
+	        parameter.IntTab('ringid'),
+                parameter.Int('wrapper_fifo_depth'),
+                parameter.Int('half_gateway_fifo_depth'),
+                parameter.Int('nb_attached_initiator'),
+                parameter.Int('nb_attached_target'),
+
+	],
+	uses = [
+	    Uses('caba:base_module'),
+	    Uses('common:mapping_table'),
+	    Uses('caba:vci_ring_initiator'),
+	    Uses('caba:vci_ring_target'),
+	    Uses('caba:ring_signals_2'),
+	    Uses('caba:half_gateway_initiator_2'),
+	    Uses('caba:half_gateway_target_2'),
+	    Uses('caba:generic_fifo'),
+	],
+	   extensions = [
+	'dsx:interconnect=root',
+	'dsx:mapping_type=interconnect',
+	'dsx:obtain_ident_method=port',
+	],        
+)
Index: /trunk/modules/vci_local_ring_network_2/caba/source/include/vci_local_ring_network_2.h
===================================================================
--- /trunk/modules/vci_local_ring_network_2/caba/source/include/vci_local_ring_network_2.h	(revision 8)
+++ /trunk/modules/vci_local_ring_network_2/caba/source/include/vci_local_ring_network_2.h	(revision 8)
@@ -0,0 +1,98 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Authors  : Abdelmalek SI MERABET 
+ * Date     : March 2010 
+ * Copyright: UPMC - LIP6
+ */
+#ifndef VCI_LOCAL_RING_H_
+#define VCI_LOCAL_RING_H_
+
+#include <systemc>
+#include "caba_base_module.h"
+#include "mapping_table.h"
+#include "generic_fifo.h"
+#include "address_decoding_table.h"
+#include "address_masking_table.h"
+#include "ring_signals_2.h"
+#include "vci_ring_initiator.h"
+#include "vci_ring_target.h"
+#include "half_gateway_initiator_2.h"
+#include "half_gateway_target_2.h"
+
+
+namespace soclib { namespace caba {
+
+    using namespace sc_core;
+
+    template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size>
+        class VciLocalRingNetwork2
+        : public soclib::caba::BaseModule
+        {
+            public:
+                sc_in<bool>             p_clk;
+                sc_in<bool>             p_resetn;
+
+                soclib::caba::VciInitiator<vci_param>* p_to_target;
+                soclib::caba::VciTarget<vci_param>   * p_to_initiator;
+
+                // Gate interface
+		soclib::caba::GateInitiator2<ring_cmd_data_size, ring_rsp_data_size> p_gate_initiator;
+		soclib::caba::GateTarget2<ring_cmd_data_size, ring_rsp_data_size>    p_gate_target;
+               
+        protected:
+                SC_HAS_PROCESS(VciLocalRingNetwork2);
+
+        private:                
+                int m_ns;   // network number of signals
+                int m_nai; // number of attached initiators 
+                int m_nat; // number of attached targets
+                                         
+                typedef RingSignals2 ring_signal_t;
+                typedef VciRingInitiator<vci_param, ring_cmd_data_size, ring_rsp_data_size> ring_initiator_t;
+                typedef VciRingTarget<vci_param, ring_cmd_data_size, ring_rsp_data_size>    ring_target_t;
+                typedef HalfGatewayInitiator2<vci_param, ring_cmd_data_size, ring_rsp_data_size> half_gateway_initiator_t;
+                typedef HalfGatewayTarget2<vci_param, ring_cmd_data_size, ring_rsp_data_size> half_gateway_target_t;
+ 
+                void transition();
+                void genMoore();  
+     
+                ring_signal_t    *m_ring_signal; 
+                ring_initiator_t **m_ring_initiator;
+                ring_target_t    **m_ring_target;
+                
+                half_gateway_initiator_t *m_half_gateway_initiator;
+                half_gateway_target_t    *m_half_gateway_target;
+
+        public:
+                VciLocalRingNetwork2( sc_module_name insname,
+                         const soclib::common::MappingTable &mt,
+                         const soclib::common::IntTab &ringid,   
+                         const int &wrapper_fifo_depth,
+                         const int &half_gateway_fifo_depth,
+                         int nb_attached_initiator,
+                         int nb_attached_target);
+                                                                   
+               ~VciLocalRingNetwork2();
+        };
+}} // end namespace
+
+#endif //VCI_LOCAL_RING_H_
Index: /trunk/modules/vci_local_ring_network_2/caba/source/src/vci_local_ring_network_2.cpp
===================================================================
--- /trunk/modules/vci_local_ring_network_2/caba/source/src/vci_local_ring_network_2.cpp	(revision 8)
+++ /trunk/modules/vci_local_ring_network_2/caba/source/src/vci_local_ring_network_2.cpp	(revision 8)
@@ -0,0 +1,237 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Authors  : Abdelmalek SI MERABET 
+ * Date     : March 2010 
+ * Copyright: UPMC - LIP6
+ */
+
+#include <iostream> 
+#include <string>
+#include <stdarg.h>
+#include "alloc_elems.h"
+#include "../include/vci_local_ring_network_2.h"
+
+namespace soclib { namespace caba {
+
+using soclib::common::alloc_elems;
+using soclib::common::dealloc_elems;
+
+#define tmpl(x) template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size > x VciLocalRingNetwork2<vci_param, ring_cmd_data_size, ring_rsp_data_size >
+
+////////////////////////////////
+//      constructor
+//
+////////////////////////////////
+tmpl(/**/)::VciLocalRingNetwork2( sc_module_name insname,
+                         const soclib::common::MappingTable &mt,
+                         const soclib::common::IntTab &ringid,
+                         const int &wrapper_fifo_depth,
+                         const int &half_gateway_fifo_depth,
+                         int nb_attached_initiator,
+                         int nb_attached_target)                                             
+                         : soclib::caba::BaseModule(insname), 
+                           m_ns(nb_attached_initiator+nb_attached_target+2), 
+                           m_nai(nb_attached_initiator),  
+                           m_nat(nb_attached_target)
+ {
+        
+
+        
+	p_to_initiator =  soclib::common::alloc_elems<soclib::caba::VciTarget<vci_param> >("p_to_initiator", m_nai);
+	p_to_target = soclib::common::alloc_elems<soclib::caba::VciInitiator<vci_param> >("p_to_target", m_nat);
+
+        m_ring_initiator = new ring_initiator_t*[m_nai];
+	m_ring_target    = new ring_target_t*[m_nat]; 
+        m_ring_signal    = new ring_signal_t[m_ns];
+
+
+	std::ostringstream o;
+	o << name() << "_hg_init";
+
+        m_half_gateway_initiator = new half_gateway_initiator_t(o.str().c_str(), false, half_gateway_fifo_depth, mt, ringid, false);
+
+	std::ostringstream p;
+	p << name() << "_hg_target";
+        m_half_gateway_target    = new half_gateway_target_t(p.str().c_str(), false, half_gateway_fifo_depth, mt, ringid, false);
+
+        for(size_t i=0; i<m_nai; ++i) {
+                bool alloc_init = (i==0);
+		std::ostringstream o;
+		o << name() << "_init_" << i;
+                m_ring_initiator[i] = new ring_initiator_t(o.str().c_str(), alloc_init, wrapper_fifo_depth, mt, ringid, i);
+        }
+
+        for(size_t i=0; i<m_nat; ++i) {
+                bool alloc_target = (i==0);
+		std::ostringstream o;
+		o << name() << "_target_" << i;
+                m_ring_target[i]  = new ring_target_t(o.str().c_str(), alloc_target, wrapper_fifo_depth, mt, ringid, i);
+        }
+
+        SC_METHOD(transition);
+        dont_initialize();
+        sensitive << p_clk.pos();
+
+        SC_METHOD(genMoore);
+        dont_initialize();
+        sensitive << p_clk.neg();
+ }
+//--------------------------//
+tmpl(void)::transition()    //
+//--------------------------//
+{
+
+
+        if ( ! p_resetn.read() ) {
+                for(size_t i=0;i<m_nai;i++) 
+                        m_ring_initiator[i]->reset();
+                for(size_t t=0;t<m_nat;t++)
+                        m_ring_target[t]->reset();
+
+                m_half_gateway_initiator->reset();
+                m_half_gateway_target->reset();
+                return;
+        }
+
+// update ring signals Three iterations
+// this is intended in order to break the loop due to dependency existing between ring signals
+// this rule is based based on relaxation principle
+
+//- 1st 
+       for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i]);
+        }
+
+        for(size_t i=0;i<m_nat;i++){
+                m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
+        }
+
+        m_half_gateway_initiator->update_ring_signals(m_ring_signal[m_nai+m_nat-1], m_ring_signal[m_nai+m_nat] );
+
+        m_half_gateway_target->update_ring_signals(m_ring_signal[m_ns-2], m_ring_signal[m_ns-1] );
+
+//- 2nd
+       for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i]);
+        }
+
+        for(size_t i=0;i<m_nat;i++){
+                m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
+        }
+
+        m_half_gateway_initiator->update_ring_signals(m_ring_signal[m_nai+m_nat-1], m_ring_signal[m_nai+m_nat] );
+
+        m_half_gateway_target->update_ring_signals(m_ring_signal[m_ns-2], m_ring_signal[m_ns-1] );
+
+
+//- 3rd 
+       for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i]);
+        }
+
+        for(size_t i=0;i<m_nat;i++){
+                m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
+        }
+
+        m_half_gateway_initiator->update_ring_signals(m_ring_signal[m_nai+m_nat-1], m_ring_signal[m_nai+m_nat] );
+
+        m_half_gateway_target->update_ring_signals(m_ring_signal[m_ns-2], m_ring_signal[m_ns-1] );
+
+//-----------------------------------------------//
+// transition                                    //
+//----------------------------------------------//
+
+        for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->transition(p_to_initiator[i], m_ring_signal[h]);
+        }
+        for(size_t t=0;t<m_nat;t++) {
+                m_ring_target[t]->transition(p_to_target[t], m_ring_signal[m_nai+t-1]);
+        }
+
+        m_half_gateway_initiator->transition(p_gate_initiator, m_ring_signal[m_nai+m_nat-1]);
+        m_half_gateway_target->transition(p_gate_target, m_ring_signal[m_nai+m_nat]);
+
+
+/*-------- print
+        for(size_t t=0;t<m_nat;t++) {
+                print_signal(m_nai+t-1);
+                print_vci_target(t);
+        }
+
+        for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                print_signal(h);
+                print_vci_init(i);
+        }
+*/
+}
+
+tmpl(void)::genMoore()
+{
+
+        for(size_t i=0;i<m_nai;i++) 
+                m_ring_initiator[i]->genMoore(p_to_initiator[i]);
+        for(size_t t=0;t<m_nat;t++)
+                m_ring_target[t]->genMoore(p_to_target[t]);    
+
+        m_half_gateway_initiator->genMoore(p_gate_initiator);
+   
+        m_half_gateway_target->genMoore(p_gate_target);
+}   
+//---------------- destructor
+tmpl(/**/)::~VciLocalRingNetwork2()
+    {
+
+        delete m_half_gateway_initiator;
+        delete m_half_gateway_target;
+
+	for(size_t x = 0; x < m_nai; x++)
+		delete m_ring_initiator[x];
+	
+	for(size_t x = 0; x < m_nat; x++)
+		delete m_ring_target[x];
+
+//for(size_t x = 0; x < m_ns; x++)
+//	delete m_ring_signal[x];
+
+	delete [] m_ring_initiator;
+	delete [] m_ring_target;
+        delete [] m_ring_signal;
+	
+	dealloc_elems(p_to_initiator,m_nai);
+	dealloc_elems(p_to_target, m_nat);;       
+    }
+}} // end namespace
Index: /trunk/modules/vci_simple_ring_network_2/caba/metadata/vci_simple_ring_network_2.sd
===================================================================
--- /trunk/modules/vci_simple_ring_network_2/caba/metadata/vci_simple_ring_network_2.sd	(revision 8)
+++ /trunk/modules/vci_simple_ring_network_2/caba/metadata/vci_simple_ring_network_2.sd	(revision 8)
@@ -0,0 +1,43 @@
+# -*- python -*-
+
+__id__ = "$Id: vci_simple_ring_network_2.sd 1141 2009-06-04 14:02:48Z abdelmalek.si-merabet@lip6.fr $"
+__version__ = "$Revision: 1141 $"
+
+Module('caba:vci_simple_ring_network_2',
+	classname = 'soclib::caba::VciSimpleRingNetwork2',
+	tmpl_parameters = [
+                parameter.Module('vci_param', default = 'caba:vci_param'),
+                parameter.Int('ring_cmd_data_size'),
+                parameter.Int('ring_rsp_data_size'),	    
+	],
+	header_files = ['../source/include/vci_simple_ring_network_2.h',],
+	implementation_files = ['../source/src/vci_simple_ring_network_2.cpp',],
+	ports = [
+            Port('caba:vci_initiator', 'p_to_target', parameter.Reference('nb_attached_target')),
+	    Port('caba:vci_target', 'p_to_initiator', parameter.Reference('nb_attached_initiator')),
+	    # FIXME: Ports vci
+	    Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+	    Port('caba:clock_in', 'p_clk', auto = 'clock'),
+	],
+	instance_parameters = [
+		parameter.Module('mt', 'common:mapping_table', auto='env:mapping_table'),
+	        parameter.IntTab('ringid'),
+                parameter.Int('wrapper_fifo_depth'),
+                parameter.Int('nb_attached_initiator'),
+                parameter.Int('nb_attached_target'),
+	],
+	uses = [
+	    Uses('caba:base_module'),
+	    Uses('common:mapping_table'),
+	    Uses('caba:vci_ring_initiator'),
+	    Uses('caba:vci_ring_target'),
+	    Uses('caba:ring_signals_2'),
+	    Uses('caba:generic_fifo'),
+	],
+	   extensions = [
+	'dsx:interconnect=root',
+	'dsx:mapping_type=interconnect',
+	'dsx:obtain_ident_method=port',
+	],
+        
+)
Index: /trunk/modules/vci_simple_ring_network_2/caba/source/include/vci_simple_ring_network_2.h
===================================================================
--- /trunk/modules/vci_simple_ring_network_2/caba/source/include/vci_simple_ring_network_2.h	(revision 8)
+++ /trunk/modules/vci_simple_ring_network_2/caba/source/include/vci_simple_ring_network_2.h	(revision 8)
@@ -0,0 +1,87 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : March 2010
+ * Copyright: UPMC - LIP6
+ */
+#ifndef VCI_SIMPLE_RING_H_
+#define VCI_SIMPLE_RING_H_
+
+#include <systemc>
+#include "caba_base_module.h"
+#include "mapping_table.h"
+#include "address_decoding_table.h"
+#include "address_masking_table.h"
+#include "ring_signals_2.h"
+#include "vci_ring_initiator.h"
+#include "vci_ring_target.h"
+
+namespace soclib { namespace caba {
+
+using namespace sc_core;
+
+template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size>
+class VciSimpleRingNetwork2
+        : public soclib::caba::BaseModule
+{
+        public:
+                sc_in<bool>             p_clk;
+                sc_in<bool>             p_resetn;
+                
+                soclib::caba::VciInitiator<vci_param> * p_to_target;
+                soclib::caba::VciTarget<vci_param>   * p_to_initiator;
+                
+        protected:
+                SC_HAS_PROCESS(VciSimpleRingNetwork2);
+
+        private:                
+                size_t m_ns;  // number of ring signals
+                size_t m_nai; // number of attached initiators 
+                size_t m_nat; // number of attached targets
+
+                typedef RingSignals2 ring_signal_t;
+                typedef VciRingInitiator<vci_param, ring_cmd_data_size, ring_rsp_data_size> ring_initiator_t;
+                typedef VciRingTarget<vci_param, ring_cmd_data_size, ring_rsp_data_size>    ring_target_t;
+
+                void print_signal(size_t i);
+                void print_vci_init(size_t i);
+                void print_vci_target(size_t i);
+                void transition();
+                void genMoore();
+
+                ring_signal_t    *m_ring_signal; 
+                ring_initiator_t **m_ring_initiator;
+                ring_target_t    **m_ring_target;
+
+        public:
+                VciSimpleRingNetwork2(   sc_module_name insname,
+                                        const soclib::common::MappingTable &mt,
+                                        const soclib::common::IntTab &ringid,   
+                                        const int &wrapper_fifo_depth,
+                                        size_t nb_attached_initiator,
+                                        size_t nb_attached_target);
+                                                                   
+                ~VciSimpleRingNetwork2();
+};
+}} // end namespace
+
+#endif //VCI_SIMPLE_RING_H_
Index: /trunk/modules/vci_simple_ring_network_2/caba/source/src/vci_simple_ring_network_2.cpp
===================================================================
--- /trunk/modules/vci_simple_ring_network_2/caba/source/src/vci_simple_ring_network_2.cpp	(revision 8)
+++ /trunk/modules/vci_simple_ring_network_2/caba/source/src/vci_simple_ring_network_2.cpp	(revision 8)
@@ -0,0 +1,247 @@
+/* -*- c++ -*-
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Author   : Abdelmalek SI MERABET 
+ * Date     : March 2010
+ * Copyright: UPMC - LIP6
+ */
+
+#include <iostream> 
+#include <stdarg.h>
+#include "alloc_elems.h"
+#include "../include/vci_simple_ring_network_2.h"
+
+namespace soclib { namespace caba {
+
+using soclib::common::alloc_elems;
+using soclib::common::dealloc_elems;
+
+#define tmpl(x) template<typename vci_param, int ring_cmd_data_size, int ring_rsp_data_size > x VciSimpleRingNetwork2<vci_param, ring_cmd_data_size, ring_rsp_data_size >
+
+////////////////////////////////
+//      constructor
+//
+////////////////////////////////
+tmpl(/**/)::VciSimpleRingNetwork2( 
+        sc_module_name insname,
+        const soclib::common::MappingTable &mt,
+        const soclib::common::IntTab &ringid,
+        const int &wrapper_fifo_depth,
+        size_t nb_attached_initiator,
+        size_t nb_attached_target)                                             
+                : soclib::caba::BaseModule(insname),
+                p_clk("clk"),
+                p_resetn("resetn"), 
+                m_ns(nb_attached_initiator+nb_attached_target), 
+                m_nai(nb_attached_initiator),  
+                m_nat(nb_attached_target)
+{
+	p_to_initiator = soclib::common::alloc_elems<soclib::caba::VciTarget<vci_param> >("p_to_initiator", m_nai);
+	p_to_target    = soclib::common::alloc_elems<soclib::caba::VciInitiator<vci_param> >("p_to_target", m_nat);
+
+	m_ring_initiator = new ring_initiator_t*[m_nai];
+	m_ring_target    = new ring_target_t*[m_nat]; 
+        m_ring_signal    = new ring_signal_t[m_ns];
+        for(size_t i=0; i<m_nai; ++i) {
+                bool alloc_init = (i==0);
+		std::ostringstream o;
+		o << name() << "_init_" << i;
+                m_ring_initiator[i] = new ring_initiator_t(o.str().c_str(), alloc_init, wrapper_fifo_depth, mt, ringid, i);
+        }
+
+        for(size_t i=0; i<m_nat; ++i) {
+                bool alloc_target = (i==0);
+		std::ostringstream o;
+		o << name() << "_target_" << i;
+                m_ring_target[i]  = new ring_target_t(o.str().c_str(), alloc_target, wrapper_fifo_depth, mt, ringid, i);
+        }
+
+        SC_METHOD(transition);
+        dont_initialize();
+        sensitive << p_clk.pos();
+
+        SC_METHOD(genMoore);
+        dont_initialize();
+        sensitive << p_clk.neg();
+
+}
+
+tmpl(void)::transition()
+{
+
+
+        if ( ! p_resetn.read() ) {
+                for(size_t i=0;i<m_nai;i++) 
+                        m_ring_initiator[i]->reset();
+                for(size_t t=0;t<m_nat;t++)
+                        m_ring_target[t]->reset();
+                return;
+        }
+
+// update ring signals Three iterations
+// this is intended in order to break the loop due to dependency existing between ring signals
+// this rule is based based on relaxation principle
+
+//- 1st 
+       for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i]);
+        }
+
+        for(size_t i=0;i<m_nat;i++){
+                m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
+        }
+
+//- 2nd
+       for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i]);
+        }
+
+        for(size_t i=0;i<m_nat;i++){
+                m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
+        }
+
+//- 3rd 
+       for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i]);
+        }
+
+        for(size_t i=0;i<m_nat;i++){
+                m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
+        }
+
+// transition
+        for(size_t i=0;i<m_nai;i++) {
+//              std::cout << sc_time_stamp() << " -- " << name() << " *** vci_initiator : " << i << std::endl;
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_initiator[i]->transition(p_to_initiator[i], m_ring_signal[h]);
+        }
+        for(size_t t=0;t<m_nat;t++) {
+//              std::cout << sc_time_stamp() << " -- " << name() << " *** vci_target : " << t << std::endl;
+                m_ring_target[t]->transition(p_to_target[t], m_ring_signal[m_nai+t-1]);
+        }
+
+
+/*-------- print
+        for(size_t t=0;t<m_nat;t++) {
+                print_signal(m_nai+t-1);
+                print_vci_target(t);
+        }
+
+        for(size_t i=0;i<m_nai;i++) {
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                print_signal(h);
+                print_vci_init(i);
+        }
+*/
+}
+
+tmpl(void)::genMoore()
+{
+
+
+        for(size_t i=0;i<m_nai;i++) 
+                m_ring_initiator[i]->genMoore(p_to_initiator[i]);
+        for(size_t t=0;t<m_nat;t++)
+                m_ring_target[t]->genMoore(p_to_target[t]);       
+
+}
+
+tmpl(void)::print_vci_init(size_t i)
+{
+        std::cout << sc_time_stamp() << " -- " << name() << " *** vci_initiator : " << i << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_cmdval  : " <<             p_to_initiator[i].cmdval.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_cmdack  : " <<             p_to_initiator[i].cmdack.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_address : " << std::hex << p_to_initiator[i].address.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_plen    : " <<             p_to_initiator[i].plen.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_wdata   : " <<             p_to_initiator[i].wdata.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_cmd     : " <<             p_to_initiator[i].cmd.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rspval  : " <<             p_to_initiator[i].rspval.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rspack  : " <<             p_to_initiator[i].rspack.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rdata   : " << std::hex << p_to_initiator[i].rdata.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rsrcid  : " <<             p_to_initiator[i].rsrcid.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_reop    : " <<             p_to_initiator[i].reop.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rerror  : " <<             p_to_initiator[i].rerror.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << "*******************************" << std::endl;
+}
+tmpl(void)::print_vci_target(size_t i)
+{
+        std::cout << sc_time_stamp() << " -- " << name() << " *** vci_target : " << i << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_cmdval  : " <<             p_to_target[i].cmdval.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_cmdack  : " <<             p_to_target[i].cmdack.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_address : " << std::hex << p_to_target[i].address.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_plen    : " <<             p_to_target[i].plen.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_wdata   : " <<             p_to_target[i].wdata.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_cmd     : " <<             p_to_target[i].cmd.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rspval  : " <<             p_to_target[i].rspval.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rspack  : " <<             p_to_target[i].rspack.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rdata   : " << std::hex << p_to_target[i].rdata.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rsrcid  : " <<             p_to_target[i].rsrcid.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_reop    : " <<             p_to_target[i].reop.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " vci_rerror  : " <<             p_to_target[i].rerror.read() << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << "*******************************" << std::endl;
+}
+tmpl(void)::print_signal(size_t i)
+{
+        std::cout << sc_time_stamp() << " -- " << name() << " ++++ signals index : " << i << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " cmd_grant : " << m_ring_signal[i].cmd_grant << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " cmd_data  : " << std::hex << m_ring_signal[i].cmd_data << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " cmd_rok/w : " << m_ring_signal[i].cmd_w << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " cmd_r/wok : " << m_ring_signal[i].cmd_r << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " rsp_grant : " << m_ring_signal[i].rsp_grant << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " rsp_data  : " << m_ring_signal[i].rsp_data  << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " rsp_rok/w : " << m_ring_signal[i].rsp_w     << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " rsp_wok/r : " << m_ring_signal[i].rsp_r     << std::endl;
+        std::cout << sc_time_stamp() << " -- " << name() << " ++++++++++++++++++++++++++++++++++++" << std::endl;
+} 
+//---------------- destructor
+tmpl(/**/)::~VciSimpleRingNetwork2()
+{
+
+	for(size_t x = 0; x < m_nai; x++)
+		delete m_ring_initiator[x];
+	
+	for(size_t x = 0; x < m_nat; x++)
+		delete m_ring_target[x];
+
+//for(size_t x = 0; x < m_ns; x++)
+//	delete m_ring_signal[x];
+
+	delete [] m_ring_initiator;
+	delete [] m_ring_target;
+        delete [] m_ring_signal;
+	
+	dealloc_elems(p_to_initiator,m_nai);
+	dealloc_elems(p_to_target, m_nat);
+}
+}} // end namespace
Index: /trunk/platforms/tsarv2_mutekh/Makefile
===================================================================
--- /trunk/platforms/tsarv2_mutekh/Makefile	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/Makefile	(revision 8)
@@ -0,0 +1,11 @@
+ARCH=mips32el
+SIMULATION_ARGS=mutekh/kernel-soclib-mips.out
+SOCLIB_CC_ADD_ARGS=-t systemcass
+SOCLIB?=$(shell soclib-cc --getpath)
+NO_SOFT=1
+SIMULATOR_BINARY=tsarv2_platform.x
+export SOCLIB
+SOCLIB_CC_ARGS=-p $(PLATFORM_DESC) 
+include $(SOCLIB)/soclib/platform/topcells/all.mk
+
+
Index: /trunk/platforms/tsarv2_mutekh/mutekh/.config.deps
===================================================================
--- /trunk/platforms/tsarv2_mutekh/mutekh/.config.deps	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/mutekh/.config.deps	(revision 8)
@@ -0,0 +1,95 @@
+##
+## This file has been generated by the configuration script.
+##
+
+/tmp/mutekh_config.17716.23609.h \
+/tmp/mutekh_config.17716.23609.mk \
+/tmp/mutekh_config.17716.23609.m4 \
+/tmp/mutekh_config.17716.23609.py \
+: \
+	/home/guthmuller/dev/mutekh/arch/arch.config \
+	/home/guthmuller/dev/mutekh/arch/emu/emu.config \
+	/home/guthmuller/dev/mutekh/arch/ibmpc/ibmpc.config \
+	/home/guthmuller/dev/mutekh/arch/simple/atmega/atmega.config \
+	/home/guthmuller/dev/mutekh/arch/simple/sam7/sam7.config \
+	/home/guthmuller/dev/mutekh/arch/simple/simple.config \
+	/home/guthmuller/dev/mutekh/arch/soclib/soclib.config \
+	/home/guthmuller/dev/mutekh/cpu/arm/arm.config \
+	/home/guthmuller/dev/mutekh/cpu/avr/avr.config \
+	/home/guthmuller/dev/mutekh/cpu/cpu.config \
+	/home/guthmuller/dev/mutekh/cpu/mips/mips.config \
+	/home/guthmuller/dev/mutekh/cpu/ppc/ppc.config \
+	/home/guthmuller/dev/mutekh/cpu/x86/x86.config \
+	/home/guthmuller/dev/mutekh/cpu/x86-64-emu/emu.config \
+	/home/guthmuller/dev/mutekh/cpu/x86-emu/emu.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/ata/block-ata.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/cache/block-cache.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/file-emu/block-file-emu.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/partition/block-partition.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/ramdisk/block-ramdisk.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/sd-mmc/sd-mmc.config \
+	/home/guthmuller/dev/mutekh/drivers/device/block/soclib/block-soclib.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/dbgu-sam7/dbgu-sam7.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/null/null.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/random/random.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/tty-emu/tty-emu.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/tty-soclib/tty-soclib.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/tty-vga/tty-vga.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/uart-8250/uart-8250.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/uart-us6089c/uart-us6089c.config \
+	/home/guthmuller/dev/mutekh/drivers/device/char/zero/zero.config \
+	/home/guthmuller/dev/mutekh/drivers/device/drivers.config \
+	/home/guthmuller/dev/mutekh/drivers/device/enum/fdt/enum-fdt.config \
+	/home/guthmuller/dev/mutekh/drivers/device/enum/isapnp/enum-isapnp.config \
+	/home/guthmuller/dev/mutekh/drivers/device/enum/pci/enum-pci.config \
+	/home/guthmuller/dev/mutekh/drivers/device/enum/root/enum-root.config \
+	/home/guthmuller/dev/mutekh/drivers/device/fb/soclib/fb-soclib.config \
+	/home/guthmuller/dev/mutekh/drivers/device/fb/vga/fb-vga.config \
+	/home/guthmuller/dev/mutekh/drivers/device/gpio/sam7/gpio-sam7.config \
+	/home/guthmuller/dev/mutekh/drivers/device/i2c/twi6061a/i2c-twi6061a.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/8259/icu-8259.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/arm/icu-arm.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/mips/icu-mips.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/ppc/icu-ppc.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/sam7/icu-sam7.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/soclib-icu/icu-soclib.config \
+	/home/guthmuller/dev/mutekh/drivers/device/icu/soclib-xicu/xicu.config \
+	/home/guthmuller/dev/mutekh/drivers/device/input/8042/input-8042.config \
+	/home/guthmuller/dev/mutekh/drivers/device/input/mt5-f/mt5-f.config \
+	/home/guthmuller/dev/mutekh/drivers/device/lcd/pcf8833/pcf8833.config \
+	/home/guthmuller/dev/mutekh/drivers/device/lcd/s1d15g00/s1d15g00.config \
+	/home/guthmuller/dev/mutekh/drivers/device/mem/memory/memory.config \
+	/home/guthmuller/dev/mutekh/drivers/device/net/ne2000/net-ne2000.config \
+	/home/guthmuller/dev/mutekh/drivers/device/net/tuntap/net-tuntap.config \
+	/home/guthmuller/dev/mutekh/drivers/device/spi/spi6088d/spi-spi6088d.config \
+	/home/guthmuller/dev/mutekh/drivers/device/timer/8253/timer-8253.config \
+	/home/guthmuller/dev/mutekh/drivers/device/timer/emu/timer-emu.config \
+	/home/guthmuller/dev/mutekh/drivers/device/timer/pitc_6079a/pitc_6079a.config \
+	/home/guthmuller/dev/mutekh/drivers/device/timer/soclib/timer-soclib.config \
+	/home/guthmuller/dev/mutekh/drivers/fs/devfs/devfs.config \
+	/home/guthmuller/dev/mutekh/drivers/fs/fat/fat.config \
+	/home/guthmuller/dev/mutekh/drivers/fs/iso9660/iso9660.config \
+	/home/guthmuller/dev/mutekh/drivers/fs/ramfs/ramfs.config \
+	/home/guthmuller/dev/mutekh/hexo/hexo.config \
+	/home/guthmuller/dev/mutekh/libc/libc.config \
+	/home/guthmuller/dev/mutekh/libcrypto/crypto.config \
+	/home/guthmuller/dev/mutekh/libdsrl/dsrl.config \
+	/home/guthmuller/dev/mutekh/libelf/libelf.config \
+	/home/guthmuller/dev/mutekh/libfdt/fdt.config \
+	/home/guthmuller/dev/mutekh/liblua/liblua.config \
+	/home/guthmuller/dev/mutekh/libm/libm.config \
+	/home/guthmuller/dev/mutekh/libmwmr/mwmr.config \
+	/home/guthmuller/dev/mutekh/libnetwork/dhclient/dhclient.config \
+	/home/guthmuller/dev/mutekh/libnetwork/libsocket/socket.config \
+	/home/guthmuller/dev/mutekh/libnetwork/lwnfs/lwnfs.config \
+	/home/guthmuller/dev/mutekh/libnetwork/network.config \
+	/home/guthmuller/dev/mutekh/libnetwork/ping/ping.config \
+	/home/guthmuller/dev/mutekh/libnetwork/rarp/rarp.config \
+	/home/guthmuller/dev/mutekh/libpthread/pthread.config \
+	/home/guthmuller/dev/mutekh/libsrl/srl.config \
+	/home/guthmuller/dev/mutekh/libtermui/termui.config \
+	/home/guthmuller/dev/mutekh/libunix/unix.config \
+	/home/guthmuller/dev/mutekh/libvfs/vfs.config \
+	/home/guthmuller/dev/mutekh/mutek/mutek.config \
+	/home/guthmuller/dev/mutekh/scripts/global.config \
+	/home/guthmuller/dev/mutekh/scripts/license.config
Index: /trunk/platforms/tsarv2_mutekh/mutekh/.config.h
===================================================================
--- /trunk/platforms/tsarv2_mutekh/mutekh/.config.h	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/mutekh/.config.h	(revision 8)
@@ -0,0 +1,292 @@
+/*
+ * This file has been generated by the configuration script.
+ */
+
+#define CONFIG_MUTEK_MEMALLOC_ALGO_FIRSTFIT
+#undef  CONFIG_VFS_STATS
+#undef  CONFIG_NETWORK_SOCKET_PACKET
+#undef  CONFIG_DRIVER_FS_FAT_RW
+#undef  CONFIG_DRIVER_BLOCK_EMU_BLOCKSIZE
+#undef  CONFIG_SRL_SOCLIB
+#undef  CONFIG_DRIVER_BLOCK_EMU
+#define CONFIG_CPU_RESET_ADDR 0xbfc00000
+#undef  CONFIG_ARCH_SIMPLE_HW_INIT
+#undef  CONFIG_DRIVER_SPI
+#undef  CONFIG_LICENSE_APP_PROPRIETARY
+#undef  CONFIG_HET_BUILD
+#undef  CONFIG_DEBUG
+#undef  CONFIG_DRIVER_BLOCK_RAMDISK_SIZE
+#undef  CONFIG_LIBCRYPTO_MD5
+#undef  CONFIG_DRIVER_FS_FAT
+#undef  CONFIG_DRIVER_I2C_TWI6061A
+#undef  CONFIG_HEXO_INTTYPES_DEPRECATED
+#undef  CONFIG_DRIVER_BLOCK_SOCLIB
+#undef  CONFIG_VFS_VERBOSE
+#undef  CONFIG_CPU_X86_64_EMU
+#define CONFIG_ARCH_NAME soclib
+#undef  CONFIG_DRIVER_NET_NE2000
+#undef  CONFIG_CPU_MIPS_ABI_N32
+#undef  CONFIG_ARCH_SIMPLE_SAM7
+#undef  CONFIG_DRIVER_FS_RAMFS
+#define CONFIG_MUTEK_PRINTK
+#define CONFIG_DRIVER_ICU_MIPS
+#define CONFIG_MUTEK_SCHEDULER_IDLE_STACK_SIZE 2048
+#undef  CONFIG_DRIVER_ICU_8259
+#define CONFIG_PTHREAD_JOIN
+#undef  CONFIG_MUTEK_MEMALLOC_GUARD_SIZE
+#define CONFIG_ROM_SIZE 0x01000000
+#undef  CONFIG_LICENSE_USE_GPL
+#undef  CONFIG_NETWORK_AUTOALIGN
+#undef  CONFIG_DRIVER_LCD_S1D15G00
+#undef  CONFIG_VMEM_KERNEL_ALLOC
+#undef  CONFIG_ARCH_SIMPLE_OLIMEX_SAM7_EX256
+#undef  CONFIG_ARCH_HW_INIT
+#undef  CONFIG_VMEM
+#define CONFIG_LICENSE_APP_LGPL
+#undef  CONFIG_CPU_ARM_FPU
+#define CONFIG_CPU_RESET_HANDLER
+#undef  CONFIG_DRIVER_BLOCK
+#undef  CONFIG_CPU_USER
+#undef  CONFIG_NETWORK_NFS
+#undef  CONFIG_VMEM_PHYS_ALLOC
+#undef  CONFIG_MUTEK_MEMALLOC_GUARD_INSTRUMENT
+#undef  CONFIG_MWMR_USE_RAMLOCKS
+#undef  CONFIG_DRIVER_NET_NE2000_FRAGMENT
+#define CONFIG_CPU_CACHE_LINE 4
+#undef  CONFIG_HEXO_ARCH_MMU
+#undef  CONFIG_DRIVER_BLOCK_CACHE_SIZE
+#undef  CONFIG_NETWORK_SOCKET
+#define CONFIG_DRIVER_CHAR_SOCLIBTTY
+#undef  CONFIG_LIBCRYPTO_CRC32_SMALL
+#undef  CONFIG_DRIVER_BLOCK_RAMDISK_BLOCKSIZE
+#undef  CONFIG_CPU_CACHE_COHERENCY
+#undef  CONFIG_MUTEK_MEMALLOC_SIGNED
+#undef  CONFIG_DRIVER_FS_DEVFS
+#undef  CONFIG_NETWORK_PACKET_ASM
+#define CONFIG_COMPILE_SIZEOF_INT 4
+#undef  CONFIG_NETWORK_FORWARDING
+#undef  CONFIG_CLUSTER
+#define CONFIG_MUTEK_MAIN
+#undef  CONFIG_UNIX_STACK_VADDR
+#undef  CONFIG_NETWORK_SOCKET_RAW
+#undef  CONFIG_LIBELF_DEBUG
+#undef  CONFIG_DRIVER_FS_ISO9660
+#undef  CONFIG_DRIVER_I2C
+#undef  CONFIG_ARCH_IBMPC_DMA
+#define CONFIG_CPU_ENDIAN_LITTLE
+#define CONFIG_LIBC_SEMAPHORE
+#undef  CONFIG_UNIX_START_VADDR
+#undef  CONFIG_ARCH_EMU
+#undef  CONFIG_SOCLIB_MEMCHECK
+#undef  CONFIG_DRIVER_FB
+#define CONFIG_CPU_MIPS_ABI_O32
+#define CONFIG_DRIVER_MEM_MEMORY
+#undef  CONFIG_DRIVER_FB_SOCLIB
+#undef  CONFIG_ARCH_EMU_DARWIN
+#define CONFIG_ROM_ADDR 0x61100000
+#define CONFIG_DRIVER_ENUM_ROOT
+#undef  CONFIG_DRIVER_TIMER_SOCLIB
+#define CONFIG_COMPILE_FRAMEPTR
+#undef  CONFIG_LIBDSRL_DEBUG
+#undef  CONFIG_DRIVER_CHAR_NULL
+#undef  CONFIG_MWMR_PTHREAD
+#undef  CONFIG_MWMR_LOCKFREE
+#undef  CONFIG_DRIVER_FS_FAT32
+#undef  CONFIG_DRIVER_BLOCK_SD_MMC
+#undef  CONFIG_NETWORK_UDP
+#undef  CONFIG_NETWORK_IPV4
+#undef  CONFIG_HEXO_MMU_PAGESIZE
+#undef  CONFIG_CPU_X86_EMU
+#undef  CONFIG_NETWORK_DHCLIENT
+#define CONFIG_CPU_CACHE
+#undef  CONFIG_LICENSE_APP_PUBLIC
+#undef  CONFIG_LIBTERMUI
+#undef  CONFIG_MUTEK_MEMALLOC_DEBUG
+#undef  CONFIG_CPU_AVR_GCCMCU
+#undef  CONFIG_ARCH_SOCLIB_RAMLOCK
+#undef  CONFIG_VFS_NAMELEN
+#undef  CONFIG_ARCH_SIMPLE_SAM7X256
+#undef  CONFIG_DRIVER_CHAR_UART8250
+#undef  CONFIG_CPU_ARM_7TDMI
+#define CONFIG_CPU_NAME mips
+#undef  CONFIG_DRIVER_CHAR_VGATTY_KEYBOARD
+#undef  CONFIG_DRIVER_BLOCK_ATA
+#define CONFIG_MUTEK_CONSOLE
+#undef  CONFIG_LIBELF
+#undef  CONFIG_DRIVER_LCD
+#undef  CONFIG_DRIVER_CHAR_SAM7DBGU
+#undef  CONFIG_LICENSE_USE_PUBLIC
+#undef  CONFIG_DRIVER_ENUM_PCI
+#undef  CONFIG_DRIVER_GPIO
+#define CONFIG_CPU_RESET_SIZE 0x2000
+#undef  CONFIG_SRL_STD
+#define CONFIG_LIBC_STREAM
+#undef  CONFIG_ARCH_EMU_LINUX
+#undef  CONFIG_CPU_AVR
+#undef  CONFIG_LICENSE_APP_BSD
+#undef  CONFIG_NETWORK_TCP
+#undef  CONFIG_CPU_PPC
+#undef  CONFIG_ARCH_SIMPLE_RESET_ADDR
+#undef  CONFIG_ARCH_IBMPC
+#undef  CONFIG_CPU_NONALIGNED_ACCESS
+#define CONFIG_CPU_EXCEPTION_ALIGN 0x00001000
+#undef  CONFIG_MUTEK_NUMA
+#undef  CONFIG_DRIVER_ICU_SOCLIB
+#define CONFIG_DRIVER_ENUM_FDT
+#undef  CONFIG_MUTEK_SCHEDULER_CANDIDATE_FCN
+#undef  CONFIG_DRIVER_BLOCK_CACHE
+#define CONFIG_COMPILE_SAVETEMPS
+#undef  CONFIG_HEXO_MMU_VADDR
+#undef  CONFIG_HETROM_SIZE
+#undef  CONFIG_DRIVER_ICU_ARM
+#define CONFIG_PRINTF_ARG_EXT
+#undef  CONFIG_LIBELF_DYNAMIC
+#undef  CONFIG_DRIVER_FS_FAT16
+#undef  CONFIG_DRIVER_CHAR_US6089C_UART
+#define CONFIG_DRIVER_ICU
+#undef  CONFIG_SRL_MULTI_TTY
+#undef  CONFIG_COMPILE_INSTRUMENT
+#undef  CONFIG_CPU_MIPS_ABI_O64
+#undef  CONFIG_DRIVER_CHAR_VGATTY_ANSI
+#define CONFIG_FDT
+#undef  CONFIG_CPU_EXCEPTION_FIXED_ADDRESS
+#undef  CONFIG_ARCH_SIMPLE
+#define CONFIG_SOCLIB_VMEM_MALLOC_REGION_SIZE 0x8000
+#undef  CONFIG_HEXO_CPU_MMU
+#define CONFIG_CPU_MAXCOUNT 4
+#undef  CONFIG_DRIVER_NET
+#define CONFIG_DRIVER_BLOCK_PARTITION_MAXCOUNT 32
+#define CONFIG_DRIVER_ICU_SOCLIB_XICU
+#define CONFIG_ARCH_DEVICE_TREE
+#undef  CONFIG_CPU_AVR_IRQ_COUNT
+#define CONFIG_PTHREAD
+#undef  CONFIG_VFS_GLOBAL_CWD
+#define CONFIG_CPU_MIPS
+#define CONFIG_COMPILE_SOFTFLOAT
+#undef  CONFIG_NETWORK_RARP
+#define CONFIG_PTHREAD_CANCEL
+#undef  CONFIG_CPU_ARM_M_PROFILE
+#undef  CONFIG_MUTEK_MEMALLOC_SIMPLE
+#define CONFIG_LIBCRYPTO
+#define CONFIG_DRIVER_TTY
+#define CONFIG_LIBC_ASSERT
+#undef  CONFIG_CPU_ARM_TLS_IN_C15
+#undef  CONFIG_CPU_AVR_ENHANCED
+#undef  CONFIG_DRIVER_TIMER_PITC_6079A
+#undef  CONFIG_DRIVER_ENUM_ISAPNP
+#undef  CONFIG_CPU_ENDIAN_BIG
+#undef  CONFIG_CPU_X86
+#undef  CONFIG_MWMR
+#undef  CONFIG_MUTEK_MEMALLOC_GUARD
+#undef  CONFIG_LICENSE_USE_PROPRIETARY
+#undef  CONFIG_DRIVER_FB_VGA
+#undef  CONFIG_PTHREAD_CHECK
+#undef  CONFIG_ARCH_SOCLIB_VCACHE_40
+#undef  CONFIG_CPU_MIPS_ABI_EABI
+#define CONFIG_ARCH_SOCLIB
+#define CONFIG_CPU_MIPS_VERSION 32
+#undef  CONFIG_DRIVER_NET_TUNTAP
+#undef  CONFIG_CPU_ARM_THUMB
+#undef  CONFIG_ARCH_SOCLIB_VCACHE_32
+#define CONFIG_HEXO_IRQ
+#undef  CONFIG_CPU_X86_ALIGNCHECK
+#undef  CONFIG_DRIVER_ICU_SAM7
+#undef  CONFIG_ARCH_IBMPC_MEMORY
+#define CONFIG_LICENSE_APP_META
+#undef  CONFIG_HEXO_MMU_PADDR
+#undef  CONFIG_ARCH_EMU_MEMORY
+#undef  CONFIG_UNIX
+#undef  CONFIG_MUTEK_MEMALLOC_ALGO_BESTFIT
+#undef  CONFIG_ARCH_SIMPLE_ATMEGA
+#define CONFIG_RAM_ADDR 0x71600000
+#undef  CONFIG_PRINTF_ARG_SIMPLE
+#define CONFIG_MUTEK_MEMALLOC_ALIGN 0x20
+#undef  CONFIG_NETWORK_FILTER
+#undef  CONFIG_LIBLUA
+#undef  CONFIG_LICENSE_APP_GPL
+#undef  CONFIG_LICENSE_USE_MIT
+#define CONFIG_MUTEK_MEMALLOC_SMART
+#undef  CONFIG_LIBELF_RTLD
+#define CONFIG_SOCLIB_EARLY_CONSOLE 0x90600000
+#define CONFIG_COMPILE_PIC
+#undef  CONFIG_DRIVER_SPI_SPI6088D
+#undef  CONFIG_DRIVER_FS_FAT_LFN
+#undef  CONFIG_MUTEK_MEMALLOC_STATS
+#undef  CONFIG_NETWORK_PROFILING
+#undef  CONFIG_CPU_ARM_SOCLIB
+#undef  CONFIG_DRIVER_BLOCK_RAMDISK
+#undef  CONFIG_MUTEK_SCHEDULER_PREEMPT
+#define CONFIG_DRIVER_ENUM
+#undef  CONFIG_DRIVER_CHAR_EMUTTY
+#define CONFIG_LICENSE_USE_LGPL
+#undef  CONFIG_DRIVER_SOUND
+#undef  CONFIG_ARCH_EMU_PAGESIZE
+#define CONFIG_MUTEK_SCHEDULER
+#undef  CONFIG_SRL
+#undef  CONFIG_DRIVER_CHAR_ZERO
+#undef  CONFIG_MWMR_INSTRUMENTATION
+#define CONFIG_PTHREAD_MUTEX_ATTR
+#undef  CONFIG_DRIVER_ICU_PPC
+#define CONFIG_LIBC_STREAM_BUFFER_SIZE 256
+#undef  CONFIG_LICENSE_USE_BSD
+#define CONFIG_PTHREAD_ATTRIBUTES
+#undef  CONFIG_CPU_X86_SYSENTER
+#undef  CONFIG_SOCLIB_MEMCHECK_ADDRESS
+#undef  CONFIG_DRIVER_INPUT_8042
+#define CONFIG_MODULES splash_radix:/home/share/dcis_scme/THESES/GUTHMULLER/tsar/platforms/tsarv3_mutekh/splash_radix libfdt:/home/guthmuller/dev/mutekh/libfdt libpthread:/home/guthmuller/dev/mutekh/libpthread cpu:/home/guthmuller/dev/mutekh/cpu/mips libcrypto:/home/guthmuller/dev/mutekh/libcrypto arch:/home/guthmuller/dev/mutekh/arch/soclib
+#undef  CONFIG_HEXO_MMU
+#undef  CONFIG_DEBUG_SPINLOCK_LIMIT
+#undef  CONFIG_DRIVER_FS_ISO9660_ROCKRIDGE
+#undef  CONFIG_COMPILE_COLLECT
+#undef  CONFIG_LIBC_STRING_ASM
+#undef  CONFIG_LIBCRYPTO_ARC4
+#undef  CONFIG_MUTEK_TIMERMS
+#undef  CONFIG_DRIVER_BLOCK_PARTITION
+#undef  CONFIG_MWMR_SOCLIB
+#undef  CONFIG_DRIVER_KEYBOARD
+#define CONFIG_SMP
+#undef  CONFIG_LICENSE_APP_MIT
+#define CONFIG_COMPILE_DEBUG
+#define CONFIG_HEXO_IPI
+#undef  CONFIG_DRIVER_TIMER
+#undef  CONFIG_NETWORK
+#undef  CONFIG_DRIVER_UART
+#undef  CONFIG_SRL_VERBOSITY
+#undef  CONFIG_UNIX_DEBUG
+#define CONFIG_DRIVER_MEM
+#undef  CONFIG_DRIVER_CHAR_RANDOM
+#undef  CONFIG_LIBELF_RTLD_KERNEL
+#undef  CONFIG_MUTEK_LOGO
+#undef  CONFIG_CPU_ARM_ARCH
+#define CONFIG_MUTEK_SMP_APP_START
+#undef  CONFIG_MUTEK_SCHEDULER_STATIC
+#undef  CONFIG_DRIVER_LCD_PCF8833
+#undef  CONFIG_ARCH_SIMPLE_ATMEGA128
+#undef  CONFIG_ARCH_HW_INIT_USER
+#undef  CONFIG_HETROM_ADDR
+#undef  CONFIG_DRIVER_FS_FAT_TYPE_FROM_STRING
+#undef  CONFIG_LIBCRYPTO_CRC32
+#define CONFIG_COMPILE_OPTIMIZE 2
+#define CONFIG_MUTEK_RWLOCK
+#define CONFIG_DATA_FROM_ROM
+#undef  CONFIG_MUTEK_SCHEDULER_MIGRATION_AFFINITY
+#undef  CONFIG_DRIVER_GPIO_SAM7
+#undef  CONFIG_MUTEK_MEM_REGION
+#undef  CONFIG_DRIVER_TIMER_8253
+#undef  CONFIG_DRIVER_TIMER_EMU
+#undef  CONFIG_CPU_ARM_CPU
+#undef  CONFIG_DRIVER_INPUT_MT5F
+#undef  CONFIG_DRIVER_CHAR_VGATTY
+#define CONFIG_DEVICE_TREE
+#undef  CONFIG_NETWORK_PING
+#define CONFIG_RAM_SIZE 0x01000000
+#undef  CONFIG_VFS_GLOBAL_ROOT
+#undef  CONFIG_LIBC_STREAM_STD
+#undef  CONFIG_LIBELF_RTLD_TLS
+#undef  CONFIG_UNIX_KSTACK_SIZE
+#undef  CONFIG_LIBM
+#undef  CONFIG_CPU_ARM
+#define CONFIG_MUTEK_SCHEDULER_MIGRATION
+#undef  CONFIG_VFS
+#define CONFIG_PTHREAD_STACK_SIZE 4096
+#undef  CONFIG_LIBDSRL
Index: /trunk/platforms/tsarv2_mutekh/mutekh/.config.m4
===================================================================
--- /trunk/platforms/tsarv2_mutekh/mutekh/.config.m4	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/mutekh/.config.m4	(revision 8)
@@ -0,0 +1,288 @@
+m4_define(CONFIG_MUTEK_MEMALLOC_ALGO_FIRSTFIT, `defined')
+m4_define(CONFIG_VFS_STATS, `undefined')
+m4_define(CONFIG_NETWORK_SOCKET_PACKET, `undefined')
+m4_define(CONFIG_DRIVER_FS_FAT_RW, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_EMU_BLOCKSIZE, `undefined')
+m4_define(CONFIG_SRL_SOCLIB, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_EMU, `undefined')
+m4_define(CONFIG_CPU_RESET_ADDR, `0xbfc00000')
+m4_define(CONFIG_ARCH_SIMPLE_HW_INIT, `undefined')
+m4_define(CONFIG_DRIVER_SPI, `undefined')
+m4_define(CONFIG_LICENSE_APP_PROPRIETARY, `undefined')
+m4_define(CONFIG_HET_BUILD, `undefined')
+m4_define(CONFIG_DEBUG, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_RAMDISK_SIZE, `undefined')
+m4_define(CONFIG_LIBCRYPTO_MD5, `undefined')
+m4_define(CONFIG_DRIVER_FS_FAT, `undefined')
+m4_define(CONFIG_DRIVER_I2C_TWI6061A, `undefined')
+m4_define(CONFIG_HEXO_INTTYPES_DEPRECATED, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_SOCLIB, `undefined')
+m4_define(CONFIG_VFS_VERBOSE, `undefined')
+m4_define(CONFIG_CPU_X86_64_EMU, `undefined')
+m4_define(CONFIG_ARCH_NAME, `soclib')
+m4_define(CONFIG_DRIVER_NET_NE2000, `undefined')
+m4_define(CONFIG_CPU_MIPS_ABI_N32, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE_SAM7, `undefined')
+m4_define(CONFIG_DRIVER_FS_RAMFS, `undefined')
+m4_define(CONFIG_MUTEK_PRINTK, `defined')
+m4_define(CONFIG_DRIVER_ICU_MIPS, `defined')
+m4_define(CONFIG_MUTEK_SCHEDULER_IDLE_STACK_SIZE, `2048')
+m4_define(CONFIG_DRIVER_ICU_8259, `undefined')
+m4_define(CONFIG_PTHREAD_JOIN, `defined')
+m4_define(CONFIG_MUTEK_MEMALLOC_GUARD_SIZE, `undefined')
+m4_define(CONFIG_ROM_SIZE, `0x01000000')
+m4_define(CONFIG_LICENSE_USE_GPL, `undefined')
+m4_define(CONFIG_NETWORK_AUTOALIGN, `undefined')
+m4_define(CONFIG_DRIVER_LCD_S1D15G00, `undefined')
+m4_define(CONFIG_VMEM_KERNEL_ALLOC, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE_OLIMEX_SAM7_EX256, `undefined')
+m4_define(CONFIG_ARCH_HW_INIT, `undefined')
+m4_define(CONFIG_VMEM, `undefined')
+m4_define(CONFIG_LICENSE_APP_LGPL, `defined')
+m4_define(CONFIG_CPU_ARM_FPU, `undefined')
+m4_define(CONFIG_CPU_RESET_HANDLER, `defined')
+m4_define(CONFIG_DRIVER_BLOCK, `undefined')
+m4_define(CONFIG_CPU_USER, `undefined')
+m4_define(CONFIG_NETWORK_NFS, `undefined')
+m4_define(CONFIG_VMEM_PHYS_ALLOC, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_GUARD_INSTRUMENT, `undefined')
+m4_define(CONFIG_MWMR_USE_RAMLOCKS, `undefined')
+m4_define(CONFIG_DRIVER_NET_NE2000_FRAGMENT, `undefined')
+m4_define(CONFIG_CPU_CACHE_LINE, `4')
+m4_define(CONFIG_HEXO_ARCH_MMU, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_CACHE_SIZE, `undefined')
+m4_define(CONFIG_NETWORK_SOCKET, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_SOCLIBTTY, `defined')
+m4_define(CONFIG_LIBCRYPTO_CRC32_SMALL, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_RAMDISK_BLOCKSIZE, `undefined')
+m4_define(CONFIG_CPU_CACHE_COHERENCY, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_SIGNED, `undefined')
+m4_define(CONFIG_DRIVER_FS_DEVFS, `undefined')
+m4_define(CONFIG_NETWORK_PACKET_ASM, `undefined')
+m4_define(CONFIG_COMPILE_SIZEOF_INT, `4')
+m4_define(CONFIG_NETWORK_FORWARDING, `undefined')
+m4_define(CONFIG_CLUSTER, `undefined')
+m4_define(CONFIG_MUTEK_MAIN, `defined')
+m4_define(CONFIG_UNIX_STACK_VADDR, `undefined')
+m4_define(CONFIG_NETWORK_SOCKET_RAW, `undefined')
+m4_define(CONFIG_LIBELF_DEBUG, `undefined')
+m4_define(CONFIG_DRIVER_FS_ISO9660, `undefined')
+m4_define(CONFIG_DRIVER_I2C, `undefined')
+m4_define(CONFIG_ARCH_IBMPC_DMA, `undefined')
+m4_define(CONFIG_CPU_ENDIAN_LITTLE, `defined')
+m4_define(CONFIG_LIBC_SEMAPHORE, `defined')
+m4_define(CONFIG_UNIX_START_VADDR, `undefined')
+m4_define(CONFIG_ARCH_EMU, `undefined')
+m4_define(CONFIG_SOCLIB_MEMCHECK, `undefined')
+m4_define(CONFIG_DRIVER_FB, `undefined')
+m4_define(CONFIG_CPU_MIPS_ABI_O32, `defined')
+m4_define(CONFIG_DRIVER_MEM_MEMORY, `defined')
+m4_define(CONFIG_DRIVER_FB_SOCLIB, `undefined')
+m4_define(CONFIG_ARCH_EMU_DARWIN, `undefined')
+m4_define(CONFIG_ROM_ADDR, `0x61100000')
+m4_define(CONFIG_DRIVER_ENUM_ROOT, `defined')
+m4_define(CONFIG_DRIVER_TIMER_SOCLIB, `undefined')
+m4_define(CONFIG_COMPILE_FRAMEPTR, `defined')
+m4_define(CONFIG_LIBDSRL_DEBUG, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_NULL, `undefined')
+m4_define(CONFIG_MWMR_PTHREAD, `undefined')
+m4_define(CONFIG_MWMR_LOCKFREE, `undefined')
+m4_define(CONFIG_DRIVER_FS_FAT32, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_SD_MMC, `undefined')
+m4_define(CONFIG_NETWORK_UDP, `undefined')
+m4_define(CONFIG_NETWORK_IPV4, `undefined')
+m4_define(CONFIG_HEXO_MMU_PAGESIZE, `undefined')
+m4_define(CONFIG_CPU_X86_EMU, `undefined')
+m4_define(CONFIG_NETWORK_DHCLIENT, `undefined')
+m4_define(CONFIG_CPU_CACHE, `defined')
+m4_define(CONFIG_LICENSE_APP_PUBLIC, `undefined')
+m4_define(CONFIG_LIBTERMUI, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_DEBUG, `undefined')
+m4_define(CONFIG_CPU_AVR_GCCMCU, `undefined')
+m4_define(CONFIG_ARCH_SOCLIB_RAMLOCK, `undefined')
+m4_define(CONFIG_VFS_NAMELEN, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE_SAM7X256, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_UART8250, `undefined')
+m4_define(CONFIG_CPU_ARM_7TDMI, `undefined')
+m4_define(CONFIG_CPU_NAME, `mips')
+m4_define(CONFIG_DRIVER_CHAR_VGATTY_KEYBOARD, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_ATA, `undefined')
+m4_define(CONFIG_MUTEK_CONSOLE, `defined')
+m4_define(CONFIG_LIBELF, `undefined')
+m4_define(CONFIG_DRIVER_LCD, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_SAM7DBGU, `undefined')
+m4_define(CONFIG_LICENSE_USE_PUBLIC, `undefined')
+m4_define(CONFIG_DRIVER_ENUM_PCI, `undefined')
+m4_define(CONFIG_DRIVER_GPIO, `undefined')
+m4_define(CONFIG_CPU_RESET_SIZE, `0x2000')
+m4_define(CONFIG_SRL_STD, `undefined')
+m4_define(CONFIG_LIBC_STREAM, `defined')
+m4_define(CONFIG_ARCH_EMU_LINUX, `undefined')
+m4_define(CONFIG_CPU_AVR, `undefined')
+m4_define(CONFIG_LICENSE_APP_BSD, `undefined')
+m4_define(CONFIG_NETWORK_TCP, `undefined')
+m4_define(CONFIG_CPU_PPC, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE_RESET_ADDR, `undefined')
+m4_define(CONFIG_ARCH_IBMPC, `undefined')
+m4_define(CONFIG_CPU_NONALIGNED_ACCESS, `undefined')
+m4_define(CONFIG_CPU_EXCEPTION_ALIGN, `0x00001000')
+m4_define(CONFIG_MUTEK_NUMA, `undefined')
+m4_define(CONFIG_DRIVER_ICU_SOCLIB, `undefined')
+m4_define(CONFIG_DRIVER_ENUM_FDT, `defined')
+m4_define(CONFIG_MUTEK_SCHEDULER_CANDIDATE_FCN, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_CACHE, `undefined')
+m4_define(CONFIG_COMPILE_SAVETEMPS, `defined')
+m4_define(CONFIG_HEXO_MMU_VADDR, `undefined')
+m4_define(CONFIG_HETROM_SIZE, `undefined')
+m4_define(CONFIG_DRIVER_ICU_ARM, `undefined')
+m4_define(CONFIG_PRINTF_ARG_EXT, `defined')
+m4_define(CONFIG_LIBELF_DYNAMIC, `undefined')
+m4_define(CONFIG_DRIVER_FS_FAT16, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_US6089C_UART, `undefined')
+m4_define(CONFIG_DRIVER_ICU, `defined')
+m4_define(CONFIG_SRL_MULTI_TTY, `undefined')
+m4_define(CONFIG_COMPILE_INSTRUMENT, `undefined')
+m4_define(CONFIG_CPU_MIPS_ABI_O64, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_VGATTY_ANSI, `undefined')
+m4_define(CONFIG_FDT, `defined')
+m4_define(CONFIG_CPU_EXCEPTION_FIXED_ADDRESS, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE, `undefined')
+m4_define(CONFIG_SOCLIB_VMEM_MALLOC_REGION_SIZE, `0x8000')
+m4_define(CONFIG_HEXO_CPU_MMU, `undefined')
+m4_define(CONFIG_CPU_MAXCOUNT, `4')
+m4_define(CONFIG_DRIVER_NET, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_PARTITION_MAXCOUNT, `32')
+m4_define(CONFIG_DRIVER_ICU_SOCLIB_XICU, `defined')
+m4_define(CONFIG_ARCH_DEVICE_TREE, `defined')
+m4_define(CONFIG_CPU_AVR_IRQ_COUNT, `undefined')
+m4_define(CONFIG_PTHREAD, `defined')
+m4_define(CONFIG_VFS_GLOBAL_CWD, `undefined')
+m4_define(CONFIG_CPU_MIPS, `defined')
+m4_define(CONFIG_COMPILE_SOFTFLOAT, `defined')
+m4_define(CONFIG_NETWORK_RARP, `undefined')
+m4_define(CONFIG_PTHREAD_CANCEL, `defined')
+m4_define(CONFIG_CPU_ARM_M_PROFILE, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_SIMPLE, `undefined')
+m4_define(CONFIG_LIBCRYPTO, `defined')
+m4_define(CONFIG_DRIVER_TTY, `defined')
+m4_define(CONFIG_LIBC_ASSERT, `defined')
+m4_define(CONFIG_CPU_ARM_TLS_IN_C15, `undefined')
+m4_define(CONFIG_CPU_AVR_ENHANCED, `undefined')
+m4_define(CONFIG_DRIVER_TIMER_PITC_6079A, `undefined')
+m4_define(CONFIG_DRIVER_ENUM_ISAPNP, `undefined')
+m4_define(CONFIG_CPU_ENDIAN_BIG, `undefined')
+m4_define(CONFIG_CPU_X86, `undefined')
+m4_define(CONFIG_MWMR, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_GUARD, `undefined')
+m4_define(CONFIG_LICENSE_USE_PROPRIETARY, `undefined')
+m4_define(CONFIG_DRIVER_FB_VGA, `undefined')
+m4_define(CONFIG_PTHREAD_CHECK, `undefined')
+m4_define(CONFIG_ARCH_SOCLIB_VCACHE_40, `undefined')
+m4_define(CONFIG_CPU_MIPS_ABI_EABI, `undefined')
+m4_define(CONFIG_ARCH_SOCLIB, `defined')
+m4_define(CONFIG_CPU_MIPS_VERSION, `32')
+m4_define(CONFIG_DRIVER_NET_TUNTAP, `undefined')
+m4_define(CONFIG_CPU_ARM_THUMB, `undefined')
+m4_define(CONFIG_ARCH_SOCLIB_VCACHE_32, `undefined')
+m4_define(CONFIG_HEXO_IRQ, `defined')
+m4_define(CONFIG_CPU_X86_ALIGNCHECK, `undefined')
+m4_define(CONFIG_DRIVER_ICU_SAM7, `undefined')
+m4_define(CONFIG_ARCH_IBMPC_MEMORY, `undefined')
+m4_define(CONFIG_LICENSE_APP_META, `defined')
+m4_define(CONFIG_HEXO_MMU_PADDR, `undefined')
+m4_define(CONFIG_ARCH_EMU_MEMORY, `undefined')
+m4_define(CONFIG_UNIX, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_ALGO_BESTFIT, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE_ATMEGA, `undefined')
+m4_define(CONFIG_RAM_ADDR, `0x71600000')
+m4_define(CONFIG_PRINTF_ARG_SIMPLE, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_ALIGN, `0x20')
+m4_define(CONFIG_NETWORK_FILTER, `undefined')
+m4_define(CONFIG_LIBLUA, `undefined')
+m4_define(CONFIG_LICENSE_APP_GPL, `undefined')
+m4_define(CONFIG_LICENSE_USE_MIT, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_SMART, `defined')
+m4_define(CONFIG_LIBELF_RTLD, `undefined')
+m4_define(CONFIG_SOCLIB_EARLY_CONSOLE, `0x90600000')
+m4_define(CONFIG_COMPILE_PIC, `defined')
+m4_define(CONFIG_DRIVER_SPI_SPI6088D, `undefined')
+m4_define(CONFIG_DRIVER_FS_FAT_LFN, `undefined')
+m4_define(CONFIG_MUTEK_MEMALLOC_STATS, `undefined')
+m4_define(CONFIG_NETWORK_PROFILING, `undefined')
+m4_define(CONFIG_CPU_ARM_SOCLIB, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_RAMDISK, `undefined')
+m4_define(CONFIG_MUTEK_SCHEDULER_PREEMPT, `undefined')
+m4_define(CONFIG_DRIVER_ENUM, `defined')
+m4_define(CONFIG_DRIVER_CHAR_EMUTTY, `undefined')
+m4_define(CONFIG_LICENSE_USE_LGPL, `defined')
+m4_define(CONFIG_DRIVER_SOUND, `undefined')
+m4_define(CONFIG_ARCH_EMU_PAGESIZE, `undefined')
+m4_define(CONFIG_MUTEK_SCHEDULER, `defined')
+m4_define(CONFIG_SRL, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_ZERO, `undefined')
+m4_define(CONFIG_MWMR_INSTRUMENTATION, `undefined')
+m4_define(CONFIG_PTHREAD_MUTEX_ATTR, `defined')
+m4_define(CONFIG_DRIVER_ICU_PPC, `undefined')
+m4_define(CONFIG_LIBC_STREAM_BUFFER_SIZE, `256')
+m4_define(CONFIG_LICENSE_USE_BSD, `undefined')
+m4_define(CONFIG_PTHREAD_ATTRIBUTES, `defined')
+m4_define(CONFIG_CPU_X86_SYSENTER, `undefined')
+m4_define(CONFIG_SOCLIB_MEMCHECK_ADDRESS, `undefined')
+m4_define(CONFIG_DRIVER_INPUT_8042, `undefined')
+m4_define(CONFIG_MODULES, `splash_radix:/home/share/dcis_scme/THESES/GUTHMULLER/tsar/platforms/tsarv3_mutekh/splash_radix libfdt:/home/guthmuller/dev/mutekh/libfdt libpthread:/home/guthmuller/dev/mutekh/libpthread cpu:/home/guthmuller/dev/mutekh/cpu/mips libcrypto:/home/guthmuller/dev/mutekh/libcrypto arch:/home/guthmuller/dev/mutekh/arch/soclib')
+m4_define(CONFIG_HEXO_MMU, `undefined')
+m4_define(CONFIG_DEBUG_SPINLOCK_LIMIT, `undefined')
+m4_define(CONFIG_DRIVER_FS_ISO9660_ROCKRIDGE, `undefined')
+m4_define(CONFIG_COMPILE_COLLECT, `undefined')
+m4_define(CONFIG_LIBC_STRING_ASM, `undefined')
+m4_define(CONFIG_LIBCRYPTO_ARC4, `undefined')
+m4_define(CONFIG_MUTEK_TIMERMS, `undefined')
+m4_define(CONFIG_DRIVER_BLOCK_PARTITION, `undefined')
+m4_define(CONFIG_MWMR_SOCLIB, `undefined')
+m4_define(CONFIG_DRIVER_KEYBOARD, `undefined')
+m4_define(CONFIG_SMP, `defined')
+m4_define(CONFIG_LICENSE_APP_MIT, `undefined')
+m4_define(CONFIG_COMPILE_DEBUG, `defined')
+m4_define(CONFIG_HEXO_IPI, `defined')
+m4_define(CONFIG_DRIVER_TIMER, `undefined')
+m4_define(CONFIG_NETWORK, `undefined')
+m4_define(CONFIG_DRIVER_UART, `undefined')
+m4_define(CONFIG_SRL_VERBOSITY, `undefined')
+m4_define(CONFIG_UNIX_DEBUG, `undefined')
+m4_define(CONFIG_DRIVER_MEM, `defined')
+m4_define(CONFIG_DRIVER_CHAR_RANDOM, `undefined')
+m4_define(CONFIG_LIBELF_RTLD_KERNEL, `undefined')
+m4_define(CONFIG_MUTEK_LOGO, `undefined')
+m4_define(CONFIG_CPU_ARM_ARCH, `undefined')
+m4_define(CONFIG_MUTEK_SMP_APP_START, `defined')
+m4_define(CONFIG_MUTEK_SCHEDULER_STATIC, `undefined')
+m4_define(CONFIG_DRIVER_LCD_PCF8833, `undefined')
+m4_define(CONFIG_ARCH_SIMPLE_ATMEGA128, `undefined')
+m4_define(CONFIG_ARCH_HW_INIT_USER, `undefined')
+m4_define(CONFIG_HETROM_ADDR, `undefined')
+m4_define(CONFIG_DRIVER_FS_FAT_TYPE_FROM_STRING, `undefined')
+m4_define(CONFIG_LIBCRYPTO_CRC32, `undefined')
+m4_define(CONFIG_COMPILE_OPTIMIZE, `2')
+m4_define(CONFIG_MUTEK_RWLOCK, `defined')
+m4_define(CONFIG_DATA_FROM_ROM, `defined')
+m4_define(CONFIG_MUTEK_SCHEDULER_MIGRATION_AFFINITY, `undefined')
+m4_define(CONFIG_DRIVER_GPIO_SAM7, `undefined')
+m4_define(CONFIG_MUTEK_MEM_REGION, `undefined')
+m4_define(CONFIG_DRIVER_TIMER_8253, `undefined')
+m4_define(CONFIG_DRIVER_TIMER_EMU, `undefined')
+m4_define(CONFIG_CPU_ARM_CPU, `undefined')
+m4_define(CONFIG_DRIVER_INPUT_MT5F, `undefined')
+m4_define(CONFIG_DRIVER_CHAR_VGATTY, `undefined')
+m4_define(CONFIG_DEVICE_TREE, `defined')
+m4_define(CONFIG_NETWORK_PING, `undefined')
+m4_define(CONFIG_RAM_SIZE, `0x01000000')
+m4_define(CONFIG_VFS_GLOBAL_ROOT, `undefined')
+m4_define(CONFIG_LIBC_STREAM_STD, `undefined')
+m4_define(CONFIG_LIBELF_RTLD_TLS, `undefined')
+m4_define(CONFIG_UNIX_KSTACK_SIZE, `undefined')
+m4_define(CONFIG_LIBM, `undefined')
+m4_define(CONFIG_CPU_ARM, `undefined')
+m4_define(CONFIG_MUTEK_SCHEDULER_MIGRATION, `defined')
+m4_define(CONFIG_VFS, `undefined')
+m4_define(CONFIG_PTHREAD_STACK_SIZE, `4096')
+m4_define(CONFIG_LIBDSRL, `undefined')
Index: /trunk/platforms/tsarv2_mutekh/mutekh/.config.mk
===================================================================
--- /trunk/platforms/tsarv2_mutekh/mutekh/.config.mk	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/mutekh/.config.mk	(revision 8)
@@ -0,0 +1,297 @@
+##
+## This file has been generated by the configuration script.
+##
+
+# configuration options
+
+CONFIG_MUTEK_MEMALLOC_ALGO_FIRSTFIT=defined
+CONFIG_VFS_STATS=undefined
+CONFIG_NETWORK_SOCKET_PACKET=undefined
+CONFIG_DRIVER_FS_FAT_RW=undefined
+CONFIG_DRIVER_BLOCK_EMU_BLOCKSIZE=undefined
+CONFIG_SRL_SOCLIB=undefined
+CONFIG_DRIVER_BLOCK_EMU=undefined
+CONFIG_CPU_RESET_ADDR=0xbfc00000
+CONFIG_ARCH_SIMPLE_HW_INIT=undefined
+CONFIG_DRIVER_SPI=undefined
+CONFIG_LICENSE_APP_PROPRIETARY=undefined
+CONFIG_HET_BUILD=undefined
+CONFIG_DEBUG=undefined
+CONFIG_DRIVER_BLOCK_RAMDISK_SIZE=undefined
+CONFIG_LIBCRYPTO_MD5=undefined
+CONFIG_DRIVER_FS_FAT=undefined
+CONFIG_DRIVER_I2C_TWI6061A=undefined
+CONFIG_HEXO_INTTYPES_DEPRECATED=undefined
+CONFIG_DRIVER_BLOCK_SOCLIB=undefined
+CONFIG_VFS_VERBOSE=undefined
+CONFIG_CPU_X86_64_EMU=undefined
+CONFIG_ARCH_NAME=soclib
+CONFIG_DRIVER_NET_NE2000=undefined
+CONFIG_CPU_MIPS_ABI_N32=undefined
+CONFIG_ARCH_SIMPLE_SAM7=undefined
+CONFIG_DRIVER_FS_RAMFS=undefined
+CONFIG_MUTEK_PRINTK=defined
+CONFIG_DRIVER_ICU_MIPS=defined
+CONFIG_MUTEK_SCHEDULER_IDLE_STACK_SIZE=2048
+CONFIG_DRIVER_ICU_8259=undefined
+CONFIG_PTHREAD_JOIN=defined
+CONFIG_MUTEK_MEMALLOC_GUARD_SIZE=undefined
+CONFIG_ROM_SIZE=0x01000000
+CONFIG_LICENSE_USE_GPL=undefined
+CONFIG_NETWORK_AUTOALIGN=undefined
+CONFIG_DRIVER_LCD_S1D15G00=undefined
+CONFIG_VMEM_KERNEL_ALLOC=undefined
+CONFIG_ARCH_SIMPLE_OLIMEX_SAM7_EX256=undefined
+CONFIG_ARCH_HW_INIT=undefined
+CONFIG_VMEM=undefined
+CONFIG_LICENSE_APP_LGPL=defined
+CONFIG_CPU_ARM_FPU=undefined
+CONFIG_CPU_RESET_HANDLER=defined
+CONFIG_DRIVER_BLOCK=undefined
+CONFIG_CPU_USER=undefined
+CONFIG_NETWORK_NFS=undefined
+CONFIG_VMEM_PHYS_ALLOC=undefined
+CONFIG_MUTEK_MEMALLOC_GUARD_INSTRUMENT=undefined
+CONFIG_MWMR_USE_RAMLOCKS=undefined
+CONFIG_DRIVER_NET_NE2000_FRAGMENT=undefined
+CONFIG_CPU_CACHE_LINE=4
+CONFIG_HEXO_ARCH_MMU=undefined
+CONFIG_DRIVER_BLOCK_CACHE_SIZE=undefined
+CONFIG_NETWORK_SOCKET=undefined
+CONFIG_DRIVER_CHAR_SOCLIBTTY=defined
+CONFIG_LIBCRYPTO_CRC32_SMALL=undefined
+CONFIG_DRIVER_BLOCK_RAMDISK_BLOCKSIZE=undefined
+CONFIG_CPU_CACHE_COHERENCY=undefined
+CONFIG_MUTEK_MEMALLOC_SIGNED=undefined
+CONFIG_DRIVER_FS_DEVFS=undefined
+CONFIG_NETWORK_PACKET_ASM=undefined
+CONFIG_COMPILE_SIZEOF_INT=4
+CONFIG_NETWORK_FORWARDING=undefined
+CONFIG_CLUSTER=undefined
+CONFIG_MUTEK_MAIN=defined
+CONFIG_UNIX_STACK_VADDR=undefined
+CONFIG_NETWORK_SOCKET_RAW=undefined
+CONFIG_LIBELF_DEBUG=undefined
+CONFIG_DRIVER_FS_ISO9660=undefined
+CONFIG_DRIVER_I2C=undefined
+CONFIG_ARCH_IBMPC_DMA=undefined
+CONFIG_CPU_ENDIAN_LITTLE=defined
+CONFIG_LIBC_SEMAPHORE=defined
+CONFIG_UNIX_START_VADDR=undefined
+CONFIG_ARCH_EMU=undefined
+CONFIG_SOCLIB_MEMCHECK=undefined
+CONFIG_DRIVER_FB=undefined
+CONFIG_CPU_MIPS_ABI_O32=defined
+CONFIG_DRIVER_MEM_MEMORY=defined
+CONFIG_DRIVER_FB_SOCLIB=undefined
+CONFIG_ARCH_EMU_DARWIN=undefined
+CONFIG_ROM_ADDR=0x61100000
+CONFIG_DRIVER_ENUM_ROOT=defined
+CONFIG_DRIVER_TIMER_SOCLIB=undefined
+CONFIG_COMPILE_FRAMEPTR=defined
+CONFIG_LIBDSRL_DEBUG=undefined
+CONFIG_DRIVER_CHAR_NULL=undefined
+CONFIG_MWMR_PTHREAD=undefined
+CONFIG_MWMR_LOCKFREE=undefined
+CONFIG_DRIVER_FS_FAT32=undefined
+CONFIG_DRIVER_BLOCK_SD_MMC=undefined
+CONFIG_NETWORK_UDP=undefined
+CONFIG_NETWORK_IPV4=undefined
+CONFIG_HEXO_MMU_PAGESIZE=undefined
+CONFIG_CPU_X86_EMU=undefined
+CONFIG_NETWORK_DHCLIENT=undefined
+CONFIG_CPU_CACHE=defined
+CONFIG_LICENSE_APP_PUBLIC=undefined
+CONFIG_LIBTERMUI=undefined
+CONFIG_MUTEK_MEMALLOC_DEBUG=undefined
+CONFIG_CPU_AVR_GCCMCU=undefined
+CONFIG_ARCH_SOCLIB_RAMLOCK=undefined
+CONFIG_VFS_NAMELEN=undefined
+CONFIG_ARCH_SIMPLE_SAM7X256=undefined
+CONFIG_DRIVER_CHAR_UART8250=undefined
+CONFIG_CPU_ARM_7TDMI=undefined
+CONFIG_CPU_NAME=mips
+CONFIG_DRIVER_CHAR_VGATTY_KEYBOARD=undefined
+CONFIG_DRIVER_BLOCK_ATA=undefined
+CONFIG_MUTEK_CONSOLE=defined
+CONFIG_LIBELF=undefined
+CONFIG_DRIVER_LCD=undefined
+CONFIG_DRIVER_CHAR_SAM7DBGU=undefined
+CONFIG_LICENSE_USE_PUBLIC=undefined
+CONFIG_DRIVER_ENUM_PCI=undefined
+CONFIG_DRIVER_GPIO=undefined
+CONFIG_CPU_RESET_SIZE=0x2000
+CONFIG_SRL_STD=undefined
+CONFIG_LIBC_STREAM=defined
+CONFIG_ARCH_EMU_LINUX=undefined
+CONFIG_CPU_AVR=undefined
+CONFIG_LICENSE_APP_BSD=undefined
+CONFIG_NETWORK_TCP=undefined
+CONFIG_CPU_PPC=undefined
+CONFIG_ARCH_SIMPLE_RESET_ADDR=undefined
+CONFIG_ARCH_IBMPC=undefined
+CONFIG_CPU_NONALIGNED_ACCESS=undefined
+CONFIG_CPU_EXCEPTION_ALIGN=0x00001000
+CONFIG_MUTEK_NUMA=undefined
+CONFIG_DRIVER_ICU_SOCLIB=undefined
+CONFIG_DRIVER_ENUM_FDT=defined
+CONFIG_MUTEK_SCHEDULER_CANDIDATE_FCN=undefined
+CONFIG_DRIVER_BLOCK_CACHE=undefined
+CONFIG_COMPILE_SAVETEMPS=defined
+CONFIG_HEXO_MMU_VADDR=undefined
+CONFIG_HETROM_SIZE=undefined
+CONFIG_DRIVER_ICU_ARM=undefined
+CONFIG_PRINTF_ARG_EXT=defined
+CONFIG_LIBELF_DYNAMIC=undefined
+CONFIG_DRIVER_FS_FAT16=undefined
+CONFIG_DRIVER_CHAR_US6089C_UART=undefined
+CONFIG_DRIVER_ICU=defined
+CONFIG_SRL_MULTI_TTY=undefined
+CONFIG_COMPILE_INSTRUMENT=undefined
+CONFIG_CPU_MIPS_ABI_O64=undefined
+CONFIG_DRIVER_CHAR_VGATTY_ANSI=undefined
+CONFIG_FDT=defined
+CONFIG_CPU_EXCEPTION_FIXED_ADDRESS=undefined
+CONFIG_ARCH_SIMPLE=undefined
+CONFIG_SOCLIB_VMEM_MALLOC_REGION_SIZE=0x8000
+CONFIG_HEXO_CPU_MMU=undefined
+CONFIG_CPU_MAXCOUNT=4
+CONFIG_DRIVER_NET=undefined
+CONFIG_DRIVER_BLOCK_PARTITION_MAXCOUNT=32
+CONFIG_DRIVER_ICU_SOCLIB_XICU=defined
+CONFIG_ARCH_DEVICE_TREE=defined
+CONFIG_CPU_AVR_IRQ_COUNT=undefined
+CONFIG_PTHREAD=defined
+CONFIG_VFS_GLOBAL_CWD=undefined
+CONFIG_CPU_MIPS=defined
+CONFIG_COMPILE_SOFTFLOAT=defined
+CONFIG_NETWORK_RARP=undefined
+CONFIG_PTHREAD_CANCEL=defined
+CONFIG_CPU_ARM_M_PROFILE=undefined
+CONFIG_MUTEK_MEMALLOC_SIMPLE=undefined
+CONFIG_LIBCRYPTO=defined
+CONFIG_DRIVER_TTY=defined
+CONFIG_LIBC_ASSERT=defined
+CONFIG_CPU_ARM_TLS_IN_C15=undefined
+CONFIG_CPU_AVR_ENHANCED=undefined
+CONFIG_DRIVER_TIMER_PITC_6079A=undefined
+CONFIG_DRIVER_ENUM_ISAPNP=undefined
+CONFIG_CPU_ENDIAN_BIG=undefined
+CONFIG_CPU_X86=undefined
+CONFIG_MWMR=undefined
+CONFIG_MUTEK_MEMALLOC_GUARD=undefined
+CONFIG_LICENSE_USE_PROPRIETARY=undefined
+CONFIG_DRIVER_FB_VGA=undefined
+CONFIG_PTHREAD_CHECK=undefined
+CONFIG_ARCH_SOCLIB_VCACHE_40=undefined
+CONFIG_CPU_MIPS_ABI_EABI=undefined
+CONFIG_ARCH_SOCLIB=defined
+CONFIG_CPU_MIPS_VERSION=32
+CONFIG_DRIVER_NET_TUNTAP=undefined
+CONFIG_CPU_ARM_THUMB=undefined
+CONFIG_ARCH_SOCLIB_VCACHE_32=undefined
+CONFIG_HEXO_IRQ=defined
+CONFIG_CPU_X86_ALIGNCHECK=undefined
+CONFIG_DRIVER_ICU_SAM7=undefined
+CONFIG_ARCH_IBMPC_MEMORY=undefined
+CONFIG_LICENSE_APP_META=defined
+CONFIG_HEXO_MMU_PADDR=undefined
+CONFIG_ARCH_EMU_MEMORY=undefined
+CONFIG_UNIX=undefined
+CONFIG_MUTEK_MEMALLOC_ALGO_BESTFIT=undefined
+CONFIG_ARCH_SIMPLE_ATMEGA=undefined
+CONFIG_RAM_ADDR=0x71600000
+CONFIG_PRINTF_ARG_SIMPLE=undefined
+CONFIG_MUTEK_MEMALLOC_ALIGN=0x20
+CONFIG_NETWORK_FILTER=undefined
+CONFIG_LIBLUA=undefined
+CONFIG_LICENSE_APP_GPL=undefined
+CONFIG_LICENSE_USE_MIT=undefined
+CONFIG_MUTEK_MEMALLOC_SMART=defined
+CONFIG_LIBELF_RTLD=undefined
+CONFIG_SOCLIB_EARLY_CONSOLE=0x90600000
+CONFIG_COMPILE_PIC=defined
+CONFIG_DRIVER_SPI_SPI6088D=undefined
+CONFIG_DRIVER_FS_FAT_LFN=undefined
+CONFIG_MUTEK_MEMALLOC_STATS=undefined
+CONFIG_NETWORK_PROFILING=undefined
+CONFIG_CPU_ARM_SOCLIB=undefined
+CONFIG_DRIVER_BLOCK_RAMDISK=undefined
+CONFIG_MUTEK_SCHEDULER_PREEMPT=undefined
+CONFIG_DRIVER_ENUM=defined
+CONFIG_DRIVER_CHAR_EMUTTY=undefined
+CONFIG_LICENSE_USE_LGPL=defined
+CONFIG_DRIVER_SOUND=undefined
+CONFIG_ARCH_EMU_PAGESIZE=undefined
+CONFIG_MUTEK_SCHEDULER=defined
+CONFIG_SRL=undefined
+CONFIG_DRIVER_CHAR_ZERO=undefined
+CONFIG_MWMR_INSTRUMENTATION=undefined
+CONFIG_PTHREAD_MUTEX_ATTR=defined
+CONFIG_DRIVER_ICU_PPC=undefined
+CONFIG_LIBC_STREAM_BUFFER_SIZE=256
+CONFIG_LICENSE_USE_BSD=undefined
+CONFIG_PTHREAD_ATTRIBUTES=defined
+CONFIG_CPU_X86_SYSENTER=undefined
+CONFIG_SOCLIB_MEMCHECK_ADDRESS=undefined
+CONFIG_DRIVER_INPUT_8042=undefined
+CONFIG_MODULES=splash_radix:/home/share/dcis_scme/THESES/GUTHMULLER/tsar/platforms/tsarv3_mutekh/splash_radix libfdt:/home/guthmuller/dev/mutekh/libfdt libpthread:/home/guthmuller/dev/mutekh/libpthread cpu:/home/guthmuller/dev/mutekh/cpu/mips libcrypto:/home/guthmuller/dev/mutekh/libcrypto arch:/home/guthmuller/dev/mutekh/arch/soclib
+CONFIG_HEXO_MMU=undefined
+CONFIG_DEBUG_SPINLOCK_LIMIT=undefined
+CONFIG_DRIVER_FS_ISO9660_ROCKRIDGE=undefined
+CONFIG_COMPILE_COLLECT=undefined
+CONFIG_LIBC_STRING_ASM=undefined
+CONFIG_LIBCRYPTO_ARC4=undefined
+CONFIG_MUTEK_TIMERMS=undefined
+CONFIG_DRIVER_BLOCK_PARTITION=undefined
+CONFIG_MWMR_SOCLIB=undefined
+CONFIG_DRIVER_KEYBOARD=undefined
+CONFIG_SMP=defined
+CONFIG_LICENSE_APP_MIT=undefined
+CONFIG_COMPILE_DEBUG=defined
+CONFIG_HEXO_IPI=defined
+CONFIG_DRIVER_TIMER=undefined
+CONFIG_NETWORK=undefined
+CONFIG_DRIVER_UART=undefined
+CONFIG_SRL_VERBOSITY=undefined
+CONFIG_UNIX_DEBUG=undefined
+CONFIG_DRIVER_MEM=defined
+CONFIG_DRIVER_CHAR_RANDOM=undefined
+CONFIG_LIBELF_RTLD_KERNEL=undefined
+CONFIG_MUTEK_LOGO=undefined
+CONFIG_CPU_ARM_ARCH=undefined
+CONFIG_MUTEK_SMP_APP_START=defined
+CONFIG_MUTEK_SCHEDULER_STATIC=undefined
+CONFIG_DRIVER_LCD_PCF8833=undefined
+CONFIG_ARCH_SIMPLE_ATMEGA128=undefined
+CONFIG_ARCH_HW_INIT_USER=undefined
+CONFIG_HETROM_ADDR=undefined
+CONFIG_DRIVER_FS_FAT_TYPE_FROM_STRING=undefined
+CONFIG_LIBCRYPTO_CRC32=undefined
+CONFIG_COMPILE_OPTIMIZE=2
+CONFIG_MUTEK_RWLOCK=defined
+CONFIG_DATA_FROM_ROM=defined
+CONFIG_MUTEK_SCHEDULER_MIGRATION_AFFINITY=undefined
+CONFIG_DRIVER_GPIO_SAM7=undefined
+CONFIG_MUTEK_MEM_REGION=undefined
+CONFIG_DRIVER_TIMER_8253=undefined
+CONFIG_DRIVER_TIMER_EMU=undefined
+CONFIG_CPU_ARM_CPU=undefined
+CONFIG_DRIVER_INPUT_MT5F=undefined
+CONFIG_DRIVER_CHAR_VGATTY=undefined
+CONFIG_DEVICE_TREE=defined
+CONFIG_NETWORK_PING=undefined
+CONFIG_RAM_SIZE=0x01000000
+CONFIG_VFS_GLOBAL_ROOT=undefined
+CONFIG_LIBC_STREAM_STD=undefined
+CONFIG_LIBELF_RTLD_TLS=undefined
+CONFIG_UNIX_KSTACK_SIZE=undefined
+CONFIG_LIBM=undefined
+CONFIG_CPU_ARM=undefined
+CONFIG_MUTEK_SCHEDULER_MIGRATION=defined
+CONFIG_VFS=undefined
+CONFIG_PTHREAD_STACK_SIZE=4096
+CONFIG_LIBDSRL=undefined
+
+# configuration variables
+
Index: /trunk/platforms/tsarv2_mutekh/mutekh/.config.py
===================================================================
--- /trunk/platforms/tsarv2_mutekh/mutekh/.config.py	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/mutekh/.config.py	(revision 8)
@@ -0,0 +1,288 @@
+CONFIG_MUTEK_MEMALLOC_ALGO_FIRSTFIT = 'defined'
+CONFIG_VFS_STATS = 'undefined'
+CONFIG_NETWORK_SOCKET_PACKET = 'undefined'
+CONFIG_DRIVER_FS_FAT_RW = 'undefined'
+CONFIG_DRIVER_BLOCK_EMU_BLOCKSIZE = 'undefined'
+CONFIG_SRL_SOCLIB = 'undefined'
+CONFIG_DRIVER_BLOCK_EMU = 'undefined'
+CONFIG_CPU_RESET_ADDR = '0xbfc00000'
+CONFIG_ARCH_SIMPLE_HW_INIT = 'undefined'
+CONFIG_DRIVER_SPI = 'undefined'
+CONFIG_LICENSE_APP_PROPRIETARY = 'undefined'
+CONFIG_HET_BUILD = 'undefined'
+CONFIG_DEBUG = 'undefined'
+CONFIG_DRIVER_BLOCK_RAMDISK_SIZE = 'undefined'
+CONFIG_LIBCRYPTO_MD5 = 'undefined'
+CONFIG_DRIVER_FS_FAT = 'undefined'
+CONFIG_DRIVER_I2C_TWI6061A = 'undefined'
+CONFIG_HEXO_INTTYPES_DEPRECATED = 'undefined'
+CONFIG_DRIVER_BLOCK_SOCLIB = 'undefined'
+CONFIG_VFS_VERBOSE = 'undefined'
+CONFIG_CPU_X86_64_EMU = 'undefined'
+CONFIG_ARCH_NAME = 'soclib'
+CONFIG_DRIVER_NET_NE2000 = 'undefined'
+CONFIG_CPU_MIPS_ABI_N32 = 'undefined'
+CONFIG_ARCH_SIMPLE_SAM7 = 'undefined'
+CONFIG_DRIVER_FS_RAMFS = 'undefined'
+CONFIG_MUTEK_PRINTK = 'defined'
+CONFIG_DRIVER_ICU_MIPS = 'defined'
+CONFIG_MUTEK_SCHEDULER_IDLE_STACK_SIZE = '2048'
+CONFIG_DRIVER_ICU_8259 = 'undefined'
+CONFIG_PTHREAD_JOIN = 'defined'
+CONFIG_MUTEK_MEMALLOC_GUARD_SIZE = 'undefined'
+CONFIG_ROM_SIZE = '0x01000000'
+CONFIG_LICENSE_USE_GPL = 'undefined'
+CONFIG_NETWORK_AUTOALIGN = 'undefined'
+CONFIG_DRIVER_LCD_S1D15G00 = 'undefined'
+CONFIG_VMEM_KERNEL_ALLOC = 'undefined'
+CONFIG_ARCH_SIMPLE_OLIMEX_SAM7_EX256 = 'undefined'
+CONFIG_ARCH_HW_INIT = 'undefined'
+CONFIG_VMEM = 'undefined'
+CONFIG_LICENSE_APP_LGPL = 'defined'
+CONFIG_CPU_ARM_FPU = 'undefined'
+CONFIG_CPU_RESET_HANDLER = 'defined'
+CONFIG_DRIVER_BLOCK = 'undefined'
+CONFIG_CPU_USER = 'undefined'
+CONFIG_NETWORK_NFS = 'undefined'
+CONFIG_VMEM_PHYS_ALLOC = 'undefined'
+CONFIG_MUTEK_MEMALLOC_GUARD_INSTRUMENT = 'undefined'
+CONFIG_MWMR_USE_RAMLOCKS = 'undefined'
+CONFIG_DRIVER_NET_NE2000_FRAGMENT = 'undefined'
+CONFIG_CPU_CACHE_LINE = '4'
+CONFIG_HEXO_ARCH_MMU = 'undefined'
+CONFIG_DRIVER_BLOCK_CACHE_SIZE = 'undefined'
+CONFIG_NETWORK_SOCKET = 'undefined'
+CONFIG_DRIVER_CHAR_SOCLIBTTY = 'defined'
+CONFIG_LIBCRYPTO_CRC32_SMALL = 'undefined'
+CONFIG_DRIVER_BLOCK_RAMDISK_BLOCKSIZE = 'undefined'
+CONFIG_CPU_CACHE_COHERENCY = 'undefined'
+CONFIG_MUTEK_MEMALLOC_SIGNED = 'undefined'
+CONFIG_DRIVER_FS_DEVFS = 'undefined'
+CONFIG_NETWORK_PACKET_ASM = 'undefined'
+CONFIG_COMPILE_SIZEOF_INT = '4'
+CONFIG_NETWORK_FORWARDING = 'undefined'
+CONFIG_CLUSTER = 'undefined'
+CONFIG_MUTEK_MAIN = 'defined'
+CONFIG_UNIX_STACK_VADDR = 'undefined'
+CONFIG_NETWORK_SOCKET_RAW = 'undefined'
+CONFIG_LIBELF_DEBUG = 'undefined'
+CONFIG_DRIVER_FS_ISO9660 = 'undefined'
+CONFIG_DRIVER_I2C = 'undefined'
+CONFIG_ARCH_IBMPC_DMA = 'undefined'
+CONFIG_CPU_ENDIAN_LITTLE = 'defined'
+CONFIG_LIBC_SEMAPHORE = 'defined'
+CONFIG_UNIX_START_VADDR = 'undefined'
+CONFIG_ARCH_EMU = 'undefined'
+CONFIG_SOCLIB_MEMCHECK = 'undefined'
+CONFIG_DRIVER_FB = 'undefined'
+CONFIG_CPU_MIPS_ABI_O32 = 'defined'
+CONFIG_DRIVER_MEM_MEMORY = 'defined'
+CONFIG_DRIVER_FB_SOCLIB = 'undefined'
+CONFIG_ARCH_EMU_DARWIN = 'undefined'
+CONFIG_ROM_ADDR = '0x61100000'
+CONFIG_DRIVER_ENUM_ROOT = 'defined'
+CONFIG_DRIVER_TIMER_SOCLIB = 'undefined'
+CONFIG_COMPILE_FRAMEPTR = 'defined'
+CONFIG_LIBDSRL_DEBUG = 'undefined'
+CONFIG_DRIVER_CHAR_NULL = 'undefined'
+CONFIG_MWMR_PTHREAD = 'undefined'
+CONFIG_MWMR_LOCKFREE = 'undefined'
+CONFIG_DRIVER_FS_FAT32 = 'undefined'
+CONFIG_DRIVER_BLOCK_SD_MMC = 'undefined'
+CONFIG_NETWORK_UDP = 'undefined'
+CONFIG_NETWORK_IPV4 = 'undefined'
+CONFIG_HEXO_MMU_PAGESIZE = 'undefined'
+CONFIG_CPU_X86_EMU = 'undefined'
+CONFIG_NETWORK_DHCLIENT = 'undefined'
+CONFIG_CPU_CACHE = 'defined'
+CONFIG_LICENSE_APP_PUBLIC = 'undefined'
+CONFIG_LIBTERMUI = 'undefined'
+CONFIG_MUTEK_MEMALLOC_DEBUG = 'undefined'
+CONFIG_CPU_AVR_GCCMCU = 'undefined'
+CONFIG_ARCH_SOCLIB_RAMLOCK = 'undefined'
+CONFIG_VFS_NAMELEN = 'undefined'
+CONFIG_ARCH_SIMPLE_SAM7X256 = 'undefined'
+CONFIG_DRIVER_CHAR_UART8250 = 'undefined'
+CONFIG_CPU_ARM_7TDMI = 'undefined'
+CONFIG_CPU_NAME = 'mips'
+CONFIG_DRIVER_CHAR_VGATTY_KEYBOARD = 'undefined'
+CONFIG_DRIVER_BLOCK_ATA = 'undefined'
+CONFIG_MUTEK_CONSOLE = 'defined'
+CONFIG_LIBELF = 'undefined'
+CONFIG_DRIVER_LCD = 'undefined'
+CONFIG_DRIVER_CHAR_SAM7DBGU = 'undefined'
+CONFIG_LICENSE_USE_PUBLIC = 'undefined'
+CONFIG_DRIVER_ENUM_PCI = 'undefined'
+CONFIG_DRIVER_GPIO = 'undefined'
+CONFIG_CPU_RESET_SIZE = '0x2000'
+CONFIG_SRL_STD = 'undefined'
+CONFIG_LIBC_STREAM = 'defined'
+CONFIG_ARCH_EMU_LINUX = 'undefined'
+CONFIG_CPU_AVR = 'undefined'
+CONFIG_LICENSE_APP_BSD = 'undefined'
+CONFIG_NETWORK_TCP = 'undefined'
+CONFIG_CPU_PPC = 'undefined'
+CONFIG_ARCH_SIMPLE_RESET_ADDR = 'undefined'
+CONFIG_ARCH_IBMPC = 'undefined'
+CONFIG_CPU_NONALIGNED_ACCESS = 'undefined'
+CONFIG_CPU_EXCEPTION_ALIGN = '0x00001000'
+CONFIG_MUTEK_NUMA = 'undefined'
+CONFIG_DRIVER_ICU_SOCLIB = 'undefined'
+CONFIG_DRIVER_ENUM_FDT = 'defined'
+CONFIG_MUTEK_SCHEDULER_CANDIDATE_FCN = 'undefined'
+CONFIG_DRIVER_BLOCK_CACHE = 'undefined'
+CONFIG_COMPILE_SAVETEMPS = 'defined'
+CONFIG_HEXO_MMU_VADDR = 'undefined'
+CONFIG_HETROM_SIZE = 'undefined'
+CONFIG_DRIVER_ICU_ARM = 'undefined'
+CONFIG_PRINTF_ARG_EXT = 'defined'
+CONFIG_LIBELF_DYNAMIC = 'undefined'
+CONFIG_DRIVER_FS_FAT16 = 'undefined'
+CONFIG_DRIVER_CHAR_US6089C_UART = 'undefined'
+CONFIG_DRIVER_ICU = 'defined'
+CONFIG_SRL_MULTI_TTY = 'undefined'
+CONFIG_COMPILE_INSTRUMENT = 'undefined'
+CONFIG_CPU_MIPS_ABI_O64 = 'undefined'
+CONFIG_DRIVER_CHAR_VGATTY_ANSI = 'undefined'
+CONFIG_FDT = 'defined'
+CONFIG_CPU_EXCEPTION_FIXED_ADDRESS = 'undefined'
+CONFIG_ARCH_SIMPLE = 'undefined'
+CONFIG_SOCLIB_VMEM_MALLOC_REGION_SIZE = '0x8000'
+CONFIG_HEXO_CPU_MMU = 'undefined'
+CONFIG_CPU_MAXCOUNT = '4'
+CONFIG_DRIVER_NET = 'undefined'
+CONFIG_DRIVER_BLOCK_PARTITION_MAXCOUNT = '32'
+CONFIG_DRIVER_ICU_SOCLIB_XICU = 'defined'
+CONFIG_ARCH_DEVICE_TREE = 'defined'
+CONFIG_CPU_AVR_IRQ_COUNT = 'undefined'
+CONFIG_PTHREAD = 'defined'
+CONFIG_VFS_GLOBAL_CWD = 'undefined'
+CONFIG_CPU_MIPS = 'defined'
+CONFIG_COMPILE_SOFTFLOAT = 'defined'
+CONFIG_NETWORK_RARP = 'undefined'
+CONFIG_PTHREAD_CANCEL = 'defined'
+CONFIG_CPU_ARM_M_PROFILE = 'undefined'
+CONFIG_MUTEK_MEMALLOC_SIMPLE = 'undefined'
+CONFIG_LIBCRYPTO = 'defined'
+CONFIG_DRIVER_TTY = 'defined'
+CONFIG_LIBC_ASSERT = 'defined'
+CONFIG_CPU_ARM_TLS_IN_C15 = 'undefined'
+CONFIG_CPU_AVR_ENHANCED = 'undefined'
+CONFIG_DRIVER_TIMER_PITC_6079A = 'undefined'
+CONFIG_DRIVER_ENUM_ISAPNP = 'undefined'
+CONFIG_CPU_ENDIAN_BIG = 'undefined'
+CONFIG_CPU_X86 = 'undefined'
+CONFIG_MWMR = 'undefined'
+CONFIG_MUTEK_MEMALLOC_GUARD = 'undefined'
+CONFIG_LICENSE_USE_PROPRIETARY = 'undefined'
+CONFIG_DRIVER_FB_VGA = 'undefined'
+CONFIG_PTHREAD_CHECK = 'undefined'
+CONFIG_ARCH_SOCLIB_VCACHE_40 = 'undefined'
+CONFIG_CPU_MIPS_ABI_EABI = 'undefined'
+CONFIG_ARCH_SOCLIB = 'defined'
+CONFIG_CPU_MIPS_VERSION = '32'
+CONFIG_DRIVER_NET_TUNTAP = 'undefined'
+CONFIG_CPU_ARM_THUMB = 'undefined'
+CONFIG_ARCH_SOCLIB_VCACHE_32 = 'undefined'
+CONFIG_HEXO_IRQ = 'defined'
+CONFIG_CPU_X86_ALIGNCHECK = 'undefined'
+CONFIG_DRIVER_ICU_SAM7 = 'undefined'
+CONFIG_ARCH_IBMPC_MEMORY = 'undefined'
+CONFIG_LICENSE_APP_META = 'defined'
+CONFIG_HEXO_MMU_PADDR = 'undefined'
+CONFIG_ARCH_EMU_MEMORY = 'undefined'
+CONFIG_UNIX = 'undefined'
+CONFIG_MUTEK_MEMALLOC_ALGO_BESTFIT = 'undefined'
+CONFIG_ARCH_SIMPLE_ATMEGA = 'undefined'
+CONFIG_RAM_ADDR = '0x71600000'
+CONFIG_PRINTF_ARG_SIMPLE = 'undefined'
+CONFIG_MUTEK_MEMALLOC_ALIGN = '0x20'
+CONFIG_NETWORK_FILTER = 'undefined'
+CONFIG_LIBLUA = 'undefined'
+CONFIG_LICENSE_APP_GPL = 'undefined'
+CONFIG_LICENSE_USE_MIT = 'undefined'
+CONFIG_MUTEK_MEMALLOC_SMART = 'defined'
+CONFIG_LIBELF_RTLD = 'undefined'
+CONFIG_SOCLIB_EARLY_CONSOLE = '0x90600000'
+CONFIG_COMPILE_PIC = 'defined'
+CONFIG_DRIVER_SPI_SPI6088D = 'undefined'
+CONFIG_DRIVER_FS_FAT_LFN = 'undefined'
+CONFIG_MUTEK_MEMALLOC_STATS = 'undefined'
+CONFIG_NETWORK_PROFILING = 'undefined'
+CONFIG_CPU_ARM_SOCLIB = 'undefined'
+CONFIG_DRIVER_BLOCK_RAMDISK = 'undefined'
+CONFIG_MUTEK_SCHEDULER_PREEMPT = 'undefined'
+CONFIG_DRIVER_ENUM = 'defined'
+CONFIG_DRIVER_CHAR_EMUTTY = 'undefined'
+CONFIG_LICENSE_USE_LGPL = 'defined'
+CONFIG_DRIVER_SOUND = 'undefined'
+CONFIG_ARCH_EMU_PAGESIZE = 'undefined'
+CONFIG_MUTEK_SCHEDULER = 'defined'
+CONFIG_SRL = 'undefined'
+CONFIG_DRIVER_CHAR_ZERO = 'undefined'
+CONFIG_MWMR_INSTRUMENTATION = 'undefined'
+CONFIG_PTHREAD_MUTEX_ATTR = 'defined'
+CONFIG_DRIVER_ICU_PPC = 'undefined'
+CONFIG_LIBC_STREAM_BUFFER_SIZE = '256'
+CONFIG_LICENSE_USE_BSD = 'undefined'
+CONFIG_PTHREAD_ATTRIBUTES = 'defined'
+CONFIG_CPU_X86_SYSENTER = 'undefined'
+CONFIG_SOCLIB_MEMCHECK_ADDRESS = 'undefined'
+CONFIG_DRIVER_INPUT_8042 = 'undefined'
+CONFIG_MODULES = 'splash_radix:/home/share/dcis_scme/THESES/GUTHMULLER/tsar/platforms/tsarv3_mutekh/splash_radix libfdt:/home/guthmuller/dev/mutekh/libfdt libpthread:/home/guthmuller/dev/mutekh/libpthread cpu:/home/guthmuller/dev/mutekh/cpu/mips libcrypto:/home/guthmuller/dev/mutekh/libcrypto arch:/home/guthmuller/dev/mutekh/arch/soclib'
+CONFIG_HEXO_MMU = 'undefined'
+CONFIG_DEBUG_SPINLOCK_LIMIT = 'undefined'
+CONFIG_DRIVER_FS_ISO9660_ROCKRIDGE = 'undefined'
+CONFIG_COMPILE_COLLECT = 'undefined'
+CONFIG_LIBC_STRING_ASM = 'undefined'
+CONFIG_LIBCRYPTO_ARC4 = 'undefined'
+CONFIG_MUTEK_TIMERMS = 'undefined'
+CONFIG_DRIVER_BLOCK_PARTITION = 'undefined'
+CONFIG_MWMR_SOCLIB = 'undefined'
+CONFIG_DRIVER_KEYBOARD = 'undefined'
+CONFIG_SMP = 'defined'
+CONFIG_LICENSE_APP_MIT = 'undefined'
+CONFIG_COMPILE_DEBUG = 'defined'
+CONFIG_HEXO_IPI = 'defined'
+CONFIG_DRIVER_TIMER = 'undefined'
+CONFIG_NETWORK = 'undefined'
+CONFIG_DRIVER_UART = 'undefined'
+CONFIG_SRL_VERBOSITY = 'undefined'
+CONFIG_UNIX_DEBUG = 'undefined'
+CONFIG_DRIVER_MEM = 'defined'
+CONFIG_DRIVER_CHAR_RANDOM = 'undefined'
+CONFIG_LIBELF_RTLD_KERNEL = 'undefined'
+CONFIG_MUTEK_LOGO = 'undefined'
+CONFIG_CPU_ARM_ARCH = 'undefined'
+CONFIG_MUTEK_SMP_APP_START = 'defined'
+CONFIG_MUTEK_SCHEDULER_STATIC = 'undefined'
+CONFIG_DRIVER_LCD_PCF8833 = 'undefined'
+CONFIG_ARCH_SIMPLE_ATMEGA128 = 'undefined'
+CONFIG_ARCH_HW_INIT_USER = 'undefined'
+CONFIG_HETROM_ADDR = 'undefined'
+CONFIG_DRIVER_FS_FAT_TYPE_FROM_STRING = 'undefined'
+CONFIG_LIBCRYPTO_CRC32 = 'undefined'
+CONFIG_COMPILE_OPTIMIZE = '2'
+CONFIG_MUTEK_RWLOCK = 'defined'
+CONFIG_DATA_FROM_ROM = 'defined'
+CONFIG_MUTEK_SCHEDULER_MIGRATION_AFFINITY = 'undefined'
+CONFIG_DRIVER_GPIO_SAM7 = 'undefined'
+CONFIG_MUTEK_MEM_REGION = 'undefined'
+CONFIG_DRIVER_TIMER_8253 = 'undefined'
+CONFIG_DRIVER_TIMER_EMU = 'undefined'
+CONFIG_CPU_ARM_CPU = 'undefined'
+CONFIG_DRIVER_INPUT_MT5F = 'undefined'
+CONFIG_DRIVER_CHAR_VGATTY = 'undefined'
+CONFIG_DEVICE_TREE = 'defined'
+CONFIG_NETWORK_PING = 'undefined'
+CONFIG_RAM_SIZE = '0x01000000'
+CONFIG_VFS_GLOBAL_ROOT = 'undefined'
+CONFIG_LIBC_STREAM_STD = 'undefined'
+CONFIG_LIBELF_RTLD_TLS = 'undefined'
+CONFIG_UNIX_KSTACK_SIZE = 'undefined'
+CONFIG_LIBM = 'undefined'
+CONFIG_CPU_ARM = 'undefined'
+CONFIG_MUTEK_SCHEDULER_MIGRATION = 'defined'
+CONFIG_VFS = 'undefined'
+CONFIG_PTHREAD_STACK_SIZE = '4096'
+CONFIG_LIBDSRL = 'undefined'
Index: /trunk/platforms/tsarv2_mutekh/segmentation.h
===================================================================
--- /trunk/platforms/tsarv2_mutekh/segmentation.h	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/segmentation.h	(revision 8)
@@ -0,0 +1,86 @@
+/*
+   This file is part of MutekP.
+  
+   MutekP 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.
+  
+   MutekP 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 MutekP; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+  
+   UPMC / LIP6 / SOC (c) 2009
+   Copyright Ghassan Almaless <ghassan.almaless@gmail.com>
+*/
+
+
+/////////////////////////////////////////
+//   Devices mapped segments 
+/////////////////////////////////////////
+#define     LOCKS_BASE  0xd4200000
+#define     LOCKS_SIZE  0x00010000
+
+#define     TIMER_BASE  0xd3200000
+#define     TIMER_SIZE  0x00000080
+
+#define     ICU_BASE    0xd2200000
+#define     ICU_SIZE    0x00000020
+
+#define	    DMA_BASE	0xd1200000
+#define	    DMA_SIZE	0x00000014
+
+#define     TTY_BASE    0xd0200000
+#define     TTY_SIZE    0x00000040
+
+#define     SIMH_BASE     0xd5200000
+#define     SIMH_SIZE     0x20
+
+////////////////////////////////////////
+
+
+//////////////////////////////////////////
+//       ROM mapped segments
+//////////////////////////////////////////
+
+
+#define    BOOT_BASE       0xbfc00000
+#define    BOOT_SIZE       0x00010000
+//////////////////////////////////////////
+
+//////////////////////////////////////////
+//                RAM
+//////////////////////////////////////////
+#define	TEXT_BASE	0x00400000
+#define	TEXT_SIZE	0x00050000
+
+#define	EXCEP_BASE	0x80000000
+#define	EXCEP_SIZE	0x00010000
+
+#define     RAM_BASE    0x10000000
+#define     RAM_SIZE    0x01000000
+//////////////////////////////////////////
+
+
+////////////////////////////////////////
+//	Reserved segments
+////////////////////////////////////////
+
+#define PROC0_BASE	0x01200000
+#define PROC0_SIZE	0x0000000F
+
+#define PROC1_BASE	0x02200000
+#define PROC1_SIZE	0x0000000F
+
+#define PROC2_BASE	0x03200000
+#define PROC2_SIZE	0x0000000F
+
+#define PROC3_BASE	0x04200000
+#define PROC3_SIZE	0x0000000F
+
+////////////////////////////////////////
Index: /trunk/platforms/tsarv2_mutekh/top.cpp
===================================================================
--- /trunk/platforms/tsarv2_mutekh/top.cpp	(revision 8)
+++ /trunk/platforms/tsarv2_mutekh/top.cpp	(revision 8)
@@ -0,0 +1,383 @@
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <cstdlib>
+#include <cstdarg>
+
+#include "mapping_table.h"
+#include "mips32.h"
+#include "vci_simple_ram.h"
+#include "vci_multi_tty.h"
+#include "vci_simple_ring_network_2.h"
+#include "vci_vgmn.h"
+#include "vci_mem_cache_v2.h"
+#include "vci_cc_xcache_wrapper_v1.h"
+#include "vci_logger.h"
+#include "vci_xicu.h"
+
+#define USE_GDB_SERVER
+
+#ifdef USE_GDB_SERVER
+#include "gdbserver.h"
+#endif
+
+//#define  VCI_LOGGER_ON_L1
+//#define  VCI_LOGGER_ON_ROM
+//#define VCI_LOGGER_ON_DMA
+
+// If you want to use the VGMN or the RING
+//#define USE_VGMN
+
+#define CYCLES 100000
+
+#include "segmentation.h"
+
+int _main(int argc, char *argv[])
+{
+	using namespace sc_core;
+	// Avoid repeating these everywhere
+	using soclib::common::IntTab;
+	using soclib::common::Segment;
+
+	// Define VCI parameters
+	typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
+	typedef soclib::common::Mips32ElIss ProcessorIss;
+#ifdef USE_GDB_SERVER
+        typedef soclib::common::GdbServer<ProcessorIss> proc_iss;
+#else
+	typedef ProcessorIss proc_iss;
+#endif
+	// Mapping table
+        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0xFF000000);
+        maptabp.add(Segment("resetmips", 0xbfc00000, 0x2000, IntTab(0), true));
+        maptabp.add(Segment("excep", 0x80000000, 0x100000, IntTab(0), true));
+
+        maptabp.add(Segment("text" ,     0x60100000, 0x00100000, IntTab(1), true));
+        maptabp.add(Segment("data",      0x71600000, 0x01000000, IntTab(1), true));
+        maptabp.add(Segment("rodata" ,   0x61100000, 0x01000000, IntTab(1), true));
+
+        maptabp.add(Segment("tty"  ,     0x90600000, 0x00000010, IntTab(2), false));
+        maptabp.add(Segment("xicu",      0x20600000, 0x00001000, IntTab(3), false));
+
+ 
+	std::cout << maptabp << std::endl;
+
+        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0xFF000000);
+	maptabc.add(Segment("c_proc0" , PROC0_BASE , PROC0_SIZE , IntTab(0), false, true, IntTab(0)));
+	maptabc.add(Segment("c_proc1" , PROC1_BASE , PROC1_SIZE , IntTab(1), false, true, IntTab(1)));
+	maptabc.add(Segment("c_proc2" , PROC2_BASE , PROC2_SIZE , IntTab(2), false, true, IntTab(2)));
+	maptabc.add(Segment("c_proc3" , PROC3_BASE , PROC3_SIZE , IntTab(3), false, true, IntTab(3)));
+
+        maptabc.add(Segment("resetmips", 0xbfc00000, 0x2000, IntTab(4), false));
+        maptabc.add(Segment("excep", 0x80000000, 0x100000, IntTab(4), true));
+
+        maptabc.add(Segment("text" ,     0x60100000, 0x00100000, IntTab(4), false));
+        maptabc.add(Segment("data",      0x71600000, 0x01000000, IntTab(4), false));
+        maptabc.add(Segment("rodata" ,   0x61100000, 0x01000000, IntTab(4), false));
+
+
+
+	std::cout << maptabc << std::endl;
+	
+	soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x30000000);
+	maptabx.add(Segment("data" , 0x71600000 , 0x01000000 , IntTab(0), false));
+	maptabx.add(Segment("text" , 0x60100000 , 0x00100000 , IntTab(0), false));
+	maptabx.add(Segment("rodata" , 0x61100000 , 0x01000000 , IntTab(0), false));
+	
+	
+	std::cout << maptabx << std::endl;
+
+	// Signals
+
+	sc_clock	signal_clk("clk");
+	sc_signal<bool> signal_resetn("resetn");
+   
+	sc_signal<bool> signal_proc0_it0("proc0_it0"); 
+	sc_signal<bool> signal_proc0_it1("proc0_it1"); 
+	sc_signal<bool> signal_proc0_it2("proc0_it2"); 
+	sc_signal<bool> signal_proc0_it3("proc0_it3"); 
+	sc_signal<bool> signal_proc0_it4("proc0_it4"); 
+	sc_signal<bool> signal_proc0_it5("proc0_it5");
+
+	sc_signal<bool> signal_proc1_it0("proc1_it0"); 
+	sc_signal<bool> signal_proc1_it1("proc1_it1"); 
+	sc_signal<bool> signal_proc1_it2("proc1_it2"); 
+	sc_signal<bool> signal_proc1_it3("proc1_it3"); 
+	sc_signal<bool> signal_proc1_it4("proc1_it4"); 
+	sc_signal<bool> signal_proc1_it5("proc1_it5");
+
+	sc_signal<bool> signal_proc2_it0("proc2_it0"); 
+	sc_signal<bool> signal_proc2_it1("proc2_it1"); 
+	sc_signal<bool> signal_proc2_it2("proc2_it2"); 
+	sc_signal<bool> signal_proc2_it3("proc2_it3"); 
+	sc_signal<bool> signal_proc2_it4("proc2_it4"); 
+	sc_signal<bool> signal_proc2_it5("proc2_it5");
+
+	sc_signal<bool> signal_proc3_it0("proc3_it0"); 
+	sc_signal<bool> signal_proc3_it1("proc3_it1"); 
+	sc_signal<bool> signal_proc3_it2("proc3_it2"); 
+	sc_signal<bool> signal_proc3_it3("proc3_it3"); 
+	sc_signal<bool> signal_proc3_it4("proc3_it4"); 
+	sc_signal<bool> signal_proc3_it5("proc3_it5");
+
+
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0");
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1");
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2");
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3");
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3");
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
+
+
+	soclib::caba::VciSignals<vci_param> signal_vci_tty("signal_vci_tty");
+	soclib::caba::VciSignals<vci_param> signal_vci_vcitimer("signal_vci_vcitimer");
+	
+	soclib::caba::VciSignals<vci_param> signal_vci_icu("signal_vci_icu");
+	soclib::caba::VciSignals<vci_param> signal_vci_dmai("signal_vci_dmai");
+	soclib::caba::VciSignals<vci_param> signal_vci_dmat("signal_vci_dmat");
+	soclib::caba::VciSignals<vci_param> signal_vci_simhelper("signal_vci_simhelper");
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
+
+	sc_signal<bool> signal_icu_irq0("signal_icu_irq0");
+	sc_signal<bool> signal_icu_irq1("signal_icu_irq1");
+	sc_signal<bool> signal_icu_irq2("signal_icu_irq2");
+	sc_signal<bool> signal_icu_irq3("signal_icu_irq3");
+	sc_signal<bool> signal_icu_irq4("signal_icu_irq4");
+	sc_signal<bool> signal_icu_irq5("signal_icu_irq5");
+	sc_signal<bool> signal_icu_irq6("signal_icu_irq6");
+
+	soclib::common::Loader loader("mutekh/kernel-soclib-mips.out");
+
+        //                                  init_rw   init_c   tgt
+	soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
+	proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,64,16,4,64,16);
+
+	soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
+	proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,64,16,4,64,16);
+
+	soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
+	proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,64,16,4,64,16);
+
+	soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
+	proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,64,16,4,64,16);
+
+	soclib::caba::VciSimpleRam<vci_param> 
+	rom("rom", IntTab(0), maptabp, loader);
+
+	soclib::caba::VciSimpleRam<vci_param> 
+	xram("xram", IntTab(0), maptabx, loader);
+
+        //                                  x_init    c_init    p_tgt     c_tgt
+	//soclib::caba::VciMemCacheV3<vci_param> 
+	//memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(1), IntTab(4),16,256,16,1024);
+	//memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(1), IntTab(4),4,16,16,32);
+	soclib::caba::VciMemCacheV2<vci_param> 
+	memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(1), IntTab(4),16,256,16);
+       
+
+	soclib::caba::VciMultiTty<vci_param> vcitty("vcitty",	IntTab(2), maptabp, "vcitty", NULL);
+        soclib::caba::VciXicu<vci_param> vcixicu("vcixicu", maptabp, IntTab(3), 4, 1, 4, 4);
+	
+
+#ifdef VCI_LOGGER_ON_L1
+  soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
+#endif
+
+#ifdef VCI_LOGGER_ON_ROM
+  soclib::caba::VciLogger<vci_param> vci_logger1("vci_logger1",maptabp);
+#endif
+#ifdef VCI_LOGGER_ON_DMA
+  soclib::caba::VciLogger<vci_param> vci_logger2("vci_logger2",maptabp);
+#endif
+
+#ifdef USE_VGMN
+	soclib::caba::VciVgmn<vci_param> 
+	ringp("ringp",maptabp, 4, 4, 2, 8);
+
+	soclib::caba::VciVgmn<vci_param> 
+	ringc("ringc",maptabc, 5, 5, 2, 8);
+
+#else
+	soclib::caba::VciSimpleRingNetwork2<vci_param, 37, 33> 
+	ringp("ringp",maptabp, IntTab(), 2, 4, 4);
+
+	soclib::caba::VciSimpleRingNetwork2<vci_param, 37, 33> 
+	ringc("ringc",maptabc, IntTab(), 2, 5, 5);
+
+#endif
+
+	proc0.p_clk(signal_clk);  
+	proc0.p_resetn(signal_resetn);  
+	proc0.p_irq[0](signal_proc0_it0); 
+	proc0.p_irq[1](signal_proc0_it1); 
+	proc0.p_irq[2](signal_proc0_it2); 
+	proc0.p_irq[3](signal_proc0_it3); 
+	proc0.p_irq[4](signal_proc0_it4); 
+	proc0.p_irq[5](signal_proc0_it5); 
+	proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
+	proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
+	proc0.p_vci_tgt(signal_vci_tgt_proc0);
+
+
+	proc1.p_clk(signal_clk);  
+	proc1.p_resetn(signal_resetn);  
+	proc1.p_irq[0](signal_proc1_it0); 
+	proc1.p_irq[1](signal_proc1_it1); 
+	proc1.p_irq[2](signal_proc1_it2); 
+	proc1.p_irq[3](signal_proc1_it3); 
+	proc1.p_irq[4](signal_proc1_it4); 
+	proc1.p_irq[5](signal_proc1_it5); 
+	proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
+	proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
+	proc1.p_vci_tgt(signal_vci_tgt_proc1);
+
+	proc2.p_clk(signal_clk);  
+	proc2.p_resetn(signal_resetn);  
+	proc2.p_irq[0](signal_proc2_it0); 
+	proc2.p_irq[1](signal_proc2_it1); 
+	proc2.p_irq[2](signal_proc2_it2); 
+	proc2.p_irq[3](signal_proc2_it3); 
+	proc2.p_irq[4](signal_proc2_it4); 
+	proc2.p_irq[5](signal_proc2_it5); 
+	proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
+	proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
+	proc2.p_vci_tgt(signal_vci_tgt_proc2);
+
+	proc3.p_clk(signal_clk);  
+	proc3.p_resetn(signal_resetn);  
+	proc3.p_irq[0](signal_proc3_it0); 
+	proc3.p_irq[1](signal_proc3_it1); 
+	proc3.p_irq[2](signal_proc3_it2); 
+	proc3.p_irq[3](signal_proc3_it3); 
+	proc3.p_irq[4](signal_proc3_it4); 
+	proc3.p_irq[5](signal_proc3_it5); 
+	proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
+	proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
+	proc3.p_vci_tgt(signal_vci_tgt_proc3);
+
+	rom.p_clk(signal_clk);
+	rom.p_resetn(signal_resetn);
+	rom.p_vci(signal_vci_tgt_rom);
+
+
+	vcixicu.p_clk(signal_clk);
+	vcixicu.p_vci(signal_vci_icu);
+	vcixicu.p_hwi[0](signal_icu_irq0);
+	vcixicu.p_irq[0](signal_proc0_it0);
+	vcixicu.p_irq[1](signal_proc1_it0);
+	vcixicu.p_irq[2](signal_proc2_it0);
+	vcixicu.p_irq[3](signal_proc3_it0);
+	vcixicu.p_resetn(signal_resetn);
+
+
+#ifdef VCI_LOGGER_ON_L1
+  vci_logger0.p_clk(signal_clk);
+  vci_logger0.p_resetn(signal_resetn);
+  vci_logger0.p_vci(signal_vci_ini_rw_proc0);
+#endif
+
+#ifdef VCI_LOGGER_ON_ROM
+  vci_logger1.p_clk(signal_clk);
+  vci_logger1.p_resetn(signal_resetn);
+  vci_logger1.p_vci(signal_vci_tgt_rom);
+#endif
+
+	vcitty.p_clk(signal_clk);
+	vcitty.p_resetn(signal_resetn);
+	vcitty.p_vci(signal_vci_tty);
+	vcitty.p_irq[0](signal_icu_irq0); 
+	
+
+	memc.p_clk(signal_clk);
+	memc.p_resetn(signal_resetn);
+	memc.p_vci_tgt(signal_vci_tgt_memc);
+	memc.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc);
+	memc.p_vci_ini(signal_vci_ini_memc);
+	memc.p_vci_ixr(signal_vci_tgt_xram);
+
+	xram.p_clk(signal_clk);
+	xram.p_resetn(signal_resetn);
+	xram.p_vci(signal_vci_tgt_xram);
+	
+	ringp.p_clk(signal_clk);
+	ringp.p_resetn(signal_resetn);
+
+	ringc.p_clk(signal_clk);
+	ringc.p_resetn(signal_resetn);
+
+
+	ringp.p_to_initiator[0](signal_vci_ini_rw_proc0);
+	ringp.p_to_initiator[1](signal_vci_ini_rw_proc1);
+	ringp.p_to_initiator[2](signal_vci_ini_rw_proc2);
+	ringp.p_to_initiator[3](signal_vci_ini_rw_proc3);
+
+	ringc.p_to_initiator[4](signal_vci_ini_memc);
+	ringc.p_to_initiator[0](signal_vci_ini_c_proc0);
+	ringc.p_to_initiator[1](signal_vci_ini_c_proc1);
+	ringc.p_to_initiator[2](signal_vci_ini_c_proc2);
+	ringc.p_to_initiator[3](signal_vci_ini_c_proc3);
+
+	ringp.p_to_target[0](signal_vci_tgt_rom);
+	ringp.p_to_target[1](signal_vci_tgt_memc);
+	ringp.p_to_target[2](signal_vci_tty);
+	ringp.p_to_target[3](signal_vci_icu);
+	
+	ringc.p_to_target[0](signal_vci_tgt_proc0);
+	ringc.p_to_target[1](signal_vci_tgt_proc1);
+	ringc.p_to_target[2](signal_vci_tgt_proc2);
+	ringc.p_to_target[3](signal_vci_tgt_proc3);
+	ringc.p_to_target[4](signal_vci_tgt_cleanup_memc);
+
+
+	int ncycles;
+
+	sc_start(sc_core::sc_time(0, SC_NS));
+	signal_resetn = false;
+
+	sc_start(sc_core::sc_time(1, SC_NS));
+	signal_resetn = true;
+
+	while(1)
+	{
+	  sc_start(sc_core::sc_time(CYCLES, SC_NS));
+	}
+
+        std::cout << "Hit ENTER to end simulation" << std::endl;
+        char buf[1];
+
+	std::cin.getline(buf,1);
+
+	return EXIT_SUCCESS;
+}
+
+int sc_main (int argc, char *argv[])
+{
+	try {
+		return _main(argc, argv);
+	} catch (std::exception &e) {
+		std::cout << e.what() << std::endl;
+	} catch (...) {
+		std::cout << "Unknown exception occured" << std::endl;
+		throw;
+	}
+	return 1;
+}
