1 /*
2  * Copyright (c) 2024 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /* clang-format off */
8 
9 #ifndef NRFS_REQS_COMMON_H
10 #define NRFS_REQS_COMMON_H
11 
12 #define NRFS_REQUEST_ID_BITS  7uL
13 #define NRFS_NO_RSP_BITS      1uL
14 #define NRFS_SERVICE_ID_BITS  6uL
15 #define NRFS_FILTER_ERR_BITS  1uL
16 #define NRFS_UNSOLICITED_BITS 1uL
17 
18 #define NRFS_REQUEST_ID_BITPOS  0uL
19 #define NRFS_NO_RSP_BITPOS      (NRFS_REQUEST_ID_BITS)
20 #define NRFS_SERVICE_ID_BITPOS  (NRFS_REQUEST_ID_BITS + NRFS_NO_RSP_BITS)
21 #define NRFS_FILTER_ERR_BITPOS  (NRFS_REQUEST_ID_BITS + NRFS_NO_RSP_BITS + NRFS_SERVICE_ID_BITS)
22 #define NRFS_UNSOLICITED_BITPOS (NRFS_REQUEST_ID_BITS + NRFS_NO_RSP_BITS + NRFS_SERVICE_ID_BITS + NRFS_FILTER_ERR_BITS)
23 
24 #define NRFS_REQUEST_ID_MASK  (((1 << NRFS_REQUEST_ID_BITS)  - 1) << NRFS_REQUEST_ID_BITPOS)
25 #define NRFS_NO_RSP_MASK      (((1 << NRFS_NO_RSP_BITS)      - 1) << NRFS_NO_RSP_BITPOS)
26 #define NRFS_SERVICE_ID_MASK  (((1 << NRFS_SERVICE_ID_BITS)  - 1) << NRFS_SERVICE_ID_BITPOS)
27 #define NRFS_FILTER_ERR_MASK  (((1 << NRFS_FILTER_ERR_BITS)  - 1) << NRFS_FILTER_ERR_BITPOS)
28 #define NRFS_UNSOLICITED_MASK (((1 << NRFS_UNSOLICITED_BITS) - 1) << NRFS_UNSOLICITED_BITPOS)
29 
30 #define NRFS_REQUEST_ID_DEF(_srv_id, _req_id) (((uint16_t)(_srv_id) << NRFS_SERVICE_ID_BITPOS) | \
31 					       ((uint16_t)(_req_id) << NRFS_REQUEST_ID_BITPOS))
32 
33 #define NRFS_REQUEST_ID_GET(_req)  (((_req) & (NRFS_REQUEST_ID_MASK | NRFS_SERVICE_ID_MASK)))
34 
35 #define NRFS_SERVICE_ID_GET(_req)  (((_req) & NRFS_SERVICE_ID_MASK) >> NRFS_SERVICE_ID_BITPOS)
36 
37 #define NRFS_NO_RSP_GET(_req)  (((_req) & NRFS_NO_RSP_MASK) >> NRFS_NO_RSP_BITPOS)
38 
39 #define NRFS_NO_RSP_SET(_req)  ((_req) |= NRFS_NO_RSP_MASK)
40 
41 #define NRFS_FILTER_ERR_GET(_req)  (((_req) & NRFS_FILTER_ERR_MASK) >> NRFS_FILTER_ERR_BITPOS)
42 
43 #define NRFS_FILTER_ERR_SET(_req)  ((_req) |= NRFS_FILTER_ERR_MASK)
44 
45 /* Warning! All "UNSOLICITED" features are not supported. This is intended for possible future use. */
46 #define NRFS_UNSOLICITED_GET(_req) (((_req) & NRFS_UNSOLICITED_MASK) >> NRFS_UNSOLICITED_BITPOS)
47 
48 /* Warning! All "UNSOLICITED" features are not supported. This is intended for possible future use. */
49 #define NRFS_UNSOLICITED_SET(_req) ((_req) |= NRFS_UNSOLICITED_MASK)
50 
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54 
55 enum {
56 	NRFS_SERVICE_ID_CLOCK,
57 	NRFS_SERVICE_ID_DIAG,
58 	NRFS_SERVICE_ID_DVFS,
59 	NRFS_SERVICE_ID_GDPWR,
60 	NRFS_SERVICE_ID_MRAM,
61 	NRFS_SERVICE_ID_PMIC,
62 	NRFS_SERVICE_ID_RESET,
63 	NRFS_SERVICE_ID_TEMP,
64 	NRFS_SERVICE_ID_USB,
65 	NRFS_SERVICE_ID_GDFS,
66 	NRFS_SERVICE_ID_SWEXT,
67 };
68 
69 #ifdef __cplusplus
70 }
71 #endif
72 
73 /* clang-format on */
74 
75 #endif /* NRFS_REQS_COMMON_H */
76