mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 01:58:00 +02:00
Xilinx ctb (#884)
* updated registers, arm64 * compiler set to aarch64 for xilinx server * updated RegisterDefs.h * merge into generate branch and resolving conflicts and adding the xilinx changes to callerspecial and commands.yaml * compiles and can print firmware version (using a different csp0 address) * fixing other servers (gotthard, jungfrau, moench, mythen3) that it returns in case of mapping failure, xilinxctb: added that it checks type, prints proper fw version, checks kernel date, added armprocessor define to use in common places, added specifiers to supress overflow and truncation warnings * added detector ip and mac adddress to the printout * fixed tests and recompiled servers
This commit is contained in:
38
slsDetectorServers/xilinx_ctbDetectorServer/CMakeLists.txt
Normal file
38
slsDetectorServers/xilinx_ctbDetectorServer/CMakeLists.txt
Normal file
@ -0,0 +1,38 @@
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
# Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
add_executable(xilinx_ctbDetectorServer_virtual
|
||||
slsDetectorFunctionList.c
|
||||
../slsDetectorServer/src/slsDetectorServer.c
|
||||
../slsDetectorServer/src/slsDetectorServer_funcs.c
|
||||
../slsDetectorServer/src/communication_funcs.c
|
||||
../slsDetectorServer/src/arm64.c
|
||||
../slsDetectorServer/src/common.c
|
||||
../slsDetectorServer/src/sharedMemory.c
|
||||
../../slsSupportLib/src/md5.c
|
||||
)
|
||||
|
||||
include_directories(
|
||||
../slsDetectorServer/include
|
||||
../../slsSupportLib/include
|
||||
../../slsDetectorSoftware/include/sls/
|
||||
)
|
||||
|
||||
target_include_directories(xilinx_ctbDetectorServer_virtual
|
||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
target_compile_definitions(xilinx_ctbDetectorServer_virtual
|
||||
PUBLIC XILINX_CHIPTESTBOARDD ARMPROCESSOR VIRTUAL STOP_SERVER
|
||||
)
|
||||
|
||||
target_link_libraries(xilinx_ctbDetectorServer_virtual
|
||||
PUBLIC pthread rt slsProjectCSettings
|
||||
)
|
||||
|
||||
set_target_properties(xilinx_ctbDetectorServer_virtual PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||
)
|
||||
|
||||
install(TARGETS xilinx_ctbDetectorServer_virtual
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
47
slsDetectorServers/xilinx_ctbDetectorServer/Makefile
Executable file
47
slsDetectorServers/xilinx_ctbDetectorServer/Makefile
Executable file
@ -0,0 +1,47 @@
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
# Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
current_dir = $(shell pwd)
|
||||
main_inc = ../slsDetectorServer/include/
|
||||
main_src = ../slsDetectorServer/src/
|
||||
support_lib = ../../slsSupportLib/include/
|
||||
det_lib = ../../slsDetectorSoftware/include/sls/
|
||||
md5_dir = ../../slsSupportLib/src/
|
||||
|
||||
CROSS = aarch64-none-linux-gnu-
|
||||
CC = $(CROSS)gcc
|
||||
#TODO: allow these warnings and fix code
|
||||
CFLAGS += -Wall -std=gnu99 -Wno-format-overflow -Wno-format-truncation -DXILINX_CHIPTESTBOARDD -DARMPROCESSOR -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(det_lib) -I$(current_dir) #-DDEBUG1 #-DVERBOSEI #-DVERBOSE
|
||||
#CFLAGS += -Wall -std=gnu99 -DXILINX_CHIPTESTBOARDD -DARMPROCESSOR -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(det_lib) -I$(current_dir) #-DDEBUG1 #-DVERBOSEI #-DVERBOSE
|
||||
LDLIBS += -lm -lrt -pthread
|
||||
PROGS = xilinx_ctbDetectorServer
|
||||
DESTDIR ?= bin
|
||||
INSTMODE = 0777
|
||||
|
||||
SRCS = slsDetectorFunctionList.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)arm64.c $(main_src)common.c $(main_src)/sharedMemory.c $(md5_dir)md5.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
all: clean $(PROGS)
|
||||
version: clean versioning $(PROGS)
|
||||
|
||||
boot: $(OBJS)
|
||||
|
||||
version_branch=$(API_BRANCH)
|
||||
version_name=APIXILINXCTB
|
||||
version_path=slsDetectorServers/xilinx_ctbDetectorServer
|
||||
versioning:
|
||||
cd ../../ && echo $(PWD) && echo `tput setaf 6; ./updateAPIVersion.sh $(version_name) $(version_path) $(version_branch); tput sgr0;`
|
||||
|
||||
|
||||
$(PROGS): $(OBJS)
|
||||
# echo $(OBJS)
|
||||
mkdir -p $(DESTDIR)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
|
||||
mv $(PROGS) $(DESTDIR)
|
||||
rm $(main_src)*.o $(md5_dir)*.o
|
||||
clean:
|
||||
rm -rf $(DESTDIR)/$(PROGS) *.o *.gdb $(main_src)*.o $(md5_dir)*.o
|
||||
|
||||
|
||||
|
416
slsDetectorServers/xilinx_ctbDetectorServer/RegisterDefs.h
Normal file
416
slsDetectorServers/xilinx_ctbDetectorServer/RegisterDefs.h
Normal file
@ -0,0 +1,416 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#pragma once
|
||||
|
||||
#define CTRLREG1 (0x0)
|
||||
|
||||
#define CTR1_OFST (0)
|
||||
#define CTR1_MSK (0xffffffff << CTR1_OFST)
|
||||
|
||||
#define CTRLREG2 (0x4)
|
||||
|
||||
#define CTRL2_OFST (0)
|
||||
#define CTRL2_MSK (0xffffffff << CTRL2_OFST)
|
||||
|
||||
#define STATUSREG1 (0x8)
|
||||
|
||||
#define STATUS1_OFST (0)
|
||||
#define STATUS1_MSK (0xffffffff << STATUS1_OFST)
|
||||
|
||||
#define STATUSREG2 (0xC)
|
||||
|
||||
#define STATUS2_OFST (0)
|
||||
#define STATUS2_MSK (0xffffffff << STATUS2_OFST)
|
||||
|
||||
#define FPGAVERSIONREG (0x10)
|
||||
|
||||
#define COMPDATE_OFST (0)
|
||||
#define COMPDATE_MSK (0x00ffffff << COMPDATE_OFST)
|
||||
#define DETTYPE_OFST (24)
|
||||
#define DETTYPE_MSK (0x000000ff << DETTYPE_OFST)
|
||||
|
||||
#define PKTPACKETLENGTHREG (0x28)
|
||||
|
||||
#define PACKETLENGTH1G_OFST (0)
|
||||
#define PACKETLENGTH1G_MSK (0x0000ffff << PACKETLENGTH1G_OFST)
|
||||
#define PACKETLENGTH10G_OFST (16)
|
||||
#define PACKETLENGTH10G_MSK (0x0000ffff << PACKETLENGTH10G_OFST)
|
||||
|
||||
#define PKTNOPACKETSREG (0x30)
|
||||
|
||||
#define NOPACKETS1G_OFST (0)
|
||||
#define NOPACKETS1G_MSK (0x0000003f << NOPACKETS1G_OFST)
|
||||
#define NOPACKETS10G_OFST (8)
|
||||
#define NOPACKETS10G_MSK (0x0000003f << NOPACKETS10G_OFST)
|
||||
|
||||
#define PKTCTRLREG (0x38)
|
||||
|
||||
#define NSERVERS_OFST (0)
|
||||
#define NSERVERS_MSK (0x0000003f << NSERVERS_OFST)
|
||||
#define SERVERSTART_OFST (6)
|
||||
#define SERVERSTART_MSK (0x0000001f << SERVERSTART_OFST)
|
||||
#define ETHINTERF_OFST (11)
|
||||
#define ETHINTERF_MSK (0x00000001 << ETHINTERF_OFST)
|
||||
|
||||
#define PKTCOORDREG1 (0x40)
|
||||
|
||||
#define COORDX_OFST (0)
|
||||
#define COORDX_MSK (0x0000ffff << COORDX_OFST)
|
||||
#define COORDY_OFST (16)
|
||||
#define COORDY_MSK (0x0000ffff << COORDY_OFST)
|
||||
|
||||
#define PKTCOORDREG2 (0x48)
|
||||
|
||||
#define COORDZ_OFST (0)
|
||||
#define COORDZ_MSK (0x0000ffff << COORDZ_OFST)
|
||||
|
||||
#define FLOWSTATUSREG (0x100)
|
||||
|
||||
#define RSMBUSY_OFST (0)
|
||||
#define RSMBUSY_MSK (0x00000001 << RSMBUSY_OFST)
|
||||
#define RSMTRGWAIT_OFST (3)
|
||||
#define RSMTRGWAIT_MSK (0x00000001 << RSMTRGWAIT_OFST)
|
||||
#define CSMBUSY_OFST (17)
|
||||
#define CSMBUSY_MSK (0x00000001 << CSMBUSY_OFST)
|
||||
|
||||
#define FLOWCONTROLREG (0x108)
|
||||
|
||||
#define STARTF_OFST (0)
|
||||
#define STARTF_MSK (0x00000001 << STARTF_OFST)
|
||||
#define STOPF_OFST (1)
|
||||
#define STOPF_MSK (0x00000001 << STOPF_OFST)
|
||||
#define RSTF_OFST (2)
|
||||
#define RSTF_MSK (0x00000001 << RSTF_OFST)
|
||||
#define SWTRIGGERF_OFST (3)
|
||||
#define SWTRIGGERF_MSK (0x00000001 << SWTRIGGERF_OFST)
|
||||
#define TRIGGERENABLE_OFST (4)
|
||||
#define TRIGGERENABLE_MSK (0x00000001 << TRIGGERENABLE_OFST)
|
||||
|
||||
#define TIMEFROMSTARTOUTREG1 (0x110)
|
||||
|
||||
#define TIMEFROMSTARTOUT1_OFST (0)
|
||||
#define TIMEFROMSTARTOUT1_MSK (0xffffffff << TIMEFROMSTARTOUT1_OFST)
|
||||
|
||||
#define TIMEFROMSTARTOUTREG2 (0x114)
|
||||
|
||||
#define TIMEFROMSTARTOUT2_OFST (0)
|
||||
#define TIMEFROMSTARTOUT2_MSK (0xffffffff << TIMEFROMSTARTOUT2_OFST)
|
||||
|
||||
#define FRAMESFROMSTARTOUTREG1 (0x118)
|
||||
|
||||
#define FRAMESFROMSTARTOUT1_OFST (0)
|
||||
#define FRAMESFROMSTARTOUT1_MSK (0xffffffff << FRAMESFROMSTARTOUT1_OFST)
|
||||
|
||||
#define FRAMESFROMSTARTOUTREG2 (0x11C)
|
||||
|
||||
#define FRAMESFROMSTARTOUT2_OFST (0)
|
||||
#define FRAMESFROMSTARTOUT2_MSK (0xffffffff << FRAMESFROMSTARTOUT2_OFST)
|
||||
|
||||
#define FRAMETIMEOUTREG1 (0x120)
|
||||
|
||||
#define FRAMETIMEOUT1_OFST (0)
|
||||
#define FRAMETIMEOUT1_MSK (0xffffffff << FRAMETIMEOUT1_OFST)
|
||||
|
||||
#define FRAMETIMEOUTREG2 (0x124)
|
||||
|
||||
#define FRAMETIMEOUT2_OFST (0)
|
||||
#define FRAMETIMEOUT2_MSK (0xffffffff << FRAMETIMEOUT2_OFST)
|
||||
|
||||
#define DELAYOUTREG1 (0x128)
|
||||
|
||||
#define DELAYOUT1_OFST (0)
|
||||
#define DELAYOUT1_MSK (0xffffffff << DELAYOUT1_OFST)
|
||||
|
||||
#define DELAYOUTREG2 (0x12C)
|
||||
|
||||
#define DELAYOUT2_OFST (0)
|
||||
#define DELAYOUT2_MSK (0xffffffff << DELAYOUT2_OFST)
|
||||
|
||||
#define CYCLESOUTREG1 (0x130)
|
||||
|
||||
#define CYCLESOUT1_OFST (0)
|
||||
#define CYCLESOUT1_MSK (0xffffffff << CYCLESOUT1_OFST)
|
||||
|
||||
#define CYCLESOUTREG2 (0x134)
|
||||
|
||||
#define CYCLESOUT2_OFST (0)
|
||||
#define CYCLESOUT2_MSK (0xffffffff << CYCLESOUT2_OFST)
|
||||
|
||||
#define FRAMESOUTREG1 (0x138)
|
||||
|
||||
#define FRAMESOUT1_OFST (0)
|
||||
#define FRAMESOUT1_MSK (0xffffffff << FRAMESOUT1_OFST)
|
||||
|
||||
#define FRAMESOUTREG2 (0x13C)
|
||||
|
||||
#define FRAMESOUT2_OFST (0)
|
||||
#define FRAMESOUT2_MSK (0xffffffff << FRAMESOUT2_OFST)
|
||||
|
||||
#define PERIODOUTREG1 (0x140)
|
||||
|
||||
#define PERIODOUT1_OFST (0)
|
||||
#define PERIODOUT1_MSK (0xffffffff << PERIODOUT1_OFST)
|
||||
|
||||
#define PERIODOUTREG2 (0x144)
|
||||
|
||||
#define PERIODOUT2_OFST (0)
|
||||
#define PERIODOUT2_MSK (0xffffffff << PERIODOUT2_OFST)
|
||||
|
||||
#define DELAYINREG1 (0x148)
|
||||
|
||||
#define DELAYIN1_OFST (0)
|
||||
#define DELAYIN1_MSK (0xffffffff << DELAYIN1_OFST)
|
||||
|
||||
#define DELAYINREG2 (0x14C)
|
||||
|
||||
#define DELAYIN2_OFST (0)
|
||||
#define DELAYIN2_MSK (0xffffffff << DELAYIN2_OFST)
|
||||
|
||||
#define CYCLESINREG1 (0x150)
|
||||
|
||||
#define CYCLESIN1_OFST (0)
|
||||
#define CYCLESIN1_MSK (0xffffffff << CYCLESIN1_OFST)
|
||||
|
||||
#define CYCLESINREG2 (0x154)
|
||||
|
||||
#define CYCLESIN2_OFST (0)
|
||||
#define CYCLESIN2_MSK (0xffffffff << CYCLESIN2_OFST)
|
||||
|
||||
#define FRAMESINREG1 (0x158)
|
||||
|
||||
#define FRAMESIN1_OFST (0)
|
||||
#define FRAMESIN1_MSK (0xffffffff << FRAMESIN1_OFST)
|
||||
|
||||
#define FRAMESINREG2 (0x15C)
|
||||
|
||||
#define FRAMESIN2_OFST (0)
|
||||
#define FRAMESIN2_MSK (0xffffffff << FRAMESIN2_OFST)
|
||||
|
||||
#define PERIODINREG1 (0x160)
|
||||
|
||||
#define PERIODIN1_OFST (0)
|
||||
#define PERIODIN1_MSK (0xffffffff << PERIODIN1_OFST)
|
||||
|
||||
#define PERIODINREG2 (0x164)
|
||||
|
||||
#define PERIODIN2_OFST (0)
|
||||
#define PERIODIN2_MSK (0xffffffff << PERIODIN2_OFST)
|
||||
|
||||
#define PATTERNOUTREG0 (0x200)
|
||||
|
||||
#define PATTERNOUT0_OFST (0)
|
||||
#define PATTERNOUT0_MSK (0xffffffff << PATTERNOUT0_OFST)
|
||||
|
||||
#define PATTERNOUTREG1 (0x204)
|
||||
|
||||
#define PATTERNOUT1_OFST (0)
|
||||
#define PATTERNOUT1_MSK (0xffffffff << PATTERNOUT1_OFST)
|
||||
|
||||
#define PATTERNINREG0 (0x208)
|
||||
|
||||
#define PATTERNIN0_OFST (0)
|
||||
#define PATTERNIN0_MSK (0xffffffff << PATTERNIN0_OFST)
|
||||
|
||||
#define PATTERNINREG1 (0x20C)
|
||||
|
||||
#define PATTERNIN1_OFST (0)
|
||||
#define PATTERNIN1_MSK (0xffffffff << PATTERNIN1_OFST)
|
||||
|
||||
#define PATTERNIOMASKREG0 (0x210)
|
||||
|
||||
#define PATTERNIOMASK0_OFST (0)
|
||||
#define PATTERNIOMASK0_MSK (0xffffffff << PATTERNIOMASK0_OFST)
|
||||
|
||||
#define PATTERNIOMASKREG1 (0x214)
|
||||
|
||||
#define PATTERNIOMASK1_OFST (0)
|
||||
#define PATTERNIOMASK1_MSK (0xffffffff << PATTERNIOMASK1_OFST)
|
||||
|
||||
#define PATTERNIOSETREG0 (0x218)
|
||||
|
||||
#define PATTERNIOSET0_OFST (0)
|
||||
#define PATTERNIOSET0_MSK (0xffffffff << PATTERNIOSET0_OFST)
|
||||
|
||||
#define PATTERNIOSETREG1 (0x21C)
|
||||
|
||||
#define PATTERNIOSET1_OFST (0)
|
||||
#define PATTERNIOSET1_MSK (0xffffffff << PATTERNIOSET1_OFST)
|
||||
|
||||
#define PATTERNCONTROLREG (0x220)
|
||||
|
||||
#define PATTERNWRBIT_OFST (0)
|
||||
#define PATTERNWRBIT_MSK (0x00000001 << PATTERNWRBIT_OFST)
|
||||
#define PATTERNRDBIT_OFST (1)
|
||||
#define PATTERNRDBIT_MSK (0x00000001 << PATTERNRDBIT_OFST)
|
||||
#define PATTERNADDRESSPTR_OFST (16)
|
||||
#define PATTERNADDRESSPTR_MSK (0x00001fff << PATTERNADDRESSPTR_OFST)
|
||||
|
||||
#define PATTERNLIMITADDRESSREG (0x228)
|
||||
|
||||
#define PATTERNLIMITADDRESS_OFST (0)
|
||||
#define PATTERNLIMITADDRESS_MSK (0xffffffff << PATTERNLIMITADDRESS_OFST)
|
||||
|
||||
#define PATTERNLOOP1ADDRESSREG (0x230)
|
||||
|
||||
#define PATTERNLOOP1ADDRESS_OFST (0)
|
||||
#define PATTERNLOOP1ADDRESS_MSK (0xffffffff << PATTERNLOOP1ADDRESS_OFST)
|
||||
|
||||
#define PATTERNNLOOPS1REG (0x238)
|
||||
|
||||
#define PATTERNNLOOPS1_OFST (0)
|
||||
#define PATTERNNLOOPS1_MSK (0xffffffff << PATTERNNLOOPS1_OFST)
|
||||
|
||||
#define PATTERNWAIT1ADDRESSREG (0x240)
|
||||
|
||||
#define PATTERNWAIT1ADDRESS_OFST (0)
|
||||
#define PATTERNWAIT1ADDRESS_MSK (0xffffffff << PATTERNWAIT1ADDRESS_OFST)
|
||||
|
||||
#define PATTERNWAIT1TIMEREG1 (0x248)
|
||||
|
||||
#define PATTERNWAIT1TIME1_OFST (0)
|
||||
#define PATTERNWAIT1TIME1_MSK (0xffffffff << PATTERNWAIT1TIME1_OFST)
|
||||
|
||||
#define PATTERNWAIT1TIMEREG2 (0x24C)
|
||||
|
||||
#define PATTERNWAIT1TIME2_OFST (0)
|
||||
#define PATTERNWAIT1TIME2_MSK (0xffffffff << PATTERNWAIT1TIME2_OFST)
|
||||
|
||||
#define PATTERNLOOP2ADDRESSREG (0x250)
|
||||
|
||||
#define PATTERNLOOP2ADDRESS_OFST (0)
|
||||
#define PATTERNLOOP2ADDRESS_MSK (0xffffffff << PATTERNLOOP2ADDRESS_OFST)
|
||||
|
||||
#define PATTERNNLOOPS2REG (0x258)
|
||||
|
||||
#define PATTERNNLOOPS2_OFST (0)
|
||||
#define PATTERNNLOOPS2_MSK (0xffffffff << PATTERNNLOOPS2_OFST)
|
||||
|
||||
#define PATTERNWAIT2ADDRESSREG (0x260)
|
||||
|
||||
#define PATTERNWAIT2ADDRESS_OFST (0)
|
||||
#define PATTERNWAIT2ADDRESS_MSK (0xffffffff << PATTERNWAIT2ADDRESS_OFST)
|
||||
|
||||
#define PATTERNWAIT2TIMEREG1 (0x268)
|
||||
|
||||
#define PATTERNWAIT2TIME1_OFST (0)
|
||||
#define PATTERNWAIT2TIME1_MSK (0xffffffff << PATTERNWAIT2TIME1_OFST)
|
||||
|
||||
#define PATTERNWAIT2TIMEREG2 (0x26C)
|
||||
|
||||
#define PATTERNWAIT2TIME2_OFST (0)
|
||||
#define PATTERNWAIT2TIME2_MSK (0xffffffff << PATTERNWAIT2TIME2_OFST)
|
||||
|
||||
#define PATTERNLOOP3ADDRESSREG (0x270)
|
||||
|
||||
#define PATTERNLOOP3ADDRESS_OFST (0)
|
||||
#define PATTERNLOOP3ADDRESS_MSK (0xffffffff << PATTERNLOOP3ADDRESS_OFST)
|
||||
|
||||
#define PATTERNNLOOPS3REG (0x278)
|
||||
|
||||
#define PATTERNNLOOPS3_OFST (0)
|
||||
#define PATTERNNLOOPS3_MSK (0xffffffff << PATTERNNLOOPS3_OFST)
|
||||
|
||||
#define PATTERNWAIT3ADDRESSREG (0x280)
|
||||
|
||||
#define PATTERNWAIT3ADDRESS_OFST (0)
|
||||
#define PATTERNWAIT3ADDRESS_MSK (0xffffffff << PATTERNWAIT3ADDRESS_OFST)
|
||||
|
||||
#define PATTERNWAIT3TIMEREG1 (0x288)
|
||||
|
||||
#define PATTERNWAIT3TIME1_OFST (0)
|
||||
#define PATTERNWAIT3TIME1_MSK (0xffffffff << PATTERNWAIT3TIME1_OFST)
|
||||
|
||||
#define PATTERNWAIT3TIMEREG2 (0x28C)
|
||||
|
||||
#define PATTERNWAIT3TIME2_OFST (0)
|
||||
#define PATTERNWAIT3TIME2_MSK (0xffffffff << PATTERNWAIT3TIME2_OFST)
|
||||
|
||||
#define PATTERNLOOP4ADDRESSREG (0x290)
|
||||
|
||||
#define PATTERNLOOP4ADDRESS_OFST (0)
|
||||
#define PATTERNLOOP4ADDRESS_MSK (0xffffffff << PATTERNLOOP4ADDRESS_OFST)
|
||||
|
||||
#define PATTERNNLOOPS4REG (0x298)
|
||||
|
||||
#define PATTERNNLOOPS4_OFST (0)
|
||||
#define PATTERNNLOOPS4_MSK (0xffffffff << PATTERNNLOOPS4_OFST)
|
||||
|
||||
#define PATTERNWAIT4ADDRESSREG (0x300)
|
||||
|
||||
#define PATTERNWAIT4ADDRESS_OFST (0)
|
||||
#define PATTERNWAIT4ADDRESS_MSK (0xffffffff << PATTERNWAIT4ADDRESS_OFST)
|
||||
|
||||
#define PATTERNWAIT4TIMEREG1 (0x308)
|
||||
|
||||
#define PATTERNWAI4TIME1_OFST (0)
|
||||
#define PATTERNWAI4TIME1_MSK (0xffffffff << PATTERNWAI4TIME1_OFST)
|
||||
|
||||
#define PATTERNWAIT4TIMEREG2 (0x30C)
|
||||
|
||||
#define PATTERNWAIT4TIME2_OFST (0)
|
||||
#define PATTERNWAIT4TIME2_MSK (0xffffffff << PATTERNWAIT4TIME2_OFST)
|
||||
|
||||
#define PATTERNLOOP5ADDRESSREG (0x310)
|
||||
|
||||
#define PATTERNLOOP5ADDRESS_OFST (0)
|
||||
#define PATTERNLOOP5ADDRESS_MSK (0xffffffff << PATTERNLOOP5ADDRESS_OFST)
|
||||
|
||||
#define PATTERNNLOOPS5REG (0x318)
|
||||
|
||||
#define PATTERNNLOOPS5_OFST (0)
|
||||
#define PATTERNNLOOPS5_MSK (0xffffffff << PATTERNNLOOPS5_OFST)
|
||||
|
||||
#define PATTERNWAIT5ADDRESSREG (0x320)
|
||||
|
||||
#define PATTERNWAIT5ADDRESS_OFST (0)
|
||||
#define PATTERNWAIT5ADDRESS_MSK (0xffffffff << PATTERNWAIT5ADDRESS_OFST)
|
||||
|
||||
#define PATTERNWAIT5TIMEREG1 (0x328)
|
||||
|
||||
#define PATTERNWAIT5TIME1_OFST (0)
|
||||
#define PATTERNWAIT5TIME1_MSK (0xffffffff << PATTERNWAIT5TIME1_OFST)
|
||||
|
||||
#define PATTERNWAIT5TIMEREG2 (0x32C)
|
||||
|
||||
#define PATTERNWAIT5TIME2_OFST (0)
|
||||
#define PATTERNWAIT5TIME2_MSK (0xffffffff << PATTERNWAIT5TIME2_OFST)
|
||||
|
||||
#define PATTERNLOOP6ADDRESSREG (0x330)
|
||||
|
||||
#define PATTERNLOOP6ADDRESS_OFST (0)
|
||||
#define PATTERNLOOP6ADDRESS_MSK (0xffffffff << PATTERNLOOP6ADDRESS_OFST)
|
||||
|
||||
#define PATTERNNLOOPS6REG (0x338)
|
||||
|
||||
#define PATTERNNLOOPS6_OFST (0)
|
||||
#define PATTERNNLOOPS6_MSK (0xffffffff << PATTERNNLOOPS6_OFST)
|
||||
|
||||
#define PATTERNWAIT6ADDRESSREG (0x340)
|
||||
|
||||
#define PATTERNWAIT6ADDRESS_OFST (0)
|
||||
#define PATTERNWAIT6ADDRESS_MSK (0xffffffff << PATTERNWAIT6ADDRESS_OFST)
|
||||
|
||||
#define PATTERNWAIT6TIMEREG1 (0x348)
|
||||
|
||||
#define PATTERNWAIT6TIME1_OFST (0)
|
||||
#define PATTERNWAIT6TIME1_MSK (0xffffffff << PATTERNWAIT6TIME1_OFST)
|
||||
|
||||
#define PATTERNWAIT6TIMEREG2 (0x34C)
|
||||
|
||||
#define PATTERNWAIT6TIME2_OFST (0)
|
||||
#define PATTERNWAIT6TIME2_MSK (0xffffffff << PATTERNWAIT6TIME2_OFST)
|
||||
|
||||
#define EXPCTRLREG (0x400)
|
||||
|
||||
#define STARTP_OFST (0)
|
||||
#define STARTP_MSK (0x00000001 << STARTP_OFST)
|
||||
|
||||
#define EXPFRAMESREG (0x408)
|
||||
|
||||
#define NOFRAMES_OFST (0)
|
||||
#define NOFRAMES_MSK (0xffffffff << NOFRAMES_OFST)
|
||||
|
||||
#define EXPTIMEREG (0x410)
|
||||
|
||||
#define EXPTIME_OFST (0)
|
||||
#define EXPTIME_MSK (0xffffffff << EXPTIME_OFST)
|
Binary file not shown.
@ -0,0 +1,211 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#include "slsDetectorFunctionList.h"
|
||||
#include "arm64.h"
|
||||
#include "clogger.h"
|
||||
#include "common.h"
|
||||
#include "sharedMemory.h"
|
||||
#include "sls/versionAPI.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <unistd.h> // usleep
|
||||
#include <arpa/inet.h> // INET_ADDRSTRLEN
|
||||
|
||||
|
||||
// Global variable from slsDetectorServer_funcs
|
||||
extern int debugflag;
|
||||
extern int updateFlag;
|
||||
extern const enum detectorType myDetectorType;
|
||||
|
||||
// Global variable from communication_funcs.c
|
||||
extern int isControlServer;
|
||||
|
||||
int initError = OK;
|
||||
int initCheckDone = 0;
|
||||
char initErrorMessage[MAX_STR_LENGTH];
|
||||
|
||||
int detPos[2] = {0, 0};
|
||||
|
||||
int isInitCheckDone() { return initCheckDone; }
|
||||
|
||||
int getInitResult(char **mess) {
|
||||
*mess = initErrorMessage;
|
||||
return initError;
|
||||
}
|
||||
|
||||
void basictests() {
|
||||
initError = OK;
|
||||
initCheckDone = 0;
|
||||
memset(initErrorMessage, 0, MAX_STR_LENGTH);
|
||||
#ifdef VIRTUAL
|
||||
LOG(logINFOBLUE, ("****** Xilinx Chip Test Board Virtual Server ******\n"));
|
||||
#else
|
||||
LOG(logINFOBLUE, ("********** Xilinx Chip Test Board Server **********\n"));
|
||||
#endif
|
||||
if (mapCSP0() == FAIL) {
|
||||
strcpy(initErrorMessage,
|
||||
"Could not map to memory. Cannot proceed. Check Firmware.\n");
|
||||
LOG(logERROR, (initErrorMessage));
|
||||
initError = FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef VIRTUAL
|
||||
/*if ((!debugflag) && (!updateFlag) &&
|
||||
((validateKernelVersion(KERNEL_DATE_VRSN) == FAIL) ||
|
||||
(checkType() == FAIL) || (testFpga() == FAIL) ||
|
||||
(testBus() == FAIL))) {*/
|
||||
if ((!debugflag) && (!updateFlag) &&
|
||||
((validateKernelVersion(KERNEL_DATE_VRSN) == FAIL) ||
|
||||
(checkType() == FAIL) /*|| (testFpga() == FAIL) ||
|
||||
(testBus() == FAIL)*/)) {
|
||||
sprintf(initErrorMessage,
|
||||
"Could not pass basic tests of FPGA and bus. Cannot proceed. "
|
||||
"Check Firmware. (Firmware version:0x%lx) \n",
|
||||
getFirmwareVersion());
|
||||
LOG(logERROR, ("%s\n\n", initErrorMessage));
|
||||
initError = FAIL;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
uint32_t ipadd = getDetectorIP();
|
||||
uint64_t macadd = getDetectorMAC();
|
||||
int64_t fwversion = getFirmwareVersion();
|
||||
char swversion[MAX_STR_LENGTH] = {0};
|
||||
memset(swversion, 0, MAX_STR_LENGTH);
|
||||
getServerVersion(swversion);
|
||||
uint32_t requiredFirmwareVersion = REQRD_FRMWRE_VRSN;
|
||||
|
||||
LOG(logINFOBLUE,
|
||||
("**************************************************\n"
|
||||
"Detector IP Addr:\t\t 0x%x\n"
|
||||
"Detector MAC Addr:\t\t 0x%lx\n\n"
|
||||
|
||||
"Firmware Version:\t\t 0x%lx\n"
|
||||
"Software Version:\t\t %s\n"
|
||||
"Required Firmware Version:\t 0x%x\n"
|
||||
"********************************************************\n",
|
||||
ipadd, macadd, fwversion, swversion, requiredFirmwareVersion));
|
||||
}
|
||||
|
||||
int checkType() {
|
||||
#ifdef VIRTUAL
|
||||
return OK;
|
||||
#endif
|
||||
u_int32_t type =
|
||||
((bus_r(FPGAVERSIONREG) & DETTYPE_MSK) >> DETTYPE_OFST);
|
||||
if (type != XILINX_CHIPTESTBOARD) {
|
||||
LOG(logERROR,
|
||||
("This is not a Xilinx CTB firmware (read %d, expected %d)\n", type,
|
||||
XILINX_CHIPTESTBOARD));
|
||||
return FAIL;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
/* Ids */
|
||||
|
||||
void getServerVersion(char *version) { strcpy(version, APIXILINXCTB); }
|
||||
|
||||
uint64_t getFirmwareVersion() {
|
||||
#ifdef VIRTUAL
|
||||
return REQRD_FRMWRE_VRSN;
|
||||
#endif
|
||||
return ((bus_r(FPGAVERSIONREG) & COMPDATE_MSK) >> COMPDATE_OFST);
|
||||
}
|
||||
|
||||
u_int64_t getDetectorMAC() {
|
||||
#ifdef VIRTUAL
|
||||
return 0;
|
||||
#else
|
||||
char output[255], mac[255] = "";
|
||||
u_int64_t res = 0;
|
||||
FILE *sysFile =
|
||||
popen("ifconfig eth0 | grep ether | awk '{ print $2 }'", "r");
|
||||
fgets(output, sizeof(output), sysFile);
|
||||
pclose(sysFile);
|
||||
// getting rid of ":"
|
||||
char *pch;
|
||||
pch = strtok(output, ":");
|
||||
while (pch != NULL) {
|
||||
strcat(mac, pch);
|
||||
pch = strtok(NULL, ":");
|
||||
}
|
||||
sscanf(mac, "%lx", &res);
|
||||
return res;
|
||||
#endif
|
||||
}
|
||||
|
||||
u_int32_t getDetectorIP() {
|
||||
#ifdef VIRTUAL
|
||||
return 0;
|
||||
#endif
|
||||
char temp[INET_ADDRSTRLEN] = "";
|
||||
u_int32_t res = 0;
|
||||
// execute and get address
|
||||
char output[255];
|
||||
FILE *sysFile = popen(
|
||||
"ifconfig | grep 'inet '| grep -v '127.0.0.1' | awk '{ print $2 }'",
|
||||
"r");
|
||||
fgets(output, sizeof(output), sysFile);
|
||||
pclose(sysFile);
|
||||
|
||||
// converting IPaddress to hex.
|
||||
char *pcword = strtok(output, ".");
|
||||
while (pcword != NULL) {
|
||||
sprintf(output, "%02x", atoi(pcword));
|
||||
strcat(temp, output);
|
||||
pcword = strtok(NULL, ".");
|
||||
}
|
||||
strcpy(output, temp);
|
||||
sscanf(output, "%x", &res);
|
||||
// LOG(logINFO, ("ip:%x\n",res);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/* initialization */
|
||||
|
||||
void initControlServer() {
|
||||
if (!updateFlag && initError == OK) {
|
||||
setupDetector();
|
||||
}
|
||||
initCheckDone = 1;
|
||||
}
|
||||
|
||||
void initStopServer() {
|
||||
if (!updateFlag && initError == OK) {
|
||||
usleep(CTRL_SRVR_INIT_TIME_US);
|
||||
if (mapCSP0() == FAIL) {
|
||||
initError = FAIL;
|
||||
strcpy(initErrorMessage,
|
||||
"Stop Server: Map Fail. Cannot proceed. Check Firmware.\n");
|
||||
LOG(logERROR, (initErrorMessage));
|
||||
initCheckDone = 1;
|
||||
return;
|
||||
}
|
||||
#ifdef VIRTUAL
|
||||
sharedMemory_setStop(0);
|
||||
#endif
|
||||
}
|
||||
initCheckDone = 1;
|
||||
}
|
||||
|
||||
/* set up detector */
|
||||
|
||||
void setupDetector() {
|
||||
LOG(logINFO, ("This Server is for 1 Xilinx Chip Test Board\n"));
|
||||
#ifdef VIRTUAL
|
||||
sharedMemory_setStatus(IDLE);
|
||||
#endif
|
||||
LOG(logINFO, ("Goodbye...\n"));
|
||||
}
|
||||
|
||||
int setDetectorPosition(int pos[]) {
|
||||
memcpy(detPos, pos, sizeof(detPos));
|
||||
return OK;
|
||||
}
|
||||
|
||||
int *getDetectorPosition() { return detPos; }
|
||||
|
||||
int getNumberofUDPInterfaces() { return 1; }
|
@ -0,0 +1,18 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#pragma once
|
||||
#include "RegisterDefs.h"
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
#define REQRD_FRMWRE_VRSN (0x230000)
|
||||
#define KERNEL_DATE_VRSN "Wed Nov 29 17:32:14 CET 2023"
|
||||
|
||||
#define LINKED_SERVER_NAME "xilinx_ctbDetectorServer"
|
||||
|
||||
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
||||
|
||||
/* Hardware Definitions */
|
||||
#define NCHAN (1)
|
||||
|
||||
enum ADCINDEX { V_PWR_IO };
|
||||
enum DACINDEX { D0 };
|
Reference in New Issue
Block a user