/************************************************/
/*                                              */
/* File        : rockbits.h                     */
/* Description : ROCK bits interpreter          */
/*                                              */
/* Author: Sfiligoi Igor                        */
/*                                              */
/* Created      : 14.01.1997                    */
/* Last modified: 02.04.1997                    */
/*                                              */
/************************************************/

#ifndef ROCKBITS_H
#define ROCKBITS_H

#include <bits.h>
#include "rockhard.h"

#include "rockbits_private.h"

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

#define ROCKB_BIT_ON       0
#define ROCKB_BIT_OFF      1


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

/*********************************************************************/
/*                       internal page                               */
/*********************************************************************/

typedef struct
        {
	  unsigned char fltrst;    /* 0/1 */
	  unsigned char intrst;    /* 0/1 */
	  unsigned char auxrst;    /* 0/1 */
	  unsigned char dfifo;     /* 0/1 */
	  unsigned char efifo;     /* 0/1 */
	  unsigned char xintf;     /* 0/1 */
	  unsigned char tfifo;     /* 0/1 */
	  unsigned char cintf;     /* 0/1 */
        } ROCKB_RESET_bits;

typedef struct
        {
	  unsigned char dff;   /* 0/1 */
	  unsigned char dhf;   /* 0/1 */
	  unsigned char def;   /* 0/1 */
	  unsigned char eff;   /* 0/1 */
	  unsigned char ehf;   /* 0/1 */
	  unsigned char eef;   /* 0/1 */
	  unsigned char tef;   /* 0/1 */
	  unsigned char tff;   /* 0/1 */
        } ROCKB_FIFO_bits;

typedef unsigned char ROCKB_WATCHDOG_bits;

typedef struct
        {
	  unsigned char efmode;   /* 0/1/2/3 */
	  unsigned char boe;      /* 0/1 */
	  unsigned char tkndis;   /* 0/1 */
	  unsigned char inttrg;   /* 0/1 */
	  unsigned char diag;     /* 0/1 */
        } ROCKB_CSR0_bits;

typedef struct
        {
	  unsigned char tknin;  /* 0/1 */
	  unsigned char tknout; /* 0/1 */
	  unsigned char ceob;   /* 0/1 */
	  unsigned char cerr;   /* 0/1 */
	  unsigned char crst;   /* 0/1 */
	  unsigned char crngt;  /* 0/1 */
	  unsigned char cbusy;  /* 0/1 */
	  unsigned char ctrgv;  /* 0/1 */
        } ROCKB_CSR1_bits;

typedef struct
        {
	  unsigned char efwren;   /* 0/1 */
	  unsigned char auxon;    /* 0/1 */
	  unsigned char timeout;  /* 0/1 */
	  unsigned char elapsed;  /* 0/1 */
	  unsigned char wscale;   /* 0..7 */
        } ROCKB_CSR2_bits;

typedef unsigned char ROCKB_ELAPSED_bits;

typedef struct
        {
	  unsigned char halt;   /* 0/1 */
	  unsigned char busy;   /* 0/1 */
	  unsigned char synchf; /* 0/1 */
	  unsigned char xbusy;  /* 0/1 */
	  unsigned char xberr;  /* 0/1 */
	  unsigned char test;   /* 0/1/2/3 */
        } ROCKB_TRIGGER_bits;

/*********************************************************************/
/*                         info page                                 */
/*********************************************************************/

typedef struct
        {
	  unsigned char tff;     /* 0/1 */
	  unsigned char link;    /* 0/1 */
	  unsigned short qtrg;   /* 0..4095 */
        } ROCKB_TQUE_bits;

typedef struct
        {
	  unsigned char cstate;  /* 0..7 */
	  unsigned short ptrg;   /* 0..4095 */
        } ROCKB_TNOW_bits;

typedef struct
        {
	  unsigned char sof;        /* 0/1 */
	  unsigned char eof;        /* 0/1 */
	  unsigned char syncrespf;  /* 0/1 */
	  unsigned char rocksfail;  /* 0/1 */
	  unsigned char slvsfail;   /* 0/1 */
	  unsigned char lwadd;      /* 0..15 */
	  unsigned char xadd;       /* 0..15 */
        } ROCKB_ROCKINFO_bits;

typedef struct
        {
	  unsigned char last;       /* 0/1 */
	  unsigned char cradd;      /* 0..7 */
	  unsigned short goldenref; /* 0..4095 */
        } ROCKB_GOLDEN_bits;

/*********************************************************************/
/*                         FIFO page                                 */
/*********************************************************************/

typedef struct
        {
	  unsigned char nvd;         /* 0/1 */
	  unsigned char ff;          /* 0/1 */
	  unsigned char hf;          /* 0/1 */
	  unsigned char ef;          /* 0/1 */
	  unsigned int fifodata;     /* 0..0x7ffffff */
        } ROCKB_EDFIFO_bits;

/*********************************************************************/
/**************           page types               *******************/
/*********************************************************************/

