1use kernel::utilities::registers::ReadOnly;
13use kernel::utilities::registers::ReadWrite;
14use kernel::utilities::registers::WriteOnly;
15use kernel::utilities::registers::{register_bitfields, register_structs};
16pub const KMAC_PARAM_NUM_WORDS_KEY: u32 = 16;
18pub const KMAC_PARAM_NUM_WORDS_PREFIX: u32 = 11;
20pub const KMAC_PARAM_NUM_ENTRIES_MSG_FIFO: u32 = 10;
22pub const KMAC_PARAM_NUM_BYTES_MSG_FIFO_ENTRY: u32 = 8;
24pub const KMAC_PARAM_NUM_SEEDS_ENTROPY_LFSR: u32 = 5;
26pub const KMAC_PARAM_NUM_ALERTS: u32 = 2;
28pub const KMAC_PARAM_REG_WIDTH: u32 = 32;
30
31register_structs! {
32    pub KmacRegisters {
33        (0x0000 => pub(crate) intr_state: ReadWrite<u32, INTR::Register>),
35        (0x0004 => pub(crate) intr_enable: ReadWrite<u32, INTR::Register>),
37        (0x0008 => pub(crate) intr_test: ReadWrite<u32, INTR::Register>),
39        (0x000c => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
41        (0x0010 => pub(crate) cfg_regwen: ReadWrite<u32, CFG_REGWEN::Register>),
43        (0x0014 => pub(crate) cfg_shadowed: ReadWrite<u32, CFG_SHADOWED::Register>),
45        (0x0018 => pub(crate) cmd: ReadWrite<u32, CMD::Register>),
47        (0x001c => pub(crate) status: ReadWrite<u32, STATUS::Register>),
49        (0x0020 => pub(crate) entropy_period: ReadWrite<u32, ENTROPY_PERIOD::Register>),
51        (0x0024 => pub(crate) entropy_refresh_hash_cnt: ReadWrite<u32, ENTROPY_REFRESH_HASH_CNT::Register>),
53        (0x0028 => pub(crate) entropy_refresh_threshold_shadowed: ReadWrite<u32, ENTROPY_REFRESH_THRESHOLD_SHADOWED::Register>),
55        (0x002c => pub(crate) entropy_seed: [ReadWrite<u32, ENTROPY_SEED::Register>; 5]),
57        (0x0040 => pub(crate) key_share0: [ReadWrite<u32, KEY_SHARE0::Register>; 16]),
59        (0x0080 => pub(crate) key_share1: [ReadWrite<u32, KEY_SHARE1::Register>; 16]),
61        (0x00c0 => pub(crate) key_len: ReadWrite<u32, KEY_LEN::Register>),
63        (0x00c4 => pub(crate) prefix: [ReadWrite<u32, PREFIX::Register>; 11]),
65        (0x00f0 => pub(crate) err_code: ReadWrite<u32, ERR_CODE::Register>),
67        (0x00f4 => _reserved1),
68        (0x0400 => pub(crate) state: [ReadOnly<u32>; 128]),
70        (0x0600 => _reserved2),
71        (0x0800 => pub(crate) msg_fifo: [WriteOnly<u32>; 512]),
73        (0x1000 => @END),
74    }
75}
76
77register_bitfields![u32,
78    pub(crate) INTR [
80        KMAC_DONE OFFSET(0) NUMBITS(1) [],
81        FIFO_EMPTY OFFSET(1) NUMBITS(1) [],
82        KMAC_ERR OFFSET(2) NUMBITS(1) [],
83    ],
84    pub(crate) ALERT_TEST [
85        RECOV_OPERATION_ERR OFFSET(0) NUMBITS(1) [],
86        FATAL_FAULT_ERR OFFSET(1) NUMBITS(1) [],
87    ],
88    pub(crate) CFG_REGWEN [
89        EN OFFSET(0) NUMBITS(1) [],
90    ],
91    pub(crate) CFG_SHADOWED [
92        KMAC_EN OFFSET(0) NUMBITS(1) [],
93        KSTRENGTH OFFSET(1) NUMBITS(3) [
94            L128 = 0,
95            L224 = 1,
96            L256 = 2,
97            L384 = 3,
98            L512 = 4,
99        ],
100        MODE OFFSET(4) NUMBITS(2) [
101            SHA3 = 0,
102            SHAKE = 2,
103            CSHAKE = 3,
104        ],
105        MSG_ENDIANNESS OFFSET(8) NUMBITS(1) [],
106        STATE_ENDIANNESS OFFSET(9) NUMBITS(1) [],
107        SIDELOAD OFFSET(12) NUMBITS(1) [],
108        ENTROPY_MODE OFFSET(16) NUMBITS(2) [
109            IDLE_MODE = 0,
110            EDN_MODE = 1,
111            SW_MODE = 2,
112        ],
113        ENTROPY_FAST_PROCESS OFFSET(19) NUMBITS(1) [],
114        MSG_MASK OFFSET(20) NUMBITS(1) [],
115        ENTROPY_READY OFFSET(24) NUMBITS(1) [],
116        ERR_PROCESSED OFFSET(25) NUMBITS(1) [],
117        EN_UNSUPPORTED_MODESTRENGTH OFFSET(26) NUMBITS(1) [],
118    ],
119    pub(crate) CMD [
120        CMD OFFSET(0) NUMBITS(6) [
121            START = 29,
122            PROCESS = 46,
123            RUN = 49,
124            DONE = 22,
125        ],
126        ENTROPY_REQ OFFSET(8) NUMBITS(1) [],
127        HASH_CNT_CLR OFFSET(9) NUMBITS(1) [],
128    ],
129    pub(crate) STATUS [
130        SHA3_IDLE OFFSET(0) NUMBITS(1) [],
131        SHA3_ABSORB OFFSET(1) NUMBITS(1) [],
132        SHA3_SQUEEZE OFFSET(2) NUMBITS(1) [],
133        FIFO_DEPTH OFFSET(8) NUMBITS(5) [],
134        FIFO_EMPTY OFFSET(14) NUMBITS(1) [],
135        FIFO_FULL OFFSET(15) NUMBITS(1) [],
136        ALERT_FATAL_FAULT OFFSET(16) NUMBITS(1) [],
137        ALERT_RECOV_CTRL_UPDATE_ERR OFFSET(17) NUMBITS(1) [],
138    ],
139    pub(crate) ENTROPY_PERIOD [
140        PRESCALER OFFSET(0) NUMBITS(10) [],
141        WAIT_TIMER OFFSET(16) NUMBITS(16) [],
142    ],
143    pub(crate) ENTROPY_REFRESH_HASH_CNT [
144        HASH_CNT OFFSET(0) NUMBITS(10) [],
145    ],
146    pub(crate) ENTROPY_REFRESH_THRESHOLD_SHADOWED [
147        THRESHOLD OFFSET(0) NUMBITS(10) [],
148    ],
149    pub(crate) ENTROPY_SEED [
150        SEED_0 OFFSET(0) NUMBITS(32) [],
151    ],
152    pub(crate) KEY_SHARE0 [
153        KEY_0 OFFSET(0) NUMBITS(32) [],
154    ],
155    pub(crate) KEY_SHARE1 [
156        KEY_0 OFFSET(0) NUMBITS(32) [],
157    ],
158    pub(crate) KEY_LEN [
159        LEN OFFSET(0) NUMBITS(3) [
160            KEY128 = 0,
161            KEY192 = 1,
162            KEY256 = 2,
163            KEY384 = 3,
164            KEY512 = 4,
165        ],
166    ],
167    pub(crate) PREFIX [
168        PREFIX_0 OFFSET(0) NUMBITS(32) [],
169    ],
170    pub(crate) ERR_CODE [
171        ERR_CODE OFFSET(0) NUMBITS(32) [],
172    ],
173];
174
175