Fix MultiProc_self() in QNX to return the correct value
[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / ipc / hlos / knl / Qnx / multiproc_devctl.c
1 /*
2  *  @file   multiproc_devctl.c
3  *
4  *  @brief      OS-specific implementation of MultiProc driver for Qnx
5  *
6  *
7  *  ============================================================================
8  *
9  *  Copyright (c) 2013-2014, Texas Instruments Incorporated
10  *
11  *  Redistribution and use in source and binary forms, with or without
12  *  modification, are permitted provided that the following conditions
13  *  are met:
14  *
15  *  *  Redistributions of source code must retain the above copyright
16  *     notice, this list of conditions and the following disclaimer.
17  *
18  *  *  Redistributions in binary form must reproduce the above copyright
19  *     notice, this list of conditions and the following disclaimer in the
20  *     documentation and/or other materials provided with the distribution.
21  *
22  *  *  Neither the name of Texas Instruments Incorporated nor the names of
23  *     its contributors may be used to endorse or promote products derived
24  *     from this software without specific prior written permission.
25  *
26  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
28  *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
30  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
33  *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
34  *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
35  *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
36  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */
40 /* Standard headers */
41 #include <ti/syslink/Std.h>
43 /* QNX specific header include */
44 #include <ti/syslink/build/Qnx/resmgr/proto.h>
45 #include <ti/syslink/build/Qnx/resmgr/dcmd_syslink.h>
47 /* Module specific header files */
48 #include <ti/ipc/MultiProc.h>
49 #include <ti/syslink/inc/MultiProcDrvDefs.h>
51 /* Function prototypes */
52 int syslink_multiproc_getconfig(resmgr_context_t *ctp, io_devctl_t *msg,
53     syslink_ocb_t *ocb);
55 /**
56  * Handler for devctl() messages for multiproc module.
57  *
58  * Handles special devctl() messages that we export for control.
59  *
60  * \param ctp   Thread's associated context information.
61  * \param msg   The actual devctl() message.
62  * \param ocb   OCB associated with client's session.
63  *
64  * \return POSIX errno value.
65  *
66  * \retval EOK      Success.
67  * \retval ENOTSUP  Unsupported devctl().
68  */
69 int syslink_multiproc_devctl(resmgr_context_t *ctp, io_devctl_t *msg,
70     syslink_ocb_t *ocb)
71 {
72     switch (msg->i.dcmd) {
73         case DCMD_MULTIPROC_GETCONFIG:
74             return syslink_multiproc_getconfig( ctp, msg, ocb);
75             break;
77         default:
78             fprintf(stderr, "Invalid DEVCTL for multiproc 0x%x \n", msg->i.
79                 dcmd);
80             break;
81     }
83     return (_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) +
84         sizeof(MultiProcDrv_CmdArgs)));
85 }
87 /**
88  * Handler for multiproc getconfig API.
89  *
90  * \param ctp   Thread's associated context information.
91  * \param msg   The actual devctl() message.
92  * \param ocb   OCB associated with client's session.
93  *
94  * \return POSIX errno value.
95  *
96  * \retval EOK      Success.
97  * \retval ENOTSUP  Unsupported devctl().
98  */
99 int syslink_multiproc_getconfig(resmgr_context_t *ctp, io_devctl_t *msg,
100     syslink_ocb_t *ocb)
102     MultiProcDrv_CmdArgs * cargs = (MultiProcDrv_CmdArgs *)
103         (_DEVCTL_DATA (msg->i));
104     MultiProc_Config *     config = (MultiProc_Config *)(cargs+1);
106     MultiProc_getConfig(config);
108     cargs->apiStatus = MultiProc_S_SUCCESS;
109     SETIOV(&ctp->iov[0], &msg->o, sizeof(msg->o) +
110         sizeof(MultiProcDrv_CmdArgs));
111     SETIOV(&ctp->iov[1], config, sizeof(MultiProc_Config));
113     return _RESMGR_NPARTS(2);