/************************************************/
/*                                              */
/* File        : rockhard_private.h             */
/* Description : ROCK hardware base access      */
/*               internal                       */
/*                                              */
/* Author: Sfiligoi Igor                        */
/*                                              */
/* Created      : 02.04.1997                    */
/* Last modified: 02.04.1997                    */
/*                                              */
/************************************************/

#ifndef ROCKHARD_PRIVATE_H
#define ROCKHARD_PRIVATE_H

/********************************************************************/
/*                      Register offsets                            */
/*                DO NOT USE DIRECTLY IF NOT REALLY NECESSARY       */
/********************************************************************/

/* internal registers (8 bit)*/
#define ROCKH_RESET_ofs	        0x21
#define ROCKH_FIFO_ofs          0x23
#define ROCKH_WATCHDOG_ofs   	0x25
#define ROCKH_CSR0_ofs   	0x27
#define ROCKH_CSR1_ofs   	0x29
#define ROCKH_CSR2_ofs   	0x2b
#define ROCKH_ELAPSED_ofs   	0x2d
#define ROCKH_TRIGGER_ofs    	0x2f

/* info registers (16 bit)*/
#define ROCKH_TQUE_ofs   	0x30
#define ROCKH_TNOW_ofs  	0x32
#define ROCKH_ROCKINFO_ofs      0x34
#define ROCKH_GOLDEN_ofs   	0x36

/* FIFO registers I/O  (32 bit)*/
#define ROCKH_EFRD_ofs   	0x0	/* could be 00/04/08/0c	*/
#define ROCKH_DFRD_ofs   	0x10	/* could be 10/14/18/1c	*/
#define ROCKH_FWRT_ofs   	0x0	/* could be 00/04/08/0c/10/14/18/1c */

/********************************************************************/
/*                          Page offsets                            */
/*                DO NOT USE DIRECTLY IF NOT REALLY NECESSARY       */
/********************************************************************/

#define ROCKH_PAGE_INTERNAL_ofs	0x20
#define ROCKH_PAGE_INFO_ofs	0x30

/*********************************************************************/
/*                       read routines                               */
/*                       return the read value                       */
/*********************************************************************/

/***********************/
/*        generic      */
/* Do not use directly */
/***********************/

unsigned char  rockh_read_reg08(ROCKH_id rock_id,     /* IN  */
				unsigned int offset); /* IN  */

unsigned short rockh_read_reg16(ROCKH_id rock_id,     /* IN  */
				unsigned int offset); /* IN  */

unsigned int   rockh_read_reg32(ROCKH_id rock_id,     /* IN  */
				unsigned int offset); /* IN  */

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

/***********************/
/*        generic      */
/* Do not use directly */
/***********************/

int rockh_write_reg08(ROCKH_id rock_id,         /* IN */
		      unsigned int offset,      /* IN */
		      unsigned char reg,        /* IN */
		      unsigned char testmask);  /* IN, test if >0*/

int rockh_write_reg16(ROCKH_id rock_id,         /* IN */
		      unsigned int offset,      /* IN */
		      unsigned short reg,       /* IN */
		      unsigned short testmask); /* IN, test if >0 */

int rockh_write_reg32(ROCKH_id rock_id,         /* IN */
		      unsigned int offset,      /* IN */
		      unsigned int reg,         /* IN */
		      unsigned int testmask);   /* IN, test if >0 */

/*********************************************************************/
/*                     readpage routines                             */
/*********************************************************************/

/***********************/
/*       internal      */
/* Do not use directly */
/***********************/

int rockh_readpage_i_internal(ROCKH_id rock_id,                /* IN  */
			      ROCKH_INTERNAL_regs *internal);  /* OUT */

int rockh_readpage_i_info(ROCKH_id rock_id,        /* IN  */
			  ROCKH_INFO_regs *info);  /* OUT */

/*********************************************************************/
/*                     readfifo routines                             */
/*                 raw fifo values are returned                      */
/*********************************************************************/

/***********************/
/*        generic      */
/* Do not use directly */
/***********************/

int rockh_readfifo_fifo(ROCKH_id rock_id,	/* IN  */
			unsigned int offset,	/* IN  */
			unsigned int nrels,	/* IN  */
			unsigned char raw,      /* IN, if >0, raw fifo values are returned */
			unsigned int *buffer,	/* IN/OUT */
			unsigned int *count);	/* OUT, nr of els really read */


#endif /* ROCKHARD_PRIVATE_H */