typedef struct
        {
	  unsigned char fltrst;    /* 0/1 */
	  unsigned char intrst;    /* 0/1 */
	  unsigned char auxrst;    /* 0/1 */
	  unsigned char dfifo;     /* 0/1 */
	  unsigned char efifo;     /* 0/1 */
	  unsigned char xintf;     /* 0/1 */
	  unsigned char tfifo;     /* 0/1 */
	  unsigned char cintf;     /* 0/1 */

	  unsigned char dff;   /* 0/1 */
	  unsigned char dhf;   /* 0/1 */
	  unsigned char def;   /* 0/1 */
	  unsigned char eff;   /* 0/1 */
	  unsigned char ehf;   /* 0/1 */
	  unsigned char eef;   /* 0/1 */
	  unsigned char tef;   /* 0/1 */
	  unsigned char tff;   /* 0/1 */

	  unsigned char watchdog; /* 0..255 */

	  unsigned char efmode;   /* 0/1/2/3 */
	  unsigned char boe;      /* 0/1 */
	  unsigned char tkndis;   /* 0/1 */
	  unsigned char inttrg;   /* 0/1 */
	  unsigned char diag;     /* 0/1 */

	  unsigned char tknin;  /* 0/1 */
	  unsigned char tknout; /* 0/1 */
	  unsigned char ceob;   /* 0/1 */
	  unsigned char cerr;   /* 0/1 */
	  unsigned char crst;   /* 0/1 */
	  unsigned char crngt;  /* 0/1 */
	  unsigned char cbusy;  /* 0/1 */
	  unsigned char ctrgv;  /* 0/1 */

	  unsigned char efwren;   /* 0/1 */
	  unsigned char auxon;    /* 0/1 */
	  unsigned char timeout;  /* 0/1 */
	  unsigned char elapsed;  /* 0/1 */
	  unsigned char wscale;   /* 0..7 */

	  unsigned char elapsedtime; /* 0..255 */

	  unsigned char halt;   /* 0/1 */
	  unsigned char busy;   /* 0/1 */
	  unsigned char synchf; /* 0/1 */
	  unsigned char xbusy;  /* 0/1 */
	  unsigned char xberr;  /* 0/1 */
	  unsigned char test;   /* 0/1/2/3 */
        } ROCKB_PAGE_INTERNAL_bits;

typedef struct
        {
	  unsigned char tff;     /* 0/1 */
	  unsigned char link;    /* 0/1 */
	  unsigned short qtrg;   /* 0..4095 */

	  unsigned char cstate;  /* 0..7 */
	  unsigned short ptrg;   /* 0..4095 */

	  unsigned char sof;        /* 0/1 */
	  unsigned char eof;        /* 0/1 */
	  unsigned char syncrespf;  /* 0/1 */
	  unsigned char rocksfail;  /* 0/1 */
	  unsigned char slvsfail;   /* 0/1 */
	  unsigned char lwadd;      /* 0..15 */
	  unsigned char xadd;       /* 0..15 */

	  unsigned char last;       /* 0/1 */
	  unsigned char cradd;      /* 0..7 */
	  unsigned short goldenref; /* 0..4095 */
        } ROCKB_PAGE_INFO_bits;

/*********************************************************************/
/**************      conversion routines           *******************/
/*********************************************************************/

/*********************************************************************/
/*                       internal page                               */
/*********************************************************************/

/* reset */

#define rockb_reset2nr(/*ROCKB_RESET_bits*/ reset)   /* IN  */         \
                      (bits_pos_bit(reset.cintf,ROCKB_RESET_CINTF) |   \
		       bits_pos_bit(reset.xintf,ROCKB_RESET_XINTF) |   \
		       bits_pos_bit(reset.tfifo,ROCKB_RESET_TFIFO) |   \
		       bits_pos_bit(reset.efifo,ROCKB_RESET_EFIFO) |   \
		       bits_pos_bit(reset.dfifo,ROCKB_RESET_DFIFO) |   \
		       bits_pos_bit(reset.auxrst,ROCKB_RESET_AUXRST) | \
		       bits_pos_bit(reset.intrst,ROCKB_RESET_INTRST) | \
		       bits_pos_bit(reset.fltrst,ROCKB_RESET_FLTRST))

#define rockb_nr2reset(/*unsigned char*/ nr,             /* IN  */  \
		       /*ROCKB_RESET_bits*/ reset)       /* OUT */  \
        {                                                           \
	  reset.cintf = bits_get_bit(nr,ROCKB_RESET_CINTF);         \
	  reset.xintf = bits_get_bit(nr,ROCKB_RESET_XINTF);         \
	  reset.tfifo = bits_get_bit(nr,ROCKB_RESET_TFIFO);         \
	  reset.efifo = bits_get_bit(nr,ROCKB_RESET_EFIFO);         \
	  reset.dfifo = bits_get_bit(nr,ROCKB_RESET_DFIFO);         \
	  reset.auxrst = bits_get_bit(nr,ROCKB_RESET_AUXRST);       \
	  reset.intrst = bits_get_bit(nr,ROCKB_RESET_INTRST);       \
	  reset.fltrst = bits_get_bit(nr,ROCKB_RESET_FLTRST);       \
        }

/* FIFO */

