/************************************************/ /* */ /* File : rockhard.h */ /* Description : ROCK hardware base access */ /* */ /* Author: Sfiligoi Igor */ /* */ /* Created : 20.01.1997 */ /* Last modified: 02.04.1997 */ /* */ /************************************************/ #ifndef ROCKHARD_H #define ROCKHARD_H /************************************************/ /* */ /* The result should be ROCKH_ERROR_OK, */ /* else there have been an error */ /* (see ROCKH_ERROR_.. constants) */ /* if not stated otherwise */ /* */ /************************************************/ #define ROCKH_ERROR_OK 0 /* MUST be 0 */ #define ROCKH_ERROR_TEST -1 #define ROCKH_ERROR_UNKNOWN -10 /*********************************************************************/ /* ROCK hard id type */ /*********************************************************************/ typedef struct { int cid; /* VME channel id */ int chain; /* VIC chain */ int crate; /* position in the VIC chain */ unsigned int vme_addr; /* VME address */ unsigned int vme_am; /* VME am */ unsigned int offs; /* ROCK offs */ void *map_ptr; /* VME map pointer */ unsigned int *DMAbuffer; /* DMA buffer */ } ROCKH_id_base; typedef ROCKH_id_base *ROCKH_id; /*********************************************************************/ /* readpage types */ /*********************************************************************/ typedef struct { unsigned char reset; unsigned char fifo; unsigned char watchdog; unsigned char csr0; unsigned char csr1; unsigned char csr2; unsigned char elapsed; unsigned char trigger; } ROCKH_INTERNAL_regs; typedef struct { unsigned short tque; unsigned short tnow; unsigned short rockinfo; unsigned short golden; } ROCKH_INFO_regs; #include "rockhard_private.h" /*********************************************************************/ /* Query routines */ /*********************************************************************/ /* returns 0 if ROCK not present, 1 else */ int rockh_ispresent(int chain, /* IN, VIC chain */ int crate); /* IN, position in the VIC chain */ /*********************************************************************/ /* Initialization routines */ /*********************************************************************/ int rockh_open(int chain, /* IN, VIC chain */ int crate, /* IN, position in the VIC chain */ ROCKH_id *rock_id); /* OUT */ /* For test purpose only */ int rockh_open_raw(unsigned int vme_addr, /* IN */ int vme_size, /* IN */ int vme_am, /* IN */ int offs, /* IN, rock offset */ ROCKH_id *rock_id); /* OUT */ int rockh_close(ROCKH_id rock_id); /* IN */ /*********************************************************************/ /* read routines */ /* return the read value */ /*********************************************************************/ /* internal page */ #define rockh_read_reset(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_RESET_ofs) #define rockh_read_fifo(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_FIFO_ofs) #define rockh_read_watchdog(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_WATCHDOG_ofs) #define rockh_read_csr0(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_CSR0_ofs) #define rockh_read_csr1(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_CSR1_ofs) #define rockh_read_csr2(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_CSR2_ofs) #define rockh_read_elapsed(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_ELAPSED_ofs) #define rockh_read_trigger(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg08(rock_id,ROCKH_TRIGGER_ofs) /* info page */ #define rockh_read_tque(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg16(rock_id,ROCKH_TQUE_ofs) #define rockh_read_tnow(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg16(rock_id,ROCKH_TNOW_ofs) #define rockh_read_rockinfo(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg16(rock_id,ROCKH_ROCKINFO_ofs) #define rockh_read_golden(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg16(rock_id,ROCKH_GOLDEN_ofs) /* FIFO page */ #define rockh_read_efifo(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg32(rock_id,ROCKH_EFRD_ofs) #define rockh_read_dfifo(/*ROCKH_id*/ rock_id) /* IN */ \ rockh_read_reg32(rock_id,ROCKH_DFRD_ofs) /*********************************************************************/ /* write routines */ /*********************************************************************/ /* internal page */ #define rockh_write_reset(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned char */ reset, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg08(rock_id,ROCKH_RESET_ofs,reset,test*0xff) #define rockh_write_watchdog(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned char */ wdog, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg08(rock_id,ROCKH_WATCHDOG_ofs,wdog,test*0xff) #define rockh_write_csr0(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned char */ csr0, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg08(rock_id,ROCKH_CSR0_ofs,csr0,test*0x3f) #define rockh_write_csr2(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned char */ csr2, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg08(rock_id,ROCKH_CSR2_ofs,csr2,test*0x0f) #define rockh_write_trigger(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned char */ trigger, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg08(rock_id,ROCKH_TRIGGER_ofs,trigger,0) /* info page */ #define rockh_write_golden(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned short */ golden, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg16(rock_id,ROCKH_GOLDEN_ofs,golden,test*0xffff) /* FIFO page */ #define rockh_write_edfifo(/*ROCKH_id */ rock_id, /* IN */ \ /*unsigned int */ edfifo, /* IN */ \ /*char */ test) /* IN, bool */ \ rockh_write_reg32(rock_id,ROCKH_FWRT_ofs,edfifo,0) /*********************************************************************/ /* readpage routines */ /*********************************************************************/ #define rockh_readpage_internal(/*ROCKH_id */ rock_id, /* IN */ \ /*ROCKH_INTERNAL_regs */ internal) /* OUT */ \ rockh_readpage_i_internal(rock_id,&(internal)) #define rockh_readpage_info(/*ROCKH_id */ rock_id, /* IN */ \ /*ROCKH_INFO_regs */ info) /* OUT */ \ rockh_readpage_i_info(rock_id,&(info)) /*********************************************************************/ /* readfifo routines */ /* raw fifo values are returned */ /*********************************************************************/ #define rockh_readfifo_efifo(/*ROCKH_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,1,buffer,&(count)) #define rockh_readfifo_dfifo(/*ROCKH_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,1,buffer,&(count)) #endif /* ROCKHARD_H */