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