1 /*--------------------------------------------------------------------------*/
2 /* Copyright 2020-2021 NXP                                                  */
3 /*                                                                          */
4 /* NXP Confidential. This software is owned or controlled by NXP and may    */
5 /* only be used strictly in accordance with the applicable license terms.   */
6 /* By expressly accepting such terms or by downloading, installing,         */
7 /* activating and/or otherwise using the software, you are agreeing that    */
8 /* you have read, and that you agree to comply with and are bound by, such  */
9 /* license terms. If you do not agree to be bound by the applicable license */
10 /* terms, then you may not retain, install, activate or otherwise use the   */
11 /* software.                                                                */
12 /*--------------------------------------------------------------------------*/
13 
14 /**
15  * @file  mcuxClCss_Types.h
16  * @brief CSSv2 type header.
17  *
18  * This header defines types that are used by other mcuxClCss headers.
19  */
20 /**
21  * @defgroup mcuxClCss_Types mcuxClCss_Types
22  * @brief This part of the @ref mcuxClCss driver defines common types
23  * @ingroup mcuxClCss
24  * @{
25  */
26 #ifndef MCUXCLCSS_TYPES_H_
27 #define MCUXCLCSS_TYPES_H_
28 
29 #include <stdint.h>
30 #include <stddef.h>
31 
32 /**********************************************
33  * MACROS
34  **********************************************/
35 /**
36  * @defgroup mcuxClCss_Types_Macros mcuxClCss_Types_Macros
37  * @brief Defines all macros of @ref mcuxClCss_Types
38  * @ingroup mcuxClCss_Types
39  * @{
40  */
41 
42 #define MCUXCLCSS_KEY_SLOTS (20U) ///< Number of key slots in the CSS key store.
43 
44 /** @defgroup MCUXCLCSS_KEYPROPERTY_VALUE_ MCUXCLCSS_KEYPROPERTY_VALUE_
45  * @brief Constants for initalizing #mcuxClCss_KeyProp_t.word
46  * @ingroup mcuxClCss_Types_Macros
47  * @{
48  */
49 #define MCUXCLCSS_KEYPROPERTY_VALUE_KEY_SIZE_128         ((uint32_t) 0u<< 0u) ///< 128-bit key
50 #define MCUXCLCSS_KEYPROPERTY_VALUE_KEY_SIZE_256         ((uint32_t) 1u<< 0u) ///< 256-bit key
51 #define MCUXCLCSS_KEYPROPERTY_VALUE_ACTIVE               ((uint32_t) 1u<< 5u) ///< Key is active (loaded)
52 #define MCUXCLCSS_KEYPROPERTY_VALUE_BASE_SLOT            ((uint32_t) 1u<< 6u) ///< First part of multi-slot key
53 #define MCUXCLCSS_KEYPROPERTY_VALUE_GENERAL_PURPOSE_SLOT ((uint32_t) 1u<< 7u) ///< General purpose key slot
54 #define MCUXCLCSS_KEYPROPERTY_VALUE_RETENTION_SLOT       ((uint32_t) 1u<< 8u) ///< Retention key slot
55 #define MCUXCLCSS_KEYPROPERTY_VALUE_HW_OUT_SLOT          ((uint32_t) 1u<< 9u) ///< Hardware output key slot
56 #define MCUXCLCSS_KEYPROPERTY_VALUE_CMAC                 ((uint32_t) 1u<<13u) ///< CMAC key
57 #define MCUXCLCSS_KEYPROPERTY_VALUE_KSK                  ((uint32_t) 1u<<14u) ///< Key signing key
58 #define MCUXCLCSS_KEYPROPERTY_VALUE_RTF                  ((uint32_t) 1u<<15u) ///< RTF signing key
59 #define MCUXCLCSS_KEYPROPERTY_VALUE_CKDF                 ((uint32_t) 1u<<16u) ///< CKDF signing key
60 #define MCUXCLCSS_KEYPROPERTY_VALUE_HKDF                 ((uint32_t) 1u<<17u) ///< HKDF signing key
61 #define MCUXCLCSS_KEYPROPERTY_VALUE_ECSGN                ((uint32_t) 1u<<18u) ///< ECC signing key
62 #define MCUXCLCSS_KEYPROPERTY_VALUE_ECDH                 ((uint32_t) 1u<<19u) ///< ECC Diffie Hellman private key
63 #define MCUXCLCSS_KEYPROPERTY_VALUE_AES                  ((uint32_t) 1u<<20u) ///< AES key
64 #define MCUXCLCSS_KEYPROPERTY_VALUE_HMAC                 ((uint32_t) 1u<<21u) ///< HMAC key
65 #define MCUXCLCSS_KEYPROPERTY_VALUE_KWK                  ((uint32_t) 1u<<22u) ///< Key Wrapping Key
66 #define MCUXCLCSS_KEYPROPERTY_VALUE_KUOK                 ((uint32_t) 1u<<23u) ///< Key Unwrapping Only Key
67 #define MCUXCLCSS_KEYPROPERTY_VALUE_TLS_PREMASTER_SECRET ((uint32_t) 1u<<24u) ///< TLS Premaster Secret
68 #define MCUXCLCSS_KEYPROPERTY_VALUE_TLS_MASTER_SECRET    ((uint32_t) 1u<<25u) ///< TLS Master Secret
69 #define MCUXCLCSS_KEYPROPERTY_VALUE_KGSRC                ((uint32_t) 1u<<26u) ///< Can provide key material input for ECC key generation
70 #define MCUXCLCSS_KEYPROPERTY_VALUE_HW_OUT               ((uint32_t) 1u<<27u) ///< A key to be used in a hardware out key slot
71 #define MCUXCLCSS_KEYPROPERTY_VALUE_WRPOK                ((uint32_t) 1u<<28u) ///< The key can be wrapped
72 #define MCUXCLCSS_KEYPROPERTY_VALUE_DUK                  ((uint32_t) 1u<<29u) ///< Device Unique Key
73 #define MCUXCLCSS_KEYPROPERTY_VALUE_PRIVILEGED           ((uint32_t) 1u<<30u) ///< Caller must be in privileged mode to use the key
74 #define MCUXCLCSS_KEYPROPERTY_VALUE_NOTPRIVILEGED        ((uint32_t) 0u<<30u) ///< Caller does not have to be in privileged mode to use the key
75 #define MCUXCLCSS_KEYPROPERTY_VALUE_SECURE               ((uint32_t) 0u<<31u) ///< Caller must be in secure mode to use the key
76 #define MCUXCLCSS_KEYPROPERTY_VALUE_NOTSECURE            ((uint32_t) 1u<<31u) ///< Caller does not have to be in secure mode to use the key
77 /**
78  * @}
79  */
80 
81 /** @defgroup MCUXCLCSS_KEYPROPERTY_ MCUXCLCSS_KEYPROPERTY_
82  * @brief Constants for initalizing #mcuxClCss_KeyProp_t.bits
83  * @ingroup mcuxClCss_Types_Macros
84  * @{
85  */
86 #define MCUXCLCSS_KEYPROPERTY_KEY_SIZE_128               0U ///< This value of #mcuxClCss_KeyProp_t.ksize indicates a 128 bit key
87 #define MCUXCLCSS_KEYPROPERTY_KEY_SIZE_256               1U ///< This value of #mcuxClCss_KeyProp_t.ksize indicates a 256 bit key
88 #define MCUXCLCSS_KEYPROPERTY_ACTIVE_TRUE                1U ///< This value of #mcuxClCss_KeyProp_t.kactv indicates that the slot contains an active key
89 #define MCUXCLCSS_KEYPROPERTY_ACTIVE_FALSE               0U ///< This value of #mcuxClCss_KeyProp_t.kactv indicates that the slot does not contain active key
90 #define MCUXCLCSS_KEYPROPERTY_BASE_SLOT                  1U ///< This value of #mcuxClCss_KeyProp_t.kbase indicates that the slot is the base slot of a 2-slot key
91 #define MCUXCLCSS_KEYPROPERTY_SECOND_SLOT                0U ///< This value of #mcuxClCss_KeyProp_t.kbase indicates that the slot is the second slot of a 2-slot key
92 #define MCUXCLCSS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_TRUE  1U ///< This value of #mcuxClCss_KeyProp_t.fgp indicates that the slot is a retention key slot or a hardware out key slot
93 #define MCUXCLCSS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_FALSE 0U ///< This value of #mcuxClCss_KeyProp_t.fgp indicates that the slot is a neither retention key slot nor hardware out key slot
94 #define MCUXCLCSS_KEYPROPERTY_RETENTION_SLOT_TRUE        1U ///< This value of #mcuxClCss_KeyProp_t.frtn indicates that the slot is a retention key slot
95 #define MCUXCLCSS_KEYPROPERTY_RETENTION_SLOT_FALSE       0U ///< This value of #mcuxClCss_KeyProp_t.frtn indicates that the slot is not a retention key slot
96 #define MCUXCLCSS_KEYPROPERTY_HW_OUT_SLOT_TRUE           1U ///< This value of #mcuxClCss_KeyProp_t.fhwo indicates that the slot is a hardware out key slot
97 #define MCUXCLCSS_KEYPROPERTY_HW_OUT_SLOT_FALSE          0U ///< This value of #mcuxClCss_KeyProp_t.fhwo indicates that the slot is not a hardware out key slot
98 #define MCUXCLCSS_KEYPROPERTY_CMAC_TRUE                  1U ///< This value of #mcuxClCss_KeyProp_t.ucmac indicates that the key can be used for CMAC
99 #define MCUXCLCSS_KEYPROPERTY_CMAC_FALSE                 0U ///< This value of #mcuxClCss_KeyProp_t.ucmac indicates that the key cannot be used for CMAC
100 #define MCUXCLCSS_KEYPROPERTY_KSK_TRUE                   1U ///< This value of #mcuxClCss_KeyProp_t.uksk indicates that the key can be used for key signing
101 #define MCUXCLCSS_KEYPROPERTY_KSK_FALSE                  0U ///< This value of #mcuxClCss_KeyProp_t.uksk indicates that the key cannot be used for key signing
102 #define MCUXCLCSS_KEYPROPERTY_RTF_TRUE                   1U ///< This value of #mcuxClCss_KeyProp_t.urtf indicates that the key can be used for RTF signing
103 #define MCUXCLCSS_KEYPROPERTY_RTF_FALSE                  0U ///< This value of #mcuxClCss_KeyProp_t.urtf indicates that the key cannot be used for RTF signing
104 #define MCUXCLCSS_KEYPROPERTY_CKDF_TRUE                  1U ///< This value of #mcuxClCss_KeyProp_t.uckdf indicates that the key can be used for CKDF
105 #define MCUXCLCSS_KEYPROPERTY_CKDF_FALSE                 0U ///< This value of #mcuxClCss_KeyProp_t.uckdf indicates that the key cannot be used for CKDF
106 #define MCUXCLCSS_KEYPROPERTY_HKDF_TRUE                  1U ///< This value of #mcuxClCss_KeyProp_t.uhkdf indicates that the key can be used for HKDF
107 #define MCUXCLCSS_KEYPROPERTY_HKDF_FALSE                 0U ///< This value of #mcuxClCss_KeyProp_t.uhkdf indicates that the key cannot be used for HKDF
108 #define MCUXCLCSS_KEYPROPERTY_ECC_TRUE                   1U ///< This value of #mcuxClCss_KeyProp_t.uecsg indicates that the key can be used for ECC signing
109 #define MCUXCLCSS_KEYPROPERTY_ECC_FALSE                  0U ///< This value of #mcuxClCss_KeyProp_t.uecsg indicates that the key cannot be used for ECC signing
110 #define MCUXCLCSS_KEYPROPERTY_ECC_DH_PRIVATE_TRUE        1U ///< This value of #mcuxClCss_KeyProp_t.uecdh indicates that the key is a ECC Diffie Hellman private key
111 #define MCUXCLCSS_KEYPROPERTY_ECC_DH_PRIVATE_FALSE       0U ///< This value of #mcuxClCss_KeyProp_t.uecdh indicates that the key is not an ECC Diffie Hellman private key
112 #define MCUXCLCSS_KEYPROPERTY_AES_TRUE                   1U ///< This value of #mcuxClCss_KeyProp_t.uaes indicates that the key is an AES key
113 #define MCUXCLCSS_KEYPROPERTY_AES_FALSE                  0U ///< This value of #mcuxClCss_KeyProp_t.uaes indicates that the key is not an AES key
114 #define MCUXCLCSS_KEYPROPERTY_HMAC_TRUE                  1U ///< This value of #mcuxClCss_KeyProp_t.uhmac indicates that the key is an HMAC key
115 #define MCUXCLCSS_KEYPROPERTY_HMAC_FALSE                 0U ///< This value of #mcuxClCss_KeyProp_t.uhmac indicates that the key is not an HMAC key
116 #define MCUXCLCSS_KEYPROPERTY_KWK_TRUE                   1U ///< This value of #mcuxClCss_KeyProp_t.ukwk indicates that the key is a Key Wrapping Key
117 #define MCUXCLCSS_KEYPROPERTY_KWK_FALSE                  0U ///< This value of #mcuxClCss_KeyProp_t.ukwk indicates that the key is not a Key Wrapping Key
118 #define MCUXCLCSS_KEYPROPERTY_KUOK_TRUE                  1U ///< This value of #mcuxClCss_KeyProp_t.ukuok indicates that the key is a Key Unwrapping Only Key
119 #define MCUXCLCSS_KEYPROPERTY_KUOK_FALSE                 0U ///< This value of #mcuxClCss_KeyProp_t.ukuok indicates that the key is not a Key Unwrapping Only Key
120 #define MCUXCLCSS_KEYPROPERTY_TLS_PREMASTER_SECRET_TRUE  1U ///< This value of #mcuxClCss_KeyProp_t.utlspms indicates that the key is a TLS Premaster Secret
121 #define MCUXCLCSS_KEYPROPERTY_TLS_PREMASTER_SECRET_FALSE 0U ///< This value of #mcuxClCss_KeyProp_t.utlspms indicates that the key is not a TLS Premaster Secret
122 #define MCUXCLCSS_KEYPROPERTY_TLS_MASTER_SECRET_TRUE     1U ///< This value of #mcuxClCss_KeyProp_t.utlsms indicates that the key is a TLS Master Secret
123 #define MCUXCLCSS_KEYPROPERTY_TLS_MASTER_SECRET_FALSE    0U ///< This value of #mcuxClCss_KeyProp_t.utlsms indicates that the key is not a TLS Master Secret
124 #define MCUXCLCSS_KEYPROPERTY_INPUT_FOR_ECC_TRUE         1U ///< This value of #mcuxClCss_KeyProp_t.ukgsrc indicates that the key can be used as key material input for ECC key generation
125 #define MCUXCLCSS_KEYPROPERTY_INPUT_FOR_ECC_FALSE        0U ///< This value of #mcuxClCss_KeyProp_t.ukgsrc indicates that the key cannot be used as key material input for ECC key generation
126 #define MCUXCLCSS_KEYPROPERTY_HW_OUT_TRUE                1U ///< This value of #mcuxClCss_KeyProp_t.uhwo indicates that the key can be used in a hardware out key slot
127 #define MCUXCLCSS_KEYPROPERTY_HW_OUT_FALSE               0U ///< This value of #mcuxClCss_KeyProp_t.uhwo indicates that the key cannot be used in a hardware out key slot
128 #define MCUXCLCSS_KEYPROPERTY_WRAP_TRUE                  1U ///< This value of #mcuxClCss_KeyProp_t.wrpok indicates that the key can be wrapped
129 #define MCUXCLCSS_KEYPROPERTY_WRAP_FALSE                 0U ///< This value of #mcuxClCss_KeyProp_t.wrpok indicates that the key cannot be wrapped
130 #define MCUXCLCSS_KEYPROPERTY_DEVICE_UNIQUE_TRUE         1U ///< This value of #mcuxClCss_KeyProp_t.duk indicates that the key is a Device Unique Key
131 #define MCUXCLCSS_KEYPROPERTY_DEVICE_UNIQUE_FALSE        0U ///< This value of #mcuxClCss_KeyProp_t.duk indicates that the key is not a Device Unique Key
132 #define MCUXCLCSS_KEYPROPERTY_PRIVILEGED_TRUE            1U ///< This value of #mcuxClCss_KeyProp_t.upprot_priv indicates that the caller must be in privileged mode to use the key
133 #define MCUXCLCSS_KEYPROPERTY_PRIVILEGED_FALSE           0U ///< This value of #mcuxClCss_KeyProp_t.upprot_priv indicates that the caller does not need to be in privileged mode to use the key
134 #define MCUXCLCSS_KEYPROPERTY_SECURE_TRUE                0U ///< This value of #mcuxClCss_KeyProp_t.upprot_sec indicates that the caller must be in secure mode to use the key
135 #define MCUXCLCSS_KEYPROPERTY_SECURE_FALSE               1U ///< This value of #mcuxClCss_KeyProp_t.upprot_sec indicates that the caller does not need to be in secure mode to use the key
136 /**
137  * @}
138  */
139 
140 /**
141  * @defgroup MCUXCLCSS_STATUS_ MCUXCLCSS_STATUS_
142  * @brief Return code definitions
143  * @ingroup mcuxClCss_Types_Macros
144  * @{
145  */
146 #define MCUXCLCSS_STATUS_OK                   ((mcuxClCss_Status_t) 0xF0F0F0F0U) ///< No error occurred
147 #define MCUXCLCSS_STATUS_OK_WAIT              ((mcuxClCss_Status_t) 0xF0F0F0E1U) ///< An <tt>_Async</tt> function successfully started a CSS command. Call #mcuxClCss_WaitForOperation to complete it
148 #define MCUXCLCSS_STATUS_HW_FAULT             ((mcuxClCss_Status_t) 0xF0F0E1E1U) ///< CSSv2 hardware detected a fault
149 #define MCUXCLCSS_STATUS_HW_ALGORITHM         ((mcuxClCss_Status_t) 0xF0F0E1E2U) ///< An algorithm failed in hardware
150 #define MCUXCLCSS_STATUS_HW_OPERATIONAL       ((mcuxClCss_Status_t) 0xF0F0E1E4U) ///< CSSv2 was operated incorrectly
151 #define MCUXCLCSS_STATUS_HW_BUS               ((mcuxClCss_Status_t) 0xF0F0E1E8U) ///< A bus access failed
152 #define MCUXCLCSS_STATUS_HW_INTEGRITY         ((mcuxClCss_Status_t) 0xF0F0E1D1U) ///< An integrity check failed in hardware
153 #define MCUXCLCSS_STATUS_HW_PRNG              ((mcuxClCss_Status_t) 0xF0F0E1D2U) ///< Read access to PRNG output while PRNG is not in ready state
154 #define MCUXCLCSS_STATUS_HW_DTRNG             ((mcuxClCss_Status_t) 0xF0F0E1D4U) ///< Unable to get entropy from dTRNG with current configuration
155 #define MCUXCLCSS_STATUS_SW_FAULT             ((mcuxClCss_Status_t) 0xF0F0F0E2U) ///< Software detected a fault
156 #define MCUXCLCSS_STATUS_SW_CANNOT_INTERRUPT  ((mcuxClCss_Status_t) 0xF0F0F0E4U) ///< A CSS command was started while the CSS was still busy, or a SHA-Direct command was started while the SHA kernel was still busy
157 #define MCUXCLCSS_STATUS_SW_INVALID_PARAM     ((mcuxClCss_Status_t) 0xF0F0F0E8U) ///< Incorrect parameters were supplied
158 #define MCUXCLCSS_STATUS_SW_INVALID_STATE     ((mcuxClCss_Status_t) 0xF0F0F0D1U) ///< This can happen when CSS is in a wrong state for the requested CSS command
159 #define MCUXCLCSS_STATUS_SW_COUNTER_EXPIRED   ((mcuxClCss_Status_t) 0xF0F0F0D2U) ///< A software counter expired while waiting for a CSS operation to finish
160 #define MCUXCLCSS_STATUS_SW_COMPARISON_FAILED ((mcuxClCss_Status_t) 0xF0F0F0D4U) ///< A comparison between a CSS flag and its expected value failed
161 /** @} */
162 
163 #define MCUXCLCSS_STATUS_IS_HW_ERROR(x) ((((mcuxClCss_Status_t) (x)) & 0x0000FF00U) == 0x0000E100U) ///< Checks whether an error code is a hardware error. Indicates that an error was reported by CSSv2 hardware.
164 
165 #define MCUXCLCSS_STATUS_IS_SW_ERROR(x) ((((mcuxClCss_Status_t) (x)) & 0x0000FF00U) == 0x0000F000U) ///< Checks whether an error code is a software error. Indicates that the error was detected by the driver software and not by CSSv2 hardware.
166 
167 /**
168  * @}
169  */
170 
171 /**********************************************
172  * TYPEDEFS
173  **********************************************/
174 /**
175  * @defgroup mcuxClCss_Types_Types mcuxClCss_Types_Types
176  * @brief Defines all types of @ref mcuxClCss_Types
177  * @ingroup mcuxClCss_Types
178  * @{
179  */
180 /**
181  * @brief Type for CSS driver protected status codes
182  */
183 typedef uint64_t mcuxClCss_Status_Protected_t;
184 
185 /**
186  * @brief Type for CSS driver status codes
187  */
188 typedef uint32_t mcuxClCss_Status_t;
189 
190 /**
191  * @brief Type for CSS keystore indices
192  */
193 typedef uint8_t mcuxClCss_KeyIndex_t;
194 
195 /** Type for CSS key store key properties */
196 typedef union
197 {
198     struct
199     {
200         uint32_t value;          ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLCSS_KEYPROPERTY_VALUE_
201     } word;                      ///< Access #mcuxClCss_KeyProp_t word-wise
202     struct
203     {
204         uint32_t ksize :2;       ///< Key size
205         uint32_t :3;             ///< RFU
206         uint32_t kactv :1;       ///< Status flag to indicate whether the key slot contains an active key or not
207         uint32_t kbase :1;       ///< Status flag to indicate whether the key slot is a base slot or the second slot of a 256-bit key
208         uint32_t fgp :1;         ///< Hardware feature flag: General purpose key slot
209         uint32_t frtn :1;        ///< Hardware feature flag: Retention key slot
210         uint32_t fhwo :1;        ///< Hardware feature flag: Hardware-out key slot
211         uint32_t :3;             ///< RFU
212         uint32_t ucmac :1;       ///< Usage permission for CMAC
213         uint32_t uksk :1;        ///< Usage permission for key signing
214         uint32_t urtf :1;        ///< Usage permission for RTF signing
215         uint32_t uckdf :1;       ///< Usage permission for CKDF
216         uint32_t uhkdf :1;       ///< Usage permission for HKDF
217         uint32_t uecsg :1;       ///< Usage permission for ECDSA signing
218         uint32_t uecdh :1;       ///< Usage permission for Elliptic Curve Diffie-Hellman
219         uint32_t uaes :1;        ///< Usage permission for AES
220         uint32_t uhmac :1;       ///< Usage permission for HMAC
221         uint32_t ukwk :1;        ///< Usage permission for key wrapping
222         uint32_t ukuok :1;       ///< Usage permission for key unwrapping, but not for key wrapping
223         uint32_t utlspms :1;     ///< Usage permission as a TLS premaster secret
224         uint32_t utlsms :1;      ///< Usage permission as a TLS master secret
225         uint32_t ukgsrc :1;      ///< Usage permission as input for ECC key generation
226         uint32_t uhwo :1;        ///< Usage permission in a hardware-out key slot
227         uint32_t wrpok :1;       ///< Usage permission to wrap
228         uint32_t duk :1;         ///< Device-unique key flag
229         uint32_t upprot_priv :1; ///< Access restriction to privileged mode
230         uint32_t upprot_sec :1;  ///< Access restriction to TrustZone secure mode
231     } bits;                      ///< Access #mcuxClCss_KeyProp_t bit-wise
232 } mcuxClCss_KeyProp_t;
233 
234 
235 #define utlpsms utlspms ///< Deprecated name for #mcuxClCss_KeyProp_t.utlspms
236 
237 /**
238  * @brief Function type for transfer of data to a memory-mapped register
239  *
240  * This function type is used as a callback for handling data transfer from memory to a memory-mapped register.
241  * Such a function shall read data from the @c uint8_t array source, and write data via a sequence of writes to @p destRegister.
242  * Further specification of this function's behavior can be found in the documentation of the function that accepts this function as a callback parameter.
243  *
244  * @param     [out] destRegister  Memory-mapped register that the output data shall be written to
245  * @param [in]       source       Array containing the input data
246  * @param [in]       size         Size of @p source in bytes
247  * @param [in, out] pCallerData   Custom pointer that is provided by the caller and forwarded to the callback function by the operation
248  * @return An error code that can be any error code in @ref MCUXCLCSS_STATUS_, see individual documentation for more information
249  */
250 typedef mcuxClCss_Status_t (*mcuxClCss_TransferToRegisterFunction_t)(
251     uint32_t volatile * destRegister,
252     uint8_t const * source,
253     size_t size,
254     void * pCallerData);
255 
256 #endif /* MCUXCLCSS_TYPES_H_ */
257 
258 /**
259  * @}
260  *
261  * @}
262  */
263