#define rockb_fifo2nr(/*ROCKB_FIFO_bits*/ fifo)  /* IN  */     \
                      (bits_pos_bit(fifo.dff,ROCKB_FIFO_DFF) | \
		       bits_pos_bit(fifo.dhf,ROCKB_FIFO_DHF) | \
		       bits_pos_bit(fifo.def,ROCKB_FIFO_DEF) | \
		       bits_pos_bit(fifo.eff,ROCKB_FIFO_EFF) | \
		       bits_pos_bit(fifo.ehf,ROCKB_FIFO_EHF) | \
		       bits_pos_bit(fifo.eef,ROCKB_FIFO_EEF) | \
		       bits_pos_bit(fifo.tef,ROCKB_FIFO_TEF) | \
		       bits_pos_bit(fifo.tff,ROCKB_FIFO_TFF))

#define rockb_nr2fifo(/*unsigned char  */ nr,     /* IN  */   \
		      /*ROCKB_FIFO_bits*/ fifo)   /* OUT */   \
        {                                                     \
	  fifo.dff = bits_get_bit(nr,ROCKB_FIFO_DFF);         \
	  fifo.dhf = bits_get_bit(nr,ROCKB_FIFO_DHF);         \
	  fifo.def = bits_get_bit(nr,ROCKB_FIFO_DEF);         \
	  fifo.eff = bits_get_bit(nr,ROCKB_FIFO_EFF);         \
	  fifo.ehf = bits_get_bit(nr,ROCKB_FIFO_EHF);         \
	  fifo.eef = bits_get_bit(nr,ROCKB_FIFO_EEF);         \
	  fifo.tef = bits_get_bit(nr,ROCKB_FIFO_TEF);         \
	  fifo.tff = bits_get_bit(nr,ROCKB_FIFO_TFF);         \
        }

/* watchdog */

/* CSR0 */

#define rockb_csr02nr(/*ROCKB_CSR0_bits*/ csr0)    /* IN  */  \
                      (0xC0 |                                  \
		       bits_pos_bits_mask(csr0.efmode,ROCKB_CSR0_EFMODE,ROCKB_CSR0_EFMODE_mask) | \
		       bits_pos_bit(csr0.boe,ROCKB_CSR0_BOE) |       \
		       bits_pos_bit(csr0.tkndis,ROCKB_CSR0_TKNDIS) | \
		       bits_pos_bit(csr0.inttrg,ROCKB_CSR0_INTTRG) | \
		       bits_pos_bit(csr0.diag,ROCKB_CSR0_DIAG))

#define rockb_nr2csr0(/*unsigned char  */ nr,    /* IN  */  \
		      /*ROCKB_CSR0_bits*/ csr0)  /* OUT */  \
        {                                                   \
	  csr0.efmode = bits_get_bits_mask(nr,ROCKB_CSR0_EFMODE,ROCKB_CSR0_EFMODE_mask); \
	  csr0.boe = bits_get_bit(nr,ROCKB_CSR0_BOE);        \
	  csr0.tkndis = bits_get_bit(nr,ROCKB_CSR0_TKNDIS);  \
	  csr0.inttrg = bits_get_bit(nr,ROCKB_CSR0_INTTRG);  \
	  csr0.diag = bits_get_bit(nr,ROCKB_CSR0_DIAG);      \
	}

/* CSR1 */

#define rockb_csr12nr(/*ROCKB_CSR1_bits*/ csr1)    /* IN  */  \
                      (bits_pos_bit(csr1.tknin,ROCKB_CSR1_TKNIN)   | \
		       bits_pos_bit(csr1.tknout,ROCKB_CSR1_TKNOUT) | \
		       bits_pos_bit(csr1.ceob,ROCKB_CSR1_CEOB)     | \
		       bits_pos_bit(csr1.cerr,ROCKB_CSR1_CERR)     | \
		       bits_pos_bit(csr1.crst,ROCKB_CSR1_CRST)     | \
		       bits_pos_bit(csr1.crngt,ROCKB_CSR1_CRNGT)   | \
		       bits_pos_bit(csr1.cbusy,ROCKB_CSR1_CBUSY)   | \
		       bits_pos_bit(csr1.ctrgv,ROCKB_CSR1_CTRGV))

#define rockb_nr2csr1(/*unsigned char  */ nr,    /* IN  */  \
		      /*ROCKB_CSR1_bits*/ csr1)  /* OUT */  \
        {                                                   \
	  csr1.tknin = bits_get_bit(nr,ROCKB_CSR1_TKNIN);   \
	  csr1.tknout = bits_get_bit(nr,ROCKB_CSR1_TKNOUT); \
	  csr1.ceob = bits_get_bit(nr,ROCKB_CSR1_CEOB);     \
	  csr1.cerr = bits_get_bit(nr,ROCKB_CSR1_CERR);     \
	  csr1.crst = bits_get_bit(nr,ROCKB_CSR1_CRST);     \
	  csr1.crngt = bits_get_bit(nr,ROCKB_CSR1_CRNGT);   \
	  csr1.cbusy = bits_get_bit(nr,ROCKB_CSR1_CBUSY);   \
	  csr1.ctrgv = bits_get_bit(nr,ROCKB_CSR1_CTRGV);   \
	}

