/************************************************/
/*                                              */
/* File        : rock.h                         */
/* Description : ROCK library                   */
/*                                              */
/* Author: Sfiligoi Igor                        */
/*                                              */
/* Created      : 27.01.1997                    */
/* Last modified: 02.04.1997                    */
/*                                              */
/************************************************/

#ifndef ROCK_H
#define ROCK_H

#include "rockhard.h"
#include "rockbits.h"

/************************************************/
/*                                              */
/*   The result should be ROCK_ERROR_OK,        */
/*   else there have been an error              */
/*   (see ROCK_ERROR_.. constants)              */
/*   if not stated otherwise                    */
/*                                              */
/************************************************/

#define ROCK_ERROR_OK            0     /* MUST be 0 */
#define ROCK_ERROR_TEST          ROCKH_ERROR_TEST
#define ROCK_ERROR_UNKNOWN       ROCKH_ERROR_UNKNOWN

/*********************************************************************/
/*                       bit values                                  */
/*********************************************************************/

#define ROCK_BIT_ON       ROCKB_BIT_ON
#define ROCK_BIT_OFF      ROCKB_BIT_OFF


/*********************************************************************/
/**************                types               *******************/
/*********************************************************************/

typedef ROCKB_RESET_bits         ROCK_RESET_bits;
typedef ROCKB_FIFO_bits          ROCK_FIFO_bits;
typedef ROCKB_WATCHDOG_bits      ROCK_WATCHDOG_bits;
typedef ROCKB_CSR0_bits          ROCK_CSR0_bits;
typedef ROCKB_CSR1_bits          ROCK_CSR1_bits;
typedef ROCKB_CSR2_bits          ROCK_CSR2_bits;
typedef ROCKB_ELAPSED_bits       ROCK_ELAPSED_bits;
typedef ROCKB_TRIGGER_bits       ROCK_TRIGGER_bits;
typedef ROCKB_TQUE_bits          ROCK_TQUE_bits;
typedef ROCKB_TNOW_bits          ROCK_TNOW_bits;
typedef ROCKB_ROCKINFO_bits      ROCK_ROCKINFO_bits;
typedef ROCKB_GOLDEN_bits        ROCK_GOLDEN_bits;
typedef ROCKB_EDFIFO_bits        ROCK_EFIFO_bits;
typedef ROCKB_EDFIFO_bits        ROCK_DFIFO_bits;
typedef ROCKB_EDFIFO_bits        ROCK_EDFIFO_bits;

typedef ROCKB_PAGE_INTERNAL_bits ROCK_PAGE_INTERNAL_bits;
typedef ROCKB_PAGE_INFO_bits     ROCK_PAGE_INFO_bits;

/*********************************************************************/
/*                      ROCK id type                                 */
/*********************************************************************/

typedef ROCKH_id        ROCK_id;

#include "rock_private.h"

/*********************************************************************/
/*                                                                   */
/*                          Query routines                           */
/*                                                                   */
/*********************************************************************/

/* returns 0 if ROCK not present, 1 else */
#define rock_ispresent(/*int*/ chain,                   /* IN, VIC chain */ \
		       /*int*/ crate)                   /* IN, position in the VIC chain */ \
        rockh_ispresent(chain,crate)

/*********************************************************************/
/*                                                                   */
/*                   Initialisation routines                         */
/*                                                                   */
/*********************************************************************/


#define rock_open(/*int          */ chain,          /* IN, VIC chain */  \
	          /*int          */ crate,          /* IN, position in the VIC chain  */  \
	          /*ROCK_id *    */ rock_id)        /* OUT */  \
	rockh_open(chain,crate,rock_id)

#define rock_close(/*ROCKH_id*/ rock_id)          /* IN  */  \
        rockh_close(rock_id)


/*********************************************************************/
/*                                                                   */
/*                   Register oriented routines                      */
/*                                                                   */
/*********************************************************************/

