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:
2024-01-04 17:10:16 +01:00
committed by GitHub
parent 4f4125a3b2
commit 9738cb7d74
35 changed files with 1602 additions and 316 deletions

View File

@ -0,0 +1,10 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#pragma once
#include <inttypes.h>
#include <sys/types.h>
int mapCSP0(void);
void bus_w(u_int32_t offset, u_int32_t data);
u_int32_t bus_r(u_int32_t offset);

View File

@ -25,6 +25,10 @@
#include "blackfin.h"
#endif
#ifdef ARMPROCESSOR
#include "arm64.h"
#endif
#ifdef MYTHEN3D
#include "mythen3.h"
#endif
@ -61,9 +65,10 @@ typedef struct udpStruct_s {
int isInitCheckDone();
int getInitResult(char **mess);
void basictests();
int checkType();
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
int checkType();
int testFpga();
int testBus();
#endif
@ -81,13 +86,17 @@ u_int64_t getFirmwareVersion();
#ifdef EIGERD
uint64_t getFrontEndFirmwareVersion(enum fpgaPosition fpgaPosition);
#endif
#ifndef XILINX_CHIPTESTBOARDD
u_int64_t getFirmwareAPIVersion();
void getHardwareVersion(char *version);
#endif
#ifdef EIGERD
int getHardwareVersionNumber();
#else
#ifndef XILINX_CHIPTESTBOARDD
u_int16_t getHardwareVersionNumber();
#endif
#endif
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD)
u_int16_t getHardwareSerialNumber();
#endif
@ -111,7 +120,6 @@ int updateModuleId();
void setModuleId(int modid);
#endif
#endif
u_int64_t getDetectorMAC();
u_int32_t getDetectorIP();
@ -136,7 +144,7 @@ int updateDatabytesandAllocateRAM();
void updateDataBytes();
#endif
#ifndef CHIPTESTBOARDD
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD)
int resetToDefaultDacs(int hardReset);
int getDefaultDac(enum DACINDEX index, enum detectorSettings sett, int *retval);
int setDefaultDac(enum DACINDEX index, enum detectorSettings sett, int value);
@ -191,8 +199,10 @@ void setMasterSlaveConfiguration();
#endif
// parameters - dr, roi
#ifndef XILINX_CHIPTESTBOARDD
int setDynamicRange(int dr);
int getDynamicRange(int *retval);
#endif
#ifdef GOTTHARDD
int setROI(ROI arg);
ROI getROI();
@ -241,6 +251,7 @@ int getMaxStoragecellStart();
int setNextFrameNumber(uint64_t value);
int getNextFrameNumber(uint64_t *value);
#endif
#ifndef XILINX_CHIPTESTBOARDD
void setNumFrames(int64_t val);
int64_t getNumFrames();
void setNumTriggers(int64_t val);
@ -251,6 +262,7 @@ int64_t getExpTime();
#endif
int setPeriod(int64_t val);
int64_t getPeriod();
#endif
#ifdef MYTHEN3D
void setNumIntGates(int val);
void setNumGates(int val);
@ -337,10 +349,12 @@ int setTrimbits(int *trimbits);
int setAllTrimbits(int val);
int getAllTrimbits();
#endif
#ifndef XILINX_CHIPTESTBOARDD
#ifndef CHIPTESTBOARDD
enum detectorSettings setSettings(enum detectorSettings sett);
#endif
enum detectorSettings getSettings();
#endif
#if defined(JUNGFRAUD)
enum gainMode getGainMode();
void setGainMode(enum gainMode mode);
@ -366,10 +380,14 @@ void setDAC(enum DACINDEX ind, int val, int mV, int counterEnableCheck);
void setGeneralDAC(enum DACINDEX ind, int val, int mV);
void setVthDac(int index, int enable);
#else
#ifndef XILINX_CHIPTESTBOARDD
void setDAC(enum DACINDEX ind, int val, int mV);
#endif
#endif
#ifndef XILINX_CHIPTESTBOARDD
int getDAC(enum DACINDEX ind, int mV);
int getMaxDacSteps();
#endif
#if defined(CHIPTESTBOARDD)
int dacToVoltage(int dac);
int checkVLimitCompliant(int mV);
@ -394,14 +412,17 @@ void powerOff();
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
int getADC(enum ADCINDEX ind, int *value);
#else
#ifndef XILINX_CHIPTESTBOARDD
int getADC(enum ADCINDEX ind);
#endif
#endif
#ifdef CHIPTESTBOARDD
int getSlowADC(int ichan);
int getSlowADCTemperature();
#endif
#ifndef XILINX_CHIPTESTBOARDD
int setHighVoltage(int val);
#endif
// parameters - timing, extsig
#if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD) || \
@ -426,8 +447,10 @@ void setSynchronization(int enable);
void updatingRegisters();
int updateClockDivs();
#endif
#ifndef XILINX_CHIPTESTBOARDD
void setTiming(enum timingMode arg);
enum timingMode getTiming();
#endif
#ifdef MYTHEN3D
void setInitialExtSignals();
int setChipStatusRegister(int csr);
@ -478,7 +501,9 @@ void calcChecksum(udp_header *udp);
int getAdcConfigured();
#endif
#ifndef XILINX_CHIPTESTBOARDD
int configureMAC();
#endif
int setDetectorPosition(int pos[]);
int *getDetectorPosition();
@ -674,11 +699,13 @@ int setTransmissionDelayRight(int value);
#endif
// aquisition
#ifndef XILINX_CHIPTESTBOARDD
int startStateMachine();
#ifdef VIRTUAL
void *start_timer(void *arg);
#endif
int stopStateMachine();
#endif
#ifdef MYTHEN3D
int softwareTrigger();
#endif
@ -688,12 +715,16 @@ int softwareTrigger(int block);
#if defined(EIGERD) || defined(MYTHEN3D) || defined(CHIPTESTBOARDD)
int startReadOut();
#endif
#ifndef XILINX_CHIPTESTBOARDD
enum runStatus getRunStatus();
#endif
#ifdef EIGERD
void waitForAcquisitionEnd(int *ret, char *mess);
#else
#ifndef XILINX_CHIPTESTBOARDD
void waitForAcquisitionEnd();
#endif
#endif
#if defined(CHIPTESTBOARDD)
int validateUDPSocket();
void readandSendUDPFrames();
@ -714,6 +745,7 @@ u_int32_t runState(enum TLogLevel lev);
#endif
// common
#ifndef XILINX_CHIPTESTBOARDD
int calculateDataBytes();
int getTotalNumberOfChannels();
#if defined(CHIPTESTBOARDD)
@ -722,3 +754,4 @@ void getNumberOfChannels(int *nchanx, int *nchany);
int getNumberOfChips();
int getNumberOfDACs();
int getNumberOfChannelsPerChip();
#endif