/* CSR2 */

#define rockb_csr22nr(/*ROCKB_CSR2_bits */ csr2)    /* IN  */  \
                      (0x80 |                                  \
		       bits_pos_bit(csr2.efwren,ROCKB_CSR2_EFWREN) | \
		       bits_pos_bit(csr2.auxon,ROCKB_CSR2_AUXON) | \
		       bits_pos_bit(csr2.timeout,ROCKB_CSR2_TIMEOUT) | \
		       bits_pos_bit(csr2.elapsed,ROCKB_CSR2_ELAPSED) | \
		       bits_pos_bits_mask(csr2.wscale,ROCKB_CSR2_WSCALE,ROCKB_CSR2_WSCALE_mask))

#define rockb_nr2csr2(/*unsigned char  */ nr,    /* IN  */    \
		      /*ROCKB_CSR2_bits*/ csr2)  /* OUT */    \
        {                                                     \
	  csr2.efwren = bits_get_bit(nr,ROCKB_CSR2_EFWREN);   \
	  csr2.auxon = bits_get_bit(nr,ROCKB_CSR2_AUXON);     \
	  csr2.timeout = bits_get_bit(nr,ROCKB_CSR2_TIMEOUT); \
	  csr2.elapsed = bits_get_bit(nr,ROCKB_CSR2_ELAPSED); \
	  csr2.wscale = bits_get_bits_mask(nr,ROCKB_CSR2_WSCALE,ROCKB_CSR2_WSCALE_mask); \
	}

/* elapsed */

/* trigger */

#define rockb_trigger2nr(/*ROCKB_TRIGGER_bits*/ trigger) /* IN  */  \
                      (0x04 |                                       \
		       bits_pos_bit(trigger.halt,ROCKB_TRIGGER_HALT)     | \
		       bits_pos_bit(trigger.busy,ROCKB_TRIGGER_BUSY)     | \
		       bits_pos_bit(trigger.synchf,ROCKB_TRIGGER_SYNCHF) | \
		       bits_pos_bit(trigger.xbusy,ROCKB_TRIGGER_XBUSY)   | \
		       bits_pos_bit(trigger.xberr,ROCKB_TRIGGER_XBERR)   | \
		       bits_pos_bits_mask(trigger.test,ROCKB_TRIGGER_TEST,ROCKB_TRIGGER_TEST_mask))

#define rockb_nr2trigger(/*unsigned char     */ nr,        /* IN  */  \
			 /*ROCKB_TRIGGER_bits*/ trigger)   /* OUT */  \
        {                                                             \
	  trigger.halt = bits_get_bit(nr,ROCKB_TRIGGER_HALT);         \
	  trigger.busy = bits_get_bit(nr,ROCKB_TRIGGER_BUSY);         \
	  trigger.synchf = bits_get_bit(nr,ROCKB_TRIGGER_SYNCHF);     \
	  trigger.xbusy = bits_get_bit(nr,ROCKB_TRIGGER_XBUSY);       \
	  trigger.xberr = bits_get_bit(nr,ROCKB_TRIGGER_XBERR);       \
	  trigger.test =  bits_get_bits_mask(nr,ROCKB_TRIGGER_TEST,ROCKB_TRIGGER_TEST_mask);  \
	}

/*********************************************************************/
/*                         info page                                 */
/*********************************************************************/

/* tque */

#define rockb_tque2nr(/*ROCKB_TQUE_bits*/ tque)   /* IN  */  \
                      (bits_pos_bit(tque.tff,ROCKB_TQUE_TFF)   | \
		       bits_pos_bit(tque.link,ROCKB_TQUE_LINK) | \
		       bits_pos_bits_mask(tque.qtrg,ROCKB_TQUE_QTRG,ROCKB_TQUE_QTRG_mask))

#define rockb_nr2tque(/*unsigned short */ nr,     /* IN  */  \
		      /*ROCKB_TQUE_bits*/ tque)   /* OUT */  \
        {                                                    \
	  tque.tff = bits_get_bit(nr,ROCKB_TQUE_TFF);        \
	  tque.link = bits_get_bit(nr,ROCKB_TQUE_LINK);      \
	  tque.qtrg = bits_get_bits_mask(nr,ROCKB_TQUE_QTRG,ROCKB_TQUE_QTRG_mask); \
	}

/* tnow */

#define rockb_tnow2nr(/*ROCKB_TNOW_bits*/ tnow)   /* IN  */  \
                      (bits_pos_bits_mask(tnow.cstate,ROCKB_TNOW_CSTATE,ROCKB_TNOW_CSTATE_mask)   | \
		       bits_pos_bits_mask(tnow.ptrg,ROCKB_TNOW_PTRG,ROCKB_TNOW_PTRG_mask))

#define rockb_nr2tnow(/*unsigned short */ nr,    /* IN  */   \
		      /*ROCKB_TNOW_bits*/ tnow)  /* OUT */   \
        {                                                    \
	  tnow.cstate = bits_get_bits_mask(nr,ROCKB_TNOW_CSTATE,ROCKB_TNOW_CSTATE_mask); \
	  tnow.ptrg = bits_get_bits_mask(nr,ROCKB_TNOW_PTRG,ROCKB_TNOW_PTRG_mask); \
	}