/*********************************************************************/
/*                       read routines                               */
/*               does not return a valid code                        */
/*********************************************************************/

#define rock_read_reset(/*ROCK_id        */ rockid,   /* IN  */ \
			/*ROCK_RESET_bits*/ reset)    /* OUT */ \
        rock_read_i_reset(rockid,&(reset))

#define rock_read_fifo(/*ROCK_id       */ rockid,  /* IN  */ \
		       /*ROCK_FIFO_bits*/ fifo)    /* OUT */ \
        rock_read_i_fifo(rockid,&(fifo))

#define rock_read_watchdog(/*ROCK_id           */ rockid,      /* IN  */ \
			   /*ROCK_WATCHDOG_bits*/ watchdog)    /* OUT */ \
        watchdog=rockh_read_watchdog(rockid)

#define rock_read_csr0(/*ROCK_id       */ rockid,  /* IN  */ \
		       /*ROCK_CSR0_bits*/ csr0)    /* OUT */ \
        rock_read_i_csr0(rockid,&(csr0))

#define rock_read_csr1(/*ROCK_id       */ rockid,  /* IN  */ \
		       /*ROCK_CSR1_bits*/ csr1)    /* OUT */ \
        rock_read_i_csr1(rockid,&(csr1))

#define rock_read_csr2(/*ROCK_id       */ rockid,  /* IN  */ \
		       /*ROCK_CSR2_bits*/ csr2)    /* OUT */ \
        rock_read_i_csr2(rockid,&(csr2))

#define rock_read_elapsed(/*ROCK_id          */ rockid,     /* IN  */ \
			  /*ROCK_ELAPSED_bits*/ elapsed)    /* OUT */ \
        elapsed=rockh_read_elapsed(rockid)

#define rock_read_trigger(/*ROCK_id          */ rockid,     /* IN  */ \
			  /*ROCK_TRIGGER_bits*/ trigger)    /* OUT */ \
        rock_read_i_trigger(rockid,&(trigger))




#define rock_read_tque(/*ROCK_id       */ rockid,  /* IN  */ \
		       /*ROCK_TQUE_bits*/ tque)    /* OUT */ \
        rock_read_i_tque(rockid,&(tque))

#define rock_read_tnow(/*ROCK_id       */ rockid,  /* IN  */ \
		       /*ROCK_TNOW_bits*/ tnow)    /* OUT */ \
        rock_read_i_tnow(rockid,&(tnow))

#define rock_read_rockinfo(/*ROCK_id           */ rockid,      /* IN  */ \
			   /*ROCK_ROCKINFO_bits*/ rockinfo)    /* OUT */ \
        rock_read_i_rockinfo(rockid,&(rockinfo))

#define rock_read_golden(/*ROCK_id         */ rockid,    /* IN  */ \
			 /*ROCK_GOLDEN_bits*/ golden)    /* OUT */ \
        rock_read_i_golden(rockid,&(golden))



#define rock_read_efifo(/*ROCK_id        */ rockid,   /* IN  */ \
			/*ROCK_EFIFO_bits*/ efifo)    /* OUT */ \
        rock_read_i_efifo(rockid,&(efifo))

#define rock_read_dfifo(/*ROCK_id        */ rockid,   /* IN  */ \
			/*ROCK_DFIFO_bits*/ dfifo)    /* OUT */ \
        rock_read_i_dfifo(rockid,&(dfifo))


/*********************************************************************/
/*                       write routines                              */
/*********************************************************************/

#define rock_write_reset(/*ROCK_id        */ rockid,   /* IN */ \
			 /*ROCK_RESET_bits*/ reset)    /* IN */ \
        rockh_write_reset(rockid,rockb_reset2nr(reset),1)

#define rock_write_watchdog(/*ROCK_id           */ rockid,      /* IN */ \
			    /*ROCK_WATCHDOG_bits*/ watchdog)    /* IN */ \
        rockh_write_watchdog(rockid,watchdog,1)

