| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496 |
- /**
- * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #pragma once
- #include <stdint.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** Group: key register */
- /** Type of key_0 register
- * Key material key_0 configure register
- */
- typedef union {
- struct {
- /** key_0 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_0 that is a part of key material.
- */
- uint32_t key_0:32;
- };
- uint32_t val;
- } aes_key_0_reg_t;
- /** Type of key_1 register
- * Key material key_1 configure register
- */
- typedef union {
- struct {
- /** key_1 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_1 that is a part of key material.
- */
- uint32_t key_1:32;
- };
- uint32_t val;
- } aes_key_1_reg_t;
- /** Type of key_2 register
- * Key material key_2 configure register
- */
- typedef union {
- struct {
- /** key_2 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_2 that is a part of key material.
- */
- uint32_t key_2:32;
- };
- uint32_t val;
- } aes_key_2_reg_t;
- /** Type of key_3 register
- * Key material key_3 configure register
- */
- typedef union {
- struct {
- /** key_3 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_3 that is a part of key material.
- */
- uint32_t key_3:32;
- };
- uint32_t val;
- } aes_key_3_reg_t;
- /** Type of key_4 register
- * Key material key_4 configure register
- */
- typedef union {
- struct {
- /** key_4 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_4 that is a part of key material.
- */
- uint32_t key_4:32;
- };
- uint32_t val;
- } aes_key_4_reg_t;
- /** Type of key_5 register
- * Key material key_5 configure register
- */
- typedef union {
- struct {
- /** key_5 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_5 that is a part of key material.
- */
- uint32_t key_5:32;
- };
- uint32_t val;
- } aes_key_5_reg_t;
- /** Type of key_6 register
- * Key material key_6 configure register
- */
- typedef union {
- struct {
- /** key_6 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_6 that is a part of key material.
- */
- uint32_t key_6:32;
- };
- uint32_t val;
- } aes_key_6_reg_t;
- /** Type of key_7 register
- * Key material key_7 configure register
- */
- typedef union {
- struct {
- /** key_7 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores key_7 that is a part of key material.
- */
- uint32_t key_7:32;
- };
- uint32_t val;
- } aes_key_7_reg_t;
- /** Group: text in register */
- /** Type of text_in_0 register
- * source text material text_in_0 configure register
- */
- typedef union {
- struct {
- /** text_in_0 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_in_0 that is a part of source text material.
- */
- uint32_t text_in_0:32;
- };
- uint32_t val;
- } aes_text_in_0_reg_t;
- /** Type of text_in_1 register
- * source text material text_in_1 configure register
- */
- typedef union {
- struct {
- /** text_in_1 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_in_1 that is a part of source text material.
- */
- uint32_t text_in_1:32;
- };
- uint32_t val;
- } aes_text_in_1_reg_t;
- /** Type of text_in_2 register
- * source text material text_in_2 configure register
- */
- typedef union {
- struct {
- /** text_in_2 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_in_2 that is a part of source text material.
- */
- uint32_t text_in_2:32;
- };
- uint32_t val;
- } aes_text_in_2_reg_t;
- /** Type of text_in_3 register
- * source text material text_in_3 configure register
- */
- typedef union {
- struct {
- /** text_in_3 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_in_3 that is a part of source text material.
- */
- uint32_t text_in_3:32;
- };
- uint32_t val;
- } aes_text_in_3_reg_t;
- /** Group: text out register */
- /** Type of text_out_0 register
- * result text material text_out_0 configure register
- */
- typedef union {
- struct {
- /** text_out_0 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_out_0 that is a part of result text material.
- */
- uint32_t text_out_0:32;
- };
- uint32_t val;
- } aes_text_out_0_reg_t;
- /** Type of text_out_1 register
- * result text material text_out_1 configure register
- */
- typedef union {
- struct {
- /** text_out_1 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_out_1 that is a part of result text material.
- */
- uint32_t text_out_1:32;
- };
- uint32_t val;
- } aes_text_out_1_reg_t;
- /** Type of text_out_2 register
- * result text material text_out_2 configure register
- */
- typedef union {
- struct {
- /** text_out_2 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_out_2 that is a part of result text material.
- */
- uint32_t text_out_2:32;
- };
- uint32_t val;
- } aes_text_out_2_reg_t;
- /** Type of text_out_3 register
- * result text material text_out_3 configure register
- */
- typedef union {
- struct {
- /** text_out_3 : R/W; bitpos: [31:0]; default: 0;
- * This bits stores text_out_3 that is a part of result text material.
- */
- uint32_t text_out_3:32;
- };
- uint32_t val;
- } aes_text_out_3_reg_t;
- /** Group: Configuration register */
- /** Type of mode register
- * AES Mode register
- */
- typedef union {
- struct {
- /** mode : R/W; bitpos: [2:0]; default: 0;
- * This bits decides which one operation mode will be used. 3'd0: AES-EN-128, 3'd1:
- * AES-EN-192, 3'd2: AES-EN-256, 3'd4: AES-DE-128, 3'd5: AES-DE-192, 3'd6: AES-DE-256.
- */
- uint32_t mode:3;
- uint32_t reserved_3:29;
- };
- uint32_t val;
- } aes_mode_reg_t;
- /** Type of endian register
- * AES Endian configure register
- */
- typedef union {
- struct {
- /** endian : R/W; bitpos: [5:0]; default: 0;
- * endian. [1:0] key endian, [3:2] text_in endian or in_stream endian, [5:4] text_out
- * endian or out_stream endian
- */
- uint32_t endian:6;
- uint32_t reserved_6:26;
- };
- uint32_t val;
- } aes_endian_reg_t;
- /** Type of block_mode register
- * AES cipher block mode register
- */
- typedef union {
- struct {
- /** block_mode : R/W; bitpos: [2:0]; default: 0;
- * Those bits decides which block mode will be used. 0x0: ECB, 0x1: CBC, 0x2: OFB,
- * 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: GCM, 0x7: reserved.
- */
- uint32_t block_mode:3;
- uint32_t reserved_3:29;
- };
- uint32_t val;
- } aes_block_mode_reg_t;
- /** Type of block_num register
- * AES block number register
- */
- typedef union {
- struct {
- /** block_num : R/W; bitpos: [31:0]; default: 0;
- * Those bits stores the number of Plaintext/ciphertext block.
- */
- uint32_t block_num:32;
- };
- uint32_t val;
- } aes_block_num_reg_t;
- /** Type of inc_sel register
- * Standard incrementing function configure register
- */
- typedef union {
- struct {
- /** inc_sel : R/W; bitpos: [0]; default: 0;
- * This bit decides the standard incrementing function. 0: INC32. 1: INC128.
- */
- uint32_t inc_sel:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_inc_sel_reg_t;
- /** Type of aad_block_num register
- * Additional Authential Data block number register
- */
- typedef union {
- struct {
- /** aad_block_num : R/W; bitpos: [31:0]; default: 0;
- * Those bits stores the number of AAD block.
- */
- uint32_t aad_block_num:32;
- };
- uint32_t val;
- } aes_aad_block_num_reg_t;
- /** Type of remainder_bit_num register
- * AES remainder bit number register
- */
- typedef union {
- struct {
- /** remainder_bit_num : R/W; bitpos: [6:0]; default: 0;
- * Those bits stores the number of remainder bit.
- */
- uint32_t remainder_bit_num:7;
- uint32_t reserved_7:25;
- };
- uint32_t val;
- } aes_remainder_bit_num_reg_t;
- /** Group: Control/Status register */
- /** Type of trigger register
- * AES trigger register
- */
- typedef union {
- struct {
- /** trigger : WT; bitpos: [0]; default: 0;
- * Set this bit to start AES calculation.
- */
- uint32_t trigger:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_trigger_reg_t;
- /** Type of state register
- * AES state register
- */
- typedef union {
- struct {
- /** state : RO; bitpos: [1:0]; default: 0;
- * Those bits shows AES status. For typical AES, 0: idle, 1: busy. For DMA-AES, 0:
- * idle, 1: busy, 2: calculation_done.
- */
- uint32_t state:2;
- uint32_t reserved_2:30;
- };
- uint32_t val;
- } aes_state_reg_t;
- /** Type of dma_enable register
- * DMA-AES working mode register
- */
- typedef union {
- struct {
- /** dma_enable : R/W; bitpos: [0]; default: 0;
- * 1'b0: typical AES working mode, 1'b1: DMA-AES working mode.
- */
- uint32_t dma_enable:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_dma_enable_reg_t;
- /** Type of continue register
- * AES continue register
- */
- typedef union {
- struct {
- /** conti : WT; bitpos: [0]; default: 0;
- * Set this bit to continue GCM operation.
- */
- uint32_t conti:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_continue_reg_t;
- /** Type of dma_exit register
- * AES-DMA exit config
- */
- typedef union {
- struct {
- /** dma_exit : WT; bitpos: [0]; default: 0;
- * Set this register to leave calculation done stage. Recommend to use it after
- * software finishes reading DMA's output buffer.
- */
- uint32_t dma_exit:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_dma_exit_reg_t;
- /** Group: memory type */
- /** Group: interrupt register */
- /** Type of int_clear register
- * AES Interrupt clear register
- */
- typedef union {
- struct {
- /** int_clear : WT; bitpos: [0]; default: 0;
- * Set this bit to clear the AES interrupt.
- */
- uint32_t int_clear:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_int_clear_reg_t;
- /** Type of int_ena register
- * AES Interrupt enable register
- */
- typedef union {
- struct {
- /** int_ena : R/W; bitpos: [0]; default: 0;
- * Set this bit to enable interrupt that occurs when DMA-AES calculation is done.
- */
- uint32_t int_ena:1;
- uint32_t reserved_1:31;
- };
- uint32_t val;
- } aes_int_ena_reg_t;
- /** Group: Version control register */
- /** Type of date register
- * AES version control register
- */
- typedef union {
- struct {
- /** date : R/W; bitpos: [29:0]; default: 538513936;
- * This bits stores the version information of AES.
- */
- uint32_t date:30;
- uint32_t reserved_30:2;
- };
- uint32_t val;
- } aes_date_reg_t;
- typedef struct aes_dev_t {
- volatile aes_key_0_reg_t key_0;
- volatile aes_key_1_reg_t key_1;
- volatile aes_key_2_reg_t key_2;
- volatile aes_key_3_reg_t key_3;
- volatile aes_key_4_reg_t key_4;
- volatile aes_key_5_reg_t key_5;
- volatile aes_key_6_reg_t key_6;
- volatile aes_key_7_reg_t key_7;
- volatile aes_text_in_0_reg_t text_in_0;
- volatile aes_text_in_1_reg_t text_in_1;
- volatile aes_text_in_2_reg_t text_in_2;
- volatile aes_text_in_3_reg_t text_in_3;
- volatile aes_text_out_0_reg_t text_out_0;
- volatile aes_text_out_1_reg_t text_out_1;
- volatile aes_text_out_2_reg_t text_out_2;
- volatile aes_text_out_3_reg_t text_out_3;
- volatile aes_mode_reg_t mode;
- volatile aes_endian_reg_t endian;
- volatile aes_trigger_reg_t trigger;
- volatile aes_state_reg_t state;
- volatile uint32_t iv[4];
- volatile uint32_t h[4];
- volatile uint32_t j0[4];
- volatile uint32_t t0[4];
- volatile aes_dma_enable_reg_t dma_enable;
- volatile aes_block_mode_reg_t block_mode;
- volatile aes_block_num_reg_t block_num;
- volatile aes_inc_sel_reg_t inc_sel;
- volatile aes_aad_block_num_reg_t aad_block_num;
- volatile aes_remainder_bit_num_reg_t remainder_bit_num;
- volatile aes_continue_reg_t conti;
- volatile aes_int_clear_reg_t int_clear;
- volatile aes_int_ena_reg_t int_ena;
- volatile aes_date_reg_t date;
- volatile aes_dma_exit_reg_t dma_exit;
- } aes_dev_t;
- extern aes_dev_t AES;
- #ifndef __cplusplus
- _Static_assert(sizeof(aes_dev_t) == 0xbc, "Invalid size of aes_dev_t structure");
- #endif
- #ifdef __cplusplus
- }
- #endif
|