/* rockinfo */

#define rockb_rockinfo2nr(/*ROCKB_ROCKINFO_bits*/ rockinfo)   /* IN  */  \
                      (bits_pos_bit(rockinfo.sof,ROCKB_ROCKINFO_SOF)   | \
		       bits_pos_bit(rockinfo.eof,ROCKB_ROCKINFO_EOF) | \
		       bits_pos_bit(rockinfo.syncrespf,ROCKB_ROCKINFO_SYNCRESPF) | \
		       bits_pos_bit(rockinfo.rocksfail,ROCKB_ROCKINFO_ROCKSFAIL) | \
		       bits_pos_bit(rockinfo.slvsfail,ROCKB_ROCKINFO_SLVSFAIL) | \
		       bits_pos_bits_mask(rockinfo.lwadd,ROCKB_ROCKINFO_LWADD,ROCKB_ROCKINFO_LWADD_mask) | \
		       bits_pos_bits_mask(rockinfo.xadd,ROCKB_ROCKINFO_XADD,ROCKB_ROCKINFO_XADD_mask))

#define rockb_nr2rockinfo(/*unsigned short     */ nr,       /* IN  */ \
			  /*ROCKB_ROCKINFO_bits*/ rockinfo) /* OUT */ \
        {                                                             \
	  rockinfo.sof = bits_get_bit(nr,ROCKB_ROCKINFO_SOF);         \
	  rockinfo.eof = bits_get_bit(nr,ROCKB_ROCKINFO_EOF);         \
	  rockinfo.syncrespf = bits_get_bit(nr,ROCKB_ROCKINFO_SYNCRESPF);   \
	  rockinfo.rocksfail = bits_get_bit(nr,ROCKB_ROCKINFO_ROCKSFAIL);     \
	  rockinfo.slvsfail = bits_get_bit(nr,ROCKB_ROCKINFO_SLVSFAIL);       \
	  rockinfo.lwadd = bits_get_bits_mask(nr,ROCKB_ROCKINFO_LWADD,ROCKB_ROCKINFO_LWADD_mask);  \
	  rockinfo.xadd = bits_get_bits_mask(nr,ROCKB_ROCKINFO_XADD,ROCKB_ROCKINFO_XADD_mask);     \
	}

/* golden */

#define rockb_golden2nr(/*ROCKB_GOLDEN_bits*/ golden)     /* IN  */  \
                      (bits_pos_bit(golden.last,ROCKB_GOLDEN_LAST) | \
		       bits_pos_bits_mask(golden.cradd,ROCKB_GOLDEN_CRADD,ROCKB_GOLDEN_CRADD_mask) | \
		       bits_pos_bits_mask(golden.goldenref,ROCKB_GOLDEN_GOLDENREF,ROCKB_GOLDEN_GOLDENREF_mask))

#define rockb_nr2golden(/*unsigned short   */ nr,       /* IN  */  \
			/*ROCKB_GOLDEN_bits*/ golden)   /* OUT */  \
        {                                                          \
	  golden.last = bits_get_bit(nr,ROCKB_GOLDEN_LAST);        \
	  golden.cradd = bits_get_bits_mask(nr,ROCKB_GOLDEN_CRADD,ROCKB_GOLDEN_CRADD_mask);              \
	  golden.goldenref = bits_get_bits_mask(nr,ROCKB_GOLDEN_GOLDENREF,ROCKB_GOLDEN_GOLDENREF_mask);  \
	}

/*********************************************************************/
/*                         FIFO page                                 */
/*********************************************************************/

#define rockb_edfifo2nr(/*ROCKB_EDFIFO_bits*/ edfifo)   /* IN  */  \
                      (bits_pos_bit(edfifo.nvd,ROCKB_EDFIFO_NVD)   | \
		       bits_pos_bit(edfifo.ff,ROCKB_EDFIFO_FF) | \
		       bits_pos_bit(edfifo.hf,ROCKB_EDFIFO_HF) | \
		       bits_pos_bit(edfifo.ef,ROCKB_EDFIFO_EF) | \
		       bits_pos_bits_mask(edfifo.fifodata,ROCKB_EDFIFO_FIFODATA,ROCKB_EDFIFO_FIFODATA_mask))

#define rockb_nr2edfifo(/*unsigned int     */ nr,     /* IN  */  \
			/*ROCKB_EDFIFO_bits*/ edfifo) /* OUT */  \
        {                                                        \
	  edfifo.nvd = bits_get_bit(nr,ROCKB_EDFIFO_NVD);        \
	  edfifo.ff = bits_get_bit(nr,ROCKB_EDFIFO_FF);          \
	  edfifo.hf = bits_get_bit(nr,ROCKB_EDFIFO_HF);          \
	  edfifo.ef = bits_get_bit(nr,ROCKB_EDFIFO_EF);          \
	  edfifo.fifodata = bits_get_bits_mask(nr,ROCKB_EDFIFO_FIFODATA,ROCKB_EDFIFO_FIFODATA_mask); \
	}

