xref: /aosp_15_r20/external/fastrpc/inc/adsp_pls.h (revision 418b791d679beb2078b579a3b6936cf330c41799)
1*418b791dSBob Badour /**
2*418b791dSBob Badour  * Copyright (c) 2019, The Linux Foundation. All rights reserved.
3*418b791dSBob Badour  *
4*418b791dSBob Badour  * Redistribution and use in source and binary forms, with or without
5*418b791dSBob Badour  * modification, are permitted provided that the following conditions are
6*418b791dSBob Badour  * met:
7*418b791dSBob Badour  *    * Redistributions of source code must retain the above copyright
8*418b791dSBob Badour  *      notice, this list of conditions and the following disclaimer.
9*418b791dSBob Badour  *    * Redistributions in binary form must reproduce the above
10*418b791dSBob Badour  *      copyright notice, this list of conditions and the following
11*418b791dSBob Badour  *      disclaimer in the documentation and/or other materials provided
12*418b791dSBob Badour  *      with the distribution.
13*418b791dSBob Badour  *    * Neither the name of The Linux Foundation nor the names of its
14*418b791dSBob Badour  *      contributors may be used to endorse or promote products derived
15*418b791dSBob Badour  *      from this software without specific prior written permission.
16*418b791dSBob Badour  *
17*418b791dSBob Badour  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18*418b791dSBob Badour  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*418b791dSBob Badour  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20*418b791dSBob Badour  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21*418b791dSBob Badour  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*418b791dSBob Badour  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*418b791dSBob Badour  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24*418b791dSBob Badour  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25*418b791dSBob Badour  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26*418b791dSBob Badour  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*418b791dSBob Badour  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*418b791dSBob Badour  */
29*418b791dSBob Badour 
30*418b791dSBob Badour #ifndef ADSP_PLS_H
31*418b791dSBob Badour #define ADSP_PLS_H
32*418b791dSBob Badour 
33*418b791dSBob Badour #include <stdint.h>
34*418b791dSBob Badour 
35*418b791dSBob Badour #ifdef __cplusplus
36*418b791dSBob Badour extern "C" {
37*418b791dSBob Badour #endif
38*418b791dSBob Badour /**
39*418b791dSBob Badour  * internal header
40*418b791dSBob Badour  */
41*418b791dSBob Badour 
42*418b791dSBob Badour /**
43*418b791dSBob Badour  * adsp process local storage is local storage for the fastrpc hlos
44*418b791dSBob Badour  * process context.
45*418b791dSBob Badour 
46*418b791dSBob Badour  * When used from within a fastrpc started thread this will attach
47*418b791dSBob Badour  * desturctors to the lifetime of the hlos process that is making the
48*418b791dSBob Badour  * rpc calls.  Users can use this to store context for the lifetime of
49*418b791dSBob Badour  * the calling process on the hlos.
50*418b791dSBob Badour  */
51*418b791dSBob Badour 
52*418b791dSBob Badour /**
53*418b791dSBob Badour  * adds a new key to the local storage, overriding
54*418b791dSBob Badour  * any previous value at the key.  Overriding the key
55*418b791dSBob Badour  * does not cause the destructor to run.
56*418b791dSBob Badour  *
57*418b791dSBob Badour  * @param type, type part of the key to be used for lookup,
58*418b791dSBob Badour  *        these should be static addresses, like the address of a function.
59*418b791dSBob Badour  * @param key, the key to be used for lookup
60*418b791dSBob Badour  * @param size, the size of the data
61*418b791dSBob Badour  * @param ctor, constructor that takes a context and memory of size
62*418b791dSBob Badour  * @param ctx, constructor context passed as the first argument to ctor
63*418b791dSBob Badour  * @param dtor, destructor to run at pls shutdown
64*418b791dSBob Badour  * @param ppo, output data
65*418b791dSBob Badour  * @retval, 0 for success
66*418b791dSBob Badour  */
67*418b791dSBob Badour int adsp_pls_add(uintptr_t type, uintptr_t key, int size, int (*ctor)(void* ctx, void* data), void* ctx, void (*dtor)(void*), void** ppo);
68*418b791dSBob Badour 
69*418b791dSBob Badour /**
70*418b791dSBob Badour  * Like add, but will only add 1 item, and return the same item on the
71*418b791dSBob Badour  * next add.  If two threads try to call this function at teh same time
72*418b791dSBob Badour  * they will both receive the same value as a result, but the constructors
73*418b791dSBob Badour  * may be called twice.
74*418b791dSBob Badour  * item if its already there, otherwise tries to add.
75*418b791dSBob Badour  * ctor may be called twice
76*418b791dSBob Badour  * callers should avoid calling pls_add which will override the singleton
77*418b791dSBob Badour  */
78*418b791dSBob Badour int adsp_pls_add_lookup(uintptr_t type, uintptr_t key, int size, int (*ctor)(void* ctx, void* data), void* ctx, void (*dtor)(void*), void** ppo);
79*418b791dSBob Badour 
80*418b791dSBob Badour /**
81*418b791dSBob Badour  * finds the last data pointer added for key to the local storage
82*418b791dSBob Badour  *
83*418b791dSBob Badour  * @param key, the key to be used for lookup
84*418b791dSBob Badour  * @param ppo, output data
85*418b791dSBob Badour  * @retval, 0 for success
86*418b791dSBob Badour  */
87*418b791dSBob Badour int adsp_pls_lookup(uintptr_t type, uintptr_t key, void** ppo);
88*418b791dSBob Badour 
89*418b791dSBob Badour /**
90*418b791dSBob Badour  * force init/deinit
91*418b791dSBob Badour  */
92*418b791dSBob Badour int gpls_init(void);
93*418b791dSBob Badour void gpls_deinit(void);
94*418b791dSBob Badour 
95*418b791dSBob Badour #ifdef __cplusplus
96*418b791dSBob Badour }
97*418b791dSBob Badour #endif
98*418b791dSBob Badour #endif //ADSP_PLS_H
99