#ifndef ROCKM_FIELD_ACCESS_H
#define ROCKM_FIELD_ACCESS_H

#include "RockM_reg_def_type.h"
#include "RockM_reg_access.h"


/************************************************************************/
/*									*/
/*			 INTERNAL PAGE					*/
/*	ogni funzione che usera' queste macro dovra' aver effettuato	*/
/*     la dichiarazione RockM_reg_declaration ed aver incluso .. 	*/
/*									*/
/*  Le macro get restituiscono il valore letto				*/
/*Le macro set restituiscono un valore diverso da zero in caso di errore*/ 
/************************************************************************/


			/* REGISTRO RESET */

#define RockM_get_filter(this_board) 					\
		( RESET=RockM_read_reset(this_board), 			\
		  FILTER				)

#define RockM_set_filter(this_board,one_bit_value)  (			\
			RESET=RockM_read_reset(this_board), 		\
			FILTER=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_filter(this_board) )



#define RockM_get_intrst(this_board)					\
			( RESET=RockM_read_reset(this_board),		\
		  	  INTRST				)

#define RockM_set_intrst(this_board,one_bit_value)	(               \
			RESET=RockM_read_reset(this_board), 		\
			INTRST=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_intrst(this_board) )


#define RockM_get_reprog(this_board)					\
			( RESET=RockM_read_reset(this_board),		\
			  REPROG				)

#define RockM_set_reprog(this_board,one_bit_value)	(		\
			RESET=RockM_read_reset(this_board), 		\
			REPROG=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_reprog(this_board) )

#define RockM_get_cbus(this_board)					\
			( RESET=RockM_read_reset(this_board),		\
			  CBUS				)

#define RockM_set_cbus(this_board,one_bit_value)	(		\
			RESET=RockM_read_reset(this_board), 		\
			CBUS=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_cbus(this_board) )
			
#define	RockM_get_fifo_rst(this_board)					\
			(RESET=RockM_read_reset(this_board),		\
			 FIFO_RST	)


#define RockM_set_fifo_rst(this_board,one_bit_value)	(		\
			RESET=RockM_read_reset(this_board), 		\
			FIFO_RST=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_fifo_rst(this_board) )

#define	RockM_get_micro(this_board)					\
			(RESET=RockM_read_reset(this_board),		\
			 MICRO	)


#define RockM_set_micro(this_board,one_bit_value)	(		\
			RESET=RockM_read_reset(this_board), 		\
			MICRO=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_micro(this_board) )

#define	RockM_get_hub_rst(this_board)					\
			(RESET=RockM_read_reset(this_board),		\
			 HUB_RST	)


#define RockM_set_hub_rst(this_board,one_bit_value)	(		\
			RESET=RockM_read_reset(this_board), 		\
			HUB_RST=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_hub_rst(this_board) )

#define	RockM_get_cman(this_board)					\
			(RESET=RockM_read_reset(this_board),		\
			 CMAN	)


#define RockM_set_cman(this_board,one_bit_value)	(		\
			RESET=RockM_read_reset(this_board), 		\
			CMAN=one_bit_value,				\
			RockM_write_reset(this_board,RESET), 		\
			one_bit_value-RockM_get_cman(this_board) )

	

		/* REGISTRO FIFOREG */

#define RockM_get_d_f(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  D_F				)

#define RockM_get_d_af(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  D_AF				)

#define RockM_get_d_ghf(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  D_GHF				)

#define RockM_get_d_lhf(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  D_LHF				)

#define RockM_get_d_ae(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  D_AE				)

#define RockM_get_d_e(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  D_E				)

#define RockM_get_t_ef(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  T_EF				)

#define RockM_get_t_ff(this_board) 					\
		( FIFOREG=RockM_read_fiforeg(this_board), 		\
		  T_FF				)

	
	/* REGISTRO CSR0 */

#define	RockM_get_foe(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 FOE	)


#define RockM_set_foe(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			FOE=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_foe(this_board) )


#define	RockM_get_boe(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 BOE	)


#define RockM_set_boe(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			BOE=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_boe(this_board) )


#define	RockM_get_bof(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 BOF	)


#define RockM_set_bof(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			BOF=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_bof(this_board) )


#define	RockM_get_cbusy_ff(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 CBUSY_FF	)


#define RockM_set_cbusy_ff(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			CBUSY_FF=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_cbusy_ff(this_board) )


/* Unica macro di tal tipo creata per esigenze di velocita' di accesso */


#define RockM_set_cbusy_ff_pulse(this_board)	(		\
			RockM_write_csr0(this_board,0xff),		\
			RockM_write_csr0(this_board,0xef))


