/**************************************************************/ /* */ /* File : tshard.h */ /* Description : Trigger Supervisor hardware base access */ /* */ /* Author: Enrico Graziani */ /* */ /* Created : 29.05.1997 */ /* */ /**************************************************************/ #ifndef TSHARD_H #define TSHARD_H #define D32 /* D32 read only on TS */ /* #define BS */ /* byte swapping BIG ENDIAN -> LITTLE ENDIAN, temporary version */ #define TSH_START_RUN 0x7812 #define TSH_STOP_RUN 0x0 /************************************************/ /* */ /* The result should be TSH_ERROR_OK, */ /* else there have been an error */ /* (see TSH_ERROR_.. constants) */ /* if not stated otherwise */ /* */ /************************************************/ #define TSH_ERROR_OK 0 /* MUST be 0 */ #define TSH_ERROR_TEST -1 #define TSH_ERROR_UNKNOWN -10 /*********************************************************************/ /* REGISTER AND COUNTER OFFSETS */ /* DO NOT USE DIRECTLY IF NOT REALLY NECESSARY */ /*********************************************************************/ /* INTERNAL REGISTERS (16 bit) */ #define TSH_INTID_ofs 0x00 /* R/W */ #define TSH_INTLEVEL_ofs 0x04 /* R/W */ #define TSH_STATUS_ofs 0x08 /* R/W */ #define TSH_INTMASK_ofs 0x0C /* R/W */ #define TSH_LATCHMASK_ofs 0x10 /* R/W */ #define TSH_ERRORMASK_ofs 0x14 /* R/W */ #define TSH_WENABLE_ofs 0x18 /* R/W */ #define TSH_DELAYT2_ofs 0x20 /* R/W */ #define TSH_DELAYT1_ofs 0x24 /* R/W */ #define TSH_GOLDNUMB_ofs 0x28 /* R/W */ #define TSH_SYNCMASK_ofs 0x2C /* R/W */ #define TSH_TMODE_ofs 0x34 /* R/W */ #define TSH_RUN_ofs 0x38 /* R/W */ #define TSH_TMOUTBUSY_ofs 0x48 /* R/W */ #define TSH_TMOUTSYNCFSTART_ofs 0x4C /* R/W */ #define TSH_TMOUTSYNCFEND_ofs 0x50 /* R/W */ /* COUNTERS OFFSETS 16 bit */ #define TSH_T2BUSY_ofs 0x6C /* R/W */ #define TSH_TMBUSY_ofs 0x70 /* R/W */ /* COUNTERS OFFSETS 24 bit */ #define TSH_DEADTIME_ofs 0x40 /* R/W */ #ifdef BS #define TSH_ACTIVETIME_ofs 0x44 /* R/W */ #else #define TSH_ACTIVETIME_ofs 0x30 /* R/W */ #define TSH_RESETTIME_ofs 0x44 /* R/W */ #define TSH_READTIME_ofs 0x40 /* R/W */ #endif #define TSH_T1RATE_ofs 0x64 /* R */ #define TSH_T2RATE_ofs 0x68 /* R */ /* COUNTERS OFFSETS 32 bit */ #define TSH_TRGCOUNTER_ofs 0x3C /* R/W */ #define TSH_T1COUNT_ofs 0x60 /* R/W */ /*********************************************************************/ /* TS hard id type */ /*********************************************************************/ typedef struct { int cid; /* VME channel id */ int type; /* TS of A or B type */ int slot; /* VME slot */ unsigned int vme_addr; /* VME address */ unsigned int vme_am; /* VME am */ unsigned int offs; /* TS offs */ void *map_ptr; /* VME map pointer */ } TSH_id_base; typedef TSH_id_base *TSH_id; /*********************************************************************/ /* readpage types */ /*********************************************************************/ typedef struct { unsigned short status; unsigned short run; unsigned int trgcnt; unsigned int deadcnt; unsigned int actcnt; unsigned int t1cnt; unsigned int t1rate; unsigned int t2rate; unsigned short t2busy; unsigned short tmbusy; } TSH_STATUS_adds; typedef struct { unsigned short intid; unsigned char intlevel; unsigned short intmask; unsigned short latchmask; unsigned short errormask; unsigned short delayt1; unsigned short goldnumb; unsigned short syncmask; unsigned short tmoutbusy; unsigned short tmoutsyncfstart; unsigned short tmoutsyncfend; } TSH_SET_adds; /*********************************************************************/ /* Query routines */ /*********************************************************************/ /* returns 0 if TS not present, 1 else */ int tsh_ispresent(int type); /* IN, TS type (A or B) */ int tsh_ispresent_slot(int slot, int type); /* IN slot IN, TS type (A or B) */ /*********************************************************************/ /* Initialization routines */ /*********************************************************************/ int tsh_open(int type, /* IN, TS type (A or B) */ TSH_id *ts_id); /* OUT */ int tsh_close(int type, /* IN, TS type (A or B) */ TSH_id ts_id); /* IN */ /*********************************************************************/ /* read routines */ /* return the read value */ /*********************************************************************/ unsigned short tsh_reg16_bs (unsigned short reg); /* IN */ unsigned int tsh_reg24_bs (unsigned int reg); /* IN */ unsigned int tsh_reg32_bs (unsigned int reg); /* IN */ unsigned int tsh_reg32_lebs (unsigned int reg); /* IN */ /**********************************/ /* Generic */ /* Do not use directly */ /**********************************/ unsigned short tsh_read_reg16(TSH_id ts_id, /* IN */ unsigned int offset); /* IN */ unsigned int tsh_read_reg24(TSH_id ts_id, /* IN */ unsigned int offset); /* IN */ unsigned int tsh_read_reg32(TSH_id ts_id, /* IN */ unsigned int offset); /* IN */ /**********************************/ /* Use this */ /**********************************/ /* internal registers 16 bits */ #ifdef BS #define tsh_read_intid(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16_lebs(ts_id,TSH_INTID_ofs) #define tsh_read_intlevel(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16_lebs(ts_id,TSH_INTLEVEL_ofs) #define tsh_read_status(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16_lebs(ts_id,TSH_STATUS_ofs) #define tsh_read_intmask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16_lebs(ts_id,TSH_INTMASK_ofs) #define tsh_read_latchmask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16_lebs(ts_id,TSH_LATCHMASK_ofs) #define tsh_read_errormask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16_lebs(ts_id,TSH_ERRORMASK_ofs) #else #define tsh_read_intid(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_INTID_ofs) #define tsh_read_intlevel(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_INTLEVEL_ofs) #define tsh_read_status(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_STATUS_ofs) #define tsh_read_intmask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_INTMASK_ofs) #define tsh_read_latchmask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_LATCHMASK_ofs) #define tsh_read_errormask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_ERRORMASK_ofs) #define tsh_read_wenable(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_WENABLE_ofs) #endif #ifndef BS #define tsh_read_delayt2(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_DELAYT2_ofs) #endif #define tsh_read_delayt1(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_DELAYT1_ofs) #define tsh_read_goldnumb(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_GOLDNUMB_ofs) #ifdef BS #define tsh_read_syncmask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_SYNCMASK_ofs) #else #define tsh_read_syncmask(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg32(ts_id,TSH_SYNCMASK_ofs) #endif #define tsh_read_tmode(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_TMODE_ofs) #define tsh_read_run(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_RUN_ofs) #define tsh_read_tmoutbusy(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_TMOUTBUSY_ofs) #define tsh_read_tmoutsyncfstart(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_TMOUTSYNCFSTART_ofs) #define tsh_read_tmoutsyncfend(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_TMOUTSYNCFEND_ofs) /* counters 16 bits */ #define tsh_read_t2busy(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_T2BUSY_ofs) #define tsh_read_tmbusy(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_TMBUSY_ofs) /* counters 24 bits */ #ifdef BS #define tsh_read_deadtime(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg24(ts_id,TSH_DEADTIME_ofs) #define tsh_read_activetime(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg24(ts_id,TSH_ACTIVETIME_ofs) #else #define tsh_read_deadtime(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg32(ts_id,TSH_DEADTIME_ofs) #define tsh_read_activetime(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg32(ts_id,TSH_ACTIVETIME_ofs) #endif #ifdef BS #define tsh_read_t1rate(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg24(ts_id,TSH_T1RATE_ofs) #define tsh_read_t2rate(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg24(ts_id,TSH_T2RATE_ofs) #else #define tsh_read_t1rate(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_T1RATE_ofs) #define tsh_read_t2rate(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg16(ts_id,TSH_T2RATE_ofs) #endif /* counters 32 bits */ #define tsh_read_trgcounter(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg32(ts_id,TSH_TRGCOUNTER_ofs) #define tsh_read_t1count(/*TSH_id*/ ts_id) /* IN */ \ tsh_read_reg32(ts_id,TSH_T1COUNT_ofs) /*********************************************************************/ /* write routines */ /*********************************************************************/ unsigned short tsh_write_reg16(TSH_id ts_id, /* IN */ unsigned int offset, /* IN */ unsigned short reg, /* IN */ unsigned short testmask); /* IN, test if>0 */ unsigned int tsh_write_reg24(TSH_id ts_id, /* IN */ unsigned int offset, /* IN */ unsigned int reg, /* IN */ unsigned int testmask); /* IN, test if>0 */ unsigned int tsh_write_reg32(TSH_id ts_id, /* IN */ unsigned int offset, /* IN */ unsigned int reg, /* IN */ unsigned int testmask); /* IN, test if>0 */ /* internal page */ #ifdef BS #define tsh_write_intid(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ intid, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16_lebs(ts_id,TSH_INTID_ofs,intid,test*0xffff) #define tsh_write_intlevel(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ intlevel, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16_lebs(ts_id,TSH_INTLEVEL_ofs,intlevel,test*0xffff) #define tsh_write_status(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ status, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16_lebs(ts_id,TSH_STATUS_ofs,status,test*0xffff) #define tsh_write_intmask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ intmask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16_lebs(ts_id,TSH_INTMASK_ofs,intmask,test*0xffff) #define tsh_write_latchmask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ latchmask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16_lebs(ts_id,TSH_LATCHMASK_ofs,latchmask,test*0xffff) #define tsh_write_errormask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ errormask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16_lebs(ts_id,TSH_ERRORMASK_ofs,errormask,test*0xffff) #else #define tsh_write_intid(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ intid, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_INTID_ofs,intid,test*0xffff) #define tsh_write_intlevel(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ intlevel, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_INTLEVEL_ofs,intlevel,test*0xffff) #define tsh_write_status(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ status, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_STATUS_ofs,status,test*0xffff) #define tsh_write_intmask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ intmask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_INTMASK_ofs,intmask,test*0xffff) #define tsh_write_latchmask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ latchmask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_LATCHMASK_ofs,latchmask,test*0xffff) #define tsh_write_errormask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ errormask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_ERRORMASK_ofs,errormask,test*0xffff) #define tsh_write_wenable(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ wenable, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_WENABLE_ofs,wenable,test*0xffff) #endif #ifndef BS #define tsh_write_delayt2(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ delayt2, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_DELAYT2_ofs,delayt2,test*0xffff) #endif #define tsh_write_delayt1(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ delayt1, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_DELAYT1_ofs,delayt1,test*0xffff) #define tsh_write_goldnumb(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ goldnumb, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_GOLDNUMB_ofs,goldnumb,test*0xffff) #ifdef BS #define tsh_write_syncmask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ syncmask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_SYNCMASK_ofs,syncmask,test*0xffff) #else #define tsh_write_syncmask(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ syncmask, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_SYNCMASK_ofs,syncmask,test*0xffffffff) #endif #define tsh_write_tmode(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ tmode, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_TMODE_ofs,tmode,test*0xffff) #define tsh_write_run(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ run, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_RUN_ofs,run,test*0xffff) #define tsh_write_tmoutbusy(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ tmoutbusy, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_TMOUTBUSY_ofs,tmoutbusy,test*0xffff) #define tsh_write_tmoutsyncfstart(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ tmoutsyncfstart, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_TMOUTSYNCFSTART_ofs,tmoutsyncfstart,test*0xffff) #define tsh_write_tmoutsyncfend(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ tmoutsyncfend, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_TMOUTSYNCFEND_ofs,tmoutsyncfend,test*0xffff) /* counters 16 bits */ #define tsh_write_t2busy(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ t2busy, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_T2BUSY_ofs,t2busy,test*0xffff) #define tsh_write_tmbusy(/*TSH_id */ ts_id, /* IN */ \ /*unsigned short */ tmbusy, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg16(ts_id,TSH_TMBUSY_ofs,tmbusy,test*0xffff) /* counters 24 bits */ #ifdef BS #define tsh_write_deadtime(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ deadtime, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg24(ts_id,TSH_DEADTIME_ofs,deadtime,test*0xffff) #define tsh_write_activetime(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ activetime, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg24(ts_id,TSH_ACTIVETIME_ofs,activetime,test*0xffff) #else #define tsh_write_deadtime(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ deadtime, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_DEADTIME_ofs,deadtime,test*0xffff) #define tsh_write_activetime(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ activetime, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_ACTIVETIME_ofs,activetime,test*0xffff) #define tsh_write_readtime(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ activetime, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_READTIME_ofs,activetime,test*0xffff) #define tsh_write_resettime(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ activetime, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_RESETTIME_ofs,activetime,test*0xffff) #endif /* counters 32 bits */ #define tsh_write_trgcounter(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ trgcounter, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_TRGCOUNTER_ofs,trgcounter,test*0xffff) #define tsh_write_t1count(/*TSH_id */ ts_id, /* IN */ \ /*unsigned int */ t1count, /* IN */ \ /*char */ test) /* IN, bool */ \ tsh_write_reg32(ts_id,TSH_T1COUNT_ofs,t1count,test*0xffff) /*********************************************************************/ /* readpage routines */ /* internal. Do not use this */ /*********************************************************************/ int tsh_readpage_i_status(TSH_id ts_id, /* IN */ TSH_STATUS_adds *status); /* OUT */ int tsh_readpage_i_set(TSH_id ts_id, /* IN */ TSH_SET_adds *set); /* OUT */ /****************/ /* Use this */ /****************/ #define tsh_readpage_status(/*TSH_id */ ts_id, /* IN */ \ /*TSH_STATUS_adds */ status) /* OUT */ \ tsh_readpage_i_status(ts_id,&(status)) #define tsh_readpage_set(/*TSH_id */ ts_id, /* IN */ \ /*TSH_SET_adds */ set) /* OUT */ \ tsh_readpage_i_set(ts_id,&(set)) /*********************************************************************/ /* writepage routines */ /* internal. Do not use this */ /*********************************************************************/ int tsh_writepage_i_status(TSH_id ts_id, /* IN */ TSH_STATUS_adds *status); /* OUT */ int tsh_writepage_i_set(TSH_id ts_id, /* IN */ TSH_SET_adds *set); /* OUT */ /****************/ /* Use this */ /****************/ #define tsh_writepage_status(/*TSH_id */ ts_id, /* IN */ \ /*TSH_STATUS_adds */ status) /* OUT */ \ tsh_writepage_i_status(ts_id,&(status)) #define tsh_writepage_set(/*TSH_id */ ts_id, /* IN */ \ /*TSH_SET_adds */ set) /* OUT */ \ tsh_writepage_i_set(ts_id,&(set)) #endif /* TSHARD_H */