View File

@ -0,0 +1,75 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#include "arm64.h"
#include "RegisterDefs.h"
#include "clogger.h"
#include "common.h"
#include "sls/ansi.h"
#include "sls/sls_detector_defs.h"
#include <fcntl.h> // open
#include <sys/mman.h> // mmap
/* global variables */
#define CSP0 (0xB0010000)/// 0xB008_0000
#define MEM_SIZE 0x100000
u_int32_t *csp0base = 0;
void bus_w(u_int32_t offset, u_int32_t data) {
volatile u_int32_t *ptr1;
ptr1 = (u_int32_t *)(csp0base + offset / (sizeof(u_int32_t)));
*ptr1 = data;
}
u_int32_t bus_r(u_int32_t offset) {
volatile u_int32_t *ptr1;
ptr1 = (u_int32_t *)(csp0base + offset / (sizeof(u_int32_t)));
return *ptr1;
}
uint64_t getU64BitReg(int aLSB, int aMSB) {
uint64_t retval = bus_r(aMSB);
retval = (retval << 32) | bus_r(aLSB);
return retval;
}
void setU64BitReg(uint64_t value, int aLSB, int aMSB) {
bus_w(aLSB, value & (0xffffffff));
bus_w(aMSB, (value >> 32) & (0xffffffff));
}
int mapCSP0(void) {
// if not mapped
if (csp0base == 0) {
LOG(logINFO, ("Mapping memory\n"));
#ifdef VIRTUAL
csp0base = malloc(MEM_SIZE);
if (csp0base == NULL) {
LOG(logERROR, ("Could not allocate virtual memory.\n"));
return FAIL;
}
LOG(logINFO, ("memory allocated\n"));
#else
int fd;
fd = open("/dev/mem", O_RDWR | O_SYNC, 0);
if (fd == -1) {
LOG(logERROR, ("Can't find /dev/mem\n"));
return FAIL;
}
LOG(logDEBUG1, ("/dev/mem opened\n"));
csp0base = (u_int32_t*)mmap(0, MEM_SIZE, PROT_READ | PROT_WRITE,
MAP_FILE | MAP_SHARED, fd, CSP0);
if (csp0base == MAP_FAILED) {
LOG(logERROR, ("Can't map memmory area\n"));
return FAIL;
}
#endif
LOG(logINFO, ("csp0base mapped from %p to %p\n", csp0base,
(csp0base + MEM_SIZE)));
} else
LOG(logINFO, ("Memory already mapped before\n"));
return OK;
}