#define	RockM_get_cpause(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 CPAUSE	)


#define RockM_set_cpause(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			CPAUSE=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_cpause(this_board) )

#define	RockM_get_hub_mode(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 HUB_MODE	)


#define RockM_set_hub_mode(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			HUB_MODE=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_hub_mode(this_board) )

#define	RockM_get_inttrg(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 INTTRG	)


#define RockM_set_inttrg(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			INTTRG=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_inttrg(this_board) )


#define	RockM_get_diag(this_board)					\
			(CSR0=RockM_read_csr0(this_board),		\
			 DIAG	)


#define RockM_set_diag(this_board,one_bit_value)	(		\
			CSR0=RockM_read_csr0(this_board),		\
			DIAG=one_bit_value,				\
			RockM_write_csr0(this_board,CSR0),		\
			one_bit_value-RockM_get_diag(this_board) )


	/* REGISTRO CSR1 */

#define	RockM_get_ctknout(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CTKNOUT	)

#define	RockM_get_crdy(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CRDY	)

#define	RockM_get_cerr(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CERR	)

#define	RockM_get_crst(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CRST	)

#define	RockM_get_crngt(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CRNGT	)

#define	RockM_get_cbusy(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CBUSY	)

#define	RockM_get_ctrgv(this_board)					\
			(CSR1=RockM_read_csr1(this_board),		\
			 CTRGV	)

	
	/* REGISTRO CSR2 */


#define	RockM_get_edata(this_board)					\
			(CSR2=RockM_read_csr2(this_board),		\
			 EDATA	)

#define RockM_set_edata(this_board,one_bit_value)	(		\
			CSR2=RockM_read_csr2(this_board),		\
			EDATA=one_bit_value,		        	\
			RockM_write_csr2(this_board,CSR2),		\
			one_bit_value-RockM_get_edata(this_board) )


#define	RockM_get_hubon(this_board)					\
			(CSR2=RockM_read_csr2(this_board),		\
			 HUBON	)

#define	RockM_get_cbuson(this_board)					\
			(CSR2=RockM_read_csr2(this_board),		\
			 CBUSON	)

#define	RockM_get_timeout(this_board)					\
			(CSR2=RockM_read_csr2(this_board),		\
			 TIMEOUT	)

#define	RockM_get_elapsed(this_board)					\
			(CSR2=RockM_read_csr2(this_board),		\
			 ELAPSED	)

#define RockM_set_elapsed(this_board,one_bit_value)	(		\
			CSR2=RockM_read_csr2(this_board),		\
			ELAPSED=one_bit_value,			\
			RockM_write_csr2(this_board,CSR2),		\
			one_bit_value-RockM_get_elapsed(this_board) )

#define	RockM_get_wscale(this_board)					\
			(CSR2=RockM_read_csr2(this_board),		\
			 WSCALE 	)

#define RockM_set_wscale(this_board,three_bits_value)	(		\
			CSR2=RockM_read_csr2(this_board),		\
			WSCALE=three_bits_value,			\
			RockM_write_csr2(this_board,CSR2),		\
			three_bits_value-RockM_get_wscale(this_board) )


/* RESISTRO TRIG_ERR */

#define	RockM_get_halt(this_board)					\
			(TRIG_ERR=RockM_read_trig_err(this_board),	\
			 HALT 	)

#define	RockM_get_busy(this_board)					\
			(TRIG_ERR=RockM_read_trig_err(this_board),	\
			 BUSY 	)

#define	RockM_get_syncfail(this_board)					\
			(TRIG_ERR=RockM_read_trig_err(this_board),	\
			 SYNCFAIL 	)

#define	RockM_get_parity_error(this_board)					\
			(TRIG_ERR=RockM_read_trig_err(this_board),	\
			 PARITY_ERROR	)

#define	RockM_get_test(this_board)					\
			(TRIG_ERR=RockM_read_trig_err(this_board),	\
			 TEST 	)

#define RockM_set_test(this_board,two_bits_value)	(		\
			TRIG_ERR=RockM_read_trig_err(this_board),	\
			TEST=two_bits_value,				\
			RockM_write_trig_err(this_board,TRIG_ERR),	\
			two_bits_value-RockM_get_test(this_board) )




/************************************************************************/
/*									*/
/*			 INFO PAGE					*/
/*	ogni funzione che usera' queste macro dovra' aver effettuato	*/
/*     la dichiarazione RockM_reg_declaration ed aver incluso .. 	*/
/*									*/
/*  Le macro get restituiscono il valore letto				*/
/*Le macro set restituiscono un valore diverso da zero in caso di errore*/ 
/************************************************************************/



