Skip to content
Snippets Groups Projects
Commit 475c2b70 authored by Ezekiel Dohmen's avatar Ezekiel Dohmen
Browse files

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

Cleaning up findSharedMemory usage, fixing error checks on the returned pointer, consolidating code for findSharedMemory() and findSharedMemorySize() so we don't have duplicate, removing unused sprintf in both functions
parent b81646e4
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,6 @@ ...@@ -18,8 +18,6 @@
#include "mbuf/mbuf.h" #include "mbuf/mbuf.h"
/// Pointer to start of shared memory segment for a selected system.
volatile unsigned char *addr = 0;
/// Search shared memory device file names in /rtl_mem_* /// Search shared memory device file names in /rtl_mem_*
/// @param[in] *sys_name Name of system, required to attach shared memory. /// @param[in] *sys_name Name of system, required to attach shared memory.
...@@ -27,71 +25,45 @@ volatile unsigned char *addr = 0; ...@@ -27,71 +25,45 @@ volatile unsigned char *addr = 0;
volatile void * volatile void *
findSharedMemory(char *sys_name) findSharedMemory(char *sys_name)
{ {
char *s; int ss_mb = 64;
int fd; if (!strcmp(sys_name, "ipc")) ss_mb = 32;
char sys[128]; if (!strcmp(sys_name, "shmipc")) ss_mb = 16;
char fname[128];
strcpy(sys, sys_name);
for(s = sys; *s; s++) *s=tolower(*s);
sprintf(fname, "/rtl_mem_%s", sys); return findSharedMemorySize(sys_name, ss_mb);
int ss = 64*1024*1024;
if (!strcmp(sys_name, "ipc")) ss = 32*1024*1024;
if (!strcmp(sys_name, "shmipc")) ss = 16*1024*1024;
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;
} }
volatile void * volatile void *
findSharedMemorySize(char *sys_name, int size) findSharedMemorySize(char *sys_name, int size_mb)
{ {
char *s; volatile unsigned char *addr = 0;
int fd; char *s;
char sys[128]; int fd;
char fname[128]; char sys[128];
strcpy(sys, sys_name); strcpy(sys, sys_name);
for(s = sys; *s; s++) *s=tolower(*s); 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; struct mbuf_request_struct req;
printf("Making mbuff area %s with size %d\n",sys,ss); 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) { addr = (volatile unsigned char *)mmap(0, size_bytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
fprintf(stderr, "Couldn't open /dev/mbuf read/write\n"); if (addr == MAP_FAILED) {
return 0; printf("return was %d\n", errno);
} perror("mmap");
struct mbuf_request_struct req; _exit(-1);
req.size = ss; }
strcpy(req.name, sys); printf(" %s mmapped address is 0x%lx\n", sys, (long)addr);
ioctl (fd, IOCTL_MBUF_ALLOCATE, &req); return addr;
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;
} }
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
// These externs and "16" need to go to a header file (mbuf.h) // These externs and "16" need to go to a header file (mbuf.h)
extern int fe_start_app_user( ); extern int fe_start_app_user( );
extern char daqArea[ DAQ_DCU_SIZE ]; // Space allocation for daqLib buffers extern char daqArea[ DAQ_DCU_SIZE ]; // Space allocation for daqLib buffers
extern char* addr;
/// Startup function for initialization of user space module. /// Startup function for initialization of user space module.
int int
......
...@@ -18,13 +18,11 @@ attach_shared_memory( char* sysname ) ...@@ -18,13 +18,11 @@ attach_shared_memory( char* sysname )
{ {
char shm_name[ 64 ]; char shm_name[ 64 ];
extern char* addr;
// epics shm used to communicate with model's EPICS process // epics shm used to communicate with model's EPICS process
sprintf( shm_name, "%s", sysname ); sprintf( shm_name, "%s", sysname );
findSharedMemory( sysname ); _epics_shm = (char*) findSharedMemory( sysname );
_epics_shm = (char*)addr; if ( _epics_shm == NULL )
if ( _epics_shm < 0 )
{ {
printf( "mbuf_allocate_area() failed; ret = %d\n", _epics_shm ); printf( "mbuf_allocate_area() failed; ret = %d\n", _epics_shm );
return -1; return -1;
...@@ -33,9 +31,8 @@ attach_shared_memory( char* sysname ) ...@@ -33,9 +31,8 @@ attach_shared_memory( char* sysname )
// testpoint config shm used to control testpoints from awgtpman // testpoint config shm used to control testpoints from awgtpman
sprintf( shm_name, "%s%s", sysname, SHMEM_TESTPOINT_SUFFIX ); sprintf( shm_name, "%s%s", sysname, SHMEM_TESTPOINT_SUFFIX );
findSharedMemory( sysname ); _tp_shm = (volatile TESTPOINT_CFG *) findSharedMemory( sysname );
_tp_shm = (volatile TESTPOINT_CFG *)addr; if ( _tp_shm == NULL )
if ( (uint64_t)_tp_shm < 0 )
{ {
printf( "mbuf_allocate_area(tp) failed; ret = %d\n", _tp_shm ); printf( "mbuf_allocate_area(tp) failed; ret = %d\n", _tp_shm );
return -1; return -1;
...@@ -44,9 +41,8 @@ attach_shared_memory( char* sysname ) ...@@ -44,9 +41,8 @@ attach_shared_memory( char* sysname )
// awg data shm used to stream data from awgtpman // awg data shm used to stream data from awgtpman
sprintf( shm_name, "%s%s", sysname, SHMEM_AWG_SUFFIX ); sprintf( shm_name, "%s%s", sysname, SHMEM_AWG_SUFFIX );
findSharedMemory( sysname ); _awg_shm = (volatile AWG_DATA *) findSharedMemory( sysname );
_awg_shm = (volatile AWG_DATA *)addr; if ( _awg_shm == NULL )
if ( (uint64_t)_awg_shm < 0 )
{ {
printf( "mbuf_allocate_area(awg) failed; ret = %d\n", _awg_shm ); printf( "mbuf_allocate_area(awg) failed; ret = %d\n", _awg_shm );
return -1; return -1;
...@@ -54,9 +50,8 @@ attach_shared_memory( char* sysname ) ...@@ -54,9 +50,8 @@ attach_shared_memory( char* sysname )
printf( "AWGSM at 0x%lx\n", (long)_awg_shm ); printf( "AWGSM at 0x%lx\n", (long)_awg_shm );
// ipc_shm used to communicate with IOP // ipc_shm used to communicate with IOP
findSharedMemory( "ipc" ); _ipc_shm = (char*)findSharedMemory( "ipc" );
_ipc_shm = (char*)addr; if ( _ipc_shm == NULL )
if ( _ipc_shm < 0 )
{ {
printf( "mbuf_allocate_area(ipc) failed; ret = %d\n", _ipc_shm ); printf( "mbuf_allocate_area(ipc) failed; ret = %d\n", _ipc_shm );
return -1; return -1;
...@@ -69,9 +64,8 @@ attach_shared_memory( char* sysname ) ...@@ -69,9 +64,8 @@ attach_shared_memory( char* sysname )
// DAQ is via shared memory // DAQ is via shared memory
sprintf( shm_name, "%s_daq", sysname ); sprintf( shm_name, "%s_daq", sysname );
findSharedMemory( shm_name ); _daq_shm = (char*) findSharedMemory( shm_name );
_daq_shm = (char*)addr; if ( _daq_shm == NULL )
if ( _daq_shm < 0 )
{ {
printf( "mbuf_allocate_area() failed; ret = %d\n", _daq_shm ); printf( "mbuf_allocate_area() failed; ret = %d\n", _daq_shm );
return -1; return -1;
...@@ -80,18 +74,16 @@ attach_shared_memory( char* sysname ) ...@@ -80,18 +74,16 @@ attach_shared_memory( char* sysname )
daqPtr = (struct rmIpcStr*)_daq_shm; daqPtr = (struct rmIpcStr*)_daq_shm;
// shmipc is used to send SHMEM IPC data between processes on same computer // shmipc is used to send SHMEM IPC data between processes on same computer
findSharedMemory( "shmipc" ); _shmipc_shm = (char*) findSharedMemory( "shmipc" );
_shmipc_shm = (char*)addr; if ( _shmipc_shm == NULL )
if ( _shmipc_shm < 0 )
{ {
printf( "mbuf_allocate_area() failed; ret = %d\n", _shmipc_shm ); printf( "mbuf_allocate_area() failed; ret = %d\n", _shmipc_shm );
return -1; return -1;
} }
// Open new IO shared memory in support of no hardware I/O // Open new IO shared memory in support of no hardware I/O
findSharedMemory( "virtual_io_space" ); _io_shm = (char*) findSharedMemory( "virtual_io_space" );
_io_shm = (char*)addr; if ( _io_shm == NULL )
if ( _io_shm < 0 )
{ {
printf( "mbuf_allocate_area() failed; ret = %d\n", _io_shm ); printf( "mbuf_allocate_area() failed; ret = %d\n", _io_shm );
return -1; return -1;
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
// These externs and "16" need to go to a header file (mbuf.h) // These externs and "16" need to go to a header file (mbuf.h)
extern int fe_start_iop_user( ); extern int fe_start_iop_user( );
extern char daqArea[ DAQ_DCU_SIZE ]; // Space allocation for daqLib buffers extern char daqArea[ DAQ_DCU_SIZE ]; // Space allocation for daqLib buffers
extern char* addr;
extern int cycleOffset; extern int cycleOffset;
// Scan a double // Scan a double
......
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