Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56fee671fe | ||
|
|
4c7cfd7b2f | ||
|
|
28cdb2b5e1 | ||
|
|
f006ec6a8e | ||
|
|
f468f0e33c | ||
|
|
3cfd9a79f5 | ||
|
|
0c0b5d44ba | ||
|
|
95a399e4a2 | ||
|
|
4daf75e295 | ||
|
|
0ef60ec09a | ||
|
|
42bd805108 | ||
|
|
5e7ec2be6c | ||
|
|
2c1609e2ed | ||
|
|
4d0785b899 | ||
|
|
1fc97eb429 | ||
|
|
54f3de4b0d | ||
|
|
4907dfd43d | ||
|
|
14414ab86f | ||
|
|
08761bebff | ||
|
|
6619c06109 | ||
|
|
5ba5209891 | ||
|
|
5d4eddf424 | ||
|
|
1982c777be | ||
|
|
842f9e33cf | ||
|
|
d4f44b9bc9 | ||
|
|
d2acbb21b5 | ||
|
|
4ab910abd1 | ||
|
|
6f8e2cd675 | ||
|
|
9658302528 | ||
|
|
1b8da9848e | ||
|
|
4f983714c7 | ||
|
|
31d5dee317 | ||
|
|
e1bc747104 | ||
|
|
82d119fcef | ||
|
|
2ef8e387e0 |
58
config/CONFIG.Host.LynxOS
Normal file
58
config/CONFIG.Host.LynxOS
Normal file
@@ -0,0 +1,58 @@
|
||||
# CONFIG.Host.LynxOS
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.LynxOS
|
||||
|
||||
ARCH_CLASS = LynxOS
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
AR = ar -rc
|
||||
ARCMD = $(AR) $@
|
||||
RANLIB = ranlib -t
|
||||
|
||||
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC_ANSI = $(ACC) -ansi -mposix -D_X86_
|
||||
ACC_STRICT = $(ACC) -ansi -mposix -D_X86_ -pedantic
|
||||
ACC_TRAD = $(ACC)
|
||||
ACC_WARN_YES = -Wall
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES = -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES =
|
||||
|
||||
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC_NORMAL = $(CCC)
|
||||
CCC_STRICT = $(CCC)
|
||||
CCC_TEMPL_INST_FLAG = -pedantic -mposix -D_X86_ -DEXPL_TEMP
|
||||
CCC_WARN_YES = -Wall
|
||||
CCC_WARN_NO = -w
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES = -Bstatic
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES =
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -pedantic -mposix -D_X86_
|
||||
|
||||
|
||||
# added smh 6/5/98 : when building fdmgr - seems to use this not ACC
|
||||
# in effect this overides orig def in CONFIG_COMMON :
|
||||
# which is GCC_STRICT = $(GCC) -ansi -pedantic
|
||||
GCC_STRICT = $(GCC)
|
||||
G++_STRICT = $(G++) -Wtraditional -mposix -D_X86_ -DEXPL_TEMP
|
||||
|
||||
|
||||
|
||||
ARCH_DEP_CFLAGS = -DLynxOS -mposix -D_X86_
|
||||
ARCH_DEP_LDFLAGS = -lc -lbsd -lnsl -lm -lposix4d9 -llynx
|
||||
@@ -23,8 +23,8 @@ ACC_SFLAGS_YES= -non_shared
|
||||
ACC_SFLAGS_NO= -call_shared
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES = -shared
|
||||
ACC_SHRLIB_LDFLAGS_YES =
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = cxx
|
||||
@@ -42,5 +42,5 @@ CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG =
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_OSF_SOURCE
|
||||
ARCH_DEP_LDLIBS = -lnsl
|
||||
ARCH_DEP_LDLIBS =
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ ACC = $(SPARCWORKS)/bin/cc
|
||||
ACC_ANSI = $(ACC) -Xa
|
||||
ACC_STRICT = $(ACC) -Xc -v
|
||||
ACC_TRAD = $(ACC) -Xs
|
||||
ACC_DEP_CFLAGS = -KPIC -D_REENTRANT
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
@@ -34,13 +35,14 @@ ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES = -KPIC -D_REENTRANT
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = $(SPARCWORKS)/bin/CC
|
||||
CCC_NORMAL = $(CCC) +p
|
||||
CCC_STRICT = $(CCC) +p
|
||||
CCC_DEP_CFLAGS = -KPIC -D_REENTRANT
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES = +w
|
||||
CCC_WARN_NO =
|
||||
@@ -52,6 +54,7 @@ CCC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -xM1
|
||||
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSOLARIS
|
||||
# socket and nsl needed by libca.a
|
||||
ARCH_DEP_LDLIBS = -lsocket -lnsl
|
||||
|
||||
136
config/CONFIG.LynxOS
Normal file
136
config/CONFIG.LynxOS
Normal file
@@ -0,0 +1,136 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file contains definitions for Vx builds
|
||||
|
||||
#--------------------------------------------------
|
||||
# operating system class (include/os/<os_class>)
|
||||
OS_CLASS = LynxOS
|
||||
|
||||
lynx_pc486 =YES
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
#--------------------------------------------------
|
||||
# vxWorks directory definitions
|
||||
|
||||
# The definitions VX_DIR, VX_GNU, GNU_DIR and GNU_LIB
|
||||
# can be overridden for specific host architectures
|
||||
# by creating a CONFIG_SITE.Vx.<host_arch> file with
|
||||
# the override definitions.
|
||||
|
||||
# Tornado directory definitions
|
||||
VX_CONFIG_DIR_YES =
|
||||
VX_INCLUDE_YES =
|
||||
VX_GNU_YES =
|
||||
VX_GNU_BIN_YES =
|
||||
VX_GNU_LIB_YES =
|
||||
|
||||
|
||||
# pre Torando directory definitions
|
||||
VX_CONFIG_DIR_NO =
|
||||
VX_INCLUDE_NO =
|
||||
VX_GNU_NO =
|
||||
VX_GNU_BIN_NO =
|
||||
|
||||
# directory definitions
|
||||
VX_DIR =
|
||||
VX_CONFIG_DIR =
|
||||
VX_INCLUDE =
|
||||
VX_GNU =
|
||||
|
||||
GNU_BIN = /usr/local/bin
|
||||
GNU_LIB = /usr/local/lib
|
||||
|
||||
#--------------------------------------------------
|
||||
# VxWorks command definitions
|
||||
|
||||
#GCC = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
|
||||
#AR = $(GNU_BIN)/ar$(CMPLR_SUFFIX)
|
||||
#CPP = $(GNU_BIN)/cpp$(CMPLR_SUFFIX) -nostdinc
|
||||
#RANLIB = $(GNU_BIN)/ranlib$(CMPLR_SUFFIX)
|
||||
#LD = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
|
||||
|
||||
AR = ar -rc
|
||||
ARCMD = $(AR) $@
|
||||
RANLIB = ranlib -t
|
||||
GCC = gcc
|
||||
CPP = cpp
|
||||
LD = ld -r
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
# Tornado C++ crosscompiler definitions
|
||||
|
||||
#CPLUSPLUS_YES = G++
|
||||
#G++ = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
|
||||
#LD_G++ = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
|
||||
#NM = $(GNU_BIN)/nm$(CMPLR_SUFFIX)
|
||||
#MUNCH = $(GNU_BIN)/munch
|
||||
|
||||
CPLUSPLUS_YES = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
G++ = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
LD_G++ = ld -r
|
||||
NM = nm
|
||||
|
||||
#--------------------------------------------------
|
||||
# Pre Tornado C++ crosscompiler definitions
|
||||
# These are pre tornado definitions for Hideos builds (defined for 68k only)
|
||||
|
||||
#CPLUSPLUS_NO = CCC
|
||||
#CCC = $(GNU_DIR)/bin/sun3-g++ -B$(GNU_DIR)/lib/gcc-lib/ -nostdinc -DEXPL_TEMPL
|
||||
#LD_CCC = $(GNU_DIR)/bin/sun3-ld $(OLD_ARCH_DEP_LDFLAGS) -r
|
||||
|
||||
CPLUSPLUS_NO = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
CCC = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
LD_CCC = ld -r
|
||||
|
||||
CCC_NORMAL = $(CCC) $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_STRICT = $(CCC) -ansi -pedantic -Wall -traditional $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_TRAD = $(CCC) -traditional $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_TEMPL_INST_FLAG = -DEXPL_TEMP
|
||||
CCC_WARN_YES = -Wall
|
||||
CCC_WARN_NO = -w
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_DEPENDS_FLAG = -pedantic -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
CPU = i486
|
||||
OS = lynxos
|
||||
OLD_ARCH_DEP_CFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
# --no-builtin -Wa,"-m68040" -DOS_EQ_$(OS) \
|
||||
# -DBOARD_EQ_$(BOARD) -DCPU_EQ_$(CPU) -DBOARD=$(BOARD)
|
||||
OLD_ARCH_DEP_LDFLAGS = -mposix -lc -lbsd -lnsl -lm -lposix4d9 -llynx
|
||||
# -Ur -N -T$(EPICS_BASE_BIN)/vxldscript.MRI
|
||||
|
||||
#--------------------------------------------------
|
||||
# C compiler definitions
|
||||
ANSI = gcc -ansi
|
||||
|
||||
#--------------------------------------------------
|
||||
# Command definitions
|
||||
CPLUSPLUS = g++
|
||||
# $(CPLUSPLUS_$(TORNADO))
|
||||
LD_CXX = ld -r
|
||||
# $(LD_$(CPLUSPLUS))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system flags
|
||||
OP_SYS_INCLUDES =
|
||||
# -I$(VX_INCLUDE)
|
||||
OP_SYS_CFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
# -DvxWorks -DV5_vxWorks -fno-builtin
|
||||
OP_SYS_LDFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
OP_SYS_LDLIBS = -lc -lbsd -lnsl -lm -lposix4d9 -llynx
|
||||
|
||||
#--------------------------------------------------
|
||||
# Optimization flag overrides
|
||||
GCC_OPT_YES = -O
|
||||
# 2 -fstrength-reduce
|
||||
G++_OPT_YES = -O
|
||||
# 2 -fstrength-reduce
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.c = $(LD) $(LDFLAGS) -o
|
||||
LINK.cc = $(LD_CXX) $(LDFLAGS) -o
|
||||
|
||||
@@ -95,7 +95,22 @@ OP_SYS_LDLIBS =
|
||||
#--------------------------------------------------
|
||||
# Optimization flag overrides
|
||||
GCC_OPT_YES = -O2 -fstrength-reduce
|
||||
GCC_OPT_NO =
|
||||
G++_OPT_YES = -O2 -fstrength-reduce
|
||||
G++_OPT_NO =
|
||||
|
||||
OPT_CFLAGS = $($(ANSI)_OPT_$(VX_OPT))
|
||||
OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$(VX_OPT))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Warning flag overrides
|
||||
GCC_WARN_YES = -Wall
|
||||
GCC_WARN_NO = -w
|
||||
G++_WARN_YES = -Wall
|
||||
G++_WARN_NO = -w
|
||||
|
||||
WARN_CFLAGS = $($(ANSI)_WARN_$(VX_WARN))
|
||||
WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$(VX_WARN))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
|
||||
@@ -10,5 +10,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ CMPLR_SUFFIX = sparc
|
||||
ARCH_CLASS = sparc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=SPARC -DCPU_FAMILY=SPARC
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=SPARC -DCPU_FAMILY=SPARC
|
||||
ARCH_DEP_CFLAGS =
|
||||
# Removed -O2 [24/12/96 PMM]
|
||||
OLD_ARCH_DEP_CXXFLAGS = -fno-builtin -ansi -pipe -nostdinc -DCPU=SPARC \
|
||||
-DVXWORKS -Dsigned= -Dvolatile= +V
|
||||
|
||||
@@ -11,7 +11,8 @@ CMPLR_SUFFIX = mips
|
||||
ARCH_CLASS = mips
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -EB -mcpu=r4000 -mips3 -mgp32 -mfp32 -non_shared -G 0 -DCPU=R4000
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=R4000
|
||||
ARCH_DEP_CFLAGS = -EB -mcpu=r4000 -mips3 -mgp32 -mfp32 -non_shared -G 0
|
||||
|
||||
# Arch specific flags
|
||||
GCC += -fsigned-char
|
||||
|
||||
@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68020 -m68020 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68020 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68020
|
||||
|
||||
|
||||
@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68030 -m68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68030
|
||||
|
||||
|
||||
@@ -10,5 +10,6 @@ CMPLR_SUFFIX = ppc
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags (TRUE=1 via LBL; needed in camessage.c)
|
||||
ARCH_DEP_CFLAGS = -fno-for-scope -DCPU_FAMILY=PPC -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
|
||||
ARCH_DEP_CPPFLAGS = -DCPU_FAMILY=PPC -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
|
||||
ARCH_DEP_CFLAGS = -fno-for-scope
|
||||
|
||||
|
||||
@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
|
||||
@@ -11,4 +11,5 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -msoft-float -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -msoft-float
|
||||
|
||||
@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
|
||||
@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68060 -m68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68060 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
|
||||
@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68030 -m68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68030
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@ CMPLR_SUFFIX = 386
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = pc486
|
||||
|
||||
ARCH_DEP_CFLAGS = -DCPU=I80486 -m486 -DCPU_FAMILY=I80x86 -D_X86_
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=I80486 -DCPU_FAMILY=I80x86 -D_X86_
|
||||
ARCH_DEP_CFLAGS = -m486
|
||||
ARCH_DEP_CXXFLAGS += -x 'c++'
|
||||
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@ CMPLR_SUFFIX = 386
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = pc486
|
||||
|
||||
ARCH_DEP_CFLAGS = -DCPU=I80486 -m486 -DCPU_FAMILY=I80x86 -D_X86_
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=I80486 -DCPU_FAMILY=I80x86 -D_X86_
|
||||
ARCH_DEP_CFLAGS = -m486
|
||||
ARCH_DEP_CXXFLAGS += -x 'c++'
|
||||
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ EPICS_VERSION=3
|
||||
EPICS_REVISION=13
|
||||
EPICS_MODIFICATION=1
|
||||
EPICS_UPDATE_NAME=
|
||||
EPICS_UPDATE_LEVEL=0
|
||||
EPICS_UPDATE_LEVEL=1
|
||||
|
||||
EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_MODIFICATION}.${EPICS_UPDATE_NAME}${EPICS_UPDATE_LEVEL}"
|
||||
|
||||
|
||||
@@ -109,6 +109,11 @@ G++_SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
CC = $($(ANSI)_$(CMPLR))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Vendor compiler dependent options
|
||||
VENDOR_DEP_CFLAGS = $($(ANSI)_DEP_CFLAGS)
|
||||
VENDOR_DEP_CXXFLAGS = $($(CPLUSPLUS)_DEP_CFLAGS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# C++ compiler
|
||||
|
||||
@@ -198,10 +203,11 @@ DEPENDS_RULE = -$(COMPILE.cc) $(DEPENDS_FLAG) $^ > DEPENDS
|
||||
INCLUDES = -I. -I.. $(USR_INCLUDES) $(TARGET_INCLUDES) $(EPICS_INCLUDES) $(OP_SYS_INCLUDES)
|
||||
|
||||
CFLAGS = $(OPT_CFLAGS) $(DEBUG_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS)\
|
||||
$(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(INCLUDES)
|
||||
$(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(VENDOR_DEP_CFLAGS) $(STATIC_CFLAGS)\
|
||||
$(OP_SYS_CFLAGS) $(INCLUDES)
|
||||
|
||||
CXXFLAGS = $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS)\
|
||||
$(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(STATIC_CXXCFLAGS)\
|
||||
$(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(VENDOR_DEP_CXXFLAGS) $(STATIC_CXXCFLAGS)\
|
||||
$(OP_SYS_CFLAGS) $(TEMPL_INST_CXXFLAG) $(INCLUDES)
|
||||
|
||||
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS)\
|
||||
@@ -210,7 +216,7 @@ LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS)\
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS)\
|
||||
$(STATIC_LDLIBS) $(OP_SYS_LDLIBS)
|
||||
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)
|
||||
|
||||
CPPSNCFLAGS = $(INCLUDES)
|
||||
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.LynxOS
Normal file
9
config/CONFIG_HOST_ARCH.LynxOS
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.LynxOS
|
||||
#
|
||||
# Override values in CONFIG.LynxOS
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = LynxOS
|
||||
|
||||
@@ -10,5 +10,3 @@ MKDIR = mkdir
|
||||
RMDIR = rm -rf
|
||||
CHMOD = "/bin/chmod"
|
||||
|
||||
PERL = /usr/bin/perl
|
||||
|
||||
|
||||
@@ -16,4 +16,3 @@ WIND_HOST_TYPE = x86-win32
|
||||
# Use std path variables from ms
|
||||
HOME = $(HOMEDRIVE)$(HOMEPATH)
|
||||
|
||||
PERL = C:\\Perl\\bin\\Perl$(EXE)
|
||||
|
||||
@@ -11,4 +11,3 @@ TORNADO=YES
|
||||
|
||||
WIND_HOST_TYPE = cygwin32
|
||||
|
||||
PERL = C:\\Perl\\bin\\Perl$(EXE)
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
# sgi
|
||||
# Linux
|
||||
# WIN32
|
||||
# LynxOS
|
||||
#
|
||||
# HOST_ARCH now an environment variable
|
||||
# HOST_ARCH=$(shell /usr/local/epics/startup/HostArch)
|
||||
@@ -66,7 +67,7 @@ VX_DIR_YES = /usr/local/vw/tornado101
|
||||
VX_DIR_NO=/usr/local/vw/vxV52p1/vw
|
||||
|
||||
# Directory for TORNADO=NO gnu gcc crosscompiler
|
||||
VX_GNU_NO = $(VX_DIR)/../vxgccV2.2.3.1
|
||||
VX_GNU_NO = $(VX_DIR_NO)/../vxgccV2.2.3.1
|
||||
|
||||
# Directory for TORNADO=NO gnu g++ crosscompiler
|
||||
# used by applications for hideos builds only
|
||||
@@ -77,13 +78,11 @@ GNU_DIR = /usr/local/hideos/gnu_install-2.7.2
|
||||
# GCC (gcc -ansi) GNU
|
||||
# ACC (acc) OS VENDOR
|
||||
# HPACC (cc -Aa) OTHER VENDOR
|
||||
#ANSI=HPACC
|
||||
ANSI=ACC
|
||||
|
||||
# C++ Compiler (for Host builds)
|
||||
# G++ (g++) GNU C++
|
||||
# CCC (CC) OS VENDOR C++
|
||||
#CPLUSPLUS=G++
|
||||
#Note: if CPLUSPLUS is empty then C++ src codes are not built
|
||||
#CPLUSPLUS= # use this if site does not have C++ compiler
|
||||
CPLUSPLUS=CCC
|
||||
|
||||
15
config/CONFIG_SITE.Host.LynxOS
Normal file
15
config/CONFIG_SITE.Host.LynxOS
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# APS overrides of definitions
|
||||
|
||||
GCC = gcc
|
||||
G++ = g++
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
ACC = gcc
|
||||
PLUSPLUS = g++
|
||||
CXX = g++
|
||||
@@ -357,7 +357,8 @@ buildInstall :: build $(TARGETS) \
|
||||
|
||||
clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) $(INC) *$(RES) $(TARGETS)
|
||||
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) $(INC) *$(RES) $(TARGETS) \
|
||||
$(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Products
|
||||
@@ -440,7 +441,11 @@ endif #ifdef PROD
|
||||
#
|
||||
|
||||
INSTALL_JAVA = $(INSTALL_LOCATION)/javalib
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA) $(INSTALL_JAVA)/$(PACKAGE)
|
||||
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA)
|
||||
ifdef PACKAGE
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA)/$(PACKAGE)
|
||||
endif
|
||||
|
||||
vpath %.class $(INSTALL_JAVA)/$(PACKAGE)
|
||||
|
||||
|
||||
@@ -82,11 +82,11 @@ clean::
|
||||
|
||||
%: %.o
|
||||
$(RM) $@
|
||||
$(LINK.c)$@ $< $(LDLIBS)
|
||||
$(LINK.c) $@ $< $(LDLIBS)
|
||||
|
||||
#$(PROD): $(OBJS)
|
||||
# $(RM) $@
|
||||
# $(LINK.c)$@ $(OBJS)
|
||||
# $(LINK.c) $@ $(OBJS)
|
||||
|
||||
%.o: %.c
|
||||
$(RM) $@
|
||||
@@ -137,7 +137,7 @@ endif
|
||||
%.c: ../%.st
|
||||
@echo "preprocessing $*.st"
|
||||
@$(RM) $*.i
|
||||
$(CPP) $(CPPFLAGS) $< $*.i
|
||||
$(CPP) $(CPPFLAGS) $(CPPSNCFLAGS) $< $*.i
|
||||
@echo "converting $*.i"
|
||||
@$(RM) $@
|
||||
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.i
|
||||
@@ -177,7 +177,6 @@ binInstalls: $(BIN_INSTALLS)
|
||||
$(INSTALL) -d -m 555 $^ $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing $@"
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
|
||||
@@ -50,28 +50,19 @@ extern struct dbBase *pdbbase;
|
||||
|
||||
static brkTable *findBrkTable(short linr)
|
||||
{
|
||||
brkTable *pbrkTable;
|
||||
dbMenu *pdbMenu;
|
||||
char name[50];
|
||||
char *pname = name;
|
||||
int len,ind;
|
||||
|
||||
|
||||
pdbMenu = dbFindMenu(pdbbase,"menuConvert");
|
||||
len = strlen(pdbMenu->papChoiceValue[linr]);
|
||||
if(len>=sizeof(name)) {
|
||||
epicsPrintf("Break Tables(findBrkTable) choice name too long\n");
|
||||
if(!pdbMenu) {
|
||||
epicsPrintf("findBrkTable: menuConvert does not exist\n");
|
||||
return(0);
|
||||
}
|
||||
strcpy(pname,pdbMenu->papChoiceValue[linr]);
|
||||
for(ind=0; ind<strlen(pname); ind++) {
|
||||
if(!isalnum(pname[ind])) {
|
||||
pname[ind] = '\0';
|
||||
break;
|
||||
}
|
||||
if(linr<0 || linr>=pdbMenu->nChoice) {
|
||||
epicsPrintf("findBrkTable linr %d but menuConvert has %d choices\n",
|
||||
linr,pdbMenu->nChoice);
|
||||
return(0);
|
||||
}
|
||||
pbrkTable = dbFindBrkTable(pdbbase,pname);
|
||||
return(pbrkTable);
|
||||
return(dbFindBrkTable(pdbbase,pdbMenu->papChoiceValue[linr]));
|
||||
}
|
||||
|
||||
long cvtRawToEngBpt(double *pval,short linr,short init, void **ppbrk,
|
||||
|
||||
@@ -137,7 +137,7 @@ HDRVERSIONID(caerrh, "@(#) $Id$")
|
||||
#define ECA_DEFUNCT DEFMSG(CA_K_FATAL, 34)
|
||||
#define ECA_EMPTYSTR DEFMSG(CA_K_WARNING, 35)
|
||||
#define ECA_NOREPEATER DEFMSG(CA_K_WARNING, 36)
|
||||
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNNING, 37)
|
||||
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNING, 37)
|
||||
#define ECA_DLCKREST DEFMSG(CA_K_WARNING, 38)
|
||||
#define ECA_SERVBEHIND DEFMSG(CA_K_WARNING, 39)
|
||||
#define ECA_NOCAST DEFMSG(CA_K_WARNING, 40)
|
||||
|
||||
@@ -199,3 +199,28 @@ Changes between epics 3.13 Beta 11 and 3.13 Beta 12
|
||||
o The constructor for class casPV no longer requires a reference to the
|
||||
server. For backwards compatibility a reference to the server may still be
|
||||
supplied, but it will not be used.
|
||||
|
||||
Changes after epics 3.13.1
|
||||
|
||||
**** API Change ****
|
||||
o The virtual function caServer::createPV() has been deprecated in favor of the new
|
||||
virtual function caServer::attachPV() which provides exactly the same functionality.
|
||||
The name was changed so that the purpose of this virtual function is more clear
|
||||
to server tool designers. To remain backwards compatible the virtual function
|
||||
caServer::createPV() is called by the base implementation of caServer::attachPV().
|
||||
In a future release all calls to the virtual member function caServer::createPV()
|
||||
will be eliminated.
|
||||
|
||||
o The class pvCreateReturn has been deprecated in favor of the new class
|
||||
pvAttachReturn which provides exactly the same functionality. The name was
|
||||
changed so that the purpose of this class is more clear to server tool
|
||||
designers. To remain backwards compatible the class pvCreateReturn derives from
|
||||
public base class pvAttachReturn. In a future release the class pvCreateReturn
|
||||
will be eliminated.
|
||||
|
||||
o The class casAsyncPVCreateIO has been deprecated in favor of the new class
|
||||
casAsyncPVAttachIO which provides exactly the same functionality. The name was
|
||||
changed so that the purpose of this class is more clear to server tool
|
||||
designers. To remain backwards compatible the class casAsyncPVCreateIO derives from
|
||||
public base class casAsyncPVAttachIO. In a future release the class casAsyncPVCreateIO
|
||||
will be eliminated.
|
||||
|
||||
@@ -34,7 +34,7 @@ LIBSRCS += casAsyncXXIO.cc
|
||||
LIBSRCS += casAsyncRdIOI.cc
|
||||
LIBSRCS += casAsyncWtIOI.cc
|
||||
LIBSRCS += casAsyncExIOI.cc
|
||||
LIBSRCS += casAsyncPVCIOI.cc
|
||||
LIBSRCS += casAsyncAtIOI.cc
|
||||
LIBSRCS += casEventSys.cc
|
||||
LIBSRCS += casMonitor.cc
|
||||
LIBSRCS += casMonEvent.cc
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
//
|
||||
// $Id$
|
||||
// $Log$
|
||||
// Revision 1.2 1997/05/13 14:23:02 jbk
|
||||
// added comments at top
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -158,7 +161,7 @@ pvExistReturn monServer::pvExistTest(const casCtx& c,const char* pvname)
|
||||
return pvExistReturn(S_casApp_pvNotFound);
|
||||
}
|
||||
|
||||
casPV* monServer::createPV(const casCtx& c,const char* pvname)
|
||||
casPV* monServer::pvAttach(const casCtx& c,const char* pvname)
|
||||
{
|
||||
monNode* node;
|
||||
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
*
|
||||
* $Id$
|
||||
* $Log$
|
||||
* Revision 1.2 1997/05/13 14:23:02 jbk
|
||||
* added comments at top
|
||||
*
|
||||
*/
|
||||
|
||||
#include "casdef.h"
|
||||
@@ -47,7 +50,7 @@ public:
|
||||
|
||||
// CAS virtual overloads
|
||||
virtual pvExistReturn pvExistTest(const casCtx& c,const char* pvname);
|
||||
virtual casPV* createPV(const casCtx& c,const char* pvname);
|
||||
virtual casPV* pvAttach(const casCtx& c,const char* pvname);
|
||||
|
||||
// CAS application management functions
|
||||
int repeaterConnect(void);
|
||||
|
||||
@@ -197,9 +197,9 @@ pvExistReturn exServer::pvExistTest
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::createPV()
|
||||
// exServer::pvAttach()
|
||||
//
|
||||
pvCreateReturn exServer::createPV
|
||||
pvAttachReturn exServer::pvAttach
|
||||
(const casCtx &ctx, const char *pName)
|
||||
{
|
||||
//
|
||||
@@ -360,10 +360,10 @@ void exAsyncCreateIO::expire()
|
||||
|
||||
pPV = this->pvi.createPV(this->cas, aitFalse, this->scanOn);
|
||||
if (pPV) {
|
||||
this->postIOCompletion (pvCreateReturn(*pPV));
|
||||
this->postIOCompletion (pvAttachReturn(*pPV));
|
||||
}
|
||||
else {
|
||||
this->postIOCompletion (pvCreateReturn(S_casApp_noMemory));
|
||||
this->postIOCompletion (pvAttachReturn(S_casApp_noMemory));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -316,7 +316,7 @@ public:
|
||||
|
||||
void show (unsigned level) const;
|
||||
pvExistReturn pvExistTest (const casCtx&, const char *pPVName);
|
||||
pvCreateReturn createPV (const casCtx &ctx, const char *pPVName);
|
||||
pvAttachReturn pvAttach (const casCtx &ctx, const char *pPVName);
|
||||
|
||||
void installAliasName(pvInfo &info, const char *pAliasName);
|
||||
inline void removeAliasName(pvEntry &entry);
|
||||
@@ -538,14 +538,14 @@ private:
|
||||
// exAsyncCreateIO
|
||||
// (PV create async IO)
|
||||
//
|
||||
class exAsyncCreateIO : public casAsyncPVCreateIO, public exOSITimer {
|
||||
class exAsyncCreateIO : public casAsyncPVAttachIO, public exOSITimer {
|
||||
public:
|
||||
//
|
||||
// exAsyncCreateIO()
|
||||
//
|
||||
exAsyncCreateIO(pvInfo &pviIn, exServer &casIn,
|
||||
const casCtx &ctxIn, aitBool scanOnIn) :
|
||||
casAsyncPVCreateIO(ctxIn), exOSITimer(0.00001),
|
||||
casAsyncPVAttachIO(ctxIn), exOSITimer(0.00001),
|
||||
pvi(pviIn), cas(casIn), scanOn(scanOnIn) {}
|
||||
|
||||
~exAsyncCreateIO()
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
|
||||
// $Id$
|
||||
// $Log$
|
||||
// Revision 1.4 1997/06/25 05:56:38 jhill
|
||||
// align with API changes
|
||||
//
|
||||
// Revision 1.3 1997/06/13 09:15:47 jhill
|
||||
// connect proto changes
|
||||
//
|
||||
@@ -172,29 +175,29 @@ pvExistReturn serv::pvExistTest(const casCtx&,const char* pvname)
|
||||
return pvExistReturn(rc);
|
||||
}
|
||||
|
||||
pvCreateReturn serv::createPV(const casCtx& in,const char* pvname)
|
||||
pvAttachReturn serv::pvAttach(const casCtx& in,const char* pvname)
|
||||
{
|
||||
casPV* pPV=NULL;
|
||||
int val;
|
||||
|
||||
Debug1("createPV: %s\n",pvname);
|
||||
Debug1("pvAttach: %s\n",pvname);
|
||||
|
||||
if(strncmp(pvname,prefix,prefix_len)==0)
|
||||
{
|
||||
// we may have this one, number is after underscore
|
||||
if(sscanf(&pvname[prefix_len+1],"%d",&val)==1)
|
||||
{
|
||||
Debug("createPV: I am making this PV\n");
|
||||
Debug("pvAttach: I am making this PV\n");
|
||||
if(val>=0 && val<pv_total)
|
||||
pPV=new servPV(*this,pvname,db_sync[val]);
|
||||
}
|
||||
}
|
||||
|
||||
if (pPV) {
|
||||
return pvCreateReturn(*pPV);
|
||||
return pvAttachReturn(*pPV);
|
||||
}
|
||||
else {
|
||||
return pvCreateReturn(S_casApp_pvNotFound);
|
||||
return pvAttachReturn(S_casApp_pvNotFound);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
/*
|
||||
* $Id$
|
||||
* $Log$
|
||||
* Revision 1.3 1997/06/13 09:15:48 jhill
|
||||
* connect proto changes
|
||||
*
|
||||
* Revision 1.2 1997/03/05 21:16:23 jbk
|
||||
* Fixes cvs log id at top
|
||||
*
|
||||
@@ -73,7 +76,7 @@ public:
|
||||
virtual ~serv(void);
|
||||
|
||||
virtual pvExistReturn pvExistTest(const casCtx& c,const char* pvname);
|
||||
virtual pvCreateReturn createPV(const casCtx& c,const char* pvname);
|
||||
virtual pvAttachReturn pvAttach(const casCtx& c,const char* pvname);
|
||||
|
||||
int InitDB(void);
|
||||
int Main(void);
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.8 1997/08/05 00:46:56 jhill
|
||||
* fixed warnings
|
||||
*
|
||||
* Revision 1.7 1997/06/25 05:09:00 jhill
|
||||
* removed templInst.cc
|
||||
*
|
||||
@@ -130,6 +133,17 @@ epicsShareFunc pvCreateReturn caServer::createPV (const casCtx &, const char *)
|
||||
return S_casApp_pvNotFound;
|
||||
}
|
||||
|
||||
//
|
||||
// caServer::pvAttach()
|
||||
//
|
||||
epicsShareFunc pvAttachReturn caServer::pvAttach (const casCtx &ctx, const char *pAliasName)
|
||||
{
|
||||
//
|
||||
// remain backwards compatible (call deprecated routine)
|
||||
//
|
||||
return this->createPV(ctx, pAliasName);
|
||||
}
|
||||
|
||||
//
|
||||
// caServer::registerEvent()
|
||||
//
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.13 1998/10/27 18:28:19 jhill
|
||||
* fixed warnings
|
||||
*
|
||||
* Revision 1.12 1998/10/23 00:28:19 jhill
|
||||
* fixed HP-UX warnings
|
||||
*
|
||||
@@ -74,7 +77,14 @@
|
||||
#include "server.h"
|
||||
#include "casCtxIL.h" // casCtx in line func
|
||||
|
||||
static const osiTime CAServerMaxBeaconPeriod (5.0 /* sec */);
|
||||
//
|
||||
// the maximum beacon period if EPICS_CA_BEACON_PERIOD isnt available
|
||||
//
|
||||
static const osiTime CAServerMaxBeaconPeriod (15.0 /* sec */);
|
||||
|
||||
//
|
||||
// the initial beacon period
|
||||
//
|
||||
static const osiTime CAServerMinBeaconPeriod (1.0e-3 /* sec */);
|
||||
|
||||
|
||||
@@ -162,9 +172,10 @@ debugLevel (0u),
|
||||
pvCountEstimate (nPV<100u?100u:nPV),
|
||||
haveBeenInitialized (FALSE)
|
||||
{
|
||||
caStatus status;
|
||||
int resLibStatus;
|
||||
|
||||
caStatus status;
|
||||
int resLibStatus;
|
||||
double maxPeriod;
|
||||
|
||||
assert (&adapter != NULL);
|
||||
|
||||
if (this->osiMutex::init ()) {
|
||||
@@ -207,11 +218,23 @@ haveBeenInitialized (FALSE)
|
||||
resLibStatus = this->uintResTable<casRes>::init
|
||||
(this->pvCountEstimate*2u);
|
||||
if (resLibStatus) {
|
||||
errMessage (S_cas_noMemory,
|
||||
"integer resource id table init failed");
|
||||
errMessage (S_cas_noMemory, "integer resource id table init failed");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
status = envGetDoubleConfigParam (&EPICS_CA_BEACON_PERIOD, &maxPeriod);
|
||||
if (status || maxPeriod<=0.0) {
|
||||
this->maxBeaconInterval = CAServerMaxBeaconPeriod;
|
||||
ca_printf (
|
||||
"EPICS \"%s\" float fetch failed\n", EPICS_CA_BEACON_PERIOD.name);
|
||||
ca_printf (
|
||||
"Setting \"%s\" = %f\n", EPICS_CA_BEACON_PERIOD.name,
|
||||
(double) this->maxBeaconInterval);
|
||||
}
|
||||
else {
|
||||
this->maxBeaconInterval = maxPeriod;
|
||||
}
|
||||
|
||||
this->haveBeenInitialized = TRUE;
|
||||
return;
|
||||
}
|
||||
@@ -306,14 +329,14 @@ void caServerI::advanceBeaconPeriod()
|
||||
//
|
||||
// return if we are already at the plateau
|
||||
//
|
||||
if (this->beaconPeriod >= CAServerMaxBeaconPeriod) {
|
||||
if (this->beaconPeriod >= this->maxBeaconInterval) {
|
||||
return;
|
||||
}
|
||||
|
||||
this->beaconPeriod += this->beaconPeriod;
|
||||
|
||||
if (this->beaconPeriod >= CAServerMaxBeaconPeriod) {
|
||||
this->beaconPeriod = CAServerMaxBeaconPeriod;
|
||||
if (this->beaconPeriod >= this->maxBeaconInterval) {
|
||||
this->beaconPeriod = this->maxBeaconInterval;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,23 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.2 1997/06/13 09:15:54 jhill
|
||||
* connect proto changes
|
||||
*
|
||||
* Revision 1.1 1997/04/10 19:38:14 jhill
|
||||
* installed
|
||||
*
|
||||
* Revision 1.2 1996/11/06 22:15:53 jhill
|
||||
* allow monitor init read to using rd async io
|
||||
*
|
||||
* Revision 1.1 1996/11/02 01:01:02 jhill
|
||||
* installed
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "server.h"
|
||||
#include "casAsyncIOIIL.h" // casAsyncIOI in line func
|
||||
#include "casChannelIIL.h" // casChannelI in line func
|
||||
@@ -53,54 +39,54 @@
|
||||
#include "casCoreClientIL.h" // casCoreClient in line func
|
||||
|
||||
//
|
||||
// casAsyncPVCIOI::casAsyncPVCIOI()
|
||||
// casAsyncAtIOI::casAsyncAtIOI()
|
||||
//
|
||||
epicsShareFunc casAsyncPVCIOI::casAsyncPVCIOI(const casCtx &ctx,
|
||||
casAsyncPVCreateIO &ioIn) :
|
||||
casAsyncIOI(*ctx.getClient(), ioIn),
|
||||
msg(*ctx.getMsg()),
|
||||
retVal(S_cas_badParameter)
|
||||
epicsShareFunc casAsyncAtIOI::casAsyncAtIOI (const casCtx &ctx,
|
||||
casAsyncPVAttachIO &ioIn) :
|
||||
casAsyncIOI (*ctx.getClient(), ioIn),
|
||||
msg (*ctx.getMsg()),
|
||||
retVal (S_cas_badParameter)
|
||||
{
|
||||
assert (&this->msg);
|
||||
this->client.installAsyncIO(*this);
|
||||
this->client.installAsyncIO (*this);
|
||||
}
|
||||
|
||||
//
|
||||
// casAsyncPVCIOI::~casAsyncPVCIOI()
|
||||
// casAsyncAtIOI::~casAsyncAtIOI()
|
||||
//
|
||||
casAsyncPVCIOI::~casAsyncPVCIOI()
|
||||
casAsyncAtIOI::~casAsyncAtIOI()
|
||||
{
|
||||
this->client.removeAsyncIO(*this);
|
||||
this->client.removeAsyncIO (*this);
|
||||
}
|
||||
|
||||
//
|
||||
// casAsyncPVCIOI::postIOCompletion()
|
||||
// casAsyncAtIOI::postIOCompletion()
|
||||
//
|
||||
epicsShareFunc caStatus casAsyncPVCIOI::postIOCompletion(const pvCreateReturn &retValIn)
|
||||
epicsShareFunc caStatus casAsyncAtIOI::postIOCompletion(const pvAttachReturn &retValIn)
|
||||
{
|
||||
this->retVal = retValIn;
|
||||
return this->postIOCompletionI();
|
||||
return this->postIOCompletionI ();
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// casAsyncPVCIOI::cbFuncAsyncIO()
|
||||
// casAsyncAtIOI::cbFuncAsyncIO()
|
||||
// (called when IO completion event reaches top of event queue)
|
||||
//
|
||||
caStatus casAsyncPVCIOI::cbFuncAsyncIO()
|
||||
caStatus casAsyncAtIOI::cbFuncAsyncIO()
|
||||
{
|
||||
caStatus status;
|
||||
|
||||
switch (this->msg.m_cmmd) {
|
||||
case CA_PROTO_CLAIM_CIU:
|
||||
status = this->client.createChanResponse(this->msg, this->retVal);
|
||||
break;
|
||||
|
||||
default:
|
||||
this->reportInvalidAsynchIO(this->msg.m_cmmd);
|
||||
status = S_cas_internal;
|
||||
break;
|
||||
}
|
||||
switch (this->msg.m_cmmd) {
|
||||
case CA_PROTO_CLAIM_CIU:
|
||||
status = this->client.createChanResponse (this->msg, this->retVal);
|
||||
break;
|
||||
|
||||
default:
|
||||
this->reportInvalidAsynchIO (this->msg.m_cmmd);
|
||||
status = S_cas_internal;
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -29,6 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.4 1998/02/05 22:51:34 jhill
|
||||
* include resourceLib.h
|
||||
*
|
||||
* Revision 1.3 1997/08/05 00:47:02 jhill
|
||||
* fixed warnings
|
||||
*
|
||||
@@ -88,3 +91,10 @@ epicsShareFunc casAsyncPVCreateIO::~casAsyncPVCreateIO()
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// This must be virtual so that derived destructor will
|
||||
// be run indirectly. Therefore it cannot be inline.
|
||||
//
|
||||
epicsShareFunc casAsyncPVAttachIO::~casAsyncPVAttachIO()
|
||||
{
|
||||
}
|
||||
@@ -29,6 +29,11 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.10 1998/10/28 23:51:00 jhill
|
||||
* server nolonger throws exception when a poorly formed get/put call back
|
||||
* request arrives. Instead a get/put call back response is sent which includes
|
||||
* unsuccessful status
|
||||
*
|
||||
* Revision 1.9 1998/07/08 15:38:04 jhill
|
||||
* fixed lost monitors during flow control problem
|
||||
*
|
||||
@@ -153,7 +158,7 @@ caStatus casCoreClient::asyncSearchResponse(casDGIntfIO &,
|
||||
{
|
||||
return S_casApp_noSupport;
|
||||
}
|
||||
caStatus casCoreClient::createChanResponse(const caHdr &, const pvCreateReturn &)
|
||||
caStatus casCoreClient::createChanResponse(const caHdr &, const pvAttachReturn &)
|
||||
{
|
||||
return S_casApp_noSupport;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.15 1998/04/20 18:11:01 jhill
|
||||
* better debug mesg
|
||||
*
|
||||
* Revision 1.14 1998/04/10 23:13:14 jhill
|
||||
* fixed byte swap problems, and use default port if server tool returns PV IP addr, but no port
|
||||
*
|
||||
@@ -164,7 +167,7 @@ caStatus casDGClient::searchAction()
|
||||
// monitor prior to calling PV exist test so that when
|
||||
// the server runs out of memory we dont reply to
|
||||
// search requests, and therefore dont thrash through
|
||||
// caServer::pvExistTest() and casCreatePV::createPV()
|
||||
// caServer::pvExistTest() and casCreatePV::pvAttach()
|
||||
//
|
||||
#ifdef vxWorks
|
||||
# error code needs to be implemented here when we port
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.9 1998/10/27 18:28:20 jhill
|
||||
* fixed warnings
|
||||
*
|
||||
* Revision 1.8 1998/05/05 16:26:31 jhill
|
||||
* fixed warnings
|
||||
*
|
||||
@@ -125,16 +128,16 @@ int casEventRegistry::initRegistry()
|
||||
//
|
||||
// casEventRegistry::maskAllocator()
|
||||
//
|
||||
inline casEventMask casEventRegistry::maskAllocator()
|
||||
casEventMask casEventRegistry::maskAllocator()
|
||||
{
|
||||
casEventMask evMask;
|
||||
casEventMask evMask;
|
||||
|
||||
this->mutex.osiLock();
|
||||
if (this->allocator<CHAR_BIT*sizeof(evMask.mask)) {
|
||||
evMask.mask = 1u<<(this->allocator++);
|
||||
}
|
||||
if (this->allocator<CHAR_BIT*sizeof(evMask.mask)) {
|
||||
evMask.mask = 1u<<(this->allocator++);
|
||||
}
|
||||
this->mutex.osiUnlock();
|
||||
return evMask;
|
||||
return evMask;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.18 1998/11/18 18:52:49 jhill
|
||||
* fixed casChannelI undefined symbols on WIN32
|
||||
*
|
||||
* Revision 1.17 1998/10/23 00:28:20 jhill
|
||||
* fixed HP-UX warnings
|
||||
*
|
||||
@@ -278,7 +281,7 @@ class casAsyncIO;
|
||||
class casAsyncReadIO;
|
||||
class casAsyncWriteIO;
|
||||
class casAsyncPVExistIO;
|
||||
class casAsyncPVCreateIO;
|
||||
class casAsyncPVAttachIO;
|
||||
|
||||
class casAsyncIOI : public casEvent, public tsDLNode<casAsyncIOI> {
|
||||
public:
|
||||
@@ -376,7 +379,7 @@ class casDGIntfIO;
|
||||
//
|
||||
// casAsyncExIOI
|
||||
//
|
||||
// (server internal asynchronous read IO class)
|
||||
// (server internal asynchronous PV exist test IO class)
|
||||
//
|
||||
class casAsyncExIOI : public casAsyncIOI {
|
||||
public:
|
||||
@@ -398,25 +401,25 @@ private:
|
||||
};
|
||||
|
||||
//
|
||||
// casAsyncPVCIOI
|
||||
// casAsyncAtIOI
|
||||
//
|
||||
// (server internal asynchronous read IO class)
|
||||
// (server internal asynchronous PV attach IO class)
|
||||
//
|
||||
class casAsyncPVCIOI : public casAsyncIOI {
|
||||
class casAsyncAtIOI : public casAsyncIOI {
|
||||
public:
|
||||
epicsShareFunc casAsyncPVCIOI(const casCtx &ctx, casAsyncPVCreateIO &ioIn);
|
||||
virtual ~casAsyncPVCIOI();
|
||||
epicsShareFunc casAsyncAtIOI(const casCtx &ctx, casAsyncPVAttachIO &ioIn);
|
||||
virtual ~casAsyncAtIOI();
|
||||
|
||||
//
|
||||
// place notification of IO completion on the event queue
|
||||
//
|
||||
epicsShareFunc caStatus postIOCompletion(const pvCreateReturn &retVal);
|
||||
epicsShareFunc caStatus postIOCompletion(const pvAttachReturn &retVal);
|
||||
|
||||
epicsShareFunc caStatus cbFuncAsyncIO();
|
||||
casAsyncIO &getAsyncIO();
|
||||
private:
|
||||
caHdr const msg;
|
||||
pvCreateReturn retVal;
|
||||
pvAttachReturn retVal;
|
||||
};
|
||||
|
||||
class casChannel;
|
||||
|
||||
@@ -29,6 +29,11 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.26 1998/10/28 23:51:01 jhill
|
||||
* server nolonger throws exception when a poorly formed get/put call back
|
||||
* request arrives. Instead a get/put call back response is sent which includes
|
||||
* unsuccessful status
|
||||
*
|
||||
* Revision 1.25 1998/09/24 20:40:07 jhill
|
||||
* o block if unable to get buffer space for the exception message
|
||||
* o subtle changes related to properly dealing with situations where
|
||||
@@ -962,10 +967,11 @@ caStatus casStrmClient::clientNameAction()
|
||||
*/
|
||||
caStatus casStrmClient::claimChannelAction()
|
||||
{
|
||||
const caHdr *mp = this->ctx.getMsg();
|
||||
char *pName = (char *) this->ctx.getData();
|
||||
unsigned nameLength;
|
||||
caStatus status;
|
||||
const caHdr *mp = this->ctx.getMsg();
|
||||
char *pName = (char *) this->ctx.getData();
|
||||
caServerI &cas = *this->ctx.getServer();
|
||||
unsigned nameLength;
|
||||
caStatus status;
|
||||
|
||||
/*
|
||||
* The available field is used (abused)
|
||||
@@ -994,7 +1000,6 @@ caStatus casStrmClient::claimChannelAction()
|
||||
return S_cas_badProtocol; // disconnect client
|
||||
}
|
||||
|
||||
|
||||
if (mp->m_postsize == 0u) {
|
||||
return S_cas_badProtocol; // disconnect client
|
||||
}
|
||||
@@ -1014,8 +1019,12 @@ caStatus casStrmClient::claimChannelAction()
|
||||
//
|
||||
this->osiLock();
|
||||
this->asyncIOFlag = 0u;
|
||||
const pvCreateReturn pvcr =
|
||||
(*this->ctx.getServer())->createPV (this->ctx, pName);
|
||||
|
||||
//
|
||||
// attach to the PV
|
||||
//
|
||||
pvAttachReturn pvar = cas->pvAttach (this->ctx, pName);
|
||||
|
||||
//
|
||||
// prevent problems when they initiate
|
||||
// async IO but dont return status
|
||||
@@ -1024,18 +1033,17 @@ caStatus casStrmClient::claimChannelAction()
|
||||
if (this->asyncIOFlag) {
|
||||
status = S_cas_success;
|
||||
}
|
||||
else if (pvcr.getStatus() == S_casApp_asyncCompletion) {
|
||||
status = this->createChanResponse(*mp,
|
||||
pvCreateReturn(S_cas_badParameter));
|
||||
else if (pvar.getStatus() == S_casApp_asyncCompletion) {
|
||||
status = this->createChanResponse(*mp, S_cas_badParameter);
|
||||
errMessage(S_cas_badParameter,
|
||||
"- expected asynch IO creation from caServer::createPV()");
|
||||
"- expected asynch IO creation from caServer::pvAttach()");
|
||||
}
|
||||
else if (pvcr.getStatus() == S_casApp_postponeAsyncIO) {
|
||||
else if (pvar.getStatus() == S_casApp_postponeAsyncIO) {
|
||||
status = S_casApp_postponeAsyncIO;
|
||||
this->ctx.getServer()->addItemToIOBLockedList(*this);
|
||||
}
|
||||
else {
|
||||
status = this->createChanResponse(*mp, pvcr);
|
||||
status = this->createChanResponse(*mp, pvar);
|
||||
}
|
||||
this->osiUnlock();
|
||||
return status;
|
||||
@@ -1046,7 +1054,7 @@ caStatus casStrmClient::claimChannelAction()
|
||||
//
|
||||
// LOCK must be applied
|
||||
//
|
||||
caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvCreateReturn &pvcr)
|
||||
caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvAttachReturn &pvar)
|
||||
{
|
||||
casPVI *pPV;
|
||||
casChannel *pChan;
|
||||
@@ -1056,11 +1064,11 @@ caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvCreateRetur
|
||||
unsigned dbrType;
|
||||
caStatus status;
|
||||
|
||||
if (pvcr.getStatus() != S_cas_success) {
|
||||
return this->channelCreateFailed(&hdr, pvcr.getStatus());
|
||||
if (pvar.getStatus() != S_cas_success) {
|
||||
return this->channelCreateFailed(&hdr, pvar.getStatus());
|
||||
}
|
||||
|
||||
pPV = pvcr.getPV();
|
||||
pPV = pvar.getPV();
|
||||
|
||||
//
|
||||
// If status is ok and the PV isnt set then guess that the
|
||||
@@ -1096,7 +1104,7 @@ caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvCreateRetur
|
||||
pChan = (*pPV)->createChannel(this->ctx,
|
||||
this->pUserName, this->pHostName);
|
||||
if (!pChan) {
|
||||
pvcr.getPV()->deleteSignal();
|
||||
pvar.getPV()->deleteSignal();
|
||||
return this->channelCreateFailed(&hdr, S_cas_noMemory);
|
||||
}
|
||||
|
||||
@@ -1175,7 +1183,7 @@ caStatus createStatus)
|
||||
|
||||
if (createStatus == S_casApp_asyncCompletion) {
|
||||
errMessage(S_cas_badParameter,
|
||||
"- no asynchronous IO create in createPV() ?");
|
||||
"- no asynchronous IO create in pvAttach() ?");
|
||||
errMessage(S_cas_badParameter,
|
||||
"- or S_casApp_asyncCompletion was async IO competion code ?");
|
||||
}
|
||||
|
||||
@@ -30,6 +30,12 @@
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* $Log$
|
||||
* Revision 1.21 1998/12/07 23:21:53 jhill
|
||||
* doc
|
||||
*
|
||||
* Revision 1.20 1998/09/24 20:40:56 jhill
|
||||
* new error message
|
||||
*
|
||||
* Revision 1.19 1998/06/18 00:09:39 jhill
|
||||
* installed bwd compat casPV constructor
|
||||
*
|
||||
@@ -249,14 +255,41 @@ private:
|
||||
|
||||
class casPV;
|
||||
|
||||
class epicsShareClass pvCreateReturn {
|
||||
//
|
||||
// pvAttachReturn
|
||||
//
|
||||
class epicsShareClass pvAttachReturn {
|
||||
public:
|
||||
pvCreateReturn(caStatus statIn)
|
||||
{ this->pPV = NULL; this->stat = statIn; }
|
||||
pvCreateReturn(casPV &pv)
|
||||
{ this->pPV = &pv; this->stat = S_casApp_success; }
|
||||
pvAttachReturn ()
|
||||
{
|
||||
this->pPV = NULL;
|
||||
//
|
||||
// A pv name is required for success
|
||||
//
|
||||
this->stat = S_cas_badParameter;
|
||||
}
|
||||
|
||||
const pvCreateReturn &operator = (caStatus rhs)
|
||||
pvAttachReturn (caStatus statIn)
|
||||
{
|
||||
this->pPV = NULL;
|
||||
if (statIn==S_casApp_success) {
|
||||
//
|
||||
// A pv name is required for success
|
||||
//
|
||||
this->stat = S_cas_badParameter;
|
||||
}
|
||||
else {
|
||||
this->stat = statIn;
|
||||
}
|
||||
}
|
||||
|
||||
pvAttachReturn (casPV &pv)
|
||||
{
|
||||
this->pPV = &pv;
|
||||
this->stat = S_casApp_success;
|
||||
}
|
||||
|
||||
const pvAttachReturn &operator = (caStatus rhs)
|
||||
{
|
||||
this->pPV = NULL;
|
||||
if (rhs == S_casApp_success) {
|
||||
@@ -269,7 +302,7 @@ public:
|
||||
}
|
||||
|
||||
//
|
||||
// const pvCreateReturn &operator = (casPV &pvIn)
|
||||
// const pvAttachReturn &operator = (casPV &pvIn)
|
||||
//
|
||||
// The above assignement operator is not included
|
||||
// because it does not match the strict definition of an
|
||||
@@ -278,7 +311,7 @@ public:
|
||||
// pointer here because the server library _will_ make
|
||||
// controlled modification of the PV in the future.
|
||||
//
|
||||
const pvCreateReturn &operator = (casPV *pPVIn)
|
||||
const pvAttachReturn &operator = (casPV *pPVIn)
|
||||
{
|
||||
if (pPVIn!=NULL) {
|
||||
this->stat = S_casApp_success;
|
||||
@@ -297,6 +330,16 @@ private:
|
||||
caStatus stat;
|
||||
};
|
||||
|
||||
//
|
||||
// pvCreateReturn (depricated)
|
||||
// (the class "pvCreateReturn" will be deleted in a future release)
|
||||
//
|
||||
class epicsShareClass pvCreateReturn : public pvAttachReturn {
|
||||
public:
|
||||
pvCreateReturn (caStatus statIn) : pvAttachReturn(statIn) {};
|
||||
pvCreateReturn (casPV &pvIn) : pvAttachReturn (pvIn) {};
|
||||
};
|
||||
|
||||
#include "casEventMask.h" // EPICS event select class
|
||||
#include "casInternal.h" // CA server private
|
||||
|
||||
@@ -336,6 +379,10 @@ public:
|
||||
//
|
||||
// pvExistTest()
|
||||
//
|
||||
// This function is called by the server library when it needs to
|
||||
// determine if a named PV exists (or could be created) in the
|
||||
// server tool.
|
||||
//
|
||||
// The request is allowed to complete asynchronously
|
||||
// (see Asynchronous IO Classes below).
|
||||
//
|
||||
@@ -356,22 +403,27 @@ public:
|
||||
const char *pPVAliasName);
|
||||
|
||||
//
|
||||
// createPV() is called _every_ time that a PV is attached to
|
||||
// by a client. The name supplied here may be a PV canonical
|
||||
// (base) name or it may instead be a PV alias name.
|
||||
// pvAttach()
|
||||
//
|
||||
// This function is called _every_ time that a client attaches to the PV.
|
||||
// The name supplied here will be either a canonical PV name or an alias
|
||||
// PV name.
|
||||
//
|
||||
// The request is allowed to complete asynchronously
|
||||
// (see Asynchronous IO Classes below).
|
||||
//
|
||||
// IMPORTANT:
|
||||
// It is a responsability of the server tool
|
||||
// to detect attempts by the server lib to create a 2nd PV with
|
||||
// the same name as an existing PV. It is also the responsability
|
||||
// of the server tool to detect attempts by the server lib to
|
||||
// create a 2nd PV with a name that is an alias of an existing PV.
|
||||
// In these situations the server tool should avoid PV duplication
|
||||
// by returning a pointer to an existing PV (and not create a new
|
||||
// PV).
|
||||
// It is a responsibility of the server tool to detect attempts by
|
||||
// the server library to attach to an existing PV. If the PV does not
|
||||
// exist then the server tool should create it. Otherwise, the server
|
||||
// tool should return a pointer to the preexisting PV.
|
||||
//
|
||||
// The server tool is encouraged to accept multiple PV name aliases
|
||||
// for the same PV here.
|
||||
//
|
||||
// In all situations the server tool should avoid PV duplication
|
||||
// by returning a pointer to an existing PV if the PV alias name
|
||||
// matches a preexisting PV's name or any of its aliases.
|
||||
//
|
||||
// example return from this procedure:
|
||||
// return pPV; // success (pass by pointer)
|
||||
@@ -386,7 +438,7 @@ public:
|
||||
// asynchronous IO operation (create or exist) completes
|
||||
// against the server.
|
||||
//
|
||||
epicsShareFunc virtual pvCreateReturn createPV (const casCtx &ctx,
|
||||
epicsShareFunc virtual pvAttachReturn pvAttach (const casCtx &ctx,
|
||||
const char *pPVAliasName);
|
||||
|
||||
//
|
||||
@@ -402,6 +454,15 @@ public:
|
||||
// caServer to a caServerI
|
||||
//
|
||||
friend class casPVI;
|
||||
|
||||
//
|
||||
// createPV() (deprecated)
|
||||
// The virtual member function "createPV" will be deleted in a
|
||||
// future release. The base implementation of pvAttach() currently
|
||||
// calls createPV().
|
||||
//
|
||||
epicsShareFunc virtual pvCreateReturn createPV (const casCtx &ctx,
|
||||
const char *pPVAliasName);
|
||||
};
|
||||
|
||||
//
|
||||
@@ -702,7 +763,7 @@ public:
|
||||
// Virtual Function Asynchronous IO Class
|
||||
// ----------------- ---------------------
|
||||
// caServer::pvExistTest() casAsyncPVExistIO
|
||||
// caServer::createPV() casAsyncCreatePVIO
|
||||
// caServer::pvAttach() casAsyncPVAttachIO
|
||||
// casPV::read() casAsyncReadIO
|
||||
// casPV::write() casAsyncWriteIO
|
||||
//
|
||||
@@ -902,30 +963,30 @@ public:
|
||||
};
|
||||
|
||||
//
|
||||
// casAsyncPVCreateIO
|
||||
// - for use with caServer::createPV()
|
||||
// casAsyncPVAttachIO
|
||||
// - for use with caServer::pvAttach()
|
||||
//
|
||||
class casAsyncPVCreateIO : public casAsyncIO, private casAsyncPVCIOI {
|
||||
class casAsyncPVAttachIO : public casAsyncIO, private casAsyncAtIOI {
|
||||
public:
|
||||
//
|
||||
// casAsyncPVCreateIO()
|
||||
// casAsyncPVAttachIO()
|
||||
//
|
||||
epicsShareFunc casAsyncPVCreateIO(const casCtx &ctx) :
|
||||
casAsyncPVCIOI(ctx, *this) {}
|
||||
epicsShareFunc casAsyncPVAttachIO (const casCtx &ctx) :
|
||||
casAsyncAtIOI(ctx, *this) {}
|
||||
|
||||
//
|
||||
// force virtual destructor
|
||||
//
|
||||
epicsShareFunc virtual ~casAsyncPVCreateIO();
|
||||
epicsShareFunc virtual ~casAsyncPVAttachIO();
|
||||
|
||||
//
|
||||
// place notification of IO completion on the event queue
|
||||
// (this function does not delete the casAsyncIO object).
|
||||
// Only the first call to this function has any effect.
|
||||
//
|
||||
epicsShareFunc caStatus postIOCompletion(const pvCreateReturn &retValIn)
|
||||
epicsShareFunc caStatus postIOCompletion(const pvAttachReturn &retValIn)
|
||||
{
|
||||
return this->casAsyncPVCIOI::postIOCompletion (retValIn);
|
||||
return this->casAsyncAtIOI::postIOCompletion (retValIn);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -937,9 +998,20 @@ public:
|
||||
//
|
||||
epicsShareFunc caServer *getCAS() const
|
||||
{
|
||||
return this->casAsyncPVCreateIO::getCAS();
|
||||
return this->casAsyncAtIOI::getCAS();
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// casAsyncPVCreateIO (deprecated)
|
||||
// (this class will be deleted in a future release)
|
||||
//
|
||||
class casAsyncPVCreateIO : public casAsyncPVAttachIO {
|
||||
public:
|
||||
epicsShareFunc casAsyncPVCreateIO(const casCtx &ctx) :
|
||||
casAsyncPVAttachIO (ctx) {}
|
||||
epicsShareFunc virtual ~casAsyncPVCreateIO();
|
||||
};
|
||||
|
||||
#endif // ifdef includecasdefh (this must be the last line in this file)
|
||||
|
||||
|
||||
@@ -29,6 +29,14 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.30 1998/12/01 18:54:45 jhill
|
||||
* Use EPICS_CA_BEACON_PERIOD
|
||||
*
|
||||
* Revision 1.29 1998/10/28 23:51:01 jhill
|
||||
* server nolonger throws exception when a poorly formed get/put call back
|
||||
* request arrives. Instead a get/put call back response is sent which includes
|
||||
* unsuccessful status
|
||||
*
|
||||
* Revision 1.28 1998/10/27 18:28:20 jhill
|
||||
* fixed warnings
|
||||
*
|
||||
@@ -522,7 +530,7 @@ public:
|
||||
casDGIntfIO &outMsgIO, const caNetAddr &outAddr,
|
||||
const caHdr &, const pvExistReturn &);
|
||||
virtual caStatus createChanResponse(
|
||||
const caHdr &, const pvCreateReturn &);
|
||||
const caHdr &, const pvAttachReturn &);
|
||||
virtual caStatus readResponse(
|
||||
casChannelI *, const caHdr &, gdd *, const caStatus);
|
||||
virtual caStatus readNotifyResponse(
|
||||
@@ -672,7 +680,7 @@ public:
|
||||
// one function for each CA request type that has
|
||||
// asynchronous completion
|
||||
//
|
||||
virtual caStatus createChanResponse(const caHdr &, const pvCreateReturn &);
|
||||
virtual caStatus createChanResponse(const caHdr &, const pvAttachReturn &);
|
||||
caStatus readResponse(casChannelI *pChan, const caHdr &msg,
|
||||
gdd *pDesc, const caStatus status);
|
||||
caStatus readNotifyResponse(casChannelI *pChan, const caHdr &msg,
|
||||
@@ -963,6 +971,7 @@ private:
|
||||
//casCtx ctx;
|
||||
tsDLList<casStrmClient> clientList;
|
||||
tsDLList<casIntfOS> intfList;
|
||||
osiTime maxBeaconInterval;
|
||||
osiTime beaconPeriod;
|
||||
caServer &adapter;
|
||||
unsigned debugLevel;
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
//
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.17 1998/11/11 01:31:59 jhill
|
||||
// reduced socket buffer size
|
||||
//
|
||||
// Revision 1.16 1998/06/16 02:35:52 jhill
|
||||
// use aToIPAddr and auto attach to winsock if its a static build
|
||||
//
|
||||
@@ -81,7 +84,6 @@ caStatus casStreamIO::init()
|
||||
{
|
||||
int yes = TRUE;
|
||||
int status;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* see TCP(4P) this seems to make unsollicited single events much
|
||||
@@ -124,6 +126,8 @@ caStatus casStreamIO::init()
|
||||
* joh 11-10-98
|
||||
*/
|
||||
#if 0
|
||||
int i;
|
||||
|
||||
/*
|
||||
* set TCP buffer sizes to be synergistic
|
||||
* with CA internal buffering
|
||||
|
||||
@@ -34,11 +34,13 @@ int main ()
|
||||
list.add(*pFred);
|
||||
list.add(*pFredII);
|
||||
{
|
||||
tsSLIter<fred> iter(list);
|
||||
tsSLIterRm<fred> iter(list);
|
||||
pFredBack = iter();
|
||||
assert(pFredBack == pFredII);
|
||||
pFredBack = iter();
|
||||
assert(pFredBack == pFred);
|
||||
iter.remove(); // removes pFred
|
||||
}
|
||||
list.remove(*pFredII); // removes *pFred !!
|
||||
list.add(*pFred);
|
||||
pFredBack = list.get();
|
||||
assert (pFredBack == pFred);
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.14 1998/10/23 16:40:47 jhill
|
||||
* fixed missing new line at EOF
|
||||
*
|
||||
* Revision 1.13 1998/10/23 00:20:41 jhill
|
||||
* attempted to clean up HP-UX warnings
|
||||
*
|
||||
@@ -105,6 +108,20 @@ public:
|
||||
|
||||
private:
|
||||
T *pNext;
|
||||
|
||||
//
|
||||
// removeNextItem ()
|
||||
//
|
||||
// removes the item after this node
|
||||
//
|
||||
void removeNextItem ()
|
||||
{
|
||||
T *pItem = this->pNext;
|
||||
if (pItem) {
|
||||
tsSLNode<T> *pNode = pItem;
|
||||
this->pNext = pNode->pNext;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -136,21 +153,6 @@ public:
|
||||
this->insert (item, *this);
|
||||
}
|
||||
|
||||
//
|
||||
// remove ()
|
||||
// **** removes item after "itemBefore" ****
|
||||
// (itemBefore might be the list header object and therefore
|
||||
// will not always be of type T)
|
||||
//
|
||||
void remove (tsSLNode<T> &itemBefore)
|
||||
{
|
||||
T *pItem = itemBefore.pNext;
|
||||
if (pItem) {
|
||||
tsSLNode<T> *pNode = pItem;
|
||||
itemBefore.pNext = pNode->pNext;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// get ()
|
||||
//
|
||||
@@ -158,7 +160,7 @@ public:
|
||||
{
|
||||
tsSLNode<T> *pThisNode = this;
|
||||
T *pItem = pThisNode->pNext;
|
||||
this->remove(*this);
|
||||
pThisNode->removeNextItem();
|
||||
return pItem;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ SRCS.c = \
|
||||
../dbCa.c\
|
||||
../dbcar.c\
|
||||
../devLib.c\
|
||||
../devLibVxWorks.c\
|
||||
../initHooks.c
|
||||
|
||||
LIBOBJS = \
|
||||
@@ -45,7 +46,8 @@ LIBOBJS = \
|
||||
taskwd.o\
|
||||
dbCa.o \
|
||||
dbcar.o \
|
||||
devLib.o
|
||||
devLib.o \
|
||||
devLibVxWorks.o
|
||||
|
||||
PROD += initHooks.o
|
||||
|
||||
|
||||
@@ -206,7 +206,6 @@ static long putNotify(PUTNOTIFY *ppn)
|
||||
status=dbProcess(precord);
|
||||
if(status!=0) {
|
||||
ppn->status = status;
|
||||
issueCallback(ppn);
|
||||
}
|
||||
ret_pending:
|
||||
return(S_db_Pending);
|
||||
|
||||
1524
src/db/devLib.c
1524
src/db/devLib.c
File diff suppressed because it is too large
Load Diff
323
src/db/devLib.h
323
src/db/devLib.h
@@ -52,14 +52,9 @@
|
||||
* .02 06-14-93 joh needs devAllocInterruptVector() routine
|
||||
*/
|
||||
|
||||
|
||||
#ifndef INCdevLibh
|
||||
#define INCdevLibh 1
|
||||
|
||||
#if defined(devLibGlobal) && !defined(INCvmeh)
|
||||
#include "vme.h"
|
||||
#endif
|
||||
|
||||
#include <dbDefs.h>
|
||||
|
||||
/*
|
||||
@@ -73,90 +68,179 @@ typedef enum {
|
||||
atISA, /* memory mapped ISA access (until now only on PC) */
|
||||
atLast /* atLast must be the last enum in this list */
|
||||
} epicsAddressType;
|
||||
|
||||
#ifdef devLibGlobal
|
||||
char *epicsAddressTypeName[]
|
||||
= {
|
||||
"VME A16",
|
||||
"VME A24",
|
||||
"VME A32",
|
||||
"ISA"
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* we use a translation between an EPICS encoding
|
||||
* and a vxWorks encoding here
|
||||
* to reduce dependency of drivers on vxWorks
|
||||
*
|
||||
* we assume that the BSP are configured to use these
|
||||
* address modes by default
|
||||
* pointer to an array of strings for each of
|
||||
* the above address types
|
||||
*/
|
||||
#define EPICSAddrTypeNoConvert -1
|
||||
#ifdef devLibGlobal
|
||||
int EPICStovxWorksAddrType[]
|
||||
= {
|
||||
VME_AM_SUP_SHORT_IO,
|
||||
VME_AM_STD_SUP_DATA,
|
||||
VME_AM_EXT_SUP_DATA,
|
||||
EPICSAddrTypeNoConvert
|
||||
};
|
||||
#endif
|
||||
extern const char *epicsAddressTypeName[];
|
||||
|
||||
long devAddressMap(void); /* print an address map */
|
||||
|
||||
/*
|
||||
* devReadProbe()
|
||||
*
|
||||
* a bus error safe "wordSize" read at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long devReadProbe (unsigned wordSize, volatile const void *ptr, void *pValueRead);
|
||||
|
||||
/*
|
||||
* devWriteProbe
|
||||
*
|
||||
* a bus error safe "wordSize" write at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long devWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
|
||||
|
||||
long devRegisterAddress(
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
void *baseAddress,
|
||||
unsigned long size, /* bytes */
|
||||
void **pLocalAddress);
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
size_t logicalBaseAddress,
|
||||
size_t size, /* bytes */
|
||||
volatile void **pPhysicalAddress);
|
||||
|
||||
long devUnregisterAddress(
|
||||
epicsAddressType addrType,
|
||||
void *baseAddress,
|
||||
const char *pOwnerName);
|
||||
epicsAddressType addrType,
|
||||
size_t logicalBaseAddress,
|
||||
const char *pOwnerName);
|
||||
|
||||
/*
|
||||
* allocate and register an unoccupied address block
|
||||
*/
|
||||
long devAllocAddress(
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
unsigned long size,
|
||||
unsigned alignment, /*n ls bits zero in addr*/
|
||||
void **pLocalAddress);
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
size_t size,
|
||||
unsigned alignment, /*n ls bits zero in addr*/
|
||||
volatile void **pLocalAddress);
|
||||
|
||||
/*
|
||||
* some CPU`s will maintain these in independent spaces
|
||||
* connect ISR to a VME interrupt vector
|
||||
*/
|
||||
typedef enum {intCPU, intVME, intVXI} epicsInterruptType;
|
||||
long devConnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(),
|
||||
void *parameter);
|
||||
|
||||
|
||||
long devConnectInterruptVME(
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(void *),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* connect ISR to an ISA interrupt level
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*/
|
||||
long devConnectInterruptISA(
|
||||
unsigned interruptLevel,
|
||||
void (*pFunction)(void *),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* connect ISR to a PCI interrupt
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*/
|
||||
long devConnectInterruptPCI(
|
||||
unsigned bus,
|
||||
unsigned device,
|
||||
unsigned function,
|
||||
void (*pFunction)(void *),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* disconnect ISR from a VME interrupt vector
|
||||
*
|
||||
* The parameter pFunction should be set to the C function pointer that
|
||||
* was connected. It is used as a key to prevent a driver from inadvertently
|
||||
* removing an interrupt handler that it didn't install
|
||||
*/
|
||||
long devDisconnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)());
|
||||
long devDisconnectInterruptVME(
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
long devEnableInterruptLevel(
|
||||
epicsInterruptType intType,
|
||||
unsigned level);
|
||||
|
||||
long devDisableInterruptLevel(
|
||||
epicsInterruptType intType,
|
||||
unsigned level);
|
||||
/*
|
||||
* disconnect ISR from an ISA interrupt level
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*
|
||||
* The parameter pFunction should be set to the C function pointer that
|
||||
* was connected. It is used as a key to prevent a driver from inadvertently
|
||||
* removing an interrupt handler that it didn't install
|
||||
*/
|
||||
long devDisconnectInterruptISA(
|
||||
unsigned interruptLevel,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
/*
|
||||
* disconnect ISR from a PCI interrupt
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*
|
||||
* The parameter pFunction should be set to the C function pointer that
|
||||
* was connected. It is used as a key to prevent a driver from inadvertently
|
||||
* removing an interrupt handler that it didn't install
|
||||
*/
|
||||
long devDisconnectInterruptPCI(
|
||||
unsigned bus,
|
||||
unsigned device,
|
||||
unsigned function,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
/*
|
||||
* determine if a VME interrupt vector is in use
|
||||
*
|
||||
* returns boolean
|
||||
*/
|
||||
int devInterruptInUseVME (unsigned vectorNumber);
|
||||
|
||||
/*
|
||||
* determine if an ISA interrupt level is in use
|
||||
* (not implemented)
|
||||
*
|
||||
* returns boolean
|
||||
*/
|
||||
int devInterruptLevelInUseISA (unsigned interruptLevel);
|
||||
|
||||
/*
|
||||
* determine if a PCI interrupt is in use
|
||||
* (not implemented)
|
||||
*
|
||||
* returns boolean
|
||||
*/
|
||||
int devInterruptInUsePCI (unsigned bus, unsigned device,
|
||||
unsigned function);
|
||||
|
||||
typedef enum {intVME, intVXI, intISA} epicsInterruptType;
|
||||
|
||||
/*
|
||||
* enable VME interrupt level
|
||||
*/
|
||||
long devEnableInterruptLevelVME (unsigned level);
|
||||
|
||||
/*
|
||||
* enable ISA interrupt level
|
||||
*/
|
||||
long devEnableInterruptLevelISA (unsigned level);
|
||||
|
||||
/*
|
||||
* not implemented - API needs to be reviewed
|
||||
*/
|
||||
long devEnableInterruptLevelPCI (unsigned level,
|
||||
unsigned bus, unsigned device, unsigned function);
|
||||
|
||||
/*
|
||||
* disable VME interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelVME (unsigned level);
|
||||
|
||||
/*
|
||||
* disable ISA interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelISA (unsigned level);
|
||||
|
||||
/*
|
||||
* not implemented - API needs to be reviewed
|
||||
*/
|
||||
long devDisableInterruptLevelPCI (unsigned level,
|
||||
unsigned bus, unsigned device, unsigned function);
|
||||
|
||||
/*
|
||||
* Routines to allocate and free memory in the A24 memory region.
|
||||
@@ -198,11 +282,60 @@ void devLibA24Free(void *pBlock);
|
||||
*/
|
||||
#define devPtrAlignTest(PTR) (!(devCreateAlignmentMask(*PTR)&(long)(PTR)))
|
||||
|
||||
/*
|
||||
* virtual OS layer for devLib.c
|
||||
*/
|
||||
struct devLibVirtualOS {
|
||||
/*
|
||||
* maps logical address to physical address, but does not detect
|
||||
* two device drivers that are using the same address range
|
||||
*/
|
||||
long (*pDevMapAddr) (epicsAddressType addrType, unsigned options,
|
||||
size_t logicalAddress, size_t size, volatile void **ppPhysicalAddress);
|
||||
|
||||
/*
|
||||
* a bus error safe "wordSize" read at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long (*pDevReadProbe) (unsigned wordSize, volatile const void *ptr, void *pValueRead);
|
||||
|
||||
/*
|
||||
* a bus error safe "wordSize" write at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long (*pDevWriteProbe) (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
|
||||
|
||||
/*
|
||||
* connect ISR to a VME interrupt vector
|
||||
* (required for backwards compatibility)
|
||||
*/
|
||||
long (*pDevConnectInterruptVME) (unsigned vectorNumber,
|
||||
void (*pFunction)(), void *parameter);
|
||||
|
||||
/*
|
||||
* disconnect ISR from a VME interrupt vector
|
||||
* (required for backwards compatibility)
|
||||
*/
|
||||
long (*pDevDisconnectInterruptVME) (unsigned vectorNumber,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
/*
|
||||
* enable VME interrupt level
|
||||
*/
|
||||
long (*pDevEnableInterruptLevelVME) (unsigned level);
|
||||
|
||||
/*
|
||||
* disable VME interrupt level
|
||||
*/
|
||||
long (*pDevDisableInterruptLevelVME) (unsigned level);
|
||||
};
|
||||
|
||||
/*
|
||||
* error codes (and messages) associated with devLib.c
|
||||
*/
|
||||
#define S_dev_vectorInUse (M_devLib| 1) /*Interrupt vector in use*/
|
||||
#define S_dev_vxWorksVecInstlFail (M_devLib| 2) /*vxWorks interrupt vector install failed*/
|
||||
#define S_dev_success 0
|
||||
#define S_dev_vectorInUse (M_devLib| 1) /*interrupt vector in use*/
|
||||
#define S_dev_vecInstlFail (M_devLib| 2) /*interrupt vector install failed*/
|
||||
#define S_dev_uknIntType (M_devLib| 3) /*Unrecognized interrupt type*/
|
||||
#define S_dev_vectorNotInUse (M_devLib| 4) /*Interrupt vector not in use by caller*/
|
||||
#define S_dev_badA16 (M_devLib| 5) /*Invalid VME A16 address*/
|
||||
@@ -211,11 +344,11 @@ void devLibA24Free(void *pBlock);
|
||||
#define S_dev_uknAddrType (M_devLib| 8) /*Unrecognized address space type*/
|
||||
#define S_dev_addressOverlap (M_devLib| 9) /*Specified device address overlaps another device*/
|
||||
#define S_dev_identifyOverlap (M_devLib| 10) /*This device already owns the address range*/
|
||||
#define S_dev_vxWorksAddrMapFail (M_devLib| 11) /*vxWorks refused address map*/
|
||||
#define S_dev_addrMapFail (M_devLib| 11) /*unable to map address*/
|
||||
#define S_dev_intDisconnect (M_devLib| 12) /*Interrupt at vector disconnected from an EPICS device*/
|
||||
#define S_dev_internal (M_devLib| 13) /*Internal failure*/
|
||||
#define S_dev_vxWorksIntEnFail (M_devLib| 14) /*vxWorks interrupt enable failure*/
|
||||
#define S_dev_vxWorksIntDissFail (M_devLib| 15) /*vxWorks interrupt disable failure*/
|
||||
#define S_dev_intEnFail (M_devLib| 14) /*unable to enable interrupt level*/
|
||||
#define S_dev_intDissFail (M_devLib| 15) /*unable to disable interrupt level*/
|
||||
#define S_dev_noMemory (M_devLib| 16) /*Memory allocation failed*/
|
||||
#define S_dev_addressNotFound (M_devLib| 17) /*Specified device address unregistered*/
|
||||
#define S_dev_noDevice (M_devLib| 18) /*No device at specified address*/
|
||||
@@ -231,4 +364,56 @@ void devLibA24Free(void *pBlock);
|
||||
#define S_dev_hdwLimit (M_devLib| 28) /*Input exceeds Hardware Limit*/
|
||||
#define S_dev_deviceDoesNotFit (M_devLib| 29) /*Unable to locate address space for device*/
|
||||
#define S_dev_deviceTMO (M_devLib| 30) /*device timed out*/
|
||||
#define S_dev_badFunction (M_devLib| 31) /*bad function pointer*/
|
||||
#define S_dev_badVector (M_devLib| 32) /*bad interrupt vector*/
|
||||
#define S_dev_badArgument (M_devLib| 33) /*bad function argument*/
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devConnectInterruptVME, devConnectInterruptPCI,
|
||||
* devConnectInterruptISA etc. devConnectInterrupt will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devConnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devDisconnectInterruptVME, devDisconnectInterruptPCI,
|
||||
* devDisconnectInterruptISA etc. devDisconnectInterrupt will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devDisconnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)());
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devEnableInterruptLevelVME, devEnableInterruptLevelPCI,
|
||||
* devEnableInterruptLevelISA etc. devEnableInterruptLevel will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devEnableInterruptLevel(epicsInterruptType intType, unsigned level);
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devDisableInterruptLevelVME, devDisableInterruptLevelISA,
|
||||
* devDisableInterruptLevelPCI etc. devDisableInterruptLevel will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devDisableInterruptLevel (epicsInterruptType intType, unsigned level);
|
||||
|
||||
|
||||
#endif /* devLib.h*/
|
||||
|
||||
@@ -114,7 +114,8 @@ long vxDevWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValue)
|
||||
*/
|
||||
const struct devLibVirtualOS devLibVirtualOS =
|
||||
{vxDevMapAddr, vxDevReadProbe, vxDevWriteProbe,
|
||||
devConnectInterruptVME, devDisconnectInterruptVME};
|
||||
devConnectInterruptVME, devDisconnectInterruptVME,
|
||||
devEnableInterruptLevelVME, devDisableInterruptLevelVME};
|
||||
|
||||
#define SUCCESS 0
|
||||
|
||||
@@ -185,66 +186,65 @@ long devDisconnectInterruptVME (
|
||||
}
|
||||
|
||||
/*
|
||||
* devEnableInterruptLevel()
|
||||
*
|
||||
* wrapper to minimize driver dependency on vxWorks
|
||||
* enable VME interrupt level
|
||||
*/
|
||||
long devEnableInterruptLevel(
|
||||
epicsInterruptType intType,
|
||||
unsigned level)
|
||||
long devEnableInterruptLevelVME (unsigned level)
|
||||
{
|
||||
int s;
|
||||
|
||||
switch (intType) {
|
||||
case intVME:
|
||||
case intVXI:
|
||||
s = sysIntEnable (level);
|
||||
if(s!=OK){
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
break;
|
||||
case intISA:
|
||||
# if CPU == I80386
|
||||
s = sysIntEnablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
# endif
|
||||
default:
|
||||
return S_dev_uknIntType;
|
||||
s = sysIntEnable (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* devDisableInterruptLevel()
|
||||
*
|
||||
* wrapper to minimize driver dependency on vxWorks
|
||||
* enable ISA interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevel (
|
||||
epicsInterruptType intType,
|
||||
unsigned level)
|
||||
long devEnableInterruptLevelISA (unsigned level)
|
||||
{
|
||||
# if CPU == I80386
|
||||
int s;
|
||||
s = sysIntEnablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
return SUCCESS;
|
||||
# else
|
||||
return S_dev_intEnFail;
|
||||
# endif
|
||||
}
|
||||
|
||||
/*
|
||||
* disable ISA interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelISA (unsigned level)
|
||||
{
|
||||
# if CPU == I80386
|
||||
int s;
|
||||
s = sysIntDisablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
# else
|
||||
return S_dev_intEnFail;
|
||||
# endif
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* disable VME interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelVME (unsigned level)
|
||||
{
|
||||
int s;
|
||||
|
||||
switch (intType) {
|
||||
case intVME:
|
||||
case intVXI:
|
||||
s = sysIntDisable (level);
|
||||
if(s!=OK){
|
||||
return S_dev_intDissFail;
|
||||
}
|
||||
break;
|
||||
case intISA:
|
||||
# if CPU == I80386
|
||||
s = sysIntDisablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
# endif
|
||||
default:
|
||||
return S_dev_uknIntType;
|
||||
s = sysIntDisable (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intDissFail;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
@@ -892,7 +892,7 @@ LOCAL int ab_driver_init()
|
||||
p6008 = (void *)AB_BASE_ADDR;
|
||||
p6008 += link;
|
||||
}
|
||||
status = devRegisterAddress("drvAb",atVMEA24,(void *)p6008,
|
||||
status = devRegisterAddress("drvAb",atVMEA24,(long)p6008,
|
||||
sizeof(ab_region),(void **)&p6008);
|
||||
if(status) {
|
||||
errMessage(status,"drvAb");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -293,22 +293,23 @@ char *ext_type_name[]
|
||||
;
|
||||
|
||||
typedef struct extender_device{
|
||||
ELLNODE node;
|
||||
ELLLIST extenders; /* sub extenders */
|
||||
ELLNODE node;
|
||||
ELLLIST extenders; /* sub extenders */
|
||||
struct extender_device *pParent;
|
||||
enum ext_type type;
|
||||
int la;
|
||||
int la_low; /* inclusive */
|
||||
int la_high; /* inclusive */
|
||||
unsigned long A24_base;
|
||||
unsigned long A24_size;
|
||||
unsigned long A32_base;
|
||||
unsigned long A32_size;
|
||||
unsigned la_mapped:1; /* device present */
|
||||
unsigned A24_mapped:1;
|
||||
unsigned A32_mapped:1;
|
||||
unsigned A24_ok:1;
|
||||
unsigned A32_ok:1;
|
||||
struct slot_zero_device *pSZD;
|
||||
enum ext_type type;
|
||||
int la;
|
||||
int la_low; /* inclusive */
|
||||
int la_high; /* inclusive */
|
||||
unsigned long A24_base;
|
||||
unsigned long A24_size;
|
||||
unsigned long A32_base;
|
||||
unsigned long A32_size;
|
||||
unsigned la_mapped:1; /* device present */
|
||||
unsigned A24_mapped:1;
|
||||
unsigned A32_mapped:1;
|
||||
unsigned A24_ok:1;
|
||||
unsigned A32_ok:1;
|
||||
}VXIE;
|
||||
|
||||
/*
|
||||
@@ -317,22 +318,19 @@ typedef struct extender_device{
|
||||
* available
|
||||
*/
|
||||
typedef struct slot_zero_device{
|
||||
ELLNODE node;
|
||||
void (*set_modid)(
|
||||
struct slot_zero_device *pvxisz,
|
||||
unsigned slot);
|
||||
void (*clear_modid)(
|
||||
struct slot_zero_device *pvxisz);
|
||||
VXIE *pvxie;
|
||||
struct vxi_csr *pcsr;
|
||||
unsigned char la;
|
||||
unsigned reg:1;
|
||||
unsigned msg:1;
|
||||
unsigned nicpu030:1;
|
||||
ELLNODE node;
|
||||
void (*set_modid)(struct slot_zero_device *pvxisz, unsigned slot);
|
||||
void (*clear_modid)(struct slot_zero_device *pvxisz);
|
||||
EPVXISTAT (*report)(unsigned la, unsigned level);
|
||||
VXIE *pvxie;
|
||||
struct vxi_csr *pcsr;
|
||||
unsigned char la;
|
||||
unsigned reg:1;
|
||||
unsigned msg:1;
|
||||
}VXISZ;
|
||||
|
||||
typedef struct epvxiLibDeviceConfig{
|
||||
void (*pio_report_func)(); /* ptr to io report func */
|
||||
void (*pio_report_func)(); /* ptr to io report func */
|
||||
void *pDriverConfig; /* ptr to driver config */
|
||||
void *pMsgConfig; /* msg driver config area */
|
||||
void *pFatAddrBase;
|
||||
@@ -341,16 +339,14 @@ typedef struct epvxiLibDeviceConfig{
|
||||
VXISZ *pvxisz; /* ptr to slot zero info */
|
||||
unsigned long driverID; /* unique driver id */
|
||||
int taskID; /* opened by this id */
|
||||
unsigned short make;
|
||||
unsigned short model;
|
||||
short slot;
|
||||
short commander_la;
|
||||
unsigned short make;
|
||||
unsigned short model;
|
||||
short slot;
|
||||
short commander_la;
|
||||
short extender_la; /* logical address of bus repeater */
|
||||
short slot_zero_la;
|
||||
unsigned char class;
|
||||
unsigned char class;
|
||||
unsigned st_passed:1; /* self test passed */
|
||||
unsigned msg_dev_online:1;
|
||||
unsigned slot0_dev:1;
|
||||
unsigned msg_dev_online:1;
|
||||
unsigned A24_mapped:1;
|
||||
unsigned A32_mapped:1;
|
||||
}VXIDI;
|
||||
@@ -470,7 +466,7 @@ int epvxiResourceMangerOK;
|
||||
#ifndef SRCepvxiLib
|
||||
extern
|
||||
#endif
|
||||
void *epvxi_local_base;
|
||||
volatile void *epvxi_local_base;
|
||||
|
||||
#define VXIBASE(LA) VXI_LA_TO_PA(LA, epvxi_local_base)
|
||||
|
||||
|
||||
@@ -549,12 +549,9 @@ LOCAL EPVXISTAT epvxiReadFastHandshake(
|
||||
}
|
||||
|
||||
cmd = MBC_BR;
|
||||
status = vxMemProbe(
|
||||
&pcsr->dir.r.dd.msg.dlow,
|
||||
WRITE,
|
||||
sizeof(pcsr->dir.r.dd.msg.dlow),
|
||||
&cmd);
|
||||
if(status == OK){
|
||||
status = devReadProbe (sizeof(cmd),
|
||||
&pcsr->dir.r.dd.msg.dlow, &cmd);
|
||||
if(status == SUCCESS){
|
||||
break;
|
||||
}
|
||||
fhm = FALSE;
|
||||
@@ -576,13 +573,9 @@ LOCAL EPVXISTAT epvxiReadFastHandshake(
|
||||
}
|
||||
fhm = TRUE;
|
||||
}
|
||||
|
||||
status = vxMemProbe(
|
||||
&pcsr->dir.r.dd.msg.dlow,
|
||||
READ,
|
||||
sizeof(pcsr->dir.r.dd.msg.dlow),
|
||||
&resp);
|
||||
if(status == OK){
|
||||
status = devReadProbe (sizeof(resp),
|
||||
&pcsr->dir.r.dd.msg.dlow, &resp);
|
||||
if(status == SUCCESS){
|
||||
break;
|
||||
}
|
||||
fhm = FALSE;
|
||||
|
||||
@@ -181,7 +181,7 @@ LOCAL void hpe1368a_init_card(unsigned la, void *pArg)
|
||||
hpe1368a_int_service,
|
||||
la);
|
||||
if(r0 == ERROR){
|
||||
errMessage(S_dev_vxWorksVecInstlFail, NULL);
|
||||
errMessage(S_dev_vecInstlFail, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@ LOCAL void KscV215_init_card(unsigned la, void *pArg)
|
||||
(void *) la);
|
||||
if(status == ERROR){
|
||||
epvxiClose(la, KscV215DriverId);
|
||||
errMessage(S_dev_vxWorksVecInstlFail,
|
||||
errMessage(S_dev_vecInstlFail,
|
||||
"KscV215 init failed- device left open");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -371,7 +371,7 @@ LOCAL mz8310Stat mz8310_setup_int(unsigned card, unsigned channel)
|
||||
mz8310_int_service,
|
||||
(int)&mzconf[card].icf[channel]);
|
||||
if(status != OK)
|
||||
return S_dev_vxWorksVecInstlFail;
|
||||
return S_dev_vecInstlFail;
|
||||
|
||||
sysIntEnable(mz8310_strap[channel].irq);
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define DRVBB232_C
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -58,10 +58,7 @@ typedef struct {
|
||||
msgParmBlock *pparmBlock;
|
||||
} drvBB232Link;
|
||||
|
||||
#ifndef DRVBB232_C
|
||||
extern
|
||||
#endif
|
||||
msgDrvBlock drvBB232Block;
|
||||
extern msgDrvBlock drvBB232Block;
|
||||
|
||||
#define BB232_DEFAULT_AGE (sysClkRateGet()) /* 1 second */
|
||||
|
||||
|
||||
@@ -380,8 +380,11 @@ struct link *plink; /* I/O link structure from record */
|
||||
return(NULL);
|
||||
}
|
||||
sprintf(name, "%s", pparmBlock->pdrvBlock->taskName);
|
||||
if ((taskId = taskSpawn(name, pparmBlock->pdrvBlock->taskPri, pparmBlock->pdrvBlock->taskOpt, pparmBlock->pdrvBlock->taskStack, msgTask, pparmBlock->pdrvBlock, pmsgLink)) == ERROR)
|
||||
{
|
||||
if ((taskId = taskSpawn(
|
||||
name, pparmBlock->pdrvBlock->taskPri, pparmBlock->pdrvBlock->taskOpt,
|
||||
pparmBlock->pdrvBlock->taskStack, msgTask, pparmBlock->pdrvBlock,
|
||||
pmsgLink,
|
||||
0,0,0,0,0,0,0,0)) == ERROR) {
|
||||
printf("Message driver: Failed to start link task %s\n", name);
|
||||
/* BUG --delete the FASTLOCK in here */
|
||||
status = ERROR;
|
||||
|
||||
@@ -69,9 +69,6 @@ typedef struct {
|
||||
msgParmBlock *pparmBlock;
|
||||
} devTy232Link;
|
||||
|
||||
#ifndef DRVTY232_C
|
||||
extern
|
||||
#endif
|
||||
msgDrvBlock drv232Block;
|
||||
extern msgDrvBlock drv232Block;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.8 1998/06/16 03:10:51 jhill
|
||||
* added sgi support
|
||||
*
|
||||
* Revision 1.7 1998/04/16 21:16:35 jhill
|
||||
* removed redundant solaris test
|
||||
*
|
||||
@@ -88,7 +91,7 @@ typedef struct {
|
||||
#endif
|
||||
|
||||
#ifndef vxWorks
|
||||
#if (_POSIX_C_SOURCE < 3) && !defined(SOLARIS) && !defined(HP_UX) && !defined(linux) &&!defined(sgi)
|
||||
#if (_POSIX_C_SOURCE < 3) && !defined(SOLARIS) && !defined(HP_UX) && !defined(linux) && !defined(sgi) && !defined(LynxOS)
|
||||
|
||||
struct timespec
|
||||
{
|
||||
|
||||
@@ -137,7 +137,7 @@ HDRVERSIONID(caerrh, "@(#) $Id$")
|
||||
#define ECA_DEFUNCT DEFMSG(CA_K_FATAL, 34)
|
||||
#define ECA_EMPTYSTR DEFMSG(CA_K_WARNING, 35)
|
||||
#define ECA_NOREPEATER DEFMSG(CA_K_WARNING, 36)
|
||||
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNNING, 37)
|
||||
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNING, 37)
|
||||
#define ECA_DLCKREST DEFMSG(CA_K_WARNING, 38)
|
||||
#define ECA_SERVBEHIND DEFMSG(CA_K_WARNING, 39)
|
||||
#define ECA_NOCAST DEFMSG(CA_K_WARNING, 40)
|
||||
|
||||
@@ -17,7 +17,9 @@ while (<VARS>)
|
||||
if (/CVS_DATE="\\(.*)"/) { $cvs_date = $1; }
|
||||
}
|
||||
|
||||
$ver_str = "$ver.$rev.$mod.$upd_name.$upd_level";
|
||||
$ver_str = "$ver.$rev.$mod";
|
||||
$ver_str = "$ver_str.$upd_name" if $upd_name;
|
||||
$ver_str = "$ver_str.$upd_level" if $upd_level;
|
||||
|
||||
print "Found EPICS Version $ver_str\n";
|
||||
|
||||
|
||||
@@ -15,9 +15,6 @@ IOC_CORE_OBJS = \
|
||||
|
||||
PROD = iocCore
|
||||
|
||||
vpath vxWorks% $(VX_CONFIG_DIR)/$(T_A)
|
||||
INSTALLS = vxWorks vxWorks.sym
|
||||
|
||||
include $(TOP)/config/RULES.Vx
|
||||
|
||||
iocCore: $(IOC_CORE_OBJS)
|
||||
|
||||
@@ -34,11 +34,13 @@ int main ()
|
||||
list.add(*pFred);
|
||||
list.add(*pFredII);
|
||||
{
|
||||
tsSLIter<fred> iter(list);
|
||||
tsSLIterRm<fred> iter(list);
|
||||
pFredBack = iter();
|
||||
assert(pFredBack == pFredII);
|
||||
pFredBack = iter();
|
||||
assert(pFredBack == pFred);
|
||||
iter.remove(); // removes pFred
|
||||
}
|
||||
list.remove(*pFredII); // removes *pFred !!
|
||||
list.add(*pFred);
|
||||
pFredBack = list.get();
|
||||
assert (pFredBack == pFred);
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
*
|
||||
* History
|
||||
* $Log$
|
||||
* Revision 1.14 1998/10/23 16:40:47 jhill
|
||||
* fixed missing new line at EOF
|
||||
*
|
||||
* Revision 1.13 1998/10/23 00:20:41 jhill
|
||||
* attempted to clean up HP-UX warnings
|
||||
*
|
||||
@@ -105,6 +108,20 @@ public:
|
||||
|
||||
private:
|
||||
T *pNext;
|
||||
|
||||
//
|
||||
// removeNextItem ()
|
||||
//
|
||||
// removes the item after this node
|
||||
//
|
||||
void removeNextItem ()
|
||||
{
|
||||
T *pItem = this->pNext;
|
||||
if (pItem) {
|
||||
tsSLNode<T> *pNode = pItem;
|
||||
this->pNext = pNode->pNext;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -136,21 +153,6 @@ public:
|
||||
this->insert (item, *this);
|
||||
}
|
||||
|
||||
//
|
||||
// remove ()
|
||||
// **** removes item after "itemBefore" ****
|
||||
// (itemBefore might be the list header object and therefore
|
||||
// will not always be of type T)
|
||||
//
|
||||
void remove (tsSLNode<T> &itemBefore)
|
||||
{
|
||||
T *pItem = itemBefore.pNext;
|
||||
if (pItem) {
|
||||
tsSLNode<T> *pNode = pItem;
|
||||
itemBefore.pNext = pNode->pNext;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// get ()
|
||||
//
|
||||
@@ -158,7 +160,7 @@ public:
|
||||
{
|
||||
tsSLNode<T> *pThisNode = this;
|
||||
T *pItem = pThisNode->pNext;
|
||||
this->remove(*this);
|
||||
pThisNode->removeNextItem();
|
||||
return pItem;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,9 @@ while (<VARS>)
|
||||
if (/CVS_DATE="\\(.*)"/) { $cvs_date = $1; }
|
||||
}
|
||||
|
||||
$ver_str = "$ver.$rev.$mod.$upd_name.$upd_level";
|
||||
$ver_str = "$ver.$rev.$mod";
|
||||
$ver_str = "$ver_str.$upd_name" if $upd_name;
|
||||
$ver_str = "$ver_str.$upd_level" if $upd_level;
|
||||
|
||||
print "Found EPICS Version $ver_str\n";
|
||||
|
||||
|
||||
73
src/libCom/osi/os/LynxOS/osdSock.h
Normal file
73
src/libCom/osi/os/LynxOS/osdSock.h
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
/*
|
||||
* LynxOS specific socket include
|
||||
*/
|
||||
|
||||
#ifndef osiSockH
|
||||
#define osiSockH
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h> /* for MAXHOSTNAMELEN */
|
||||
#include <sys/time.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <net/if.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h> /* close() and others */
|
||||
|
||||
/*
|
||||
* as far as I can tell there is no header file for these
|
||||
*/
|
||||
int gethostname(char *name, int namelen);
|
||||
int sethostname(char *name, int namelen);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef int SOCKET;
|
||||
#define INVALID_SOCKET (-1)
|
||||
#define SOCKERRNO errno
|
||||
#define SOCKERRSTR (strerror(errno))
|
||||
#define socket_close(S) close(S)
|
||||
|
||||
#if 1
|
||||
/*
|
||||
* only for LynxOS v2.4.0
|
||||
*/
|
||||
# define socket_ioctl(A,B,C) ioctl(A,B,(char *)C)
|
||||
#else
|
||||
# define socket_ioctl(A,B,C) ioctl(A,B,C)
|
||||
#endif
|
||||
|
||||
typedef int osiSockIoctl_t;
|
||||
|
||||
#define FD_IN_FDSET(FD) ((FD)<FD_SETSIZE&&(FD)>=0)
|
||||
|
||||
#define SOCK_EWOULDBLOCK EWOULDBLOCK
|
||||
#define SOCK_ENOBUFS ENOBUFS
|
||||
#define SOCK_ECONNRESET ECONNRESET
|
||||
#define SOCK_ETIMEDOUT ETIMEDOUT
|
||||
#define SOCK_EADDRINUSE EADDRINUSE
|
||||
#define SOCK_ECONNREFUSED ECONNREFUSED
|
||||
#define SOCK_ECONNABORTED ECONNABORTED
|
||||
#define SOCK_EINPROGRESS EINPROGRESS
|
||||
#define SOCK_EISCONN EISCONN
|
||||
#define SOCK_EALREADY EALREADY
|
||||
#define SOCK_EINVAL EINVAL
|
||||
#define SOCK_EINTR EINTR
|
||||
#define SOCK_EPIPE EPIPE
|
||||
|
||||
#define INADDR_LOOPBACK 0x7F000001
|
||||
|
||||
#endif /*osiSockH*/
|
||||
|
||||
@@ -294,6 +294,7 @@ where
|
||||
app Application name (the created directory will have \"App\" appended to name)
|
||||
ioc IOC name (the created directory will have \"ioc\" prepended to name)
|
||||
|
||||
-i Specifies that ioc boot directories will be generated
|
||||
-t type Set the application type (-l for a list of valid types)
|
||||
If not specified, type is taken from environment
|
||||
If not found in environment, \"default\" is used
|
||||
|
||||
@@ -3,9 +3,9 @@ eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
|
||||
# Called from within the object directory.
|
||||
# Searches the .substitutions files (from the command line) for
|
||||
# "file xxx {" entries to create a .DEPENDS file
|
||||
# "file xxx {" entries to create a DEPENDS file
|
||||
|
||||
open(OUT, ">.DEPENDS") or die "Cannot open .DEPENDS: $!";
|
||||
open(OUT, ">DEPENDS") or die "Cannot open DEPENDS: $!";
|
||||
|
||||
foreach $file (@ARGV) {
|
||||
open(IN, "<$file") or die "Cannot open $file: $!";
|
||||
|
||||
@@ -28,10 +28,10 @@ LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/pulseCounterRecord.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/pulseDelayRecord.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/pulseTrainRecord.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/scanRecord.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/recWaitCa.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/recDynLink.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/recDynLinkTest.o
|
||||
#LIBOBJS += $(EPICS_BASE_BIN)/scanRecord.o
|
||||
LIBOBJS += $(EPICS_BASE_BIN)/selRecord.o
|
||||
LIBOBJS += $(EPICS_BASE_BIN)/seqRecord.o
|
||||
LIBOBJS += $(EPICS_BASE_BIN)/stateRecord.o
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
/* $Id$
|
||||
* $Log$
|
||||
* Revision 1.8 1998/11/23 23:49:29 jhill
|
||||
* added build date to corerelease()
|
||||
*
|
||||
* Revision 1.7 1997/04/30 19:12:25 mrk
|
||||
* Fix compiler warning messages
|
||||
*
|
||||
* Revision 1.6 1995/02/13 16:46:04 jba
|
||||
* Removed date from epicsRelease.
|
||||
*
|
||||
@@ -27,6 +33,10 @@
|
||||
char *epicsRelease1 = epicsReleaseVersion;
|
||||
int coreRelease()
|
||||
{
|
||||
printf("############################################################################\n### %s\n### %s\n############################################################################\n", epicsRelease, epicsRelease1);
|
||||
printf ("############################################################################\n");
|
||||
printf ("### %s\n", epicsRelease);
|
||||
printf ("### %s\n", epicsRelease1);
|
||||
printf ("### @(#)Built date %s\n", __DATE__);
|
||||
printf ("############################################################################\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -237,6 +237,7 @@ static long special(DBADDR *paddr,int after)
|
||||
return(S_db_noMod);
|
||||
}
|
||||
pai->init=TRUE;
|
||||
pai->eoff = pai->egul;
|
||||
if(!(pdset->special_linconv)) return(0);
|
||||
return((*pdset->special_linconv)(pai,after));
|
||||
default:
|
||||
|
||||
@@ -300,6 +300,7 @@ static long special(paddr,after)
|
||||
return(S_db_noMod);
|
||||
}
|
||||
pao->init=TRUE;
|
||||
pao->eoff = pao->egul;
|
||||
if(!(pdset->special_linconv)) return(0);
|
||||
return((*pdset->special_linconv)(pao,after));
|
||||
default:
|
||||
|
||||
@@ -190,6 +190,8 @@ LOCAL void *casCalloc (size_t count, size_t size);
|
||||
|
||||
LOCAL void *casMalloc (size_t size);
|
||||
|
||||
LOCAL unsigned nextRsrvResourceID;
|
||||
|
||||
|
||||
/*
|
||||
* CAMESSAGE()
|
||||
@@ -1746,7 +1748,6 @@ struct dbAddr *pAddr,
|
||||
unsigned cid
|
||||
)
|
||||
{
|
||||
static unsigned bucketID;
|
||||
unsigned *pCID;
|
||||
struct channel_in_use *pchannel;
|
||||
int status;
|
||||
@@ -1783,7 +1784,7 @@ unsigned cid
|
||||
* bypass read only warning
|
||||
*/
|
||||
pCID = (unsigned *) &pchannel->sid;
|
||||
*pCID = bucketID++;
|
||||
*pCID = nextRsrvResourceID++;
|
||||
|
||||
/*
|
||||
* Verify that this id is not in use
|
||||
@@ -2201,3 +2202,10 @@ LOCAL void *casMalloc(size_t size)
|
||||
return malloc(size);
|
||||
}
|
||||
|
||||
/*
|
||||
* getNextRsrvResourceID()
|
||||
*/
|
||||
unsigned getNextRsrvResourceID()
|
||||
{
|
||||
return nextRsrvResourceID;
|
||||
}
|
||||
@@ -477,6 +477,8 @@ void casr (unsigned level)
|
||||
freeListItemsAvail (rsrvChanFreeList),
|
||||
freeListItemsAvail (rsrvEventFreeList));
|
||||
|
||||
printf ("The next resource ID allocated will be %u\n", getNextRsrvResourceID());
|
||||
|
||||
if(pCaBucket){
|
||||
printf( "The server's resource id conversion table:\n");
|
||||
FASTLOCK(&clientQlock);
|
||||
|
||||
@@ -295,6 +295,8 @@ struct client *pc
|
||||
|
||||
void write_notify_reply(void *pArg);
|
||||
|
||||
unsigned getNextRsrvResourceID();
|
||||
|
||||
/*
|
||||
* !!KLUDGE!!
|
||||
*
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -52,14 +52,9 @@
|
||||
* .02 06-14-93 joh needs devAllocInterruptVector() routine
|
||||
*/
|
||||
|
||||
|
||||
#ifndef INCdevLibh
|
||||
#define INCdevLibh 1
|
||||
|
||||
#if defined(devLibGlobal) && !defined(INCvmeh)
|
||||
#include "vme.h"
|
||||
#endif
|
||||
|
||||
#include <dbDefs.h>
|
||||
|
||||
/*
|
||||
@@ -73,90 +68,179 @@ typedef enum {
|
||||
atISA, /* memory mapped ISA access (until now only on PC) */
|
||||
atLast /* atLast must be the last enum in this list */
|
||||
} epicsAddressType;
|
||||
|
||||
#ifdef devLibGlobal
|
||||
char *epicsAddressTypeName[]
|
||||
= {
|
||||
"VME A16",
|
||||
"VME A24",
|
||||
"VME A32",
|
||||
"ISA"
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* we use a translation between an EPICS encoding
|
||||
* and a vxWorks encoding here
|
||||
* to reduce dependency of drivers on vxWorks
|
||||
*
|
||||
* we assume that the BSP are configured to use these
|
||||
* address modes by default
|
||||
* pointer to an array of strings for each of
|
||||
* the above address types
|
||||
*/
|
||||
#define EPICSAddrTypeNoConvert -1
|
||||
#ifdef devLibGlobal
|
||||
int EPICStovxWorksAddrType[]
|
||||
= {
|
||||
VME_AM_SUP_SHORT_IO,
|
||||
VME_AM_STD_SUP_DATA,
|
||||
VME_AM_EXT_SUP_DATA,
|
||||
EPICSAddrTypeNoConvert
|
||||
};
|
||||
#endif
|
||||
extern const char *epicsAddressTypeName[];
|
||||
|
||||
long devAddressMap(void); /* print an address map */
|
||||
|
||||
/*
|
||||
* devReadProbe()
|
||||
*
|
||||
* a bus error safe "wordSize" read at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long devReadProbe (unsigned wordSize, volatile const void *ptr, void *pValueRead);
|
||||
|
||||
/*
|
||||
* devWriteProbe
|
||||
*
|
||||
* a bus error safe "wordSize" write at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long devWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
|
||||
|
||||
long devRegisterAddress(
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
void *baseAddress,
|
||||
unsigned long size, /* bytes */
|
||||
void **pLocalAddress);
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
size_t logicalBaseAddress,
|
||||
size_t size, /* bytes */
|
||||
volatile void **pPhysicalAddress);
|
||||
|
||||
long devUnregisterAddress(
|
||||
epicsAddressType addrType,
|
||||
void *baseAddress,
|
||||
const char *pOwnerName);
|
||||
epicsAddressType addrType,
|
||||
size_t logicalBaseAddress,
|
||||
const char *pOwnerName);
|
||||
|
||||
/*
|
||||
* allocate and register an unoccupied address block
|
||||
*/
|
||||
long devAllocAddress(
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
unsigned long size,
|
||||
unsigned alignment, /*n ls bits zero in addr*/
|
||||
void **pLocalAddress);
|
||||
const char *pOwnerName,
|
||||
epicsAddressType addrType,
|
||||
size_t size,
|
||||
unsigned alignment, /*n ls bits zero in addr*/
|
||||
volatile void **pLocalAddress);
|
||||
|
||||
/*
|
||||
* some CPU`s will maintain these in independent spaces
|
||||
* connect ISR to a VME interrupt vector
|
||||
*/
|
||||
typedef enum {intCPU, intVME, intVXI} epicsInterruptType;
|
||||
long devConnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(),
|
||||
void *parameter);
|
||||
|
||||
|
||||
long devConnectInterruptVME(
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(void *),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* connect ISR to an ISA interrupt level
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*/
|
||||
long devConnectInterruptISA(
|
||||
unsigned interruptLevel,
|
||||
void (*pFunction)(void *),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* connect ISR to a PCI interrupt
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*/
|
||||
long devConnectInterruptPCI(
|
||||
unsigned bus,
|
||||
unsigned device,
|
||||
unsigned function,
|
||||
void (*pFunction)(void *),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* disconnect ISR from a VME interrupt vector
|
||||
*
|
||||
* The parameter pFunction should be set to the C function pointer that
|
||||
* was connected. It is used as a key to prevent a driver from inadvertently
|
||||
* removing an interrupt handler that it didn't install
|
||||
*/
|
||||
long devDisconnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)());
|
||||
long devDisconnectInterruptVME(
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
long devEnableInterruptLevel(
|
||||
epicsInterruptType intType,
|
||||
unsigned level);
|
||||
|
||||
long devDisableInterruptLevel(
|
||||
epicsInterruptType intType,
|
||||
unsigned level);
|
||||
/*
|
||||
* disconnect ISR from an ISA interrupt level
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*
|
||||
* The parameter pFunction should be set to the C function pointer that
|
||||
* was connected. It is used as a key to prevent a driver from inadvertently
|
||||
* removing an interrupt handler that it didn't install
|
||||
*/
|
||||
long devDisconnectInterruptISA(
|
||||
unsigned interruptLevel,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
/*
|
||||
* disconnect ISR from a PCI interrupt
|
||||
* (not implemented)
|
||||
* (API should be reviewed)
|
||||
*
|
||||
* The parameter pFunction should be set to the C function pointer that
|
||||
* was connected. It is used as a key to prevent a driver from inadvertently
|
||||
* removing an interrupt handler that it didn't install
|
||||
*/
|
||||
long devDisconnectInterruptPCI(
|
||||
unsigned bus,
|
||||
unsigned device,
|
||||
unsigned function,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
/*
|
||||
* determine if a VME interrupt vector is in use
|
||||
*
|
||||
* returns boolean
|
||||
*/
|
||||
int devInterruptInUseVME (unsigned vectorNumber);
|
||||
|
||||
/*
|
||||
* determine if an ISA interrupt level is in use
|
||||
* (not implemented)
|
||||
*
|
||||
* returns boolean
|
||||
*/
|
||||
int devInterruptLevelInUseISA (unsigned interruptLevel);
|
||||
|
||||
/*
|
||||
* determine if a PCI interrupt is in use
|
||||
* (not implemented)
|
||||
*
|
||||
* returns boolean
|
||||
*/
|
||||
int devInterruptInUsePCI (unsigned bus, unsigned device,
|
||||
unsigned function);
|
||||
|
||||
typedef enum {intVME, intVXI, intISA} epicsInterruptType;
|
||||
|
||||
/*
|
||||
* enable VME interrupt level
|
||||
*/
|
||||
long devEnableInterruptLevelVME (unsigned level);
|
||||
|
||||
/*
|
||||
* enable ISA interrupt level
|
||||
*/
|
||||
long devEnableInterruptLevelISA (unsigned level);
|
||||
|
||||
/*
|
||||
* not implemented - API needs to be reviewed
|
||||
*/
|
||||
long devEnableInterruptLevelPCI (unsigned level,
|
||||
unsigned bus, unsigned device, unsigned function);
|
||||
|
||||
/*
|
||||
* disable VME interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelVME (unsigned level);
|
||||
|
||||
/*
|
||||
* disable ISA interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelISA (unsigned level);
|
||||
|
||||
/*
|
||||
* not implemented - API needs to be reviewed
|
||||
*/
|
||||
long devDisableInterruptLevelPCI (unsigned level,
|
||||
unsigned bus, unsigned device, unsigned function);
|
||||
|
||||
/*
|
||||
* Routines to allocate and free memory in the A24 memory region.
|
||||
@@ -198,11 +282,60 @@ void devLibA24Free(void *pBlock);
|
||||
*/
|
||||
#define devPtrAlignTest(PTR) (!(devCreateAlignmentMask(*PTR)&(long)(PTR)))
|
||||
|
||||
/*
|
||||
* virtual OS layer for devLib.c
|
||||
*/
|
||||
struct devLibVirtualOS {
|
||||
/*
|
||||
* maps logical address to physical address, but does not detect
|
||||
* two device drivers that are using the same address range
|
||||
*/
|
||||
long (*pDevMapAddr) (epicsAddressType addrType, unsigned options,
|
||||
size_t logicalAddress, size_t size, volatile void **ppPhysicalAddress);
|
||||
|
||||
/*
|
||||
* a bus error safe "wordSize" read at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long (*pDevReadProbe) (unsigned wordSize, volatile const void *ptr, void *pValueRead);
|
||||
|
||||
/*
|
||||
* a bus error safe "wordSize" write at the specified address which returns
|
||||
* unsuccessful status if the device isnt present
|
||||
*/
|
||||
long (*pDevWriteProbe) (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
|
||||
|
||||
/*
|
||||
* connect ISR to a VME interrupt vector
|
||||
* (required for backwards compatibility)
|
||||
*/
|
||||
long (*pDevConnectInterruptVME) (unsigned vectorNumber,
|
||||
void (*pFunction)(), void *parameter);
|
||||
|
||||
/*
|
||||
* disconnect ISR from a VME interrupt vector
|
||||
* (required for backwards compatibility)
|
||||
*/
|
||||
long (*pDevDisconnectInterruptVME) (unsigned vectorNumber,
|
||||
void (*pFunction)(void *));
|
||||
|
||||
/*
|
||||
* enable VME interrupt level
|
||||
*/
|
||||
long (*pDevEnableInterruptLevelVME) (unsigned level);
|
||||
|
||||
/*
|
||||
* disable VME interrupt level
|
||||
*/
|
||||
long (*pDevDisableInterruptLevelVME) (unsigned level);
|
||||
};
|
||||
|
||||
/*
|
||||
* error codes (and messages) associated with devLib.c
|
||||
*/
|
||||
#define S_dev_vectorInUse (M_devLib| 1) /*Interrupt vector in use*/
|
||||
#define S_dev_vxWorksVecInstlFail (M_devLib| 2) /*vxWorks interrupt vector install failed*/
|
||||
#define S_dev_success 0
|
||||
#define S_dev_vectorInUse (M_devLib| 1) /*interrupt vector in use*/
|
||||
#define S_dev_vecInstlFail (M_devLib| 2) /*interrupt vector install failed*/
|
||||
#define S_dev_uknIntType (M_devLib| 3) /*Unrecognized interrupt type*/
|
||||
#define S_dev_vectorNotInUse (M_devLib| 4) /*Interrupt vector not in use by caller*/
|
||||
#define S_dev_badA16 (M_devLib| 5) /*Invalid VME A16 address*/
|
||||
@@ -211,11 +344,11 @@ void devLibA24Free(void *pBlock);
|
||||
#define S_dev_uknAddrType (M_devLib| 8) /*Unrecognized address space type*/
|
||||
#define S_dev_addressOverlap (M_devLib| 9) /*Specified device address overlaps another device*/
|
||||
#define S_dev_identifyOverlap (M_devLib| 10) /*This device already owns the address range*/
|
||||
#define S_dev_vxWorksAddrMapFail (M_devLib| 11) /*vxWorks refused address map*/
|
||||
#define S_dev_addrMapFail (M_devLib| 11) /*unable to map address*/
|
||||
#define S_dev_intDisconnect (M_devLib| 12) /*Interrupt at vector disconnected from an EPICS device*/
|
||||
#define S_dev_internal (M_devLib| 13) /*Internal failure*/
|
||||
#define S_dev_vxWorksIntEnFail (M_devLib| 14) /*vxWorks interrupt enable failure*/
|
||||
#define S_dev_vxWorksIntDissFail (M_devLib| 15) /*vxWorks interrupt disable failure*/
|
||||
#define S_dev_intEnFail (M_devLib| 14) /*unable to enable interrupt level*/
|
||||
#define S_dev_intDissFail (M_devLib| 15) /*unable to disable interrupt level*/
|
||||
#define S_dev_noMemory (M_devLib| 16) /*Memory allocation failed*/
|
||||
#define S_dev_addressNotFound (M_devLib| 17) /*Specified device address unregistered*/
|
||||
#define S_dev_noDevice (M_devLib| 18) /*No device at specified address*/
|
||||
@@ -231,4 +364,56 @@ void devLibA24Free(void *pBlock);
|
||||
#define S_dev_hdwLimit (M_devLib| 28) /*Input exceeds Hardware Limit*/
|
||||
#define S_dev_deviceDoesNotFit (M_devLib| 29) /*Unable to locate address space for device*/
|
||||
#define S_dev_deviceTMO (M_devLib| 30) /*device timed out*/
|
||||
#define S_dev_badFunction (M_devLib| 31) /*bad function pointer*/
|
||||
#define S_dev_badVector (M_devLib| 32) /*bad interrupt vector*/
|
||||
#define S_dev_badArgument (M_devLib| 33) /*bad function argument*/
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devConnectInterruptVME, devConnectInterruptPCI,
|
||||
* devConnectInterruptISA etc. devConnectInterrupt will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devConnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)(),
|
||||
void *parameter);
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devDisconnectInterruptVME, devDisconnectInterruptPCI,
|
||||
* devDisconnectInterruptISA etc. devDisconnectInterrupt will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devDisconnectInterrupt(
|
||||
epicsInterruptType intType,
|
||||
unsigned vectorNumber,
|
||||
void (*pFunction)());
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devEnableInterruptLevelVME, devEnableInterruptLevelPCI,
|
||||
* devEnableInterruptLevelISA etc. devEnableInterruptLevel will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devEnableInterruptLevel(epicsInterruptType intType, unsigned level);
|
||||
|
||||
/*
|
||||
* NOTE: this routine has been deprecated. It exits
|
||||
* for backwards compatibility purposes only.
|
||||
*
|
||||
* Please use one of devDisableInterruptLevelVME, devDisableInterruptLevelISA,
|
||||
* devDisableInterruptLevelPCI etc. devDisableInterruptLevel will be removed
|
||||
* in a future release.
|
||||
*/
|
||||
long devDisableInterruptLevel (epicsInterruptType intType, unsigned level);
|
||||
|
||||
|
||||
#endif /* devLib.h*/
|
||||
|
||||
@@ -114,7 +114,8 @@ long vxDevWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValue)
|
||||
*/
|
||||
const struct devLibVirtualOS devLibVirtualOS =
|
||||
{vxDevMapAddr, vxDevReadProbe, vxDevWriteProbe,
|
||||
devConnectInterruptVME, devDisconnectInterruptVME};
|
||||
devConnectInterruptVME, devDisconnectInterruptVME,
|
||||
devEnableInterruptLevelVME, devDisableInterruptLevelVME};
|
||||
|
||||
#define SUCCESS 0
|
||||
|
||||
@@ -185,66 +186,65 @@ long devDisconnectInterruptVME (
|
||||
}
|
||||
|
||||
/*
|
||||
* devEnableInterruptLevel()
|
||||
*
|
||||
* wrapper to minimize driver dependency on vxWorks
|
||||
* enable VME interrupt level
|
||||
*/
|
||||
long devEnableInterruptLevel(
|
||||
epicsInterruptType intType,
|
||||
unsigned level)
|
||||
long devEnableInterruptLevelVME (unsigned level)
|
||||
{
|
||||
int s;
|
||||
|
||||
switch (intType) {
|
||||
case intVME:
|
||||
case intVXI:
|
||||
s = sysIntEnable (level);
|
||||
if(s!=OK){
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
break;
|
||||
case intISA:
|
||||
# if CPU == I80386
|
||||
s = sysIntEnablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
# endif
|
||||
default:
|
||||
return S_dev_uknIntType;
|
||||
s = sysIntEnable (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* devDisableInterruptLevel()
|
||||
*
|
||||
* wrapper to minimize driver dependency on vxWorks
|
||||
* enable ISA interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevel (
|
||||
epicsInterruptType intType,
|
||||
unsigned level)
|
||||
long devEnableInterruptLevelISA (unsigned level)
|
||||
{
|
||||
# if CPU == I80386
|
||||
int s;
|
||||
s = sysIntEnablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
return SUCCESS;
|
||||
# else
|
||||
return S_dev_intEnFail;
|
||||
# endif
|
||||
}
|
||||
|
||||
/*
|
||||
* disable ISA interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelISA (unsigned level)
|
||||
{
|
||||
# if CPU == I80386
|
||||
int s;
|
||||
s = sysIntDisablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
# else
|
||||
return S_dev_intEnFail;
|
||||
# endif
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* disable VME interrupt level
|
||||
*/
|
||||
long devDisableInterruptLevelVME (unsigned level)
|
||||
{
|
||||
int s;
|
||||
|
||||
switch (intType) {
|
||||
case intVME:
|
||||
case intVXI:
|
||||
s = sysIntDisable (level);
|
||||
if(s!=OK){
|
||||
return S_dev_intDissFail;
|
||||
}
|
||||
break;
|
||||
case intISA:
|
||||
# if CPU == I80386
|
||||
s = sysIntDisablePIC (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intEnFail;
|
||||
}
|
||||
# endif
|
||||
default:
|
||||
return S_dev_uknIntType;
|
||||
s = sysIntDisable (level);
|
||||
if (s!=OK) {
|
||||
return S_dev_intDissFail;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
@@ -181,7 +181,7 @@ LOCAL void hpe1368a_init_card(unsigned la, void *pArg)
|
||||
hpe1368a_int_service,
|
||||
la);
|
||||
if(r0 == ERROR){
|
||||
errMessage(S_dev_vxWorksVecInstlFail, NULL);
|
||||
errMessage(S_dev_vecInstlFail, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user