#define rock_write_csr0(/*ROCK_id       */ rockid,  /* IN  */ \
			/*ROCK_CSR0_bits*/ csr0)    /* IN */ \
        rockh_write_csr0(rockid,rockb_csr02nr(csr0),1)

#define rock_write_csr2(/*ROCK_id       */ rockid,  /* IN */ \
			/*ROCK_CSR2_bits*/ csr2)    /* IN */ \
        rockh_write_csr2(rockid,rockb_csr22nr(csr2),1)

#define rock_write_trigger(/*ROCK_id          */ rockid,    /* IN */ \
			   /*ROCK_TRIGGER_bits*/ trigger)   /* IN */ \
        rockh_write_trigger(rockid,rockb_trigger2nr(trigger),1)



#define rock_write_golden(/*ROCK_id         */ rockid,    /* IN */ \
			  /*ROCK_GOLDEN_bits*/ golden)    /* IN */ \
        rockh_write_golden(rockid,rockb_golden2nr(golden),1)


/*********************************************************************/
/*                                                                   */
/*                     Bit oriented routines                         */
/*                                                                   */
/*********************************************************************/

/*********************************************************************/
/**************         get bit routines           *******************/
/**************   return the value of the field    *******************/
/*********************************************************************/

/* reset */

#define rock_get_cintf(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_cintf(rockh_read_reset(rockid))

#define rock_get_xintf(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_xintf(rockh_read_reset(rockid))

#define rock_get_tfifo(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_tfifo(rockh_read_reset(rockid))

#define rock_get_efifo(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_efifo(rockh_read_reset(rockid))

#define rock_get_dfifo(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_cintf(rockh_read_reset(rockid))

#define rock_get_auxrst(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_auxrst(rockh_read_reset(rockid))

#define rock_get_intrst(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_intrst(rockh_read_reset(rockid))

#define rock_get_fltrst(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_fltrst(rockh_read_reset(rockid))

/* FIFO */

#define rock_get_dff(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_dff(rockh_read_fifo(rockid))

#define rock_get_dhf(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_dhf(rockh_read_fifo(rockid))

#define rock_get_def(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_def(rockh_read_fifo(rockid))

#define rock_get_eff(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_eff(rockh_read_fifo(rockid))

#define rock_get_ehf(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_ehf(rockh_read_fifo(rockid))

#define rock_get_eef(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_eef(rockh_read_fifo(rockid))

#define rock_get_tef(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_tef(rockh_read_fifo(rockid))

#define rock_get_tff(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_tff(rockh_read_fifo(rockid))

/* Watchdog */

#define rock_get_watchdog(/*ROCK_id */ rockid)  /* IN */  \
        rockh_read_watchdog(rockid)

/* CSR0 */

#define rock_get_efmode(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_efmode(rockh_read_csr0(rockid))

#define rock_get_boe(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_boe(rockh_read_csr0(rockid))

#define rock_get_tkndis(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_tkndis(rockh_read_csr0(rockid))

#define rock_get_inttrg(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_inttrg(rockh_read_csr0(rockid))

#define rock_get_diag(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_diag(rockh_read_csr0(rockid))

/* CSR1 */

#define rock_get_tknin(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_tknin(rockh_read_csr1(rockid))

#define rock_get_tknout(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_tknout(rockh_read_csr1(rockid))

#define rock_get_ceob(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_ceob(rockh_read_csr1(rockid))

#define rock_get_cerr(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_cerr(rockh_read_csr1(rockid))

#define rock_get_crst(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_crst(rockh_read_csr1(rockid))

#define rock_get_crngt(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_crngt(rockh_read_csr1(rockid))

#define rock_get_cbusy(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_cbusy(rockh_read_csr1(rockid))

#define rock_get_ctrgv(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_ctrgv(rockh_read_csr1(rockid))

/* CSR2 */

