]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ipc/ipcdev.git/blob - packages/ti/ipc/transports/TransportRpmsgSetup.c
Linux: Update user AF_RPMSG define for 5.15+ kernels
[ipc/ipcdev.git] / packages / ti / ipc / transports / TransportRpmsgSetup.c
1 /*
2  * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*
33  *  ======== TransportRpmsgSetup.c ========
34  */
36 #include <xdc/std.h>
37 #include <xdc/runtime/System.h>
38 #include <xdc/runtime/Assert.h>
39 #include <xdc/runtime/Error.h>
40 #include <xdc/runtime/Log.h>
41 #include <xdc/runtime/Diags.h>
43 #include <ti/ipc/transports/TransportRpmsg.h>
45 #include "package/internal/TransportRpmsgSetup.xdc.h"
47 #include <ti/sdo/ipc/_MessageQ.h>
48 #include <ti/sdo/utils/_MultiProc.h>
50 /*
51  *  ======== TransportRpmsgSetup_attach ========
52  */
53 Int TransportRpmsgSetup_attach(UInt16 procId, Ptr sharedAddr)
54 {
55     TransportRpmsg_Handle handle;
56     TransportRpmsg_Params params;
57     Int status = MessageQ_E_FAIL;
58     Error_Block eb;
59     Int index;
61     Log_print1(Diags_INFO, "TransportRpmsgSetup_attach: procId=%d", procId);
63     Error_init(&eb);
65     /* procId is always in cluster */
66     index = ti_sdo_utils_MultiProc_getClusterId(procId);
68     /* init the transport parameters */
69     TransportRpmsg_Params_init(&params);
70     params.sharedAddr = sharedAddr;  /* Not used yet */
72     handle = TransportRpmsg_create(procId, &params, &eb);
74     if (handle != NULL) {
75        TransportRpmsgSetup_module->handles[index] = handle;
76        status = MessageQ_S_SUCCESS;
77     }
79     return (status);
80 }
82 /*
83  *  ======== TransportRpmsgSetup_detach ========
84  */
85 Int TransportRpmsgSetup_detach(UInt16 procId)
86 {
87     TransportRpmsg_Handle handle;
88     Int index;
90     Log_print1(Diags_INFO, "TransportRpmsgSetup_detach: procId=%d", procId);
92     /* procId is always in cluster */
93     index = ti_sdo_utils_MultiProc_getClusterId(procId);
94     handle = TransportRpmsgSetup_module->handles[index];
96     /* Trying to detach an un-attached processor should fail */
97     if (handle == NULL) {
98         return (MessageQ_E_FAIL);
99     }
101     /* Unregister the instance */
102     TransportRpmsgSetup_module->handles[index] = NULL;
104     TransportRpmsg_delete(&handle);
106     return (MessageQ_S_SUCCESS);
109 /*
110  *  ======== TransportRpmsgSetup_isRegistered ========
111  */
112 Bool TransportRpmsgSetup_isRegistered(UInt16 procId)
114     Bool registered;
115     Int index;
117     /* procId is always in cluster */
118     index = ti_sdo_utils_MultiProc_getClusterId(procId);
119     registered = (TransportRpmsgSetup_module->handles[index] != NULL);
121     return (registered);
124 /*
125  *  ======== TransportRpmsgSetup_sharedMemReq ========
126  */
127 SizeT TransportRpmsgSetup_sharedMemReq(Ptr sharedAddr)
129     return (0);