From 363bf2a47ca87fc22f37a2e461dabba5a33417a5 Mon Sep 17 00:00:00 2001 From: John Winans Date: Wed, 18 Jan 1995 16:38:03 +0000 Subject: [PATCH] added the '0x' in front of the hex input and outputs in the report function. --- src/dev/devAvme9440.c | 2 +- src/dev/devSysmon.c | 1003 +++++++++++++++++++---------------------- 2 files changed, 476 insertions(+), 529 deletions(-) diff --git a/src/dev/devAvme9440.c b/src/dev/devAvme9440.c index 53679a2f9..e8800e28f 100644 --- a/src/dev/devAvme9440.c +++ b/src/dev/devAvme9440.c @@ -281,7 +281,7 @@ STATIC int devAvme9440Report() { if (cards[LinkNum].card != NULL) { - printf(" Link %02.2d at 0x%4.4X, IRQ 0x%2.2X, input %04.4X, output %04.4X\n", + printf(" Link %02.2d at 0x%4.4X, IRQ 0x%2.2X, input 0x%04.4X, output 0x%04.4X\n", LinkNum, CardBase, IntVec, diff --git a/src/dev/devSysmon.c b/src/dev/devSysmon.c index bc6708bc8..b2bf8426a 100644 --- a/src/dev/devSysmon.c +++ b/src/dev/devSysmon.c @@ -1,6 +1,5 @@ -/* share/src/dev @(#)devSysmonInt.c 1.8 12/13/93 */ - /***************************************************************** + * $Id$ * * Author : Michael Hoffberg * Date: 12-93 @@ -8,18 +7,18 @@ ***************************************************************** * COPYRIGHT NOTIFICATION ***************************************************************** - + * * THE FOLLOWING IS A NOTICE OF COPYRIGHT, AVAILABILITY OF THE CODE, * AND DISCLAIMER WHICH MUST BE INCLUDED IN THE PROLOGUE OF THE CODE * AND IN ALL SOURCE LISTINGS OF THE CODE. - + * * (C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO - + * * Argonne National Laboratory (ANL), with facilities in the States of * Illinois and Idaho, is owned by the United States Government, and * operated by the University of Chicago under provision of a contract * with the Department of Energy. - + * * Portions of this material resulted from work developed under a U.S. * Government contract and are subject to the following license: For * a period of five years from March 30, 1993, the Government is @@ -34,11 +33,11 @@ * software to reproduce, prepare derivative works, distribute copies * to the public, perform publicly and display publicly, and to permit * others to do so. - + * ***************************************************************** * DISCLAIMER ***************************************************************** - + * * NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR * THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS, * MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL @@ -46,12 +45,12 @@ * USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS * DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY * OWNED RIGHTS. - + * ***************************************************************** * LICENSING INQUIRIES MAY BE DIRECTED TO THE INDUSTRIAL TECHNOLOGY * DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000). ***************************************************************** - + * * Modification Log: * ----------------- * mgh 1/31/94 Started to add interrupt @@ -59,6 +58,9 @@ * ... * * $Log$ + * Revision 1.8 1995/01/09 20:52:02 winans + * Added analog input support for temperature + * * Revision 1.7 1995/01/09 20:28:42 winans * Added AI support for temperature input * @@ -74,9 +76,7 @@ * Revision 1.3 1994/11/17 21:11:58 winans * Major restructuring of init code. * - * - */ - + ****************************************************************************/ #include #include @@ -84,7 +84,7 @@ #include #include #include -#include +#include #include @@ -105,9 +105,8 @@ #include #include - #define NUM_LINKS 1 /* max number of allowed sysmon cards */ -#define STATIC +#define STATIC static int SysmonConfig(); STATIC long SysmonInit(); @@ -133,7 +132,7 @@ int devSysmonDebug = 0; typedef struct ParmTableStruct { - char *parm_name; + char *parm_name; } ParmTableStruct; #define SYSMON_PARM_STATUS 0 @@ -205,20 +204,20 @@ static ParmTableStruct ParmTable[]= typedef struct SysmonStruct { char Pad[36]; /*** nF0 - nF17 36 bytes ***/ - unsigned short SysmonStatusLink; /*** nF18 ***/ + unsigned short SysmonStatusLink; /*** nF18 ***/ unsigned short SysmonDio; /*** nF19 ***/ - unsigned short SysmonIntMask; /*** nF20 ***/ - unsigned short SysmonTemperature; /*** nF21 ***/ + unsigned short SysmonIntMask; /*** nF20 ***/ + unsigned short SysmonTemperature; /*** nF21 ***/ unsigned short SysmonWatchdog; /*** nF22 ***/ - unsigned short SysmonVXIVector; /*** nF23 ***/ - unsigned short SysmonIntVector; /*** nF24 ***/ - unsigned short SysmonIRQ1; /*** nF25 ***/ - unsigned short SysmonIRQ2; /*** nF26 ***/ - unsigned short SysmonIRQ3; /*** nF27 ***/ - unsigned short SysmonIRQ4; /*** nF28 ***/ - unsigned short SysmonIRQ5; /*** nF29 ***/ - unsigned short SysmonIRQ6; /*** nF30 ***/ - unsigned short SysmonIRQ7; /*** nF31 ***/ + unsigned short SysmonVXIVector; /*** nF23 ***/ + unsigned short SysmonIntVector; /*** nF24 ***/ + unsigned short SysmonIRQ1; /*** nF25 ***/ + unsigned short SysmonIRQ2; /*** nF26 ***/ + unsigned short SysmonIRQ3; /*** nF27 ***/ + unsigned short SysmonIRQ4; /*** nF28 ***/ + unsigned short SysmonIRQ5; /*** nF29 ***/ + unsigned short SysmonIRQ6; /*** nF30 ***/ + unsigned short SysmonIRQ7; /*** nF31 ***/ }SysmonStruct; /***************************************************************************** @@ -238,16 +237,16 @@ typedef struct PvtStruct * Per-card global variables. * *****************************************************************************/ -struct ioCard { /* structure maintained for each card */ - int CardValid; /* card exists */ - unsigned long SysmonBaseA16; /* A16 card address */ - volatile SysmonStruct *SysmonBase; /* Physical card address */ - FAST_LOCK lock; /* semaphore */ - IOSCANPVT ioscanpvt; /* Token for I/O intr scanned records */ - int VMEintVector; /* IRQ vector used by sysmon */ - int VMEintLevel; /* IRQ level */ - int VXIintVector; /* Generated when C008 is written to (VXI silliness) */ - int IrqInfo[2]; +struct ioCard { /* structure maintained for each card */ + int CardValid; /* card exists */ + unsigned long SysmonBaseA16; /* A16 card address */ + volatile SysmonStruct *SysmonBase; /* Physical card address */ + FAST_LOCK lock; /* semaphore */ + IOSCANPVT ioscanpvt; /* Token for I/O intr scanned records */ + int VMEintVector; /* IRQ vector used by sysmon */ + int VMEintLevel; /* IRQ level */ + int VXIintVector; /* Generated when C008 is written (VXI silliness) */ + int IrqInfo[2]; }; #define INITLEDS 0x01 @@ -256,21 +255,21 @@ static struct ioCard cards[NUM_LINKS]; /* card information structure */ struct dset_sysmon { long number; - DEVSUPFUN report; /* used by dbior */ - DEVSUPFUN init; /* called 1 time before & after all records */ + DEVSUPFUN report; /* used by dbior */ + DEVSUPFUN init; /* called 1 time before & after all records */ DEVSUPFUN init_record; /* called 1 time for each record */ DEVSUPFUN get_ioint_info; /* used for COS processing */ - DEVSUPFUN read_write; /* output command goes here */ + DEVSUPFUN read_write; /* output command goes here */ }; typedef struct dset_sysmon DSET_SYSMON; struct{ long number; - DEVSUPFUN report; /* used by dbior */ - DEVSUPFUN init; /* called 1 time before & after all records */ + DEVSUPFUN report; /* used by dbior */ + DEVSUPFUN init; /* called 1 time before & after all records */ DEVSUPFUN init_record; /* called 1 time for each record */ DEVSUPFUN get_ioint_info; /* used for COS processing */ - DEVSUPFUN read_write; /* output command goes here */ + DEVSUPFUN read_write; /* output command goes here */ DEVSUPFUN dumb_lincov_thing; } devAiSysmon= @@ -295,64 +294,66 @@ DSET_SYSMON devBoSysmon={ /* Create the dset for devBiSysmon */ DSET_SYSMON devBiSysmon={ - 5, - SysmonReport, - SysmonInit, - SysmonInitBiRec, - SysmonGetIointInfoBi, - SysmonReadBi + 5, + SysmonReport, + SysmonInit, + SysmonInitBiRec, + SysmonGetIointInfoBi, + SysmonReadBi }; /* Create the dset for devMbboSysmon */ DSET_SYSMON devMbboSysmon={ - 5, - NULL, - SysmonInit, - SysmonInitMbboRec, - NULL, - SysmonWriteMbbo + 5, + NULL, + SysmonInit, + SysmonInitMbboRec, + NULL, + SysmonWriteMbbo }; /* Create the dset for devMbbiSysmon */ DSET_SYSMON devMbbiSysmon={ - 5, - NULL, - SysmonInit, - SysmonInitMbbiRec, - NULL, - SysmonReadMbbi + 5, + NULL, + SysmonInit, + SysmonInitMbbiRec, + NULL, + SysmonReadMbbi }; +/***************************************************************************** + * + *****************************************************************************/ STATIC long SysmonReport(void) { int j; for (j=0; j= NUM_LINKS)) { - printf("ERROR: Invalid card number specified %d\n", Card); - return(0); + printf("ERROR: Invalid card number specified %d\n", Card); + return(0); } cards[Card].CardValid = 0; @@ -365,35 +366,35 @@ int SysmonConfig( if ((VMEintVector < 64) || (VMEintVector > 255)) { - printf("devSysmon: ERROR VME IRQ vector out of range\n"); - return(0); + printf("devSysmon: ERROR VME IRQ vector out of range\n"); + return(0); } if (devSysmonDebug >= 5) - printf("devSysmon: SysmonInit VME int vector = 0x%2.2X\n", VMEintVector); + printf("devSysmon: SysmonInit VME int vector = 0x%2.2X\n", VMEintVector); if ((VMEintLevel < 0) || (VMEintLevel > 7)) { - printf("devSysmon: ERROR VME IRQ level out of range\n"); - return(0); + printf("devSysmon: ERROR VME IRQ level out of range\n"); + return(0); } if (devSysmonDebug >= 5) - printf("devSysmon: SysmonInit VME int level = %d\n", VMEintLevel); + printf("devSysmon: SysmonInit VME int level = %d\n", VMEintLevel); if ((VXIintVector < 64) || (VXIintVector > 255)) { - printf("devSysmon: ERROR VXI IRQ vector out of range\n"); - return(0); + printf("devSysmon: ERROR VXI IRQ vector out of range\n"); + return(0); } if (devSysmonDebug >= 5) - printf("devSysmon: SysmonInit VXI int vector = 0x%2.2X\n", VXIintVector); + printf("devSysmon: SysmonInit VXI int vector = 0x%2.2X\n", VXIintVector); if ((SysmonBaseA16 > 0xffff) || (SysmonBaseA16 & 0x003f)) { - printf("devSysmon: ERROR Invalid address specified 0x4.4X\n", SysmonBaseA16); - return(0); + printf("devSysmon: ERROR Invalid address specified 0x4.4X\n", SysmonBaseA16); + return(0); } if (devSysmonDebug >= 5) - printf("devSysmon: SysmonInit VME (VXI) base address = %p\n", SysmonBaseA16); + printf("devSysmon: SysmonInit VME (VXI) base address = %p\n", SysmonBaseA16); cards[Card].VMEintVector = VMEintVector; cards[Card].VMEintLevel = VMEintLevel; @@ -406,24 +407,21 @@ int SysmonConfig( cards[Card].CardValid = 1; return(0); } - -/************************************************** - **************************************************/ - +/************************************************************************** + * + **************************************************************************/ STATIC void SysmonIsr(int Card) { if (devSysmonDebug >= 10) - logMsg("In SysmonIsr\n"); + logMsg("In SysmonIsr\n"); scanIoRequest(cards[Card].ioscanpvt); cards[Card].SysmonBase->SysmonIntMask |= 0xff00; } - - /************************************************************************** -* -* Initialization of SYSMON Binary I/O Card -* -***************************************************************************/ + * + * Initialization of SYSMON Binary I/O Card + * + ***************************************************************************/ STATIC long SysmonInit(int flag) { int Card; @@ -432,38 +430,38 @@ STATIC long SysmonInit(int flag) if (init_flag != 0) - return(OK); + return(OK); init_flag = 1; /* We end up here 1 time before all records are initialized */ for (Card=0; Card < NUM_LINKS; Card++) { - if (cards[Card].CardValid != 0) - { - if (devSysmonDebug >= 5) + if (cards[Card].CardValid != 0) + { + if (devSysmonDebug >= 5) logMsg("devSysmon: init link %d\n", Card); - if (sysBusToLocalAdrs(VME_AM_SUP_SHORT_IO, (char *)cards[Card].SysmonBaseA16, (char **)&(cards[Card].SysmonBase)) == ERROR) - { - if (devSysmonDebug >= 5) - logMsg("devSysmon: can not find short address space\n"); - return(ERROR); /* BUG */ - } + if (sysBusToLocalAdrs(VME_AM_SUP_SHORT_IO, (char *)cards[Card].SysmonBaseA16, (char **)&(cards[Card].SysmonBase)) == ERROR) + { + if (devSysmonDebug >= 5) + logMsg("devSysmon: can not find short address space\n"); + return(ERROR); /* BUG */ + } - probeVal = INITLEDS; + probeVal = INITLEDS; - if (devSysmonDebug >= 5) + if (devSysmonDebug >= 5) logMsg("devSysmon: init SysmonWatchdog 0x%X\n", (char *)&cards[Card].SysmonBase->SysmonWatchdog); - if (vxMemProbe((char *)&cards[Card].SysmonBase->SysmonWatchdog, WRITE, sizeof(cards[Card].SysmonBase->SysmonWatchdog), (char *)&probeVal) != OK) - { + if (vxMemProbe((char *)&cards[Card].SysmonBase->SysmonWatchdog, WRITE, sizeof(cards[Card].SysmonBase->SysmonWatchdog), (char *)&probeVal) != OK) + { cards[Card].CardValid = 0; /* No card found */ if (devSysmonDebug >= 5) logMsg("devSysmon: init vxMemProbe FAILED\n"); - } - else - { + } + else + { cards[Card].SysmonBase->SysmonIntMask = 0; FASTLOCKINIT(&(cards[Card].lock)); @@ -498,81 +496,79 @@ STATIC long SysmonInit(int flag) if (devSysmonDebug >= 5) logMsg("devSysmon: init vxMemProbe OK\n"); - } - sysIntEnable(cards[Card].VMEintLevel); - } + } + sysIntEnable(cards[Card].VMEintLevel); + } } return(OK); } /*************************************************************************** - generic init record - *************************************************************************/ - + * + * generic init record + * + ***************************************************************************/ static long generic_init_record(struct dbCommon *pr, DBLINK *link) { - struct vmeio *pvmeio = (struct vmeio*)&(link->value); - int j; - PvtStruct *pvt; - - if (link->type != VME_IO) - { - recGblRecordError(S_dev_badBus,(void *)pr, - "devSysmon (init_record) Illegal Bus Type"); - return(S_dev_badBus); - } - - /* make sure that signal is valid */ - if ((pvmeio->signal > 7) || (pvmeio->signal < 0)) - { - pr->pact = 1; /* make sure we don't process this thing */ - - if (devSysmonDebug >= 10) - logMsg("devSysmon: Illegal SIGNAL field ->%s<- \n", pr->name); - - recGblRecordError(S_dev_badSignal,(void *)pr, - "devSysmon (init_record) Illegal SIGNAL field"); - return(S_dev_badSignal); - } - - /* makes sure that card is valid */ - if ((pvmeio->card > NUM_LINKS) || (pvmeio->card < 0) || (!cards[pvmeio->card].CardValid)) - { - pr->pact = 1; /* make sure we don't process this thing */ - - if (devSysmonDebug >= 10) + struct vmeio *pvmeio = (struct vmeio*)&(link->value); + int j; + PvtStruct *pvt; + + if (link->type != VME_IO) { - logMsg("devSysmon: Illegal CARD field ->%s, %d<- \n", pr->name, pvmeio->card); - if(!cards[pvmeio->card].CardValid) - logMsg("devSysmon: Illegal CARD field card NOT VALID \n\n"); + recGblRecordError(S_dev_badBus,(void *)pr, "devSysmon (init_record) Illegal Bus Type"); + return(S_dev_badBus); } - recGblRecordError(S_dev_badCard,(void *)pr, - "devSysmon (init_record) Illegal CARD field"); - return(S_dev_badCard); - } + /* make sure that signal is valid */ + if ((pvmeio->signal > 7) || (pvmeio->signal < 0)) + { + pr->pact = 1; /* make sure we don't process this thing */ - /* verifies that parm field is valid */ - for (j = 0; (j < PARM_TABLE_SIZE) && strcmp(ParmTable[j].parm_name, pvmeio->parm); j++ ); + if (devSysmonDebug >= 10) + logMsg("devSysmon: Illegal SIGNAL field ->%s<- \n", pr->name); - if (j >= PARM_TABLE_SIZE) - { + recGblRecordError(S_dev_badSignal,(void *)pr, + "devSysmon (init_record) Illegal SIGNAL field"); + return(S_dev_badSignal); + } + + /* makes sure that card is valid */ + if ((pvmeio->card > NUM_LINKS) || (pvmeio->card < 0) || (!cards[pvmeio->card].CardValid)) + { + pr->pact = 1; /* make sure we don't process this thing */ + + if (devSysmonDebug >= 10) + { + logMsg("devSysmon: Illegal CARD field ->%s, %d<- \n", pr->name, pvmeio->card); + if(!cards[pvmeio->card].CardValid) + logMsg("devSysmon: Illegal CARD field card NOT VALID \n\n"); + } + + recGblRecordError(S_dev_badCard,(void *)pr, "devSysmon (init_record) Illegal CARD field"); + return(S_dev_badCard); + } + + /* verifies that parm field is valid */ + for (j = 0; (j < PARM_TABLE_SIZE) && strcmp(ParmTable[j].parm_name, pvmeio->parm); j++ ); + + if (j >= PARM_TABLE_SIZE) + { + if (devSysmonDebug >= 10) + logMsg("devSysmon: Illegal parm field ->%s<- \n", pr->name); + + recGblRecordError(S_dev_badSignal,(void *)pr, "devSysmon (init_record) Illegal parm field"); + return(S_dev_badSignal); + } if (devSysmonDebug >= 10) - logMsg("devSysmon: Illegal parm field ->%s<- \n", pr->name); + logMsg("devSysmon: %s of record type %d - %s\n", pr->name, j, ParmTable[j].parm_name); - recGblRecordError(S_dev_badSignal,(void *)pr, - "devSysmon (init_record) Illegal parm field"); - return(S_dev_badSignal); - } - if (devSysmonDebug >= 10) - logMsg("devSysmon: %s of record type %d - %s\n", pr->name, j, ParmTable[j].parm_name); + pvt = (PvtStruct *) malloc(sizeof(PvtStruct)); + pvt->index = j; - pvt = (PvtStruct *) malloc(sizeof(PvtStruct)); - pvt->index = j; - - pr->dpvt = pvt; - - return(0); + pr->dpvt = pvt; + + return(0); } /*************************************************************************** @@ -610,23 +606,23 @@ STATIC long SysmonInitAiRec(struct aiRecord *pRecord) ***************************************************************************/ STATIC long SysmonReadAi(struct aiRecord *pRecord) { - struct vmeio *pvmeio = (struct vmeio*)&(pRecord->inp.value); - unsigned short regVal; - PvtStruct *pvt = (PvtStruct *)pRecord->dpvt; + struct vmeio *pvmeio = (struct vmeio*)&(pRecord->inp.value); + unsigned short regVal; + PvtStruct *pvt = (PvtStruct *)pRecord->dpvt; - if (pvt == NULL) + if (pvt == NULL) return(0); - FASTLOCK(&cards[pvmeio->card].lock); + FASTLOCK(&cards[pvmeio->card].lock); - regVal = cards[pvmeio->card].SysmonBase->SysmonTemperature & 0xff; + regVal = cards[pvmeio->card].SysmonBase->SysmonTemperature & 0xff; - FASTUNLOCK(&cards[pvmeio->card].lock); + FASTUNLOCK(&cards[pvmeio->card].lock); if (devSysmonDebug) printf("Sysmon AI temperature raw value %d\n", regVal); - - switch(regVal) + + switch(regVal) { case 0xfe: pRecord->val = 20; break; case 0xfc: pRecord->val = 25; break; @@ -640,8 +636,8 @@ STATIC long SysmonReadAi(struct aiRecord *pRecord) devGpibLib_setPvSevr(pRecord,MAJOR_ALARM,INVALID_ALARM); return(0); } - pRecord->udf = FALSE; - return(2); /* Don't do a conversion */ + pRecord->udf = FALSE; + return(2); /* Don't do a conversion */ } /************************************************************************** @@ -651,58 +647,53 @@ STATIC long SysmonReadAi(struct aiRecord *pRecord) **************************************************************************/ STATIC long SysmonInitBoRec(struct boRecord *pbo) { - struct vmeio* pvmeio = (struct vmeio*)&(pbo->out.value); - int status = 0; - PvtStruct *pvt; + struct vmeio* pvmeio = (struct vmeio*)&(pbo->out.value); + int status = 0; + PvtStruct *pvt; - status = generic_init_record((struct dbCommon *)pbo, &pbo->out); + status = generic_init_record((struct dbCommon *)pbo, &pbo->out); - if(status) - { - pbo->dpvt = NULL; - return(status); - } - - pvt = (PvtStruct *)pbo->dpvt; - - switch (pvt->index) - { - case SYSMON_PARM_DO: - pvt->mask = 1<signal; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); - break; - - case SYSMON_PARM_LED: - if (pvmeio->signal > 3) + if(status) { - recGblRecordError(S_dev_badSignal,(void *)pbo, - "devSysmon (init_record) Illegal signal value (0-3 for LED)"); - return(S_dev_badSignal); + pbo->dpvt = NULL; + return(status); } - pvt->mask = 1<signal; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); - break; - case SYSMON_PARM_BOOTWATCHDOG: - pvt->mask = 1<<7; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); - break; + pvt = (PvtStruct *)pbo->dpvt; -#if 0 - case SYSMON_PARM_DI: - pvt->mask = 1<< (pvmeio->signal + 8); - break; -#endif - default: - pbo->dpvt = NULL; - if (devSysmonDebug >= 10) - logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); + switch (pvt->index) + { + case SYSMON_PARM_DO: + pvt->mask = 1<signal; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); + break; - recGblRecordError(S_dev_badSignal,(void *)pbo, - "devSysmon (init_record) Illegal parm field"); - return(S_dev_badSignal); - } - return (0); + case SYSMON_PARM_LED: + if (pvmeio->signal > 3) + { + recGblRecordError(S_dev_badSignal,(void *)pbo, + "devSysmon (init_record) Illegal signal value (0-3 for LED)"); + return(S_dev_badSignal); + } + pvt->mask = 1<signal; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); + break; + + case SYSMON_PARM_BOOTWATCHDOG: + pvt->mask = 1<<7; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); + break; + + default: + pbo->dpvt = NULL; + if (devSysmonDebug >= 10) + logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); + + recGblRecordError(S_dev_badSignal,(void *)pbo, + "devSysmon (init_record) Illegal parm field"); + return(S_dev_badSignal); + } + return (0); } /************************************************************************** @@ -712,133 +703,130 @@ STATIC long SysmonInitBoRec(struct boRecord *pbo) **************************************************************************/ STATIC long SysmonInitBiRec(struct biRecord *pbi) { - struct vmeio* pvmeio = (struct vmeio*)&(pbi->inp.value); - PvtStruct *pvt; - int status = 0; - int signal; + struct vmeio* pvmeio = (struct vmeio*)&(pbi->inp.value); + PvtStruct *pvt; + int status = 0; + int signal; - status = generic_init_record((struct dbCommon *)pbi, &pbi->inp); + status = generic_init_record((struct dbCommon *)pbi, &pbi->inp); - if(status) - { - pbi->dpvt = NULL; - return(status); - } - - pvt = (PvtStruct *)pbi->dpvt; - switch (pvt->index) - { - case SYSMON_PARM_DO: - pvt->mask = 1 << pvmeio->signal; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); - break; - - case SYSMON_PARM_DI: - pvt->mask = 1<< (pvmeio->signal + 8); - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); - break; - - case SYSMON_PARM_LED: - if (pvmeio->signal > 3) + if(status) { - recGblRecordError(S_dev_badSignal,(void *)pbi, - "devSysmon (init_record) Illegal signal value (0-3 for LED)"); - return(S_dev_badSignal); + pbi->dpvt = NULL; + return(status); } - pvt->mask = 1<signal; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); - break; - case SYSMON_PARM_BOOTWATCHDOG: - pvt->mask = 1<<7; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); - break; + pvt = (PvtStruct *)pbi->dpvt; + switch (pvt->index) + { + case SYSMON_PARM_DO: + pvt->mask = 1 << pvmeio->signal; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); + break; - case SYSMON_PARM_RXWATCHDOG: - pvt->mask = 1<<0; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_DI: + pvt->mask = 1<< (pvmeio->signal + 8); + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); + break; - case SYSMON_PARM_RXTEMP: - pvt->mask = 1<<1; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_LED: + if (pvmeio->signal > 3) + { + recGblRecordError(S_dev_badSignal,(void *)pbi, + "devSysmon (init_record) Illegal signal value (0-3 for LED)"); + return(S_dev_badSignal); + } + pvt->mask = 1<signal; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); + break; - case SYSMON_PARM_RXSTAT: - pvt->mask = 1<<2; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_BOOTWATCHDOG: + pvt->mask = 1<<7; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonWatchdog); + break; - case SYSMON_PARM_RXRUN: - pvt->mask = 1<<3; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_RXWATCHDOG: + pvt->mask = 1<<0; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_RX12V: - pvt->mask = 1<<4; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_RXTEMP: + pvt->mask = 1<<1; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_RX5V: - pvt->mask = 1<<5; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_RXSTAT: + pvt->mask = 1<<2; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_RXFAIL: - pvt->mask = 1<<6; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_RXRUN: + pvt->mask = 1<<3; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; + + case SYSMON_PARM_RX12V: + pvt->mask = 1<<4; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; + + case SYSMON_PARM_RX5V: + pvt->mask = 1<<5; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; + + case SYSMON_PARM_RXFAIL: + pvt->mask = 1<<6; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TXWATCHDOG: - pvt->mask = 1<<8; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TXWATCHDOG: + pvt->mask = 1<<8; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TXTEMP: - pvt->mask = 1<<9; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TXTEMP: + pvt->mask = 1<<9; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TXSTAT: - pvt->mask = 1<<10; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TXSTAT: + pvt->mask = 1<<10; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TXRUN: - pvt->mask = 1<<11; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TXRUN: + pvt->mask = 1<<11; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TX12V: - pvt->mask = 1<<12; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TX12V: + pvt->mask = 1<<12; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TX5V: - pvt->mask = 1<<13; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TX5V: + pvt->mask = 1<<13; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - case SYSMON_PARM_TXFAIL: - pvt->mask = 1<<14; - pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); - break; + case SYSMON_PARM_TXFAIL: + pvt->mask = 1<<14; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonStatusLink); + break; - default: - pbi->dpvt = NULL; - if (devSysmonDebug >= 10) - logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); + default: + pbi->dpvt = NULL; + if (devSysmonDebug >= 10) + logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); - recGblRecordError(S_dev_badSignal,(void *)pbi, - "devSysmon (init_record) Illegal parm field"); - return(S_dev_badSignal); - } + recGblRecordError(S_dev_badSignal,(void *)pbi, "devSysmon (init_record) Illegal parm field"); + return(S_dev_badSignal); + } - return (0); + return (0); } - -#if 1 /* This looks completely insane JRW */ /************************************************************************** * @@ -847,37 +835,38 @@ STATIC long SysmonInitBiRec(struct biRecord *pbi) **************************************************************************/ STATIC long SysmonInitMbboRec(struct mbboRecord *pmbbo) { - struct vmeio* pvmeio = (struct vmeio*)&(pmbbo->out.value); - PvtStruct *pvt; - int status = 0; - - status = generic_init_record((struct dbCommon *)pmbbo, &pmbbo->out); + struct vmeio* pvmeio = (struct vmeio*)&(pmbbo->out.value); + PvtStruct *pvt; + int status = 0; + + status = generic_init_record((struct dbCommon *)pmbbo, &pmbbo->out); - if(status) - { - pmbbo->dpvt = NULL; - return(status); - } - pvt = (PvtStruct *)pmbbo->dpvt; + if(status) + { + pmbbo->dpvt = NULL; + return(status); + } + pvt = (PvtStruct *)pmbbo->dpvt; - if (pvt->index != SYSMON_PARM_TEMP) - { - pmbbo->dpvt = NULL; - if (devSysmonDebug >= 10) - logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); + if (pvt->index != SYSMON_PARM_DO) + { + pmbbo->dpvt = NULL; + if (devSysmonDebug >= 10) + logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); - recGblRecordError(S_dev_badSignal,(void *)pmbbo, - "devSysmon (init_record) Illegal parm field"); - return(S_dev_badSignal); - } + recGblRecordError(S_dev_badSignal,(void *)pmbbo, + "devSysmon (init_record) Illegal parm field"); + return(S_dev_badSignal); + } - pmbbo->shft = pvmeio->signal; - pmbbo->mask <<= pmbbo->shft; + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); - return(0); + pmbbo->shft = pvmeio->signal; + pmbbo->mask <<= pmbbo->shft; + + return(0); } -#endif /************************************************************************** * @@ -887,80 +876,40 @@ STATIC long SysmonInitMbboRec(struct mbboRecord *pmbbo) STATIC long SysmonInitMbbiRec(struct mbbiRecord *pmbbi) { - struct vmeio* pvmeio = (struct vmeio*)&(pmbbi->inp.value); - PvtStruct *pvt; - int status = 0; - - status = generic_init_record((struct dbCommon *)pmbbi, &pmbbi->inp); + struct vmeio* pvmeio = (struct vmeio*)&(pmbbi->inp.value); + PvtStruct *pvt; + int status = 0; + + status = generic_init_record((struct dbCommon *)pmbbi, &pmbbi->inp); - if(status) - { - pmbbi->dpvt = NULL; - return(status); - } + if(status) + { + pmbbi->dpvt = NULL; + return(status); + } + pvt = (PvtStruct *)pmbbi->dpvt; - pvt = (PvtStruct *)pmbbi->dpvt; - if (pvt->index != SYSMON_PARM_TEMP) - { - pmbbi->dpvt = NULL; - if (devSysmonDebug >= 10) - logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); + if ((pvt->index != SYSMON_PARM_DI) && (pvt->index != SYSMON_PARM_DO)) + { + pmbbi->dpvt = NULL; + if (devSysmonDebug >= 10) + logMsg("devSysmon: Illegal parm field ->%s<- \n", pvmeio->parm); - recGblRecordError(S_dev_badSignal,(void *)pmbbi, - "devSysmon (init_record) Illegal parm field"); - return(S_dev_badSignal); - } + recGblRecordError(S_dev_badSignal,(void *)pmbbi, + "devSysmon (init_record) Illegal parm field"); + return(S_dev_badSignal); + } - /* load temperature values up */ + pvt->pReg = &(cards[pvmeio->card].SysmonBase->SysmonDio); - if (!strcmp(ParmTable[SYSMON_PARM_TEMP].parm_name, pvmeio->parm)) - { - if (devSysmonDebug >= 10) - logMsg("devSysmon: mbbi record is Temperature\n"); + pmbbi->shft = pvmeio->signal; - pmbbi->nobt = 0x08; /* make sure 8 bits wide */ + if (pvt->index == SYSMON_PARM_DI) + pmbbi->shft += 8; - /* load up proper mask values */ - pmbbi->zrvl = 0xff; - pmbbi->onvl = 0xfe; - pmbbi->twvl = 0xfc; - pmbbi->thvl = 0xf8; - pmbbi->frvl = 0xf0; - pmbbi->fvvl = 0xe0; - pmbbi->sxvl = 0xc0; - pmbbi->svvl = 0x80; - pmbbi->eivl = 0x10; - pmbbi->nivl = 0x00; - pmbbi->tevl = 0x55; - pmbbi->elvl = 0x55; - pmbbi->tvvl = 0x55; - pmbbi->ttvl = 0x55; - pmbbi->ftvl = 0x55; - pmbbi->ffvl = 0x55; + pmbbi->mask <<= pmbbi->shft; - /* load up proper string values, if you don't like it, change the strings somewhere else */ - strcpy(pmbbi->zrst,"Cal Error"); - strcpy(pmbbi->onst,"20"); - strcpy(pmbbi->twst,"25"); - strcpy(pmbbi->thst,"30"); - strcpy(pmbbi->frst,"35"); - strcpy(pmbbi->fvst,"40"); - strcpy(pmbbi->sxst,"45"); - strcpy(pmbbi->svst,"50"); - strcpy(pmbbi->eist,"Danger 55"); - strcpy(pmbbi->nist,"Danger!"); - strcpy(pmbbi->test,"Danger!!"); - strcpy(pmbbi->elst,"Danger!!!"); - strcpy(pmbbi->tvst,"Danger!!!!"); - strcpy(pmbbi->ttst,"Danger!!!!!"); - strcpy(pmbbi->ftst,"Danger!!!!!!"); - strcpy(pmbbi->ffst,"AAAARRRGHH!!!"); - } - - pmbbi->shft = pvmeio->signal; - pmbbi->mask <<= pmbbi->shft; - - return(0); + return(0); } /************************************************************************** @@ -970,44 +919,21 @@ STATIC long SysmonInitMbbiRec(struct mbbiRecord *pmbbi) **************************************************************************/ STATIC long SysmonWriteBo(struct boRecord *pbo) { - struct vmeio *pvmeio = (struct vmeio*)&(pbo->out.value); - PvtStruct *pvt = (PvtStruct *)pbo->dpvt; + struct vmeio *pvmeio = (struct vmeio*)&(pbo->out.value); + PvtStruct *pvt = (PvtStruct *)pbo->dpvt; - if (pvt == NULL) + if (pvt == NULL) return(0); - FASTLOCK(&cards[pvmeio->card].lock); + FASTLOCK(&cards[pvmeio->card].lock); -#if 0 - switch (pvt->index) - { - case SYSMON_PARM_DO: - case SYSMON_PARM_DI: + if (pbo->val) + *(pvt->pReg) |= pvt->mask; + else + *(pvt->pReg) &= ~pvt->mask; - if (pbo->val) - cards[pvmeio->card].SysmonBase->SysmonDio |= pvt->mask; - else - cards[pvmeio->card].SysmonBase->SysmonDio &= ~pvt->mask; - break; - - case SYSMON_PARM_WATCHDOG: - - if (pbo->val) - cards[pvmeio->card].SysmonBase->SysmonWatchdog |= pvt->mask; - else - cards[pvmeio->card].SysmonBase->SysmonWatchdog &= ~pvt->mask; - break; - } -#else - - if (pbo->val) - *(pvt->pReg) |= pvt->mask; - else - *(pvt->pReg) &= ~pvt->mask; -#endif - - FASTUNLOCK(&cards[pvmeio->card].lock); - return(0); + FASTUNLOCK(&cards[pvmeio->card].lock); + return(0); } /************************************************************************** @@ -1017,33 +943,32 @@ STATIC long SysmonWriteBo(struct boRecord *pbo) **************************************************************************/ STATIC long SysmonReadBi(struct biRecord *pbi) { - struct vmeio *pvmeio = (struct vmeio*)&(pbi->inp.value); - unsigned short regVal = 0; - PvtStruct *pvt = (PvtStruct *)pbi->dpvt; + struct vmeio *pvmeio = (struct vmeio*)&(pbi->inp.value); + unsigned short regVal = 0; + PvtStruct *pvt = (PvtStruct *)pbi->dpvt; - if (pvt == NULL) - return(0); + if (pvt == NULL) + return(0); - regVal = *(pvt->pReg); - - if (devSysmonDebug) - logMsg("read 0x%4.4X, masking with 0x%4.4X\n", regVal, pvt->mask); + regVal = *(pvt->pReg); + + if (devSysmonDebug) + logMsg("read 0x%4.4X, masking with 0x%4.4X\n", regVal, pvt->mask); - regVal &= pvt->mask; + regVal &= pvt->mask; - if(regVal) + if(regVal) pbi->rval = 1; - else + else pbi->rval = 0; - /* Damn board's BI logic is bass-ackwards */ - if (pvt->index == SYSMON_PARM_DI) - pbi->rval = pbi->rval?0:1; - - return(0); + /* Damn board's BI logic is bass-ackwards */ + if (pvt->index == SYSMON_PARM_DI) + pbi->rval = pbi->rval?0:1; + + return(0); } -#if 1 /* This looks completely insane JRW */ /************************************************************************** * * Perform a write operation from a MBBO record @@ -1051,25 +976,27 @@ STATIC long SysmonReadBi(struct biRecord *pbi) **************************************************************************/ STATIC long SysmonWriteMbbo(struct mbboRecord *pmbbo) { - struct vmeio *pvmeio = (struct vmeio*)&(pmbbo->out.value); - unsigned short regVal; - PvtStruct *pvt = (PvtStruct *)pmbbo->dpvt; + struct vmeio *pvmeio = (struct vmeio*)&(pmbbo->out.value); + unsigned short regVal; + PvtStruct *pvt = (PvtStruct *)pmbbo->dpvt; - if (pvt == NULL) + if (pvt == NULL) + return(0); + + FASTLOCK(&cards[pvmeio->card].lock); + + regVal = *(pvt->pReg); + regVal &= ~pmbbo->mask; + regVal |= pmbbo->rval; + *(pvt->pReg) = regVal; + + if (devSysmonDebug) + printf("SysmonReadMbbo masked value %8.8X\n", regVal); + + FASTUNLOCK(&cards[pvmeio->card].lock); + return(0); - - FASTLOCK(&cards[pvmeio->card].lock); - - /* BUG -- this looks broken, what about the shift? -- JRW */ - regVal = cards[pvmeio->card].SysmonBase->SysmonTemperature; - regVal = (regVal & ~pmbbo->mask) | (pmbbo->rval & pmbbo->mask); - cards[pvmeio->card].SysmonBase->SysmonTemperature = regVal; - - FASTUNLOCK(&cards[pvmeio->card].lock); - - return(0); } -#endif /************************************************************************** * @@ -1078,60 +1005,80 @@ STATIC long SysmonWriteMbbo(struct mbboRecord *pmbbo) **************************************************************************/ STATIC long SysmonReadMbbi(struct mbbiRecord *pmbbi) { - struct vmeio *pvmeio = (struct vmeio*)&(pmbbi->inp.value); - unsigned short regVal; - PvtStruct *pvt = (PvtStruct *)pmbbi->dpvt; + struct vmeio *pvmeio = (struct vmeio*)&(pmbbi->inp.value); + unsigned short regVal; + PvtStruct *pvt = (PvtStruct *)pmbbi->dpvt; - if (pvt == NULL) + if (pvt == NULL) + return(0); + + regVal = ~(*(pvt->pReg)); /* Stupid inputs are inverted */ + regVal &= pmbbi->mask; + + if (devSysmonDebug) + printf("SysmonReadMbbi masked value %8.8X\n", regVal); + + pmbbi->rval = regVal; + pmbbi->udf = 0; return(0); - - FASTLOCK(&cards[pvmeio->card].lock); - - regVal = cards[pvmeio->card].SysmonBase->SysmonTemperature; - - FASTUNLOCK(&cards[pvmeio->card].lock); - - /* BUG -- this looks broken, what about the shift? -- JRW */ - pmbbi->rval=regVal & pmbbi->mask; - pmbbi->udf = 0; - return(0); } /***************************************************** - record support interrupt routine + * + * record support interrupt routine * * cmd = 0 if being added * cmd = 1 if taken off the I/O Event scanned list * ****************************************************/ -static long SysmonGetIointInfoBi( - int cmd, - struct biRecord *pr, - IOSCANPVT *ppvt) +static long SysmonGetIointInfoBi(int cmd, struct biRecord *pr, IOSCANPVT *ppvt) { - struct vmeio *pvmeio = (struct vmeio *)(&pr->inp.value); - int intmask; + struct vmeio *pvmeio = (struct vmeio *)(&pr->inp.value); + int intmask; - if (pr->dpvt == NULL) + if (pr->dpvt == NULL) return(0); - if(pvmeio->card > NUM_LINKS) { + if(pvmeio->card > NUM_LINKS) { recGblRecordError(S_dev_badCard,(void *)pr, "devSysmon (get_int_info) exceeded maximum supported cards"); return(S_dev_badCard); - } - *ppvt = cards[pvmeio->card].ioscanpvt; + } + *ppvt = cards[pvmeio->card].ioscanpvt; - if (cmd == 0) - { - intmask = (((PvtStruct *)(pr->dpvt))->mask)>>8; + if (cmd == 0) + { + intmask = (((PvtStruct *)(pr->dpvt))->mask)>>8; - if (devSysmonDebug) + if (devSysmonDebug) logMsg("SysmonGetIointInfoBi mask is %2.2X\n", intmask); - cards[pvmeio->card].SysmonBase->SysmonIntMask |= intmask; - } + cards[pvmeio->card].SysmonBase->SysmonIntMask |= intmask; + } - return(0); + return(0); } +#if 0 +static long read_mbbi(pmbbi) + struct mbbiRecord *pmbbi; +{ + struct vmeio *pvmeio; + int status; + unsigned long value; + + + pvmeio = (struct vmeio *)&(pmbbi->inp.value); + status = xy210_driver(pvmeio->card,pmbbi->mask,&value); + if(status==0) { + pmbbi->rval = value; + return(0); + } else { + if(recGblSetSevr(pmbbi,READ_ALARM,INVALID_ALARM) && errVerbose + && (pmbbi->stat!=READ_ALARM || pmbbi->sevr!=INVALID_ALARM)) + recGblRecordError(-1,(void *)pmbbi,"xy210_driver Error"); + return(2); + } + return(status); +} +#endif