1 /*
2  * Copyright (c) 2021, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 /*
9  * This is a simple implementaton for reference to manage NSID from NS side.
10  * Developers can design the management according to RTOS and usage scenarios.
11  */
12 
13 #ifndef __TFM_NSID_MANAGER_H__
14 #define __TFM_NSID_MANAGER_H__
15 
16 #include <stdint.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #ifndef ARRAY_SIZE
23 #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
24 #endif
25 
26 #define TFM_DEFAULT_GID         0x00
27 #define TFM_DEFAULT_NSID        ((int32_t)-1)
28 /* Non-secure client ID needs to be negative */
29 #define TFM_INVALID_NSID_MIN    ((int32_t)0)
30 
31 /* NSID Manager Error Code */
32 #define NSID_MGR_ERR_SUCCESS          0x00
33 #define NSID_MGR_ERR_INVALID_NSID     0x01
34 #define NSID_MGR_ERR_INVALID_TOKEN    0x02
35 #define NSID_MGR_ERR_NO_FREE_ENTRY    0x03
36 
37 /*
38  * Current active NSID token needs to be manually save and reload
39  * before and after calling NS client ext directly from SVC in NSID test suite.
40  */
41 #ifdef TEST_NS_MANAGE_NSID
42 extern uint32_t current_active_token;
43 #endif
44 
45 /*
46  * Initialize the table to map token and nsid.
47  * This function should be called before any other NSID manager APIs.
48  */
49 uint8_t nsid_mgr_init(void);
50 
51 /*
52  * Add a new nsid-token map entry to the table.
53  * This function should be called once a new token
54  * has been successfully assigned by ns_client_ext.
55  */
56 uint8_t nsid_mgr_add_entry(int32_t nsid, uint32_t token);
57 
58 /*
59  * Delete a nsid-token map entry from the table.
60  * This function should be called once an existing token
61  * has been successfully released by ns_client_ext.
62  */
63 uint8_t nsid_mgr_remove_entry(uint32_t token);
64 
65 /*
66  * Query NSID from the map table with token.
67  * This function is to get NSID assigned by RTOS with token of a NS thread.
68  */
69 int32_t nsid_mgr_query_nsid(uint32_t token);
70 
71 #ifdef __cplusplus
72 }
73 #endif
74 
75 #endif /* __TFM_NSID_MANAGER_H__ */
76