View File

@ -114,6 +114,10 @@ int getTimeFromString(char *buf, time_t *result) {
t.tm_mday, t.tm_mon, t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec));
*result = mktime(&t);
if (*result == -1) {
LOG(logERROR, ("Could not convert time structure to time_t\n"));
return FAIL;
}
return OK;
}
@ -130,6 +134,7 @@ int getKernelVersion(char *retvals) {
return OK;
}
int validateKernelVersion(char *expectedVersion) {
// extract kernel date string
char version[255] = {0};
@ -143,15 +148,26 @@ int validateKernelVersion(char *expectedVersion) {
#ifdef VIRTUAL
strcpy(currentVersion, expectedVersion);
#else
#ifndef ARMPROCESSOR
// remove first word (#version number)
const char *ptr = strchr(version, ' ');
const char *ptr = strstr(version, " ");
if (ptr == NULL) {
LOG(logERROR, ("Could not parse kernel version\n"));
return FAIL;
}
strcpy(currentVersion, version + (ptr - version + 1));
strcpy(currentVersion, ptr + 1);
#else
// remove first two words (#version number and SMP)
const char *ptr = strstr(version, "SMP ");
if (ptr == NULL) {
LOG(logERROR, ("Could not parse kernel version\n"));
return FAIL;
}
strcpy(currentVersion, ptr + 4);
#endif
#endif
currentVersion[sizeof(currentVersion) - 1] = '\0';
// convert kernel date string into time
time_t kernelDate;
if (getTimeFromString(currentVersion, &kernelDate) == FAIL) {
@ -159,6 +175,7 @@ int validateKernelVersion(char *expectedVersion) {
("Could not parse retrieved kernel date, %s\n", currentVersion));
return FAIL;
}
LOG(logDEBUG, ("Kernel Date: [%s]\n", ctime(&kernelDate)));
// convert expected date into time
time_t expDate;
@ -167,11 +184,12 @@ int validateKernelVersion(char *expectedVersion) {
("Could not parse expected kernel date, %s\n", expectedVersion));
return FAIL;
}
LOG(logDEBUG, ("Expected Date: [%s]\n", ctime(&expDate)));
// compare if kernel time is older than expected time
if (kernelDate < expDate) {
LOG(logERROR, ("Kernel Version Incompatible (too old)! Expected: [%s], "
"Got [%s]\n",
LOG(logERROR, ("Kernel Version Incompatible (too old)!\nExpected: '%s'"
"\nGot : '%s'\n",
expectedVersion, currentVersion));
return FAIL;
}

View File

@ -33,6 +33,8 @@ const enum detectorType myDetectorType = MOENCH;
const enum detectorType myDetectorType = MYTHEN3;
#elif GOTTHARD2D
const enum detectorType myDetectorType = GOTTHARD2;
#elif XILINX_CHIPTESTBOARDD
const enum detectorType myDetectorType = XILINX_CHIPTESTBOARD;
#else
const enum detectorType myDetectorType = GENERIC;
#endif
@ -717,6 +719,9 @@ int set_timing_mode(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting external communication mode to %d\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// set
if (((int)arg != GET_FLAG) && (Server_VerifyLock() == OK)) {
switch (arg) {
@ -753,7 +758,7 @@ int set_timing_mode(int file_des) {
validate(&ret, mess, (int)arg, (int)retval, "set timing mode", DEC);
#endif
LOG(logDEBUG1, ("Timing Mode: %d\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -787,7 +792,7 @@ int get_serial_number(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int64_t retval = -1;
#ifdef EIGERD
#if defined(EIGERD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
retval = getDetectorNumber();
@ -1119,6 +1124,8 @@ enum DACINDEX getDACIndex(enum dacIndex ind) {
case IBIAS_SFP:
serverDacIndex = MO_IBIAS_SFP;
break;
#elif XILINX_CHIPTESTBOARDD
#endif
default:
@ -1137,8 +1144,9 @@ enum DACINDEX getDACIndex(enum dacIndex ind) {
int validateAndSetDac(enum dacIndex ind, int val, int mV) {
int retval = -1;
enum DACINDEX serverDacIndex = 0;
#ifndef XILINX_CHIPTESTBOARDD
enum DACINDEX serverDacIndex = 0;
// valid enums
switch (ind) {
case HIGH_VOLTAGE:
@ -1389,6 +1397,7 @@ int validateAndSetDac(enum dacIndex ind, int val, int mV) {
#endif
break;
}
#endif
return retval;
}
@ -1401,6 +1410,9 @@ int set_dac(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
enum dacIndex ind = args[0];
int mV = args[1];
int val = args[2];
@ -1411,6 +1423,7 @@ int set_dac(int file_des) {
if ((val == GET_FLAG) || (Server_VerifyLock() == OK)) {
retval = validateAndSetDac(ind, val, mV);
}
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -1423,6 +1436,9 @@ int get_adc(int file_des) {
if (receiveData(file_des, &ind, sizeof(ind), INT32) < 0)
return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
enum ADCINDEX serverAdcIndex = 0;
// get
@ -1544,6 +1560,7 @@ int get_adc(int file_des) {
LOG(logDEBUG1, ("ADC(%d): %d\n", serverAdcIndex, retval));
#endif
}
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -1560,6 +1577,9 @@ int write_register(int file_des) {
uint32_t val = args[1];
LOG(logDEBUG1, ("Writing to register 0x%x, data 0x%x\n", addr, val));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
#ifdef GOTTHARDD
@ -1594,6 +1614,7 @@ int write_register(int file_des) {
}
LOG(logDEBUG1, ("Write register (0x%x): 0x%x\n", retval));
}
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -1608,6 +1629,10 @@ int read_register(int file_des) {
LOG(logDEBUG1, ("Reading from register 0x%x\n", addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get
#ifdef GOTTHARDD
retval = readRegister16And32(addr);
@ -1624,7 +1649,7 @@ int read_register(int file_des) {
retval = readRegister(addr);
#endif
LOG(logINFO, ("Read register (0x%x): 0x%x\n", addr, retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -1828,7 +1853,7 @@ int set_settings(int file_des) {
if (receiveData(file_des, &isett, sizeof(isett), INT32) < 0)
return printSocketReadError();
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
LOG(logDEBUG1, ("Setting settings %d\n", isett));
@ -1905,6 +1930,9 @@ int acquire(int blocking, int file_des) {
} else {
LOG(logINFOBLUE, ("Unblocking Acquisition\n"));
}
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
#if defined(JUNGFRAUD)
@ -2003,10 +2031,12 @@ int acquire(int blocking, int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
void *start_state_machine(void *arg) {
#ifndef XILINX_CHIPTESTBOARDD
int *blocking = (int *)arg;
int times = 1;
// start of scan
@ -2132,6 +2162,7 @@ void *start_state_machine(void *arg) {
if (scan && sharedMemory_getScanStatus() != ERROR) {
sharedMemory_setScanStatus(IDLE);
}
#endif
return NULL;
}
@ -2149,6 +2180,9 @@ int stop_acquisition(int file_des) {
memset(mess, 0, sizeof(mess));
LOG(logDEBUG1, ("Stopping Acquisition\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
ret = stopStateMachine();
@ -2158,6 +2192,7 @@ int stop_acquisition(int file_des) {
}
LOG(logDEBUG1, ("Stopping Acquisition ret: %d\n", ret));
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -2167,9 +2202,13 @@ int get_run_status(int file_des) {
enum runStatus retval = ERROR;
LOG(logDEBUG1, ("Getting status\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only get
retval = getRunStatus();
LOG(logDEBUG1, ("Status: %d\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -2180,6 +2219,9 @@ int get_num_frames(int file_des) {
memset(mess, 0, sizeof(mess));
int64_t retval = -1;
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
if (!scan) {
retval = getNumFrames();
@ -2189,6 +2231,7 @@ int get_num_frames(int file_des) {
LOG(logDEBUG1, ("retval num frames (num scan steps) %lld\n",
(long long int)retval));
}
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -2201,6 +2244,9 @@ int set_num_frames(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting number of frames %lld\n", (long long int)arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
// only set number of frames if normal mode (not scan)
@ -2246,6 +2292,7 @@ int set_num_frames(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT64, NULL, 0);
}
@ -2254,9 +2301,13 @@ int get_num_triggers(int file_des) {
memset(mess, 0, sizeof(mess));
int64_t retval = -1;
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = getNumTriggers();
LOG(logDEBUG1, ("retval num triggers %lld\n", (long long int)retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -2269,6 +2320,9 @@ int set_num_triggers(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting number of triggers %lld\n", (long long int)arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
#if JUNGFRAUD
@ -2288,6 +2342,7 @@ int set_num_triggers(int file_des) {
validate64(&ret, mess, arg, retval, "set number of triggers", DEC);
}
}
#endif
return Server_SendResult(file_des, INT64, NULL, 0);
}
@ -2447,6 +2502,9 @@ int get_exptime(int file_des) {
if (receiveData(file_des, &gateIndex, sizeof(gateIndex), INT32) < 0)
return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
#ifdef MYTHEN3D
if (gateIndex < 0 || gateIndex > 2) {
@ -2470,6 +2528,7 @@ int get_exptime(int file_des) {
retval = getExpTime();
LOG(logDEBUG1, ("retval exptime %lld ns\n", (long long int)retval));
}
#endif
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -2486,6 +2545,9 @@ int set_exptime(int file_des) {
LOG(logDEBUG1, ("Setting exptime %lld ns (gateIndex:%d)\n",
(long long int)val, gateIndex));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
#ifdef MYTHEN3D
@ -2550,6 +2612,7 @@ int set_exptime(int file_des) {
}
#endif
}
#endif
return Server_SendResult(file_des, INT64, NULL, 0);
}
@ -2558,9 +2621,13 @@ int get_period(int file_des) {
memset(mess, 0, sizeof(mess));
int64_t retval = -1;
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = getPeriod();
LOG(logDEBUG1, ("retval period %lld ns\n", (long long int)retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -2573,6 +2640,9 @@ int set_period(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting period %lld ns\n", (long long int)arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
ret = setPeriod(arg);
@ -2584,6 +2654,7 @@ int set_period(int file_des) {
LOG(logERROR, (mess));
}
}
#endif
return Server_SendResult(file_des, INT64, NULL, 0);
}
@ -2991,6 +3062,9 @@ int set_dynamic_range(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting dr to %d\n", dr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// set & get
if ((dr == GET_FLAG) || (Server_VerifyLock() == OK)) {
// check dr
@ -3039,6 +3113,7 @@ int set_dynamic_range(int file_des) {
break;
}
}
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -3153,7 +3228,7 @@ int enable_ten_giga(int file_des) {
LOG(logDEBUG, ("Setting 10GbE: %d\n", arg));
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARDD) || \
defined(GOTTHARD2D)
defined(GOTTHARD2D) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
// set & get
@ -4322,7 +4397,7 @@ int reboot_controller(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
#ifdef EIGERD
#if defined(EIGERD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#elif VIRTUAL
ret = GOODBYE;
@ -4951,6 +5026,9 @@ int set_detector_position(int file_des) {
LOG(logDEBUG, ("Setting detector positions: [maxy:%u, modIndex:%u]\n",
args[0], args[1]));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
// if in update mode, there is no need to do this (also detector not set
@ -4961,10 +5039,14 @@ int set_detector_position(int file_des) {
calculate_and_set_position();
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
int check_detector_idle(const char *s) {
#ifdef XILINX_CHIPTESTBOARDD
return FAIL;
#else
enum runStatus status = getRunStatus();
if (status != IDLE && status != RUN_FINISHED && status != STOPPED &&
status != ERROR) {
@ -4976,6 +5058,7 @@ int check_detector_idle(const char *s) {
LOG(logERROR, (mess));
}
return ret;
#endif
}
int is_udp_configured() {
@ -5042,6 +5125,7 @@ int is_udp_configured() {
}
void configure_mac() {
#ifndef XILINX_CHIPTESTBOARDD
if (isControlServer) {
if (is_udp_configured() == OK) {
ret = configureMAC();
@ -5068,6 +5152,7 @@ void configure_mac() {
}
configured = FAIL;
LOG(logWARNING, ("Configure FAIL, not all parameters configured yet\n"));
#endif
}
int set_source_udp_ip(int file_des) {
@ -5080,6 +5165,9 @@ int set_source_udp_ip(int file_des) {
arg = __builtin_bswap32(arg);
LOG(logINFO, ("Setting udp source ip: 0x%x\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) {
@ -5092,6 +5180,7 @@ int set_source_udp_ip(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -5101,11 +5190,14 @@ int get_source_udp_ip(int file_des) {
uint32_t retval = -1;
LOG(logDEBUG1, ("Getting udp source ip\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = udpDetails[0].srcip;
retval = __builtin_bswap32(retval);
LOG(logDEBUG1, ("udp soure ip retval: 0x%x\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -5165,6 +5257,9 @@ int set_dest_udp_ip(int file_des) {
arg = __builtin_bswap32(arg);
LOG(logINFO, ("Setting udp destination ip: 0x%x\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) {
@ -5174,6 +5269,7 @@ int set_dest_udp_ip(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -5183,11 +5279,14 @@ int get_dest_udp_ip(int file_des) {
uint32_t retval = -1;
LOG(logDEBUG1, ("Getting destination ip\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = udpDetails[0].dstip;
retval = __builtin_bswap32(retval);
LOG(logDEBUG1, ("udp destination ip retval: 0x%x\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -5243,6 +5342,9 @@ int set_source_udp_mac(int file_des) {
return printSocketReadError();
LOG(logINFO, ("Setting udp source mac: 0x%lx\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) {
@ -5264,6 +5366,7 @@ int set_source_udp_mac(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT64, NULL, 0);
}
@ -5272,11 +5375,13 @@ int get_source_udp_mac(int file_des) {
memset(mess, 0, sizeof(mess));
uint64_t retval = -1;
LOG(logDEBUG1, ("Getting udp source mac\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = udpDetails[0].srcmac;
LOG(logDEBUG1, ("udp soure mac retval: 0x%lx\n", retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -5333,6 +5438,9 @@ int set_dest_udp_mac(int file_des) {
return printSocketReadError();
LOG(logINFO, ("Setting udp destination mac: 0x%lx\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) {
@ -5342,6 +5450,7 @@ int set_dest_udp_mac(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT64, NULL, 0);
}
@ -5350,11 +5459,13 @@ int get_dest_udp_mac(int file_des) {
memset(mess, 0, sizeof(mess));
uint64_t retval = -1;
LOG(logDEBUG1, ("Getting udp destination mac\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = udpDetails[0].dstmac;
LOG(logDEBUG1, ("udp destination mac retval: 0x%lx\n", retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -5408,6 +5519,9 @@ int set_dest_udp_port(int file_des) {
return printSocketReadError();
LOG(logINFO, ("Setting udp destination port: %hu\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) {
@ -5417,6 +5531,7 @@ int set_dest_udp_port(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT16, NULL, 0);
}
@ -5425,11 +5540,13 @@ int get_dest_udp_port(int file_des) {
memset(mess, 0, sizeof(mess));
uint16_t retval = -1;
LOG(logDEBUG1, ("Getting destination port"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = udpDetails[0].dstport;
LOG(logDEBUG, ("udp destination port retval: %hu\n", retval));
#endif
return Server_SendResult(file_des, INT16, &retval, sizeof(retval));
}
@ -5485,7 +5602,8 @@ int set_num_interfaces(int file_des) {
return printSocketReadError();
LOG(logINFO, ("Setting number of interfaces: %d\n", arg));
#if !defined(JUNGFRAUD) && !defined(MOENCHD) && !defined(GOTTHARD2D)
#if !defined(JUNGFRAUD) && !defined(MOENCHD) && !defined(GOTTHARD2D) && \
!defined(XLINX_CHIPTESTBOARDD)
// fixed number of udp interfaces
int num_interfaces = getNumberofUDPInterfaces();
if (arg != num_interfaces) {
@ -5557,7 +5675,6 @@ int get_num_interfaces(int file_des) {
// get only
retval = getNumberofUDPInterfaces();
LOG(logDEBUG1, ("Number of udp interfaces retval: %u\n", retval));
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@ -7020,6 +7137,10 @@ int get_receiver_parameters(int file_des) {
memset(mess, 0, sizeof(mess));
LOG(logDEBUG1, ("Getting receiver parameters\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
Server_SendResult(file_des, INT32, NULL, 0);
#else
// get only
Server_SendResult(file_des, INT32, NULL, 0);
@ -7477,7 +7598,7 @@ int get_receiver_parameters(int file_des) {
return printSocketReadError();
LOG(logINFO, ("Sent %d bytes for receiver parameters\n", n));
#endif
return OK;
}
@ -7819,6 +7940,9 @@ int set_scan(int file_des) {
if (receiveData(file_des, &dacTime, sizeof(dacTime), INT64) < 0)
return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
int enable = args[0];
@ -7908,6 +8032,7 @@ int set_scan(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
}
@ -8265,6 +8390,9 @@ int reconfigure_udp(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
if (Server_VerifyLock() == OK) {
LOG(logINFO, ("Reconfiguring UDP\n"));
if (check_detector_idle("configure mac") == OK) {
@ -8277,6 +8405,7 @@ int reconfigure_udp(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -8377,7 +8506,7 @@ int reset_to_default_dacs(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Resetting dacs to defaults (hard reset: %d)\n", arg));
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
if (Server_VerifyLock() == OK) {
@ -8792,7 +8921,7 @@ int get_default_dac(int file_des) {
LOG(logDEBUG1,
("Getting default dac [dacindex:%d, settings: %d]\n", dacindex, sett));
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
// get only
@ -8832,7 +8961,7 @@ int set_default_dac(int file_des) {
LOG(logDEBUG1, ("Setting default dac [dacindex: %d, settings: %d] to %d\n",
(int)dacindex, (int)sett, value));
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
// only set
@ -9452,6 +9581,11 @@ int clear_all_udp_dst(int file_des) {
memset(mess, 0, sizeof(mess));
LOG(logINFO, ("Clearing all udp destinations\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
if (Server_VerifyLock() == OK) {
if (check_detector_idle("clear all udp destinations") == OK) {
memset(udpDetails, 0, sizeof(udpDetails));
@ -9479,6 +9613,7 @@ int clear_all_udp_dst(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -9618,7 +9753,9 @@ int get_kernel_version(int file_des) {
memset(retvals, 0, MAX_STR_LENGTH);
LOG(logDEBUG1, ("Getting kernel version\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
ret = getKernelVersion(retvals);
if (ret == FAIL) {
@ -9631,13 +9768,14 @@ int get_kernel_version(int file_des) {
} else {
LOG(logDEBUG1, ("kernel version: [%s]\n", retvals));
}
#endif
return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals));
}
int update_kernel(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
#ifdef EIGERD
#if defined(EIGERD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
return Server_SendResult(file_des, INT32, NULL, 0);
#else
@ -9689,7 +9827,8 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) {
LOG(logINFO, ("\tServer Name: %s\n", serverName));
}
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD)
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) && \
!defined(XILINX_CHIPTESTBOARDD)
int forceDeleteNormalFile = 0;
if (receiveData(file_des, &forceDeleteNormalFile,
sizeof(forceDeleteNormalFile), INT32) < 0)
@ -9725,7 +9864,8 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) {
}
if (ret == OK) {
#if defined(GOTTHARD2D) || defined(MYTHEN3D) || defined(EIGERD)
#if defined(GOTTHARD2D) || defined(MYTHEN3D) || defined(EIGERD) || \
defined(XILINX_CHIPTESTBOARDD)
receive_program_default(file_des, index, functionType, filesize,
checksum, serverName);
#else
@ -9871,7 +10011,8 @@ void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index,
void receive_program_default(int file_des, enum PROGRAM_INDEX index,
char *functionType, uint64_t filesize,
char *checksum, char *serverName) {
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD)
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) && \
!defined(XILINX_CHIPTESTBOARDD)
ret = FAIL;
sprintf(mess,
"Could not %s. program via blackfin not implmented for this "
@ -10389,8 +10530,12 @@ int get_hardware_version(int file_des) {
memset(mess, 0, sizeof(mess));
char retvals[MAX_STR_LENGTH];
memset(retvals, 0, MAX_STR_LENGTH);
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
getHardwareVersion(retvals);
LOG(logDEBUG1, ("hardware version retval: %s\n", retvals));
#endif
return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals));
}
@ -10443,6 +10588,10 @@ int set_bit(int file_des) {
int nBit = (int)args[1];
LOG(logDEBUG1, ("Setting bit %d of reg 0x%x\n", nBit, addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (nBit < 0 || nBit > 31) {
@ -10473,6 +10622,7 @@ int set_bit(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -10487,6 +10637,9 @@ int clear_bit(int file_des) {
int nBit = (int)args[1];
LOG(logDEBUG1, ("Clearing bit %d of reg 0x%x\n", nBit, addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if (nBit < 0 || nBit > 31) {
@ -10517,6 +10670,7 @@ int clear_bit(int file_des) {
}
}
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}
@ -10532,6 +10686,9 @@ int get_bit(int file_des) {
int nBit = (int)args[1];
LOG(logDEBUG1, ("Getting bit %d of reg 0x%x\n", nBit, addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
if (nBit < 0 || nBit > 31) {
ret = FAIL;
sprintf(mess,
@ -10556,6 +10713,7 @@ int get_bit(int file_des) {
LOG(logDEBUG1, ("regval: 0x%x bit value:0%d\n", regval, retval));
#endif
}
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}