/************************************************/
/*                                              */
/* File        : rock.c                         */
/* Description : ROCK library                   */
/*                                              */
/* Author: Sfiligoi Igor                        */
/*                                              */
/* Created      : 04.02.1997                    */
/* Last modified: 20.02.1997                    */
/*                                              */
/************************************************/

#include <Error.h>
#include "rock.h"

/*********************************************************************/
/*                       read routines                               */
/*********************************************************************/

int rock_read_i_reset(ROCK_id          rockid,   /* IN  */
		      ROCK_RESET_bits *reset)    /* OUT */
{
  unsigned char data;

  data = rockh_read_reset(rockid);
  rockb_nr2reset(data,(*reset))

  return ROCK_ERROR_OK;
}

int rock_read_i_fifo(ROCK_id         rockid,  /* IN  */
		     ROCK_FIFO_bits *fifo)    /* OUT */
{
  unsigned char data;

  data = rockh_read_fifo(rockid);
  rockb_nr2fifo(data,(*fifo))

  return ROCK_ERROR_OK;
}

int rock_read_i_csr0(ROCK_id         rockid,  /* IN  */
		     ROCK_CSR0_bits *csr0)    /* OUT */
{
  unsigned char data;

  data = rockh_read_csr0(rockid);
  rockb_nr2csr0(data,(*csr0))

  return ROCK_ERROR_OK;
}

int rock_read_i_csr1(ROCK_id         rockid,  /* IN  */
		     ROCK_CSR1_bits *csr1)    /* OUT */
{
  unsigned char data;

  data = rockh_read_csr1(rockid);
  rockb_nr2csr1(data,(*csr1))

  return ROCK_ERROR_OK;
}

int rock_read_i_csr2(ROCK_id         rockid,  /* IN  */
		     ROCK_CSR2_bits *csr2)    /* OUT */
{
  unsigned char data;

  data = rockh_read_csr2(rockid);
  rockb_nr2csr2(data,(*csr2))

  return ROCK_ERROR_OK;
}

int rock_read_i_trigger(ROCK_id            rockid,     /* IN  */
			ROCK_TRIGGER_bits *trigger)    /* OUT */
{
  unsigned char data;

  data = rockh_read_trigger(rockid);
  rockb_nr2trigger(data,(*trigger))

  return ROCK_ERROR_OK;
}

int rock_read_i_tque(ROCK_id         rockid,  /* IN  */
		     ROCK_TQUE_bits *tque)    /* OUT */
{
  unsigned short data;

  data = rockh_read_tque(rockid);
  rockb_nr2tque(data,(*tque))

  return ROCK_ERROR_OK;
}

int rock_read_i_tnow(ROCK_id         rockid,  /* IN  */
		     ROCK_TNOW_bits *tnow)    /* OUT */
{
  unsigned short data;

  data = rockh_read_tnow(rockid);
  rockb_nr2tnow(data,(*tnow))

  return ROCK_ERROR_OK;
}

int rock_read_i_rockinfo(ROCK_id             rockid,      /* IN  */
			 ROCK_ROCKINFO_bits *rockinfo)   /* OUT */
{
  unsigned short data;

  data = rockh_read_rockinfo(rockid);
  rockb_nr2rockinfo(data,(*rockinfo))

  return ROCK_ERROR_OK;
}

int rock_read_i_golden(ROCK_id           rockid,    /* IN  */
		       ROCK_GOLDEN_bits *golden)   /* OUT */
{
  unsigned short data;

  data = rockh_read_golden(rockid);
  rockb_nr2golden(data,(*golden))

  return ROCK_ERROR_OK;
}

int rock_read_i_efifo(ROCK_id          rockid,   /* IN  */
		      ROCK_EFIFO_bits *efifo)   /* OUT */
{
  unsigned int data;

  data = rockh_read_efifo(rockid);
  rockb_nr2edfifo(data,(*efifo))

  return ROCK_ERROR_OK;
}

int rock_read_i_dfifo(ROCK_id          rockid,   /* IN  */
		      ROCK_DFIFO_bits *dfifo)   /* OUT */
{
  unsigned int data;

  data = rockh_read_dfifo(rockid);
  rockb_nr2edfifo(data,(*dfifo))

  return ROCK_ERROR_OK;
}

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

int rock_readpage_i_internal(ROCK_id rock_id,                     /* IN  */
			     ROCK_PAGE_INTERNAL_bits *internal)   /* OUT */
{
 ROCKH_INTERNAL_regs regs;
 int res;

 res = rockh_readpage_internal(rock_id,regs);

 if (res!=ROCKH_ERROR_OK)
   { /* report error */
     ErrorSetF(ROCK_ERROR_UNKNOWN,"rock_readpage_internal","rockh_readpage_internal error: %s",ErrorGetMessage()); 
     return ROCK_ERROR_UNKNOWN;
   }

 rockb_regs2bits_internal(regs,(*internal));
 return ROCK_ERROR_OK;
}

int rock_readpage_i_info(ROCK_id rock_id,             /* IN  */
			 ROCK_PAGE_INFO_bits *info)   /* OUT */
{
 ROCKH_INFO_regs regs;
 int res;

 res = rockh_readpage_info(rock_id,regs);

 if (res!=ROCKH_ERROR_OK)
   { /* report error */
     ErrorSetF(ROCK_ERROR_UNKNOWN,"rock_readpage_info","rockh_readpage_info error: %s",ErrorGetMessage()); 
     return ROCK_ERROR_UNKNOWN;
   }

 rockb_regs2bits_info(regs,(*info));
 return ROCK_ERROR_OK;
}