/*********************************************************************/
/**************         get bit routines           *******************/
/*********************************************************************/

/* reset */

#define rockb_get_cintf(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_CINTF)

#define rockb_get_xintf(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_XINTF)

#define rockb_get_tfifo(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_TFIFO)

#define rockb_get_efifo(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_EFIFO)

#define rockb_get_dfifo(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_DFIFO)

#define rockb_get_auxrst(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_AUXRST)

#define rockb_get_intrst(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_INTRST)

#define rockb_get_fltrst(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_RESET_FLTRST)

/* FIFO */

#define rockb_get_dff(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_DFF)

#define rockb_get_dhf(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_DHF)

#define rockb_get_def(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_DEF)

#define rockb_get_eff(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_EFF)

#define rockb_get_ehf(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_EHF)

#define rockb_get_eef(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_EEF)

#define rockb_get_tef(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_TEF)

#define rockb_get_tff(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_FIFO_TFF)

/* CSR0 */

#define rockb_get_efmode(/*unsigned char */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_CSR0_EFMODE,ROCKB_CSR0_EFMODE_mask)

#define rockb_get_boe(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR0_BOE)

#define rockb_get_tkndis(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR0_TKNDIS)

#define rockb_get_inttrg(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR0_INTTRG)

#define rockb_get_diag(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR0_DIAG)

/* CSR1 */

#define rockb_get_tknin(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_TKNIN)

#define rockb_get_tknout(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_TKNOUT)

#define rockb_get_ceob(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_CEOB)

#define rockb_get_cerr(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_CERR)

#define rockb_get_crst(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_CRST)

#define rockb_get_crngt(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_CRNGT)

#define rockb_get_cbusy(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_CBUSY)

#define rockb_get_ctrgv(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR1_CTRGV)

/* CSR2 */

#define rockb_get_efwren(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR2_EFWREN)

#define rockb_get_auxon(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR2_AUXON)

#define rockb_get_timeout(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR2_TIMEOUT)

#define rockb_get_elapsed(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_CSR2_ELAPSED)

#define rockb_get_wscale(/*unsigned char */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_CSR2_WSCALE,ROCKB_CSR2_WSCALE_mask)

/* Trigger */

#define rockb_get_halt(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_TRIGGER_HALT)

#define rockb_get_busy(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_TRIGGER_BUSY)

#define rockb_get_synchf(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_TRIGGER_SYNCHF)

#define rockb_get_xbusy(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_TRIGGER_XBUSY)

#define rockb_get_xberr(/*unsigned char */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_TRIGGER_XBERR)

#define rockb_get_test(/*unsigned char */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_TRIGGER_TEST,ROCKB_TRIGGER_TEST_mask)

/* TQUE */

#define rockb_get_link(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_TQUE_LINK)

#define rockb_get_qtrg(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_TQUE_QTRG,ROCKB_TQUE_QTRG_mask)

/* TNOW */

#define rockb_get_cstate(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_TNOW_CSTATE,ROCKB_TNOW_CSTATE_mask)

#define rockb_get_ptrg(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_TNOW_PTRG,ROCKB_TNOW_PTRG_mask)

/* Rockinfo */

#define rockb_get_sof(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_ROCKINFO_SOF)

#define rockb_get_eof(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_ROCKINFO_EOF)

#define rockb_get_syncrespf(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_ROCKINFO_SYNCRESPF)

#define rockb_get_rocksfail(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_ROCKINFO_ROCKSFAIL)

#define rockb_get_slvsfail(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_ROCKINFO_SLVSFAIL)

#define rockb_get_lwadd(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_ROCKINFO_LWADD,ROCKB_ROCKINFO_LWADD_mask)

#define rockb_get_xadd(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_ROCKINFO_XADD,ROCKB_ROCKINFO_XADD_mask)

/* Golden */

#define rockb_get_last(/*unsigned short */ nr) /* IN */  \
        bits_get_bit(nr,ROCKB_GOLDEN_LAST)

#define rockb_get_cradd(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_GOLDEN_CRADD,ROCKB_GOLDEN_CRADD_mask)

#define rockb_get_goldenref(/*unsigned short */ nr) /* IN */  \
        bits_get_bits_mask(nr,ROCKB_GOLDEN_GOLDENREF,ROCKB_GOLDEN_GOLDENREF_mask)

/* ED FIFO */

#define rockb_get_nvd(/*unsigned int */ nr) /* IN */  \
	bits_get_bit(nr,ROCKB_EDFIFO_NVD)

#define rockb_get_ff(/*unsigned int */ nr) /* IN */  \
	bits_get_bit(nr,ROCKB_EDFIFO_FF)

#define rockb_get_hf(/*unsigned int */ nr) /* IN */  \
	bits_get_bit(nr,ROCKB_EDFIFO_HF)

#define rockb_get_ef(/*unsigned int */ nr) /* IN */  \
	bits_get_bit(nr,ROCKB_EDFIFO_EF)

#define rockb_get_fifodata(/*unsigned int */ nr) /* IN */  \
	bits_get_bits_mask(nr,ROCKB_EDFIFO_FIFODATA,ROCKB_EDFIFO_FIFODATA_mask)

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

