diff --git a/src/drv/rfm.c b/src/drv/rfm.c index e1da4b7834b75105b18cf7a3092c1aeb0dcf2cde..415e914977b2635838eec4350bc2973047319d17 100644 --- a/src/drv/rfm.c +++ b/src/drv/rfm.c @@ -18,8 +18,8 @@ #include "mbuf/mbuf.h" -/// Pointer to start of shared memory segment for a selected system. -volatile unsigned char *addr = 0; +#include "findSharedMemory.h" + /// Search shared memory device file names in /rtl_mem_* /// @param[in] *sys_name Name of system, required to attach shared memory. @@ -27,71 +27,45 @@ volatile unsigned char *addr = 0; volatile void * findSharedMemory(char *sys_name) { - char *s; - int fd; - char sys[128]; - char fname[128]; - strcpy(sys, sys_name); - for(s = sys; *s; s++) *s=tolower(*s); - - sprintf(fname, "/rtl_mem_%s", sys); - - int ss = 64*1024*1024; - if (!strcmp(sys_name, "ipc")) ss = 32*1024*1024; - if (!strcmp(sys_name, "shmipc")) ss = 16*1024*1024; + int ss_mb = 64; + if (!strcmp(sys_name, "ipc")) ss_mb = 32; + if (!strcmp(sys_name, "shmipc")) ss_mb = 16; - if ((fd = open ("/dev/mbuf", O_RDWR | O_SYNC)) < 0) { - fprintf(stderr, "Couldn't open /dev/mbuf read/write\n"); - return 0; - } - struct mbuf_request_struct req; - req.size = ss; - strcpy(req.name, sys); - ioctl (fd, IOCTL_MBUF_ALLOCATE, &req); - ioctl (fd, IOCTL_MBUF_INFO, &req); - - addr = (volatile unsigned char *)mmap(0, ss, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (addr == MAP_FAILED) { - printf("return was %d\n",errno); - perror("mmap"); - _exit(-1); - } - printf(" %s mmapped address is 0x%lx\n", sys,(long)addr); - return addr; + return findSharedMemorySize(sys_name, ss_mb); } volatile void * -findSharedMemorySize(char *sys_name, int size) +findSharedMemorySize(char *sys_name, int size_mb) { - char *s; - int fd; - char sys[128]; - char fname[128]; - strcpy(sys, sys_name); - for(s = sys; *s; s++) *s=tolower(*s); + volatile unsigned char *addr = 0; + char *s; + int fd; + char sys[128]; + strcpy(sys, sys_name); + for(s = sys; *s; s++) *s=tolower(*s); + + + int size_bytes = size_mb*1024*1024; + printf("Making mbuff area %s with size %d\n", sys, size_bytes); - sprintf(fname, "/rtl_mem_%s", sys); + if ((fd = open ("/dev/mbuf", O_RDWR | O_SYNC)) < 0) { + fprintf(stderr, "Couldn't open /dev/mbuf read/write\n"); + return 0; + } - int ss = size*1024*1024; - printf("Making mbuff area %s with size %d\n",sys,ss); + struct mbuf_request_struct req; + req.size = size_bytes; + strcpy(req.name, sys); + ioctl (fd, IOCTL_MBUF_ALLOCATE, &req); + ioctl (fd, IOCTL_MBUF_INFO, &req); - if ((fd = open ("/dev/mbuf", O_RDWR | O_SYNC)) < 0) { - fprintf(stderr, "Couldn't open /dev/mbuf read/write\n"); - return 0; - } - struct mbuf_request_struct req; - req.size = ss; - strcpy(req.name, sys); - ioctl (fd, IOCTL_MBUF_ALLOCATE, &req); - ioctl (fd, IOCTL_MBUF_INFO, &req); - - addr = (volatile unsigned char *)mmap(0, ss, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (addr == MAP_FAILED) { - printf("return was %d\n",errno); - perror("mmap"); - _exit(-1); - } - printf(" %s mmapped address is 0x%lx\n", sys,(long)addr); - return addr; + addr = (volatile unsigned char *)mmap(0, size_bytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) { + printf("return was %d\n", errno); + perror("mmap"); + _exit(-1); + } + printf(" %s mmapped address is 0x%lx\n", sys, (long)addr); + return addr; } diff --git a/src/fe/rcguser.c b/src/fe/rcguser.c index 1a72d91965e7ae1c13e6060f066f5f21667e3b8e..ecf8e3c6e5f6ef2cd3ce53d7e2d86fa8f93f30ec 100644 --- a/src/fe/rcguser.c +++ b/src/fe/rcguser.c @@ -29,7 +29,6 @@ // These externs and "16" need to go to a header file (mbuf.h) extern int fe_start_app_user( ); extern char daqArea[ DAQ_DCU_SIZE ]; // Space allocation for daqLib buffers -extern char* addr; /// Startup function for initialization of user space module. int diff --git a/src/fe/rcguserCommon.c b/src/fe/rcguserCommon.c index a342b74ccad60dc53c056ff9fe85e7c20acd3912..0aeaefe6de38b9d2fee5504e695cc60804a2b890 100644 --- a/src/fe/rcguserCommon.c +++ b/src/fe/rcguserCommon.c @@ -18,13 +18,11 @@ attach_shared_memory( char* sysname ) { char shm_name[ 64 ]; - extern char* addr; // epics shm used to communicate with model's EPICS process sprintf( shm_name, "%s", sysname ); - findSharedMemory( sysname ); - _epics_shm = (char*)addr; - if ( _epics_shm < 0 ) + _epics_shm = (char*) findSharedMemory( sysname ); + if ( _epics_shm == NULL ) { printf( "mbuf_allocate_area() failed; ret = %d\n", _epics_shm ); return -1; @@ -33,9 +31,8 @@ attach_shared_memory( char* sysname ) // testpoint config shm used to control testpoints from awgtpman sprintf( shm_name, "%s%s", sysname, SHMEM_TESTPOINT_SUFFIX ); - findSharedMemory( sysname ); - _tp_shm = (volatile TESTPOINT_CFG *)addr; - if ( (uint64_t)_tp_shm < 0 ) + _tp_shm = (volatile TESTPOINT_CFG *) findSharedMemory( sysname ); + if ( _tp_shm == NULL ) { printf( "mbuf_allocate_area(tp) failed; ret = %d\n", _tp_shm ); return -1; @@ -44,9 +41,8 @@ attach_shared_memory( char* sysname ) // awg data shm used to stream data from awgtpman sprintf( shm_name, "%s%s", sysname, SHMEM_AWG_SUFFIX ); - findSharedMemory( sysname ); - _awg_shm = (volatile AWG_DATA *)addr; - if ( (uint64_t)_awg_shm < 0 ) + _awg_shm = (volatile AWG_DATA *) findSharedMemory( sysname ); + if ( _awg_shm == NULL ) { printf( "mbuf_allocate_area(awg) failed; ret = %d\n", _awg_shm ); return -1; @@ -54,9 +50,8 @@ attach_shared_memory( char* sysname ) printf( "AWGSM at 0x%lx\n", (long)_awg_shm ); // ipc_shm used to communicate with IOP - findSharedMemory( "ipc" ); - _ipc_shm = (char*)addr; - if ( _ipc_shm < 0 ) + _ipc_shm = (char*)findSharedMemory( "ipc" ); + if ( _ipc_shm == NULL ) { printf( "mbuf_allocate_area(ipc) failed; ret = %d\n", _ipc_shm ); return -1; @@ -69,9 +64,8 @@ attach_shared_memory( char* sysname ) // DAQ is via shared memory sprintf( shm_name, "%s_daq", sysname ); - findSharedMemory( shm_name ); - _daq_shm = (char*)addr; - if ( _daq_shm < 0 ) + _daq_shm = (char*) findSharedMemory( shm_name ); + if ( _daq_shm == NULL ) { printf( "mbuf_allocate_area() failed; ret = %d\n", _daq_shm ); return -1; @@ -80,18 +74,16 @@ attach_shared_memory( char* sysname ) daqPtr = (struct rmIpcStr*)_daq_shm; // shmipc is used to send SHMEM IPC data between processes on same computer - findSharedMemory( "shmipc" ); - _shmipc_shm = (char*)addr; - if ( _shmipc_shm < 0 ) + _shmipc_shm = (char*) findSharedMemory( "shmipc" ); + if ( _shmipc_shm == NULL ) { printf( "mbuf_allocate_area() failed; ret = %d\n", _shmipc_shm ); return -1; } // Open new IO shared memory in support of no hardware I/O - findSharedMemory( "virtual_io_space" ); - _io_shm = (char*)addr; - if ( _io_shm < 0 ) + _io_shm = (char*) findSharedMemory( "virtual_io_space" ); + if ( _io_shm == NULL ) { printf( "mbuf_allocate_area() failed; ret = %d\n", _io_shm ); return -1; diff --git a/src/fe/rcguserIop.c b/src/fe/rcguserIop.c index 5805bfadea87c8e262010e17b11e6abf521391c9..84913bc10619c38e15b159729f2c560a4b0d713c 100644 --- a/src/fe/rcguserIop.c +++ b/src/fe/rcguserIop.c @@ -22,7 +22,6 @@ // These externs and "16" need to go to a header file (mbuf.h) extern int fe_start_iop_user( ); extern char daqArea[ DAQ_DCU_SIZE ]; // Space allocation for daqLib buffers -extern char* addr; extern int cycleOffset; // Scan a double diff --git a/src/include/findSharedMemory.h b/src/include/findSharedMemory.h index 5cd330459bc116d3937f47c15b5b8547016c5e5a..f4ae974a4364252b64630c3609aefdcc37bba274 100644 --- a/src/include/findSharedMemory.h +++ b/src/include/findSharedMemory.h @@ -1 +1,7 @@ +#ifndef LIGO_FINDSHAREDMEMORY_H +#define LIGO_FINDSHAREDMEMORY_H + volatile void* findSharedMemory( char* ); +volatile void* findSharedMemorySize( char*, int size_mb ); + +#endif