#define rock_get_efwren(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_efwren(rockh_read_csr2(rockid))

#define rock_get_auxon(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_auxon(rockh_read_csr2(rockid))

#define rock_get_timeout(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_timeout(rockh_read_csr2(rockid))

#define rock_get_elapsed(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_elapsed(rockh_read_csr2(rockid))

#define rock_get_wscale(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_wscale(rockh_read_csr2(rockid))

/* Elapsed */

#define rock_get_elapsedtime(/*ROCK_id */ rockid)  /* IN */  \
        rockh_read_elapsed(rockid)

/* Trigger */

#define rock_get_halt(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_halt(rockh_read_trigger(rockid))

#define rock_get_busy(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_busy(rockh_read_trigger(rockid))

#define rock_get_synchf(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_synchf(rockh_read_trigger(rockid))

#define rock_get_xbusy(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_xbusy(rockh_read_trigger(rockid))

#define rock_get_xberr(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_xberr(rockh_read_trigger(rockid))

/* TQUE */

#define rock_get_qtrg(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_qtrg(rockh_read_tque(rockid))

/* TNOW */

#define rock_get_cstate(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_cstate(rockh_read_tnow(rockid))

#define rock_get_ptrg(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_ptrg(rockh_read_tnow(rockid))

/* Rockinfo */

#define rock_get_sof(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_sof(rockh_read_rockinfo(rockid))

#define rock_get_eof(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_eof(rockh_read_rockinfo(rockid))

#define rock_get_syncrespf(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_syncrespf(rockh_read_rockinfo(rockid))

#define rock_get_rocksfail(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_rocksfail(rockh_read_rockinfo(rockid))

#define rock_get_slvsfail(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_slvsfail(rockh_read_rockinfo(rockid))

#define rock_get_lwadd(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_lwadd(rockh_read_rockinfo(rockid))

#define rock_get_xadd(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_xadd(rockh_read_rockinfo(rockid))

/* Golden */

#define rock_get_last(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_last(rockh_read_golden(rockid))

#define rock_get_cradd(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_cradd(rockh_read_golden(rockid))

#define rock_get_goldenref(/*ROCK_id */ rockid)  /* IN */  \
        rockb_get_goldenref(rockh_read_golden(rockid))

/*********************************************************************/
/**************         set bit routines           *******************/
/*********************************************************************/

/* Reset */

#define rock_set_cintf(/*ROCK_id       */ rock_id,  /* IN */  \
		       /*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_cintf(rockh_read_reset(rock_id),value),1)

#define rock_set_xintf(/*ROCK_id       */ rock_id,  /* IN */  \
		       /*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_xintf(rockh_read_reset(rock_id),value),1)

#define rock_set_tfifo(/*ROCK_id       */ rock_id,  /* IN */  \
		       /*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_tfifo(rockh_read_reset(rock_id),value),1)

#define rock_set_efifo(/*ROCK_id       */ rock_id,  /* IN */  \
		       /*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_efifo(rockh_read_reset(rock_id),value),1)

#define rock_set_dfifo(/*ROCK_id       */ rock_id,  /* IN */  \
		       /*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_dfifo(rockh_read_reset(rock_id),value),1)

#define rock_set_auxrst(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_auxrst(rockh_read_reset(rock_id),value),1)

#define rock_set_intrst(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_intrst(rockh_read_reset(rock_id),value),1)

#define rock_set_fltrst(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_reset(rock_id,rockb_set_fltrst(rockh_read_reset(rock_id),value),1)

/* Watchdog */

#define rock_set_watchdog(/*ROCK_id       */ rock_id,  /* IN */  \
			  /*unsigned char */ value)    /* IN */  \
        rockh_write_watchdog(rock_id,value,1)

/* CSR0 */

#define rock_set_efmode(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_csr0(rock_id,rockb_set_efmode(rockh_read_csr0(rock_id),value),1)