/* Reset */

#define rockb_set_cintf(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_RESET_CINTF,value)

#define rockb_set_xintf(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_RESET_XINTF,value)

#define rockb_set_tfifo(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_RESET_TFIFO,value)

#define rockb_set_efifo(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_RESET_EFIFO,value)

#define rockb_set_dfifo(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
	  bits_set_bit(nr,ROCKB_RESET_DFIFO,value)

#define rockb_set_auxrst(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
	  bits_set_bit(nr,ROCKB_RESET_AUXRST,value)

#define rockb_set_intrst(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
	  bits_set_bit(nr,ROCKB_RESET_INTRST,value)

#define rockb_set_fltrst(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
	  bits_set_bit(nr,ROCKB_RESET_FLTRST,value)

/* FIFO */

#define rockb_set_dff(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_FIFO_DFF,value)

#define rockb_set_dhf(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_FIFO_DHF,value)

#define rockb_set_def(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_FIFO_DEF,value)

#define rockb_set_eff(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_FIFO_EFF,value)

#define rockb_set_ehf(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_FIFO_EHF,value)

#define rockb_set_eef(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_FIFO_EEF,value)

#define rockb_set_tef(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_FIFO_TEF,value)

#define rockb_set_tff(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_FIFO_TFF,value)

/* CSR0 */

#define rockb_set_efmode(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_CSR0_EFMODE,ROCKB_CSR0_EFMODE_mask,value)

#define rockb_set_boe(/*unsigned char */ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR0_BOE,value)

#define rockb_set_tkndis(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR0_TKNDIS,value)

#define rockb_set_inttrg(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR0_INTTRG,value)

#define rockb_set_diag(/*unsigned char */ nr,     /* IN */  \
		       /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR0_DIAG,value)

/* CSR1 */

#define rockb_set_tknin(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR1_TKNIN,value)

#define rockb_set_tknout(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR1_TKNOUT,value)

#define rockb_set_ceob(/*unsigned char */ nr,     /* IN */  \
		       /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR1_CEOB,value)

#define rockb_set_cerr(/*unsigned char */ nr,     /* IN */  \
		       /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR1_CERR,value)

#define rockb_set_crst(/*unsigned char */ nr,     /* IN */  \
		       /*unsigned char */ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_CSR1_CRST,value)

#define rockb_set_crngt(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_CSR1_CRNGT,value)

#define rockb_set_cbusy(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR1_CBUSY,value)

#define rockb_set_ctrgv(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR1_CTRGV,value)

/* CSR2 */

#define rockb_set_efwren(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR2_EFWREN,value)

#define rockb_set_auxon(/*unsigned char */ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR2_AUXON,value)

#define rockb_set_timeout(/*unsigned char */ nr,     /* IN */  \
			  /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR2_TIMOUT,value)

#define rockb_set_elapsed(/*unsigned char */ nr,     /* IN */  \
			  /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_CSR2_ELAPSED,value)

#define rockb_set_wscale(/*unsigned char */ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
	bits_set_bits_mask(nr,ROCKB_CSR2_WSCALE,ROCKB_CSR2_WSCALE_mask,value)

/* TRIGGER */

#define rockb_set_halt(/*unsigned char */ nr,     /* IN */  \
                   /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_TRIGGER_HALT,value)

#define rockb_set_busy(/*unsigned char */ nr,     /* IN */  \
                   /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_TRIGGER_BUSY,value)

#define rockb_set_synchf(/*unsigned char */ nr,     /* IN */  \
                   /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_TRIGGER_SYNCHF,value)

#define rockb_set_xbusy(/*unsigned char */ nr,     /* IN */  \
                   /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_TRIGGER_XBUSY,value)

#define rockb_set_xberr(/*unsigned char */ nr,     /* IN */  \
                   /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_TRIGGER_XBERR,value)

#define rockb_set_test(/*unsigned char */ nr,     /* IN */  \
                   /*unsigned char */ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_TRIGGER_TEST,ROCKB_TRIGGER_TEST_mask,value)

/* TQUE */

#define rockb_set_link(/*unsigned short*/ nr,     /* IN */  \
		       /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_TQUE_LINK,value)

#define rockb_set_qtrg(/*unsigned short*/ nr,     /* IN */  \
		       /*unsigned short*/ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_TQUE_QTRG,ROCKB_TQUE_QTRG_mask,value)

/* TNOW */

#define rockb_set_cstate(/*unsigned short*/ nr,     /* IN */  \
			 /*unsigned char */ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_TNOW_CSTATE,ROCKB_TNOW_CSTATE_mask,value)

#define rockb_set_ptrg(/*unsigned short*/ nr,     /* IN */  \
		       /*unsigned short*/ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_TNOW_PTRG,ROCKB_TNOW_PTRG_mask,value)

/* Rockinfo */

#define rockb_set_sof(/*unsigned short*/ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_ROCKINFO_SOF,value)

#define rockb_set_eof(/*unsigned short*/ nr,     /* IN */  \
		      /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_ROCKINFO_EOF,value)

#define rockb_set_synchrespf(/*unsigned short*/ nr,     /* IN */  \
			     /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_ROCKINFO_SYNCHRESPF,value)

