From: hadaq Date: Tue, 8 Oct 2002 16:04:20 +0000 (+0000) Subject: Status in nov02 before consolidation for oct02 -- mm X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=6fc727f6e1eb9e12e920f1fbac07ab009511fe5f;p=daqdata.git Status in nov02 before consolidation for oct02 -- mm --- diff --git a/hadaq/hwrace.c b/hadaq/hwrace.c index 33d5815..6b435c7 100644 --- a/hadaq/hwrace.c +++ b/hadaq/hwrace.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.17 2002-04-19 19:12:11 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.18 2002-10-08 16:04:20 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L @@ -22,22 +22,6 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada #include "rc.h" #include "hwrace.h" -#define RCPAGESIZE 256 - -static int bankRequested(HwRace *my) -{ - return my->bankRequested; -} - -static int bankConfirmed(HwRace *my) -{ - return Rc_bankConfirmed(my->rc); -} - -static int endOfData(HwRace *my) -{ - return Rc_getPages(my->rc) * RCPAGESIZE; -} int conHwRace(HwRace *my, const char *name, const Param *param) { @@ -62,8 +46,9 @@ int conHwRace(HwRace *my, const char *name, const Param *param) syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno)); return -1; } + my->currAddr = 0x7fffffff; + my->endOfData = 0; - my->bankRequested = Rc_bankRequested(my->rc); return 0; } @@ -77,61 +62,38 @@ void HwRace_requestBuffer(HwRace *my) { my->currAddr = 0; - my->bankRequested = my->bankRequested == 1 ? 0 : 1; Rc_setSwrq(my->rc); Rc_clrSwrq(my->rc); } -int HwRace_isBusy(HwRace *my) -{ - int br, bc; - - br = bankRequested(my); - bc = bankConfirmed(my); - - return br != bc; -} - -int HwRace_isEmpty(HwRace *my) -{ - return my->currAddr >= endOfData(my); -} -#define MAXRACELENGTH 99997 /* in bytes */ +#define RACE_NODATASIZE 0x10 int HwRace_readSubEvt(HwRace *my, void *subEvt) { - uint32_t *data = (uint32_t *) subEvt; + uint32_t * data = (uint32_t *) subEvt; int lastAddr; int currAddr; int size; currAddr = my->currAddr; size = Rc_readMem(my->rc, currAddr); - lastAddr = currAddr + size; -#if 1 - if (size > MAXRACELENGTH ) { - *data++ = 16; - currAddr+=4; - *data++ = Rc_readMem(my->rc, currAddr); - currAddr+=4; - *data++ = Rc_readMem(my->rc, currAddr) | 0x80000000UL; - currAddr+=4; - *data++ = Rc_readMem(my->rc, currAddr) |(size<<16); - } else { - *data++ = size; - /* copy one sub evt from RC to memory */ - while ((currAddr+=4) < lastAddr) { - *data++ = Rc_readMem(my->rc, currAddr); - } - } -#endif - /* align currAddr to next page */ + lastAddr = my->currAddr + size; + + /* align my->currAddr to next page */ if ((lastAddr & 0xff) != 0) { - my->currAddr = (lastAddr / RCPAGESIZE + 1) * RCPAGESIZE; + my->currAddr = ((lastAddr >> RCPAGEBITSHIFT) + 1)<< RCPAGEBITSHIFT; } else { my->currAddr = lastAddr; } + if (size <= RACE_NODATASIZE) return 0; + + /* copy one sub evt from RC to memory */ + *data++ = size; + while ((currAddr+=4) < lastAddr) { + *data++ = Rc_readMem(my->rc, currAddr); + } + #ifndef NDEBUG syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt)); #endif - return 0; + return size; } diff --git a/hadaq/hwrich.c b/hadaq/hwrich.c index bd14014..2b62fa9 100644 --- a/hadaq/hwrich.c +++ b/hadaq/hwrich.c @@ -1,5 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.22 2002-04-19 19:11:01 hadaq Exp $"; - +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.23 2002-10-08 16:04:20 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -22,7 +21,6 @@ struct HardwareS { size_t maxSubEvtSize; HwRace *race[NRACES]; LInt *lInt[NRACES]; - LVme *dtu; }; #include "hardware.h" @@ -62,12 +60,6 @@ Hardware *newHardware(void) } my->lInt[i] = malloc(sizeof(LInt)); conLInt(my->lInt[i], 100 + i); - - } - my->dtu = malloc(sizeof(LVme)); - if(0 > conLVme(my->dtu, 0x44100000, 0x10000, 0x09, 0x3c, 1)) { - syslog(LOG_DEBUG,"Rich DTU not found"); - return -1; } desParam(param); @@ -84,9 +76,6 @@ void deleteHardware(Hardware *my) desHwRace(my->race[i]); free(my->race[i]); } - desLVme(my->dtu); - free(my->dtu); - free(my); } @@ -94,7 +83,6 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt) { int i; - LVme_setL(my->dtu,0x00 ,0x22); /* dtu busy on */ for (i = 0; i < NRACES; i++) { if (HwRace_isEmpty(my->race[i])) { HwRace_requestBuffer(my->race[i]); @@ -103,10 +91,11 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt) #endif } } - LVme_setL(my->dtu,0x00 ,0x02); /* dtu busy off */ + for (i = 0; i < NRACES; i++) { - if(HwRace_BufIsRequested(my->race[i])) { + if(HwRace_isBufRequested(my->race[i])) { LInt_wait(my->lInt[i]); + HwRace_getEndOfData(my->race[i]); #ifndef NDEBUG syslog(LOG_DEBUG, "%d irq received", i); #endif @@ -120,32 +109,36 @@ void Hardware_readout(Hardware *my, void *partEvt) void *subEvt = SubEvt_data(partEvt); static uint32_t trigNr = 0; uint32_t trigTag; + int firstRace; + int size; /* init partial event, necessary for SubEvt_next() */ SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); SubEvt_setId(partEvt, 0); /* read all races, check for common trigger tag */ - LVme_setL(my->dtu,0x00 ,0x22); /* dtu busy on */ + firstRace = -1; for (i = 0; i < NRACES; i++) { - HwRace_readSubEvt(my->race[i], subEvt); - if (i == 0) { + if((size=HwRace_readSubEvt(my->race[i], subEvt)) > 0) { + if (firstRace < 0) { trigTag = SubEvt_trigNr(subEvt) & 0xff; - } else { + firstRace = i; + } else { if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) { SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000UL); SubEvt_setId(partEvt, SubEvt_id(partEvt) | 0x80000000UL); - syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x", - my->race[i]->name,trigTag, SubEvt_trigNr(subEvt)); + syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x", + my->race[i]->name,trigTag,firstRace,SubEvt_trigNr(subEvt)); } + } + /* this does 64 bit alignment, should be replaced by a function */ + (char *)subEvt += (size+4) & 0xffffff8; } - subEvt = SubEvt_next(partEvt, subEvt); } - LVme_setL(my->dtu,0x00 ,0x02); /* dtu busy off */ SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag); SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt); - trigNr++; + trigNr++; assert(SubEvt_size(partEvt) <= my->maxSubEvtSize); #ifndef NDEBUG