diff --git a/qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/syslink_main.c b/qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/syslink_main.c
index 502b294f29e5a24ea4e5ab004dbed8e260b4aac3..6314f59e3d6e5f986049d112f89f07cd612f44d0 100644 (file)
#include <ti/syslink/utils/MemoryOS.h>
#include <ti/ipc/MultiProc.h>
#include <_MultiProc.h>
-#include <rprcfmt.h>
#include <OsalSemaphore.h>
#include <ti/syslink/utils/OsalPrint.h>
#if defined(SYSLINK_PLATFORM_OMAP4430) || defined(SYSLINK_PLATFORM_OMAP5430)
pthread_mutex_t syslink_hib_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t syslink_hib_cond = PTHREAD_COND_INITIALIZER;
-extern int rpmsg_omx_setup (void);
-extern void rpmsg_omx_destroy (void);
-extern int rpmsg_resmgr_setup (void);
-extern void rpmsg_resmgr_destroy (void);
-extern Int rpmsg_dce_setup (Void);
-extern Void rpmsg_dce_destroy (Void);
extern Int rpmsg_rpc_setup (Void);
extern Void rpmsg_rpc_destroy (Void);
extern Void GateHWSpinlock_LeaveLockForPID(int pid);
}
}
-/* Initialize the syslink device */
-int init_syslink_device(syslink_dev_t *dev)
+int init_syslink_trace_device(syslink_dev_t *dev)
{
- iofunc_attr_t * attr;
- syslink_attr_t * trace_attr;
resmgr_attr_t resmgr_attr;
int i;
+ syslink_attr_t * trace_attr;
char trace_name[_POSIX_PATH_MAX];
int status = 0;
- u32 da = 0, pa = 0;
- u32 len;
-
- pthread_mutex_init(&dev->lock, NULL);
+ unsigned int da = 0, pa = 0;
+ unsigned int len;
memset(&resmgr_attr, 0, sizeof resmgr_attr);
resmgr_attr.nparts_max = 10;
resmgr_attr.msg_max_size = 2048;
- memset(&dev->syslink.mattr, 0, sizeof(iofunc_mount_t));
- dev->syslink.mattr.flags = ST_NOSUID | ST_NOEXEC;
- dev->syslink.mattr.conf = IOFUNC_PC_CHOWN_RESTRICTED |
- IOFUNC_PC_NO_TRUNC |
- IOFUNC_PC_SYNC_IO;
- dev->syslink.mattr.funcs = &dev->syslink.mfuncs;
-
- memset(&dev->syslink.mfuncs, 0, sizeof(iofunc_funcs_t));
- dev->syslink.mfuncs.nfuncs = _IOFUNC_NFUNCS;
-
- iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &dev->syslink.cfuncs,
- _RESMGR_IO_NFUNCS, &dev->syslink.iofuncs);
-
- iofunc_attr_init(attr = &dev->syslink.cattr, S_IFCHR | 0777, NULL, NULL);
-
- dev->syslink.mfuncs.ocb_calloc = syslink_ocb_calloc;
- dev->syslink.mfuncs.ocb_free = syslink_ocb_free;
- dev->syslink.iofuncs.devctl = syslink_devctl;
- dev->syslink.iofuncs.unblock = syslink_unblock;
-
- attr->mount = &dev->syslink.mattr;
- iofunc_time_update(attr);
-
- if (-1 == (dev->syslink.resmgr_id =
- resmgr_attach(dev->dpp, &resmgr_attr,
- IPC_DEVICE_PATH, _FTYPE_ANY, 0,
- &dev->syslink.cfuncs,
- &dev->syslink.iofuncs, attr))) {
- return(-1);
- }
-
for (i = 0; i < syslink_num_cores; i++) {
iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &dev->syslink.cfuncs_trace[i],
_RESMGR_IO_NFUNCS, &dev->syslink.iofuncs_trace[i]);
(Ptr) da,
ProcMgr_AddrType_SlaveVirt);
}
+ else {
+ GT_setFailureReason(curTrace, GT_4CLASS, "init_syslink_trace_device",
+ status, "not performing ProcMgr_translate");
+ }
/* map length aligned to page size */
proc_traces[i].va =
mmap_device_io (((len + 0x1000 - 1) / 0x1000) * 0x1000, pa);
proc_traces[i].ridx = (uint32_t *)((uint32_t)proc_traces[i].widx + \
sizeof(uint32_t));
if (proc_traces[i].va == MAP_DEVICE_FAILED) {
+ GT_setFailureReason(curTrace, GT_4CLASS, "init_syslink_trace_device",
+ status, "mmap_device_io failed");
+ GT_1trace(curTrace, GT_4CLASS, "errno %d", errno);
proc_traces[i].va = NULL;
}
proc_traces[i].firstRead = TRUE;
}
else {
+ GT_setFailureReason(curTrace, GT_4CLASS, "init_syslink_trace_device",
+ status, "RscTable_getInfo failed");
proc_traces[i].va = NULL;
}
if (-1 == (dev->syslink.resmgr_id_trace[i] =
&dev->syslink.cfuncs_trace[i],
&dev->syslink.iofuncs_trace[i],
&trace_attr->attr))) {
+ GT_setFailureReason(curTrace, GT_4CLASS, "init_syslink_trace_device",
+ status, "resmgr_attach failed");
return(-1);
}
}
- return(0);
+ return (status);
}
-/* De-initialize the syslink device */
-int deinit_syslink_device(syslink_dev_t *dev)
+int deinit_syslink_trace_device(syslink_dev_t *dev)
{
int status = EOK;
int i = 0;
- status = resmgr_detach(dev->dpp, dev->syslink.resmgr_id, 0);
- if (status < 0) {
- Osal_printf("syslink: resmgr_detach failed %d", errno);
- status = errno;
- }
-
for (i = 0; i < syslink_num_cores; i++) {
status = resmgr_detach(dev->dpp, dev->syslink.resmgr_id_trace[i], 0);
if (status < 0) {
Osal_printf("syslink: resmgr_detach failed %d", errno);
status = errno;
}
- if (proc_traces[i].va && proc_traces[i].va != MAP_DEVICE_FAILED)
+ if (proc_traces[i].va && proc_traces[i].va != MAP_DEVICE_FAILED) {
munmap((void *)proc_traces[i].va,
((proc_traces[i].len + 8 + 0x1000 - 1) / 0x1000) * 0x1000);
+ }
proc_traces[i].va = NULL;
}
+ return (status);
+}
+
+/* Initialize the syslink device */
+int init_syslink_device(syslink_dev_t *dev)
+{
+ iofunc_attr_t * attr;
+ resmgr_attr_t resmgr_attr;
+ int status = 0;
+
+ pthread_mutex_init(&dev->lock, NULL);
+
+ memset(&resmgr_attr, 0, sizeof resmgr_attr);
+ resmgr_attr.nparts_max = 10;
+ resmgr_attr.msg_max_size = 2048;
+
+ memset(&dev->syslink.mattr, 0, sizeof(iofunc_mount_t));
+ dev->syslink.mattr.flags = ST_NOSUID | ST_NOEXEC;
+ dev->syslink.mattr.conf = IOFUNC_PC_CHOWN_RESTRICTED |
+ IOFUNC_PC_NO_TRUNC |
+ IOFUNC_PC_SYNC_IO;
+ dev->syslink.mattr.funcs = &dev->syslink.mfuncs;
+
+ memset(&dev->syslink.mfuncs, 0, sizeof(iofunc_funcs_t));
+ dev->syslink.mfuncs.nfuncs = _IOFUNC_NFUNCS;
+
+ iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &dev->syslink.cfuncs,
+ _RESMGR_IO_NFUNCS, &dev->syslink.iofuncs);
+
+ iofunc_attr_init(attr = &dev->syslink.cattr, S_IFCHR | 0777, NULL, NULL);
+
+ dev->syslink.mfuncs.ocb_calloc = syslink_ocb_calloc;
+ dev->syslink.mfuncs.ocb_free = syslink_ocb_free;
+ dev->syslink.iofuncs.devctl = syslink_devctl;
+ dev->syslink.iofuncs.unblock = syslink_unblock;
+
+ attr->mount = &dev->syslink.mattr;
+ iofunc_time_update(attr);
+
+ if (-1 == (dev->syslink.resmgr_id =
+ resmgr_attach(dev->dpp, &resmgr_attr,
+ IPC_DEVICE_PATH, _FTYPE_ANY, 0,
+ &dev->syslink.cfuncs,
+ &dev->syslink.iofuncs, attr))) {
+ return(-1);
+ }
+
+ status = init_syslink_trace_device(dev);
+ if (status < 0) {
+ return status;
+ }
+
+ return(0);
+}
+
+/* De-initialize the syslink device */
+int deinit_syslink_device(syslink_dev_t *dev)
+{
+ int status = EOK;
+
+ status = resmgr_detach(dev->dpp, dev->syslink.resmgr_id, 0);
+ if (status < 0) {
+ Osal_printf("syslink: resmgr_detach failed %d", errno);
+ status = errno;
+ }
+
+ status = deinit_syslink_trace_device(dev);
+
return(status);
}
deinit_ipc(dev, TRUE);
init_ipc(dev, syslink_firmware, TRUE);
+ deinit_syslink_trace_device(dev);
+ init_syslink_trace_device(dev);
}
Int syslink_error_cb (UInt16 procId, ProcMgr_Handle handle,
}
if (status < 0)
- goto resmgrsetup_fail;
-
- /* Set up the resmgr */
- status = rpmsg_resmgr_setup();
- if (status < 0)
- goto resmgrsetup_fail;
-
- /* Set up rpmsg_omx */
- status = rpmsg_omx_setup();
- if (status < 0)
- goto omxsetup_fail;
-
- /* Set up rpmsg_dce */
- status = rpmsg_dce_setup();
- if (status < 0)
- goto dcesetup_fail;
+ goto tiipcsetup_fail;
/* Set up rpmsg_mq */
status = ti_ipc_setup();
rpcsetup_fail:
ti_ipc_destroy(recover);
tiipcsetup_fail:
- rpmsg_dce_destroy();
-dcesetup_fail:
- rpmsg_omx_destroy();
-omxsetup_fail:
- rpmsg_resmgr_destroy();
-resmgrsetup_fail:
for (i-=1; i >= 0; i--) {
procId = firmware[i].proc_id;
ProcMgr_unregisterNotify(procH[procId], syslink_error_cb,
ti_ipc_destroy(recover);
- rpmsg_dce_destroy();
-
- rpmsg_omx_destroy();
-
- rpmsg_resmgr_destroy();
-
for (i = 0; i < MultiProc_MAXPROCESSORS; i++) {
if (procH[i]) {
ProcMgr_unregisterNotify (procH[i], syslink_error_cb, (Ptr)dev,
uint32_t hib_timeout = PM_HIB_DEFAULT_TIME;
char *user_parm = NULL;
struct stat sbuf;
+ int i = 0;
+ char * abs_path = NULL;
if (-1 != stat(IPC_DEVICE_PATH, &sbuf)) {
printf ("Syslink Already Running...\n");
return (error);
}
+ /* Get the abs path for all firmware files */
+ for (i = 0; i < syslink_num_cores; i++) {
+ abs_path = calloc(1, PATH_MAX + 1);
+ if (abs_path == NULL) {
+ return -1;
+ }
+ if (NULL == realpath(syslink_firmware[i].firmware, abs_path)) {
+ fprintf (stderr, "realpath failed\n");
+ return -1;
+ }
+ syslink_firmware[i].firmware = abs_path;
+ }
+
/* allocate the device structure */
if (NULL == (dev = calloc(1, sizeof(syslink_dev_t)))) {
Osal_printf("syslink: calloc() failed");