#define rockb_set_rocksfail(/*unsigned short*/ nr,     /* IN */  \
			    /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_ROCKINFO_ROCKSFAIL,value)

#define rockb_set_slvsfail(/*unsigned short*/ nr,     /* IN */  \
			   /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_ROCKINFO_SLVSFAIL,value)

#define rockb_set_lwadd(/*unsigned short*/ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_ROCKINFO_LWADD,ROCKB_ROCKINFO_LWADD_mask,value)

#define rockb_set_xadd(/*unsigned short*/ nr,     /* IN */  \
		       /*unsigned char */ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_ROCKINFO_XADD,ROCKB_ROCKINFO_XADD_mask,value)

/* Golden */

#define rockb_set_last(/*unsigned short*/ nr,     /* IN */  \
                       /*unsigned char */ value)  /* IN */  \
        bits_set_bit(nr,ROCKB_GOLDEN_LAST,value)

#define rockb_set_cradd(/*unsigned short*/ nr,     /* IN */  \
			/*unsigned char */ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_GOLDEN_CRADD,ROCKB_GOLDEN_CRADD_mask,value)

#define rockb_set_goldenref(/*unsigned short*/ nr,     /* IN */  \
			    /*unsigned short*/ value)  /* IN */  \
        bits_set_bits_mask(nr,ROCKB_GOLDEN_GOLDENREF,ROCKB_GOLDEN_GOLDENREF_mask,value)

/* ED FIFO */

#define rockb_set_nvd(/*unsigned int */ nr,     /* IN */  \
                      /*unsigned char*/ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_EDFIFO_NVD,value)

#define rockb_set_ff(/*unsigned int */ nr,     /* IN */  \
                     /*unsigned char*/ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_EDFIFO_FF,value)

#define rockb_set_hf(/*unsigned int */ nr,     /* IN */  \
                     /*unsigned char*/ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_EDFIFO_HF,value)

#define rockb_set_ef(/*unsigned int */ nr,     /* IN */  \
                     /*unsigned char*/ value)  /* IN */  \
	bits_set_bit(nr,ROCKB_EDFIFO_EF,value)

#define rockb_set_fifodata(/*unsigned int */ nr,     /* IN */  \
                           /*unsigned int */ value)  /* IN */  \
	bits_set_bits_mask(nr,ROCKB_EDFIFO_FIFODATA,ROCKB_EDFIFO_FIFODATA_mask,value)


/*********************************************************************/
/**************      conversion routines           *******************/
/*********************************************************************/

#define rockb_bits2regs_internal(/*ROCKB_PAGE_INTERNAL_bits*/ bits,  /* IN  */  \
				 /*ROCKH_INTERNAL_regs     */ regs)  /* OUT */  \
        { /* rockb_*2nr used in a strange way */	\
	  regs.reset=rockb_reset2nr(bits);		\
	  regs.fifo=rockb_fifo2nr(bits);		\
	  regs.watchdog=bits.watchdog;			\
	  regs.csr0=rockb_csr02nr(bits);		\
	  regs.csr1=rockb_csr12nr(bits);		\
	  regs.csr2=rockb_csr22nr(bits);		\
	  regs.elapsed=bits.elapsedtime;		\
	  regs.trigger=rockb_trigger2nr(bits);		\
        }

#define rockb_regs2bits_internal(/*ROCKH_INTERNAL_regs     */ regs,  /* IN  */  \
				 /*ROCKB_PAGE_INTERNAL_bits*/ bits)  /* OUT */  \
        { /* rockb_nr2* used in a strange way */	\
	  rockb_nr2reset(regs.reset,bits);		\
	  rockb_nr2fifo(regs.fifo,bits);		\
	  bits.watchdog=regs.watchdog;			\
	  rockb_nr2csr0(regs.csr0,bits);		\
	  rockb_nr2csr1(regs.csr1,bits);		\
	  rockb_nr2csr2(regs.csr2,bits);		\
	  bits.elapsedtime=regs.elapsed;		\
	  rockb_nr2trigger(regs.trigger,bits);		\
        }

#define rockb_bits2regs_info(/*ROCKB_PAGE_INFO_bits*/ bits,  /* IN  */  \
			     /*ROCKH_INFO_regs     */ regs)  /* OUT */  \
        { /* rockb_*2nr used in a strange way */	\
	  regs.tque=rockb_tque2nr(bits);		\
	  regs.tnow=rockb_tnow2nr(bits);		\
	  regs.rockinfo=rockb_rockinfo2nr(bits);	\
	  regs.golden=rockb_golden2nr(bits);		\
        }

#define rockb_regs2bits_info(/*ROCKH_INFO_regs     */ regs,  /* IN  */  \
			     /*ROCKB_PAGE_INFO_bits*/ bits)  /* OUT */  \
        { /* rockb_nr2* used in a strange way */	\
	  rockb_nr2tque(regs.tque,bits);		\
	  rockb_nr2tnow(regs.tnow,bits);		\
	  rockb_nr2rockinfo(regs.rockinfo,bits);	\
	  rockb_nr2golden(regs.golden,bits);		\
	}

#endif /* ROCKBITS_H */