diff --git a/src/drv/ansi/drvEpvxi.c b/src/drv/ansi/drvEpvxi.c index 2a8812f0b..458ca8e17 100644 --- a/src/drv/ansi/drvEpvxi.c +++ b/src/drv/ansi/drvEpvxi.c @@ -88,6 +88,17 @@ * NOTES * ----- * + * When using MXI-2 modules to connect VME/VXI Chassis' together, it is + * almost essential to let the MXI board be the VMEbus system controller + * by installing it in slot 0 (ensure that your CPU doesn't also try to + * take on this role, which might involve changing a jumper). This is + * because MXI cycles can be slow, and only the MXI board knows when to + * extend the bus timeout. You'll get unexplained bus errors from VXI + * modules that are beyond the MXI bus otherwise. If you can't do this + * you'll need to disable the bus timeout timer function of the system + * controller in your startup script, for example: + * MVME16x/17x: *0xfff4004c = 0x000095e7 + * MVME2700: *0xfd050404 = 0x00000602 * */ @@ -150,21 +161,22 @@ static char *sccsId = "$Id$\t$Date$"; #include #include #include -#include #include #include #include #include #include -#include "dbDefs.h" -#include "errlog.h" -#include +#include "dbDefs.h" +#include "errlog.h" +#include "epicsDynLink.h" +#include "devLib.h" #define SRCepvxiLib /* allocate externals here */ -#include -#include +#include "drvEpvxi.h" +#include "drvHp1404a.h" -#define NICPU030 +/* Define to build special code for the National Instruments CPU030 */ +/* #define NICPU030 */ /* * required to use private assert() here @@ -224,8 +236,10 @@ LOCAL char niCpu030Initialized; LOCAL VXIE root_extender; LOCAL ELLLIST crateList; +#if (CPU_FAMILY != PPC) LOCAL char *ignore_list[] = {"_excStub","_excIntStub"}; LOCAL void *ignore_addr_list[NELEMENTS(ignore_list)]; +#endif LOCAL unsigned last_la; LOCAL unsigned first_la; @@ -252,6 +266,15 @@ char epvxiSymbolTableMakeIdString[] = "%03x"; #define EPVXI_MAX_SYMBOLS (1<st_passed = TRUE; } - else{ + else if (!VXIMXI(pcsr) || !vxi_use_failed_mxi) { errMessage( S_epvxi_selfTestFailed, "VXI resman: device self test failed"); @@ -3076,6 +3101,7 @@ unsigned dest_size */ LOCAL EPVXISTAT vxi_init_ignore_list(void) { +#if (CPU_FAMILY != PPC) int i; SYM_TYPE type; EPVXISTAT status; @@ -3094,7 +3120,7 @@ LOCAL EPVXISTAT vxi_init_ignore_list(void) return status; } } - +#endif return VXI_SUCCESS; } @@ -3109,15 +3135,17 @@ LOCAL EPVXISTAT vxi_vec_inuse( unsigned addr ) { + void *psub = (void *) intVecGet((FUNCPTR *)INUM_TO_IVEC(addr)); +#if (CPU_FAMILY == PPC) + return (psub != 0); +#else int i; - void *psub; - - psub = (void *) intVecGet((FUNCPTR *)INUM_TO_IVEC(addr)); for(i=0; i