Add initial support to start/stop cores after launching QNX IPC resource manager
[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / build / Qnx / resmgr / proto.h
1 /*
2  *  @file       Proto.h
3  *
4  *  @brief      common include for resource manager.
5  *
6  *
7  *  @ver        02.00.00.46_alpha1
8  *
9  *  ============================================================================
10  *
11  *  Copyright (c) 2010-2014, Texas Instruments Incorporated
12  *
13  *  Redistribution and use in source and binary forms, with or without
14  *  modification, are permitted provided that the following conditions
15  *  are met:
16  *
17  *  *  Redistributions of source code must retain the above copyright
18  *     notice, this list of conditions and the following disclaimer.
19  *
20  *  *  Redistributions in binary form must reproduce the above copyright
21  *     notice, this list of conditions and the following disclaimer in the
22  *     documentation and/or other materials provided with the distribution.
23  *
24  *  *  Neither the name of Texas Instruments Incorporated nor the names of
25  *     its contributors may be used to endorse or promote products derived
26  *     from this software without specific prior written permission.
27  *
28  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30  *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31  *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
32  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
34  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
35  *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
36  *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
37  *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
38  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  *  Contact information for paper mail:
40  *  Texas Instruments
41  *  Post Office Box 655303
42  *  Dallas, Texas 75265
43  *  Contact information:
44  *  http://www-k.ext.ti.com/sc/technical-support/product-information-centers.htm?
45  *  DCMP=TIHomeTracking&HQS=Other+OT+home_d_contact
46  *  ============================================================================
47  *
48  */
51 #ifndef _SYSLINK_PROTO_H_INCLUDED
52 #define _SYSLINK_PROTO_H_INCLUDED
54 struct _iofunc_attr;
55 #define RESMGR_HANDLE_T struct _iofunc_attr
56 struct syslink_ocb;
57 #define IOFUNC_OCB_T struct syslink_ocb
58 #define RESMGR_OCB_T struct syslink_ocb
59 #define THREAD_POOL_PARAM_T dispatch_context_t
60 struct syslink_attr;
61 #define IOFUNC_ATTR_T struct syslink_attr
63 /* QNX specific header files */
65 #include <stdio.h>
66 #include <stdlib.h>
67 #include <string.h>
68 #include <errno.h>
69 #include <unistd.h>
70 #include <hw/inout.h>
71 #include <sys/iofunc.h>
72 #include <sys/dispatch.h>
73 #include <devctl.h>
74 #include <atomic.h>
75 #include <sys/slogcodes.h>
76 #include <ti/syslink/Std.h>
77 #include <sys/types.h>
78 #include <sys/ioctl.h>
79 #include <inttypes.h>
80 #include <fcntl.h>
81 #include <stdio.h>
82 #include <sys/mman.h>
84 #include "ti/syslink/utils/List.h"
85 #include <OsalThread.h>
86 #include <_MultiProc.h>
88 #define IPC_DEVICE_PATH        "/dev/ipc"
90 /*
91  *  Define our device attributes structure.
92 */
94 typedef struct syslink_attr {
95     iofunc_attr_t   attr;
96     uint16_t        procid;
97     Ptr             dev;
98 } syslink_attr_t;
100 typedef struct named_device {
101     iofunc_mount_t      mattr;
102     iofunc_attr_t       cattr;
103     syslink_attr_t      cattr_trace[MultiProc_MAXPROCESSORS];
104     syslink_attr_t      cattr_slave[MultiProc_MAXPROCESSORS];
105     int                 resmgr_id;
106     int                 resmgr_id_trace[MultiProc_MAXPROCESSORS];
107     int                 resmgr_id_state[MultiProc_MAXPROCESSORS];
108     int                 resmgr_id_file[MultiProc_MAXPROCESSORS];
109     iofunc_funcs_t      mfuncs;
110     resmgr_connect_funcs_t  cfuncs;
111     resmgr_connect_funcs_t  cfuncs_trace[MultiProc_MAXPROCESSORS];
112     resmgr_connect_funcs_t  cfuncs_state[MultiProc_MAXPROCESSORS];
113     resmgr_connect_funcs_t  cfuncs_file[MultiProc_MAXPROCESSORS];
114     resmgr_io_funcs_t   iofuncs;
115     resmgr_io_funcs_t   iofuncs_trace[MultiProc_MAXPROCESSORS];
116     resmgr_io_funcs_t   iofuncs_state[MultiProc_MAXPROCESSORS];
117     resmgr_io_funcs_t   iofuncs_file[MultiProc_MAXPROCESSORS];
118     char device_name[_POSIX_PATH_MAX];
119 } named_device_t;
121 typedef struct syslink_dev {
122     dispatch_t       * dpp;
123     thread_pool_t    * tpool;
124     named_device_t     syslink;
125     void             * da_virt;
126     void             * da_tesla_virt;
127     pthread_mutex_t    firmwareLock;  /* lock for load/unload firmware */
128     pthread_mutex_t    lock;
129     Bool               recover;
130     OsalThread_Handle  ipc_recovery_work;
131 } syslink_dev_t;
133 typedef struct syslink_ocb {
134     iofunc_ocb_t       ocb;
135     pid_t              pid;
136     uint32_t           ridx;
137     uint32_t           widx;
138 } syslink_ocb_t;
140 int  syslink_devctl(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb);
142 #endif