1 /**
2  * \file
3  *
4  * \brief Component description for AESA
5  *
6  * Copyright (c) 2016 Atmel Corporation,
7  *                    a wholly owned subsidiary of Microchip Technology Inc.
8  *
9  * \asf_license_start
10  *
11  * \page License
12  *
13  * Licensed under the Apache License, Version 2.0 (the "License");
14  * you may not use this file except in compliance with the License.
15  * You may obtain a copy of the Licence at
16  *
17  *     http://www.apache.org/licenses/LICENSE-2.0
18  *
19  * Unless required by applicable law or agreed to in writing, software
20  * distributed under the License is distributed on an "AS IS" BASIS,
21  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22  * See the License for the specific language governing permissions and
23  * limitations under the License.
24  *
25  * \asf_license_stop
26  *
27  */
28 
29 #ifndef _SAM4L_AESA_COMPONENT_
30 #define _SAM4L_AESA_COMPONENT_
31 
32 /* ========================================================================== */
33 /**  SOFTWARE API DEFINITION FOR AESA */
34 /* ========================================================================== */
35 /** \addtogroup SAM4L_AESA Advanced Encryption Standard */
36 /*@{*/
37 
38 #define AESA_I7558
39 #define REV_AESA                    0x102
40 
41 /* -------- AESA_CTRL : (AESA Offset: 0x00) (R/W 32) Control Register -------- */
42 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
43 typedef union {
44   struct {
45     uint32_t ENABLE:1;         /*!< bit:      0  Enable Module                      */
46     uint32_t DKEYGEN:1;        /*!< bit:      1  Decryption Key Generate            */
47     uint32_t NEWMSG:1;         /*!< bit:      2  New Message                        */
48     uint32_t :5;               /*!< bit:  3.. 7  Reserved                           */
49     uint32_t SWRST:1;          /*!< bit:      8  Software Reset                     */
50     uint32_t :23;              /*!< bit:  9..31  Reserved                           */
51   } bit;                       /*!< Structure used for bit  access                  */
52   uint32_t reg;                /*!< Type      used for register access              */
53 } AESA_CTRL_Type;
54 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
55 
56 #define AESA_CTRL_OFFSET            0x00         /**< \brief (AESA_CTRL offset) Control Register */
57 #define AESA_CTRL_RESETVALUE        _U_(0x00000000); /**< \brief (AESA_CTRL reset_value) Control Register */
58 
59 #define AESA_CTRL_ENABLE_Pos        0            /**< \brief (AESA_CTRL) Enable Module */
60 #define AESA_CTRL_ENABLE            (_U_(0x1) << AESA_CTRL_ENABLE_Pos)
61 #define AESA_CTRL_DKEYGEN_Pos       1            /**< \brief (AESA_CTRL) Decryption Key Generate */
62 #define AESA_CTRL_DKEYGEN           (_U_(0x1) << AESA_CTRL_DKEYGEN_Pos)
63 #define AESA_CTRL_NEWMSG_Pos        2            /**< \brief (AESA_CTRL) New Message */
64 #define AESA_CTRL_NEWMSG            (_U_(0x1) << AESA_CTRL_NEWMSG_Pos)
65 #define AESA_CTRL_SWRST_Pos         8            /**< \brief (AESA_CTRL) Software Reset */
66 #define AESA_CTRL_SWRST             (_U_(0x1) << AESA_CTRL_SWRST_Pos)
67 #define AESA_CTRL_MASK              _U_(0x00000107) /**< \brief (AESA_CTRL) MASK Register */
68 
69 /* -------- AESA_MODE : (AESA Offset: 0x04) (R/W 32) Mode Register -------- */
70 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
71 typedef union {
72   struct {
73     uint32_t ENCRYPT:1;        /*!< bit:      0  Encryption                         */
74     uint32_t KEYSIZE:2;        /*!< bit:  1.. 2  Key Size                           */
75     uint32_t DMA:1;            /*!< bit:      3  DMA Mode                           */
76     uint32_t OPMODE:3;         /*!< bit:  4.. 6  Confidentiality Mode of Operation  */
77     uint32_t :1;               /*!< bit:      7  Reserved                           */
78     uint32_t CFBS:3;           /*!< bit:  8..10  Cipher Feedback Data Segment Size  */
79     uint32_t :5;               /*!< bit: 11..15  Reserved                           */
80     uint32_t CTYPE:4;          /*!< bit: 16..19  Countermeasure Type                */
81     uint32_t :12;              /*!< bit: 20..31  Reserved                           */
82   } bit;                       /*!< Structure used for bit  access                  */
83   uint32_t reg;                /*!< Type      used for register access              */
84 } AESA_MODE_Type;
85 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
86 
87 #define AESA_MODE_OFFSET            0x04         /**< \brief (AESA_MODE offset) Mode Register */
88 #define AESA_MODE_RESETVALUE        _U_(0x000F0000); /**< \brief (AESA_MODE reset_value) Mode Register */
89 
90 #define AESA_MODE_ENCRYPT_Pos       0            /**< \brief (AESA_MODE) Encryption */
91 #define AESA_MODE_ENCRYPT           (_U_(0x1) << AESA_MODE_ENCRYPT_Pos)
92 #define AESA_MODE_KEYSIZE_Pos       1            /**< \brief (AESA_MODE) Key Size */
93 #define AESA_MODE_KEYSIZE_Msk       (_U_(0x3) << AESA_MODE_KEYSIZE_Pos)
94 #define AESA_MODE_KEYSIZE(value)    (AESA_MODE_KEYSIZE_Msk & ((value) << AESA_MODE_KEYSIZE_Pos))
95 #define AESA_MODE_DMA_Pos           3            /**< \brief (AESA_MODE) DMA Mode */
96 #define AESA_MODE_DMA               (_U_(0x1) << AESA_MODE_DMA_Pos)
97 #define AESA_MODE_OPMODE_Pos        4            /**< \brief (AESA_MODE) Confidentiality Mode of Operation */
98 #define AESA_MODE_OPMODE_Msk        (_U_(0x7) << AESA_MODE_OPMODE_Pos)
99 #define AESA_MODE_OPMODE(value)     (AESA_MODE_OPMODE_Msk & ((value) << AESA_MODE_OPMODE_Pos))
100 #define AESA_MODE_CFBS_Pos          8            /**< \brief (AESA_MODE) Cipher Feedback Data Segment Size */
101 #define AESA_MODE_CFBS_Msk          (_U_(0x7) << AESA_MODE_CFBS_Pos)
102 #define AESA_MODE_CFBS(value)       (AESA_MODE_CFBS_Msk & ((value) << AESA_MODE_CFBS_Pos))
103 #define AESA_MODE_CTYPE_Pos         16           /**< \brief (AESA_MODE) Countermeasure Type */
104 #define AESA_MODE_CTYPE_Msk         (_U_(0xF) << AESA_MODE_CTYPE_Pos)
105 #define AESA_MODE_CTYPE(value)      (AESA_MODE_CTYPE_Msk & ((value) << AESA_MODE_CTYPE_Pos))
106 #define AESA_MODE_MASK              _U_(0x000F077F) /**< \brief (AESA_MODE) MASK Register */
107 
108 /* -------- AESA_DATABUFPTR : (AESA Offset: 0x08) (R/W 32) Data Buffer Pointer Register -------- */
109 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
110 typedef union {
111   struct {
112     uint32_t IDATAW:2;         /*!< bit:  0.. 1  Input Data Word                    */
113     uint32_t :2;               /*!< bit:  2.. 3  Reserved                           */
114     uint32_t ODATAW:2;         /*!< bit:  4.. 5  Output Data Word                   */
115     uint32_t :26;              /*!< bit:  6..31  Reserved                           */
116   } bit;                       /*!< Structure used for bit  access                  */
117   uint32_t reg;                /*!< Type      used for register access              */
118 } AESA_DATABUFPTR_Type;
119 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
120 
121 #define AESA_DATABUFPTR_OFFSET      0x08         /**< \brief (AESA_DATABUFPTR offset) Data Buffer Pointer Register */
122 #define AESA_DATABUFPTR_RESETVALUE  _U_(0x00000000); /**< \brief (AESA_DATABUFPTR reset_value) Data Buffer Pointer Register */
123 
124 #define AESA_DATABUFPTR_IDATAW_Pos  0            /**< \brief (AESA_DATABUFPTR) Input Data Word */
125 #define AESA_DATABUFPTR_IDATAW_Msk  (_U_(0x3) << AESA_DATABUFPTR_IDATAW_Pos)
126 #define AESA_DATABUFPTR_IDATAW(value) (AESA_DATABUFPTR_IDATAW_Msk & ((value) << AESA_DATABUFPTR_IDATAW_Pos))
127 #define AESA_DATABUFPTR_ODATAW_Pos  4            /**< \brief (AESA_DATABUFPTR) Output Data Word */
128 #define AESA_DATABUFPTR_ODATAW_Msk  (_U_(0x3) << AESA_DATABUFPTR_ODATAW_Pos)
129 #define AESA_DATABUFPTR_ODATAW(value) (AESA_DATABUFPTR_ODATAW_Msk & ((value) << AESA_DATABUFPTR_ODATAW_Pos))
130 #define AESA_DATABUFPTR_MASK        _U_(0x00000033) /**< \brief (AESA_DATABUFPTR) MASK Register */
131 
132 /* -------- AESA_SR : (AESA Offset: 0x0C) (R/  32) Status Register -------- */
133 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
134 typedef union {
135   struct {
136     uint32_t ODATARDY:1;       /*!< bit:      0  Output Data Ready                  */
137     uint32_t :15;              /*!< bit:  1..15  Reserved                           */
138     uint32_t IBUFRDY:1;        /*!< bit:     16  Input Buffer Ready                 */
139     uint32_t :15;              /*!< bit: 17..31  Reserved                           */
140   } bit;                       /*!< Structure used for bit  access                  */
141   uint32_t reg;                /*!< Type      used for register access              */
142 } AESA_SR_Type;
143 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
144 
145 #define AESA_SR_OFFSET              0x0C         /**< \brief (AESA_SR offset) Status Register */
146 #define AESA_SR_RESETVALUE          _U_(0x00010000); /**< \brief (AESA_SR reset_value) Status Register */
147 
148 #define AESA_SR_ODATARDY_Pos        0            /**< \brief (AESA_SR) Output Data Ready */
149 #define AESA_SR_ODATARDY            (_U_(0x1) << AESA_SR_ODATARDY_Pos)
150 #define AESA_SR_IBUFRDY_Pos         16           /**< \brief (AESA_SR) Input Buffer Ready */
151 #define AESA_SR_IBUFRDY             (_U_(0x1) << AESA_SR_IBUFRDY_Pos)
152 #define AESA_SR_MASK                _U_(0x00010001) /**< \brief (AESA_SR) MASK Register */
153 
154 /* -------- AESA_IER : (AESA Offset: 0x10) ( /W 32) Interrupt Enable Register -------- */
155 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
156 typedef union {
157   struct {
158     uint32_t ODATARDY:1;       /*!< bit:      0  Output Data Ready Interrupt Enable */
159     uint32_t :15;              /*!< bit:  1..15  Reserved                           */
160     uint32_t IBUFRDY:1;        /*!< bit:     16  Input Buffer Ready Interrupt Enable */
161     uint32_t :15;              /*!< bit: 17..31  Reserved                           */
162   } bit;                       /*!< Structure used for bit  access                  */
163   uint32_t reg;                /*!< Type      used for register access              */
164 } AESA_IER_Type;
165 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
166 
167 #define AESA_IER_OFFSET             0x10         /**< \brief (AESA_IER offset) Interrupt Enable Register */
168 #define AESA_IER_RESETVALUE         _U_(0x00000000); /**< \brief (AESA_IER reset_value) Interrupt Enable Register */
169 
170 #define AESA_IER_ODATARDY_Pos       0            /**< \brief (AESA_IER) Output Data Ready Interrupt Enable */
171 #define AESA_IER_ODATARDY           (_U_(0x1) << AESA_IER_ODATARDY_Pos)
172 #define AESA_IER_IBUFRDY_Pos        16           /**< \brief (AESA_IER) Input Buffer Ready Interrupt Enable */
173 #define AESA_IER_IBUFRDY            (_U_(0x1) << AESA_IER_IBUFRDY_Pos)
174 #define AESA_IER_MASK               _U_(0x00010001) /**< \brief (AESA_IER) MASK Register */
175 
176 /* -------- AESA_IDR : (AESA Offset: 0x14) ( /W 32) Interrupt Disable Register -------- */
177 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
178 typedef union {
179   struct {
180     uint32_t ODATARDY:1;       /*!< bit:      0  Output Data Ready Interrupt Disable */
181     uint32_t :15;              /*!< bit:  1..15  Reserved                           */
182     uint32_t IBUFRDY:1;        /*!< bit:     16  Input Buffer Ready Interrupt Disable */
183     uint32_t :15;              /*!< bit: 17..31  Reserved                           */
184   } bit;                       /*!< Structure used for bit  access                  */
185   uint32_t reg;                /*!< Type      used for register access              */
186 } AESA_IDR_Type;
187 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
188 
189 #define AESA_IDR_OFFSET             0x14         /**< \brief (AESA_IDR offset) Interrupt Disable Register */
190 #define AESA_IDR_RESETVALUE         _U_(0x00000000); /**< \brief (AESA_IDR reset_value) Interrupt Disable Register */
191 
192 #define AESA_IDR_ODATARDY_Pos       0            /**< \brief (AESA_IDR) Output Data Ready Interrupt Disable */
193 #define AESA_IDR_ODATARDY           (_U_(0x1) << AESA_IDR_ODATARDY_Pos)
194 #define AESA_IDR_IBUFRDY_Pos        16           /**< \brief (AESA_IDR) Input Buffer Ready Interrupt Disable */
195 #define AESA_IDR_IBUFRDY            (_U_(0x1) << AESA_IDR_IBUFRDY_Pos)
196 #define AESA_IDR_MASK               _U_(0x00010001) /**< \brief (AESA_IDR) MASK Register */
197 
198 /* -------- AESA_IMR : (AESA Offset: 0x18) (R/  32) Interrupt Mask Register -------- */
199 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
200 typedef union {
201   struct {
202     uint32_t ODATARDY:1;       /*!< bit:      0  Output Data Ready Interrupt Mask   */
203     uint32_t :15;              /*!< bit:  1..15  Reserved                           */
204     uint32_t IBUFRDY:1;        /*!< bit:     16  Input Buffer Ready Interrupt Mask  */
205     uint32_t :15;              /*!< bit: 17..31  Reserved                           */
206   } bit;                       /*!< Structure used for bit  access                  */
207   uint32_t reg;                /*!< Type      used for register access              */
208 } AESA_IMR_Type;
209 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
210 
211 #define AESA_IMR_OFFSET             0x18         /**< \brief (AESA_IMR offset) Interrupt Mask Register */
212 #define AESA_IMR_RESETVALUE         _U_(0x00000000); /**< \brief (AESA_IMR reset_value) Interrupt Mask Register */
213 
214 #define AESA_IMR_ODATARDY_Pos       0            /**< \brief (AESA_IMR) Output Data Ready Interrupt Mask */
215 #define AESA_IMR_ODATARDY           (_U_(0x1) << AESA_IMR_ODATARDY_Pos)
216 #define AESA_IMR_IBUFRDY_Pos        16           /**< \brief (AESA_IMR) Input Buffer Ready Interrupt Mask */
217 #define AESA_IMR_IBUFRDY            (_U_(0x1) << AESA_IMR_IBUFRDY_Pos)
218 #define AESA_IMR_MASK               _U_(0x00010001) /**< \brief (AESA_IMR) MASK Register */
219 
220 /* -------- AESA_KEY : (AESA Offset: 0x20) ( /W 32) KEY Key Register -------- */
221 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
222 typedef union {
223   struct {
224     uint32_t KEY0:32;          /*!< bit:  0..31  Key Word 0                         */
225   } bit;                       /*!< Structure used for bit  access                  */
226   uint32_t reg;                /*!< Type      used for register access              */
227 } AESA_KEY_Type;
228 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
229 
230 #define AESA_KEY_OFFSET             0x20         /**< \brief (AESA_KEY offset) Key Register */
231 #define AESA_KEY_RESETVALUE         _U_(0x00000000); /**< \brief (AESA_KEY reset_value) Key Register */
232 
233 #define AESA_KEY_KEY0_Pos           0            /**< \brief (AESA_KEY) Key Word 0 */
234 #define AESA_KEY_KEY0_Msk           (_U_(0xFFFFFFFF) << AESA_KEY_KEY0_Pos)
235 #define AESA_KEY_KEY0(value)        (AESA_KEY_KEY0_Msk & ((value) << AESA_KEY_KEY0_Pos))
236 #define AESA_KEY_MASK               _U_(0xFFFFFFFF) /**< \brief (AESA_KEY) MASK Register */
237 
238 /* -------- AESA_INITVECT : (AESA Offset: 0x40) ( /W 32) INITVECT Initialization Vector Register -------- */
239 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
240 typedef union {
241   struct {
242     uint32_t INITVECT0:32;     /*!< bit:  0..31  Initialization Vector Word 0       */
243   } bit;                       /*!< Structure used for bit  access                  */
244   uint32_t reg;                /*!< Type      used for register access              */
245 } AESA_INITVECT_Type;
246 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
247 
248 #define AESA_INITVECT_OFFSET        0x40         /**< \brief (AESA_INITVECT offset) Initialization Vector Register */
249 #define AESA_INITVECT_RESETVALUE    _U_(0x00000000); /**< \brief (AESA_INITVECT reset_value) Initialization Vector Register */
250 
251 #define AESA_INITVECT_INITVECT0_Pos 0            /**< \brief (AESA_INITVECT) Initialization Vector Word 0 */
252 #define AESA_INITVECT_INITVECT0_Msk (_U_(0xFFFFFFFF) << AESA_INITVECT_INITVECT0_Pos)
253 #define AESA_INITVECT_INITVECT0(value) (AESA_INITVECT_INITVECT0_Msk & ((value) << AESA_INITVECT_INITVECT0_Pos))
254 #define AESA_INITVECT_MASK          _U_(0xFFFFFFFF) /**< \brief (AESA_INITVECT) MASK Register */
255 
256 /* -------- AESA_IDATA : (AESA Offset: 0x50) ( /W 32) Input Data Register -------- */
257 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
258 typedef union {
259   struct {
260     uint32_t IDATA:32;         /*!< bit:  0..31  Input Data                         */
261   } bit;                       /*!< Structure used for bit  access                  */
262   uint32_t reg;                /*!< Type      used for register access              */
263 } AESA_IDATA_Type;
264 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
265 
266 #define AESA_IDATA_OFFSET           0x50         /**< \brief (AESA_IDATA offset) Input Data Register */
267 #define AESA_IDATA_RESETVALUE       _U_(0x00000000); /**< \brief (AESA_IDATA reset_value) Input Data Register */
268 
269 #define AESA_IDATA_IDATA_Pos        0            /**< \brief (AESA_IDATA) Input Data */
270 #define AESA_IDATA_IDATA_Msk        (_U_(0xFFFFFFFF) << AESA_IDATA_IDATA_Pos)
271 #define AESA_IDATA_IDATA(value)     (AESA_IDATA_IDATA_Msk & ((value) << AESA_IDATA_IDATA_Pos))
272 #define AESA_IDATA_MASK             _U_(0xFFFFFFFF) /**< \brief (AESA_IDATA) MASK Register */
273 
274 /* -------- AESA_ODATA : (AESA Offset: 0x60) (R/  32) Output Data Register -------- */
275 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
276 typedef union {
277   struct {
278     uint32_t ODATA:32;         /*!< bit:  0..31  Output Data                        */
279   } bit;                       /*!< Structure used for bit  access                  */
280   uint32_t reg;                /*!< Type      used for register access              */
281 } AESA_ODATA_Type;
282 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
283 
284 #define AESA_ODATA_OFFSET           0x60         /**< \brief (AESA_ODATA offset) Output Data Register */
285 #define AESA_ODATA_RESETVALUE       _U_(0x00000000); /**< \brief (AESA_ODATA reset_value) Output Data Register */
286 
287 #define AESA_ODATA_ODATA_Pos        0            /**< \brief (AESA_ODATA) Output Data */
288 #define AESA_ODATA_ODATA_Msk        (_U_(0xFFFFFFFF) << AESA_ODATA_ODATA_Pos)
289 #define AESA_ODATA_ODATA(value)     (AESA_ODATA_ODATA_Msk & ((value) << AESA_ODATA_ODATA_Pos))
290 #define AESA_ODATA_MASK             _U_(0xFFFFFFFF) /**< \brief (AESA_ODATA) MASK Register */
291 
292 /* -------- AESA_DRNGSEED : (AESA Offset: 0x70) ( /W 32) DRNG Seed Register -------- */
293 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
294 typedef union {
295   struct {
296     uint32_t SEED:32;          /*!< bit:  0..31  DRNG Seed                          */
297   } bit;                       /*!< Structure used for bit  access                  */
298   uint32_t reg;                /*!< Type      used for register access              */
299 } AESA_DRNGSEED_Type;
300 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
301 
302 #define AESA_DRNGSEED_OFFSET        0x70         /**< \brief (AESA_DRNGSEED offset) DRNG Seed Register */
303 #define AESA_DRNGSEED_RESETVALUE    _U_(0x00000000); /**< \brief (AESA_DRNGSEED reset_value) DRNG Seed Register */
304 
305 #define AESA_DRNGSEED_SEED_Pos      0            /**< \brief (AESA_DRNGSEED) DRNG Seed */
306 #define AESA_DRNGSEED_SEED_Msk      (_U_(0xFFFFFFFF) << AESA_DRNGSEED_SEED_Pos)
307 #define AESA_DRNGSEED_SEED(value)   (AESA_DRNGSEED_SEED_Msk & ((value) << AESA_DRNGSEED_SEED_Pos))
308 #define AESA_DRNGSEED_MASK          _U_(0xFFFFFFFF) /**< \brief (AESA_DRNGSEED) MASK Register */
309 
310 /* -------- AESA_PARAMETER : (AESA Offset: 0xF8) (R/  32) Parameter Register -------- */
311 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
312 typedef union {
313   struct {
314     uint32_t KEYSIZE:2;        /*!< bit:  0.. 1  Maximum Key Size                   */
315     uint32_t OPMODE:3;         /*!< bit:  2.. 4  Maximum Number of Confidentiality Modes of Operation */
316     uint32_t :3;               /*!< bit:  5.. 7  Reserved                           */
317     uint32_t CTRMEAS:1;        /*!< bit:      8  Countermeasures                    */
318     uint32_t :23;              /*!< bit:  9..31  Reserved                           */
319   } bit;                       /*!< Structure used for bit  access                  */
320   uint32_t reg;                /*!< Type      used for register access              */
321 } AESA_PARAMETER_Type;
322 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
323 
324 #define AESA_PARAMETER_OFFSET       0xF8         /**< \brief (AESA_PARAMETER offset) Parameter Register */
325 #define AESA_PARAMETER_RESETVALUE   _U_(0x00000112); /**< \brief (AESA_PARAMETER reset_value) Parameter Register */
326 
327 #define AESA_PARAMETER_KEYSIZE_Pos  0            /**< \brief (AESA_PARAMETER) Maximum Key Size */
328 #define AESA_PARAMETER_KEYSIZE_Msk  (_U_(0x3) << AESA_PARAMETER_KEYSIZE_Pos)
329 #define AESA_PARAMETER_KEYSIZE(value) (AESA_PARAMETER_KEYSIZE_Msk & ((value) << AESA_PARAMETER_KEYSIZE_Pos))
330 #define AESA_PARAMETER_OPMODE_Pos   2            /**< \brief (AESA_PARAMETER) Maximum Number of Confidentiality Modes of Operation */
331 #define AESA_PARAMETER_OPMODE_Msk   (_U_(0x7) << AESA_PARAMETER_OPMODE_Pos)
332 #define AESA_PARAMETER_OPMODE(value) (AESA_PARAMETER_OPMODE_Msk & ((value) << AESA_PARAMETER_OPMODE_Pos))
333 #define AESA_PARAMETER_CTRMEAS_Pos  8            /**< \brief (AESA_PARAMETER) Countermeasures */
334 #define AESA_PARAMETER_CTRMEAS      (_U_(0x1) << AESA_PARAMETER_CTRMEAS_Pos)
335 #define AESA_PARAMETER_MASK         _U_(0x0000011F) /**< \brief (AESA_PARAMETER) MASK Register */
336 
337 /* -------- AESA_VERSION : (AESA Offset: 0xFC) (R/  32) Version Register -------- */
338 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
339 typedef union {
340   struct {
341     uint32_t VERSION:12;       /*!< bit:  0..11  Version Number                     */
342     uint32_t :4;               /*!< bit: 12..15  Reserved                           */
343     uint32_t VARIANT:4;        /*!< bit: 16..19  Variant Number                     */
344     uint32_t :12;              /*!< bit: 20..31  Reserved                           */
345   } bit;                       /*!< Structure used for bit  access                  */
346   uint32_t reg;                /*!< Type      used for register access              */
347 } AESA_VERSION_Type;
348 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
349 
350 #define AESA_VERSION_OFFSET         0xFC         /**< \brief (AESA_VERSION offset) Version Register */
351 #define AESA_VERSION_RESETVALUE     _U_(0x00000102); /**< \brief (AESA_VERSION reset_value) Version Register */
352 
353 #define AESA_VERSION_VERSION_Pos    0            /**< \brief (AESA_VERSION) Version Number */
354 #define AESA_VERSION_VERSION_Msk    (_U_(0xFFF) << AESA_VERSION_VERSION_Pos)
355 #define AESA_VERSION_VERSION(value) (AESA_VERSION_VERSION_Msk & ((value) << AESA_VERSION_VERSION_Pos))
356 #define AESA_VERSION_VARIANT_Pos    16           /**< \brief (AESA_VERSION) Variant Number */
357 #define AESA_VERSION_VARIANT_Msk    (_U_(0xF) << AESA_VERSION_VARIANT_Pos)
358 #define AESA_VERSION_VARIANT(value) (AESA_VERSION_VARIANT_Msk & ((value) << AESA_VERSION_VARIANT_Pos))
359 #define AESA_VERSION_MASK           _U_(0x000F0FFF) /**< \brief (AESA_VERSION) MASK Register */
360 
361 /** \brief AesaInitvect hardware registers */
362 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
363 typedef union {
364  struct {
365   __O  AESA_INITVECT_Type        INITVECT;    /**< \brief Offset: 0x00 ( /W 32) Initialization Vector Register */
366  } bf;
367  struct {
368   WoReg   AESA_INITVECT;      /**< \brief (AESA Offset: 0x00) Initialization Vector Register */
369  } reg;
370 } AesaInitvect;
371 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
372 
373 /** \brief AesaKey hardware registers */
374 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
375 typedef union {
376  struct {
377   __O  AESA_KEY_Type             KEY;         /**< \brief Offset: 0x00 ( /W 32) Key Register */
378  } bf;
379  struct {
380   WoReg   AESA_KEY;           /**< \brief (AESA Offset: 0x00) Key Register */
381  } reg;
382 } AesaKey;
383 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
384 
385 /** \brief AESA hardware registers */
386 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
387 typedef struct {
388   __IO uint32_t CTRL;        /**< \brief Offset: 0x00 (R/W 32) Control Register */
389   __IO uint32_t MODE;        /**< \brief Offset: 0x04 (R/W 32) Mode Register */
390   __IO uint32_t DATABUFPTR;  /**< \brief Offset: 0x08 (R/W 32) Data Buffer Pointer Register */
391   __I  uint32_t SR;          /**< \brief Offset: 0x0C (R/  32) Status Register */
392   __O  uint32_t IER;         /**< \brief Offset: 0x10 ( /W 32) Interrupt Enable Register */
393   __O  uint32_t IDR;         /**< \brief Offset: 0x14 ( /W 32) Interrupt Disable Register */
394   __I  uint32_t IMR;         /**< \brief Offset: 0x18 (R/  32) Interrupt Mask Register */
395        RoReg8   Reserved1[0x4];
396   __O  uint32_t Key[8];      /**< \brief Offset: 0x20 AesaKey groups */
397   __O  uint32_t Initvect[4]; /**< \brief Offset: 0x40 AesaInitvect groups */
398   __O  uint32_t IDATA;       /**< \brief Offset: 0x50 ( /W 32) Input Data Register */
399        RoReg8   Reserved2[0xC];
400   __I  uint32_t ODATA;       /**< \brief Offset: 0x60 (R/  32) Output Data Register */
401        RoReg8   Reserved3[0xC];
402   __O  uint32_t DRNGSEED;    /**< \brief Offset: 0x70 ( /W 32) DRNG Seed Register */
403        RoReg8   Reserved4[0x84];
404   __I  uint32_t PARAMETER;   /**< \brief Offset: 0xF8 (R/  32) Parameter Register */
405   __I  uint32_t VERSION;     /**< \brief Offset: 0xFC (R/  32) Version Register */
406 } Aesa;
407 #endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
408 
409 /*@}*/
410 
411 #endif /* _SAM4L_AESA_COMPONENT_ */
412