Skip to content
Snippets Groups Projects
Commit 4405f1e3 authored by Erik von Reis's avatar Erik von Reis
Browse files

Merge branch 'rfm-global-cleanup' into 'master'

Cleaning up findSharedMemory usage, fixing error checks on the returned...

See merge request cds/advligorts!297
parents db36c609 eb60e3f6
No related branches found
No related tags found
2 merge requests!439RCG 5.0 release fro deb 10,!297Cleaning up findSharedMemory usage, fixing error checks on the returned...
......@@ -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;
}
......@@ -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
......
......@@ -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;
......
......@@ -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
......
#ifndef LIGO_FINDSHAREDMEMORY_H
#define LIGO_FINDSHAREDMEMORY_H
volatile void* findSharedMemory( char* );
volatile void* findSharedMemorySize( char*, int size_mb );
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment