diff --git a/src/libCom/osi/devLib.c b/src/libCom/osi/devLib.c index 6e2f44bbd..6a8aa68e6 100644 --- a/src/libCom/osi/devLib.c +++ b/src/libCom/osi/devLib.c @@ -941,6 +941,20 @@ void (*pFunction)(void *) ) return (*pdevLibVirtualOS->pDevDisconnectInterruptVME) (vectorNumber, pFunction); } +int devInterruptInUseVME (unsigned level) +{ + long status; + + if (!devLibInitFlag) { + status = devLibInit(); + if (status) { + return status; + } + } + + return (*pdevLibVirtualOS->pDevInterruptInUseVME) (level); +} + long devEnableInterruptLevelVME (unsigned level) { long status; diff --git a/src/libCom/osi/devLib.h b/src/libCom/osi/devLib.h index f9dd85751..2cd2471e8 100644 --- a/src/libCom/osi/devLib.h +++ b/src/libCom/osi/devLib.h @@ -330,6 +330,11 @@ typedef struct devLibVirtualOS { void *(*pDevA24Malloc)(size_t nbytes); void (*pDevA24Free)(void *pBlock); long (*pDevInit)(void); + + /* + * test if VME interrupt has an ISR connected + */ + int (*pDevInterruptInUseVME) (unsigned vectorNumber); }devLibVirtualOS; epicsShareExtern devLibVirtualOS *pdevLibVirtualOS; diff --git a/src/libCom/osi/os/RTEMS/devLibOSD.c b/src/libCom/osi/os/RTEMS/devLibOSD.c index 5f8ceb9ad..50f1ffe36 100644 --- a/src/libCom/osi/os/RTEMS/devLibOSD.c +++ b/src/libCom/osi/os/RTEMS/devLibOSD.c @@ -101,6 +101,8 @@ static long rtmsDevEnableInterruptLevelVME (unsigned level); static long rtmsDevDisableInterruptLevelVME (unsigned level); +static int rtemsDevInterruptInUseVME (unsigned vectorNumber); + /* RTEMS specific init */ /*devA24Malloc and devA24Free are not implemented*/ @@ -115,7 +117,7 @@ static devLibVirtualOS rtemsVirtualOS = { rtmsDevMapAddr, rtmsDevReadProbe, rtmsDevWriteProbe, rtmsDevConnectInterruptVME, rtmsDevDisconnectInterruptVME, rtmsDevEnableInterruptLevelVME, rtmsDevDisableInterruptLevelVME, - devA24Malloc,devA24Free,rtmsDevInit + devA24Malloc,devA24Free,rtmsDevInit,rtemsDevInterruptInUseVME }; devLibVirtualOS *pdevLibVirtualOS = &rtemsVirtualOS; @@ -296,7 +298,7 @@ static myISR *isrFetch(unsigned vectorNumber, void **parg) /* * determine if a VME interrupt vector is in use */ -int devInterruptInUseVME (unsigned vectorNumber) +static int rtemsDevInterruptInUseVME (unsigned vectorNumber) { int i; myISR *psub; diff --git a/src/libCom/osi/os/vxWorks/devLibOSD.c b/src/libCom/osi/os/vxWorks/devLibOSD.c index 28a32c660..ca95b3b60 100644 --- a/src/libCom/osi/os/vxWorks/devLibOSD.c +++ b/src/libCom/osi/os/vxWorks/devLibOSD.c @@ -128,6 +128,8 @@ static long vxDevEnableInterruptLevelVME (unsigned level); static long vxDevDisableInterruptLevelVME (unsigned level); +static int vxDevInterruptInUseVME (unsigned vectorNumber); + /* * used by dynamic bind in devLib.c */ @@ -135,7 +137,7 @@ static devLibVirtualOS vxVirtualOS = { vxDevMapAddr, vxDevReadProbe, vxDevWriteProbe, vxDevConnectInterruptVME, vxDevDisconnectInterruptVME, vxDevEnableInterruptLevelVME, vxDevDisableInterruptLevelVME, - devA24Malloc,devA24Free,devInit + devA24Malloc,devA24Free,devInit,vxDevInterruptInUseVME }; devLibVirtualOS *pdevLibVirtualOS = &vxVirtualOS; @@ -373,7 +375,7 @@ static myISR *isrFetch(unsigned vectorNumber) /* * determine if a VME interrupt vector is in use */ -int devInterruptInUseVME (unsigned vectorNumber) +static int vxDevInterruptInUseVME (unsigned vectorNumber) { #if CPU_FAMILY == PPC return FALSE;