1#![cfg_attr(not(any(test, feature = "fakes")), no_std)]
7#![cfg_attr(docsrs, feature(doc_cfg))]
8
9#[cfg(all(not(any(test, feature = "fakes")), target_arch = "arm"))]
10mod aarch32;
11#[cfg(all(not(any(test, feature = "fakes")), target_arch = "aarch64"))]
12mod aarch64;
13#[cfg(any(test, feature = "fakes"))]
14pub mod fake;
15mod macros;
16mod manual;
17
18use bitflags::bitflags;
19pub use manual::*;
20#[doc(hidden)]
21pub use paste as _paste;
22
23bitflags! {
24 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
26 #[repr(transparent)]
27 pub struct Amcfgr: u32 {
28 const HDBG = 1 << 24;
30 }
31}
32
33impl Amcfgr {
34 pub const N_SHIFT: u32 = 0;
36 pub const N_MASK: u32 = 0b11111111;
38 pub const SIZE_SHIFT: u32 = 8;
40 pub const SIZE_MASK: u32 = 0b111111;
42 pub const HDBG_SHIFT: u32 = 24;
44 pub const NCG_SHIFT: u32 = 28;
46 pub const NCG_MASK: u32 = 0b1111;
48
49 pub const fn n(self) -> u8 {
51 ((self.bits() >> Self::N_SHIFT) & 0b11111111) as u8
52 }
53
54 pub const fn size(self) -> u8 {
56 ((self.bits() >> Self::SIZE_SHIFT) & 0b111111) as u8
57 }
58
59 pub const fn ncg(self) -> u8 {
61 ((self.bits() >> Self::NCG_SHIFT) & 0b1111) as u8
62 }
63}
64
65bitflags! {
66 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
68 #[repr(transparent)]
69 pub struct Amcgcr: u32 {
70 }
71}
72
73impl Amcgcr {
74 pub const CG0NC_SHIFT: u32 = 0;
76 pub const CG0NC_MASK: u32 = 0b11111111;
78 pub const CG1NC_SHIFT: u32 = 8;
80 pub const CG1NC_MASK: u32 = 0b11111111;
82
83 pub const fn cg0nc(self) -> u8 {
85 ((self.bits() >> Self::CG0NC_SHIFT) & 0b11111111) as u8
86 }
87
88 pub const fn cg1nc(self) -> u8 {
90 ((self.bits() >> Self::CG1NC_SHIFT) & 0b11111111) as u8
91 }
92}
93
94bitflags! {
95 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
97 #[repr(transparent)]
98 pub struct Amcntenclr0: u32 {
99 const P0 = 1 << 0;
101 const P1 = 1 << 1;
103 const P2 = 1 << 2;
105 const P3 = 1 << 3;
107 }
108}
109
110impl Amcntenclr0 {
111 pub const P_SHIFT: u32 = 0;
113}
114
115bitflags! {
116 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
118 #[repr(transparent)]
119 pub struct Amcntenclr1: u32 {
120 const P0 = 1 << 0;
122 const P1 = 1 << 1;
124 const P2 = 1 << 2;
126 const P3 = 1 << 3;
128 const P4 = 1 << 4;
130 const P5 = 1 << 5;
132 const P6 = 1 << 6;
134 const P7 = 1 << 7;
136 const P8 = 1 << 8;
138 const P9 = 1 << 9;
140 const P10 = 1 << 10;
142 const P11 = 1 << 11;
144 const P12 = 1 << 12;
146 const P13 = 1 << 13;
148 const P14 = 1 << 14;
150 const P15 = 1 << 15;
152 }
153}
154
155impl Amcntenclr1 {
156 pub const P_SHIFT: u32 = 0;
158}
159
160bitflags! {
161 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
163 #[repr(transparent)]
164 pub struct Amcntenset0: u32 {
165 const P0 = 1 << 0;
167 const P1 = 1 << 1;
169 const P2 = 1 << 2;
171 const P3 = 1 << 3;
173 }
174}
175
176impl Amcntenset0 {
177 pub const P_SHIFT: u32 = 0;
179}
180
181bitflags! {
182 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
184 #[repr(transparent)]
185 pub struct Amcntenset1: u32 {
186 const P0 = 1 << 0;
188 const P1 = 1 << 1;
190 const P2 = 1 << 2;
192 const P3 = 1 << 3;
194 const P4 = 1 << 4;
196 const P5 = 1 << 5;
198 const P6 = 1 << 6;
200 const P7 = 1 << 7;
202 const P8 = 1 << 8;
204 const P9 = 1 << 9;
206 const P10 = 1 << 10;
208 const P11 = 1 << 11;
210 const P12 = 1 << 12;
212 const P13 = 1 << 13;
214 const P14 = 1 << 14;
216 const P15 = 1 << 15;
218 }
219}
220
221impl Amcntenset1 {
222 pub const P_SHIFT: u32 = 0;
224}
225
226bitflags! {
227 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
229 #[repr(transparent)]
230 pub struct Amcr: u32 {
231 const HDBG = 1 << 10;
233 const CG1RZ = 1 << 17;
235 }
236}
237
238impl Amcr {
239 pub const HDBG_SHIFT: u32 = 10;
241 pub const CG1RZ_SHIFT: u32 = 17;
243}
244
245bitflags! {
246 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
248 #[repr(transparent)]
249 pub struct Amuserenr: u32 {
250 const EN = 1 << 0;
252 }
253}
254
255impl Amuserenr {
256 pub const EN_SHIFT: u32 = 0;
258}
259
260#[cfg(feature = "el1")]
261bitflags! {
262 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
264 #[repr(transparent)]
265 pub struct ApiakeyhiEl1: u64 {
266 }
267}
268
269#[cfg(feature = "el1")]
270impl ApiakeyhiEl1 {
271 pub const APIAKEYHI_SHIFT: u32 = 0;
273 pub const APIAKEYHI_MASK: u64 =
275 0b1111111111111111111111111111111111111111111111111111111111111111;
276
277 pub const fn apiakeyhi(self) -> u64 {
279 ((self.bits() >> Self::APIAKEYHI_SHIFT)
280 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
281 }
282}
283
284#[cfg(feature = "el1")]
285bitflags! {
286 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
288 #[repr(transparent)]
289 pub struct ApiakeyloEl1: u64 {
290 }
291}
292
293#[cfg(feature = "el1")]
294impl ApiakeyloEl1 {
295 pub const APIAKEYLO_SHIFT: u32 = 0;
297 pub const APIAKEYLO_MASK: u64 =
299 0b1111111111111111111111111111111111111111111111111111111111111111;
300
301 pub const fn apiakeylo(self) -> u64 {
303 ((self.bits() >> Self::APIAKEYLO_SHIFT)
304 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
305 }
306}
307
308bitflags! {
309 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
311 #[repr(transparent)]
312 pub struct Ccsidr: u32 {
313 }
314}
315
316impl Ccsidr {
317 pub const LINESIZE_SHIFT: u32 = 0;
319 pub const LINESIZE_MASK: u32 = 0b111;
321 pub const NUMSETS_SHIFT: u32 = 13;
323 pub const NUMSETS_MASK: u32 = 0b111111111111111;
325
326 pub const fn linesize(self) -> u8 {
328 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
329 }
330
331 pub const fn numsets(self) -> u16 {
333 ((self.bits() >> Self::NUMSETS_SHIFT) & 0b111111111111111) as u16
334 }
335}
336
337bitflags! {
338 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
340 #[repr(transparent)]
341 pub struct Ccsidr2: u32 {
342 }
343}
344
345impl Ccsidr2 {
346 pub const NUMSETS_SHIFT: u32 = 0;
348 pub const NUMSETS_MASK: u32 = 0b111111111111111111111111;
350
351 pub const fn numsets(self) -> u32 {
353 ((self.bits() >> Self::NUMSETS_SHIFT) & 0b111111111111111111111111) as u32
354 }
355}
356
357#[cfg(feature = "el1")]
358bitflags! {
359 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
361 #[repr(transparent)]
362 pub struct CcsidrEl1: u64 {
363 }
364}
365
366#[cfg(feature = "el1")]
367impl CcsidrEl1 {
368 pub const LINESIZE_SHIFT: u32 = 0;
370 pub const LINESIZE_MASK: u64 = 0b111;
372
373 pub const fn linesize(self) -> u8 {
375 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
376 }
377}
378
379bitflags! {
380 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
382 #[repr(transparent)]
383 pub struct Clidr: u32 {
384 }
385}
386
387impl Clidr {
388 pub const CTYPE_SHIFT: u32 = 0;
390 pub const CTYPE_MASK: u32 = 0b111;
392 pub const LOUIS_SHIFT: u32 = 21;
394 pub const LOUIS_MASK: u32 = 0b111;
396 pub const LOC_SHIFT: u32 = 24;
398 pub const LOC_MASK: u32 = 0b111;
400 pub const LOUU_SHIFT: u32 = 27;
402 pub const LOUU_MASK: u32 = 0b111;
404 pub const ICB_SHIFT: u32 = 30;
406 pub const ICB_MASK: u32 = 0b11;
408
409 pub const fn ctype(self, n: u32) -> u8 {
411 assert!(n >= 1 && n < 8);
412 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8
413 }
414
415 pub const fn louis(self) -> u8 {
417 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
418 }
419
420 pub const fn loc(self) -> u8 {
422 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
423 }
424
425 pub const fn louu(self) -> u8 {
427 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
428 }
429
430 pub const fn icb(self) -> u8 {
432 ((self.bits() >> Self::ICB_SHIFT) & 0b11) as u8
433 }
434}
435
436#[cfg(feature = "el1")]
437bitflags! {
438 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
442 #[repr(transparent)]
443 pub struct ClidrEl1: u64 {
444 }
445}
446
447#[cfg(feature = "el1")]
448impl ClidrEl1 {
449 pub const CTYPE_SHIFT: u32 = 0;
451 pub const CTYPE_MASK: u64 = 0b111;
453 pub const LOUIS_SHIFT: u32 = 21;
455 pub const LOUIS_MASK: u64 = 0b111;
457 pub const LOC_SHIFT: u32 = 24;
459 pub const LOC_MASK: u64 = 0b111;
461 pub const LOUU_SHIFT: u32 = 27;
463 pub const LOUU_MASK: u64 = 0b111;
465 pub const ICB_SHIFT: u32 = 30;
467 pub const ICB_MASK: u64 = 0b111;
469 pub const TTYPE_SHIFT: u32 = 33;
471 pub const TTYPE_MASK: u64 = 0b11;
473
474 pub fn ctype(self, n: u32) -> crate::manual::CacheType {
476 assert!(n >= 1 && n < 8);
477 crate::manual::CacheType::try_from(
478 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8,
479 )
480 .unwrap()
481 }
482
483 pub const fn louis(self) -> u8 {
487 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
488 }
489
490 pub const fn loc(self) -> u8 {
494 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
495 }
496
497 pub const fn louu(self) -> u8 {
501 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
502 }
503
504 pub const fn icb(self) -> u8 {
508 ((self.bits() >> Self::ICB_SHIFT) & 0b111) as u8
509 }
510
511 pub const fn ttype(self, n: u32) -> u8 {
513 assert!(n >= 1 && n < 8);
514 ((self.bits() >> (Self::TTYPE_SHIFT + (n - 1) * 2)) & 0b11) as u8
515 }
516}
517
518bitflags! {
519 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
521 #[repr(transparent)]
522 pub struct Cntfrq: u32 {
523 }
524}
525
526impl Cntfrq {
527 pub const CLOCKFREQ_SHIFT: u32 = 0;
529 pub const CLOCKFREQ_MASK: u32 = 0b11111111111111111111111111111111;
531
532 pub const fn clockfreq(self) -> u32 {
534 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
535 }
536}
537
538bitflags! {
539 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
541 #[repr(transparent)]
542 pub struct CntfrqEl0: u64 {
543 }
544}
545
546impl CntfrqEl0 {
547 pub const CLOCKFREQ_SHIFT: u32 = 0;
549 pub const CLOCKFREQ_MASK: u64 = 0b11111111111111111111111111111111;
551
552 pub const fn clockfreq(self) -> u32 {
554 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
555 }
556}
557
558bitflags! {
559 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
561 #[repr(transparent)]
562 pub struct Cnthctl: u32 {
563 const PL1PCTEN = 1 << 0;
565 const PL1PCEN = 1 << 1;
567 const EVNTEN = 1 << 2;
569 const EVNTDIR = 1 << 3;
571 const EVNTIS = 1 << 17;
573 }
574}
575
576impl Cnthctl {
577 pub const PL1PCTEN_SHIFT: u32 = 0;
579 pub const PL1PCEN_SHIFT: u32 = 1;
581 pub const EVNTEN_SHIFT: u32 = 2;
583 pub const EVNTDIR_SHIFT: u32 = 3;
585 pub const EVNTI_SHIFT: u32 = 4;
587 pub const EVNTI_MASK: u32 = 0b1111;
589 pub const EVNTIS_SHIFT: u32 = 17;
591
592 pub const fn evnti(self) -> u8 {
594 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
595 }
596}
597
598#[cfg(feature = "el2")]
599bitflags! {
600 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
602 #[repr(transparent)]
603 pub struct CnthctlEl2: u64 {
604 const EL0PCTEN = 1 << 0;
606 const EL0VCTEN = 1 << 1;
608 const EL1PCEN = 1 << 1;
610 const EVNTEN = 1 << 2;
612 const EVNTDIR = 1 << 3;
614 const EL0VTEN = 1 << 8;
616 const EL0PTEN = 1 << 9;
618 const EL1PTEN = 1 << 11;
620 const ECV = 1 << 12;
622 const EL1TVT = 1 << 13;
624 const EL1TVCT = 1 << 14;
626 const EL1NVPCT = 1 << 15;
628 const EL1NVVCT = 1 << 16;
630 const EVNTIS = 1 << 17;
632 const CNTVMASK = 1 << 18;
634 const CNTPMASK = 1 << 19;
636 }
637}
638
639#[cfg(feature = "el2")]
640impl CnthctlEl2 {
641 pub const EL0PCTEN_SHIFT: u32 = 0;
643 pub const EL0VCTEN_SHIFT: u32 = 1;
645 pub const EL1PCEN_SHIFT: u32 = 1;
647 pub const EVNTEN_SHIFT: u32 = 2;
649 pub const EVNTDIR_SHIFT: u32 = 3;
651 pub const EVNTI_SHIFT: u32 = 4;
653 pub const EVNTI_MASK: u64 = 0b1111;
655 pub const EL0VTEN_SHIFT: u32 = 8;
657 pub const EL0PTEN_SHIFT: u32 = 9;
659 pub const EL1PTEN_SHIFT: u32 = 11;
661 pub const ECV_SHIFT: u32 = 12;
663 pub const EL1TVT_SHIFT: u32 = 13;
665 pub const EL1TVCT_SHIFT: u32 = 14;
667 pub const EL1NVPCT_SHIFT: u32 = 15;
669 pub const EL1NVVCT_SHIFT: u32 = 16;
671 pub const EVNTIS_SHIFT: u32 = 17;
673 pub const CNTVMASK_SHIFT: u32 = 18;
675 pub const CNTPMASK_SHIFT: u32 = 19;
677
678 pub const fn evnti(self) -> u8 {
680 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
681 }
682}
683
684bitflags! {
685 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
687 #[repr(transparent)]
688 pub struct CnthpsCtl: u32 {
689 const ENABLE = 1 << 0;
691 const IMASK = 1 << 1;
693 const ISTATUS = 1 << 2;
695 }
696}
697
698impl CnthpsCtl {
699 pub const ENABLE_SHIFT: u32 = 0;
701 pub const IMASK_SHIFT: u32 = 1;
703 pub const ISTATUS_SHIFT: u32 = 2;
705}
706
707bitflags! {
708 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
710 #[repr(transparent)]
711 pub struct CnthpsCval: u64 {
712 }
713}
714
715impl CnthpsCval {
716 pub const COMPAREVALUE_SHIFT: u32 = 0;
718 pub const COMPAREVALUE_MASK: u64 =
720 0b1111111111111111111111111111111111111111111111111111111111111111;
721
722 pub const fn comparevalue(self) -> u64 {
724 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
725 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
726 }
727}
728
729bitflags! {
730 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
732 #[repr(transparent)]
733 pub struct CnthpsTval: u32 {
734 }
735}
736
737impl CnthpsTval {
738 pub const TIMERVALUE_SHIFT: u32 = 0;
740 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
742
743 pub const fn timervalue(self) -> u32 {
745 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
746 }
747}
748
749bitflags! {
750 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
752 #[repr(transparent)]
753 pub struct CnthpCtl: u32 {
754 const ENABLE = 1 << 0;
756 const IMASK = 1 << 1;
758 const ISTATUS = 1 << 2;
760 }
761}
762
763impl CnthpCtl {
764 pub const ENABLE_SHIFT: u32 = 0;
766 pub const IMASK_SHIFT: u32 = 1;
768 pub const ISTATUS_SHIFT: u32 = 2;
770}
771
772bitflags! {
773 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
775 #[repr(transparent)]
776 pub struct CnthpCval: u64 {
777 }
778}
779
780impl CnthpCval {
781 pub const COMPAREVALUE_SHIFT: u32 = 0;
783 pub const COMPAREVALUE_MASK: u64 =
785 0b1111111111111111111111111111111111111111111111111111111111111111;
786
787 pub const fn comparevalue(self) -> u64 {
789 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
790 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
791 }
792}
793
794bitflags! {
795 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
797 #[repr(transparent)]
798 pub struct CnthpTval: u32 {
799 }
800}
801
802impl CnthpTval {
803 pub const TIMERVALUE_SHIFT: u32 = 0;
805 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
807
808 pub const fn timervalue(self) -> u32 {
810 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
811 }
812}
813
814bitflags! {
815 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
817 #[repr(transparent)]
818 pub struct CnthvsCtl: u32 {
819 const ENABLE = 1 << 0;
821 const IMASK = 1 << 1;
823 const ISTATUS = 1 << 2;
825 }
826}
827
828impl CnthvsCtl {
829 pub const ENABLE_SHIFT: u32 = 0;
831 pub const IMASK_SHIFT: u32 = 1;
833 pub const ISTATUS_SHIFT: u32 = 2;
835}
836
837bitflags! {
838 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
840 #[repr(transparent)]
841 pub struct CnthvsCval: u64 {
842 }
843}
844
845impl CnthvsCval {
846 pub const COMPAREVALUE_SHIFT: u32 = 0;
848 pub const COMPAREVALUE_MASK: u64 =
850 0b1111111111111111111111111111111111111111111111111111111111111111;
851
852 pub const fn comparevalue(self) -> u64 {
854 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
855 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
856 }
857}
858
859bitflags! {
860 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
862 #[repr(transparent)]
863 pub struct CnthvsTval: u32 {
864 }
865}
866
867impl CnthvsTval {
868 pub const TIMERVALUE_SHIFT: u32 = 0;
870 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
872
873 pub const fn timervalue(self) -> u32 {
875 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
876 }
877}
878
879bitflags! {
880 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
882 #[repr(transparent)]
883 pub struct CnthvCtl: u32 {
884 const ENABLE = 1 << 0;
886 const IMASK = 1 << 1;
888 const ISTATUS = 1 << 2;
890 }
891}
892
893impl CnthvCtl {
894 pub const ENABLE_SHIFT: u32 = 0;
896 pub const IMASK_SHIFT: u32 = 1;
898 pub const ISTATUS_SHIFT: u32 = 2;
900}
901
902bitflags! {
903 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
905 #[repr(transparent)]
906 pub struct CnthvCval: u64 {
907 }
908}
909
910impl CnthvCval {
911 pub const COMPAREVALUE_SHIFT: u32 = 0;
913 pub const COMPAREVALUE_MASK: u64 =
915 0b1111111111111111111111111111111111111111111111111111111111111111;
916
917 pub const fn comparevalue(self) -> u64 {
919 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
920 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
921 }
922}
923
924bitflags! {
925 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
927 #[repr(transparent)]
928 pub struct CnthvTval: u32 {
929 }
930}
931
932impl CnthvTval {
933 pub const TIMERVALUE_SHIFT: u32 = 0;
935 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
937
938 pub const fn timervalue(self) -> u32 {
940 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
941 }
942}
943
944bitflags! {
945 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
947 #[repr(transparent)]
948 pub struct Cntkctl: u32 {
949 const PL0PCTEN = 1 << 0;
951 const PL0VCTEN = 1 << 1;
953 const EVNTEN = 1 << 2;
955 const EVNTDIR = 1 << 3;
957 const PL0VTEN = 1 << 8;
959 const PL0PTEN = 1 << 9;
961 const EVNTIS = 1 << 17;
963 }
964}
965
966impl Cntkctl {
967 pub const PL0PCTEN_SHIFT: u32 = 0;
969 pub const PL0VCTEN_SHIFT: u32 = 1;
971 pub const EVNTEN_SHIFT: u32 = 2;
973 pub const EVNTDIR_SHIFT: u32 = 3;
975 pub const EVNTI_SHIFT: u32 = 4;
977 pub const EVNTI_MASK: u32 = 0b1111;
979 pub const PL0VTEN_SHIFT: u32 = 8;
981 pub const PL0PTEN_SHIFT: u32 = 9;
983 pub const EVNTIS_SHIFT: u32 = 17;
985
986 pub const fn evnti(self) -> u8 {
988 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
989 }
990}
991
992bitflags! {
993 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
995 #[repr(transparent)]
996 pub struct Cntpct: u64 {
997 }
998}
999
1000impl Cntpct {
1001 pub const PHYSICALCOUNT_SHIFT: u32 = 0;
1003 pub const PHYSICALCOUNT_MASK: u64 =
1005 0b1111111111111111111111111111111111111111111111111111111111111111;
1006
1007 pub const fn physicalcount(self) -> u64 {
1009 ((self.bits() >> Self::PHYSICALCOUNT_SHIFT)
1010 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1011 }
1012}
1013
1014bitflags! {
1015 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1017 #[repr(transparent)]
1018 pub struct Cntpctss: u64 {
1019 }
1020}
1021
1022impl Cntpctss {
1023 pub const SSPHYSICALCOUNT_SHIFT: u32 = 0;
1025 pub const SSPHYSICALCOUNT_MASK: u64 =
1027 0b1111111111111111111111111111111111111111111111111111111111111111;
1028
1029 pub const fn ssphysicalcount(self) -> u64 {
1031 ((self.bits() >> Self::SSPHYSICALCOUNT_SHIFT)
1032 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1033 }
1034}
1035
1036bitflags! {
1037 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1039 #[repr(transparent)]
1040 pub struct CntpctEl0: u64 {
1041 }
1042}
1043
1044impl CntpctEl0 {
1045 pub const PHYSICALCOUNT_SHIFT: u32 = 0;
1047 pub const PHYSICALCOUNT_MASK: u64 =
1049 0b1111111111111111111111111111111111111111111111111111111111111111;
1050
1051 pub const fn physicalcount(self) -> u64 {
1053 ((self.bits() >> Self::PHYSICALCOUNT_SHIFT)
1054 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1055 }
1056}
1057
1058bitflags! {
1059 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1061 #[repr(transparent)]
1062 pub struct CntpCtl: u32 {
1063 const ENABLE = 1 << 0;
1065 const IMASK = 1 << 1;
1067 const ISTATUS = 1 << 2;
1069 }
1070}
1071
1072impl CntpCtl {
1073 pub const ENABLE_SHIFT: u32 = 0;
1075 pub const IMASK_SHIFT: u32 = 1;
1077 pub const ISTATUS_SHIFT: u32 = 2;
1079}
1080
1081bitflags! {
1082 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1084 #[repr(transparent)]
1085 pub struct CntpCval: u64 {
1086 }
1087}
1088
1089impl CntpCval {
1090 pub const COMPAREVALUE_SHIFT: u32 = 0;
1092 pub const COMPAREVALUE_MASK: u64 =
1094 0b1111111111111111111111111111111111111111111111111111111111111111;
1095
1096 pub const fn comparevalue(self) -> u64 {
1098 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1099 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1100 }
1101}
1102
1103bitflags! {
1104 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1106 #[repr(transparent)]
1107 pub struct CntpTval: u32 {
1108 }
1109}
1110
1111impl CntpTval {
1112 pub const TIMERVALUE_SHIFT: u32 = 0;
1114 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
1116
1117 pub const fn timervalue(self) -> u32 {
1119 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1120 }
1121}
1122
1123bitflags! {
1124 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1126 #[repr(transparent)]
1127 pub struct Cntvct: u64 {
1128 }
1129}
1130
1131impl Cntvct {
1132 pub const VIRTUALCOUNT_SHIFT: u32 = 0;
1134 pub const VIRTUALCOUNT_MASK: u64 =
1136 0b1111111111111111111111111111111111111111111111111111111111111111;
1137
1138 pub const fn virtualcount(self) -> u64 {
1140 ((self.bits() >> Self::VIRTUALCOUNT_SHIFT)
1141 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1142 }
1143}
1144
1145bitflags! {
1146 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1148 #[repr(transparent)]
1149 pub struct Cntvctss: u64 {
1150 }
1151}
1152
1153impl Cntvctss {
1154 pub const SSVIRTUALCOUNT_SHIFT: u32 = 0;
1156 pub const SSVIRTUALCOUNT_MASK: u64 =
1158 0b1111111111111111111111111111111111111111111111111111111111111111;
1159
1160 pub const fn ssvirtualcount(self) -> u64 {
1162 ((self.bits() >> Self::SSVIRTUALCOUNT_SHIFT)
1163 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1164 }
1165}
1166
1167bitflags! {
1168 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1170 #[repr(transparent)]
1171 pub struct Cntvoff: u64 {
1172 }
1173}
1174
1175impl Cntvoff {
1176 pub const VOFFSET_SHIFT: u32 = 0;
1178 pub const VOFFSET_MASK: u64 =
1180 0b1111111111111111111111111111111111111111111111111111111111111111;
1181
1182 pub const fn voffset(self) -> u64 {
1184 ((self.bits() >> Self::VOFFSET_SHIFT)
1185 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1186 }
1187}
1188
1189#[cfg(feature = "el2")]
1190bitflags! {
1191 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1193 #[repr(transparent)]
1194 pub struct CntvoffEl2: u64 {
1195 }
1196}
1197
1198#[cfg(feature = "el2")]
1199impl CntvoffEl2 {
1200 pub const VOFFSET_SHIFT: u32 = 0;
1202 pub const VOFFSET_MASK: u64 =
1204 0b1111111111111111111111111111111111111111111111111111111111111111;
1205
1206 pub const fn voffset(self) -> u64 {
1208 ((self.bits() >> Self::VOFFSET_SHIFT)
1209 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1210 }
1211}
1212
1213bitflags! {
1214 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1216 #[repr(transparent)]
1217 pub struct CntvCtl: u32 {
1218 const ENABLE = 1 << 0;
1220 const IMASK = 1 << 1;
1222 const ISTATUS = 1 << 2;
1224 }
1225}
1226
1227impl CntvCtl {
1228 pub const ENABLE_SHIFT: u32 = 0;
1230 pub const IMASK_SHIFT: u32 = 1;
1232 pub const ISTATUS_SHIFT: u32 = 2;
1234}
1235
1236bitflags! {
1237 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1239 #[repr(transparent)]
1240 pub struct CntvCval: u64 {
1241 }
1242}
1243
1244impl CntvCval {
1245 pub const COMPAREVALUE_SHIFT: u32 = 0;
1247 pub const COMPAREVALUE_MASK: u64 =
1249 0b1111111111111111111111111111111111111111111111111111111111111111;
1250
1251 pub const fn comparevalue(self) -> u64 {
1253 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1254 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1255 }
1256}
1257
1258bitflags! {
1259 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1261 #[repr(transparent)]
1262 pub struct CntvTval: u32 {
1263 }
1264}
1265
1266impl CntvTval {
1267 pub const TIMERVALUE_SHIFT: u32 = 0;
1269 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
1271
1272 pub const fn timervalue(self) -> u32 {
1274 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1275 }
1276}
1277
1278bitflags! {
1279 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1281 #[repr(transparent)]
1282 pub struct Contextidr: u32 {
1283 }
1284}
1285
1286impl Contextidr {
1287 pub const ASID_SHIFT: u32 = 0;
1289 pub const ASID_MASK: u32 = 0b11111111;
1291
1292 pub const fn asid(self) -> u8 {
1294 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
1295 }
1296}
1297
1298#[cfg(feature = "el1")]
1299bitflags! {
1300 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1302 #[repr(transparent)]
1303 pub struct ContextidrEl1: u64 {
1304 }
1305}
1306
1307#[cfg(feature = "el1")]
1308impl ContextidrEl1 {
1309 pub const PROCID_SHIFT: u32 = 0;
1311 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
1313
1314 pub const fn procid(self) -> u32 {
1316 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
1317 }
1318}
1319
1320#[cfg(feature = "el2")]
1321bitflags! {
1322 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1324 #[repr(transparent)]
1325 pub struct ContextidrEl2: u64 {
1326 }
1327}
1328
1329#[cfg(feature = "el2")]
1330impl ContextidrEl2 {
1331 pub const PROCID_SHIFT: u32 = 0;
1333 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
1335
1336 pub const fn procid(self) -> u32 {
1338 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
1339 }
1340}
1341
1342bitflags! {
1343 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1345 #[repr(transparent)]
1346 pub struct Cpacr: u32 {
1347 const TRCDIS = 1 << 28;
1349 const ASEDIS = 1 << 31;
1351 }
1352}
1353
1354impl Cpacr {
1355 pub const CP10_SHIFT: u32 = 20;
1357 pub const CP10_MASK: u32 = 0b11;
1359 pub const CP11_SHIFT: u32 = 22;
1361 pub const CP11_MASK: u32 = 0b11;
1363 pub const TRCDIS_SHIFT: u32 = 28;
1365 pub const ASEDIS_SHIFT: u32 = 31;
1367
1368 pub const fn cp10(self) -> u8 {
1370 ((self.bits() >> Self::CP10_SHIFT) & 0b11) as u8
1371 }
1372
1373 pub const fn cp11(self) -> u8 {
1375 ((self.bits() >> Self::CP11_SHIFT) & 0b11) as u8
1376 }
1377}
1378
1379#[cfg(feature = "el1")]
1380bitflags! {
1381 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1383 #[repr(transparent)]
1384 pub struct CpacrEl1: u64 {
1385 const TTA = 1 << 28;
1387 const E0POE = 1 << 29;
1389 const TAM = 1 << 30;
1391 const TCPAC = 1 << 31;
1393 const E0TP0E = 1 << 32;
1395 const E0TP1E = 1 << 33;
1397 }
1398}
1399
1400#[cfg(feature = "el1")]
1401impl CpacrEl1 {
1402 pub const ZEN_SHIFT: u32 = 16;
1404 pub const ZEN_MASK: u64 = 0b11;
1406 pub const FPEN_SHIFT: u32 = 20;
1408 pub const FPEN_MASK: u64 = 0b11;
1410 pub const SMEN_SHIFT: u32 = 24;
1412 pub const SMEN_MASK: u64 = 0b11;
1414 pub const TTA_SHIFT: u32 = 28;
1416 pub const E0POE_SHIFT: u32 = 29;
1418 pub const TAM_SHIFT: u32 = 30;
1420 pub const TCPAC_SHIFT: u32 = 31;
1422 pub const E0TP0E_SHIFT: u32 = 32;
1424 pub const E0TP1E_SHIFT: u32 = 33;
1426
1427 pub const fn zen(self) -> u8 {
1429 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
1430 }
1431
1432 pub const fn fpen(self) -> u8 {
1434 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
1435 }
1436
1437 pub const fn smen(self) -> u8 {
1439 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
1440 }
1441}
1442
1443#[cfg(feature = "el2")]
1444bitflags! {
1445 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1447 #[repr(transparent)]
1448 pub struct CptrEl2: u64 {
1449 const RES1 = 0b10001011111111;
1451 const TZ = 1 << 8;
1453 const TFP = 1 << 10;
1455 const TSM = 1 << 12;
1457 const E0POE = 1 << 29;
1459 const TAM = 1 << 30;
1461 const TCPAC = 1 << 31;
1463 const E0TP0E = 1 << 32;
1465 const E0TP1E = 1 << 33;
1467 }
1468}
1469
1470#[cfg(feature = "el2")]
1471impl CptrEl2 {
1472 pub const TZ_SHIFT: u32 = 8;
1474 pub const TFP_SHIFT: u32 = 10;
1476 pub const TSM_SHIFT: u32 = 12;
1478 pub const ZEN_SHIFT: u32 = 16;
1480 pub const ZEN_MASK: u64 = 0b11;
1482 pub const FPEN_SHIFT: u32 = 20;
1484 pub const FPEN_MASK: u64 = 0b11;
1486 pub const SMEN_SHIFT: u32 = 24;
1488 pub const SMEN_MASK: u64 = 0b11;
1490 pub const E0POE_SHIFT: u32 = 29;
1492 pub const TAM_SHIFT: u32 = 30;
1494 pub const TCPAC_SHIFT: u32 = 31;
1496 pub const E0TP0E_SHIFT: u32 = 32;
1498 pub const E0TP1E_SHIFT: u32 = 33;
1500
1501 pub const fn zen(self) -> u8 {
1503 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
1504 }
1505
1506 pub const fn fpen(self) -> u8 {
1508 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
1509 }
1510
1511 pub const fn smen(self) -> u8 {
1513 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
1514 }
1515}
1516
1517#[cfg(feature = "el3")]
1518bitflags! {
1519 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1521 #[repr(transparent)]
1522 pub struct CptrEl3: u64 {
1523 const EZ = 1 << 8;
1525 const TFP = 1 << 10;
1527 const ESM = 1 << 12;
1529 const TTA = 1 << 20;
1531 const TAM = 1 << 30;
1533 const TCPAC = 1 << 31;
1535 }
1536}
1537
1538#[cfg(feature = "el3")]
1539impl CptrEl3 {
1540 pub const EZ_SHIFT: u32 = 8;
1542 pub const TFP_SHIFT: u32 = 10;
1544 pub const ESM_SHIFT: u32 = 12;
1546 pub const TTA_SHIFT: u32 = 20;
1548 pub const TAM_SHIFT: u32 = 30;
1550 pub const TCPAC_SHIFT: u32 = 31;
1552}
1553
1554bitflags! {
1555 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1557 #[repr(transparent)]
1558 pub struct Csselr: u32 {
1559 const IND = 1 << 0;
1561 }
1562}
1563
1564impl Csselr {
1565 pub const IND_SHIFT: u32 = 0;
1567 pub const LEVEL_SHIFT: u32 = 1;
1569 pub const LEVEL_MASK: u32 = 0b111;
1571
1572 pub const fn level(self) -> u8 {
1574 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
1575 }
1576}
1577
1578#[cfg(feature = "el1")]
1579bitflags! {
1580 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1582 #[repr(transparent)]
1583 pub struct CsselrEl1: u64 {
1584 const IND = 1 << 0;
1586 const TND = 1 << 4;
1588 }
1589}
1590
1591#[cfg(feature = "el1")]
1592impl CsselrEl1 {
1593 pub const IND_SHIFT: u32 = 0;
1595 pub const LEVEL_SHIFT: u32 = 1;
1597 pub const LEVEL_MASK: u64 = 0b111;
1599 pub const TND_SHIFT: u32 = 4;
1601
1602 pub const fn level(self) -> u8 {
1604 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
1605 }
1606}
1607
1608bitflags! {
1609 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1611 #[repr(transparent)]
1612 pub struct Ctr: u32 {
1613 const RES1 = 0b10000000000000000000000000000000;
1615 const IDC = 1 << 28;
1617 const DIC = 1 << 29;
1619 }
1620}
1621
1622impl Ctr {
1623 pub const IMINLINE_SHIFT: u32 = 0;
1625 pub const IMINLINE_MASK: u32 = 0b1111;
1627 pub const L1IP_SHIFT: u32 = 14;
1629 pub const L1IP_MASK: u32 = 0b11;
1631 pub const DMINLINE_SHIFT: u32 = 16;
1633 pub const DMINLINE_MASK: u32 = 0b1111;
1635 pub const ERG_SHIFT: u32 = 20;
1637 pub const ERG_MASK: u32 = 0b1111;
1639 pub const CWG_SHIFT: u32 = 24;
1641 pub const CWG_MASK: u32 = 0b1111;
1643 pub const IDC_SHIFT: u32 = 28;
1645 pub const DIC_SHIFT: u32 = 29;
1647
1648 pub const fn iminline(self) -> u8 {
1650 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
1651 }
1652
1653 pub const fn l1ip(self) -> u8 {
1655 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
1656 }
1657
1658 pub const fn dminline(self) -> u8 {
1660 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
1661 }
1662
1663 pub const fn erg(self) -> u8 {
1665 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
1666 }
1667
1668 pub const fn cwg(self) -> u8 {
1670 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
1671 }
1672}
1673
1674bitflags! {
1675 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1679 #[repr(transparent)]
1680 pub struct CtrEl0: u64 {
1681 const RES1 = 0b10000000000000000000000000000000;
1683 const IDC = 1 << 28;
1685 const DIC = 1 << 29;
1687 }
1688}
1689
1690impl CtrEl0 {
1691 pub const IMINLINE_SHIFT: u32 = 0;
1693 pub const IMINLINE_MASK: u64 = 0b1111;
1695 pub const L1IP_SHIFT: u32 = 14;
1697 pub const L1IP_MASK: u64 = 0b11;
1699 pub const DMINLINE_SHIFT: u32 = 16;
1701 pub const DMINLINE_MASK: u64 = 0b1111;
1703 pub const ERG_SHIFT: u32 = 20;
1705 pub const ERG_MASK: u64 = 0b1111;
1707 pub const CWG_SHIFT: u32 = 24;
1709 pub const CWG_MASK: u64 = 0b1111;
1711 pub const IDC_SHIFT: u32 = 28;
1713 pub const DIC_SHIFT: u32 = 29;
1715 pub const TMINLINE_SHIFT: u32 = 32;
1717 pub const TMINLINE_MASK: u64 = 0b111111;
1719
1720 pub const fn iminline(self) -> u8 {
1722 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
1723 }
1724
1725 pub const fn l1ip(self) -> u8 {
1727 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
1728 }
1729
1730 pub const fn dminline(self) -> u8 {
1734 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
1735 }
1736
1737 pub const fn erg(self) -> u8 {
1739 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
1740 }
1741
1742 pub const fn cwg(self) -> u8 {
1744 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
1745 }
1746
1747 pub const fn tminline(self) -> u8 {
1749 ((self.bits() >> Self::TMINLINE_SHIFT) & 0b111111) as u8
1750 }
1751}
1752
1753bitflags! {
1754 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1756 #[repr(transparent)]
1757 pub struct Currentel: u64 {
1758 }
1759}
1760
1761impl Currentel {
1762 pub const EL_SHIFT: u32 = 2;
1764 pub const EL_MASK: u64 = 0b11;
1766
1767 pub const fn el(self) -> u8 {
1769 ((self.bits() >> Self::EL_SHIFT) & 0b11) as u8
1770 }
1771}
1772
1773bitflags! {
1774 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1776 #[repr(transparent)]
1777 pub struct Dacr: u32 {
1778 }
1779}
1780
1781impl Dacr {
1782 pub const D_SHIFT: u32 = 0;
1784 pub const D_MASK: u32 = 0b11;
1786
1787 pub const fn d(self, n: u32) -> u8 {
1789 assert!(n < 16);
1790 ((self.bits() >> (Self::D_SHIFT + (n - 0) * 2)) & 0b11) as u8
1791 }
1792}
1793
1794bitflags! {
1795 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1797 #[repr(transparent)]
1798 pub struct Dbgauthstatus: u32 {
1799 }
1800}
1801
1802impl Dbgauthstatus {
1803 pub const NSID_SHIFT: u32 = 0;
1805 pub const NSID_MASK: u32 = 0b11;
1807 pub const NSNID_SHIFT: u32 = 2;
1809 pub const NSNID_MASK: u32 = 0b11;
1811 pub const SID_SHIFT: u32 = 4;
1813 pub const SID_MASK: u32 = 0b11;
1815 pub const SNID_SHIFT: u32 = 6;
1817 pub const SNID_MASK: u32 = 0b11;
1819
1820 pub const fn nsid(self) -> u8 {
1822 ((self.bits() >> Self::NSID_SHIFT) & 0b11) as u8
1823 }
1824
1825 pub const fn nsnid(self) -> u8 {
1827 ((self.bits() >> Self::NSNID_SHIFT) & 0b11) as u8
1828 }
1829
1830 pub const fn sid(self) -> u8 {
1832 ((self.bits() >> Self::SID_SHIFT) & 0b11) as u8
1833 }
1834
1835 pub const fn snid(self) -> u8 {
1837 ((self.bits() >> Self::SNID_SHIFT) & 0b11) as u8
1838 }
1839}
1840
1841bitflags! {
1842 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1844 #[repr(transparent)]
1845 pub struct Dbgclaimclr: u32 {
1846 const CLAIM0 = 1 << 0;
1848 const CLAIM1 = 1 << 1;
1850 const CLAIM2 = 1 << 2;
1852 const CLAIM3 = 1 << 3;
1854 const CLAIM4 = 1 << 4;
1856 const CLAIM5 = 1 << 5;
1858 const CLAIM6 = 1 << 6;
1860 const CLAIM7 = 1 << 7;
1862 }
1863}
1864
1865impl Dbgclaimclr {
1866 pub const CLAIM_SHIFT: u32 = 0;
1868}
1869
1870bitflags! {
1871 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1873 #[repr(transparent)]
1874 pub struct Dbgclaimset: u32 {
1875 const CLAIM0 = 1 << 0;
1877 const CLAIM1 = 1 << 1;
1879 const CLAIM2 = 1 << 2;
1881 const CLAIM3 = 1 << 3;
1883 const CLAIM4 = 1 << 4;
1885 const CLAIM5 = 1 << 5;
1887 const CLAIM6 = 1 << 6;
1889 const CLAIM7 = 1 << 7;
1891 }
1892}
1893
1894impl Dbgclaimset {
1895 pub const CLAIM_SHIFT: u32 = 0;
1897}
1898
1899bitflags! {
1900 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1902 #[repr(transparent)]
1903 pub struct Dbgdccint: u32 {
1904 const TX = 1 << 29;
1906 const RX = 1 << 30;
1908 }
1909}
1910
1911impl Dbgdccint {
1912 pub const TX_SHIFT: u32 = 29;
1914 pub const RX_SHIFT: u32 = 30;
1916}
1917
1918bitflags! {
1919 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
1921 #[repr(transparent)]
1922 pub struct Dbgdevid: u32 {
1923 }
1924}
1925
1926impl Dbgdevid {
1927 pub const PCSAMPLE_SHIFT: u32 = 0;
1929 pub const PCSAMPLE_MASK: u32 = 0b1111;
1931 pub const WPADDRMASK_SHIFT: u32 = 4;
1933 pub const WPADDRMASK_MASK: u32 = 0b1111;
1935 pub const BPADDRMASK_SHIFT: u32 = 8;
1937 pub const BPADDRMASK_MASK: u32 = 0b1111;
1939 pub const VECTORCATCH_SHIFT: u32 = 12;
1941 pub const VECTORCATCH_MASK: u32 = 0b1111;
1943 pub const VIRTEXTNS_SHIFT: u32 = 16;
1945 pub const VIRTEXTNS_MASK: u32 = 0b1111;
1947 pub const DOUBLELOCK_SHIFT: u32 = 20;
1949 pub const DOUBLELOCK_MASK: u32 = 0b1111;
1951 pub const AUXREGS_SHIFT: u32 = 24;
1953 pub const AUXREGS_MASK: u32 = 0b1111;
1955 pub const CIDMASK_SHIFT: u32 = 28;
1957 pub const CIDMASK_MASK: u32 = 0b1111;
1959
1960 pub const fn pcsample(self) -> u8 {
1962 ((self.bits() >> Self::PCSAMPLE_SHIFT) & 0b1111) as u8
1963 }
1964
1965 pub const fn wpaddrmask(self) -> u8 {
1967 ((self.bits() >> Self::WPADDRMASK_SHIFT) & 0b1111) as u8
1968 }
1969
1970 pub const fn bpaddrmask(self) -> u8 {
1972 ((self.bits() >> Self::BPADDRMASK_SHIFT) & 0b1111) as u8
1973 }
1974
1975 pub const fn vectorcatch(self) -> u8 {
1977 ((self.bits() >> Self::VECTORCATCH_SHIFT) & 0b1111) as u8
1978 }
1979
1980 pub const fn virtextns(self) -> u8 {
1982 ((self.bits() >> Self::VIRTEXTNS_SHIFT) & 0b1111) as u8
1983 }
1984
1985 pub const fn doublelock(self) -> u8 {
1987 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
1988 }
1989
1990 pub const fn auxregs(self) -> u8 {
1992 ((self.bits() >> Self::AUXREGS_SHIFT) & 0b1111) as u8
1993 }
1994
1995 pub const fn cidmask(self) -> u8 {
1997 ((self.bits() >> Self::CIDMASK_SHIFT) & 0b1111) as u8
1998 }
1999}
2000
2001bitflags! {
2002 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2004 #[repr(transparent)]
2005 pub struct Dbgdevid1: u32 {
2006 }
2007}
2008
2009impl Dbgdevid1 {
2010 pub const PCSROFFSET_SHIFT: u32 = 0;
2012 pub const PCSROFFSET_MASK: u32 = 0b1111;
2014
2015 pub const fn pcsroffset(self) -> u8 {
2017 ((self.bits() >> Self::PCSROFFSET_SHIFT) & 0b1111) as u8
2018 }
2019}
2020
2021bitflags! {
2022 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2024 #[repr(transparent)]
2025 pub struct Dbgdidr: u32 {
2026 const RES1 = 0b1000000000000000;
2028 const SE_IMP = 1 << 12;
2030 const NSUHD_IMP = 1 << 14;
2032 }
2033}
2034
2035impl Dbgdidr {
2036 pub const SE_IMP_SHIFT: u32 = 12;
2038 pub const NSUHD_IMP_SHIFT: u32 = 14;
2040 pub const VERSION_SHIFT: u32 = 16;
2042 pub const VERSION_MASK: u32 = 0b1111;
2044 pub const CTX_CMPS_SHIFT: u32 = 20;
2046 pub const CTX_CMPS_MASK: u32 = 0b1111;
2048 pub const BRPS_SHIFT: u32 = 24;
2050 pub const BRPS_MASK: u32 = 0b1111;
2052 pub const WRPS_SHIFT: u32 = 28;
2054 pub const WRPS_MASK: u32 = 0b1111;
2056
2057 pub const fn version(self) -> u8 {
2059 ((self.bits() >> Self::VERSION_SHIFT) & 0b1111) as u8
2060 }
2061
2062 pub const fn ctx_cmps(self) -> u8 {
2064 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
2065 }
2066
2067 pub const fn brps(self) -> u8 {
2069 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
2070 }
2071
2072 pub const fn wrps(self) -> u8 {
2074 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
2075 }
2076}
2077
2078bitflags! {
2079 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2081 #[repr(transparent)]
2082 pub struct Dbgdrar: u64 {
2083 }
2084}
2085
2086impl Dbgdrar {
2087 pub const VALID_SHIFT: u32 = 0;
2089 pub const VALID_MASK: u64 = 0b11;
2091 pub const ROMADDR_47_12_SHIFT: u32 = 12;
2093 pub const ROMADDR_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
2095
2096 pub const fn valid(self) -> u8 {
2098 ((self.bits() >> Self::VALID_SHIFT) & 0b11) as u8
2099 }
2100
2101 pub const fn romaddr_47_12(self) -> u64 {
2103 ((self.bits() >> Self::ROMADDR_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
2104 }
2105}
2106
2107bitflags! {
2108 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2110 #[repr(transparent)]
2111 pub struct Dbgdscrext: u32 {
2112 const ERR = 1 << 6;
2114 const UDCCDIS = 1 << 12;
2116 const HDE = 1 << 14;
2118 const MDBGEN = 1 << 15;
2120 const SPIDDIS = 1 << 16;
2122 const SPNIDDIS = 1 << 17;
2124 const NS = 1 << 18;
2126 const SC2 = 1 << 19;
2128 const TDA = 1 << 21;
2130 const TXU = 1 << 26;
2132 const RXO = 1 << 27;
2134 const TXFULL = 1 << 29;
2136 const RXFULL = 1 << 30;
2138 const TFO = 1 << 31;
2140 }
2141}
2142
2143impl Dbgdscrext {
2144 pub const MOE_SHIFT: u32 = 2;
2146 pub const MOE_MASK: u32 = 0b1111;
2148 pub const ERR_SHIFT: u32 = 6;
2150 pub const UDCCDIS_SHIFT: u32 = 12;
2152 pub const HDE_SHIFT: u32 = 14;
2154 pub const MDBGEN_SHIFT: u32 = 15;
2156 pub const SPIDDIS_SHIFT: u32 = 16;
2158 pub const SPNIDDIS_SHIFT: u32 = 17;
2160 pub const NS_SHIFT: u32 = 18;
2162 pub const SC2_SHIFT: u32 = 19;
2164 pub const TDA_SHIFT: u32 = 21;
2166 pub const INTDIS_SHIFT: u32 = 22;
2168 pub const INTDIS_MASK: u32 = 0b11;
2170 pub const TXU_SHIFT: u32 = 26;
2172 pub const RXO_SHIFT: u32 = 27;
2174 pub const TXFULL_SHIFT: u32 = 29;
2176 pub const RXFULL_SHIFT: u32 = 30;
2178 pub const TFO_SHIFT: u32 = 31;
2180
2181 pub const fn moe(self) -> u8 {
2183 ((self.bits() >> Self::MOE_SHIFT) & 0b1111) as u8
2184 }
2185
2186 pub const fn intdis(self) -> u8 {
2188 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
2189 }
2190}
2191
2192bitflags! {
2193 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2195 #[repr(transparent)]
2196 pub struct Dbgdscrint: u32 {
2197 const UDCCDIS = 1 << 12;
2199 const MDBGEN = 1 << 15;
2201 const SPIDDIS = 1 << 16;
2203 const SPNIDDIS = 1 << 17;
2205 const NS = 1 << 18;
2207 const TXFULL = 1 << 29;
2209 const RXFULL = 1 << 30;
2211 }
2212}
2213
2214impl Dbgdscrint {
2215 pub const MOE_SHIFT: u32 = 2;
2217 pub const MOE_MASK: u32 = 0b1111;
2219 pub const UDCCDIS_SHIFT: u32 = 12;
2221 pub const MDBGEN_SHIFT: u32 = 15;
2223 pub const SPIDDIS_SHIFT: u32 = 16;
2225 pub const SPNIDDIS_SHIFT: u32 = 17;
2227 pub const NS_SHIFT: u32 = 18;
2229 pub const TXFULL_SHIFT: u32 = 29;
2231 pub const RXFULL_SHIFT: u32 = 30;
2233
2234 pub const fn moe(self) -> u8 {
2236 ((self.bits() >> Self::MOE_SHIFT) & 0b1111) as u8
2237 }
2238}
2239
2240bitflags! {
2241 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2243 #[repr(transparent)]
2244 pub struct Dbgdtrrxext: u32 {
2245 }
2246}
2247
2248impl Dbgdtrrxext {
2249 pub const DTRRX_SHIFT: u32 = 0;
2251 pub const DTRRX_MASK: u32 = 0b11111111111111111111111111111111;
2253
2254 pub const fn dtrrx(self) -> u32 {
2256 ((self.bits() >> Self::DTRRX_SHIFT) & 0b11111111111111111111111111111111) as u32
2257 }
2258}
2259
2260bitflags! {
2261 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2263 #[repr(transparent)]
2264 pub struct Dbgdtrrxint: u32 {
2265 }
2266}
2267
2268impl Dbgdtrrxint {
2269 pub const DTRRX_SHIFT: u32 = 0;
2271 pub const DTRRX_MASK: u32 = 0b11111111111111111111111111111111;
2273
2274 pub const fn dtrrx(self) -> u32 {
2276 ((self.bits() >> Self::DTRRX_SHIFT) & 0b11111111111111111111111111111111) as u32
2277 }
2278}
2279
2280bitflags! {
2281 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2283 #[repr(transparent)]
2284 pub struct Dbgdtrtxext: u32 {
2285 }
2286}
2287
2288impl Dbgdtrtxext {
2289 pub const DTRTX_SHIFT: u32 = 0;
2291 pub const DTRTX_MASK: u32 = 0b11111111111111111111111111111111;
2293
2294 pub const fn dtrtx(self) -> u32 {
2296 ((self.bits() >> Self::DTRTX_SHIFT) & 0b11111111111111111111111111111111) as u32
2297 }
2298}
2299
2300bitflags! {
2301 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2303 #[repr(transparent)]
2304 pub struct Dbgdtrtxint: u32 {
2305 }
2306}
2307
2308impl Dbgdtrtxint {
2309 pub const DTRTX_SHIFT: u32 = 0;
2311 pub const DTRTX_MASK: u32 = 0b11111111111111111111111111111111;
2313
2314 pub const fn dtrtx(self) -> u32 {
2316 ((self.bits() >> Self::DTRTX_SHIFT) & 0b11111111111111111111111111111111) as u32
2317 }
2318}
2319
2320bitflags! {
2321 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2323 #[repr(transparent)]
2324 pub struct Dbgosdlr: u32 {
2325 const DLK = 1 << 0;
2327 }
2328}
2329
2330impl Dbgosdlr {
2331 pub const DLK_SHIFT: u32 = 0;
2333}
2334
2335bitflags! {
2336 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2338 #[repr(transparent)]
2339 pub struct Dbgoseccr: u32 {
2340 }
2341}
2342
2343impl Dbgoseccr {
2344 pub const EDECCR_SHIFT: u32 = 0;
2346 pub const EDECCR_MASK: u32 = 0b11111111111111111111111111111111;
2348
2349 pub const fn edeccr(self) -> u32 {
2351 ((self.bits() >> Self::EDECCR_SHIFT) & 0b11111111111111111111111111111111) as u32
2352 }
2353}
2354
2355bitflags! {
2356 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2358 #[repr(transparent)]
2359 pub struct Dbgoslar: u32 {
2360 }
2361}
2362
2363impl Dbgoslar {
2364 pub const OSLA_SHIFT: u32 = 0;
2366 pub const OSLA_MASK: u32 = 0b11111111111111111111111111111111;
2368
2369 pub const fn osla(self) -> u32 {
2371 ((self.bits() >> Self::OSLA_SHIFT) & 0b11111111111111111111111111111111) as u32
2372 }
2373}
2374
2375bitflags! {
2376 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2378 #[repr(transparent)]
2379 pub struct Dbgoslsr: u32 {
2380 const OSLK = 1 << 1;
2382 const NTT = 1 << 2;
2384 }
2385}
2386
2387impl Dbgoslsr {
2388 pub const OSLK_SHIFT: u32 = 1;
2390 pub const NTT_SHIFT: u32 = 2;
2392}
2393
2394bitflags! {
2395 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2397 #[repr(transparent)]
2398 pub struct Dbgprcr: u32 {
2399 const CORENPDRQ = 1 << 0;
2401 }
2402}
2403
2404impl Dbgprcr {
2405 pub const CORENPDRQ_SHIFT: u32 = 0;
2407}
2408
2409bitflags! {
2410 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2412 #[repr(transparent)]
2413 pub struct Dbgvcr: u32 {
2414 const SU = 1 << 1;
2416 const U = 1 << 1;
2418 const S = 1 << 2;
2420 const SS = 1 << 2;
2422 const P = 1 << 3;
2424 const SP = 1 << 3;
2426 const D = 1 << 4;
2428 const SD = 1 << 4;
2430 const I = 1 << 6;
2432 const SI = 1 << 6;
2434 const F = 1 << 7;
2436 const SF = 1 << 7;
2438 const MS = 1 << 10;
2440 const MP = 1 << 11;
2442 const MD = 1 << 12;
2444 const MI = 1 << 14;
2446 const MF = 1 << 15;
2448 const NSU = 1 << 25;
2450 const NSS = 1 << 26;
2452 const NSP = 1 << 27;
2454 const NSD = 1 << 28;
2456 const NSI = 1 << 30;
2458 const NSF = 1 << 31;
2460 }
2461}
2462
2463impl Dbgvcr {
2464 pub const SU_SHIFT: u32 = 1;
2466 pub const U_SHIFT: u32 = 1;
2468 pub const S_SHIFT: u32 = 2;
2470 pub const SS_SHIFT: u32 = 2;
2472 pub const P_SHIFT: u32 = 3;
2474 pub const SP_SHIFT: u32 = 3;
2476 pub const D_SHIFT: u32 = 4;
2478 pub const SD_SHIFT: u32 = 4;
2480 pub const I_SHIFT: u32 = 6;
2482 pub const SI_SHIFT: u32 = 6;
2484 pub const F_SHIFT: u32 = 7;
2486 pub const SF_SHIFT: u32 = 7;
2488 pub const MS_SHIFT: u32 = 10;
2490 pub const MP_SHIFT: u32 = 11;
2492 pub const MD_SHIFT: u32 = 12;
2494 pub const MI_SHIFT: u32 = 14;
2496 pub const MF_SHIFT: u32 = 15;
2498 pub const NSU_SHIFT: u32 = 25;
2500 pub const NSS_SHIFT: u32 = 26;
2502 pub const NSP_SHIFT: u32 = 27;
2504 pub const NSD_SHIFT: u32 = 28;
2506 pub const NSI_SHIFT: u32 = 30;
2508 pub const NSF_SHIFT: u32 = 31;
2510}
2511
2512bitflags! {
2513 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2515 #[repr(transparent)]
2516 pub struct Dfar: u32 {
2517 }
2518}
2519
2520impl Dfar {
2521 pub const VA_SHIFT: u32 = 0;
2523 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
2525
2526 pub const fn va(self) -> u32 {
2528 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
2529 }
2530}
2531
2532bitflags! {
2533 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2535 #[repr(transparent)]
2536 pub struct Dfsr: u32 {
2537 const LPAE = 1 << 9;
2539 const WNR = 1 << 11;
2541 const EXT = 1 << 12;
2543 const CM = 1 << 13;
2545 const FNV = 1 << 16;
2547 }
2548}
2549
2550impl Dfsr {
2551 pub const STATUS_SHIFT: u32 = 0;
2553 pub const STATUS_MASK: u32 = 0b111111;
2555 pub const DOMAIN_SHIFT: u32 = 4;
2557 pub const DOMAIN_MASK: u32 = 0b1111;
2559 pub const LPAE_SHIFT: u32 = 9;
2561 pub const WNR_SHIFT: u32 = 11;
2563 pub const EXT_SHIFT: u32 = 12;
2565 pub const CM_SHIFT: u32 = 13;
2567 pub const AET_SHIFT: u32 = 14;
2569 pub const AET_MASK: u32 = 0b11;
2571 pub const FNV_SHIFT: u32 = 16;
2573
2574 pub const fn status(self) -> u8 {
2576 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
2577 }
2578
2579 pub const fn domain(self) -> u8 {
2581 ((self.bits() >> Self::DOMAIN_SHIFT) & 0b1111) as u8
2582 }
2583
2584 pub const fn aet(self) -> u8 {
2586 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
2587 }
2588}
2589
2590bitflags! {
2591 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2593 #[repr(transparent)]
2594 pub struct Disr: u32 {
2595 const EA = 1 << 9;
2597 const LPAE = 1 << 9;
2599 const EXT = 1 << 12;
2601 const A = 1 << 31;
2603 }
2604}
2605
2606impl Disr {
2607 pub const DFSC_SHIFT: u32 = 0;
2609 pub const DFSC_MASK: u32 = 0b111111;
2611 pub const STATUS_SHIFT: u32 = 0;
2613 pub const STATUS_MASK: u32 = 0b111111;
2615 pub const EA_SHIFT: u32 = 9;
2617 pub const LPAE_SHIFT: u32 = 9;
2619 pub const EXT_SHIFT: u32 = 12;
2621 pub const A_SHIFT: u32 = 31;
2623
2624 pub const fn dfsc(self) -> u8 {
2626 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
2627 }
2628
2629 pub const fn status(self) -> u8 {
2631 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
2632 }
2633}
2634
2635#[cfg(feature = "el1")]
2636bitflags! {
2637 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2639 #[repr(transparent)]
2640 pub struct DisrEl1: u64 {
2641 const WNR = 1 << 6;
2643 const WNRV = 1 << 7;
2645 const EA = 1 << 9;
2647 const IDS = 1 << 24;
2649 const A = 1 << 31;
2651 }
2652}
2653
2654#[cfg(feature = "el1")]
2655impl DisrEl1 {
2656 pub const DFSC_SHIFT: u32 = 0;
2658 pub const DFSC_MASK: u64 = 0b111111;
2660 pub const WNR_SHIFT: u32 = 6;
2662 pub const WNRV_SHIFT: u32 = 7;
2664 pub const EA_SHIFT: u32 = 9;
2666 pub const AET_SHIFT: u32 = 10;
2668 pub const AET_MASK: u64 = 0b111;
2670 pub const WU_SHIFT: u32 = 16;
2672 pub const WU_MASK: u64 = 0b11;
2674 pub const IDS_SHIFT: u32 = 24;
2676 pub const A_SHIFT: u32 = 31;
2678
2679 pub const fn dfsc(self) -> u8 {
2681 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
2682 }
2683
2684 pub const fn aet(self) -> u8 {
2686 ((self.bits() >> Self::AET_SHIFT) & 0b111) as u8
2687 }
2688
2689 pub const fn wu(self) -> u8 {
2691 ((self.bits() >> Self::WU_SHIFT) & 0b11) as u8
2692 }
2693}
2694
2695bitflags! {
2696 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2700 #[repr(transparent)]
2701 pub struct Dit: u64 {
2702 const DIT = 1 << 24;
2704 }
2705}
2706
2707impl Dit {
2708 pub const DIT_SHIFT: u32 = 24;
2710}
2711
2712bitflags! {
2713 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2715 #[repr(transparent)]
2716 pub struct Dlr: u32 {
2717 }
2718}
2719
2720impl Dlr {
2721 pub const ADDR_SHIFT: u32 = 0;
2723 pub const ADDR_MASK: u32 = 0b11111111111111111111111111111111;
2725
2726 pub const fn addr(self) -> u32 {
2728 ((self.bits() >> Self::ADDR_SHIFT) & 0b11111111111111111111111111111111) as u32
2729 }
2730}
2731
2732bitflags! {
2733 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2735 #[repr(transparent)]
2736 pub struct Dspsr: u32 {
2737 const T = 1 << 5;
2739 const F = 1 << 6;
2741 const I = 1 << 7;
2743 const A = 1 << 8;
2745 const E = 1 << 9;
2747 const IL = 1 << 20;
2749 const SS = 1 << 21;
2751 const PAN = 1 << 22;
2753 const SSBS = 1 << 23;
2755 const DIT = 1 << 24;
2757 const Q = 1 << 27;
2759 const V = 1 << 28;
2761 const C = 1 << 29;
2763 const Z = 1 << 30;
2765 const N = 1 << 31;
2767 }
2768}
2769
2770impl Dspsr {
2771 pub const M_4_0_SHIFT: u32 = 0;
2773 pub const M_4_0_MASK: u32 = 0b11111;
2775 pub const T_SHIFT: u32 = 5;
2777 pub const F_SHIFT: u32 = 6;
2779 pub const I_SHIFT: u32 = 7;
2781 pub const A_SHIFT: u32 = 8;
2783 pub const E_SHIFT: u32 = 9;
2785 pub const GE_SHIFT: u32 = 16;
2787 pub const GE_MASK: u32 = 0b1111;
2789 pub const IL_SHIFT: u32 = 20;
2791 pub const SS_SHIFT: u32 = 21;
2793 pub const PAN_SHIFT: u32 = 22;
2795 pub const SSBS_SHIFT: u32 = 23;
2797 pub const DIT_SHIFT: u32 = 24;
2799 pub const Q_SHIFT: u32 = 27;
2801 pub const V_SHIFT: u32 = 28;
2803 pub const C_SHIFT: u32 = 29;
2805 pub const Z_SHIFT: u32 = 30;
2807 pub const N_SHIFT: u32 = 31;
2809
2810 pub const fn m_4_0(self) -> u8 {
2812 ((self.bits() >> Self::M_4_0_SHIFT) & 0b11111) as u8
2813 }
2814
2815 pub const fn ge(self) -> u8 {
2817 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
2818 }
2819}
2820
2821bitflags! {
2822 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2824 #[repr(transparent)]
2825 pub struct Dspsr2: u32 {
2826 const PPEND = 1 << 1;
2828 const UINJ = 1 << 4;
2830 }
2831}
2832
2833impl Dspsr2 {
2834 pub const PPEND_SHIFT: u32 = 1;
2836 pub const UINJ_SHIFT: u32 = 4;
2838}
2839
2840#[cfg(feature = "el1")]
2841bitflags! {
2842 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2844 #[repr(transparent)]
2845 pub struct ElrEl1: u64 {
2846 }
2847}
2848
2849#[cfg(feature = "el1")]
2850impl ElrEl1 {
2851 pub const ADDR_SHIFT: u32 = 0;
2853 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
2855
2856 pub const fn addr(self) -> u64 {
2858 ((self.bits() >> Self::ADDR_SHIFT)
2859 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2860 }
2861}
2862
2863#[cfg(feature = "el2")]
2864bitflags! {
2865 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2867 #[repr(transparent)]
2868 pub struct ElrEl2: u64 {
2869 }
2870}
2871
2872#[cfg(feature = "el2")]
2873impl ElrEl2 {
2874 pub const ADDR_SHIFT: u32 = 0;
2876 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
2878
2879 pub const fn addr(self) -> u64 {
2881 ((self.bits() >> Self::ADDR_SHIFT)
2882 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2883 }
2884}
2885
2886#[cfg(feature = "el2")]
2887bitflags! {
2888 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2890 #[repr(transparent)]
2891 pub struct ElrHyp: u32 {
2892 }
2893}
2894
2895#[cfg(feature = "el2")]
2896impl ElrHyp {
2897 pub const ADDR_SHIFT: u32 = 0;
2899 pub const ADDR_MASK: u32 = 0b11111111111111111111111111111111;
2901
2902 pub const fn addr(self) -> u32 {
2904 ((self.bits() >> Self::ADDR_SHIFT) & 0b11111111111111111111111111111111) as u32
2905 }
2906}
2907
2908bitflags! {
2909 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2911 #[repr(transparent)]
2912 pub struct Erridr: u32 {
2913 }
2914}
2915
2916impl Erridr {
2917 pub const NUM_SHIFT: u32 = 0;
2919 pub const NUM_MASK: u32 = 0b1111111111111111;
2921
2922 pub const fn num(self) -> u16 {
2924 ((self.bits() >> Self::NUM_SHIFT) & 0b1111111111111111) as u16
2925 }
2926}
2927
2928bitflags! {
2929 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2931 #[repr(transparent)]
2932 pub struct Errselr: u32 {
2933 }
2934}
2935
2936impl Errselr {
2937 pub const SEL_SHIFT: u32 = 0;
2939 pub const SEL_MASK: u32 = 0b1111111111111111;
2941
2942 pub const fn sel(self) -> u16 {
2944 ((self.bits() >> Self::SEL_SHIFT) & 0b1111111111111111) as u16
2945 }
2946}
2947
2948bitflags! {
2949 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2951 #[repr(transparent)]
2952 pub struct Erxaddr: u32 {
2953 }
2954}
2955
2956impl Erxaddr {
2957 pub const ERRNADDRLO_SHIFT: u32 = 0;
2959 pub const ERRNADDRLO_MASK: u32 = 0b11111111111111111111111111111111;
2961
2962 pub const fn errnaddrlo(self) -> u32 {
2964 ((self.bits() >> Self::ERRNADDRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
2965 }
2966}
2967
2968bitflags! {
2969 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2971 #[repr(transparent)]
2972 pub struct Erxaddr2: u32 {
2973 }
2974}
2975
2976impl Erxaddr2 {
2977 pub const ERRNADDRHI_SHIFT: u32 = 0;
2979 pub const ERRNADDRHI_MASK: u32 = 0b11111111111111111111111111111111;
2981
2982 pub const fn errnaddrhi(self) -> u32 {
2984 ((self.bits() >> Self::ERRNADDRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
2985 }
2986}
2987
2988bitflags! {
2989 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
2991 #[repr(transparent)]
2992 pub struct Erxctlr: u32 {
2993 }
2994}
2995
2996impl Erxctlr {
2997 pub const ERRNCTLRLO_SHIFT: u32 = 0;
2999 pub const ERRNCTLRLO_MASK: u32 = 0b11111111111111111111111111111111;
3001
3002 pub const fn errnctlrlo(self) -> u32 {
3004 ((self.bits() >> Self::ERRNCTLRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
3005 }
3006}
3007
3008bitflags! {
3009 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3011 #[repr(transparent)]
3012 pub struct Erxctlr2: u32 {
3013 }
3014}
3015
3016impl Erxctlr2 {
3017 pub const ERRNCTLRHI_SHIFT: u32 = 0;
3019 pub const ERRNCTLRHI_MASK: u32 = 0b11111111111111111111111111111111;
3021
3022 pub const fn errnctlrhi(self) -> u32 {
3024 ((self.bits() >> Self::ERRNCTLRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
3025 }
3026}
3027
3028bitflags! {
3029 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3031 #[repr(transparent)]
3032 pub struct Erxfr: u32 {
3033 }
3034}
3035
3036impl Erxfr {
3037 pub const ERRNFRLO_SHIFT: u32 = 0;
3039 pub const ERRNFRLO_MASK: u32 = 0b11111111111111111111111111111111;
3041
3042 pub const fn errnfrlo(self) -> u32 {
3044 ((self.bits() >> Self::ERRNFRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
3045 }
3046}
3047
3048bitflags! {
3049 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3051 #[repr(transparent)]
3052 pub struct Erxfr2: u32 {
3053 }
3054}
3055
3056impl Erxfr2 {
3057 pub const ERRNFRHI_SHIFT: u32 = 0;
3059 pub const ERRNFRHI_MASK: u32 = 0b11111111111111111111111111111111;
3061
3062 pub const fn errnfrhi(self) -> u32 {
3064 ((self.bits() >> Self::ERRNFRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
3065 }
3066}
3067
3068bitflags! {
3069 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3071 #[repr(transparent)]
3072 pub struct Erxmisc0: u32 {
3073 }
3074}
3075
3076impl Erxmisc0 {
3077 pub const ERRNMISC0LO_SHIFT: u32 = 0;
3079 pub const ERRNMISC0LO_MASK: u32 = 0b11111111111111111111111111111111;
3081
3082 pub const fn errnmisc0lo(self) -> u32 {
3084 ((self.bits() >> Self::ERRNMISC0LO_SHIFT) & 0b11111111111111111111111111111111) as u32
3085 }
3086}
3087
3088bitflags! {
3089 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3091 #[repr(transparent)]
3092 pub struct Erxmisc1: u32 {
3093 }
3094}
3095
3096impl Erxmisc1 {
3097 pub const ERRNMISC0HI_SHIFT: u32 = 0;
3099 pub const ERRNMISC0HI_MASK: u32 = 0b11111111111111111111111111111111;
3101
3102 pub const fn errnmisc0hi(self) -> u32 {
3104 ((self.bits() >> Self::ERRNMISC0HI_SHIFT) & 0b11111111111111111111111111111111) as u32
3105 }
3106}
3107
3108bitflags! {
3109 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3111 #[repr(transparent)]
3112 pub struct Erxmisc2: u32 {
3113 }
3114}
3115
3116impl Erxmisc2 {
3117 pub const ERRNMISC1LO_SHIFT: u32 = 0;
3119 pub const ERRNMISC1LO_MASK: u32 = 0b11111111111111111111111111111111;
3121
3122 pub const fn errnmisc1lo(self) -> u32 {
3124 ((self.bits() >> Self::ERRNMISC1LO_SHIFT) & 0b11111111111111111111111111111111) as u32
3125 }
3126}
3127
3128bitflags! {
3129 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3131 #[repr(transparent)]
3132 pub struct Erxmisc3: u32 {
3133 }
3134}
3135
3136impl Erxmisc3 {
3137 pub const ERRNMISC1HI_SHIFT: u32 = 0;
3139 pub const ERRNMISC1HI_MASK: u32 = 0b11111111111111111111111111111111;
3141
3142 pub const fn errnmisc1hi(self) -> u32 {
3144 ((self.bits() >> Self::ERRNMISC1HI_SHIFT) & 0b11111111111111111111111111111111) as u32
3145 }
3146}
3147
3148bitflags! {
3149 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3151 #[repr(transparent)]
3152 pub struct Erxmisc4: u32 {
3153 }
3154}
3155
3156impl Erxmisc4 {
3157 pub const ERRNMISC2LO_SHIFT: u32 = 0;
3159 pub const ERRNMISC2LO_MASK: u32 = 0b11111111111111111111111111111111;
3161
3162 pub const fn errnmisc2lo(self) -> u32 {
3164 ((self.bits() >> Self::ERRNMISC2LO_SHIFT) & 0b11111111111111111111111111111111) as u32
3165 }
3166}
3167
3168bitflags! {
3169 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3171 #[repr(transparent)]
3172 pub struct Erxmisc5: u32 {
3173 }
3174}
3175
3176impl Erxmisc5 {
3177 pub const ERRNMISC2HI_SHIFT: u32 = 0;
3179 pub const ERRNMISC2HI_MASK: u32 = 0b11111111111111111111111111111111;
3181
3182 pub const fn errnmisc2hi(self) -> u32 {
3184 ((self.bits() >> Self::ERRNMISC2HI_SHIFT) & 0b11111111111111111111111111111111) as u32
3185 }
3186}
3187
3188bitflags! {
3189 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3191 #[repr(transparent)]
3192 pub struct Erxmisc6: u32 {
3193 }
3194}
3195
3196impl Erxmisc6 {
3197 pub const ERRNMISC3LO_SHIFT: u32 = 0;
3199 pub const ERRNMISC3LO_MASK: u32 = 0b11111111111111111111111111111111;
3201
3202 pub const fn errnmisc3lo(self) -> u32 {
3204 ((self.bits() >> Self::ERRNMISC3LO_SHIFT) & 0b11111111111111111111111111111111) as u32
3205 }
3206}
3207
3208bitflags! {
3209 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3211 #[repr(transparent)]
3212 pub struct Erxmisc7: u32 {
3213 }
3214}
3215
3216impl Erxmisc7 {
3217 pub const ERRNMISC3HI_SHIFT: u32 = 0;
3219 pub const ERRNMISC3HI_MASK: u32 = 0b11111111111111111111111111111111;
3221
3222 pub const fn errnmisc3hi(self) -> u32 {
3224 ((self.bits() >> Self::ERRNMISC3HI_SHIFT) & 0b11111111111111111111111111111111) as u32
3225 }
3226}
3227
3228bitflags! {
3229 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3231 #[repr(transparent)]
3232 pub struct Erxstatus: u32 {
3233 }
3234}
3235
3236impl Erxstatus {
3237 pub const ERRNSTATUSLO_SHIFT: u32 = 0;
3239 pub const ERRNSTATUSLO_MASK: u32 = 0b11111111111111111111111111111111;
3241
3242 pub const fn errnstatuslo(self) -> u32 {
3244 ((self.bits() >> Self::ERRNSTATUSLO_SHIFT) & 0b11111111111111111111111111111111) as u32
3245 }
3246}
3247
3248#[cfg(feature = "el1")]
3249bitflags! {
3250 #[derive(Clone, Copy, Eq, PartialEq)]
3252 #[repr(transparent)]
3253 pub struct EsrEl1: u64 {
3254 const IL = 1 << 25;
3256 }
3257}
3258
3259#[cfg(feature = "el1")]
3260impl EsrEl1 {
3261 pub const ISS_SHIFT: u32 = 0;
3263 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
3265 pub const IL_SHIFT: u32 = 25;
3267 pub const EC_SHIFT: u32 = 26;
3269 pub const EC_MASK: u64 = 0b111111;
3271 pub const ISS2_SHIFT: u32 = 32;
3273 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
3275
3276 pub const fn iss(self) -> u32 {
3278 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
3279 }
3280
3281 pub const fn ec(self) -> u8 {
3283 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
3284 }
3285
3286 pub const fn iss2(self) -> u32 {
3288 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
3289 }
3290}
3291
3292#[cfg(feature = "el2")]
3293bitflags! {
3294 #[derive(Clone, Copy, Eq, PartialEq)]
3296 #[repr(transparent)]
3297 pub struct EsrEl2: u64 {
3298 const IL = 1 << 25;
3300 }
3301}
3302
3303#[cfg(feature = "el2")]
3304impl EsrEl2 {
3305 pub const ISS_SHIFT: u32 = 0;
3307 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
3309 pub const IL_SHIFT: u32 = 25;
3311 pub const EC_SHIFT: u32 = 26;
3313 pub const EC_MASK: u64 = 0b111111;
3315 pub const ISS2_SHIFT: u32 = 32;
3317 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
3319
3320 pub const fn iss(self) -> u32 {
3322 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
3323 }
3324
3325 pub const fn ec(self) -> u8 {
3327 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
3328 }
3329
3330 pub const fn iss2(self) -> u32 {
3332 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
3333 }
3334}
3335
3336#[cfg(feature = "el3")]
3337bitflags! {
3338 #[derive(Clone, Copy, Eq, PartialEq)]
3340 #[repr(transparent)]
3341 pub struct EsrEl3: u64 {
3342 const IL = 1 << 25;
3344 }
3345}
3346
3347#[cfg(feature = "el3")]
3348impl EsrEl3 {
3349 pub const ISS_SHIFT: u32 = 0;
3351 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
3353 pub const IL_SHIFT: u32 = 25;
3355 pub const EC_SHIFT: u32 = 26;
3357 pub const EC_MASK: u64 = 0b111111;
3359 pub const ISS2_SHIFT: u32 = 32;
3361 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
3363
3364 pub const fn iss(self) -> u32 {
3366 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
3367 }
3368
3369 pub const fn ec(self) -> u8 {
3371 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
3372 }
3373
3374 pub const fn iss2(self) -> u32 {
3376 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
3377 }
3378}
3379
3380#[cfg(feature = "el1")]
3381bitflags! {
3382 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3384 #[repr(transparent)]
3385 pub struct FarEl1: u64 {
3386 }
3387}
3388
3389#[cfg(feature = "el1")]
3390impl FarEl1 {
3391 pub const VA_SHIFT: u32 = 0;
3393 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
3395
3396 pub const fn va(self) -> u64 {
3398 ((self.bits() >> Self::VA_SHIFT)
3399 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3400 }
3401}
3402
3403#[cfg(feature = "el2")]
3404bitflags! {
3405 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3407 #[repr(transparent)]
3408 pub struct FarEl2: u64 {
3409 }
3410}
3411
3412#[cfg(feature = "el2")]
3413impl FarEl2 {
3414 pub const VA_SHIFT: u32 = 0;
3416 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
3418
3419 pub const fn va(self) -> u64 {
3421 ((self.bits() >> Self::VA_SHIFT)
3422 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3423 }
3424}
3425
3426#[cfg(feature = "el1")]
3427bitflags! {
3428 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3430 #[repr(transparent)]
3431 pub struct GcrEl1: u64 {
3432 const RRND = 1 << 16;
3434 }
3435}
3436
3437#[cfg(feature = "el1")]
3438impl GcrEl1 {
3439 pub const EXCLUDE_SHIFT: u32 = 0;
3441 pub const EXCLUDE_MASK: u64 = 0b1111111111111111;
3443 pub const RRND_SHIFT: u32 = 16;
3445
3446 pub const fn exclude(self) -> u16 {
3448 ((self.bits() >> Self::EXCLUDE_SHIFT) & 0b1111111111111111) as u16
3449 }
3450}
3451
3452#[cfg(feature = "el1")]
3453bitflags! {
3454 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3458 #[repr(transparent)]
3459 pub struct GcscrEl1: u64 {
3460 const PCRSEL = 1 << 0;
3462 const RVCHKEN = 1 << 5;
3464 const EXLOCKEN = 1 << 6;
3466 const PUSHMEN = 1 << 8;
3468 const STREN = 1 << 9;
3470 }
3471}
3472
3473#[cfg(feature = "el1")]
3474impl GcscrEl1 {
3475 pub const PCRSEL_SHIFT: u32 = 0;
3477 pub const RVCHKEN_SHIFT: u32 = 5;
3479 pub const EXLOCKEN_SHIFT: u32 = 6;
3481 pub const PUSHMEN_SHIFT: u32 = 8;
3483 pub const STREN_SHIFT: u32 = 9;
3485}
3486
3487#[cfg(feature = "el2")]
3488bitflags! {
3489 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3493 #[repr(transparent)]
3494 pub struct GcscrEl2: u64 {
3495 const PCRSEL = 1 << 0;
3497 const RVCHKEN = 1 << 5;
3499 const EXLOCKEN = 1 << 6;
3501 const PUSHMEN = 1 << 8;
3503 const STREN = 1 << 9;
3505 }
3506}
3507
3508#[cfg(feature = "el2")]
3509impl GcscrEl2 {
3510 pub const PCRSEL_SHIFT: u32 = 0;
3512 pub const RVCHKEN_SHIFT: u32 = 5;
3514 pub const EXLOCKEN_SHIFT: u32 = 6;
3516 pub const PUSHMEN_SHIFT: u32 = 8;
3518 pub const STREN_SHIFT: u32 = 9;
3520}
3521
3522#[cfg(feature = "el3")]
3523bitflags! {
3524 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3526 #[repr(transparent)]
3527 pub struct GpccrEl3: u64 {
3528 const PPS3 = 1 << 3;
3530 const RLPAD = 1 << 5;
3532 const NSPAD = 1 << 6;
3534 const SPAD = 1 << 7;
3536 const GPC = 1 << 16;
3538 const GPCP = 1 << 17;
3540 const TBGPCD = 1 << 18;
3542 const NSO = 1 << 19;
3544 const APPSAA = 1 << 24;
3546 const SA = 1 << 25;
3548 const NSP = 1 << 26;
3550 const NA6 = 1 << 27;
3552 const NA7 = 1 << 28;
3554 const GPCBW = 1 << 29;
3556 }
3557}
3558
3559#[cfg(feature = "el3")]
3560impl GpccrEl3 {
3561 pub const PPS_SHIFT: u32 = 0;
3563 pub const PPS_MASK: u64 = 0b111;
3565 pub const PPS3_SHIFT: u32 = 3;
3567 pub const RLPAD_SHIFT: u32 = 5;
3569 pub const NSPAD_SHIFT: u32 = 6;
3571 pub const SPAD_SHIFT: u32 = 7;
3573 pub const IRGN_SHIFT: u32 = 8;
3575 pub const IRGN_MASK: u64 = 0b11;
3577 pub const ORGN_SHIFT: u32 = 10;
3579 pub const ORGN_MASK: u64 = 0b11;
3581 pub const SH_SHIFT: u32 = 12;
3583 pub const SH_MASK: u64 = 0b11;
3585 pub const PGS_SHIFT: u32 = 14;
3587 pub const PGS_MASK: u64 = 0b11;
3589 pub const GPC_SHIFT: u32 = 16;
3591 pub const GPCP_SHIFT: u32 = 17;
3593 pub const TBGPCD_SHIFT: u32 = 18;
3595 pub const NSO_SHIFT: u32 = 19;
3597 pub const L0GPTSZ_SHIFT: u32 = 20;
3599 pub const L0GPTSZ_MASK: u64 = 0b1111;
3601 pub const APPSAA_SHIFT: u32 = 24;
3603 pub const SA_SHIFT: u32 = 25;
3605 pub const NSP_SHIFT: u32 = 26;
3607 pub const NA6_SHIFT: u32 = 27;
3609 pub const NA7_SHIFT: u32 = 28;
3611 pub const GPCBW_SHIFT: u32 = 29;
3613
3614 pub const fn pps(self) -> u8 {
3616 ((self.bits() >> Self::PPS_SHIFT) & 0b111) as u8
3617 }
3618
3619 pub fn irgn(self) -> crate::manual::Cacheability {
3621 crate::manual::Cacheability::try_from(((self.bits() >> Self::IRGN_SHIFT) & 0b11) as u8)
3622 .unwrap()
3623 }
3624
3625 pub fn orgn(self) -> crate::manual::Cacheability {
3627 crate::manual::Cacheability::try_from(((self.bits() >> Self::ORGN_SHIFT) & 0b11) as u8)
3628 .unwrap()
3629 }
3630
3631 pub fn sh(self) -> crate::manual::Shareability {
3633 crate::manual::Shareability::try_from(((self.bits() >> Self::SH_SHIFT) & 0b11) as u8)
3634 .unwrap()
3635 }
3636
3637 pub const fn pgs(self) -> u8 {
3639 ((self.bits() >> Self::PGS_SHIFT) & 0b11) as u8
3640 }
3641
3642 pub const fn l0gptsz(self) -> u8 {
3644 ((self.bits() >> Self::L0GPTSZ_SHIFT) & 0b1111) as u8
3645 }
3646}
3647
3648#[cfg(feature = "el3")]
3649bitflags! {
3650 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3652 #[repr(transparent)]
3653 pub struct GptbrEl3: u64 {
3654 }
3655}
3656
3657#[cfg(feature = "el3")]
3658impl GptbrEl3 {
3659 pub const BADDR_SHIFT: u32 = 0;
3661 pub const BADDR_MASK: u64 = 0b1111111111111111111111111111111111111111;
3663 pub const BADDR_43_40_SHIFT: u32 = 40;
3665 pub const BADDR_43_40_MASK: u64 = 0b1111;
3667
3668 pub const fn baddr(self) -> u64 {
3670 ((self.bits() >> Self::BADDR_SHIFT) & 0b1111111111111111111111111111111111111111) as u64
3671 }
3672
3673 pub const fn baddr_43_40(self) -> u8 {
3675 ((self.bits() >> Self::BADDR_43_40_SHIFT) & 0b1111) as u8
3676 }
3677}
3678
3679bitflags! {
3680 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3682 #[repr(transparent)]
3683 pub struct Hcptr: u32 {
3684 const RES1 = 0b11001111111111;
3686 const TCP10 = 1 << 10;
3688 const TCP11 = 1 << 11;
3690 const TASE = 1 << 15;
3692 const TTA = 1 << 20;
3694 const TAM = 1 << 30;
3696 const TCPAC = 1 << 31;
3698 }
3699}
3700
3701impl Hcptr {
3702 pub const TCP10_SHIFT: u32 = 10;
3704 pub const TCP11_SHIFT: u32 = 11;
3706 pub const TASE_SHIFT: u32 = 15;
3708 pub const TTA_SHIFT: u32 = 20;
3710 pub const TAM_SHIFT: u32 = 30;
3712 pub const TCPAC_SHIFT: u32 = 31;
3714}
3715
3716bitflags! {
3717 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3719 #[repr(transparent)]
3720 pub struct Hcr: u32 {
3721 const VM = 1 << 0;
3723 const SWIO = 1 << 1;
3725 const PTW = 1 << 2;
3727 const FMO = 1 << 3;
3729 const IMO = 1 << 4;
3731 const AMO = 1 << 5;
3733 const VF = 1 << 6;
3735 const VI = 1 << 7;
3737 const VA = 1 << 8;
3739 const FB = 1 << 9;
3741 const DC = 1 << 12;
3743 const TWI = 1 << 13;
3745 const TWE = 1 << 14;
3747 const TID0 = 1 << 15;
3749 const TID1 = 1 << 16;
3751 const TID2 = 1 << 17;
3753 const TID3 = 1 << 18;
3755 const TSC = 1 << 19;
3757 const TIDCP = 1 << 20;
3759 const TAC = 1 << 21;
3761 const TSW = 1 << 22;
3763 const TPC = 1 << 23;
3765 const TPU = 1 << 24;
3767 const TTLB = 1 << 25;
3769 const TVM = 1 << 26;
3771 const TGE = 1 << 27;
3773 const HCD = 1 << 29;
3775 const TRVM = 1 << 30;
3777 }
3778}
3779
3780impl Hcr {
3781 pub const VM_SHIFT: u32 = 0;
3783 pub const SWIO_SHIFT: u32 = 1;
3785 pub const PTW_SHIFT: u32 = 2;
3787 pub const FMO_SHIFT: u32 = 3;
3789 pub const IMO_SHIFT: u32 = 4;
3791 pub const AMO_SHIFT: u32 = 5;
3793 pub const VF_SHIFT: u32 = 6;
3795 pub const VI_SHIFT: u32 = 7;
3797 pub const VA_SHIFT: u32 = 8;
3799 pub const FB_SHIFT: u32 = 9;
3801 pub const BSU_SHIFT: u32 = 10;
3803 pub const BSU_MASK: u32 = 0b11;
3805 pub const DC_SHIFT: u32 = 12;
3807 pub const TWI_SHIFT: u32 = 13;
3809 pub const TWE_SHIFT: u32 = 14;
3811 pub const TID0_SHIFT: u32 = 15;
3813 pub const TID1_SHIFT: u32 = 16;
3815 pub const TID2_SHIFT: u32 = 17;
3817 pub const TID3_SHIFT: u32 = 18;
3819 pub const TSC_SHIFT: u32 = 19;
3821 pub const TIDCP_SHIFT: u32 = 20;
3823 pub const TAC_SHIFT: u32 = 21;
3825 pub const TSW_SHIFT: u32 = 22;
3827 pub const TPC_SHIFT: u32 = 23;
3829 pub const TPU_SHIFT: u32 = 24;
3831 pub const TTLB_SHIFT: u32 = 25;
3833 pub const TVM_SHIFT: u32 = 26;
3835 pub const TGE_SHIFT: u32 = 27;
3837 pub const HCD_SHIFT: u32 = 29;
3839 pub const TRVM_SHIFT: u32 = 30;
3841
3842 pub const fn bsu(self) -> u8 {
3844 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
3845 }
3846}
3847
3848bitflags! {
3849 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3851 #[repr(transparent)]
3852 pub struct Hcr2: u32 {
3853 const CD = 1 << 0;
3855 const ID = 1 << 1;
3857 const TERR = 1 << 4;
3859 const TEA = 1 << 5;
3861 const TID4 = 1 << 17;
3863 const TICAB = 1 << 18;
3865 const TOCU = 1 << 20;
3867 const TTLBIS = 1 << 22;
3869 }
3870}
3871
3872impl Hcr2 {
3873 pub const CD_SHIFT: u32 = 0;
3875 pub const ID_SHIFT: u32 = 1;
3877 pub const TERR_SHIFT: u32 = 4;
3879 pub const TEA_SHIFT: u32 = 5;
3881 pub const TID4_SHIFT: u32 = 17;
3883 pub const TICAB_SHIFT: u32 = 18;
3885 pub const TOCU_SHIFT: u32 = 20;
3887 pub const TTLBIS_SHIFT: u32 = 22;
3889}
3890
3891#[cfg(feature = "el2")]
3892bitflags! {
3893 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
3897 #[repr(transparent)]
3898 pub struct HcrxEl2: u64 {
3899 const ENAS0 = 1 << 0;
3901 const ENALS = 1 << 1;
3903 const ENASR = 1 << 2;
3905 const FNXS = 1 << 3;
3907 const FGTNXS = 1 << 4;
3909 const SMPME = 1 << 5;
3911 const TALLINT = 1 << 6;
3913 const VINMI = 1 << 7;
3915 const VFNMI = 1 << 8;
3917 const CMOW = 1 << 9;
3919 const MCE2 = 1 << 10;
3921 const MSCEN = 1 << 11;
3923 const TCR2EN = 1 << 14;
3925 const SCTLR2EN = 1 << 15;
3927 const PTTWI = 1 << 16;
3929 const D128EN = 1 << 17;
3931 const ENSNERR = 1 << 18;
3933 const TMEA = 1 << 19;
3935 const ENSDERR = 1 << 20;
3937 const ENIDCP128 = 1 << 21;
3939 const GCSEN = 1 << 22;
3941 const ENFPM = 1 << 23;
3943 const PACMEN = 1 << 24;
3945 const VTLBIDEN = 1 << 25;
3947 const SRMASKEN = 1 << 26;
3949 const NVTGE = 1 << 27;
3951 const POE2EN = 1 << 29;
3953 const TPLIMEN = 1 << 30;
3955 const FDIT = 1 << 31;
3957 const NVNTTLB = 1 << 32;
3959 const NVNTTLBIS = 1 << 33;
3961 const NVNTTLBOS = 1 << 34;
3963 const VTLBIDOSEN = 1 << 35;
3965 const FNB = 1 << 36;
3967 const VTE = 1 << 37;
3969 const VTAO = 1 << 38;
3971 const VTCO = 1 << 39;
3973 }
3974}
3975
3976#[cfg(feature = "el2")]
3977impl HcrxEl2 {
3978 pub const ENAS0_SHIFT: u32 = 0;
3980 pub const ENALS_SHIFT: u32 = 1;
3982 pub const ENASR_SHIFT: u32 = 2;
3984 pub const FNXS_SHIFT: u32 = 3;
3986 pub const FGTNXS_SHIFT: u32 = 4;
3988 pub const SMPME_SHIFT: u32 = 5;
3990 pub const TALLINT_SHIFT: u32 = 6;
3992 pub const VINMI_SHIFT: u32 = 7;
3994 pub const VFNMI_SHIFT: u32 = 8;
3996 pub const CMOW_SHIFT: u32 = 9;
3998 pub const MCE2_SHIFT: u32 = 10;
4000 pub const MSCEN_SHIFT: u32 = 11;
4002 pub const TCR2EN_SHIFT: u32 = 14;
4004 pub const SCTLR2EN_SHIFT: u32 = 15;
4006 pub const PTTWI_SHIFT: u32 = 16;
4008 pub const D128EN_SHIFT: u32 = 17;
4010 pub const ENSNERR_SHIFT: u32 = 18;
4012 pub const TMEA_SHIFT: u32 = 19;
4014 pub const ENSDERR_SHIFT: u32 = 20;
4016 pub const ENIDCP128_SHIFT: u32 = 21;
4018 pub const GCSEN_SHIFT: u32 = 22;
4020 pub const ENFPM_SHIFT: u32 = 23;
4022 pub const PACMEN_SHIFT: u32 = 24;
4024 pub const VTLBIDEN_SHIFT: u32 = 25;
4026 pub const SRMASKEN_SHIFT: u32 = 26;
4028 pub const NVTGE_SHIFT: u32 = 27;
4030 pub const POE2EN_SHIFT: u32 = 29;
4032 pub const TPLIMEN_SHIFT: u32 = 30;
4034 pub const FDIT_SHIFT: u32 = 31;
4036 pub const NVNTTLB_SHIFT: u32 = 32;
4038 pub const NVNTTLBIS_SHIFT: u32 = 33;
4040 pub const NVNTTLBOS_SHIFT: u32 = 34;
4042 pub const VTLBIDOSEN_SHIFT: u32 = 35;
4044 pub const FNB_SHIFT: u32 = 36;
4046 pub const VTE_SHIFT: u32 = 37;
4048 pub const VTAO_SHIFT: u32 = 38;
4050 pub const VTCO_SHIFT: u32 = 39;
4052}
4053
4054#[cfg(feature = "el2")]
4055bitflags! {
4056 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4058 #[repr(transparent)]
4059 pub struct HcrEl2: u64 {
4060 const VM = 1 << 0;
4062 const SWIO = 1 << 1;
4064 const PTW = 1 << 2;
4066 const FMO = 1 << 3;
4068 const IMO = 1 << 4;
4070 const AMO = 1 << 5;
4072 const VF = 1 << 6;
4074 const VI = 1 << 7;
4076 const VSE = 1 << 8;
4078 const FB = 1 << 9;
4080 const DC = 1 << 12;
4082 const TWI = 1 << 13;
4084 const TWE = 1 << 14;
4086 const TID0 = 1 << 15;
4088 const TID1 = 1 << 16;
4090 const TID2 = 1 << 17;
4092 const TID3 = 1 << 18;
4094 const TSC = 1 << 19;
4096 const TIDCP = 1 << 20;
4098 const TACR = 1 << 21;
4100 const TSW = 1 << 22;
4102 const TPCP = 1 << 23;
4104 const TPU = 1 << 24;
4106 const TTLB = 1 << 25;
4108 const TVM = 1 << 26;
4110 const TGE = 1 << 27;
4112 const TDZ = 1 << 28;
4114 const HCD = 1 << 29;
4116 const TRVM = 1 << 30;
4118 const RW = 1 << 31;
4120 const CD = 1 << 32;
4122 const ID = 1 << 33;
4124 const E2H = 1 << 34;
4126 const TLOR = 1 << 35;
4128 const TERR = 1 << 36;
4130 const TEA = 1 << 37;
4132 const APK = 1 << 40;
4134 const API = 1 << 41;
4136 const NV = 1 << 42;
4138 const NV1 = 1 << 43;
4140 const AT = 1 << 44;
4142 const NV2 = 1 << 45;
4144 const FWB = 1 << 46;
4146 const FIEN = 1 << 47;
4148 const GPF = 1 << 48;
4150 const TID4 = 1 << 49;
4152 const TICAB = 1 << 50;
4154 const AMVOFFEN = 1 << 51;
4156 const TOCU = 1 << 52;
4158 const ENSCXT = 1 << 53;
4160 const TTLBIS = 1 << 54;
4162 const TTLBOS = 1 << 55;
4164 const ATA = 1 << 56;
4166 const DCT = 1 << 57;
4168 const TID5 = 1 << 58;
4170 const TWEDEN = 1 << 59;
4172 }
4173}
4174
4175#[cfg(feature = "el2")]
4176impl HcrEl2 {
4177 pub const VM_SHIFT: u32 = 0;
4179 pub const SWIO_SHIFT: u32 = 1;
4181 pub const PTW_SHIFT: u32 = 2;
4183 pub const FMO_SHIFT: u32 = 3;
4185 pub const IMO_SHIFT: u32 = 4;
4187 pub const AMO_SHIFT: u32 = 5;
4189 pub const VF_SHIFT: u32 = 6;
4191 pub const VI_SHIFT: u32 = 7;
4193 pub const VSE_SHIFT: u32 = 8;
4195 pub const FB_SHIFT: u32 = 9;
4197 pub const BSU_SHIFT: u32 = 10;
4199 pub const BSU_MASK: u64 = 0b11;
4201 pub const DC_SHIFT: u32 = 12;
4203 pub const TWI_SHIFT: u32 = 13;
4205 pub const TWE_SHIFT: u32 = 14;
4207 pub const TID0_SHIFT: u32 = 15;
4209 pub const TID1_SHIFT: u32 = 16;
4211 pub const TID2_SHIFT: u32 = 17;
4213 pub const TID3_SHIFT: u32 = 18;
4215 pub const TSC_SHIFT: u32 = 19;
4217 pub const TIDCP_SHIFT: u32 = 20;
4219 pub const TACR_SHIFT: u32 = 21;
4221 pub const TSW_SHIFT: u32 = 22;
4223 pub const TPCP_SHIFT: u32 = 23;
4225 pub const TPU_SHIFT: u32 = 24;
4227 pub const TTLB_SHIFT: u32 = 25;
4229 pub const TVM_SHIFT: u32 = 26;
4231 pub const TGE_SHIFT: u32 = 27;
4233 pub const TDZ_SHIFT: u32 = 28;
4235 pub const HCD_SHIFT: u32 = 29;
4237 pub const TRVM_SHIFT: u32 = 30;
4239 pub const RW_SHIFT: u32 = 31;
4241 pub const CD_SHIFT: u32 = 32;
4243 pub const ID_SHIFT: u32 = 33;
4245 pub const E2H_SHIFT: u32 = 34;
4247 pub const TLOR_SHIFT: u32 = 35;
4249 pub const TERR_SHIFT: u32 = 36;
4251 pub const TEA_SHIFT: u32 = 37;
4253 pub const APK_SHIFT: u32 = 40;
4255 pub const API_SHIFT: u32 = 41;
4257 pub const NV_SHIFT: u32 = 42;
4259 pub const NV1_SHIFT: u32 = 43;
4261 pub const AT_SHIFT: u32 = 44;
4263 pub const NV2_SHIFT: u32 = 45;
4265 pub const FWB_SHIFT: u32 = 46;
4267 pub const FIEN_SHIFT: u32 = 47;
4269 pub const GPF_SHIFT: u32 = 48;
4271 pub const TID4_SHIFT: u32 = 49;
4273 pub const TICAB_SHIFT: u32 = 50;
4275 pub const AMVOFFEN_SHIFT: u32 = 51;
4277 pub const TOCU_SHIFT: u32 = 52;
4279 pub const ENSCXT_SHIFT: u32 = 53;
4281 pub const TTLBIS_SHIFT: u32 = 54;
4283 pub const TTLBOS_SHIFT: u32 = 55;
4285 pub const ATA_SHIFT: u32 = 56;
4287 pub const DCT_SHIFT: u32 = 57;
4289 pub const TID5_SHIFT: u32 = 58;
4291 pub const TWEDEN_SHIFT: u32 = 59;
4293 pub const TWEDEL_SHIFT: u32 = 60;
4295 pub const TWEDEL_MASK: u64 = 0b1111;
4297
4298 pub const fn bsu(self) -> u8 {
4300 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
4301 }
4302
4303 pub const fn twedel(self) -> u8 {
4305 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
4306 }
4307}
4308
4309bitflags! {
4310 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4312 #[repr(transparent)]
4313 pub struct Hdcr: u32 {
4314 const TPMCR = 1 << 5;
4316 const TPM = 1 << 6;
4318 const HPME = 1 << 7;
4320 const TDE = 1 << 8;
4322 const TDA = 1 << 9;
4324 const TDOSA = 1 << 10;
4326 const TDRA = 1 << 11;
4328 const HPMD = 1 << 17;
4330 const TTRF = 1 << 19;
4332 const HCCD = 1 << 23;
4334 const HLP = 1 << 26;
4336 const TDCC = 1 << 27;
4338 const MTPME = 1 << 28;
4340 const HPMFZO = 1 << 29;
4342 }
4343}
4344
4345impl Hdcr {
4346 pub const HPMN_SHIFT: u32 = 0;
4348 pub const HPMN_MASK: u32 = 0b11111;
4350 pub const TPMCR_SHIFT: u32 = 5;
4352 pub const TPM_SHIFT: u32 = 6;
4354 pub const HPME_SHIFT: u32 = 7;
4356 pub const TDE_SHIFT: u32 = 8;
4358 pub const TDA_SHIFT: u32 = 9;
4360 pub const TDOSA_SHIFT: u32 = 10;
4362 pub const TDRA_SHIFT: u32 = 11;
4364 pub const HPMD_SHIFT: u32 = 17;
4366 pub const TTRF_SHIFT: u32 = 19;
4368 pub const HCCD_SHIFT: u32 = 23;
4370 pub const HLP_SHIFT: u32 = 26;
4372 pub const TDCC_SHIFT: u32 = 27;
4374 pub const MTPME_SHIFT: u32 = 28;
4376 pub const HPMFZO_SHIFT: u32 = 29;
4378
4379 pub const fn hpmn(self) -> u8 {
4381 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
4382 }
4383}
4384
4385bitflags! {
4386 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4388 #[repr(transparent)]
4389 pub struct Hdfar: u32 {
4390 }
4391}
4392
4393impl Hdfar {
4394 pub const VA_SHIFT: u32 = 0;
4396 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
4398
4399 pub const fn va(self) -> u32 {
4401 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
4402 }
4403}
4404
4405#[cfg(feature = "el2")]
4406bitflags! {
4407 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4409 #[repr(transparent)]
4410 pub struct Hdfgrtr2El2: u64 {
4411 const NPMECR_EL1 = 1 << 0;
4413 const NPMIAR_EL1 = 1 << 1;
4415 const NPMICNTR_EL0 = 1 << 2;
4417 const NPMICFILTR_EL0 = 1 << 3;
4419 const NPMUACR_EL1 = 1 << 4;
4421 const NMDSELR_EL1 = 1 << 5;
4423 const NPMSSDATA = 1 << 6;
4425 const NPMSSCR_EL1 = 1 << 7;
4427 const NSPMEVCNTRN_EL0 = 1 << 8;
4429 const NSPMEVTYPERN_EL0 = 1 << 9;
4431 const NSPMSELR_EL0 = 1 << 10;
4433 const NSPMCNTEN = 1 << 11;
4435 const NSPMINTEN = 1 << 12;
4437 const NSPMOVS = 1 << 13;
4439 const NSPMCR_EL0 = 1 << 14;
4441 const NSPMACCESSR_EL1 = 1 << 15;
4443 const NSPMSCR_EL1 = 1 << 16;
4445 const NSPMID = 1 << 17;
4447 const NSPMDEVAFF_EL1 = 1 << 18;
4449 const NPMSDSFR_EL1 = 1 << 19;
4451 const NTRCITECR_EL1 = 1 << 20;
4453 const NTRBMPAM_EL1 = 1 << 22;
4455 const NMDSTEPOP_EL1 = 1 << 23;
4457 const NPMBMAR_EL1 = 1 << 24;
4459 }
4460}
4461
4462#[cfg(feature = "el2")]
4463impl Hdfgrtr2El2 {
4464 pub const NPMECR_EL1_SHIFT: u32 = 0;
4466 pub const NPMIAR_EL1_SHIFT: u32 = 1;
4468 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
4470 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
4472 pub const NPMUACR_EL1_SHIFT: u32 = 4;
4474 pub const NMDSELR_EL1_SHIFT: u32 = 5;
4476 pub const NPMSSDATA_SHIFT: u32 = 6;
4478 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
4480 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
4482 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
4484 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
4486 pub const NSPMCNTEN_SHIFT: u32 = 11;
4488 pub const NSPMINTEN_SHIFT: u32 = 12;
4490 pub const NSPMOVS_SHIFT: u32 = 13;
4492 pub const NSPMCR_EL0_SHIFT: u32 = 14;
4494 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
4496 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
4498 pub const NSPMID_SHIFT: u32 = 17;
4500 pub const NSPMDEVAFF_EL1_SHIFT: u32 = 18;
4502 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
4504 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
4506 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
4508 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
4510 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
4512}
4513
4514#[cfg(feature = "el2")]
4515bitflags! {
4516 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4518 #[repr(transparent)]
4519 pub struct Hdfgwtr2El2: u64 {
4520 const NPMECR_EL1 = 1 << 0;
4522 const NPMIAR_EL1 = 1 << 1;
4524 const NPMICNTR_EL0 = 1 << 2;
4526 const NPMICFILTR_EL0 = 1 << 3;
4528 const NPMUACR_EL1 = 1 << 4;
4530 const NMDSELR_EL1 = 1 << 5;
4532 const NPMSSCR_EL1 = 1 << 7;
4534 const NSPMEVCNTRN_EL0 = 1 << 8;
4536 const NSPMEVTYPERN_EL0 = 1 << 9;
4538 const NSPMSELR_EL0 = 1 << 10;
4540 const NSPMCNTEN = 1 << 11;
4542 const NSPMINTEN = 1 << 12;
4544 const NSPMOVS = 1 << 13;
4546 const NSPMCR_EL0 = 1 << 14;
4548 const NSPMACCESSR_EL1 = 1 << 15;
4550 const NSPMSCR_EL1 = 1 << 16;
4552 const NPMSDSFR_EL1 = 1 << 19;
4554 const NTRCITECR_EL1 = 1 << 20;
4556 const NPMZR_EL0 = 1 << 21;
4558 const NTRBMPAM_EL1 = 1 << 22;
4560 const NMDSTEPOP_EL1 = 1 << 23;
4562 const NPMBMAR_EL1 = 1 << 24;
4564 }
4565}
4566
4567#[cfg(feature = "el2")]
4568impl Hdfgwtr2El2 {
4569 pub const NPMECR_EL1_SHIFT: u32 = 0;
4571 pub const NPMIAR_EL1_SHIFT: u32 = 1;
4573 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
4575 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
4577 pub const NPMUACR_EL1_SHIFT: u32 = 4;
4579 pub const NMDSELR_EL1_SHIFT: u32 = 5;
4581 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
4583 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
4585 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
4587 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
4589 pub const NSPMCNTEN_SHIFT: u32 = 11;
4591 pub const NSPMINTEN_SHIFT: u32 = 12;
4593 pub const NSPMOVS_SHIFT: u32 = 13;
4595 pub const NSPMCR_EL0_SHIFT: u32 = 14;
4597 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
4599 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
4601 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
4603 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
4605 pub const NPMZR_EL0_SHIFT: u32 = 21;
4607 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
4609 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
4611 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
4613}
4614
4615#[cfg(feature = "el2")]
4616bitflags! {
4617 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4619 #[repr(transparent)]
4620 pub struct Hfgitr2El2: u64 {
4621 const TSBCSYNC = 1 << 0;
4623 const NDCCIVAPS = 1 << 1;
4625 const PLBIPERME1OS = 1 << 2;
4627 const PLBIASIDE1OS = 1 << 3;
4629 const PLBIVMALLE1OS = 1 << 4;
4631 const PLBIPERME1IS = 1 << 5;
4633 const PLBIASIDE1IS = 1 << 6;
4635 const PLBIVMALLE1IS = 1 << 7;
4637 const PLBIPERME1 = 1 << 8;
4639 const PLBIASIDE1 = 1 << 9;
4641 const PLBIVMALLE1 = 1 << 10;
4643 const PLBIPERMAE1OS = 1 << 11;
4645 const PLBIPERMAE1IS = 1 << 12;
4647 const PLBIPERMAE1 = 1 << 13;
4649 const DCGBVA = 1 << 14;
4651 }
4652}
4653
4654#[cfg(feature = "el2")]
4655impl Hfgitr2El2 {
4656 pub const TSBCSYNC_SHIFT: u32 = 0;
4658 pub const NDCCIVAPS_SHIFT: u32 = 1;
4660 pub const PLBIPERME1OS_SHIFT: u32 = 2;
4662 pub const PLBIASIDE1OS_SHIFT: u32 = 3;
4664 pub const PLBIVMALLE1OS_SHIFT: u32 = 4;
4666 pub const PLBIPERME1IS_SHIFT: u32 = 5;
4668 pub const PLBIASIDE1IS_SHIFT: u32 = 6;
4670 pub const PLBIVMALLE1IS_SHIFT: u32 = 7;
4672 pub const PLBIPERME1_SHIFT: u32 = 8;
4674 pub const PLBIASIDE1_SHIFT: u32 = 9;
4676 pub const PLBIVMALLE1_SHIFT: u32 = 10;
4678 pub const PLBIPERMAE1OS_SHIFT: u32 = 11;
4680 pub const PLBIPERMAE1IS_SHIFT: u32 = 12;
4682 pub const PLBIPERMAE1_SHIFT: u32 = 13;
4684 pub const DCGBVA_SHIFT: u32 = 14;
4686}
4687
4688#[cfg(feature = "el2")]
4689bitflags! {
4690 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4692 #[repr(transparent)]
4693 pub struct Hfgrtr2El2: u64 {
4694 const NPFAR_EL1 = 1 << 0;
4696 const NERXGSR_EL1 = 1 << 1;
4698 const NRCWSMASK_EL1 = 1 << 2;
4700 const NCPACRMASK_EL1 = 1 << 3;
4702 const NSCTLRMASK_EL1 = 1 << 4;
4704 const NSCTLR2MASK_EL1 = 1 << 5;
4706 const NTCRMASK_EL1 = 1 << 6;
4708 const NTCR2MASK_EL1 = 1 << 7;
4710 const NCPACRALIAS_EL1 = 1 << 8;
4712 const NSCTLRALIAS_EL1 = 1 << 9;
4714 const NSCTLR2ALIAS_EL1 = 1 << 10;
4716 const NTCRALIAS_EL1 = 1 << 11;
4718 const NTCR2ALIAS_EL1 = 1 << 12;
4720 const NACTLRMASK_EL1 = 1 << 13;
4722 const NACTLRALIAS_EL1 = 1 << 14;
4724 const NTINDEX_EL0 = 1 << 15;
4726 const NTINDEX_EL1 = 1 << 16;
4728 const NSTINDEX_EL1 = 1 << 17;
4730 const NTTTBRP_EL1 = 1 << 20;
4732 const NTTTBRU_EL1 = 1 << 21;
4734 const NIRTBRP_EL1 = 1 << 22;
4736 const NIRTBRU_EL1 = 1 << 23;
4738 const NDPOTBR1_EL1 = 1 << 24;
4740 const NDPOTBR0_EL1 = 1 << 25;
4742 const NTPMIN1_EL1 = 1 << 26;
4744 const NTPMIN0_EL1 = 1 << 27;
4746 const NTPMIN1_EL0 = 1 << 28;
4748 const NTPMIN0_EL0 = 1 << 29;
4750 const NTLBIDIDR_EL1 = 1 << 30;
4752 const TFSR_EL1 = 1 << 33;
4754 const RGSR_EL1 = 1 << 34;
4756 const GCR_EL1 = 1 << 35;
4758 const NTPIDR3_EL0 = 1 << 36;
4760 const NTPIDR3_EL1 = 1 << 37;
4762 }
4763}
4764
4765#[cfg(feature = "el2")]
4766impl Hfgrtr2El2 {
4767 pub const NPFAR_EL1_SHIFT: u32 = 0;
4769 pub const NERXGSR_EL1_SHIFT: u32 = 1;
4771 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
4773 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
4775 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
4777 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
4779 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
4781 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
4783 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
4785 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
4787 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
4789 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
4791 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
4793 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
4795 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
4797 pub const NTINDEX_EL0_SHIFT: u32 = 15;
4799 pub const NTINDEX_EL1_SHIFT: u32 = 16;
4801 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
4803 pub const NFGDTN_EL1_SHIFT: u32 = 18;
4805 pub const NFGDTN_EL1_MASK: u64 = 0b11;
4807 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
4809 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
4811 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
4813 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
4815 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
4817 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
4819 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
4821 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
4823 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
4825 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
4827 pub const NTLBIDIDR_EL1_SHIFT: u32 = 30;
4829 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
4831 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
4833 pub const TFSR_EL1_SHIFT: u32 = 33;
4835 pub const RGSR_EL1_SHIFT: u32 = 34;
4837 pub const GCR_EL1_SHIFT: u32 = 35;
4839 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
4841 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
4843
4844 pub const fn nfgdtn_el1(self) -> u8 {
4846 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
4847 }
4848
4849 pub const fn nafgdtn_el1(self) -> u8 {
4851 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
4852 }
4853}
4854
4855#[cfg(feature = "el2")]
4856bitflags! {
4857 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
4859 #[repr(transparent)]
4860 pub struct Hfgwtr2El2: u64 {
4861 const NPFAR_EL1 = 1 << 0;
4863 const NRCWSMASK_EL1 = 1 << 2;
4865 const NCPACRMASK_EL1 = 1 << 3;
4867 const NSCTLRMASK_EL1 = 1 << 4;
4869 const NSCTLR2MASK_EL1 = 1 << 5;
4871 const NTCRMASK_EL1 = 1 << 6;
4873 const NTCR2MASK_EL1 = 1 << 7;
4875 const NCPACRALIAS_EL1 = 1 << 8;
4877 const NSCTLRALIAS_EL1 = 1 << 9;
4879 const NSCTLR2ALIAS_EL1 = 1 << 10;
4881 const NTCRALIAS_EL1 = 1 << 11;
4883 const NTCR2ALIAS_EL1 = 1 << 12;
4885 const NACTLRMASK_EL1 = 1 << 13;
4887 const NACTLRALIAS_EL1 = 1 << 14;
4889 const NTINDEX_EL0 = 1 << 15;
4891 const NTINDEX_EL1 = 1 << 16;
4893 const NSTINDEX_EL1 = 1 << 17;
4895 const NTTTBRP_EL1 = 1 << 20;
4897 const NTTTBRU_EL1 = 1 << 21;
4899 const NIRTBRP_EL1 = 1 << 22;
4901 const NIRTBRU_EL1 = 1 << 23;
4903 const NDPOTBR1_EL1 = 1 << 24;
4905 const NDPOTBR0_EL1 = 1 << 25;
4907 const NTPMIN1_EL1 = 1 << 26;
4909 const NTPMIN0_EL1 = 1 << 27;
4911 const NTPMIN1_EL0 = 1 << 28;
4913 const NTPMIN0_EL0 = 1 << 29;
4915 const TFSR_EL1 = 1 << 33;
4917 const RGSR_EL1 = 1 << 34;
4919 const GCR_EL1 = 1 << 35;
4921 const NTPIDR3_EL0 = 1 << 36;
4923 const NTPIDR3_EL1 = 1 << 37;
4925 }
4926}
4927
4928#[cfg(feature = "el2")]
4929impl Hfgwtr2El2 {
4930 pub const NPFAR_EL1_SHIFT: u32 = 0;
4932 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
4934 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
4936 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
4938 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
4940 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
4942 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
4944 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
4946 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
4948 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
4950 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
4952 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
4954 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
4956 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
4958 pub const NTINDEX_EL0_SHIFT: u32 = 15;
4960 pub const NTINDEX_EL1_SHIFT: u32 = 16;
4962 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
4964 pub const NFGDTN_EL1_SHIFT: u32 = 18;
4966 pub const NFGDTN_EL1_MASK: u64 = 0b11;
4968 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
4970 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
4972 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
4974 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
4976 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
4978 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
4980 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
4982 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
4984 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
4986 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
4988 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
4990 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
4992 pub const TFSR_EL1_SHIFT: u32 = 33;
4994 pub const RGSR_EL1_SHIFT: u32 = 34;
4996 pub const GCR_EL1_SHIFT: u32 = 35;
4998 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
5000 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
5002
5003 pub const fn nfgdtn_el1(self) -> u8 {
5005 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
5006 }
5007
5008 pub const fn nafgdtn_el1(self) -> u8 {
5010 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
5011 }
5012}
5013
5014#[cfg(feature = "el2")]
5015bitflags! {
5016 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5018 #[repr(transparent)]
5019 pub struct HfgwtrEl2: u64 {
5020 const AFSR0_EL1 = 1 << 0;
5022 const AFSR1_EL1 = 1 << 1;
5024 const AMAIR_EL1 = 1 << 3;
5026 const APDAKEY = 1 << 4;
5028 const APDBKEY = 1 << 5;
5030 const APGAKEY = 1 << 6;
5032 const APIAKEY = 1 << 7;
5034 const APIBKEY = 1 << 8;
5036 const CONTEXTIDR_EL1 = 1 << 11;
5038 const CPACR_EL1 = 1 << 12;
5040 const CSSELR_EL1 = 1 << 13;
5042 const ESR_EL1 = 1 << 16;
5044 const FAR_EL1 = 1 << 17;
5046 const LORC_EL1 = 1 << 19;
5048 const LOREA_EL1 = 1 << 20;
5050 const LORN_EL1 = 1 << 22;
5052 const LORSA_EL1 = 1 << 23;
5054 const MAIR_EL1 = 1 << 24;
5056 const PAR_EL1 = 1 << 27;
5058 const SCTLR_EL1 = 1 << 29;
5060 const SCXTNUM_EL1 = 1 << 30;
5062 const SCXTNUM_EL0 = 1 << 31;
5064 const TCR_EL1 = 1 << 32;
5066 const TPIDR_EL1 = 1 << 33;
5068 const TPIDRRO_EL0 = 1 << 34;
5070 const TPIDR_EL0 = 1 << 35;
5072 const TTBR0_EL1 = 1 << 36;
5074 const TTBR1_EL1 = 1 << 37;
5076 const VBAR_EL1 = 1 << 38;
5078 const ICC_IGRPENN_EL1 = 1 << 39;
5080 const ERRSELR_EL1 = 1 << 41;
5082 const ERXCTLR_EL1 = 1 << 43;
5084 const ERXSTATUS_EL1 = 1 << 44;
5086 const ERXMISCN_EL1 = 1 << 45;
5088 const ERXPFGCTL_EL1 = 1 << 47;
5090 const ERXPFGCDN_EL1 = 1 << 48;
5092 const ERXADDR_EL1 = 1 << 49;
5094 const NACCDATA_EL1 = 1 << 50;
5096 const NGCS_EL0 = 1 << 52;
5098 const NGCS_EL1 = 1 << 53;
5100 const NSMPRI_EL1 = 1 << 54;
5102 const NTPIDR2_EL0 = 1 << 55;
5104 const NRCWMASK_EL1 = 1 << 56;
5106 const NPIRE0_EL1 = 1 << 57;
5108 const NPIR_EL1 = 1 << 58;
5110 const NPOR_EL0 = 1 << 59;
5112 const NPOR_EL1 = 1 << 60;
5114 const NS2POR_EL1 = 1 << 61;
5116 const NMAIR2_EL1 = 1 << 62;
5118 const NAMAIR2_EL1 = 1 << 63;
5120 }
5121}
5122
5123#[cfg(feature = "el2")]
5124impl HfgwtrEl2 {
5125 pub const AFSR0_EL1_SHIFT: u32 = 0;
5127 pub const AFSR1_EL1_SHIFT: u32 = 1;
5129 pub const AMAIR_EL1_SHIFT: u32 = 3;
5131 pub const APDAKEY_SHIFT: u32 = 4;
5133 pub const APDBKEY_SHIFT: u32 = 5;
5135 pub const APGAKEY_SHIFT: u32 = 6;
5137 pub const APIAKEY_SHIFT: u32 = 7;
5139 pub const APIBKEY_SHIFT: u32 = 8;
5141 pub const CONTEXTIDR_EL1_SHIFT: u32 = 11;
5143 pub const CPACR_EL1_SHIFT: u32 = 12;
5145 pub const CSSELR_EL1_SHIFT: u32 = 13;
5147 pub const ESR_EL1_SHIFT: u32 = 16;
5149 pub const FAR_EL1_SHIFT: u32 = 17;
5151 pub const LORC_EL1_SHIFT: u32 = 19;
5153 pub const LOREA_EL1_SHIFT: u32 = 20;
5155 pub const LORN_EL1_SHIFT: u32 = 22;
5157 pub const LORSA_EL1_SHIFT: u32 = 23;
5159 pub const MAIR_EL1_SHIFT: u32 = 24;
5161 pub const PAR_EL1_SHIFT: u32 = 27;
5163 pub const SCTLR_EL1_SHIFT: u32 = 29;
5165 pub const SCXTNUM_EL1_SHIFT: u32 = 30;
5167 pub const SCXTNUM_EL0_SHIFT: u32 = 31;
5169 pub const TCR_EL1_SHIFT: u32 = 32;
5171 pub const TPIDR_EL1_SHIFT: u32 = 33;
5173 pub const TPIDRRO_EL0_SHIFT: u32 = 34;
5175 pub const TPIDR_EL0_SHIFT: u32 = 35;
5177 pub const TTBR0_EL1_SHIFT: u32 = 36;
5179 pub const TTBR1_EL1_SHIFT: u32 = 37;
5181 pub const VBAR_EL1_SHIFT: u32 = 38;
5183 pub const ICC_IGRPENN_EL1_SHIFT: u32 = 39;
5185 pub const ERRSELR_EL1_SHIFT: u32 = 41;
5187 pub const ERXCTLR_EL1_SHIFT: u32 = 43;
5189 pub const ERXSTATUS_EL1_SHIFT: u32 = 44;
5191 pub const ERXMISCN_EL1_SHIFT: u32 = 45;
5193 pub const ERXPFGCTL_EL1_SHIFT: u32 = 47;
5195 pub const ERXPFGCDN_EL1_SHIFT: u32 = 48;
5197 pub const ERXADDR_EL1_SHIFT: u32 = 49;
5199 pub const NACCDATA_EL1_SHIFT: u32 = 50;
5201 pub const NGCS_EL0_SHIFT: u32 = 52;
5203 pub const NGCS_EL1_SHIFT: u32 = 53;
5205 pub const NSMPRI_EL1_SHIFT: u32 = 54;
5207 pub const NTPIDR2_EL0_SHIFT: u32 = 55;
5209 pub const NRCWMASK_EL1_SHIFT: u32 = 56;
5211 pub const NPIRE0_EL1_SHIFT: u32 = 57;
5213 pub const NPIR_EL1_SHIFT: u32 = 58;
5215 pub const NPOR_EL0_SHIFT: u32 = 59;
5217 pub const NPOR_EL1_SHIFT: u32 = 60;
5219 pub const NS2POR_EL1_SHIFT: u32 = 61;
5221 pub const NMAIR2_EL1_SHIFT: u32 = 62;
5223 pub const NAMAIR2_EL1_SHIFT: u32 = 63;
5225}
5226
5227bitflags! {
5228 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5230 #[repr(transparent)]
5231 pub struct Hifar: u32 {
5232 }
5233}
5234
5235impl Hifar {
5236 pub const VA_SHIFT: u32 = 0;
5238 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
5240
5241 pub const fn va(self) -> u32 {
5243 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
5244 }
5245}
5246
5247bitflags! {
5248 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5250 #[repr(transparent)]
5251 pub struct Hmair0: u32 {
5252 }
5253}
5254
5255impl Hmair0 {
5256 pub const ATTR_SHIFT: u32 = 0;
5258 pub const ATTR_MASK: u32 = 0b11111111;
5260
5261 pub const fn attr(self, n: u32) -> u8 {
5263 assert!(n < 4);
5264 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
5265 }
5266}
5267
5268bitflags! {
5269 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5271 #[repr(transparent)]
5272 pub struct Hmair1: u32 {
5273 }
5274}
5275
5276impl Hmair1 {
5277 pub const ATTR_SHIFT: u32 = 0;
5279 pub const ATTR_MASK: u32 = 0b11111111;
5281
5282 pub const fn attr(self, n: u32) -> u8 {
5284 assert!(n >= 4 && n < 8);
5285 ((self.bits() >> (Self::ATTR_SHIFT + (n - 4) * 8)) & 0b11111111) as u8
5286 }
5287}
5288
5289bitflags! {
5290 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5292 #[repr(transparent)]
5293 pub struct Hpfar: u32 {
5294 }
5295}
5296
5297impl Hpfar {
5298 pub const FIPA_39_12_SHIFT: u32 = 4;
5300 pub const FIPA_39_12_MASK: u32 = 0b1111111111111111111111111111;
5302
5303 pub const fn fipa_39_12(self) -> u32 {
5305 ((self.bits() >> Self::FIPA_39_12_SHIFT) & 0b1111111111111111111111111111) as u32
5306 }
5307}
5308
5309#[cfg(feature = "el2")]
5310bitflags! {
5311 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5313 #[repr(transparent)]
5314 pub struct HpfarEl2: u64 {
5315 const NS = 1 << 63;
5317 }
5318}
5319
5320#[cfg(feature = "el2")]
5321impl HpfarEl2 {
5322 pub const FIPA_SHIFT: u32 = 4;
5324 pub const FIPA_MASK: u64 = 0b11111111111111111111111111111111111111111111;
5326 pub const NS_SHIFT: u32 = 63;
5328
5329 pub const fn fipa(self) -> u64 {
5331 ((self.bits() >> Self::FIPA_SHIFT) & 0b11111111111111111111111111111111111111111111) as u64
5332 }
5333}
5334
5335bitflags! {
5336 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5338 #[repr(transparent)]
5339 pub struct Hrmr: u32 {
5340 const AA64 = 1 << 0;
5342 const RR = 1 << 1;
5344 }
5345}
5346
5347impl Hrmr {
5348 pub const AA64_SHIFT: u32 = 0;
5350 pub const RR_SHIFT: u32 = 1;
5352}
5353
5354bitflags! {
5355 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5357 #[repr(transparent)]
5358 pub struct Hsctlr: u32 {
5359 const RES1 = 0b110000110001010000100000000000;
5361 const M = 1 << 0;
5363 const A = 1 << 1;
5365 const C = 1 << 2;
5367 const NTLSMD = 1 << 3;
5369 const LSMAOE = 1 << 4;
5371 const CP15BEN = 1 << 5;
5373 const ITD = 1 << 7;
5375 const SED = 1 << 8;
5377 const I = 1 << 12;
5379 const WXN = 1 << 19;
5381 const TE = 1 << 30;
5383 const DSSBS = 1 << 31;
5385 }
5386}
5387
5388impl Hsctlr {
5389 pub const M_SHIFT: u32 = 0;
5391 pub const A_SHIFT: u32 = 1;
5393 pub const C_SHIFT: u32 = 2;
5395 pub const NTLSMD_SHIFT: u32 = 3;
5397 pub const LSMAOE_SHIFT: u32 = 4;
5399 pub const CP15BEN_SHIFT: u32 = 5;
5401 pub const ITD_SHIFT: u32 = 7;
5403 pub const SED_SHIFT: u32 = 8;
5405 pub const I_SHIFT: u32 = 12;
5407 pub const WXN_SHIFT: u32 = 19;
5409 pub const TE_SHIFT: u32 = 30;
5411 pub const DSSBS_SHIFT: u32 = 31;
5413}
5414
5415bitflags! {
5416 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5418 #[repr(transparent)]
5419 pub struct Hsr: u32 {
5420 const IL = 1 << 25;
5422 }
5423}
5424
5425impl Hsr {
5426 pub const ISS_SHIFT: u32 = 0;
5428 pub const ISS_MASK: u32 = 0b1111111111111111111111111;
5430 pub const IL_SHIFT: u32 = 25;
5432 pub const EC_SHIFT: u32 = 26;
5434 pub const EC_MASK: u32 = 0b111111;
5436
5437 pub const fn iss(self) -> u32 {
5439 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
5440 }
5441
5442 pub const fn ec(self) -> u8 {
5444 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
5445 }
5446}
5447
5448bitflags! {
5449 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5451 #[repr(transparent)]
5452 pub struct Htcr: u32 {
5453 const RES1 = 0b10000000100000000000000000000000;
5455 const HPD = 1 << 24;
5457 const HWU59 = 1 << 25;
5459 const HWU60 = 1 << 26;
5461 const HWU61 = 1 << 27;
5463 const HWU62 = 1 << 28;
5465 }
5466}
5467
5468impl Htcr {
5469 pub const T0SZ_SHIFT: u32 = 0;
5471 pub const T0SZ_MASK: u32 = 0b111;
5473 pub const IRGN0_SHIFT: u32 = 8;
5475 pub const IRGN0_MASK: u32 = 0b11;
5477 pub const ORGN0_SHIFT: u32 = 10;
5479 pub const ORGN0_MASK: u32 = 0b11;
5481 pub const SH0_SHIFT: u32 = 12;
5483 pub const SH0_MASK: u32 = 0b11;
5485 pub const HPD_SHIFT: u32 = 24;
5487 pub const HWU59_SHIFT: u32 = 25;
5489 pub const HWU60_SHIFT: u32 = 26;
5491 pub const HWU61_SHIFT: u32 = 27;
5493 pub const HWU62_SHIFT: u32 = 28;
5495
5496 pub const fn t0sz(self) -> u8 {
5498 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111) as u8
5499 }
5500
5501 pub const fn irgn0(self) -> u8 {
5503 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
5504 }
5505
5506 pub const fn orgn0(self) -> u8 {
5508 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
5509 }
5510
5511 pub const fn sh0(self) -> u8 {
5513 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
5514 }
5515}
5516
5517bitflags! {
5518 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5520 #[repr(transparent)]
5521 pub struct Htpidr: u32 {
5522 }
5523}
5524
5525impl Htpidr {
5526 pub const TID_SHIFT: u32 = 0;
5528 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
5530
5531 pub const fn tid(self) -> u32 {
5533 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
5534 }
5535}
5536
5537bitflags! {
5538 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5540 #[repr(transparent)]
5541 pub struct Htrfcr: u32 {
5542 const E0HTRE = 1 << 0;
5544 const E2TRE = 1 << 1;
5546 const CX = 1 << 3;
5548 }
5549}
5550
5551impl Htrfcr {
5552 pub const E0HTRE_SHIFT: u32 = 0;
5554 pub const E2TRE_SHIFT: u32 = 1;
5556 pub const CX_SHIFT: u32 = 3;
5558 pub const TS_SHIFT: u32 = 5;
5560 pub const TS_MASK: u32 = 0b11;
5562
5563 pub const fn ts(self) -> u8 {
5565 ((self.bits() >> Self::TS_SHIFT) & 0b11) as u8
5566 }
5567}
5568
5569bitflags! {
5570 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5572 #[repr(transparent)]
5573 pub struct Httbr: u64 {
5574 const CNP = 1 << 0;
5576 }
5577}
5578
5579impl Httbr {
5580 pub const CNP_SHIFT: u32 = 0;
5582 pub const BADDR_SHIFT: u32 = 1;
5584 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
5586
5587 pub const fn baddr(self) -> u64 {
5589 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
5590 as u64
5591 }
5592}
5593
5594bitflags! {
5595 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5597 #[repr(transparent)]
5598 pub struct Hvbar: u32 {
5599 }
5600}
5601
5602impl Hvbar {
5603 pub const VBA_SHIFT: u32 = 5;
5605 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
5607
5608 pub const fn vba(self) -> u32 {
5610 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
5611 }
5612}
5613
5614#[cfg(feature = "el1")]
5615bitflags! {
5616 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5618 #[repr(transparent)]
5619 pub struct IccSreEl1: u64 {
5620 const SRE = 1 << 0;
5622 const DFB = 1 << 1;
5624 const DIB = 1 << 2;
5626 }
5627}
5628
5629#[cfg(feature = "el1")]
5630impl IccSreEl1 {
5631 pub const SRE_SHIFT: u32 = 0;
5633 pub const DFB_SHIFT: u32 = 1;
5635 pub const DIB_SHIFT: u32 = 2;
5637}
5638
5639#[cfg(feature = "el2")]
5640bitflags! {
5641 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5643 #[repr(transparent)]
5644 pub struct IccSreEl2: u64 {
5645 const SRE = 1 << 0;
5647 const DFB = 1 << 1;
5649 const DIB = 1 << 2;
5651 const ENABLE = 1 << 3;
5653 }
5654}
5655
5656#[cfg(feature = "el2")]
5657impl IccSreEl2 {
5658 pub const SRE_SHIFT: u32 = 0;
5660 pub const DFB_SHIFT: u32 = 1;
5662 pub const DIB_SHIFT: u32 = 2;
5664 pub const ENABLE_SHIFT: u32 = 3;
5666}
5667
5668#[cfg(feature = "el3")]
5669bitflags! {
5670 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5672 #[repr(transparent)]
5673 pub struct IccSreEl3: u64 {
5674 const SRE = 1 << 0;
5676 const DFB = 1 << 1;
5678 const DIB = 1 << 2;
5680 const ENABLE = 1 << 3;
5682 }
5683}
5684
5685#[cfg(feature = "el3")]
5686impl IccSreEl3 {
5687 pub const SRE_SHIFT: u32 = 0;
5689 pub const DFB_SHIFT: u32 = 1;
5691 pub const DIB_SHIFT: u32 = 2;
5693 pub const ENABLE_SHIFT: u32 = 3;
5695}
5696
5697#[cfg(feature = "el2")]
5698bitflags! {
5699 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5701 #[repr(transparent)]
5702 pub struct IchHcrEl2: u64 {
5703 const EN = 1 << 0;
5705 const UIE = 1 << 1;
5707 const LRENPIE = 1 << 2;
5709 const NPIE = 1 << 3;
5711 const VGRP0EIE = 1 << 4;
5713 const VGRP0DIE = 1 << 5;
5715 const VGRP1EIE = 1 << 6;
5717 const VGRP1DIE = 1 << 7;
5719 const VSGIEOICOUNT = 1 << 8;
5721 const TC = 1 << 10;
5723 const TALL0 = 1 << 11;
5725 const TALL1 = 1 << 12;
5727 const TSEI = 1 << 13;
5729 const TDIR = 1 << 14;
5731 const DVIM = 1 << 15;
5733 }
5734}
5735
5736#[cfg(feature = "el2")]
5737impl IchHcrEl2 {
5738 pub const EN_SHIFT: u32 = 0;
5740 pub const UIE_SHIFT: u32 = 1;
5742 pub const LRENPIE_SHIFT: u32 = 2;
5744 pub const NPIE_SHIFT: u32 = 3;
5746 pub const VGRP0EIE_SHIFT: u32 = 4;
5748 pub const VGRP0DIE_SHIFT: u32 = 5;
5750 pub const VGRP1EIE_SHIFT: u32 = 6;
5752 pub const VGRP1DIE_SHIFT: u32 = 7;
5754 pub const VSGIEOICOUNT_SHIFT: u32 = 8;
5756 pub const TC_SHIFT: u32 = 10;
5758 pub const TALL0_SHIFT: u32 = 11;
5760 pub const TALL1_SHIFT: u32 = 12;
5762 pub const TSEI_SHIFT: u32 = 13;
5764 pub const TDIR_SHIFT: u32 = 14;
5766 pub const DVIM_SHIFT: u32 = 15;
5768 pub const EOICOUNT_SHIFT: u32 = 27;
5770 pub const EOICOUNT_MASK: u64 = 0b11111;
5772
5773 pub const fn eoicount(self) -> u8 {
5775 ((self.bits() >> Self::EOICOUNT_SHIFT) & 0b11111) as u8
5776 }
5777}
5778
5779#[cfg(feature = "el2")]
5780bitflags! {
5781 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5783 #[repr(transparent)]
5784 pub struct IchVmcrEl2: u64 {
5785 const EN = 1 << 0;
5787 const VENG0 = 1 << 0;
5789 const VENG1 = 1 << 1;
5791 const VACKCTL = 1 << 2;
5793 const VFIQEN = 1 << 3;
5795 const VCBPR = 1 << 4;
5797 const VEOIM = 1 << 9;
5799 }
5800}
5801
5802#[cfg(feature = "el2")]
5803impl IchVmcrEl2 {
5804 pub const EN_SHIFT: u32 = 0;
5806 pub const VENG0_SHIFT: u32 = 0;
5808 pub const VENG1_SHIFT: u32 = 1;
5810 pub const VACKCTL_SHIFT: u32 = 2;
5812 pub const VFIQEN_SHIFT: u32 = 3;
5814 pub const VCBPR_SHIFT: u32 = 4;
5816 pub const VEOIM_SHIFT: u32 = 9;
5818 pub const VBPR1_SHIFT: u32 = 18;
5820 pub const VBPR1_MASK: u64 = 0b111;
5822 pub const VBPR0_SHIFT: u32 = 21;
5824 pub const VBPR0_MASK: u64 = 0b111;
5826
5827 pub const fn vbpr1(self) -> u8 {
5829 ((self.bits() >> Self::VBPR1_SHIFT) & 0b111) as u8
5830 }
5831
5832 pub const fn vbpr0(self) -> u8 {
5834 ((self.bits() >> Self::VBPR0_SHIFT) & 0b111) as u8
5835 }
5836}
5837
5838#[cfg(feature = "el1")]
5839bitflags! {
5840 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5842 #[repr(transparent)]
5843 pub struct IdAa64dfr0El1: u64 {
5844 }
5845}
5846
5847#[cfg(feature = "el1")]
5848impl IdAa64dfr0El1 {
5849 pub const DEBUGVER_SHIFT: u32 = 0;
5851 pub const DEBUGVER_MASK: u64 = 0b1111;
5853 pub const TRACEVER_SHIFT: u32 = 4;
5855 pub const TRACEVER_MASK: u64 = 0b1111;
5857 pub const PMUVER_SHIFT: u32 = 8;
5859 pub const PMUVER_MASK: u64 = 0b1111;
5861 pub const BRPS_SHIFT: u32 = 12;
5863 pub const BRPS_MASK: u64 = 0b1111;
5865 pub const PMSS_SHIFT: u32 = 16;
5867 pub const PMSS_MASK: u64 = 0b1111;
5869 pub const WRPS_SHIFT: u32 = 20;
5871 pub const WRPS_MASK: u64 = 0b1111;
5873 pub const SEBEP_SHIFT: u32 = 24;
5875 pub const SEBEP_MASK: u64 = 0b1111;
5877 pub const CTX_CMPS_SHIFT: u32 = 28;
5879 pub const CTX_CMPS_MASK: u64 = 0b1111;
5881 pub const PMSVER_SHIFT: u32 = 32;
5883 pub const PMSVER_MASK: u64 = 0b1111;
5885 pub const DOUBLELOCK_SHIFT: u32 = 36;
5887 pub const DOUBLELOCK_MASK: u64 = 0b1111;
5889 pub const TRACEFILT_SHIFT: u32 = 40;
5891 pub const TRACEFILT_MASK: u64 = 0b1111;
5893 pub const TRACEBUFFER_SHIFT: u32 = 44;
5895 pub const TRACEBUFFER_MASK: u64 = 0b1111;
5897 pub const MTPMU_SHIFT: u32 = 48;
5899 pub const MTPMU_MASK: u64 = 0b1111;
5901 pub const BRBE_SHIFT: u32 = 52;
5903 pub const BRBE_MASK: u64 = 0b1111;
5905 pub const EXTTRCBUFF_SHIFT: u32 = 56;
5907 pub const EXTTRCBUFF_MASK: u64 = 0b1111;
5909 pub const HPMN0_SHIFT: u32 = 60;
5911 pub const HPMN0_MASK: u64 = 0b1111;
5913
5914 pub const fn debugver(self) -> u8 {
5916 ((self.bits() >> Self::DEBUGVER_SHIFT) & 0b1111) as u8
5917 }
5918
5919 pub const fn tracever(self) -> u8 {
5921 ((self.bits() >> Self::TRACEVER_SHIFT) & 0b1111) as u8
5922 }
5923
5924 pub const fn pmuver(self) -> u8 {
5926 ((self.bits() >> Self::PMUVER_SHIFT) & 0b1111) as u8
5927 }
5928
5929 pub const fn brps(self) -> u8 {
5931 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
5932 }
5933
5934 pub const fn pmss(self) -> u8 {
5936 ((self.bits() >> Self::PMSS_SHIFT) & 0b1111) as u8
5937 }
5938
5939 pub const fn wrps(self) -> u8 {
5941 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
5942 }
5943
5944 pub const fn sebep(self) -> u8 {
5946 ((self.bits() >> Self::SEBEP_SHIFT) & 0b1111) as u8
5947 }
5948
5949 pub const fn ctx_cmps(self) -> u8 {
5951 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
5952 }
5953
5954 pub const fn pmsver(self) -> u8 {
5956 ((self.bits() >> Self::PMSVER_SHIFT) & 0b1111) as u8
5957 }
5958
5959 pub const fn doublelock(self) -> u8 {
5961 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
5962 }
5963
5964 pub const fn tracefilt(self) -> u8 {
5966 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
5967 }
5968
5969 pub const fn tracebuffer(self) -> u8 {
5971 ((self.bits() >> Self::TRACEBUFFER_SHIFT) & 0b1111) as u8
5972 }
5973
5974 pub const fn mtpmu(self) -> u8 {
5976 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
5977 }
5978
5979 pub const fn brbe(self) -> u8 {
5981 ((self.bits() >> Self::BRBE_SHIFT) & 0b1111) as u8
5982 }
5983
5984 pub const fn exttrcbuff(self) -> u8 {
5986 ((self.bits() >> Self::EXTTRCBUFF_SHIFT) & 0b1111) as u8
5987 }
5988
5989 pub const fn hpmn0(self) -> u8 {
5991 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
5992 }
5993}
5994
5995#[cfg(feature = "el1")]
5996bitflags! {
5997 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
5999 #[repr(transparent)]
6000 pub struct IdAa64dfr1El1: u64 {
6001 }
6002}
6003
6004#[cfg(feature = "el1")]
6005impl IdAa64dfr1El1 {
6006 pub const SYSPMUID_SHIFT: u32 = 0;
6008 pub const SYSPMUID_MASK: u64 = 0b11111111;
6010 pub const BRPS_SHIFT: u32 = 8;
6012 pub const BRPS_MASK: u64 = 0b11111111;
6014 pub const WRPS_SHIFT: u32 = 16;
6016 pub const WRPS_MASK: u64 = 0b11111111;
6018 pub const CTX_CMPS_SHIFT: u32 = 24;
6020 pub const CTX_CMPS_MASK: u64 = 0b11111111;
6022 pub const SPMU_SHIFT: u32 = 32;
6024 pub const SPMU_MASK: u64 = 0b1111;
6026 pub const PMICNTR_SHIFT: u32 = 36;
6028 pub const PMICNTR_MASK: u64 = 0b1111;
6030 pub const ABLE_SHIFT: u32 = 40;
6032 pub const ABLE_MASK: u64 = 0b1111;
6034 pub const ITE_SHIFT: u32 = 44;
6036 pub const ITE_MASK: u64 = 0b1111;
6038 pub const EBEP_SHIFT: u32 = 48;
6040 pub const EBEP_MASK: u64 = 0b1111;
6042 pub const DPFZS_SHIFT: u32 = 52;
6044 pub const DPFZS_MASK: u64 = 0b1111;
6046 pub const ABL_CMPS_SHIFT: u32 = 56;
6048 pub const ABL_CMPS_MASK: u64 = 0b11111111;
6050
6051 pub const fn syspmuid(self) -> u8 {
6053 ((self.bits() >> Self::SYSPMUID_SHIFT) & 0b11111111) as u8
6054 }
6055
6056 pub const fn brps(self) -> u8 {
6058 ((self.bits() >> Self::BRPS_SHIFT) & 0b11111111) as u8
6059 }
6060
6061 pub const fn wrps(self) -> u8 {
6063 ((self.bits() >> Self::WRPS_SHIFT) & 0b11111111) as u8
6064 }
6065
6066 pub const fn ctx_cmps(self) -> u8 {
6068 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b11111111) as u8
6069 }
6070
6071 pub const fn spmu(self) -> u8 {
6073 ((self.bits() >> Self::SPMU_SHIFT) & 0b1111) as u8
6074 }
6075
6076 pub const fn pmicntr(self) -> u8 {
6078 ((self.bits() >> Self::PMICNTR_SHIFT) & 0b1111) as u8
6079 }
6080
6081 pub const fn able(self) -> u8 {
6083 ((self.bits() >> Self::ABLE_SHIFT) & 0b1111) as u8
6084 }
6085
6086 pub const fn ite(self) -> u8 {
6088 ((self.bits() >> Self::ITE_SHIFT) & 0b1111) as u8
6089 }
6090
6091 pub const fn ebep(self) -> u8 {
6093 ((self.bits() >> Self::EBEP_SHIFT) & 0b1111) as u8
6094 }
6095
6096 pub const fn dpfzs(self) -> u8 {
6098 ((self.bits() >> Self::DPFZS_SHIFT) & 0b1111) as u8
6099 }
6100
6101 pub const fn abl_cmps(self) -> u8 {
6103 ((self.bits() >> Self::ABL_CMPS_SHIFT) & 0b11111111) as u8
6104 }
6105}
6106
6107#[cfg(feature = "el1")]
6108bitflags! {
6109 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6111 #[repr(transparent)]
6112 pub struct IdAa64isar1El1: u64 {
6113 }
6114}
6115
6116#[cfg(feature = "el1")]
6117impl IdAa64isar1El1 {
6118 pub const DPB_SHIFT: u32 = 0;
6120 pub const DPB_MASK: u64 = 0b1111;
6122 pub const APA_SHIFT: u32 = 4;
6124 pub const APA_MASK: u64 = 0b1111;
6126 pub const API_SHIFT: u32 = 8;
6128 pub const API_MASK: u64 = 0b1111;
6130 pub const JSCVT_SHIFT: u32 = 12;
6132 pub const JSCVT_MASK: u64 = 0b1111;
6134 pub const FCMA_SHIFT: u32 = 16;
6136 pub const FCMA_MASK: u64 = 0b1111;
6138 pub const LRCPC_SHIFT: u32 = 20;
6140 pub const LRCPC_MASK: u64 = 0b1111;
6142 pub const GPA_SHIFT: u32 = 24;
6144 pub const GPA_MASK: u64 = 0b1111;
6146 pub const GPI_SHIFT: u32 = 28;
6148 pub const GPI_MASK: u64 = 0b1111;
6150 pub const FRINTTS_SHIFT: u32 = 32;
6152 pub const FRINTTS_MASK: u64 = 0b1111;
6154 pub const SB_SHIFT: u32 = 36;
6156 pub const SB_MASK: u64 = 0b1111;
6158 pub const SPECRES_SHIFT: u32 = 40;
6160 pub const SPECRES_MASK: u64 = 0b1111;
6162 pub const BF16_SHIFT: u32 = 44;
6164 pub const BF16_MASK: u64 = 0b1111;
6166 pub const DGH_SHIFT: u32 = 48;
6168 pub const DGH_MASK: u64 = 0b1111;
6170 pub const I8MM_SHIFT: u32 = 52;
6172 pub const I8MM_MASK: u64 = 0b1111;
6174 pub const XS_SHIFT: u32 = 56;
6176 pub const XS_MASK: u64 = 0b1111;
6178 pub const LS64_SHIFT: u32 = 60;
6180 pub const LS64_MASK: u64 = 0b1111;
6182
6183 pub const fn dpb(self) -> u8 {
6185 ((self.bits() >> Self::DPB_SHIFT) & 0b1111) as u8
6186 }
6187
6188 pub const fn apa(self) -> u8 {
6190 ((self.bits() >> Self::APA_SHIFT) & 0b1111) as u8
6191 }
6192
6193 pub const fn api(self) -> u8 {
6195 ((self.bits() >> Self::API_SHIFT) & 0b1111) as u8
6196 }
6197
6198 pub const fn jscvt(self) -> u8 {
6200 ((self.bits() >> Self::JSCVT_SHIFT) & 0b1111) as u8
6201 }
6202
6203 pub const fn fcma(self) -> u8 {
6205 ((self.bits() >> Self::FCMA_SHIFT) & 0b1111) as u8
6206 }
6207
6208 pub const fn lrcpc(self) -> u8 {
6210 ((self.bits() >> Self::LRCPC_SHIFT) & 0b1111) as u8
6211 }
6212
6213 pub const fn gpa(self) -> u8 {
6215 ((self.bits() >> Self::GPA_SHIFT) & 0b1111) as u8
6216 }
6217
6218 pub const fn gpi(self) -> u8 {
6220 ((self.bits() >> Self::GPI_SHIFT) & 0b1111) as u8
6221 }
6222
6223 pub const fn frintts(self) -> u8 {
6225 ((self.bits() >> Self::FRINTTS_SHIFT) & 0b1111) as u8
6226 }
6227
6228 pub const fn sb(self) -> u8 {
6230 ((self.bits() >> Self::SB_SHIFT) & 0b1111) as u8
6231 }
6232
6233 pub const fn specres(self) -> u8 {
6235 ((self.bits() >> Self::SPECRES_SHIFT) & 0b1111) as u8
6236 }
6237
6238 pub const fn bf16(self) -> u8 {
6240 ((self.bits() >> Self::BF16_SHIFT) & 0b1111) as u8
6241 }
6242
6243 pub const fn dgh(self) -> u8 {
6245 ((self.bits() >> Self::DGH_SHIFT) & 0b1111) as u8
6246 }
6247
6248 pub const fn i8mm(self) -> u8 {
6250 ((self.bits() >> Self::I8MM_SHIFT) & 0b1111) as u8
6251 }
6252
6253 pub const fn xs(self) -> u8 {
6255 ((self.bits() >> Self::XS_SHIFT) & 0b1111) as u8
6256 }
6257
6258 pub const fn ls64(self) -> u8 {
6260 ((self.bits() >> Self::LS64_SHIFT) & 0b1111) as u8
6261 }
6262}
6263
6264#[cfg(feature = "el1")]
6265bitflags! {
6266 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6268 #[repr(transparent)]
6269 pub struct IdAa64isar2El1: u64 {
6270 }
6271}
6272
6273#[cfg(feature = "el1")]
6274impl IdAa64isar2El1 {
6275 pub const WFXT_SHIFT: u32 = 0;
6277 pub const WFXT_MASK: u64 = 0b1111;
6279 pub const RPRES_SHIFT: u32 = 4;
6281 pub const RPRES_MASK: u64 = 0b1111;
6283 pub const GPA3_SHIFT: u32 = 8;
6285 pub const GPA3_MASK: u64 = 0b1111;
6287 pub const APA3_SHIFT: u32 = 12;
6289 pub const APA3_MASK: u64 = 0b1111;
6291 pub const MOPS_SHIFT: u32 = 16;
6293 pub const MOPS_MASK: u64 = 0b1111;
6295 pub const BC_SHIFT: u32 = 20;
6297 pub const BC_MASK: u64 = 0b1111;
6299 pub const PAC_FRAC_SHIFT: u32 = 24;
6301 pub const PAC_FRAC_MASK: u64 = 0b1111;
6303 pub const CLRBHB_SHIFT: u32 = 28;
6305 pub const CLRBHB_MASK: u64 = 0b1111;
6307 pub const SYSREG_128_SHIFT: u32 = 32;
6309 pub const SYSREG_128_MASK: u64 = 0b1111;
6311 pub const SYSINSTR_128_SHIFT: u32 = 36;
6313 pub const SYSINSTR_128_MASK: u64 = 0b1111;
6315 pub const PRFMSLC_SHIFT: u32 = 40;
6317 pub const PRFMSLC_MASK: u64 = 0b1111;
6319 pub const PCDPHINT_SHIFT: u32 = 44;
6321 pub const PCDPHINT_MASK: u64 = 0b1111;
6323 pub const RPRFM_SHIFT: u32 = 48;
6325 pub const RPRFM_MASK: u64 = 0b1111;
6327 pub const CSSC_SHIFT: u32 = 52;
6329 pub const CSSC_MASK: u64 = 0b1111;
6331 pub const LUT_SHIFT: u32 = 56;
6333 pub const LUT_MASK: u64 = 0b1111;
6335 pub const ATS1A_SHIFT: u32 = 60;
6337 pub const ATS1A_MASK: u64 = 0b1111;
6339
6340 pub const fn wfxt(self) -> u8 {
6342 ((self.bits() >> Self::WFXT_SHIFT) & 0b1111) as u8
6343 }
6344
6345 pub const fn rpres(self) -> u8 {
6347 ((self.bits() >> Self::RPRES_SHIFT) & 0b1111) as u8
6348 }
6349
6350 pub const fn gpa3(self) -> u8 {
6352 ((self.bits() >> Self::GPA3_SHIFT) & 0b1111) as u8
6353 }
6354
6355 pub const fn apa3(self) -> u8 {
6357 ((self.bits() >> Self::APA3_SHIFT) & 0b1111) as u8
6358 }
6359
6360 pub const fn mops(self) -> u8 {
6362 ((self.bits() >> Self::MOPS_SHIFT) & 0b1111) as u8
6363 }
6364
6365 pub const fn bc(self) -> u8 {
6367 ((self.bits() >> Self::BC_SHIFT) & 0b1111) as u8
6368 }
6369
6370 pub const fn pac_frac(self) -> u8 {
6372 ((self.bits() >> Self::PAC_FRAC_SHIFT) & 0b1111) as u8
6373 }
6374
6375 pub const fn clrbhb(self) -> u8 {
6377 ((self.bits() >> Self::CLRBHB_SHIFT) & 0b1111) as u8
6378 }
6379
6380 pub const fn sysreg_128(self) -> u8 {
6382 ((self.bits() >> Self::SYSREG_128_SHIFT) & 0b1111) as u8
6383 }
6384
6385 pub const fn sysinstr_128(self) -> u8 {
6387 ((self.bits() >> Self::SYSINSTR_128_SHIFT) & 0b1111) as u8
6388 }
6389
6390 pub const fn prfmslc(self) -> u8 {
6392 ((self.bits() >> Self::PRFMSLC_SHIFT) & 0b1111) as u8
6393 }
6394
6395 pub const fn pcdphint(self) -> u8 {
6397 ((self.bits() >> Self::PCDPHINT_SHIFT) & 0b1111) as u8
6398 }
6399
6400 pub const fn rprfm(self) -> u8 {
6402 ((self.bits() >> Self::RPRFM_SHIFT) & 0b1111) as u8
6403 }
6404
6405 pub const fn cssc(self) -> u8 {
6407 ((self.bits() >> Self::CSSC_SHIFT) & 0b1111) as u8
6408 }
6409
6410 pub const fn lut(self) -> u8 {
6412 ((self.bits() >> Self::LUT_SHIFT) & 0b1111) as u8
6413 }
6414
6415 pub const fn ats1a(self) -> u8 {
6417 ((self.bits() >> Self::ATS1A_SHIFT) & 0b1111) as u8
6418 }
6419}
6420
6421#[cfg(feature = "el1")]
6422bitflags! {
6423 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6425 #[repr(transparent)]
6426 pub struct IdAa64mmfr0El1: u64 {
6427 }
6428}
6429
6430#[cfg(feature = "el1")]
6431impl IdAa64mmfr0El1 {
6432 pub const PARANGE_SHIFT: u32 = 0;
6434 pub const PARANGE_MASK: u64 = 0b1111;
6436 pub const ASIDBITS_SHIFT: u32 = 4;
6438 pub const ASIDBITS_MASK: u64 = 0b1111;
6440 pub const BIGEND_SHIFT: u32 = 8;
6442 pub const BIGEND_MASK: u64 = 0b1111;
6444 pub const SNSMEM_SHIFT: u32 = 12;
6446 pub const SNSMEM_MASK: u64 = 0b1111;
6448 pub const BIGENDEL0_SHIFT: u32 = 16;
6450 pub const BIGENDEL0_MASK: u64 = 0b1111;
6452 pub const TGRAN16_SHIFT: u32 = 20;
6454 pub const TGRAN16_MASK: u64 = 0b1111;
6456 pub const TGRAN64_SHIFT: u32 = 24;
6458 pub const TGRAN64_MASK: u64 = 0b1111;
6460 pub const TGRAN4_SHIFT: u32 = 28;
6462 pub const TGRAN4_MASK: u64 = 0b1111;
6464 pub const TGRAN16_2_SHIFT: u32 = 32;
6466 pub const TGRAN16_2_MASK: u64 = 0b1111;
6468 pub const TGRAN64_2_SHIFT: u32 = 36;
6470 pub const TGRAN64_2_MASK: u64 = 0b1111;
6472 pub const TGRAN4_2_SHIFT: u32 = 40;
6474 pub const TGRAN4_2_MASK: u64 = 0b1111;
6476 pub const EXS_SHIFT: u32 = 44;
6478 pub const EXS_MASK: u64 = 0b1111;
6480 pub const FGT_SHIFT: u32 = 56;
6482 pub const FGT_MASK: u64 = 0b1111;
6484 pub const ECV_SHIFT: u32 = 60;
6486 pub const ECV_MASK: u64 = 0b1111;
6488
6489 pub const fn parange(self) -> u8 {
6491 ((self.bits() >> Self::PARANGE_SHIFT) & 0b1111) as u8
6492 }
6493
6494 pub const fn asidbits(self) -> u8 {
6496 ((self.bits() >> Self::ASIDBITS_SHIFT) & 0b1111) as u8
6497 }
6498
6499 pub const fn bigend(self) -> u8 {
6501 ((self.bits() >> Self::BIGEND_SHIFT) & 0b1111) as u8
6502 }
6503
6504 pub const fn snsmem(self) -> u8 {
6506 ((self.bits() >> Self::SNSMEM_SHIFT) & 0b1111) as u8
6507 }
6508
6509 pub const fn bigendel0(self) -> u8 {
6511 ((self.bits() >> Self::BIGENDEL0_SHIFT) & 0b1111) as u8
6512 }
6513
6514 pub const fn tgran16(self) -> u8 {
6516 ((self.bits() >> Self::TGRAN16_SHIFT) & 0b1111) as u8
6517 }
6518
6519 pub const fn tgran64(self) -> u8 {
6521 ((self.bits() >> Self::TGRAN64_SHIFT) & 0b1111) as u8
6522 }
6523
6524 pub const fn tgran4(self) -> u8 {
6526 ((self.bits() >> Self::TGRAN4_SHIFT) & 0b1111) as u8
6527 }
6528
6529 pub const fn tgran16_2(self) -> u8 {
6531 ((self.bits() >> Self::TGRAN16_2_SHIFT) & 0b1111) as u8
6532 }
6533
6534 pub const fn tgran64_2(self) -> u8 {
6536 ((self.bits() >> Self::TGRAN64_2_SHIFT) & 0b1111) as u8
6537 }
6538
6539 pub const fn tgran4_2(self) -> u8 {
6541 ((self.bits() >> Self::TGRAN4_2_SHIFT) & 0b1111) as u8
6542 }
6543
6544 pub const fn exs(self) -> u8 {
6546 ((self.bits() >> Self::EXS_SHIFT) & 0b1111) as u8
6547 }
6548
6549 pub const fn fgt(self) -> u8 {
6551 ((self.bits() >> Self::FGT_SHIFT) & 0b1111) as u8
6552 }
6553
6554 pub const fn ecv(self) -> u8 {
6556 ((self.bits() >> Self::ECV_SHIFT) & 0b1111) as u8
6557 }
6558}
6559
6560#[cfg(feature = "el1")]
6561bitflags! {
6562 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6564 #[repr(transparent)]
6565 pub struct IdAa64mmfr1El1: u64 {
6566 }
6567}
6568
6569#[cfg(feature = "el1")]
6570impl IdAa64mmfr1El1 {
6571 pub const HAFDBS_SHIFT: u32 = 0;
6573 pub const HAFDBS_MASK: u64 = 0b1111;
6575 pub const VMIDBITS_SHIFT: u32 = 4;
6577 pub const VMIDBITS_MASK: u64 = 0b1111;
6579 pub const VH_SHIFT: u32 = 8;
6581 pub const VH_MASK: u64 = 0b1111;
6583 pub const HPDS_SHIFT: u32 = 12;
6585 pub const HPDS_MASK: u64 = 0b1111;
6587 pub const LO_SHIFT: u32 = 16;
6589 pub const LO_MASK: u64 = 0b1111;
6591 pub const PAN_SHIFT: u32 = 20;
6593 pub const PAN_MASK: u64 = 0b1111;
6595 pub const SPECSEI_SHIFT: u32 = 24;
6597 pub const SPECSEI_MASK: u64 = 0b1111;
6599 pub const XNX_SHIFT: u32 = 28;
6601 pub const XNX_MASK: u64 = 0b1111;
6603 pub const TWED_SHIFT: u32 = 32;
6605 pub const TWED_MASK: u64 = 0b1111;
6607 pub const ETS_SHIFT: u32 = 36;
6609 pub const ETS_MASK: u64 = 0b1111;
6611 pub const HCX_SHIFT: u32 = 40;
6613 pub const HCX_MASK: u64 = 0b1111;
6615 pub const AFP_SHIFT: u32 = 44;
6617 pub const AFP_MASK: u64 = 0b1111;
6619 pub const NTLBPA_SHIFT: u32 = 48;
6621 pub const NTLBPA_MASK: u64 = 0b1111;
6623 pub const TIDCP1_SHIFT: u32 = 52;
6625 pub const TIDCP1_MASK: u64 = 0b1111;
6627 pub const CMOW_SHIFT: u32 = 56;
6629 pub const CMOW_MASK: u64 = 0b1111;
6631 pub const ECBHB_SHIFT: u32 = 60;
6633 pub const ECBHB_MASK: u64 = 0b1111;
6635
6636 pub const fn hafdbs(self) -> u8 {
6638 ((self.bits() >> Self::HAFDBS_SHIFT) & 0b1111) as u8
6639 }
6640
6641 pub const fn vmidbits(self) -> u8 {
6643 ((self.bits() >> Self::VMIDBITS_SHIFT) & 0b1111) as u8
6644 }
6645
6646 pub const fn vh(self) -> u8 {
6648 ((self.bits() >> Self::VH_SHIFT) & 0b1111) as u8
6649 }
6650
6651 pub const fn hpds(self) -> u8 {
6653 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
6654 }
6655
6656 pub const fn lo(self) -> u8 {
6658 ((self.bits() >> Self::LO_SHIFT) & 0b1111) as u8
6659 }
6660
6661 pub const fn pan(self) -> u8 {
6663 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
6664 }
6665
6666 pub const fn specsei(self) -> u8 {
6668 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
6669 }
6670
6671 pub const fn xnx(self) -> u8 {
6673 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
6674 }
6675
6676 pub const fn twed(self) -> u8 {
6678 ((self.bits() >> Self::TWED_SHIFT) & 0b1111) as u8
6679 }
6680
6681 pub const fn ets(self) -> u8 {
6683 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
6684 }
6685
6686 pub const fn hcx(self) -> u8 {
6688 ((self.bits() >> Self::HCX_SHIFT) & 0b1111) as u8
6689 }
6690
6691 pub const fn afp(self) -> u8 {
6693 ((self.bits() >> Self::AFP_SHIFT) & 0b1111) as u8
6694 }
6695
6696 pub const fn ntlbpa(self) -> u8 {
6698 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
6699 }
6700
6701 pub const fn tidcp1(self) -> u8 {
6703 ((self.bits() >> Self::TIDCP1_SHIFT) & 0b1111) as u8
6704 }
6705
6706 pub const fn cmow(self) -> u8 {
6708 ((self.bits() >> Self::CMOW_SHIFT) & 0b1111) as u8
6709 }
6710
6711 pub const fn ecbhb(self) -> u8 {
6713 ((self.bits() >> Self::ECBHB_SHIFT) & 0b1111) as u8
6714 }
6715}
6716
6717#[cfg(feature = "el1")]
6718bitflags! {
6719 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6721 #[repr(transparent)]
6722 pub struct IdAa64mmfr2El1: u64 {
6723 }
6724}
6725
6726#[cfg(feature = "el1")]
6727impl IdAa64mmfr2El1 {
6728 pub const CNP_SHIFT: u32 = 0;
6730 pub const CNP_MASK: u64 = 0b1111;
6732 pub const UAO_SHIFT: u32 = 4;
6734 pub const UAO_MASK: u64 = 0b1111;
6736 pub const LSM_SHIFT: u32 = 8;
6738 pub const LSM_MASK: u64 = 0b1111;
6740 pub const IESB_SHIFT: u32 = 12;
6742 pub const IESB_MASK: u64 = 0b1111;
6744 pub const VARANGE_SHIFT: u32 = 16;
6746 pub const VARANGE_MASK: u64 = 0b1111;
6748 pub const CCIDX_SHIFT: u32 = 20;
6750 pub const CCIDX_MASK: u64 = 0b1111;
6752 pub const NV_SHIFT: u32 = 24;
6754 pub const NV_MASK: u64 = 0b1111;
6756 pub const ST_SHIFT: u32 = 28;
6758 pub const ST_MASK: u64 = 0b1111;
6760 pub const AT_SHIFT: u32 = 32;
6762 pub const AT_MASK: u64 = 0b1111;
6764 pub const IDS_SHIFT: u32 = 36;
6766 pub const IDS_MASK: u64 = 0b1111;
6768 pub const FWB_SHIFT: u32 = 40;
6770 pub const FWB_MASK: u64 = 0b1111;
6772 pub const TTL_SHIFT: u32 = 48;
6774 pub const TTL_MASK: u64 = 0b1111;
6776 pub const BBM_SHIFT: u32 = 52;
6778 pub const BBM_MASK: u64 = 0b1111;
6780 pub const EVT_SHIFT: u32 = 56;
6782 pub const EVT_MASK: u64 = 0b1111;
6784 pub const E0PD_SHIFT: u32 = 60;
6786 pub const E0PD_MASK: u64 = 0b1111;
6788
6789 pub const fn cnp(self) -> u8 {
6791 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
6792 }
6793
6794 pub const fn uao(self) -> u8 {
6796 ((self.bits() >> Self::UAO_SHIFT) & 0b1111) as u8
6797 }
6798
6799 pub const fn lsm(self) -> u8 {
6801 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
6802 }
6803
6804 pub const fn iesb(self) -> u8 {
6806 ((self.bits() >> Self::IESB_SHIFT) & 0b1111) as u8
6807 }
6808
6809 pub const fn varange(self) -> u8 {
6811 ((self.bits() >> Self::VARANGE_SHIFT) & 0b1111) as u8
6812 }
6813
6814 pub const fn ccidx(self) -> u8 {
6816 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
6817 }
6818
6819 pub const fn nv(self) -> u8 {
6821 ((self.bits() >> Self::NV_SHIFT) & 0b1111) as u8
6822 }
6823
6824 pub const fn st(self) -> u8 {
6826 ((self.bits() >> Self::ST_SHIFT) & 0b1111) as u8
6827 }
6828
6829 pub const fn at(self) -> u8 {
6831 ((self.bits() >> Self::AT_SHIFT) & 0b1111) as u8
6832 }
6833
6834 pub const fn ids(self) -> u8 {
6836 ((self.bits() >> Self::IDS_SHIFT) & 0b1111) as u8
6837 }
6838
6839 pub const fn fwb(self) -> u8 {
6841 ((self.bits() >> Self::FWB_SHIFT) & 0b1111) as u8
6842 }
6843
6844 pub const fn ttl(self) -> u8 {
6846 ((self.bits() >> Self::TTL_SHIFT) & 0b1111) as u8
6847 }
6848
6849 pub const fn bbm(self) -> u8 {
6851 ((self.bits() >> Self::BBM_SHIFT) & 0b1111) as u8
6852 }
6853
6854 pub const fn evt(self) -> u8 {
6856 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
6857 }
6858
6859 pub const fn e0pd(self) -> u8 {
6861 ((self.bits() >> Self::E0PD_SHIFT) & 0b1111) as u8
6862 }
6863}
6864
6865#[cfg(feature = "el1")]
6866bitflags! {
6867 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
6869 #[repr(transparent)]
6870 pub struct IdAa64mmfr3El1: u64 {
6871 }
6872}
6873
6874#[cfg(feature = "el1")]
6875impl IdAa64mmfr3El1 {
6876 pub const TCRX_SHIFT: u32 = 0;
6878 pub const TCRX_MASK: u64 = 0b1111;
6880 pub const SCTLRX_SHIFT: u32 = 4;
6882 pub const SCTLRX_MASK: u64 = 0b1111;
6884 pub const S1PIE_SHIFT: u32 = 8;
6886 pub const S1PIE_MASK: u64 = 0b1111;
6888 pub const S2PIE_SHIFT: u32 = 12;
6890 pub const S2PIE_MASK: u64 = 0b1111;
6892 pub const S1POE_SHIFT: u32 = 16;
6894 pub const S1POE_MASK: u64 = 0b1111;
6896 pub const S2POE_SHIFT: u32 = 20;
6898 pub const S2POE_MASK: u64 = 0b1111;
6900 pub const AIE_SHIFT: u32 = 24;
6902 pub const AIE_MASK: u64 = 0b1111;
6904 pub const MEC_SHIFT: u32 = 28;
6906 pub const MEC_MASK: u64 = 0b1111;
6908 pub const D128_SHIFT: u32 = 32;
6910 pub const D128_MASK: u64 = 0b1111;
6912 pub const D128_2_SHIFT: u32 = 36;
6914 pub const D128_2_MASK: u64 = 0b1111;
6916 pub const SNERR_SHIFT: u32 = 40;
6918 pub const SNERR_MASK: u64 = 0b1111;
6920 pub const ANERR_SHIFT: u32 = 44;
6922 pub const ANERR_MASK: u64 = 0b1111;
6924 pub const SDERR_SHIFT: u32 = 52;
6926 pub const SDERR_MASK: u64 = 0b1111;
6928 pub const ADERR_SHIFT: u32 = 56;
6930 pub const ADERR_MASK: u64 = 0b1111;
6932 pub const SPEC_FPACC_SHIFT: u32 = 60;
6934 pub const SPEC_FPACC_MASK: u64 = 0b1111;
6936
6937 pub const fn tcrx(self) -> u8 {
6939 ((self.bits() >> Self::TCRX_SHIFT) & 0b1111) as u8
6940 }
6941
6942 pub const fn sctlrx(self) -> u8 {
6944 ((self.bits() >> Self::SCTLRX_SHIFT) & 0b1111) as u8
6945 }
6946
6947 pub const fn s1pie(self) -> u8 {
6949 ((self.bits() >> Self::S1PIE_SHIFT) & 0b1111) as u8
6950 }
6951
6952 pub const fn s2pie(self) -> u8 {
6954 ((self.bits() >> Self::S2PIE_SHIFT) & 0b1111) as u8
6955 }
6956
6957 pub const fn s1poe(self) -> u8 {
6959 ((self.bits() >> Self::S1POE_SHIFT) & 0b1111) as u8
6960 }
6961
6962 pub const fn s2poe(self) -> u8 {
6964 ((self.bits() >> Self::S2POE_SHIFT) & 0b1111) as u8
6965 }
6966
6967 pub const fn aie(self) -> u8 {
6969 ((self.bits() >> Self::AIE_SHIFT) & 0b1111) as u8
6970 }
6971
6972 pub const fn mec(self) -> u8 {
6974 ((self.bits() >> Self::MEC_SHIFT) & 0b1111) as u8
6975 }
6976
6977 pub const fn d128(self) -> u8 {
6979 ((self.bits() >> Self::D128_SHIFT) & 0b1111) as u8
6980 }
6981
6982 pub const fn d128_2(self) -> u8 {
6984 ((self.bits() >> Self::D128_2_SHIFT) & 0b1111) as u8
6985 }
6986
6987 pub const fn snerr(self) -> u8 {
6989 ((self.bits() >> Self::SNERR_SHIFT) & 0b1111) as u8
6990 }
6991
6992 pub const fn anerr(self) -> u8 {
6994 ((self.bits() >> Self::ANERR_SHIFT) & 0b1111) as u8
6995 }
6996
6997 pub const fn sderr(self) -> u8 {
6999 ((self.bits() >> Self::SDERR_SHIFT) & 0b1111) as u8
7000 }
7001
7002 pub const fn aderr(self) -> u8 {
7004 ((self.bits() >> Self::ADERR_SHIFT) & 0b1111) as u8
7005 }
7006
7007 pub const fn spec_fpacc(self) -> u8 {
7009 ((self.bits() >> Self::SPEC_FPACC_SHIFT) & 0b1111) as u8
7010 }
7011}
7012
7013#[cfg(feature = "el1")]
7014bitflags! {
7015 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7017 #[repr(transparent)]
7018 pub struct IdAa64pfr0El1: u64 {
7019 }
7020}
7021
7022#[cfg(feature = "el1")]
7023impl IdAa64pfr0El1 {
7024 pub const EL0_SHIFT: u32 = 0;
7026 pub const EL0_MASK: u64 = 0b1111;
7028 pub const EL1_SHIFT: u32 = 4;
7030 pub const EL1_MASK: u64 = 0b1111;
7032 pub const EL2_SHIFT: u32 = 8;
7034 pub const EL2_MASK: u64 = 0b1111;
7036 pub const EL3_SHIFT: u32 = 12;
7038 pub const EL3_MASK: u64 = 0b1111;
7040 pub const FP_SHIFT: u32 = 16;
7042 pub const FP_MASK: u64 = 0b1111;
7044 pub const ADVSIMD_SHIFT: u32 = 20;
7046 pub const ADVSIMD_MASK: u64 = 0b1111;
7048 pub const GIC_SHIFT: u32 = 24;
7050 pub const GIC_MASK: u64 = 0b1111;
7052 pub const RAS_SHIFT: u32 = 28;
7054 pub const RAS_MASK: u64 = 0b1111;
7056 pub const SVE_SHIFT: u32 = 32;
7058 pub const SVE_MASK: u64 = 0b1111;
7060 pub const SEL2_SHIFT: u32 = 36;
7062 pub const SEL2_MASK: u64 = 0b1111;
7064 pub const MPAM_SHIFT: u32 = 40;
7066 pub const MPAM_MASK: u64 = 0b1111;
7068 pub const AMU_SHIFT: u32 = 44;
7070 pub const AMU_MASK: u64 = 0b1111;
7072 pub const DIT_SHIFT: u32 = 48;
7074 pub const DIT_MASK: u64 = 0b1111;
7076 pub const RME_SHIFT: u32 = 52;
7078 pub const RME_MASK: u64 = 0b1111;
7080 pub const CSV2_SHIFT: u32 = 56;
7082 pub const CSV2_MASK: u64 = 0b1111;
7084 pub const CSV3_SHIFT: u32 = 60;
7086 pub const CSV3_MASK: u64 = 0b1111;
7088
7089 pub const fn el0(self) -> u8 {
7091 ((self.bits() >> Self::EL0_SHIFT) & 0b1111) as u8
7092 }
7093
7094 pub const fn el1(self) -> u8 {
7096 ((self.bits() >> Self::EL1_SHIFT) & 0b1111) as u8
7097 }
7098
7099 pub const fn el2(self) -> u8 {
7101 ((self.bits() >> Self::EL2_SHIFT) & 0b1111) as u8
7102 }
7103
7104 pub const fn el3(self) -> u8 {
7106 ((self.bits() >> Self::EL3_SHIFT) & 0b1111) as u8
7107 }
7108
7109 pub const fn fp(self) -> u8 {
7111 ((self.bits() >> Self::FP_SHIFT) & 0b1111) as u8
7112 }
7113
7114 pub const fn advsimd(self) -> u8 {
7116 ((self.bits() >> Self::ADVSIMD_SHIFT) & 0b1111) as u8
7117 }
7118
7119 pub const fn gic(self) -> u8 {
7121 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
7122 }
7123
7124 pub const fn ras(self) -> u8 {
7126 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
7127 }
7128
7129 pub const fn sve(self) -> u8 {
7131 ((self.bits() >> Self::SVE_SHIFT) & 0b1111) as u8
7132 }
7133
7134 pub const fn sel2(self) -> u8 {
7136 ((self.bits() >> Self::SEL2_SHIFT) & 0b1111) as u8
7137 }
7138
7139 pub const fn mpam(self) -> u8 {
7141 ((self.bits() >> Self::MPAM_SHIFT) & 0b1111) as u8
7142 }
7143
7144 pub const fn amu(self) -> u8 {
7146 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
7147 }
7148
7149 pub const fn dit(self) -> u8 {
7151 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
7152 }
7153
7154 pub const fn rme(self) -> u8 {
7156 ((self.bits() >> Self::RME_SHIFT) & 0b1111) as u8
7157 }
7158
7159 pub const fn csv2(self) -> u8 {
7161 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
7162 }
7163
7164 pub const fn csv3(self) -> u8 {
7166 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
7167 }
7168}
7169
7170#[cfg(feature = "el1")]
7171bitflags! {
7172 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7174 #[repr(transparent)]
7175 pub struct IdAa64pfr1El1: u64 {
7176 }
7177}
7178
7179#[cfg(feature = "el1")]
7180impl IdAa64pfr1El1 {
7181 pub const BT_SHIFT: u32 = 0;
7183 pub const BT_MASK: u64 = 0b1111;
7185 pub const SSBS_SHIFT: u32 = 4;
7187 pub const SSBS_MASK: u64 = 0b1111;
7189 pub const MTE_SHIFT: u32 = 8;
7191 pub const MTE_MASK: u64 = 0b1111;
7193 pub const RAS_FRAC_SHIFT: u32 = 12;
7195 pub const RAS_FRAC_MASK: u64 = 0b1111;
7197 pub const MPAM_FRAC_SHIFT: u32 = 16;
7199 pub const MPAM_FRAC_MASK: u64 = 0b1111;
7201 pub const SME_SHIFT: u32 = 24;
7203 pub const SME_MASK: u64 = 0b1111;
7205 pub const RNDR_TRAP_SHIFT: u32 = 28;
7207 pub const RNDR_TRAP_MASK: u64 = 0b1111;
7209 pub const CSV2_FRAC_SHIFT: u32 = 32;
7211 pub const CSV2_FRAC_MASK: u64 = 0b1111;
7213 pub const NMI_SHIFT: u32 = 36;
7215 pub const NMI_MASK: u64 = 0b1111;
7217 pub const MTE_FRAC_SHIFT: u32 = 40;
7219 pub const MTE_FRAC_MASK: u64 = 0b1111;
7221 pub const GCS_SHIFT: u32 = 44;
7223 pub const GCS_MASK: u64 = 0b1111;
7225 pub const THE_SHIFT: u32 = 48;
7227 pub const THE_MASK: u64 = 0b1111;
7229 pub const MTEX_SHIFT: u32 = 52;
7231 pub const MTEX_MASK: u64 = 0b1111;
7233 pub const DF2_SHIFT: u32 = 56;
7235 pub const DF2_MASK: u64 = 0b1111;
7237 pub const PFAR_SHIFT: u32 = 60;
7239 pub const PFAR_MASK: u64 = 0b1111;
7241
7242 pub const fn bt(self) -> u8 {
7244 ((self.bits() >> Self::BT_SHIFT) & 0b1111) as u8
7245 }
7246
7247 pub const fn ssbs(self) -> u8 {
7249 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
7250 }
7251
7252 pub const fn mte(self) -> u8 {
7254 ((self.bits() >> Self::MTE_SHIFT) & 0b1111) as u8
7255 }
7256
7257 pub const fn ras_frac(self) -> u8 {
7259 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
7260 }
7261
7262 pub const fn mpam_frac(self) -> u8 {
7264 ((self.bits() >> Self::MPAM_FRAC_SHIFT) & 0b1111) as u8
7265 }
7266
7267 pub const fn sme(self) -> u8 {
7269 ((self.bits() >> Self::SME_SHIFT) & 0b1111) as u8
7270 }
7271
7272 pub const fn rndr_trap(self) -> u8 {
7274 ((self.bits() >> Self::RNDR_TRAP_SHIFT) & 0b1111) as u8
7275 }
7276
7277 pub const fn csv2_frac(self) -> u8 {
7279 ((self.bits() >> Self::CSV2_FRAC_SHIFT) & 0b1111) as u8
7280 }
7281
7282 pub const fn nmi(self) -> u8 {
7284 ((self.bits() >> Self::NMI_SHIFT) & 0b1111) as u8
7285 }
7286
7287 pub const fn mte_frac(self) -> u8 {
7289 ((self.bits() >> Self::MTE_FRAC_SHIFT) & 0b1111) as u8
7290 }
7291
7292 pub const fn gcs(self) -> u8 {
7294 ((self.bits() >> Self::GCS_SHIFT) & 0b1111) as u8
7295 }
7296
7297 pub const fn the(self) -> u8 {
7299 ((self.bits() >> Self::THE_SHIFT) & 0b1111) as u8
7300 }
7301
7302 pub const fn mtex(self) -> u8 {
7304 ((self.bits() >> Self::MTEX_SHIFT) & 0b1111) as u8
7305 }
7306
7307 pub const fn df2(self) -> u8 {
7309 ((self.bits() >> Self::DF2_SHIFT) & 0b1111) as u8
7310 }
7311
7312 pub const fn pfar(self) -> u8 {
7314 ((self.bits() >> Self::PFAR_SHIFT) & 0b1111) as u8
7315 }
7316}
7317
7318#[cfg(feature = "el1")]
7319bitflags! {
7320 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7322 #[repr(transparent)]
7323 pub struct IdAa64smfr0El1: u64 {
7324 const SMOP4 = 1 << 0;
7326 const STMOP = 1 << 16;
7328 const SFEXPA = 1 << 23;
7330 const AES = 1 << 24;
7332 const SBITPERM = 1 << 25;
7334 const SF8DP2 = 1 << 28;
7336 const SF8DP4 = 1 << 29;
7338 const SF8FMA = 1 << 30;
7340 const F32F32 = 1 << 32;
7342 const BI32I32 = 1 << 33;
7344 const B16F32 = 1 << 34;
7346 const F16F32 = 1 << 35;
7348 const F8F32 = 1 << 40;
7350 const F8F16 = 1 << 41;
7352 const F16F16 = 1 << 42;
7354 const B16B16 = 1 << 43;
7356 const F64F64 = 1 << 48;
7358 const LUTV2 = 1 << 60;
7360 const LUT6 = 1 << 61;
7362 const FA64 = 1 << 63;
7364 }
7365}
7366
7367#[cfg(feature = "el1")]
7368impl IdAa64smfr0El1 {
7369 pub const SMOP4_SHIFT: u32 = 0;
7371 pub const STMOP_SHIFT: u32 = 16;
7373 pub const SFEXPA_SHIFT: u32 = 23;
7375 pub const AES_SHIFT: u32 = 24;
7377 pub const SBITPERM_SHIFT: u32 = 25;
7379 pub const SF8DP2_SHIFT: u32 = 28;
7381 pub const SF8DP4_SHIFT: u32 = 29;
7383 pub const SF8FMA_SHIFT: u32 = 30;
7385 pub const F32F32_SHIFT: u32 = 32;
7387 pub const BI32I32_SHIFT: u32 = 33;
7389 pub const B16F32_SHIFT: u32 = 34;
7391 pub const F16F32_SHIFT: u32 = 35;
7393 pub const I8I32_SHIFT: u32 = 36;
7395 pub const I8I32_MASK: u64 = 0b1111;
7397 pub const F8F32_SHIFT: u32 = 40;
7399 pub const F8F16_SHIFT: u32 = 41;
7401 pub const F16F16_SHIFT: u32 = 42;
7403 pub const B16B16_SHIFT: u32 = 43;
7405 pub const I16I32_SHIFT: u32 = 44;
7407 pub const I16I32_MASK: u64 = 0b1111;
7409 pub const F64F64_SHIFT: u32 = 48;
7411 pub const I16I64_SHIFT: u32 = 52;
7413 pub const I16I64_MASK: u64 = 0b1111;
7415 pub const SMEVER_SHIFT: u32 = 56;
7417 pub const SMEVER_MASK: u64 = 0b1111;
7419 pub const LUTV2_SHIFT: u32 = 60;
7421 pub const LUT6_SHIFT: u32 = 61;
7423 pub const FA64_SHIFT: u32 = 63;
7425
7426 pub const fn i8i32(self) -> u8 {
7428 ((self.bits() >> Self::I8I32_SHIFT) & 0b1111) as u8
7429 }
7430
7431 pub const fn i16i32(self) -> u8 {
7433 ((self.bits() >> Self::I16I32_SHIFT) & 0b1111) as u8
7434 }
7435
7436 pub const fn i16i64(self) -> u8 {
7438 ((self.bits() >> Self::I16I64_SHIFT) & 0b1111) as u8
7439 }
7440
7441 pub const fn smever(self) -> u8 {
7443 ((self.bits() >> Self::SMEVER_SHIFT) & 0b1111) as u8
7444 }
7445}
7446
7447bitflags! {
7448 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7450 #[repr(transparent)]
7451 pub struct IdDfr0: u32 {
7452 }
7453}
7454
7455impl IdDfr0 {
7456 pub const COPDBG_SHIFT: u32 = 0;
7458 pub const COPDBG_MASK: u32 = 0b1111;
7460 pub const COPSDBG_SHIFT: u32 = 4;
7462 pub const COPSDBG_MASK: u32 = 0b1111;
7464 pub const MMAPDBG_SHIFT: u32 = 8;
7466 pub const MMAPDBG_MASK: u32 = 0b1111;
7468 pub const COPTRC_SHIFT: u32 = 12;
7470 pub const COPTRC_MASK: u32 = 0b1111;
7472 pub const MMAPTRC_SHIFT: u32 = 16;
7474 pub const MMAPTRC_MASK: u32 = 0b1111;
7476 pub const MPROFDBG_SHIFT: u32 = 20;
7478 pub const MPROFDBG_MASK: u32 = 0b1111;
7480 pub const PERFMON_SHIFT: u32 = 24;
7482 pub const PERFMON_MASK: u32 = 0b1111;
7484 pub const TRACEFILT_SHIFT: u32 = 28;
7486 pub const TRACEFILT_MASK: u32 = 0b1111;
7488
7489 pub const fn copdbg(self) -> u8 {
7491 ((self.bits() >> Self::COPDBG_SHIFT) & 0b1111) as u8
7492 }
7493
7494 pub const fn copsdbg(self) -> u8 {
7496 ((self.bits() >> Self::COPSDBG_SHIFT) & 0b1111) as u8
7497 }
7498
7499 pub const fn mmapdbg(self) -> u8 {
7501 ((self.bits() >> Self::MMAPDBG_SHIFT) & 0b1111) as u8
7502 }
7503
7504 pub const fn coptrc(self) -> u8 {
7506 ((self.bits() >> Self::COPTRC_SHIFT) & 0b1111) as u8
7507 }
7508
7509 pub const fn mmaptrc(self) -> u8 {
7511 ((self.bits() >> Self::MMAPTRC_SHIFT) & 0b1111) as u8
7512 }
7513
7514 pub const fn mprofdbg(self) -> u8 {
7516 ((self.bits() >> Self::MPROFDBG_SHIFT) & 0b1111) as u8
7517 }
7518
7519 pub const fn perfmon(self) -> u8 {
7521 ((self.bits() >> Self::PERFMON_SHIFT) & 0b1111) as u8
7522 }
7523
7524 pub const fn tracefilt(self) -> u8 {
7526 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
7527 }
7528}
7529
7530bitflags! {
7531 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7533 #[repr(transparent)]
7534 pub struct IdDfr1: u32 {
7535 }
7536}
7537
7538impl IdDfr1 {
7539 pub const MTPMU_SHIFT: u32 = 0;
7541 pub const MTPMU_MASK: u32 = 0b1111;
7543 pub const HPMN0_SHIFT: u32 = 4;
7545 pub const HPMN0_MASK: u32 = 0b1111;
7547
7548 pub const fn mtpmu(self) -> u8 {
7550 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
7551 }
7552
7553 pub const fn hpmn0(self) -> u8 {
7555 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
7556 }
7557}
7558
7559bitflags! {
7560 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7562 #[repr(transparent)]
7563 pub struct IdIsar0: u32 {
7564 }
7565}
7566
7567impl IdIsar0 {
7568 pub const SWAP_SHIFT: u32 = 0;
7570 pub const SWAP_MASK: u32 = 0b1111;
7572 pub const BITCOUNT_SHIFT: u32 = 4;
7574 pub const BITCOUNT_MASK: u32 = 0b1111;
7576 pub const BITFIELD_SHIFT: u32 = 8;
7578 pub const BITFIELD_MASK: u32 = 0b1111;
7580 pub const CMPBRANCH_SHIFT: u32 = 12;
7582 pub const CMPBRANCH_MASK: u32 = 0b1111;
7584 pub const COPROC_SHIFT: u32 = 16;
7586 pub const COPROC_MASK: u32 = 0b1111;
7588 pub const DEBUG_SHIFT: u32 = 20;
7590 pub const DEBUG_MASK: u32 = 0b1111;
7592 pub const DIVIDE_SHIFT: u32 = 24;
7594 pub const DIVIDE_MASK: u32 = 0b1111;
7596
7597 pub const fn swap(self) -> u8 {
7599 ((self.bits() >> Self::SWAP_SHIFT) & 0b1111) as u8
7600 }
7601
7602 pub const fn bitcount(self) -> u8 {
7604 ((self.bits() >> Self::BITCOUNT_SHIFT) & 0b1111) as u8
7605 }
7606
7607 pub const fn bitfield(self) -> u8 {
7609 ((self.bits() >> Self::BITFIELD_SHIFT) & 0b1111) as u8
7610 }
7611
7612 pub const fn cmpbranch(self) -> u8 {
7614 ((self.bits() >> Self::CMPBRANCH_SHIFT) & 0b1111) as u8
7615 }
7616
7617 pub const fn coproc(self) -> u8 {
7619 ((self.bits() >> Self::COPROC_SHIFT) & 0b1111) as u8
7620 }
7621
7622 pub const fn debug(self) -> u8 {
7624 ((self.bits() >> Self::DEBUG_SHIFT) & 0b1111) as u8
7625 }
7626
7627 pub const fn divide(self) -> u8 {
7629 ((self.bits() >> Self::DIVIDE_SHIFT) & 0b1111) as u8
7630 }
7631}
7632
7633bitflags! {
7634 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7636 #[repr(transparent)]
7637 pub struct IdIsar1: u32 {
7638 }
7639}
7640
7641impl IdIsar1 {
7642 pub const ENDIAN_SHIFT: u32 = 0;
7644 pub const ENDIAN_MASK: u32 = 0b1111;
7646 pub const EXCEPT_SHIFT: u32 = 4;
7648 pub const EXCEPT_MASK: u32 = 0b1111;
7650 pub const EXCEPT_AR_SHIFT: u32 = 8;
7652 pub const EXCEPT_AR_MASK: u32 = 0b1111;
7654 pub const EXTEND_SHIFT: u32 = 12;
7656 pub const EXTEND_MASK: u32 = 0b1111;
7658 pub const IFTHEN_SHIFT: u32 = 16;
7660 pub const IFTHEN_MASK: u32 = 0b1111;
7662 pub const IMMEDIATE_SHIFT: u32 = 20;
7664 pub const IMMEDIATE_MASK: u32 = 0b1111;
7666 pub const INTERWORK_SHIFT: u32 = 24;
7668 pub const INTERWORK_MASK: u32 = 0b1111;
7670 pub const JAZELLE_SHIFT: u32 = 28;
7672 pub const JAZELLE_MASK: u32 = 0b1111;
7674
7675 pub const fn endian(self) -> u8 {
7677 ((self.bits() >> Self::ENDIAN_SHIFT) & 0b1111) as u8
7678 }
7679
7680 pub const fn except(self) -> u8 {
7682 ((self.bits() >> Self::EXCEPT_SHIFT) & 0b1111) as u8
7683 }
7684
7685 pub const fn except_ar(self) -> u8 {
7687 ((self.bits() >> Self::EXCEPT_AR_SHIFT) & 0b1111) as u8
7688 }
7689
7690 pub const fn extend_(self) -> u8 {
7692 ((self.bits() >> Self::EXTEND_SHIFT) & 0b1111) as u8
7693 }
7694
7695 pub const fn ifthen(self) -> u8 {
7697 ((self.bits() >> Self::IFTHEN_SHIFT) & 0b1111) as u8
7698 }
7699
7700 pub const fn immediate(self) -> u8 {
7702 ((self.bits() >> Self::IMMEDIATE_SHIFT) & 0b1111) as u8
7703 }
7704
7705 pub const fn interwork(self) -> u8 {
7707 ((self.bits() >> Self::INTERWORK_SHIFT) & 0b1111) as u8
7708 }
7709
7710 pub const fn jazelle(self) -> u8 {
7712 ((self.bits() >> Self::JAZELLE_SHIFT) & 0b1111) as u8
7713 }
7714}
7715
7716bitflags! {
7717 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7719 #[repr(transparent)]
7720 pub struct IdIsar2: u32 {
7721 }
7722}
7723
7724impl IdIsar2 {
7725 pub const LOADSTORE_SHIFT: u32 = 0;
7727 pub const LOADSTORE_MASK: u32 = 0b1111;
7729 pub const MEMHINT_SHIFT: u32 = 4;
7731 pub const MEMHINT_MASK: u32 = 0b1111;
7733 pub const MULTIACCESSINT_SHIFT: u32 = 8;
7735 pub const MULTIACCESSINT_MASK: u32 = 0b1111;
7737 pub const MULT_SHIFT: u32 = 12;
7739 pub const MULT_MASK: u32 = 0b1111;
7741 pub const MULTS_SHIFT: u32 = 16;
7743 pub const MULTS_MASK: u32 = 0b1111;
7745 pub const MULTU_SHIFT: u32 = 20;
7747 pub const MULTU_MASK: u32 = 0b1111;
7749 pub const PSR_AR_SHIFT: u32 = 24;
7751 pub const PSR_AR_MASK: u32 = 0b1111;
7753 pub const REVERSAL_SHIFT: u32 = 28;
7755 pub const REVERSAL_MASK: u32 = 0b1111;
7757
7758 pub const fn loadstore(self) -> u8 {
7760 ((self.bits() >> Self::LOADSTORE_SHIFT) & 0b1111) as u8
7761 }
7762
7763 pub const fn memhint(self) -> u8 {
7765 ((self.bits() >> Self::MEMHINT_SHIFT) & 0b1111) as u8
7766 }
7767
7768 pub const fn multiaccessint(self) -> u8 {
7770 ((self.bits() >> Self::MULTIACCESSINT_SHIFT) & 0b1111) as u8
7771 }
7772
7773 pub const fn mult(self) -> u8 {
7775 ((self.bits() >> Self::MULT_SHIFT) & 0b1111) as u8
7776 }
7777
7778 pub const fn mults(self) -> u8 {
7780 ((self.bits() >> Self::MULTS_SHIFT) & 0b1111) as u8
7781 }
7782
7783 pub const fn multu(self) -> u8 {
7785 ((self.bits() >> Self::MULTU_SHIFT) & 0b1111) as u8
7786 }
7787
7788 pub const fn psr_ar(self) -> u8 {
7790 ((self.bits() >> Self::PSR_AR_SHIFT) & 0b1111) as u8
7791 }
7792
7793 pub const fn reversal(self) -> u8 {
7795 ((self.bits() >> Self::REVERSAL_SHIFT) & 0b1111) as u8
7796 }
7797}
7798
7799bitflags! {
7800 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7802 #[repr(transparent)]
7803 pub struct IdIsar3: u32 {
7804 }
7805}
7806
7807impl IdIsar3 {
7808 pub const SATURATE_SHIFT: u32 = 0;
7810 pub const SATURATE_MASK: u32 = 0b1111;
7812 pub const SIMD_SHIFT: u32 = 4;
7814 pub const SIMD_MASK: u32 = 0b1111;
7816 pub const SVC_SHIFT: u32 = 8;
7818 pub const SVC_MASK: u32 = 0b1111;
7820 pub const SYNCHPRIM_SHIFT: u32 = 12;
7822 pub const SYNCHPRIM_MASK: u32 = 0b1111;
7824 pub const TABBRANCH_SHIFT: u32 = 16;
7826 pub const TABBRANCH_MASK: u32 = 0b1111;
7828 pub const T32COPY_SHIFT: u32 = 20;
7830 pub const T32COPY_MASK: u32 = 0b1111;
7832 pub const TRUENOP_SHIFT: u32 = 24;
7834 pub const TRUENOP_MASK: u32 = 0b1111;
7836 pub const T32EE_SHIFT: u32 = 28;
7838 pub const T32EE_MASK: u32 = 0b1111;
7840
7841 pub const fn saturate(self) -> u8 {
7843 ((self.bits() >> Self::SATURATE_SHIFT) & 0b1111) as u8
7844 }
7845
7846 pub const fn simd(self) -> u8 {
7848 ((self.bits() >> Self::SIMD_SHIFT) & 0b1111) as u8
7849 }
7850
7851 pub const fn svc(self) -> u8 {
7853 ((self.bits() >> Self::SVC_SHIFT) & 0b1111) as u8
7854 }
7855
7856 pub const fn synchprim(self) -> u8 {
7858 ((self.bits() >> Self::SYNCHPRIM_SHIFT) & 0b1111) as u8
7859 }
7860
7861 pub const fn tabbranch(self) -> u8 {
7863 ((self.bits() >> Self::TABBRANCH_SHIFT) & 0b1111) as u8
7864 }
7865
7866 pub const fn t32copy(self) -> u8 {
7868 ((self.bits() >> Self::T32COPY_SHIFT) & 0b1111) as u8
7869 }
7870
7871 pub const fn truenop(self) -> u8 {
7873 ((self.bits() >> Self::TRUENOP_SHIFT) & 0b1111) as u8
7874 }
7875
7876 pub const fn t32ee(self) -> u8 {
7878 ((self.bits() >> Self::T32EE_SHIFT) & 0b1111) as u8
7879 }
7880}
7881
7882bitflags! {
7883 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7885 #[repr(transparent)]
7886 pub struct IdIsar4: u32 {
7887 }
7888}
7889
7890impl IdIsar4 {
7891 pub const UNPRIV_SHIFT: u32 = 0;
7893 pub const UNPRIV_MASK: u32 = 0b1111;
7895 pub const WITHSHIFTS_SHIFT: u32 = 4;
7897 pub const WITHSHIFTS_MASK: u32 = 0b1111;
7899 pub const WRITEBACK_SHIFT: u32 = 8;
7901 pub const WRITEBACK_MASK: u32 = 0b1111;
7903 pub const SMC_SHIFT: u32 = 12;
7905 pub const SMC_MASK: u32 = 0b1111;
7907 pub const BARRIER_SHIFT: u32 = 16;
7909 pub const BARRIER_MASK: u32 = 0b1111;
7911 pub const SYNCHPRIM_FRAC_SHIFT: u32 = 20;
7913 pub const SYNCHPRIM_FRAC_MASK: u32 = 0b1111;
7915 pub const PSR_M_SHIFT: u32 = 24;
7917 pub const PSR_M_MASK: u32 = 0b1111;
7919 pub const SWP_FRAC_SHIFT: u32 = 28;
7921 pub const SWP_FRAC_MASK: u32 = 0b1111;
7923
7924 pub const fn unpriv(self) -> u8 {
7926 ((self.bits() >> Self::UNPRIV_SHIFT) & 0b1111) as u8
7927 }
7928
7929 pub const fn withshifts(self) -> u8 {
7931 ((self.bits() >> Self::WITHSHIFTS_SHIFT) & 0b1111) as u8
7932 }
7933
7934 pub const fn writeback(self) -> u8 {
7936 ((self.bits() >> Self::WRITEBACK_SHIFT) & 0b1111) as u8
7937 }
7938
7939 pub const fn smc(self) -> u8 {
7941 ((self.bits() >> Self::SMC_SHIFT) & 0b1111) as u8
7942 }
7943
7944 pub const fn barrier(self) -> u8 {
7946 ((self.bits() >> Self::BARRIER_SHIFT) & 0b1111) as u8
7947 }
7948
7949 pub const fn synchprim_frac(self) -> u8 {
7951 ((self.bits() >> Self::SYNCHPRIM_FRAC_SHIFT) & 0b1111) as u8
7952 }
7953
7954 pub const fn psr_m(self) -> u8 {
7956 ((self.bits() >> Self::PSR_M_SHIFT) & 0b1111) as u8
7957 }
7958
7959 pub const fn swp_frac(self) -> u8 {
7961 ((self.bits() >> Self::SWP_FRAC_SHIFT) & 0b1111) as u8
7962 }
7963}
7964
7965bitflags! {
7966 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
7968 #[repr(transparent)]
7969 pub struct IdIsar5: u32 {
7970 }
7971}
7972
7973impl IdIsar5 {
7974 pub const SEVL_SHIFT: u32 = 0;
7976 pub const SEVL_MASK: u32 = 0b1111;
7978 pub const AES_SHIFT: u32 = 4;
7980 pub const AES_MASK: u32 = 0b1111;
7982 pub const SHA1_SHIFT: u32 = 8;
7984 pub const SHA1_MASK: u32 = 0b1111;
7986 pub const SHA2_SHIFT: u32 = 12;
7988 pub const SHA2_MASK: u32 = 0b1111;
7990 pub const CRC32_SHIFT: u32 = 16;
7992 pub const CRC32_MASK: u32 = 0b1111;
7994 pub const RDM_SHIFT: u32 = 24;
7996 pub const RDM_MASK: u32 = 0b1111;
7998 pub const VCMA_SHIFT: u32 = 28;
8000 pub const VCMA_MASK: u32 = 0b1111;
8002
8003 pub const fn sevl(self) -> u8 {
8005 ((self.bits() >> Self::SEVL_SHIFT) & 0b1111) as u8
8006 }
8007
8008 pub const fn aes(self) -> u8 {
8010 ((self.bits() >> Self::AES_SHIFT) & 0b1111) as u8
8011 }
8012
8013 pub const fn sha1(self) -> u8 {
8015 ((self.bits() >> Self::SHA1_SHIFT) & 0b1111) as u8
8016 }
8017
8018 pub const fn sha2(self) -> u8 {
8020 ((self.bits() >> Self::SHA2_SHIFT) & 0b1111) as u8
8021 }
8022
8023 pub const fn crc32(self) -> u8 {
8025 ((self.bits() >> Self::CRC32_SHIFT) & 0b1111) as u8
8026 }
8027
8028 pub const fn rdm(self) -> u8 {
8030 ((self.bits() >> Self::RDM_SHIFT) & 0b1111) as u8
8031 }
8032
8033 pub const fn vcma(self) -> u8 {
8035 ((self.bits() >> Self::VCMA_SHIFT) & 0b1111) as u8
8036 }
8037}
8038
8039bitflags! {
8040 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8042 #[repr(transparent)]
8043 pub struct IdIsar6: u32 {
8044 }
8045}
8046
8047impl IdIsar6 {
8048 pub const JSCVT_SHIFT: u32 = 0;
8050 pub const JSCVT_MASK: u32 = 0b1111;
8052 pub const DP_SHIFT: u32 = 4;
8054 pub const DP_MASK: u32 = 0b1111;
8056 pub const FHM_SHIFT: u32 = 8;
8058 pub const FHM_MASK: u32 = 0b1111;
8060 pub const SB_SHIFT: u32 = 12;
8062 pub const SB_MASK: u32 = 0b1111;
8064 pub const SPECRES_SHIFT: u32 = 16;
8066 pub const SPECRES_MASK: u32 = 0b1111;
8068 pub const BF16_SHIFT: u32 = 20;
8070 pub const BF16_MASK: u32 = 0b1111;
8072 pub const I8MM_SHIFT: u32 = 24;
8074 pub const I8MM_MASK: u32 = 0b1111;
8076 pub const CLRBHB_SHIFT: u32 = 28;
8078 pub const CLRBHB_MASK: u32 = 0b1111;
8080
8081 pub const fn jscvt(self) -> u8 {
8083 ((self.bits() >> Self::JSCVT_SHIFT) & 0b1111) as u8
8084 }
8085
8086 pub const fn dp(self) -> u8 {
8088 ((self.bits() >> Self::DP_SHIFT) & 0b1111) as u8
8089 }
8090
8091 pub const fn fhm(self) -> u8 {
8093 ((self.bits() >> Self::FHM_SHIFT) & 0b1111) as u8
8094 }
8095
8096 pub const fn sb(self) -> u8 {
8098 ((self.bits() >> Self::SB_SHIFT) & 0b1111) as u8
8099 }
8100
8101 pub const fn specres(self) -> u8 {
8103 ((self.bits() >> Self::SPECRES_SHIFT) & 0b1111) as u8
8104 }
8105
8106 pub const fn bf16(self) -> u8 {
8108 ((self.bits() >> Self::BF16_SHIFT) & 0b1111) as u8
8109 }
8110
8111 pub const fn i8mm(self) -> u8 {
8113 ((self.bits() >> Self::I8MM_SHIFT) & 0b1111) as u8
8114 }
8115
8116 pub const fn clrbhb(self) -> u8 {
8118 ((self.bits() >> Self::CLRBHB_SHIFT) & 0b1111) as u8
8119 }
8120}
8121
8122bitflags! {
8123 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8125 #[repr(transparent)]
8126 pub struct IdMmfr0: u32 {
8127 }
8128}
8129
8130impl IdMmfr0 {
8131 pub const VMSA_SHIFT: u32 = 0;
8133 pub const VMSA_MASK: u32 = 0b1111;
8135 pub const PMSA_SHIFT: u32 = 4;
8137 pub const PMSA_MASK: u32 = 0b1111;
8139 pub const OUTERSHR_SHIFT: u32 = 8;
8141 pub const OUTERSHR_MASK: u32 = 0b1111;
8143 pub const SHARELVL_SHIFT: u32 = 12;
8145 pub const SHARELVL_MASK: u32 = 0b1111;
8147 pub const TCM_SHIFT: u32 = 16;
8149 pub const TCM_MASK: u32 = 0b1111;
8151 pub const AUXREG_SHIFT: u32 = 20;
8153 pub const AUXREG_MASK: u32 = 0b1111;
8155 pub const FCSE_SHIFT: u32 = 24;
8157 pub const FCSE_MASK: u32 = 0b1111;
8159 pub const INNERSHR_SHIFT: u32 = 28;
8161 pub const INNERSHR_MASK: u32 = 0b1111;
8163
8164 pub const fn vmsa(self) -> u8 {
8166 ((self.bits() >> Self::VMSA_SHIFT) & 0b1111) as u8
8167 }
8168
8169 pub const fn pmsa(self) -> u8 {
8171 ((self.bits() >> Self::PMSA_SHIFT) & 0b1111) as u8
8172 }
8173
8174 pub const fn outershr(self) -> u8 {
8176 ((self.bits() >> Self::OUTERSHR_SHIFT) & 0b1111) as u8
8177 }
8178
8179 pub const fn sharelvl(self) -> u8 {
8181 ((self.bits() >> Self::SHARELVL_SHIFT) & 0b1111) as u8
8182 }
8183
8184 pub const fn tcm(self) -> u8 {
8186 ((self.bits() >> Self::TCM_SHIFT) & 0b1111) as u8
8187 }
8188
8189 pub const fn auxreg(self) -> u8 {
8191 ((self.bits() >> Self::AUXREG_SHIFT) & 0b1111) as u8
8192 }
8193
8194 pub const fn fcse(self) -> u8 {
8196 ((self.bits() >> Self::FCSE_SHIFT) & 0b1111) as u8
8197 }
8198
8199 pub const fn innershr(self) -> u8 {
8201 ((self.bits() >> Self::INNERSHR_SHIFT) & 0b1111) as u8
8202 }
8203}
8204
8205bitflags! {
8206 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8208 #[repr(transparent)]
8209 pub struct IdMmfr1: u32 {
8210 }
8211}
8212
8213impl IdMmfr1 {
8214 pub const L1HVDVA_SHIFT: u32 = 0;
8216 pub const L1HVDVA_MASK: u32 = 0b1111;
8218 pub const L1UNIVA_SHIFT: u32 = 4;
8220 pub const L1UNIVA_MASK: u32 = 0b1111;
8222 pub const L1HVDSW_SHIFT: u32 = 8;
8224 pub const L1HVDSW_MASK: u32 = 0b1111;
8226 pub const L1UNISW_SHIFT: u32 = 12;
8228 pub const L1UNISW_MASK: u32 = 0b1111;
8230 pub const L1HVD_SHIFT: u32 = 16;
8232 pub const L1HVD_MASK: u32 = 0b1111;
8234 pub const L1UNI_SHIFT: u32 = 20;
8236 pub const L1UNI_MASK: u32 = 0b1111;
8238 pub const L1TSTCLN_SHIFT: u32 = 24;
8240 pub const L1TSTCLN_MASK: u32 = 0b1111;
8242 pub const BPRED_SHIFT: u32 = 28;
8244 pub const BPRED_MASK: u32 = 0b1111;
8246
8247 pub const fn l1hvdva(self) -> u8 {
8249 ((self.bits() >> Self::L1HVDVA_SHIFT) & 0b1111) as u8
8250 }
8251
8252 pub const fn l1univa(self) -> u8 {
8254 ((self.bits() >> Self::L1UNIVA_SHIFT) & 0b1111) as u8
8255 }
8256
8257 pub const fn l1hvdsw(self) -> u8 {
8259 ((self.bits() >> Self::L1HVDSW_SHIFT) & 0b1111) as u8
8260 }
8261
8262 pub const fn l1unisw(self) -> u8 {
8264 ((self.bits() >> Self::L1UNISW_SHIFT) & 0b1111) as u8
8265 }
8266
8267 pub const fn l1hvd(self) -> u8 {
8269 ((self.bits() >> Self::L1HVD_SHIFT) & 0b1111) as u8
8270 }
8271
8272 pub const fn l1uni(self) -> u8 {
8274 ((self.bits() >> Self::L1UNI_SHIFT) & 0b1111) as u8
8275 }
8276
8277 pub const fn l1tstcln(self) -> u8 {
8279 ((self.bits() >> Self::L1TSTCLN_SHIFT) & 0b1111) as u8
8280 }
8281
8282 pub const fn bpred(self) -> u8 {
8284 ((self.bits() >> Self::BPRED_SHIFT) & 0b1111) as u8
8285 }
8286}
8287
8288bitflags! {
8289 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8291 #[repr(transparent)]
8292 pub struct IdMmfr2: u32 {
8293 }
8294}
8295
8296impl IdMmfr2 {
8297 pub const L1HVDFG_SHIFT: u32 = 0;
8299 pub const L1HVDFG_MASK: u32 = 0b1111;
8301 pub const L1HVDBG_SHIFT: u32 = 4;
8303 pub const L1HVDBG_MASK: u32 = 0b1111;
8305 pub const L1HVDRNG_SHIFT: u32 = 8;
8307 pub const L1HVDRNG_MASK: u32 = 0b1111;
8309 pub const HVDTLB_SHIFT: u32 = 12;
8311 pub const HVDTLB_MASK: u32 = 0b1111;
8313 pub const UNITLB_SHIFT: u32 = 16;
8315 pub const UNITLB_MASK: u32 = 0b1111;
8317 pub const MEMBARR_SHIFT: u32 = 20;
8319 pub const MEMBARR_MASK: u32 = 0b1111;
8321 pub const WFISTALL_SHIFT: u32 = 24;
8323 pub const WFISTALL_MASK: u32 = 0b1111;
8325 pub const HWACCFLG_SHIFT: u32 = 28;
8327 pub const HWACCFLG_MASK: u32 = 0b1111;
8329
8330 pub const fn l1hvdfg(self) -> u8 {
8332 ((self.bits() >> Self::L1HVDFG_SHIFT) & 0b1111) as u8
8333 }
8334
8335 pub const fn l1hvdbg(self) -> u8 {
8337 ((self.bits() >> Self::L1HVDBG_SHIFT) & 0b1111) as u8
8338 }
8339
8340 pub const fn l1hvdrng(self) -> u8 {
8342 ((self.bits() >> Self::L1HVDRNG_SHIFT) & 0b1111) as u8
8343 }
8344
8345 pub const fn hvdtlb(self) -> u8 {
8347 ((self.bits() >> Self::HVDTLB_SHIFT) & 0b1111) as u8
8348 }
8349
8350 pub const fn unitlb(self) -> u8 {
8352 ((self.bits() >> Self::UNITLB_SHIFT) & 0b1111) as u8
8353 }
8354
8355 pub const fn membarr(self) -> u8 {
8357 ((self.bits() >> Self::MEMBARR_SHIFT) & 0b1111) as u8
8358 }
8359
8360 pub const fn wfistall(self) -> u8 {
8362 ((self.bits() >> Self::WFISTALL_SHIFT) & 0b1111) as u8
8363 }
8364
8365 pub const fn hwaccflg(self) -> u8 {
8367 ((self.bits() >> Self::HWACCFLG_SHIFT) & 0b1111) as u8
8368 }
8369}
8370
8371bitflags! {
8372 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8374 #[repr(transparent)]
8375 pub struct IdMmfr3: u32 {
8376 }
8377}
8378
8379impl IdMmfr3 {
8380 pub const CMAINTVA_SHIFT: u32 = 0;
8382 pub const CMAINTVA_MASK: u32 = 0b1111;
8384 pub const CMAINTSW_SHIFT: u32 = 4;
8386 pub const CMAINTSW_MASK: u32 = 0b1111;
8388 pub const BPMAINT_SHIFT: u32 = 8;
8390 pub const BPMAINT_MASK: u32 = 0b1111;
8392 pub const MAINTBCST_SHIFT: u32 = 12;
8394 pub const MAINTBCST_MASK: u32 = 0b1111;
8396 pub const PAN_SHIFT: u32 = 16;
8398 pub const PAN_MASK: u32 = 0b1111;
8400 pub const COHWALK_SHIFT: u32 = 20;
8402 pub const COHWALK_MASK: u32 = 0b1111;
8404 pub const CMEMSZ_SHIFT: u32 = 24;
8406 pub const CMEMSZ_MASK: u32 = 0b1111;
8408 pub const SUPERSEC_SHIFT: u32 = 28;
8410 pub const SUPERSEC_MASK: u32 = 0b1111;
8412
8413 pub const fn cmaintva(self) -> u8 {
8415 ((self.bits() >> Self::CMAINTVA_SHIFT) & 0b1111) as u8
8416 }
8417
8418 pub const fn cmaintsw(self) -> u8 {
8420 ((self.bits() >> Self::CMAINTSW_SHIFT) & 0b1111) as u8
8421 }
8422
8423 pub const fn bpmaint(self) -> u8 {
8425 ((self.bits() >> Self::BPMAINT_SHIFT) & 0b1111) as u8
8426 }
8427
8428 pub const fn maintbcst(self) -> u8 {
8430 ((self.bits() >> Self::MAINTBCST_SHIFT) & 0b1111) as u8
8431 }
8432
8433 pub const fn pan(self) -> u8 {
8435 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
8436 }
8437
8438 pub const fn cohwalk(self) -> u8 {
8440 ((self.bits() >> Self::COHWALK_SHIFT) & 0b1111) as u8
8441 }
8442
8443 pub const fn cmemsz(self) -> u8 {
8445 ((self.bits() >> Self::CMEMSZ_SHIFT) & 0b1111) as u8
8446 }
8447
8448 pub const fn supersec(self) -> u8 {
8450 ((self.bits() >> Self::SUPERSEC_SHIFT) & 0b1111) as u8
8451 }
8452}
8453
8454bitflags! {
8455 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8457 #[repr(transparent)]
8458 pub struct IdMmfr4: u32 {
8459 }
8460}
8461
8462impl IdMmfr4 {
8463 pub const SPECSEI_SHIFT: u32 = 0;
8465 pub const SPECSEI_MASK: u32 = 0b1111;
8467 pub const AC2_SHIFT: u32 = 4;
8469 pub const AC2_MASK: u32 = 0b1111;
8471 pub const XNX_SHIFT: u32 = 8;
8473 pub const XNX_MASK: u32 = 0b1111;
8475 pub const CNP_SHIFT: u32 = 12;
8477 pub const CNP_MASK: u32 = 0b1111;
8479 pub const HPDS_SHIFT: u32 = 16;
8481 pub const HPDS_MASK: u32 = 0b1111;
8483 pub const LSM_SHIFT: u32 = 20;
8485 pub const LSM_MASK: u32 = 0b1111;
8487 pub const CCIDX_SHIFT: u32 = 24;
8489 pub const CCIDX_MASK: u32 = 0b1111;
8491 pub const EVT_SHIFT: u32 = 28;
8493 pub const EVT_MASK: u32 = 0b1111;
8495
8496 pub const fn specsei(self) -> u8 {
8498 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
8499 }
8500
8501 pub const fn ac2(self) -> u8 {
8503 ((self.bits() >> Self::AC2_SHIFT) & 0b1111) as u8
8504 }
8505
8506 pub const fn xnx(self) -> u8 {
8508 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
8509 }
8510
8511 pub const fn cnp(self) -> u8 {
8513 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
8514 }
8515
8516 pub const fn hpds(self) -> u8 {
8518 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
8519 }
8520
8521 pub const fn lsm(self) -> u8 {
8523 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
8524 }
8525
8526 pub const fn ccidx(self) -> u8 {
8528 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
8529 }
8530
8531 pub const fn evt(self) -> u8 {
8533 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
8534 }
8535}
8536
8537bitflags! {
8538 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8540 #[repr(transparent)]
8541 pub struct IdMmfr5: u32 {
8542 }
8543}
8544
8545impl IdMmfr5 {
8546 pub const ETS_SHIFT: u32 = 0;
8548 pub const ETS_MASK: u32 = 0b1111;
8550 pub const NTLBPA_SHIFT: u32 = 4;
8552 pub const NTLBPA_MASK: u32 = 0b1111;
8554
8555 pub const fn ets(self) -> u8 {
8557 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
8558 }
8559
8560 pub const fn ntlbpa(self) -> u8 {
8562 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
8563 }
8564}
8565
8566bitflags! {
8567 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8569 #[repr(transparent)]
8570 pub struct IdPfr0: u32 {
8571 }
8572}
8573
8574impl IdPfr0 {
8575 pub const STATE0_SHIFT: u32 = 0;
8577 pub const STATE0_MASK: u32 = 0b1111;
8579 pub const STATE1_SHIFT: u32 = 4;
8581 pub const STATE1_MASK: u32 = 0b1111;
8583 pub const STATE2_SHIFT: u32 = 8;
8585 pub const STATE2_MASK: u32 = 0b1111;
8587 pub const STATE3_SHIFT: u32 = 12;
8589 pub const STATE3_MASK: u32 = 0b1111;
8591 pub const CSV2_SHIFT: u32 = 16;
8593 pub const CSV2_MASK: u32 = 0b1111;
8595 pub const AMU_SHIFT: u32 = 20;
8597 pub const AMU_MASK: u32 = 0b1111;
8599 pub const DIT_SHIFT: u32 = 24;
8601 pub const DIT_MASK: u32 = 0b1111;
8603 pub const RAS_SHIFT: u32 = 28;
8605 pub const RAS_MASK: u32 = 0b1111;
8607
8608 pub const fn state0(self) -> u8 {
8610 ((self.bits() >> Self::STATE0_SHIFT) & 0b1111) as u8
8611 }
8612
8613 pub const fn state1(self) -> u8 {
8615 ((self.bits() >> Self::STATE1_SHIFT) & 0b1111) as u8
8616 }
8617
8618 pub const fn state2(self) -> u8 {
8620 ((self.bits() >> Self::STATE2_SHIFT) & 0b1111) as u8
8621 }
8622
8623 pub const fn state3(self) -> u8 {
8625 ((self.bits() >> Self::STATE3_SHIFT) & 0b1111) as u8
8626 }
8627
8628 pub const fn csv2(self) -> u8 {
8630 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
8631 }
8632
8633 pub const fn amu(self) -> u8 {
8635 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
8636 }
8637
8638 pub const fn dit(self) -> u8 {
8640 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
8641 }
8642
8643 pub const fn ras(self) -> u8 {
8645 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
8646 }
8647}
8648
8649bitflags! {
8650 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8652 #[repr(transparent)]
8653 pub struct IdPfr1: u32 {
8654 }
8655}
8656
8657impl IdPfr1 {
8658 pub const PROGMOD_SHIFT: u32 = 0;
8660 pub const PROGMOD_MASK: u32 = 0b1111;
8662 pub const SECURITY_SHIFT: u32 = 4;
8664 pub const SECURITY_MASK: u32 = 0b1111;
8666 pub const MPROGMOD_SHIFT: u32 = 8;
8668 pub const MPROGMOD_MASK: u32 = 0b1111;
8670 pub const VIRTUALIZATION_SHIFT: u32 = 12;
8672 pub const VIRTUALIZATION_MASK: u32 = 0b1111;
8674 pub const GENTIMER_SHIFT: u32 = 16;
8676 pub const GENTIMER_MASK: u32 = 0b1111;
8678 pub const SEC_FRAC_SHIFT: u32 = 20;
8680 pub const SEC_FRAC_MASK: u32 = 0b1111;
8682 pub const VIRT_FRAC_SHIFT: u32 = 24;
8684 pub const VIRT_FRAC_MASK: u32 = 0b1111;
8686 pub const GIC_SHIFT: u32 = 28;
8688 pub const GIC_MASK: u32 = 0b1111;
8690
8691 pub const fn progmod(self) -> u8 {
8693 ((self.bits() >> Self::PROGMOD_SHIFT) & 0b1111) as u8
8694 }
8695
8696 pub const fn security(self) -> u8 {
8698 ((self.bits() >> Self::SECURITY_SHIFT) & 0b1111) as u8
8699 }
8700
8701 pub const fn mprogmod(self) -> u8 {
8703 ((self.bits() >> Self::MPROGMOD_SHIFT) & 0b1111) as u8
8704 }
8705
8706 pub const fn virtualization(self) -> u8 {
8708 ((self.bits() >> Self::VIRTUALIZATION_SHIFT) & 0b1111) as u8
8709 }
8710
8711 pub const fn gentimer(self) -> u8 {
8713 ((self.bits() >> Self::GENTIMER_SHIFT) & 0b1111) as u8
8714 }
8715
8716 pub const fn sec_frac(self) -> u8 {
8718 ((self.bits() >> Self::SEC_FRAC_SHIFT) & 0b1111) as u8
8719 }
8720
8721 pub const fn virt_frac(self) -> u8 {
8723 ((self.bits() >> Self::VIRT_FRAC_SHIFT) & 0b1111) as u8
8724 }
8725
8726 pub const fn gic(self) -> u8 {
8728 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
8729 }
8730}
8731
8732bitflags! {
8733 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8735 #[repr(transparent)]
8736 pub struct IdPfr2: u32 {
8737 }
8738}
8739
8740impl IdPfr2 {
8741 pub const CSV3_SHIFT: u32 = 0;
8743 pub const CSV3_MASK: u32 = 0b1111;
8745 pub const SSBS_SHIFT: u32 = 4;
8747 pub const SSBS_MASK: u32 = 0b1111;
8749 pub const RAS_FRAC_SHIFT: u32 = 8;
8751 pub const RAS_FRAC_MASK: u32 = 0b1111;
8753
8754 pub const fn csv3(self) -> u8 {
8756 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
8757 }
8758
8759 pub const fn ssbs(self) -> u8 {
8761 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
8762 }
8763
8764 pub const fn ras_frac(self) -> u8 {
8766 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
8767 }
8768}
8769
8770bitflags! {
8771 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8773 #[repr(transparent)]
8774 pub struct Ifar: u32 {
8775 }
8776}
8777
8778impl Ifar {
8779 pub const VA_SHIFT: u32 = 0;
8781 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
8783
8784 pub const fn va(self) -> u32 {
8786 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
8787 }
8788}
8789
8790bitflags! {
8791 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8793 #[repr(transparent)]
8794 pub struct Ifsr: u32 {
8795 const LPAE = 1 << 9;
8797 const EXT = 1 << 12;
8799 const FNV = 1 << 16;
8801 }
8802}
8803
8804impl Ifsr {
8805 pub const STATUS_SHIFT: u32 = 0;
8807 pub const STATUS_MASK: u32 = 0b111111;
8809 pub const LPAE_SHIFT: u32 = 9;
8811 pub const EXT_SHIFT: u32 = 12;
8813 pub const FNV_SHIFT: u32 = 16;
8815
8816 pub const fn status(self) -> u8 {
8818 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
8819 }
8820}
8821
8822bitflags! {
8823 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8825 #[repr(transparent)]
8826 pub struct Isr: u32 {
8827 const F = 1 << 6;
8829 const I = 1 << 7;
8831 const A = 1 << 8;
8833 }
8834}
8835
8836impl Isr {
8837 pub const F_SHIFT: u32 = 6;
8839 pub const I_SHIFT: u32 = 7;
8841 pub const A_SHIFT: u32 = 8;
8843}
8844
8845#[cfg(feature = "el1")]
8846bitflags! {
8847 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8849 #[repr(transparent)]
8850 pub struct IsrEl1: u64 {
8851 const F = 1 << 6;
8853 const I = 1 << 7;
8855 const A = 1 << 8;
8857 const FS = 1 << 9;
8859 const IS = 1 << 10;
8861 }
8862}
8863
8864#[cfg(feature = "el1")]
8865impl IsrEl1 {
8866 pub const F_SHIFT: u32 = 6;
8868 pub const I_SHIFT: u32 = 7;
8870 pub const A_SHIFT: u32 = 8;
8872 pub const FS_SHIFT: u32 = 9;
8874 pub const IS_SHIFT: u32 = 10;
8876}
8877
8878bitflags! {
8879 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8881 #[repr(transparent)]
8882 pub struct Mair0: u32 {
8883 }
8884}
8885
8886impl Mair0 {
8887 pub const ATTR_SHIFT: u32 = 0;
8889 pub const ATTR_MASK: u32 = 0b11111111;
8891
8892 pub const fn attr(self, n: u32) -> u8 {
8894 assert!(n < 4);
8895 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
8896 }
8897}
8898
8899bitflags! {
8900 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8902 #[repr(transparent)]
8903 pub struct Mair1: u32 {
8904 }
8905}
8906
8907impl Mair1 {
8908 pub const ATTR_SHIFT: u32 = 0;
8910 pub const ATTR_MASK: u32 = 0b11111111;
8912
8913 pub const fn attr(self, n: u32) -> u8 {
8915 assert!(n >= 4 && n < 8);
8916 ((self.bits() >> (Self::ATTR_SHIFT + (n - 4) * 8)) & 0b11111111) as u8
8917 }
8918}
8919
8920#[cfg(feature = "el1")]
8921bitflags! {
8922 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8924 #[repr(transparent)]
8925 pub struct MairEl1: u64 {
8926 }
8927}
8928
8929#[cfg(feature = "el1")]
8930impl MairEl1 {
8931 pub const ATTR_SHIFT: u32 = 0;
8933 pub const ATTR_MASK: u64 = 0b11111111;
8935
8936 pub const fn attr(self, n: u32) -> u8 {
8938 assert!(n < 8);
8939 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
8940 }
8941}
8942
8943#[cfg(feature = "el2")]
8944bitflags! {
8945 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8947 #[repr(transparent)]
8948 pub struct MairEl2: u64 {
8949 }
8950}
8951
8952#[cfg(feature = "el2")]
8953impl MairEl2 {
8954 pub const ATTR_SHIFT: u32 = 0;
8956 pub const ATTR_MASK: u64 = 0b11111111;
8958
8959 pub const fn attr(self, n: u32) -> u8 {
8961 assert!(n < 8);
8962 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
8963 }
8964}
8965
8966#[cfg(feature = "el3")]
8967bitflags! {
8968 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8970 #[repr(transparent)]
8971 pub struct MairEl3: u64 {
8972 }
8973}
8974
8975#[cfg(feature = "el3")]
8976impl MairEl3 {
8977 pub const ATTR_SHIFT: u32 = 0;
8979 pub const ATTR_MASK: u64 = 0b11111111;
8981
8982 pub const fn attr(self, n: u32) -> u8 {
8984 assert!(n < 8);
8985 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
8986 }
8987}
8988
8989#[cfg(feature = "el1")]
8990bitflags! {
8991 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
8993 #[repr(transparent)]
8994 pub struct MdccintEl1: u64 {
8995 const TX = 1 << 29;
8997 const RX = 1 << 30;
8999 }
9000}
9001
9002#[cfg(feature = "el1")]
9003impl MdccintEl1 {
9004 pub const TX_SHIFT: u32 = 29;
9006 pub const RX_SHIFT: u32 = 30;
9008}
9009
9010#[cfg(feature = "el2")]
9011bitflags! {
9012 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9014 #[repr(transparent)]
9015 pub struct MdcrEl2: u64 {
9016 const TPMCR = 1 << 5;
9018 const TPM = 1 << 6;
9020 const HPME = 1 << 7;
9022 const TDE = 1 << 8;
9024 const TDA = 1 << 9;
9026 const TDOSA = 1 << 10;
9028 const TDRA = 1 << 11;
9030 const TPMS = 1 << 14;
9032 const ENSPM = 1 << 15;
9034 const HPMD = 1 << 17;
9036 const TTRF = 1 << 19;
9038 const HCCD = 1 << 23;
9040 const HLP = 1 << 26;
9042 const TDCC = 1 << 27;
9044 const MTPME = 1 << 28;
9046 const HPMFZO = 1 << 29;
9048 const HPMFZS = 1 << 36;
9050 const EBWE = 1 << 43;
9052 const ENSTEPOP = 1 << 50;
9054 }
9055}
9056
9057#[cfg(feature = "el2")]
9058impl MdcrEl2 {
9059 pub const HPMN_SHIFT: u32 = 0;
9061 pub const HPMN_MASK: u64 = 0b11111;
9063 pub const TPMCR_SHIFT: u32 = 5;
9065 pub const TPM_SHIFT: u32 = 6;
9067 pub const HPME_SHIFT: u32 = 7;
9069 pub const TDE_SHIFT: u32 = 8;
9071 pub const TDA_SHIFT: u32 = 9;
9073 pub const TDOSA_SHIFT: u32 = 10;
9075 pub const TDRA_SHIFT: u32 = 11;
9077 pub const E2PB_SHIFT: u32 = 12;
9079 pub const E2PB_MASK: u64 = 0b11;
9081 pub const TPMS_SHIFT: u32 = 14;
9083 pub const ENSPM_SHIFT: u32 = 15;
9085 pub const HPMD_SHIFT: u32 = 17;
9087 pub const TTRF_SHIFT: u32 = 19;
9089 pub const HCCD_SHIFT: u32 = 23;
9091 pub const E2TB_SHIFT: u32 = 24;
9093 pub const E2TB_MASK: u64 = 0b11;
9095 pub const HLP_SHIFT: u32 = 26;
9097 pub const TDCC_SHIFT: u32 = 27;
9099 pub const MTPME_SHIFT: u32 = 28;
9101 pub const HPMFZO_SHIFT: u32 = 29;
9103 pub const PMSSE_SHIFT: u32 = 30;
9105 pub const PMSSE_MASK: u64 = 0b11;
9107 pub const HPMFZS_SHIFT: u32 = 36;
9109 pub const PMEE_SHIFT: u32 = 40;
9111 pub const PMEE_MASK: u64 = 0b11;
9113 pub const EBWE_SHIFT: u32 = 43;
9115 pub const ENSTEPOP_SHIFT: u32 = 50;
9117
9118 pub const fn hpmn(self) -> u8 {
9120 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
9121 }
9122
9123 pub const fn e2pb(self) -> u8 {
9125 ((self.bits() >> Self::E2PB_SHIFT) & 0b11) as u8
9126 }
9127
9128 pub const fn e2tb(self) -> u8 {
9130 ((self.bits() >> Self::E2TB_SHIFT) & 0b11) as u8
9131 }
9132
9133 pub const fn pmsse(self) -> u8 {
9135 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
9136 }
9137
9138 pub const fn pmee(self) -> u8 {
9140 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
9141 }
9142}
9143
9144#[cfg(feature = "el3")]
9145bitflags! {
9146 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9148 #[repr(transparent)]
9149 pub struct MdcrEl3: u64 {
9150 const RLTE = 1 << 0;
9152 const EPMADE = 1 << 2;
9154 const ETADE = 1 << 3;
9156 const EDADE = 1 << 4;
9158 const TPM = 1 << 6;
9160 const ENPM2 = 1 << 7;
9162 const TDA = 1 << 9;
9164 const TDOSA = 1 << 10;
9166 const NSPBE = 1 << 11;
9168 const SDD = 1 << 16;
9170 const SPME = 1 << 17;
9172 const STE = 1 << 18;
9174 const TTRF = 1 << 19;
9176 const EDAD = 1 << 20;
9178 const EPMAD = 1 << 21;
9180 const ETAD = 1 << 22;
9182 const SCCD = 1 << 23;
9184 const NSTBE = 1 << 26;
9186 const TDCC = 1 << 27;
9188 const MTPME = 1 << 28;
9190 const MCCD = 1 << 34;
9192 const MPMX = 1 << 35;
9194 const ENPMSN = 1 << 36;
9196 const E3BREW = 1 << 37;
9198 const E3BREC = 1 << 38;
9200 const ENTB2 = 1 << 39;
9202 const ENPMS3 = 1 << 42;
9204 const EBWE = 1 << 43;
9206 const ENPMSS = 1 << 44;
9208 const ENITE = 1 << 47;
9210 const ENSTEPOP = 1 << 50;
9212 const ENPMS4 = 1 << 55;
9214 }
9215}
9216
9217#[cfg(feature = "el3")]
9218impl MdcrEl3 {
9219 pub const RLTE_SHIFT: u32 = 0;
9221 pub const EPMADE_SHIFT: u32 = 2;
9223 pub const ETADE_SHIFT: u32 = 3;
9225 pub const EDADE_SHIFT: u32 = 4;
9227 pub const TPM_SHIFT: u32 = 6;
9229 pub const ENPM2_SHIFT: u32 = 7;
9231 pub const TDA_SHIFT: u32 = 9;
9233 pub const TDOSA_SHIFT: u32 = 10;
9235 pub const NSPBE_SHIFT: u32 = 11;
9237 pub const NSPB_SHIFT: u32 = 12;
9239 pub const NSPB_MASK: u64 = 0b11;
9241 pub const SPD32_SHIFT: u32 = 14;
9243 pub const SPD32_MASK: u64 = 0b11;
9245 pub const SDD_SHIFT: u32 = 16;
9247 pub const SPME_SHIFT: u32 = 17;
9249 pub const STE_SHIFT: u32 = 18;
9251 pub const TTRF_SHIFT: u32 = 19;
9253 pub const EDAD_SHIFT: u32 = 20;
9255 pub const EPMAD_SHIFT: u32 = 21;
9257 pub const ETAD_SHIFT: u32 = 22;
9259 pub const SCCD_SHIFT: u32 = 23;
9261 pub const NSTB_SHIFT: u32 = 24;
9263 pub const NSTB_MASK: u64 = 0b11;
9265 pub const NSTBE_SHIFT: u32 = 26;
9267 pub const TDCC_SHIFT: u32 = 27;
9269 pub const MTPME_SHIFT: u32 = 28;
9271 pub const PMSSE_SHIFT: u32 = 30;
9273 pub const PMSSE_MASK: u64 = 0b11;
9275 pub const SBRBE_SHIFT: u32 = 32;
9277 pub const SBRBE_MASK: u64 = 0b11;
9279 pub const MCCD_SHIFT: u32 = 34;
9281 pub const MPMX_SHIFT: u32 = 35;
9283 pub const ENPMSN_SHIFT: u32 = 36;
9285 pub const E3BREW_SHIFT: u32 = 37;
9287 pub const E3BREC_SHIFT: u32 = 38;
9289 pub const ENTB2_SHIFT: u32 = 39;
9291 pub const PMEE_SHIFT: u32 = 40;
9293 pub const PMEE_MASK: u64 = 0b11;
9295 pub const ENPMS3_SHIFT: u32 = 42;
9297 pub const EBWE_SHIFT: u32 = 43;
9299 pub const ENPMSS_SHIFT: u32 = 44;
9301 pub const EPMSSAD_SHIFT: u32 = 45;
9303 pub const EPMSSAD_MASK: u64 = 0b11;
9305 pub const ENITE_SHIFT: u32 = 47;
9307 pub const ETBAD_SHIFT: u32 = 48;
9309 pub const ETBAD_MASK: u64 = 0b11;
9311 pub const ENSTEPOP_SHIFT: u32 = 50;
9313 pub const PMSEE_SHIFT: u32 = 51;
9315 pub const PMSEE_MASK: u64 = 0b11;
9317 pub const TRBEE_SHIFT: u32 = 53;
9319 pub const TRBEE_MASK: u64 = 0b11;
9321 pub const ENPMS4_SHIFT: u32 = 55;
9323
9324 pub const fn nspb(self) -> u8 {
9326 ((self.bits() >> Self::NSPB_SHIFT) & 0b11) as u8
9327 }
9328
9329 pub const fn spd32(self) -> u8 {
9331 ((self.bits() >> Self::SPD32_SHIFT) & 0b11) as u8
9332 }
9333
9334 pub const fn nstb(self) -> u8 {
9336 ((self.bits() >> Self::NSTB_SHIFT) & 0b11) as u8
9337 }
9338
9339 pub const fn pmsse(self) -> u8 {
9341 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
9342 }
9343
9344 pub const fn sbrbe(self) -> u8 {
9346 ((self.bits() >> Self::SBRBE_SHIFT) & 0b11) as u8
9347 }
9348
9349 pub const fn pmee(self) -> u8 {
9351 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
9352 }
9353
9354 pub const fn epmssad(self) -> u8 {
9356 ((self.bits() >> Self::EPMSSAD_SHIFT) & 0b11) as u8
9357 }
9358
9359 pub const fn etbad(self) -> u8 {
9361 ((self.bits() >> Self::ETBAD_SHIFT) & 0b11) as u8
9362 }
9363
9364 pub const fn pmsee(self) -> u8 {
9366 ((self.bits() >> Self::PMSEE_SHIFT) & 0b11) as u8
9367 }
9368
9369 pub const fn trbee(self) -> u8 {
9371 ((self.bits() >> Self::TRBEE_SHIFT) & 0b11) as u8
9372 }
9373}
9374
9375#[cfg(feature = "el1")]
9376bitflags! {
9377 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9379 #[repr(transparent)]
9380 pub struct MdscrEl1: u64 {
9381 const SS = 1 << 0;
9383 const ERR = 1 << 6;
9385 const TDCC = 1 << 12;
9387 const KDE = 1 << 13;
9389 const HDE = 1 << 14;
9391 const MDE = 1 << 15;
9393 const SC2 = 1 << 19;
9395 const TDA = 1 << 21;
9397 const TXU = 1 << 26;
9399 const RXO = 1 << 27;
9401 const TXFULL = 1 << 29;
9403 const RXFULL = 1 << 30;
9405 const TFO = 1 << 31;
9407 const EMBWE = 1 << 32;
9409 const TTA = 1 << 33;
9411 const ENSPM = 1 << 34;
9413 const EHBWE = 1 << 35;
9415 const ENSTEPOP = 1 << 50;
9417 }
9418}
9419
9420#[cfg(feature = "el1")]
9421impl MdscrEl1 {
9422 pub const SS_SHIFT: u32 = 0;
9424 pub const ERR_SHIFT: u32 = 6;
9426 pub const TDCC_SHIFT: u32 = 12;
9428 pub const KDE_SHIFT: u32 = 13;
9430 pub const HDE_SHIFT: u32 = 14;
9432 pub const MDE_SHIFT: u32 = 15;
9434 pub const SC2_SHIFT: u32 = 19;
9436 pub const TDA_SHIFT: u32 = 21;
9438 pub const INTDIS_SHIFT: u32 = 22;
9440 pub const INTDIS_MASK: u64 = 0b11;
9442 pub const TXU_SHIFT: u32 = 26;
9444 pub const RXO_SHIFT: u32 = 27;
9446 pub const TXFULL_SHIFT: u32 = 29;
9448 pub const RXFULL_SHIFT: u32 = 30;
9450 pub const TFO_SHIFT: u32 = 31;
9452 pub const EMBWE_SHIFT: u32 = 32;
9454 pub const TTA_SHIFT: u32 = 33;
9456 pub const ENSPM_SHIFT: u32 = 34;
9458 pub const EHBWE_SHIFT: u32 = 35;
9460 pub const ENSTEPOP_SHIFT: u32 = 50;
9462
9463 pub const fn intdis(self) -> u8 {
9465 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
9466 }
9467}
9468
9469bitflags! {
9470 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9472 #[repr(transparent)]
9473 pub struct Midr: u32 {
9474 }
9475}
9476
9477impl Midr {
9478 pub const REVISION_SHIFT: u32 = 0;
9480 pub const REVISION_MASK: u32 = 0b1111;
9482 pub const PARTNUM_SHIFT: u32 = 4;
9484 pub const PARTNUM_MASK: u32 = 0b111111111111;
9486 pub const ARCHITECTURE_SHIFT: u32 = 16;
9488 pub const ARCHITECTURE_MASK: u32 = 0b1111;
9490 pub const VARIANT_SHIFT: u32 = 20;
9492 pub const VARIANT_MASK: u32 = 0b1111;
9494 pub const IMPLEMENTER_SHIFT: u32 = 24;
9496 pub const IMPLEMENTER_MASK: u32 = 0b11111111;
9498
9499 pub const fn revision(self) -> u8 {
9501 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
9502 }
9503
9504 pub const fn partnum(self) -> u16 {
9506 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
9507 }
9508
9509 pub const fn architecture(self) -> u8 {
9511 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
9512 }
9513
9514 pub const fn variant(self) -> u8 {
9516 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
9517 }
9518
9519 pub const fn implementer(self) -> u8 {
9521 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
9522 }
9523}
9524
9525#[cfg(feature = "el1")]
9526bitflags! {
9527 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9529 #[repr(transparent)]
9530 pub struct MidrEl1: u64 {
9531 }
9532}
9533
9534#[cfg(feature = "el1")]
9535impl MidrEl1 {
9536 pub const REVISION_SHIFT: u32 = 0;
9538 pub const REVISION_MASK: u64 = 0b1111;
9540 pub const PARTNUM_SHIFT: u32 = 4;
9542 pub const PARTNUM_MASK: u64 = 0b111111111111;
9544 pub const ARCHITECTURE_SHIFT: u32 = 16;
9546 pub const ARCHITECTURE_MASK: u64 = 0b1111;
9548 pub const VARIANT_SHIFT: u32 = 20;
9550 pub const VARIANT_MASK: u64 = 0b1111;
9552 pub const IMPLEMENTER_SHIFT: u32 = 24;
9554 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
9556
9557 pub const fn revision(self) -> u8 {
9559 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
9560 }
9561
9562 pub const fn partnum(self) -> u16 {
9564 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
9565 }
9566
9567 pub const fn architecture(self) -> u8 {
9569 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
9570 }
9571
9572 pub const fn variant(self) -> u8 {
9574 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
9575 }
9576
9577 pub const fn implementer(self) -> u8 {
9579 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
9580 }
9581}
9582
9583#[cfg(feature = "el2")]
9584bitflags! {
9585 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9587 #[repr(transparent)]
9588 pub struct Mpam2El2: u64 {
9589 const TRAPMPAM1EL1 = 1 << 48;
9591 const TRAPMPAM0EL1 = 1 << 49;
9593 const ENMPAMSM = 1 << 50;
9595 const ALTSP_FRCD = 1 << 54;
9597 const ALTSP_EL2 = 1 << 55;
9599 const ALTSP_HFC = 1 << 56;
9601 const TIDR = 1 << 58;
9603 const MPAMEN = 1 << 63;
9605 }
9606}
9607
9608#[cfg(feature = "el2")]
9609impl Mpam2El2 {
9610 pub const PARTID_SHIFT: u32 = 0;
9612 pub const PARTID_MASK: u64 = 0b1111111111111111;
9614 pub const PARTID_I_SHIFT: u32 = 0;
9616 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
9618 pub const PARTID_D_SHIFT: u32 = 16;
9620 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
9622 pub const ALTPARTID_SHIFT: u32 = 16;
9624 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
9626 pub const PMG_SHIFT: u32 = 32;
9628 pub const PMG_MASK: u64 = 0b1111111111111111;
9630 pub const PMG_I_SHIFT: u32 = 32;
9632 pub const PMG_I_MASK: u64 = 0b11111111;
9634 pub const PMG_D_SHIFT: u32 = 40;
9636 pub const PMG_D_MASK: u64 = 0b11111111;
9638 pub const TRAPMPAM1EL1_SHIFT: u32 = 48;
9640 pub const ALTPMG_SHIFT: u32 = 48;
9642 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
9644 pub const TRAPMPAM0EL1_SHIFT: u32 = 49;
9646 pub const ENMPAMSM_SHIFT: u32 = 50;
9648 pub const ALTSP_FRCD_SHIFT: u32 = 54;
9650 pub const ALTSP_EL2_SHIFT: u32 = 55;
9652 pub const ALTSP_HFC_SHIFT: u32 = 56;
9654 pub const TIDR_SHIFT: u32 = 58;
9656 pub const MPAMEN_SHIFT: u32 = 63;
9658
9659 pub const fn partid(self) -> u16 {
9661 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
9662 }
9663
9664 pub const fn partid_i(self) -> u16 {
9666 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
9667 }
9668
9669 pub const fn partid_d(self) -> u16 {
9671 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
9672 }
9673
9674 pub const fn altpartid(self) -> u16 {
9676 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
9677 }
9678
9679 pub const fn pmg(self) -> u16 {
9681 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
9682 }
9683
9684 pub const fn pmg_i(self) -> u8 {
9686 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
9687 }
9688
9689 pub const fn pmg_d(self) -> u8 {
9691 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
9692 }
9693
9694 pub const fn altpmg(self) -> u16 {
9696 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
9697 }
9698}
9699
9700#[cfg(feature = "el3")]
9701bitflags! {
9702 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9706 #[repr(transparent)]
9707 pub struct Mpam3El3: u64 {
9708 const RT_ALTSP_NS = 1 << 52;
9710 const ALTSP_EL3 = 1 << 55;
9712 const ALTSP_HFC = 1 << 56;
9714 const ALTSP_HEN = 1 << 57;
9716 const FORCE_NS = 1 << 60;
9718 const SDEFLT = 1 << 61;
9720 const TRAPLOWER = 1 << 62;
9722 const MPAMEN = 1 << 63;
9724 }
9725}
9726
9727#[cfg(feature = "el3")]
9728impl Mpam3El3 {
9729 pub const PARTID_SHIFT: u32 = 0;
9731 pub const PARTID_MASK: u64 = 0b1111111111111111;
9733 pub const PARTID_I_SHIFT: u32 = 0;
9735 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
9737 pub const PARTID_D_SHIFT: u32 = 16;
9739 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
9741 pub const ALTPARTID_SHIFT: u32 = 16;
9743 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
9745 pub const PMG_SHIFT: u32 = 32;
9747 pub const PMG_MASK: u64 = 0b1111111111111111;
9749 pub const PMG_I_SHIFT: u32 = 32;
9751 pub const PMG_I_MASK: u64 = 0b11111111;
9753 pub const PMG_D_SHIFT: u32 = 40;
9755 pub const PMG_D_MASK: u64 = 0b11111111;
9757 pub const ALTPMG_SHIFT: u32 = 48;
9759 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
9761 pub const RT_ALTSP_NS_SHIFT: u32 = 52;
9763 pub const ALTSP_EL3_SHIFT: u32 = 55;
9765 pub const ALTSP_HFC_SHIFT: u32 = 56;
9767 pub const ALTSP_HEN_SHIFT: u32 = 57;
9769 pub const FORCE_NS_SHIFT: u32 = 60;
9771 pub const SDEFLT_SHIFT: u32 = 61;
9773 pub const TRAPLOWER_SHIFT: u32 = 62;
9775 pub const MPAMEN_SHIFT: u32 = 63;
9777
9778 pub const fn partid(self) -> u16 {
9780 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
9781 }
9782
9783 pub const fn partid_i(self) -> u16 {
9785 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
9786 }
9787
9788 pub const fn partid_d(self) -> u16 {
9790 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
9791 }
9792
9793 pub const fn altpartid(self) -> u16 {
9795 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
9796 }
9797
9798 pub const fn pmg(self) -> u16 {
9800 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
9801 }
9802
9803 pub const fn pmg_i(self) -> u8 {
9805 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
9806 }
9807
9808 pub const fn pmg_d(self) -> u8 {
9810 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
9811 }
9812
9813 pub const fn altpmg(self) -> u16 {
9815 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
9816 }
9817}
9818
9819#[cfg(feature = "el2")]
9820bitflags! {
9821 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9823 #[repr(transparent)]
9824 pub struct MpamhcrEl2: u64 {
9825 const EL0_VPMEN = 1 << 0;
9827 const EL1_VPMEN = 1 << 1;
9829 const VPMEN = 1 << 2;
9831 const VMMEN = 1 << 3;
9833 const SMVPMEN = 1 << 4;
9835 const SMVMMEN = 1 << 5;
9837 const GSTAPP_PLK = 1 << 8;
9839 const TRAP_MPAMIDR_EL1 = 1 << 31;
9841 }
9842}
9843
9844#[cfg(feature = "el2")]
9845impl MpamhcrEl2 {
9846 pub const EL0_VPMEN_SHIFT: u32 = 0;
9848 pub const EL1_VPMEN_SHIFT: u32 = 1;
9850 pub const VPMEN_SHIFT: u32 = 2;
9852 pub const VMMEN_SHIFT: u32 = 3;
9854 pub const SMVPMEN_SHIFT: u32 = 4;
9856 pub const SMVMMEN_SHIFT: u32 = 5;
9858 pub const GSTAPP_PLK_SHIFT: u32 = 8;
9860 pub const TRAP_MPAMIDR_EL1_SHIFT: u32 = 31;
9862}
9863
9864#[cfg(feature = "el1")]
9865bitflags! {
9866 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9870 #[repr(transparent)]
9871 pub struct MpamidrEl1: u64 {
9872 const HAS_HCR = 1 << 17;
9874 const HAS_ALT_ID = 1 << 21;
9876 const HAS_INSTR_ALT_ID = 1 << 22;
9878 const HAS_BW_CTRL = 1 << 56;
9880 const HAS_ALTSP = 1 << 57;
9882 const HAS_TIDR = 1 << 58;
9884 const SP4 = 1 << 59;
9886 const HAS_FORCE_NS = 1 << 60;
9888 const HAS_SDEFLT = 1 << 61;
9890 }
9891}
9892
9893#[cfg(feature = "el1")]
9894impl MpamidrEl1 {
9895 pub const PARTID_MAX_SHIFT: u32 = 0;
9897 pub const PARTID_MAX_MASK: u64 = 0b1111111111111111;
9899 pub const HAS_HCR_SHIFT: u32 = 17;
9901 pub const VPMR_MAX_SHIFT: u32 = 18;
9903 pub const VPMR_MAX_MASK: u64 = 0b111;
9905 pub const HAS_ALT_ID_SHIFT: u32 = 21;
9907 pub const HAS_INSTR_ALT_ID_SHIFT: u32 = 22;
9909 pub const HAS_BW_CTRL_SHIFT: u32 = 56;
9911 pub const HAS_ALTSP_SHIFT: u32 = 57;
9913 pub const HAS_TIDR_SHIFT: u32 = 58;
9915 pub const SP4_SHIFT: u32 = 59;
9917 pub const HAS_FORCE_NS_SHIFT: u32 = 60;
9919 pub const HAS_SDEFLT_SHIFT: u32 = 61;
9921
9922 pub const fn partid_max(self) -> u16 {
9924 ((self.bits() >> Self::PARTID_MAX_SHIFT) & 0b1111111111111111) as u16
9925 }
9926
9927 pub const fn vpmr_max(self) -> u8 {
9931 ((self.bits() >> Self::VPMR_MAX_SHIFT) & 0b111) as u8
9932 }
9933}
9934
9935#[cfg(feature = "el2")]
9936bitflags! {
9937 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9939 #[repr(transparent)]
9940 pub struct Mpamvpm0El2: u64 {
9941 }
9942}
9943
9944#[cfg(feature = "el2")]
9945impl Mpamvpm0El2 {
9946 pub const PHYPARTID0_SHIFT: u32 = 0;
9948 pub const PHYPARTID0_MASK: u64 = 0b1111111111111111;
9950 pub const PHYPARTID1_SHIFT: u32 = 16;
9952 pub const PHYPARTID1_MASK: u64 = 0b1111111111111111;
9954 pub const PHYPARTID2_SHIFT: u32 = 32;
9956 pub const PHYPARTID2_MASK: u64 = 0b1111111111111111;
9958 pub const PHYPARTID3_SHIFT: u32 = 48;
9960 pub const PHYPARTID3_MASK: u64 = 0b1111111111111111;
9962
9963 pub const fn phypartid0(self) -> u16 {
9965 ((self.bits() >> Self::PHYPARTID0_SHIFT) & 0b1111111111111111) as u16
9966 }
9967
9968 pub const fn phypartid1(self) -> u16 {
9970 ((self.bits() >> Self::PHYPARTID1_SHIFT) & 0b1111111111111111) as u16
9971 }
9972
9973 pub const fn phypartid2(self) -> u16 {
9975 ((self.bits() >> Self::PHYPARTID2_SHIFT) & 0b1111111111111111) as u16
9976 }
9977
9978 pub const fn phypartid3(self) -> u16 {
9980 ((self.bits() >> Self::PHYPARTID3_SHIFT) & 0b1111111111111111) as u16
9981 }
9982}
9983
9984#[cfg(feature = "el2")]
9985bitflags! {
9986 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9988 #[repr(transparent)]
9989 pub struct Mpamvpm1El2: u64 {
9990 }
9991}
9992
9993#[cfg(feature = "el2")]
9994impl Mpamvpm1El2 {
9995 pub const PHYPARTID4_SHIFT: u32 = 0;
9997 pub const PHYPARTID4_MASK: u64 = 0b1111111111111111;
9999 pub const PHYPARTID5_SHIFT: u32 = 16;
10001 pub const PHYPARTID5_MASK: u64 = 0b1111111111111111;
10003 pub const PHYPARTID6_SHIFT: u32 = 32;
10005 pub const PHYPARTID6_MASK: u64 = 0b1111111111111111;
10007 pub const PHYPARTID7_SHIFT: u32 = 48;
10009 pub const PHYPARTID7_MASK: u64 = 0b1111111111111111;
10011
10012 pub const fn phypartid4(self) -> u16 {
10014 ((self.bits() >> Self::PHYPARTID4_SHIFT) & 0b1111111111111111) as u16
10015 }
10016
10017 pub const fn phypartid5(self) -> u16 {
10019 ((self.bits() >> Self::PHYPARTID5_SHIFT) & 0b1111111111111111) as u16
10020 }
10021
10022 pub const fn phypartid6(self) -> u16 {
10024 ((self.bits() >> Self::PHYPARTID6_SHIFT) & 0b1111111111111111) as u16
10025 }
10026
10027 pub const fn phypartid7(self) -> u16 {
10029 ((self.bits() >> Self::PHYPARTID7_SHIFT) & 0b1111111111111111) as u16
10030 }
10031}
10032
10033#[cfg(feature = "el2")]
10034bitflags! {
10035 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10037 #[repr(transparent)]
10038 pub struct Mpamvpm2El2: u64 {
10039 }
10040}
10041
10042#[cfg(feature = "el2")]
10043impl Mpamvpm2El2 {
10044 pub const PHYPARTID8_SHIFT: u32 = 0;
10046 pub const PHYPARTID8_MASK: u64 = 0b1111111111111111;
10048 pub const PHYPARTID9_SHIFT: u32 = 16;
10050 pub const PHYPARTID9_MASK: u64 = 0b1111111111111111;
10052 pub const PHYPARTID10_SHIFT: u32 = 32;
10054 pub const PHYPARTID10_MASK: u64 = 0b1111111111111111;
10056 pub const PHYPARTID11_SHIFT: u32 = 48;
10058 pub const PHYPARTID11_MASK: u64 = 0b1111111111111111;
10060
10061 pub const fn phypartid8(self) -> u16 {
10063 ((self.bits() >> Self::PHYPARTID8_SHIFT) & 0b1111111111111111) as u16
10064 }
10065
10066 pub const fn phypartid9(self) -> u16 {
10068 ((self.bits() >> Self::PHYPARTID9_SHIFT) & 0b1111111111111111) as u16
10069 }
10070
10071 pub const fn phypartid10(self) -> u16 {
10073 ((self.bits() >> Self::PHYPARTID10_SHIFT) & 0b1111111111111111) as u16
10074 }
10075
10076 pub const fn phypartid11(self) -> u16 {
10078 ((self.bits() >> Self::PHYPARTID11_SHIFT) & 0b1111111111111111) as u16
10079 }
10080}
10081
10082#[cfg(feature = "el2")]
10083bitflags! {
10084 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10086 #[repr(transparent)]
10087 pub struct Mpamvpm3El2: u64 {
10088 }
10089}
10090
10091#[cfg(feature = "el2")]
10092impl Mpamvpm3El2 {
10093 pub const PHYPARTID12_SHIFT: u32 = 0;
10095 pub const PHYPARTID12_MASK: u64 = 0b1111111111111111;
10097 pub const PHYPARTID13_SHIFT: u32 = 16;
10099 pub const PHYPARTID13_MASK: u64 = 0b1111111111111111;
10101 pub const PHYPARTID14_SHIFT: u32 = 32;
10103 pub const PHYPARTID14_MASK: u64 = 0b1111111111111111;
10105 pub const PHYPARTID15_SHIFT: u32 = 48;
10107 pub const PHYPARTID15_MASK: u64 = 0b1111111111111111;
10109
10110 pub const fn phypartid12(self) -> u16 {
10112 ((self.bits() >> Self::PHYPARTID12_SHIFT) & 0b1111111111111111) as u16
10113 }
10114
10115 pub const fn phypartid13(self) -> u16 {
10117 ((self.bits() >> Self::PHYPARTID13_SHIFT) & 0b1111111111111111) as u16
10118 }
10119
10120 pub const fn phypartid14(self) -> u16 {
10122 ((self.bits() >> Self::PHYPARTID14_SHIFT) & 0b1111111111111111) as u16
10123 }
10124
10125 pub const fn phypartid15(self) -> u16 {
10127 ((self.bits() >> Self::PHYPARTID15_SHIFT) & 0b1111111111111111) as u16
10128 }
10129}
10130
10131#[cfg(feature = "el2")]
10132bitflags! {
10133 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10135 #[repr(transparent)]
10136 pub struct Mpamvpm4El2: u64 {
10137 }
10138}
10139
10140#[cfg(feature = "el2")]
10141impl Mpamvpm4El2 {
10142 pub const PHYPARTID16_SHIFT: u32 = 0;
10144 pub const PHYPARTID16_MASK: u64 = 0b1111111111111111;
10146 pub const PHYPARTID17_SHIFT: u32 = 16;
10148 pub const PHYPARTID17_MASK: u64 = 0b1111111111111111;
10150 pub const PHYPARTID18_SHIFT: u32 = 32;
10152 pub const PHYPARTID18_MASK: u64 = 0b1111111111111111;
10154 pub const PHYPARTID19_SHIFT: u32 = 48;
10156 pub const PHYPARTID19_MASK: u64 = 0b1111111111111111;
10158
10159 pub const fn phypartid16(self) -> u16 {
10161 ((self.bits() >> Self::PHYPARTID16_SHIFT) & 0b1111111111111111) as u16
10162 }
10163
10164 pub const fn phypartid17(self) -> u16 {
10166 ((self.bits() >> Self::PHYPARTID17_SHIFT) & 0b1111111111111111) as u16
10167 }
10168
10169 pub const fn phypartid18(self) -> u16 {
10171 ((self.bits() >> Self::PHYPARTID18_SHIFT) & 0b1111111111111111) as u16
10172 }
10173
10174 pub const fn phypartid19(self) -> u16 {
10176 ((self.bits() >> Self::PHYPARTID19_SHIFT) & 0b1111111111111111) as u16
10177 }
10178}
10179
10180#[cfg(feature = "el2")]
10181bitflags! {
10182 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10184 #[repr(transparent)]
10185 pub struct Mpamvpm5El2: u64 {
10186 }
10187}
10188
10189#[cfg(feature = "el2")]
10190impl Mpamvpm5El2 {
10191 pub const PHYPARTID20_SHIFT: u32 = 0;
10193 pub const PHYPARTID20_MASK: u64 = 0b1111111111111111;
10195 pub const PHYPARTID21_SHIFT: u32 = 16;
10197 pub const PHYPARTID21_MASK: u64 = 0b1111111111111111;
10199 pub const PHYPARTID22_SHIFT: u32 = 32;
10201 pub const PHYPARTID22_MASK: u64 = 0b1111111111111111;
10203 pub const PHYPARTID23_SHIFT: u32 = 48;
10205 pub const PHYPARTID23_MASK: u64 = 0b1111111111111111;
10207
10208 pub const fn phypartid20(self) -> u16 {
10210 ((self.bits() >> Self::PHYPARTID20_SHIFT) & 0b1111111111111111) as u16
10211 }
10212
10213 pub const fn phypartid21(self) -> u16 {
10215 ((self.bits() >> Self::PHYPARTID21_SHIFT) & 0b1111111111111111) as u16
10216 }
10217
10218 pub const fn phypartid22(self) -> u16 {
10220 ((self.bits() >> Self::PHYPARTID22_SHIFT) & 0b1111111111111111) as u16
10221 }
10222
10223 pub const fn phypartid23(self) -> u16 {
10225 ((self.bits() >> Self::PHYPARTID23_SHIFT) & 0b1111111111111111) as u16
10226 }
10227}
10228
10229#[cfg(feature = "el2")]
10230bitflags! {
10231 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10233 #[repr(transparent)]
10234 pub struct Mpamvpm6El2: u64 {
10235 }
10236}
10237
10238#[cfg(feature = "el2")]
10239impl Mpamvpm6El2 {
10240 pub const PHYPARTID24_SHIFT: u32 = 0;
10242 pub const PHYPARTID24_MASK: u64 = 0b1111111111111111;
10244 pub const PHYPARTID25_SHIFT: u32 = 16;
10246 pub const PHYPARTID25_MASK: u64 = 0b1111111111111111;
10248 pub const PHYPARTID26_SHIFT: u32 = 32;
10250 pub const PHYPARTID26_MASK: u64 = 0b1111111111111111;
10252 pub const PHYPARTID27_SHIFT: u32 = 48;
10254 pub const PHYPARTID27_MASK: u64 = 0b1111111111111111;
10256
10257 pub const fn phypartid24(self) -> u16 {
10259 ((self.bits() >> Self::PHYPARTID24_SHIFT) & 0b1111111111111111) as u16
10260 }
10261
10262 pub const fn phypartid25(self) -> u16 {
10264 ((self.bits() >> Self::PHYPARTID25_SHIFT) & 0b1111111111111111) as u16
10265 }
10266
10267 pub const fn phypartid26(self) -> u16 {
10269 ((self.bits() >> Self::PHYPARTID26_SHIFT) & 0b1111111111111111) as u16
10270 }
10271
10272 pub const fn phypartid27(self) -> u16 {
10274 ((self.bits() >> Self::PHYPARTID27_SHIFT) & 0b1111111111111111) as u16
10275 }
10276}
10277
10278#[cfg(feature = "el2")]
10279bitflags! {
10280 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10282 #[repr(transparent)]
10283 pub struct Mpamvpm7El2: u64 {
10284 }
10285}
10286
10287#[cfg(feature = "el2")]
10288impl Mpamvpm7El2 {
10289 pub const PHYPARTID28_SHIFT: u32 = 0;
10291 pub const PHYPARTID28_MASK: u64 = 0b1111111111111111;
10293 pub const PHYPARTID29_SHIFT: u32 = 16;
10295 pub const PHYPARTID29_MASK: u64 = 0b1111111111111111;
10297 pub const PHYPARTID30_SHIFT: u32 = 32;
10299 pub const PHYPARTID30_MASK: u64 = 0b1111111111111111;
10301 pub const PHYPARTID31_SHIFT: u32 = 48;
10303 pub const PHYPARTID31_MASK: u64 = 0b1111111111111111;
10305
10306 pub const fn phypartid28(self) -> u16 {
10308 ((self.bits() >> Self::PHYPARTID28_SHIFT) & 0b1111111111111111) as u16
10309 }
10310
10311 pub const fn phypartid29(self) -> u16 {
10313 ((self.bits() >> Self::PHYPARTID29_SHIFT) & 0b1111111111111111) as u16
10314 }
10315
10316 pub const fn phypartid30(self) -> u16 {
10318 ((self.bits() >> Self::PHYPARTID30_SHIFT) & 0b1111111111111111) as u16
10319 }
10320
10321 pub const fn phypartid31(self) -> u16 {
10323 ((self.bits() >> Self::PHYPARTID31_SHIFT) & 0b1111111111111111) as u16
10324 }
10325}
10326
10327#[cfg(feature = "el2")]
10328bitflags! {
10329 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10331 #[repr(transparent)]
10332 pub struct MpamvpmvEl2: u64 {
10333 const VPM_V0 = 1 << 0;
10335 const VPM_V1 = 1 << 1;
10337 const VPM_V2 = 1 << 2;
10339 const VPM_V3 = 1 << 3;
10341 const VPM_V4 = 1 << 4;
10343 const VPM_V5 = 1 << 5;
10345 const VPM_V6 = 1 << 6;
10347 const VPM_V7 = 1 << 7;
10349 const VPM_V8 = 1 << 8;
10351 const VPM_V9 = 1 << 9;
10353 const VPM_V10 = 1 << 10;
10355 const VPM_V11 = 1 << 11;
10357 const VPM_V12 = 1 << 12;
10359 const VPM_V13 = 1 << 13;
10361 const VPM_V14 = 1 << 14;
10363 const VPM_V15 = 1 << 15;
10365 const VPM_V16 = 1 << 16;
10367 const VPM_V17 = 1 << 17;
10369 const VPM_V18 = 1 << 18;
10371 const VPM_V19 = 1 << 19;
10373 const VPM_V20 = 1 << 20;
10375 const VPM_V21 = 1 << 21;
10377 const VPM_V22 = 1 << 22;
10379 const VPM_V23 = 1 << 23;
10381 const VPM_V24 = 1 << 24;
10383 const VPM_V25 = 1 << 25;
10385 const VPM_V26 = 1 << 26;
10387 const VPM_V27 = 1 << 27;
10389 const VPM_V28 = 1 << 28;
10391 const VPM_V29 = 1 << 29;
10393 const VPM_V30 = 1 << 30;
10395 const VPM_V31 = 1 << 31;
10397 }
10398}
10399
10400#[cfg(feature = "el2")]
10401impl MpamvpmvEl2 {
10402 pub const VPM_V_SHIFT: u32 = 0;
10404}
10405
10406bitflags! {
10407 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10409 #[repr(transparent)]
10410 pub struct Mpidr: u32 {
10411 const MT = 1 << 24;
10413 const U = 1 << 30;
10415 const M = 1 << 31;
10417 }
10418}
10419
10420impl Mpidr {
10421 pub const AFF0_SHIFT: u32 = 0;
10423 pub const AFF0_MASK: u32 = 0b11111111;
10425 pub const AFF1_SHIFT: u32 = 8;
10427 pub const AFF1_MASK: u32 = 0b11111111;
10429 pub const AFF2_SHIFT: u32 = 16;
10431 pub const AFF2_MASK: u32 = 0b11111111;
10433 pub const MT_SHIFT: u32 = 24;
10435 pub const U_SHIFT: u32 = 30;
10437 pub const M_SHIFT: u32 = 31;
10439
10440 pub const fn aff0(self) -> u8 {
10442 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
10443 }
10444
10445 pub const fn aff1(self) -> u8 {
10447 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
10448 }
10449
10450 pub const fn aff2(self) -> u8 {
10452 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
10453 }
10454}
10455
10456#[cfg(feature = "el1")]
10457bitflags! {
10458 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10460 #[repr(transparent)]
10461 pub struct MpidrEl1: u64 {
10462 const RES1 = 0b10000000000000000000000000000000;
10464 const MT = 1 << 24;
10466 const U = 1 << 30;
10468 }
10469}
10470
10471#[cfg(feature = "el1")]
10472impl MpidrEl1 {
10473 pub const AFF0_SHIFT: u32 = 0;
10475 pub const AFF0_MASK: u64 = 0b11111111;
10477 pub const AFF1_SHIFT: u32 = 8;
10479 pub const AFF1_MASK: u64 = 0b11111111;
10481 pub const AFF2_SHIFT: u32 = 16;
10483 pub const AFF2_MASK: u64 = 0b11111111;
10485 pub const MT_SHIFT: u32 = 24;
10487 pub const U_SHIFT: u32 = 30;
10489 pub const AFF3_SHIFT: u32 = 32;
10491 pub const AFF3_MASK: u64 = 0b11111111;
10493
10494 pub const fn aff0(self) -> u8 {
10496 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
10497 }
10498
10499 pub const fn aff1(self) -> u8 {
10501 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
10502 }
10503
10504 pub const fn aff2(self) -> u8 {
10506 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
10507 }
10508
10509 pub const fn aff3(self) -> u8 {
10511 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
10512 }
10513}
10514
10515bitflags! {
10516 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10518 #[repr(transparent)]
10519 pub struct Mvbar: u32 {
10520 }
10521}
10522
10523impl Mvbar {
10524 pub const RESERVED_SHIFT: u32 = 0;
10526 pub const RESERVED_MASK: u32 = 0b11111;
10528 pub const VBA_SHIFT: u32 = 5;
10530 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
10532
10533 pub const fn reserved(self) -> u8 {
10535 ((self.bits() >> Self::RESERVED_SHIFT) & 0b11111) as u8
10536 }
10537
10538 pub const fn vba(self) -> u32 {
10540 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
10541 }
10542}
10543
10544bitflags! {
10545 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10547 #[repr(transparent)]
10548 pub struct Nmrr: u32 {
10549 }
10550}
10551
10552impl Nmrr {
10553 pub const IR_SHIFT: u32 = 0;
10555 pub const IR_MASK: u32 = 0b11;
10557 pub const OR_SHIFT: u32 = 16;
10559 pub const OR_MASK: u32 = 0b11;
10561
10562 pub const fn ir(self, n: u32) -> u8 {
10564 assert!(n < 8);
10565 ((self.bits() >> (Self::IR_SHIFT + (n - 0) * 2)) & 0b11) as u8
10566 }
10567
10568 pub const fn or(self, n: u32) -> u8 {
10570 assert!(n < 8);
10571 ((self.bits() >> (Self::OR_SHIFT + (n - 0) * 2)) & 0b11) as u8
10572 }
10573}
10574
10575bitflags! {
10576 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10578 #[repr(transparent)]
10579 pub struct Nsacr: u32 {
10580 const CP10 = 1 << 10;
10582 const CP11 = 1 << 11;
10584 const NSASEDIS = 1 << 15;
10586 const NSTRCDIS = 1 << 20;
10588 }
10589}
10590
10591impl Nsacr {
10592 pub const CP10_SHIFT: u32 = 10;
10594 pub const CP11_SHIFT: u32 = 11;
10596 pub const NSASEDIS_SHIFT: u32 = 15;
10598 pub const NSTRCDIS_SHIFT: u32 = 20;
10600}
10601
10602bitflags! {
10603 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10605 #[repr(transparent)]
10606 pub struct Par: u64 {
10607 const F = 1 << 0;
10609 const SS = 1 << 1;
10611 const FS_5 = 1 << 6;
10613 const S2WLK = 1 << 8;
10615 const FSTAGE = 1 << 9;
10617 const NS = 1 << 9;
10619 const NOS = 1 << 10;
10621 const LPAE = 1 << 11;
10623 }
10624}
10625
10626impl Par {
10627 pub const F_SHIFT: u32 = 0;
10629 pub const FST_SHIFT: u32 = 1;
10631 pub const FST_MASK: u64 = 0b111111;
10633 pub const FS_4_0_SHIFT: u32 = 1;
10635 pub const FS_4_0_MASK: u64 = 0b11111;
10637 pub const SS_SHIFT: u32 = 1;
10639 pub const OUTER_1_0_SHIFT: u32 = 2;
10641 pub const OUTER_1_0_MASK: u64 = 0b11;
10643 pub const INNER_2_0_SHIFT: u32 = 4;
10645 pub const INNER_2_0_MASK: u64 = 0b111;
10647 pub const FS_5_SHIFT: u32 = 6;
10649 pub const S2WLK_SHIFT: u32 = 8;
10651 pub const FSTAGE_SHIFT: u32 = 9;
10653 pub const NS_SHIFT: u32 = 9;
10655 pub const NOS_SHIFT: u32 = 10;
10657 pub const LPAE_SHIFT: u32 = 11;
10659 pub const ATTR_SHIFT: u32 = 56;
10661 pub const ATTR_MASK: u64 = 0b11111111;
10663
10664 pub const fn fst(self) -> u8 {
10666 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
10667 }
10668
10669 pub const fn fs_4_0(self) -> u8 {
10671 ((self.bits() >> Self::FS_4_0_SHIFT) & 0b11111) as u8
10672 }
10673
10674 pub const fn outer_1_0(self) -> u8 {
10676 ((self.bits() >> Self::OUTER_1_0_SHIFT) & 0b11) as u8
10677 }
10678
10679 pub const fn inner_2_0(self) -> u8 {
10681 ((self.bits() >> Self::INNER_2_0_SHIFT) & 0b111) as u8
10682 }
10683
10684 pub const fn attr(self) -> u8 {
10686 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
10687 }
10688}
10689
10690#[cfg(feature = "el1")]
10691bitflags! {
10692 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10694 #[repr(transparent)]
10695 pub struct ParEl1: u64 {
10696 const RES1 = 0b100000000000;
10698 const F = 1 << 0;
10700 const PTW = 1 << 8;
10702 const NS = 1 << 9;
10704 const S = 1 << 9;
10706 const NSE = 1 << 11;
10708 const ASSUREDONLY = 1 << 12;
10710 const TOPLEVEL = 1 << 13;
10712 const OVERLAY = 1 << 14;
10714 const DIRTYBIT = 1 << 15;
10716 }
10717}
10718
10719#[cfg(feature = "el1")]
10720impl ParEl1 {
10721 pub const F_SHIFT: u32 = 0;
10723 pub const FST_SHIFT: u32 = 1;
10725 pub const FST_MASK: u64 = 0b111111;
10727 pub const SH_SHIFT: u32 = 7;
10729 pub const SH_MASK: u64 = 0b11;
10731 pub const PTW_SHIFT: u32 = 8;
10733 pub const NS_SHIFT: u32 = 9;
10735 pub const S_SHIFT: u32 = 9;
10737 pub const NSE_SHIFT: u32 = 11;
10739 pub const ASSUREDONLY_SHIFT: u32 = 12;
10741 pub const PA_47_12_SHIFT: u32 = 12;
10743 pub const PA_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
10745 pub const TOPLEVEL_SHIFT: u32 = 13;
10747 pub const OVERLAY_SHIFT: u32 = 14;
10749 pub const DIRTYBIT_SHIFT: u32 = 15;
10751 pub const PA_51_48_SHIFT: u32 = 48;
10753 pub const PA_51_48_MASK: u64 = 0b1111;
10755 pub const ATTR_SHIFT: u32 = 56;
10757 pub const ATTR_MASK: u64 = 0b11111111;
10759
10760 pub const fn fst(self) -> u8 {
10762 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
10763 }
10764
10765 pub const fn sh(self) -> u8 {
10767 ((self.bits() >> Self::SH_SHIFT) & 0b11) as u8
10768 }
10769
10770 pub const fn pa_47_12(self) -> u64 {
10772 ((self.bits() >> Self::PA_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
10773 }
10774
10775 pub const fn pa_51_48(self) -> u8 {
10777 ((self.bits() >> Self::PA_51_48_SHIFT) & 0b1111) as u8
10778 }
10779
10780 pub const fn attr(self) -> u8 {
10782 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
10783 }
10784}
10785
10786bitflags! {
10787 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10789 #[repr(transparent)]
10790 pub struct Pmccfiltr: u32 {
10791 const RLU = 1 << 21;
10793 const NSH = 1 << 27;
10795 const NSU = 1 << 28;
10797 const NSK = 1 << 29;
10799 const U = 1 << 30;
10801 const P = 1 << 31;
10803 }
10804}
10805
10806impl Pmccfiltr {
10807 pub const RLU_SHIFT: u32 = 21;
10809 pub const NSH_SHIFT: u32 = 27;
10811 pub const NSU_SHIFT: u32 = 28;
10813 pub const NSK_SHIFT: u32 = 29;
10815 pub const U_SHIFT: u32 = 30;
10817 pub const P_SHIFT: u32 = 31;
10819}
10820
10821bitflags! {
10822 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10824 #[repr(transparent)]
10825 pub struct Pmccntr: u64 {
10826 }
10827}
10828
10829impl Pmccntr {
10830 pub const CCNT_SHIFT: u32 = 0;
10832 pub const CCNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
10834
10835 pub const fn ccnt(self) -> u64 {
10837 ((self.bits() >> Self::CCNT_SHIFT)
10838 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
10839 }
10840}
10841
10842bitflags! {
10843 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10845 #[repr(transparent)]
10846 pub struct Pmceid0: u32 {
10847 const ID0 = 1 << 0;
10849 const ID1 = 1 << 1;
10851 const ID2 = 1 << 2;
10853 const ID3 = 1 << 3;
10855 const ID4 = 1 << 4;
10857 const ID5 = 1 << 5;
10859 const ID6 = 1 << 6;
10861 const ID7 = 1 << 7;
10863 const ID8 = 1 << 8;
10865 const ID9 = 1 << 9;
10867 const ID10 = 1 << 10;
10869 const ID11 = 1 << 11;
10871 const ID12 = 1 << 12;
10873 const ID13 = 1 << 13;
10875 const ID14 = 1 << 14;
10877 const ID15 = 1 << 15;
10879 const ID16 = 1 << 16;
10881 const ID17 = 1 << 17;
10883 const ID18 = 1 << 18;
10885 const ID19 = 1 << 19;
10887 const ID20 = 1 << 20;
10889 const ID21 = 1 << 21;
10891 const ID22 = 1 << 22;
10893 const ID23 = 1 << 23;
10895 const ID24 = 1 << 24;
10897 const ID25 = 1 << 25;
10899 const ID26 = 1 << 26;
10901 const ID27 = 1 << 27;
10903 const ID28 = 1 << 28;
10905 const ID29 = 1 << 29;
10907 const ID30 = 1 << 30;
10909 const ID31 = 1 << 31;
10911 }
10912}
10913
10914impl Pmceid0 {
10915 pub const ID_SHIFT: u32 = 0;
10917}
10918
10919bitflags! {
10920 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10922 #[repr(transparent)]
10923 pub struct Pmceid1: u32 {
10924 const ID0 = 1 << 0;
10926 const ID1 = 1 << 1;
10928 const ID2 = 1 << 2;
10930 const ID3 = 1 << 3;
10932 const ID4 = 1 << 4;
10934 const ID5 = 1 << 5;
10936 const ID6 = 1 << 6;
10938 const ID7 = 1 << 7;
10940 const ID8 = 1 << 8;
10942 const ID9 = 1 << 9;
10944 const ID10 = 1 << 10;
10946 const ID11 = 1 << 11;
10948 const ID12 = 1 << 12;
10950 const ID13 = 1 << 13;
10952 const ID14 = 1 << 14;
10954 const ID15 = 1 << 15;
10956 const ID16 = 1 << 16;
10958 const ID17 = 1 << 17;
10960 const ID18 = 1 << 18;
10962 const ID19 = 1 << 19;
10964 const ID20 = 1 << 20;
10966 const ID21 = 1 << 21;
10968 const ID22 = 1 << 22;
10970 const ID23 = 1 << 23;
10972 const ID24 = 1 << 24;
10974 const ID25 = 1 << 25;
10976 const ID26 = 1 << 26;
10978 const ID27 = 1 << 27;
10980 const ID28 = 1 << 28;
10982 const ID29 = 1 << 29;
10984 const ID30 = 1 << 30;
10986 const ID31 = 1 << 31;
10988 }
10989}
10990
10991impl Pmceid1 {
10992 pub const ID_SHIFT: u32 = 0;
10994}
10995
10996bitflags! {
10997 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
10999 #[repr(transparent)]
11000 pub struct Pmceid2: u32 {
11001 const IDHI0 = 1 << 0;
11003 const IDHI1 = 1 << 1;
11005 const IDHI2 = 1 << 2;
11007 const IDHI3 = 1 << 3;
11009 const IDHI4 = 1 << 4;
11011 const IDHI5 = 1 << 5;
11013 const IDHI6 = 1 << 6;
11015 const IDHI7 = 1 << 7;
11017 const IDHI8 = 1 << 8;
11019 const IDHI9 = 1 << 9;
11021 const IDHI10 = 1 << 10;
11023 const IDHI11 = 1 << 11;
11025 const IDHI12 = 1 << 12;
11027 const IDHI13 = 1 << 13;
11029 const IDHI14 = 1 << 14;
11031 const IDHI15 = 1 << 15;
11033 const IDHI16 = 1 << 16;
11035 const IDHI17 = 1 << 17;
11037 const IDHI18 = 1 << 18;
11039 const IDHI19 = 1 << 19;
11041 const IDHI20 = 1 << 20;
11043 const IDHI21 = 1 << 21;
11045 const IDHI22 = 1 << 22;
11047 const IDHI23 = 1 << 23;
11049 const IDHI24 = 1 << 24;
11051 const IDHI25 = 1 << 25;
11053 const IDHI26 = 1 << 26;
11055 const IDHI27 = 1 << 27;
11057 const IDHI28 = 1 << 28;
11059 const IDHI29 = 1 << 29;
11061 const IDHI30 = 1 << 30;
11063 const IDHI31 = 1 << 31;
11065 }
11066}
11067
11068impl Pmceid2 {
11069 pub const IDHI_SHIFT: u32 = 0;
11071}
11072
11073bitflags! {
11074 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11076 #[repr(transparent)]
11077 pub struct Pmceid3: u32 {
11078 const IDHI0 = 1 << 0;
11080 const IDHI1 = 1 << 1;
11082 const IDHI2 = 1 << 2;
11084 const IDHI3 = 1 << 3;
11086 const IDHI4 = 1 << 4;
11088 const IDHI5 = 1 << 5;
11090 const IDHI6 = 1 << 6;
11092 const IDHI7 = 1 << 7;
11094 const IDHI8 = 1 << 8;
11096 const IDHI9 = 1 << 9;
11098 const IDHI10 = 1 << 10;
11100 const IDHI11 = 1 << 11;
11102 const IDHI12 = 1 << 12;
11104 const IDHI13 = 1 << 13;
11106 const IDHI14 = 1 << 14;
11108 const IDHI15 = 1 << 15;
11110 const IDHI16 = 1 << 16;
11112 const IDHI17 = 1 << 17;
11114 const IDHI18 = 1 << 18;
11116 const IDHI19 = 1 << 19;
11118 const IDHI20 = 1 << 20;
11120 const IDHI21 = 1 << 21;
11122 const IDHI22 = 1 << 22;
11124 const IDHI23 = 1 << 23;
11126 const IDHI24 = 1 << 24;
11128 const IDHI25 = 1 << 25;
11130 const IDHI26 = 1 << 26;
11132 const IDHI27 = 1 << 27;
11134 const IDHI28 = 1 << 28;
11136 const IDHI29 = 1 << 29;
11138 const IDHI30 = 1 << 30;
11140 const IDHI31 = 1 << 31;
11142 }
11143}
11144
11145impl Pmceid3 {
11146 pub const IDHI_SHIFT: u32 = 0;
11148}
11149
11150bitflags! {
11151 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11153 #[repr(transparent)]
11154 pub struct Pmcntenclr: u32 {
11155 const P0 = 1 << 0;
11157 const P1 = 1 << 1;
11159 const P2 = 1 << 2;
11161 const P3 = 1 << 3;
11163 const P4 = 1 << 4;
11165 const P5 = 1 << 5;
11167 const P6 = 1 << 6;
11169 const P7 = 1 << 7;
11171 const P8 = 1 << 8;
11173 const P9 = 1 << 9;
11175 const P10 = 1 << 10;
11177 const P11 = 1 << 11;
11179 const P12 = 1 << 12;
11181 const P13 = 1 << 13;
11183 const P14 = 1 << 14;
11185 const P15 = 1 << 15;
11187 const P16 = 1 << 16;
11189 const P17 = 1 << 17;
11191 const P18 = 1 << 18;
11193 const P19 = 1 << 19;
11195 const P20 = 1 << 20;
11197 const P21 = 1 << 21;
11199 const P22 = 1 << 22;
11201 const P23 = 1 << 23;
11203 const P24 = 1 << 24;
11205 const P25 = 1 << 25;
11207 const P26 = 1 << 26;
11209 const P27 = 1 << 27;
11211 const P28 = 1 << 28;
11213 const P29 = 1 << 29;
11215 const P30 = 1 << 30;
11217 const C = 1 << 31;
11219 }
11220}
11221
11222impl Pmcntenclr {
11223 pub const P_SHIFT: u32 = 0;
11225 pub const C_SHIFT: u32 = 31;
11227}
11228
11229bitflags! {
11230 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11232 #[repr(transparent)]
11233 pub struct Pmcntenset: u32 {
11234 const P0 = 1 << 0;
11236 const P1 = 1 << 1;
11238 const P2 = 1 << 2;
11240 const P3 = 1 << 3;
11242 const P4 = 1 << 4;
11244 const P5 = 1 << 5;
11246 const P6 = 1 << 6;
11248 const P7 = 1 << 7;
11250 const P8 = 1 << 8;
11252 const P9 = 1 << 9;
11254 const P10 = 1 << 10;
11256 const P11 = 1 << 11;
11258 const P12 = 1 << 12;
11260 const P13 = 1 << 13;
11262 const P14 = 1 << 14;
11264 const P15 = 1 << 15;
11266 const P16 = 1 << 16;
11268 const P17 = 1 << 17;
11270 const P18 = 1 << 18;
11272 const P19 = 1 << 19;
11274 const P20 = 1 << 20;
11276 const P21 = 1 << 21;
11278 const P22 = 1 << 22;
11280 const P23 = 1 << 23;
11282 const P24 = 1 << 24;
11284 const P25 = 1 << 25;
11286 const P26 = 1 << 26;
11288 const P27 = 1 << 27;
11290 const P28 = 1 << 28;
11292 const P29 = 1 << 29;
11294 const P30 = 1 << 30;
11296 const C = 1 << 31;
11298 }
11299}
11300
11301impl Pmcntenset {
11302 pub const P_SHIFT: u32 = 0;
11304 pub const C_SHIFT: u32 = 31;
11306}
11307
11308bitflags! {
11309 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11311 #[repr(transparent)]
11312 pub struct Pmcr: u32 {
11313 const E = 1 << 0;
11315 const P = 1 << 1;
11317 const C = 1 << 2;
11319 const D = 1 << 3;
11321 const X = 1 << 4;
11323 const DP = 1 << 5;
11325 const LC = 1 << 6;
11327 const LP = 1 << 7;
11329 const FZO = 1 << 9;
11331 }
11332}
11333
11334impl Pmcr {
11335 pub const E_SHIFT: u32 = 0;
11337 pub const P_SHIFT: u32 = 1;
11339 pub const C_SHIFT: u32 = 2;
11341 pub const D_SHIFT: u32 = 3;
11343 pub const X_SHIFT: u32 = 4;
11345 pub const DP_SHIFT: u32 = 5;
11347 pub const LC_SHIFT: u32 = 6;
11349 pub const LP_SHIFT: u32 = 7;
11351 pub const FZO_SHIFT: u32 = 9;
11353 pub const N_SHIFT: u32 = 11;
11355 pub const N_MASK: u32 = 0b11111;
11357 pub const IDCODE_SHIFT: u32 = 16;
11359 pub const IDCODE_MASK: u32 = 0b11111111;
11361 pub const IMP_SHIFT: u32 = 24;
11363 pub const IMP_MASK: u32 = 0b11111111;
11365
11366 pub const fn n(self) -> u8 {
11368 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
11369 }
11370
11371 pub const fn idcode(self) -> u8 {
11373 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
11374 }
11375
11376 pub const fn imp(self) -> u8 {
11378 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
11379 }
11380}
11381
11382bitflags! {
11383 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11385 #[repr(transparent)]
11386 pub struct PmcrEl0: u64 {
11387 const E = 1 << 0;
11389 const P = 1 << 1;
11391 const C = 1 << 2;
11393 const D = 1 << 3;
11395 const X = 1 << 4;
11397 const DP = 1 << 5;
11399 const LC = 1 << 6;
11401 const LP = 1 << 7;
11403 const FZO = 1 << 9;
11405 const FZS = 1 << 32;
11407 }
11408}
11409
11410impl PmcrEl0 {
11411 pub const E_SHIFT: u32 = 0;
11413 pub const P_SHIFT: u32 = 1;
11415 pub const C_SHIFT: u32 = 2;
11417 pub const D_SHIFT: u32 = 3;
11419 pub const X_SHIFT: u32 = 4;
11421 pub const DP_SHIFT: u32 = 5;
11423 pub const LC_SHIFT: u32 = 6;
11425 pub const LP_SHIFT: u32 = 7;
11427 pub const FZO_SHIFT: u32 = 9;
11429 pub const N_SHIFT: u32 = 11;
11431 pub const N_MASK: u64 = 0b11111;
11433 pub const IDCODE_SHIFT: u32 = 16;
11435 pub const IDCODE_MASK: u64 = 0b11111111;
11437 pub const IMP_SHIFT: u32 = 24;
11439 pub const IMP_MASK: u64 = 0b11111111;
11441 pub const FZS_SHIFT: u32 = 32;
11443
11444 pub const fn n(self) -> u8 {
11446 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
11447 }
11448
11449 pub const fn idcode(self) -> u8 {
11451 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
11452 }
11453
11454 pub const fn imp(self) -> u8 {
11456 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
11457 }
11458}
11459
11460bitflags! {
11461 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11463 #[repr(transparent)]
11464 pub struct Pmintenclr: u32 {
11465 const P0 = 1 << 0;
11467 const P1 = 1 << 1;
11469 const P2 = 1 << 2;
11471 const P3 = 1 << 3;
11473 const P4 = 1 << 4;
11475 const P5 = 1 << 5;
11477 const P6 = 1 << 6;
11479 const P7 = 1 << 7;
11481 const P8 = 1 << 8;
11483 const P9 = 1 << 9;
11485 const P10 = 1 << 10;
11487 const P11 = 1 << 11;
11489 const P12 = 1 << 12;
11491 const P13 = 1 << 13;
11493 const P14 = 1 << 14;
11495 const P15 = 1 << 15;
11497 const P16 = 1 << 16;
11499 const P17 = 1 << 17;
11501 const P18 = 1 << 18;
11503 const P19 = 1 << 19;
11505 const P20 = 1 << 20;
11507 const P21 = 1 << 21;
11509 const P22 = 1 << 22;
11511 const P23 = 1 << 23;
11513 const P24 = 1 << 24;
11515 const P25 = 1 << 25;
11517 const P26 = 1 << 26;
11519 const P27 = 1 << 27;
11521 const P28 = 1 << 28;
11523 const P29 = 1 << 29;
11525 const P30 = 1 << 30;
11527 const C = 1 << 31;
11529 }
11530}
11531
11532impl Pmintenclr {
11533 pub const P_SHIFT: u32 = 0;
11535 pub const C_SHIFT: u32 = 31;
11537}
11538
11539bitflags! {
11540 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11542 #[repr(transparent)]
11543 pub struct Pmintenset: u32 {
11544 const P0 = 1 << 0;
11546 const P1 = 1 << 1;
11548 const P2 = 1 << 2;
11550 const P3 = 1 << 3;
11552 const P4 = 1 << 4;
11554 const P5 = 1 << 5;
11556 const P6 = 1 << 6;
11558 const P7 = 1 << 7;
11560 const P8 = 1 << 8;
11562 const P9 = 1 << 9;
11564 const P10 = 1 << 10;
11566 const P11 = 1 << 11;
11568 const P12 = 1 << 12;
11570 const P13 = 1 << 13;
11572 const P14 = 1 << 14;
11574 const P15 = 1 << 15;
11576 const P16 = 1 << 16;
11578 const P17 = 1 << 17;
11580 const P18 = 1 << 18;
11582 const P19 = 1 << 19;
11584 const P20 = 1 << 20;
11586 const P21 = 1 << 21;
11588 const P22 = 1 << 22;
11590 const P23 = 1 << 23;
11592 const P24 = 1 << 24;
11594 const P25 = 1 << 25;
11596 const P26 = 1 << 26;
11598 const P27 = 1 << 27;
11600 const P28 = 1 << 28;
11602 const P29 = 1 << 29;
11604 const P30 = 1 << 30;
11606 const C = 1 << 31;
11608 }
11609}
11610
11611impl Pmintenset {
11612 pub const P_SHIFT: u32 = 0;
11614 pub const C_SHIFT: u32 = 31;
11616}
11617
11618bitflags! {
11619 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11621 #[repr(transparent)]
11622 pub struct Pmmir: u32 {
11623 }
11624}
11625
11626impl Pmmir {
11627 pub const SLOTS_SHIFT: u32 = 0;
11629 pub const SLOTS_MASK: u32 = 0b11111111;
11631 pub const BUS_SLOTS_SHIFT: u32 = 8;
11633 pub const BUS_SLOTS_MASK: u32 = 0b11111111;
11635 pub const BUS_WIDTH_SHIFT: u32 = 16;
11637 pub const BUS_WIDTH_MASK: u32 = 0b1111;
11639 pub const THWIDTH_SHIFT: u32 = 20;
11641 pub const THWIDTH_MASK: u32 = 0b1111;
11643 pub const EDGE_SHIFT: u32 = 24;
11645 pub const EDGE_MASK: u32 = 0b1111;
11647
11648 pub const fn slots(self) -> u8 {
11650 ((self.bits() >> Self::SLOTS_SHIFT) & 0b11111111) as u8
11651 }
11652
11653 pub const fn bus_slots(self) -> u8 {
11655 ((self.bits() >> Self::BUS_SLOTS_SHIFT) & 0b11111111) as u8
11656 }
11657
11658 pub const fn bus_width(self) -> u8 {
11660 ((self.bits() >> Self::BUS_WIDTH_SHIFT) & 0b1111) as u8
11661 }
11662
11663 pub const fn thwidth(self) -> u8 {
11665 ((self.bits() >> Self::THWIDTH_SHIFT) & 0b1111) as u8
11666 }
11667
11668 pub const fn edge(self) -> u8 {
11670 ((self.bits() >> Self::EDGE_SHIFT) & 0b1111) as u8
11671 }
11672}
11673
11674bitflags! {
11675 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11677 #[repr(transparent)]
11678 pub struct Pmovsr: u32 {
11679 const P0 = 1 << 0;
11681 const P1 = 1 << 1;
11683 const P2 = 1 << 2;
11685 const P3 = 1 << 3;
11687 const P4 = 1 << 4;
11689 const P5 = 1 << 5;
11691 const P6 = 1 << 6;
11693 const P7 = 1 << 7;
11695 const P8 = 1 << 8;
11697 const P9 = 1 << 9;
11699 const P10 = 1 << 10;
11701 const P11 = 1 << 11;
11703 const P12 = 1 << 12;
11705 const P13 = 1 << 13;
11707 const P14 = 1 << 14;
11709 const P15 = 1 << 15;
11711 const P16 = 1 << 16;
11713 const P17 = 1 << 17;
11715 const P18 = 1 << 18;
11717 const P19 = 1 << 19;
11719 const P20 = 1 << 20;
11721 const P21 = 1 << 21;
11723 const P22 = 1 << 22;
11725 const P23 = 1 << 23;
11727 const P24 = 1 << 24;
11729 const P25 = 1 << 25;
11731 const P26 = 1 << 26;
11733 const P27 = 1 << 27;
11735 const P28 = 1 << 28;
11737 const P29 = 1 << 29;
11739 const P30 = 1 << 30;
11741 const C = 1 << 31;
11743 }
11744}
11745
11746impl Pmovsr {
11747 pub const P_SHIFT: u32 = 0;
11749 pub const C_SHIFT: u32 = 31;
11751}
11752
11753bitflags! {
11754 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11756 #[repr(transparent)]
11757 pub struct Pmovsset: u32 {
11758 const P0 = 1 << 0;
11760 const P1 = 1 << 1;
11762 const P2 = 1 << 2;
11764 const P3 = 1 << 3;
11766 const P4 = 1 << 4;
11768 const P5 = 1 << 5;
11770 const P6 = 1 << 6;
11772 const P7 = 1 << 7;
11774 const P8 = 1 << 8;
11776 const P9 = 1 << 9;
11778 const P10 = 1 << 10;
11780 const P11 = 1 << 11;
11782 const P12 = 1 << 12;
11784 const P13 = 1 << 13;
11786 const P14 = 1 << 14;
11788 const P15 = 1 << 15;
11790 const P16 = 1 << 16;
11792 const P17 = 1 << 17;
11794 const P18 = 1 << 18;
11796 const P19 = 1 << 19;
11798 const P20 = 1 << 20;
11800 const P21 = 1 << 21;
11802 const P22 = 1 << 22;
11804 const P23 = 1 << 23;
11806 const P24 = 1 << 24;
11808 const P25 = 1 << 25;
11810 const P26 = 1 << 26;
11812 const P27 = 1 << 27;
11814 const P28 = 1 << 28;
11816 const P29 = 1 << 29;
11818 const P30 = 1 << 30;
11820 const C = 1 << 31;
11822 }
11823}
11824
11825impl Pmovsset {
11826 pub const P_SHIFT: u32 = 0;
11828 pub const C_SHIFT: u32 = 31;
11830}
11831
11832bitflags! {
11833 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11835 #[repr(transparent)]
11836 pub struct Pmselr: u32 {
11837 }
11838}
11839
11840impl Pmselr {
11841 pub const SEL_SHIFT: u32 = 0;
11843 pub const SEL_MASK: u32 = 0b11111;
11845
11846 pub const fn sel(self) -> u8 {
11848 ((self.bits() >> Self::SEL_SHIFT) & 0b11111) as u8
11849 }
11850}
11851
11852bitflags! {
11853 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11855 #[repr(transparent)]
11856 pub struct Pmswinc: u32 {
11857 const P0 = 1 << 0;
11859 const P1 = 1 << 1;
11861 const P2 = 1 << 2;
11863 const P3 = 1 << 3;
11865 const P4 = 1 << 4;
11867 const P5 = 1 << 5;
11869 const P6 = 1 << 6;
11871 const P7 = 1 << 7;
11873 const P8 = 1 << 8;
11875 const P9 = 1 << 9;
11877 const P10 = 1 << 10;
11879 const P11 = 1 << 11;
11881 const P12 = 1 << 12;
11883 const P13 = 1 << 13;
11885 const P14 = 1 << 14;
11887 const P15 = 1 << 15;
11889 const P16 = 1 << 16;
11891 const P17 = 1 << 17;
11893 const P18 = 1 << 18;
11895 const P19 = 1 << 19;
11897 const P20 = 1 << 20;
11899 const P21 = 1 << 21;
11901 const P22 = 1 << 22;
11903 const P23 = 1 << 23;
11905 const P24 = 1 << 24;
11907 const P25 = 1 << 25;
11909 const P26 = 1 << 26;
11911 const P27 = 1 << 27;
11913 const P28 = 1 << 28;
11915 const P29 = 1 << 29;
11917 const P30 = 1 << 30;
11919 }
11920}
11921
11922impl Pmswinc {
11923 pub const P_SHIFT: u32 = 0;
11925}
11926
11927bitflags! {
11928 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11930 #[repr(transparent)]
11931 pub struct Pmuserenr: u32 {
11932 const EN = 1 << 0;
11934 const SW = 1 << 1;
11936 const CR = 1 << 2;
11938 const ER = 1 << 3;
11940 const TID = 1 << 6;
11942 }
11943}
11944
11945impl Pmuserenr {
11946 pub const EN_SHIFT: u32 = 0;
11948 pub const SW_SHIFT: u32 = 1;
11950 pub const CR_SHIFT: u32 = 2;
11952 pub const ER_SHIFT: u32 = 3;
11954 pub const TID_SHIFT: u32 = 6;
11956}
11957
11958bitflags! {
11959 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11961 #[repr(transparent)]
11962 pub struct Pmxevtyper: u32 {
11963 }
11964}
11965
11966impl Pmxevtyper {
11967 pub const ETR_SHIFT: u32 = 0;
11969 pub const ETR_MASK: u32 = 0b11111111111111111111111111111111;
11971
11972 pub const fn etr(self) -> u32 {
11974 ((self.bits() >> Self::ETR_SHIFT) & 0b11111111111111111111111111111111) as u32
11975 }
11976}
11977
11978bitflags! {
11979 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
11981 #[repr(transparent)]
11982 pub struct Prrr: u32 {
11983 const DS0 = 1 << 16;
11985 const DS1 = 1 << 17;
11987 const NS0 = 1 << 18;
11989 const NS1 = 1 << 19;
11991 const NOS0 = 1 << 24;
11993 const NOS1 = 1 << 25;
11995 const NOS2 = 1 << 26;
11997 const NOS3 = 1 << 27;
11999 const NOS4 = 1 << 28;
12001 const NOS5 = 1 << 29;
12003 const NOS6 = 1 << 30;
12005 const NOS7 = 1 << 31;
12007 }
12008}
12009
12010impl Prrr {
12011 pub const TR_SHIFT: u32 = 0;
12013 pub const TR_MASK: u32 = 0b11;
12015 pub const DS0_SHIFT: u32 = 16;
12017 pub const DS1_SHIFT: u32 = 17;
12019 pub const NS0_SHIFT: u32 = 18;
12021 pub const NS1_SHIFT: u32 = 19;
12023 pub const NOS_SHIFT: u32 = 24;
12025
12026 pub const fn tr(self, n: u32) -> u8 {
12028 assert!(n < 8);
12029 ((self.bits() >> (Self::TR_SHIFT + (n - 0) * 2)) & 0b11) as u8
12030 }
12031}
12032
12033#[cfg(feature = "el1")]
12034bitflags! {
12035 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12037 #[repr(transparent)]
12038 pub struct RgsrEl1: u64 {
12039 }
12040}
12041
12042#[cfg(feature = "el1")]
12043impl RgsrEl1 {
12044 pub const TAG_SHIFT: u32 = 0;
12046 pub const TAG_MASK: u64 = 0b1111;
12048 pub const SEED_SHIFT: u32 = 8;
12050 pub const SEED_MASK: u64 = 0b1111111111111111;
12052
12053 pub const fn tag(self) -> u8 {
12055 ((self.bits() >> Self::TAG_SHIFT) & 0b1111) as u8
12056 }
12057
12058 pub const fn seed(self) -> u16 {
12060 ((self.bits() >> Self::SEED_SHIFT) & 0b1111111111111111) as u16
12061 }
12062}
12063
12064bitflags! {
12065 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12067 #[repr(transparent)]
12068 pub struct Rmr: u32 {
12069 const AA64 = 1 << 0;
12071 const RR = 1 << 1;
12073 }
12074}
12075
12076impl Rmr {
12077 pub const AA64_SHIFT: u32 = 0;
12079 pub const RR_SHIFT: u32 = 1;
12081}
12082
12083bitflags! {
12084 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12086 #[repr(transparent)]
12087 pub struct Rvbar: u32 {
12088 const RES1 = 0b1;
12090 }
12091}
12092
12093impl Rvbar {
12094 pub const RESETADDRESS_SHIFT: u32 = 1;
12096 pub const RESETADDRESS_MASK: u32 = 0b1111111111111111111111111111111;
12098
12099 pub const fn resetaddress(self) -> u32 {
12101 ((self.bits() >> Self::RESETADDRESS_SHIFT) & 0b1111111111111111111111111111111) as u32
12102 }
12103}
12104
12105bitflags! {
12106 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12108 #[repr(transparent)]
12109 pub struct Scr: u32 {
12110 const NS = 1 << 0;
12112 const IRQ = 1 << 1;
12114 const FIQ = 1 << 2;
12116 const EA = 1 << 3;
12118 const FW = 1 << 4;
12120 const AW = 1 << 5;
12122 const NET = 1 << 6;
12124 const SCD = 1 << 7;
12126 const HCE = 1 << 8;
12128 const SIF = 1 << 9;
12130 const TWI = 1 << 12;
12132 const TWE = 1 << 13;
12134 const TERR = 1 << 15;
12136 }
12137}
12138
12139impl Scr {
12140 pub const NS_SHIFT: u32 = 0;
12142 pub const IRQ_SHIFT: u32 = 1;
12144 pub const FIQ_SHIFT: u32 = 2;
12146 pub const EA_SHIFT: u32 = 3;
12148 pub const FW_SHIFT: u32 = 4;
12150 pub const AW_SHIFT: u32 = 5;
12152 pub const NET_SHIFT: u32 = 6;
12154 pub const SCD_SHIFT: u32 = 7;
12156 pub const HCE_SHIFT: u32 = 8;
12158 pub const SIF_SHIFT: u32 = 9;
12160 pub const TWI_SHIFT: u32 = 12;
12162 pub const TWE_SHIFT: u32 = 13;
12164 pub const TERR_SHIFT: u32 = 15;
12166}
12167
12168#[cfg(feature = "el3")]
12169bitflags! {
12170 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12172 #[repr(transparent)]
12173 pub struct ScrEl3: u64 {
12174 const RES1 = 0b110000;
12176 const NS = 1 << 0;
12178 const IRQ = 1 << 1;
12180 const FIQ = 1 << 2;
12182 const EA = 1 << 3;
12184 const SMD = 1 << 7;
12186 const HCE = 1 << 8;
12188 const SIF = 1 << 9;
12190 const RW = 1 << 10;
12192 const ST = 1 << 11;
12194 const TWI = 1 << 12;
12196 const TWE = 1 << 13;
12198 const TLOR = 1 << 14;
12200 const TERR = 1 << 15;
12202 const APK = 1 << 16;
12204 const API = 1 << 17;
12206 const EEL2 = 1 << 18;
12208 const EASE = 1 << 19;
12210 const NMEA = 1 << 20;
12212 const FIEN = 1 << 21;
12214 const TID3 = 1 << 22;
12216 const TID5 = 1 << 23;
12218 const POE2EN = 1 << 24;
12220 const ENSCXT = 1 << 25;
12222 const ATA = 1 << 26;
12224 const FGTEN = 1 << 27;
12226 const ECVEN = 1 << 28;
12228 const TWEDEN = 1 << 29;
12230 const AMVOFFEN = 1 << 35;
12232 const ENAS0 = 1 << 36;
12234 const ADEN = 1 << 37;
12236 const HXEN = 1 << 38;
12238 const GCSEN = 1 << 39;
12240 const TRNDR = 1 << 40;
12242 const ENTP2 = 1 << 41;
12244 const RCWMASKEN = 1 << 42;
12246 const TCR2EN = 1 << 43;
12248 const SCTLR2EN = 1 << 44;
12250 const PIEN = 1 << 45;
12252 const AIEN = 1 << 46;
12254 const D128EN = 1 << 47;
12256 const GPF = 1 << 48;
12258 const MECEN = 1 << 49;
12260 const ENFPM = 1 << 50;
12262 const TMEA = 1 << 51;
12264 const TWERR = 1 << 52;
12266 const PFAREN = 1 << 53;
12268 const SRMASKEN = 1 << 54;
12270 const ENIDCP128 = 1 << 55;
12272 const VTLBIDEN = 1 << 56;
12274 const DSE = 1 << 57;
12276 const ENDSE = 1 << 58;
12278 const FGTEN2 = 1 << 59;
12280 const HDBSSEN = 1 << 60;
12282 const HACDBSEN = 1 << 61;
12284 const NSE = 1 << 62;
12286 const TPLIMEN = 1 << 63;
12288 }
12289}
12290
12291#[cfg(feature = "el3")]
12292impl ScrEl3 {
12293 pub const NS_SHIFT: u32 = 0;
12295 pub const IRQ_SHIFT: u32 = 1;
12297 pub const FIQ_SHIFT: u32 = 2;
12299 pub const EA_SHIFT: u32 = 3;
12301 pub const SMD_SHIFT: u32 = 7;
12303 pub const HCE_SHIFT: u32 = 8;
12305 pub const SIF_SHIFT: u32 = 9;
12307 pub const RW_SHIFT: u32 = 10;
12309 pub const ST_SHIFT: u32 = 11;
12311 pub const TWI_SHIFT: u32 = 12;
12313 pub const TWE_SHIFT: u32 = 13;
12315 pub const TLOR_SHIFT: u32 = 14;
12317 pub const TERR_SHIFT: u32 = 15;
12319 pub const APK_SHIFT: u32 = 16;
12321 pub const API_SHIFT: u32 = 17;
12323 pub const EEL2_SHIFT: u32 = 18;
12325 pub const EASE_SHIFT: u32 = 19;
12327 pub const NMEA_SHIFT: u32 = 20;
12329 pub const FIEN_SHIFT: u32 = 21;
12331 pub const TID3_SHIFT: u32 = 22;
12333 pub const TID5_SHIFT: u32 = 23;
12335 pub const POE2EN_SHIFT: u32 = 24;
12337 pub const ENSCXT_SHIFT: u32 = 25;
12339 pub const ATA_SHIFT: u32 = 26;
12341 pub const FGTEN_SHIFT: u32 = 27;
12343 pub const ECVEN_SHIFT: u32 = 28;
12345 pub const TWEDEN_SHIFT: u32 = 29;
12347 pub const TWEDEL_SHIFT: u32 = 30;
12349 pub const TWEDEL_MASK: u64 = 0b1111;
12351 pub const AMVOFFEN_SHIFT: u32 = 35;
12353 pub const ENAS0_SHIFT: u32 = 36;
12355 pub const ADEN_SHIFT: u32 = 37;
12357 pub const HXEN_SHIFT: u32 = 38;
12359 pub const GCSEN_SHIFT: u32 = 39;
12361 pub const TRNDR_SHIFT: u32 = 40;
12363 pub const ENTP2_SHIFT: u32 = 41;
12365 pub const RCWMASKEN_SHIFT: u32 = 42;
12367 pub const TCR2EN_SHIFT: u32 = 43;
12369 pub const SCTLR2EN_SHIFT: u32 = 44;
12371 pub const PIEN_SHIFT: u32 = 45;
12373 pub const AIEN_SHIFT: u32 = 46;
12375 pub const D128EN_SHIFT: u32 = 47;
12377 pub const GPF_SHIFT: u32 = 48;
12379 pub const MECEN_SHIFT: u32 = 49;
12381 pub const ENFPM_SHIFT: u32 = 50;
12383 pub const TMEA_SHIFT: u32 = 51;
12385 pub const TWERR_SHIFT: u32 = 52;
12387 pub const PFAREN_SHIFT: u32 = 53;
12389 pub const SRMASKEN_SHIFT: u32 = 54;
12391 pub const ENIDCP128_SHIFT: u32 = 55;
12393 pub const VTLBIDEN_SHIFT: u32 = 56;
12395 pub const DSE_SHIFT: u32 = 57;
12397 pub const ENDSE_SHIFT: u32 = 58;
12399 pub const FGTEN2_SHIFT: u32 = 59;
12401 pub const HDBSSEN_SHIFT: u32 = 60;
12403 pub const HACDBSEN_SHIFT: u32 = 61;
12405 pub const NSE_SHIFT: u32 = 62;
12407 pub const TPLIMEN_SHIFT: u32 = 63;
12409
12410 pub const fn twedel(self) -> u8 {
12412 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
12413 }
12414}
12415
12416bitflags! {
12417 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12419 #[repr(transparent)]
12420 pub struct Sctlr: u32 {
12421 const RES1 = 0b10000000000100000000000;
12423 const M = 1 << 0;
12425 const A = 1 << 1;
12427 const C = 1 << 2;
12429 const NTLSMD = 1 << 3;
12431 const LSMAOE = 1 << 4;
12433 const CP15BEN = 1 << 5;
12435 const UNK = 1 << 6;
12437 const ITD = 1 << 7;
12439 const SED = 1 << 8;
12441 const ENRCTX = 1 << 10;
12443 const I = 1 << 12;
12445 const V = 1 << 13;
12447 const NTWI = 1 << 16;
12449 const NTWE = 1 << 18;
12451 const WXN = 1 << 19;
12453 const UWXN = 1 << 20;
12455 const SPAN = 1 << 23;
12457 const EE = 1 << 25;
12459 const TRE = 1 << 28;
12461 const AFE = 1 << 29;
12463 const TE = 1 << 30;
12465 const DSSBS = 1 << 31;
12467 }
12468}
12469
12470impl Sctlr {
12471 pub const M_SHIFT: u32 = 0;
12473 pub const A_SHIFT: u32 = 1;
12475 pub const C_SHIFT: u32 = 2;
12477 pub const NTLSMD_SHIFT: u32 = 3;
12479 pub const LSMAOE_SHIFT: u32 = 4;
12481 pub const CP15BEN_SHIFT: u32 = 5;
12483 pub const UNK_SHIFT: u32 = 6;
12485 pub const ITD_SHIFT: u32 = 7;
12487 pub const SED_SHIFT: u32 = 8;
12489 pub const ENRCTX_SHIFT: u32 = 10;
12491 pub const I_SHIFT: u32 = 12;
12493 pub const V_SHIFT: u32 = 13;
12495 pub const NTWI_SHIFT: u32 = 16;
12497 pub const NTWE_SHIFT: u32 = 18;
12499 pub const WXN_SHIFT: u32 = 19;
12501 pub const UWXN_SHIFT: u32 = 20;
12503 pub const SPAN_SHIFT: u32 = 23;
12505 pub const EE_SHIFT: u32 = 25;
12507 pub const TRE_SHIFT: u32 = 28;
12509 pub const AFE_SHIFT: u32 = 29;
12511 pub const TE_SHIFT: u32 = 30;
12513 pub const DSSBS_SHIFT: u32 = 31;
12515}
12516
12517#[cfg(feature = "el3")]
12518bitflags! {
12519 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12521 #[repr(transparent)]
12522 pub struct Sctlr2El3: u64 {
12523 const EMEC = 1 << 1;
12525 const ENADERR = 1 << 3;
12527 const ENANERR = 1 << 4;
12529 const ENPACM = 1 << 7;
12531 const CPTA = 1 << 9;
12533 const CPTM = 1 << 11;
12535 const DTZ = 1 << 14;
12537 const TEIS = 1 << 15;
12539 const TEOS = 1 << 16;
12541 const VT = 1 << 17;
12543 const BTD = 1 << 24;
12545 }
12546}
12547
12548#[cfg(feature = "el3")]
12549impl Sctlr2El3 {
12550 pub const EMEC_SHIFT: u32 = 1;
12552 pub const ENADERR_SHIFT: u32 = 3;
12554 pub const ENANERR_SHIFT: u32 = 4;
12556 pub const ENPACM_SHIFT: u32 = 7;
12558 pub const CPTA_SHIFT: u32 = 9;
12560 pub const CPTM_SHIFT: u32 = 11;
12562 pub const DTZ_SHIFT: u32 = 14;
12564 pub const TEIS_SHIFT: u32 = 15;
12566 pub const TEOS_SHIFT: u32 = 16;
12568 pub const VT_SHIFT: u32 = 17;
12570 pub const BTD_SHIFT: u32 = 24;
12572}
12573
12574#[cfg(feature = "el1")]
12575bitflags! {
12576 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12578 #[repr(transparent)]
12579 pub struct SctlrEl1: u64 {
12580 const M = 1 << 0;
12582 const A = 1 << 1;
12584 const C = 1 << 2;
12586 const SA = 1 << 3;
12588 const SA0 = 1 << 4;
12590 const CP15BEN = 1 << 5;
12592 const NAA = 1 << 6;
12594 const ITD = 1 << 7;
12596 const SED = 1 << 8;
12598 const UMA = 1 << 9;
12600 const ENRCTX = 1 << 10;
12602 const EOS = 1 << 11;
12604 const I = 1 << 12;
12606 const ENDB = 1 << 13;
12608 const DZE = 1 << 14;
12610 const UCT = 1 << 15;
12612 const NTWI = 1 << 16;
12614 const NTWE = 1 << 18;
12616 const WXN = 1 << 19;
12618 const TSCXT = 1 << 20;
12620 const IESB = 1 << 21;
12622 const EIS = 1 << 22;
12624 const SPAN = 1 << 23;
12626 const UCI = 1 << 26;
12628 const ENDA = 1 << 27;
12630 const NTLSMD = 1 << 28;
12632 const LSMAOE = 1 << 29;
12634 const ENIB = 1 << 30;
12636 const ENIA = 1 << 31;
12638 const CMOW = 1 << 32;
12640 const MSCEN = 1 << 33;
12642 const ENFPM = 1 << 34;
12644 const BT0 = 1 << 35;
12646 const BT1 = 1 << 36;
12648 const ITFSB = 1 << 37;
12650 const ATA0 = 1 << 42;
12652 const ATA = 1 << 43;
12654 const DSSBS = 1 << 44;
12656 const TWEDEN = 1 << 45;
12658 const ENASR = 1 << 54;
12660 const ENAS0 = 1 << 55;
12662 const ENALS = 1 << 56;
12664 const EPAN = 1 << 57;
12666 const TCSO0 = 1 << 58;
12668 const TCSO = 1 << 59;
12670 const ENTP2 = 1 << 60;
12672 const NMI = 1 << 61;
12674 const SPINTMASK = 1 << 62;
12676 const TIDCP = 1 << 63;
12678 }
12679}
12680
12681#[cfg(feature = "el1")]
12682impl SctlrEl1 {
12683 pub const M_SHIFT: u32 = 0;
12685 pub const A_SHIFT: u32 = 1;
12687 pub const C_SHIFT: u32 = 2;
12689 pub const SA_SHIFT: u32 = 3;
12691 pub const SA0_SHIFT: u32 = 4;
12693 pub const CP15BEN_SHIFT: u32 = 5;
12695 pub const NAA_SHIFT: u32 = 6;
12697 pub const ITD_SHIFT: u32 = 7;
12699 pub const SED_SHIFT: u32 = 8;
12701 pub const UMA_SHIFT: u32 = 9;
12703 pub const ENRCTX_SHIFT: u32 = 10;
12705 pub const EOS_SHIFT: u32 = 11;
12707 pub const I_SHIFT: u32 = 12;
12709 pub const ENDB_SHIFT: u32 = 13;
12711 pub const DZE_SHIFT: u32 = 14;
12713 pub const UCT_SHIFT: u32 = 15;
12715 pub const NTWI_SHIFT: u32 = 16;
12717 pub const NTWE_SHIFT: u32 = 18;
12719 pub const WXN_SHIFT: u32 = 19;
12721 pub const TSCXT_SHIFT: u32 = 20;
12723 pub const IESB_SHIFT: u32 = 21;
12725 pub const EIS_SHIFT: u32 = 22;
12727 pub const SPAN_SHIFT: u32 = 23;
12729 pub const UCI_SHIFT: u32 = 26;
12731 pub const ENDA_SHIFT: u32 = 27;
12733 pub const NTLSMD_SHIFT: u32 = 28;
12735 pub const LSMAOE_SHIFT: u32 = 29;
12737 pub const ENIB_SHIFT: u32 = 30;
12739 pub const ENIA_SHIFT: u32 = 31;
12741 pub const CMOW_SHIFT: u32 = 32;
12743 pub const MSCEN_SHIFT: u32 = 33;
12745 pub const ENFPM_SHIFT: u32 = 34;
12747 pub const BT0_SHIFT: u32 = 35;
12749 pub const BT1_SHIFT: u32 = 36;
12751 pub const ITFSB_SHIFT: u32 = 37;
12753 pub const TCF0_SHIFT: u32 = 38;
12755 pub const TCF0_MASK: u64 = 0b11;
12757 pub const TCF_SHIFT: u32 = 40;
12759 pub const TCF_MASK: u64 = 0b11;
12761 pub const ATA0_SHIFT: u32 = 42;
12763 pub const ATA_SHIFT: u32 = 43;
12765 pub const DSSBS_SHIFT: u32 = 44;
12767 pub const TWEDEN_SHIFT: u32 = 45;
12769 pub const TWEDEL_SHIFT: u32 = 46;
12771 pub const TWEDEL_MASK: u64 = 0b1111;
12773 pub const ENASR_SHIFT: u32 = 54;
12775 pub const ENAS0_SHIFT: u32 = 55;
12777 pub const ENALS_SHIFT: u32 = 56;
12779 pub const EPAN_SHIFT: u32 = 57;
12781 pub const TCSO0_SHIFT: u32 = 58;
12783 pub const TCSO_SHIFT: u32 = 59;
12785 pub const ENTP2_SHIFT: u32 = 60;
12787 pub const NMI_SHIFT: u32 = 61;
12789 pub const SPINTMASK_SHIFT: u32 = 62;
12791 pub const TIDCP_SHIFT: u32 = 63;
12793
12794 pub const fn tcf0(self) -> u8 {
12796 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
12797 }
12798
12799 pub const fn tcf(self) -> u8 {
12801 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
12802 }
12803
12804 pub const fn twedel(self) -> u8 {
12806 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
12807 }
12808}
12809
12810#[cfg(feature = "el2")]
12811bitflags! {
12812 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
12814 #[repr(transparent)]
12815 pub struct SctlrEl2: u64 {
12816 const M = 1 << 0;
12818 const A = 1 << 1;
12820 const C = 1 << 2;
12822 const SA = 1 << 3;
12824 const SA0 = 1 << 4;
12826 const CP15BEN = 1 << 5;
12828 const NAA = 1 << 6;
12830 const SED = 1 << 8;
12832 const UMA = 1 << 9;
12834 const ENRCTX = 1 << 10;
12836 const EOS = 1 << 11;
12838 const I = 1 << 12;
12840 const ENDB = 1 << 13;
12842 const DZE = 1 << 14;
12844 const UCT = 1 << 15;
12846 const NTWI = 1 << 16;
12848 const NTWE = 1 << 18;
12850 const WXN = 1 << 19;
12852 const IESB = 1 << 21;
12854 const EIS = 1 << 22;
12856 const SPAN = 1 << 23;
12858 const UCI = 1 << 26;
12860 const ENDA = 1 << 27;
12862 const NTLSMD = 1 << 28;
12864 const LSMAOE = 1 << 29;
12866 const ENIB = 1 << 30;
12868 const ENIA = 1 << 31;
12870 const CMOW = 1 << 32;
12872 const MSCEN = 1 << 33;
12874 const ENFPM = 1 << 34;
12876 const BT0 = 1 << 35;
12878 const BT = 1 << 36;
12880 const ITFSB = 1 << 37;
12882 const ATA0 = 1 << 42;
12884 const ATA = 1 << 43;
12886 const DSSBS = 1 << 44;
12888 const TWEDEN = 1 << 45;
12890 const ENASR = 1 << 54;
12892 const ENAS0 = 1 << 55;
12894 const ENALS = 1 << 56;
12896 const EPAN = 1 << 57;
12898 const TCSO0 = 1 << 58;
12900 const TCSO = 1 << 59;
12902 const ENTP2 = 1 << 60;
12904 const NMI = 1 << 61;
12906 const SPINTMASK = 1 << 62;
12908 const TIDCP = 1 << 63;
12910 }
12911}
12912
12913#[cfg(feature = "el2")]
12914impl SctlrEl2 {
12915 pub const M_SHIFT: u32 = 0;
12917 pub const A_SHIFT: u32 = 1;
12919 pub const C_SHIFT: u32 = 2;
12921 pub const SA_SHIFT: u32 = 3;
12923 pub const SA0_SHIFT: u32 = 4;
12925 pub const CP15BEN_SHIFT: u32 = 5;
12927 pub const NAA_SHIFT: u32 = 6;
12929 pub const SED_SHIFT: u32 = 8;
12931 pub const UMA_SHIFT: u32 = 9;
12933 pub const ENRCTX_SHIFT: u32 = 10;
12935 pub const EOS_SHIFT: u32 = 11;
12937 pub const I_SHIFT: u32 = 12;
12939 pub const ENDB_SHIFT: u32 = 13;
12941 pub const DZE_SHIFT: u32 = 14;
12943 pub const UCT_SHIFT: u32 = 15;
12945 pub const NTWI_SHIFT: u32 = 16;
12947 pub const NTWE_SHIFT: u32 = 18;
12949 pub const WXN_SHIFT: u32 = 19;
12951 pub const IESB_SHIFT: u32 = 21;
12953 pub const EIS_SHIFT: u32 = 22;
12955 pub const SPAN_SHIFT: u32 = 23;
12957 pub const UCI_SHIFT: u32 = 26;
12959 pub const ENDA_SHIFT: u32 = 27;
12961 pub const NTLSMD_SHIFT: u32 = 28;
12963 pub const LSMAOE_SHIFT: u32 = 29;
12965 pub const ENIB_SHIFT: u32 = 30;
12967 pub const ENIA_SHIFT: u32 = 31;
12969 pub const CMOW_SHIFT: u32 = 32;
12971 pub const MSCEN_SHIFT: u32 = 33;
12973 pub const ENFPM_SHIFT: u32 = 34;
12975 pub const BT0_SHIFT: u32 = 35;
12977 pub const BT_SHIFT: u32 = 36;
12979 pub const ITFSB_SHIFT: u32 = 37;
12981 pub const TCF0_SHIFT: u32 = 38;
12983 pub const TCF0_MASK: u64 = 0b11;
12985 pub const TCF_SHIFT: u32 = 40;
12987 pub const TCF_MASK: u64 = 0b11;
12989 pub const ATA0_SHIFT: u32 = 42;
12991 pub const ATA_SHIFT: u32 = 43;
12993 pub const DSSBS_SHIFT: u32 = 44;
12995 pub const TWEDEN_SHIFT: u32 = 45;
12997 pub const TWEDEL_SHIFT: u32 = 46;
12999 pub const TWEDEL_MASK: u64 = 0b1111;
13001 pub const ENASR_SHIFT: u32 = 54;
13003 pub const ENAS0_SHIFT: u32 = 55;
13005 pub const ENALS_SHIFT: u32 = 56;
13007 pub const EPAN_SHIFT: u32 = 57;
13009 pub const TCSO0_SHIFT: u32 = 58;
13011 pub const TCSO_SHIFT: u32 = 59;
13013 pub const ENTP2_SHIFT: u32 = 60;
13015 pub const NMI_SHIFT: u32 = 61;
13017 pub const SPINTMASK_SHIFT: u32 = 62;
13019 pub const TIDCP_SHIFT: u32 = 63;
13021
13022 pub const fn tcf0(self) -> u8 {
13024 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
13025 }
13026
13027 pub const fn tcf(self) -> u8 {
13029 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
13030 }
13031
13032 pub const fn twedel(self) -> u8 {
13034 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
13035 }
13036}
13037
13038#[cfg(feature = "el3")]
13039bitflags! {
13040 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13042 #[repr(transparent)]
13043 pub struct SctlrEl3: u64 {
13044 const RES1 = 0b110000100001010000000000110000;
13046 const M = 1 << 0;
13048 const A = 1 << 1;
13050 const C = 1 << 2;
13052 const SA = 1 << 3;
13054 const NAA = 1 << 6;
13056 const EOS = 1 << 11;
13058 const I = 1 << 12;
13060 const ENDB = 1 << 13;
13062 const WXN = 1 << 19;
13064 const IESB = 1 << 21;
13066 const EIS = 1 << 22;
13068 const ENDA = 1 << 27;
13070 const ENIB = 1 << 30;
13072 const ENIA = 1 << 31;
13074 const BT = 1 << 36;
13076 const ITFSB = 1 << 37;
13078 const ATA = 1 << 43;
13080 const DSSBS = 1 << 44;
13082 const TCSO = 1 << 59;
13084 const NMI = 1 << 61;
13086 const SPINTMASK = 1 << 62;
13088 }
13089}
13090
13091#[cfg(feature = "el3")]
13092impl SctlrEl3 {
13093 pub const M_SHIFT: u32 = 0;
13095 pub const A_SHIFT: u32 = 1;
13097 pub const C_SHIFT: u32 = 2;
13099 pub const SA_SHIFT: u32 = 3;
13101 pub const NAA_SHIFT: u32 = 6;
13103 pub const EOS_SHIFT: u32 = 11;
13105 pub const I_SHIFT: u32 = 12;
13107 pub const ENDB_SHIFT: u32 = 13;
13109 pub const WXN_SHIFT: u32 = 19;
13111 pub const IESB_SHIFT: u32 = 21;
13113 pub const EIS_SHIFT: u32 = 22;
13115 pub const ENDA_SHIFT: u32 = 27;
13117 pub const ENIB_SHIFT: u32 = 30;
13119 pub const ENIA_SHIFT: u32 = 31;
13121 pub const BT_SHIFT: u32 = 36;
13123 pub const ITFSB_SHIFT: u32 = 37;
13125 pub const TCF_SHIFT: u32 = 40;
13127 pub const TCF_MASK: u64 = 0b11;
13129 pub const ATA_SHIFT: u32 = 43;
13131 pub const DSSBS_SHIFT: u32 = 44;
13133 pub const TCSO_SHIFT: u32 = 59;
13135 pub const NMI_SHIFT: u32 = 61;
13137 pub const SPINTMASK_SHIFT: u32 = 62;
13139
13140 pub const fn tcf(self) -> u8 {
13142 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
13143 }
13144}
13145
13146bitflags! {
13147 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13149 #[repr(transparent)]
13150 pub struct Sdcr: u32 {
13151 const SPME = 1 << 17;
13153 const STE = 1 << 18;
13155 const TTRF = 1 << 19;
13157 const EDAD = 1 << 20;
13159 const EPMAD = 1 << 21;
13161 const SCCD = 1 << 23;
13163 const TDCC = 1 << 27;
13165 const MTPME = 1 << 28;
13167 }
13168}
13169
13170impl Sdcr {
13171 pub const SPD_SHIFT: u32 = 14;
13173 pub const SPD_MASK: u32 = 0b11;
13175 pub const SPME_SHIFT: u32 = 17;
13177 pub const STE_SHIFT: u32 = 18;
13179 pub const TTRF_SHIFT: u32 = 19;
13181 pub const EDAD_SHIFT: u32 = 20;
13183 pub const EPMAD_SHIFT: u32 = 21;
13185 pub const SCCD_SHIFT: u32 = 23;
13187 pub const TDCC_SHIFT: u32 = 27;
13189 pub const MTPME_SHIFT: u32 = 28;
13191
13192 pub const fn spd(self) -> u8 {
13194 ((self.bits() >> Self::SPD_SHIFT) & 0b11) as u8
13195 }
13196}
13197
13198bitflags! {
13199 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13201 #[repr(transparent)]
13202 pub struct Sder: u32 {
13203 const SUIDEN = 1 << 0;
13205 const SUNIDEN = 1 << 1;
13207 }
13208}
13209
13210impl Sder {
13211 pub const SUIDEN_SHIFT: u32 = 0;
13213 pub const SUNIDEN_SHIFT: u32 = 1;
13215}
13216
13217#[cfg(feature = "el3")]
13218bitflags! {
13219 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13221 #[repr(transparent)]
13222 pub struct SmcrEl3: u64 {
13223 const EZT0 = 1 << 30;
13225 const FA64 = 1 << 31;
13227 }
13228}
13229
13230#[cfg(feature = "el3")]
13231impl SmcrEl3 {
13232 pub const LEN_SHIFT: u32 = 0;
13234 pub const LEN_MASK: u64 = 0b1111;
13236 pub const EZT0_SHIFT: u32 = 30;
13238 pub const FA64_SHIFT: u32 = 31;
13240
13241 pub const fn len(self) -> u8 {
13243 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
13244 }
13245}
13246
13247#[cfg(feature = "el1")]
13248bitflags! {
13249 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13251 #[repr(transparent)]
13252 pub struct SpsrEl1: u64 {
13253 const M_4 = 1 << 4;
13255 const T = 1 << 5;
13257 const F = 1 << 6;
13259 const I = 1 << 7;
13261 const A = 1 << 8;
13263 const D = 1 << 9;
13265 const E = 1 << 9;
13267 const ALLINT = 1 << 13;
13269 const BTYPE2 = 1 << 14;
13271 const IL = 1 << 20;
13273 const SS = 1 << 21;
13275 const PAN = 1 << 22;
13277 const UAO = 1 << 23;
13279 const DIT = 1 << 24;
13281 const TCO = 1 << 25;
13283 const Q = 1 << 27;
13285 const V = 1 << 28;
13287 const C = 1 << 29;
13289 const Z = 1 << 30;
13291 const N = 1 << 31;
13293 const PM = 1 << 32;
13295 const PPEND = 1 << 33;
13297 const EXLOCK = 1 << 34;
13299 const PACM = 1 << 35;
13301 const UINJ = 1 << 36;
13303 }
13304}
13305
13306#[cfg(feature = "el1")]
13307impl SpsrEl1 {
13308 pub const M_3_0_SHIFT: u32 = 0;
13310 pub const M_3_0_MASK: u64 = 0b1111;
13312 pub const M_4_SHIFT: u32 = 4;
13314 pub const T_SHIFT: u32 = 5;
13316 pub const F_SHIFT: u32 = 6;
13318 pub const I_SHIFT: u32 = 7;
13320 pub const A_SHIFT: u32 = 8;
13322 pub const D_SHIFT: u32 = 9;
13324 pub const E_SHIFT: u32 = 9;
13326 pub const BTYPE_SHIFT: u32 = 10;
13328 pub const BTYPE_MASK: u64 = 0b11;
13330 pub const ALLINT_SHIFT: u32 = 13;
13332 pub const BTYPE2_SHIFT: u32 = 14;
13334 pub const GE_SHIFT: u32 = 16;
13336 pub const GE_MASK: u64 = 0b1111;
13338 pub const IL_SHIFT: u32 = 20;
13340 pub const SS_SHIFT: u32 = 21;
13342 pub const PAN_SHIFT: u32 = 22;
13344 pub const UAO_SHIFT: u32 = 23;
13346 pub const DIT_SHIFT: u32 = 24;
13348 pub const TCO_SHIFT: u32 = 25;
13350 pub const Q_SHIFT: u32 = 27;
13352 pub const V_SHIFT: u32 = 28;
13354 pub const C_SHIFT: u32 = 29;
13356 pub const Z_SHIFT: u32 = 30;
13358 pub const N_SHIFT: u32 = 31;
13360 pub const PM_SHIFT: u32 = 32;
13362 pub const PPEND_SHIFT: u32 = 33;
13364 pub const EXLOCK_SHIFT: u32 = 34;
13366 pub const PACM_SHIFT: u32 = 35;
13368 pub const UINJ_SHIFT: u32 = 36;
13370
13371 pub const fn m_3_0(self) -> u8 {
13373 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
13374 }
13375
13376 pub const fn btype(self) -> u8 {
13378 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
13379 }
13380
13381 pub const fn ge(self) -> u8 {
13383 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
13384 }
13385}
13386
13387#[cfg(feature = "el2")]
13388bitflags! {
13389 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13391 #[repr(transparent)]
13392 pub struct SpsrEl2: u64 {
13393 const M_4 = 1 << 4;
13395 const T = 1 << 5;
13397 const F = 1 << 6;
13399 const I = 1 << 7;
13401 const A = 1 << 8;
13403 const D = 1 << 9;
13405 const E = 1 << 9;
13407 const ALLINT = 1 << 13;
13409 const BTYPE2 = 1 << 14;
13411 const IL = 1 << 20;
13413 const SS = 1 << 21;
13415 const PAN = 1 << 22;
13417 const UAO = 1 << 23;
13419 const DIT = 1 << 24;
13421 const TCO = 1 << 25;
13423 const Q = 1 << 27;
13425 const V = 1 << 28;
13427 const C = 1 << 29;
13429 const Z = 1 << 30;
13431 const N = 1 << 31;
13433 const PM = 1 << 32;
13435 const PPEND = 1 << 33;
13437 const EXLOCK = 1 << 34;
13439 const PACM = 1 << 35;
13441 const UINJ = 1 << 36;
13443 }
13444}
13445
13446#[cfg(feature = "el2")]
13447impl SpsrEl2 {
13448 pub const M_3_0_SHIFT: u32 = 0;
13450 pub const M_3_0_MASK: u64 = 0b1111;
13452 pub const M_4_SHIFT: u32 = 4;
13454 pub const T_SHIFT: u32 = 5;
13456 pub const F_SHIFT: u32 = 6;
13458 pub const I_SHIFT: u32 = 7;
13460 pub const A_SHIFT: u32 = 8;
13462 pub const D_SHIFT: u32 = 9;
13464 pub const E_SHIFT: u32 = 9;
13466 pub const BTYPE_SHIFT: u32 = 10;
13468 pub const BTYPE_MASK: u64 = 0b11;
13470 pub const ALLINT_SHIFT: u32 = 13;
13472 pub const BTYPE2_SHIFT: u32 = 14;
13474 pub const GE_SHIFT: u32 = 16;
13476 pub const GE_MASK: u64 = 0b1111;
13478 pub const IL_SHIFT: u32 = 20;
13480 pub const SS_SHIFT: u32 = 21;
13482 pub const PAN_SHIFT: u32 = 22;
13484 pub const UAO_SHIFT: u32 = 23;
13486 pub const DIT_SHIFT: u32 = 24;
13488 pub const TCO_SHIFT: u32 = 25;
13490 pub const Q_SHIFT: u32 = 27;
13492 pub const V_SHIFT: u32 = 28;
13494 pub const C_SHIFT: u32 = 29;
13496 pub const Z_SHIFT: u32 = 30;
13498 pub const N_SHIFT: u32 = 31;
13500 pub const PM_SHIFT: u32 = 32;
13502 pub const PPEND_SHIFT: u32 = 33;
13504 pub const EXLOCK_SHIFT: u32 = 34;
13506 pub const PACM_SHIFT: u32 = 35;
13508 pub const UINJ_SHIFT: u32 = 36;
13510
13511 pub const fn m_3_0(self) -> u8 {
13513 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
13514 }
13515
13516 pub const fn btype(self) -> u8 {
13518 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
13519 }
13520
13521 pub const fn ge(self) -> u8 {
13523 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
13524 }
13525}
13526
13527#[cfg(feature = "el3")]
13528bitflags! {
13529 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13531 #[repr(transparent)]
13532 pub struct SpsrEl3: u64 {
13533 const M_4 = 1 << 4;
13535 const T = 1 << 5;
13537 const F = 1 << 6;
13539 const I = 1 << 7;
13541 const A = 1 << 8;
13543 const D = 1 << 9;
13545 const E = 1 << 9;
13547 const ALLINT = 1 << 13;
13549 const BTYPE2 = 1 << 14;
13551 const IL = 1 << 20;
13553 const SS = 1 << 21;
13555 const PAN = 1 << 22;
13557 const UAO = 1 << 23;
13559 const DIT = 1 << 24;
13561 const TCO = 1 << 25;
13563 const Q = 1 << 27;
13565 const V = 1 << 28;
13567 const C = 1 << 29;
13569 const Z = 1 << 30;
13571 const N = 1 << 31;
13573 const PM = 1 << 32;
13575 const PPEND = 1 << 33;
13577 const EXLOCK = 1 << 34;
13579 const PACM = 1 << 35;
13581 const UINJ = 1 << 36;
13583 }
13584}
13585
13586#[cfg(feature = "el3")]
13587impl SpsrEl3 {
13588 pub const M_3_0_SHIFT: u32 = 0;
13590 pub const M_3_0_MASK: u64 = 0b1111;
13592 pub const M_4_SHIFT: u32 = 4;
13594 pub const T_SHIFT: u32 = 5;
13596 pub const F_SHIFT: u32 = 6;
13598 pub const I_SHIFT: u32 = 7;
13600 pub const A_SHIFT: u32 = 8;
13602 pub const D_SHIFT: u32 = 9;
13604 pub const E_SHIFT: u32 = 9;
13606 pub const BTYPE_SHIFT: u32 = 10;
13608 pub const BTYPE_MASK: u64 = 0b11;
13610 pub const ALLINT_SHIFT: u32 = 13;
13612 pub const BTYPE2_SHIFT: u32 = 14;
13614 pub const GE_SHIFT: u32 = 16;
13616 pub const GE_MASK: u64 = 0b1111;
13618 pub const IL_SHIFT: u32 = 20;
13620 pub const SS_SHIFT: u32 = 21;
13622 pub const PAN_SHIFT: u32 = 22;
13624 pub const UAO_SHIFT: u32 = 23;
13626 pub const DIT_SHIFT: u32 = 24;
13628 pub const TCO_SHIFT: u32 = 25;
13630 pub const Q_SHIFT: u32 = 27;
13632 pub const V_SHIFT: u32 = 28;
13634 pub const C_SHIFT: u32 = 29;
13636 pub const Z_SHIFT: u32 = 30;
13638 pub const N_SHIFT: u32 = 31;
13640 pub const PM_SHIFT: u32 = 32;
13642 pub const PPEND_SHIFT: u32 = 33;
13644 pub const EXLOCK_SHIFT: u32 = 34;
13646 pub const PACM_SHIFT: u32 = 35;
13648 pub const UINJ_SHIFT: u32 = 36;
13650
13651 pub const fn m_3_0(self) -> u8 {
13653 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
13654 }
13655
13656 pub const fn btype(self) -> u8 {
13658 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
13659 }
13660
13661 pub const fn ge(self) -> u8 {
13663 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
13664 }
13665}
13666
13667#[cfg(feature = "el1")]
13668bitflags! {
13669 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13671 #[repr(transparent)]
13672 pub struct SpEl1: u64 {
13673 }
13674}
13675
13676#[cfg(feature = "el1")]
13677impl SpEl1 {
13678 pub const STACKPOINTER_SHIFT: u32 = 0;
13680 pub const STACKPOINTER_MASK: u64 =
13682 0b1111111111111111111111111111111111111111111111111111111111111111;
13683
13684 pub const fn stackpointer(self) -> u64 {
13686 ((self.bits() >> Self::STACKPOINTER_SHIFT)
13687 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
13688 }
13689}
13690
13691#[cfg(feature = "el2")]
13692bitflags! {
13693 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13695 #[repr(transparent)]
13696 pub struct SpEl2: u64 {
13697 }
13698}
13699
13700#[cfg(feature = "el2")]
13701impl SpEl2 {
13702 pub const STACKPOINTER_SHIFT: u32 = 0;
13704 pub const STACKPOINTER_MASK: u64 =
13706 0b1111111111111111111111111111111111111111111111111111111111111111;
13707
13708 pub const fn stackpointer(self) -> u64 {
13710 ((self.bits() >> Self::STACKPOINTER_SHIFT)
13711 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
13712 }
13713}
13714
13715#[cfg(feature = "el1")]
13716bitflags! {
13717 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13719 #[repr(transparent)]
13720 pub struct Tcr2El1: u64 {
13721 const PNCH = 1 << 0;
13723 const PIE = 1 << 1;
13725 const E0POE = 1 << 2;
13727 const POE = 1 << 3;
13729 const AIE = 1 << 4;
13731 const D128 = 1 << 5;
13733 const PTTWI = 1 << 10;
13735 const HAFT = 1 << 11;
13737 const DISCH0 = 1 << 14;
13739 const DISCH1 = 1 << 15;
13741 const A2 = 1 << 16;
13743 const FNG0 = 1 << 17;
13745 const FNG1 = 1 << 18;
13747 const POE2F = 1 << 19;
13749 const FNGNA0 = 1 << 20;
13751 const FNGNA1 = 1 << 21;
13753 const TVAD0 = 1 << 35;
13755 const TVAD1 = 1 << 36;
13757 }
13758}
13759
13760#[cfg(feature = "el1")]
13761impl Tcr2El1 {
13762 pub const PNCH_SHIFT: u32 = 0;
13764 pub const PIE_SHIFT: u32 = 1;
13766 pub const E0POE_SHIFT: u32 = 2;
13768 pub const POE_SHIFT: u32 = 3;
13770 pub const AIE_SHIFT: u32 = 4;
13772 pub const D128_SHIFT: u32 = 5;
13774 pub const PTTWI_SHIFT: u32 = 10;
13776 pub const HAFT_SHIFT: u32 = 11;
13778 pub const DISCH0_SHIFT: u32 = 14;
13780 pub const DISCH1_SHIFT: u32 = 15;
13782 pub const A2_SHIFT: u32 = 16;
13784 pub const FNG0_SHIFT: u32 = 17;
13786 pub const FNG1_SHIFT: u32 = 18;
13788 pub const POE2F_SHIFT: u32 = 19;
13790 pub const FNGNA0_SHIFT: u32 = 20;
13792 pub const FNGNA1_SHIFT: u32 = 21;
13794 pub const POIW_SHIFT: u32 = 22;
13796 pub const POIW_MASK: u64 = 0b111;
13798 pub const VTB0_SHIFT: u32 = 25;
13800 pub const VTB0_MASK: u64 = 0b11111;
13802 pub const VTB1_SHIFT: u32 = 30;
13804 pub const VTB1_MASK: u64 = 0b11111;
13806 pub const TVAD0_SHIFT: u32 = 35;
13808 pub const TVAD1_SHIFT: u32 = 36;
13810
13811 pub const fn poiw(self) -> u8 {
13813 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
13814 }
13815
13816 pub const fn vtb0(self) -> u8 {
13818 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
13819 }
13820
13821 pub const fn vtb1(self) -> u8 {
13823 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
13824 }
13825}
13826
13827#[cfg(feature = "el2")]
13828bitflags! {
13829 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13831 #[repr(transparent)]
13832 pub struct Tcr2El2: u64 {
13833 const PNCH = 1 << 0;
13835 const PIE = 1 << 1;
13837 const E0POE = 1 << 2;
13839 const POE = 1 << 3;
13841 const AIE = 1 << 4;
13843 const D128 = 1 << 5;
13845 const PTTWI = 1 << 10;
13847 const HAFT = 1 << 11;
13849 const AMEC0 = 1 << 12;
13851 const AMEC1 = 1 << 13;
13853 const DISCH0 = 1 << 14;
13855 const DISCH1 = 1 << 15;
13857 const A2 = 1 << 16;
13859 const FNG0 = 1 << 17;
13861 const FNG1 = 1 << 18;
13863 const POE2F = 1 << 19;
13865 const TVAD0 = 1 << 35;
13867 const TVAD1 = 1 << 36;
13869 }
13870}
13871
13872#[cfg(feature = "el2")]
13873impl Tcr2El2 {
13874 pub const PNCH_SHIFT: u32 = 0;
13876 pub const PIE_SHIFT: u32 = 1;
13878 pub const E0POE_SHIFT: u32 = 2;
13880 pub const POE_SHIFT: u32 = 3;
13882 pub const AIE_SHIFT: u32 = 4;
13884 pub const D128_SHIFT: u32 = 5;
13886 pub const PTTWI_SHIFT: u32 = 10;
13888 pub const HAFT_SHIFT: u32 = 11;
13890 pub const AMEC0_SHIFT: u32 = 12;
13892 pub const AMEC1_SHIFT: u32 = 13;
13894 pub const DISCH0_SHIFT: u32 = 14;
13896 pub const DISCH1_SHIFT: u32 = 15;
13898 pub const A2_SHIFT: u32 = 16;
13900 pub const FNG0_SHIFT: u32 = 17;
13902 pub const FNG1_SHIFT: u32 = 18;
13904 pub const POE2F_SHIFT: u32 = 19;
13906 pub const POIW_SHIFT: u32 = 22;
13908 pub const POIW_MASK: u64 = 0b111;
13910 pub const VTB0_SHIFT: u32 = 25;
13912 pub const VTB0_MASK: u64 = 0b11111;
13914 pub const VTB1_SHIFT: u32 = 30;
13916 pub const VTB1_MASK: u64 = 0b11111;
13918 pub const TVAD0_SHIFT: u32 = 35;
13920 pub const TVAD1_SHIFT: u32 = 36;
13922
13923 pub const fn poiw(self) -> u8 {
13925 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
13926 }
13927
13928 pub const fn vtb0(self) -> u8 {
13930 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
13931 }
13932
13933 pub const fn vtb1(self) -> u8 {
13935 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
13936 }
13937}
13938
13939#[cfg(feature = "el1")]
13940bitflags! {
13941 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
13943 #[repr(transparent)]
13944 pub struct TcrEl1: u64 {
13945 const EPD0 = 1 << 7;
13947 const A1 = 1 << 22;
13949 const EPD1 = 1 << 23;
13951 const AS = 1 << 36;
13953 const TBI0 = 1 << 37;
13955 const TBI1 = 1 << 38;
13957 const HA = 1 << 39;
13959 const HD = 1 << 40;
13961 const HPD0 = 1 << 41;
13963 const HPD1 = 1 << 42;
13965 const HWU059 = 1 << 43;
13967 const HWU060 = 1 << 44;
13969 const HWU061 = 1 << 45;
13971 const HWU062 = 1 << 46;
13973 const HWU159 = 1 << 47;
13975 const HWU160 = 1 << 48;
13977 const HWU161 = 1 << 49;
13979 const HWU162 = 1 << 50;
13981 const TBID0 = 1 << 51;
13983 const TBID1 = 1 << 52;
13985 const NFD0 = 1 << 53;
13987 const NFD1 = 1 << 54;
13989 const E0PD0 = 1 << 55;
13991 const E0PD1 = 1 << 56;
13993 const TCMA0 = 1 << 57;
13995 const TCMA1 = 1 << 58;
13997 const DS = 1 << 59;
13999 const MTX0 = 1 << 60;
14001 const MTX1 = 1 << 61;
14003 }
14004}
14005
14006#[cfg(feature = "el1")]
14007impl TcrEl1 {
14008 pub const T0SZ_SHIFT: u32 = 0;
14010 pub const T0SZ_MASK: u64 = 0b111111;
14012 pub const EPD0_SHIFT: u32 = 7;
14014 pub const IRGN0_SHIFT: u32 = 8;
14016 pub const IRGN0_MASK: u64 = 0b11;
14018 pub const ORGN0_SHIFT: u32 = 10;
14020 pub const ORGN0_MASK: u64 = 0b11;
14022 pub const SH0_SHIFT: u32 = 12;
14024 pub const SH0_MASK: u64 = 0b11;
14026 pub const TG0_SHIFT: u32 = 14;
14028 pub const TG0_MASK: u64 = 0b11;
14030 pub const T1SZ_SHIFT: u32 = 16;
14032 pub const T1SZ_MASK: u64 = 0b111111;
14034 pub const A1_SHIFT: u32 = 22;
14036 pub const EPD1_SHIFT: u32 = 23;
14038 pub const IRGN1_SHIFT: u32 = 24;
14040 pub const IRGN1_MASK: u64 = 0b11;
14042 pub const ORGN1_SHIFT: u32 = 26;
14044 pub const ORGN1_MASK: u64 = 0b11;
14046 pub const SH1_SHIFT: u32 = 28;
14048 pub const SH1_MASK: u64 = 0b11;
14050 pub const TG1_SHIFT: u32 = 30;
14052 pub const TG1_MASK: u64 = 0b11;
14054 pub const IPS_SHIFT: u32 = 32;
14056 pub const IPS_MASK: u64 = 0b111;
14058 pub const AS_SHIFT: u32 = 36;
14060 pub const TBI0_SHIFT: u32 = 37;
14062 pub const TBI1_SHIFT: u32 = 38;
14064 pub const HA_SHIFT: u32 = 39;
14066 pub const HD_SHIFT: u32 = 40;
14068 pub const HPD0_SHIFT: u32 = 41;
14070 pub const HPD1_SHIFT: u32 = 42;
14072 pub const HWU059_SHIFT: u32 = 43;
14074 pub const HWU060_SHIFT: u32 = 44;
14076 pub const HWU061_SHIFT: u32 = 45;
14078 pub const HWU062_SHIFT: u32 = 46;
14080 pub const HWU159_SHIFT: u32 = 47;
14082 pub const HWU160_SHIFT: u32 = 48;
14084 pub const HWU161_SHIFT: u32 = 49;
14086 pub const HWU162_SHIFT: u32 = 50;
14088 pub const TBID0_SHIFT: u32 = 51;
14090 pub const TBID1_SHIFT: u32 = 52;
14092 pub const NFD0_SHIFT: u32 = 53;
14094 pub const NFD1_SHIFT: u32 = 54;
14096 pub const E0PD0_SHIFT: u32 = 55;
14098 pub const E0PD1_SHIFT: u32 = 56;
14100 pub const TCMA0_SHIFT: u32 = 57;
14102 pub const TCMA1_SHIFT: u32 = 58;
14104 pub const DS_SHIFT: u32 = 59;
14106 pub const MTX0_SHIFT: u32 = 60;
14108 pub const MTX1_SHIFT: u32 = 61;
14110
14111 pub const fn t0sz(self) -> u8 {
14113 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
14114 }
14115
14116 pub const fn irgn0(self) -> u8 {
14118 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
14119 }
14120
14121 pub const fn orgn0(self) -> u8 {
14123 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
14124 }
14125
14126 pub const fn sh0(self) -> u8 {
14128 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
14129 }
14130
14131 pub const fn tg0(self) -> u8 {
14133 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
14134 }
14135
14136 pub const fn t1sz(self) -> u8 {
14138 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
14139 }
14140
14141 pub const fn irgn1(self) -> u8 {
14143 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
14144 }
14145
14146 pub const fn orgn1(self) -> u8 {
14148 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
14149 }
14150
14151 pub const fn sh1(self) -> u8 {
14153 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
14154 }
14155
14156 pub const fn tg1(self) -> u8 {
14158 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
14159 }
14160
14161 pub const fn ips(self) -> u8 {
14163 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
14164 }
14165}
14166
14167#[cfg(feature = "el2")]
14168bitflags! {
14169 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14171 #[repr(transparent)]
14172 pub struct TcrEl2: u64 {
14173 const RES1 = 0b10000000100000000000000000000000;
14175 const EPD0 = 1 << 7;
14177 const TBI = 1 << 20;
14179 const A1 = 1 << 22;
14181 const EPD1 = 1 << 23;
14183 const HPD = 1 << 24;
14185 const HWU59 = 1 << 25;
14187 const HWU60 = 1 << 26;
14189 const HWU61 = 1 << 27;
14191 const HWU62 = 1 << 28;
14193 const TBID = 1 << 29;
14195 const TCMA = 1 << 30;
14197 const MTX = 1 << 33;
14199 const AS = 1 << 36;
14201 const TBI0 = 1 << 37;
14203 const TBI1 = 1 << 38;
14205 const HPD0 = 1 << 41;
14207 const HPD1 = 1 << 42;
14209 const HWU059 = 1 << 43;
14211 const HWU060 = 1 << 44;
14213 const HWU061 = 1 << 45;
14215 const HWU062 = 1 << 46;
14217 const HWU159 = 1 << 47;
14219 const HWU160 = 1 << 48;
14221 const HWU161 = 1 << 49;
14223 const HWU162 = 1 << 50;
14225 const TBID0 = 1 << 51;
14227 const TBID1 = 1 << 52;
14229 const NFD0 = 1 << 53;
14231 const TVAD = 1 << 53;
14233 const NFD1 = 1 << 54;
14235 const E0PD0 = 1 << 55;
14237 const E0PD1 = 1 << 56;
14239 const TCMA0 = 1 << 57;
14241 const TCMA1 = 1 << 58;
14243 const MTX0 = 1 << 60;
14245 const MTX1 = 1 << 61;
14247 }
14248}
14249
14250#[cfg(feature = "el2")]
14251impl TcrEl2 {
14252 pub const T0SZ_SHIFT: u32 = 0;
14254 pub const T0SZ_MASK: u64 = 0b111111;
14256 pub const EPD0_SHIFT: u32 = 7;
14258 pub const IRGN0_SHIFT: u32 = 8;
14260 pub const IRGN0_MASK: u64 = 0b11;
14262 pub const ORGN0_SHIFT: u32 = 10;
14264 pub const ORGN0_MASK: u64 = 0b11;
14266 pub const SH0_SHIFT: u32 = 12;
14268 pub const SH0_MASK: u64 = 0b11;
14270 pub const TG0_SHIFT: u32 = 14;
14272 pub const TG0_MASK: u64 = 0b11;
14274 pub const PS_SHIFT: u32 = 16;
14276 pub const PS_MASK: u64 = 0b111;
14278 pub const T1SZ_SHIFT: u32 = 16;
14280 pub const T1SZ_MASK: u64 = 0b111111;
14282 pub const TBI_SHIFT: u32 = 20;
14284 pub const A1_SHIFT: u32 = 22;
14286 pub const EPD1_SHIFT: u32 = 23;
14288 pub const HPD_SHIFT: u32 = 24;
14290 pub const IRGN1_SHIFT: u32 = 24;
14292 pub const IRGN1_MASK: u64 = 0b11;
14294 pub const HWU59_SHIFT: u32 = 25;
14296 pub const HWU60_SHIFT: u32 = 26;
14298 pub const ORGN1_SHIFT: u32 = 26;
14300 pub const ORGN1_MASK: u64 = 0b11;
14302 pub const HWU61_SHIFT: u32 = 27;
14304 pub const HWU62_SHIFT: u32 = 28;
14306 pub const SH1_SHIFT: u32 = 28;
14308 pub const SH1_MASK: u64 = 0b11;
14310 pub const TBID_SHIFT: u32 = 29;
14312 pub const TCMA_SHIFT: u32 = 30;
14314 pub const TG1_SHIFT: u32 = 30;
14316 pub const TG1_MASK: u64 = 0b11;
14318 pub const IPS_SHIFT: u32 = 32;
14320 pub const IPS_MASK: u64 = 0b111;
14322 pub const MTX_SHIFT: u32 = 33;
14324 pub const AS_SHIFT: u32 = 36;
14326 pub const TBI0_SHIFT: u32 = 37;
14328 pub const TBI1_SHIFT: u32 = 38;
14330 pub const HPD0_SHIFT: u32 = 41;
14332 pub const HPD1_SHIFT: u32 = 42;
14334 pub const HWU059_SHIFT: u32 = 43;
14336 pub const HWU060_SHIFT: u32 = 44;
14338 pub const HWU061_SHIFT: u32 = 45;
14340 pub const HWU062_SHIFT: u32 = 46;
14342 pub const HWU159_SHIFT: u32 = 47;
14344 pub const HWU160_SHIFT: u32 = 48;
14346 pub const VTB_SHIFT: u32 = 48;
14348 pub const VTB_MASK: u64 = 0b11111;
14350 pub const HWU161_SHIFT: u32 = 49;
14352 pub const HWU162_SHIFT: u32 = 50;
14354 pub const TBID0_SHIFT: u32 = 51;
14356 pub const TBID1_SHIFT: u32 = 52;
14358 pub const NFD0_SHIFT: u32 = 53;
14360 pub const TVAD_SHIFT: u32 = 53;
14362 pub const NFD1_SHIFT: u32 = 54;
14364 pub const E0PD0_SHIFT: u32 = 55;
14366 pub const E0PD1_SHIFT: u32 = 56;
14368 pub const TCMA0_SHIFT: u32 = 57;
14370 pub const TCMA1_SHIFT: u32 = 58;
14372 pub const MTX0_SHIFT: u32 = 60;
14374 pub const MTX1_SHIFT: u32 = 61;
14376
14377 pub const fn t0sz(self) -> u8 {
14379 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
14380 }
14381
14382 pub const fn irgn0(self) -> u8 {
14384 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
14385 }
14386
14387 pub const fn orgn0(self) -> u8 {
14389 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
14390 }
14391
14392 pub const fn sh0(self) -> u8 {
14394 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
14395 }
14396
14397 pub const fn tg0(self) -> u8 {
14399 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
14400 }
14401
14402 pub const fn ps(self) -> u8 {
14404 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
14405 }
14406
14407 pub const fn t1sz(self) -> u8 {
14409 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
14410 }
14411
14412 pub const fn irgn1(self) -> u8 {
14414 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
14415 }
14416
14417 pub const fn orgn1(self) -> u8 {
14419 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
14420 }
14421
14422 pub const fn sh1(self) -> u8 {
14424 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
14425 }
14426
14427 pub const fn tg1(self) -> u8 {
14429 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
14430 }
14431
14432 pub const fn ips(self) -> u8 {
14434 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
14435 }
14436
14437 pub const fn vtb(self) -> u8 {
14439 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
14440 }
14441}
14442
14443#[cfg(feature = "el3")]
14444bitflags! {
14445 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14447 #[repr(transparent)]
14448 pub struct TcrEl3: u64 {
14449 const RES1 = 0b10000000100000000000000000000000;
14451 const TBI = 1 << 20;
14453 const HA = 1 << 21;
14455 const HD = 1 << 22;
14457 const HPD = 1 << 24;
14459 const HWU59 = 1 << 25;
14461 const HWU60 = 1 << 26;
14463 const HWU61 = 1 << 27;
14465 const HWU62 = 1 << 28;
14467 const TBID = 1 << 29;
14469 const TCMA = 1 << 30;
14471 const DS = 1 << 32;
14473 const MTX = 1 << 33;
14475 const PNCH = 1 << 34;
14477 const PIE = 1 << 35;
14479 const POE = 1 << 36;
14481 const AIE = 1 << 37;
14483 const D128 = 1 << 38;
14485 const PTTWI = 1 << 41;
14487 const HAFT = 1 << 42;
14489 const DISCH0 = 1 << 43;
14491 const POE2F = 1 << 44;
14493 const TVAD = 1 << 53;
14495 }
14496}
14497
14498#[cfg(feature = "el3")]
14499impl TcrEl3 {
14500 pub const T0SZ_SHIFT: u32 = 0;
14502 pub const T0SZ_MASK: u64 = 0b111111;
14504 pub const IRGN0_SHIFT: u32 = 8;
14506 pub const IRGN0_MASK: u64 = 0b11;
14508 pub const ORGN0_SHIFT: u32 = 10;
14510 pub const ORGN0_MASK: u64 = 0b11;
14512 pub const SH0_SHIFT: u32 = 12;
14514 pub const SH0_MASK: u64 = 0b11;
14516 pub const TG0_SHIFT: u32 = 14;
14518 pub const TG0_MASK: u64 = 0b11;
14520 pub const PS_SHIFT: u32 = 16;
14522 pub const PS_MASK: u64 = 0b111;
14524 pub const TBI_SHIFT: u32 = 20;
14526 pub const HA_SHIFT: u32 = 21;
14528 pub const HD_SHIFT: u32 = 22;
14530 pub const HPD_SHIFT: u32 = 24;
14532 pub const HWU59_SHIFT: u32 = 25;
14534 pub const HWU60_SHIFT: u32 = 26;
14536 pub const HWU61_SHIFT: u32 = 27;
14538 pub const HWU62_SHIFT: u32 = 28;
14540 pub const TBID_SHIFT: u32 = 29;
14542 pub const TCMA_SHIFT: u32 = 30;
14544 pub const DS_SHIFT: u32 = 32;
14546 pub const MTX_SHIFT: u32 = 33;
14548 pub const PNCH_SHIFT: u32 = 34;
14550 pub const PIE_SHIFT: u32 = 35;
14552 pub const POE_SHIFT: u32 = 36;
14554 pub const AIE_SHIFT: u32 = 37;
14556 pub const D128_SHIFT: u32 = 38;
14558 pub const PTTWI_SHIFT: u32 = 41;
14560 pub const HAFT_SHIFT: u32 = 42;
14562 pub const DISCH0_SHIFT: u32 = 43;
14564 pub const POE2F_SHIFT: u32 = 44;
14566 pub const POIW_SHIFT: u32 = 45;
14568 pub const POIW_MASK: u64 = 0b111;
14570 pub const VTB_SHIFT: u32 = 48;
14572 pub const VTB_MASK: u64 = 0b11111;
14574 pub const TVAD_SHIFT: u32 = 53;
14576
14577 pub const fn t0sz(self) -> u8 {
14579 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
14580 }
14581
14582 pub const fn irgn0(self) -> u8 {
14584 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
14585 }
14586
14587 pub const fn orgn0(self) -> u8 {
14589 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
14590 }
14591
14592 pub const fn sh0(self) -> u8 {
14594 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
14595 }
14596
14597 pub const fn tg0(self) -> u8 {
14599 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
14600 }
14601
14602 pub const fn ps(self) -> u8 {
14604 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
14605 }
14606
14607 pub const fn poiw(self) -> u8 {
14609 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
14610 }
14611
14612 pub const fn vtb(self) -> u8 {
14614 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
14615 }
14616}
14617
14618#[cfg(feature = "el1")]
14619bitflags! {
14620 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14622 #[repr(transparent)]
14623 pub struct Tfsre0El1: u64 {
14624 const TF0 = 1 << 0;
14626 const TF1 = 1 << 1;
14628 }
14629}
14630
14631#[cfg(feature = "el1")]
14632impl Tfsre0El1 {
14633 pub const TF0_SHIFT: u32 = 0;
14635 pub const TF1_SHIFT: u32 = 1;
14637}
14638
14639#[cfg(feature = "el1")]
14640bitflags! {
14641 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14643 #[repr(transparent)]
14644 pub struct TfsrEl1: u64 {
14645 const TF0 = 1 << 0;
14647 const TF1 = 1 << 1;
14649 }
14650}
14651
14652#[cfg(feature = "el1")]
14653impl TfsrEl1 {
14654 pub const TF0_SHIFT: u32 = 0;
14656 pub const TF1_SHIFT: u32 = 1;
14658}
14659
14660#[cfg(feature = "el2")]
14661bitflags! {
14662 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14664 #[repr(transparent)]
14665 pub struct TfsrEl2: u64 {
14666 const TF0 = 1 << 0;
14668 const TF1 = 1 << 1;
14670 }
14671}
14672
14673#[cfg(feature = "el2")]
14674impl TfsrEl2 {
14675 pub const TF0_SHIFT: u32 = 0;
14677 pub const TF1_SHIFT: u32 = 1;
14679}
14680
14681bitflags! {
14682 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14684 #[repr(transparent)]
14685 pub struct Tlbtr: u32 {
14686 const NU = 1 << 0;
14688 }
14689}
14690
14691impl Tlbtr {
14692 pub const NU_SHIFT: u32 = 0;
14694}
14695
14696bitflags! {
14697 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14699 #[repr(transparent)]
14700 pub struct Tpidrprw: u32 {
14701 }
14702}
14703
14704impl Tpidrprw {
14705 pub const TID_SHIFT: u32 = 0;
14707 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
14709
14710 pub const fn tid(self) -> u32 {
14712 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
14713 }
14714}
14715
14716bitflags! {
14717 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14719 #[repr(transparent)]
14720 pub struct TpidrroEl0: u64 {
14721 }
14722}
14723
14724impl TpidrroEl0 {
14725 pub const THREADID_SHIFT: u32 = 0;
14727 pub const THREADID_MASK: u64 =
14729 0b1111111111111111111111111111111111111111111111111111111111111111;
14730
14731 pub const fn threadid(self) -> u64 {
14733 ((self.bits() >> Self::THREADID_SHIFT)
14734 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
14735 }
14736}
14737
14738bitflags! {
14739 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14741 #[repr(transparent)]
14742 pub struct Tpidruro: u32 {
14743 }
14744}
14745
14746impl Tpidruro {
14747 pub const TID_SHIFT: u32 = 0;
14749 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
14751
14752 pub const fn tid(self) -> u32 {
14754 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
14755 }
14756}
14757
14758bitflags! {
14759 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14761 #[repr(transparent)]
14762 pub struct Tpidrurw: u32 {
14763 }
14764}
14765
14766impl Tpidrurw {
14767 pub const TID_SHIFT: u32 = 0;
14769 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
14771
14772 pub const fn tid(self) -> u32 {
14774 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
14775 }
14776}
14777
14778bitflags! {
14779 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14781 #[repr(transparent)]
14782 pub struct TpidrEl0: u64 {
14783 }
14784}
14785
14786impl TpidrEl0 {
14787 pub const THREADID_SHIFT: u32 = 0;
14789 pub const THREADID_MASK: u64 =
14791 0b1111111111111111111111111111111111111111111111111111111111111111;
14792
14793 pub const fn threadid(self) -> u64 {
14795 ((self.bits() >> Self::THREADID_SHIFT)
14796 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
14797 }
14798}
14799
14800#[cfg(feature = "el1")]
14801bitflags! {
14802 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14804 #[repr(transparent)]
14805 pub struct TpidrEl1: u64 {
14806 }
14807}
14808
14809#[cfg(feature = "el1")]
14810impl TpidrEl1 {
14811 pub const THREADID_SHIFT: u32 = 0;
14813 pub const THREADID_MASK: u64 =
14815 0b1111111111111111111111111111111111111111111111111111111111111111;
14816
14817 pub const fn threadid(self) -> u64 {
14819 ((self.bits() >> Self::THREADID_SHIFT)
14820 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
14821 }
14822}
14823
14824#[cfg(feature = "el2")]
14825bitflags! {
14826 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14828 #[repr(transparent)]
14829 pub struct TpidrEl2: u64 {
14830 }
14831}
14832
14833#[cfg(feature = "el2")]
14834impl TpidrEl2 {
14835 pub const THREADID_SHIFT: u32 = 0;
14837 pub const THREADID_MASK: u64 =
14839 0b1111111111111111111111111111111111111111111111111111111111111111;
14840
14841 pub const fn threadid(self) -> u64 {
14843 ((self.bits() >> Self::THREADID_SHIFT)
14844 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
14845 }
14846}
14847
14848bitflags! {
14849 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14851 #[repr(transparent)]
14852 pub struct Trfcr: u32 {
14853 const E0TRE = 1 << 0;
14855 const E1TRE = 1 << 1;
14857 }
14858}
14859
14860impl Trfcr {
14861 pub const E0TRE_SHIFT: u32 = 0;
14863 pub const E1TRE_SHIFT: u32 = 1;
14865 pub const TS_SHIFT: u32 = 5;
14867 pub const TS_MASK: u32 = 0b11;
14869
14870 pub const fn ts(self) -> u8 {
14872 ((self.bits() >> Self::TS_SHIFT) & 0b11) as u8
14873 }
14874}
14875
14876bitflags! {
14877 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14879 #[repr(transparent)]
14880 pub struct Ttbcr: u32 {
14881 const PD0 = 1 << 4;
14883 const PD1 = 1 << 5;
14885 const T2E = 1 << 6;
14887 const EPD0 = 1 << 7;
14889 const A1 = 1 << 22;
14891 const EPD1 = 1 << 23;
14893 const EAE = 1 << 31;
14895 }
14896}
14897
14898impl Ttbcr {
14899 pub const N_SHIFT: u32 = 0;
14901 pub const N_MASK: u32 = 0b111;
14903 pub const T0SZ_SHIFT: u32 = 0;
14905 pub const T0SZ_MASK: u32 = 0b111;
14907 pub const PD0_SHIFT: u32 = 4;
14909 pub const PD1_SHIFT: u32 = 5;
14911 pub const T2E_SHIFT: u32 = 6;
14913 pub const EPD0_SHIFT: u32 = 7;
14915 pub const IRGN0_SHIFT: u32 = 8;
14917 pub const IRGN0_MASK: u32 = 0b11;
14919 pub const ORGN0_SHIFT: u32 = 10;
14921 pub const ORGN0_MASK: u32 = 0b11;
14923 pub const SH0_SHIFT: u32 = 12;
14925 pub const SH0_MASK: u32 = 0b11;
14927 pub const T1SZ_SHIFT: u32 = 16;
14929 pub const T1SZ_MASK: u32 = 0b111;
14931 pub const A1_SHIFT: u32 = 22;
14933 pub const EPD1_SHIFT: u32 = 23;
14935 pub const IRGN1_SHIFT: u32 = 24;
14937 pub const IRGN1_MASK: u32 = 0b11;
14939 pub const ORGN1_SHIFT: u32 = 26;
14941 pub const ORGN1_MASK: u32 = 0b11;
14943 pub const SH1_SHIFT: u32 = 28;
14945 pub const SH1_MASK: u32 = 0b11;
14947 pub const EAE_SHIFT: u32 = 31;
14949
14950 pub const fn n(self) -> u8 {
14952 ((self.bits() >> Self::N_SHIFT) & 0b111) as u8
14953 }
14954
14955 pub const fn t0sz(self) -> u8 {
14957 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111) as u8
14958 }
14959
14960 pub const fn irgn0(self) -> u8 {
14962 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
14963 }
14964
14965 pub const fn orgn0(self) -> u8 {
14967 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
14968 }
14969
14970 pub const fn sh0(self) -> u8 {
14972 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
14973 }
14974
14975 pub const fn t1sz(self) -> u8 {
14977 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111) as u8
14978 }
14979
14980 pub const fn irgn1(self) -> u8 {
14982 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
14983 }
14984
14985 pub const fn orgn1(self) -> u8 {
14987 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
14988 }
14989
14990 pub const fn sh1(self) -> u8 {
14992 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
14993 }
14994}
14995
14996bitflags! {
14997 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
14999 #[repr(transparent)]
15000 pub struct Ttbcr2: u32 {
15001 const HPD0 = 1 << 9;
15003 const HPD1 = 1 << 10;
15005 const HWU059 = 1 << 11;
15007 const HWU060 = 1 << 12;
15009 const HWU061 = 1 << 13;
15011 const HWU062 = 1 << 14;
15013 const HWU159 = 1 << 15;
15015 const HWU160 = 1 << 16;
15017 const HWU161 = 1 << 17;
15019 const HWU162 = 1 << 18;
15021 }
15022}
15023
15024impl Ttbcr2 {
15025 pub const HPD0_SHIFT: u32 = 9;
15027 pub const HPD1_SHIFT: u32 = 10;
15029 pub const HWU059_SHIFT: u32 = 11;
15031 pub const HWU060_SHIFT: u32 = 12;
15033 pub const HWU061_SHIFT: u32 = 13;
15035 pub const HWU062_SHIFT: u32 = 14;
15037 pub const HWU159_SHIFT: u32 = 15;
15039 pub const HWU160_SHIFT: u32 = 16;
15041 pub const HWU161_SHIFT: u32 = 17;
15043 pub const HWU162_SHIFT: u32 = 18;
15045}
15046
15047bitflags! {
15048 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15050 #[repr(transparent)]
15051 pub struct Ttbr0: u64 {
15052 const CNP = 1 << 0;
15054 const S = 1 << 1;
15056 const IMP = 1 << 2;
15058 const NOS = 1 << 5;
15060 }
15061}
15062
15063impl Ttbr0 {
15064 pub const CNP_SHIFT: u32 = 0;
15066 pub const BADDR_SHIFT: u32 = 1;
15068 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
15070 pub const S_SHIFT: u32 = 1;
15072 pub const IMP_SHIFT: u32 = 2;
15074 pub const RGN_SHIFT: u32 = 3;
15076 pub const RGN_MASK: u64 = 0b11;
15078 pub const NOS_SHIFT: u32 = 5;
15080 pub const TTB0_SHIFT: u32 = 7;
15082 pub const TTB0_MASK: u64 = 0b1111111111111111111111111;
15084 pub const ASID_SHIFT: u32 = 48;
15086 pub const ASID_MASK: u64 = 0b11111111;
15088
15089 pub const fn baddr(self) -> u64 {
15091 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
15092 as u64
15093 }
15094
15095 pub const fn rgn(self) -> u8 {
15097 ((self.bits() >> Self::RGN_SHIFT) & 0b11) as u8
15098 }
15099
15100 pub const fn ttb0(self) -> u32 {
15102 ((self.bits() >> Self::TTB0_SHIFT) & 0b1111111111111111111111111) as u32
15103 }
15104
15105 pub const fn asid(self) -> u8 {
15107 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
15108 }
15109}
15110
15111#[cfg(feature = "el1")]
15112bitflags! {
15113 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15115 #[repr(transparent)]
15116 pub struct Ttbr0El1: u64 {
15117 const CNP = 1 << 0;
15119 }
15120}
15121
15122#[cfg(feature = "el1")]
15123impl Ttbr0El1 {
15124 pub const CNP_SHIFT: u32 = 0;
15126 pub const BADDR_47_1_SHIFT: u32 = 1;
15128 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
15130 pub const SKL_SHIFT: u32 = 1;
15132 pub const SKL_MASK: u64 = 0b11;
15134 pub const ASID_SHIFT: u32 = 48;
15136 pub const ASID_MASK: u64 = 0b1111111111111111;
15138
15139 pub const fn baddr_47_1(self) -> u64 {
15141 ((self.bits() >> Self::BADDR_47_1_SHIFT)
15142 & 0b11111111111111111111111111111111111111111111111) as u64
15143 }
15144
15145 pub const fn skl(self) -> u8 {
15147 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
15148 }
15149
15150 pub const fn asid(self) -> u16 {
15152 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
15153 }
15154}
15155
15156#[cfg(feature = "el2")]
15157bitflags! {
15158 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15160 #[repr(transparent)]
15161 pub struct Ttbr0El2: u64 {
15162 const CNP = 1 << 0;
15164 }
15165}
15166
15167#[cfg(feature = "el2")]
15168impl Ttbr0El2 {
15169 pub const CNP_SHIFT: u32 = 0;
15171 pub const BADDR_47_1_SHIFT: u32 = 1;
15173 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
15175 pub const SKL_SHIFT: u32 = 1;
15177 pub const SKL_MASK: u64 = 0b11;
15179 pub const ASID_SHIFT: u32 = 48;
15181 pub const ASID_MASK: u64 = 0b1111111111111111;
15183
15184 pub const fn baddr_47_1(self) -> u64 {
15186 ((self.bits() >> Self::BADDR_47_1_SHIFT)
15187 & 0b11111111111111111111111111111111111111111111111) as u64
15188 }
15189
15190 pub const fn skl(self) -> u8 {
15192 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
15193 }
15194
15195 pub const fn asid(self) -> u16 {
15197 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
15198 }
15199}
15200
15201#[cfg(feature = "el3")]
15202bitflags! {
15203 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15205 #[repr(transparent)]
15206 pub struct Ttbr0El3: u64 {
15207 const CNP = 1 << 0;
15209 }
15210}
15211
15212#[cfg(feature = "el3")]
15213impl Ttbr0El3 {
15214 pub const CNP_SHIFT: u32 = 0;
15216 pub const SKL_SHIFT: u32 = 1;
15218 pub const SKL_MASK: u64 = 0b11;
15220
15221 pub const fn skl(self) -> u8 {
15223 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
15224 }
15225}
15226
15227bitflags! {
15228 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15230 #[repr(transparent)]
15231 pub struct Ttbr1: u64 {
15232 const CNP = 1 << 0;
15234 const S = 1 << 1;
15236 const IMP = 1 << 2;
15238 const NOS = 1 << 5;
15240 }
15241}
15242
15243impl Ttbr1 {
15244 pub const CNP_SHIFT: u32 = 0;
15246 pub const BADDR_SHIFT: u32 = 1;
15248 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
15250 pub const S_SHIFT: u32 = 1;
15252 pub const IMP_SHIFT: u32 = 2;
15254 pub const RGN_SHIFT: u32 = 3;
15256 pub const RGN_MASK: u64 = 0b11;
15258 pub const NOS_SHIFT: u32 = 5;
15260 pub const TTB1_SHIFT: u32 = 7;
15262 pub const TTB1_MASK: u64 = 0b1111111111111111111111111;
15264 pub const ASID_SHIFT: u32 = 48;
15266 pub const ASID_MASK: u64 = 0b11111111;
15268
15269 pub const fn baddr(self) -> u64 {
15271 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
15272 as u64
15273 }
15274
15275 pub const fn rgn(self) -> u8 {
15277 ((self.bits() >> Self::RGN_SHIFT) & 0b11) as u8
15278 }
15279
15280 pub const fn ttb1(self) -> u32 {
15282 ((self.bits() >> Self::TTB1_SHIFT) & 0b1111111111111111111111111) as u32
15283 }
15284
15285 pub const fn asid(self) -> u8 {
15287 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
15288 }
15289}
15290
15291#[cfg(feature = "el1")]
15292bitflags! {
15293 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15295 #[repr(transparent)]
15296 pub struct Ttbr1El1: u64 {
15297 const CNP = 1 << 0;
15299 }
15300}
15301
15302#[cfg(feature = "el1")]
15303impl Ttbr1El1 {
15304 pub const CNP_SHIFT: u32 = 0;
15306 pub const BADDR_47_1_SHIFT: u32 = 1;
15308 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
15310 pub const SKL_SHIFT: u32 = 1;
15312 pub const SKL_MASK: u64 = 0b11;
15314 pub const ASID_SHIFT: u32 = 48;
15316 pub const ASID_MASK: u64 = 0b1111111111111111;
15318
15319 pub const fn baddr_47_1(self) -> u64 {
15321 ((self.bits() >> Self::BADDR_47_1_SHIFT)
15322 & 0b11111111111111111111111111111111111111111111111) as u64
15323 }
15324
15325 pub const fn skl(self) -> u8 {
15327 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
15328 }
15329
15330 pub const fn asid(self) -> u16 {
15332 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
15333 }
15334}
15335
15336#[cfg(feature = "el2")]
15337bitflags! {
15338 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15340 #[repr(transparent)]
15341 pub struct Ttbr1El2: u64 {
15342 const CNP = 1 << 0;
15344 }
15345}
15346
15347#[cfg(feature = "el2")]
15348impl Ttbr1El2 {
15349 pub const CNP_SHIFT: u32 = 0;
15351 pub const BADDR_47_1_SHIFT: u32 = 1;
15353 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
15355 pub const SKL_SHIFT: u32 = 1;
15357 pub const SKL_MASK: u64 = 0b11;
15359 pub const ASID_SHIFT: u32 = 48;
15361 pub const ASID_MASK: u64 = 0b1111111111111111;
15363
15364 pub const fn baddr_47_1(self) -> u64 {
15366 ((self.bits() >> Self::BADDR_47_1_SHIFT)
15367 & 0b11111111111111111111111111111111111111111111111) as u64
15368 }
15369
15370 pub const fn skl(self) -> u8 {
15372 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
15373 }
15374
15375 pub const fn asid(self) -> u16 {
15377 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
15378 }
15379}
15380
15381bitflags! {
15382 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15384 #[repr(transparent)]
15385 pub struct Vbar: u32 {
15386 }
15387}
15388
15389impl Vbar {
15390 pub const VBA_SHIFT: u32 = 5;
15392 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
15394
15395 pub const fn vba(self) -> u32 {
15397 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
15398 }
15399}
15400
15401#[cfg(feature = "el1")]
15402bitflags! {
15403 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15405 #[repr(transparent)]
15406 pub struct VbarEl1: u64 {
15407 const UT = 1 << 0;
15409 }
15410}
15411
15412#[cfg(feature = "el1")]
15413impl VbarEl1 {
15414 pub const UT_SHIFT: u32 = 0;
15416 pub const VBA_SHIFT: u32 = 11;
15418 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
15420
15421 pub const fn vba(self) -> u64 {
15423 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
15424 as u64
15425 }
15426}
15427
15428#[cfg(feature = "el2")]
15429bitflags! {
15430 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15432 #[repr(transparent)]
15433 pub struct VbarEl2: u64 {
15434 const UT = 1 << 0;
15436 }
15437}
15438
15439#[cfg(feature = "el2")]
15440impl VbarEl2 {
15441 pub const UT_SHIFT: u32 = 0;
15443 pub const VBA_SHIFT: u32 = 11;
15445 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
15447
15448 pub const fn vba(self) -> u64 {
15450 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
15451 as u64
15452 }
15453}
15454
15455bitflags! {
15456 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15458 #[repr(transparent)]
15459 pub struct Vdfsr: u32 {
15460 const EXT = 1 << 12;
15462 }
15463}
15464
15465impl Vdfsr {
15466 pub const EXT_SHIFT: u32 = 12;
15468 pub const AET_SHIFT: u32 = 14;
15470 pub const AET_MASK: u32 = 0b11;
15472
15473 pub const fn aet(self) -> u8 {
15475 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
15476 }
15477}
15478
15479bitflags! {
15480 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15482 #[repr(transparent)]
15483 pub struct Vdisr: u32 {
15484 const LPAE = 1 << 9;
15486 const EXT = 1 << 12;
15488 const A = 1 << 31;
15490 }
15491}
15492
15493impl Vdisr {
15494 pub const STATUS_SHIFT: u32 = 0;
15496 pub const STATUS_MASK: u32 = 0b111111;
15498 pub const LPAE_SHIFT: u32 = 9;
15500 pub const EXT_SHIFT: u32 = 12;
15502 pub const AET_SHIFT: u32 = 14;
15504 pub const AET_MASK: u32 = 0b11;
15506 pub const A_SHIFT: u32 = 31;
15508
15509 pub const fn status(self) -> u8 {
15511 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
15512 }
15513
15514 pub const fn aet(self) -> u8 {
15516 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
15517 }
15518}
15519
15520#[cfg(feature = "el2")]
15521bitflags! {
15522 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15524 #[repr(transparent)]
15525 pub struct VdisrEl2: u64 {
15526 const LPAE = 1 << 9;
15528 const EXT = 1 << 12;
15530 const IDS = 1 << 24;
15532 const A = 1 << 31;
15534 }
15535}
15536
15537#[cfg(feature = "el2")]
15538impl VdisrEl2 {
15539 pub const ISS_SHIFT: u32 = 0;
15541 pub const ISS_MASK: u64 = 0b111111111111111111111111;
15543 pub const STATUS_SHIFT: u32 = 0;
15545 pub const STATUS_MASK: u64 = 0b111111;
15547 pub const LPAE_SHIFT: u32 = 9;
15549 pub const EXT_SHIFT: u32 = 12;
15551 pub const AET_SHIFT: u32 = 14;
15553 pub const AET_MASK: u64 = 0b11;
15555 pub const IDS_SHIFT: u32 = 24;
15557 pub const A_SHIFT: u32 = 31;
15559
15560 pub const fn iss(self) -> u32 {
15562 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
15563 }
15564
15565 pub const fn status(self) -> u8 {
15567 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
15568 }
15569
15570 pub const fn aet(self) -> u8 {
15572 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
15573 }
15574}
15575
15576bitflags! {
15577 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15579 #[repr(transparent)]
15580 pub struct Vmpidr: u32 {
15581 const MT = 1 << 24;
15583 const U = 1 << 30;
15585 const M = 1 << 31;
15587 }
15588}
15589
15590impl Vmpidr {
15591 pub const AFF0_SHIFT: u32 = 0;
15593 pub const AFF0_MASK: u32 = 0b11111111;
15595 pub const AFF1_SHIFT: u32 = 8;
15597 pub const AFF1_MASK: u32 = 0b11111111;
15599 pub const AFF2_SHIFT: u32 = 16;
15601 pub const AFF2_MASK: u32 = 0b11111111;
15603 pub const MT_SHIFT: u32 = 24;
15605 pub const U_SHIFT: u32 = 30;
15607 pub const M_SHIFT: u32 = 31;
15609
15610 pub const fn aff0(self) -> u8 {
15612 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
15613 }
15614
15615 pub const fn aff1(self) -> u8 {
15617 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
15618 }
15619
15620 pub const fn aff2(self) -> u8 {
15622 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
15623 }
15624}
15625
15626#[cfg(feature = "el2")]
15627bitflags! {
15628 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15630 #[repr(transparent)]
15631 pub struct VmpidrEl2: u64 {
15632 const RES1 = 0b10000000000000000000000000000000;
15634 const MT = 1 << 24;
15636 const U = 1 << 30;
15638 }
15639}
15640
15641#[cfg(feature = "el2")]
15642impl VmpidrEl2 {
15643 pub const AFF0_SHIFT: u32 = 0;
15645 pub const AFF0_MASK: u64 = 0b11111111;
15647 pub const AFF1_SHIFT: u32 = 8;
15649 pub const AFF1_MASK: u64 = 0b11111111;
15651 pub const AFF2_SHIFT: u32 = 16;
15653 pub const AFF2_MASK: u64 = 0b11111111;
15655 pub const MT_SHIFT: u32 = 24;
15657 pub const U_SHIFT: u32 = 30;
15659 pub const AFF3_SHIFT: u32 = 32;
15661 pub const AFF3_MASK: u64 = 0b11111111;
15663
15664 pub const fn aff0(self) -> u8 {
15666 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
15667 }
15668
15669 pub const fn aff1(self) -> u8 {
15671 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
15672 }
15673
15674 pub const fn aff2(self) -> u8 {
15676 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
15677 }
15678
15679 pub const fn aff3(self) -> u8 {
15681 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
15682 }
15683}
15684
15685bitflags! {
15686 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15688 #[repr(transparent)]
15689 pub struct Vpidr: u32 {
15690 }
15691}
15692
15693impl Vpidr {
15694 pub const REVISION_SHIFT: u32 = 0;
15696 pub const REVISION_MASK: u32 = 0b1111;
15698 pub const PARTNUM_SHIFT: u32 = 4;
15700 pub const PARTNUM_MASK: u32 = 0b111111111111;
15702 pub const ARCHITECTURE_SHIFT: u32 = 16;
15704 pub const ARCHITECTURE_MASK: u32 = 0b1111;
15706 pub const VARIANT_SHIFT: u32 = 20;
15708 pub const VARIANT_MASK: u32 = 0b1111;
15710 pub const IMPLEMENTER_SHIFT: u32 = 24;
15712 pub const IMPLEMENTER_MASK: u32 = 0b11111111;
15714
15715 pub const fn revision(self) -> u8 {
15717 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
15718 }
15719
15720 pub const fn partnum(self) -> u16 {
15722 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
15723 }
15724
15725 pub const fn architecture(self) -> u8 {
15727 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
15728 }
15729
15730 pub const fn variant(self) -> u8 {
15732 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
15733 }
15734
15735 pub const fn implementer(self) -> u8 {
15737 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
15738 }
15739}
15740
15741#[cfg(feature = "el2")]
15742bitflags! {
15743 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15745 #[repr(transparent)]
15746 pub struct VpidrEl2: u64 {
15747 }
15748}
15749
15750#[cfg(feature = "el2")]
15751impl VpidrEl2 {
15752 pub const REVISION_SHIFT: u32 = 0;
15754 pub const REVISION_MASK: u64 = 0b1111;
15756 pub const PARTNUM_SHIFT: u32 = 4;
15758 pub const PARTNUM_MASK: u64 = 0b111111111111;
15760 pub const ARCHITECTURE_SHIFT: u32 = 16;
15762 pub const ARCHITECTURE_MASK: u64 = 0b1111;
15764 pub const VARIANT_SHIFT: u32 = 20;
15766 pub const VARIANT_MASK: u64 = 0b1111;
15768 pub const IMPLEMENTER_SHIFT: u32 = 24;
15770 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
15772
15773 pub const fn revision(self) -> u8 {
15775 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
15776 }
15777
15778 pub const fn partnum(self) -> u16 {
15780 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
15781 }
15782
15783 pub const fn architecture(self) -> u8 {
15785 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
15786 }
15787
15788 pub const fn variant(self) -> u8 {
15790 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
15791 }
15792
15793 pub const fn implementer(self) -> u8 {
15795 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
15796 }
15797}
15798
15799#[cfg(feature = "el2")]
15800bitflags! {
15801 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15803 #[repr(transparent)]
15804 pub struct VsesrEl2: u64 {
15805 const EXT = 1 << 12;
15807 const IDS = 1 << 24;
15809 }
15810}
15811
15812#[cfg(feature = "el2")]
15813impl VsesrEl2 {
15814 pub const ISS_SHIFT: u32 = 0;
15816 pub const ISS_MASK: u64 = 0b111111111111111111111111;
15818 pub const EXT_SHIFT: u32 = 12;
15820 pub const AET_SHIFT: u32 = 14;
15822 pub const AET_MASK: u64 = 0b11;
15824 pub const IDS_SHIFT: u32 = 24;
15826
15827 pub const fn iss(self) -> u32 {
15829 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
15830 }
15831
15832 pub const fn aet(self) -> u8 {
15834 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
15835 }
15836}
15837
15838bitflags! {
15839 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15841 #[repr(transparent)]
15842 pub struct Vtcr: u32 {
15843 const RES1 = 0b10000000000000000000000000000000;
15845 const S = 1 << 4;
15847 const HWU59 = 1 << 25;
15849 const HWU60 = 1 << 26;
15851 const HWU61 = 1 << 27;
15853 const HWU62 = 1 << 28;
15855 }
15856}
15857
15858impl Vtcr {
15859 pub const T0SZ_SHIFT: u32 = 0;
15861 pub const T0SZ_MASK: u32 = 0b1111;
15863 pub const S_SHIFT: u32 = 4;
15865 pub const SL0_SHIFT: u32 = 6;
15867 pub const SL0_MASK: u32 = 0b11;
15869 pub const IRGN0_SHIFT: u32 = 8;
15871 pub const IRGN0_MASK: u32 = 0b11;
15873 pub const ORGN0_SHIFT: u32 = 10;
15875 pub const ORGN0_MASK: u32 = 0b11;
15877 pub const SH0_SHIFT: u32 = 12;
15879 pub const SH0_MASK: u32 = 0b11;
15881 pub const HWU59_SHIFT: u32 = 25;
15883 pub const HWU60_SHIFT: u32 = 26;
15885 pub const HWU61_SHIFT: u32 = 27;
15887 pub const HWU62_SHIFT: u32 = 28;
15889
15890 pub const fn t0sz(self) -> u8 {
15892 ((self.bits() >> Self::T0SZ_SHIFT) & 0b1111) as u8
15893 }
15894
15895 pub const fn sl0(self) -> u8 {
15897 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
15898 }
15899
15900 pub const fn irgn0(self) -> u8 {
15902 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
15903 }
15904
15905 pub const fn orgn0(self) -> u8 {
15907 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
15908 }
15909
15910 pub const fn sh0(self) -> u8 {
15912 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
15913 }
15914}
15915
15916#[cfg(feature = "el2")]
15917bitflags! {
15918 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
15920 #[repr(transparent)]
15921 pub struct VtcrEl2: u64 {
15922 const RES1 = 0b10000000000000000000000000000000;
15924 const VS = 1 << 19;
15926 const HA = 1 << 21;
15928 const HD = 1 << 22;
15930 const HWU59 = 1 << 25;
15932 const HWU60 = 1 << 26;
15934 const HWU61 = 1 << 27;
15936 const HWU62 = 1 << 28;
15938 const NSW = 1 << 29;
15940 const NSA = 1 << 30;
15942 const DS = 1 << 32;
15944 const SL2 = 1 << 33;
15946 const ASSUREDONLY = 1 << 34;
15948 const TL1 = 1 << 35;
15950 const S2PIE = 1 << 36;
15952 const S2POE = 1 << 37;
15954 const D128 = 1 << 38;
15956 const GCSH = 1 << 40;
15958 const TL0 = 1 << 41;
15960 const HAFT = 1 << 44;
15962 const HDBSS = 1 << 45;
15964 }
15965}
15966
15967#[cfg(feature = "el2")]
15968impl VtcrEl2 {
15969 pub const T0SZ_SHIFT: u32 = 0;
15971 pub const T0SZ_MASK: u64 = 0b111111;
15973 pub const SL0_SHIFT: u32 = 6;
15975 pub const SL0_MASK: u64 = 0b11;
15977 pub const IRGN0_SHIFT: u32 = 8;
15979 pub const IRGN0_MASK: u64 = 0b11;
15981 pub const ORGN0_SHIFT: u32 = 10;
15983 pub const ORGN0_MASK: u64 = 0b11;
15985 pub const SH0_SHIFT: u32 = 12;
15987 pub const SH0_MASK: u64 = 0b11;
15989 pub const TG0_SHIFT: u32 = 14;
15991 pub const TG0_MASK: u64 = 0b11;
15993 pub const PS_SHIFT: u32 = 16;
15995 pub const PS_MASK: u64 = 0b111;
15997 pub const VS_SHIFT: u32 = 19;
15999 pub const HA_SHIFT: u32 = 21;
16001 pub const HD_SHIFT: u32 = 22;
16003 pub const HWU59_SHIFT: u32 = 25;
16005 pub const HWU60_SHIFT: u32 = 26;
16007 pub const HWU61_SHIFT: u32 = 27;
16009 pub const HWU62_SHIFT: u32 = 28;
16011 pub const NSW_SHIFT: u32 = 29;
16013 pub const NSA_SHIFT: u32 = 30;
16015 pub const DS_SHIFT: u32 = 32;
16017 pub const SL2_SHIFT: u32 = 33;
16019 pub const ASSUREDONLY_SHIFT: u32 = 34;
16021 pub const TL1_SHIFT: u32 = 35;
16023 pub const S2PIE_SHIFT: u32 = 36;
16025 pub const S2POE_SHIFT: u32 = 37;
16027 pub const D128_SHIFT: u32 = 38;
16029 pub const GCSH_SHIFT: u32 = 40;
16031 pub const TL0_SHIFT: u32 = 41;
16033 pub const HAFT_SHIFT: u32 = 44;
16035 pub const HDBSS_SHIFT: u32 = 45;
16037
16038 pub const fn t0sz(self) -> u8 {
16040 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
16041 }
16042
16043 pub const fn sl0(self) -> u8 {
16045 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
16046 }
16047
16048 pub const fn irgn0(self) -> u8 {
16050 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
16051 }
16052
16053 pub const fn orgn0(self) -> u8 {
16055 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
16056 }
16057
16058 pub const fn sh0(self) -> u8 {
16060 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
16061 }
16062
16063 pub const fn tg0(self) -> u8 {
16065 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
16066 }
16067
16068 pub const fn ps(self) -> u8 {
16070 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
16071 }
16072}
16073
16074bitflags! {
16075 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
16077 #[repr(transparent)]
16078 pub struct Vttbr: u64 {
16079 const CNP = 1 << 0;
16081 }
16082}
16083
16084impl Vttbr {
16085 pub const CNP_SHIFT: u32 = 0;
16087 pub const BADDR_SHIFT: u32 = 1;
16089 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
16091 pub const VMID_SHIFT: u32 = 48;
16093 pub const VMID_MASK: u64 = 0b11111111;
16095
16096 pub const fn baddr(self) -> u64 {
16098 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
16099 as u64
16100 }
16101
16102 pub const fn vmid(self) -> u8 {
16104 ((self.bits() >> Self::VMID_SHIFT) & 0b11111111) as u8
16105 }
16106}
16107
16108#[cfg(feature = "el2")]
16109bitflags! {
16110 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
16112 #[repr(transparent)]
16113 pub struct VttbrEl2: u64 {
16114 const CNP = 1 << 0;
16116 }
16117}
16118
16119#[cfg(feature = "el2")]
16120impl VttbrEl2 {
16121 pub const CNP_SHIFT: u32 = 0;
16123 pub const BADDR_SHIFT: u32 = 1;
16125 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
16127 pub const SKL_SHIFT: u32 = 1;
16129 pub const SKL_MASK: u64 = 0b11;
16131 pub const VMID_SHIFT: u32 = 48;
16133 pub const VMID_MASK: u64 = 0b1111111111111111;
16135
16136 pub const fn baddr(self) -> u64 {
16138 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
16139 as u64
16140 }
16141
16142 pub const fn skl(self) -> u8 {
16144 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
16145 }
16146
16147 pub const fn vmid(self) -> u16 {
16149 ((self.bits() >> Self::VMID_SHIFT) & 0b1111111111111111) as u16
16150 }
16151}
16152
16153#[cfg(feature = "el3")]
16154bitflags! {
16155 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
16157 #[repr(transparent)]
16158 pub struct ZcrEl3: u64 {
16159 }
16160}
16161
16162#[cfg(feature = "el3")]
16163impl ZcrEl3 {
16164 pub const LEN_SHIFT: u32 = 0;
16166 pub const LEN_MASK: u64 = 0b1111;
16168
16169 pub const fn len(self) -> u8 {
16171 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
16172 }
16173}
16174
16175#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16176read_write_sysreg!(actlr: (p15, 0, c0, c1, 1), u32, safe_read, fake::SYSREGS);
16177#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16178read_write_sysreg!(actlr2: (p15, 0, c0, c1, 3), u32, safe_read, fake::SYSREGS);
16179#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16180read_write_sysreg!(actlr_el1, u64, safe_read, fake::SYSREGS);
16181#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16182read_write_sysreg!(actlr_el2, u64, safe_read, fake::SYSREGS);
16183#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16184read_write_sysreg!(adfsr: (p15, 0, c1, c5, 0), u32, safe_read, fake::SYSREGS);
16185#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16186read_write_sysreg!(afsr0_el1, u64, safe_read, fake::SYSREGS);
16187#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16188read_write_sysreg!(afsr0_el2, u64, safe_read, fake::SYSREGS);
16189#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16190read_write_sysreg!(afsr1_el1, u64, safe_read, fake::SYSREGS);
16191#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16192read_write_sysreg!(afsr1_el2, u64, safe_read, fake::SYSREGS);
16193#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16194read_sysreg!(aidr: (p15, 1, c0, c0, 7), u32, safe, fake::SYSREGS);
16195#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16196read_write_sysreg!(aifsr: (p15, 0, c1, c5, 1), u32, safe_read, fake::SYSREGS);
16197#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16198read_write_sysreg!(amair0: (p15, 0, c3, c10, 0), u32, safe_read, fake::SYSREGS);
16199#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16200read_write_sysreg!(amair1: (p15, 0, c3, c10, 1), u32, safe_read, fake::SYSREGS);
16201#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16202read_write_sysreg!(amair_el1, u64, safe_read, fake::SYSREGS);
16203#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16204read_write_sysreg!(amair_el2, u64, safe_read, fake::SYSREGS);
16205#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16206read_sysreg!(amcfgr: (p15, 0, c2, c13, 1), u32: Amcfgr, safe, fake::SYSREGS);
16207#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16208read_sysreg!(amcgcr: (p15, 0, c2, c13, 2), u32: Amcgcr, safe, fake::SYSREGS);
16209#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16210read_write_sysreg!(amcntenclr0: (p15, 0, c2, c13, 4), u32: Amcntenclr0, safe_read, fake::SYSREGS);
16211#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16212read_write_sysreg!(amcntenclr1: (p15, 0, c3, c13, 0), u32: Amcntenclr1, safe_read, fake::SYSREGS);
16213#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16214read_write_sysreg!(amcntenset0: (p15, 0, c2, c13, 5), u32: Amcntenset0, safe_read, fake::SYSREGS);
16215#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16216read_write_sysreg!(amcntenset1: (p15, 0, c3, c13, 1), u32: Amcntenset1, safe_read, fake::SYSREGS);
16217#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16218read_write_sysreg!(amcr: (p15, 0, c2, c13, 0), u32: Amcr, safe_read, fake::SYSREGS);
16219#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16220read_write_sysreg!(amuserenr: (p15, 0, c2, c13, 3), u32: Amuserenr, safe_read, fake::SYSREGS);
16221#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16222read_write_sysreg!(apiakeyhi_el1: s3_0_c2_c1_1, u64: ApiakeyhiEl1, safe_read, fake::SYSREGS);
16223#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16224read_write_sysreg!(apiakeylo_el1: s3_0_c2_c1_0, u64: ApiakeyloEl1, safe_read, fake::SYSREGS);
16225#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16226read_sysreg!(ccsidr: (p15, 1, c0, c0, 0), u32: Ccsidr, safe, fake::SYSREGS);
16227#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16228read_sysreg!(ccsidr2: (p15, 1, c0, c0, 2), u32: Ccsidr2, safe, fake::SYSREGS);
16229#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16230read_sysreg!(ccsidr_el1, u64: CcsidrEl1, safe, fake::SYSREGS);
16231#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16232read_sysreg!(clidr: (p15, 1, c0, c0, 1), u32: Clidr, safe, fake::SYSREGS);
16233#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16234read_sysreg!(clidr_el1, u64: ClidrEl1, safe, fake::SYSREGS);
16235#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16236read_write_sysreg!(cntfrq: (p15, 0, c0, c14, 0), u32: Cntfrq, safe_read, fake::SYSREGS);
16237#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16238read_write_sysreg!(cntfrq_el0, u64: CntfrqEl0, safe_read, safe_write, fake::SYSREGS);
16239#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16240read_write_sysreg!(cnthctl: (p15, 4, c1, c14, 0), u32: Cnthctl, safe_read, fake::SYSREGS);
16241#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16242read_write_sysreg!(cnthctl_el2, u64: CnthctlEl2, safe_read, safe_write, fake::SYSREGS);
16243#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16244read_write_sysreg!(cnthps_ctl: (p15, 0, c2, c14, 1), u32: CnthpsCtl, safe_read, fake::SYSREGS);
16245#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16246read_write_sysreg!(cnthps_cval: (p15, 2, c14), u64: CnthpsCval, safe_read, fake::SYSREGS);
16247#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16248read_write_sysreg!(cnthps_tval: (p15, 0, c2, c14, 0), u32: CnthpsTval, safe_read, fake::SYSREGS);
16249#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16250read_write_sysreg!(cnthp_ctl: (p15, 0, c2, c14, 1), u32: CnthpCtl, safe_read, fake::SYSREGS);
16251#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16252read_write_sysreg!(cnthp_cval: (p15, 2, c14), u64: CnthpCval, safe_read, fake::SYSREGS);
16253#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16254read_write_sysreg!(cnthp_tval: (p15, 0, c2, c14, 0), u32: CnthpTval, safe_read, fake::SYSREGS);
16255#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16256read_write_sysreg!(cnthvs_ctl: (p15, 0, c3, c14, 1), u32: CnthvsCtl, safe_read, fake::SYSREGS);
16257#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16258read_write_sysreg!(cnthvs_cval: (p15, 3, c14), u64: CnthvsCval, safe_read, fake::SYSREGS);
16259#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16260read_write_sysreg!(cnthvs_tval: (p15, 0, c3, c14, 0), u32: CnthvsTval, safe_read, fake::SYSREGS);
16261#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16262read_write_sysreg!(cnthv_ctl: (p15, 0, c3, c14, 1), u32: CnthvCtl, safe_read, fake::SYSREGS);
16263#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16264read_write_sysreg!(cnthv_cval: (p15, 3, c14), u64: CnthvCval, safe_read, fake::SYSREGS);
16265#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16266read_write_sysreg!(cnthv_tval: (p15, 0, c3, c14, 0), u32: CnthvTval, safe_read, fake::SYSREGS);
16267#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16268read_write_sysreg!(cntkctl: (p15, 0, c1, c14, 0), u32: Cntkctl, safe_read, fake::SYSREGS);
16269#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16270read_sysreg!(cntpct: (p15, 0, c14), u64: Cntpct, safe, fake::SYSREGS);
16271#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16272read_sysreg!(cntpctss: (p15, 8, c14), u64: Cntpctss, safe, fake::SYSREGS);
16273#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16274read_sysreg!(cntpct_el0, u64: CntpctEl0, safe, fake::SYSREGS);
16275#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16276read_write_sysreg!(cntp_ctl: (p15, 0, c2, c14, 1), u32: CntpCtl, safe_read, fake::SYSREGS);
16277#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16278read_write_sysreg!(cntp_cval: (p15, 2, c14), u64: CntpCval, safe_read, fake::SYSREGS);
16279#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16280read_write_sysreg!(cntp_tval: (p15, 0, c2, c14, 0), u32: CntpTval, safe_read, fake::SYSREGS);
16281#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16282read_sysreg!(cntvct: (p15, 1, c14), u64: Cntvct, safe, fake::SYSREGS);
16283#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16284read_sysreg!(cntvctss: (p15, 9, c14), u64: Cntvctss, safe, fake::SYSREGS);
16285#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16286read_write_sysreg!(cntvoff: (p15, 4, c14), u64: Cntvoff, safe_read, fake::SYSREGS);
16287#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16288read_write_sysreg!(cntvoff_el2, u64: CntvoffEl2, safe_read, safe_write, fake::SYSREGS);
16289#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16290read_write_sysreg!(cntv_ctl: (p15, 0, c3, c14, 1), u32: CntvCtl, safe_read, fake::SYSREGS);
16291#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16292read_write_sysreg!(cntv_cval: (p15, 3, c14), u64: CntvCval, safe_read, fake::SYSREGS);
16293#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16294read_write_sysreg!(cntv_tval: (p15, 0, c3, c14, 0), u32: CntvTval, safe_read, fake::SYSREGS);
16295#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16296read_write_sysreg!(contextidr: (p15, 0, c0, c13, 1), u32: Contextidr, safe_read, fake::SYSREGS);
16297#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16298read_write_sysreg!(contextidr_el1, u64: ContextidrEl1, safe_read, safe_write, fake::SYSREGS);
16299#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16300read_write_sysreg!(contextidr_el2: s3_4_c13_c0_1, u64: ContextidrEl2, safe_read, safe_write, fake::SYSREGS);
16301#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16302read_write_sysreg!(cpacr: (p15, 0, c0, c1, 2), u32: Cpacr, safe_read, fake::SYSREGS);
16303#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16304read_write_sysreg!(cpacr_el1, u64: CpacrEl1, safe_read, fake::SYSREGS);
16305#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16306read_write_sysreg!(cptr_el2, u64: CptrEl2, safe_read, fake::SYSREGS);
16307#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16308read_write_sysreg!(cptr_el3, u64: CptrEl3, safe_read, fake::SYSREGS);
16309#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16310read_write_sysreg!(csselr: (p15, 2, c0, c0, 0), u32: Csselr, safe_read, fake::SYSREGS);
16311#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16312read_write_sysreg!(csselr_el1, u64: CsselrEl1, safe_read, safe_write, fake::SYSREGS);
16313#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16314read_sysreg!(ctr: (p15, 0, c0, c0, 1), u32: Ctr, safe, fake::SYSREGS);
16315#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16316read_sysreg!(ctr_el0, u64: CtrEl0, safe, fake::SYSREGS);
16317#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16318read_sysreg!(currentel, u64: Currentel, safe, fake::SYSREGS);
16319#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16320read_write_sysreg!(dacr: (p15, 0, c0, c3, 0), u32: Dacr, safe_read, fake::SYSREGS);
16321#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16322read_sysreg!(dbgauthstatus: (p14, 0, c14, c7, 6), u32: Dbgauthstatus, safe, fake::SYSREGS);
16323#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16324read_write_sysreg!(dbgclaimclr: (p14, 0, c9, c7, 6), u32: Dbgclaimclr, safe_read, fake::SYSREGS);
16325#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16326read_write_sysreg!(dbgclaimset: (p14, 0, c8, c7, 6), u32: Dbgclaimset, safe_read, fake::SYSREGS);
16327#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16328read_write_sysreg!(dbgdccint: (p14, 0, c2, c0, 0), u32: Dbgdccint, safe_read, fake::SYSREGS);
16329#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16330read_sysreg!(dbgdevid: (p14, 0, c2, c7, 7), u32: Dbgdevid, safe, fake::SYSREGS);
16331#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16332read_sysreg!(dbgdevid1: (p14, 0, c1, c7, 7), u32: Dbgdevid1, safe, fake::SYSREGS);
16333#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16334read_sysreg!(dbgdevid2: (p14, 0, c0, c7, 7), u32, safe, fake::SYSREGS);
16335#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16336read_sysreg!(dbgdidr: (p14, 0, c0, c0, 0), u32: Dbgdidr, safe, fake::SYSREGS);
16337#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16338read_sysreg!(dbgdrar: (p14, 0, c1), u64: Dbgdrar, safe, fake::SYSREGS);
16339#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16340read_sysreg!(dbgdsar: (p14, 0, c2), u64, safe, fake::SYSREGS);
16341#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16342read_write_sysreg!(dbgdscrext: (p14, 0, c2, c0, 2), u32: Dbgdscrext, safe_read, fake::SYSREGS);
16343#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16344read_sysreg!(dbgdscrint: (p14, 0, c1, c0, 0), u32: Dbgdscrint, safe, fake::SYSREGS);
16345#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16346read_write_sysreg!(dbgdtrrxext: (p14, 0, c0, c0, 2), u32: Dbgdtrrxext, safe_read, fake::SYSREGS);
16347#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16348read_sysreg!(dbgdtrrxint: (p14, 0, c5, c0, 0), u32: Dbgdtrrxint, safe, fake::SYSREGS);
16349#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16350read_write_sysreg!(dbgdtrtxext: (p14, 0, c3, c0, 2), u32: Dbgdtrtxext, safe_read, fake::SYSREGS);
16351#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16352write_sysreg!(dbgdtrtxint: (p14, 0, c5, c0, 0), u32: Dbgdtrtxint, fake::SYSREGS);
16353#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16354read_write_sysreg!(dbgosdlr: (p14, 0, c3, c1, 4), u32: Dbgosdlr, safe_read, fake::SYSREGS);
16355#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16356read_write_sysreg!(dbgoseccr: (p14, 0, c6, c0, 2), u32: Dbgoseccr, safe_read, fake::SYSREGS);
16357#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16358write_sysreg!(dbgoslar: (p14, 0, c0, c1, 4), u32: Dbgoslar, fake::SYSREGS);
16359#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16360read_sysreg!(dbgoslsr: (p14, 0, c1, c1, 4), u32: Dbgoslsr, safe, fake::SYSREGS);
16361#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16362read_write_sysreg!(dbgprcr: (p14, 0, c4, c1, 4), u32: Dbgprcr, safe_read, fake::SYSREGS);
16363#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16364read_write_sysreg!(dbgvcr: (p14, 0, c7, c0, 0), u32: Dbgvcr, safe_read, fake::SYSREGS);
16365#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16366read_write_sysreg!(dbgwfar: (p14, 0, c6, c0, 0), u32, safe_read, fake::SYSREGS);
16367#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16368read_write_sysreg!(dfar: (p15, 0, c0, c6, 0), u32: Dfar, safe_read, fake::SYSREGS);
16369#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16370read_write_sysreg!(dfsr: (p15, 0, c0, c5, 0), u32: Dfsr, safe_read, fake::SYSREGS);
16371#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16372read_write_sysreg!(disr: (p15, 0, c1, c12, 1), u32: Disr, safe_read, fake::SYSREGS);
16373#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16374read_write_sysreg!(disr_el1: s3_0_c12_c1_1, u64: DisrEl1, safe_read, safe_write, fake::SYSREGS);
16375#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16376read_write_sysreg!(dit: s3_3_c4_c2_5, u64: Dit, safe_read, safe_write, fake::SYSREGS);
16377#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16378read_write_sysreg!(dlr: (p15, 3, c5, c4, 1), u32: Dlr, safe_read, fake::SYSREGS);
16379#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16380read_write_sysreg!(dspsr: (p15, 3, c5, c4, 0), u32: Dspsr, safe_read, fake::SYSREGS);
16381#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16382read_write_sysreg!(dspsr2: (p15, 3, c5, c4, 2), u32: Dspsr2, safe_read, fake::SYSREGS);
16383#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16384read_write_sysreg!(elr_el1, u64: ElrEl1, safe_read, fake::SYSREGS);
16385#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16386read_write_sysreg!(elr_el2, u64: ElrEl2, safe_read, fake::SYSREGS);
16387#[cfg(all(any(test, feature = "fakes", target_arch = "arm"), feature = "el2"))]
16388read_write_sysreg!(elr_hyp, u32: ElrHyp, safe_read, fake::SYSREGS);
16389#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16390read_sysreg!(erridr: (p15, 0, c3, c5, 0), u32: Erridr, safe, fake::SYSREGS);
16391#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16392read_write_sysreg!(errselr: (p15, 0, c3, c5, 1), u32: Errselr, safe_read, fake::SYSREGS);
16393#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16394read_write_sysreg!(erxaddr: (p15, 0, c4, c5, 3), u32: Erxaddr, safe_read, fake::SYSREGS);
16395#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16396read_write_sysreg!(erxaddr2: (p15, 0, c4, c5, 7), u32: Erxaddr2, safe_read, fake::SYSREGS);
16397#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16398read_write_sysreg!(erxctlr: (p15, 0, c4, c5, 1), u32: Erxctlr, safe_read, fake::SYSREGS);
16399#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16400read_write_sysreg!(erxctlr2: (p15, 0, c4, c5, 5), u32: Erxctlr2, safe_read, fake::SYSREGS);
16401#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16402read_sysreg!(erxfr: (p15, 0, c4, c5, 0), u32: Erxfr, safe, fake::SYSREGS);
16403#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16404read_sysreg!(erxfr2: (p15, 0, c4, c5, 4), u32: Erxfr2, safe, fake::SYSREGS);
16405#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16406read_write_sysreg!(erxmisc0: (p15, 0, c5, c5, 0), u32: Erxmisc0, safe_read, fake::SYSREGS);
16407#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16408read_write_sysreg!(erxmisc1: (p15, 0, c5, c5, 1), u32: Erxmisc1, safe_read, fake::SYSREGS);
16409#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16410read_write_sysreg!(erxmisc2: (p15, 0, c5, c5, 4), u32: Erxmisc2, safe_read, fake::SYSREGS);
16411#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16412read_write_sysreg!(erxmisc3: (p15, 0, c5, c5, 5), u32: Erxmisc3, safe_read, fake::SYSREGS);
16413#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16414read_write_sysreg!(erxmisc4: (p15, 0, c5, c5, 2), u32: Erxmisc4, safe_read, fake::SYSREGS);
16415#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16416read_write_sysreg!(erxmisc5: (p15, 0, c5, c5, 3), u32: Erxmisc5, safe_read, fake::SYSREGS);
16417#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16418read_write_sysreg!(erxmisc6: (p15, 0, c5, c5, 6), u32: Erxmisc6, safe_read, fake::SYSREGS);
16419#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16420read_write_sysreg!(erxmisc7: (p15, 0, c5, c5, 7), u32: Erxmisc7, safe_read, fake::SYSREGS);
16421#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16422read_write_sysreg!(erxstatus: (p15, 0, c4, c5, 2), u32: Erxstatus, safe_read, fake::SYSREGS);
16423#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16424read_write_sysreg!(esr_el1, u64: EsrEl1, safe_read, safe_write, fake::SYSREGS);
16425#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16426read_write_sysreg!(esr_el2, u64: EsrEl2, safe_read, safe_write, fake::SYSREGS);
16427#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16428read_write_sysreg!(esr_el3, u64: EsrEl3, safe_read, safe_write, fake::SYSREGS);
16429#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16430read_write_sysreg!(far_el1, u64: FarEl1, safe_read, fake::SYSREGS);
16431#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16432read_write_sysreg!(far_el2, u64: FarEl2, safe_read, fake::SYSREGS);
16433#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16434read_write_sysreg!(fcseidr: (p15, 0, c0, c13, 0), u32, safe_read, fake::SYSREGS);
16435#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16436read_write_sysreg!(gcr_el1: s3_0_c1_c0_6, u64: GcrEl1, safe_read, fake::SYSREGS);
16437#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16438read_write_sysreg!(gcscr_el1: s3_0_c2_c5_0, u64: GcscrEl1, safe_read, fake::SYSREGS);
16439#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16440read_write_sysreg!(gcscr_el2: s3_4_c2_c5_0, u64: GcscrEl2, safe_read, fake::SYSREGS);
16441#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16442read_write_sysreg!(gpccr_el3: s3_6_c2_c1_6, u64: GpccrEl3, safe_read, fake::SYSREGS);
16443#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16444read_write_sysreg!(gptbr_el3: s3_6_c2_c1_4, u64: GptbrEl3, safe_read, fake::SYSREGS);
16445#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16446read_write_sysreg!(hacr: (p15, 4, c1, c1, 7), u32, safe_read, fake::SYSREGS);
16447#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16448read_write_sysreg!(hacr_el2, u64, safe_read, fake::SYSREGS);
16449#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16450read_write_sysreg!(hactlr: (p15, 4, c0, c1, 1), u32, safe_read, fake::SYSREGS);
16451#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16452read_write_sysreg!(hactlr2: (p15, 4, c0, c1, 3), u32, safe_read, fake::SYSREGS);
16453#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16454read_write_sysreg!(hadfsr: (p15, 4, c1, c5, 0), u32, safe_read, fake::SYSREGS);
16455#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16456read_write_sysreg!(haifsr: (p15, 4, c1, c5, 1), u32, safe_read, fake::SYSREGS);
16457#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16458read_write_sysreg!(hamair0: (p15, 4, c3, c10, 0), u32, safe_read, fake::SYSREGS);
16459#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16460read_write_sysreg!(hamair1: (p15, 4, c3, c10, 1), u32, safe_read, fake::SYSREGS);
16461#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16462read_write_sysreg!(hcptr: (p15, 4, c1, c1, 2), u32: Hcptr, safe_read, fake::SYSREGS);
16463#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16464read_write_sysreg!(hcr: (p15, 4, c1, c1, 0), u32: Hcr, safe_read, fake::SYSREGS);
16465#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16466read_write_sysreg!(hcr2: (p15, 4, c1, c1, 4), u32: Hcr2, safe_read, fake::SYSREGS);
16467#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16468read_write_sysreg!(hcrx_el2: s3_4_c1_c2_2, u64: HcrxEl2, safe_read, fake::SYSREGS);
16469#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16470read_write_sysreg!(hcr_el2, u64: HcrEl2, safe_read, fake::SYSREGS);
16471#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16472read_write_sysreg!(hdcr: (p15, 4, c1, c1, 1), u32: Hdcr, safe_read, fake::SYSREGS);
16473#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16474read_write_sysreg!(hdfar: (p15, 4, c0, c6, 0), u32: Hdfar, safe_read, fake::SYSREGS);
16475#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16476read_write_sysreg!(hdfgrtr2_el2: s3_4_c3_c1_0, u64: Hdfgrtr2El2, safe_read, fake::SYSREGS);
16477#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16478read_write_sysreg!(hdfgwtr2_el2: s3_4_c3_c1_1, u64: Hdfgwtr2El2, safe_read, fake::SYSREGS);
16479#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16480read_write_sysreg!(hfgitr2_el2: s3_4_c3_c1_7, u64: Hfgitr2El2, safe_read, fake::SYSREGS);
16481#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16482read_write_sysreg!(hfgrtr2_el2: s3_4_c3_c1_2, u64: Hfgrtr2El2, safe_read, fake::SYSREGS);
16483#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16484read_write_sysreg!(hfgwtr2_el2: s3_4_c3_c1_3, u64: Hfgwtr2El2, safe_read, fake::SYSREGS);
16485#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16486read_write_sysreg!(hfgwtr_el2: s3_4_c1_c1_5, u64: HfgwtrEl2, safe_read, fake::SYSREGS);
16487#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16488read_write_sysreg!(hifar: (p15, 4, c0, c6, 2), u32: Hifar, safe_read, fake::SYSREGS);
16489#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16490read_write_sysreg!(hmair0: (p15, 4, c2, c10, 0), u32: Hmair0, safe_read, fake::SYSREGS);
16491#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16492read_write_sysreg!(hmair1: (p15, 4, c2, c10, 1), u32: Hmair1, safe_read, fake::SYSREGS);
16493#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16494read_write_sysreg!(hpfar: (p15, 4, c0, c6, 4), u32: Hpfar, safe_read, fake::SYSREGS);
16495#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16496read_write_sysreg!(hpfar_el2, u64: HpfarEl2, safe_read, fake::SYSREGS);
16497#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16498read_write_sysreg!(hrmr: (p15, 4, c0, c12, 2), u32: Hrmr, safe_read, fake::SYSREGS);
16499#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16500read_write_sysreg!(hsctlr: (p15, 4, c0, c1, 0), u32: Hsctlr, safe_read, fake::SYSREGS);
16501#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16502read_write_sysreg!(hsr: (p15, 4, c2, c5, 0), u32: Hsr, safe_read, fake::SYSREGS);
16503#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16504read_write_sysreg!(hstr: (p15, 4, c1, c1, 3), u32, safe_read, fake::SYSREGS);
16505#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16506read_write_sysreg!(hstr_el2, u64, safe_read, safe_write, fake::SYSREGS);
16507#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16508read_write_sysreg!(htcr: (p15, 4, c0, c2, 2), u32: Htcr, safe_read, fake::SYSREGS);
16509#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16510read_write_sysreg!(htpidr: (p15, 4, c0, c13, 2), u32: Htpidr, safe_read, fake::SYSREGS);
16511#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16512read_write_sysreg!(htrfcr: (p15, 4, c2, c1, 1), u32: Htrfcr, safe_read, fake::SYSREGS);
16513#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16514read_write_sysreg!(httbr: (p15, 4, c2), u64: Httbr, safe_read, fake::SYSREGS);
16515#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16516read_write_sysreg!(hvbar: (p15, 4, c0, c12, 0), u32: Hvbar, safe_read, fake::SYSREGS);
16517#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16518read_write_sysreg!(icc_sre_el1: s3_0_c12_c12_5, u64: IccSreEl1, safe_read, fake::SYSREGS);
16519#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16520read_write_sysreg!(icc_sre_el2: s3_4_c12_c9_5, u64: IccSreEl2, safe_read, fake::SYSREGS);
16521#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16522read_write_sysreg! {
16523 icc_sre_el3: s3_6_c12_c12_5, u64: IccSreEl3, safe_read, fake::SYSREGS
16527}
16528#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16529read_write_sysreg!(ich_hcr_el2: s3_4_c12_c11_0, u64: IchHcrEl2, safe_read, fake::SYSREGS);
16530#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16531read_write_sysreg!(ich_vmcr_el2: s3_4_c12_c11_7, u64: IchVmcrEl2, safe_read, safe_write, fake::SYSREGS);
16532#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16533read_sysreg!(id_aa64dfr0_el1, u64: IdAa64dfr0El1, safe, fake::SYSREGS);
16534#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16535read_sysreg!(id_aa64dfr1_el1, u64: IdAa64dfr1El1, safe, fake::SYSREGS);
16536#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16537read_sysreg!(id_aa64isar1_el1, u64: IdAa64isar1El1, safe, fake::SYSREGS);
16538#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16539read_sysreg!(id_aa64isar2_el1, u64: IdAa64isar2El1, safe, fake::SYSREGS);
16540#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16541read_sysreg!(id_aa64mmfr0_el1, u64: IdAa64mmfr0El1, safe, fake::SYSREGS);
16542#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16543read_sysreg!(id_aa64mmfr1_el1, u64: IdAa64mmfr1El1, safe, fake::SYSREGS);
16544#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16545read_sysreg!(id_aa64mmfr2_el1, u64: IdAa64mmfr2El1, safe, fake::SYSREGS);
16546#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16547read_sysreg!(id_aa64mmfr3_el1, u64: IdAa64mmfr3El1, safe, fake::SYSREGS);
16548#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16549read_sysreg!(id_aa64pfr0_el1, u64: IdAa64pfr0El1, safe, fake::SYSREGS);
16550#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16551read_sysreg!(id_aa64pfr1_el1, u64: IdAa64pfr1El1, safe, fake::SYSREGS);
16552#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16553read_sysreg!(id_aa64smfr0_el1, u64: IdAa64smfr0El1, safe, fake::SYSREGS);
16554#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16555read_sysreg!(id_afr0: (p15, 0, c1, c0, 3), u32, safe, fake::SYSREGS);
16556#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16557read_sysreg!(id_dfr0: (p15, 0, c1, c0, 2), u32: IdDfr0, safe, fake::SYSREGS);
16558#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16559read_sysreg!(id_dfr1: (p15, 0, c3, c0, 5), u32: IdDfr1, safe, fake::SYSREGS);
16560#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16561read_sysreg!(id_isar0: (p15, 0, c2, c0, 0), u32: IdIsar0, safe, fake::SYSREGS);
16562#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16563read_sysreg!(id_isar1: (p15, 0, c2, c0, 1), u32: IdIsar1, safe, fake::SYSREGS);
16564#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16565read_sysreg!(id_isar2: (p15, 0, c2, c0, 2), u32: IdIsar2, safe, fake::SYSREGS);
16566#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16567read_sysreg!(id_isar3: (p15, 0, c2, c0, 3), u32: IdIsar3, safe, fake::SYSREGS);
16568#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16569read_sysreg!(id_isar4: (p15, 0, c2, c0, 4), u32: IdIsar4, safe, fake::SYSREGS);
16570#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16571read_sysreg!(id_isar5: (p15, 0, c2, c0, 5), u32: IdIsar5, safe, fake::SYSREGS);
16572#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16573read_sysreg!(id_isar6: (p15, 0, c2, c0, 7), u32: IdIsar6, safe, fake::SYSREGS);
16574#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16575read_sysreg!(id_mmfr0: (p15, 0, c1, c0, 4), u32: IdMmfr0, safe, fake::SYSREGS);
16576#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16577read_sysreg!(id_mmfr1: (p15, 0, c1, c0, 5), u32: IdMmfr1, safe, fake::SYSREGS);
16578#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16579read_sysreg!(id_mmfr2: (p15, 0, c1, c0, 6), u32: IdMmfr2, safe, fake::SYSREGS);
16580#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16581read_sysreg!(id_mmfr3: (p15, 0, c1, c0, 7), u32: IdMmfr3, safe, fake::SYSREGS);
16582#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16583read_sysreg!(id_mmfr4: (p15, 0, c2, c0, 6), u32: IdMmfr4, safe, fake::SYSREGS);
16584#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16585read_sysreg!(id_mmfr5: (p15, 0, c3, c0, 6), u32: IdMmfr5, safe, fake::SYSREGS);
16586#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16587read_sysreg!(id_pfr0: (p15, 0, c1, c0, 0), u32: IdPfr0, safe, fake::SYSREGS);
16588#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16589read_sysreg!(id_pfr1: (p15, 0, c1, c0, 1), u32: IdPfr1, safe, fake::SYSREGS);
16590#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16591read_sysreg!(id_pfr2: (p15, 0, c3, c0, 4), u32: IdPfr2, safe, fake::SYSREGS);
16592#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16593read_write_sysreg!(ifar: (p15, 0, c0, c6, 2), u32: Ifar, safe_read, fake::SYSREGS);
16594#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16595read_write_sysreg!(ifsr: (p15, 0, c0, c5, 1), u32: Ifsr, safe_read, fake::SYSREGS);
16596#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16597read_sysreg!(isr: (p15, 0, c1, c12, 0), u32: Isr, safe, fake::SYSREGS);
16598#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16599read_sysreg!(isr_el1, u64: IsrEl1, safe, fake::SYSREGS);
16600#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16601read_sysreg!(jidr: (p14, 7, c0, c0, 0), u32, safe, fake::SYSREGS);
16602#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16603read_write_sysreg!(jmcr: (p14, 7, c0, c2, 0), u32, safe_read, fake::SYSREGS);
16604#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16605read_write_sysreg!(joscr: (p14, 7, c0, c1, 0), u32, safe_read, fake::SYSREGS);
16606#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16607read_write_sysreg!(mair0: (p15, 0, c2, c10, 0), u32: Mair0, safe_read, fake::SYSREGS);
16608#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16609read_write_sysreg!(mair1: (p15, 0, c2, c10, 1), u32: Mair1, safe_read, fake::SYSREGS);
16610#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16611read_write_sysreg!(mair_el1, u64: MairEl1, safe_read, fake::SYSREGS);
16612#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16613read_write_sysreg!(mair_el2, u64: MairEl2, safe_read, fake::SYSREGS);
16614#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16615read_write_sysreg! {
16616 mair_el3, u64: MairEl3, safe_read, fake::SYSREGS
16620}
16621#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16622read_write_sysreg!(mdccint_el1, u64: MdccintEl1, safe_read, safe_write, fake::SYSREGS);
16623#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16624read_write_sysreg!(mdcr_el2, u64: MdcrEl2, safe_read, safe_write, fake::SYSREGS);
16625#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16626read_write_sysreg!(mdcr_el3, u64: MdcrEl3, safe_read, safe_write, fake::SYSREGS);
16627#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16628read_write_sysreg!(mdscr_el1, u64: MdscrEl1, safe_read, safe_write, fake::SYSREGS);
16629#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16630read_sysreg!(midr: (p15, 0, c0, c0, 0), u32: Midr, safe, fake::SYSREGS);
16631#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16632read_sysreg!(midr_el1, u64: MidrEl1, safe, fake::SYSREGS);
16633#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16634read_write_sysreg!(mpam2_el2: s3_4_c10_c5_0, u64: Mpam2El2, safe_read, fake::SYSREGS);
16635#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16636read_write_sysreg!(mpam3_el3: s3_6_c10_c5_0, u64: Mpam3El3, safe_read, fake::SYSREGS);
16637#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16638read_write_sysreg!(mpamhcr_el2: s3_4_c10_c4_0, u64: MpamhcrEl2, safe_read, fake::SYSREGS);
16639#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16640read_sysreg!(mpamidr_el1: s3_0_c10_c4_4, u64: MpamidrEl1, safe, fake::SYSREGS);
16641#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16642read_write_sysreg!(mpamvpm0_el2: s3_4_c10_c6_0, u64: Mpamvpm0El2, safe_read, fake::SYSREGS);
16643#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16644read_write_sysreg!(mpamvpm1_el2: s3_4_c10_c6_1, u64: Mpamvpm1El2, safe_read, fake::SYSREGS);
16645#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16646read_write_sysreg!(mpamvpm2_el2: s3_4_c10_c6_2, u64: Mpamvpm2El2, safe_read, fake::SYSREGS);
16647#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16648read_write_sysreg!(mpamvpm3_el2: s3_4_c10_c6_3, u64: Mpamvpm3El2, safe_read, fake::SYSREGS);
16649#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16650read_write_sysreg!(mpamvpm4_el2: s3_4_c10_c6_4, u64: Mpamvpm4El2, safe_read, fake::SYSREGS);
16651#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16652read_write_sysreg!(mpamvpm5_el2: s3_4_c10_c6_5, u64: Mpamvpm5El2, safe_read, fake::SYSREGS);
16653#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16654read_write_sysreg!(mpamvpm6_el2: s3_4_c10_c6_6, u64: Mpamvpm6El2, safe_read, fake::SYSREGS);
16655#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16656read_write_sysreg!(mpamvpm7_el2: s3_4_c10_c6_7, u64: Mpamvpm7El2, safe_read, fake::SYSREGS);
16657#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16658read_write_sysreg!(mpamvpmv_el2: s3_4_c10_c4_1, u64: MpamvpmvEl2, safe_read, fake::SYSREGS);
16659#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16660read_sysreg!(mpidr: (p15, 0, c0, c0, 5), u32: Mpidr, safe, fake::SYSREGS);
16661#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16662read_sysreg!(mpidr_el1, u64: MpidrEl1, safe, fake::SYSREGS);
16663#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16664read_write_sysreg!(mvbar: (p15, 0, c0, c12, 1), u32: Mvbar, safe_read, fake::SYSREGS);
16665#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16666read_write_sysreg!(nmrr: (p15, 0, c2, c10, 1), u32: Nmrr, safe_read, fake::SYSREGS);
16667#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16668read_write_sysreg!(nsacr: (p15, 0, c1, c1, 2), u32: Nsacr, safe_read, fake::SYSREGS);
16669#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16670read_write_sysreg!(par: (p15, 0, c7), u64: Par, safe_read, fake::SYSREGS);
16671#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16672read_write_sysreg!(par_el1, u64: ParEl1, safe_read, fake::SYSREGS);
16673#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16674read_write_sysreg!(pmccfiltr: (p15, 0, c15, c14, 7), u32: Pmccfiltr, safe_read, fake::SYSREGS);
16675#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16676read_write_sysreg!(pmccntr: (p15, 0, c9), u64: Pmccntr, safe_read, fake::SYSREGS);
16677#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16678read_sysreg!(pmceid0: (p15, 0, c12, c9, 6), u32: Pmceid0, safe, fake::SYSREGS);
16679#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16680read_sysreg!(pmceid1: (p15, 0, c12, c9, 7), u32: Pmceid1, safe, fake::SYSREGS);
16681#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16682read_sysreg!(pmceid2: (p15, 0, c14, c9, 4), u32: Pmceid2, safe, fake::SYSREGS);
16683#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16684read_sysreg!(pmceid3: (p15, 0, c14, c9, 5), u32: Pmceid3, safe, fake::SYSREGS);
16685#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16686read_write_sysreg!(pmcntenclr: (p15, 0, c12, c9, 2), u32: Pmcntenclr, safe_read, fake::SYSREGS);
16687#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16688read_write_sysreg!(pmcntenset: (p15, 0, c12, c9, 1), u32: Pmcntenset, safe_read, fake::SYSREGS);
16689#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16690read_write_sysreg!(pmcr: (p15, 0, c12, c9, 0), u32: Pmcr, safe_read, fake::SYSREGS);
16691#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16692read_write_sysreg!(pmcr_el0: s3_3_c9_c12_0, u64: PmcrEl0, safe_read, safe_write, fake::SYSREGS);
16693#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16694read_write_sysreg!(pmintenclr: (p15, 0, c14, c9, 2), u32: Pmintenclr, safe_read, fake::SYSREGS);
16695#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16696read_write_sysreg!(pmintenset: (p15, 0, c14, c9, 1), u32: Pmintenset, safe_read, fake::SYSREGS);
16697#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16698read_sysreg!(pmmir: (p15, 0, c14, c9, 6), u32: Pmmir, safe, fake::SYSREGS);
16699#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16700read_write_sysreg!(pmovsr: (p15, 0, c12, c9, 3), u32: Pmovsr, safe_read, fake::SYSREGS);
16701#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16702read_write_sysreg!(pmovsset: (p15, 0, c14, c9, 3), u32: Pmovsset, safe_read, fake::SYSREGS);
16703#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16704read_write_sysreg!(pmselr: (p15, 0, c12, c9, 5), u32: Pmselr, safe_read, fake::SYSREGS);
16705#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16706write_sysreg!(pmswinc: (p15, 0, c12, c9, 4), u32: Pmswinc, fake::SYSREGS);
16707#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16708read_write_sysreg!(pmuserenr: (p15, 0, c14, c9, 0), u32: Pmuserenr, safe_read, fake::SYSREGS);
16709#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16710read_write_sysreg!(pmxevtyper: (p15, 0, c13, c9, 1), u32: Pmxevtyper, safe_read, fake::SYSREGS);
16711#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16712read_write_sysreg!(prrr: (p15, 0, c2, c10, 0), u32: Prrr, safe_read, fake::SYSREGS);
16713#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16714read_sysreg!(revidr: (p15, 0, c0, c0, 6), u32, safe, fake::SYSREGS);
16715#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16716read_write_sysreg!(rgsr_el1: s3_0_c1_c0_5, u64: RgsrEl1, safe_read, safe_write, fake::SYSREGS);
16717#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16718read_write_sysreg!(rmr: (p15, 0, c0, c12, 2), u32: Rmr, safe_read, fake::SYSREGS);
16719#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16720read_sysreg!(rvbar: (p15, 0, c0, c12, 1), u32: Rvbar, safe, fake::SYSREGS);
16721#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16722read_write_sysreg!(scr: (p15, 0, c1, c1, 0), u32: Scr, safe_read, fake::SYSREGS);
16723#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16724read_write_sysreg!(scr_el3, u64: ScrEl3, safe_read, fake::SYSREGS);
16725#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16726read_write_sysreg!(sctlr: (p15, 0, c0, c1, 0), u32: Sctlr, safe_read, fake::SYSREGS);
16727#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16728read_write_sysreg!(sctlr2_el3: s3_6_c1_c0_3, u64: Sctlr2El3, safe_read, fake::SYSREGS);
16729#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16730read_write_sysreg!(sctlr_el1, u64: SctlrEl1, safe_read, fake::SYSREGS);
16731#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16732read_write_sysreg!(sctlr_el2, u64: SctlrEl2, safe_read, fake::SYSREGS);
16733#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16734read_write_sysreg! {
16735 sctlr_el3, u64: SctlrEl3, safe_read, fake::SYSREGS
16739}
16740#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16741read_write_sysreg!(sdcr: (p15, 0, c3, c1, 1), u32: Sdcr, safe_read, fake::SYSREGS);
16742#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16743read_write_sysreg!(sder: (p15, 0, c1, c1, 1), u32: Sder, safe_read, fake::SYSREGS);
16744#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16745read_write_sysreg!(smcr_el3: s3_6_c1_c2_6, u64: SmcrEl3, safe_read, fake::SYSREGS);
16746#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16747read_write_sysreg!(spsr_el1, u64: SpsrEl1, safe_read, fake::SYSREGS);
16748#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16749read_write_sysreg!(spsr_el2, u64: SpsrEl2, safe_read, fake::SYSREGS);
16750#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16751read_write_sysreg!(spsr_el3, u64: SpsrEl3, safe_read, fake::SYSREGS);
16752#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16753read_write_sysreg!(sp_el1, u64: SpEl1, safe_read, fake::SYSREGS);
16754#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16755read_write_sysreg!(sp_el2, u64: SpEl2, safe_read, fake::SYSREGS);
16756#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16757read_sysreg!(tcmtr: (p15, 0, c0, c0, 2), u32, safe, fake::SYSREGS);
16758#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16759read_write_sysreg!(tcr2_el1: s3_0_c2_c0_3, u64: Tcr2El1, safe_read, fake::SYSREGS);
16760#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16761read_write_sysreg!(tcr2_el2: s3_4_c2_c0_3, u64: Tcr2El2, safe_read, fake::SYSREGS);
16762#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16763read_write_sysreg!(tcr_el1, u64: TcrEl1, safe_read, fake::SYSREGS);
16764#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16765read_write_sysreg!(tcr_el2, u64: TcrEl2, safe_read, fake::SYSREGS);
16766#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16767read_write_sysreg! {
16768 tcr_el3, u64: TcrEl3, safe_read, fake::SYSREGS
16772}
16773#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16774read_write_sysreg!(tfsre0_el1: s3_0_c5_c6_1, u64: Tfsre0El1, safe_read, safe_write, fake::SYSREGS);
16775#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16776read_write_sysreg!(tfsr_el1: s3_0_c5_c6_0, u64: TfsrEl1, safe_read, safe_write, fake::SYSREGS);
16777#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16778read_write_sysreg!(tfsr_el2: s3_4_c5_c6_0, u64: TfsrEl2, safe_read, safe_write, fake::SYSREGS);
16779#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16780read_sysreg!(tlbtr: (p15, 0, c0, c0, 3), u32: Tlbtr, safe, fake::SYSREGS);
16781#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16782read_write_sysreg!(tpidrprw: (p15, 0, c0, c13, 4), u32: Tpidrprw, safe_read, fake::SYSREGS);
16783#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16784read_write_sysreg!(tpidrro_el0, u64: TpidrroEl0, safe_read, fake::SYSREGS);
16785#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16786read_write_sysreg!(tpidruro: (p15, 0, c0, c13, 3), u32: Tpidruro, safe_read, fake::SYSREGS);
16787#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16788read_write_sysreg!(tpidrurw: (p15, 0, c0, c13, 2), u32: Tpidrurw, safe_read, fake::SYSREGS);
16789#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
16790read_write_sysreg!(tpidr_el0, u64: TpidrEl0, safe_read, fake::SYSREGS);
16791#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16792read_write_sysreg!(tpidr_el1, u64: TpidrEl1, safe_read, fake::SYSREGS);
16793#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16794read_write_sysreg!(tpidr_el2, u64: TpidrEl2, safe_read, fake::SYSREGS);
16795#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16796read_write_sysreg!(trfcr: (p15, 0, c2, c1, 1), u32: Trfcr, safe_read, fake::SYSREGS);
16797#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16798read_write_sysreg!(ttbcr: (p15, 0, c0, c2, 2), u32: Ttbcr, safe_read, fake::SYSREGS);
16799#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16800read_write_sysreg!(ttbcr2: (p15, 0, c0, c2, 3), u32: Ttbcr2, safe_read, fake::SYSREGS);
16801#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16802read_write_sysreg!(ttbr0: (p15, 0, c2), u64: Ttbr0, safe_read, fake::SYSREGS);
16803#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16804read_write_sysreg! {
16805 ttbr0_el1, u64: Ttbr0El1, safe_read, fake::SYSREGS
16809}
16810#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16811read_write_sysreg! {
16812 ttbr0_el2, u64: Ttbr0El2, safe_read, fake::SYSREGS
16816}
16817#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16818read_write_sysreg! {
16819 ttbr0_el3, u64: Ttbr0El3, safe_read, fake::SYSREGS
16823}
16824#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16825read_write_sysreg!(ttbr1: (p15, 1, c2), u64: Ttbr1, safe_read, fake::SYSREGS);
16826#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16827read_write_sysreg! {
16828 ttbr1_el1, u64: Ttbr1El1, safe_read, fake::SYSREGS
16832}
16833#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16834read_write_sysreg! {
16835 ttbr1_el2, u64: Ttbr1El2, safe_read, fake::SYSREGS
16839}
16840#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16841read_write_sysreg!(vbar: (p15, 0, c0, c12, 0), u32: Vbar, safe_read, fake::SYSREGS);
16842#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
16843read_write_sysreg! {
16844 vbar_el1, u64: VbarEl1, safe_read, fake::SYSREGS
16848}
16849#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16850read_write_sysreg! {
16851 vbar_el2, u64: VbarEl2, safe_read, fake::SYSREGS
16855}
16856#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16857read_write_sysreg!(vdfsr: (p15, 4, c2, c5, 3), u32: Vdfsr, safe_read, fake::SYSREGS);
16858#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16859read_write_sysreg!(vdisr: (p15, 0, c1, c12, 1), u32: Vdisr, safe_read, fake::SYSREGS);
16860#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16861read_write_sysreg!(vdisr_el2: s3_4_c12_c1_1, u64: VdisrEl2, safe_read, safe_write, fake::SYSREGS);
16862#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16863read_write_sysreg!(vmpidr: (p15, 0, c0, c0, 5), u32: Vmpidr, safe_read, fake::SYSREGS);
16864#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16865read_write_sysreg!(vmpidr_el2, u64: VmpidrEl2, safe_read, safe_write, fake::SYSREGS);
16866#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16867read_write_sysreg!(vpidr: (p15, 0, c0, c0, 0), u32: Vpidr, safe_read, fake::SYSREGS);
16868#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16869read_write_sysreg!(vpidr_el2, u64: VpidrEl2, safe_read, safe_write, fake::SYSREGS);
16870#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16871read_write_sysreg!(vsesr_el2: s3_4_c5_c2_3, u64: VsesrEl2, safe_read, safe_write, fake::SYSREGS);
16872#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16873read_write_sysreg!(vtcr: (p15, 4, c1, c2, 2), u32: Vtcr, safe_read, fake::SYSREGS);
16874#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16875read_write_sysreg!(vtcr_el2, u64: VtcrEl2, safe_read, fake::SYSREGS);
16876#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
16877read_write_sysreg!(vttbr: (p15, 6, c2), u64: Vttbr, safe_read, fake::SYSREGS);
16878#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
16879read_write_sysreg! {
16880 vttbr_el2, u64: VttbrEl2, safe_read, fake::SYSREGS
16884}
16885#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
16886read_write_sysreg!(zcr_el3: s3_6_c1_c2_0, u64: ZcrEl3, safe_read, fake::SYSREGS);