1#![cfg_attr(not(any(test, feature = "fakes")), no_std)]
7
8#[cfg(not(any(test, feature = "fakes")))]
9mod aarch64;
10#[cfg(any(test, feature = "fakes"))]
11pub mod fake;
12mod macros;
13mod manual;
14
15use bitflags::bitflags;
16pub use manual::*;
17#[doc(hidden)]
18pub use paste as _paste;
19
20#[cfg(feature = "el1")]
21bitflags! {
22 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
24 #[repr(transparent)]
25 pub struct ApiakeyhiEl1: u64 {
26 }
27}
28
29#[cfg(feature = "el1")]
30impl ApiakeyhiEl1 {
31 pub const APIAKEYHI_SHIFT: u32 = 0;
33 pub const APIAKEYHI_MASK: u64 =
35 0b1111111111111111111111111111111111111111111111111111111111111111;
36
37 pub const fn apiakeyhi(self) -> u64 {
39 ((self.bits() >> Self::APIAKEYHI_SHIFT)
40 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
41 }
42}
43
44#[cfg(feature = "el1")]
45bitflags! {
46 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
48 #[repr(transparent)]
49 pub struct ApiakeyloEl1: u64 {
50 }
51}
52
53#[cfg(feature = "el1")]
54impl ApiakeyloEl1 {
55 pub const APIAKEYLO_SHIFT: u32 = 0;
57 pub const APIAKEYLO_MASK: u64 =
59 0b1111111111111111111111111111111111111111111111111111111111111111;
60
61 pub const fn apiakeylo(self) -> u64 {
63 ((self.bits() >> Self::APIAKEYLO_SHIFT)
64 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
65 }
66}
67
68#[cfg(feature = "el1")]
69bitflags! {
70 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
72 #[repr(transparent)]
73 pub struct CcsidrEl1: u64 {
74 }
75}
76
77#[cfg(feature = "el1")]
78impl CcsidrEl1 {
79 pub const LINESIZE_SHIFT: u32 = 0;
81 pub const LINESIZE_MASK: u64 = 0b111;
83
84 pub const fn linesize(self) -> u8 {
86 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
87 }
88}
89
90#[cfg(feature = "el1")]
91bitflags! {
92 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
96 #[repr(transparent)]
97 pub struct ClidrEl1: u64 {
98 }
99}
100
101#[cfg(feature = "el1")]
102impl ClidrEl1 {
103 pub const CTYPE_SHIFT: u32 = 0;
105 pub const CTYPE_MASK: u64 = 0b111;
107 pub const LOUIS_SHIFT: u32 = 21;
109 pub const LOUIS_MASK: u64 = 0b111;
111 pub const LOC_SHIFT: u32 = 24;
113 pub const LOC_MASK: u64 = 0b111;
115 pub const LOUU_SHIFT: u32 = 27;
117 pub const LOUU_MASK: u64 = 0b111;
119 pub const ICB_SHIFT: u32 = 30;
121 pub const ICB_MASK: u64 = 0b111;
123 pub const TTYPE_SHIFT: u32 = 33;
125 pub const TTYPE_MASK: u64 = 0b11;
127
128 pub fn ctype(self, n: u32) -> crate::manual::CacheType {
130 assert!(n >= 1 && n < 8);
131 crate::manual::CacheType::try_from(
132 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8,
133 )
134 .unwrap()
135 }
136
137 pub const fn louis(self) -> u8 {
141 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
142 }
143
144 pub const fn loc(self) -> u8 {
148 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
149 }
150
151 pub const fn louu(self) -> u8 {
155 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
156 }
157
158 pub const fn icb(self) -> u8 {
162 ((self.bits() >> Self::ICB_SHIFT) & 0b111) as u8
163 }
164
165 pub const fn ttype(self, n: u32) -> u8 {
167 assert!(n >= 1 && n < 8);
168 ((self.bits() >> (Self::TTYPE_SHIFT + (n - 1) * 2)) & 0b11) as u8
169 }
170}
171
172bitflags! {
173 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
175 #[repr(transparent)]
176 pub struct CntfrqEl0: u64 {
177 }
178}
179
180impl CntfrqEl0 {
181 pub const CLOCKFREQ_SHIFT: u32 = 0;
183 pub const CLOCKFREQ_MASK: u64 = 0b11111111111111111111111111111111;
185
186 pub const fn clockfreq(self) -> u32 {
188 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
189 }
190}
191
192#[cfg(feature = "el2")]
193bitflags! {
194 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
196 #[repr(transparent)]
197 pub struct CnthctlEl2: u64 {
198 const EL0PCTEN = 1 << 0;
200 const EL0VCTEN = 1 << 1;
202 const EL1PCEN = 1 << 1;
204 const EVNTEN = 1 << 2;
206 const EVNTDIR = 1 << 3;
208 const EL0VTEN = 1 << 8;
210 const EL0PTEN = 1 << 9;
212 const EL1PTEN = 1 << 11;
214 const ECV = 1 << 12;
216 const EL1TVT = 1 << 13;
218 const EL1TVCT = 1 << 14;
220 const EL1NVPCT = 1 << 15;
222 const EL1NVVCT = 1 << 16;
224 const EVNTIS = 1 << 17;
226 const CNTVMASK = 1 << 18;
228 const CNTPMASK = 1 << 19;
230 }
231}
232
233#[cfg(feature = "el2")]
234impl CnthctlEl2 {
235 pub const EL0PCTEN_SHIFT: u32 = 0;
237 pub const EL0VCTEN_SHIFT: u32 = 1;
239 pub const EL1PCEN_SHIFT: u32 = 1;
241 pub const EVNTEN_SHIFT: u32 = 2;
243 pub const EVNTDIR_SHIFT: u32 = 3;
245 pub const EVNTI_SHIFT: u32 = 4;
247 pub const EVNTI_MASK: u64 = 0b1111;
249 pub const EL0VTEN_SHIFT: u32 = 8;
251 pub const EL0PTEN_SHIFT: u32 = 9;
253 pub const EL1PTEN_SHIFT: u32 = 11;
255 pub const ECV_SHIFT: u32 = 12;
257 pub const EL1TVT_SHIFT: u32 = 13;
259 pub const EL1TVCT_SHIFT: u32 = 14;
261 pub const EL1NVPCT_SHIFT: u32 = 15;
263 pub const EL1NVVCT_SHIFT: u32 = 16;
265 pub const EVNTIS_SHIFT: u32 = 17;
267 pub const CNTVMASK_SHIFT: u32 = 18;
269 pub const CNTPMASK_SHIFT: u32 = 19;
271
272 pub const fn evnti(self) -> u8 {
274 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
275 }
276}
277
278#[cfg(feature = "el2")]
279bitflags! {
280 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
282 #[repr(transparent)]
283 pub struct CntvoffEl2: u64 {
284 }
285}
286
287#[cfg(feature = "el2")]
288impl CntvoffEl2 {
289 pub const VOFFSET_SHIFT: u32 = 0;
291 pub const VOFFSET_MASK: u64 =
293 0b1111111111111111111111111111111111111111111111111111111111111111;
294
295 pub const fn voffset(self) -> u64 {
297 ((self.bits() >> Self::VOFFSET_SHIFT)
298 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
299 }
300}
301
302#[cfg(feature = "el1")]
303bitflags! {
304 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
306 #[repr(transparent)]
307 pub struct ContextidrEl1: u64 {
308 }
309}
310
311#[cfg(feature = "el1")]
312impl ContextidrEl1 {
313 pub const PROCID_SHIFT: u32 = 0;
315 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
317
318 pub const fn procid(self) -> u32 {
320 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
321 }
322}
323
324#[cfg(feature = "el2")]
325bitflags! {
326 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
328 #[repr(transparent)]
329 pub struct ContextidrEl2: u64 {
330 }
331}
332
333#[cfg(feature = "el2")]
334impl ContextidrEl2 {
335 pub const PROCID_SHIFT: u32 = 0;
337 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
339
340 pub const fn procid(self) -> u32 {
342 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
343 }
344}
345
346#[cfg(feature = "el1")]
347bitflags! {
348 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
350 #[repr(transparent)]
351 pub struct CpacrEl1: u64 {
352 const TTA = 1 << 28;
354 const E0POE = 1 << 29;
356 const TAM = 1 << 30;
358 const TCPAC = 1 << 31;
360 const E0TP0E = 1 << 32;
362 const E0TP1E = 1 << 33;
364 }
365}
366
367#[cfg(feature = "el1")]
368impl CpacrEl1 {
369 pub const ZEN_SHIFT: u32 = 16;
371 pub const ZEN_MASK: u64 = 0b11;
373 pub const FPEN_SHIFT: u32 = 20;
375 pub const FPEN_MASK: u64 = 0b11;
377 pub const SMEN_SHIFT: u32 = 24;
379 pub const SMEN_MASK: u64 = 0b11;
381 pub const TTA_SHIFT: u32 = 28;
383 pub const E0POE_SHIFT: u32 = 29;
385 pub const TAM_SHIFT: u32 = 30;
387 pub const TCPAC_SHIFT: u32 = 31;
389 pub const E0TP0E_SHIFT: u32 = 32;
391 pub const E0TP1E_SHIFT: u32 = 33;
393
394 pub const fn zen(self) -> u8 {
396 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
397 }
398
399 pub const fn fpen(self) -> u8 {
401 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
402 }
403
404 pub const fn smen(self) -> u8 {
406 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
407 }
408}
409
410#[cfg(feature = "el2")]
411bitflags! {
412 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
414 #[repr(transparent)]
415 pub struct CptrEl2: u64 {
416 const RES1 = 0b10001011111111;
418 const TZ = 1 << 8;
420 const TFP = 1 << 10;
422 const TSM = 1 << 12;
424 const E0POE = 1 << 29;
426 const TAM = 1 << 30;
428 const TCPAC = 1 << 31;
430 const E0TP0E = 1 << 32;
432 const E0TP1E = 1 << 33;
434 }
435}
436
437#[cfg(feature = "el2")]
438impl CptrEl2 {
439 pub const TZ_SHIFT: u32 = 8;
441 pub const TFP_SHIFT: u32 = 10;
443 pub const TSM_SHIFT: u32 = 12;
445 pub const ZEN_SHIFT: u32 = 16;
447 pub const ZEN_MASK: u64 = 0b11;
449 pub const FPEN_SHIFT: u32 = 20;
451 pub const FPEN_MASK: u64 = 0b11;
453 pub const SMEN_SHIFT: u32 = 24;
455 pub const SMEN_MASK: u64 = 0b11;
457 pub const E0POE_SHIFT: u32 = 29;
459 pub const TAM_SHIFT: u32 = 30;
461 pub const TCPAC_SHIFT: u32 = 31;
463 pub const E0TP0E_SHIFT: u32 = 32;
465 pub const E0TP1E_SHIFT: u32 = 33;
467
468 pub const fn zen(self) -> u8 {
470 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
471 }
472
473 pub const fn fpen(self) -> u8 {
475 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
476 }
477
478 pub const fn smen(self) -> u8 {
480 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
481 }
482}
483
484#[cfg(feature = "el3")]
485bitflags! {
486 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
488 #[repr(transparent)]
489 pub struct CptrEl3: u64 {
490 const EZ = 1 << 8;
492 const TFP = 1 << 10;
494 const ESM = 1 << 12;
496 const TTA = 1 << 20;
498 const TAM = 1 << 30;
500 const TCPAC = 1 << 31;
502 }
503}
504
505#[cfg(feature = "el3")]
506impl CptrEl3 {
507 pub const EZ_SHIFT: u32 = 8;
509 pub const TFP_SHIFT: u32 = 10;
511 pub const ESM_SHIFT: u32 = 12;
513 pub const TTA_SHIFT: u32 = 20;
515 pub const TAM_SHIFT: u32 = 30;
517 pub const TCPAC_SHIFT: u32 = 31;
519}
520
521#[cfg(feature = "el1")]
522bitflags! {
523 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
525 #[repr(transparent)]
526 pub struct CsselrEl1: u64 {
527 const IND = 1 << 0;
529 const TND = 1 << 4;
531 }
532}
533
534#[cfg(feature = "el1")]
535impl CsselrEl1 {
536 pub const IND_SHIFT: u32 = 0;
538 pub const LEVEL_SHIFT: u32 = 1;
540 pub const LEVEL_MASK: u64 = 0b111;
542 pub const TND_SHIFT: u32 = 4;
544
545 pub const fn level(self) -> u8 {
547 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
548 }
549}
550
551bitflags! {
552 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
556 #[repr(transparent)]
557 pub struct CtrEl0: u64 {
558 const RES1 = 0b10000000000000000000000000000000;
560 const IDC = 1 << 28;
562 const DIC = 1 << 29;
564 }
565}
566
567impl CtrEl0 {
568 pub const IMINLINE_SHIFT: u32 = 0;
570 pub const IMINLINE_MASK: u64 = 0b1111;
572 pub const L1IP_SHIFT: u32 = 14;
574 pub const L1IP_MASK: u64 = 0b11;
576 pub const DMINLINE_SHIFT: u32 = 16;
578 pub const DMINLINE_MASK: u64 = 0b1111;
580 pub const ERG_SHIFT: u32 = 20;
582 pub const ERG_MASK: u64 = 0b1111;
584 pub const CWG_SHIFT: u32 = 24;
586 pub const CWG_MASK: u64 = 0b1111;
588 pub const IDC_SHIFT: u32 = 28;
590 pub const DIC_SHIFT: u32 = 29;
592 pub const TMINLINE_SHIFT: u32 = 32;
594 pub const TMINLINE_MASK: u64 = 0b111111;
596
597 pub const fn iminline(self) -> u8 {
599 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
600 }
601
602 pub const fn l1ip(self) -> u8 {
604 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
605 }
606
607 pub const fn dminline(self) -> u8 {
611 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
612 }
613
614 pub const fn erg(self) -> u8 {
616 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
617 }
618
619 pub const fn cwg(self) -> u8 {
621 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
622 }
623
624 pub const fn tminline(self) -> u8 {
626 ((self.bits() >> Self::TMINLINE_SHIFT) & 0b111111) as u8
627 }
628}
629
630#[cfg(feature = "el1")]
631bitflags! {
632 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
634 #[repr(transparent)]
635 pub struct DisrEl1: u64 {
636 const WNR = 1 << 6;
638 const WNRV = 1 << 7;
640 const EA = 1 << 9;
642 const IDS = 1 << 24;
644 const A = 1 << 31;
646 }
647}
648
649#[cfg(feature = "el1")]
650impl DisrEl1 {
651 pub const DFSC_SHIFT: u32 = 0;
653 pub const DFSC_MASK: u64 = 0b111111;
655 pub const WNR_SHIFT: u32 = 6;
657 pub const WNRV_SHIFT: u32 = 7;
659 pub const EA_SHIFT: u32 = 9;
661 pub const AET_SHIFT: u32 = 10;
663 pub const AET_MASK: u64 = 0b111;
665 pub const WU_SHIFT: u32 = 16;
667 pub const WU_MASK: u64 = 0b11;
669 pub const IDS_SHIFT: u32 = 24;
671 pub const A_SHIFT: u32 = 31;
673
674 pub const fn dfsc(self) -> u8 {
676 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
677 }
678
679 pub const fn aet(self) -> u8 {
681 ((self.bits() >> Self::AET_SHIFT) & 0b111) as u8
682 }
683
684 pub const fn wu(self) -> u8 {
686 ((self.bits() >> Self::WU_SHIFT) & 0b11) as u8
687 }
688}
689
690bitflags! {
691 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
695 #[repr(transparent)]
696 pub struct Dit: u64 {
697 const DIT = 1 << 24;
699 }
700}
701
702impl Dit {
703 pub const DIT_SHIFT: u32 = 24;
705}
706
707#[cfg(feature = "el1")]
708bitflags! {
709 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
711 #[repr(transparent)]
712 pub struct ElrEl1: u64 {
713 }
714}
715
716#[cfg(feature = "el1")]
717impl ElrEl1 {
718 pub const ADDR_SHIFT: u32 = 0;
720 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
722
723 pub const fn addr(self) -> u64 {
725 ((self.bits() >> Self::ADDR_SHIFT)
726 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
727 }
728}
729
730#[cfg(feature = "el2")]
731bitflags! {
732 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
734 #[repr(transparent)]
735 pub struct ElrEl2: u64 {
736 }
737}
738
739#[cfg(feature = "el2")]
740impl ElrEl2 {
741 pub const ADDR_SHIFT: u32 = 0;
743 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
745
746 pub const fn addr(self) -> u64 {
748 ((self.bits() >> Self::ADDR_SHIFT)
749 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
750 }
751}
752
753#[cfg(feature = "el1")]
754bitflags! {
755 #[derive(Clone, Copy, Eq, PartialEq)]
757 #[repr(transparent)]
758 pub struct EsrEl1: u64 {
759 const IL = 1 << 25;
761 }
762}
763
764#[cfg(feature = "el1")]
765impl EsrEl1 {
766 pub const ISS_SHIFT: u32 = 0;
768 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
770 pub const IL_SHIFT: u32 = 25;
772 pub const EC_SHIFT: u32 = 26;
774 pub const EC_MASK: u64 = 0b111111;
776 pub const ISS2_SHIFT: u32 = 32;
778 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
780
781 pub const fn iss(self) -> u32 {
783 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
784 }
785
786 pub const fn ec(self) -> u8 {
788 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
789 }
790
791 pub const fn iss2(self) -> u32 {
793 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
794 }
795}
796
797#[cfg(feature = "el2")]
798bitflags! {
799 #[derive(Clone, Copy, Eq, PartialEq)]
801 #[repr(transparent)]
802 pub struct EsrEl2: u64 {
803 const IL = 1 << 25;
805 }
806}
807
808#[cfg(feature = "el2")]
809impl EsrEl2 {
810 pub const ISS_SHIFT: u32 = 0;
812 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
814 pub const IL_SHIFT: u32 = 25;
816 pub const EC_SHIFT: u32 = 26;
818 pub const EC_MASK: u64 = 0b111111;
820 pub const ISS2_SHIFT: u32 = 32;
822 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
824
825 pub const fn iss(self) -> u32 {
827 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
828 }
829
830 pub const fn ec(self) -> u8 {
832 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
833 }
834
835 pub const fn iss2(self) -> u32 {
837 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
838 }
839}
840
841#[cfg(feature = "el3")]
842bitflags! {
843 #[derive(Clone, Copy, Eq, PartialEq)]
845 #[repr(transparent)]
846 pub struct EsrEl3: u64 {
847 const IL = 1 << 25;
849 }
850}
851
852#[cfg(feature = "el3")]
853impl EsrEl3 {
854 pub const ISS_SHIFT: u32 = 0;
856 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
858 pub const IL_SHIFT: u32 = 25;
860 pub const EC_SHIFT: u32 = 26;
862 pub const EC_MASK: u64 = 0b111111;
864 pub const ISS2_SHIFT: u32 = 32;
866 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
868
869 pub const fn iss(self) -> u32 {
871 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
872 }
873
874 pub const fn ec(self) -> u8 {
876 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
877 }
878
879 pub const fn iss2(self) -> u32 {
881 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
882 }
883}
884
885#[cfg(feature = "el1")]
886bitflags! {
887 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
889 #[repr(transparent)]
890 pub struct FarEl1: u64 {
891 }
892}
893
894#[cfg(feature = "el1")]
895impl FarEl1 {
896 pub const VA_SHIFT: u32 = 0;
898 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
900
901 pub const fn va(self) -> u64 {
903 ((self.bits() >> Self::VA_SHIFT)
904 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
905 }
906}
907
908#[cfg(feature = "el2")]
909bitflags! {
910 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
912 #[repr(transparent)]
913 pub struct FarEl2: u64 {
914 }
915}
916
917#[cfg(feature = "el2")]
918impl FarEl2 {
919 pub const VA_SHIFT: u32 = 0;
921 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
923
924 pub const fn va(self) -> u64 {
926 ((self.bits() >> Self::VA_SHIFT)
927 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
928 }
929}
930
931#[cfg(feature = "el1")]
932bitflags! {
933 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
935 #[repr(transparent)]
936 pub struct GcrEl1: u64 {
937 const RRND = 1 << 16;
939 }
940}
941
942#[cfg(feature = "el1")]
943impl GcrEl1 {
944 pub const EXCLUDE_SHIFT: u32 = 0;
946 pub const EXCLUDE_MASK: u64 = 0b1111111111111111;
948 pub const RRND_SHIFT: u32 = 16;
950
951 pub const fn exclude(self) -> u16 {
953 ((self.bits() >> Self::EXCLUDE_SHIFT) & 0b1111111111111111) as u16
954 }
955}
956
957#[cfg(feature = "el1")]
958bitflags! {
959 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
963 #[repr(transparent)]
964 pub struct GcscrEl1: u64 {
965 const PCRSEL = 1 << 0;
967 const RVCHKEN = 1 << 5;
969 const EXLOCKEN = 1 << 6;
971 const PUSHMEN = 1 << 8;
973 const STREN = 1 << 9;
975 }
976}
977
978#[cfg(feature = "el1")]
979impl GcscrEl1 {
980 pub const PCRSEL_SHIFT: u32 = 0;
982 pub const RVCHKEN_SHIFT: u32 = 5;
984 pub const EXLOCKEN_SHIFT: u32 = 6;
986 pub const PUSHMEN_SHIFT: u32 = 8;
988 pub const STREN_SHIFT: u32 = 9;
990}
991
992#[cfg(feature = "el2")]
993bitflags! {
994 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
998 #[repr(transparent)]
999 pub struct GcscrEl2: u64 {
1000 const PCRSEL = 1 << 0;
1002 const RVCHKEN = 1 << 5;
1004 const EXLOCKEN = 1 << 6;
1006 const PUSHMEN = 1 << 8;
1008 const STREN = 1 << 9;
1010 }
1011}
1012
1013#[cfg(feature = "el2")]
1014impl GcscrEl2 {
1015 pub const PCRSEL_SHIFT: u32 = 0;
1017 pub const RVCHKEN_SHIFT: u32 = 5;
1019 pub const EXLOCKEN_SHIFT: u32 = 6;
1021 pub const PUSHMEN_SHIFT: u32 = 8;
1023 pub const STREN_SHIFT: u32 = 9;
1025}
1026
1027#[cfg(feature = "el2")]
1028bitflags! {
1029 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1033 #[repr(transparent)]
1034 pub struct HcrxEl2: u64 {
1035 const ENAS0 = 1 << 0;
1037 const ENALS = 1 << 1;
1039 const ENASR = 1 << 2;
1041 const FNXS = 1 << 3;
1043 const FGTNXS = 1 << 4;
1045 const SMPME = 1 << 5;
1047 const TALLINT = 1 << 6;
1049 const VINMI = 1 << 7;
1051 const VFNMI = 1 << 8;
1053 const CMOW = 1 << 9;
1055 const MCE2 = 1 << 10;
1057 const MSCEN = 1 << 11;
1059 const TCR2EN = 1 << 14;
1061 const SCTLR2EN = 1 << 15;
1063 const PTTWI = 1 << 16;
1065 const D128EN = 1 << 17;
1067 const ENSNERR = 1 << 18;
1069 const TMEA = 1 << 19;
1071 const ENSDERR = 1 << 20;
1073 const ENIDCP128 = 1 << 21;
1075 const GCSEN = 1 << 22;
1077 const ENFPM = 1 << 23;
1079 const PACMEN = 1 << 24;
1081 const VTLBIDEN = 1 << 25;
1083 const SRMASKEN = 1 << 26;
1085 const NVTGE = 1 << 27;
1087 const POE2EN = 1 << 29;
1089 const TPLIMEN = 1 << 30;
1091 const FDIT = 1 << 31;
1093 const NVNTTLB = 1 << 32;
1095 const NVNTTLBIS = 1 << 33;
1097 const NVNTTLBOS = 1 << 34;
1099 const VTLBIDOSEN = 1 << 35;
1101 const FNB = 1 << 36;
1103 const VTE = 1 << 37;
1105 const VTAO = 1 << 38;
1107 const VTCO = 1 << 39;
1109 }
1110}
1111
1112#[cfg(feature = "el2")]
1113impl HcrxEl2 {
1114 pub const ENAS0_SHIFT: u32 = 0;
1116 pub const ENALS_SHIFT: u32 = 1;
1118 pub const ENASR_SHIFT: u32 = 2;
1120 pub const FNXS_SHIFT: u32 = 3;
1122 pub const FGTNXS_SHIFT: u32 = 4;
1124 pub const SMPME_SHIFT: u32 = 5;
1126 pub const TALLINT_SHIFT: u32 = 6;
1128 pub const VINMI_SHIFT: u32 = 7;
1130 pub const VFNMI_SHIFT: u32 = 8;
1132 pub const CMOW_SHIFT: u32 = 9;
1134 pub const MCE2_SHIFT: u32 = 10;
1136 pub const MSCEN_SHIFT: u32 = 11;
1138 pub const TCR2EN_SHIFT: u32 = 14;
1140 pub const SCTLR2EN_SHIFT: u32 = 15;
1142 pub const PTTWI_SHIFT: u32 = 16;
1144 pub const D128EN_SHIFT: u32 = 17;
1146 pub const ENSNERR_SHIFT: u32 = 18;
1148 pub const TMEA_SHIFT: u32 = 19;
1150 pub const ENSDERR_SHIFT: u32 = 20;
1152 pub const ENIDCP128_SHIFT: u32 = 21;
1154 pub const GCSEN_SHIFT: u32 = 22;
1156 pub const ENFPM_SHIFT: u32 = 23;
1158 pub const PACMEN_SHIFT: u32 = 24;
1160 pub const VTLBIDEN_SHIFT: u32 = 25;
1162 pub const SRMASKEN_SHIFT: u32 = 26;
1164 pub const NVTGE_SHIFT: u32 = 27;
1166 pub const POE2EN_SHIFT: u32 = 29;
1168 pub const TPLIMEN_SHIFT: u32 = 30;
1170 pub const FDIT_SHIFT: u32 = 31;
1172 pub const NVNTTLB_SHIFT: u32 = 32;
1174 pub const NVNTTLBIS_SHIFT: u32 = 33;
1176 pub const NVNTTLBOS_SHIFT: u32 = 34;
1178 pub const VTLBIDOSEN_SHIFT: u32 = 35;
1180 pub const FNB_SHIFT: u32 = 36;
1182 pub const VTE_SHIFT: u32 = 37;
1184 pub const VTAO_SHIFT: u32 = 38;
1186 pub const VTCO_SHIFT: u32 = 39;
1188}
1189
1190#[cfg(feature = "el2")]
1191bitflags! {
1192 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1194 #[repr(transparent)]
1195 pub struct HcrEl2: u64 {
1196 const VM = 1 << 0;
1198 const SWIO = 1 << 1;
1200 const PTW = 1 << 2;
1202 const FMO = 1 << 3;
1204 const IMO = 1 << 4;
1206 const AMO = 1 << 5;
1208 const VF = 1 << 6;
1210 const VI = 1 << 7;
1212 const VSE = 1 << 8;
1214 const FB = 1 << 9;
1216 const DC = 1 << 12;
1218 const TWI = 1 << 13;
1220 const TWE = 1 << 14;
1222 const TID0 = 1 << 15;
1224 const TID1 = 1 << 16;
1226 const TID2 = 1 << 17;
1228 const TID3 = 1 << 18;
1230 const TSC = 1 << 19;
1232 const TIDCP = 1 << 20;
1234 const TACR = 1 << 21;
1236 const TSW = 1 << 22;
1238 const TPCP = 1 << 23;
1240 const TPU = 1 << 24;
1242 const TTLB = 1 << 25;
1244 const TVM = 1 << 26;
1246 const TGE = 1 << 27;
1248 const TDZ = 1 << 28;
1250 const HCD = 1 << 29;
1252 const TRVM = 1 << 30;
1254 const RW = 1 << 31;
1256 const CD = 1 << 32;
1258 const ID = 1 << 33;
1260 const E2H = 1 << 34;
1262 const TLOR = 1 << 35;
1264 const TERR = 1 << 36;
1266 const TEA = 1 << 37;
1268 const APK = 1 << 40;
1270 const API = 1 << 41;
1272 const NV = 1 << 42;
1274 const NV1 = 1 << 43;
1276 const AT = 1 << 44;
1278 const NV2 = 1 << 45;
1280 const FWB = 1 << 46;
1282 const FIEN = 1 << 47;
1284 const GPF = 1 << 48;
1286 const TID4 = 1 << 49;
1288 const TICAB = 1 << 50;
1290 const AMVOFFEN = 1 << 51;
1292 const TOCU = 1 << 52;
1294 const ENSCXT = 1 << 53;
1296 const TTLBIS = 1 << 54;
1298 const TTLBOS = 1 << 55;
1300 const ATA = 1 << 56;
1302 const DCT = 1 << 57;
1304 const TID5 = 1 << 58;
1306 const TWEDEN = 1 << 59;
1308 }
1309}
1310
1311#[cfg(feature = "el2")]
1312impl HcrEl2 {
1313 pub const VM_SHIFT: u32 = 0;
1315 pub const SWIO_SHIFT: u32 = 1;
1317 pub const PTW_SHIFT: u32 = 2;
1319 pub const FMO_SHIFT: u32 = 3;
1321 pub const IMO_SHIFT: u32 = 4;
1323 pub const AMO_SHIFT: u32 = 5;
1325 pub const VF_SHIFT: u32 = 6;
1327 pub const VI_SHIFT: u32 = 7;
1329 pub const VSE_SHIFT: u32 = 8;
1331 pub const FB_SHIFT: u32 = 9;
1333 pub const BSU_SHIFT: u32 = 10;
1335 pub const BSU_MASK: u64 = 0b11;
1337 pub const DC_SHIFT: u32 = 12;
1339 pub const TWI_SHIFT: u32 = 13;
1341 pub const TWE_SHIFT: u32 = 14;
1343 pub const TID0_SHIFT: u32 = 15;
1345 pub const TID1_SHIFT: u32 = 16;
1347 pub const TID2_SHIFT: u32 = 17;
1349 pub const TID3_SHIFT: u32 = 18;
1351 pub const TSC_SHIFT: u32 = 19;
1353 pub const TIDCP_SHIFT: u32 = 20;
1355 pub const TACR_SHIFT: u32 = 21;
1357 pub const TSW_SHIFT: u32 = 22;
1359 pub const TPCP_SHIFT: u32 = 23;
1361 pub const TPU_SHIFT: u32 = 24;
1363 pub const TTLB_SHIFT: u32 = 25;
1365 pub const TVM_SHIFT: u32 = 26;
1367 pub const TGE_SHIFT: u32 = 27;
1369 pub const TDZ_SHIFT: u32 = 28;
1371 pub const HCD_SHIFT: u32 = 29;
1373 pub const TRVM_SHIFT: u32 = 30;
1375 pub const RW_SHIFT: u32 = 31;
1377 pub const CD_SHIFT: u32 = 32;
1379 pub const ID_SHIFT: u32 = 33;
1381 pub const E2H_SHIFT: u32 = 34;
1383 pub const TLOR_SHIFT: u32 = 35;
1385 pub const TERR_SHIFT: u32 = 36;
1387 pub const TEA_SHIFT: u32 = 37;
1389 pub const APK_SHIFT: u32 = 40;
1391 pub const API_SHIFT: u32 = 41;
1393 pub const NV_SHIFT: u32 = 42;
1395 pub const NV1_SHIFT: u32 = 43;
1397 pub const AT_SHIFT: u32 = 44;
1399 pub const NV2_SHIFT: u32 = 45;
1401 pub const FWB_SHIFT: u32 = 46;
1403 pub const FIEN_SHIFT: u32 = 47;
1405 pub const GPF_SHIFT: u32 = 48;
1407 pub const TID4_SHIFT: u32 = 49;
1409 pub const TICAB_SHIFT: u32 = 50;
1411 pub const AMVOFFEN_SHIFT: u32 = 51;
1413 pub const TOCU_SHIFT: u32 = 52;
1415 pub const ENSCXT_SHIFT: u32 = 53;
1417 pub const TTLBIS_SHIFT: u32 = 54;
1419 pub const TTLBOS_SHIFT: u32 = 55;
1421 pub const ATA_SHIFT: u32 = 56;
1423 pub const DCT_SHIFT: u32 = 57;
1425 pub const TID5_SHIFT: u32 = 58;
1427 pub const TWEDEN_SHIFT: u32 = 59;
1429 pub const TWEDEL_SHIFT: u32 = 60;
1431 pub const TWEDEL_MASK: u64 = 0b1111;
1433
1434 pub const fn bsu(self) -> u8 {
1436 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
1437 }
1438
1439 pub const fn twedel(self) -> u8 {
1441 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
1442 }
1443}
1444
1445#[cfg(feature = "el2")]
1446bitflags! {
1447 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1449 #[repr(transparent)]
1450 pub struct Hdfgrtr2El2: u64 {
1451 const NPMECR_EL1 = 1 << 0;
1453 const NPMIAR_EL1 = 1 << 1;
1455 const NPMICNTR_EL0 = 1 << 2;
1457 const NPMICFILTR_EL0 = 1 << 3;
1459 const NPMUACR_EL1 = 1 << 4;
1461 const NMDSELR_EL1 = 1 << 5;
1463 const NPMSSDATA = 1 << 6;
1465 const NPMSSCR_EL1 = 1 << 7;
1467 const NSPMEVCNTRN_EL0 = 1 << 8;
1469 const NSPMEVTYPERN_EL0 = 1 << 9;
1471 const NSPMSELR_EL0 = 1 << 10;
1473 const NSPMCNTEN = 1 << 11;
1475 const NSPMINTEN = 1 << 12;
1477 const NSPMOVS = 1 << 13;
1479 const NSPMCR_EL0 = 1 << 14;
1481 const NSPMACCESSR_EL1 = 1 << 15;
1483 const NSPMSCR_EL1 = 1 << 16;
1485 const NSPMID = 1 << 17;
1487 const NSPMDEVAFF_EL1 = 1 << 18;
1489 const NPMSDSFR_EL1 = 1 << 19;
1491 const NTRCITECR_EL1 = 1 << 20;
1493 const NTRBMPAM_EL1 = 1 << 22;
1495 const NMDSTEPOP_EL1 = 1 << 23;
1497 const NPMBMAR_EL1 = 1 << 24;
1499 }
1500}
1501
1502#[cfg(feature = "el2")]
1503impl Hdfgrtr2El2 {
1504 pub const NPMECR_EL1_SHIFT: u32 = 0;
1506 pub const NPMIAR_EL1_SHIFT: u32 = 1;
1508 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
1510 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
1512 pub const NPMUACR_EL1_SHIFT: u32 = 4;
1514 pub const NMDSELR_EL1_SHIFT: u32 = 5;
1516 pub const NPMSSDATA_SHIFT: u32 = 6;
1518 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
1520 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
1522 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
1524 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
1526 pub const NSPMCNTEN_SHIFT: u32 = 11;
1528 pub const NSPMINTEN_SHIFT: u32 = 12;
1530 pub const NSPMOVS_SHIFT: u32 = 13;
1532 pub const NSPMCR_EL0_SHIFT: u32 = 14;
1534 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
1536 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
1538 pub const NSPMID_SHIFT: u32 = 17;
1540 pub const NSPMDEVAFF_EL1_SHIFT: u32 = 18;
1542 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
1544 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
1546 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
1548 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
1550 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
1552}
1553
1554#[cfg(feature = "el2")]
1555bitflags! {
1556 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1558 #[repr(transparent)]
1559 pub struct Hdfgwtr2El2: u64 {
1560 const NPMECR_EL1 = 1 << 0;
1562 const NPMIAR_EL1 = 1 << 1;
1564 const NPMICNTR_EL0 = 1 << 2;
1566 const NPMICFILTR_EL0 = 1 << 3;
1568 const NPMUACR_EL1 = 1 << 4;
1570 const NMDSELR_EL1 = 1 << 5;
1572 const NPMSSCR_EL1 = 1 << 7;
1574 const NSPMEVCNTRN_EL0 = 1 << 8;
1576 const NSPMEVTYPERN_EL0 = 1 << 9;
1578 const NSPMSELR_EL0 = 1 << 10;
1580 const NSPMCNTEN = 1 << 11;
1582 const NSPMINTEN = 1 << 12;
1584 const NSPMOVS = 1 << 13;
1586 const NSPMCR_EL0 = 1 << 14;
1588 const NSPMACCESSR_EL1 = 1 << 15;
1590 const NSPMSCR_EL1 = 1 << 16;
1592 const NPMSDSFR_EL1 = 1 << 19;
1594 const NTRCITECR_EL1 = 1 << 20;
1596 const NPMZR_EL0 = 1 << 21;
1598 const NTRBMPAM_EL1 = 1 << 22;
1600 const NMDSTEPOP_EL1 = 1 << 23;
1602 const NPMBMAR_EL1 = 1 << 24;
1604 }
1605}
1606
1607#[cfg(feature = "el2")]
1608impl Hdfgwtr2El2 {
1609 pub const NPMECR_EL1_SHIFT: u32 = 0;
1611 pub const NPMIAR_EL1_SHIFT: u32 = 1;
1613 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
1615 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
1617 pub const NPMUACR_EL1_SHIFT: u32 = 4;
1619 pub const NMDSELR_EL1_SHIFT: u32 = 5;
1621 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
1623 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
1625 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
1627 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
1629 pub const NSPMCNTEN_SHIFT: u32 = 11;
1631 pub const NSPMINTEN_SHIFT: u32 = 12;
1633 pub const NSPMOVS_SHIFT: u32 = 13;
1635 pub const NSPMCR_EL0_SHIFT: u32 = 14;
1637 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
1639 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
1641 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
1643 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
1645 pub const NPMZR_EL0_SHIFT: u32 = 21;
1647 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
1649 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
1651 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
1653}
1654
1655#[cfg(feature = "el2")]
1656bitflags! {
1657 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1659 #[repr(transparent)]
1660 pub struct Hfgitr2El2: u64 {
1661 const TSBCSYNC = 1 << 0;
1663 const NDCCIVAPS = 1 << 1;
1665 const PLBIPERME1OS = 1 << 2;
1667 const PLBIASIDE1OS = 1 << 3;
1669 const PLBIVMALLE1OS = 1 << 4;
1671 const PLBIPERME1IS = 1 << 5;
1673 const PLBIASIDE1IS = 1 << 6;
1675 const PLBIVMALLE1IS = 1 << 7;
1677 const PLBIPERME1 = 1 << 8;
1679 const PLBIASIDE1 = 1 << 9;
1681 const PLBIVMALLE1 = 1 << 10;
1683 const PLBIPERMAE1OS = 1 << 11;
1685 const PLBIPERMAE1IS = 1 << 12;
1687 const PLBIPERMAE1 = 1 << 13;
1689 const DCGBVA = 1 << 14;
1691 }
1692}
1693
1694#[cfg(feature = "el2")]
1695impl Hfgitr2El2 {
1696 pub const TSBCSYNC_SHIFT: u32 = 0;
1698 pub const NDCCIVAPS_SHIFT: u32 = 1;
1700 pub const PLBIPERME1OS_SHIFT: u32 = 2;
1702 pub const PLBIASIDE1OS_SHIFT: u32 = 3;
1704 pub const PLBIVMALLE1OS_SHIFT: u32 = 4;
1706 pub const PLBIPERME1IS_SHIFT: u32 = 5;
1708 pub const PLBIASIDE1IS_SHIFT: u32 = 6;
1710 pub const PLBIVMALLE1IS_SHIFT: u32 = 7;
1712 pub const PLBIPERME1_SHIFT: u32 = 8;
1714 pub const PLBIASIDE1_SHIFT: u32 = 9;
1716 pub const PLBIVMALLE1_SHIFT: u32 = 10;
1718 pub const PLBIPERMAE1OS_SHIFT: u32 = 11;
1720 pub const PLBIPERMAE1IS_SHIFT: u32 = 12;
1722 pub const PLBIPERMAE1_SHIFT: u32 = 13;
1724 pub const DCGBVA_SHIFT: u32 = 14;
1726}
1727
1728#[cfg(feature = "el2")]
1729bitflags! {
1730 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1732 #[repr(transparent)]
1733 pub struct Hfgrtr2El2: u64 {
1734 const NPFAR_EL1 = 1 << 0;
1736 const NERXGSR_EL1 = 1 << 1;
1738 const NRCWSMASK_EL1 = 1 << 2;
1740 const NCPACRMASK_EL1 = 1 << 3;
1742 const NSCTLRMASK_EL1 = 1 << 4;
1744 const NSCTLR2MASK_EL1 = 1 << 5;
1746 const NTCRMASK_EL1 = 1 << 6;
1748 const NTCR2MASK_EL1 = 1 << 7;
1750 const NCPACRALIAS_EL1 = 1 << 8;
1752 const NSCTLRALIAS_EL1 = 1 << 9;
1754 const NSCTLR2ALIAS_EL1 = 1 << 10;
1756 const NTCRALIAS_EL1 = 1 << 11;
1758 const NTCR2ALIAS_EL1 = 1 << 12;
1760 const NACTLRMASK_EL1 = 1 << 13;
1762 const NACTLRALIAS_EL1 = 1 << 14;
1764 const NTINDEX_EL0 = 1 << 15;
1766 const NTINDEX_EL1 = 1 << 16;
1768 const NSTINDEX_EL1 = 1 << 17;
1770 const NTTTBRP_EL1 = 1 << 20;
1772 const NTTTBRU_EL1 = 1 << 21;
1774 const NIRTBRP_EL1 = 1 << 22;
1776 const NIRTBRU_EL1 = 1 << 23;
1778 const NDPOTBR1_EL1 = 1 << 24;
1780 const NDPOTBR0_EL1 = 1 << 25;
1782 const NTPMIN1_EL1 = 1 << 26;
1784 const NTPMIN0_EL1 = 1 << 27;
1786 const NTPMIN1_EL0 = 1 << 28;
1788 const NTPMIN0_EL0 = 1 << 29;
1790 const NTLBIDIDR_EL1 = 1 << 30;
1792 const TFSR_EL1 = 1 << 33;
1794 const RGSR_EL1 = 1 << 34;
1796 const GCR_EL1 = 1 << 35;
1798 const NTPIDR3_EL0 = 1 << 36;
1800 const NTPIDR3_EL1 = 1 << 37;
1802 }
1803}
1804
1805#[cfg(feature = "el2")]
1806impl Hfgrtr2El2 {
1807 pub const NPFAR_EL1_SHIFT: u32 = 0;
1809 pub const NERXGSR_EL1_SHIFT: u32 = 1;
1811 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
1813 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
1815 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
1817 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
1819 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
1821 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
1823 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
1825 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
1827 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
1829 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
1831 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
1833 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
1835 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
1837 pub const NTINDEX_EL0_SHIFT: u32 = 15;
1839 pub const NTINDEX_EL1_SHIFT: u32 = 16;
1841 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
1843 pub const NFGDTN_EL1_SHIFT: u32 = 18;
1845 pub const NFGDTN_EL1_MASK: u64 = 0b11;
1847 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
1849 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
1851 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
1853 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
1855 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
1857 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
1859 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
1861 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
1863 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
1865 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
1867 pub const NTLBIDIDR_EL1_SHIFT: u32 = 30;
1869 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
1871 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
1873 pub const TFSR_EL1_SHIFT: u32 = 33;
1875 pub const RGSR_EL1_SHIFT: u32 = 34;
1877 pub const GCR_EL1_SHIFT: u32 = 35;
1879 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
1881 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
1883
1884 pub const fn nfgdtn_el1(self) -> u8 {
1886 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
1887 }
1888
1889 pub const fn nafgdtn_el1(self) -> u8 {
1891 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
1892 }
1893}
1894
1895#[cfg(feature = "el2")]
1896bitflags! {
1897 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1899 #[repr(transparent)]
1900 pub struct Hfgwtr2El2: u64 {
1901 const NPFAR_EL1 = 1 << 0;
1903 const NRCWSMASK_EL1 = 1 << 2;
1905 const NCPACRMASK_EL1 = 1 << 3;
1907 const NSCTLRMASK_EL1 = 1 << 4;
1909 const NSCTLR2MASK_EL1 = 1 << 5;
1911 const NTCRMASK_EL1 = 1 << 6;
1913 const NTCR2MASK_EL1 = 1 << 7;
1915 const NCPACRALIAS_EL1 = 1 << 8;
1917 const NSCTLRALIAS_EL1 = 1 << 9;
1919 const NSCTLR2ALIAS_EL1 = 1 << 10;
1921 const NTCRALIAS_EL1 = 1 << 11;
1923 const NTCR2ALIAS_EL1 = 1 << 12;
1925 const NACTLRMASK_EL1 = 1 << 13;
1927 const NACTLRALIAS_EL1 = 1 << 14;
1929 const NTINDEX_EL0 = 1 << 15;
1931 const NTINDEX_EL1 = 1 << 16;
1933 const NSTINDEX_EL1 = 1 << 17;
1935 const NTTTBRP_EL1 = 1 << 20;
1937 const NTTTBRU_EL1 = 1 << 21;
1939 const NIRTBRP_EL1 = 1 << 22;
1941 const NIRTBRU_EL1 = 1 << 23;
1943 const NDPOTBR1_EL1 = 1 << 24;
1945 const NDPOTBR0_EL1 = 1 << 25;
1947 const NTPMIN1_EL1 = 1 << 26;
1949 const NTPMIN0_EL1 = 1 << 27;
1951 const NTPMIN1_EL0 = 1 << 28;
1953 const NTPMIN0_EL0 = 1 << 29;
1955 const TFSR_EL1 = 1 << 33;
1957 const RGSR_EL1 = 1 << 34;
1959 const GCR_EL1 = 1 << 35;
1961 const NTPIDR3_EL0 = 1 << 36;
1963 const NTPIDR3_EL1 = 1 << 37;
1965 }
1966}
1967
1968#[cfg(feature = "el2")]
1969impl Hfgwtr2El2 {
1970 pub const NPFAR_EL1_SHIFT: u32 = 0;
1972 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
1974 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
1976 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
1978 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
1980 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
1982 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
1984 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
1986 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
1988 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
1990 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
1992 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
1994 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
1996 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
1998 pub const NTINDEX_EL0_SHIFT: u32 = 15;
2000 pub const NTINDEX_EL1_SHIFT: u32 = 16;
2002 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
2004 pub const NFGDTN_EL1_SHIFT: u32 = 18;
2006 pub const NFGDTN_EL1_MASK: u64 = 0b11;
2008 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
2010 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
2012 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
2014 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
2016 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
2018 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
2020 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
2022 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
2024 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
2026 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
2028 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
2030 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
2032 pub const TFSR_EL1_SHIFT: u32 = 33;
2034 pub const RGSR_EL1_SHIFT: u32 = 34;
2036 pub const GCR_EL1_SHIFT: u32 = 35;
2038 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
2040 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
2042
2043 pub const fn nfgdtn_el1(self) -> u8 {
2045 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
2046 }
2047
2048 pub const fn nafgdtn_el1(self) -> u8 {
2050 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
2051 }
2052}
2053
2054#[cfg(feature = "el2")]
2055bitflags! {
2056 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2058 #[repr(transparent)]
2059 pub struct HfgwtrEl2: u64 {
2060 const AFSR0_EL1 = 1 << 0;
2062 const AFSR1_EL1 = 1 << 1;
2064 const AMAIR_EL1 = 1 << 3;
2066 const APDAKEY = 1 << 4;
2068 const APDBKEY = 1 << 5;
2070 const APGAKEY = 1 << 6;
2072 const APIAKEY = 1 << 7;
2074 const APIBKEY = 1 << 8;
2076 const CONTEXTIDR_EL1 = 1 << 11;
2078 const CPACR_EL1 = 1 << 12;
2080 const CSSELR_EL1 = 1 << 13;
2082 const ESR_EL1 = 1 << 16;
2084 const FAR_EL1 = 1 << 17;
2086 const LORC_EL1 = 1 << 19;
2088 const LOREA_EL1 = 1 << 20;
2090 const LORN_EL1 = 1 << 22;
2092 const LORSA_EL1 = 1 << 23;
2094 const MAIR_EL1 = 1 << 24;
2096 const PAR_EL1 = 1 << 27;
2098 const SCTLR_EL1 = 1 << 29;
2100 const SCXTNUM_EL1 = 1 << 30;
2102 const SCXTNUM_EL0 = 1 << 31;
2104 const TCR_EL1 = 1 << 32;
2106 const TPIDR_EL1 = 1 << 33;
2108 const TPIDRRO_EL0 = 1 << 34;
2110 const TPIDR_EL0 = 1 << 35;
2112 const TTBR0_EL1 = 1 << 36;
2114 const TTBR1_EL1 = 1 << 37;
2116 const VBAR_EL1 = 1 << 38;
2118 const ICC_IGRPENN_EL1 = 1 << 39;
2120 const ERRSELR_EL1 = 1 << 41;
2122 const ERXCTLR_EL1 = 1 << 43;
2124 const ERXSTATUS_EL1 = 1 << 44;
2126 const ERXMISCN_EL1 = 1 << 45;
2128 const ERXPFGCTL_EL1 = 1 << 47;
2130 const ERXPFGCDN_EL1 = 1 << 48;
2132 const ERXADDR_EL1 = 1 << 49;
2134 const NACCDATA_EL1 = 1 << 50;
2136 const NGCS_EL0 = 1 << 52;
2138 const NGCS_EL1 = 1 << 53;
2140 const NSMPRI_EL1 = 1 << 54;
2142 const NTPIDR2_EL0 = 1 << 55;
2144 const NRCWMASK_EL1 = 1 << 56;
2146 const NPIRE0_EL1 = 1 << 57;
2148 const NPIR_EL1 = 1 << 58;
2150 const NPOR_EL0 = 1 << 59;
2152 const NPOR_EL1 = 1 << 60;
2154 const NS2POR_EL1 = 1 << 61;
2156 const NMAIR2_EL1 = 1 << 62;
2158 const NAMAIR2_EL1 = 1 << 63;
2160 }
2161}
2162
2163#[cfg(feature = "el2")]
2164impl HfgwtrEl2 {
2165 pub const AFSR0_EL1_SHIFT: u32 = 0;
2167 pub const AFSR1_EL1_SHIFT: u32 = 1;
2169 pub const AMAIR_EL1_SHIFT: u32 = 3;
2171 pub const APDAKEY_SHIFT: u32 = 4;
2173 pub const APDBKEY_SHIFT: u32 = 5;
2175 pub const APGAKEY_SHIFT: u32 = 6;
2177 pub const APIAKEY_SHIFT: u32 = 7;
2179 pub const APIBKEY_SHIFT: u32 = 8;
2181 pub const CONTEXTIDR_EL1_SHIFT: u32 = 11;
2183 pub const CPACR_EL1_SHIFT: u32 = 12;
2185 pub const CSSELR_EL1_SHIFT: u32 = 13;
2187 pub const ESR_EL1_SHIFT: u32 = 16;
2189 pub const FAR_EL1_SHIFT: u32 = 17;
2191 pub const LORC_EL1_SHIFT: u32 = 19;
2193 pub const LOREA_EL1_SHIFT: u32 = 20;
2195 pub const LORN_EL1_SHIFT: u32 = 22;
2197 pub const LORSA_EL1_SHIFT: u32 = 23;
2199 pub const MAIR_EL1_SHIFT: u32 = 24;
2201 pub const PAR_EL1_SHIFT: u32 = 27;
2203 pub const SCTLR_EL1_SHIFT: u32 = 29;
2205 pub const SCXTNUM_EL1_SHIFT: u32 = 30;
2207 pub const SCXTNUM_EL0_SHIFT: u32 = 31;
2209 pub const TCR_EL1_SHIFT: u32 = 32;
2211 pub const TPIDR_EL1_SHIFT: u32 = 33;
2213 pub const TPIDRRO_EL0_SHIFT: u32 = 34;
2215 pub const TPIDR_EL0_SHIFT: u32 = 35;
2217 pub const TTBR0_EL1_SHIFT: u32 = 36;
2219 pub const TTBR1_EL1_SHIFT: u32 = 37;
2221 pub const VBAR_EL1_SHIFT: u32 = 38;
2223 pub const ICC_IGRPENN_EL1_SHIFT: u32 = 39;
2225 pub const ERRSELR_EL1_SHIFT: u32 = 41;
2227 pub const ERXCTLR_EL1_SHIFT: u32 = 43;
2229 pub const ERXSTATUS_EL1_SHIFT: u32 = 44;
2231 pub const ERXMISCN_EL1_SHIFT: u32 = 45;
2233 pub const ERXPFGCTL_EL1_SHIFT: u32 = 47;
2235 pub const ERXPFGCDN_EL1_SHIFT: u32 = 48;
2237 pub const ERXADDR_EL1_SHIFT: u32 = 49;
2239 pub const NACCDATA_EL1_SHIFT: u32 = 50;
2241 pub const NGCS_EL0_SHIFT: u32 = 52;
2243 pub const NGCS_EL1_SHIFT: u32 = 53;
2245 pub const NSMPRI_EL1_SHIFT: u32 = 54;
2247 pub const NTPIDR2_EL0_SHIFT: u32 = 55;
2249 pub const NRCWMASK_EL1_SHIFT: u32 = 56;
2251 pub const NPIRE0_EL1_SHIFT: u32 = 57;
2253 pub const NPIR_EL1_SHIFT: u32 = 58;
2255 pub const NPOR_EL0_SHIFT: u32 = 59;
2257 pub const NPOR_EL1_SHIFT: u32 = 60;
2259 pub const NS2POR_EL1_SHIFT: u32 = 61;
2261 pub const NMAIR2_EL1_SHIFT: u32 = 62;
2263 pub const NAMAIR2_EL1_SHIFT: u32 = 63;
2265}
2266
2267#[cfg(feature = "el2")]
2268bitflags! {
2269 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2271 #[repr(transparent)]
2272 pub struct HpfarEl2: u64 {
2273 const NS = 1 << 63;
2275 }
2276}
2277
2278#[cfg(feature = "el2")]
2279impl HpfarEl2 {
2280 pub const FIPA_SHIFT: u32 = 4;
2282 pub const FIPA_MASK: u64 = 0b11111111111111111111111111111111111111111111;
2284 pub const NS_SHIFT: u32 = 63;
2286
2287 pub const fn fipa(self) -> u64 {
2289 ((self.bits() >> Self::FIPA_SHIFT) & 0b11111111111111111111111111111111111111111111) as u64
2290 }
2291}
2292
2293#[cfg(feature = "el1")]
2294bitflags! {
2295 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2297 #[repr(transparent)]
2298 pub struct IccSreEl1: u64 {
2299 const SRE = 1 << 0;
2301 const DFB = 1 << 1;
2303 const DIB = 1 << 2;
2305 }
2306}
2307
2308#[cfg(feature = "el1")]
2309impl IccSreEl1 {
2310 pub const SRE_SHIFT: u32 = 0;
2312 pub const DFB_SHIFT: u32 = 1;
2314 pub const DIB_SHIFT: u32 = 2;
2316}
2317
2318#[cfg(feature = "el2")]
2319bitflags! {
2320 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2322 #[repr(transparent)]
2323 pub struct IccSreEl2: u64 {
2324 const SRE = 1 << 0;
2326 const DFB = 1 << 1;
2328 const DIB = 1 << 2;
2330 const ENABLE = 1 << 3;
2332 }
2333}
2334
2335#[cfg(feature = "el2")]
2336impl IccSreEl2 {
2337 pub const SRE_SHIFT: u32 = 0;
2339 pub const DFB_SHIFT: u32 = 1;
2341 pub const DIB_SHIFT: u32 = 2;
2343 pub const ENABLE_SHIFT: u32 = 3;
2345}
2346
2347#[cfg(feature = "el3")]
2348bitflags! {
2349 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2351 #[repr(transparent)]
2352 pub struct IccSreEl3: u64 {
2353 const SRE = 1 << 0;
2355 const DFB = 1 << 1;
2357 const DIB = 1 << 2;
2359 const ENABLE = 1 << 3;
2361 }
2362}
2363
2364#[cfg(feature = "el3")]
2365impl IccSreEl3 {
2366 pub const SRE_SHIFT: u32 = 0;
2368 pub const DFB_SHIFT: u32 = 1;
2370 pub const DIB_SHIFT: u32 = 2;
2372 pub const ENABLE_SHIFT: u32 = 3;
2374}
2375
2376#[cfg(feature = "el2")]
2377bitflags! {
2378 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2380 #[repr(transparent)]
2381 pub struct IchHcrEl2: u64 {
2382 const EN = 1 << 0;
2384 const UIE = 1 << 1;
2386 const LRENPIE = 1 << 2;
2388 const NPIE = 1 << 3;
2390 const VGRP0EIE = 1 << 4;
2392 const VGRP0DIE = 1 << 5;
2394 const VGRP1EIE = 1 << 6;
2396 const VGRP1DIE = 1 << 7;
2398 const VSGIEOICOUNT = 1 << 8;
2400 const TC = 1 << 10;
2402 const TALL0 = 1 << 11;
2404 const TALL1 = 1 << 12;
2406 const TSEI = 1 << 13;
2408 const TDIR = 1 << 14;
2410 const DVIM = 1 << 15;
2412 }
2413}
2414
2415#[cfg(feature = "el2")]
2416impl IchHcrEl2 {
2417 pub const EN_SHIFT: u32 = 0;
2419 pub const UIE_SHIFT: u32 = 1;
2421 pub const LRENPIE_SHIFT: u32 = 2;
2423 pub const NPIE_SHIFT: u32 = 3;
2425 pub const VGRP0EIE_SHIFT: u32 = 4;
2427 pub const VGRP0DIE_SHIFT: u32 = 5;
2429 pub const VGRP1EIE_SHIFT: u32 = 6;
2431 pub const VGRP1DIE_SHIFT: u32 = 7;
2433 pub const VSGIEOICOUNT_SHIFT: u32 = 8;
2435 pub const TC_SHIFT: u32 = 10;
2437 pub const TALL0_SHIFT: u32 = 11;
2439 pub const TALL1_SHIFT: u32 = 12;
2441 pub const TSEI_SHIFT: u32 = 13;
2443 pub const TDIR_SHIFT: u32 = 14;
2445 pub const DVIM_SHIFT: u32 = 15;
2447 pub const EOICOUNT_SHIFT: u32 = 27;
2449 pub const EOICOUNT_MASK: u64 = 0b11111;
2451
2452 pub const fn eoicount(self) -> u8 {
2454 ((self.bits() >> Self::EOICOUNT_SHIFT) & 0b11111) as u8
2455 }
2456}
2457
2458#[cfg(feature = "el2")]
2459bitflags! {
2460 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2462 #[repr(transparent)]
2463 pub struct IchVmcrEl2: u64 {
2464 const EN = 1 << 0;
2466 const VENG0 = 1 << 0;
2468 const VENG1 = 1 << 1;
2470 const VACKCTL = 1 << 2;
2472 const VFIQEN = 1 << 3;
2474 const VCBPR = 1 << 4;
2476 const VEOIM = 1 << 9;
2478 }
2479}
2480
2481#[cfg(feature = "el2")]
2482impl IchVmcrEl2 {
2483 pub const EN_SHIFT: u32 = 0;
2485 pub const VENG0_SHIFT: u32 = 0;
2487 pub const VENG1_SHIFT: u32 = 1;
2489 pub const VACKCTL_SHIFT: u32 = 2;
2491 pub const VFIQEN_SHIFT: u32 = 3;
2493 pub const VCBPR_SHIFT: u32 = 4;
2495 pub const VEOIM_SHIFT: u32 = 9;
2497 pub const VBPR1_SHIFT: u32 = 18;
2499 pub const VBPR1_MASK: u64 = 0b111;
2501 pub const VBPR0_SHIFT: u32 = 21;
2503 pub const VBPR0_MASK: u64 = 0b111;
2505
2506 pub const fn vbpr1(self) -> u8 {
2508 ((self.bits() >> Self::VBPR1_SHIFT) & 0b111) as u8
2509 }
2510
2511 pub const fn vbpr0(self) -> u8 {
2513 ((self.bits() >> Self::VBPR0_SHIFT) & 0b111) as u8
2514 }
2515}
2516
2517#[cfg(feature = "el1")]
2518bitflags! {
2519 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2521 #[repr(transparent)]
2522 pub struct IdAa64dfr0El1: u64 {
2523 }
2524}
2525
2526#[cfg(feature = "el1")]
2527impl IdAa64dfr0El1 {
2528 pub const DEBUGVER_SHIFT: u32 = 0;
2530 pub const DEBUGVER_MASK: u64 = 0b1111;
2532 pub const TRACEVER_SHIFT: u32 = 4;
2534 pub const TRACEVER_MASK: u64 = 0b1111;
2536 pub const PMUVER_SHIFT: u32 = 8;
2538 pub const PMUVER_MASK: u64 = 0b1111;
2540 pub const BRPS_SHIFT: u32 = 12;
2542 pub const BRPS_MASK: u64 = 0b1111;
2544 pub const PMSS_SHIFT: u32 = 16;
2546 pub const PMSS_MASK: u64 = 0b1111;
2548 pub const WRPS_SHIFT: u32 = 20;
2550 pub const WRPS_MASK: u64 = 0b1111;
2552 pub const SEBEP_SHIFT: u32 = 24;
2554 pub const SEBEP_MASK: u64 = 0b1111;
2556 pub const CTX_CMPS_SHIFT: u32 = 28;
2558 pub const CTX_CMPS_MASK: u64 = 0b1111;
2560 pub const PMSVER_SHIFT: u32 = 32;
2562 pub const PMSVER_MASK: u64 = 0b1111;
2564 pub const DOUBLELOCK_SHIFT: u32 = 36;
2566 pub const DOUBLELOCK_MASK: u64 = 0b1111;
2568 pub const TRACEFILT_SHIFT: u32 = 40;
2570 pub const TRACEFILT_MASK: u64 = 0b1111;
2572 pub const TRACEBUFFER_SHIFT: u32 = 44;
2574 pub const TRACEBUFFER_MASK: u64 = 0b1111;
2576 pub const MTPMU_SHIFT: u32 = 48;
2578 pub const MTPMU_MASK: u64 = 0b1111;
2580 pub const BRBE_SHIFT: u32 = 52;
2582 pub const BRBE_MASK: u64 = 0b1111;
2584 pub const EXTTRCBUFF_SHIFT: u32 = 56;
2586 pub const EXTTRCBUFF_MASK: u64 = 0b1111;
2588 pub const HPMN0_SHIFT: u32 = 60;
2590 pub const HPMN0_MASK: u64 = 0b1111;
2592
2593 pub const fn debugver(self) -> u8 {
2595 ((self.bits() >> Self::DEBUGVER_SHIFT) & 0b1111) as u8
2596 }
2597
2598 pub const fn tracever(self) -> u8 {
2600 ((self.bits() >> Self::TRACEVER_SHIFT) & 0b1111) as u8
2601 }
2602
2603 pub const fn pmuver(self) -> u8 {
2605 ((self.bits() >> Self::PMUVER_SHIFT) & 0b1111) as u8
2606 }
2607
2608 pub const fn brps(self) -> u8 {
2610 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
2611 }
2612
2613 pub const fn pmss(self) -> u8 {
2615 ((self.bits() >> Self::PMSS_SHIFT) & 0b1111) as u8
2616 }
2617
2618 pub const fn wrps(self) -> u8 {
2620 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
2621 }
2622
2623 pub const fn sebep(self) -> u8 {
2625 ((self.bits() >> Self::SEBEP_SHIFT) & 0b1111) as u8
2626 }
2627
2628 pub const fn ctx_cmps(self) -> u8 {
2630 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
2631 }
2632
2633 pub const fn pmsver(self) -> u8 {
2635 ((self.bits() >> Self::PMSVER_SHIFT) & 0b1111) as u8
2636 }
2637
2638 pub const fn doublelock(self) -> u8 {
2640 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
2641 }
2642
2643 pub const fn tracefilt(self) -> u8 {
2645 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
2646 }
2647
2648 pub const fn tracebuffer(self) -> u8 {
2650 ((self.bits() >> Self::TRACEBUFFER_SHIFT) & 0b1111) as u8
2651 }
2652
2653 pub const fn mtpmu(self) -> u8 {
2655 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
2656 }
2657
2658 pub const fn brbe(self) -> u8 {
2660 ((self.bits() >> Self::BRBE_SHIFT) & 0b1111) as u8
2661 }
2662
2663 pub const fn exttrcbuff(self) -> u8 {
2665 ((self.bits() >> Self::EXTTRCBUFF_SHIFT) & 0b1111) as u8
2666 }
2667
2668 pub const fn hpmn0(self) -> u8 {
2670 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
2671 }
2672}
2673
2674#[cfg(feature = "el1")]
2675bitflags! {
2676 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2678 #[repr(transparent)]
2679 pub struct IdAa64dfr1El1: u64 {
2680 }
2681}
2682
2683#[cfg(feature = "el1")]
2684impl IdAa64dfr1El1 {
2685 pub const SYSPMUID_SHIFT: u32 = 0;
2687 pub const SYSPMUID_MASK: u64 = 0b11111111;
2689 pub const BRPS_SHIFT: u32 = 8;
2691 pub const BRPS_MASK: u64 = 0b11111111;
2693 pub const WRPS_SHIFT: u32 = 16;
2695 pub const WRPS_MASK: u64 = 0b11111111;
2697 pub const CTX_CMPS_SHIFT: u32 = 24;
2699 pub const CTX_CMPS_MASK: u64 = 0b11111111;
2701 pub const SPMU_SHIFT: u32 = 32;
2703 pub const SPMU_MASK: u64 = 0b1111;
2705 pub const PMICNTR_SHIFT: u32 = 36;
2707 pub const PMICNTR_MASK: u64 = 0b1111;
2709 pub const ABLE_SHIFT: u32 = 40;
2711 pub const ABLE_MASK: u64 = 0b1111;
2713 pub const ITE_SHIFT: u32 = 44;
2715 pub const ITE_MASK: u64 = 0b1111;
2717 pub const EBEP_SHIFT: u32 = 48;
2719 pub const EBEP_MASK: u64 = 0b1111;
2721 pub const DPFZS_SHIFT: u32 = 52;
2723 pub const DPFZS_MASK: u64 = 0b1111;
2725 pub const ABL_CMPS_SHIFT: u32 = 56;
2727 pub const ABL_CMPS_MASK: u64 = 0b11111111;
2729
2730 pub const fn syspmuid(self) -> u8 {
2732 ((self.bits() >> Self::SYSPMUID_SHIFT) & 0b11111111) as u8
2733 }
2734
2735 pub const fn brps(self) -> u8 {
2737 ((self.bits() >> Self::BRPS_SHIFT) & 0b11111111) as u8
2738 }
2739
2740 pub const fn wrps(self) -> u8 {
2742 ((self.bits() >> Self::WRPS_SHIFT) & 0b11111111) as u8
2743 }
2744
2745 pub const fn ctx_cmps(self) -> u8 {
2747 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b11111111) as u8
2748 }
2749
2750 pub const fn spmu(self) -> u8 {
2752 ((self.bits() >> Self::SPMU_SHIFT) & 0b1111) as u8
2753 }
2754
2755 pub const fn pmicntr(self) -> u8 {
2757 ((self.bits() >> Self::PMICNTR_SHIFT) & 0b1111) as u8
2758 }
2759
2760 pub const fn able(self) -> u8 {
2762 ((self.bits() >> Self::ABLE_SHIFT) & 0b1111) as u8
2763 }
2764
2765 pub const fn ite(self) -> u8 {
2767 ((self.bits() >> Self::ITE_SHIFT) & 0b1111) as u8
2768 }
2769
2770 pub const fn ebep(self) -> u8 {
2772 ((self.bits() >> Self::EBEP_SHIFT) & 0b1111) as u8
2773 }
2774
2775 pub const fn dpfzs(self) -> u8 {
2777 ((self.bits() >> Self::DPFZS_SHIFT) & 0b1111) as u8
2778 }
2779
2780 pub const fn abl_cmps(self) -> u8 {
2782 ((self.bits() >> Self::ABL_CMPS_SHIFT) & 0b11111111) as u8
2783 }
2784}
2785
2786#[cfg(feature = "el1")]
2787bitflags! {
2788 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2790 #[repr(transparent)]
2791 pub struct IdAa64mmfr0El1: u64 {
2792 }
2793}
2794
2795#[cfg(feature = "el1")]
2796impl IdAa64mmfr0El1 {
2797 pub const PARANGE_SHIFT: u32 = 0;
2799 pub const PARANGE_MASK: u64 = 0b1111;
2801 pub const ASIDBITS_SHIFT: u32 = 4;
2803 pub const ASIDBITS_MASK: u64 = 0b1111;
2805 pub const BIGEND_SHIFT: u32 = 8;
2807 pub const BIGEND_MASK: u64 = 0b1111;
2809 pub const SNSMEM_SHIFT: u32 = 12;
2811 pub const SNSMEM_MASK: u64 = 0b1111;
2813 pub const BIGENDEL0_SHIFT: u32 = 16;
2815 pub const BIGENDEL0_MASK: u64 = 0b1111;
2817 pub const TGRAN16_SHIFT: u32 = 20;
2819 pub const TGRAN16_MASK: u64 = 0b1111;
2821 pub const TGRAN64_SHIFT: u32 = 24;
2823 pub const TGRAN64_MASK: u64 = 0b1111;
2825 pub const TGRAN4_SHIFT: u32 = 28;
2827 pub const TGRAN4_MASK: u64 = 0b1111;
2829 pub const TGRAN16_2_SHIFT: u32 = 32;
2831 pub const TGRAN16_2_MASK: u64 = 0b1111;
2833 pub const TGRAN64_2_SHIFT: u32 = 36;
2835 pub const TGRAN64_2_MASK: u64 = 0b1111;
2837 pub const TGRAN4_2_SHIFT: u32 = 40;
2839 pub const TGRAN4_2_MASK: u64 = 0b1111;
2841 pub const EXS_SHIFT: u32 = 44;
2843 pub const EXS_MASK: u64 = 0b1111;
2845 pub const FGT_SHIFT: u32 = 56;
2847 pub const FGT_MASK: u64 = 0b1111;
2849 pub const ECV_SHIFT: u32 = 60;
2851 pub const ECV_MASK: u64 = 0b1111;
2853
2854 pub const fn parange(self) -> u8 {
2856 ((self.bits() >> Self::PARANGE_SHIFT) & 0b1111) as u8
2857 }
2858
2859 pub const fn asidbits(self) -> u8 {
2861 ((self.bits() >> Self::ASIDBITS_SHIFT) & 0b1111) as u8
2862 }
2863
2864 pub const fn bigend(self) -> u8 {
2866 ((self.bits() >> Self::BIGEND_SHIFT) & 0b1111) as u8
2867 }
2868
2869 pub const fn snsmem(self) -> u8 {
2871 ((self.bits() >> Self::SNSMEM_SHIFT) & 0b1111) as u8
2872 }
2873
2874 pub const fn bigendel0(self) -> u8 {
2876 ((self.bits() >> Self::BIGENDEL0_SHIFT) & 0b1111) as u8
2877 }
2878
2879 pub const fn tgran16(self) -> u8 {
2881 ((self.bits() >> Self::TGRAN16_SHIFT) & 0b1111) as u8
2882 }
2883
2884 pub const fn tgran64(self) -> u8 {
2886 ((self.bits() >> Self::TGRAN64_SHIFT) & 0b1111) as u8
2887 }
2888
2889 pub const fn tgran4(self) -> u8 {
2891 ((self.bits() >> Self::TGRAN4_SHIFT) & 0b1111) as u8
2892 }
2893
2894 pub const fn tgran16_2(self) -> u8 {
2896 ((self.bits() >> Self::TGRAN16_2_SHIFT) & 0b1111) as u8
2897 }
2898
2899 pub const fn tgran64_2(self) -> u8 {
2901 ((self.bits() >> Self::TGRAN64_2_SHIFT) & 0b1111) as u8
2902 }
2903
2904 pub const fn tgran4_2(self) -> u8 {
2906 ((self.bits() >> Self::TGRAN4_2_SHIFT) & 0b1111) as u8
2907 }
2908
2909 pub const fn exs(self) -> u8 {
2911 ((self.bits() >> Self::EXS_SHIFT) & 0b1111) as u8
2912 }
2913
2914 pub const fn fgt(self) -> u8 {
2916 ((self.bits() >> Self::FGT_SHIFT) & 0b1111) as u8
2917 }
2918
2919 pub const fn ecv(self) -> u8 {
2921 ((self.bits() >> Self::ECV_SHIFT) & 0b1111) as u8
2922 }
2923}
2924
2925#[cfg(feature = "el1")]
2926bitflags! {
2927 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2929 #[repr(transparent)]
2930 pub struct IdAa64mmfr1El1: u64 {
2931 }
2932}
2933
2934#[cfg(feature = "el1")]
2935impl IdAa64mmfr1El1 {
2936 pub const HAFDBS_SHIFT: u32 = 0;
2938 pub const HAFDBS_MASK: u64 = 0b1111;
2940 pub const VMIDBITS_SHIFT: u32 = 4;
2942 pub const VMIDBITS_MASK: u64 = 0b1111;
2944 pub const VH_SHIFT: u32 = 8;
2946 pub const VH_MASK: u64 = 0b1111;
2948 pub const HPDS_SHIFT: u32 = 12;
2950 pub const HPDS_MASK: u64 = 0b1111;
2952 pub const LO_SHIFT: u32 = 16;
2954 pub const LO_MASK: u64 = 0b1111;
2956 pub const PAN_SHIFT: u32 = 20;
2958 pub const PAN_MASK: u64 = 0b1111;
2960 pub const SPECSEI_SHIFT: u32 = 24;
2962 pub const SPECSEI_MASK: u64 = 0b1111;
2964 pub const XNX_SHIFT: u32 = 28;
2966 pub const XNX_MASK: u64 = 0b1111;
2968 pub const TWED_SHIFT: u32 = 32;
2970 pub const TWED_MASK: u64 = 0b1111;
2972 pub const ETS_SHIFT: u32 = 36;
2974 pub const ETS_MASK: u64 = 0b1111;
2976 pub const HCX_SHIFT: u32 = 40;
2978 pub const HCX_MASK: u64 = 0b1111;
2980 pub const AFP_SHIFT: u32 = 44;
2982 pub const AFP_MASK: u64 = 0b1111;
2984 pub const NTLBPA_SHIFT: u32 = 48;
2986 pub const NTLBPA_MASK: u64 = 0b1111;
2988 pub const TIDCP1_SHIFT: u32 = 52;
2990 pub const TIDCP1_MASK: u64 = 0b1111;
2992 pub const CMOW_SHIFT: u32 = 56;
2994 pub const CMOW_MASK: u64 = 0b1111;
2996 pub const ECBHB_SHIFT: u32 = 60;
2998 pub const ECBHB_MASK: u64 = 0b1111;
3000
3001 pub const fn hafdbs(self) -> u8 {
3003 ((self.bits() >> Self::HAFDBS_SHIFT) & 0b1111) as u8
3004 }
3005
3006 pub const fn vmidbits(self) -> u8 {
3008 ((self.bits() >> Self::VMIDBITS_SHIFT) & 0b1111) as u8
3009 }
3010
3011 pub const fn vh(self) -> u8 {
3013 ((self.bits() >> Self::VH_SHIFT) & 0b1111) as u8
3014 }
3015
3016 pub const fn hpds(self) -> u8 {
3018 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
3019 }
3020
3021 pub const fn lo(self) -> u8 {
3023 ((self.bits() >> Self::LO_SHIFT) & 0b1111) as u8
3024 }
3025
3026 pub const fn pan(self) -> u8 {
3028 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
3029 }
3030
3031 pub const fn specsei(self) -> u8 {
3033 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
3034 }
3035
3036 pub const fn xnx(self) -> u8 {
3038 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
3039 }
3040
3041 pub const fn twed(self) -> u8 {
3043 ((self.bits() >> Self::TWED_SHIFT) & 0b1111) as u8
3044 }
3045
3046 pub const fn ets(self) -> u8 {
3048 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
3049 }
3050
3051 pub const fn hcx(self) -> u8 {
3053 ((self.bits() >> Self::HCX_SHIFT) & 0b1111) as u8
3054 }
3055
3056 pub const fn afp(self) -> u8 {
3058 ((self.bits() >> Self::AFP_SHIFT) & 0b1111) as u8
3059 }
3060
3061 pub const fn ntlbpa(self) -> u8 {
3063 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
3064 }
3065
3066 pub const fn tidcp1(self) -> u8 {
3068 ((self.bits() >> Self::TIDCP1_SHIFT) & 0b1111) as u8
3069 }
3070
3071 pub const fn cmow(self) -> u8 {
3073 ((self.bits() >> Self::CMOW_SHIFT) & 0b1111) as u8
3074 }
3075
3076 pub const fn ecbhb(self) -> u8 {
3078 ((self.bits() >> Self::ECBHB_SHIFT) & 0b1111) as u8
3079 }
3080}
3081
3082#[cfg(feature = "el1")]
3083bitflags! {
3084 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3086 #[repr(transparent)]
3087 pub struct IdAa64mmfr2El1: u64 {
3088 }
3089}
3090
3091#[cfg(feature = "el1")]
3092impl IdAa64mmfr2El1 {
3093 pub const CNP_SHIFT: u32 = 0;
3095 pub const CNP_MASK: u64 = 0b1111;
3097 pub const UAO_SHIFT: u32 = 4;
3099 pub const UAO_MASK: u64 = 0b1111;
3101 pub const LSM_SHIFT: u32 = 8;
3103 pub const LSM_MASK: u64 = 0b1111;
3105 pub const IESB_SHIFT: u32 = 12;
3107 pub const IESB_MASK: u64 = 0b1111;
3109 pub const VARANGE_SHIFT: u32 = 16;
3111 pub const VARANGE_MASK: u64 = 0b1111;
3113 pub const CCIDX_SHIFT: u32 = 20;
3115 pub const CCIDX_MASK: u64 = 0b1111;
3117 pub const NV_SHIFT: u32 = 24;
3119 pub const NV_MASK: u64 = 0b1111;
3121 pub const ST_SHIFT: u32 = 28;
3123 pub const ST_MASK: u64 = 0b1111;
3125 pub const AT_SHIFT: u32 = 32;
3127 pub const AT_MASK: u64 = 0b1111;
3129 pub const IDS_SHIFT: u32 = 36;
3131 pub const IDS_MASK: u64 = 0b1111;
3133 pub const FWB_SHIFT: u32 = 40;
3135 pub const FWB_MASK: u64 = 0b1111;
3137 pub const TTL_SHIFT: u32 = 48;
3139 pub const TTL_MASK: u64 = 0b1111;
3141 pub const BBM_SHIFT: u32 = 52;
3143 pub const BBM_MASK: u64 = 0b1111;
3145 pub const EVT_SHIFT: u32 = 56;
3147 pub const EVT_MASK: u64 = 0b1111;
3149 pub const E0PD_SHIFT: u32 = 60;
3151 pub const E0PD_MASK: u64 = 0b1111;
3153
3154 pub const fn cnp(self) -> u8 {
3156 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
3157 }
3158
3159 pub const fn uao(self) -> u8 {
3161 ((self.bits() >> Self::UAO_SHIFT) & 0b1111) as u8
3162 }
3163
3164 pub const fn lsm(self) -> u8 {
3166 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
3167 }
3168
3169 pub const fn iesb(self) -> u8 {
3171 ((self.bits() >> Self::IESB_SHIFT) & 0b1111) as u8
3172 }
3173
3174 pub const fn varange(self) -> u8 {
3176 ((self.bits() >> Self::VARANGE_SHIFT) & 0b1111) as u8
3177 }
3178
3179 pub const fn ccidx(self) -> u8 {
3181 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
3182 }
3183
3184 pub const fn nv(self) -> u8 {
3186 ((self.bits() >> Self::NV_SHIFT) & 0b1111) as u8
3187 }
3188
3189 pub const fn st(self) -> u8 {
3191 ((self.bits() >> Self::ST_SHIFT) & 0b1111) as u8
3192 }
3193
3194 pub const fn at(self) -> u8 {
3196 ((self.bits() >> Self::AT_SHIFT) & 0b1111) as u8
3197 }
3198
3199 pub const fn ids(self) -> u8 {
3201 ((self.bits() >> Self::IDS_SHIFT) & 0b1111) as u8
3202 }
3203
3204 pub const fn fwb(self) -> u8 {
3206 ((self.bits() >> Self::FWB_SHIFT) & 0b1111) as u8
3207 }
3208
3209 pub const fn ttl(self) -> u8 {
3211 ((self.bits() >> Self::TTL_SHIFT) & 0b1111) as u8
3212 }
3213
3214 pub const fn bbm(self) -> u8 {
3216 ((self.bits() >> Self::BBM_SHIFT) & 0b1111) as u8
3217 }
3218
3219 pub const fn evt(self) -> u8 {
3221 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
3222 }
3223
3224 pub const fn e0pd(self) -> u8 {
3226 ((self.bits() >> Self::E0PD_SHIFT) & 0b1111) as u8
3227 }
3228}
3229
3230#[cfg(feature = "el1")]
3231bitflags! {
3232 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3234 #[repr(transparent)]
3235 pub struct IdAa64mmfr3El1: u64 {
3236 }
3237}
3238
3239#[cfg(feature = "el1")]
3240impl IdAa64mmfr3El1 {
3241 pub const TCRX_SHIFT: u32 = 0;
3243 pub const TCRX_MASK: u64 = 0b1111;
3245 pub const SCTLRX_SHIFT: u32 = 4;
3247 pub const SCTLRX_MASK: u64 = 0b1111;
3249 pub const S1PIE_SHIFT: u32 = 8;
3251 pub const S1PIE_MASK: u64 = 0b1111;
3253 pub const S2PIE_SHIFT: u32 = 12;
3255 pub const S2PIE_MASK: u64 = 0b1111;
3257 pub const S1POE_SHIFT: u32 = 16;
3259 pub const S1POE_MASK: u64 = 0b1111;
3261 pub const S2POE_SHIFT: u32 = 20;
3263 pub const S2POE_MASK: u64 = 0b1111;
3265 pub const AIE_SHIFT: u32 = 24;
3267 pub const AIE_MASK: u64 = 0b1111;
3269 pub const MEC_SHIFT: u32 = 28;
3271 pub const MEC_MASK: u64 = 0b1111;
3273 pub const D128_SHIFT: u32 = 32;
3275 pub const D128_MASK: u64 = 0b1111;
3277 pub const D128_2_SHIFT: u32 = 36;
3279 pub const D128_2_MASK: u64 = 0b1111;
3281 pub const SNERR_SHIFT: u32 = 40;
3283 pub const SNERR_MASK: u64 = 0b1111;
3285 pub const ANERR_SHIFT: u32 = 44;
3287 pub const ANERR_MASK: u64 = 0b1111;
3289 pub const SDERR_SHIFT: u32 = 52;
3291 pub const SDERR_MASK: u64 = 0b1111;
3293 pub const ADERR_SHIFT: u32 = 56;
3295 pub const ADERR_MASK: u64 = 0b1111;
3297 pub const SPEC_FPACC_SHIFT: u32 = 60;
3299 pub const SPEC_FPACC_MASK: u64 = 0b1111;
3301
3302 pub const fn tcrx(self) -> u8 {
3304 ((self.bits() >> Self::TCRX_SHIFT) & 0b1111) as u8
3305 }
3306
3307 pub const fn sctlrx(self) -> u8 {
3309 ((self.bits() >> Self::SCTLRX_SHIFT) & 0b1111) as u8
3310 }
3311
3312 pub const fn s1pie(self) -> u8 {
3314 ((self.bits() >> Self::S1PIE_SHIFT) & 0b1111) as u8
3315 }
3316
3317 pub const fn s2pie(self) -> u8 {
3319 ((self.bits() >> Self::S2PIE_SHIFT) & 0b1111) as u8
3320 }
3321
3322 pub const fn s1poe(self) -> u8 {
3324 ((self.bits() >> Self::S1POE_SHIFT) & 0b1111) as u8
3325 }
3326
3327 pub const fn s2poe(self) -> u8 {
3329 ((self.bits() >> Self::S2POE_SHIFT) & 0b1111) as u8
3330 }
3331
3332 pub const fn aie(self) -> u8 {
3334 ((self.bits() >> Self::AIE_SHIFT) & 0b1111) as u8
3335 }
3336
3337 pub const fn mec(self) -> u8 {
3339 ((self.bits() >> Self::MEC_SHIFT) & 0b1111) as u8
3340 }
3341
3342 pub const fn d128(self) -> u8 {
3344 ((self.bits() >> Self::D128_SHIFT) & 0b1111) as u8
3345 }
3346
3347 pub const fn d128_2(self) -> u8 {
3349 ((self.bits() >> Self::D128_2_SHIFT) & 0b1111) as u8
3350 }
3351
3352 pub const fn snerr(self) -> u8 {
3354 ((self.bits() >> Self::SNERR_SHIFT) & 0b1111) as u8
3355 }
3356
3357 pub const fn anerr(self) -> u8 {
3359 ((self.bits() >> Self::ANERR_SHIFT) & 0b1111) as u8
3360 }
3361
3362 pub const fn sderr(self) -> u8 {
3364 ((self.bits() >> Self::SDERR_SHIFT) & 0b1111) as u8
3365 }
3366
3367 pub const fn aderr(self) -> u8 {
3369 ((self.bits() >> Self::ADERR_SHIFT) & 0b1111) as u8
3370 }
3371
3372 pub const fn spec_fpacc(self) -> u8 {
3374 ((self.bits() >> Self::SPEC_FPACC_SHIFT) & 0b1111) as u8
3375 }
3376}
3377
3378#[cfg(feature = "el1")]
3379bitflags! {
3380 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3382 #[repr(transparent)]
3383 pub struct IdAa64pfr0El1: u64 {
3384 }
3385}
3386
3387#[cfg(feature = "el1")]
3388impl IdAa64pfr0El1 {
3389 pub const EL0_SHIFT: u32 = 0;
3391 pub const EL0_MASK: u64 = 0b1111;
3393 pub const EL1_SHIFT: u32 = 4;
3395 pub const EL1_MASK: u64 = 0b1111;
3397 pub const EL2_SHIFT: u32 = 8;
3399 pub const EL2_MASK: u64 = 0b1111;
3401 pub const EL3_SHIFT: u32 = 12;
3403 pub const EL3_MASK: u64 = 0b1111;
3405 pub const FP_SHIFT: u32 = 16;
3407 pub const FP_MASK: u64 = 0b1111;
3409 pub const ADVSIMD_SHIFT: u32 = 20;
3411 pub const ADVSIMD_MASK: u64 = 0b1111;
3413 pub const GIC_SHIFT: u32 = 24;
3415 pub const GIC_MASK: u64 = 0b1111;
3417 pub const RAS_SHIFT: u32 = 28;
3419 pub const RAS_MASK: u64 = 0b1111;
3421 pub const SVE_SHIFT: u32 = 32;
3423 pub const SVE_MASK: u64 = 0b1111;
3425 pub const SEL2_SHIFT: u32 = 36;
3427 pub const SEL2_MASK: u64 = 0b1111;
3429 pub const MPAM_SHIFT: u32 = 40;
3431 pub const MPAM_MASK: u64 = 0b1111;
3433 pub const AMU_SHIFT: u32 = 44;
3435 pub const AMU_MASK: u64 = 0b1111;
3437 pub const DIT_SHIFT: u32 = 48;
3439 pub const DIT_MASK: u64 = 0b1111;
3441 pub const RME_SHIFT: u32 = 52;
3443 pub const RME_MASK: u64 = 0b1111;
3445 pub const CSV2_SHIFT: u32 = 56;
3447 pub const CSV2_MASK: u64 = 0b1111;
3449 pub const CSV3_SHIFT: u32 = 60;
3451 pub const CSV3_MASK: u64 = 0b1111;
3453
3454 pub const fn el0(self) -> u8 {
3456 ((self.bits() >> Self::EL0_SHIFT) & 0b1111) as u8
3457 }
3458
3459 pub const fn el1(self) -> u8 {
3461 ((self.bits() >> Self::EL1_SHIFT) & 0b1111) as u8
3462 }
3463
3464 pub const fn el2(self) -> u8 {
3466 ((self.bits() >> Self::EL2_SHIFT) & 0b1111) as u8
3467 }
3468
3469 pub const fn el3(self) -> u8 {
3471 ((self.bits() >> Self::EL3_SHIFT) & 0b1111) as u8
3472 }
3473
3474 pub const fn fp(self) -> u8 {
3476 ((self.bits() >> Self::FP_SHIFT) & 0b1111) as u8
3477 }
3478
3479 pub const fn advsimd(self) -> u8 {
3481 ((self.bits() >> Self::ADVSIMD_SHIFT) & 0b1111) as u8
3482 }
3483
3484 pub const fn gic(self) -> u8 {
3486 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
3487 }
3488
3489 pub const fn ras(self) -> u8 {
3491 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
3492 }
3493
3494 pub const fn sve(self) -> u8 {
3496 ((self.bits() >> Self::SVE_SHIFT) & 0b1111) as u8
3497 }
3498
3499 pub const fn sel2(self) -> u8 {
3501 ((self.bits() >> Self::SEL2_SHIFT) & 0b1111) as u8
3502 }
3503
3504 pub const fn mpam(self) -> u8 {
3506 ((self.bits() >> Self::MPAM_SHIFT) & 0b1111) as u8
3507 }
3508
3509 pub const fn amu(self) -> u8 {
3511 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
3512 }
3513
3514 pub const fn dit(self) -> u8 {
3516 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
3517 }
3518
3519 pub const fn rme(self) -> u8 {
3521 ((self.bits() >> Self::RME_SHIFT) & 0b1111) as u8
3522 }
3523
3524 pub const fn csv2(self) -> u8 {
3526 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
3527 }
3528
3529 pub const fn csv3(self) -> u8 {
3531 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
3532 }
3533}
3534
3535#[cfg(feature = "el1")]
3536bitflags! {
3537 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3539 #[repr(transparent)]
3540 pub struct IdAa64pfr1El1: u64 {
3541 }
3542}
3543
3544#[cfg(feature = "el1")]
3545impl IdAa64pfr1El1 {
3546 pub const BT_SHIFT: u32 = 0;
3548 pub const BT_MASK: u64 = 0b1111;
3550 pub const SSBS_SHIFT: u32 = 4;
3552 pub const SSBS_MASK: u64 = 0b1111;
3554 pub const MTE_SHIFT: u32 = 8;
3556 pub const MTE_MASK: u64 = 0b1111;
3558 pub const RAS_FRAC_SHIFT: u32 = 12;
3560 pub const RAS_FRAC_MASK: u64 = 0b1111;
3562 pub const MPAM_FRAC_SHIFT: u32 = 16;
3564 pub const MPAM_FRAC_MASK: u64 = 0b1111;
3566 pub const SME_SHIFT: u32 = 24;
3568 pub const SME_MASK: u64 = 0b1111;
3570 pub const RNDR_TRAP_SHIFT: u32 = 28;
3572 pub const RNDR_TRAP_MASK: u64 = 0b1111;
3574 pub const CSV2_FRAC_SHIFT: u32 = 32;
3576 pub const CSV2_FRAC_MASK: u64 = 0b1111;
3578 pub const NMI_SHIFT: u32 = 36;
3580 pub const NMI_MASK: u64 = 0b1111;
3582 pub const MTE_FRAC_SHIFT: u32 = 40;
3584 pub const MTE_FRAC_MASK: u64 = 0b1111;
3586 pub const GCS_SHIFT: u32 = 44;
3588 pub const GCS_MASK: u64 = 0b1111;
3590 pub const THE_SHIFT: u32 = 48;
3592 pub const THE_MASK: u64 = 0b1111;
3594 pub const MTEX_SHIFT: u32 = 52;
3596 pub const MTEX_MASK: u64 = 0b1111;
3598 pub const DF2_SHIFT: u32 = 56;
3600 pub const DF2_MASK: u64 = 0b1111;
3602 pub const PFAR_SHIFT: u32 = 60;
3604 pub const PFAR_MASK: u64 = 0b1111;
3606
3607 pub const fn bt(self) -> u8 {
3609 ((self.bits() >> Self::BT_SHIFT) & 0b1111) as u8
3610 }
3611
3612 pub const fn ssbs(self) -> u8 {
3614 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
3615 }
3616
3617 pub const fn mte(self) -> u8 {
3619 ((self.bits() >> Self::MTE_SHIFT) & 0b1111) as u8
3620 }
3621
3622 pub const fn ras_frac(self) -> u8 {
3624 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
3625 }
3626
3627 pub const fn mpam_frac(self) -> u8 {
3629 ((self.bits() >> Self::MPAM_FRAC_SHIFT) & 0b1111) as u8
3630 }
3631
3632 pub const fn sme(self) -> u8 {
3634 ((self.bits() >> Self::SME_SHIFT) & 0b1111) as u8
3635 }
3636
3637 pub const fn rndr_trap(self) -> u8 {
3639 ((self.bits() >> Self::RNDR_TRAP_SHIFT) & 0b1111) as u8
3640 }
3641
3642 pub const fn csv2_frac(self) -> u8 {
3644 ((self.bits() >> Self::CSV2_FRAC_SHIFT) & 0b1111) as u8
3645 }
3646
3647 pub const fn nmi(self) -> u8 {
3649 ((self.bits() >> Self::NMI_SHIFT) & 0b1111) as u8
3650 }
3651
3652 pub const fn mte_frac(self) -> u8 {
3654 ((self.bits() >> Self::MTE_FRAC_SHIFT) & 0b1111) as u8
3655 }
3656
3657 pub const fn gcs(self) -> u8 {
3659 ((self.bits() >> Self::GCS_SHIFT) & 0b1111) as u8
3660 }
3661
3662 pub const fn the(self) -> u8 {
3664 ((self.bits() >> Self::THE_SHIFT) & 0b1111) as u8
3665 }
3666
3667 pub const fn mtex(self) -> u8 {
3669 ((self.bits() >> Self::MTEX_SHIFT) & 0b1111) as u8
3670 }
3671
3672 pub const fn df2(self) -> u8 {
3674 ((self.bits() >> Self::DF2_SHIFT) & 0b1111) as u8
3675 }
3676
3677 pub const fn pfar(self) -> u8 {
3679 ((self.bits() >> Self::PFAR_SHIFT) & 0b1111) as u8
3680 }
3681}
3682
3683#[cfg(feature = "el1")]
3684bitflags! {
3685 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3687 #[repr(transparent)]
3688 pub struct IdAa64smfr0El1: u64 {
3689 const SMOP4 = 1 << 0;
3691 const STMOP = 1 << 16;
3693 const SFEXPA = 1 << 23;
3695 const AES = 1 << 24;
3697 const SBITPERM = 1 << 25;
3699 const SF8DP2 = 1 << 28;
3701 const SF8DP4 = 1 << 29;
3703 const SF8FMA = 1 << 30;
3705 const F32F32 = 1 << 32;
3707 const BI32I32 = 1 << 33;
3709 const B16F32 = 1 << 34;
3711 const F16F32 = 1 << 35;
3713 const F8F32 = 1 << 40;
3715 const F8F16 = 1 << 41;
3717 const F16F16 = 1 << 42;
3719 const B16B16 = 1 << 43;
3721 const F64F64 = 1 << 48;
3723 const LUTV2 = 1 << 60;
3725 const LUT6 = 1 << 61;
3727 const FA64 = 1 << 63;
3729 }
3730}
3731
3732#[cfg(feature = "el1")]
3733impl IdAa64smfr0El1 {
3734 pub const SMOP4_SHIFT: u32 = 0;
3736 pub const STMOP_SHIFT: u32 = 16;
3738 pub const SFEXPA_SHIFT: u32 = 23;
3740 pub const AES_SHIFT: u32 = 24;
3742 pub const SBITPERM_SHIFT: u32 = 25;
3744 pub const SF8DP2_SHIFT: u32 = 28;
3746 pub const SF8DP4_SHIFT: u32 = 29;
3748 pub const SF8FMA_SHIFT: u32 = 30;
3750 pub const F32F32_SHIFT: u32 = 32;
3752 pub const BI32I32_SHIFT: u32 = 33;
3754 pub const B16F32_SHIFT: u32 = 34;
3756 pub const F16F32_SHIFT: u32 = 35;
3758 pub const I8I32_SHIFT: u32 = 36;
3760 pub const I8I32_MASK: u64 = 0b1111;
3762 pub const F8F32_SHIFT: u32 = 40;
3764 pub const F8F16_SHIFT: u32 = 41;
3766 pub const F16F16_SHIFT: u32 = 42;
3768 pub const B16B16_SHIFT: u32 = 43;
3770 pub const I16I32_SHIFT: u32 = 44;
3772 pub const I16I32_MASK: u64 = 0b1111;
3774 pub const F64F64_SHIFT: u32 = 48;
3776 pub const I16I64_SHIFT: u32 = 52;
3778 pub const I16I64_MASK: u64 = 0b1111;
3780 pub const SMEVER_SHIFT: u32 = 56;
3782 pub const SMEVER_MASK: u64 = 0b1111;
3784 pub const LUTV2_SHIFT: u32 = 60;
3786 pub const LUT6_SHIFT: u32 = 61;
3788 pub const FA64_SHIFT: u32 = 63;
3790
3791 pub const fn i8i32(self) -> u8 {
3793 ((self.bits() >> Self::I8I32_SHIFT) & 0b1111) as u8
3794 }
3795
3796 pub const fn i16i32(self) -> u8 {
3798 ((self.bits() >> Self::I16I32_SHIFT) & 0b1111) as u8
3799 }
3800
3801 pub const fn i16i64(self) -> u8 {
3803 ((self.bits() >> Self::I16I64_SHIFT) & 0b1111) as u8
3804 }
3805
3806 pub const fn smever(self) -> u8 {
3808 ((self.bits() >> Self::SMEVER_SHIFT) & 0b1111) as u8
3809 }
3810}
3811
3812#[cfg(feature = "el1")]
3813bitflags! {
3814 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3816 #[repr(transparent)]
3817 pub struct IsrEl1: u64 {
3818 const F = 1 << 6;
3820 const I = 1 << 7;
3822 const A = 1 << 8;
3824 const FS = 1 << 9;
3826 const IS = 1 << 10;
3828 }
3829}
3830
3831#[cfg(feature = "el1")]
3832impl IsrEl1 {
3833 pub const F_SHIFT: u32 = 6;
3835 pub const I_SHIFT: u32 = 7;
3837 pub const A_SHIFT: u32 = 8;
3839 pub const FS_SHIFT: u32 = 9;
3841 pub const IS_SHIFT: u32 = 10;
3843}
3844
3845#[cfg(feature = "el1")]
3846bitflags! {
3847 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3849 #[repr(transparent)]
3850 pub struct MairEl1: u64 {
3851 }
3852}
3853
3854#[cfg(feature = "el1")]
3855impl MairEl1 {
3856 pub const ATTR_SHIFT: u32 = 0;
3858 pub const ATTR_MASK: u64 = 0b11111111;
3860
3861 pub const fn attr(self, n: u32) -> u8 {
3863 assert!(n < 8);
3864 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
3865 }
3866}
3867
3868#[cfg(feature = "el2")]
3869bitflags! {
3870 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3872 #[repr(transparent)]
3873 pub struct MairEl2: u64 {
3874 }
3875}
3876
3877#[cfg(feature = "el2")]
3878impl MairEl2 {
3879 pub const ATTR_SHIFT: u32 = 0;
3881 pub const ATTR_MASK: u64 = 0b11111111;
3883
3884 pub const fn attr(self, n: u32) -> u8 {
3886 assert!(n < 8);
3887 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
3888 }
3889}
3890
3891#[cfg(feature = "el3")]
3892bitflags! {
3893 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3895 #[repr(transparent)]
3896 pub struct MairEl3: u64 {
3897 }
3898}
3899
3900#[cfg(feature = "el3")]
3901impl MairEl3 {
3902 pub const ATTR_SHIFT: u32 = 0;
3904 pub const ATTR_MASK: u64 = 0b11111111;
3906
3907 pub const fn attr(self, n: u32) -> u8 {
3909 assert!(n < 8);
3910 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
3911 }
3912}
3913
3914#[cfg(feature = "el1")]
3915bitflags! {
3916 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3918 #[repr(transparent)]
3919 pub struct MdccintEl1: u64 {
3920 const TX = 1 << 29;
3922 const RX = 1 << 30;
3924 }
3925}
3926
3927#[cfg(feature = "el1")]
3928impl MdccintEl1 {
3929 pub const TX_SHIFT: u32 = 29;
3931 pub const RX_SHIFT: u32 = 30;
3933}
3934
3935#[cfg(feature = "el2")]
3936bitflags! {
3937 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3939 #[repr(transparent)]
3940 pub struct MdcrEl2: u64 {
3941 const TPMCR = 1 << 5;
3943 const TPM = 1 << 6;
3945 const HPME = 1 << 7;
3947 const TDE = 1 << 8;
3949 const TDA = 1 << 9;
3951 const TDOSA = 1 << 10;
3953 const TDRA = 1 << 11;
3955 const TPMS = 1 << 14;
3957 const ENSPM = 1 << 15;
3959 const HPMD = 1 << 17;
3961 const TTRF = 1 << 19;
3963 const HCCD = 1 << 23;
3965 const HLP = 1 << 26;
3967 const TDCC = 1 << 27;
3969 const MTPME = 1 << 28;
3971 const HPMFZO = 1 << 29;
3973 const HPMFZS = 1 << 36;
3975 const EBWE = 1 << 43;
3977 const ENSTEPOP = 1 << 50;
3979 }
3980}
3981
3982#[cfg(feature = "el2")]
3983impl MdcrEl2 {
3984 pub const HPMN_SHIFT: u32 = 0;
3986 pub const HPMN_MASK: u64 = 0b11111;
3988 pub const TPMCR_SHIFT: u32 = 5;
3990 pub const TPM_SHIFT: u32 = 6;
3992 pub const HPME_SHIFT: u32 = 7;
3994 pub const TDE_SHIFT: u32 = 8;
3996 pub const TDA_SHIFT: u32 = 9;
3998 pub const TDOSA_SHIFT: u32 = 10;
4000 pub const TDRA_SHIFT: u32 = 11;
4002 pub const E2PB_SHIFT: u32 = 12;
4004 pub const E2PB_MASK: u64 = 0b11;
4006 pub const TPMS_SHIFT: u32 = 14;
4008 pub const ENSPM_SHIFT: u32 = 15;
4010 pub const HPMD_SHIFT: u32 = 17;
4012 pub const TTRF_SHIFT: u32 = 19;
4014 pub const HCCD_SHIFT: u32 = 23;
4016 pub const E2TB_SHIFT: u32 = 24;
4018 pub const E2TB_MASK: u64 = 0b11;
4020 pub const HLP_SHIFT: u32 = 26;
4022 pub const TDCC_SHIFT: u32 = 27;
4024 pub const MTPME_SHIFT: u32 = 28;
4026 pub const HPMFZO_SHIFT: u32 = 29;
4028 pub const PMSSE_SHIFT: u32 = 30;
4030 pub const PMSSE_MASK: u64 = 0b11;
4032 pub const HPMFZS_SHIFT: u32 = 36;
4034 pub const PMEE_SHIFT: u32 = 40;
4036 pub const PMEE_MASK: u64 = 0b11;
4038 pub const EBWE_SHIFT: u32 = 43;
4040 pub const ENSTEPOP_SHIFT: u32 = 50;
4042
4043 pub const fn hpmn(self) -> u8 {
4045 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
4046 }
4047
4048 pub const fn e2pb(self) -> u8 {
4050 ((self.bits() >> Self::E2PB_SHIFT) & 0b11) as u8
4051 }
4052
4053 pub const fn e2tb(self) -> u8 {
4055 ((self.bits() >> Self::E2TB_SHIFT) & 0b11) as u8
4056 }
4057
4058 pub const fn pmsse(self) -> u8 {
4060 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
4061 }
4062
4063 pub const fn pmee(self) -> u8 {
4065 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
4066 }
4067}
4068
4069#[cfg(feature = "el3")]
4070bitflags! {
4071 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4073 #[repr(transparent)]
4074 pub struct MdcrEl3: u64 {
4075 const RLTE = 1 << 0;
4077 const EPMADE = 1 << 2;
4079 const ETADE = 1 << 3;
4081 const EDADE = 1 << 4;
4083 const TPM = 1 << 6;
4085 const ENPM2 = 1 << 7;
4087 const TDA = 1 << 9;
4089 const TDOSA = 1 << 10;
4091 const NSPBE = 1 << 11;
4093 const SDD = 1 << 16;
4095 const SPME = 1 << 17;
4097 const STE = 1 << 18;
4099 const TTRF = 1 << 19;
4101 const EDAD = 1 << 20;
4103 const EPMAD = 1 << 21;
4105 const ETAD = 1 << 22;
4107 const SCCD = 1 << 23;
4109 const NSTBE = 1 << 26;
4111 const TDCC = 1 << 27;
4113 const MTPME = 1 << 28;
4115 const MCCD = 1 << 34;
4117 const MPMX = 1 << 35;
4119 const ENPMSN = 1 << 36;
4121 const E3BREW = 1 << 37;
4123 const E3BREC = 1 << 38;
4125 const ENTB2 = 1 << 39;
4127 const ENPMS3 = 1 << 42;
4129 const EBWE = 1 << 43;
4131 const ENPMSS = 1 << 44;
4133 const ENITE = 1 << 47;
4135 const ENSTEPOP = 1 << 50;
4137 const ENPMS4 = 1 << 55;
4139 }
4140}
4141
4142#[cfg(feature = "el3")]
4143impl MdcrEl3 {
4144 pub const RLTE_SHIFT: u32 = 0;
4146 pub const EPMADE_SHIFT: u32 = 2;
4148 pub const ETADE_SHIFT: u32 = 3;
4150 pub const EDADE_SHIFT: u32 = 4;
4152 pub const TPM_SHIFT: u32 = 6;
4154 pub const ENPM2_SHIFT: u32 = 7;
4156 pub const TDA_SHIFT: u32 = 9;
4158 pub const TDOSA_SHIFT: u32 = 10;
4160 pub const NSPBE_SHIFT: u32 = 11;
4162 pub const NSPB_SHIFT: u32 = 12;
4164 pub const NSPB_MASK: u64 = 0b11;
4166 pub const SPD32_SHIFT: u32 = 14;
4168 pub const SPD32_MASK: u64 = 0b11;
4170 pub const SDD_SHIFT: u32 = 16;
4172 pub const SPME_SHIFT: u32 = 17;
4174 pub const STE_SHIFT: u32 = 18;
4176 pub const TTRF_SHIFT: u32 = 19;
4178 pub const EDAD_SHIFT: u32 = 20;
4180 pub const EPMAD_SHIFT: u32 = 21;
4182 pub const ETAD_SHIFT: u32 = 22;
4184 pub const SCCD_SHIFT: u32 = 23;
4186 pub const NSTB_SHIFT: u32 = 24;
4188 pub const NSTB_MASK: u64 = 0b11;
4190 pub const NSTBE_SHIFT: u32 = 26;
4192 pub const TDCC_SHIFT: u32 = 27;
4194 pub const MTPME_SHIFT: u32 = 28;
4196 pub const PMSSE_SHIFT: u32 = 30;
4198 pub const PMSSE_MASK: u64 = 0b11;
4200 pub const SBRBE_SHIFT: u32 = 32;
4202 pub const SBRBE_MASK: u64 = 0b11;
4204 pub const MCCD_SHIFT: u32 = 34;
4206 pub const MPMX_SHIFT: u32 = 35;
4208 pub const ENPMSN_SHIFT: u32 = 36;
4210 pub const E3BREW_SHIFT: u32 = 37;
4212 pub const E3BREC_SHIFT: u32 = 38;
4214 pub const ENTB2_SHIFT: u32 = 39;
4216 pub const PMEE_SHIFT: u32 = 40;
4218 pub const PMEE_MASK: u64 = 0b11;
4220 pub const ENPMS3_SHIFT: u32 = 42;
4222 pub const EBWE_SHIFT: u32 = 43;
4224 pub const ENPMSS_SHIFT: u32 = 44;
4226 pub const EPMSSAD_SHIFT: u32 = 45;
4228 pub const EPMSSAD_MASK: u64 = 0b11;
4230 pub const ENITE_SHIFT: u32 = 47;
4232 pub const ETBAD_SHIFT: u32 = 48;
4234 pub const ETBAD_MASK: u64 = 0b11;
4236 pub const ENSTEPOP_SHIFT: u32 = 50;
4238 pub const PMSEE_SHIFT: u32 = 51;
4240 pub const PMSEE_MASK: u64 = 0b11;
4242 pub const TRBEE_SHIFT: u32 = 53;
4244 pub const TRBEE_MASK: u64 = 0b11;
4246 pub const ENPMS4_SHIFT: u32 = 55;
4248
4249 pub const fn nspb(self) -> u8 {
4251 ((self.bits() >> Self::NSPB_SHIFT) & 0b11) as u8
4252 }
4253
4254 pub const fn spd32(self) -> u8 {
4256 ((self.bits() >> Self::SPD32_SHIFT) & 0b11) as u8
4257 }
4258
4259 pub const fn nstb(self) -> u8 {
4261 ((self.bits() >> Self::NSTB_SHIFT) & 0b11) as u8
4262 }
4263
4264 pub const fn pmsse(self) -> u8 {
4266 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
4267 }
4268
4269 pub const fn sbrbe(self) -> u8 {
4271 ((self.bits() >> Self::SBRBE_SHIFT) & 0b11) as u8
4272 }
4273
4274 pub const fn pmee(self) -> u8 {
4276 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
4277 }
4278
4279 pub const fn epmssad(self) -> u8 {
4281 ((self.bits() >> Self::EPMSSAD_SHIFT) & 0b11) as u8
4282 }
4283
4284 pub const fn etbad(self) -> u8 {
4286 ((self.bits() >> Self::ETBAD_SHIFT) & 0b11) as u8
4287 }
4288
4289 pub const fn pmsee(self) -> u8 {
4291 ((self.bits() >> Self::PMSEE_SHIFT) & 0b11) as u8
4292 }
4293
4294 pub const fn trbee(self) -> u8 {
4296 ((self.bits() >> Self::TRBEE_SHIFT) & 0b11) as u8
4297 }
4298}
4299
4300#[cfg(feature = "el1")]
4301bitflags! {
4302 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4304 #[repr(transparent)]
4305 pub struct MdscrEl1: u64 {
4306 const SS = 1 << 0;
4308 const ERR = 1 << 6;
4310 const TDCC = 1 << 12;
4312 const KDE = 1 << 13;
4314 const HDE = 1 << 14;
4316 const MDE = 1 << 15;
4318 const SC2 = 1 << 19;
4320 const TDA = 1 << 21;
4322 const TXU = 1 << 26;
4324 const RXO = 1 << 27;
4326 const TXFULL = 1 << 29;
4328 const RXFULL = 1 << 30;
4330 const TFO = 1 << 31;
4332 const EMBWE = 1 << 32;
4334 const TTA = 1 << 33;
4336 const ENSPM = 1 << 34;
4338 const EHBWE = 1 << 35;
4340 const ENSTEPOP = 1 << 50;
4342 }
4343}
4344
4345#[cfg(feature = "el1")]
4346impl MdscrEl1 {
4347 pub const SS_SHIFT: u32 = 0;
4349 pub const ERR_SHIFT: u32 = 6;
4351 pub const TDCC_SHIFT: u32 = 12;
4353 pub const KDE_SHIFT: u32 = 13;
4355 pub const HDE_SHIFT: u32 = 14;
4357 pub const MDE_SHIFT: u32 = 15;
4359 pub const SC2_SHIFT: u32 = 19;
4361 pub const TDA_SHIFT: u32 = 21;
4363 pub const INTDIS_SHIFT: u32 = 22;
4365 pub const INTDIS_MASK: u64 = 0b11;
4367 pub const TXU_SHIFT: u32 = 26;
4369 pub const RXO_SHIFT: u32 = 27;
4371 pub const TXFULL_SHIFT: u32 = 29;
4373 pub const RXFULL_SHIFT: u32 = 30;
4375 pub const TFO_SHIFT: u32 = 31;
4377 pub const EMBWE_SHIFT: u32 = 32;
4379 pub const TTA_SHIFT: u32 = 33;
4381 pub const ENSPM_SHIFT: u32 = 34;
4383 pub const EHBWE_SHIFT: u32 = 35;
4385 pub const ENSTEPOP_SHIFT: u32 = 50;
4387
4388 pub const fn intdis(self) -> u8 {
4390 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
4391 }
4392}
4393
4394#[cfg(feature = "el1")]
4395bitflags! {
4396 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4398 #[repr(transparent)]
4399 pub struct MidrEl1: u64 {
4400 }
4401}
4402
4403#[cfg(feature = "el1")]
4404impl MidrEl1 {
4405 pub const REVISION_SHIFT: u32 = 0;
4407 pub const REVISION_MASK: u64 = 0b1111;
4409 pub const PARTNUM_SHIFT: u32 = 4;
4411 pub const PARTNUM_MASK: u64 = 0b111111111111;
4413 pub const ARCHITECTURE_SHIFT: u32 = 16;
4415 pub const ARCHITECTURE_MASK: u64 = 0b1111;
4417 pub const VARIANT_SHIFT: u32 = 20;
4419 pub const VARIANT_MASK: u64 = 0b1111;
4421 pub const IMPLEMENTER_SHIFT: u32 = 24;
4423 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
4425
4426 pub const fn revision(self) -> u8 {
4428 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
4429 }
4430
4431 pub const fn partnum(self) -> u16 {
4433 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
4434 }
4435
4436 pub const fn architecture(self) -> u8 {
4438 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
4439 }
4440
4441 pub const fn variant(self) -> u8 {
4443 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
4444 }
4445
4446 pub const fn implementer(self) -> u8 {
4448 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
4449 }
4450}
4451
4452#[cfg(feature = "el2")]
4453bitflags! {
4454 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4456 #[repr(transparent)]
4457 pub struct Mpam2El2: u64 {
4458 const TRAPMPAM1EL1 = 1 << 48;
4460 const TRAPMPAM0EL1 = 1 << 49;
4462 const ENMPAMSM = 1 << 50;
4464 const ALTSP_FRCD = 1 << 54;
4466 const ALTSP_EL2 = 1 << 55;
4468 const ALTSP_HFC = 1 << 56;
4470 const TIDR = 1 << 58;
4472 const MPAMEN = 1 << 63;
4474 }
4475}
4476
4477#[cfg(feature = "el2")]
4478impl Mpam2El2 {
4479 pub const PARTID_SHIFT: u32 = 0;
4481 pub const PARTID_MASK: u64 = 0b1111111111111111;
4483 pub const PARTID_I_SHIFT: u32 = 0;
4485 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
4487 pub const PARTID_D_SHIFT: u32 = 16;
4489 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
4491 pub const ALTPARTID_SHIFT: u32 = 16;
4493 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
4495 pub const PMG_SHIFT: u32 = 32;
4497 pub const PMG_MASK: u64 = 0b1111111111111111;
4499 pub const PMG_I_SHIFT: u32 = 32;
4501 pub const PMG_I_MASK: u64 = 0b11111111;
4503 pub const PMG_D_SHIFT: u32 = 40;
4505 pub const PMG_D_MASK: u64 = 0b11111111;
4507 pub const TRAPMPAM1EL1_SHIFT: u32 = 48;
4509 pub const ALTPMG_SHIFT: u32 = 48;
4511 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
4513 pub const TRAPMPAM0EL1_SHIFT: u32 = 49;
4515 pub const ENMPAMSM_SHIFT: u32 = 50;
4517 pub const ALTSP_FRCD_SHIFT: u32 = 54;
4519 pub const ALTSP_EL2_SHIFT: u32 = 55;
4521 pub const ALTSP_HFC_SHIFT: u32 = 56;
4523 pub const TIDR_SHIFT: u32 = 58;
4525 pub const MPAMEN_SHIFT: u32 = 63;
4527
4528 pub const fn partid(self) -> u16 {
4530 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
4531 }
4532
4533 pub const fn partid_i(self) -> u16 {
4535 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
4536 }
4537
4538 pub const fn partid_d(self) -> u16 {
4540 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
4541 }
4542
4543 pub const fn altpartid(self) -> u16 {
4545 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
4546 }
4547
4548 pub const fn pmg(self) -> u16 {
4550 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
4551 }
4552
4553 pub const fn pmg_i(self) -> u8 {
4555 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
4556 }
4557
4558 pub const fn pmg_d(self) -> u8 {
4560 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
4561 }
4562
4563 pub const fn altpmg(self) -> u16 {
4565 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
4566 }
4567}
4568
4569#[cfg(feature = "el3")]
4570bitflags! {
4571 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4575 #[repr(transparent)]
4576 pub struct Mpam3El3: u64 {
4577 const RT_ALTSP_NS = 1 << 52;
4579 const ALTSP_EL3 = 1 << 55;
4581 const ALTSP_HFC = 1 << 56;
4583 const ALTSP_HEN = 1 << 57;
4585 const FORCE_NS = 1 << 60;
4587 const SDEFLT = 1 << 61;
4589 const TRAPLOWER = 1 << 62;
4591 const MPAMEN = 1 << 63;
4593 }
4594}
4595
4596#[cfg(feature = "el3")]
4597impl Mpam3El3 {
4598 pub const PARTID_SHIFT: u32 = 0;
4600 pub const PARTID_MASK: u64 = 0b1111111111111111;
4602 pub const PARTID_I_SHIFT: u32 = 0;
4604 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
4606 pub const PARTID_D_SHIFT: u32 = 16;
4608 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
4610 pub const ALTPARTID_SHIFT: u32 = 16;
4612 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
4614 pub const PMG_SHIFT: u32 = 32;
4616 pub const PMG_MASK: u64 = 0b1111111111111111;
4618 pub const PMG_I_SHIFT: u32 = 32;
4620 pub const PMG_I_MASK: u64 = 0b11111111;
4622 pub const PMG_D_SHIFT: u32 = 40;
4624 pub const PMG_D_MASK: u64 = 0b11111111;
4626 pub const ALTPMG_SHIFT: u32 = 48;
4628 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
4630 pub const RT_ALTSP_NS_SHIFT: u32 = 52;
4632 pub const ALTSP_EL3_SHIFT: u32 = 55;
4634 pub const ALTSP_HFC_SHIFT: u32 = 56;
4636 pub const ALTSP_HEN_SHIFT: u32 = 57;
4638 pub const FORCE_NS_SHIFT: u32 = 60;
4640 pub const SDEFLT_SHIFT: u32 = 61;
4642 pub const TRAPLOWER_SHIFT: u32 = 62;
4644 pub const MPAMEN_SHIFT: u32 = 63;
4646
4647 pub const fn partid(self) -> u16 {
4649 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
4650 }
4651
4652 pub const fn partid_i(self) -> u16 {
4654 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
4655 }
4656
4657 pub const fn partid_d(self) -> u16 {
4659 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
4660 }
4661
4662 pub const fn altpartid(self) -> u16 {
4664 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
4665 }
4666
4667 pub const fn pmg(self) -> u16 {
4669 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
4670 }
4671
4672 pub const fn pmg_i(self) -> u8 {
4674 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
4675 }
4676
4677 pub const fn pmg_d(self) -> u8 {
4679 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
4680 }
4681
4682 pub const fn altpmg(self) -> u16 {
4684 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
4685 }
4686}
4687
4688#[cfg(feature = "el2")]
4689bitflags! {
4690 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4692 #[repr(transparent)]
4693 pub struct MpamhcrEl2: u64 {
4694 const EL0_VPMEN = 1 << 0;
4696 const EL1_VPMEN = 1 << 1;
4698 const VPMEN = 1 << 2;
4700 const VMMEN = 1 << 3;
4702 const SMVPMEN = 1 << 4;
4704 const SMVMMEN = 1 << 5;
4706 const GSTAPP_PLK = 1 << 8;
4708 const TRAP_MPAMIDR_EL1 = 1 << 31;
4710 }
4711}
4712
4713#[cfg(feature = "el2")]
4714impl MpamhcrEl2 {
4715 pub const EL0_VPMEN_SHIFT: u32 = 0;
4717 pub const EL1_VPMEN_SHIFT: u32 = 1;
4719 pub const VPMEN_SHIFT: u32 = 2;
4721 pub const VMMEN_SHIFT: u32 = 3;
4723 pub const SMVPMEN_SHIFT: u32 = 4;
4725 pub const SMVMMEN_SHIFT: u32 = 5;
4727 pub const GSTAPP_PLK_SHIFT: u32 = 8;
4729 pub const TRAP_MPAMIDR_EL1_SHIFT: u32 = 31;
4731}
4732
4733#[cfg(feature = "el1")]
4734bitflags! {
4735 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4739 #[repr(transparent)]
4740 pub struct MpamidrEl1: u64 {
4741 const HAS_HCR = 1 << 17;
4743 const HAS_ALT_ID = 1 << 21;
4745 const HAS_INSTR_ALT_ID = 1 << 22;
4747 const HAS_BW_CTRL = 1 << 56;
4749 const HAS_ALTSP = 1 << 57;
4751 const HAS_TIDR = 1 << 58;
4753 const SP4 = 1 << 59;
4755 const HAS_FORCE_NS = 1 << 60;
4757 const HAS_SDEFLT = 1 << 61;
4759 }
4760}
4761
4762#[cfg(feature = "el1")]
4763impl MpamidrEl1 {
4764 pub const PARTID_MAX_SHIFT: u32 = 0;
4766 pub const PARTID_MAX_MASK: u64 = 0b1111111111111111;
4768 pub const HAS_HCR_SHIFT: u32 = 17;
4770 pub const VPMR_MAX_SHIFT: u32 = 18;
4772 pub const VPMR_MAX_MASK: u64 = 0b111;
4774 pub const HAS_ALT_ID_SHIFT: u32 = 21;
4776 pub const HAS_INSTR_ALT_ID_SHIFT: u32 = 22;
4778 pub const HAS_BW_CTRL_SHIFT: u32 = 56;
4780 pub const HAS_ALTSP_SHIFT: u32 = 57;
4782 pub const HAS_TIDR_SHIFT: u32 = 58;
4784 pub const SP4_SHIFT: u32 = 59;
4786 pub const HAS_FORCE_NS_SHIFT: u32 = 60;
4788 pub const HAS_SDEFLT_SHIFT: u32 = 61;
4790
4791 pub const fn partid_max(self) -> u16 {
4793 ((self.bits() >> Self::PARTID_MAX_SHIFT) & 0b1111111111111111) as u16
4794 }
4795
4796 pub const fn vpmr_max(self) -> u8 {
4800 ((self.bits() >> Self::VPMR_MAX_SHIFT) & 0b111) as u8
4801 }
4802}
4803
4804#[cfg(feature = "el2")]
4805bitflags! {
4806 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4808 #[repr(transparent)]
4809 pub struct Mpamvpm0El2: u64 {
4810 }
4811}
4812
4813#[cfg(feature = "el2")]
4814impl Mpamvpm0El2 {
4815 pub const PHYPARTID0_SHIFT: u32 = 0;
4817 pub const PHYPARTID0_MASK: u64 = 0b1111111111111111;
4819 pub const PHYPARTID1_SHIFT: u32 = 16;
4821 pub const PHYPARTID1_MASK: u64 = 0b1111111111111111;
4823 pub const PHYPARTID2_SHIFT: u32 = 32;
4825 pub const PHYPARTID2_MASK: u64 = 0b1111111111111111;
4827 pub const PHYPARTID3_SHIFT: u32 = 48;
4829 pub const PHYPARTID3_MASK: u64 = 0b1111111111111111;
4831
4832 pub const fn phypartid0(self) -> u16 {
4834 ((self.bits() >> Self::PHYPARTID0_SHIFT) & 0b1111111111111111) as u16
4835 }
4836
4837 pub const fn phypartid1(self) -> u16 {
4839 ((self.bits() >> Self::PHYPARTID1_SHIFT) & 0b1111111111111111) as u16
4840 }
4841
4842 pub const fn phypartid2(self) -> u16 {
4844 ((self.bits() >> Self::PHYPARTID2_SHIFT) & 0b1111111111111111) as u16
4845 }
4846
4847 pub const fn phypartid3(self) -> u16 {
4849 ((self.bits() >> Self::PHYPARTID3_SHIFT) & 0b1111111111111111) as u16
4850 }
4851}
4852
4853#[cfg(feature = "el2")]
4854bitflags! {
4855 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4857 #[repr(transparent)]
4858 pub struct Mpamvpm1El2: u64 {
4859 }
4860}
4861
4862#[cfg(feature = "el2")]
4863impl Mpamvpm1El2 {
4864 pub const PHYPARTID4_SHIFT: u32 = 0;
4866 pub const PHYPARTID4_MASK: u64 = 0b1111111111111111;
4868 pub const PHYPARTID5_SHIFT: u32 = 16;
4870 pub const PHYPARTID5_MASK: u64 = 0b1111111111111111;
4872 pub const PHYPARTID6_SHIFT: u32 = 32;
4874 pub const PHYPARTID6_MASK: u64 = 0b1111111111111111;
4876 pub const PHYPARTID7_SHIFT: u32 = 48;
4878 pub const PHYPARTID7_MASK: u64 = 0b1111111111111111;
4880
4881 pub const fn phypartid4(self) -> u16 {
4883 ((self.bits() >> Self::PHYPARTID4_SHIFT) & 0b1111111111111111) as u16
4884 }
4885
4886 pub const fn phypartid5(self) -> u16 {
4888 ((self.bits() >> Self::PHYPARTID5_SHIFT) & 0b1111111111111111) as u16
4889 }
4890
4891 pub const fn phypartid6(self) -> u16 {
4893 ((self.bits() >> Self::PHYPARTID6_SHIFT) & 0b1111111111111111) as u16
4894 }
4895
4896 pub const fn phypartid7(self) -> u16 {
4898 ((self.bits() >> Self::PHYPARTID7_SHIFT) & 0b1111111111111111) as u16
4899 }
4900}
4901
4902#[cfg(feature = "el2")]
4903bitflags! {
4904 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4906 #[repr(transparent)]
4907 pub struct Mpamvpm2El2: u64 {
4908 }
4909}
4910
4911#[cfg(feature = "el2")]
4912impl Mpamvpm2El2 {
4913 pub const PHYPARTID8_SHIFT: u32 = 0;
4915 pub const PHYPARTID8_MASK: u64 = 0b1111111111111111;
4917 pub const PHYPARTID9_SHIFT: u32 = 16;
4919 pub const PHYPARTID9_MASK: u64 = 0b1111111111111111;
4921 pub const PHYPARTID10_SHIFT: u32 = 32;
4923 pub const PHYPARTID10_MASK: u64 = 0b1111111111111111;
4925 pub const PHYPARTID11_SHIFT: u32 = 48;
4927 pub const PHYPARTID11_MASK: u64 = 0b1111111111111111;
4929
4930 pub const fn phypartid8(self) -> u16 {
4932 ((self.bits() >> Self::PHYPARTID8_SHIFT) & 0b1111111111111111) as u16
4933 }
4934
4935 pub const fn phypartid9(self) -> u16 {
4937 ((self.bits() >> Self::PHYPARTID9_SHIFT) & 0b1111111111111111) as u16
4938 }
4939
4940 pub const fn phypartid10(self) -> u16 {
4942 ((self.bits() >> Self::PHYPARTID10_SHIFT) & 0b1111111111111111) as u16
4943 }
4944
4945 pub const fn phypartid11(self) -> u16 {
4947 ((self.bits() >> Self::PHYPARTID11_SHIFT) & 0b1111111111111111) as u16
4948 }
4949}
4950
4951#[cfg(feature = "el2")]
4952bitflags! {
4953 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4955 #[repr(transparent)]
4956 pub struct Mpamvpm3El2: u64 {
4957 }
4958}
4959
4960#[cfg(feature = "el2")]
4961impl Mpamvpm3El2 {
4962 pub const PHYPARTID12_SHIFT: u32 = 0;
4964 pub const PHYPARTID12_MASK: u64 = 0b1111111111111111;
4966 pub const PHYPARTID13_SHIFT: u32 = 16;
4968 pub const PHYPARTID13_MASK: u64 = 0b1111111111111111;
4970 pub const PHYPARTID14_SHIFT: u32 = 32;
4972 pub const PHYPARTID14_MASK: u64 = 0b1111111111111111;
4974 pub const PHYPARTID15_SHIFT: u32 = 48;
4976 pub const PHYPARTID15_MASK: u64 = 0b1111111111111111;
4978
4979 pub const fn phypartid12(self) -> u16 {
4981 ((self.bits() >> Self::PHYPARTID12_SHIFT) & 0b1111111111111111) as u16
4982 }
4983
4984 pub const fn phypartid13(self) -> u16 {
4986 ((self.bits() >> Self::PHYPARTID13_SHIFT) & 0b1111111111111111) as u16
4987 }
4988
4989 pub const fn phypartid14(self) -> u16 {
4991 ((self.bits() >> Self::PHYPARTID14_SHIFT) & 0b1111111111111111) as u16
4992 }
4993
4994 pub const fn phypartid15(self) -> u16 {
4996 ((self.bits() >> Self::PHYPARTID15_SHIFT) & 0b1111111111111111) as u16
4997 }
4998}
4999
5000#[cfg(feature = "el2")]
5001bitflags! {
5002 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5004 #[repr(transparent)]
5005 pub struct Mpamvpm4El2: u64 {
5006 }
5007}
5008
5009#[cfg(feature = "el2")]
5010impl Mpamvpm4El2 {
5011 pub const PHYPARTID16_SHIFT: u32 = 0;
5013 pub const PHYPARTID16_MASK: u64 = 0b1111111111111111;
5015 pub const PHYPARTID17_SHIFT: u32 = 16;
5017 pub const PHYPARTID17_MASK: u64 = 0b1111111111111111;
5019 pub const PHYPARTID18_SHIFT: u32 = 32;
5021 pub const PHYPARTID18_MASK: u64 = 0b1111111111111111;
5023 pub const PHYPARTID19_SHIFT: u32 = 48;
5025 pub const PHYPARTID19_MASK: u64 = 0b1111111111111111;
5027
5028 pub const fn phypartid16(self) -> u16 {
5030 ((self.bits() >> Self::PHYPARTID16_SHIFT) & 0b1111111111111111) as u16
5031 }
5032
5033 pub const fn phypartid17(self) -> u16 {
5035 ((self.bits() >> Self::PHYPARTID17_SHIFT) & 0b1111111111111111) as u16
5036 }
5037
5038 pub const fn phypartid18(self) -> u16 {
5040 ((self.bits() >> Self::PHYPARTID18_SHIFT) & 0b1111111111111111) as u16
5041 }
5042
5043 pub const fn phypartid19(self) -> u16 {
5045 ((self.bits() >> Self::PHYPARTID19_SHIFT) & 0b1111111111111111) as u16
5046 }
5047}
5048
5049#[cfg(feature = "el2")]
5050bitflags! {
5051 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5053 #[repr(transparent)]
5054 pub struct Mpamvpm5El2: u64 {
5055 }
5056}
5057
5058#[cfg(feature = "el2")]
5059impl Mpamvpm5El2 {
5060 pub const PHYPARTID20_SHIFT: u32 = 0;
5062 pub const PHYPARTID20_MASK: u64 = 0b1111111111111111;
5064 pub const PHYPARTID21_SHIFT: u32 = 16;
5066 pub const PHYPARTID21_MASK: u64 = 0b1111111111111111;
5068 pub const PHYPARTID22_SHIFT: u32 = 32;
5070 pub const PHYPARTID22_MASK: u64 = 0b1111111111111111;
5072 pub const PHYPARTID23_SHIFT: u32 = 48;
5074 pub const PHYPARTID23_MASK: u64 = 0b1111111111111111;
5076
5077 pub const fn phypartid20(self) -> u16 {
5079 ((self.bits() >> Self::PHYPARTID20_SHIFT) & 0b1111111111111111) as u16
5080 }
5081
5082 pub const fn phypartid21(self) -> u16 {
5084 ((self.bits() >> Self::PHYPARTID21_SHIFT) & 0b1111111111111111) as u16
5085 }
5086
5087 pub const fn phypartid22(self) -> u16 {
5089 ((self.bits() >> Self::PHYPARTID22_SHIFT) & 0b1111111111111111) as u16
5090 }
5091
5092 pub const fn phypartid23(self) -> u16 {
5094 ((self.bits() >> Self::PHYPARTID23_SHIFT) & 0b1111111111111111) as u16
5095 }
5096}
5097
5098#[cfg(feature = "el2")]
5099bitflags! {
5100 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5102 #[repr(transparent)]
5103 pub struct Mpamvpm6El2: u64 {
5104 }
5105}
5106
5107#[cfg(feature = "el2")]
5108impl Mpamvpm6El2 {
5109 pub const PHYPARTID24_SHIFT: u32 = 0;
5111 pub const PHYPARTID24_MASK: u64 = 0b1111111111111111;
5113 pub const PHYPARTID25_SHIFT: u32 = 16;
5115 pub const PHYPARTID25_MASK: u64 = 0b1111111111111111;
5117 pub const PHYPARTID26_SHIFT: u32 = 32;
5119 pub const PHYPARTID26_MASK: u64 = 0b1111111111111111;
5121 pub const PHYPARTID27_SHIFT: u32 = 48;
5123 pub const PHYPARTID27_MASK: u64 = 0b1111111111111111;
5125
5126 pub const fn phypartid24(self) -> u16 {
5128 ((self.bits() >> Self::PHYPARTID24_SHIFT) & 0b1111111111111111) as u16
5129 }
5130
5131 pub const fn phypartid25(self) -> u16 {
5133 ((self.bits() >> Self::PHYPARTID25_SHIFT) & 0b1111111111111111) as u16
5134 }
5135
5136 pub const fn phypartid26(self) -> u16 {
5138 ((self.bits() >> Self::PHYPARTID26_SHIFT) & 0b1111111111111111) as u16
5139 }
5140
5141 pub const fn phypartid27(self) -> u16 {
5143 ((self.bits() >> Self::PHYPARTID27_SHIFT) & 0b1111111111111111) as u16
5144 }
5145}
5146
5147#[cfg(feature = "el2")]
5148bitflags! {
5149 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5151 #[repr(transparent)]
5152 pub struct Mpamvpm7El2: u64 {
5153 }
5154}
5155
5156#[cfg(feature = "el2")]
5157impl Mpamvpm7El2 {
5158 pub const PHYPARTID28_SHIFT: u32 = 0;
5160 pub const PHYPARTID28_MASK: u64 = 0b1111111111111111;
5162 pub const PHYPARTID29_SHIFT: u32 = 16;
5164 pub const PHYPARTID29_MASK: u64 = 0b1111111111111111;
5166 pub const PHYPARTID30_SHIFT: u32 = 32;
5168 pub const PHYPARTID30_MASK: u64 = 0b1111111111111111;
5170 pub const PHYPARTID31_SHIFT: u32 = 48;
5172 pub const PHYPARTID31_MASK: u64 = 0b1111111111111111;
5174
5175 pub const fn phypartid28(self) -> u16 {
5177 ((self.bits() >> Self::PHYPARTID28_SHIFT) & 0b1111111111111111) as u16
5178 }
5179
5180 pub const fn phypartid29(self) -> u16 {
5182 ((self.bits() >> Self::PHYPARTID29_SHIFT) & 0b1111111111111111) as u16
5183 }
5184
5185 pub const fn phypartid30(self) -> u16 {
5187 ((self.bits() >> Self::PHYPARTID30_SHIFT) & 0b1111111111111111) as u16
5188 }
5189
5190 pub const fn phypartid31(self) -> u16 {
5192 ((self.bits() >> Self::PHYPARTID31_SHIFT) & 0b1111111111111111) as u16
5193 }
5194}
5195
5196#[cfg(feature = "el2")]
5197bitflags! {
5198 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5200 #[repr(transparent)]
5201 pub struct MpamvpmvEl2: u64 {
5202 const VPM_V0 = 1 << 0;
5204 const VPM_V1 = 1 << 1;
5206 const VPM_V2 = 1 << 2;
5208 const VPM_V3 = 1 << 3;
5210 const VPM_V4 = 1 << 4;
5212 const VPM_V5 = 1 << 5;
5214 const VPM_V6 = 1 << 6;
5216 const VPM_V7 = 1 << 7;
5218 const VPM_V8 = 1 << 8;
5220 const VPM_V9 = 1 << 9;
5222 const VPM_V10 = 1 << 10;
5224 const VPM_V11 = 1 << 11;
5226 const VPM_V12 = 1 << 12;
5228 const VPM_V13 = 1 << 13;
5230 const VPM_V14 = 1 << 14;
5232 const VPM_V15 = 1 << 15;
5234 const VPM_V16 = 1 << 16;
5236 const VPM_V17 = 1 << 17;
5238 const VPM_V18 = 1 << 18;
5240 const VPM_V19 = 1 << 19;
5242 const VPM_V20 = 1 << 20;
5244 const VPM_V21 = 1 << 21;
5246 const VPM_V22 = 1 << 22;
5248 const VPM_V23 = 1 << 23;
5250 const VPM_V24 = 1 << 24;
5252 const VPM_V25 = 1 << 25;
5254 const VPM_V26 = 1 << 26;
5256 const VPM_V27 = 1 << 27;
5258 const VPM_V28 = 1 << 28;
5260 const VPM_V29 = 1 << 29;
5262 const VPM_V30 = 1 << 30;
5264 const VPM_V31 = 1 << 31;
5266 }
5267}
5268
5269#[cfg(feature = "el2")]
5270impl MpamvpmvEl2 {
5271 pub const VPM_V_SHIFT: u32 = 0;
5273}
5274
5275#[cfg(feature = "el1")]
5276bitflags! {
5277 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5279 #[repr(transparent)]
5280 pub struct MpidrEl1: u64 {
5281 const RES1 = 0b10000000000000000000000000000000;
5283 const MT = 1 << 24;
5285 const U = 1 << 30;
5287 }
5288}
5289
5290#[cfg(feature = "el1")]
5291impl MpidrEl1 {
5292 pub const AFF0_SHIFT: u32 = 0;
5294 pub const AFF0_MASK: u64 = 0b11111111;
5296 pub const AFF1_SHIFT: u32 = 8;
5298 pub const AFF1_MASK: u64 = 0b11111111;
5300 pub const AFF2_SHIFT: u32 = 16;
5302 pub const AFF2_MASK: u64 = 0b11111111;
5304 pub const MT_SHIFT: u32 = 24;
5306 pub const U_SHIFT: u32 = 30;
5308 pub const AFF3_SHIFT: u32 = 32;
5310 pub const AFF3_MASK: u64 = 0b11111111;
5312
5313 pub const fn aff0(self) -> u8 {
5315 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
5316 }
5317
5318 pub const fn aff1(self) -> u8 {
5320 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
5321 }
5322
5323 pub const fn aff2(self) -> u8 {
5325 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
5326 }
5327
5328 pub const fn aff3(self) -> u8 {
5330 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
5331 }
5332}
5333
5334#[cfg(feature = "el1")]
5335bitflags! {
5336 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5338 #[repr(transparent)]
5339 pub struct ParEl1: u64 {
5340 const RES1 = 0b100000000000;
5342 const F = 1 << 0;
5344 const PTW = 1 << 8;
5346 const NS = 1 << 9;
5348 const S = 1 << 9;
5350 const NSE = 1 << 11;
5352 const ASSUREDONLY = 1 << 12;
5354 const TOPLEVEL = 1 << 13;
5356 const OVERLAY = 1 << 14;
5358 const DIRTYBIT = 1 << 15;
5360 }
5361}
5362
5363#[cfg(feature = "el1")]
5364impl ParEl1 {
5365 pub const F_SHIFT: u32 = 0;
5367 pub const FST_SHIFT: u32 = 1;
5369 pub const FST_MASK: u64 = 0b111111;
5371 pub const SH_SHIFT: u32 = 7;
5373 pub const SH_MASK: u64 = 0b11;
5375 pub const PTW_SHIFT: u32 = 8;
5377 pub const NS_SHIFT: u32 = 9;
5379 pub const S_SHIFT: u32 = 9;
5381 pub const NSE_SHIFT: u32 = 11;
5383 pub const ASSUREDONLY_SHIFT: u32 = 12;
5385 pub const PA_47_12_SHIFT: u32 = 12;
5387 pub const PA_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
5389 pub const TOPLEVEL_SHIFT: u32 = 13;
5391 pub const OVERLAY_SHIFT: u32 = 14;
5393 pub const DIRTYBIT_SHIFT: u32 = 15;
5395 pub const PA_51_48_SHIFT: u32 = 48;
5397 pub const PA_51_48_MASK: u64 = 0b1111;
5399 pub const ATTR_SHIFT: u32 = 56;
5401 pub const ATTR_MASK: u64 = 0b11111111;
5403
5404 pub const fn fst(self) -> u8 {
5406 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
5407 }
5408
5409 pub const fn sh(self) -> u8 {
5411 ((self.bits() >> Self::SH_SHIFT) & 0b11) as u8
5412 }
5413
5414 pub const fn pa_47_12(self) -> u64 {
5416 ((self.bits() >> Self::PA_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
5417 }
5418
5419 pub const fn pa_51_48(self) -> u8 {
5421 ((self.bits() >> Self::PA_51_48_SHIFT) & 0b1111) as u8
5422 }
5423
5424 pub const fn attr(self) -> u8 {
5426 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
5427 }
5428}
5429
5430bitflags! {
5431 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5433 #[repr(transparent)]
5434 pub struct PmcrEl0: u64 {
5435 const E = 1 << 0;
5437 const P = 1 << 1;
5439 const C = 1 << 2;
5441 const D = 1 << 3;
5443 const X = 1 << 4;
5445 const DP = 1 << 5;
5447 const LC = 1 << 6;
5449 const LP = 1 << 7;
5451 const FZO = 1 << 9;
5453 const FZS = 1 << 32;
5455 }
5456}
5457
5458impl PmcrEl0 {
5459 pub const E_SHIFT: u32 = 0;
5461 pub const P_SHIFT: u32 = 1;
5463 pub const C_SHIFT: u32 = 2;
5465 pub const D_SHIFT: u32 = 3;
5467 pub const X_SHIFT: u32 = 4;
5469 pub const DP_SHIFT: u32 = 5;
5471 pub const LC_SHIFT: u32 = 6;
5473 pub const LP_SHIFT: u32 = 7;
5475 pub const FZO_SHIFT: u32 = 9;
5477 pub const N_SHIFT: u32 = 11;
5479 pub const N_MASK: u64 = 0b11111;
5481 pub const IDCODE_SHIFT: u32 = 16;
5483 pub const IDCODE_MASK: u64 = 0b11111111;
5485 pub const IMP_SHIFT: u32 = 24;
5487 pub const IMP_MASK: u64 = 0b11111111;
5489 pub const FZS_SHIFT: u32 = 32;
5491
5492 pub const fn n(self) -> u8 {
5494 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
5495 }
5496
5497 pub const fn idcode(self) -> u8 {
5499 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
5500 }
5501
5502 pub const fn imp(self) -> u8 {
5504 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
5505 }
5506}
5507
5508#[cfg(feature = "el1")]
5509bitflags! {
5510 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5512 #[repr(transparent)]
5513 pub struct RgsrEl1: u64 {
5514 }
5515}
5516
5517#[cfg(feature = "el1")]
5518impl RgsrEl1 {
5519 pub const TAG_SHIFT: u32 = 0;
5521 pub const TAG_MASK: u64 = 0b1111;
5523 pub const SEED_SHIFT: u32 = 8;
5525 pub const SEED_MASK: u64 = 0b1111111111111111;
5527
5528 pub const fn tag(self) -> u8 {
5530 ((self.bits() >> Self::TAG_SHIFT) & 0b1111) as u8
5531 }
5532
5533 pub const fn seed(self) -> u16 {
5535 ((self.bits() >> Self::SEED_SHIFT) & 0b1111111111111111) as u16
5536 }
5537}
5538
5539#[cfg(feature = "el3")]
5540bitflags! {
5541 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5543 #[repr(transparent)]
5544 pub struct ScrEl3: u64 {
5545 const RES1 = 0b110000;
5547 const NS = 1 << 0;
5549 const IRQ = 1 << 1;
5551 const FIQ = 1 << 2;
5553 const EA = 1 << 3;
5555 const SMD = 1 << 7;
5557 const HCE = 1 << 8;
5559 const SIF = 1 << 9;
5561 const RW = 1 << 10;
5563 const ST = 1 << 11;
5565 const TWI = 1 << 12;
5567 const TWE = 1 << 13;
5569 const TLOR = 1 << 14;
5571 const TERR = 1 << 15;
5573 const APK = 1 << 16;
5575 const API = 1 << 17;
5577 const EEL2 = 1 << 18;
5579 const EASE = 1 << 19;
5581 const NMEA = 1 << 20;
5583 const FIEN = 1 << 21;
5585 const TID3 = 1 << 22;
5587 const TID5 = 1 << 23;
5589 const POE2EN = 1 << 24;
5591 const ENSCXT = 1 << 25;
5593 const ATA = 1 << 26;
5595 const FGTEN = 1 << 27;
5597 const ECVEN = 1 << 28;
5599 const TWEDEN = 1 << 29;
5601 const AMVOFFEN = 1 << 35;
5603 const ENAS0 = 1 << 36;
5605 const ADEN = 1 << 37;
5607 const HXEN = 1 << 38;
5609 const GCSEN = 1 << 39;
5611 const TRNDR = 1 << 40;
5613 const ENTP2 = 1 << 41;
5615 const RCWMASKEN = 1 << 42;
5617 const TCR2EN = 1 << 43;
5619 const SCTLR2EN = 1 << 44;
5621 const PIEN = 1 << 45;
5623 const AIEN = 1 << 46;
5625 const D128EN = 1 << 47;
5627 const GPF = 1 << 48;
5629 const MECEN = 1 << 49;
5631 const ENFPM = 1 << 50;
5633 const TMEA = 1 << 51;
5635 const TWERR = 1 << 52;
5637 const PFAREN = 1 << 53;
5639 const SRMASKEN = 1 << 54;
5641 const ENIDCP128 = 1 << 55;
5643 const VTLBIDEN = 1 << 56;
5645 const DSE = 1 << 57;
5647 const ENDSE = 1 << 58;
5649 const FGTEN2 = 1 << 59;
5651 const HDBSSEN = 1 << 60;
5653 const HACDBSEN = 1 << 61;
5655 const NSE = 1 << 62;
5657 const TPLIMEN = 1 << 63;
5659 }
5660}
5661
5662#[cfg(feature = "el3")]
5663impl ScrEl3 {
5664 pub const NS_SHIFT: u32 = 0;
5666 pub const IRQ_SHIFT: u32 = 1;
5668 pub const FIQ_SHIFT: u32 = 2;
5670 pub const EA_SHIFT: u32 = 3;
5672 pub const SMD_SHIFT: u32 = 7;
5674 pub const HCE_SHIFT: u32 = 8;
5676 pub const SIF_SHIFT: u32 = 9;
5678 pub const RW_SHIFT: u32 = 10;
5680 pub const ST_SHIFT: u32 = 11;
5682 pub const TWI_SHIFT: u32 = 12;
5684 pub const TWE_SHIFT: u32 = 13;
5686 pub const TLOR_SHIFT: u32 = 14;
5688 pub const TERR_SHIFT: u32 = 15;
5690 pub const APK_SHIFT: u32 = 16;
5692 pub const API_SHIFT: u32 = 17;
5694 pub const EEL2_SHIFT: u32 = 18;
5696 pub const EASE_SHIFT: u32 = 19;
5698 pub const NMEA_SHIFT: u32 = 20;
5700 pub const FIEN_SHIFT: u32 = 21;
5702 pub const TID3_SHIFT: u32 = 22;
5704 pub const TID5_SHIFT: u32 = 23;
5706 pub const POE2EN_SHIFT: u32 = 24;
5708 pub const ENSCXT_SHIFT: u32 = 25;
5710 pub const ATA_SHIFT: u32 = 26;
5712 pub const FGTEN_SHIFT: u32 = 27;
5714 pub const ECVEN_SHIFT: u32 = 28;
5716 pub const TWEDEN_SHIFT: u32 = 29;
5718 pub const TWEDEL_SHIFT: u32 = 30;
5720 pub const TWEDEL_MASK: u64 = 0b1111;
5722 pub const AMVOFFEN_SHIFT: u32 = 35;
5724 pub const ENAS0_SHIFT: u32 = 36;
5726 pub const ADEN_SHIFT: u32 = 37;
5728 pub const HXEN_SHIFT: u32 = 38;
5730 pub const GCSEN_SHIFT: u32 = 39;
5732 pub const TRNDR_SHIFT: u32 = 40;
5734 pub const ENTP2_SHIFT: u32 = 41;
5736 pub const RCWMASKEN_SHIFT: u32 = 42;
5738 pub const TCR2EN_SHIFT: u32 = 43;
5740 pub const SCTLR2EN_SHIFT: u32 = 44;
5742 pub const PIEN_SHIFT: u32 = 45;
5744 pub const AIEN_SHIFT: u32 = 46;
5746 pub const D128EN_SHIFT: u32 = 47;
5748 pub const GPF_SHIFT: u32 = 48;
5750 pub const MECEN_SHIFT: u32 = 49;
5752 pub const ENFPM_SHIFT: u32 = 50;
5754 pub const TMEA_SHIFT: u32 = 51;
5756 pub const TWERR_SHIFT: u32 = 52;
5758 pub const PFAREN_SHIFT: u32 = 53;
5760 pub const SRMASKEN_SHIFT: u32 = 54;
5762 pub const ENIDCP128_SHIFT: u32 = 55;
5764 pub const VTLBIDEN_SHIFT: u32 = 56;
5766 pub const DSE_SHIFT: u32 = 57;
5768 pub const ENDSE_SHIFT: u32 = 58;
5770 pub const FGTEN2_SHIFT: u32 = 59;
5772 pub const HDBSSEN_SHIFT: u32 = 60;
5774 pub const HACDBSEN_SHIFT: u32 = 61;
5776 pub const NSE_SHIFT: u32 = 62;
5778 pub const TPLIMEN_SHIFT: u32 = 63;
5780
5781 pub const fn twedel(self) -> u8 {
5783 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
5784 }
5785}
5786
5787#[cfg(feature = "el1")]
5788bitflags! {
5789 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5791 #[repr(transparent)]
5792 pub struct SctlrEl1: u64 {
5793 const M = 1 << 0;
5795 const A = 1 << 1;
5797 const C = 1 << 2;
5799 const SA = 1 << 3;
5801 const SA0 = 1 << 4;
5803 const CP15BEN = 1 << 5;
5805 const NAA = 1 << 6;
5807 const ITD = 1 << 7;
5809 const SED = 1 << 8;
5811 const UMA = 1 << 9;
5813 const ENRCTX = 1 << 10;
5815 const EOS = 1 << 11;
5817 const I = 1 << 12;
5819 const ENDB = 1 << 13;
5821 const DZE = 1 << 14;
5823 const UCT = 1 << 15;
5825 const NTWI = 1 << 16;
5827 const NTWE = 1 << 18;
5829 const WXN = 1 << 19;
5831 const TSCXT = 1 << 20;
5833 const IESB = 1 << 21;
5835 const EIS = 1 << 22;
5837 const SPAN = 1 << 23;
5839 const UCI = 1 << 26;
5841 const ENDA = 1 << 27;
5843 const NTLSMD = 1 << 28;
5845 const LSMAOE = 1 << 29;
5847 const ENIB = 1 << 30;
5849 const ENIA = 1 << 31;
5851 const CMOW = 1 << 32;
5853 const MSCEN = 1 << 33;
5855 const ENFPM = 1 << 34;
5857 const BT0 = 1 << 35;
5859 const BT1 = 1 << 36;
5861 const ITFSB = 1 << 37;
5863 const ATA0 = 1 << 42;
5865 const ATA = 1 << 43;
5867 const DSSBS = 1 << 44;
5869 const TWEDEN = 1 << 45;
5871 const ENASR = 1 << 54;
5873 const ENAS0 = 1 << 55;
5875 const ENALS = 1 << 56;
5877 const EPAN = 1 << 57;
5879 const TCSO0 = 1 << 58;
5881 const TCSO = 1 << 59;
5883 const ENTP2 = 1 << 60;
5885 const NMI = 1 << 61;
5887 const SPINTMASK = 1 << 62;
5889 const TIDCP = 1 << 63;
5891 }
5892}
5893
5894#[cfg(feature = "el1")]
5895impl SctlrEl1 {
5896 pub const M_SHIFT: u32 = 0;
5898 pub const A_SHIFT: u32 = 1;
5900 pub const C_SHIFT: u32 = 2;
5902 pub const SA_SHIFT: u32 = 3;
5904 pub const SA0_SHIFT: u32 = 4;
5906 pub const CP15BEN_SHIFT: u32 = 5;
5908 pub const NAA_SHIFT: u32 = 6;
5910 pub const ITD_SHIFT: u32 = 7;
5912 pub const SED_SHIFT: u32 = 8;
5914 pub const UMA_SHIFT: u32 = 9;
5916 pub const ENRCTX_SHIFT: u32 = 10;
5918 pub const EOS_SHIFT: u32 = 11;
5920 pub const I_SHIFT: u32 = 12;
5922 pub const ENDB_SHIFT: u32 = 13;
5924 pub const DZE_SHIFT: u32 = 14;
5926 pub const UCT_SHIFT: u32 = 15;
5928 pub const NTWI_SHIFT: u32 = 16;
5930 pub const NTWE_SHIFT: u32 = 18;
5932 pub const WXN_SHIFT: u32 = 19;
5934 pub const TSCXT_SHIFT: u32 = 20;
5936 pub const IESB_SHIFT: u32 = 21;
5938 pub const EIS_SHIFT: u32 = 22;
5940 pub const SPAN_SHIFT: u32 = 23;
5942 pub const UCI_SHIFT: u32 = 26;
5944 pub const ENDA_SHIFT: u32 = 27;
5946 pub const NTLSMD_SHIFT: u32 = 28;
5948 pub const LSMAOE_SHIFT: u32 = 29;
5950 pub const ENIB_SHIFT: u32 = 30;
5952 pub const ENIA_SHIFT: u32 = 31;
5954 pub const CMOW_SHIFT: u32 = 32;
5956 pub const MSCEN_SHIFT: u32 = 33;
5958 pub const ENFPM_SHIFT: u32 = 34;
5960 pub const BT0_SHIFT: u32 = 35;
5962 pub const BT1_SHIFT: u32 = 36;
5964 pub const ITFSB_SHIFT: u32 = 37;
5966 pub const TCF0_SHIFT: u32 = 38;
5968 pub const TCF0_MASK: u64 = 0b11;
5970 pub const TCF_SHIFT: u32 = 40;
5972 pub const TCF_MASK: u64 = 0b11;
5974 pub const ATA0_SHIFT: u32 = 42;
5976 pub const ATA_SHIFT: u32 = 43;
5978 pub const DSSBS_SHIFT: u32 = 44;
5980 pub const TWEDEN_SHIFT: u32 = 45;
5982 pub const TWEDEL_SHIFT: u32 = 46;
5984 pub const TWEDEL_MASK: u64 = 0b1111;
5986 pub const ENASR_SHIFT: u32 = 54;
5988 pub const ENAS0_SHIFT: u32 = 55;
5990 pub const ENALS_SHIFT: u32 = 56;
5992 pub const EPAN_SHIFT: u32 = 57;
5994 pub const TCSO0_SHIFT: u32 = 58;
5996 pub const TCSO_SHIFT: u32 = 59;
5998 pub const ENTP2_SHIFT: u32 = 60;
6000 pub const NMI_SHIFT: u32 = 61;
6002 pub const SPINTMASK_SHIFT: u32 = 62;
6004 pub const TIDCP_SHIFT: u32 = 63;
6006
6007 pub const fn tcf0(self) -> u8 {
6009 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
6010 }
6011
6012 pub const fn tcf(self) -> u8 {
6014 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
6015 }
6016
6017 pub const fn twedel(self) -> u8 {
6019 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
6020 }
6021}
6022
6023#[cfg(feature = "el2")]
6024bitflags! {
6025 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6027 #[repr(transparent)]
6028 pub struct SctlrEl2: u64 {
6029 const M = 1 << 0;
6031 const A = 1 << 1;
6033 const C = 1 << 2;
6035 const SA = 1 << 3;
6037 const SA0 = 1 << 4;
6039 const CP15BEN = 1 << 5;
6041 const NAA = 1 << 6;
6043 const SED = 1 << 8;
6045 const UMA = 1 << 9;
6047 const ENRCTX = 1 << 10;
6049 const EOS = 1 << 11;
6051 const I = 1 << 12;
6053 const ENDB = 1 << 13;
6055 const DZE = 1 << 14;
6057 const UCT = 1 << 15;
6059 const NTWI = 1 << 16;
6061 const NTWE = 1 << 18;
6063 const WXN = 1 << 19;
6065 const IESB = 1 << 21;
6067 const EIS = 1 << 22;
6069 const SPAN = 1 << 23;
6071 const UCI = 1 << 26;
6073 const ENDA = 1 << 27;
6075 const NTLSMD = 1 << 28;
6077 const LSMAOE = 1 << 29;
6079 const ENIB = 1 << 30;
6081 const ENIA = 1 << 31;
6083 const CMOW = 1 << 32;
6085 const MSCEN = 1 << 33;
6087 const ENFPM = 1 << 34;
6089 const BT0 = 1 << 35;
6091 const BT = 1 << 36;
6093 const ITFSB = 1 << 37;
6095 const ATA0 = 1 << 42;
6097 const ATA = 1 << 43;
6099 const DSSBS = 1 << 44;
6101 const TWEDEN = 1 << 45;
6103 const ENASR = 1 << 54;
6105 const ENAS0 = 1 << 55;
6107 const ENALS = 1 << 56;
6109 const EPAN = 1 << 57;
6111 const TCSO0 = 1 << 58;
6113 const TCSO = 1 << 59;
6115 const ENTP2 = 1 << 60;
6117 const NMI = 1 << 61;
6119 const SPINTMASK = 1 << 62;
6121 const TIDCP = 1 << 63;
6123 }
6124}
6125
6126#[cfg(feature = "el2")]
6127impl SctlrEl2 {
6128 pub const M_SHIFT: u32 = 0;
6130 pub const A_SHIFT: u32 = 1;
6132 pub const C_SHIFT: u32 = 2;
6134 pub const SA_SHIFT: u32 = 3;
6136 pub const SA0_SHIFT: u32 = 4;
6138 pub const CP15BEN_SHIFT: u32 = 5;
6140 pub const NAA_SHIFT: u32 = 6;
6142 pub const SED_SHIFT: u32 = 8;
6144 pub const UMA_SHIFT: u32 = 9;
6146 pub const ENRCTX_SHIFT: u32 = 10;
6148 pub const EOS_SHIFT: u32 = 11;
6150 pub const I_SHIFT: u32 = 12;
6152 pub const ENDB_SHIFT: u32 = 13;
6154 pub const DZE_SHIFT: u32 = 14;
6156 pub const UCT_SHIFT: u32 = 15;
6158 pub const NTWI_SHIFT: u32 = 16;
6160 pub const NTWE_SHIFT: u32 = 18;
6162 pub const WXN_SHIFT: u32 = 19;
6164 pub const IESB_SHIFT: u32 = 21;
6166 pub const EIS_SHIFT: u32 = 22;
6168 pub const SPAN_SHIFT: u32 = 23;
6170 pub const UCI_SHIFT: u32 = 26;
6172 pub const ENDA_SHIFT: u32 = 27;
6174 pub const NTLSMD_SHIFT: u32 = 28;
6176 pub const LSMAOE_SHIFT: u32 = 29;
6178 pub const ENIB_SHIFT: u32 = 30;
6180 pub const ENIA_SHIFT: u32 = 31;
6182 pub const CMOW_SHIFT: u32 = 32;
6184 pub const MSCEN_SHIFT: u32 = 33;
6186 pub const ENFPM_SHIFT: u32 = 34;
6188 pub const BT0_SHIFT: u32 = 35;
6190 pub const BT_SHIFT: u32 = 36;
6192 pub const ITFSB_SHIFT: u32 = 37;
6194 pub const TCF0_SHIFT: u32 = 38;
6196 pub const TCF0_MASK: u64 = 0b11;
6198 pub const TCF_SHIFT: u32 = 40;
6200 pub const TCF_MASK: u64 = 0b11;
6202 pub const ATA0_SHIFT: u32 = 42;
6204 pub const ATA_SHIFT: u32 = 43;
6206 pub const DSSBS_SHIFT: u32 = 44;
6208 pub const TWEDEN_SHIFT: u32 = 45;
6210 pub const TWEDEL_SHIFT: u32 = 46;
6212 pub const TWEDEL_MASK: u64 = 0b1111;
6214 pub const ENASR_SHIFT: u32 = 54;
6216 pub const ENAS0_SHIFT: u32 = 55;
6218 pub const ENALS_SHIFT: u32 = 56;
6220 pub const EPAN_SHIFT: u32 = 57;
6222 pub const TCSO0_SHIFT: u32 = 58;
6224 pub const TCSO_SHIFT: u32 = 59;
6226 pub const ENTP2_SHIFT: u32 = 60;
6228 pub const NMI_SHIFT: u32 = 61;
6230 pub const SPINTMASK_SHIFT: u32 = 62;
6232 pub const TIDCP_SHIFT: u32 = 63;
6234
6235 pub const fn tcf0(self) -> u8 {
6237 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
6238 }
6239
6240 pub const fn tcf(self) -> u8 {
6242 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
6243 }
6244
6245 pub const fn twedel(self) -> u8 {
6247 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
6248 }
6249}
6250
6251#[cfg(feature = "el3")]
6252bitflags! {
6253 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6255 #[repr(transparent)]
6256 pub struct SctlrEl3: u64 {
6257 const RES1 = 0b110000100001010000000000110000;
6259 const M = 1 << 0;
6261 const A = 1 << 1;
6263 const C = 1 << 2;
6265 const SA = 1 << 3;
6267 const NAA = 1 << 6;
6269 const EOS = 1 << 11;
6271 const I = 1 << 12;
6273 const ENDB = 1 << 13;
6275 const WXN = 1 << 19;
6277 const IESB = 1 << 21;
6279 const EIS = 1 << 22;
6281 const ENDA = 1 << 27;
6283 const ENIB = 1 << 30;
6285 const ENIA = 1 << 31;
6287 const BT = 1 << 36;
6289 const ITFSB = 1 << 37;
6291 const ATA = 1 << 43;
6293 const DSSBS = 1 << 44;
6295 const TCSO = 1 << 59;
6297 const NMI = 1 << 61;
6299 const SPINTMASK = 1 << 62;
6301 }
6302}
6303
6304#[cfg(feature = "el3")]
6305impl SctlrEl3 {
6306 pub const M_SHIFT: u32 = 0;
6308 pub const A_SHIFT: u32 = 1;
6310 pub const C_SHIFT: u32 = 2;
6312 pub const SA_SHIFT: u32 = 3;
6314 pub const NAA_SHIFT: u32 = 6;
6316 pub const EOS_SHIFT: u32 = 11;
6318 pub const I_SHIFT: u32 = 12;
6320 pub const ENDB_SHIFT: u32 = 13;
6322 pub const WXN_SHIFT: u32 = 19;
6324 pub const IESB_SHIFT: u32 = 21;
6326 pub const EIS_SHIFT: u32 = 22;
6328 pub const ENDA_SHIFT: u32 = 27;
6330 pub const ENIB_SHIFT: u32 = 30;
6332 pub const ENIA_SHIFT: u32 = 31;
6334 pub const BT_SHIFT: u32 = 36;
6336 pub const ITFSB_SHIFT: u32 = 37;
6338 pub const TCF_SHIFT: u32 = 40;
6340 pub const TCF_MASK: u64 = 0b11;
6342 pub const ATA_SHIFT: u32 = 43;
6344 pub const DSSBS_SHIFT: u32 = 44;
6346 pub const TCSO_SHIFT: u32 = 59;
6348 pub const NMI_SHIFT: u32 = 61;
6350 pub const SPINTMASK_SHIFT: u32 = 62;
6352
6353 pub const fn tcf(self) -> u8 {
6355 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
6356 }
6357}
6358
6359#[cfg(feature = "el3")]
6360bitflags! {
6361 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6363 #[repr(transparent)]
6364 pub struct SmcrEl3: u64 {
6365 const EZT0 = 1 << 30;
6367 const FA64 = 1 << 31;
6369 }
6370}
6371
6372#[cfg(feature = "el3")]
6373impl SmcrEl3 {
6374 pub const LEN_SHIFT: u32 = 0;
6376 pub const LEN_MASK: u64 = 0b1111;
6378 pub const EZT0_SHIFT: u32 = 30;
6380 pub const FA64_SHIFT: u32 = 31;
6382
6383 pub const fn len(self) -> u8 {
6385 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
6386 }
6387}
6388
6389#[cfg(feature = "el1")]
6390bitflags! {
6391 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6393 #[repr(transparent)]
6394 pub struct SpsrEl1: u64 {
6395 const M_4 = 1 << 4;
6397 const T = 1 << 5;
6399 const F = 1 << 6;
6401 const I = 1 << 7;
6403 const A = 1 << 8;
6405 const D = 1 << 9;
6407 const E = 1 << 9;
6409 const ALLINT = 1 << 13;
6411 const BTYPE2 = 1 << 14;
6413 const IL = 1 << 20;
6415 const SS = 1 << 21;
6417 const PAN = 1 << 22;
6419 const UAO = 1 << 23;
6421 const DIT = 1 << 24;
6423 const TCO = 1 << 25;
6425 const Q = 1 << 27;
6427 const V = 1 << 28;
6429 const C = 1 << 29;
6431 const Z = 1 << 30;
6433 const N = 1 << 31;
6435 const PM = 1 << 32;
6437 const PPEND = 1 << 33;
6439 const EXLOCK = 1 << 34;
6441 const PACM = 1 << 35;
6443 const UINJ = 1 << 36;
6445 }
6446}
6447
6448#[cfg(feature = "el1")]
6449impl SpsrEl1 {
6450 pub const M_3_0_SHIFT: u32 = 0;
6452 pub const M_3_0_MASK: u64 = 0b1111;
6454 pub const M_4_SHIFT: u32 = 4;
6456 pub const T_SHIFT: u32 = 5;
6458 pub const F_SHIFT: u32 = 6;
6460 pub const I_SHIFT: u32 = 7;
6462 pub const A_SHIFT: u32 = 8;
6464 pub const D_SHIFT: u32 = 9;
6466 pub const E_SHIFT: u32 = 9;
6468 pub const BTYPE_SHIFT: u32 = 10;
6470 pub const BTYPE_MASK: u64 = 0b11;
6472 pub const ALLINT_SHIFT: u32 = 13;
6474 pub const BTYPE2_SHIFT: u32 = 14;
6476 pub const GE_SHIFT: u32 = 16;
6478 pub const GE_MASK: u64 = 0b1111;
6480 pub const IL_SHIFT: u32 = 20;
6482 pub const SS_SHIFT: u32 = 21;
6484 pub const PAN_SHIFT: u32 = 22;
6486 pub const UAO_SHIFT: u32 = 23;
6488 pub const DIT_SHIFT: u32 = 24;
6490 pub const TCO_SHIFT: u32 = 25;
6492 pub const Q_SHIFT: u32 = 27;
6494 pub const V_SHIFT: u32 = 28;
6496 pub const C_SHIFT: u32 = 29;
6498 pub const Z_SHIFT: u32 = 30;
6500 pub const N_SHIFT: u32 = 31;
6502 pub const PM_SHIFT: u32 = 32;
6504 pub const PPEND_SHIFT: u32 = 33;
6506 pub const EXLOCK_SHIFT: u32 = 34;
6508 pub const PACM_SHIFT: u32 = 35;
6510 pub const UINJ_SHIFT: u32 = 36;
6512
6513 pub const fn m_3_0(self) -> u8 {
6515 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
6516 }
6517
6518 pub const fn btype(self) -> u8 {
6520 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
6521 }
6522
6523 pub const fn ge(self) -> u8 {
6525 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
6526 }
6527}
6528
6529#[cfg(feature = "el2")]
6530bitflags! {
6531 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6533 #[repr(transparent)]
6534 pub struct SpsrEl2: u64 {
6535 const M_4 = 1 << 4;
6537 const T = 1 << 5;
6539 const F = 1 << 6;
6541 const I = 1 << 7;
6543 const A = 1 << 8;
6545 const D = 1 << 9;
6547 const E = 1 << 9;
6549 const ALLINT = 1 << 13;
6551 const BTYPE2 = 1 << 14;
6553 const IL = 1 << 20;
6555 const SS = 1 << 21;
6557 const PAN = 1 << 22;
6559 const UAO = 1 << 23;
6561 const DIT = 1 << 24;
6563 const TCO = 1 << 25;
6565 const Q = 1 << 27;
6567 const V = 1 << 28;
6569 const C = 1 << 29;
6571 const Z = 1 << 30;
6573 const N = 1 << 31;
6575 const PM = 1 << 32;
6577 const PPEND = 1 << 33;
6579 const EXLOCK = 1 << 34;
6581 const PACM = 1 << 35;
6583 const UINJ = 1 << 36;
6585 }
6586}
6587
6588#[cfg(feature = "el2")]
6589impl SpsrEl2 {
6590 pub const M_3_0_SHIFT: u32 = 0;
6592 pub const M_3_0_MASK: u64 = 0b1111;
6594 pub const M_4_SHIFT: u32 = 4;
6596 pub const T_SHIFT: u32 = 5;
6598 pub const F_SHIFT: u32 = 6;
6600 pub const I_SHIFT: u32 = 7;
6602 pub const A_SHIFT: u32 = 8;
6604 pub const D_SHIFT: u32 = 9;
6606 pub const E_SHIFT: u32 = 9;
6608 pub const BTYPE_SHIFT: u32 = 10;
6610 pub const BTYPE_MASK: u64 = 0b11;
6612 pub const ALLINT_SHIFT: u32 = 13;
6614 pub const BTYPE2_SHIFT: u32 = 14;
6616 pub const GE_SHIFT: u32 = 16;
6618 pub const GE_MASK: u64 = 0b1111;
6620 pub const IL_SHIFT: u32 = 20;
6622 pub const SS_SHIFT: u32 = 21;
6624 pub const PAN_SHIFT: u32 = 22;
6626 pub const UAO_SHIFT: u32 = 23;
6628 pub const DIT_SHIFT: u32 = 24;
6630 pub const TCO_SHIFT: u32 = 25;
6632 pub const Q_SHIFT: u32 = 27;
6634 pub const V_SHIFT: u32 = 28;
6636 pub const C_SHIFT: u32 = 29;
6638 pub const Z_SHIFT: u32 = 30;
6640 pub const N_SHIFT: u32 = 31;
6642 pub const PM_SHIFT: u32 = 32;
6644 pub const PPEND_SHIFT: u32 = 33;
6646 pub const EXLOCK_SHIFT: u32 = 34;
6648 pub const PACM_SHIFT: u32 = 35;
6650 pub const UINJ_SHIFT: u32 = 36;
6652
6653 pub const fn m_3_0(self) -> u8 {
6655 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
6656 }
6657
6658 pub const fn btype(self) -> u8 {
6660 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
6661 }
6662
6663 pub const fn ge(self) -> u8 {
6665 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
6666 }
6667}
6668
6669#[cfg(feature = "el3")]
6670bitflags! {
6671 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6673 #[repr(transparent)]
6674 pub struct SpsrEl3: u64 {
6675 const M_4 = 1 << 4;
6677 const T = 1 << 5;
6679 const F = 1 << 6;
6681 const I = 1 << 7;
6683 const A = 1 << 8;
6685 const D = 1 << 9;
6687 const E = 1 << 9;
6689 const ALLINT = 1 << 13;
6691 const BTYPE2 = 1 << 14;
6693 const IL = 1 << 20;
6695 const SS = 1 << 21;
6697 const PAN = 1 << 22;
6699 const UAO = 1 << 23;
6701 const DIT = 1 << 24;
6703 const TCO = 1 << 25;
6705 const Q = 1 << 27;
6707 const V = 1 << 28;
6709 const C = 1 << 29;
6711 const Z = 1 << 30;
6713 const N = 1 << 31;
6715 const PM = 1 << 32;
6717 const PPEND = 1 << 33;
6719 const EXLOCK = 1 << 34;
6721 const PACM = 1 << 35;
6723 const UINJ = 1 << 36;
6725 }
6726}
6727
6728#[cfg(feature = "el3")]
6729impl SpsrEl3 {
6730 pub const M_3_0_SHIFT: u32 = 0;
6732 pub const M_3_0_MASK: u64 = 0b1111;
6734 pub const M_4_SHIFT: u32 = 4;
6736 pub const T_SHIFT: u32 = 5;
6738 pub const F_SHIFT: u32 = 6;
6740 pub const I_SHIFT: u32 = 7;
6742 pub const A_SHIFT: u32 = 8;
6744 pub const D_SHIFT: u32 = 9;
6746 pub const E_SHIFT: u32 = 9;
6748 pub const BTYPE_SHIFT: u32 = 10;
6750 pub const BTYPE_MASK: u64 = 0b11;
6752 pub const ALLINT_SHIFT: u32 = 13;
6754 pub const BTYPE2_SHIFT: u32 = 14;
6756 pub const GE_SHIFT: u32 = 16;
6758 pub const GE_MASK: u64 = 0b1111;
6760 pub const IL_SHIFT: u32 = 20;
6762 pub const SS_SHIFT: u32 = 21;
6764 pub const PAN_SHIFT: u32 = 22;
6766 pub const UAO_SHIFT: u32 = 23;
6768 pub const DIT_SHIFT: u32 = 24;
6770 pub const TCO_SHIFT: u32 = 25;
6772 pub const Q_SHIFT: u32 = 27;
6774 pub const V_SHIFT: u32 = 28;
6776 pub const C_SHIFT: u32 = 29;
6778 pub const Z_SHIFT: u32 = 30;
6780 pub const N_SHIFT: u32 = 31;
6782 pub const PM_SHIFT: u32 = 32;
6784 pub const PPEND_SHIFT: u32 = 33;
6786 pub const EXLOCK_SHIFT: u32 = 34;
6788 pub const PACM_SHIFT: u32 = 35;
6790 pub const UINJ_SHIFT: u32 = 36;
6792
6793 pub const fn m_3_0(self) -> u8 {
6795 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
6796 }
6797
6798 pub const fn btype(self) -> u8 {
6800 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
6801 }
6802
6803 pub const fn ge(self) -> u8 {
6805 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
6806 }
6807}
6808
6809#[cfg(feature = "el1")]
6810bitflags! {
6811 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6813 #[repr(transparent)]
6814 pub struct SpEl1: u64 {
6815 }
6816}
6817
6818#[cfg(feature = "el1")]
6819impl SpEl1 {
6820 pub const STACKPOINTER_SHIFT: u32 = 0;
6822 pub const STACKPOINTER_MASK: u64 =
6824 0b1111111111111111111111111111111111111111111111111111111111111111;
6825
6826 pub const fn stackpointer(self) -> u64 {
6828 ((self.bits() >> Self::STACKPOINTER_SHIFT)
6829 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
6830 }
6831}
6832
6833#[cfg(feature = "el2")]
6834bitflags! {
6835 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6837 #[repr(transparent)]
6838 pub struct SpEl2: u64 {
6839 }
6840}
6841
6842#[cfg(feature = "el2")]
6843impl SpEl2 {
6844 pub const STACKPOINTER_SHIFT: u32 = 0;
6846 pub const STACKPOINTER_MASK: u64 =
6848 0b1111111111111111111111111111111111111111111111111111111111111111;
6849
6850 pub const fn stackpointer(self) -> u64 {
6852 ((self.bits() >> Self::STACKPOINTER_SHIFT)
6853 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
6854 }
6855}
6856
6857#[cfg(feature = "el1")]
6858bitflags! {
6859 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6861 #[repr(transparent)]
6862 pub struct Tcr2El1: u64 {
6863 const PNCH = 1 << 0;
6865 const PIE = 1 << 1;
6867 const E0POE = 1 << 2;
6869 const POE = 1 << 3;
6871 const AIE = 1 << 4;
6873 const D128 = 1 << 5;
6875 const PTTWI = 1 << 10;
6877 const HAFT = 1 << 11;
6879 const DISCH0 = 1 << 14;
6881 const DISCH1 = 1 << 15;
6883 const A2 = 1 << 16;
6885 const FNG0 = 1 << 17;
6887 const FNG1 = 1 << 18;
6889 const POE2F = 1 << 19;
6891 const FNGNA0 = 1 << 20;
6893 const FNGNA1 = 1 << 21;
6895 const TVAD0 = 1 << 35;
6897 const TVAD1 = 1 << 36;
6899 }
6900}
6901
6902#[cfg(feature = "el1")]
6903impl Tcr2El1 {
6904 pub const PNCH_SHIFT: u32 = 0;
6906 pub const PIE_SHIFT: u32 = 1;
6908 pub const E0POE_SHIFT: u32 = 2;
6910 pub const POE_SHIFT: u32 = 3;
6912 pub const AIE_SHIFT: u32 = 4;
6914 pub const D128_SHIFT: u32 = 5;
6916 pub const PTTWI_SHIFT: u32 = 10;
6918 pub const HAFT_SHIFT: u32 = 11;
6920 pub const DISCH0_SHIFT: u32 = 14;
6922 pub const DISCH1_SHIFT: u32 = 15;
6924 pub const A2_SHIFT: u32 = 16;
6926 pub const FNG0_SHIFT: u32 = 17;
6928 pub const FNG1_SHIFT: u32 = 18;
6930 pub const POE2F_SHIFT: u32 = 19;
6932 pub const FNGNA0_SHIFT: u32 = 20;
6934 pub const FNGNA1_SHIFT: u32 = 21;
6936 pub const POIW_SHIFT: u32 = 22;
6938 pub const POIW_MASK: u64 = 0b111;
6940 pub const VTB0_SHIFT: u32 = 25;
6942 pub const VTB0_MASK: u64 = 0b11111;
6944 pub const VTB1_SHIFT: u32 = 30;
6946 pub const VTB1_MASK: u64 = 0b11111;
6948 pub const TVAD0_SHIFT: u32 = 35;
6950 pub const TVAD1_SHIFT: u32 = 36;
6952
6953 pub const fn poiw(self) -> u8 {
6955 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
6956 }
6957
6958 pub const fn vtb0(self) -> u8 {
6960 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
6961 }
6962
6963 pub const fn vtb1(self) -> u8 {
6965 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
6966 }
6967}
6968
6969#[cfg(feature = "el2")]
6970bitflags! {
6971 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6973 #[repr(transparent)]
6974 pub struct Tcr2El2: u64 {
6975 const PNCH = 1 << 0;
6977 const PIE = 1 << 1;
6979 const E0POE = 1 << 2;
6981 const POE = 1 << 3;
6983 const AIE = 1 << 4;
6985 const D128 = 1 << 5;
6987 const PTTWI = 1 << 10;
6989 const HAFT = 1 << 11;
6991 const AMEC0 = 1 << 12;
6993 const AMEC1 = 1 << 13;
6995 const DISCH0 = 1 << 14;
6997 const DISCH1 = 1 << 15;
6999 const A2 = 1 << 16;
7001 const FNG0 = 1 << 17;
7003 const FNG1 = 1 << 18;
7005 const POE2F = 1 << 19;
7007 const TVAD0 = 1 << 35;
7009 const TVAD1 = 1 << 36;
7011 }
7012}
7013
7014#[cfg(feature = "el2")]
7015impl Tcr2El2 {
7016 pub const PNCH_SHIFT: u32 = 0;
7018 pub const PIE_SHIFT: u32 = 1;
7020 pub const E0POE_SHIFT: u32 = 2;
7022 pub const POE_SHIFT: u32 = 3;
7024 pub const AIE_SHIFT: u32 = 4;
7026 pub const D128_SHIFT: u32 = 5;
7028 pub const PTTWI_SHIFT: u32 = 10;
7030 pub const HAFT_SHIFT: u32 = 11;
7032 pub const AMEC0_SHIFT: u32 = 12;
7034 pub const AMEC1_SHIFT: u32 = 13;
7036 pub const DISCH0_SHIFT: u32 = 14;
7038 pub const DISCH1_SHIFT: u32 = 15;
7040 pub const A2_SHIFT: u32 = 16;
7042 pub const FNG0_SHIFT: u32 = 17;
7044 pub const FNG1_SHIFT: u32 = 18;
7046 pub const POE2F_SHIFT: u32 = 19;
7048 pub const POIW_SHIFT: u32 = 22;
7050 pub const POIW_MASK: u64 = 0b111;
7052 pub const VTB0_SHIFT: u32 = 25;
7054 pub const VTB0_MASK: u64 = 0b11111;
7056 pub const VTB1_SHIFT: u32 = 30;
7058 pub const VTB1_MASK: u64 = 0b11111;
7060 pub const TVAD0_SHIFT: u32 = 35;
7062 pub const TVAD1_SHIFT: u32 = 36;
7064
7065 pub const fn poiw(self) -> u8 {
7067 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
7068 }
7069
7070 pub const fn vtb0(self) -> u8 {
7072 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
7073 }
7074
7075 pub const fn vtb1(self) -> u8 {
7077 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
7078 }
7079}
7080
7081#[cfg(feature = "el1")]
7082bitflags! {
7083 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7085 #[repr(transparent)]
7086 pub struct TcrEl1: u64 {
7087 const EPD0 = 1 << 7;
7089 const A1 = 1 << 22;
7091 const EPD1 = 1 << 23;
7093 const AS = 1 << 36;
7095 const TBI0 = 1 << 37;
7097 const TBI1 = 1 << 38;
7099 const HA = 1 << 39;
7101 const HD = 1 << 40;
7103 const HPD0 = 1 << 41;
7105 const HPD1 = 1 << 42;
7107 const HWU059 = 1 << 43;
7109 const HWU060 = 1 << 44;
7111 const HWU061 = 1 << 45;
7113 const HWU062 = 1 << 46;
7115 const HWU159 = 1 << 47;
7117 const HWU160 = 1 << 48;
7119 const HWU161 = 1 << 49;
7121 const HWU162 = 1 << 50;
7123 const TBID0 = 1 << 51;
7125 const TBID1 = 1 << 52;
7127 const NFD0 = 1 << 53;
7129 const NFD1 = 1 << 54;
7131 const E0PD0 = 1 << 55;
7133 const E0PD1 = 1 << 56;
7135 const TCMA0 = 1 << 57;
7137 const TCMA1 = 1 << 58;
7139 const DS = 1 << 59;
7141 const MTX0 = 1 << 60;
7143 const MTX1 = 1 << 61;
7145 }
7146}
7147
7148#[cfg(feature = "el1")]
7149impl TcrEl1 {
7150 pub const T0SZ_SHIFT: u32 = 0;
7152 pub const T0SZ_MASK: u64 = 0b111111;
7154 pub const EPD0_SHIFT: u32 = 7;
7156 pub const IRGN0_SHIFT: u32 = 8;
7158 pub const IRGN0_MASK: u64 = 0b11;
7160 pub const ORGN0_SHIFT: u32 = 10;
7162 pub const ORGN0_MASK: u64 = 0b11;
7164 pub const SH0_SHIFT: u32 = 12;
7166 pub const SH0_MASK: u64 = 0b11;
7168 pub const TG0_SHIFT: u32 = 14;
7170 pub const TG0_MASK: u64 = 0b11;
7172 pub const T1SZ_SHIFT: u32 = 16;
7174 pub const T1SZ_MASK: u64 = 0b111111;
7176 pub const A1_SHIFT: u32 = 22;
7178 pub const EPD1_SHIFT: u32 = 23;
7180 pub const IRGN1_SHIFT: u32 = 24;
7182 pub const IRGN1_MASK: u64 = 0b11;
7184 pub const ORGN1_SHIFT: u32 = 26;
7186 pub const ORGN1_MASK: u64 = 0b11;
7188 pub const SH1_SHIFT: u32 = 28;
7190 pub const SH1_MASK: u64 = 0b11;
7192 pub const TG1_SHIFT: u32 = 30;
7194 pub const TG1_MASK: u64 = 0b11;
7196 pub const IPS_SHIFT: u32 = 32;
7198 pub const IPS_MASK: u64 = 0b111;
7200 pub const AS_SHIFT: u32 = 36;
7202 pub const TBI0_SHIFT: u32 = 37;
7204 pub const TBI1_SHIFT: u32 = 38;
7206 pub const HA_SHIFT: u32 = 39;
7208 pub const HD_SHIFT: u32 = 40;
7210 pub const HPD0_SHIFT: u32 = 41;
7212 pub const HPD1_SHIFT: u32 = 42;
7214 pub const HWU059_SHIFT: u32 = 43;
7216 pub const HWU060_SHIFT: u32 = 44;
7218 pub const HWU061_SHIFT: u32 = 45;
7220 pub const HWU062_SHIFT: u32 = 46;
7222 pub const HWU159_SHIFT: u32 = 47;
7224 pub const HWU160_SHIFT: u32 = 48;
7226 pub const HWU161_SHIFT: u32 = 49;
7228 pub const HWU162_SHIFT: u32 = 50;
7230 pub const TBID0_SHIFT: u32 = 51;
7232 pub const TBID1_SHIFT: u32 = 52;
7234 pub const NFD0_SHIFT: u32 = 53;
7236 pub const NFD1_SHIFT: u32 = 54;
7238 pub const E0PD0_SHIFT: u32 = 55;
7240 pub const E0PD1_SHIFT: u32 = 56;
7242 pub const TCMA0_SHIFT: u32 = 57;
7244 pub const TCMA1_SHIFT: u32 = 58;
7246 pub const DS_SHIFT: u32 = 59;
7248 pub const MTX0_SHIFT: u32 = 60;
7250 pub const MTX1_SHIFT: u32 = 61;
7252
7253 pub const fn t0sz(self) -> u8 {
7255 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
7256 }
7257
7258 pub const fn irgn0(self) -> u8 {
7260 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
7261 }
7262
7263 pub const fn orgn0(self) -> u8 {
7265 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
7266 }
7267
7268 pub const fn sh0(self) -> u8 {
7270 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
7271 }
7272
7273 pub const fn tg0(self) -> u8 {
7275 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
7276 }
7277
7278 pub const fn t1sz(self) -> u8 {
7280 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
7281 }
7282
7283 pub const fn irgn1(self) -> u8 {
7285 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
7286 }
7287
7288 pub const fn orgn1(self) -> u8 {
7290 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
7291 }
7292
7293 pub const fn sh1(self) -> u8 {
7295 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
7296 }
7297
7298 pub const fn tg1(self) -> u8 {
7300 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
7301 }
7302
7303 pub const fn ips(self) -> u8 {
7305 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
7306 }
7307}
7308
7309#[cfg(feature = "el2")]
7310bitflags! {
7311 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7313 #[repr(transparent)]
7314 pub struct TcrEl2: u64 {
7315 const RES1 = 0b10000000100000000000000000000000;
7317 const EPD0 = 1 << 7;
7319 const TBI = 1 << 20;
7321 const A1 = 1 << 22;
7323 const EPD1 = 1 << 23;
7325 const HPD = 1 << 24;
7327 const HWU59 = 1 << 25;
7329 const HWU60 = 1 << 26;
7331 const HWU61 = 1 << 27;
7333 const HWU62 = 1 << 28;
7335 const TBID = 1 << 29;
7337 const TCMA = 1 << 30;
7339 const MTX = 1 << 33;
7341 const AS = 1 << 36;
7343 const TBI0 = 1 << 37;
7345 const TBI1 = 1 << 38;
7347 const HPD0 = 1 << 41;
7349 const HPD1 = 1 << 42;
7351 const HWU059 = 1 << 43;
7353 const HWU060 = 1 << 44;
7355 const HWU061 = 1 << 45;
7357 const HWU062 = 1 << 46;
7359 const HWU159 = 1 << 47;
7361 const HWU160 = 1 << 48;
7363 const HWU161 = 1 << 49;
7365 const HWU162 = 1 << 50;
7367 const TBID0 = 1 << 51;
7369 const TBID1 = 1 << 52;
7371 const NFD0 = 1 << 53;
7373 const TVAD = 1 << 53;
7375 const NFD1 = 1 << 54;
7377 const E0PD0 = 1 << 55;
7379 const E0PD1 = 1 << 56;
7381 const TCMA0 = 1 << 57;
7383 const TCMA1 = 1 << 58;
7385 const MTX0 = 1 << 60;
7387 const MTX1 = 1 << 61;
7389 }
7390}
7391
7392#[cfg(feature = "el2")]
7393impl TcrEl2 {
7394 pub const T0SZ_SHIFT: u32 = 0;
7396 pub const T0SZ_MASK: u64 = 0b111111;
7398 pub const EPD0_SHIFT: u32 = 7;
7400 pub const IRGN0_SHIFT: u32 = 8;
7402 pub const IRGN0_MASK: u64 = 0b11;
7404 pub const ORGN0_SHIFT: u32 = 10;
7406 pub const ORGN0_MASK: u64 = 0b11;
7408 pub const SH0_SHIFT: u32 = 12;
7410 pub const SH0_MASK: u64 = 0b11;
7412 pub const TG0_SHIFT: u32 = 14;
7414 pub const TG0_MASK: u64 = 0b11;
7416 pub const PS_SHIFT: u32 = 16;
7418 pub const PS_MASK: u64 = 0b111;
7420 pub const T1SZ_SHIFT: u32 = 16;
7422 pub const T1SZ_MASK: u64 = 0b111111;
7424 pub const TBI_SHIFT: u32 = 20;
7426 pub const A1_SHIFT: u32 = 22;
7428 pub const EPD1_SHIFT: u32 = 23;
7430 pub const HPD_SHIFT: u32 = 24;
7432 pub const IRGN1_SHIFT: u32 = 24;
7434 pub const IRGN1_MASK: u64 = 0b11;
7436 pub const HWU59_SHIFT: u32 = 25;
7438 pub const HWU60_SHIFT: u32 = 26;
7440 pub const ORGN1_SHIFT: u32 = 26;
7442 pub const ORGN1_MASK: u64 = 0b11;
7444 pub const HWU61_SHIFT: u32 = 27;
7446 pub const HWU62_SHIFT: u32 = 28;
7448 pub const SH1_SHIFT: u32 = 28;
7450 pub const SH1_MASK: u64 = 0b11;
7452 pub const TBID_SHIFT: u32 = 29;
7454 pub const TCMA_SHIFT: u32 = 30;
7456 pub const TG1_SHIFT: u32 = 30;
7458 pub const TG1_MASK: u64 = 0b11;
7460 pub const IPS_SHIFT: u32 = 32;
7462 pub const IPS_MASK: u64 = 0b111;
7464 pub const MTX_SHIFT: u32 = 33;
7466 pub const AS_SHIFT: u32 = 36;
7468 pub const TBI0_SHIFT: u32 = 37;
7470 pub const TBI1_SHIFT: u32 = 38;
7472 pub const HPD0_SHIFT: u32 = 41;
7474 pub const HPD1_SHIFT: u32 = 42;
7476 pub const HWU059_SHIFT: u32 = 43;
7478 pub const HWU060_SHIFT: u32 = 44;
7480 pub const HWU061_SHIFT: u32 = 45;
7482 pub const HWU062_SHIFT: u32 = 46;
7484 pub const HWU159_SHIFT: u32 = 47;
7486 pub const HWU160_SHIFT: u32 = 48;
7488 pub const VTB_SHIFT: u32 = 48;
7490 pub const VTB_MASK: u64 = 0b11111;
7492 pub const HWU161_SHIFT: u32 = 49;
7494 pub const HWU162_SHIFT: u32 = 50;
7496 pub const TBID0_SHIFT: u32 = 51;
7498 pub const TBID1_SHIFT: u32 = 52;
7500 pub const NFD0_SHIFT: u32 = 53;
7502 pub const TVAD_SHIFT: u32 = 53;
7504 pub const NFD1_SHIFT: u32 = 54;
7506 pub const E0PD0_SHIFT: u32 = 55;
7508 pub const E0PD1_SHIFT: u32 = 56;
7510 pub const TCMA0_SHIFT: u32 = 57;
7512 pub const TCMA1_SHIFT: u32 = 58;
7514 pub const MTX0_SHIFT: u32 = 60;
7516 pub const MTX1_SHIFT: u32 = 61;
7518
7519 pub const fn t0sz(self) -> u8 {
7521 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
7522 }
7523
7524 pub const fn irgn0(self) -> u8 {
7526 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
7527 }
7528
7529 pub const fn orgn0(self) -> u8 {
7531 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
7532 }
7533
7534 pub const fn sh0(self) -> u8 {
7536 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
7537 }
7538
7539 pub const fn tg0(self) -> u8 {
7541 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
7542 }
7543
7544 pub const fn ps(self) -> u8 {
7546 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
7547 }
7548
7549 pub const fn t1sz(self) -> u8 {
7551 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
7552 }
7553
7554 pub const fn irgn1(self) -> u8 {
7556 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
7557 }
7558
7559 pub const fn orgn1(self) -> u8 {
7561 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
7562 }
7563
7564 pub const fn sh1(self) -> u8 {
7566 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
7567 }
7568
7569 pub const fn tg1(self) -> u8 {
7571 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
7572 }
7573
7574 pub const fn ips(self) -> u8 {
7576 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
7577 }
7578
7579 pub const fn vtb(self) -> u8 {
7581 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
7582 }
7583}
7584
7585#[cfg(feature = "el3")]
7586bitflags! {
7587 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7589 #[repr(transparent)]
7590 pub struct TcrEl3: u64 {
7591 const RES1 = 0b10000000100000000000000000000000;
7593 const TBI = 1 << 20;
7595 const HA = 1 << 21;
7597 const HD = 1 << 22;
7599 const HPD = 1 << 24;
7601 const HWU59 = 1 << 25;
7603 const HWU60 = 1 << 26;
7605 const HWU61 = 1 << 27;
7607 const HWU62 = 1 << 28;
7609 const TBID = 1 << 29;
7611 const TCMA = 1 << 30;
7613 const DS = 1 << 32;
7615 const MTX = 1 << 33;
7617 const PNCH = 1 << 34;
7619 const PIE = 1 << 35;
7621 const POE = 1 << 36;
7623 const AIE = 1 << 37;
7625 const D128 = 1 << 38;
7627 const PTTWI = 1 << 41;
7629 const HAFT = 1 << 42;
7631 const DISCH0 = 1 << 43;
7633 const POE2F = 1 << 44;
7635 const TVAD = 1 << 53;
7637 }
7638}
7639
7640#[cfg(feature = "el3")]
7641impl TcrEl3 {
7642 pub const T0SZ_SHIFT: u32 = 0;
7644 pub const T0SZ_MASK: u64 = 0b111111;
7646 pub const IRGN0_SHIFT: u32 = 8;
7648 pub const IRGN0_MASK: u64 = 0b11;
7650 pub const ORGN0_SHIFT: u32 = 10;
7652 pub const ORGN0_MASK: u64 = 0b11;
7654 pub const SH0_SHIFT: u32 = 12;
7656 pub const SH0_MASK: u64 = 0b11;
7658 pub const TG0_SHIFT: u32 = 14;
7660 pub const TG0_MASK: u64 = 0b11;
7662 pub const PS_SHIFT: u32 = 16;
7664 pub const PS_MASK: u64 = 0b111;
7666 pub const TBI_SHIFT: u32 = 20;
7668 pub const HA_SHIFT: u32 = 21;
7670 pub const HD_SHIFT: u32 = 22;
7672 pub const HPD_SHIFT: u32 = 24;
7674 pub const HWU59_SHIFT: u32 = 25;
7676 pub const HWU60_SHIFT: u32 = 26;
7678 pub const HWU61_SHIFT: u32 = 27;
7680 pub const HWU62_SHIFT: u32 = 28;
7682 pub const TBID_SHIFT: u32 = 29;
7684 pub const TCMA_SHIFT: u32 = 30;
7686 pub const DS_SHIFT: u32 = 32;
7688 pub const MTX_SHIFT: u32 = 33;
7690 pub const PNCH_SHIFT: u32 = 34;
7692 pub const PIE_SHIFT: u32 = 35;
7694 pub const POE_SHIFT: u32 = 36;
7696 pub const AIE_SHIFT: u32 = 37;
7698 pub const D128_SHIFT: u32 = 38;
7700 pub const PTTWI_SHIFT: u32 = 41;
7702 pub const HAFT_SHIFT: u32 = 42;
7704 pub const DISCH0_SHIFT: u32 = 43;
7706 pub const POE2F_SHIFT: u32 = 44;
7708 pub const POIW_SHIFT: u32 = 45;
7710 pub const POIW_MASK: u64 = 0b111;
7712 pub const VTB_SHIFT: u32 = 48;
7714 pub const VTB_MASK: u64 = 0b11111;
7716 pub const TVAD_SHIFT: u32 = 53;
7718
7719 pub const fn t0sz(self) -> u8 {
7721 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
7722 }
7723
7724 pub const fn irgn0(self) -> u8 {
7726 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
7727 }
7728
7729 pub const fn orgn0(self) -> u8 {
7731 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
7732 }
7733
7734 pub const fn sh0(self) -> u8 {
7736 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
7737 }
7738
7739 pub const fn tg0(self) -> u8 {
7741 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
7742 }
7743
7744 pub const fn ps(self) -> u8 {
7746 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
7747 }
7748
7749 pub const fn poiw(self) -> u8 {
7751 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
7752 }
7753
7754 pub const fn vtb(self) -> u8 {
7756 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
7757 }
7758}
7759
7760#[cfg(feature = "el1")]
7761bitflags! {
7762 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7764 #[repr(transparent)]
7765 pub struct Tfsre0El1: u64 {
7766 const TF0 = 1 << 0;
7768 const TF1 = 1 << 1;
7770 }
7771}
7772
7773#[cfg(feature = "el1")]
7774impl Tfsre0El1 {
7775 pub const TF0_SHIFT: u32 = 0;
7777 pub const TF1_SHIFT: u32 = 1;
7779}
7780
7781#[cfg(feature = "el1")]
7782bitflags! {
7783 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7785 #[repr(transparent)]
7786 pub struct TfsrEl1: u64 {
7787 const TF0 = 1 << 0;
7789 const TF1 = 1 << 1;
7791 }
7792}
7793
7794#[cfg(feature = "el1")]
7795impl TfsrEl1 {
7796 pub const TF0_SHIFT: u32 = 0;
7798 pub const TF1_SHIFT: u32 = 1;
7800}
7801
7802#[cfg(feature = "el2")]
7803bitflags! {
7804 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7806 #[repr(transparent)]
7807 pub struct TfsrEl2: u64 {
7808 const TF0 = 1 << 0;
7810 const TF1 = 1 << 1;
7812 }
7813}
7814
7815#[cfg(feature = "el2")]
7816impl TfsrEl2 {
7817 pub const TF0_SHIFT: u32 = 0;
7819 pub const TF1_SHIFT: u32 = 1;
7821}
7822
7823bitflags! {
7824 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7826 #[repr(transparent)]
7827 pub struct TpidrroEl0: u64 {
7828 }
7829}
7830
7831impl TpidrroEl0 {
7832 pub const THREADID_SHIFT: u32 = 0;
7834 pub const THREADID_MASK: u64 =
7836 0b1111111111111111111111111111111111111111111111111111111111111111;
7837
7838 pub const fn threadid(self) -> u64 {
7840 ((self.bits() >> Self::THREADID_SHIFT)
7841 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
7842 }
7843}
7844
7845bitflags! {
7846 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7848 #[repr(transparent)]
7849 pub struct TpidrEl0: u64 {
7850 }
7851}
7852
7853impl TpidrEl0 {
7854 pub const THREADID_SHIFT: u32 = 0;
7856 pub const THREADID_MASK: u64 =
7858 0b1111111111111111111111111111111111111111111111111111111111111111;
7859
7860 pub const fn threadid(self) -> u64 {
7862 ((self.bits() >> Self::THREADID_SHIFT)
7863 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
7864 }
7865}
7866
7867#[cfg(feature = "el1")]
7868bitflags! {
7869 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7871 #[repr(transparent)]
7872 pub struct TpidrEl1: u64 {
7873 }
7874}
7875
7876#[cfg(feature = "el1")]
7877impl TpidrEl1 {
7878 pub const THREADID_SHIFT: u32 = 0;
7880 pub const THREADID_MASK: u64 =
7882 0b1111111111111111111111111111111111111111111111111111111111111111;
7883
7884 pub const fn threadid(self) -> u64 {
7886 ((self.bits() >> Self::THREADID_SHIFT)
7887 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
7888 }
7889}
7890
7891#[cfg(feature = "el2")]
7892bitflags! {
7893 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7895 #[repr(transparent)]
7896 pub struct TpidrEl2: u64 {
7897 }
7898}
7899
7900#[cfg(feature = "el2")]
7901impl TpidrEl2 {
7902 pub const THREADID_SHIFT: u32 = 0;
7904 pub const THREADID_MASK: u64 =
7906 0b1111111111111111111111111111111111111111111111111111111111111111;
7907
7908 pub const fn threadid(self) -> u64 {
7910 ((self.bits() >> Self::THREADID_SHIFT)
7911 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
7912 }
7913}
7914
7915#[cfg(feature = "el1")]
7916bitflags! {
7917 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7919 #[repr(transparent)]
7920 pub struct Ttbr0El1: u64 {
7921 const CNP = 1 << 0;
7923 }
7924}
7925
7926#[cfg(feature = "el1")]
7927impl Ttbr0El1 {
7928 pub const CNP_SHIFT: u32 = 0;
7930 pub const BADDR_47_1_SHIFT: u32 = 1;
7932 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
7934 pub const SKL_SHIFT: u32 = 1;
7936 pub const SKL_MASK: u64 = 0b11;
7938 pub const ASID_SHIFT: u32 = 48;
7940 pub const ASID_MASK: u64 = 0b1111111111111111;
7942
7943 pub const fn baddr_47_1(self) -> u64 {
7945 ((self.bits() >> Self::BADDR_47_1_SHIFT)
7946 & 0b11111111111111111111111111111111111111111111111) as u64
7947 }
7948
7949 pub const fn skl(self) -> u8 {
7951 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
7952 }
7953
7954 pub const fn asid(self) -> u16 {
7956 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
7957 }
7958}
7959
7960#[cfg(feature = "el2")]
7961bitflags! {
7962 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7964 #[repr(transparent)]
7965 pub struct Ttbr0El2: u64 {
7966 const CNP = 1 << 0;
7968 }
7969}
7970
7971#[cfg(feature = "el2")]
7972impl Ttbr0El2 {
7973 pub const CNP_SHIFT: u32 = 0;
7975 pub const BADDR_47_1_SHIFT: u32 = 1;
7977 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
7979 pub const SKL_SHIFT: u32 = 1;
7981 pub const SKL_MASK: u64 = 0b11;
7983 pub const ASID_SHIFT: u32 = 48;
7985 pub const ASID_MASK: u64 = 0b1111111111111111;
7987
7988 pub const fn baddr_47_1(self) -> u64 {
7990 ((self.bits() >> Self::BADDR_47_1_SHIFT)
7991 & 0b11111111111111111111111111111111111111111111111) as u64
7992 }
7993
7994 pub const fn skl(self) -> u8 {
7996 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
7997 }
7998
7999 pub const fn asid(self) -> u16 {
8001 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
8002 }
8003}
8004
8005#[cfg(feature = "el3")]
8006bitflags! {
8007 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8009 #[repr(transparent)]
8010 pub struct Ttbr0El3: u64 {
8011 const CNP = 1 << 0;
8013 }
8014}
8015
8016#[cfg(feature = "el3")]
8017impl Ttbr0El3 {
8018 pub const CNP_SHIFT: u32 = 0;
8020 pub const SKL_SHIFT: u32 = 1;
8022 pub const SKL_MASK: u64 = 0b11;
8024
8025 pub const fn skl(self) -> u8 {
8027 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
8028 }
8029}
8030
8031#[cfg(feature = "el1")]
8032bitflags! {
8033 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8035 #[repr(transparent)]
8036 pub struct Ttbr1El1: u64 {
8037 const CNP = 1 << 0;
8039 }
8040}
8041
8042#[cfg(feature = "el1")]
8043impl Ttbr1El1 {
8044 pub const CNP_SHIFT: u32 = 0;
8046 pub const BADDR_47_1_SHIFT: u32 = 1;
8048 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
8050 pub const SKL_SHIFT: u32 = 1;
8052 pub const SKL_MASK: u64 = 0b11;
8054 pub const ASID_SHIFT: u32 = 48;
8056 pub const ASID_MASK: u64 = 0b1111111111111111;
8058
8059 pub const fn baddr_47_1(self) -> u64 {
8061 ((self.bits() >> Self::BADDR_47_1_SHIFT)
8062 & 0b11111111111111111111111111111111111111111111111) as u64
8063 }
8064
8065 pub const fn skl(self) -> u8 {
8067 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
8068 }
8069
8070 pub const fn asid(self) -> u16 {
8072 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
8073 }
8074}
8075
8076#[cfg(feature = "el2")]
8077bitflags! {
8078 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8080 #[repr(transparent)]
8081 pub struct Ttbr1El2: u64 {
8082 const CNP = 1 << 0;
8084 }
8085}
8086
8087#[cfg(feature = "el2")]
8088impl Ttbr1El2 {
8089 pub const CNP_SHIFT: u32 = 0;
8091 pub const BADDR_47_1_SHIFT: u32 = 1;
8093 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
8095 pub const SKL_SHIFT: u32 = 1;
8097 pub const SKL_MASK: u64 = 0b11;
8099 pub const ASID_SHIFT: u32 = 48;
8101 pub const ASID_MASK: u64 = 0b1111111111111111;
8103
8104 pub const fn baddr_47_1(self) -> u64 {
8106 ((self.bits() >> Self::BADDR_47_1_SHIFT)
8107 & 0b11111111111111111111111111111111111111111111111) as u64
8108 }
8109
8110 pub const fn skl(self) -> u8 {
8112 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
8113 }
8114
8115 pub const fn asid(self) -> u16 {
8117 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
8118 }
8119}
8120
8121#[cfg(feature = "el1")]
8122bitflags! {
8123 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8125 #[repr(transparent)]
8126 pub struct VbarEl1: u64 {
8127 const UT = 1 << 0;
8129 }
8130}
8131
8132#[cfg(feature = "el1")]
8133impl VbarEl1 {
8134 pub const UT_SHIFT: u32 = 0;
8136 pub const VBA_SHIFT: u32 = 11;
8138 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
8140
8141 pub const fn vba(self) -> u64 {
8143 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
8144 as u64
8145 }
8146}
8147
8148#[cfg(feature = "el2")]
8149bitflags! {
8150 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8152 #[repr(transparent)]
8153 pub struct VbarEl2: u64 {
8154 const UT = 1 << 0;
8156 }
8157}
8158
8159#[cfg(feature = "el2")]
8160impl VbarEl2 {
8161 pub const UT_SHIFT: u32 = 0;
8163 pub const VBA_SHIFT: u32 = 11;
8165 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
8167
8168 pub const fn vba(self) -> u64 {
8170 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
8171 as u64
8172 }
8173}
8174
8175#[cfg(feature = "el2")]
8176bitflags! {
8177 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8179 #[repr(transparent)]
8180 pub struct VdisrEl2: u64 {
8181 const LPAE = 1 << 9;
8183 const EXT = 1 << 12;
8185 const IDS = 1 << 24;
8187 const A = 1 << 31;
8189 }
8190}
8191
8192#[cfg(feature = "el2")]
8193impl VdisrEl2 {
8194 pub const ISS_SHIFT: u32 = 0;
8196 pub const ISS_MASK: u64 = 0b111111111111111111111111;
8198 pub const STATUS_SHIFT: u32 = 0;
8200 pub const STATUS_MASK: u64 = 0b111111;
8202 pub const LPAE_SHIFT: u32 = 9;
8204 pub const EXT_SHIFT: u32 = 12;
8206 pub const AET_SHIFT: u32 = 14;
8208 pub const AET_MASK: u64 = 0b11;
8210 pub const IDS_SHIFT: u32 = 24;
8212 pub const A_SHIFT: u32 = 31;
8214
8215 pub const fn iss(self) -> u32 {
8217 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
8218 }
8219
8220 pub const fn status(self) -> u8 {
8222 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
8223 }
8224
8225 pub const fn aet(self) -> u8 {
8227 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
8228 }
8229}
8230
8231#[cfg(feature = "el2")]
8232bitflags! {
8233 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8235 #[repr(transparent)]
8236 pub struct VmpidrEl2: u64 {
8237 const RES1 = 0b10000000000000000000000000000000;
8239 const MT = 1 << 24;
8241 const U = 1 << 30;
8243 }
8244}
8245
8246#[cfg(feature = "el2")]
8247impl VmpidrEl2 {
8248 pub const AFF0_SHIFT: u32 = 0;
8250 pub const AFF0_MASK: u64 = 0b11111111;
8252 pub const AFF1_SHIFT: u32 = 8;
8254 pub const AFF1_MASK: u64 = 0b11111111;
8256 pub const AFF2_SHIFT: u32 = 16;
8258 pub const AFF2_MASK: u64 = 0b11111111;
8260 pub const MT_SHIFT: u32 = 24;
8262 pub const U_SHIFT: u32 = 30;
8264 pub const AFF3_SHIFT: u32 = 32;
8266 pub const AFF3_MASK: u64 = 0b11111111;
8268
8269 pub const fn aff0(self) -> u8 {
8271 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
8272 }
8273
8274 pub const fn aff1(self) -> u8 {
8276 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
8277 }
8278
8279 pub const fn aff2(self) -> u8 {
8281 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
8282 }
8283
8284 pub const fn aff3(self) -> u8 {
8286 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
8287 }
8288}
8289
8290#[cfg(feature = "el2")]
8291bitflags! {
8292 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8294 #[repr(transparent)]
8295 pub struct VpidrEl2: u64 {
8296 }
8297}
8298
8299#[cfg(feature = "el2")]
8300impl VpidrEl2 {
8301 pub const REVISION_SHIFT: u32 = 0;
8303 pub const REVISION_MASK: u64 = 0b1111;
8305 pub const PARTNUM_SHIFT: u32 = 4;
8307 pub const PARTNUM_MASK: u64 = 0b111111111111;
8309 pub const ARCHITECTURE_SHIFT: u32 = 16;
8311 pub const ARCHITECTURE_MASK: u64 = 0b1111;
8313 pub const VARIANT_SHIFT: u32 = 20;
8315 pub const VARIANT_MASK: u64 = 0b1111;
8317 pub const IMPLEMENTER_SHIFT: u32 = 24;
8319 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
8321
8322 pub const fn revision(self) -> u8 {
8324 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
8325 }
8326
8327 pub const fn partnum(self) -> u16 {
8329 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
8330 }
8331
8332 pub const fn architecture(self) -> u8 {
8334 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
8335 }
8336
8337 pub const fn variant(self) -> u8 {
8339 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
8340 }
8341
8342 pub const fn implementer(self) -> u8 {
8344 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
8345 }
8346}
8347
8348#[cfg(feature = "el2")]
8349bitflags! {
8350 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8352 #[repr(transparent)]
8353 pub struct VsesrEl2: u64 {
8354 const EXT = 1 << 12;
8356 const IDS = 1 << 24;
8358 }
8359}
8360
8361#[cfg(feature = "el2")]
8362impl VsesrEl2 {
8363 pub const ISS_SHIFT: u32 = 0;
8365 pub const ISS_MASK: u64 = 0b111111111111111111111111;
8367 pub const EXT_SHIFT: u32 = 12;
8369 pub const AET_SHIFT: u32 = 14;
8371 pub const AET_MASK: u64 = 0b11;
8373 pub const IDS_SHIFT: u32 = 24;
8375
8376 pub const fn iss(self) -> u32 {
8378 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
8379 }
8380
8381 pub const fn aet(self) -> u8 {
8383 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
8384 }
8385}
8386
8387#[cfg(feature = "el2")]
8388bitflags! {
8389 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8391 #[repr(transparent)]
8392 pub struct VtcrEl2: u64 {
8393 const RES1 = 0b10000000000000000000000000000000;
8395 const VS = 1 << 19;
8397 const HA = 1 << 21;
8399 const HD = 1 << 22;
8401 const HWU59 = 1 << 25;
8403 const HWU60 = 1 << 26;
8405 const HWU61 = 1 << 27;
8407 const HWU62 = 1 << 28;
8409 const NSW = 1 << 29;
8411 const NSA = 1 << 30;
8413 const DS = 1 << 32;
8415 const SL2 = 1 << 33;
8417 const ASSUREDONLY = 1 << 34;
8419 const TL1 = 1 << 35;
8421 const S2PIE = 1 << 36;
8423 const S2POE = 1 << 37;
8425 const D128 = 1 << 38;
8427 const GCSH = 1 << 40;
8429 const TL0 = 1 << 41;
8431 const HAFT = 1 << 44;
8433 const HDBSS = 1 << 45;
8435 }
8436}
8437
8438#[cfg(feature = "el2")]
8439impl VtcrEl2 {
8440 pub const T0SZ_SHIFT: u32 = 0;
8442 pub const T0SZ_MASK: u64 = 0b111111;
8444 pub const SL0_SHIFT: u32 = 6;
8446 pub const SL0_MASK: u64 = 0b11;
8448 pub const IRGN0_SHIFT: u32 = 8;
8450 pub const IRGN0_MASK: u64 = 0b11;
8452 pub const ORGN0_SHIFT: u32 = 10;
8454 pub const ORGN0_MASK: u64 = 0b11;
8456 pub const SH0_SHIFT: u32 = 12;
8458 pub const SH0_MASK: u64 = 0b11;
8460 pub const TG0_SHIFT: u32 = 14;
8462 pub const TG0_MASK: u64 = 0b11;
8464 pub const PS_SHIFT: u32 = 16;
8466 pub const PS_MASK: u64 = 0b111;
8468 pub const VS_SHIFT: u32 = 19;
8470 pub const HA_SHIFT: u32 = 21;
8472 pub const HD_SHIFT: u32 = 22;
8474 pub const HWU59_SHIFT: u32 = 25;
8476 pub const HWU60_SHIFT: u32 = 26;
8478 pub const HWU61_SHIFT: u32 = 27;
8480 pub const HWU62_SHIFT: u32 = 28;
8482 pub const NSW_SHIFT: u32 = 29;
8484 pub const NSA_SHIFT: u32 = 30;
8486 pub const DS_SHIFT: u32 = 32;
8488 pub const SL2_SHIFT: u32 = 33;
8490 pub const ASSUREDONLY_SHIFT: u32 = 34;
8492 pub const TL1_SHIFT: u32 = 35;
8494 pub const S2PIE_SHIFT: u32 = 36;
8496 pub const S2POE_SHIFT: u32 = 37;
8498 pub const D128_SHIFT: u32 = 38;
8500 pub const GCSH_SHIFT: u32 = 40;
8502 pub const TL0_SHIFT: u32 = 41;
8504 pub const HAFT_SHIFT: u32 = 44;
8506 pub const HDBSS_SHIFT: u32 = 45;
8508
8509 pub const fn t0sz(self) -> u8 {
8511 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
8512 }
8513
8514 pub const fn sl0(self) -> u8 {
8516 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
8517 }
8518
8519 pub const fn irgn0(self) -> u8 {
8521 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
8522 }
8523
8524 pub const fn orgn0(self) -> u8 {
8526 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
8527 }
8528
8529 pub const fn sh0(self) -> u8 {
8531 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
8532 }
8533
8534 pub const fn tg0(self) -> u8 {
8536 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
8537 }
8538
8539 pub const fn ps(self) -> u8 {
8541 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
8542 }
8543}
8544
8545#[cfg(feature = "el2")]
8546bitflags! {
8547 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8549 #[repr(transparent)]
8550 pub struct VttbrEl2: u64 {
8551 const CNP = 1 << 0;
8553 }
8554}
8555
8556#[cfg(feature = "el2")]
8557impl VttbrEl2 {
8558 pub const CNP_SHIFT: u32 = 0;
8560 pub const BADDR_SHIFT: u32 = 1;
8562 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
8564 pub const SKL_SHIFT: u32 = 1;
8566 pub const SKL_MASK: u64 = 0b11;
8568 pub const VMID_SHIFT: u32 = 48;
8570 pub const VMID_MASK: u64 = 0b1111111111111111;
8572
8573 pub const fn baddr(self) -> u64 {
8575 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
8576 as u64
8577 }
8578
8579 pub const fn skl(self) -> u8 {
8581 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
8582 }
8583
8584 pub const fn vmid(self) -> u16 {
8586 ((self.bits() >> Self::VMID_SHIFT) & 0b1111111111111111) as u16
8587 }
8588}
8589
8590#[cfg(feature = "el3")]
8591bitflags! {
8592 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8594 #[repr(transparent)]
8595 pub struct ZcrEl3: u64 {
8596 }
8597}
8598
8599#[cfg(feature = "el3")]
8600impl ZcrEl3 {
8601 pub const LEN_SHIFT: u32 = 0;
8603 pub const LEN_MASK: u64 = 0b1111;
8605
8606 pub const fn len(self) -> u8 {
8608 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
8609 }
8610}
8611
8612#[cfg(feature = "el1")]
8613read_write_sysreg!(actlr_el1, u64, safe_read, fake::SYSREGS);
8614#[cfg(feature = "el2")]
8615read_write_sysreg!(actlr_el2, u64, safe_read, fake::SYSREGS);
8616#[cfg(feature = "el1")]
8617read_write_sysreg!(afsr0_el1, u64, safe_read, fake::SYSREGS);
8618#[cfg(feature = "el2")]
8619read_write_sysreg!(afsr0_el2, u64, safe_read, fake::SYSREGS);
8620#[cfg(feature = "el1")]
8621read_write_sysreg!(afsr1_el1, u64, safe_read, fake::SYSREGS);
8622#[cfg(feature = "el2")]
8623read_write_sysreg!(afsr1_el2, u64, safe_read, fake::SYSREGS);
8624#[cfg(feature = "el1")]
8625read_write_sysreg!(amair_el1, u64, safe_read, fake::SYSREGS);
8626#[cfg(feature = "el2")]
8627read_write_sysreg!(amair_el2, u64, safe_read, fake::SYSREGS);
8628#[cfg(feature = "el1")]
8629read_write_sysreg!(apiakeyhi_el1: s3_0_c2_c1_1, u64: ApiakeyhiEl1, safe_read, fake::SYSREGS);
8630#[cfg(feature = "el1")]
8631read_write_sysreg!(apiakeylo_el1: s3_0_c2_c1_0, u64: ApiakeyloEl1, safe_read, fake::SYSREGS);
8632#[cfg(feature = "el1")]
8633read_sysreg!(ccsidr_el1, u64: CcsidrEl1, safe, fake::SYSREGS);
8634#[cfg(feature = "el1")]
8635read_sysreg!(clidr_el1, u64: ClidrEl1, safe, fake::SYSREGS);
8636read_write_sysreg!(cntfrq_el0, u64: CntfrqEl0, safe_read, safe_write, fake::SYSREGS);
8637#[cfg(feature = "el2")]
8638read_write_sysreg!(cnthctl_el2, u64: CnthctlEl2, safe_read, safe_write, fake::SYSREGS);
8639#[cfg(feature = "el2")]
8640read_write_sysreg!(cntvoff_el2, u64: CntvoffEl2, safe_read, safe_write, fake::SYSREGS);
8641#[cfg(feature = "el1")]
8642read_write_sysreg!(contextidr_el1, u64: ContextidrEl1, safe_read, safe_write, fake::SYSREGS);
8643#[cfg(feature = "el2")]
8644read_write_sysreg!(contextidr_el2: s3_4_c13_c0_1, u64: ContextidrEl2, safe_read, safe_write, fake::SYSREGS);
8645#[cfg(feature = "el1")]
8646read_write_sysreg!(cpacr_el1, u64: CpacrEl1, safe_read, fake::SYSREGS);
8647#[cfg(feature = "el2")]
8648read_write_sysreg!(cptr_el2, u64: CptrEl2, safe_read, fake::SYSREGS);
8649#[cfg(feature = "el3")]
8650read_write_sysreg!(cptr_el3, u64: CptrEl3, safe_read, fake::SYSREGS);
8651#[cfg(feature = "el1")]
8652read_write_sysreg!(csselr_el1, u64: CsselrEl1, safe_read, safe_write, fake::SYSREGS);
8653read_sysreg!(ctr_el0, u64: CtrEl0, safe, fake::SYSREGS);
8654#[cfg(feature = "el1")]
8655read_write_sysreg!(disr_el1: s3_0_c12_c1_1, u64: DisrEl1, safe_read, safe_write, fake::SYSREGS);
8656read_write_sysreg!(dit: s3_3_c4_c2_5, u64: Dit, safe_read, safe_write, fake::SYSREGS);
8657#[cfg(feature = "el1")]
8658read_write_sysreg!(elr_el1, u64: ElrEl1, safe_read, fake::SYSREGS);
8659#[cfg(feature = "el2")]
8660read_write_sysreg!(elr_el2, u64: ElrEl2, safe_read, fake::SYSREGS);
8661#[cfg(feature = "el1")]
8662read_write_sysreg!(esr_el1, u64: EsrEl1, safe_read, safe_write, fake::SYSREGS);
8663#[cfg(feature = "el2")]
8664read_write_sysreg!(esr_el2, u64: EsrEl2, safe_read, safe_write, fake::SYSREGS);
8665#[cfg(feature = "el3")]
8666read_write_sysreg!(esr_el3, u64: EsrEl3, safe_read, safe_write, fake::SYSREGS);
8667#[cfg(feature = "el1")]
8668read_write_sysreg!(far_el1, u64: FarEl1, safe_read, fake::SYSREGS);
8669#[cfg(feature = "el2")]
8670read_write_sysreg!(far_el2, u64: FarEl2, safe_read, fake::SYSREGS);
8671#[cfg(feature = "el1")]
8672read_write_sysreg!(gcr_el1: s3_0_c1_c0_6, u64: GcrEl1, safe_read, fake::SYSREGS);
8673#[cfg(feature = "el1")]
8674read_write_sysreg!(gcscr_el1: s3_0_c2_c5_0, u64: GcscrEl1, safe_read, fake::SYSREGS);
8675#[cfg(feature = "el2")]
8676read_write_sysreg!(gcscr_el2: s3_4_c2_c5_0, u64: GcscrEl2, safe_read, fake::SYSREGS);
8677#[cfg(feature = "el2")]
8678read_write_sysreg!(hacr_el2, u64, safe_read, fake::SYSREGS);
8679#[cfg(feature = "el2")]
8680read_write_sysreg!(hcrx_el2: s3_4_c1_c2_2, u64: HcrxEl2, safe_read, fake::SYSREGS);
8681#[cfg(feature = "el2")]
8682read_write_sysreg!(hcr_el2, u64: HcrEl2, safe_read, fake::SYSREGS);
8683#[cfg(feature = "el2")]
8684read_write_sysreg!(hdfgrtr2_el2: s3_4_c3_c1_0, u64: Hdfgrtr2El2, safe_read, fake::SYSREGS);
8685#[cfg(feature = "el2")]
8686read_write_sysreg!(hdfgwtr2_el2: s3_4_c3_c1_1, u64: Hdfgwtr2El2, safe_read, fake::SYSREGS);
8687#[cfg(feature = "el2")]
8688read_write_sysreg!(hfgitr2_el2: s3_4_c3_c1_7, u64: Hfgitr2El2, safe_read, fake::SYSREGS);
8689#[cfg(feature = "el2")]
8690read_write_sysreg!(hfgrtr2_el2: s3_4_c3_c1_2, u64: Hfgrtr2El2, safe_read, fake::SYSREGS);
8691#[cfg(feature = "el2")]
8692read_write_sysreg!(hfgwtr2_el2: s3_4_c3_c1_3, u64: Hfgwtr2El2, safe_read, fake::SYSREGS);
8693#[cfg(feature = "el2")]
8694read_write_sysreg!(hfgwtr_el2: s3_4_c1_c1_5, u64: HfgwtrEl2, safe_read, fake::SYSREGS);
8695#[cfg(feature = "el2")]
8696read_write_sysreg!(hpfar_el2, u64: HpfarEl2, safe_read, fake::SYSREGS);
8697#[cfg(feature = "el2")]
8698read_write_sysreg!(hstr_el2, u64, safe_read, safe_write, fake::SYSREGS);
8699#[cfg(feature = "el1")]
8700read_write_sysreg!(icc_sre_el1: s3_0_c12_c12_5, u64: IccSreEl1, safe_read, fake::SYSREGS);
8701#[cfg(feature = "el2")]
8702read_write_sysreg!(icc_sre_el2: s3_4_c12_c9_5, u64: IccSreEl2, safe_read, fake::SYSREGS);
8703#[cfg(feature = "el3")]
8704read_write_sysreg! {
8705 icc_sre_el3: s3_6_c12_c12_5, u64: IccSreEl3, safe_read, fake::SYSREGS
8709}
8710#[cfg(feature = "el2")]
8711read_write_sysreg!(ich_hcr_el2: s3_4_c12_c11_0, u64: IchHcrEl2, safe_read, fake::SYSREGS);
8712#[cfg(feature = "el2")]
8713read_write_sysreg!(ich_vmcr_el2: s3_4_c12_c11_7, u64: IchVmcrEl2, safe_read, safe_write, fake::SYSREGS);
8714#[cfg(feature = "el1")]
8715read_sysreg!(id_aa64dfr0_el1, u64: IdAa64dfr0El1, safe, fake::SYSREGS);
8716#[cfg(feature = "el1")]
8717read_sysreg!(id_aa64dfr1_el1, u64: IdAa64dfr1El1, safe, fake::SYSREGS);
8718#[cfg(feature = "el1")]
8719read_sysreg!(id_aa64mmfr0_el1, u64: IdAa64mmfr0El1, safe, fake::SYSREGS);
8720#[cfg(feature = "el1")]
8721read_sysreg!(id_aa64mmfr1_el1, u64: IdAa64mmfr1El1, safe, fake::SYSREGS);
8722#[cfg(feature = "el1")]
8723read_sysreg!(id_aa64mmfr2_el1, u64: IdAa64mmfr2El1, safe, fake::SYSREGS);
8724#[cfg(feature = "el1")]
8725read_sysreg!(id_aa64mmfr3_el1, u64: IdAa64mmfr3El1, safe, fake::SYSREGS);
8726#[cfg(feature = "el1")]
8727read_sysreg!(id_aa64pfr0_el1, u64: IdAa64pfr0El1, safe, fake::SYSREGS);
8728#[cfg(feature = "el1")]
8729read_sysreg!(id_aa64pfr1_el1, u64: IdAa64pfr1El1, safe, fake::SYSREGS);
8730#[cfg(feature = "el1")]
8731read_sysreg!(id_aa64smfr0_el1, u64: IdAa64smfr0El1, safe, fake::SYSREGS);
8732#[cfg(feature = "el1")]
8733read_sysreg!(isr_el1, u64: IsrEl1, safe, fake::SYSREGS);
8734#[cfg(feature = "el1")]
8735read_write_sysreg!(mair_el1, u64: MairEl1, safe_read, fake::SYSREGS);
8736#[cfg(feature = "el2")]
8737read_write_sysreg!(mair_el2, u64: MairEl2, safe_read, fake::SYSREGS);
8738#[cfg(feature = "el3")]
8739read_write_sysreg! {
8740 mair_el3, u64: MairEl3, safe_read, fake::SYSREGS
8744}
8745#[cfg(feature = "el1")]
8746read_write_sysreg!(mdccint_el1, u64: MdccintEl1, safe_read, safe_write, fake::SYSREGS);
8747#[cfg(feature = "el2")]
8748read_write_sysreg!(mdcr_el2, u64: MdcrEl2, safe_read, safe_write, fake::SYSREGS);
8749#[cfg(feature = "el3")]
8750read_write_sysreg!(mdcr_el3, u64: MdcrEl3, safe_read, safe_write, fake::SYSREGS);
8751#[cfg(feature = "el1")]
8752read_write_sysreg!(mdscr_el1, u64: MdscrEl1, safe_read, safe_write, fake::SYSREGS);
8753#[cfg(feature = "el1")]
8754read_sysreg!(midr_el1, u64: MidrEl1, safe, fake::SYSREGS);
8755#[cfg(feature = "el2")]
8756read_write_sysreg!(mpam2_el2: s3_4_c10_c5_0, u64: Mpam2El2, safe_read, fake::SYSREGS);
8757#[cfg(feature = "el3")]
8758read_write_sysreg!(mpam3_el3: s3_6_c10_c5_0, u64: Mpam3El3, safe_read, fake::SYSREGS);
8759#[cfg(feature = "el2")]
8760read_write_sysreg!(mpamhcr_el2: s3_4_c10_c4_0, u64: MpamhcrEl2, safe_read, fake::SYSREGS);
8761#[cfg(feature = "el1")]
8762read_sysreg!(mpamidr_el1: s3_0_c10_c4_4, u64: MpamidrEl1, safe, fake::SYSREGS);
8763#[cfg(feature = "el2")]
8764read_write_sysreg!(mpamvpm0_el2: s3_4_c10_c6_0, u64: Mpamvpm0El2, safe_read, fake::SYSREGS);
8765#[cfg(feature = "el2")]
8766read_write_sysreg!(mpamvpm1_el2: s3_4_c10_c6_1, u64: Mpamvpm1El2, safe_read, fake::SYSREGS);
8767#[cfg(feature = "el2")]
8768read_write_sysreg!(mpamvpm2_el2: s3_4_c10_c6_2, u64: Mpamvpm2El2, safe_read, fake::SYSREGS);
8769#[cfg(feature = "el2")]
8770read_write_sysreg!(mpamvpm3_el2: s3_4_c10_c6_3, u64: Mpamvpm3El2, safe_read, fake::SYSREGS);
8771#[cfg(feature = "el2")]
8772read_write_sysreg!(mpamvpm4_el2: s3_4_c10_c6_4, u64: Mpamvpm4El2, safe_read, fake::SYSREGS);
8773#[cfg(feature = "el2")]
8774read_write_sysreg!(mpamvpm5_el2: s3_4_c10_c6_5, u64: Mpamvpm5El2, safe_read, fake::SYSREGS);
8775#[cfg(feature = "el2")]
8776read_write_sysreg!(mpamvpm6_el2: s3_4_c10_c6_6, u64: Mpamvpm6El2, safe_read, fake::SYSREGS);
8777#[cfg(feature = "el2")]
8778read_write_sysreg!(mpamvpm7_el2: s3_4_c10_c6_7, u64: Mpamvpm7El2, safe_read, fake::SYSREGS);
8779#[cfg(feature = "el2")]
8780read_write_sysreg!(mpamvpmv_el2: s3_4_c10_c4_1, u64: MpamvpmvEl2, safe_read, fake::SYSREGS);
8781#[cfg(feature = "el1")]
8782read_sysreg!(mpidr_el1, u64: MpidrEl1, safe, fake::SYSREGS);
8783#[cfg(feature = "el1")]
8784read_write_sysreg!(par_el1, u64: ParEl1, safe_read, fake::SYSREGS);
8785read_write_sysreg!(pmcr_el0: s3_3_c9_c12_0, u64: PmcrEl0, safe_read, safe_write, fake::SYSREGS);
8786#[cfg(feature = "el1")]
8787read_write_sysreg!(rgsr_el1: s3_0_c1_c0_5, u64: RgsrEl1, safe_read, safe_write, fake::SYSREGS);
8788#[cfg(feature = "el3")]
8789read_write_sysreg!(scr_el3, u64: ScrEl3, safe_read, fake::SYSREGS);
8790#[cfg(feature = "el1")]
8791read_write_sysreg!(sctlr_el1, u64: SctlrEl1, safe_read, fake::SYSREGS);
8792#[cfg(feature = "el2")]
8793read_write_sysreg!(sctlr_el2, u64: SctlrEl2, safe_read, fake::SYSREGS);
8794#[cfg(feature = "el3")]
8795read_write_sysreg! {
8796 sctlr_el3, u64: SctlrEl3, safe_read, fake::SYSREGS
8800}
8801#[cfg(feature = "el3")]
8802read_write_sysreg!(smcr_el3: s3_6_c1_c2_6, u64: SmcrEl3, safe_read, fake::SYSREGS);
8803#[cfg(feature = "el1")]
8804read_write_sysreg!(spsr_el1, u64: SpsrEl1, safe_read, fake::SYSREGS);
8805#[cfg(feature = "el2")]
8806read_write_sysreg!(spsr_el2, u64: SpsrEl2, safe_read, fake::SYSREGS);
8807#[cfg(feature = "el3")]
8808read_write_sysreg!(spsr_el3, u64: SpsrEl3, safe_read, fake::SYSREGS);
8809#[cfg(feature = "el1")]
8810read_write_sysreg!(sp_el1, u64: SpEl1, safe_read, fake::SYSREGS);
8811#[cfg(feature = "el2")]
8812read_write_sysreg!(sp_el2, u64: SpEl2, safe_read, fake::SYSREGS);
8813#[cfg(feature = "el1")]
8814read_write_sysreg!(tcr2_el1: s3_0_c2_c0_3, u64: Tcr2El1, safe_read, fake::SYSREGS);
8815#[cfg(feature = "el2")]
8816read_write_sysreg!(tcr2_el2: s3_4_c2_c0_3, u64: Tcr2El2, safe_read, fake::SYSREGS);
8817#[cfg(feature = "el1")]
8818read_write_sysreg!(tcr_el1, u64: TcrEl1, safe_read, fake::SYSREGS);
8819#[cfg(feature = "el2")]
8820read_write_sysreg!(tcr_el2, u64: TcrEl2, safe_read, fake::SYSREGS);
8821#[cfg(feature = "el3")]
8822read_write_sysreg! {
8823 tcr_el3, u64: TcrEl3, safe_read, fake::SYSREGS
8827}
8828#[cfg(feature = "el1")]
8829read_write_sysreg!(tfsre0_el1: s3_0_c5_c6_1, u64: Tfsre0El1, safe_read, safe_write, fake::SYSREGS);
8830#[cfg(feature = "el1")]
8831read_write_sysreg!(tfsr_el1: s3_0_c5_c6_0, u64: TfsrEl1, safe_read, safe_write, fake::SYSREGS);
8832#[cfg(feature = "el2")]
8833read_write_sysreg!(tfsr_el2: s3_4_c5_c6_0, u64: TfsrEl2, safe_read, safe_write, fake::SYSREGS);
8834read_write_sysreg!(tpidrro_el0, u64: TpidrroEl0, safe_read, fake::SYSREGS);
8835read_write_sysreg!(tpidr_el0, u64: TpidrEl0, safe_read, fake::SYSREGS);
8836#[cfg(feature = "el1")]
8837read_write_sysreg!(tpidr_el1, u64: TpidrEl1, safe_read, fake::SYSREGS);
8838#[cfg(feature = "el2")]
8839read_write_sysreg!(tpidr_el2, u64: TpidrEl2, safe_read, fake::SYSREGS);
8840#[cfg(feature = "el1")]
8841read_write_sysreg! {
8842 ttbr0_el1, u64: Ttbr0El1, safe_read, fake::SYSREGS
8846}
8847#[cfg(feature = "el2")]
8848read_write_sysreg! {
8849 ttbr0_el2, u64: Ttbr0El2, safe_read, fake::SYSREGS
8853}
8854#[cfg(feature = "el3")]
8855read_write_sysreg! {
8856 ttbr0_el3, u64: Ttbr0El3, safe_read, fake::SYSREGS
8860}
8861#[cfg(feature = "el1")]
8862read_write_sysreg! {
8863 ttbr1_el1, u64: Ttbr1El1, safe_read, fake::SYSREGS
8867}
8868#[cfg(feature = "el2")]
8869read_write_sysreg! {
8870 ttbr1_el2, u64: Ttbr1El2, safe_read, fake::SYSREGS
8874}
8875#[cfg(feature = "el1")]
8876read_write_sysreg! {
8877 vbar_el1, u64: VbarEl1, safe_read, fake::SYSREGS
8881}
8882#[cfg(feature = "el2")]
8883read_write_sysreg! {
8884 vbar_el2, u64: VbarEl2, safe_read, fake::SYSREGS
8888}
8889#[cfg(feature = "el2")]
8890read_write_sysreg!(vdisr_el2: s3_4_c12_c1_1, u64: VdisrEl2, safe_read, safe_write, fake::SYSREGS);
8891#[cfg(feature = "el2")]
8892read_write_sysreg!(vmpidr_el2, u64: VmpidrEl2, safe_read, safe_write, fake::SYSREGS);
8893#[cfg(feature = "el2")]
8894read_write_sysreg!(vpidr_el2, u64: VpidrEl2, safe_read, safe_write, fake::SYSREGS);
8895#[cfg(feature = "el2")]
8896read_write_sysreg!(vsesr_el2: s3_4_c5_c2_3, u64: VsesrEl2, safe_read, safe_write, fake::SYSREGS);
8897#[cfg(feature = "el2")]
8898read_write_sysreg!(vtcr_el2, u64: VtcrEl2, safe_read, fake::SYSREGS);
8899#[cfg(feature = "el2")]
8900read_write_sysreg! {
8901 vttbr_el2, u64: VttbrEl2, safe_read, fake::SYSREGS
8905}
8906#[cfg(feature = "el3")]
8907read_write_sysreg!(zcr_el3: s3_6_c1_c2_0, u64: ZcrEl3, safe_read, fake::SYSREGS);