/* RESISTRO TQUE */


#define	RockM_get_tfff(this_board)					\
			(TQUE=RockM_read_tque(this_board),		\
			 TFFF	)

#define	RockM_get_link(this_board)					\
			(TQUE=RockM_read_tque(this_board),		\
			 LINK	)

#define	RockM_get_qtrg(this_board)					\
			(TQUE=RockM_read_tque(this_board),		\
			 QTRG	)

/*  REGISTRO TNOW */

#define	RockM_get_ptrg(this_board)					\
			(TNOW=RockM_read_tnow(this_board),		\
			 PTRG	)

/* REGISTRO CHAINADD */

#define	RockM_get_overrun(this_board)				\
			(CHAINADD=RockM_read_chainadd(this_board),	\
			 OVERRUN	)

#define	RockM_get_cnthigh(this_board)				\
			(CHAINADD=RockM_read_chainadd(this_board),	\
			 CNTHIGH	)

#define	RockM_get_chain_add(this_board)				\
			(CHAINADD=RockM_read_chainadd(this_board),	\
			 CHAIN_ADD	)


         /* if you want write in this field then you 
            must provide that DIAG is ON              */

#define RockM_set_chain_add(this_board,char_value)		(	\
			RockM_write_chainadd(this_board,(unsigned short)char_value),	\
			char_value-RockM_get_chain_add(this_board) )


/*   REGISTRO   GOLDEN  */

#define	RockM_get_goldenref(this_board)				\
			(GOLDEN=RockM_read_golden(this_board),	\
			 GOLDENREF	)


         /* if you want write in this field then you 
            must provide that DIAG is ON              */

#define RockM_set_goldenref(this_board,twelve_bits_value)	( \
 			RockM_write_golden(this_board,twelve_bits_value),\
			twelve_bits_value-RockM_get_goldenref(this_board) )


/*  REGISTRO WORDCNT */

#define	RockM_get_cntlow(this_board)				\
			(WORDCNT=RockM_read_wordcnt(this_board),\
			 CNTLOW	)


/*  REGISTRO INFO HUB  */

#define	RockM_get_slot(this_board)				\
			(INFOHUB=RockM_read_infohub(this_board),\
			 SLOT	)

#define	RockM_get_auxas(this_board)				\
			(INFOHUB=RockM_read_infohub(this_board),\
			 AUXAS	)

#define	RockM_get_auxtrgv(this_board)				\
			(INFOHUB=RockM_read_infohub(this_board),\
			 AUXTRGV	)

#define	RockM_get_auxdk(this_board)				\
			(INFOHUB=RockM_read_infohub(this_board),\
			 AUXDK	)

#define	RockM_get_auxds(this_board)				\
			(INFOHUB=RockM_read_infohub(this_board),\
			 AUXDS	)


/*  REGISTRO INFO MICRO  */

#define	RockM_get_cbustemp(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 CBUSTEMP	)

#define	RockM_get_vmetemp(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 VMETEMP	)

#define	RockM_get_wrcyc(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 WRCYC	)

#define	RockM_get_rdcyc(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 RDCYC	)

#define	RockM_get_urw(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 uRW	)

#define	RockM_get_udav(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 uDAV	)

#define	RockM_get_udk(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 uDK	)

#define	RockM_get_uds(this_board)				\
			(INFOMICRO=RockM_read_infomicro(this_board),\
			 uDS	)

/*  REGISTRO MICROSTAT  */

#define	RockM_get_status(this_board)				\
			(MICROSTAT=RockM_read_microstat(this_board),\
			 STATUS	)

#define	RockM_get_cycle(this_board)				\
			(MICROSTAT=RockM_read_microstat(this_board),\
			 CYCLE	)

#define	RockM_get_invacc(this_board)				\
			(MICROSTAT=RockM_read_microstat(this_board),\
			 INVACC	)

#define	RockM_get_uwrdy(this_board)				\
			(MICROSTAT=RockM_read_microstat(this_board),\
			 uWRDY	)

#define	RockM_get_done(this_board)				\
			(MICROSTAT=RockM_read_microstat(this_board),\
			 DONE	)

/* REGISTRO MICROWORD */

#define	RockM_get_microw(this_board)				\
			(MICROWORD=RockM_read_microword(this_board),\
			 MICROW	)

#define	RockM_set_microw(this_board,char_data)			\
			(MICROWORD=char_data,				\
                         RockM_write_microword(this_board,MICROWORD))


#endif