islet_rmm/rmi/rec/
mpidr.rs1use armv9a::{define_bitfield, define_bits, define_mask};
2
3define_bits!(
5 MPIDR,
6 AFF3[31 - 24],
7 AFF2[23 - 16],
8 AFF1[15 - 8],
9 AFF0[3 - 0]
10);
11
12impl From<u64> for MPIDR {
13 fn from(val: u64) -> Self {
14 Self(val)
15 }
16}
17
18impl MPIDR {
19 pub fn index(&self) -> usize {
21 let aff0 = self.get_masked_value(MPIDR::AFF0) as usize;
22 let aff1 = self.get_masked_value(MPIDR::AFF1) as usize;
23 let aff2 = self.get_masked_value(MPIDR::AFF2) as usize;
24 let aff3 = self.get_masked_value(MPIDR::AFF3) as usize;
25
26 aff0 + (16 * aff1) + (16 * 256 * aff2) + (16 * 256 * 256 * aff3)
27 }
28}
29
30pub fn validate(mpidr: u64) -> bool {
31 let must_be_zero = !(MPIDR::AFF0 | MPIDR::AFF1 | MPIDR::AFF2 | MPIDR::AFF3);
32 mpidr & must_be_zero == 0
33}