#define rock_set_boe(/*ROCK_id       */ rock_id,  /* IN */  \
		     /*unsigned char */ value)    /* IN */  \
        rockh_write_csr0(rock_id,rockb_set_boe(rockh_read_csr0(rock_id),value),1)

#define rock_set_tkndis(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_csr0(rock_id,rockb_set_tkndis(rockh_read_csr0(rock_id),value),1)

#define rock_set_inttrg(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_csr0(rock_id,rockb_set_inttrg(rockh_read_csr0(rock_id),value),1)

#define rock_set_diag(/*ROCK_id       */ rock_id,  /* IN */  \
		      /*unsigned char */ value)    /* IN */  \
        rockh_write_csr0(rock_id,rockb_set_diag(rockh_read_csr0(rock_id),value),1)

/* CSR2 */

#define rock_set_elapsed(/*ROCK_id       */ rock_id,  /* IN */  \
			 /*unsigned char */ value)    /* IN */  \
        rockh_write_csr2(rock_id,rockb_set_elapsed(rockh_read_csr2(rock_id),value),1)

#define rock_set_wscale(/*ROCK_id       */ rock_id,  /* IN */  \
			/*unsigned char */ value)    /* IN */  \
        rockh_write_csr2(rock_id,rockb_set_wscale(rockh_read_csr2(rock_id),value),1)

/* Trigger */

#define rock_set_test(/*ROCK_id       */ rock_id,  /* IN */  \
		      /*unsigned char */ value)    /* IN */  \
        rockh_write_trigger(rock_id,rockb_set_test(rockh_read_trigger(rock_id),value),1)

/* Golden */

#define rock_set_last(/*ROCK_id       */ rock_id,  /* IN */  \
		      /*unsigned char */ value)    /* IN */  \
        rockh_write_golden(rock_id,rockb_set_last(rockh_read_golden(rock_id),value),1)

#define rock_set_cradd(/*ROCK_id       */ rock_id,  /* IN */  \
		       /*unsigned char */ value)    /* IN */  \
        rockh_write_golden(rock_id,rockb_set_cradd(rockh_read_golden(rock_id),value),1)

#define rock_set_goldenref(/*ROCK_id       */ rock_id,  /* IN */  \
			   /*unsigned char */ value)    /* IN */  \
        rockh_write_golden(rock_id,rockb_set_goldenref(rockh_read_golden(rock_id),value),1)

/*********************************************************************/
/*                                                                   */
/*                      Page oriented routines                       */
/*                                                                   */
/*********************************************************************/

#define rock_readpage_internal(/*ROCK_id                 */ rock_id,    /* IN  */  \
			       /*ROCK_PAGE_INTERNAL_bits */ internal)   /* OUT */  \
        rock_readpage_i_internal(rock_id,&(internal))

#define rock_readpage_info(/*ROCK_id             */ rock_id,  /* IN  */  \
			   /*ROCK_PAGE_INFO_bits */ info)     /* OUT */  \
        rock_readpage_i_info(rock_id,&(info))


/*********************************************************************/
/*                     readfifo routines                             */
/*********************************************************************/

#define rock_readfifo_efifo(/*ROCK_id        */ rock_id,	/* IN  */    \
			    /*unsigned int   */ count,		/* IN nr els to read, OUT nr els really read */    \
			    /*unsigned int * */ buffer)		/* IN/OUT */ \
	rockh_readfifo_fifo(rock_id,ROCKH_EFRD_ofs,count,0,buffer,&(count))

#define rock_readfifo_dfifo(/*ROCK_id        */ rock_id,	/* IN  */    \
			    /*unsigned int   */ count,		/* IN nr els to read, OUT nr els really read */    \
			    /*unsigned int * */ buffer)		/* IN/OUT */ \
	rockh_readfifo_fifo(rock_id,ROCKH_DFRD_ofs,count,0,buffer,&(count))

#endif /* ROCK_H */