diff --git a/acdx/driver/0001-ACDipole-for-L866.patch b/acdx/driver/0001-ACDipole-for-L866.patch new file mode 100644 index 0000000000000000000000000000000000000000..9eccd8243d70672fde45c71f2598ca8addf2fc21 --- /dev/null +++ b/acdx/driver/0001-ACDipole-for-L866.patch @@ -0,0 +1,313 @@ +From 18021642d3c13a19213647d786c9aa7557e129aa Mon Sep 17 00:00:00 2001 +From: Michel Arruat <michel.arruat@cern.ch> +Date: Fri, 22 May 2015 17:47:34 +0200 +Subject: [PATCH] ACDipole for L866: - Driver: Last fixes done by + Julian to be L866 compliant - Library: change made + by Nicolas Magnin + +Signed-off-by: Michel Arruat <michel.arruat@cern.ch> +--- + acdx/driver/AcdxModule.c | 1 + + acdx/driver/Kbuild | 9 +++----- + acdx/driver/Makefile | 33 ++++++++++++++++++--------- + acdx/driver/ModuleLynxOs.c | 13 ----------- + acdx/driver/acdxdrvr.c | 30 +++++++++++-------------- + acdx/lib/libacdx.c | 8 +++++-- + acdx/lib/libacdx.h | 56 ++++++++++++++++++++++++---------------------- + 7 files changed, 74 insertions(+), 76 deletions(-) + +diff --git a/acdx/driver/AcdxModule.c b/acdx/driver/AcdxModule.c +index 21b14f7..59fd485 100644 +--- a/acdx/driver/AcdxModule.c ++++ b/acdx/driver/AcdxModule.c +@@ -10,6 +10,7 @@ + #include "ModuleLynxOs.c" + #include "EmulateLynxOs.c" + #include "DrvrSpec.c" ++ + #include "acdxdrvr.c" + + /* ===================================================== */ +diff --git a/acdx/driver/Kbuild b/acdx/driver/Kbuild +index d97b1d8..8006185 100644 +--- a/acdx/driver/Kbuild ++++ b/acdx/driver/Kbuild +@@ -1,12 +1,9 @@ +-EXTRA_CFLAGS += \ ++ccflags-y = \ + -Wno-strict-prototypes \ + -DCTR_PCI \ + -DEMULATE_LYNXOS_ON_LINUX \ + -DHARD_FLOAT \ + -mhard-float \ +- -I/acc/src/dsc/drivers/coht/acdx/driver +- +- +-obj-m := acdx.o +-acdx-objs := acdxdrvr.o DrvrSpec.o EmulateLynxOs.o ModuleLynxOs.o ++ -I$(src) + ++obj-m:=AcdxModule.o +diff --git a/acdx/driver/Makefile b/acdx/driver/Makefile +index e6b11a1..4fa25c9 100644 +--- a/acdx/driver/Makefile ++++ b/acdx/driver/Makefile +@@ -1,29 +1,40 @@ +-CPU=L865 +- +-# KVER=2.6.24.7-rt21 +-# KVER=2.6.24.7-rt27 +-# KVER=2.6.29.4-rt15 +-# KVER=2.6.31.6-rt19 +-# KVER=2.6.24.7-rt21 ++CPU=L866 + ++ifeq ($(CPU),L865) + KVER=3.2.43-rt63 ++endif ++ ++ifeq ($(CPU),L866) ++KVER=3.6.11-rt30.25.el6rt.x86_64 ++endif + + KERNELSRC=/acc/sys/$(CPU)/usr/src/kernels/$(KVER) +-OUTPUTDIR=/acc/src/dsc/drivers/coht/acdx/driver/$(CPU)/$(KVER) ++OUTPUTDIR=$(PWD)/$(CPU)/$(KVER) + + CFLAGS=-g -Wall + +-all: driver ++all: driver + driver: modules + +-modules: ++modules: + make -C $(KERNELSRC) M=`pwd` KVER=$(KVER) CPU=$(CPU) modules + mkdir -p $(OUTPUTDIR) + mv *.o *.ko $(OUTPUTDIR) + clean: + rm -f *.o *.a *.pyc *.so $(TESTS) + rm -f *.mod.c +- rm -rf L865 L864 ppc ++ rm -rf $(CPU) L864 ppc + make -C $(KERNELSRC) M=`pwd` clean ++ rm -f ,* *~ *.bak *.BAK .es1* .B* %*% .ec1 .ek1 .*~ core a.out *JNL *.lst \\\#*\\\# .nfs* *% ++ rm -f a.out out 32 64 ++ ++install: ++ @echo "please specify one of {install-lab|install-lhc|install-all}" ++ ++install-all: install-lab install-lhc + ++install-lab: ./$(CPU)/$(KVER)/acdx.ko ++ dsc_install ./$(CPU)/$(KVER)/acdx.ko /acc/dsc/lab/$(CPU)/$(KVER)/acdx; + ++install-lhc: ./$(CPU)/$(KVER)/acdx.ko ++ dsc_install ./$(CPU)/$(KVER)/acdx.ko /acc/dsc/oplhc/$(CPU)/$(KVER)/acdx; +diff --git a/acdx/driver/ModuleLynxOs.c b/acdx/driver/ModuleLynxOs.c +index c36c4a3..de68f17 100644 +--- a/acdx/driver/ModuleLynxOs.c ++++ b/acdx/driver/ModuleLynxOs.c +@@ -28,7 +28,6 @@ + #include <linux/interrupt.h> + #include <linux/version.h> + #include <linux/mutex.h> +-#include <linux/module.h> + + #include <EmulateLynxOs.h> + #include <DrvrSpec.h> +@@ -89,15 +88,6 @@ int res; + return res; + } + +-int LynxIoctl32(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { +-int res; +- +- mutex_lock(&acdx_drvr_mutex); +- res = LynxOsIoctl(inode, filp, cmd, arg); +- mutex_unlock(&acdx_drvr_mutex); +- return res; +-} +- + struct file_operations LynxOs_fops = { + read: LynxOsRead, + write: LynxOsWrite, +@@ -429,6 +419,3 @@ int i; + } + return IRQ_NONE; + } +- +-module_init(LynxOsInstall); +-module_exit(LynxOsUninstall); +diff --git a/acdx/driver/acdxdrvr.c b/acdx/driver/acdxdrvr.c +index a1953d8..c727bdf 100644 +--- a/acdx/driver/acdxdrvr.c ++++ b/acdx/driver/acdxdrvr.c +@@ -72,10 +72,6 @@ static void CancelTimeout(int *t) { + unsigned long ps = 0; + int v; + +-#ifdef EMULATE_LYNXOS_ON_LINUX +- ps = 0; +-#endif +- + disable(ps); + { + if ((v = *t)) { +@@ -236,8 +232,8 @@ char *iod; + } else { + disable(ps); + +- kkprintf("AcdxDrvr: BUS-ERROR: Module:%d Addr:%x Dir:%s Data:%d\n", +- (int) mcon->ModuleIndex+1,(int) &(mmap[j]),iod,(int) uary[i]); ++ kkprintf("AcdxDrvr: BUS-ERROR: Module:%d Addr:%p Dir:%s Data:%d\n", ++ (int) mcon->ModuleIndex+1,&(mmap[j]),iod,(int) uary[i]); + + pseterr(ENXIO); /* No such device or address */ + rval = SYSERR; +@@ -403,7 +399,7 @@ AcdxDrvrInfoTable * info; { /* Driver info table */ + AcdxDrvrWorkingArea *wa; + drm_node_handle handle; + AcdxDrvrModuleContext *mcon; +-unsigned long vadr; ++void *vadr; + int modix, mid, cc; + + int cmd; +@@ -447,23 +443,23 @@ int cmd; + cmd |= 2; + drm_device_write(handle, PCI_RESID_REGS, 1, 0, &cmd); + +- vadr = (int) NULL; +- cc = drm_map_resource(handle,PCI_RESID_BAR0,&vadr); ++ vadr = NULL; ++ cc = drm_map_resource(handle,PCI_RESID_BAR0,(unsigned long *) &vadr); + if ((cc) || (!vadr)) { + cprintf("AcdxDrvrInstall: Can't map memory (BAR0) for ACDX module: %d\n",modix+1); + return((char *) SYSERR); + } + mcon->Local = (unsigned long *) vadr; +- cprintf("AcdxDrvrInstall: BAR0 is mapped to address: 0x%08X\n",(int) vadr); ++ cprintf("AcdxDrvrInstall: BAR0 is mapped to address: %p\n",vadr); + +- vadr = (int) NULL; +- cc = drm_map_resource(handle,PCI_RESID_BAR1,&vadr); ++ vadr = NULL; ++ cc = drm_map_resource(handle,PCI_RESID_BAR1,(unsigned long *) &vadr); + if ((cc) || (!vadr)) { + cprintf("AcdxDrvrInstall: Can't map memory (BAR1) for ACDX module: %d\n",modix+1); + return((char *) SYSERR); + } + mcon->Map = (AcdxDrvrMemoryMap *) vadr; +- cprintf("AcdxDrvrInstall: BAR1 is mapped to address: 0x%08X\n",(int) vadr); ++ cprintf("AcdxDrvrInstall: BAR1 is mapped to address: %p\n",vadr); + + wa->Modules = modix+1; + +@@ -533,12 +529,12 @@ int rcnt, wcnt; /* Readable, Writable byte counts at arg address */ + /* can be read or written to without error. */ + + if (arg != NULL) { +- rcnt = rbounds((int)arg); /* Number of readable bytes without error */ +- wcnt = wbounds((int)arg); /* Number of writable bytes without error */ ++ rcnt = rbounds((unsigned long) arg); /* Number of readable bytes without error */ ++ wcnt = wbounds((unsigned long) arg); /* Number of writable bytes without error */ + if (rcnt < sizeof(long)) { /* We at least need to read one long */ + pid = getpid(); +- cprintf("AcdxDrvrIoctl:Illegal arg-pntr:0x%X ReadCnt:%d(%d) Pid:%d Cmd:%d\n", +- (int) arg,rcnt,sizeof(long),pid,(int) cm); ++ cprintf("AcdxDrvrIoctl:Illegal arg-pntr:%p ReadCnt:%d Pid:%d Cmd:%d\n", ++ arg,rcnt,pid,(int) cm); + pseterr(EINVAL); /* Invalid argument */ + return SYSERR; + } +diff --git a/acdx/lib/libacdx.c b/acdx/lib/libacdx.c +index 3097aa8..f58fe33 100755 +--- a/acdx/lib/libacdx.c ++++ b/acdx/lib/libacdx.c +@@ -182,8 +182,10 @@ AcdxLibCompletion AcdxLibInit() { + + /* ================================================ */ + +-AcdxLibCompletion AcdxLoadFunction(unsigned int f, /* Frequency in Hertz */ +- unsigned int a) { /* Amplitude in Milli-Volts */ ++AcdxLibCompletion AcdxLoadFunction( ++ unsigned int f, /* Frequency in Hertz */ ++ unsigned int a, /* Amplitude in Milli-Volts */ ++ unsigned int ft) { /* ftop in Milli-Seconds */ + + if (AcdxLibInit() == AcdxLibOK) { + +@@ -191,6 +193,8 @@ AcdxLibCompletion AcdxLoadFunction(unsigned int f, /* Frequency in Hertz */ + else freq = 3000; + if (a) ampl = a; + else ampl = 500; ++ if (ft) ftop = ft * 1000; // ft in ms ++ else ftop = 200000; + + SinWave(); + if (PutFunc()) return AcdxLibOK; +diff --git a/acdx/lib/libacdx.h b/acdx/lib/libacdx.h +index be61304..e2df13d 100755 +--- a/acdx/lib/libacdx.h ++++ b/acdx/lib/libacdx.h +@@ -1,27 +1,29 @@ +-/* ================================================ */ +-/* Simply library interface to the AC Dipole system */ +-/* Julian Lewis AB/CO/HT Fri 19th Sept 2008 */ +-/* ================================================ */ +- +-typedef enum { +- AcdxLibOK, +- AcdxLibFAIL +- } AcdxLibCompletion; +- +- +-AcdxLibCompletion AcdxLoadFunction(unsigned int freq, /* Frequency in Hertz */ +- unsigned int ampl); /* Amplitude in Milli-Volts */ +- +-AcdxLibCompletion AcdxArm(); /* Arm */ +- +-AcdxLibCompletion AcdxUnArm(); /* Set Arm bit to 0 */ +- +-int AcdxIsArmed(); /* Returns 1 if ARMED else 0 */ +- +-int AcdxIsBusy(); /* Returns 1 if BUSY else 0 */ +- +-AcdxLibCompletion AcdxAmpOn(); /* Set AmpOn status bit to ON */ +- +-AcdxLibCompletion AcdxAmpOff(); /* Set AmpOn status bit to OFF */ +- +-int AcdxAmpIsOn(); /* Returns value of AmpOn status bit */ ++/* ================================================ */ ++/* Simply library interface to the AC Dipole system */ ++/* Julian Lewis AB/CO/HT Fri 19th Sept 2008 */ ++/* ================================================ */ ++ ++typedef enum { ++ AcdxLibOK, ++ AcdxLibFAIL ++ } AcdxLibCompletion; ++ ++ ++AcdxLibCompletion AcdxLoadFunction( ++ unsigned int freq, /* Frequency in Hertz */ ++ unsigned int ampl, /* Amplitude in Milli-Volts */ ++ unsigned int ftop); /* Flat-Top Width in Milli-Seconds */ ++ ++AcdxLibCompletion AcdxArm(); /* Arm */ ++ ++AcdxLibCompletion AcdxUnArm(); /* Set Arm bit to 0 */ ++ ++int AcdxIsArmed(); /* Returns 1 if ARMED else 0 */ ++ ++int AcdxIsBusy(); /* Returns 1 if BUSY else 0 */ ++ ++AcdxLibCompletion AcdxAmpOn(); /* Set AmpOn status bit to ON */ ++ ++AcdxLibCompletion AcdxAmpOff(); /* Set AmpOn status bit to OFF */ ++ ++int AcdxAmpIsOn(); /* Returns value of AmpOn status bit */ +-- +1.7.11.3 +