1#![cfg_attr(not(any(test, feature = "fakes")), no_std)]
9#![cfg_attr(docsrs, feature(doc_cfg))]
10
11#[cfg(all(not(any(test, feature = "fakes")), target_arch = "arm"))]
12mod aarch32;
13#[cfg(all(not(any(test, feature = "fakes")), target_arch = "aarch64"))]
14mod aarch64;
15#[cfg(any(test, feature = "fakes"))]
16pub mod fake;
17mod macros;
18mod manual;
19
20use bitflags::bitflags;
21pub use manual::*;
22#[doc(hidden)]
23pub use paste as _paste;
24
25bitflags! {
26 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28 #[repr(transparent)]
29 pub struct Amcfgr: u32 {
30 const HDBG = 1 << 24;
32 }
33}
34
35impl Amcfgr {
36 pub const N_SHIFT: u32 = 0;
38 pub const N_MASK: u32 = 0b11111111;
40 pub const SIZE_SHIFT: u32 = 8;
42 pub const SIZE_MASK: u32 = 0b111111;
44 pub const HDBG_SHIFT: u32 = 24;
46 pub const NCG_SHIFT: u32 = 28;
48 pub const NCG_MASK: u32 = 0b1111;
50
51 pub const fn n(self) -> u8 {
53 ((self.bits() >> Self::N_SHIFT) & 0b11111111) as u8
54 }
55
56 pub const fn set_n(&mut self, value: u8) {
58 let offset = Self::N_SHIFT;
59 assert!(value & (Self::N_MASK as u8) == value);
60 *self = Self::from_bits_retain(
61 (self.bits() & !(Self::N_MASK << offset)) | ((value as u32) << offset),
62 );
63 }
64
65 pub const fn with_n(mut self, value: u8) -> Self {
67 self.set_n(value);
68 self
69 }
70
71 pub const fn size(self) -> u8 {
73 ((self.bits() >> Self::SIZE_SHIFT) & 0b111111) as u8
74 }
75
76 pub const fn set_size(&mut self, value: u8) {
78 let offset = Self::SIZE_SHIFT;
79 assert!(value & (Self::SIZE_MASK as u8) == value);
80 *self = Self::from_bits_retain(
81 (self.bits() & !(Self::SIZE_MASK << offset)) | ((value as u32) << offset),
82 );
83 }
84
85 pub const fn with_size(mut self, value: u8) -> Self {
87 self.set_size(value);
88 self
89 }
90
91 pub const fn ncg(self) -> u8 {
93 ((self.bits() >> Self::NCG_SHIFT) & 0b1111) as u8
94 }
95
96 pub const fn set_ncg(&mut self, value: u8) {
98 let offset = Self::NCG_SHIFT;
99 assert!(value & (Self::NCG_MASK as u8) == value);
100 *self = Self::from_bits_retain(
101 (self.bits() & !(Self::NCG_MASK << offset)) | ((value as u32) << offset),
102 );
103 }
104
105 pub const fn with_ncg(mut self, value: u8) -> Self {
107 self.set_ncg(value);
108 self
109 }
110}
111
112bitflags! {
113 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
115 #[repr(transparent)]
116 pub struct Amcgcr: u32 {
117 }
118}
119
120impl Amcgcr {
121 pub const CG0NC_SHIFT: u32 = 0;
123 pub const CG0NC_MASK: u32 = 0b11111111;
125 pub const CG1NC_SHIFT: u32 = 8;
127 pub const CG1NC_MASK: u32 = 0b11111111;
129
130 pub const fn cg0nc(self) -> u8 {
132 ((self.bits() >> Self::CG0NC_SHIFT) & 0b11111111) as u8
133 }
134
135 pub const fn set_cg0nc(&mut self, value: u8) {
137 let offset = Self::CG0NC_SHIFT;
138 assert!(value & (Self::CG0NC_MASK as u8) == value);
139 *self = Self::from_bits_retain(
140 (self.bits() & !(Self::CG0NC_MASK << offset)) | ((value as u32) << offset),
141 );
142 }
143
144 pub const fn with_cg0nc(mut self, value: u8) -> Self {
146 self.set_cg0nc(value);
147 self
148 }
149
150 pub const fn cg1nc(self) -> u8 {
152 ((self.bits() >> Self::CG1NC_SHIFT) & 0b11111111) as u8
153 }
154
155 pub const fn set_cg1nc(&mut self, value: u8) {
157 let offset = Self::CG1NC_SHIFT;
158 assert!(value & (Self::CG1NC_MASK as u8) == value);
159 *self = Self::from_bits_retain(
160 (self.bits() & !(Self::CG1NC_MASK << offset)) | ((value as u32) << offset),
161 );
162 }
163
164 pub const fn with_cg1nc(mut self, value: u8) -> Self {
166 self.set_cg1nc(value);
167 self
168 }
169}
170
171bitflags! {
172 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
174 #[repr(transparent)]
175 pub struct Amcntenclr0: u32 {
176 const P0 = 1 << 0;
178 const P1 = 1 << 1;
180 const P2 = 1 << 2;
182 const P3 = 1 << 3;
184 }
185}
186
187impl Amcntenclr0 {
188 pub const P_SHIFT: u32 = 0;
190}
191
192bitflags! {
193 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
195 #[repr(transparent)]
196 pub struct Amcntenclr1: u32 {
197 const P0 = 1 << 0;
199 const P1 = 1 << 1;
201 const P2 = 1 << 2;
203 const P3 = 1 << 3;
205 const P4 = 1 << 4;
207 const P5 = 1 << 5;
209 const P6 = 1 << 6;
211 const P7 = 1 << 7;
213 const P8 = 1 << 8;
215 const P9 = 1 << 9;
217 const P10 = 1 << 10;
219 const P11 = 1 << 11;
221 const P12 = 1 << 12;
223 const P13 = 1 << 13;
225 const P14 = 1 << 14;
227 const P15 = 1 << 15;
229 }
230}
231
232impl Amcntenclr1 {
233 pub const P_SHIFT: u32 = 0;
235}
236
237bitflags! {
238 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
240 #[repr(transparent)]
241 pub struct Amcntenset0: u32 {
242 const P0 = 1 << 0;
244 const P1 = 1 << 1;
246 const P2 = 1 << 2;
248 const P3 = 1 << 3;
250 }
251}
252
253impl Amcntenset0 {
254 pub const P_SHIFT: u32 = 0;
256}
257
258bitflags! {
259 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
261 #[repr(transparent)]
262 pub struct Amcntenset1: u32 {
263 const P0 = 1 << 0;
265 const P1 = 1 << 1;
267 const P2 = 1 << 2;
269 const P3 = 1 << 3;
271 const P4 = 1 << 4;
273 const P5 = 1 << 5;
275 const P6 = 1 << 6;
277 const P7 = 1 << 7;
279 const P8 = 1 << 8;
281 const P9 = 1 << 9;
283 const P10 = 1 << 10;
285 const P11 = 1 << 11;
287 const P12 = 1 << 12;
289 const P13 = 1 << 13;
291 const P14 = 1 << 14;
293 const P15 = 1 << 15;
295 }
296}
297
298impl Amcntenset1 {
299 pub const P_SHIFT: u32 = 0;
301}
302
303bitflags! {
304 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
306 #[repr(transparent)]
307 pub struct Amcr: u32 {
308 const HDBG = 1 << 10;
310 const CG1RZ = 1 << 17;
312 }
313}
314
315impl Amcr {
316 pub const HDBG_SHIFT: u32 = 10;
318 pub const CG1RZ_SHIFT: u32 = 17;
320}
321
322bitflags! {
323 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
325 #[repr(transparent)]
326 pub struct Amuserenr: u32 {
327 const EN = 1 << 0;
329 }
330}
331
332impl Amuserenr {
333 pub const EN_SHIFT: u32 = 0;
335}
336
337#[cfg(feature = "el1")]
338bitflags! {
339 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
341 #[repr(transparent)]
342 pub struct ApiakeyhiEl1: u64 {
343 }
344}
345
346#[cfg(feature = "el1")]
347impl ApiakeyhiEl1 {
348 pub const APIAKEYHI_SHIFT: u32 = 0;
350 pub const APIAKEYHI_MASK: u64 =
352 0b1111111111111111111111111111111111111111111111111111111111111111;
353
354 pub const fn apiakeyhi(self) -> u64 {
356 ((self.bits() >> Self::APIAKEYHI_SHIFT)
357 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
358 }
359
360 pub const fn set_apiakeyhi(&mut self, value: u64) {
362 let offset = Self::APIAKEYHI_SHIFT;
363 assert!(value & (Self::APIAKEYHI_MASK as u64) == value);
364 *self = Self::from_bits_retain(
365 (self.bits() & !(Self::APIAKEYHI_MASK << offset)) | ((value as u64) << offset),
366 );
367 }
368
369 pub const fn with_apiakeyhi(mut self, value: u64) -> Self {
371 self.set_apiakeyhi(value);
372 self
373 }
374}
375
376#[cfg(feature = "el1")]
377bitflags! {
378 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
380 #[repr(transparent)]
381 pub struct ApiakeyloEl1: u64 {
382 }
383}
384
385#[cfg(feature = "el1")]
386impl ApiakeyloEl1 {
387 pub const APIAKEYLO_SHIFT: u32 = 0;
389 pub const APIAKEYLO_MASK: u64 =
391 0b1111111111111111111111111111111111111111111111111111111111111111;
392
393 pub const fn apiakeylo(self) -> u64 {
395 ((self.bits() >> Self::APIAKEYLO_SHIFT)
396 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
397 }
398
399 pub const fn set_apiakeylo(&mut self, value: u64) {
401 let offset = Self::APIAKEYLO_SHIFT;
402 assert!(value & (Self::APIAKEYLO_MASK as u64) == value);
403 *self = Self::from_bits_retain(
404 (self.bits() & !(Self::APIAKEYLO_MASK << offset)) | ((value as u64) << offset),
405 );
406 }
407
408 pub const fn with_apiakeylo(mut self, value: u64) -> Self {
410 self.set_apiakeylo(value);
411 self
412 }
413}
414
415bitflags! {
416 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
418 #[repr(transparent)]
419 pub struct Ccsidr: u32 {
420 }
421}
422
423impl Ccsidr {
424 pub const LINESIZE_SHIFT: u32 = 0;
426 pub const LINESIZE_MASK: u32 = 0b111;
428 pub const NUMSETS_SHIFT: u32 = 13;
430 pub const NUMSETS_MASK: u32 = 0b111111111111111;
432
433 pub const fn linesize(self) -> u8 {
435 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
436 }
437
438 pub const fn set_linesize(&mut self, value: u8) {
440 let offset = Self::LINESIZE_SHIFT;
441 assert!(value & (Self::LINESIZE_MASK as u8) == value);
442 *self = Self::from_bits_retain(
443 (self.bits() & !(Self::LINESIZE_MASK << offset)) | ((value as u32) << offset),
444 );
445 }
446
447 pub const fn with_linesize(mut self, value: u8) -> Self {
449 self.set_linesize(value);
450 self
451 }
452
453 pub const fn numsets(self) -> u16 {
455 ((self.bits() >> Self::NUMSETS_SHIFT) & 0b111111111111111) as u16
456 }
457
458 pub const fn set_numsets(&mut self, value: u16) {
460 let offset = Self::NUMSETS_SHIFT;
461 assert!(value & (Self::NUMSETS_MASK as u16) == value);
462 *self = Self::from_bits_retain(
463 (self.bits() & !(Self::NUMSETS_MASK << offset)) | ((value as u32) << offset),
464 );
465 }
466
467 pub const fn with_numsets(mut self, value: u16) -> Self {
469 self.set_numsets(value);
470 self
471 }
472}
473
474bitflags! {
475 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
477 #[repr(transparent)]
478 pub struct Ccsidr2: u32 {
479 }
480}
481
482impl Ccsidr2 {
483 pub const NUMSETS_SHIFT: u32 = 0;
485 pub const NUMSETS_MASK: u32 = 0b111111111111111111111111;
487
488 pub const fn numsets(self) -> u32 {
490 ((self.bits() >> Self::NUMSETS_SHIFT) & 0b111111111111111111111111) as u32
491 }
492
493 pub const fn set_numsets(&mut self, value: u32) {
495 let offset = Self::NUMSETS_SHIFT;
496 assert!(value & (Self::NUMSETS_MASK as u32) == value);
497 *self = Self::from_bits_retain(
498 (self.bits() & !(Self::NUMSETS_MASK << offset)) | ((value as u32) << offset),
499 );
500 }
501
502 pub const fn with_numsets(mut self, value: u32) -> Self {
504 self.set_numsets(value);
505 self
506 }
507}
508
509#[cfg(feature = "el1")]
510bitflags! {
511 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
513 #[repr(transparent)]
514 pub struct CcsidrEl1: u64 {
515 }
516}
517
518#[cfg(feature = "el1")]
519impl CcsidrEl1 {
520 pub const LINESIZE_SHIFT: u32 = 0;
522 pub const LINESIZE_MASK: u64 = 0b111;
524
525 pub const fn linesize(self) -> u8 {
527 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
528 }
529
530 pub const fn set_linesize(&mut self, value: u8) {
532 let offset = Self::LINESIZE_SHIFT;
533 assert!(value & (Self::LINESIZE_MASK as u8) == value);
534 *self = Self::from_bits_retain(
535 (self.bits() & !(Self::LINESIZE_MASK << offset)) | ((value as u64) << offset),
536 );
537 }
538
539 pub const fn with_linesize(mut self, value: u8) -> Self {
541 self.set_linesize(value);
542 self
543 }
544}
545
546bitflags! {
547 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
549 #[repr(transparent)]
550 pub struct Clidr: u32 {
551 }
552}
553
554impl Clidr {
555 pub const CTYPE_SHIFT: u32 = 0;
557 pub const CTYPE_MASK: u32 = 0b111;
559 pub const LOUIS_SHIFT: u32 = 21;
561 pub const LOUIS_MASK: u32 = 0b111;
563 pub const LOC_SHIFT: u32 = 24;
565 pub const LOC_MASK: u32 = 0b111;
567 pub const LOUU_SHIFT: u32 = 27;
569 pub const LOUU_MASK: u32 = 0b111;
571 pub const ICB_SHIFT: u32 = 30;
573 pub const ICB_MASK: u32 = 0b11;
575
576 pub const fn ctype(self, n: u32) -> u8 {
578 assert!(n >= 1 && n < 8);
579 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8
580 }
581
582 pub const fn set_ctype(&mut self, n: u32, value: u8) {
584 assert!(n >= 1 && n < 8);
585 let offset = Self::CTYPE_SHIFT + (n - 1) * 3;
586 assert!(value & (Self::CTYPE_MASK as u8) == value);
587 *self = Self::from_bits_retain(
588 (self.bits() & !(Self::CTYPE_MASK << offset)) | ((value as u32) << offset),
589 );
590 }
591
592 pub const fn with_ctype(mut self, n: u32, value: u8) -> Self {
594 self.set_ctype(n, value);
595 self
596 }
597
598 pub const fn louis(self) -> u8 {
600 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
601 }
602
603 pub const fn set_louis(&mut self, value: u8) {
605 let offset = Self::LOUIS_SHIFT;
606 assert!(value & (Self::LOUIS_MASK as u8) == value);
607 *self = Self::from_bits_retain(
608 (self.bits() & !(Self::LOUIS_MASK << offset)) | ((value as u32) << offset),
609 );
610 }
611
612 pub const fn with_louis(mut self, value: u8) -> Self {
614 self.set_louis(value);
615 self
616 }
617
618 pub const fn loc(self) -> u8 {
620 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
621 }
622
623 pub const fn set_loc(&mut self, value: u8) {
625 let offset = Self::LOC_SHIFT;
626 assert!(value & (Self::LOC_MASK as u8) == value);
627 *self = Self::from_bits_retain(
628 (self.bits() & !(Self::LOC_MASK << offset)) | ((value as u32) << offset),
629 );
630 }
631
632 pub const fn with_loc(mut self, value: u8) -> Self {
634 self.set_loc(value);
635 self
636 }
637
638 pub const fn louu(self) -> u8 {
640 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
641 }
642
643 pub const fn set_louu(&mut self, value: u8) {
645 let offset = Self::LOUU_SHIFT;
646 assert!(value & (Self::LOUU_MASK as u8) == value);
647 *self = Self::from_bits_retain(
648 (self.bits() & !(Self::LOUU_MASK << offset)) | ((value as u32) << offset),
649 );
650 }
651
652 pub const fn with_louu(mut self, value: u8) -> Self {
654 self.set_louu(value);
655 self
656 }
657
658 pub const fn icb(self) -> u8 {
660 ((self.bits() >> Self::ICB_SHIFT) & 0b11) as u8
661 }
662
663 pub const fn set_icb(&mut self, value: u8) {
665 let offset = Self::ICB_SHIFT;
666 assert!(value & (Self::ICB_MASK as u8) == value);
667 *self = Self::from_bits_retain(
668 (self.bits() & !(Self::ICB_MASK << offset)) | ((value as u32) << offset),
669 );
670 }
671
672 pub const fn with_icb(mut self, value: u8) -> Self {
674 self.set_icb(value);
675 self
676 }
677}
678
679#[cfg(feature = "el1")]
680bitflags! {
681 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
685 #[repr(transparent)]
686 pub struct ClidrEl1: u64 {
687 }
688}
689
690#[cfg(feature = "el1")]
691impl ClidrEl1 {
692 pub const CTYPE_SHIFT: u32 = 0;
694 pub const CTYPE_MASK: u64 = 0b111;
696 pub const LOUIS_SHIFT: u32 = 21;
698 pub const LOUIS_MASK: u64 = 0b111;
700 pub const LOC_SHIFT: u32 = 24;
702 pub const LOC_MASK: u64 = 0b111;
704 pub const LOUU_SHIFT: u32 = 27;
706 pub const LOUU_MASK: u64 = 0b111;
708 pub const ICB_SHIFT: u32 = 30;
710 pub const ICB_MASK: u64 = 0b111;
712 pub const TTYPE_SHIFT: u32 = 33;
714 pub const TTYPE_MASK: u64 = 0b11;
716
717 pub fn ctype(self, n: u32) -> crate::manual::CacheType {
719 assert!(n >= 1 && n < 8);
720 crate::manual::CacheType::try_from(
721 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8,
722 )
723 .unwrap()
724 }
725
726 pub fn set_ctype(&mut self, n: u32, value: crate::manual::CacheType) {
728 assert!(n >= 1 && n < 8);
729 let offset = Self::CTYPE_SHIFT + (n - 1) * 3;
730 let value: u8 = value.into();
731 assert!(value & (Self::CTYPE_MASK as u8) == value);
732 *self = Self::from_bits_retain(
733 (self.bits() & !(Self::CTYPE_MASK << offset)) | ((value as u64) << offset),
734 );
735 }
736
737 pub fn with_ctype(mut self, n: u32, value: crate::manual::CacheType) -> Self {
739 self.set_ctype(n, value);
740 self
741 }
742
743 pub const fn louis(self) -> u8 {
747 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
748 }
749
750 pub const fn set_louis(&mut self, value: u8) {
754 let offset = Self::LOUIS_SHIFT;
755 assert!(value & (Self::LOUIS_MASK as u8) == value);
756 *self = Self::from_bits_retain(
757 (self.bits() & !(Self::LOUIS_MASK << offset)) | ((value as u64) << offset),
758 );
759 }
760
761 pub const fn with_louis(mut self, value: u8) -> Self {
765 self.set_louis(value);
766 self
767 }
768
769 pub const fn loc(self) -> u8 {
773 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
774 }
775
776 pub const fn set_loc(&mut self, value: u8) {
780 let offset = Self::LOC_SHIFT;
781 assert!(value & (Self::LOC_MASK as u8) == value);
782 *self = Self::from_bits_retain(
783 (self.bits() & !(Self::LOC_MASK << offset)) | ((value as u64) << offset),
784 );
785 }
786
787 pub const fn with_loc(mut self, value: u8) -> Self {
791 self.set_loc(value);
792 self
793 }
794
795 pub const fn louu(self) -> u8 {
799 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
800 }
801
802 pub const fn set_louu(&mut self, value: u8) {
806 let offset = Self::LOUU_SHIFT;
807 assert!(value & (Self::LOUU_MASK as u8) == value);
808 *self = Self::from_bits_retain(
809 (self.bits() & !(Self::LOUU_MASK << offset)) | ((value as u64) << offset),
810 );
811 }
812
813 pub const fn with_louu(mut self, value: u8) -> Self {
817 self.set_louu(value);
818 self
819 }
820
821 pub const fn icb(self) -> u8 {
825 ((self.bits() >> Self::ICB_SHIFT) & 0b111) as u8
826 }
827
828 pub const fn set_icb(&mut self, value: u8) {
832 let offset = Self::ICB_SHIFT;
833 assert!(value & (Self::ICB_MASK as u8) == value);
834 *self = Self::from_bits_retain(
835 (self.bits() & !(Self::ICB_MASK << offset)) | ((value as u64) << offset),
836 );
837 }
838
839 pub const fn with_icb(mut self, value: u8) -> Self {
843 self.set_icb(value);
844 self
845 }
846
847 pub const fn ttype(self, n: u32) -> u8 {
849 assert!(n >= 1 && n < 8);
850 ((self.bits() >> (Self::TTYPE_SHIFT + (n - 1) * 2)) & 0b11) as u8
851 }
852
853 pub const fn set_ttype(&mut self, n: u32, value: u8) {
855 assert!(n >= 1 && n < 8);
856 let offset = Self::TTYPE_SHIFT + (n - 1) * 2;
857 assert!(value & (Self::TTYPE_MASK as u8) == value);
858 *self = Self::from_bits_retain(
859 (self.bits() & !(Self::TTYPE_MASK << offset)) | ((value as u64) << offset),
860 );
861 }
862
863 pub const fn with_ttype(mut self, n: u32, value: u8) -> Self {
865 self.set_ttype(n, value);
866 self
867 }
868}
869
870bitflags! {
871 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
873 #[repr(transparent)]
874 pub struct Cntfrq: u32 {
875 }
876}
877
878impl Cntfrq {
879 pub const CLOCKFREQ_SHIFT: u32 = 0;
881 pub const CLOCKFREQ_MASK: u32 = 0b11111111111111111111111111111111;
883
884 pub const fn clockfreq(self) -> u32 {
886 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
887 }
888
889 pub const fn set_clockfreq(&mut self, value: u32) {
891 let offset = Self::CLOCKFREQ_SHIFT;
892 assert!(value & (Self::CLOCKFREQ_MASK as u32) == value);
893 *self = Self::from_bits_retain(
894 (self.bits() & !(Self::CLOCKFREQ_MASK << offset)) | ((value as u32) << offset),
895 );
896 }
897
898 pub const fn with_clockfreq(mut self, value: u32) -> Self {
900 self.set_clockfreq(value);
901 self
902 }
903}
904
905bitflags! {
906 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
910 #[repr(transparent)]
911 pub struct CntfrqEl0: u64 {
912 }
913}
914
915impl CntfrqEl0 {
916 pub const CLOCKFREQ_SHIFT: u32 = 0;
918 pub const CLOCKFREQ_MASK: u64 = 0b11111111111111111111111111111111;
920
921 pub const fn clockfreq(self) -> u32 {
923 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
924 }
925
926 pub const fn set_clockfreq(&mut self, value: u32) {
928 let offset = Self::CLOCKFREQ_SHIFT;
929 assert!(value & (Self::CLOCKFREQ_MASK as u32) == value);
930 *self = Self::from_bits_retain(
931 (self.bits() & !(Self::CLOCKFREQ_MASK << offset)) | ((value as u64) << offset),
932 );
933 }
934
935 pub const fn with_clockfreq(mut self, value: u32) -> Self {
937 self.set_clockfreq(value);
938 self
939 }
940}
941
942bitflags! {
943 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
945 #[repr(transparent)]
946 pub struct Cnthctl: u32 {
947 const PL1PCTEN = 1 << 0;
949 const PL1PCEN = 1 << 1;
951 const EVNTEN = 1 << 2;
953 const EVNTDIR = 1 << 3;
955 const EVNTIS = 1 << 17;
957 }
958}
959
960impl Cnthctl {
961 pub const PL1PCTEN_SHIFT: u32 = 0;
963 pub const PL1PCEN_SHIFT: u32 = 1;
965 pub const EVNTEN_SHIFT: u32 = 2;
967 pub const EVNTDIR_SHIFT: u32 = 3;
969 pub const EVNTI_SHIFT: u32 = 4;
971 pub const EVNTI_MASK: u32 = 0b1111;
973 pub const EVNTIS_SHIFT: u32 = 17;
975
976 pub const fn evnti(self) -> u8 {
978 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
979 }
980
981 pub const fn set_evnti(&mut self, value: u8) {
983 let offset = Self::EVNTI_SHIFT;
984 assert!(value & (Self::EVNTI_MASK as u8) == value);
985 *self = Self::from_bits_retain(
986 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u32) << offset),
987 );
988 }
989
990 pub const fn with_evnti(mut self, value: u8) -> Self {
992 self.set_evnti(value);
993 self
994 }
995}
996
997#[cfg(feature = "el2")]
998bitflags! {
999 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1003 #[repr(transparent)]
1004 pub struct CnthctlEl2: u64 {
1005 const EL0PCTEN = 1 << 0;
1007 const EL0VCTEN = 1 << 1;
1009 const EL1PCEN = 1 << 1;
1011 const EVNTEN = 1 << 2;
1013 const EVNTDIR = 1 << 3;
1015 const EL0VTEN = 1 << 8;
1017 const EL0PTEN = 1 << 9;
1019 const EL1PTEN = 1 << 11;
1021 const ECV = 1 << 12;
1023 const EL1TVT = 1 << 13;
1025 const EL1TVCT = 1 << 14;
1027 const EL1NVPCT = 1 << 15;
1029 const EL1NVVCT = 1 << 16;
1031 const EVNTIS = 1 << 17;
1033 const CNTVMASK = 1 << 18;
1035 const CNTPMASK = 1 << 19;
1037 }
1038}
1039
1040#[cfg(feature = "el2")]
1041impl CnthctlEl2 {
1042 pub const EL0PCTEN_SHIFT: u32 = 0;
1044 pub const EL0VCTEN_SHIFT: u32 = 1;
1046 pub const EL1PCEN_SHIFT: u32 = 1;
1048 pub const EVNTEN_SHIFT: u32 = 2;
1050 pub const EVNTDIR_SHIFT: u32 = 3;
1052 pub const EVNTI_SHIFT: u32 = 4;
1054 pub const EVNTI_MASK: u64 = 0b1111;
1056 pub const EL0VTEN_SHIFT: u32 = 8;
1058 pub const EL0PTEN_SHIFT: u32 = 9;
1060 pub const EL1PTEN_SHIFT: u32 = 11;
1062 pub const ECV_SHIFT: u32 = 12;
1064 pub const EL1TVT_SHIFT: u32 = 13;
1066 pub const EL1TVCT_SHIFT: u32 = 14;
1068 pub const EL1NVPCT_SHIFT: u32 = 15;
1070 pub const EL1NVVCT_SHIFT: u32 = 16;
1072 pub const EVNTIS_SHIFT: u32 = 17;
1074 pub const CNTVMASK_SHIFT: u32 = 18;
1076 pub const CNTPMASK_SHIFT: u32 = 19;
1078
1079 pub const fn evnti(self) -> u8 {
1081 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
1082 }
1083
1084 pub const fn set_evnti(&mut self, value: u8) {
1086 let offset = Self::EVNTI_SHIFT;
1087 assert!(value & (Self::EVNTI_MASK as u8) == value);
1088 *self = Self::from_bits_retain(
1089 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u64) << offset),
1090 );
1091 }
1092
1093 pub const fn with_evnti(mut self, value: u8) -> Self {
1095 self.set_evnti(value);
1096 self
1097 }
1098}
1099
1100bitflags! {
1101 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1103 #[repr(transparent)]
1104 pub struct CnthpsCtl: u32 {
1105 const ENABLE = 1 << 0;
1107 const IMASK = 1 << 1;
1109 const ISTATUS = 1 << 2;
1111 }
1112}
1113
1114impl CnthpsCtl {
1115 pub const ENABLE_SHIFT: u32 = 0;
1117 pub const IMASK_SHIFT: u32 = 1;
1119 pub const ISTATUS_SHIFT: u32 = 2;
1121}
1122
1123#[cfg(feature = "el2")]
1124bitflags! {
1125 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1129 #[repr(transparent)]
1130 pub struct CnthpsCtlEl2: u64 {
1131 const ENABLE = 1 << 0;
1133 const IMASK = 1 << 1;
1135 const ISTATUS = 1 << 2;
1137 }
1138}
1139
1140#[cfg(feature = "el2")]
1141impl CnthpsCtlEl2 {
1142 pub const ENABLE_SHIFT: u32 = 0;
1144 pub const IMASK_SHIFT: u32 = 1;
1146 pub const ISTATUS_SHIFT: u32 = 2;
1148}
1149
1150bitflags! {
1151 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1153 #[repr(transparent)]
1154 pub struct CnthpsCval: u64 {
1155 }
1156}
1157
1158impl CnthpsCval {
1159 pub const COMPAREVALUE_SHIFT: u32 = 0;
1161 pub const COMPAREVALUE_MASK: u64 =
1163 0b1111111111111111111111111111111111111111111111111111111111111111;
1164
1165 pub const fn comparevalue(self) -> u64 {
1167 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1168 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1169 }
1170
1171 pub const fn set_comparevalue(&mut self, value: u64) {
1173 let offset = Self::COMPAREVALUE_SHIFT;
1174 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1175 *self = Self::from_bits_retain(
1176 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1177 );
1178 }
1179
1180 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1182 self.set_comparevalue(value);
1183 self
1184 }
1185}
1186
1187#[cfg(feature = "el2")]
1188bitflags! {
1189 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1193 #[repr(transparent)]
1194 pub struct CnthpsCvalEl2: u64 {
1195 }
1196}
1197
1198#[cfg(feature = "el2")]
1199impl CnthpsCvalEl2 {
1200 pub const COMPAREVALUE_SHIFT: u32 = 0;
1202 pub const COMPAREVALUE_MASK: u64 =
1204 0b1111111111111111111111111111111111111111111111111111111111111111;
1205
1206 pub const fn comparevalue(self) -> u64 {
1208 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1209 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1210 }
1211
1212 pub const fn set_comparevalue(&mut self, value: u64) {
1214 let offset = Self::COMPAREVALUE_SHIFT;
1215 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1216 *self = Self::from_bits_retain(
1217 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1218 );
1219 }
1220
1221 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1223 self.set_comparevalue(value);
1224 self
1225 }
1226}
1227
1228bitflags! {
1229 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1231 #[repr(transparent)]
1232 pub struct CnthpsTval: u32 {
1233 }
1234}
1235
1236impl CnthpsTval {
1237 pub const TIMERVALUE_SHIFT: u32 = 0;
1239 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
1241
1242 pub const fn timervalue(self) -> u32 {
1244 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1245 }
1246
1247 pub const fn set_timervalue(&mut self, value: u32) {
1249 let offset = Self::TIMERVALUE_SHIFT;
1250 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1251 *self = Self::from_bits_retain(
1252 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
1253 );
1254 }
1255
1256 pub const fn with_timervalue(mut self, value: u32) -> Self {
1258 self.set_timervalue(value);
1259 self
1260 }
1261}
1262
1263#[cfg(feature = "el2")]
1264bitflags! {
1265 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1269 #[repr(transparent)]
1270 pub struct CnthpsTvalEl2: u64 {
1271 }
1272}
1273
1274#[cfg(feature = "el2")]
1275impl CnthpsTvalEl2 {
1276 pub const TIMERVALUE_SHIFT: u32 = 0;
1278 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
1280
1281 pub const fn timervalue(self) -> u32 {
1283 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1284 }
1285
1286 pub const fn set_timervalue(&mut self, value: u32) {
1288 let offset = Self::TIMERVALUE_SHIFT;
1289 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1290 *self = Self::from_bits_retain(
1291 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
1292 );
1293 }
1294
1295 pub const fn with_timervalue(mut self, value: u32) -> Self {
1297 self.set_timervalue(value);
1298 self
1299 }
1300}
1301
1302bitflags! {
1303 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1305 #[repr(transparent)]
1306 pub struct CnthpCtl: u32 {
1307 const ENABLE = 1 << 0;
1309 const IMASK = 1 << 1;
1311 const ISTATUS = 1 << 2;
1313 }
1314}
1315
1316impl CnthpCtl {
1317 pub const ENABLE_SHIFT: u32 = 0;
1319 pub const IMASK_SHIFT: u32 = 1;
1321 pub const ISTATUS_SHIFT: u32 = 2;
1323}
1324
1325#[cfg(feature = "el2")]
1326bitflags! {
1327 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1331 #[repr(transparent)]
1332 pub struct CnthpCtlEl2: u64 {
1333 const ENABLE = 1 << 0;
1335 const IMASK = 1 << 1;
1337 const ISTATUS = 1 << 2;
1339 }
1340}
1341
1342#[cfg(feature = "el2")]
1343impl CnthpCtlEl2 {
1344 pub const ENABLE_SHIFT: u32 = 0;
1346 pub const IMASK_SHIFT: u32 = 1;
1348 pub const ISTATUS_SHIFT: u32 = 2;
1350}
1351
1352bitflags! {
1353 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1355 #[repr(transparent)]
1356 pub struct CnthpCval: u64 {
1357 }
1358}
1359
1360impl CnthpCval {
1361 pub const COMPAREVALUE_SHIFT: u32 = 0;
1363 pub const COMPAREVALUE_MASK: u64 =
1365 0b1111111111111111111111111111111111111111111111111111111111111111;
1366
1367 pub const fn comparevalue(self) -> u64 {
1369 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1370 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1371 }
1372
1373 pub const fn set_comparevalue(&mut self, value: u64) {
1375 let offset = Self::COMPAREVALUE_SHIFT;
1376 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1377 *self = Self::from_bits_retain(
1378 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1379 );
1380 }
1381
1382 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1384 self.set_comparevalue(value);
1385 self
1386 }
1387}
1388
1389#[cfg(feature = "el2")]
1390bitflags! {
1391 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1395 #[repr(transparent)]
1396 pub struct CnthpCvalEl2: u64 {
1397 }
1398}
1399
1400#[cfg(feature = "el2")]
1401impl CnthpCvalEl2 {
1402 pub const COMPAREVALUE_SHIFT: u32 = 0;
1404 pub const COMPAREVALUE_MASK: u64 =
1406 0b1111111111111111111111111111111111111111111111111111111111111111;
1407
1408 pub const fn comparevalue(self) -> u64 {
1410 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1411 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1412 }
1413
1414 pub const fn set_comparevalue(&mut self, value: u64) {
1416 let offset = Self::COMPAREVALUE_SHIFT;
1417 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1418 *self = Self::from_bits_retain(
1419 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1420 );
1421 }
1422
1423 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1425 self.set_comparevalue(value);
1426 self
1427 }
1428}
1429
1430bitflags! {
1431 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1433 #[repr(transparent)]
1434 pub struct CnthpTval: u32 {
1435 }
1436}
1437
1438impl CnthpTval {
1439 pub const TIMERVALUE_SHIFT: u32 = 0;
1441 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
1443
1444 pub const fn timervalue(self) -> u32 {
1446 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1447 }
1448
1449 pub const fn set_timervalue(&mut self, value: u32) {
1451 let offset = Self::TIMERVALUE_SHIFT;
1452 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1453 *self = Self::from_bits_retain(
1454 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
1455 );
1456 }
1457
1458 pub const fn with_timervalue(mut self, value: u32) -> Self {
1460 self.set_timervalue(value);
1461 self
1462 }
1463}
1464
1465#[cfg(feature = "el2")]
1466bitflags! {
1467 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1471 #[repr(transparent)]
1472 pub struct CnthpTvalEl2: u64 {
1473 }
1474}
1475
1476#[cfg(feature = "el2")]
1477impl CnthpTvalEl2 {
1478 pub const TIMERVALUE_SHIFT: u32 = 0;
1480 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
1482
1483 pub const fn timervalue(self) -> u32 {
1485 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1486 }
1487
1488 pub const fn set_timervalue(&mut self, value: u32) {
1490 let offset = Self::TIMERVALUE_SHIFT;
1491 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1492 *self = Self::from_bits_retain(
1493 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
1494 );
1495 }
1496
1497 pub const fn with_timervalue(mut self, value: u32) -> Self {
1499 self.set_timervalue(value);
1500 self
1501 }
1502}
1503
1504bitflags! {
1505 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1507 #[repr(transparent)]
1508 pub struct CnthvsCtl: u32 {
1509 const ENABLE = 1 << 0;
1511 const IMASK = 1 << 1;
1513 const ISTATUS = 1 << 2;
1515 }
1516}
1517
1518impl CnthvsCtl {
1519 pub const ENABLE_SHIFT: u32 = 0;
1521 pub const IMASK_SHIFT: u32 = 1;
1523 pub const ISTATUS_SHIFT: u32 = 2;
1525}
1526
1527#[cfg(feature = "el2")]
1528bitflags! {
1529 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1533 #[repr(transparent)]
1534 pub struct CnthvsCtlEl2: u64 {
1535 const ENABLE = 1 << 0;
1537 const IMASK = 1 << 1;
1539 const ISTATUS = 1 << 2;
1541 }
1542}
1543
1544#[cfg(feature = "el2")]
1545impl CnthvsCtlEl2 {
1546 pub const ENABLE_SHIFT: u32 = 0;
1548 pub const IMASK_SHIFT: u32 = 1;
1550 pub const ISTATUS_SHIFT: u32 = 2;
1552}
1553
1554bitflags! {
1555 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1557 #[repr(transparent)]
1558 pub struct CnthvsCval: u64 {
1559 }
1560}
1561
1562impl CnthvsCval {
1563 pub const COMPAREVALUE_SHIFT: u32 = 0;
1565 pub const COMPAREVALUE_MASK: u64 =
1567 0b1111111111111111111111111111111111111111111111111111111111111111;
1568
1569 pub const fn comparevalue(self) -> u64 {
1571 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1572 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1573 }
1574
1575 pub const fn set_comparevalue(&mut self, value: u64) {
1577 let offset = Self::COMPAREVALUE_SHIFT;
1578 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1579 *self = Self::from_bits_retain(
1580 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1581 );
1582 }
1583
1584 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1586 self.set_comparevalue(value);
1587 self
1588 }
1589}
1590
1591#[cfg(feature = "el2")]
1592bitflags! {
1593 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1597 #[repr(transparent)]
1598 pub struct CnthvsCvalEl2: u64 {
1599 }
1600}
1601
1602#[cfg(feature = "el2")]
1603impl CnthvsCvalEl2 {
1604 pub const COMPAREVALUE_SHIFT: u32 = 0;
1606 pub const COMPAREVALUE_MASK: u64 =
1608 0b1111111111111111111111111111111111111111111111111111111111111111;
1609
1610 pub const fn comparevalue(self) -> u64 {
1612 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1613 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1614 }
1615
1616 pub const fn set_comparevalue(&mut self, value: u64) {
1618 let offset = Self::COMPAREVALUE_SHIFT;
1619 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1620 *self = Self::from_bits_retain(
1621 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1622 );
1623 }
1624
1625 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1627 self.set_comparevalue(value);
1628 self
1629 }
1630}
1631
1632bitflags! {
1633 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1635 #[repr(transparent)]
1636 pub struct CnthvsTval: u32 {
1637 }
1638}
1639
1640impl CnthvsTval {
1641 pub const TIMERVALUE_SHIFT: u32 = 0;
1643 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
1645
1646 pub const fn timervalue(self) -> u32 {
1648 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1649 }
1650
1651 pub const fn set_timervalue(&mut self, value: u32) {
1653 let offset = Self::TIMERVALUE_SHIFT;
1654 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1655 *self = Self::from_bits_retain(
1656 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
1657 );
1658 }
1659
1660 pub const fn with_timervalue(mut self, value: u32) -> Self {
1662 self.set_timervalue(value);
1663 self
1664 }
1665}
1666
1667#[cfg(feature = "el2")]
1668bitflags! {
1669 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1673 #[repr(transparent)]
1674 pub struct CnthvsTvalEl2: u64 {
1675 }
1676}
1677
1678#[cfg(feature = "el2")]
1679impl CnthvsTvalEl2 {
1680 pub const TIMERVALUE_SHIFT: u32 = 0;
1682 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
1684
1685 pub const fn timervalue(self) -> u32 {
1687 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1688 }
1689
1690 pub const fn set_timervalue(&mut self, value: u32) {
1692 let offset = Self::TIMERVALUE_SHIFT;
1693 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1694 *self = Self::from_bits_retain(
1695 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
1696 );
1697 }
1698
1699 pub const fn with_timervalue(mut self, value: u32) -> Self {
1701 self.set_timervalue(value);
1702 self
1703 }
1704}
1705
1706bitflags! {
1707 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1709 #[repr(transparent)]
1710 pub struct CnthvCtl: u32 {
1711 const ENABLE = 1 << 0;
1713 const IMASK = 1 << 1;
1715 const ISTATUS = 1 << 2;
1717 }
1718}
1719
1720impl CnthvCtl {
1721 pub const ENABLE_SHIFT: u32 = 0;
1723 pub const IMASK_SHIFT: u32 = 1;
1725 pub const ISTATUS_SHIFT: u32 = 2;
1727}
1728
1729#[cfg(feature = "el2")]
1730bitflags! {
1731 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1735 #[repr(transparent)]
1736 pub struct CnthvCtlEl2: u64 {
1737 const ENABLE = 1 << 0;
1739 const IMASK = 1 << 1;
1741 const ISTATUS = 1 << 2;
1743 }
1744}
1745
1746#[cfg(feature = "el2")]
1747impl CnthvCtlEl2 {
1748 pub const ENABLE_SHIFT: u32 = 0;
1750 pub const IMASK_SHIFT: u32 = 1;
1752 pub const ISTATUS_SHIFT: u32 = 2;
1754}
1755
1756bitflags! {
1757 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1759 #[repr(transparent)]
1760 pub struct CnthvCval: u64 {
1761 }
1762}
1763
1764impl CnthvCval {
1765 pub const COMPAREVALUE_SHIFT: u32 = 0;
1767 pub const COMPAREVALUE_MASK: u64 =
1769 0b1111111111111111111111111111111111111111111111111111111111111111;
1770
1771 pub const fn comparevalue(self) -> u64 {
1773 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1774 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1775 }
1776
1777 pub const fn set_comparevalue(&mut self, value: u64) {
1779 let offset = Self::COMPAREVALUE_SHIFT;
1780 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1781 *self = Self::from_bits_retain(
1782 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1783 );
1784 }
1785
1786 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1788 self.set_comparevalue(value);
1789 self
1790 }
1791}
1792
1793#[cfg(feature = "el2")]
1794bitflags! {
1795 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1799 #[repr(transparent)]
1800 pub struct CnthvCvalEl2: u64 {
1801 }
1802}
1803
1804#[cfg(feature = "el2")]
1805impl CnthvCvalEl2 {
1806 pub const COMPAREVALUE_SHIFT: u32 = 0;
1808 pub const COMPAREVALUE_MASK: u64 =
1810 0b1111111111111111111111111111111111111111111111111111111111111111;
1811
1812 pub const fn comparevalue(self) -> u64 {
1814 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
1815 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1816 }
1817
1818 pub const fn set_comparevalue(&mut self, value: u64) {
1820 let offset = Self::COMPAREVALUE_SHIFT;
1821 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
1822 *self = Self::from_bits_retain(
1823 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
1824 );
1825 }
1826
1827 pub const fn with_comparevalue(mut self, value: u64) -> Self {
1829 self.set_comparevalue(value);
1830 self
1831 }
1832}
1833
1834bitflags! {
1835 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1837 #[repr(transparent)]
1838 pub struct CnthvTval: u32 {
1839 }
1840}
1841
1842impl CnthvTval {
1843 pub const TIMERVALUE_SHIFT: u32 = 0;
1845 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
1847
1848 pub const fn timervalue(self) -> u32 {
1850 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1851 }
1852
1853 pub const fn set_timervalue(&mut self, value: u32) {
1855 let offset = Self::TIMERVALUE_SHIFT;
1856 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1857 *self = Self::from_bits_retain(
1858 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
1859 );
1860 }
1861
1862 pub const fn with_timervalue(mut self, value: u32) -> Self {
1864 self.set_timervalue(value);
1865 self
1866 }
1867}
1868
1869#[cfg(feature = "el2")]
1870bitflags! {
1871 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1875 #[repr(transparent)]
1876 pub struct CnthvTvalEl2: u64 {
1877 }
1878}
1879
1880#[cfg(feature = "el2")]
1881impl CnthvTvalEl2 {
1882 pub const TIMERVALUE_SHIFT: u32 = 0;
1884 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
1886
1887 pub const fn timervalue(self) -> u32 {
1889 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
1890 }
1891
1892 pub const fn set_timervalue(&mut self, value: u32) {
1894 let offset = Self::TIMERVALUE_SHIFT;
1895 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
1896 *self = Self::from_bits_retain(
1897 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
1898 );
1899 }
1900
1901 pub const fn with_timervalue(mut self, value: u32) -> Self {
1903 self.set_timervalue(value);
1904 self
1905 }
1906}
1907
1908bitflags! {
1909 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1911 #[repr(transparent)]
1912 pub struct Cntkctl: u32 {
1913 const PL0PCTEN = 1 << 0;
1915 const PL0VCTEN = 1 << 1;
1917 const EVNTEN = 1 << 2;
1919 const EVNTDIR = 1 << 3;
1921 const PL0VTEN = 1 << 8;
1923 const PL0PTEN = 1 << 9;
1925 const EVNTIS = 1 << 17;
1927 }
1928}
1929
1930impl Cntkctl {
1931 pub const PL0PCTEN_SHIFT: u32 = 0;
1933 pub const PL0VCTEN_SHIFT: u32 = 1;
1935 pub const EVNTEN_SHIFT: u32 = 2;
1937 pub const EVNTDIR_SHIFT: u32 = 3;
1939 pub const EVNTI_SHIFT: u32 = 4;
1941 pub const EVNTI_MASK: u32 = 0b1111;
1943 pub const PL0VTEN_SHIFT: u32 = 8;
1945 pub const PL0PTEN_SHIFT: u32 = 9;
1947 pub const EVNTIS_SHIFT: u32 = 17;
1949
1950 pub const fn evnti(self) -> u8 {
1952 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
1953 }
1954
1955 pub const fn set_evnti(&mut self, value: u8) {
1957 let offset = Self::EVNTI_SHIFT;
1958 assert!(value & (Self::EVNTI_MASK as u8) == value);
1959 *self = Self::from_bits_retain(
1960 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u32) << offset),
1961 );
1962 }
1963
1964 pub const fn with_evnti(mut self, value: u8) -> Self {
1966 self.set_evnti(value);
1967 self
1968 }
1969}
1970
1971#[cfg(feature = "el1")]
1972bitflags! {
1973 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1977 #[repr(transparent)]
1978 pub struct CntkctlEl1: u64 {
1979 const EL0PCTEN = 1 << 0;
1981 const EL0VCTEN = 1 << 1;
1983 const EVNTEN = 1 << 2;
1985 const EVNTDIR = 1 << 3;
1987 const EL0VTEN = 1 << 8;
1989 const EL0PTEN = 1 << 9;
1991 const EL1PCTEN = 1 << 10;
1993 const EL1PTEN = 1 << 11;
1995 const ECV = 1 << 12;
1997 const EL1TVT = 1 << 13;
1999 const EL1TVCT = 1 << 14;
2001 const EL1NVPCT = 1 << 15;
2003 const EL1NVVCT = 1 << 16;
2005 const EVNTIS = 1 << 17;
2007 const CNTVMASK = 1 << 18;
2009 const CNTPMASK = 1 << 19;
2011 }
2012}
2013
2014#[cfg(feature = "el1")]
2015impl CntkctlEl1 {
2016 pub const EL0PCTEN_SHIFT: u32 = 0;
2018 pub const EL0VCTEN_SHIFT: u32 = 1;
2020 pub const EVNTEN_SHIFT: u32 = 2;
2022 pub const EVNTDIR_SHIFT: u32 = 3;
2024 pub const EVNTI_SHIFT: u32 = 4;
2026 pub const EVNTI_MASK: u64 = 0b1111;
2028 pub const EL0VTEN_SHIFT: u32 = 8;
2030 pub const EL0PTEN_SHIFT: u32 = 9;
2032 pub const EL1PCTEN_SHIFT: u32 = 10;
2034 pub const EL1PTEN_SHIFT: u32 = 11;
2036 pub const ECV_SHIFT: u32 = 12;
2038 pub const EL1TVT_SHIFT: u32 = 13;
2040 pub const EL1TVCT_SHIFT: u32 = 14;
2042 pub const EL1NVPCT_SHIFT: u32 = 15;
2044 pub const EL1NVVCT_SHIFT: u32 = 16;
2046 pub const EVNTIS_SHIFT: u32 = 17;
2048 pub const CNTVMASK_SHIFT: u32 = 18;
2050 pub const CNTPMASK_SHIFT: u32 = 19;
2052
2053 pub const fn evnti(self) -> u8 {
2055 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
2056 }
2057
2058 pub const fn set_evnti(&mut self, value: u8) {
2060 let offset = Self::EVNTI_SHIFT;
2061 assert!(value & (Self::EVNTI_MASK as u8) == value);
2062 *self = Self::from_bits_retain(
2063 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u64) << offset),
2064 );
2065 }
2066
2067 pub const fn with_evnti(mut self, value: u8) -> Self {
2069 self.set_evnti(value);
2070 self
2071 }
2072}
2073
2074bitflags! {
2075 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2077 #[repr(transparent)]
2078 pub struct Cntpct: u64 {
2079 }
2080}
2081
2082impl Cntpct {
2083 pub const PHYSICALCOUNT_SHIFT: u32 = 0;
2085 pub const PHYSICALCOUNT_MASK: u64 =
2087 0b1111111111111111111111111111111111111111111111111111111111111111;
2088
2089 pub const fn physicalcount(self) -> u64 {
2091 ((self.bits() >> Self::PHYSICALCOUNT_SHIFT)
2092 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2093 }
2094
2095 pub const fn set_physicalcount(&mut self, value: u64) {
2097 let offset = Self::PHYSICALCOUNT_SHIFT;
2098 assert!(value & (Self::PHYSICALCOUNT_MASK as u64) == value);
2099 *self = Self::from_bits_retain(
2100 (self.bits() & !(Self::PHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
2101 );
2102 }
2103
2104 pub const fn with_physicalcount(mut self, value: u64) -> Self {
2106 self.set_physicalcount(value);
2107 self
2108 }
2109}
2110
2111bitflags! {
2112 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2114 #[repr(transparent)]
2115 pub struct Cntpctss: u64 {
2116 }
2117}
2118
2119impl Cntpctss {
2120 pub const SSPHYSICALCOUNT_SHIFT: u32 = 0;
2122 pub const SSPHYSICALCOUNT_MASK: u64 =
2124 0b1111111111111111111111111111111111111111111111111111111111111111;
2125
2126 pub const fn ssphysicalcount(self) -> u64 {
2128 ((self.bits() >> Self::SSPHYSICALCOUNT_SHIFT)
2129 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2130 }
2131
2132 pub const fn set_ssphysicalcount(&mut self, value: u64) {
2134 let offset = Self::SSPHYSICALCOUNT_SHIFT;
2135 assert!(value & (Self::SSPHYSICALCOUNT_MASK as u64) == value);
2136 *self = Self::from_bits_retain(
2137 (self.bits() & !(Self::SSPHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
2138 );
2139 }
2140
2141 pub const fn with_ssphysicalcount(mut self, value: u64) -> Self {
2143 self.set_ssphysicalcount(value);
2144 self
2145 }
2146}
2147
2148bitflags! {
2149 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2153 #[repr(transparent)]
2154 pub struct CntpctssEl0: u64 {
2155 }
2156}
2157
2158impl CntpctssEl0 {
2159 pub const SSPHYSICALCOUNT_SHIFT: u32 = 0;
2161 pub const SSPHYSICALCOUNT_MASK: u64 =
2163 0b1111111111111111111111111111111111111111111111111111111111111111;
2164
2165 pub const fn ssphysicalcount(self) -> u64 {
2167 ((self.bits() >> Self::SSPHYSICALCOUNT_SHIFT)
2168 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2169 }
2170
2171 pub const fn set_ssphysicalcount(&mut self, value: u64) {
2173 let offset = Self::SSPHYSICALCOUNT_SHIFT;
2174 assert!(value & (Self::SSPHYSICALCOUNT_MASK as u64) == value);
2175 *self = Self::from_bits_retain(
2176 (self.bits() & !(Self::SSPHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
2177 );
2178 }
2179
2180 pub const fn with_ssphysicalcount(mut self, value: u64) -> Self {
2182 self.set_ssphysicalcount(value);
2183 self
2184 }
2185}
2186
2187bitflags! {
2188 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2192 #[repr(transparent)]
2193 pub struct CntpctEl0: u64 {
2194 }
2195}
2196
2197impl CntpctEl0 {
2198 pub const PHYSICALCOUNT_SHIFT: u32 = 0;
2200 pub const PHYSICALCOUNT_MASK: u64 =
2202 0b1111111111111111111111111111111111111111111111111111111111111111;
2203
2204 pub const fn physicalcount(self) -> u64 {
2206 ((self.bits() >> Self::PHYSICALCOUNT_SHIFT)
2207 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2208 }
2209
2210 pub const fn set_physicalcount(&mut self, value: u64) {
2212 let offset = Self::PHYSICALCOUNT_SHIFT;
2213 assert!(value & (Self::PHYSICALCOUNT_MASK as u64) == value);
2214 *self = Self::from_bits_retain(
2215 (self.bits() & !(Self::PHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
2216 );
2217 }
2218
2219 pub const fn with_physicalcount(mut self, value: u64) -> Self {
2221 self.set_physicalcount(value);
2222 self
2223 }
2224}
2225
2226#[cfg(feature = "el2")]
2227bitflags! {
2228 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2232 #[repr(transparent)]
2233 pub struct CntpoffEl2: u64 {
2234 }
2235}
2236
2237#[cfg(feature = "el2")]
2238impl CntpoffEl2 {
2239 pub const PO_SHIFT: u32 = 0;
2241 pub const PO_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
2243
2244 pub const fn po(self) -> u64 {
2246 ((self.bits() >> Self::PO_SHIFT)
2247 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2248 }
2249
2250 pub const fn set_po(&mut self, value: u64) {
2252 let offset = Self::PO_SHIFT;
2253 assert!(value & (Self::PO_MASK as u64) == value);
2254 *self = Self::from_bits_retain(
2255 (self.bits() & !(Self::PO_MASK << offset)) | ((value as u64) << offset),
2256 );
2257 }
2258
2259 pub const fn with_po(mut self, value: u64) -> Self {
2261 self.set_po(value);
2262 self
2263 }
2264}
2265
2266#[cfg(feature = "el1")]
2267bitflags! {
2268 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2272 #[repr(transparent)]
2273 pub struct CntpsCtlEl1: u64 {
2274 const ENABLE = 1 << 0;
2276 const IMASK = 1 << 1;
2278 const ISTATUS = 1 << 2;
2280 }
2281}
2282
2283#[cfg(feature = "el1")]
2284impl CntpsCtlEl1 {
2285 pub const ENABLE_SHIFT: u32 = 0;
2287 pub const IMASK_SHIFT: u32 = 1;
2289 pub const ISTATUS_SHIFT: u32 = 2;
2291}
2292
2293#[cfg(feature = "el1")]
2294bitflags! {
2295 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2299 #[repr(transparent)]
2300 pub struct CntpsCvalEl1: u64 {
2301 }
2302}
2303
2304#[cfg(feature = "el1")]
2305impl CntpsCvalEl1 {
2306 pub const COMPAREVALUE_SHIFT: u32 = 0;
2308 pub const COMPAREVALUE_MASK: u64 =
2310 0b1111111111111111111111111111111111111111111111111111111111111111;
2311
2312 pub const fn comparevalue(self) -> u64 {
2314 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2315 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2316 }
2317
2318 pub const fn set_comparevalue(&mut self, value: u64) {
2320 let offset = Self::COMPAREVALUE_SHIFT;
2321 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2322 *self = Self::from_bits_retain(
2323 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2324 );
2325 }
2326
2327 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2329 self.set_comparevalue(value);
2330 self
2331 }
2332}
2333
2334#[cfg(feature = "el1")]
2335bitflags! {
2336 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2340 #[repr(transparent)]
2341 pub struct CntpsTvalEl1: u64 {
2342 }
2343}
2344
2345#[cfg(feature = "el1")]
2346impl CntpsTvalEl1 {
2347 pub const TIMERVALUE_SHIFT: u32 = 0;
2349 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
2351
2352 pub const fn timervalue(self) -> u32 {
2354 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2355 }
2356
2357 pub const fn set_timervalue(&mut self, value: u32) {
2359 let offset = Self::TIMERVALUE_SHIFT;
2360 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2361 *self = Self::from_bits_retain(
2362 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
2363 );
2364 }
2365
2366 pub const fn with_timervalue(mut self, value: u32) -> Self {
2368 self.set_timervalue(value);
2369 self
2370 }
2371}
2372
2373bitflags! {
2374 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2376 #[repr(transparent)]
2377 pub struct CntpCtl: u32 {
2378 const ENABLE = 1 << 0;
2380 const IMASK = 1 << 1;
2382 const ISTATUS = 1 << 2;
2384 }
2385}
2386
2387impl CntpCtl {
2388 pub const ENABLE_SHIFT: u32 = 0;
2390 pub const IMASK_SHIFT: u32 = 1;
2392 pub const ISTATUS_SHIFT: u32 = 2;
2394}
2395
2396bitflags! {
2397 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2401 #[repr(transparent)]
2402 pub struct CntpCtlEl0: u64 {
2403 const ENABLE = 1 << 0;
2405 const IMASK = 1 << 1;
2407 const ISTATUS = 1 << 2;
2409 }
2410}
2411
2412impl CntpCtlEl0 {
2413 pub const ENABLE_SHIFT: u32 = 0;
2415 pub const IMASK_SHIFT: u32 = 1;
2417 pub const ISTATUS_SHIFT: u32 = 2;
2419}
2420
2421bitflags! {
2422 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2424 #[repr(transparent)]
2425 pub struct CntpCval: u64 {
2426 }
2427}
2428
2429impl CntpCval {
2430 pub const COMPAREVALUE_SHIFT: u32 = 0;
2432 pub const COMPAREVALUE_MASK: u64 =
2434 0b1111111111111111111111111111111111111111111111111111111111111111;
2435
2436 pub const fn comparevalue(self) -> u64 {
2438 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2439 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2440 }
2441
2442 pub const fn set_comparevalue(&mut self, value: u64) {
2444 let offset = Self::COMPAREVALUE_SHIFT;
2445 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2446 *self = Self::from_bits_retain(
2447 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2448 );
2449 }
2450
2451 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2453 self.set_comparevalue(value);
2454 self
2455 }
2456}
2457
2458bitflags! {
2459 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2463 #[repr(transparent)]
2464 pub struct CntpCvalEl0: u64 {
2465 }
2466}
2467
2468impl CntpCvalEl0 {
2469 pub const COMPAREVALUE_SHIFT: u32 = 0;
2471 pub const COMPAREVALUE_MASK: u64 =
2473 0b1111111111111111111111111111111111111111111111111111111111111111;
2474
2475 pub const fn comparevalue(self) -> u64 {
2477 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2478 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2479 }
2480
2481 pub const fn set_comparevalue(&mut self, value: u64) {
2483 let offset = Self::COMPAREVALUE_SHIFT;
2484 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2485 *self = Self::from_bits_retain(
2486 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2487 );
2488 }
2489
2490 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2492 self.set_comparevalue(value);
2493 self
2494 }
2495}
2496
2497bitflags! {
2498 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2500 #[repr(transparent)]
2501 pub struct CntpTval: u32 {
2502 }
2503}
2504
2505impl CntpTval {
2506 pub const TIMERVALUE_SHIFT: u32 = 0;
2508 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
2510
2511 pub const fn timervalue(self) -> u32 {
2513 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2514 }
2515
2516 pub const fn set_timervalue(&mut self, value: u32) {
2518 let offset = Self::TIMERVALUE_SHIFT;
2519 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2520 *self = Self::from_bits_retain(
2521 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
2522 );
2523 }
2524
2525 pub const fn with_timervalue(mut self, value: u32) -> Self {
2527 self.set_timervalue(value);
2528 self
2529 }
2530}
2531
2532bitflags! {
2533 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2537 #[repr(transparent)]
2538 pub struct CntpTvalEl0: u64 {
2539 }
2540}
2541
2542impl CntpTvalEl0 {
2543 pub const TIMERVALUE_SHIFT: u32 = 0;
2545 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
2547
2548 pub const fn timervalue(self) -> u32 {
2550 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2551 }
2552
2553 pub const fn set_timervalue(&mut self, value: u32) {
2555 let offset = Self::TIMERVALUE_SHIFT;
2556 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2557 *self = Self::from_bits_retain(
2558 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
2559 );
2560 }
2561
2562 pub const fn with_timervalue(mut self, value: u32) -> Self {
2564 self.set_timervalue(value);
2565 self
2566 }
2567}
2568
2569bitflags! {
2570 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2572 #[repr(transparent)]
2573 pub struct Cntvct: u64 {
2574 }
2575}
2576
2577impl Cntvct {
2578 pub const VIRTUALCOUNT_SHIFT: u32 = 0;
2580 pub const VIRTUALCOUNT_MASK: u64 =
2582 0b1111111111111111111111111111111111111111111111111111111111111111;
2583
2584 pub const fn virtualcount(self) -> u64 {
2586 ((self.bits() >> Self::VIRTUALCOUNT_SHIFT)
2587 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2588 }
2589
2590 pub const fn set_virtualcount(&mut self, value: u64) {
2592 let offset = Self::VIRTUALCOUNT_SHIFT;
2593 assert!(value & (Self::VIRTUALCOUNT_MASK as u64) == value);
2594 *self = Self::from_bits_retain(
2595 (self.bits() & !(Self::VIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
2596 );
2597 }
2598
2599 pub const fn with_virtualcount(mut self, value: u64) -> Self {
2601 self.set_virtualcount(value);
2602 self
2603 }
2604}
2605
2606bitflags! {
2607 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2609 #[repr(transparent)]
2610 pub struct Cntvctss: u64 {
2611 }
2612}
2613
2614impl Cntvctss {
2615 pub const SSVIRTUALCOUNT_SHIFT: u32 = 0;
2617 pub const SSVIRTUALCOUNT_MASK: u64 =
2619 0b1111111111111111111111111111111111111111111111111111111111111111;
2620
2621 pub const fn ssvirtualcount(self) -> u64 {
2623 ((self.bits() >> Self::SSVIRTUALCOUNT_SHIFT)
2624 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2625 }
2626
2627 pub const fn set_ssvirtualcount(&mut self, value: u64) {
2629 let offset = Self::SSVIRTUALCOUNT_SHIFT;
2630 assert!(value & (Self::SSVIRTUALCOUNT_MASK as u64) == value);
2631 *self = Self::from_bits_retain(
2632 (self.bits() & !(Self::SSVIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
2633 );
2634 }
2635
2636 pub const fn with_ssvirtualcount(mut self, value: u64) -> Self {
2638 self.set_ssvirtualcount(value);
2639 self
2640 }
2641}
2642
2643bitflags! {
2644 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2648 #[repr(transparent)]
2649 pub struct CntvctssEl0: u64 {
2650 }
2651}
2652
2653impl CntvctssEl0 {
2654 pub const SSVIRTUALCOUNT_SHIFT: u32 = 0;
2656 pub const SSVIRTUALCOUNT_MASK: u64 =
2658 0b1111111111111111111111111111111111111111111111111111111111111111;
2659
2660 pub const fn ssvirtualcount(self) -> u64 {
2662 ((self.bits() >> Self::SSVIRTUALCOUNT_SHIFT)
2663 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2664 }
2665
2666 pub const fn set_ssvirtualcount(&mut self, value: u64) {
2668 let offset = Self::SSVIRTUALCOUNT_SHIFT;
2669 assert!(value & (Self::SSVIRTUALCOUNT_MASK as u64) == value);
2670 *self = Self::from_bits_retain(
2671 (self.bits() & !(Self::SSVIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
2672 );
2673 }
2674
2675 pub const fn with_ssvirtualcount(mut self, value: u64) -> Self {
2677 self.set_ssvirtualcount(value);
2678 self
2679 }
2680}
2681
2682bitflags! {
2683 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2687 #[repr(transparent)]
2688 pub struct CntvctEl0: u64 {
2689 }
2690}
2691
2692impl CntvctEl0 {
2693 pub const VIRTUALCOUNT_SHIFT: u32 = 0;
2695 pub const VIRTUALCOUNT_MASK: u64 =
2697 0b1111111111111111111111111111111111111111111111111111111111111111;
2698
2699 pub const fn virtualcount(self) -> u64 {
2701 ((self.bits() >> Self::VIRTUALCOUNT_SHIFT)
2702 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2703 }
2704
2705 pub const fn set_virtualcount(&mut self, value: u64) {
2707 let offset = Self::VIRTUALCOUNT_SHIFT;
2708 assert!(value & (Self::VIRTUALCOUNT_MASK as u64) == value);
2709 *self = Self::from_bits_retain(
2710 (self.bits() & !(Self::VIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
2711 );
2712 }
2713
2714 pub const fn with_virtualcount(mut self, value: u64) -> Self {
2716 self.set_virtualcount(value);
2717 self
2718 }
2719}
2720
2721bitflags! {
2722 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2724 #[repr(transparent)]
2725 pub struct Cntvoff: u64 {
2726 }
2727}
2728
2729impl Cntvoff {
2730 pub const VOFFSET_SHIFT: u32 = 0;
2732 pub const VOFFSET_MASK: u64 =
2734 0b1111111111111111111111111111111111111111111111111111111111111111;
2735
2736 pub const fn voffset(self) -> u64 {
2738 ((self.bits() >> Self::VOFFSET_SHIFT)
2739 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2740 }
2741
2742 pub const fn set_voffset(&mut self, value: u64) {
2744 let offset = Self::VOFFSET_SHIFT;
2745 assert!(value & (Self::VOFFSET_MASK as u64) == value);
2746 *self = Self::from_bits_retain(
2747 (self.bits() & !(Self::VOFFSET_MASK << offset)) | ((value as u64) << offset),
2748 );
2749 }
2750
2751 pub const fn with_voffset(mut self, value: u64) -> Self {
2753 self.set_voffset(value);
2754 self
2755 }
2756}
2757
2758#[cfg(feature = "el2")]
2759bitflags! {
2760 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2764 #[repr(transparent)]
2765 pub struct CntvoffEl2: u64 {
2766 }
2767}
2768
2769#[cfg(feature = "el2")]
2770impl CntvoffEl2 {
2771 pub const VOFFSET_SHIFT: u32 = 0;
2773 pub const VOFFSET_MASK: u64 =
2775 0b1111111111111111111111111111111111111111111111111111111111111111;
2776
2777 pub const fn voffset(self) -> u64 {
2779 ((self.bits() >> Self::VOFFSET_SHIFT)
2780 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2781 }
2782
2783 pub const fn set_voffset(&mut self, value: u64) {
2785 let offset = Self::VOFFSET_SHIFT;
2786 assert!(value & (Self::VOFFSET_MASK as u64) == value);
2787 *self = Self::from_bits_retain(
2788 (self.bits() & !(Self::VOFFSET_MASK << offset)) | ((value as u64) << offset),
2789 );
2790 }
2791
2792 pub const fn with_voffset(mut self, value: u64) -> Self {
2794 self.set_voffset(value);
2795 self
2796 }
2797}
2798
2799bitflags! {
2800 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2802 #[repr(transparent)]
2803 pub struct CntvCtl: u32 {
2804 const ENABLE = 1 << 0;
2806 const IMASK = 1 << 1;
2808 const ISTATUS = 1 << 2;
2810 }
2811}
2812
2813impl CntvCtl {
2814 pub const ENABLE_SHIFT: u32 = 0;
2816 pub const IMASK_SHIFT: u32 = 1;
2818 pub const ISTATUS_SHIFT: u32 = 2;
2820}
2821
2822bitflags! {
2823 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2827 #[repr(transparent)]
2828 pub struct CntvCtlEl0: u64 {
2829 const ENABLE = 1 << 0;
2831 const IMASK = 1 << 1;
2833 const ISTATUS = 1 << 2;
2835 }
2836}
2837
2838impl CntvCtlEl0 {
2839 pub const ENABLE_SHIFT: u32 = 0;
2841 pub const IMASK_SHIFT: u32 = 1;
2843 pub const ISTATUS_SHIFT: u32 = 2;
2845}
2846
2847bitflags! {
2848 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2850 #[repr(transparent)]
2851 pub struct CntvCval: u64 {
2852 }
2853}
2854
2855impl CntvCval {
2856 pub const COMPAREVALUE_SHIFT: u32 = 0;
2858 pub const COMPAREVALUE_MASK: u64 =
2860 0b1111111111111111111111111111111111111111111111111111111111111111;
2861
2862 pub const fn comparevalue(self) -> u64 {
2864 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2865 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2866 }
2867
2868 pub const fn set_comparevalue(&mut self, value: u64) {
2870 let offset = Self::COMPAREVALUE_SHIFT;
2871 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2872 *self = Self::from_bits_retain(
2873 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2874 );
2875 }
2876
2877 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2879 self.set_comparevalue(value);
2880 self
2881 }
2882}
2883
2884bitflags! {
2885 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2889 #[repr(transparent)]
2890 pub struct CntvCvalEl0: u64 {
2891 }
2892}
2893
2894impl CntvCvalEl0 {
2895 pub const COMPAREVALUE_SHIFT: u32 = 0;
2897 pub const COMPAREVALUE_MASK: u64 =
2899 0b1111111111111111111111111111111111111111111111111111111111111111;
2900
2901 pub const fn comparevalue(self) -> u64 {
2903 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2904 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2905 }
2906
2907 pub const fn set_comparevalue(&mut self, value: u64) {
2909 let offset = Self::COMPAREVALUE_SHIFT;
2910 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2911 *self = Self::from_bits_retain(
2912 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2913 );
2914 }
2915
2916 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2918 self.set_comparevalue(value);
2919 self
2920 }
2921}
2922
2923bitflags! {
2924 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2926 #[repr(transparent)]
2927 pub struct CntvTval: u32 {
2928 }
2929}
2930
2931impl CntvTval {
2932 pub const TIMERVALUE_SHIFT: u32 = 0;
2934 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
2936
2937 pub const fn timervalue(self) -> u32 {
2939 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2940 }
2941
2942 pub const fn set_timervalue(&mut self, value: u32) {
2944 let offset = Self::TIMERVALUE_SHIFT;
2945 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2946 *self = Self::from_bits_retain(
2947 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
2948 );
2949 }
2950
2951 pub const fn with_timervalue(mut self, value: u32) -> Self {
2953 self.set_timervalue(value);
2954 self
2955 }
2956}
2957
2958bitflags! {
2959 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2963 #[repr(transparent)]
2964 pub struct CntvTvalEl0: u64 {
2965 }
2966}
2967
2968impl CntvTvalEl0 {
2969 pub const TIMERVALUE_SHIFT: u32 = 0;
2971 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
2973
2974 pub const fn timervalue(self) -> u32 {
2976 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2977 }
2978
2979 pub const fn set_timervalue(&mut self, value: u32) {
2981 let offset = Self::TIMERVALUE_SHIFT;
2982 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2983 *self = Self::from_bits_retain(
2984 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
2985 );
2986 }
2987
2988 pub const fn with_timervalue(mut self, value: u32) -> Self {
2990 self.set_timervalue(value);
2991 self
2992 }
2993}
2994
2995bitflags! {
2996 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2998 #[repr(transparent)]
2999 pub struct Contextidr: u32 {
3000 }
3001}
3002
3003impl Contextidr {
3004 pub const ASID_SHIFT: u32 = 0;
3006 pub const ASID_MASK: u32 = 0b11111111;
3008
3009 pub const fn asid(self) -> u8 {
3011 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
3012 }
3013
3014 pub const fn set_asid(&mut self, value: u8) {
3016 let offset = Self::ASID_SHIFT;
3017 assert!(value & (Self::ASID_MASK as u8) == value);
3018 *self = Self::from_bits_retain(
3019 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u32) << offset),
3020 );
3021 }
3022
3023 pub const fn with_asid(mut self, value: u8) -> Self {
3025 self.set_asid(value);
3026 self
3027 }
3028}
3029
3030#[cfg(feature = "el1")]
3031bitflags! {
3032 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3034 #[repr(transparent)]
3035 pub struct ContextidrEl1: u64 {
3036 }
3037}
3038
3039#[cfg(feature = "el1")]
3040impl ContextidrEl1 {
3041 pub const PROCID_SHIFT: u32 = 0;
3043 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
3045
3046 pub const fn procid(self) -> u32 {
3048 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
3049 }
3050
3051 pub const fn set_procid(&mut self, value: u32) {
3053 let offset = Self::PROCID_SHIFT;
3054 assert!(value & (Self::PROCID_MASK as u32) == value);
3055 *self = Self::from_bits_retain(
3056 (self.bits() & !(Self::PROCID_MASK << offset)) | ((value as u64) << offset),
3057 );
3058 }
3059
3060 pub const fn with_procid(mut self, value: u32) -> Self {
3062 self.set_procid(value);
3063 self
3064 }
3065}
3066
3067#[cfg(feature = "el2")]
3068bitflags! {
3069 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3071 #[repr(transparent)]
3072 pub struct ContextidrEl2: u64 {
3073 }
3074}
3075
3076#[cfg(feature = "el2")]
3077impl ContextidrEl2 {
3078 pub const PROCID_SHIFT: u32 = 0;
3080 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
3082
3083 pub const fn procid(self) -> u32 {
3085 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
3086 }
3087
3088 pub const fn set_procid(&mut self, value: u32) {
3090 let offset = Self::PROCID_SHIFT;
3091 assert!(value & (Self::PROCID_MASK as u32) == value);
3092 *self = Self::from_bits_retain(
3093 (self.bits() & !(Self::PROCID_MASK << offset)) | ((value as u64) << offset),
3094 );
3095 }
3096
3097 pub const fn with_procid(mut self, value: u32) -> Self {
3099 self.set_procid(value);
3100 self
3101 }
3102}
3103
3104bitflags! {
3105 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3107 #[repr(transparent)]
3108 pub struct Cpacr: u32 {
3109 const TRCDIS = 1 << 28;
3111 const ASEDIS = 1 << 31;
3113 }
3114}
3115
3116impl Cpacr {
3117 pub const CP10_SHIFT: u32 = 20;
3119 pub const CP10_MASK: u32 = 0b11;
3121 pub const CP11_SHIFT: u32 = 22;
3123 pub const CP11_MASK: u32 = 0b11;
3125 pub const TRCDIS_SHIFT: u32 = 28;
3127 pub const ASEDIS_SHIFT: u32 = 31;
3129
3130 pub const fn cp10(self) -> u8 {
3132 ((self.bits() >> Self::CP10_SHIFT) & 0b11) as u8
3133 }
3134
3135 pub const fn set_cp10(&mut self, value: u8) {
3137 let offset = Self::CP10_SHIFT;
3138 assert!(value & (Self::CP10_MASK as u8) == value);
3139 *self = Self::from_bits_retain(
3140 (self.bits() & !(Self::CP10_MASK << offset)) | ((value as u32) << offset),
3141 );
3142 }
3143
3144 pub const fn with_cp10(mut self, value: u8) -> Self {
3146 self.set_cp10(value);
3147 self
3148 }
3149
3150 pub const fn cp11(self) -> u8 {
3152 ((self.bits() >> Self::CP11_SHIFT) & 0b11) as u8
3153 }
3154
3155 pub const fn set_cp11(&mut self, value: u8) {
3157 let offset = Self::CP11_SHIFT;
3158 assert!(value & (Self::CP11_MASK as u8) == value);
3159 *self = Self::from_bits_retain(
3160 (self.bits() & !(Self::CP11_MASK << offset)) | ((value as u32) << offset),
3161 );
3162 }
3163
3164 pub const fn with_cp11(mut self, value: u8) -> Self {
3166 self.set_cp11(value);
3167 self
3168 }
3169}
3170
3171#[cfg(feature = "el1")]
3172bitflags! {
3173 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3175 #[repr(transparent)]
3176 pub struct CpacrEl1: u64 {
3177 const TTA = 1 << 28;
3179 const E0POE = 1 << 29;
3181 const TAM = 1 << 30;
3183 const TCPAC = 1 << 31;
3185 const E0TP0E = 1 << 32;
3187 const E0TP1E = 1 << 33;
3189 }
3190}
3191
3192#[cfg(feature = "el1")]
3193impl CpacrEl1 {
3194 pub const ZEN_SHIFT: u32 = 16;
3196 pub const ZEN_MASK: u64 = 0b11;
3198 pub const FPEN_SHIFT: u32 = 20;
3200 pub const FPEN_MASK: u64 = 0b11;
3202 pub const SMEN_SHIFT: u32 = 24;
3204 pub const SMEN_MASK: u64 = 0b11;
3206 pub const TTA_SHIFT: u32 = 28;
3208 pub const E0POE_SHIFT: u32 = 29;
3210 pub const TAM_SHIFT: u32 = 30;
3212 pub const TCPAC_SHIFT: u32 = 31;
3214 pub const E0TP0E_SHIFT: u32 = 32;
3216 pub const E0TP1E_SHIFT: u32 = 33;
3218
3219 pub const fn zen(self) -> u8 {
3221 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
3222 }
3223
3224 pub const fn set_zen(&mut self, value: u8) {
3226 let offset = Self::ZEN_SHIFT;
3227 assert!(value & (Self::ZEN_MASK as u8) == value);
3228 *self = Self::from_bits_retain(
3229 (self.bits() & !(Self::ZEN_MASK << offset)) | ((value as u64) << offset),
3230 );
3231 }
3232
3233 pub const fn with_zen(mut self, value: u8) -> Self {
3235 self.set_zen(value);
3236 self
3237 }
3238
3239 pub const fn fpen(self) -> u8 {
3241 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
3242 }
3243
3244 pub const fn set_fpen(&mut self, value: u8) {
3246 let offset = Self::FPEN_SHIFT;
3247 assert!(value & (Self::FPEN_MASK as u8) == value);
3248 *self = Self::from_bits_retain(
3249 (self.bits() & !(Self::FPEN_MASK << offset)) | ((value as u64) << offset),
3250 );
3251 }
3252
3253 pub const fn with_fpen(mut self, value: u8) -> Self {
3255 self.set_fpen(value);
3256 self
3257 }
3258
3259 pub const fn smen(self) -> u8 {
3261 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
3262 }
3263
3264 pub const fn set_smen(&mut self, value: u8) {
3266 let offset = Self::SMEN_SHIFT;
3267 assert!(value & (Self::SMEN_MASK as u8) == value);
3268 *self = Self::from_bits_retain(
3269 (self.bits() & !(Self::SMEN_MASK << offset)) | ((value as u64) << offset),
3270 );
3271 }
3272
3273 pub const fn with_smen(mut self, value: u8) -> Self {
3275 self.set_smen(value);
3276 self
3277 }
3278}
3279
3280#[cfg(feature = "el2")]
3281bitflags! {
3282 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3284 #[repr(transparent)]
3285 pub struct CptrEl2: u64 {
3286 const RES1 = 0b10001011111111;
3288 const TZ = 1 << 8;
3290 const TFP = 1 << 10;
3292 const TSM = 1 << 12;
3294 const E0POE = 1 << 29;
3296 const TAM = 1 << 30;
3298 const TCPAC = 1 << 31;
3300 const E0TP0E = 1 << 32;
3302 const E0TP1E = 1 << 33;
3304 }
3305}
3306
3307#[cfg(feature = "el2")]
3308impl CptrEl2 {
3309 pub const TZ_SHIFT: u32 = 8;
3311 pub const TFP_SHIFT: u32 = 10;
3313 pub const TSM_SHIFT: u32 = 12;
3315 pub const ZEN_SHIFT: u32 = 16;
3317 pub const ZEN_MASK: u64 = 0b11;
3319 pub const FPEN_SHIFT: u32 = 20;
3321 pub const FPEN_MASK: u64 = 0b11;
3323 pub const SMEN_SHIFT: u32 = 24;
3325 pub const SMEN_MASK: u64 = 0b11;
3327 pub const E0POE_SHIFT: u32 = 29;
3329 pub const TAM_SHIFT: u32 = 30;
3331 pub const TCPAC_SHIFT: u32 = 31;
3333 pub const E0TP0E_SHIFT: u32 = 32;
3335 pub const E0TP1E_SHIFT: u32 = 33;
3337
3338 pub const fn zen(self) -> u8 {
3340 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
3341 }
3342
3343 pub const fn set_zen(&mut self, value: u8) {
3345 let offset = Self::ZEN_SHIFT;
3346 assert!(value & (Self::ZEN_MASK as u8) == value);
3347 *self = Self::from_bits_retain(
3348 (self.bits() & !(Self::ZEN_MASK << offset)) | ((value as u64) << offset),
3349 );
3350 }
3351
3352 pub const fn with_zen(mut self, value: u8) -> Self {
3354 self.set_zen(value);
3355 self
3356 }
3357
3358 pub const fn fpen(self) -> u8 {
3360 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
3361 }
3362
3363 pub const fn set_fpen(&mut self, value: u8) {
3365 let offset = Self::FPEN_SHIFT;
3366 assert!(value & (Self::FPEN_MASK as u8) == value);
3367 *self = Self::from_bits_retain(
3368 (self.bits() & !(Self::FPEN_MASK << offset)) | ((value as u64) << offset),
3369 );
3370 }
3371
3372 pub const fn with_fpen(mut self, value: u8) -> Self {
3374 self.set_fpen(value);
3375 self
3376 }
3377
3378 pub const fn smen(self) -> u8 {
3380 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
3381 }
3382
3383 pub const fn set_smen(&mut self, value: u8) {
3385 let offset = Self::SMEN_SHIFT;
3386 assert!(value & (Self::SMEN_MASK as u8) == value);
3387 *self = Self::from_bits_retain(
3388 (self.bits() & !(Self::SMEN_MASK << offset)) | ((value as u64) << offset),
3389 );
3390 }
3391
3392 pub const fn with_smen(mut self, value: u8) -> Self {
3394 self.set_smen(value);
3395 self
3396 }
3397}
3398
3399#[cfg(feature = "el3")]
3400bitflags! {
3401 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3403 #[repr(transparent)]
3404 pub struct CptrEl3: u64 {
3405 const EZ = 1 << 8;
3407 const TFP = 1 << 10;
3409 const ESM = 1 << 12;
3411 const TTA = 1 << 20;
3413 const TAM = 1 << 30;
3415 const TCPAC = 1 << 31;
3417 }
3418}
3419
3420#[cfg(feature = "el3")]
3421impl CptrEl3 {
3422 pub const EZ_SHIFT: u32 = 8;
3424 pub const TFP_SHIFT: u32 = 10;
3426 pub const ESM_SHIFT: u32 = 12;
3428 pub const TTA_SHIFT: u32 = 20;
3430 pub const TAM_SHIFT: u32 = 30;
3432 pub const TCPAC_SHIFT: u32 = 31;
3434}
3435
3436bitflags! {
3437 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3439 #[repr(transparent)]
3440 pub struct Csselr: u32 {
3441 const IND = 1 << 0;
3443 }
3444}
3445
3446impl Csselr {
3447 pub const IND_SHIFT: u32 = 0;
3449 pub const LEVEL_SHIFT: u32 = 1;
3451 pub const LEVEL_MASK: u32 = 0b111;
3453
3454 pub const fn level(self) -> u8 {
3456 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
3457 }
3458
3459 pub const fn set_level(&mut self, value: u8) {
3461 let offset = Self::LEVEL_SHIFT;
3462 assert!(value & (Self::LEVEL_MASK as u8) == value);
3463 *self = Self::from_bits_retain(
3464 (self.bits() & !(Self::LEVEL_MASK << offset)) | ((value as u32) << offset),
3465 );
3466 }
3467
3468 pub const fn with_level(mut self, value: u8) -> Self {
3470 self.set_level(value);
3471 self
3472 }
3473}
3474
3475#[cfg(feature = "el1")]
3476bitflags! {
3477 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3479 #[repr(transparent)]
3480 pub struct CsselrEl1: u64 {
3481 const IND = 1 << 0;
3483 const TND = 1 << 4;
3485 }
3486}
3487
3488#[cfg(feature = "el1")]
3489impl CsselrEl1 {
3490 pub const IND_SHIFT: u32 = 0;
3492 pub const LEVEL_SHIFT: u32 = 1;
3494 pub const LEVEL_MASK: u64 = 0b111;
3496 pub const TND_SHIFT: u32 = 4;
3498
3499 pub const fn level(self) -> u8 {
3501 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
3502 }
3503
3504 pub const fn set_level(&mut self, value: u8) {
3506 let offset = Self::LEVEL_SHIFT;
3507 assert!(value & (Self::LEVEL_MASK as u8) == value);
3508 *self = Self::from_bits_retain(
3509 (self.bits() & !(Self::LEVEL_MASK << offset)) | ((value as u64) << offset),
3510 );
3511 }
3512
3513 pub const fn with_level(mut self, value: u8) -> Self {
3515 self.set_level(value);
3516 self
3517 }
3518}
3519
3520bitflags! {
3521 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3523 #[repr(transparent)]
3524 pub struct Ctr: u32 {
3525 const RES1 = 0b10000000000000000000000000000000;
3527 const IDC = 1 << 28;
3529 const DIC = 1 << 29;
3531 }
3532}
3533
3534impl Ctr {
3535 pub const IMINLINE_SHIFT: u32 = 0;
3537 pub const IMINLINE_MASK: u32 = 0b1111;
3539 pub const L1IP_SHIFT: u32 = 14;
3541 pub const L1IP_MASK: u32 = 0b11;
3543 pub const DMINLINE_SHIFT: u32 = 16;
3545 pub const DMINLINE_MASK: u32 = 0b1111;
3547 pub const ERG_SHIFT: u32 = 20;
3549 pub const ERG_MASK: u32 = 0b1111;
3551 pub const CWG_SHIFT: u32 = 24;
3553 pub const CWG_MASK: u32 = 0b1111;
3555 pub const IDC_SHIFT: u32 = 28;
3557 pub const DIC_SHIFT: u32 = 29;
3559
3560 pub const fn iminline(self) -> u8 {
3562 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
3563 }
3564
3565 pub const fn set_iminline(&mut self, value: u8) {
3567 let offset = Self::IMINLINE_SHIFT;
3568 assert!(value & (Self::IMINLINE_MASK as u8) == value);
3569 *self = Self::from_bits_retain(
3570 (self.bits() & !(Self::IMINLINE_MASK << offset)) | ((value as u32) << offset),
3571 );
3572 }
3573
3574 pub const fn with_iminline(mut self, value: u8) -> Self {
3576 self.set_iminline(value);
3577 self
3578 }
3579
3580 pub const fn l1ip(self) -> u8 {
3582 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
3583 }
3584
3585 pub const fn set_l1ip(&mut self, value: u8) {
3587 let offset = Self::L1IP_SHIFT;
3588 assert!(value & (Self::L1IP_MASK as u8) == value);
3589 *self = Self::from_bits_retain(
3590 (self.bits() & !(Self::L1IP_MASK << offset)) | ((value as u32) << offset),
3591 );
3592 }
3593
3594 pub const fn with_l1ip(mut self, value: u8) -> Self {
3596 self.set_l1ip(value);
3597 self
3598 }
3599
3600 pub const fn dminline(self) -> u8 {
3602 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
3603 }
3604
3605 pub const fn set_dminline(&mut self, value: u8) {
3607 let offset = Self::DMINLINE_SHIFT;
3608 assert!(value & (Self::DMINLINE_MASK as u8) == value);
3609 *self = Self::from_bits_retain(
3610 (self.bits() & !(Self::DMINLINE_MASK << offset)) | ((value as u32) << offset),
3611 );
3612 }
3613
3614 pub const fn with_dminline(mut self, value: u8) -> Self {
3616 self.set_dminline(value);
3617 self
3618 }
3619
3620 pub const fn erg(self) -> u8 {
3622 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
3623 }
3624
3625 pub const fn set_erg(&mut self, value: u8) {
3627 let offset = Self::ERG_SHIFT;
3628 assert!(value & (Self::ERG_MASK as u8) == value);
3629 *self = Self::from_bits_retain(
3630 (self.bits() & !(Self::ERG_MASK << offset)) | ((value as u32) << offset),
3631 );
3632 }
3633
3634 pub const fn with_erg(mut self, value: u8) -> Self {
3636 self.set_erg(value);
3637 self
3638 }
3639
3640 pub const fn cwg(self) -> u8 {
3642 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
3643 }
3644
3645 pub const fn set_cwg(&mut self, value: u8) {
3647 let offset = Self::CWG_SHIFT;
3648 assert!(value & (Self::CWG_MASK as u8) == value);
3649 *self = Self::from_bits_retain(
3650 (self.bits() & !(Self::CWG_MASK << offset)) | ((value as u32) << offset),
3651 );
3652 }
3653
3654 pub const fn with_cwg(mut self, value: u8) -> Self {
3656 self.set_cwg(value);
3657 self
3658 }
3659}
3660
3661bitflags! {
3662 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3666 #[repr(transparent)]
3667 pub struct CtrEl0: u64 {
3668 const RES1 = 0b10000000000000000000000000000000;
3670 const IDC = 1 << 28;
3672 const DIC = 1 << 29;
3674 }
3675}
3676
3677impl CtrEl0 {
3678 pub const IMINLINE_SHIFT: u32 = 0;
3680 pub const IMINLINE_MASK: u64 = 0b1111;
3682 pub const L1IP_SHIFT: u32 = 14;
3684 pub const L1IP_MASK: u64 = 0b11;
3686 pub const DMINLINE_SHIFT: u32 = 16;
3688 pub const DMINLINE_MASK: u64 = 0b1111;
3690 pub const ERG_SHIFT: u32 = 20;
3692 pub const ERG_MASK: u64 = 0b1111;
3694 pub const CWG_SHIFT: u32 = 24;
3696 pub const CWG_MASK: u64 = 0b1111;
3698 pub const IDC_SHIFT: u32 = 28;
3700 pub const DIC_SHIFT: u32 = 29;
3702 pub const TMINLINE_SHIFT: u32 = 32;
3704 pub const TMINLINE_MASK: u64 = 0b111111;
3706
3707 pub const fn iminline(self) -> u8 {
3709 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
3710 }
3711
3712 pub const fn set_iminline(&mut self, value: u8) {
3714 let offset = Self::IMINLINE_SHIFT;
3715 assert!(value & (Self::IMINLINE_MASK as u8) == value);
3716 *self = Self::from_bits_retain(
3717 (self.bits() & !(Self::IMINLINE_MASK << offset)) | ((value as u64) << offset),
3718 );
3719 }
3720
3721 pub const fn with_iminline(mut self, value: u8) -> Self {
3723 self.set_iminline(value);
3724 self
3725 }
3726
3727 pub const fn l1ip(self) -> u8 {
3729 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
3730 }
3731
3732 pub const fn set_l1ip(&mut self, value: u8) {
3734 let offset = Self::L1IP_SHIFT;
3735 assert!(value & (Self::L1IP_MASK as u8) == value);
3736 *self = Self::from_bits_retain(
3737 (self.bits() & !(Self::L1IP_MASK << offset)) | ((value as u64) << offset),
3738 );
3739 }
3740
3741 pub const fn with_l1ip(mut self, value: u8) -> Self {
3743 self.set_l1ip(value);
3744 self
3745 }
3746
3747 pub const fn dminline(self) -> u8 {
3751 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
3752 }
3753
3754 pub const fn set_dminline(&mut self, value: u8) {
3758 let offset = Self::DMINLINE_SHIFT;
3759 assert!(value & (Self::DMINLINE_MASK as u8) == value);
3760 *self = Self::from_bits_retain(
3761 (self.bits() & !(Self::DMINLINE_MASK << offset)) | ((value as u64) << offset),
3762 );
3763 }
3764
3765 pub const fn with_dminline(mut self, value: u8) -> Self {
3769 self.set_dminline(value);
3770 self
3771 }
3772
3773 pub const fn erg(self) -> u8 {
3775 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
3776 }
3777
3778 pub const fn set_erg(&mut self, value: u8) {
3780 let offset = Self::ERG_SHIFT;
3781 assert!(value & (Self::ERG_MASK as u8) == value);
3782 *self = Self::from_bits_retain(
3783 (self.bits() & !(Self::ERG_MASK << offset)) | ((value as u64) << offset),
3784 );
3785 }
3786
3787 pub const fn with_erg(mut self, value: u8) -> Self {
3789 self.set_erg(value);
3790 self
3791 }
3792
3793 pub const fn cwg(self) -> u8 {
3795 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
3796 }
3797
3798 pub const fn set_cwg(&mut self, value: u8) {
3800 let offset = Self::CWG_SHIFT;
3801 assert!(value & (Self::CWG_MASK as u8) == value);
3802 *self = Self::from_bits_retain(
3803 (self.bits() & !(Self::CWG_MASK << offset)) | ((value as u64) << offset),
3804 );
3805 }
3806
3807 pub const fn with_cwg(mut self, value: u8) -> Self {
3809 self.set_cwg(value);
3810 self
3811 }
3812
3813 pub const fn tminline(self) -> u8 {
3815 ((self.bits() >> Self::TMINLINE_SHIFT) & 0b111111) as u8
3816 }
3817
3818 pub const fn set_tminline(&mut self, value: u8) {
3820 let offset = Self::TMINLINE_SHIFT;
3821 assert!(value & (Self::TMINLINE_MASK as u8) == value);
3822 *self = Self::from_bits_retain(
3823 (self.bits() & !(Self::TMINLINE_MASK << offset)) | ((value as u64) << offset),
3824 );
3825 }
3826
3827 pub const fn with_tminline(mut self, value: u8) -> Self {
3829 self.set_tminline(value);
3830 self
3831 }
3832}
3833
3834bitflags! {
3835 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3837 #[repr(transparent)]
3838 pub struct Currentel: u64 {
3839 }
3840}
3841
3842impl Currentel {
3843 pub const EL_SHIFT: u32 = 2;
3845 pub const EL_MASK: u64 = 0b11;
3847
3848 pub const fn el(self) -> u8 {
3850 ((self.bits() >> Self::EL_SHIFT) & 0b11) as u8
3851 }
3852
3853 pub const fn set_el(&mut self, value: u8) {
3855 let offset = Self::EL_SHIFT;
3856 assert!(value & (Self::EL_MASK as u8) == value);
3857 *self = Self::from_bits_retain(
3858 (self.bits() & !(Self::EL_MASK << offset)) | ((value as u64) << offset),
3859 );
3860 }
3861
3862 pub const fn with_el(mut self, value: u8) -> Self {
3864 self.set_el(value);
3865 self
3866 }
3867}
3868
3869bitflags! {
3870 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3872 #[repr(transparent)]
3873 pub struct Dacr: u32 {
3874 }
3875}
3876
3877impl Dacr {
3878 pub const D_SHIFT: u32 = 0;
3880 pub const D_MASK: u32 = 0b11;
3882
3883 pub const fn d(self, n: u32) -> u8 {
3885 assert!(n < 16);
3886 ((self.bits() >> (Self::D_SHIFT + (n - 0) * 2)) & 0b11) as u8
3887 }
3888
3889 pub const fn set_d(&mut self, n: u32, value: u8) {
3891 assert!(n < 16);
3892 let offset = Self::D_SHIFT + (n - 0) * 2;
3893 assert!(value & (Self::D_MASK as u8) == value);
3894 *self = Self::from_bits_retain(
3895 (self.bits() & !(Self::D_MASK << offset)) | ((value as u32) << offset),
3896 );
3897 }
3898
3899 pub const fn with_d(mut self, n: u32, value: u8) -> Self {
3901 self.set_d(n, value);
3902 self
3903 }
3904}
3905
3906bitflags! {
3907 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3909 #[repr(transparent)]
3910 pub struct Dbgauthstatus: u32 {
3911 }
3912}
3913
3914impl Dbgauthstatus {
3915 pub const NSID_SHIFT: u32 = 0;
3917 pub const NSID_MASK: u32 = 0b11;
3919 pub const NSNID_SHIFT: u32 = 2;
3921 pub const NSNID_MASK: u32 = 0b11;
3923 pub const SID_SHIFT: u32 = 4;
3925 pub const SID_MASK: u32 = 0b11;
3927 pub const SNID_SHIFT: u32 = 6;
3929 pub const SNID_MASK: u32 = 0b11;
3931
3932 pub const fn nsid(self) -> u8 {
3934 ((self.bits() >> Self::NSID_SHIFT) & 0b11) as u8
3935 }
3936
3937 pub const fn set_nsid(&mut self, value: u8) {
3939 let offset = Self::NSID_SHIFT;
3940 assert!(value & (Self::NSID_MASK as u8) == value);
3941 *self = Self::from_bits_retain(
3942 (self.bits() & !(Self::NSID_MASK << offset)) | ((value as u32) << offset),
3943 );
3944 }
3945
3946 pub const fn with_nsid(mut self, value: u8) -> Self {
3948 self.set_nsid(value);
3949 self
3950 }
3951
3952 pub const fn nsnid(self) -> u8 {
3954 ((self.bits() >> Self::NSNID_SHIFT) & 0b11) as u8
3955 }
3956
3957 pub const fn set_nsnid(&mut self, value: u8) {
3959 let offset = Self::NSNID_SHIFT;
3960 assert!(value & (Self::NSNID_MASK as u8) == value);
3961 *self = Self::from_bits_retain(
3962 (self.bits() & !(Self::NSNID_MASK << offset)) | ((value as u32) << offset),
3963 );
3964 }
3965
3966 pub const fn with_nsnid(mut self, value: u8) -> Self {
3968 self.set_nsnid(value);
3969 self
3970 }
3971
3972 pub const fn sid(self) -> u8 {
3974 ((self.bits() >> Self::SID_SHIFT) & 0b11) as u8
3975 }
3976
3977 pub const fn set_sid(&mut self, value: u8) {
3979 let offset = Self::SID_SHIFT;
3980 assert!(value & (Self::SID_MASK as u8) == value);
3981 *self = Self::from_bits_retain(
3982 (self.bits() & !(Self::SID_MASK << offset)) | ((value as u32) << offset),
3983 );
3984 }
3985
3986 pub const fn with_sid(mut self, value: u8) -> Self {
3988 self.set_sid(value);
3989 self
3990 }
3991
3992 pub const fn snid(self) -> u8 {
3994 ((self.bits() >> Self::SNID_SHIFT) & 0b11) as u8
3995 }
3996
3997 pub const fn set_snid(&mut self, value: u8) {
3999 let offset = Self::SNID_SHIFT;
4000 assert!(value & (Self::SNID_MASK as u8) == value);
4001 *self = Self::from_bits_retain(
4002 (self.bits() & !(Self::SNID_MASK << offset)) | ((value as u32) << offset),
4003 );
4004 }
4005
4006 pub const fn with_snid(mut self, value: u8) -> Self {
4008 self.set_snid(value);
4009 self
4010 }
4011}
4012
4013bitflags! {
4014 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4016 #[repr(transparent)]
4017 pub struct Dbgclaimclr: u32 {
4018 const CLAIM0 = 1 << 0;
4020 const CLAIM1 = 1 << 1;
4022 const CLAIM2 = 1 << 2;
4024 const CLAIM3 = 1 << 3;
4026 const CLAIM4 = 1 << 4;
4028 const CLAIM5 = 1 << 5;
4030 const CLAIM6 = 1 << 6;
4032 const CLAIM7 = 1 << 7;
4034 }
4035}
4036
4037impl Dbgclaimclr {
4038 pub const CLAIM_SHIFT: u32 = 0;
4040}
4041
4042bitflags! {
4043 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4045 #[repr(transparent)]
4046 pub struct Dbgclaimset: u32 {
4047 const CLAIM0 = 1 << 0;
4049 const CLAIM1 = 1 << 1;
4051 const CLAIM2 = 1 << 2;
4053 const CLAIM3 = 1 << 3;
4055 const CLAIM4 = 1 << 4;
4057 const CLAIM5 = 1 << 5;
4059 const CLAIM6 = 1 << 6;
4061 const CLAIM7 = 1 << 7;
4063 }
4064}
4065
4066impl Dbgclaimset {
4067 pub const CLAIM_SHIFT: u32 = 0;
4069}
4070
4071bitflags! {
4072 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4074 #[repr(transparent)]
4075 pub struct Dbgdccint: u32 {
4076 const TX = 1 << 29;
4078 const RX = 1 << 30;
4080 }
4081}
4082
4083impl Dbgdccint {
4084 pub const TX_SHIFT: u32 = 29;
4086 pub const RX_SHIFT: u32 = 30;
4088}
4089
4090bitflags! {
4091 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4093 #[repr(transparent)]
4094 pub struct Dbgdevid: u32 {
4095 }
4096}
4097
4098impl Dbgdevid {
4099 pub const PCSAMPLE_SHIFT: u32 = 0;
4101 pub const PCSAMPLE_MASK: u32 = 0b1111;
4103 pub const WPADDRMASK_SHIFT: u32 = 4;
4105 pub const WPADDRMASK_MASK: u32 = 0b1111;
4107 pub const BPADDRMASK_SHIFT: u32 = 8;
4109 pub const BPADDRMASK_MASK: u32 = 0b1111;
4111 pub const VECTORCATCH_SHIFT: u32 = 12;
4113 pub const VECTORCATCH_MASK: u32 = 0b1111;
4115 pub const VIRTEXTNS_SHIFT: u32 = 16;
4117 pub const VIRTEXTNS_MASK: u32 = 0b1111;
4119 pub const DOUBLELOCK_SHIFT: u32 = 20;
4121 pub const DOUBLELOCK_MASK: u32 = 0b1111;
4123 pub const AUXREGS_SHIFT: u32 = 24;
4125 pub const AUXREGS_MASK: u32 = 0b1111;
4127 pub const CIDMASK_SHIFT: u32 = 28;
4129 pub const CIDMASK_MASK: u32 = 0b1111;
4131
4132 pub const fn pcsample(self) -> u8 {
4134 ((self.bits() >> Self::PCSAMPLE_SHIFT) & 0b1111) as u8
4135 }
4136
4137 pub const fn set_pcsample(&mut self, value: u8) {
4139 let offset = Self::PCSAMPLE_SHIFT;
4140 assert!(value & (Self::PCSAMPLE_MASK as u8) == value);
4141 *self = Self::from_bits_retain(
4142 (self.bits() & !(Self::PCSAMPLE_MASK << offset)) | ((value as u32) << offset),
4143 );
4144 }
4145
4146 pub const fn with_pcsample(mut self, value: u8) -> Self {
4148 self.set_pcsample(value);
4149 self
4150 }
4151
4152 pub const fn wpaddrmask(self) -> u8 {
4154 ((self.bits() >> Self::WPADDRMASK_SHIFT) & 0b1111) as u8
4155 }
4156
4157 pub const fn set_wpaddrmask(&mut self, value: u8) {
4159 let offset = Self::WPADDRMASK_SHIFT;
4160 assert!(value & (Self::WPADDRMASK_MASK as u8) == value);
4161 *self = Self::from_bits_retain(
4162 (self.bits() & !(Self::WPADDRMASK_MASK << offset)) | ((value as u32) << offset),
4163 );
4164 }
4165
4166 pub const fn with_wpaddrmask(mut self, value: u8) -> Self {
4168 self.set_wpaddrmask(value);
4169 self
4170 }
4171
4172 pub const fn bpaddrmask(self) -> u8 {
4174 ((self.bits() >> Self::BPADDRMASK_SHIFT) & 0b1111) as u8
4175 }
4176
4177 pub const fn set_bpaddrmask(&mut self, value: u8) {
4179 let offset = Self::BPADDRMASK_SHIFT;
4180 assert!(value & (Self::BPADDRMASK_MASK as u8) == value);
4181 *self = Self::from_bits_retain(
4182 (self.bits() & !(Self::BPADDRMASK_MASK << offset)) | ((value as u32) << offset),
4183 );
4184 }
4185
4186 pub const fn with_bpaddrmask(mut self, value: u8) -> Self {
4188 self.set_bpaddrmask(value);
4189 self
4190 }
4191
4192 pub const fn vectorcatch(self) -> u8 {
4194 ((self.bits() >> Self::VECTORCATCH_SHIFT) & 0b1111) as u8
4195 }
4196
4197 pub const fn set_vectorcatch(&mut self, value: u8) {
4199 let offset = Self::VECTORCATCH_SHIFT;
4200 assert!(value & (Self::VECTORCATCH_MASK as u8) == value);
4201 *self = Self::from_bits_retain(
4202 (self.bits() & !(Self::VECTORCATCH_MASK << offset)) | ((value as u32) << offset),
4203 );
4204 }
4205
4206 pub const fn with_vectorcatch(mut self, value: u8) -> Self {
4208 self.set_vectorcatch(value);
4209 self
4210 }
4211
4212 pub const fn virtextns(self) -> u8 {
4214 ((self.bits() >> Self::VIRTEXTNS_SHIFT) & 0b1111) as u8
4215 }
4216
4217 pub const fn set_virtextns(&mut self, value: u8) {
4219 let offset = Self::VIRTEXTNS_SHIFT;
4220 assert!(value & (Self::VIRTEXTNS_MASK as u8) == value);
4221 *self = Self::from_bits_retain(
4222 (self.bits() & !(Self::VIRTEXTNS_MASK << offset)) | ((value as u32) << offset),
4223 );
4224 }
4225
4226 pub const fn with_virtextns(mut self, value: u8) -> Self {
4228 self.set_virtextns(value);
4229 self
4230 }
4231
4232 pub const fn doublelock(self) -> u8 {
4234 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
4235 }
4236
4237 pub const fn set_doublelock(&mut self, value: u8) {
4239 let offset = Self::DOUBLELOCK_SHIFT;
4240 assert!(value & (Self::DOUBLELOCK_MASK as u8) == value);
4241 *self = Self::from_bits_retain(
4242 (self.bits() & !(Self::DOUBLELOCK_MASK << offset)) | ((value as u32) << offset),
4243 );
4244 }
4245
4246 pub const fn with_doublelock(mut self, value: u8) -> Self {
4248 self.set_doublelock(value);
4249 self
4250 }
4251
4252 pub const fn auxregs(self) -> u8 {
4254 ((self.bits() >> Self::AUXREGS_SHIFT) & 0b1111) as u8
4255 }
4256
4257 pub const fn set_auxregs(&mut self, value: u8) {
4259 let offset = Self::AUXREGS_SHIFT;
4260 assert!(value & (Self::AUXREGS_MASK as u8) == value);
4261 *self = Self::from_bits_retain(
4262 (self.bits() & !(Self::AUXREGS_MASK << offset)) | ((value as u32) << offset),
4263 );
4264 }
4265
4266 pub const fn with_auxregs(mut self, value: u8) -> Self {
4268 self.set_auxregs(value);
4269 self
4270 }
4271
4272 pub const fn cidmask(self) -> u8 {
4274 ((self.bits() >> Self::CIDMASK_SHIFT) & 0b1111) as u8
4275 }
4276
4277 pub const fn set_cidmask(&mut self, value: u8) {
4279 let offset = Self::CIDMASK_SHIFT;
4280 assert!(value & (Self::CIDMASK_MASK as u8) == value);
4281 *self = Self::from_bits_retain(
4282 (self.bits() & !(Self::CIDMASK_MASK << offset)) | ((value as u32) << offset),
4283 );
4284 }
4285
4286 pub const fn with_cidmask(mut self, value: u8) -> Self {
4288 self.set_cidmask(value);
4289 self
4290 }
4291}
4292
4293bitflags! {
4294 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4296 #[repr(transparent)]
4297 pub struct Dbgdevid1: u32 {
4298 }
4299}
4300
4301impl Dbgdevid1 {
4302 pub const PCSROFFSET_SHIFT: u32 = 0;
4304 pub const PCSROFFSET_MASK: u32 = 0b1111;
4306
4307 pub const fn pcsroffset(self) -> u8 {
4309 ((self.bits() >> Self::PCSROFFSET_SHIFT) & 0b1111) as u8
4310 }
4311
4312 pub const fn set_pcsroffset(&mut self, value: u8) {
4314 let offset = Self::PCSROFFSET_SHIFT;
4315 assert!(value & (Self::PCSROFFSET_MASK as u8) == value);
4316 *self = Self::from_bits_retain(
4317 (self.bits() & !(Self::PCSROFFSET_MASK << offset)) | ((value as u32) << offset),
4318 );
4319 }
4320
4321 pub const fn with_pcsroffset(mut self, value: u8) -> Self {
4323 self.set_pcsroffset(value);
4324 self
4325 }
4326}
4327
4328bitflags! {
4329 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4331 #[repr(transparent)]
4332 pub struct Dbgdidr: u32 {
4333 const RES1 = 0b1000000000000000;
4335 const SE_IMP = 1 << 12;
4337 const NSUHD_IMP = 1 << 14;
4339 }
4340}
4341
4342impl Dbgdidr {
4343 pub const SE_IMP_SHIFT: u32 = 12;
4345 pub const NSUHD_IMP_SHIFT: u32 = 14;
4347 pub const VERSION_SHIFT: u32 = 16;
4349 pub const VERSION_MASK: u32 = 0b1111;
4351 pub const CTX_CMPS_SHIFT: u32 = 20;
4353 pub const CTX_CMPS_MASK: u32 = 0b1111;
4355 pub const BRPS_SHIFT: u32 = 24;
4357 pub const BRPS_MASK: u32 = 0b1111;
4359 pub const WRPS_SHIFT: u32 = 28;
4361 pub const WRPS_MASK: u32 = 0b1111;
4363
4364 pub const fn version(self) -> u8 {
4366 ((self.bits() >> Self::VERSION_SHIFT) & 0b1111) as u8
4367 }
4368
4369 pub const fn set_version(&mut self, value: u8) {
4371 let offset = Self::VERSION_SHIFT;
4372 assert!(value & (Self::VERSION_MASK as u8) == value);
4373 *self = Self::from_bits_retain(
4374 (self.bits() & !(Self::VERSION_MASK << offset)) | ((value as u32) << offset),
4375 );
4376 }
4377
4378 pub const fn with_version(mut self, value: u8) -> Self {
4380 self.set_version(value);
4381 self
4382 }
4383
4384 pub const fn ctx_cmps(self) -> u8 {
4386 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
4387 }
4388
4389 pub const fn set_ctx_cmps(&mut self, value: u8) {
4391 let offset = Self::CTX_CMPS_SHIFT;
4392 assert!(value & (Self::CTX_CMPS_MASK as u8) == value);
4393 *self = Self::from_bits_retain(
4394 (self.bits() & !(Self::CTX_CMPS_MASK << offset)) | ((value as u32) << offset),
4395 );
4396 }
4397
4398 pub const fn with_ctx_cmps(mut self, value: u8) -> Self {
4400 self.set_ctx_cmps(value);
4401 self
4402 }
4403
4404 pub const fn brps(self) -> u8 {
4406 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
4407 }
4408
4409 pub const fn set_brps(&mut self, value: u8) {
4411 let offset = Self::BRPS_SHIFT;
4412 assert!(value & (Self::BRPS_MASK as u8) == value);
4413 *self = Self::from_bits_retain(
4414 (self.bits() & !(Self::BRPS_MASK << offset)) | ((value as u32) << offset),
4415 );
4416 }
4417
4418 pub const fn with_brps(mut self, value: u8) -> Self {
4420 self.set_brps(value);
4421 self
4422 }
4423
4424 pub const fn wrps(self) -> u8 {
4426 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
4427 }
4428
4429 pub const fn set_wrps(&mut self, value: u8) {
4431 let offset = Self::WRPS_SHIFT;
4432 assert!(value & (Self::WRPS_MASK as u8) == value);
4433 *self = Self::from_bits_retain(
4434 (self.bits() & !(Self::WRPS_MASK << offset)) | ((value as u32) << offset),
4435 );
4436 }
4437
4438 pub const fn with_wrps(mut self, value: u8) -> Self {
4440 self.set_wrps(value);
4441 self
4442 }
4443}
4444
4445bitflags! {
4446 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4448 #[repr(transparent)]
4449 pub struct Dbgdrar: u64 {
4450 }
4451}
4452
4453impl Dbgdrar {
4454 pub const VALID_SHIFT: u32 = 0;
4456 pub const VALID_MASK: u64 = 0b11;
4458 pub const ROMADDR_47_12_SHIFT: u32 = 12;
4460 pub const ROMADDR_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
4462
4463 pub const fn valid(self) -> u8 {
4465 ((self.bits() >> Self::VALID_SHIFT) & 0b11) as u8
4466 }
4467
4468 pub const fn set_valid(&mut self, value: u8) {
4470 let offset = Self::VALID_SHIFT;
4471 assert!(value & (Self::VALID_MASK as u8) == value);
4472 *self = Self::from_bits_retain(
4473 (self.bits() & !(Self::VALID_MASK << offset)) | ((value as u64) << offset),
4474 );
4475 }
4476
4477 pub const fn with_valid(mut self, value: u8) -> Self {
4479 self.set_valid(value);
4480 self
4481 }
4482
4483 pub const fn romaddr_47_12(self) -> u64 {
4485 ((self.bits() >> Self::ROMADDR_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
4486 }
4487
4488 pub const fn set_romaddr_47_12(&mut self, value: u64) {
4490 let offset = Self::ROMADDR_47_12_SHIFT;
4491 assert!(value & (Self::ROMADDR_47_12_MASK as u64) == value);
4492 *self = Self::from_bits_retain(
4493 (self.bits() & !(Self::ROMADDR_47_12_MASK << offset)) | ((value as u64) << offset),
4494 );
4495 }
4496
4497 pub const fn with_romaddr_47_12(mut self, value: u64) -> Self {
4499 self.set_romaddr_47_12(value);
4500 self
4501 }
4502}
4503
4504bitflags! {
4505 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4507 #[repr(transparent)]
4508 pub struct Dbgdscrext: u32 {
4509 const ERR = 1 << 6;
4511 const UDCCDIS = 1 << 12;
4513 const HDE = 1 << 14;
4515 const MDBGEN = 1 << 15;
4517 const SPIDDIS = 1 << 16;
4519 const SPNIDDIS = 1 << 17;
4521 const NS = 1 << 18;
4523 const SC2 = 1 << 19;
4525 const TDA = 1 << 21;
4527 const TXU = 1 << 26;
4529 const RXO = 1 << 27;
4531 const TXFULL = 1 << 29;
4533 const RXFULL = 1 << 30;
4535 const TFO = 1 << 31;
4537 }
4538}
4539
4540impl Dbgdscrext {
4541 pub const MOE_SHIFT: u32 = 2;
4543 pub const MOE_MASK: u32 = 0b1111;
4545 pub const ERR_SHIFT: u32 = 6;
4547 pub const UDCCDIS_SHIFT: u32 = 12;
4549 pub const HDE_SHIFT: u32 = 14;
4551 pub const MDBGEN_SHIFT: u32 = 15;
4553 pub const SPIDDIS_SHIFT: u32 = 16;
4555 pub const SPNIDDIS_SHIFT: u32 = 17;
4557 pub const NS_SHIFT: u32 = 18;
4559 pub const SC2_SHIFT: u32 = 19;
4561 pub const TDA_SHIFT: u32 = 21;
4563 pub const INTDIS_SHIFT: u32 = 22;
4565 pub const INTDIS_MASK: u32 = 0b11;
4567 pub const TXU_SHIFT: u32 = 26;
4569 pub const RXO_SHIFT: u32 = 27;
4571 pub const TXFULL_SHIFT: u32 = 29;
4573 pub const RXFULL_SHIFT: u32 = 30;
4575 pub const TFO_SHIFT: u32 = 31;
4577
4578 pub const fn moe(self) -> u8 {
4580 ((self.bits() >> Self::MOE_SHIFT) & 0b1111) as u8
4581 }
4582
4583 pub const fn set_moe(&mut self, value: u8) {
4585 let offset = Self::MOE_SHIFT;
4586 assert!(value & (Self::MOE_MASK as u8) == value);
4587 *self = Self::from_bits_retain(
4588 (self.bits() & !(Self::MOE_MASK << offset)) | ((value as u32) << offset),
4589 );
4590 }
4591
4592 pub const fn with_moe(mut self, value: u8) -> Self {
4594 self.set_moe(value);
4595 self
4596 }
4597
4598 pub const fn intdis(self) -> u8 {
4600 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
4601 }
4602
4603 pub const fn set_intdis(&mut self, value: u8) {
4605 let offset = Self::INTDIS_SHIFT;
4606 assert!(value & (Self::INTDIS_MASK as u8) == value);
4607 *self = Self::from_bits_retain(
4608 (self.bits() & !(Self::INTDIS_MASK << offset)) | ((value as u32) << offset),
4609 );
4610 }
4611
4612 pub const fn with_intdis(mut self, value: u8) -> Self {
4614 self.set_intdis(value);
4615 self
4616 }
4617}
4618
4619bitflags! {
4620 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4622 #[repr(transparent)]
4623 pub struct Dbgdscrint: u32 {
4624 const UDCCDIS = 1 << 12;
4626 const MDBGEN = 1 << 15;
4628 const SPIDDIS = 1 << 16;
4630 const SPNIDDIS = 1 << 17;
4632 const NS = 1 << 18;
4634 const TXFULL = 1 << 29;
4636 const RXFULL = 1 << 30;
4638 }
4639}
4640
4641impl Dbgdscrint {
4642 pub const MOE_SHIFT: u32 = 2;
4644 pub const MOE_MASK: u32 = 0b1111;
4646 pub const UDCCDIS_SHIFT: u32 = 12;
4648 pub const MDBGEN_SHIFT: u32 = 15;
4650 pub const SPIDDIS_SHIFT: u32 = 16;
4652 pub const SPNIDDIS_SHIFT: u32 = 17;
4654 pub const NS_SHIFT: u32 = 18;
4656 pub const TXFULL_SHIFT: u32 = 29;
4658 pub const RXFULL_SHIFT: u32 = 30;
4660
4661 pub const fn moe(self) -> u8 {
4663 ((self.bits() >> Self::MOE_SHIFT) & 0b1111) as u8
4664 }
4665
4666 pub const fn set_moe(&mut self, value: u8) {
4668 let offset = Self::MOE_SHIFT;
4669 assert!(value & (Self::MOE_MASK as u8) == value);
4670 *self = Self::from_bits_retain(
4671 (self.bits() & !(Self::MOE_MASK << offset)) | ((value as u32) << offset),
4672 );
4673 }
4674
4675 pub const fn with_moe(mut self, value: u8) -> Self {
4677 self.set_moe(value);
4678 self
4679 }
4680}
4681
4682bitflags! {
4683 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4685 #[repr(transparent)]
4686 pub struct Dbgdtrrxext: u32 {
4687 }
4688}
4689
4690impl Dbgdtrrxext {
4691 pub const DTRRX_SHIFT: u32 = 0;
4693 pub const DTRRX_MASK: u32 = 0b11111111111111111111111111111111;
4695
4696 pub const fn dtrrx(self) -> u32 {
4698 ((self.bits() >> Self::DTRRX_SHIFT) & 0b11111111111111111111111111111111) as u32
4699 }
4700
4701 pub const fn set_dtrrx(&mut self, value: u32) {
4703 let offset = Self::DTRRX_SHIFT;
4704 assert!(value & (Self::DTRRX_MASK as u32) == value);
4705 *self = Self::from_bits_retain(
4706 (self.bits() & !(Self::DTRRX_MASK << offset)) | ((value as u32) << offset),
4707 );
4708 }
4709
4710 pub const fn with_dtrrx(mut self, value: u32) -> Self {
4712 self.set_dtrrx(value);
4713 self
4714 }
4715}
4716
4717bitflags! {
4718 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4720 #[repr(transparent)]
4721 pub struct Dbgdtrrxint: u32 {
4722 }
4723}
4724
4725impl Dbgdtrrxint {
4726 pub const DTRRX_SHIFT: u32 = 0;
4728 pub const DTRRX_MASK: u32 = 0b11111111111111111111111111111111;
4730
4731 pub const fn dtrrx(self) -> u32 {
4733 ((self.bits() >> Self::DTRRX_SHIFT) & 0b11111111111111111111111111111111) as u32
4734 }
4735
4736 pub const fn set_dtrrx(&mut self, value: u32) {
4738 let offset = Self::DTRRX_SHIFT;
4739 assert!(value & (Self::DTRRX_MASK as u32) == value);
4740 *self = Self::from_bits_retain(
4741 (self.bits() & !(Self::DTRRX_MASK << offset)) | ((value as u32) << offset),
4742 );
4743 }
4744
4745 pub const fn with_dtrrx(mut self, value: u32) -> Self {
4747 self.set_dtrrx(value);
4748 self
4749 }
4750}
4751
4752bitflags! {
4753 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4755 #[repr(transparent)]
4756 pub struct Dbgdtrtxext: u32 {
4757 }
4758}
4759
4760impl Dbgdtrtxext {
4761 pub const DTRTX_SHIFT: u32 = 0;
4763 pub const DTRTX_MASK: u32 = 0b11111111111111111111111111111111;
4765
4766 pub const fn dtrtx(self) -> u32 {
4768 ((self.bits() >> Self::DTRTX_SHIFT) & 0b11111111111111111111111111111111) as u32
4769 }
4770
4771 pub const fn set_dtrtx(&mut self, value: u32) {
4773 let offset = Self::DTRTX_SHIFT;
4774 assert!(value & (Self::DTRTX_MASK as u32) == value);
4775 *self = Self::from_bits_retain(
4776 (self.bits() & !(Self::DTRTX_MASK << offset)) | ((value as u32) << offset),
4777 );
4778 }
4779
4780 pub const fn with_dtrtx(mut self, value: u32) -> Self {
4782 self.set_dtrtx(value);
4783 self
4784 }
4785}
4786
4787bitflags! {
4788 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4790 #[repr(transparent)]
4791 pub struct Dbgdtrtxint: u32 {
4792 }
4793}
4794
4795impl Dbgdtrtxint {
4796 pub const DTRTX_SHIFT: u32 = 0;
4798 pub const DTRTX_MASK: u32 = 0b11111111111111111111111111111111;
4800
4801 pub const fn dtrtx(self) -> u32 {
4803 ((self.bits() >> Self::DTRTX_SHIFT) & 0b11111111111111111111111111111111) as u32
4804 }
4805
4806 pub const fn set_dtrtx(&mut self, value: u32) {
4808 let offset = Self::DTRTX_SHIFT;
4809 assert!(value & (Self::DTRTX_MASK as u32) == value);
4810 *self = Self::from_bits_retain(
4811 (self.bits() & !(Self::DTRTX_MASK << offset)) | ((value as u32) << offset),
4812 );
4813 }
4814
4815 pub const fn with_dtrtx(mut self, value: u32) -> Self {
4817 self.set_dtrtx(value);
4818 self
4819 }
4820}
4821
4822bitflags! {
4823 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4825 #[repr(transparent)]
4826 pub struct Dbgosdlr: u32 {
4827 const DLK = 1 << 0;
4829 }
4830}
4831
4832impl Dbgosdlr {
4833 pub const DLK_SHIFT: u32 = 0;
4835}
4836
4837bitflags! {
4838 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4840 #[repr(transparent)]
4841 pub struct Dbgoseccr: u32 {
4842 }
4843}
4844
4845impl Dbgoseccr {
4846 pub const EDECCR_SHIFT: u32 = 0;
4848 pub const EDECCR_MASK: u32 = 0b11111111111111111111111111111111;
4850
4851 pub const fn edeccr(self) -> u32 {
4853 ((self.bits() >> Self::EDECCR_SHIFT) & 0b11111111111111111111111111111111) as u32
4854 }
4855
4856 pub const fn set_edeccr(&mut self, value: u32) {
4858 let offset = Self::EDECCR_SHIFT;
4859 assert!(value & (Self::EDECCR_MASK as u32) == value);
4860 *self = Self::from_bits_retain(
4861 (self.bits() & !(Self::EDECCR_MASK << offset)) | ((value as u32) << offset),
4862 );
4863 }
4864
4865 pub const fn with_edeccr(mut self, value: u32) -> Self {
4867 self.set_edeccr(value);
4868 self
4869 }
4870}
4871
4872bitflags! {
4873 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4875 #[repr(transparent)]
4876 pub struct Dbgoslar: u32 {
4877 }
4878}
4879
4880impl Dbgoslar {
4881 pub const OSLA_SHIFT: u32 = 0;
4883 pub const OSLA_MASK: u32 = 0b11111111111111111111111111111111;
4885
4886 pub const fn osla(self) -> u32 {
4888 ((self.bits() >> Self::OSLA_SHIFT) & 0b11111111111111111111111111111111) as u32
4889 }
4890
4891 pub const fn set_osla(&mut self, value: u32) {
4893 let offset = Self::OSLA_SHIFT;
4894 assert!(value & (Self::OSLA_MASK as u32) == value);
4895 *self = Self::from_bits_retain(
4896 (self.bits() & !(Self::OSLA_MASK << offset)) | ((value as u32) << offset),
4897 );
4898 }
4899
4900 pub const fn with_osla(mut self, value: u32) -> Self {
4902 self.set_osla(value);
4903 self
4904 }
4905}
4906
4907bitflags! {
4908 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4910 #[repr(transparent)]
4911 pub struct Dbgoslsr: u32 {
4912 const OSLK = 1 << 1;
4914 const NTT = 1 << 2;
4916 }
4917}
4918
4919impl Dbgoslsr {
4920 pub const OSLK_SHIFT: u32 = 1;
4922 pub const NTT_SHIFT: u32 = 2;
4924}
4925
4926bitflags! {
4927 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4929 #[repr(transparent)]
4930 pub struct Dbgprcr: u32 {
4931 const CORENPDRQ = 1 << 0;
4933 }
4934}
4935
4936impl Dbgprcr {
4937 pub const CORENPDRQ_SHIFT: u32 = 0;
4939}
4940
4941bitflags! {
4942 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4944 #[repr(transparent)]
4945 pub struct Dbgvcr: u32 {
4946 const SU = 1 << 1;
4948 const U = 1 << 1;
4950 const S = 1 << 2;
4952 const SS = 1 << 2;
4954 const P = 1 << 3;
4956 const SP = 1 << 3;
4958 const D = 1 << 4;
4960 const SD = 1 << 4;
4962 const I = 1 << 6;
4964 const SI = 1 << 6;
4966 const F = 1 << 7;
4968 const SF = 1 << 7;
4970 const MS = 1 << 10;
4972 const MP = 1 << 11;
4974 const MD = 1 << 12;
4976 const MI = 1 << 14;
4978 const MF = 1 << 15;
4980 const NSU = 1 << 25;
4982 const NSS = 1 << 26;
4984 const NSP = 1 << 27;
4986 const NSD = 1 << 28;
4988 const NSI = 1 << 30;
4990 const NSF = 1 << 31;
4992 }
4993}
4994
4995impl Dbgvcr {
4996 pub const SU_SHIFT: u32 = 1;
4998 pub const U_SHIFT: u32 = 1;
5000 pub const S_SHIFT: u32 = 2;
5002 pub const SS_SHIFT: u32 = 2;
5004 pub const P_SHIFT: u32 = 3;
5006 pub const SP_SHIFT: u32 = 3;
5008 pub const D_SHIFT: u32 = 4;
5010 pub const SD_SHIFT: u32 = 4;
5012 pub const I_SHIFT: u32 = 6;
5014 pub const SI_SHIFT: u32 = 6;
5016 pub const F_SHIFT: u32 = 7;
5018 pub const SF_SHIFT: u32 = 7;
5020 pub const MS_SHIFT: u32 = 10;
5022 pub const MP_SHIFT: u32 = 11;
5024 pub const MD_SHIFT: u32 = 12;
5026 pub const MI_SHIFT: u32 = 14;
5028 pub const MF_SHIFT: u32 = 15;
5030 pub const NSU_SHIFT: u32 = 25;
5032 pub const NSS_SHIFT: u32 = 26;
5034 pub const NSP_SHIFT: u32 = 27;
5036 pub const NSD_SHIFT: u32 = 28;
5038 pub const NSI_SHIFT: u32 = 30;
5040 pub const NSF_SHIFT: u32 = 31;
5042}
5043
5044bitflags! {
5045 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5047 #[repr(transparent)]
5048 pub struct Dfar: u32 {
5049 }
5050}
5051
5052impl Dfar {
5053 pub const VA_SHIFT: u32 = 0;
5055 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
5057
5058 pub const fn va(self) -> u32 {
5060 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
5061 }
5062
5063 pub const fn set_va(&mut self, value: u32) {
5065 let offset = Self::VA_SHIFT;
5066 assert!(value & (Self::VA_MASK as u32) == value);
5067 *self = Self::from_bits_retain(
5068 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
5069 );
5070 }
5071
5072 pub const fn with_va(mut self, value: u32) -> Self {
5074 self.set_va(value);
5075 self
5076 }
5077}
5078
5079bitflags! {
5080 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5082 #[repr(transparent)]
5083 pub struct Dfsr: u32 {
5084 const LPAE = 1 << 9;
5086 const WNR = 1 << 11;
5088 const EXT = 1 << 12;
5090 const CM = 1 << 13;
5092 const FNV = 1 << 16;
5094 }
5095}
5096
5097impl Dfsr {
5098 pub const STATUS_SHIFT: u32 = 0;
5100 pub const STATUS_MASK: u32 = 0b111111;
5102 pub const DOMAIN_SHIFT: u32 = 4;
5104 pub const DOMAIN_MASK: u32 = 0b1111;
5106 pub const LPAE_SHIFT: u32 = 9;
5108 pub const WNR_SHIFT: u32 = 11;
5110 pub const EXT_SHIFT: u32 = 12;
5112 pub const CM_SHIFT: u32 = 13;
5114 pub const AET_SHIFT: u32 = 14;
5116 pub const AET_MASK: u32 = 0b11;
5118 pub const FNV_SHIFT: u32 = 16;
5120
5121 pub const fn status(self) -> u8 {
5123 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
5124 }
5125
5126 pub const fn set_status(&mut self, value: u8) {
5128 let offset = Self::STATUS_SHIFT;
5129 assert!(value & (Self::STATUS_MASK as u8) == value);
5130 *self = Self::from_bits_retain(
5131 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
5132 );
5133 }
5134
5135 pub const fn with_status(mut self, value: u8) -> Self {
5137 self.set_status(value);
5138 self
5139 }
5140
5141 pub const fn domain(self) -> u8 {
5143 ((self.bits() >> Self::DOMAIN_SHIFT) & 0b1111) as u8
5144 }
5145
5146 pub const fn set_domain(&mut self, value: u8) {
5148 let offset = Self::DOMAIN_SHIFT;
5149 assert!(value & (Self::DOMAIN_MASK as u8) == value);
5150 *self = Self::from_bits_retain(
5151 (self.bits() & !(Self::DOMAIN_MASK << offset)) | ((value as u32) << offset),
5152 );
5153 }
5154
5155 pub const fn with_domain(mut self, value: u8) -> Self {
5157 self.set_domain(value);
5158 self
5159 }
5160
5161 pub const fn aet(self) -> u8 {
5163 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
5164 }
5165
5166 pub const fn set_aet(&mut self, value: u8) {
5168 let offset = Self::AET_SHIFT;
5169 assert!(value & (Self::AET_MASK as u8) == value);
5170 *self = Self::from_bits_retain(
5171 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u32) << offset),
5172 );
5173 }
5174
5175 pub const fn with_aet(mut self, value: u8) -> Self {
5177 self.set_aet(value);
5178 self
5179 }
5180}
5181
5182bitflags! {
5183 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5185 #[repr(transparent)]
5186 pub struct Disr: u32 {
5187 const EA = 1 << 9;
5189 const LPAE = 1 << 9;
5191 const EXT = 1 << 12;
5193 const A = 1 << 31;
5195 }
5196}
5197
5198impl Disr {
5199 pub const DFSC_SHIFT: u32 = 0;
5201 pub const DFSC_MASK: u32 = 0b111111;
5203 pub const STATUS_SHIFT: u32 = 0;
5205 pub const STATUS_MASK: u32 = 0b111111;
5207 pub const EA_SHIFT: u32 = 9;
5209 pub const LPAE_SHIFT: u32 = 9;
5211 pub const EXT_SHIFT: u32 = 12;
5213 pub const A_SHIFT: u32 = 31;
5215
5216 pub const fn dfsc(self) -> u8 {
5218 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
5219 }
5220
5221 pub const fn set_dfsc(&mut self, value: u8) {
5223 let offset = Self::DFSC_SHIFT;
5224 assert!(value & (Self::DFSC_MASK as u8) == value);
5225 *self = Self::from_bits_retain(
5226 (self.bits() & !(Self::DFSC_MASK << offset)) | ((value as u32) << offset),
5227 );
5228 }
5229
5230 pub const fn with_dfsc(mut self, value: u8) -> Self {
5232 self.set_dfsc(value);
5233 self
5234 }
5235
5236 pub const fn status(self) -> u8 {
5238 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
5239 }
5240
5241 pub const fn set_status(&mut self, value: u8) {
5243 let offset = Self::STATUS_SHIFT;
5244 assert!(value & (Self::STATUS_MASK as u8) == value);
5245 *self = Self::from_bits_retain(
5246 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
5247 );
5248 }
5249
5250 pub const fn with_status(mut self, value: u8) -> Self {
5252 self.set_status(value);
5253 self
5254 }
5255}
5256
5257#[cfg(feature = "el1")]
5258bitflags! {
5259 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5261 #[repr(transparent)]
5262 pub struct DisrEl1: u64 {
5263 const WNR = 1 << 6;
5265 const WNRV = 1 << 7;
5267 const EA = 1 << 9;
5269 const IDS = 1 << 24;
5271 const A = 1 << 31;
5273 }
5274}
5275
5276#[cfg(feature = "el1")]
5277impl DisrEl1 {
5278 pub const DFSC_SHIFT: u32 = 0;
5280 pub const DFSC_MASK: u64 = 0b111111;
5282 pub const WNR_SHIFT: u32 = 6;
5284 pub const WNRV_SHIFT: u32 = 7;
5286 pub const EA_SHIFT: u32 = 9;
5288 pub const AET_SHIFT: u32 = 10;
5290 pub const AET_MASK: u64 = 0b111;
5292 pub const WU_SHIFT: u32 = 16;
5294 pub const WU_MASK: u64 = 0b11;
5296 pub const IDS_SHIFT: u32 = 24;
5298 pub const A_SHIFT: u32 = 31;
5300
5301 pub const fn dfsc(self) -> u8 {
5303 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
5304 }
5305
5306 pub const fn set_dfsc(&mut self, value: u8) {
5308 let offset = Self::DFSC_SHIFT;
5309 assert!(value & (Self::DFSC_MASK as u8) == value);
5310 *self = Self::from_bits_retain(
5311 (self.bits() & !(Self::DFSC_MASK << offset)) | ((value as u64) << offset),
5312 );
5313 }
5314
5315 pub const fn with_dfsc(mut self, value: u8) -> Self {
5317 self.set_dfsc(value);
5318 self
5319 }
5320
5321 pub const fn aet(self) -> u8 {
5323 ((self.bits() >> Self::AET_SHIFT) & 0b111) as u8
5324 }
5325
5326 pub const fn set_aet(&mut self, value: u8) {
5328 let offset = Self::AET_SHIFT;
5329 assert!(value & (Self::AET_MASK as u8) == value);
5330 *self = Self::from_bits_retain(
5331 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u64) << offset),
5332 );
5333 }
5334
5335 pub const fn with_aet(mut self, value: u8) -> Self {
5337 self.set_aet(value);
5338 self
5339 }
5340
5341 pub const fn wu(self) -> u8 {
5343 ((self.bits() >> Self::WU_SHIFT) & 0b11) as u8
5344 }
5345
5346 pub const fn set_wu(&mut self, value: u8) {
5348 let offset = Self::WU_SHIFT;
5349 assert!(value & (Self::WU_MASK as u8) == value);
5350 *self = Self::from_bits_retain(
5351 (self.bits() & !(Self::WU_MASK << offset)) | ((value as u64) << offset),
5352 );
5353 }
5354
5355 pub const fn with_wu(mut self, value: u8) -> Self {
5357 self.set_wu(value);
5358 self
5359 }
5360}
5361
5362bitflags! {
5363 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5367 #[repr(transparent)]
5368 pub struct Dit: u64 {
5369 const DIT = 1 << 24;
5371 }
5372}
5373
5374impl Dit {
5375 pub const DIT_SHIFT: u32 = 24;
5377}
5378
5379bitflags! {
5380 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5382 #[repr(transparent)]
5383 pub struct Dlr: u32 {
5384 }
5385}
5386
5387impl Dlr {
5388 pub const ADDR_SHIFT: u32 = 0;
5390 pub const ADDR_MASK: u32 = 0b11111111111111111111111111111111;
5392
5393 pub const fn addr(self) -> u32 {
5395 ((self.bits() >> Self::ADDR_SHIFT) & 0b11111111111111111111111111111111) as u32
5396 }
5397
5398 pub const fn set_addr(&mut self, value: u32) {
5400 let offset = Self::ADDR_SHIFT;
5401 assert!(value & (Self::ADDR_MASK as u32) == value);
5402 *self = Self::from_bits_retain(
5403 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u32) << offset),
5404 );
5405 }
5406
5407 pub const fn with_addr(mut self, value: u32) -> Self {
5409 self.set_addr(value);
5410 self
5411 }
5412}
5413
5414bitflags! {
5415 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5417 #[repr(transparent)]
5418 pub struct Dspsr: u32 {
5419 const T = 1 << 5;
5421 const F = 1 << 6;
5423 const I = 1 << 7;
5425 const A = 1 << 8;
5427 const E = 1 << 9;
5429 const IL = 1 << 20;
5431 const SS = 1 << 21;
5433 const PAN = 1 << 22;
5435 const SSBS = 1 << 23;
5437 const DIT = 1 << 24;
5439 const Q = 1 << 27;
5441 const V = 1 << 28;
5443 const C = 1 << 29;
5445 const Z = 1 << 30;
5447 const N = 1 << 31;
5449 }
5450}
5451
5452impl Dspsr {
5453 pub const M_4_0_SHIFT: u32 = 0;
5455 pub const M_4_0_MASK: u32 = 0b11111;
5457 pub const T_SHIFT: u32 = 5;
5459 pub const F_SHIFT: u32 = 6;
5461 pub const I_SHIFT: u32 = 7;
5463 pub const A_SHIFT: u32 = 8;
5465 pub const E_SHIFT: u32 = 9;
5467 pub const GE_SHIFT: u32 = 16;
5469 pub const GE_MASK: u32 = 0b1111;
5471 pub const IL_SHIFT: u32 = 20;
5473 pub const SS_SHIFT: u32 = 21;
5475 pub const PAN_SHIFT: u32 = 22;
5477 pub const SSBS_SHIFT: u32 = 23;
5479 pub const DIT_SHIFT: u32 = 24;
5481 pub const Q_SHIFT: u32 = 27;
5483 pub const V_SHIFT: u32 = 28;
5485 pub const C_SHIFT: u32 = 29;
5487 pub const Z_SHIFT: u32 = 30;
5489 pub const N_SHIFT: u32 = 31;
5491
5492 pub const fn m_4_0(self) -> u8 {
5494 ((self.bits() >> Self::M_4_0_SHIFT) & 0b11111) as u8
5495 }
5496
5497 pub const fn set_m_4_0(&mut self, value: u8) {
5499 let offset = Self::M_4_0_SHIFT;
5500 assert!(value & (Self::M_4_0_MASK as u8) == value);
5501 *self = Self::from_bits_retain(
5502 (self.bits() & !(Self::M_4_0_MASK << offset)) | ((value as u32) << offset),
5503 );
5504 }
5505
5506 pub const fn with_m_4_0(mut self, value: u8) -> Self {
5508 self.set_m_4_0(value);
5509 self
5510 }
5511
5512 pub const fn ge(self) -> u8 {
5514 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
5515 }
5516
5517 pub const fn set_ge(&mut self, value: u8) {
5519 let offset = Self::GE_SHIFT;
5520 assert!(value & (Self::GE_MASK as u8) == value);
5521 *self = Self::from_bits_retain(
5522 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u32) << offset),
5523 );
5524 }
5525
5526 pub const fn with_ge(mut self, value: u8) -> Self {
5528 self.set_ge(value);
5529 self
5530 }
5531}
5532
5533bitflags! {
5534 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5536 #[repr(transparent)]
5537 pub struct Dspsr2: u32 {
5538 const PPEND = 1 << 1;
5540 const UINJ = 1 << 4;
5542 }
5543}
5544
5545impl Dspsr2 {
5546 pub const PPEND_SHIFT: u32 = 1;
5548 pub const UINJ_SHIFT: u32 = 4;
5550}
5551
5552#[cfg(feature = "el1")]
5553bitflags! {
5554 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5556 #[repr(transparent)]
5557 pub struct ElrEl1: u64 {
5558 }
5559}
5560
5561#[cfg(feature = "el1")]
5562impl ElrEl1 {
5563 pub const ADDR_SHIFT: u32 = 0;
5565 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
5567
5568 pub const fn addr(self) -> u64 {
5570 ((self.bits() >> Self::ADDR_SHIFT)
5571 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
5572 }
5573
5574 pub const fn set_addr(&mut self, value: u64) {
5576 let offset = Self::ADDR_SHIFT;
5577 assert!(value & (Self::ADDR_MASK as u64) == value);
5578 *self = Self::from_bits_retain(
5579 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u64) << offset),
5580 );
5581 }
5582
5583 pub const fn with_addr(mut self, value: u64) -> Self {
5585 self.set_addr(value);
5586 self
5587 }
5588}
5589
5590#[cfg(feature = "el2")]
5591bitflags! {
5592 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5594 #[repr(transparent)]
5595 pub struct ElrEl2: u64 {
5596 }
5597}
5598
5599#[cfg(feature = "el2")]
5600impl ElrEl2 {
5601 pub const ADDR_SHIFT: u32 = 0;
5603 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
5605
5606 pub const fn addr(self) -> u64 {
5608 ((self.bits() >> Self::ADDR_SHIFT)
5609 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
5610 }
5611
5612 pub const fn set_addr(&mut self, value: u64) {
5614 let offset = Self::ADDR_SHIFT;
5615 assert!(value & (Self::ADDR_MASK as u64) == value);
5616 *self = Self::from_bits_retain(
5617 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u64) << offset),
5618 );
5619 }
5620
5621 pub const fn with_addr(mut self, value: u64) -> Self {
5623 self.set_addr(value);
5624 self
5625 }
5626}
5627
5628#[cfg(feature = "el2")]
5629bitflags! {
5630 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5632 #[repr(transparent)]
5633 pub struct ElrHyp: u32 {
5634 }
5635}
5636
5637#[cfg(feature = "el2")]
5638impl ElrHyp {
5639 pub const ADDR_SHIFT: u32 = 0;
5641 pub const ADDR_MASK: u32 = 0b11111111111111111111111111111111;
5643
5644 pub const fn addr(self) -> u32 {
5646 ((self.bits() >> Self::ADDR_SHIFT) & 0b11111111111111111111111111111111) as u32
5647 }
5648
5649 pub const fn set_addr(&mut self, value: u32) {
5651 let offset = Self::ADDR_SHIFT;
5652 assert!(value & (Self::ADDR_MASK as u32) == value);
5653 *self = Self::from_bits_retain(
5654 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u32) << offset),
5655 );
5656 }
5657
5658 pub const fn with_addr(mut self, value: u32) -> Self {
5660 self.set_addr(value);
5661 self
5662 }
5663}
5664
5665bitflags! {
5666 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5668 #[repr(transparent)]
5669 pub struct Erridr: u32 {
5670 }
5671}
5672
5673impl Erridr {
5674 pub const NUM_SHIFT: u32 = 0;
5676 pub const NUM_MASK: u32 = 0b1111111111111111;
5678
5679 pub const fn num(self) -> u16 {
5681 ((self.bits() >> Self::NUM_SHIFT) & 0b1111111111111111) as u16
5682 }
5683
5684 pub const fn set_num(&mut self, value: u16) {
5686 let offset = Self::NUM_SHIFT;
5687 assert!(value & (Self::NUM_MASK as u16) == value);
5688 *self = Self::from_bits_retain(
5689 (self.bits() & !(Self::NUM_MASK << offset)) | ((value as u32) << offset),
5690 );
5691 }
5692
5693 pub const fn with_num(mut self, value: u16) -> Self {
5695 self.set_num(value);
5696 self
5697 }
5698}
5699
5700bitflags! {
5701 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5703 #[repr(transparent)]
5704 pub struct Errselr: u32 {
5705 }
5706}
5707
5708impl Errselr {
5709 pub const SEL_SHIFT: u32 = 0;
5711 pub const SEL_MASK: u32 = 0b1111111111111111;
5713
5714 pub const fn sel(self) -> u16 {
5716 ((self.bits() >> Self::SEL_SHIFT) & 0b1111111111111111) as u16
5717 }
5718
5719 pub const fn set_sel(&mut self, value: u16) {
5721 let offset = Self::SEL_SHIFT;
5722 assert!(value & (Self::SEL_MASK as u16) == value);
5723 *self = Self::from_bits_retain(
5724 (self.bits() & !(Self::SEL_MASK << offset)) | ((value as u32) << offset),
5725 );
5726 }
5727
5728 pub const fn with_sel(mut self, value: u16) -> Self {
5730 self.set_sel(value);
5731 self
5732 }
5733}
5734
5735bitflags! {
5736 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5738 #[repr(transparent)]
5739 pub struct Erxaddr: u32 {
5740 }
5741}
5742
5743impl Erxaddr {
5744 pub const ERRNADDRLO_SHIFT: u32 = 0;
5746 pub const ERRNADDRLO_MASK: u32 = 0b11111111111111111111111111111111;
5748
5749 pub const fn errnaddrlo(self) -> u32 {
5751 ((self.bits() >> Self::ERRNADDRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
5752 }
5753
5754 pub const fn set_errnaddrlo(&mut self, value: u32) {
5756 let offset = Self::ERRNADDRLO_SHIFT;
5757 assert!(value & (Self::ERRNADDRLO_MASK as u32) == value);
5758 *self = Self::from_bits_retain(
5759 (self.bits() & !(Self::ERRNADDRLO_MASK << offset)) | ((value as u32) << offset),
5760 );
5761 }
5762
5763 pub const fn with_errnaddrlo(mut self, value: u32) -> Self {
5765 self.set_errnaddrlo(value);
5766 self
5767 }
5768}
5769
5770bitflags! {
5771 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5773 #[repr(transparent)]
5774 pub struct Erxaddr2: u32 {
5775 }
5776}
5777
5778impl Erxaddr2 {
5779 pub const ERRNADDRHI_SHIFT: u32 = 0;
5781 pub const ERRNADDRHI_MASK: u32 = 0b11111111111111111111111111111111;
5783
5784 pub const fn errnaddrhi(self) -> u32 {
5786 ((self.bits() >> Self::ERRNADDRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
5787 }
5788
5789 pub const fn set_errnaddrhi(&mut self, value: u32) {
5791 let offset = Self::ERRNADDRHI_SHIFT;
5792 assert!(value & (Self::ERRNADDRHI_MASK as u32) == value);
5793 *self = Self::from_bits_retain(
5794 (self.bits() & !(Self::ERRNADDRHI_MASK << offset)) | ((value as u32) << offset),
5795 );
5796 }
5797
5798 pub const fn with_errnaddrhi(mut self, value: u32) -> Self {
5800 self.set_errnaddrhi(value);
5801 self
5802 }
5803}
5804
5805bitflags! {
5806 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5808 #[repr(transparent)]
5809 pub struct Erxctlr: u32 {
5810 }
5811}
5812
5813impl Erxctlr {
5814 pub const ERRNCTLRLO_SHIFT: u32 = 0;
5816 pub const ERRNCTLRLO_MASK: u32 = 0b11111111111111111111111111111111;
5818
5819 pub const fn errnctlrlo(self) -> u32 {
5821 ((self.bits() >> Self::ERRNCTLRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
5822 }
5823
5824 pub const fn set_errnctlrlo(&mut self, value: u32) {
5826 let offset = Self::ERRNCTLRLO_SHIFT;
5827 assert!(value & (Self::ERRNCTLRLO_MASK as u32) == value);
5828 *self = Self::from_bits_retain(
5829 (self.bits() & !(Self::ERRNCTLRLO_MASK << offset)) | ((value as u32) << offset),
5830 );
5831 }
5832
5833 pub const fn with_errnctlrlo(mut self, value: u32) -> Self {
5835 self.set_errnctlrlo(value);
5836 self
5837 }
5838}
5839
5840bitflags! {
5841 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5843 #[repr(transparent)]
5844 pub struct Erxctlr2: u32 {
5845 }
5846}
5847
5848impl Erxctlr2 {
5849 pub const ERRNCTLRHI_SHIFT: u32 = 0;
5851 pub const ERRNCTLRHI_MASK: u32 = 0b11111111111111111111111111111111;
5853
5854 pub const fn errnctlrhi(self) -> u32 {
5856 ((self.bits() >> Self::ERRNCTLRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
5857 }
5858
5859 pub const fn set_errnctlrhi(&mut self, value: u32) {
5861 let offset = Self::ERRNCTLRHI_SHIFT;
5862 assert!(value & (Self::ERRNCTLRHI_MASK as u32) == value);
5863 *self = Self::from_bits_retain(
5864 (self.bits() & !(Self::ERRNCTLRHI_MASK << offset)) | ((value as u32) << offset),
5865 );
5866 }
5867
5868 pub const fn with_errnctlrhi(mut self, value: u32) -> Self {
5870 self.set_errnctlrhi(value);
5871 self
5872 }
5873}
5874
5875bitflags! {
5876 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5878 #[repr(transparent)]
5879 pub struct Erxfr: u32 {
5880 }
5881}
5882
5883impl Erxfr {
5884 pub const ERRNFRLO_SHIFT: u32 = 0;
5886 pub const ERRNFRLO_MASK: u32 = 0b11111111111111111111111111111111;
5888
5889 pub const fn errnfrlo(self) -> u32 {
5891 ((self.bits() >> Self::ERRNFRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
5892 }
5893
5894 pub const fn set_errnfrlo(&mut self, value: u32) {
5896 let offset = Self::ERRNFRLO_SHIFT;
5897 assert!(value & (Self::ERRNFRLO_MASK as u32) == value);
5898 *self = Self::from_bits_retain(
5899 (self.bits() & !(Self::ERRNFRLO_MASK << offset)) | ((value as u32) << offset),
5900 );
5901 }
5902
5903 pub const fn with_errnfrlo(mut self, value: u32) -> Self {
5905 self.set_errnfrlo(value);
5906 self
5907 }
5908}
5909
5910bitflags! {
5911 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5913 #[repr(transparent)]
5914 pub struct Erxfr2: u32 {
5915 }
5916}
5917
5918impl Erxfr2 {
5919 pub const ERRNFRHI_SHIFT: u32 = 0;
5921 pub const ERRNFRHI_MASK: u32 = 0b11111111111111111111111111111111;
5923
5924 pub const fn errnfrhi(self) -> u32 {
5926 ((self.bits() >> Self::ERRNFRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
5927 }
5928
5929 pub const fn set_errnfrhi(&mut self, value: u32) {
5931 let offset = Self::ERRNFRHI_SHIFT;
5932 assert!(value & (Self::ERRNFRHI_MASK as u32) == value);
5933 *self = Self::from_bits_retain(
5934 (self.bits() & !(Self::ERRNFRHI_MASK << offset)) | ((value as u32) << offset),
5935 );
5936 }
5937
5938 pub const fn with_errnfrhi(mut self, value: u32) -> Self {
5940 self.set_errnfrhi(value);
5941 self
5942 }
5943}
5944
5945bitflags! {
5946 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5948 #[repr(transparent)]
5949 pub struct Erxmisc0: u32 {
5950 }
5951}
5952
5953impl Erxmisc0 {
5954 pub const ERRNMISC0LO_SHIFT: u32 = 0;
5956 pub const ERRNMISC0LO_MASK: u32 = 0b11111111111111111111111111111111;
5958
5959 pub const fn errnmisc0lo(self) -> u32 {
5961 ((self.bits() >> Self::ERRNMISC0LO_SHIFT) & 0b11111111111111111111111111111111) as u32
5962 }
5963
5964 pub const fn set_errnmisc0lo(&mut self, value: u32) {
5966 let offset = Self::ERRNMISC0LO_SHIFT;
5967 assert!(value & (Self::ERRNMISC0LO_MASK as u32) == value);
5968 *self = Self::from_bits_retain(
5969 (self.bits() & !(Self::ERRNMISC0LO_MASK << offset)) | ((value as u32) << offset),
5970 );
5971 }
5972
5973 pub const fn with_errnmisc0lo(mut self, value: u32) -> Self {
5975 self.set_errnmisc0lo(value);
5976 self
5977 }
5978}
5979
5980bitflags! {
5981 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5983 #[repr(transparent)]
5984 pub struct Erxmisc1: u32 {
5985 }
5986}
5987
5988impl Erxmisc1 {
5989 pub const ERRNMISC0HI_SHIFT: u32 = 0;
5991 pub const ERRNMISC0HI_MASK: u32 = 0b11111111111111111111111111111111;
5993
5994 pub const fn errnmisc0hi(self) -> u32 {
5996 ((self.bits() >> Self::ERRNMISC0HI_SHIFT) & 0b11111111111111111111111111111111) as u32
5997 }
5998
5999 pub const fn set_errnmisc0hi(&mut self, value: u32) {
6001 let offset = Self::ERRNMISC0HI_SHIFT;
6002 assert!(value & (Self::ERRNMISC0HI_MASK as u32) == value);
6003 *self = Self::from_bits_retain(
6004 (self.bits() & !(Self::ERRNMISC0HI_MASK << offset)) | ((value as u32) << offset),
6005 );
6006 }
6007
6008 pub const fn with_errnmisc0hi(mut self, value: u32) -> Self {
6010 self.set_errnmisc0hi(value);
6011 self
6012 }
6013}
6014
6015bitflags! {
6016 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6018 #[repr(transparent)]
6019 pub struct Erxmisc2: u32 {
6020 }
6021}
6022
6023impl Erxmisc2 {
6024 pub const ERRNMISC1LO_SHIFT: u32 = 0;
6026 pub const ERRNMISC1LO_MASK: u32 = 0b11111111111111111111111111111111;
6028
6029 pub const fn errnmisc1lo(self) -> u32 {
6031 ((self.bits() >> Self::ERRNMISC1LO_SHIFT) & 0b11111111111111111111111111111111) as u32
6032 }
6033
6034 pub const fn set_errnmisc1lo(&mut self, value: u32) {
6036 let offset = Self::ERRNMISC1LO_SHIFT;
6037 assert!(value & (Self::ERRNMISC1LO_MASK as u32) == value);
6038 *self = Self::from_bits_retain(
6039 (self.bits() & !(Self::ERRNMISC1LO_MASK << offset)) | ((value as u32) << offset),
6040 );
6041 }
6042
6043 pub const fn with_errnmisc1lo(mut self, value: u32) -> Self {
6045 self.set_errnmisc1lo(value);
6046 self
6047 }
6048}
6049
6050bitflags! {
6051 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6053 #[repr(transparent)]
6054 pub struct Erxmisc3: u32 {
6055 }
6056}
6057
6058impl Erxmisc3 {
6059 pub const ERRNMISC1HI_SHIFT: u32 = 0;
6061 pub const ERRNMISC1HI_MASK: u32 = 0b11111111111111111111111111111111;
6063
6064 pub const fn errnmisc1hi(self) -> u32 {
6066 ((self.bits() >> Self::ERRNMISC1HI_SHIFT) & 0b11111111111111111111111111111111) as u32
6067 }
6068
6069 pub const fn set_errnmisc1hi(&mut self, value: u32) {
6071 let offset = Self::ERRNMISC1HI_SHIFT;
6072 assert!(value & (Self::ERRNMISC1HI_MASK as u32) == value);
6073 *self = Self::from_bits_retain(
6074 (self.bits() & !(Self::ERRNMISC1HI_MASK << offset)) | ((value as u32) << offset),
6075 );
6076 }
6077
6078 pub const fn with_errnmisc1hi(mut self, value: u32) -> Self {
6080 self.set_errnmisc1hi(value);
6081 self
6082 }
6083}
6084
6085bitflags! {
6086 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6088 #[repr(transparent)]
6089 pub struct Erxmisc4: u32 {
6090 }
6091}
6092
6093impl Erxmisc4 {
6094 pub const ERRNMISC2LO_SHIFT: u32 = 0;
6096 pub const ERRNMISC2LO_MASK: u32 = 0b11111111111111111111111111111111;
6098
6099 pub const fn errnmisc2lo(self) -> u32 {
6101 ((self.bits() >> Self::ERRNMISC2LO_SHIFT) & 0b11111111111111111111111111111111) as u32
6102 }
6103
6104 pub const fn set_errnmisc2lo(&mut self, value: u32) {
6106 let offset = Self::ERRNMISC2LO_SHIFT;
6107 assert!(value & (Self::ERRNMISC2LO_MASK as u32) == value);
6108 *self = Self::from_bits_retain(
6109 (self.bits() & !(Self::ERRNMISC2LO_MASK << offset)) | ((value as u32) << offset),
6110 );
6111 }
6112
6113 pub const fn with_errnmisc2lo(mut self, value: u32) -> Self {
6115 self.set_errnmisc2lo(value);
6116 self
6117 }
6118}
6119
6120bitflags! {
6121 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6123 #[repr(transparent)]
6124 pub struct Erxmisc5: u32 {
6125 }
6126}
6127
6128impl Erxmisc5 {
6129 pub const ERRNMISC2HI_SHIFT: u32 = 0;
6131 pub const ERRNMISC2HI_MASK: u32 = 0b11111111111111111111111111111111;
6133
6134 pub const fn errnmisc2hi(self) -> u32 {
6136 ((self.bits() >> Self::ERRNMISC2HI_SHIFT) & 0b11111111111111111111111111111111) as u32
6137 }
6138
6139 pub const fn set_errnmisc2hi(&mut self, value: u32) {
6141 let offset = Self::ERRNMISC2HI_SHIFT;
6142 assert!(value & (Self::ERRNMISC2HI_MASK as u32) == value);
6143 *self = Self::from_bits_retain(
6144 (self.bits() & !(Self::ERRNMISC2HI_MASK << offset)) | ((value as u32) << offset),
6145 );
6146 }
6147
6148 pub const fn with_errnmisc2hi(mut self, value: u32) -> Self {
6150 self.set_errnmisc2hi(value);
6151 self
6152 }
6153}
6154
6155bitflags! {
6156 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6158 #[repr(transparent)]
6159 pub struct Erxmisc6: u32 {
6160 }
6161}
6162
6163impl Erxmisc6 {
6164 pub const ERRNMISC3LO_SHIFT: u32 = 0;
6166 pub const ERRNMISC3LO_MASK: u32 = 0b11111111111111111111111111111111;
6168
6169 pub const fn errnmisc3lo(self) -> u32 {
6171 ((self.bits() >> Self::ERRNMISC3LO_SHIFT) & 0b11111111111111111111111111111111) as u32
6172 }
6173
6174 pub const fn set_errnmisc3lo(&mut self, value: u32) {
6176 let offset = Self::ERRNMISC3LO_SHIFT;
6177 assert!(value & (Self::ERRNMISC3LO_MASK as u32) == value);
6178 *self = Self::from_bits_retain(
6179 (self.bits() & !(Self::ERRNMISC3LO_MASK << offset)) | ((value as u32) << offset),
6180 );
6181 }
6182
6183 pub const fn with_errnmisc3lo(mut self, value: u32) -> Self {
6185 self.set_errnmisc3lo(value);
6186 self
6187 }
6188}
6189
6190bitflags! {
6191 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6193 #[repr(transparent)]
6194 pub struct Erxmisc7: u32 {
6195 }
6196}
6197
6198impl Erxmisc7 {
6199 pub const ERRNMISC3HI_SHIFT: u32 = 0;
6201 pub const ERRNMISC3HI_MASK: u32 = 0b11111111111111111111111111111111;
6203
6204 pub const fn errnmisc3hi(self) -> u32 {
6206 ((self.bits() >> Self::ERRNMISC3HI_SHIFT) & 0b11111111111111111111111111111111) as u32
6207 }
6208
6209 pub const fn set_errnmisc3hi(&mut self, value: u32) {
6211 let offset = Self::ERRNMISC3HI_SHIFT;
6212 assert!(value & (Self::ERRNMISC3HI_MASK as u32) == value);
6213 *self = Self::from_bits_retain(
6214 (self.bits() & !(Self::ERRNMISC3HI_MASK << offset)) | ((value as u32) << offset),
6215 );
6216 }
6217
6218 pub const fn with_errnmisc3hi(mut self, value: u32) -> Self {
6220 self.set_errnmisc3hi(value);
6221 self
6222 }
6223}
6224
6225bitflags! {
6226 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6228 #[repr(transparent)]
6229 pub struct Erxstatus: u32 {
6230 }
6231}
6232
6233impl Erxstatus {
6234 pub const ERRNSTATUSLO_SHIFT: u32 = 0;
6236 pub const ERRNSTATUSLO_MASK: u32 = 0b11111111111111111111111111111111;
6238
6239 pub const fn errnstatuslo(self) -> u32 {
6241 ((self.bits() >> Self::ERRNSTATUSLO_SHIFT) & 0b11111111111111111111111111111111) as u32
6242 }
6243
6244 pub const fn set_errnstatuslo(&mut self, value: u32) {
6246 let offset = Self::ERRNSTATUSLO_SHIFT;
6247 assert!(value & (Self::ERRNSTATUSLO_MASK as u32) == value);
6248 *self = Self::from_bits_retain(
6249 (self.bits() & !(Self::ERRNSTATUSLO_MASK << offset)) | ((value as u32) << offset),
6250 );
6251 }
6252
6253 pub const fn with_errnstatuslo(mut self, value: u32) -> Self {
6255 self.set_errnstatuslo(value);
6256 self
6257 }
6258}
6259
6260#[cfg(feature = "el1")]
6261bitflags! {
6262 #[derive(Clone, Copy, Eq, Default, PartialEq)]
6264 #[repr(transparent)]
6265 pub struct EsrEl1: u64 {
6266 const IL = 1 << 25;
6268 }
6269}
6270
6271#[cfg(feature = "el1")]
6272impl EsrEl1 {
6273 pub const ISS_SHIFT: u32 = 0;
6275 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
6277 pub const IL_SHIFT: u32 = 25;
6279 pub const EC_SHIFT: u32 = 26;
6281 pub const EC_MASK: u64 = 0b111111;
6283 pub const ISS2_SHIFT: u32 = 32;
6285 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
6287
6288 pub const fn iss(self) -> u32 {
6290 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
6291 }
6292
6293 pub const fn set_iss(&mut self, value: u32) {
6295 let offset = Self::ISS_SHIFT;
6296 assert!(value & (Self::ISS_MASK as u32) == value);
6297 *self = Self::from_bits_retain(
6298 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
6299 );
6300 }
6301
6302 pub const fn with_iss(mut self, value: u32) -> Self {
6304 self.set_iss(value);
6305 self
6306 }
6307
6308 pub const fn ec(self) -> u8 {
6310 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
6311 }
6312
6313 pub const fn set_ec(&mut self, value: u8) {
6315 let offset = Self::EC_SHIFT;
6316 assert!(value & (Self::EC_MASK as u8) == value);
6317 *self = Self::from_bits_retain(
6318 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u64) << offset),
6319 );
6320 }
6321
6322 pub const fn with_ec(mut self, value: u8) -> Self {
6324 self.set_ec(value);
6325 self
6326 }
6327
6328 pub const fn iss2(self) -> u32 {
6330 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
6331 }
6332
6333 pub const fn set_iss2(&mut self, value: u32) {
6335 let offset = Self::ISS2_SHIFT;
6336 assert!(value & (Self::ISS2_MASK as u32) == value);
6337 *self = Self::from_bits_retain(
6338 (self.bits() & !(Self::ISS2_MASK << offset)) | ((value as u64) << offset),
6339 );
6340 }
6341
6342 pub const fn with_iss2(mut self, value: u32) -> Self {
6344 self.set_iss2(value);
6345 self
6346 }
6347}
6348
6349#[cfg(feature = "el2")]
6350bitflags! {
6351 #[derive(Clone, Copy, Eq, Default, PartialEq)]
6353 #[repr(transparent)]
6354 pub struct EsrEl2: u64 {
6355 const IL = 1 << 25;
6357 }
6358}
6359
6360#[cfg(feature = "el2")]
6361impl EsrEl2 {
6362 pub const ISS_SHIFT: u32 = 0;
6364 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
6366 pub const IL_SHIFT: u32 = 25;
6368 pub const EC_SHIFT: u32 = 26;
6370 pub const EC_MASK: u64 = 0b111111;
6372 pub const ISS2_SHIFT: u32 = 32;
6374 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
6376
6377 pub const fn iss(self) -> u32 {
6379 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
6380 }
6381
6382 pub const fn set_iss(&mut self, value: u32) {
6384 let offset = Self::ISS_SHIFT;
6385 assert!(value & (Self::ISS_MASK as u32) == value);
6386 *self = Self::from_bits_retain(
6387 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
6388 );
6389 }
6390
6391 pub const fn with_iss(mut self, value: u32) -> Self {
6393 self.set_iss(value);
6394 self
6395 }
6396
6397 pub const fn ec(self) -> u8 {
6399 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
6400 }
6401
6402 pub const fn set_ec(&mut self, value: u8) {
6404 let offset = Self::EC_SHIFT;
6405 assert!(value & (Self::EC_MASK as u8) == value);
6406 *self = Self::from_bits_retain(
6407 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u64) << offset),
6408 );
6409 }
6410
6411 pub const fn with_ec(mut self, value: u8) -> Self {
6413 self.set_ec(value);
6414 self
6415 }
6416
6417 pub const fn iss2(self) -> u32 {
6419 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
6420 }
6421
6422 pub const fn set_iss2(&mut self, value: u32) {
6424 let offset = Self::ISS2_SHIFT;
6425 assert!(value & (Self::ISS2_MASK as u32) == value);
6426 *self = Self::from_bits_retain(
6427 (self.bits() & !(Self::ISS2_MASK << offset)) | ((value as u64) << offset),
6428 );
6429 }
6430
6431 pub const fn with_iss2(mut self, value: u32) -> Self {
6433 self.set_iss2(value);
6434 self
6435 }
6436}
6437
6438#[cfg(feature = "el3")]
6439bitflags! {
6440 #[derive(Clone, Copy, Eq, Default, PartialEq)]
6442 #[repr(transparent)]
6443 pub struct EsrEl3: u64 {
6444 const IL = 1 << 25;
6446 }
6447}
6448
6449#[cfg(feature = "el3")]
6450impl EsrEl3 {
6451 pub const ISS_SHIFT: u32 = 0;
6453 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
6455 pub const IL_SHIFT: u32 = 25;
6457 pub const EC_SHIFT: u32 = 26;
6459 pub const EC_MASK: u64 = 0b111111;
6461 pub const ISS2_SHIFT: u32 = 32;
6463 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
6465
6466 pub const fn iss(self) -> u32 {
6468 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
6469 }
6470
6471 pub const fn set_iss(&mut self, value: u32) {
6473 let offset = Self::ISS_SHIFT;
6474 assert!(value & (Self::ISS_MASK as u32) == value);
6475 *self = Self::from_bits_retain(
6476 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
6477 );
6478 }
6479
6480 pub const fn with_iss(mut self, value: u32) -> Self {
6482 self.set_iss(value);
6483 self
6484 }
6485
6486 pub const fn ec(self) -> u8 {
6488 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
6489 }
6490
6491 pub const fn set_ec(&mut self, value: u8) {
6493 let offset = Self::EC_SHIFT;
6494 assert!(value & (Self::EC_MASK as u8) == value);
6495 *self = Self::from_bits_retain(
6496 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u64) << offset),
6497 );
6498 }
6499
6500 pub const fn with_ec(mut self, value: u8) -> Self {
6502 self.set_ec(value);
6503 self
6504 }
6505
6506 pub const fn iss2(self) -> u32 {
6508 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
6509 }
6510
6511 pub const fn set_iss2(&mut self, value: u32) {
6513 let offset = Self::ISS2_SHIFT;
6514 assert!(value & (Self::ISS2_MASK as u32) == value);
6515 *self = Self::from_bits_retain(
6516 (self.bits() & !(Self::ISS2_MASK << offset)) | ((value as u64) << offset),
6517 );
6518 }
6519
6520 pub const fn with_iss2(mut self, value: u32) -> Self {
6522 self.set_iss2(value);
6523 self
6524 }
6525}
6526
6527#[cfg(feature = "el1")]
6528bitflags! {
6529 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6531 #[repr(transparent)]
6532 pub struct FarEl1: u64 {
6533 }
6534}
6535
6536#[cfg(feature = "el1")]
6537impl FarEl1 {
6538 pub const VA_SHIFT: u32 = 0;
6540 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
6542
6543 pub const fn va(self) -> u64 {
6545 ((self.bits() >> Self::VA_SHIFT)
6546 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
6547 }
6548
6549 pub const fn set_va(&mut self, value: u64) {
6551 let offset = Self::VA_SHIFT;
6552 assert!(value & (Self::VA_MASK as u64) == value);
6553 *self = Self::from_bits_retain(
6554 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u64) << offset),
6555 );
6556 }
6557
6558 pub const fn with_va(mut self, value: u64) -> Self {
6560 self.set_va(value);
6561 self
6562 }
6563}
6564
6565#[cfg(feature = "el2")]
6566bitflags! {
6567 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6569 #[repr(transparent)]
6570 pub struct FarEl2: u64 {
6571 }
6572}
6573
6574#[cfg(feature = "el2")]
6575impl FarEl2 {
6576 pub const VA_SHIFT: u32 = 0;
6578 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
6580
6581 pub const fn va(self) -> u64 {
6583 ((self.bits() >> Self::VA_SHIFT)
6584 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
6585 }
6586
6587 pub const fn set_va(&mut self, value: u64) {
6589 let offset = Self::VA_SHIFT;
6590 assert!(value & (Self::VA_MASK as u64) == value);
6591 *self = Self::from_bits_retain(
6592 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u64) << offset),
6593 );
6594 }
6595
6596 pub const fn with_va(mut self, value: u64) -> Self {
6598 self.set_va(value);
6599 self
6600 }
6601}
6602
6603#[cfg(feature = "el1")]
6604bitflags! {
6605 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6607 #[repr(transparent)]
6608 pub struct GcrEl1: u64 {
6609 const RRND = 1 << 16;
6611 }
6612}
6613
6614#[cfg(feature = "el1")]
6615impl GcrEl1 {
6616 pub const EXCLUDE_SHIFT: u32 = 0;
6618 pub const EXCLUDE_MASK: u64 = 0b1111111111111111;
6620 pub const RRND_SHIFT: u32 = 16;
6622
6623 pub const fn exclude(self) -> u16 {
6625 ((self.bits() >> Self::EXCLUDE_SHIFT) & 0b1111111111111111) as u16
6626 }
6627
6628 pub const fn set_exclude(&mut self, value: u16) {
6630 let offset = Self::EXCLUDE_SHIFT;
6631 assert!(value & (Self::EXCLUDE_MASK as u16) == value);
6632 *self = Self::from_bits_retain(
6633 (self.bits() & !(Self::EXCLUDE_MASK << offset)) | ((value as u64) << offset),
6634 );
6635 }
6636
6637 pub const fn with_exclude(mut self, value: u16) -> Self {
6639 self.set_exclude(value);
6640 self
6641 }
6642}
6643
6644#[cfg(feature = "el1")]
6645bitflags! {
6646 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6650 #[repr(transparent)]
6651 pub struct GcscrEl1: u64 {
6652 const PCRSEL = 1 << 0;
6654 const RVCHKEN = 1 << 5;
6656 const EXLOCKEN = 1 << 6;
6658 const PUSHMEN = 1 << 8;
6660 const STREN = 1 << 9;
6662 }
6663}
6664
6665#[cfg(feature = "el1")]
6666impl GcscrEl1 {
6667 pub const PCRSEL_SHIFT: u32 = 0;
6669 pub const RVCHKEN_SHIFT: u32 = 5;
6671 pub const EXLOCKEN_SHIFT: u32 = 6;
6673 pub const PUSHMEN_SHIFT: u32 = 8;
6675 pub const STREN_SHIFT: u32 = 9;
6677}
6678
6679#[cfg(feature = "el2")]
6680bitflags! {
6681 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6685 #[repr(transparent)]
6686 pub struct GcscrEl2: u64 {
6687 const PCRSEL = 1 << 0;
6689 const RVCHKEN = 1 << 5;
6691 const EXLOCKEN = 1 << 6;
6693 const PUSHMEN = 1 << 8;
6695 const STREN = 1 << 9;
6697 }
6698}
6699
6700#[cfg(feature = "el2")]
6701impl GcscrEl2 {
6702 pub const PCRSEL_SHIFT: u32 = 0;
6704 pub const RVCHKEN_SHIFT: u32 = 5;
6706 pub const EXLOCKEN_SHIFT: u32 = 6;
6708 pub const PUSHMEN_SHIFT: u32 = 8;
6710 pub const STREN_SHIFT: u32 = 9;
6712}
6713
6714#[cfg(feature = "el3")]
6715bitflags! {
6716 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6718 #[repr(transparent)]
6719 pub struct GpccrEl3: u64 {
6720 const PPS3 = 1 << 3;
6722 const RLPAD = 1 << 5;
6724 const NSPAD = 1 << 6;
6726 const SPAD = 1 << 7;
6728 const GPC = 1 << 16;
6730 const GPCP = 1 << 17;
6732 const TBGPCD = 1 << 18;
6734 const NSO = 1 << 19;
6736 const APPSAA = 1 << 24;
6738 const SA = 1 << 25;
6740 const NSP = 1 << 26;
6742 const NA6 = 1 << 27;
6744 const NA7 = 1 << 28;
6746 const GPCBW = 1 << 29;
6748 }
6749}
6750
6751#[cfg(feature = "el3")]
6752impl GpccrEl3 {
6753 pub const PPS_SHIFT: u32 = 0;
6755 pub const PPS_MASK: u64 = 0b111;
6757 pub const PPS3_SHIFT: u32 = 3;
6759 pub const RLPAD_SHIFT: u32 = 5;
6761 pub const NSPAD_SHIFT: u32 = 6;
6763 pub const SPAD_SHIFT: u32 = 7;
6765 pub const IRGN_SHIFT: u32 = 8;
6767 pub const IRGN_MASK: u64 = 0b11;
6769 pub const ORGN_SHIFT: u32 = 10;
6771 pub const ORGN_MASK: u64 = 0b11;
6773 pub const SH_SHIFT: u32 = 12;
6775 pub const SH_MASK: u64 = 0b11;
6777 pub const PGS_SHIFT: u32 = 14;
6779 pub const PGS_MASK: u64 = 0b11;
6781 pub const GPC_SHIFT: u32 = 16;
6783 pub const GPCP_SHIFT: u32 = 17;
6785 pub const TBGPCD_SHIFT: u32 = 18;
6787 pub const NSO_SHIFT: u32 = 19;
6789 pub const L0GPTSZ_SHIFT: u32 = 20;
6791 pub const L0GPTSZ_MASK: u64 = 0b1111;
6793 pub const APPSAA_SHIFT: u32 = 24;
6795 pub const SA_SHIFT: u32 = 25;
6797 pub const NSP_SHIFT: u32 = 26;
6799 pub const NA6_SHIFT: u32 = 27;
6801 pub const NA7_SHIFT: u32 = 28;
6803 pub const GPCBW_SHIFT: u32 = 29;
6805
6806 pub const fn pps(self) -> u8 {
6808 ((self.bits() >> Self::PPS_SHIFT) & 0b111) as u8
6809 }
6810
6811 pub const fn set_pps(&mut self, value: u8) {
6813 let offset = Self::PPS_SHIFT;
6814 assert!(value & (Self::PPS_MASK as u8) == value);
6815 *self = Self::from_bits_retain(
6816 (self.bits() & !(Self::PPS_MASK << offset)) | ((value as u64) << offset),
6817 );
6818 }
6819
6820 pub const fn with_pps(mut self, value: u8) -> Self {
6822 self.set_pps(value);
6823 self
6824 }
6825
6826 pub fn irgn(self) -> crate::manual::Cacheability {
6828 crate::manual::Cacheability::try_from(((self.bits() >> Self::IRGN_SHIFT) & 0b11) as u8)
6829 .unwrap()
6830 }
6831
6832 pub fn set_irgn(&mut self, value: crate::manual::Cacheability) {
6834 let offset = Self::IRGN_SHIFT;
6835 let value: u8 = value.into();
6836 assert!(value & (Self::IRGN_MASK as u8) == value);
6837 *self = Self::from_bits_retain(
6838 (self.bits() & !(Self::IRGN_MASK << offset)) | ((value as u64) << offset),
6839 );
6840 }
6841
6842 pub fn with_irgn(mut self, value: crate::manual::Cacheability) -> Self {
6844 self.set_irgn(value);
6845 self
6846 }
6847
6848 pub fn orgn(self) -> crate::manual::Cacheability {
6850 crate::manual::Cacheability::try_from(((self.bits() >> Self::ORGN_SHIFT) & 0b11) as u8)
6851 .unwrap()
6852 }
6853
6854 pub fn set_orgn(&mut self, value: crate::manual::Cacheability) {
6856 let offset = Self::ORGN_SHIFT;
6857 let value: u8 = value.into();
6858 assert!(value & (Self::ORGN_MASK as u8) == value);
6859 *self = Self::from_bits_retain(
6860 (self.bits() & !(Self::ORGN_MASK << offset)) | ((value as u64) << offset),
6861 );
6862 }
6863
6864 pub fn with_orgn(mut self, value: crate::manual::Cacheability) -> Self {
6866 self.set_orgn(value);
6867 self
6868 }
6869
6870 pub fn sh(self) -> crate::manual::Shareability {
6872 crate::manual::Shareability::try_from(((self.bits() >> Self::SH_SHIFT) & 0b11) as u8)
6873 .unwrap()
6874 }
6875
6876 pub fn set_sh(&mut self, value: crate::manual::Shareability) {
6878 let offset = Self::SH_SHIFT;
6879 let value: u8 = value.into();
6880 assert!(value & (Self::SH_MASK as u8) == value);
6881 *self = Self::from_bits_retain(
6882 (self.bits() & !(Self::SH_MASK << offset)) | ((value as u64) << offset),
6883 );
6884 }
6885
6886 pub fn with_sh(mut self, value: crate::manual::Shareability) -> Self {
6888 self.set_sh(value);
6889 self
6890 }
6891
6892 pub const fn pgs(self) -> u8 {
6894 ((self.bits() >> Self::PGS_SHIFT) & 0b11) as u8
6895 }
6896
6897 pub const fn set_pgs(&mut self, value: u8) {
6899 let offset = Self::PGS_SHIFT;
6900 assert!(value & (Self::PGS_MASK as u8) == value);
6901 *self = Self::from_bits_retain(
6902 (self.bits() & !(Self::PGS_MASK << offset)) | ((value as u64) << offset),
6903 );
6904 }
6905
6906 pub const fn with_pgs(mut self, value: u8) -> Self {
6908 self.set_pgs(value);
6909 self
6910 }
6911
6912 pub const fn l0gptsz(self) -> u8 {
6914 ((self.bits() >> Self::L0GPTSZ_SHIFT) & 0b1111) as u8
6915 }
6916
6917 pub const fn set_l0gptsz(&mut self, value: u8) {
6919 let offset = Self::L0GPTSZ_SHIFT;
6920 assert!(value & (Self::L0GPTSZ_MASK as u8) == value);
6921 *self = Self::from_bits_retain(
6922 (self.bits() & !(Self::L0GPTSZ_MASK << offset)) | ((value as u64) << offset),
6923 );
6924 }
6925
6926 pub const fn with_l0gptsz(mut self, value: u8) -> Self {
6928 self.set_l0gptsz(value);
6929 self
6930 }
6931}
6932
6933#[cfg(feature = "el3")]
6934bitflags! {
6935 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6937 #[repr(transparent)]
6938 pub struct GptbrEl3: u64 {
6939 }
6940}
6941
6942#[cfg(feature = "el3")]
6943impl GptbrEl3 {
6944 pub const BADDR_SHIFT: u32 = 0;
6946 pub const BADDR_MASK: u64 = 0b1111111111111111111111111111111111111111;
6948 pub const BADDR_43_40_SHIFT: u32 = 40;
6950 pub const BADDR_43_40_MASK: u64 = 0b1111;
6952
6953 pub const fn baddr(self) -> u64 {
6955 ((self.bits() >> Self::BADDR_SHIFT) & 0b1111111111111111111111111111111111111111) as u64
6956 }
6957
6958 pub const fn set_baddr(&mut self, value: u64) {
6960 let offset = Self::BADDR_SHIFT;
6961 assert!(value & (Self::BADDR_MASK as u64) == value);
6962 *self = Self::from_bits_retain(
6963 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
6964 );
6965 }
6966
6967 pub const fn with_baddr(mut self, value: u64) -> Self {
6969 self.set_baddr(value);
6970 self
6971 }
6972
6973 pub const fn baddr_43_40(self) -> u8 {
6975 ((self.bits() >> Self::BADDR_43_40_SHIFT) & 0b1111) as u8
6976 }
6977
6978 pub const fn set_baddr_43_40(&mut self, value: u8) {
6980 let offset = Self::BADDR_43_40_SHIFT;
6981 assert!(value & (Self::BADDR_43_40_MASK as u8) == value);
6982 *self = Self::from_bits_retain(
6983 (self.bits() & !(Self::BADDR_43_40_MASK << offset)) | ((value as u64) << offset),
6984 );
6985 }
6986
6987 pub const fn with_baddr_43_40(mut self, value: u8) -> Self {
6989 self.set_baddr_43_40(value);
6990 self
6991 }
6992}
6993
6994#[cfg(feature = "el2")]
6995bitflags! {
6996 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6998 #[repr(transparent)]
6999 pub struct HafgrtrEl2: u64 {
7000 const AMEVCNTR00_EL0 = 1 << 1;
7002 const AMEVCNTR01_EL0 = 1 << 2;
7004 const AMEVCNTR02_EL0 = 1 << 3;
7006 const AMEVCNTR03_EL0 = 1 << 4;
7008 }
7009}
7010
7011#[cfg(feature = "el2")]
7012impl HafgrtrEl2 {
7013 pub const AMEVCNTR0_EL0_SHIFT: u32 = 1;
7015}
7016
7017bitflags! {
7018 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7020 #[repr(transparent)]
7021 pub struct Hcptr: u32 {
7022 const RES1 = 0b11001111111111;
7024 const TCP10 = 1 << 10;
7026 const TCP11 = 1 << 11;
7028 const TASE = 1 << 15;
7030 const TTA = 1 << 20;
7032 const TAM = 1 << 30;
7034 const TCPAC = 1 << 31;
7036 }
7037}
7038
7039impl Hcptr {
7040 pub const TCP10_SHIFT: u32 = 10;
7042 pub const TCP11_SHIFT: u32 = 11;
7044 pub const TASE_SHIFT: u32 = 15;
7046 pub const TTA_SHIFT: u32 = 20;
7048 pub const TAM_SHIFT: u32 = 30;
7050 pub const TCPAC_SHIFT: u32 = 31;
7052}
7053
7054bitflags! {
7055 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7057 #[repr(transparent)]
7058 pub struct Hcr: u32 {
7059 const VM = 1 << 0;
7061 const SWIO = 1 << 1;
7063 const PTW = 1 << 2;
7065 const FMO = 1 << 3;
7067 const IMO = 1 << 4;
7069 const AMO = 1 << 5;
7071 const VF = 1 << 6;
7073 const VI = 1 << 7;
7075 const VA = 1 << 8;
7077 const FB = 1 << 9;
7079 const DC = 1 << 12;
7081 const TWI = 1 << 13;
7083 const TWE = 1 << 14;
7085 const TID0 = 1 << 15;
7087 const TID1 = 1 << 16;
7089 const TID2 = 1 << 17;
7091 const TID3 = 1 << 18;
7093 const TSC = 1 << 19;
7095 const TIDCP = 1 << 20;
7097 const TAC = 1 << 21;
7099 const TSW = 1 << 22;
7101 const TPC = 1 << 23;
7103 const TPU = 1 << 24;
7105 const TTLB = 1 << 25;
7107 const TVM = 1 << 26;
7109 const TGE = 1 << 27;
7111 const HCD = 1 << 29;
7113 const TRVM = 1 << 30;
7115 }
7116}
7117
7118impl Hcr {
7119 pub const VM_SHIFT: u32 = 0;
7121 pub const SWIO_SHIFT: u32 = 1;
7123 pub const PTW_SHIFT: u32 = 2;
7125 pub const FMO_SHIFT: u32 = 3;
7127 pub const IMO_SHIFT: u32 = 4;
7129 pub const AMO_SHIFT: u32 = 5;
7131 pub const VF_SHIFT: u32 = 6;
7133 pub const VI_SHIFT: u32 = 7;
7135 pub const VA_SHIFT: u32 = 8;
7137 pub const FB_SHIFT: u32 = 9;
7139 pub const BSU_SHIFT: u32 = 10;
7141 pub const BSU_MASK: u32 = 0b11;
7143 pub const DC_SHIFT: u32 = 12;
7145 pub const TWI_SHIFT: u32 = 13;
7147 pub const TWE_SHIFT: u32 = 14;
7149 pub const TID0_SHIFT: u32 = 15;
7151 pub const TID1_SHIFT: u32 = 16;
7153 pub const TID2_SHIFT: u32 = 17;
7155 pub const TID3_SHIFT: u32 = 18;
7157 pub const TSC_SHIFT: u32 = 19;
7159 pub const TIDCP_SHIFT: u32 = 20;
7161 pub const TAC_SHIFT: u32 = 21;
7163 pub const TSW_SHIFT: u32 = 22;
7165 pub const TPC_SHIFT: u32 = 23;
7167 pub const TPU_SHIFT: u32 = 24;
7169 pub const TTLB_SHIFT: u32 = 25;
7171 pub const TVM_SHIFT: u32 = 26;
7173 pub const TGE_SHIFT: u32 = 27;
7175 pub const HCD_SHIFT: u32 = 29;
7177 pub const TRVM_SHIFT: u32 = 30;
7179
7180 pub const fn bsu(self) -> u8 {
7182 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
7183 }
7184
7185 pub const fn set_bsu(&mut self, value: u8) {
7187 let offset = Self::BSU_SHIFT;
7188 assert!(value & (Self::BSU_MASK as u8) == value);
7189 *self = Self::from_bits_retain(
7190 (self.bits() & !(Self::BSU_MASK << offset)) | ((value as u32) << offset),
7191 );
7192 }
7193
7194 pub const fn with_bsu(mut self, value: u8) -> Self {
7196 self.set_bsu(value);
7197 self
7198 }
7199}
7200
7201bitflags! {
7202 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7204 #[repr(transparent)]
7205 pub struct Hcr2: u32 {
7206 const CD = 1 << 0;
7208 const ID = 1 << 1;
7210 const TERR = 1 << 4;
7212 const TEA = 1 << 5;
7214 const TID4 = 1 << 17;
7216 const TICAB = 1 << 18;
7218 const TOCU = 1 << 20;
7220 const TTLBIS = 1 << 22;
7222 }
7223}
7224
7225impl Hcr2 {
7226 pub const CD_SHIFT: u32 = 0;
7228 pub const ID_SHIFT: u32 = 1;
7230 pub const TERR_SHIFT: u32 = 4;
7232 pub const TEA_SHIFT: u32 = 5;
7234 pub const TID4_SHIFT: u32 = 17;
7236 pub const TICAB_SHIFT: u32 = 18;
7238 pub const TOCU_SHIFT: u32 = 20;
7240 pub const TTLBIS_SHIFT: u32 = 22;
7242}
7243
7244#[cfg(feature = "el2")]
7245bitflags! {
7246 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7250 #[repr(transparent)]
7251 pub struct HcrxEl2: u64 {
7252 const ENAS0 = 1 << 0;
7254 const ENALS = 1 << 1;
7256 const ENASR = 1 << 2;
7258 const FNXS = 1 << 3;
7260 const FGTNXS = 1 << 4;
7262 const SMPME = 1 << 5;
7264 const TALLINT = 1 << 6;
7266 const VINMI = 1 << 7;
7268 const VFNMI = 1 << 8;
7270 const CMOW = 1 << 9;
7272 const MCE2 = 1 << 10;
7274 const MSCEN = 1 << 11;
7276 const TCR2EN = 1 << 14;
7278 const SCTLR2EN = 1 << 15;
7280 const PTTWI = 1 << 16;
7282 const D128EN = 1 << 17;
7284 const ENSNERR = 1 << 18;
7286 const TMEA = 1 << 19;
7288 const ENSDERR = 1 << 20;
7290 const ENIDCP128 = 1 << 21;
7292 const GCSEN = 1 << 22;
7294 const ENFPM = 1 << 23;
7296 const PACMEN = 1 << 24;
7298 const VTLBIDEN = 1 << 25;
7300 const SRMASKEN = 1 << 26;
7302 const NVTGE = 1 << 27;
7304 const POE2EN = 1 << 29;
7306 const TPLIMEN = 1 << 30;
7308 const FDIT = 1 << 31;
7310 const NVNTTLB = 1 << 32;
7312 const NVNTTLBIS = 1 << 33;
7314 const NVNTTLBOS = 1 << 34;
7316 const VTLBIDOSEN = 1 << 35;
7318 const FNB = 1 << 36;
7320 const VTE = 1 << 37;
7322 const VTAO = 1 << 38;
7324 const VTCO = 1 << 39;
7326 }
7327}
7328
7329#[cfg(feature = "el2")]
7330impl HcrxEl2 {
7331 pub const ENAS0_SHIFT: u32 = 0;
7333 pub const ENALS_SHIFT: u32 = 1;
7335 pub const ENASR_SHIFT: u32 = 2;
7337 pub const FNXS_SHIFT: u32 = 3;
7339 pub const FGTNXS_SHIFT: u32 = 4;
7341 pub const SMPME_SHIFT: u32 = 5;
7343 pub const TALLINT_SHIFT: u32 = 6;
7345 pub const VINMI_SHIFT: u32 = 7;
7347 pub const VFNMI_SHIFT: u32 = 8;
7349 pub const CMOW_SHIFT: u32 = 9;
7351 pub const MCE2_SHIFT: u32 = 10;
7353 pub const MSCEN_SHIFT: u32 = 11;
7355 pub const TCR2EN_SHIFT: u32 = 14;
7357 pub const SCTLR2EN_SHIFT: u32 = 15;
7359 pub const PTTWI_SHIFT: u32 = 16;
7361 pub const D128EN_SHIFT: u32 = 17;
7363 pub const ENSNERR_SHIFT: u32 = 18;
7365 pub const TMEA_SHIFT: u32 = 19;
7367 pub const ENSDERR_SHIFT: u32 = 20;
7369 pub const ENIDCP128_SHIFT: u32 = 21;
7371 pub const GCSEN_SHIFT: u32 = 22;
7373 pub const ENFPM_SHIFT: u32 = 23;
7375 pub const PACMEN_SHIFT: u32 = 24;
7377 pub const VTLBIDEN_SHIFT: u32 = 25;
7379 pub const SRMASKEN_SHIFT: u32 = 26;
7381 pub const NVTGE_SHIFT: u32 = 27;
7383 pub const POE2EN_SHIFT: u32 = 29;
7385 pub const TPLIMEN_SHIFT: u32 = 30;
7387 pub const FDIT_SHIFT: u32 = 31;
7389 pub const NVNTTLB_SHIFT: u32 = 32;
7391 pub const NVNTTLBIS_SHIFT: u32 = 33;
7393 pub const NVNTTLBOS_SHIFT: u32 = 34;
7395 pub const VTLBIDOSEN_SHIFT: u32 = 35;
7397 pub const FNB_SHIFT: u32 = 36;
7399 pub const VTE_SHIFT: u32 = 37;
7401 pub const VTAO_SHIFT: u32 = 38;
7403 pub const VTCO_SHIFT: u32 = 39;
7405}
7406
7407#[cfg(feature = "el2")]
7408bitflags! {
7409 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7411 #[repr(transparent)]
7412 pub struct HcrEl2: u64 {
7413 const VM = 1 << 0;
7415 const SWIO = 1 << 1;
7417 const PTW = 1 << 2;
7419 const FMO = 1 << 3;
7421 const IMO = 1 << 4;
7423 const AMO = 1 << 5;
7425 const VF = 1 << 6;
7427 const VI = 1 << 7;
7429 const VSE = 1 << 8;
7431 const FB = 1 << 9;
7433 const DC = 1 << 12;
7435 const TWI = 1 << 13;
7437 const TWE = 1 << 14;
7439 const TID0 = 1 << 15;
7441 const TID1 = 1 << 16;
7443 const TID2 = 1 << 17;
7445 const TID3 = 1 << 18;
7447 const TSC = 1 << 19;
7449 const TIDCP = 1 << 20;
7451 const TACR = 1 << 21;
7453 const TSW = 1 << 22;
7455 const TPCP = 1 << 23;
7457 const TPU = 1 << 24;
7459 const TTLB = 1 << 25;
7461 const TVM = 1 << 26;
7463 const TGE = 1 << 27;
7465 const TDZ = 1 << 28;
7467 const HCD = 1 << 29;
7469 const TRVM = 1 << 30;
7471 const RW = 1 << 31;
7473 const CD = 1 << 32;
7475 const ID = 1 << 33;
7477 const E2H = 1 << 34;
7479 const TLOR = 1 << 35;
7481 const TERR = 1 << 36;
7483 const TEA = 1 << 37;
7485 const APK = 1 << 40;
7487 const API = 1 << 41;
7489 const NV = 1 << 42;
7491 const NV1 = 1 << 43;
7493 const AT = 1 << 44;
7495 const NV2 = 1 << 45;
7497 const FWB = 1 << 46;
7499 const FIEN = 1 << 47;
7501 const GPF = 1 << 48;
7503 const TID4 = 1 << 49;
7505 const TICAB = 1 << 50;
7507 const AMVOFFEN = 1 << 51;
7509 const TOCU = 1 << 52;
7511 const ENSCXT = 1 << 53;
7513 const TTLBIS = 1 << 54;
7515 const TTLBOS = 1 << 55;
7517 const ATA = 1 << 56;
7519 const DCT = 1 << 57;
7521 const TID5 = 1 << 58;
7523 const TWEDEN = 1 << 59;
7525 }
7526}
7527
7528#[cfg(feature = "el2")]
7529impl HcrEl2 {
7530 pub const VM_SHIFT: u32 = 0;
7532 pub const SWIO_SHIFT: u32 = 1;
7534 pub const PTW_SHIFT: u32 = 2;
7536 pub const FMO_SHIFT: u32 = 3;
7538 pub const IMO_SHIFT: u32 = 4;
7540 pub const AMO_SHIFT: u32 = 5;
7542 pub const VF_SHIFT: u32 = 6;
7544 pub const VI_SHIFT: u32 = 7;
7546 pub const VSE_SHIFT: u32 = 8;
7548 pub const FB_SHIFT: u32 = 9;
7550 pub const BSU_SHIFT: u32 = 10;
7552 pub const BSU_MASK: u64 = 0b11;
7554 pub const DC_SHIFT: u32 = 12;
7556 pub const TWI_SHIFT: u32 = 13;
7558 pub const TWE_SHIFT: u32 = 14;
7560 pub const TID0_SHIFT: u32 = 15;
7562 pub const TID1_SHIFT: u32 = 16;
7564 pub const TID2_SHIFT: u32 = 17;
7566 pub const TID3_SHIFT: u32 = 18;
7568 pub const TSC_SHIFT: u32 = 19;
7570 pub const TIDCP_SHIFT: u32 = 20;
7572 pub const TACR_SHIFT: u32 = 21;
7574 pub const TSW_SHIFT: u32 = 22;
7576 pub const TPCP_SHIFT: u32 = 23;
7578 pub const TPU_SHIFT: u32 = 24;
7580 pub const TTLB_SHIFT: u32 = 25;
7582 pub const TVM_SHIFT: u32 = 26;
7584 pub const TGE_SHIFT: u32 = 27;
7586 pub const TDZ_SHIFT: u32 = 28;
7588 pub const HCD_SHIFT: u32 = 29;
7590 pub const TRVM_SHIFT: u32 = 30;
7592 pub const RW_SHIFT: u32 = 31;
7594 pub const CD_SHIFT: u32 = 32;
7596 pub const ID_SHIFT: u32 = 33;
7598 pub const E2H_SHIFT: u32 = 34;
7600 pub const TLOR_SHIFT: u32 = 35;
7602 pub const TERR_SHIFT: u32 = 36;
7604 pub const TEA_SHIFT: u32 = 37;
7606 pub const APK_SHIFT: u32 = 40;
7608 pub const API_SHIFT: u32 = 41;
7610 pub const NV_SHIFT: u32 = 42;
7612 pub const NV1_SHIFT: u32 = 43;
7614 pub const AT_SHIFT: u32 = 44;
7616 pub const NV2_SHIFT: u32 = 45;
7618 pub const FWB_SHIFT: u32 = 46;
7620 pub const FIEN_SHIFT: u32 = 47;
7622 pub const GPF_SHIFT: u32 = 48;
7624 pub const TID4_SHIFT: u32 = 49;
7626 pub const TICAB_SHIFT: u32 = 50;
7628 pub const AMVOFFEN_SHIFT: u32 = 51;
7630 pub const TOCU_SHIFT: u32 = 52;
7632 pub const ENSCXT_SHIFT: u32 = 53;
7634 pub const TTLBIS_SHIFT: u32 = 54;
7636 pub const TTLBOS_SHIFT: u32 = 55;
7638 pub const ATA_SHIFT: u32 = 56;
7640 pub const DCT_SHIFT: u32 = 57;
7642 pub const TID5_SHIFT: u32 = 58;
7644 pub const TWEDEN_SHIFT: u32 = 59;
7646 pub const TWEDEL_SHIFT: u32 = 60;
7648 pub const TWEDEL_MASK: u64 = 0b1111;
7650
7651 pub const fn bsu(self) -> u8 {
7653 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
7654 }
7655
7656 pub const fn set_bsu(&mut self, value: u8) {
7658 let offset = Self::BSU_SHIFT;
7659 assert!(value & (Self::BSU_MASK as u8) == value);
7660 *self = Self::from_bits_retain(
7661 (self.bits() & !(Self::BSU_MASK << offset)) | ((value as u64) << offset),
7662 );
7663 }
7664
7665 pub const fn with_bsu(mut self, value: u8) -> Self {
7667 self.set_bsu(value);
7668 self
7669 }
7670
7671 pub const fn twedel(self) -> u8 {
7673 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
7674 }
7675
7676 pub const fn set_twedel(&mut self, value: u8) {
7678 let offset = Self::TWEDEL_SHIFT;
7679 assert!(value & (Self::TWEDEL_MASK as u8) == value);
7680 *self = Self::from_bits_retain(
7681 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
7682 );
7683 }
7684
7685 pub const fn with_twedel(mut self, value: u8) -> Self {
7687 self.set_twedel(value);
7688 self
7689 }
7690}
7691
7692bitflags! {
7693 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7695 #[repr(transparent)]
7696 pub struct Hdcr: u32 {
7697 const TPMCR = 1 << 5;
7699 const TPM = 1 << 6;
7701 const HPME = 1 << 7;
7703 const TDE = 1 << 8;
7705 const TDA = 1 << 9;
7707 const TDOSA = 1 << 10;
7709 const TDRA = 1 << 11;
7711 const HPMD = 1 << 17;
7713 const TTRF = 1 << 19;
7715 const HCCD = 1 << 23;
7717 const HLP = 1 << 26;
7719 const TDCC = 1 << 27;
7721 const MTPME = 1 << 28;
7723 const HPMFZO = 1 << 29;
7725 }
7726}
7727
7728impl Hdcr {
7729 pub const HPMN_SHIFT: u32 = 0;
7731 pub const HPMN_MASK: u32 = 0b11111;
7733 pub const TPMCR_SHIFT: u32 = 5;
7735 pub const TPM_SHIFT: u32 = 6;
7737 pub const HPME_SHIFT: u32 = 7;
7739 pub const TDE_SHIFT: u32 = 8;
7741 pub const TDA_SHIFT: u32 = 9;
7743 pub const TDOSA_SHIFT: u32 = 10;
7745 pub const TDRA_SHIFT: u32 = 11;
7747 pub const HPMD_SHIFT: u32 = 17;
7749 pub const TTRF_SHIFT: u32 = 19;
7751 pub const HCCD_SHIFT: u32 = 23;
7753 pub const HLP_SHIFT: u32 = 26;
7755 pub const TDCC_SHIFT: u32 = 27;
7757 pub const MTPME_SHIFT: u32 = 28;
7759 pub const HPMFZO_SHIFT: u32 = 29;
7761
7762 pub const fn hpmn(self) -> u8 {
7764 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
7765 }
7766
7767 pub const fn set_hpmn(&mut self, value: u8) {
7769 let offset = Self::HPMN_SHIFT;
7770 assert!(value & (Self::HPMN_MASK as u8) == value);
7771 *self = Self::from_bits_retain(
7772 (self.bits() & !(Self::HPMN_MASK << offset)) | ((value as u32) << offset),
7773 );
7774 }
7775
7776 pub const fn with_hpmn(mut self, value: u8) -> Self {
7778 self.set_hpmn(value);
7779 self
7780 }
7781}
7782
7783bitflags! {
7784 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7786 #[repr(transparent)]
7787 pub struct Hdfar: u32 {
7788 }
7789}
7790
7791impl Hdfar {
7792 pub const VA_SHIFT: u32 = 0;
7794 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
7796
7797 pub const fn va(self) -> u32 {
7799 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
7800 }
7801
7802 pub const fn set_va(&mut self, value: u32) {
7804 let offset = Self::VA_SHIFT;
7805 assert!(value & (Self::VA_MASK as u32) == value);
7806 *self = Self::from_bits_retain(
7807 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
7808 );
7809 }
7810
7811 pub const fn with_va(mut self, value: u32) -> Self {
7813 self.set_va(value);
7814 self
7815 }
7816}
7817
7818#[cfg(feature = "el2")]
7819bitflags! {
7820 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7822 #[repr(transparent)]
7823 pub struct Hdfgrtr2El2: u64 {
7824 const NPMECR_EL1 = 1 << 0;
7826 const NPMIAR_EL1 = 1 << 1;
7828 const NPMICNTR_EL0 = 1 << 2;
7830 const NPMICFILTR_EL0 = 1 << 3;
7832 const NPMUACR_EL1 = 1 << 4;
7834 const NMDSELR_EL1 = 1 << 5;
7836 const NPMSSDATA = 1 << 6;
7838 const NPMSSCR_EL1 = 1 << 7;
7840 const NSPMEVCNTRN_EL0 = 1 << 8;
7842 const NSPMEVTYPERN_EL0 = 1 << 9;
7844 const NSPMSELR_EL0 = 1 << 10;
7846 const NSPMCNTEN = 1 << 11;
7848 const NSPMINTEN = 1 << 12;
7850 const NSPMOVS = 1 << 13;
7852 const NSPMCR_EL0 = 1 << 14;
7854 const NSPMACCESSR_EL1 = 1 << 15;
7856 const NSPMSCR_EL1 = 1 << 16;
7858 const NSPMID = 1 << 17;
7860 const NSPMDEVAFF_EL1 = 1 << 18;
7862 const NPMSDSFR_EL1 = 1 << 19;
7864 const NTRCITECR_EL1 = 1 << 20;
7866 const NTRBMPAM_EL1 = 1 << 22;
7868 const NMDSTEPOP_EL1 = 1 << 23;
7870 const NPMBMAR_EL1 = 1 << 24;
7872 }
7873}
7874
7875#[cfg(feature = "el2")]
7876impl Hdfgrtr2El2 {
7877 pub const NPMECR_EL1_SHIFT: u32 = 0;
7879 pub const NPMIAR_EL1_SHIFT: u32 = 1;
7881 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
7883 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
7885 pub const NPMUACR_EL1_SHIFT: u32 = 4;
7887 pub const NMDSELR_EL1_SHIFT: u32 = 5;
7889 pub const NPMSSDATA_SHIFT: u32 = 6;
7891 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
7893 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
7895 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
7897 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
7899 pub const NSPMCNTEN_SHIFT: u32 = 11;
7901 pub const NSPMINTEN_SHIFT: u32 = 12;
7903 pub const NSPMOVS_SHIFT: u32 = 13;
7905 pub const NSPMCR_EL0_SHIFT: u32 = 14;
7907 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
7909 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
7911 pub const NSPMID_SHIFT: u32 = 17;
7913 pub const NSPMDEVAFF_EL1_SHIFT: u32 = 18;
7915 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
7917 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
7919 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
7921 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
7923 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
7925}
7926
7927#[cfg(feature = "el2")]
7928bitflags! {
7929 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7931 #[repr(transparent)]
7932 pub struct HdfgrtrEl2: u64 {
7933 const DBGBCRN_EL1 = 1 << 0;
7935 const DBGBVRN_EL1 = 1 << 1;
7937 const DBGWCRN_EL1 = 1 << 2;
7939 const DBGWVRN_EL1 = 1 << 3;
7941 const MDSCR_EL1 = 1 << 4;
7943 const DBGCLAIM = 1 << 5;
7945 const DBGAUTHSTATUS_EL1 = 1 << 6;
7947 const DBGPRCR_EL1 = 1 << 7;
7949 const OSLSR_EL1 = 1 << 9;
7951 const OSECCR_EL1 = 1 << 10;
7953 const OSDLR_EL1 = 1 << 11;
7955 const PMEVCNTRN_EL0 = 1 << 12;
7957 const PMEVTYPERN_EL0 = 1 << 13;
7959 const PMCCFILTR_EL0 = 1 << 14;
7961 const PMCCNTR_EL0 = 1 << 15;
7963 const PMCNTEN = 1 << 16;
7965 const PMINTEN = 1 << 17;
7967 const PMOVS = 1 << 18;
7969 const PMSELR_EL0 = 1 << 19;
7971 const PMMIR_EL1 = 1 << 22;
7973 const PMBLIMITR_EL1 = 1 << 23;
7975 const PMBPTR_EL1 = 1 << 24;
7977 const PMBSR_EL1 = 1 << 25;
7979 const PMSCR_EL1 = 1 << 26;
7981 const PMSEVFR_EL1 = 1 << 27;
7983 const PMSFCR_EL1 = 1 << 28;
7985 const PMSICR_EL1 = 1 << 29;
7987 const PMSIDR_EL1 = 1 << 30;
7989 const PMSIRR_EL1 = 1 << 31;
7991 const PMSLATFR_EL1 = 1 << 32;
7993 const TRC = 1 << 33;
7995 const TRCAUTHSTATUS = 1 << 34;
7997 const TRCAUXCTLR = 1 << 35;
7999 const TRCCLAIM = 1 << 36;
8001 const TRCCNTVRN = 1 << 37;
8003 const TRCID = 1 << 40;
8005 const TRCIMSPECN = 1 << 41;
8007 const TRCOSLSR = 1 << 43;
8009 const TRCPRGCTLR = 1 << 44;
8011 const TRCSEQSTR = 1 << 45;
8013 const TRCSSCSRN = 1 << 46;
8015 const TRCSTATR = 1 << 47;
8017 const TRCVICTLR = 1 << 48;
8019 const TRBBASER_EL1 = 1 << 50;
8021 const TRBIDR_EL1 = 1 << 51;
8023 const TRBLIMITR_EL1 = 1 << 52;
8025 const TRBMAR_EL1 = 1 << 53;
8027 const TRBPTR_EL1 = 1 << 54;
8029 const TRBSR_EL1 = 1 << 55;
8031 const TRBTRG_EL1 = 1 << 56;
8033 const PMUSERENR_EL0 = 1 << 57;
8035 const PMCEIDN_EL0 = 1 << 58;
8037 const NBRBIDR = 1 << 59;
8039 const NBRBCTL = 1 << 60;
8041 const NBRBDATA = 1 << 61;
8043 const NPMSNEVFR_EL1 = 1 << 62;
8045 const PMBIDR_EL1 = 1 << 63;
8047 }
8048}
8049
8050#[cfg(feature = "el2")]
8051impl HdfgrtrEl2 {
8052 pub const DBGBCRN_EL1_SHIFT: u32 = 0;
8054 pub const DBGBVRN_EL1_SHIFT: u32 = 1;
8056 pub const DBGWCRN_EL1_SHIFT: u32 = 2;
8058 pub const DBGWVRN_EL1_SHIFT: u32 = 3;
8060 pub const MDSCR_EL1_SHIFT: u32 = 4;
8062 pub const DBGCLAIM_SHIFT: u32 = 5;
8064 pub const DBGAUTHSTATUS_EL1_SHIFT: u32 = 6;
8066 pub const DBGPRCR_EL1_SHIFT: u32 = 7;
8068 pub const OSLSR_EL1_SHIFT: u32 = 9;
8070 pub const OSECCR_EL1_SHIFT: u32 = 10;
8072 pub const OSDLR_EL1_SHIFT: u32 = 11;
8074 pub const PMEVCNTRN_EL0_SHIFT: u32 = 12;
8076 pub const PMEVTYPERN_EL0_SHIFT: u32 = 13;
8078 pub const PMCCFILTR_EL0_SHIFT: u32 = 14;
8080 pub const PMCCNTR_EL0_SHIFT: u32 = 15;
8082 pub const PMCNTEN_SHIFT: u32 = 16;
8084 pub const PMINTEN_SHIFT: u32 = 17;
8086 pub const PMOVS_SHIFT: u32 = 18;
8088 pub const PMSELR_EL0_SHIFT: u32 = 19;
8090 pub const PMMIR_EL1_SHIFT: u32 = 22;
8092 pub const PMBLIMITR_EL1_SHIFT: u32 = 23;
8094 pub const PMBPTR_EL1_SHIFT: u32 = 24;
8096 pub const PMBSR_EL1_SHIFT: u32 = 25;
8098 pub const PMSCR_EL1_SHIFT: u32 = 26;
8100 pub const PMSEVFR_EL1_SHIFT: u32 = 27;
8102 pub const PMSFCR_EL1_SHIFT: u32 = 28;
8104 pub const PMSICR_EL1_SHIFT: u32 = 29;
8106 pub const PMSIDR_EL1_SHIFT: u32 = 30;
8108 pub const PMSIRR_EL1_SHIFT: u32 = 31;
8110 pub const PMSLATFR_EL1_SHIFT: u32 = 32;
8112 pub const TRC_SHIFT: u32 = 33;
8114 pub const TRCAUTHSTATUS_SHIFT: u32 = 34;
8116 pub const TRCAUXCTLR_SHIFT: u32 = 35;
8118 pub const TRCCLAIM_SHIFT: u32 = 36;
8120 pub const TRCCNTVRN_SHIFT: u32 = 37;
8122 pub const TRCID_SHIFT: u32 = 40;
8124 pub const TRCIMSPECN_SHIFT: u32 = 41;
8126 pub const TRCOSLSR_SHIFT: u32 = 43;
8128 pub const TRCPRGCTLR_SHIFT: u32 = 44;
8130 pub const TRCSEQSTR_SHIFT: u32 = 45;
8132 pub const TRCSSCSRN_SHIFT: u32 = 46;
8134 pub const TRCSTATR_SHIFT: u32 = 47;
8136 pub const TRCVICTLR_SHIFT: u32 = 48;
8138 pub const TRBBASER_EL1_SHIFT: u32 = 50;
8140 pub const TRBIDR_EL1_SHIFT: u32 = 51;
8142 pub const TRBLIMITR_EL1_SHIFT: u32 = 52;
8144 pub const TRBMAR_EL1_SHIFT: u32 = 53;
8146 pub const TRBPTR_EL1_SHIFT: u32 = 54;
8148 pub const TRBSR_EL1_SHIFT: u32 = 55;
8150 pub const TRBTRG_EL1_SHIFT: u32 = 56;
8152 pub const PMUSERENR_EL0_SHIFT: u32 = 57;
8154 pub const PMCEIDN_EL0_SHIFT: u32 = 58;
8156 pub const NBRBIDR_SHIFT: u32 = 59;
8158 pub const NBRBCTL_SHIFT: u32 = 60;
8160 pub const NBRBDATA_SHIFT: u32 = 61;
8162 pub const NPMSNEVFR_EL1_SHIFT: u32 = 62;
8164 pub const PMBIDR_EL1_SHIFT: u32 = 63;
8166}
8167
8168#[cfg(feature = "el2")]
8169bitflags! {
8170 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8172 #[repr(transparent)]
8173 pub struct Hdfgwtr2El2: u64 {
8174 const NPMECR_EL1 = 1 << 0;
8176 const NPMIAR_EL1 = 1 << 1;
8178 const NPMICNTR_EL0 = 1 << 2;
8180 const NPMICFILTR_EL0 = 1 << 3;
8182 const NPMUACR_EL1 = 1 << 4;
8184 const NMDSELR_EL1 = 1 << 5;
8186 const NPMSSCR_EL1 = 1 << 7;
8188 const NSPMEVCNTRN_EL0 = 1 << 8;
8190 const NSPMEVTYPERN_EL0 = 1 << 9;
8192 const NSPMSELR_EL0 = 1 << 10;
8194 const NSPMCNTEN = 1 << 11;
8196 const NSPMINTEN = 1 << 12;
8198 const NSPMOVS = 1 << 13;
8200 const NSPMCR_EL0 = 1 << 14;
8202 const NSPMACCESSR_EL1 = 1 << 15;
8204 const NSPMSCR_EL1 = 1 << 16;
8206 const NPMSDSFR_EL1 = 1 << 19;
8208 const NTRCITECR_EL1 = 1 << 20;
8210 const NPMZR_EL0 = 1 << 21;
8212 const NTRBMPAM_EL1 = 1 << 22;
8214 const NMDSTEPOP_EL1 = 1 << 23;
8216 const NPMBMAR_EL1 = 1 << 24;
8218 }
8219}
8220
8221#[cfg(feature = "el2")]
8222impl Hdfgwtr2El2 {
8223 pub const NPMECR_EL1_SHIFT: u32 = 0;
8225 pub const NPMIAR_EL1_SHIFT: u32 = 1;
8227 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
8229 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
8231 pub const NPMUACR_EL1_SHIFT: u32 = 4;
8233 pub const NMDSELR_EL1_SHIFT: u32 = 5;
8235 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
8237 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
8239 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
8241 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
8243 pub const NSPMCNTEN_SHIFT: u32 = 11;
8245 pub const NSPMINTEN_SHIFT: u32 = 12;
8247 pub const NSPMOVS_SHIFT: u32 = 13;
8249 pub const NSPMCR_EL0_SHIFT: u32 = 14;
8251 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
8253 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
8255 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
8257 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
8259 pub const NPMZR_EL0_SHIFT: u32 = 21;
8261 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
8263 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
8265 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
8267}
8268
8269#[cfg(feature = "el2")]
8270bitflags! {
8271 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8273 #[repr(transparent)]
8274 pub struct HdfgwtrEl2: u64 {
8275 const DBGBCRN_EL1 = 1 << 0;
8277 const DBGBVRN_EL1 = 1 << 1;
8279 const DBGWCRN_EL1 = 1 << 2;
8281 const DBGWVRN_EL1 = 1 << 3;
8283 const MDSCR_EL1 = 1 << 4;
8285 const DBGCLAIM = 1 << 5;
8287 const DBGPRCR_EL1 = 1 << 7;
8289 const OSLAR_EL1 = 1 << 8;
8291 const OSECCR_EL1 = 1 << 10;
8293 const OSDLR_EL1 = 1 << 11;
8295 const PMEVCNTRN_EL0 = 1 << 12;
8297 const PMEVTYPERN_EL0 = 1 << 13;
8299 const PMCCFILTR_EL0 = 1 << 14;
8301 const PMCCNTR_EL0 = 1 << 15;
8303 const PMCNTEN = 1 << 16;
8305 const PMINTEN = 1 << 17;
8307 const PMOVS = 1 << 18;
8309 const PMSELR_EL0 = 1 << 19;
8311 const PMSWINC_EL0 = 1 << 20;
8313 const PMCR_EL0 = 1 << 21;
8315 const PMBLIMITR_EL1 = 1 << 23;
8317 const PMBPTR_EL1 = 1 << 24;
8319 const PMBSR_EL1 = 1 << 25;
8321 const PMSCR_EL1 = 1 << 26;
8323 const PMSEVFR_EL1 = 1 << 27;
8325 const PMSFCR_EL1 = 1 << 28;
8327 const PMSICR_EL1 = 1 << 29;
8329 const PMSIRR_EL1 = 1 << 31;
8331 const PMSLATFR_EL1 = 1 << 32;
8333 const TRC = 1 << 33;
8335 const TRCAUXCTLR = 1 << 35;
8337 const TRCCLAIM = 1 << 36;
8339 const TRCCNTVRN = 1 << 37;
8341 const TRCIMSPECN = 1 << 41;
8343 const TRCOSLAR = 1 << 42;
8345 const TRCPRGCTLR = 1 << 44;
8347 const TRCSEQSTR = 1 << 45;
8349 const TRCSSCSRN = 1 << 46;
8351 const TRCVICTLR = 1 << 48;
8353 const TRFCR_EL1 = 1 << 49;
8355 const TRBBASER_EL1 = 1 << 50;
8357 const TRBLIMITR_EL1 = 1 << 52;
8359 const TRBMAR_EL1 = 1 << 53;
8361 const TRBPTR_EL1 = 1 << 54;
8363 const TRBSR_EL1 = 1 << 55;
8365 const TRBTRG_EL1 = 1 << 56;
8367 const PMUSERENR_EL0 = 1 << 57;
8369 const NBRBCTL = 1 << 60;
8371 const NBRBDATA = 1 << 61;
8373 const NPMSNEVFR_EL1 = 1 << 62;
8375 }
8376}
8377
8378#[cfg(feature = "el2")]
8379impl HdfgwtrEl2 {
8380 pub const DBGBCRN_EL1_SHIFT: u32 = 0;
8382 pub const DBGBVRN_EL1_SHIFT: u32 = 1;
8384 pub const DBGWCRN_EL1_SHIFT: u32 = 2;
8386 pub const DBGWVRN_EL1_SHIFT: u32 = 3;
8388 pub const MDSCR_EL1_SHIFT: u32 = 4;
8390 pub const DBGCLAIM_SHIFT: u32 = 5;
8392 pub const DBGPRCR_EL1_SHIFT: u32 = 7;
8394 pub const OSLAR_EL1_SHIFT: u32 = 8;
8396 pub const OSECCR_EL1_SHIFT: u32 = 10;
8398 pub const OSDLR_EL1_SHIFT: u32 = 11;
8400 pub const PMEVCNTRN_EL0_SHIFT: u32 = 12;
8402 pub const PMEVTYPERN_EL0_SHIFT: u32 = 13;
8404 pub const PMCCFILTR_EL0_SHIFT: u32 = 14;
8406 pub const PMCCNTR_EL0_SHIFT: u32 = 15;
8408 pub const PMCNTEN_SHIFT: u32 = 16;
8410 pub const PMINTEN_SHIFT: u32 = 17;
8412 pub const PMOVS_SHIFT: u32 = 18;
8414 pub const PMSELR_EL0_SHIFT: u32 = 19;
8416 pub const PMSWINC_EL0_SHIFT: u32 = 20;
8418 pub const PMCR_EL0_SHIFT: u32 = 21;
8420 pub const PMBLIMITR_EL1_SHIFT: u32 = 23;
8422 pub const PMBPTR_EL1_SHIFT: u32 = 24;
8424 pub const PMBSR_EL1_SHIFT: u32 = 25;
8426 pub const PMSCR_EL1_SHIFT: u32 = 26;
8428 pub const PMSEVFR_EL1_SHIFT: u32 = 27;
8430 pub const PMSFCR_EL1_SHIFT: u32 = 28;
8432 pub const PMSICR_EL1_SHIFT: u32 = 29;
8434 pub const PMSIRR_EL1_SHIFT: u32 = 31;
8436 pub const PMSLATFR_EL1_SHIFT: u32 = 32;
8438 pub const TRC_SHIFT: u32 = 33;
8440 pub const TRCAUXCTLR_SHIFT: u32 = 35;
8442 pub const TRCCLAIM_SHIFT: u32 = 36;
8444 pub const TRCCNTVRN_SHIFT: u32 = 37;
8446 pub const TRCIMSPECN_SHIFT: u32 = 41;
8448 pub const TRCOSLAR_SHIFT: u32 = 42;
8450 pub const TRCPRGCTLR_SHIFT: u32 = 44;
8452 pub const TRCSEQSTR_SHIFT: u32 = 45;
8454 pub const TRCSSCSRN_SHIFT: u32 = 46;
8456 pub const TRCVICTLR_SHIFT: u32 = 48;
8458 pub const TRFCR_EL1_SHIFT: u32 = 49;
8460 pub const TRBBASER_EL1_SHIFT: u32 = 50;
8462 pub const TRBLIMITR_EL1_SHIFT: u32 = 52;
8464 pub const TRBMAR_EL1_SHIFT: u32 = 53;
8466 pub const TRBPTR_EL1_SHIFT: u32 = 54;
8468 pub const TRBSR_EL1_SHIFT: u32 = 55;
8470 pub const TRBTRG_EL1_SHIFT: u32 = 56;
8472 pub const PMUSERENR_EL0_SHIFT: u32 = 57;
8474 pub const NBRBCTL_SHIFT: u32 = 60;
8476 pub const NBRBDATA_SHIFT: u32 = 61;
8478 pub const NPMSNEVFR_EL1_SHIFT: u32 = 62;
8480}
8481
8482#[cfg(feature = "el2")]
8483bitflags! {
8484 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8486 #[repr(transparent)]
8487 pub struct Hfgitr2El2: u64 {
8488 const TSBCSYNC = 1 << 0;
8490 const NDCCIVAPS = 1 << 1;
8492 const PLBIPERME1OS = 1 << 2;
8494 const PLBIASIDE1OS = 1 << 3;
8496 const PLBIVMALLE1OS = 1 << 4;
8498 const PLBIPERME1IS = 1 << 5;
8500 const PLBIASIDE1IS = 1 << 6;
8502 const PLBIVMALLE1IS = 1 << 7;
8504 const PLBIPERME1 = 1 << 8;
8506 const PLBIASIDE1 = 1 << 9;
8508 const PLBIVMALLE1 = 1 << 10;
8510 const PLBIPERMAE1OS = 1 << 11;
8512 const PLBIPERMAE1IS = 1 << 12;
8514 const PLBIPERMAE1 = 1 << 13;
8516 const DCGBVA = 1 << 14;
8518 }
8519}
8520
8521#[cfg(feature = "el2")]
8522impl Hfgitr2El2 {
8523 pub const TSBCSYNC_SHIFT: u32 = 0;
8525 pub const NDCCIVAPS_SHIFT: u32 = 1;
8527 pub const PLBIPERME1OS_SHIFT: u32 = 2;
8529 pub const PLBIASIDE1OS_SHIFT: u32 = 3;
8531 pub const PLBIVMALLE1OS_SHIFT: u32 = 4;
8533 pub const PLBIPERME1IS_SHIFT: u32 = 5;
8535 pub const PLBIASIDE1IS_SHIFT: u32 = 6;
8537 pub const PLBIVMALLE1IS_SHIFT: u32 = 7;
8539 pub const PLBIPERME1_SHIFT: u32 = 8;
8541 pub const PLBIASIDE1_SHIFT: u32 = 9;
8543 pub const PLBIVMALLE1_SHIFT: u32 = 10;
8545 pub const PLBIPERMAE1OS_SHIFT: u32 = 11;
8547 pub const PLBIPERMAE1IS_SHIFT: u32 = 12;
8549 pub const PLBIPERMAE1_SHIFT: u32 = 13;
8551 pub const DCGBVA_SHIFT: u32 = 14;
8553}
8554
8555#[cfg(feature = "el2")]
8556bitflags! {
8557 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8559 #[repr(transparent)]
8560 pub struct HfgitrEl2: u64 {
8561 const ICIALLUIS = 1 << 0;
8563 const ICIALLU = 1 << 1;
8565 const ICIVAU = 1 << 2;
8567 const DCIVAC = 1 << 3;
8569 const DCISW = 1 << 4;
8571 const DCCSW = 1 << 5;
8573 const DCCISW = 1 << 6;
8575 const DCCVAU = 1 << 7;
8577 const DCCVAP = 1 << 8;
8579 const DCCVADP = 1 << 9;
8581 const DCCIVAC = 1 << 10;
8583 const DCZVA = 1 << 11;
8585 const ATS1E1R = 1 << 12;
8587 const ATS1E1W = 1 << 13;
8589 const ATS1E0R = 1 << 14;
8591 const ATS1E0W = 1 << 15;
8593 const ATS1E1RP = 1 << 16;
8595 const ATS1E1WP = 1 << 17;
8597 const TLBIVMALLE1OS = 1 << 18;
8599 const TLBIVAE1OS = 1 << 19;
8601 const TLBIASIDE1OS = 1 << 20;
8603 const TLBIVAAE1OS = 1 << 21;
8605 const TLBIVALE1OS = 1 << 22;
8607 const TLBIVAALE1OS = 1 << 23;
8609 const TLBIRVAE1OS = 1 << 24;
8611 const TLBIRVAAE1OS = 1 << 25;
8613 const TLBIRVALE1OS = 1 << 26;
8615 const TLBIRVAALE1OS = 1 << 27;
8617 const TLBIVMALLE1IS = 1 << 28;
8619 const TLBIVAE1IS = 1 << 29;
8621 const TLBIASIDE1IS = 1 << 30;
8623 const TLBIVAAE1IS = 1 << 31;
8625 const TLBIVALE1IS = 1 << 32;
8627 const TLBIVAALE1IS = 1 << 33;
8629 const TLBIRVAE1IS = 1 << 34;
8631 const TLBIRVAAE1IS = 1 << 35;
8633 const TLBIRVALE1IS = 1 << 36;
8635 const TLBIRVAALE1IS = 1 << 37;
8637 const TLBIRVAE1 = 1 << 38;
8639 const TLBIRVAAE1 = 1 << 39;
8641 const TLBIRVALE1 = 1 << 40;
8643 const TLBIRVAALE1 = 1 << 41;
8645 const TLBIVMALLE1 = 1 << 42;
8647 const TLBIVAE1 = 1 << 43;
8649 const TLBIASIDE1 = 1 << 44;
8651 const TLBIVAAE1 = 1 << 45;
8653 const TLBIVALE1 = 1 << 46;
8655 const TLBIVAALE1 = 1 << 47;
8657 const CFPRCTX = 1 << 48;
8659 const DVPRCTX = 1 << 49;
8661 const CPPRCTX = 1 << 50;
8663 const ERET = 1 << 51;
8665 const SVC_EL0 = 1 << 52;
8667 const SVC_EL1 = 1 << 53;
8669 const DCCVAC = 1 << 54;
8671 const NBRBINJ = 1 << 55;
8673 const NBRBIALL = 1 << 56;
8675 const NGCSPUSHM_EL1 = 1 << 57;
8677 const NGCSSTR_EL1 = 1 << 58;
8679 const NGCSEPP = 1 << 59;
8681 const COSPRCTX = 1 << 60;
8683 const ATS1E1A = 1 << 62;
8685 const PSBCSYNC = 1 << 63;
8687 }
8688}
8689
8690#[cfg(feature = "el2")]
8691impl HfgitrEl2 {
8692 pub const ICIALLUIS_SHIFT: u32 = 0;
8694 pub const ICIALLU_SHIFT: u32 = 1;
8696 pub const ICIVAU_SHIFT: u32 = 2;
8698 pub const DCIVAC_SHIFT: u32 = 3;
8700 pub const DCISW_SHIFT: u32 = 4;
8702 pub const DCCSW_SHIFT: u32 = 5;
8704 pub const DCCISW_SHIFT: u32 = 6;
8706 pub const DCCVAU_SHIFT: u32 = 7;
8708 pub const DCCVAP_SHIFT: u32 = 8;
8710 pub const DCCVADP_SHIFT: u32 = 9;
8712 pub const DCCIVAC_SHIFT: u32 = 10;
8714 pub const DCZVA_SHIFT: u32 = 11;
8716 pub const ATS1E1R_SHIFT: u32 = 12;
8718 pub const ATS1E1W_SHIFT: u32 = 13;
8720 pub const ATS1E0R_SHIFT: u32 = 14;
8722 pub const ATS1E0W_SHIFT: u32 = 15;
8724 pub const ATS1E1RP_SHIFT: u32 = 16;
8726 pub const ATS1E1WP_SHIFT: u32 = 17;
8728 pub const TLBIVMALLE1OS_SHIFT: u32 = 18;
8730 pub const TLBIVAE1OS_SHIFT: u32 = 19;
8732 pub const TLBIASIDE1OS_SHIFT: u32 = 20;
8734 pub const TLBIVAAE1OS_SHIFT: u32 = 21;
8736 pub const TLBIVALE1OS_SHIFT: u32 = 22;
8738 pub const TLBIVAALE1OS_SHIFT: u32 = 23;
8740 pub const TLBIRVAE1OS_SHIFT: u32 = 24;
8742 pub const TLBIRVAAE1OS_SHIFT: u32 = 25;
8744 pub const TLBIRVALE1OS_SHIFT: u32 = 26;
8746 pub const TLBIRVAALE1OS_SHIFT: u32 = 27;
8748 pub const TLBIVMALLE1IS_SHIFT: u32 = 28;
8750 pub const TLBIVAE1IS_SHIFT: u32 = 29;
8752 pub const TLBIASIDE1IS_SHIFT: u32 = 30;
8754 pub const TLBIVAAE1IS_SHIFT: u32 = 31;
8756 pub const TLBIVALE1IS_SHIFT: u32 = 32;
8758 pub const TLBIVAALE1IS_SHIFT: u32 = 33;
8760 pub const TLBIRVAE1IS_SHIFT: u32 = 34;
8762 pub const TLBIRVAAE1IS_SHIFT: u32 = 35;
8764 pub const TLBIRVALE1IS_SHIFT: u32 = 36;
8766 pub const TLBIRVAALE1IS_SHIFT: u32 = 37;
8768 pub const TLBIRVAE1_SHIFT: u32 = 38;
8770 pub const TLBIRVAAE1_SHIFT: u32 = 39;
8772 pub const TLBIRVALE1_SHIFT: u32 = 40;
8774 pub const TLBIRVAALE1_SHIFT: u32 = 41;
8776 pub const TLBIVMALLE1_SHIFT: u32 = 42;
8778 pub const TLBIVAE1_SHIFT: u32 = 43;
8780 pub const TLBIASIDE1_SHIFT: u32 = 44;
8782 pub const TLBIVAAE1_SHIFT: u32 = 45;
8784 pub const TLBIVALE1_SHIFT: u32 = 46;
8786 pub const TLBIVAALE1_SHIFT: u32 = 47;
8788 pub const CFPRCTX_SHIFT: u32 = 48;
8790 pub const DVPRCTX_SHIFT: u32 = 49;
8792 pub const CPPRCTX_SHIFT: u32 = 50;
8794 pub const ERET_SHIFT: u32 = 51;
8796 pub const SVC_EL0_SHIFT: u32 = 52;
8798 pub const SVC_EL1_SHIFT: u32 = 53;
8800 pub const DCCVAC_SHIFT: u32 = 54;
8802 pub const NBRBINJ_SHIFT: u32 = 55;
8804 pub const NBRBIALL_SHIFT: u32 = 56;
8806 pub const NGCSPUSHM_EL1_SHIFT: u32 = 57;
8808 pub const NGCSSTR_EL1_SHIFT: u32 = 58;
8810 pub const NGCSEPP_SHIFT: u32 = 59;
8812 pub const COSPRCTX_SHIFT: u32 = 60;
8814 pub const ATS1E1A_SHIFT: u32 = 62;
8816 pub const PSBCSYNC_SHIFT: u32 = 63;
8818}
8819
8820#[cfg(feature = "el2")]
8821bitflags! {
8822 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8824 #[repr(transparent)]
8825 pub struct Hfgrtr2El2: u64 {
8826 const NPFAR_EL1 = 1 << 0;
8828 const NERXGSR_EL1 = 1 << 1;
8830 const NRCWSMASK_EL1 = 1 << 2;
8832 const NCPACRMASK_EL1 = 1 << 3;
8834 const NSCTLRMASK_EL1 = 1 << 4;
8836 const NSCTLR2MASK_EL1 = 1 << 5;
8838 const NTCRMASK_EL1 = 1 << 6;
8840 const NTCR2MASK_EL1 = 1 << 7;
8842 const NCPACRALIAS_EL1 = 1 << 8;
8844 const NSCTLRALIAS_EL1 = 1 << 9;
8846 const NSCTLR2ALIAS_EL1 = 1 << 10;
8848 const NTCRALIAS_EL1 = 1 << 11;
8850 const NTCR2ALIAS_EL1 = 1 << 12;
8852 const NACTLRMASK_EL1 = 1 << 13;
8854 const NACTLRALIAS_EL1 = 1 << 14;
8856 const NTINDEX_EL0 = 1 << 15;
8858 const NTINDEX_EL1 = 1 << 16;
8860 const NSTINDEX_EL1 = 1 << 17;
8862 const NTTTBRP_EL1 = 1 << 20;
8864 const NTTTBRU_EL1 = 1 << 21;
8866 const NIRTBRP_EL1 = 1 << 22;
8868 const NIRTBRU_EL1 = 1 << 23;
8870 const NDPOTBR1_EL1 = 1 << 24;
8872 const NDPOTBR0_EL1 = 1 << 25;
8874 const NTPMIN1_EL1 = 1 << 26;
8876 const NTPMIN0_EL1 = 1 << 27;
8878 const NTPMIN1_EL0 = 1 << 28;
8880 const NTPMIN0_EL0 = 1 << 29;
8882 const NTLBIDIDR_EL1 = 1 << 30;
8884 const TFSR_EL1 = 1 << 33;
8886 const RGSR_EL1 = 1 << 34;
8888 const GCR_EL1 = 1 << 35;
8890 const NTPIDR3_EL0 = 1 << 36;
8892 const NTPIDR3_EL1 = 1 << 37;
8894 }
8895}
8896
8897#[cfg(feature = "el2")]
8898impl Hfgrtr2El2 {
8899 pub const NPFAR_EL1_SHIFT: u32 = 0;
8901 pub const NERXGSR_EL1_SHIFT: u32 = 1;
8903 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
8905 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
8907 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
8909 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
8911 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
8913 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
8915 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
8917 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
8919 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
8921 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
8923 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
8925 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
8927 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
8929 pub const NTINDEX_EL0_SHIFT: u32 = 15;
8931 pub const NTINDEX_EL1_SHIFT: u32 = 16;
8933 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
8935 pub const NFGDTN_EL1_SHIFT: u32 = 18;
8937 pub const NFGDTN_EL1_MASK: u64 = 0b11;
8939 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
8941 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
8943 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
8945 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
8947 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
8949 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
8951 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
8953 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
8955 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
8957 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
8959 pub const NTLBIDIDR_EL1_SHIFT: u32 = 30;
8961 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
8963 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
8965 pub const TFSR_EL1_SHIFT: u32 = 33;
8967 pub const RGSR_EL1_SHIFT: u32 = 34;
8969 pub const GCR_EL1_SHIFT: u32 = 35;
8971 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
8973 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
8975
8976 pub const fn nfgdtn_el1(self) -> u8 {
8978 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
8979 }
8980
8981 pub const fn set_nfgdtn_el1(&mut self, value: u8) {
8983 let offset = Self::NFGDTN_EL1_SHIFT;
8984 assert!(value & (Self::NFGDTN_EL1_MASK as u8) == value);
8985 *self = Self::from_bits_retain(
8986 (self.bits() & !(Self::NFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
8987 );
8988 }
8989
8990 pub const fn with_nfgdtn_el1(mut self, value: u8) -> Self {
8992 self.set_nfgdtn_el1(value);
8993 self
8994 }
8995
8996 pub const fn nafgdtn_el1(self) -> u8 {
8998 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
8999 }
9000
9001 pub const fn set_nafgdtn_el1(&mut self, value: u8) {
9003 let offset = Self::NAFGDTN_EL1_SHIFT;
9004 assert!(value & (Self::NAFGDTN_EL1_MASK as u8) == value);
9005 *self = Self::from_bits_retain(
9006 (self.bits() & !(Self::NAFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
9007 );
9008 }
9009
9010 pub const fn with_nafgdtn_el1(mut self, value: u8) -> Self {
9012 self.set_nafgdtn_el1(value);
9013 self
9014 }
9015}
9016
9017#[cfg(feature = "el2")]
9018bitflags! {
9019 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9021 #[repr(transparent)]
9022 pub struct HfgrtrEl2: u64 {
9023 const AFSR0_EL1 = 1 << 0;
9025 const AFSR1_EL1 = 1 << 1;
9027 const AIDR_EL1 = 1 << 2;
9029 const AMAIR_EL1 = 1 << 3;
9031 const APDAKEY = 1 << 4;
9033 const APDBKEY = 1 << 5;
9035 const APGAKEY = 1 << 6;
9037 const APIAKEY = 1 << 7;
9039 const APIBKEY = 1 << 8;
9041 const CCSIDR_EL1 = 1 << 9;
9043 const CLIDR_EL1 = 1 << 10;
9045 const CONTEXTIDR_EL1 = 1 << 11;
9047 const CPACR_EL1 = 1 << 12;
9049 const CSSELR_EL1 = 1 << 13;
9051 const CTR_EL0 = 1 << 14;
9053 const DCZID_EL0 = 1 << 15;
9055 const ESR_EL1 = 1 << 16;
9057 const FAR_EL1 = 1 << 17;
9059 const ISR_EL1 = 1 << 18;
9061 const LORC_EL1 = 1 << 19;
9063 const LOREA_EL1 = 1 << 20;
9065 const LORID_EL1 = 1 << 21;
9067 const LORN_EL1 = 1 << 22;
9069 const LORSA_EL1 = 1 << 23;
9071 const MAIR_EL1 = 1 << 24;
9073 const MIDR_EL1 = 1 << 25;
9075 const MPIDR_EL1 = 1 << 26;
9077 const PAR_EL1 = 1 << 27;
9079 const REVIDR_EL1 = 1 << 28;
9081 const SCTLR_EL1 = 1 << 29;
9083 const SCXTNUM_EL1 = 1 << 30;
9085 const SCXTNUM_EL0 = 1 << 31;
9087 const TCR_EL1 = 1 << 32;
9089 const TPIDR_EL1 = 1 << 33;
9091 const TPIDRRO_EL0 = 1 << 34;
9093 const TPIDR_EL0 = 1 << 35;
9095 const TTBR0_EL1 = 1 << 36;
9097 const TTBR1_EL1 = 1 << 37;
9099 const VBAR_EL1 = 1 << 38;
9101 const ICC_IGRPENN_EL1 = 1 << 39;
9103 const ERRIDR_EL1 = 1 << 40;
9105 const ERRSELR_EL1 = 1 << 41;
9107 const ERXFR_EL1 = 1 << 42;
9109 const ERXCTLR_EL1 = 1 << 43;
9111 const ERXSTATUS_EL1 = 1 << 44;
9113 const ERXMISCN_EL1 = 1 << 45;
9115 const ERXPFGF_EL1 = 1 << 46;
9117 const ERXPFGCTL_EL1 = 1 << 47;
9119 const ERXPFGCDN_EL1 = 1 << 48;
9121 const ERXADDR_EL1 = 1 << 49;
9123 const NACCDATA_EL1 = 1 << 50;
9125 const NGCS_EL0 = 1 << 52;
9127 const NGCS_EL1 = 1 << 53;
9129 const NSMPRI_EL1 = 1 << 54;
9131 const NTPIDR2_EL0 = 1 << 55;
9133 const NRCWMASK_EL1 = 1 << 56;
9135 const NPIRE0_EL1 = 1 << 57;
9137 const NPIR_EL1 = 1 << 58;
9139 const NPOR_EL0 = 1 << 59;
9141 const NPOR_EL1 = 1 << 60;
9143 const NS2POR_EL1 = 1 << 61;
9145 const NMAIR2_EL1 = 1 << 62;
9147 const NAMAIR2_EL1 = 1 << 63;
9149 }
9150}
9151
9152#[cfg(feature = "el2")]
9153impl HfgrtrEl2 {
9154 pub const AFSR0_EL1_SHIFT: u32 = 0;
9156 pub const AFSR1_EL1_SHIFT: u32 = 1;
9158 pub const AIDR_EL1_SHIFT: u32 = 2;
9160 pub const AMAIR_EL1_SHIFT: u32 = 3;
9162 pub const APDAKEY_SHIFT: u32 = 4;
9164 pub const APDBKEY_SHIFT: u32 = 5;
9166 pub const APGAKEY_SHIFT: u32 = 6;
9168 pub const APIAKEY_SHIFT: u32 = 7;
9170 pub const APIBKEY_SHIFT: u32 = 8;
9172 pub const CCSIDR_EL1_SHIFT: u32 = 9;
9174 pub const CLIDR_EL1_SHIFT: u32 = 10;
9176 pub const CONTEXTIDR_EL1_SHIFT: u32 = 11;
9178 pub const CPACR_EL1_SHIFT: u32 = 12;
9180 pub const CSSELR_EL1_SHIFT: u32 = 13;
9182 pub const CTR_EL0_SHIFT: u32 = 14;
9184 pub const DCZID_EL0_SHIFT: u32 = 15;
9186 pub const ESR_EL1_SHIFT: u32 = 16;
9188 pub const FAR_EL1_SHIFT: u32 = 17;
9190 pub const ISR_EL1_SHIFT: u32 = 18;
9192 pub const LORC_EL1_SHIFT: u32 = 19;
9194 pub const LOREA_EL1_SHIFT: u32 = 20;
9196 pub const LORID_EL1_SHIFT: u32 = 21;
9198 pub const LORN_EL1_SHIFT: u32 = 22;
9200 pub const LORSA_EL1_SHIFT: u32 = 23;
9202 pub const MAIR_EL1_SHIFT: u32 = 24;
9204 pub const MIDR_EL1_SHIFT: u32 = 25;
9206 pub const MPIDR_EL1_SHIFT: u32 = 26;
9208 pub const PAR_EL1_SHIFT: u32 = 27;
9210 pub const REVIDR_EL1_SHIFT: u32 = 28;
9212 pub const SCTLR_EL1_SHIFT: u32 = 29;
9214 pub const SCXTNUM_EL1_SHIFT: u32 = 30;
9216 pub const SCXTNUM_EL0_SHIFT: u32 = 31;
9218 pub const TCR_EL1_SHIFT: u32 = 32;
9220 pub const TPIDR_EL1_SHIFT: u32 = 33;
9222 pub const TPIDRRO_EL0_SHIFT: u32 = 34;
9224 pub const TPIDR_EL0_SHIFT: u32 = 35;
9226 pub const TTBR0_EL1_SHIFT: u32 = 36;
9228 pub const TTBR1_EL1_SHIFT: u32 = 37;
9230 pub const VBAR_EL1_SHIFT: u32 = 38;
9232 pub const ICC_IGRPENN_EL1_SHIFT: u32 = 39;
9234 pub const ERRIDR_EL1_SHIFT: u32 = 40;
9236 pub const ERRSELR_EL1_SHIFT: u32 = 41;
9238 pub const ERXFR_EL1_SHIFT: u32 = 42;
9240 pub const ERXCTLR_EL1_SHIFT: u32 = 43;
9242 pub const ERXSTATUS_EL1_SHIFT: u32 = 44;
9244 pub const ERXMISCN_EL1_SHIFT: u32 = 45;
9246 pub const ERXPFGF_EL1_SHIFT: u32 = 46;
9248 pub const ERXPFGCTL_EL1_SHIFT: u32 = 47;
9250 pub const ERXPFGCDN_EL1_SHIFT: u32 = 48;
9252 pub const ERXADDR_EL1_SHIFT: u32 = 49;
9254 pub const NACCDATA_EL1_SHIFT: u32 = 50;
9256 pub const NGCS_EL0_SHIFT: u32 = 52;
9258 pub const NGCS_EL1_SHIFT: u32 = 53;
9260 pub const NSMPRI_EL1_SHIFT: u32 = 54;
9262 pub const NTPIDR2_EL0_SHIFT: u32 = 55;
9264 pub const NRCWMASK_EL1_SHIFT: u32 = 56;
9266 pub const NPIRE0_EL1_SHIFT: u32 = 57;
9268 pub const NPIR_EL1_SHIFT: u32 = 58;
9270 pub const NPOR_EL0_SHIFT: u32 = 59;
9272 pub const NPOR_EL1_SHIFT: u32 = 60;
9274 pub const NS2POR_EL1_SHIFT: u32 = 61;
9276 pub const NMAIR2_EL1_SHIFT: u32 = 62;
9278 pub const NAMAIR2_EL1_SHIFT: u32 = 63;
9280}
9281
9282#[cfg(feature = "el2")]
9283bitflags! {
9284 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9286 #[repr(transparent)]
9287 pub struct Hfgwtr2El2: u64 {
9288 const NPFAR_EL1 = 1 << 0;
9290 const NRCWSMASK_EL1 = 1 << 2;
9292 const NCPACRMASK_EL1 = 1 << 3;
9294 const NSCTLRMASK_EL1 = 1 << 4;
9296 const NSCTLR2MASK_EL1 = 1 << 5;
9298 const NTCRMASK_EL1 = 1 << 6;
9300 const NTCR2MASK_EL1 = 1 << 7;
9302 const NCPACRALIAS_EL1 = 1 << 8;
9304 const NSCTLRALIAS_EL1 = 1 << 9;
9306 const NSCTLR2ALIAS_EL1 = 1 << 10;
9308 const NTCRALIAS_EL1 = 1 << 11;
9310 const NTCR2ALIAS_EL1 = 1 << 12;
9312 const NACTLRMASK_EL1 = 1 << 13;
9314 const NACTLRALIAS_EL1 = 1 << 14;
9316 const NTINDEX_EL0 = 1 << 15;
9318 const NTINDEX_EL1 = 1 << 16;
9320 const NSTINDEX_EL1 = 1 << 17;
9322 const NTTTBRP_EL1 = 1 << 20;
9324 const NTTTBRU_EL1 = 1 << 21;
9326 const NIRTBRP_EL1 = 1 << 22;
9328 const NIRTBRU_EL1 = 1 << 23;
9330 const NDPOTBR1_EL1 = 1 << 24;
9332 const NDPOTBR0_EL1 = 1 << 25;
9334 const NTPMIN1_EL1 = 1 << 26;
9336 const NTPMIN0_EL1 = 1 << 27;
9338 const NTPMIN1_EL0 = 1 << 28;
9340 const NTPMIN0_EL0 = 1 << 29;
9342 const TFSR_EL1 = 1 << 33;
9344 const RGSR_EL1 = 1 << 34;
9346 const GCR_EL1 = 1 << 35;
9348 const NTPIDR3_EL0 = 1 << 36;
9350 const NTPIDR3_EL1 = 1 << 37;
9352 }
9353}
9354
9355#[cfg(feature = "el2")]
9356impl Hfgwtr2El2 {
9357 pub const NPFAR_EL1_SHIFT: u32 = 0;
9359 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
9361 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
9363 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
9365 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
9367 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
9369 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
9371 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
9373 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
9375 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
9377 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
9379 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
9381 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
9383 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
9385 pub const NTINDEX_EL0_SHIFT: u32 = 15;
9387 pub const NTINDEX_EL1_SHIFT: u32 = 16;
9389 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
9391 pub const NFGDTN_EL1_SHIFT: u32 = 18;
9393 pub const NFGDTN_EL1_MASK: u64 = 0b11;
9395 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
9397 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
9399 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
9401 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
9403 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
9405 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
9407 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
9409 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
9411 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
9413 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
9415 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
9417 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
9419 pub const TFSR_EL1_SHIFT: u32 = 33;
9421 pub const RGSR_EL1_SHIFT: u32 = 34;
9423 pub const GCR_EL1_SHIFT: u32 = 35;
9425 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
9427 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
9429
9430 pub const fn nfgdtn_el1(self) -> u8 {
9432 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
9433 }
9434
9435 pub const fn set_nfgdtn_el1(&mut self, value: u8) {
9437 let offset = Self::NFGDTN_EL1_SHIFT;
9438 assert!(value & (Self::NFGDTN_EL1_MASK as u8) == value);
9439 *self = Self::from_bits_retain(
9440 (self.bits() & !(Self::NFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
9441 );
9442 }
9443
9444 pub const fn with_nfgdtn_el1(mut self, value: u8) -> Self {
9446 self.set_nfgdtn_el1(value);
9447 self
9448 }
9449
9450 pub const fn nafgdtn_el1(self) -> u8 {
9452 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
9453 }
9454
9455 pub const fn set_nafgdtn_el1(&mut self, value: u8) {
9457 let offset = Self::NAFGDTN_EL1_SHIFT;
9458 assert!(value & (Self::NAFGDTN_EL1_MASK as u8) == value);
9459 *self = Self::from_bits_retain(
9460 (self.bits() & !(Self::NAFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
9461 );
9462 }
9463
9464 pub const fn with_nafgdtn_el1(mut self, value: u8) -> Self {
9466 self.set_nafgdtn_el1(value);
9467 self
9468 }
9469}
9470
9471#[cfg(feature = "el2")]
9472bitflags! {
9473 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9475 #[repr(transparent)]
9476 pub struct HfgwtrEl2: u64 {
9477 const AFSR0_EL1 = 1 << 0;
9479 const AFSR1_EL1 = 1 << 1;
9481 const AMAIR_EL1 = 1 << 3;
9483 const APDAKEY = 1 << 4;
9485 const APDBKEY = 1 << 5;
9487 const APGAKEY = 1 << 6;
9489 const APIAKEY = 1 << 7;
9491 const APIBKEY = 1 << 8;
9493 const CONTEXTIDR_EL1 = 1 << 11;
9495 const CPACR_EL1 = 1 << 12;
9497 const CSSELR_EL1 = 1 << 13;
9499 const ESR_EL1 = 1 << 16;
9501 const FAR_EL1 = 1 << 17;
9503 const LORC_EL1 = 1 << 19;
9505 const LOREA_EL1 = 1 << 20;
9507 const LORN_EL1 = 1 << 22;
9509 const LORSA_EL1 = 1 << 23;
9511 const MAIR_EL1 = 1 << 24;
9513 const PAR_EL1 = 1 << 27;
9515 const SCTLR_EL1 = 1 << 29;
9517 const SCXTNUM_EL1 = 1 << 30;
9519 const SCXTNUM_EL0 = 1 << 31;
9521 const TCR_EL1 = 1 << 32;
9523 const TPIDR_EL1 = 1 << 33;
9525 const TPIDRRO_EL0 = 1 << 34;
9527 const TPIDR_EL0 = 1 << 35;
9529 const TTBR0_EL1 = 1 << 36;
9531 const TTBR1_EL1 = 1 << 37;
9533 const VBAR_EL1 = 1 << 38;
9535 const ICC_IGRPENN_EL1 = 1 << 39;
9537 const ERRSELR_EL1 = 1 << 41;
9539 const ERXCTLR_EL1 = 1 << 43;
9541 const ERXSTATUS_EL1 = 1 << 44;
9543 const ERXMISCN_EL1 = 1 << 45;
9545 const ERXPFGCTL_EL1 = 1 << 47;
9547 const ERXPFGCDN_EL1 = 1 << 48;
9549 const ERXADDR_EL1 = 1 << 49;
9551 const NACCDATA_EL1 = 1 << 50;
9553 const NGCS_EL0 = 1 << 52;
9555 const NGCS_EL1 = 1 << 53;
9557 const NSMPRI_EL1 = 1 << 54;
9559 const NTPIDR2_EL0 = 1 << 55;
9561 const NRCWMASK_EL1 = 1 << 56;
9563 const NPIRE0_EL1 = 1 << 57;
9565 const NPIR_EL1 = 1 << 58;
9567 const NPOR_EL0 = 1 << 59;
9569 const NPOR_EL1 = 1 << 60;
9571 const NS2POR_EL1 = 1 << 61;
9573 const NMAIR2_EL1 = 1 << 62;
9575 const NAMAIR2_EL1 = 1 << 63;
9577 }
9578}
9579
9580#[cfg(feature = "el2")]
9581impl HfgwtrEl2 {
9582 pub const AFSR0_EL1_SHIFT: u32 = 0;
9584 pub const AFSR1_EL1_SHIFT: u32 = 1;
9586 pub const AMAIR_EL1_SHIFT: u32 = 3;
9588 pub const APDAKEY_SHIFT: u32 = 4;
9590 pub const APDBKEY_SHIFT: u32 = 5;
9592 pub const APGAKEY_SHIFT: u32 = 6;
9594 pub const APIAKEY_SHIFT: u32 = 7;
9596 pub const APIBKEY_SHIFT: u32 = 8;
9598 pub const CONTEXTIDR_EL1_SHIFT: u32 = 11;
9600 pub const CPACR_EL1_SHIFT: u32 = 12;
9602 pub const CSSELR_EL1_SHIFT: u32 = 13;
9604 pub const ESR_EL1_SHIFT: u32 = 16;
9606 pub const FAR_EL1_SHIFT: u32 = 17;
9608 pub const LORC_EL1_SHIFT: u32 = 19;
9610 pub const LOREA_EL1_SHIFT: u32 = 20;
9612 pub const LORN_EL1_SHIFT: u32 = 22;
9614 pub const LORSA_EL1_SHIFT: u32 = 23;
9616 pub const MAIR_EL1_SHIFT: u32 = 24;
9618 pub const PAR_EL1_SHIFT: u32 = 27;
9620 pub const SCTLR_EL1_SHIFT: u32 = 29;
9622 pub const SCXTNUM_EL1_SHIFT: u32 = 30;
9624 pub const SCXTNUM_EL0_SHIFT: u32 = 31;
9626 pub const TCR_EL1_SHIFT: u32 = 32;
9628 pub const TPIDR_EL1_SHIFT: u32 = 33;
9630 pub const TPIDRRO_EL0_SHIFT: u32 = 34;
9632 pub const TPIDR_EL0_SHIFT: u32 = 35;
9634 pub const TTBR0_EL1_SHIFT: u32 = 36;
9636 pub const TTBR1_EL1_SHIFT: u32 = 37;
9638 pub const VBAR_EL1_SHIFT: u32 = 38;
9640 pub const ICC_IGRPENN_EL1_SHIFT: u32 = 39;
9642 pub const ERRSELR_EL1_SHIFT: u32 = 41;
9644 pub const ERXCTLR_EL1_SHIFT: u32 = 43;
9646 pub const ERXSTATUS_EL1_SHIFT: u32 = 44;
9648 pub const ERXMISCN_EL1_SHIFT: u32 = 45;
9650 pub const ERXPFGCTL_EL1_SHIFT: u32 = 47;
9652 pub const ERXPFGCDN_EL1_SHIFT: u32 = 48;
9654 pub const ERXADDR_EL1_SHIFT: u32 = 49;
9656 pub const NACCDATA_EL1_SHIFT: u32 = 50;
9658 pub const NGCS_EL0_SHIFT: u32 = 52;
9660 pub const NGCS_EL1_SHIFT: u32 = 53;
9662 pub const NSMPRI_EL1_SHIFT: u32 = 54;
9664 pub const NTPIDR2_EL0_SHIFT: u32 = 55;
9666 pub const NRCWMASK_EL1_SHIFT: u32 = 56;
9668 pub const NPIRE0_EL1_SHIFT: u32 = 57;
9670 pub const NPIR_EL1_SHIFT: u32 = 58;
9672 pub const NPOR_EL0_SHIFT: u32 = 59;
9674 pub const NPOR_EL1_SHIFT: u32 = 60;
9676 pub const NS2POR_EL1_SHIFT: u32 = 61;
9678 pub const NMAIR2_EL1_SHIFT: u32 = 62;
9680 pub const NAMAIR2_EL1_SHIFT: u32 = 63;
9682}
9683
9684bitflags! {
9685 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9687 #[repr(transparent)]
9688 pub struct Hifar: u32 {
9689 }
9690}
9691
9692impl Hifar {
9693 pub const VA_SHIFT: u32 = 0;
9695 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
9697
9698 pub const fn va(self) -> u32 {
9700 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
9701 }
9702
9703 pub const fn set_va(&mut self, value: u32) {
9705 let offset = Self::VA_SHIFT;
9706 assert!(value & (Self::VA_MASK as u32) == value);
9707 *self = Self::from_bits_retain(
9708 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
9709 );
9710 }
9711
9712 pub const fn with_va(mut self, value: u32) -> Self {
9714 self.set_va(value);
9715 self
9716 }
9717}
9718
9719bitflags! {
9720 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9722 #[repr(transparent)]
9723 pub struct Hmair0: u32 {
9724 }
9725}
9726
9727impl Hmair0 {
9728 pub const ATTR_SHIFT: u32 = 0;
9730 pub const ATTR_MASK: u32 = 0b11111111;
9732
9733 pub const fn attr(self, n: u32) -> u8 {
9735 assert!(n < 4);
9736 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
9737 }
9738
9739 pub const fn set_attr(&mut self, n: u32, value: u8) {
9741 assert!(n < 4);
9742 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
9743 assert!(value & (Self::ATTR_MASK as u8) == value);
9744 *self = Self::from_bits_retain(
9745 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
9746 );
9747 }
9748
9749 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
9751 self.set_attr(n, value);
9752 self
9753 }
9754}
9755
9756bitflags! {
9757 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9759 #[repr(transparent)]
9760 pub struct Hmair1: u32 {
9761 }
9762}
9763
9764impl Hmair1 {
9765 pub const ATTR_SHIFT: u32 = 0;
9767 pub const ATTR_MASK: u32 = 0b11111111;
9769
9770 pub const fn attr(self, n: u32) -> u8 {
9772 assert!(n >= 4 && n < 8);
9773 ((self.bits() >> (Self::ATTR_SHIFT + (n - 4) * 8)) & 0b11111111) as u8
9774 }
9775
9776 pub const fn set_attr(&mut self, n: u32, value: u8) {
9778 assert!(n >= 4 && n < 8);
9779 let offset = Self::ATTR_SHIFT + (n - 4) * 8;
9780 assert!(value & (Self::ATTR_MASK as u8) == value);
9781 *self = Self::from_bits_retain(
9782 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
9783 );
9784 }
9785
9786 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
9788 self.set_attr(n, value);
9789 self
9790 }
9791}
9792
9793bitflags! {
9794 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9796 #[repr(transparent)]
9797 pub struct Hpfar: u32 {
9798 }
9799}
9800
9801impl Hpfar {
9802 pub const FIPA_39_12_SHIFT: u32 = 4;
9804 pub const FIPA_39_12_MASK: u32 = 0b1111111111111111111111111111;
9806
9807 pub const fn fipa_39_12(self) -> u32 {
9809 ((self.bits() >> Self::FIPA_39_12_SHIFT) & 0b1111111111111111111111111111) as u32
9810 }
9811
9812 pub const fn set_fipa_39_12(&mut self, value: u32) {
9814 let offset = Self::FIPA_39_12_SHIFT;
9815 assert!(value & (Self::FIPA_39_12_MASK as u32) == value);
9816 *self = Self::from_bits_retain(
9817 (self.bits() & !(Self::FIPA_39_12_MASK << offset)) | ((value as u32) << offset),
9818 );
9819 }
9820
9821 pub const fn with_fipa_39_12(mut self, value: u32) -> Self {
9823 self.set_fipa_39_12(value);
9824 self
9825 }
9826}
9827
9828#[cfg(feature = "el2")]
9829bitflags! {
9830 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9832 #[repr(transparent)]
9833 pub struct HpfarEl2: u64 {
9834 const NS = 1 << 63;
9836 }
9837}
9838
9839#[cfg(feature = "el2")]
9840impl HpfarEl2 {
9841 pub const FIPA_SHIFT: u32 = 4;
9843 pub const FIPA_MASK: u64 = 0b11111111111111111111111111111111111111111111;
9845 pub const NS_SHIFT: u32 = 63;
9847
9848 pub const fn fipa(self) -> u64 {
9850 ((self.bits() >> Self::FIPA_SHIFT) & 0b11111111111111111111111111111111111111111111) as u64
9851 }
9852
9853 pub const fn set_fipa(&mut self, value: u64) {
9855 let offset = Self::FIPA_SHIFT;
9856 assert!(value & (Self::FIPA_MASK as u64) == value);
9857 *self = Self::from_bits_retain(
9858 (self.bits() & !(Self::FIPA_MASK << offset)) | ((value as u64) << offset),
9859 );
9860 }
9861
9862 pub const fn with_fipa(mut self, value: u64) -> Self {
9864 self.set_fipa(value);
9865 self
9866 }
9867}
9868
9869bitflags! {
9870 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9872 #[repr(transparent)]
9873 pub struct Hrmr: u32 {
9874 const AA64 = 1 << 0;
9876 const RR = 1 << 1;
9878 }
9879}
9880
9881impl Hrmr {
9882 pub const AA64_SHIFT: u32 = 0;
9884 pub const RR_SHIFT: u32 = 1;
9886}
9887
9888bitflags! {
9889 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9891 #[repr(transparent)]
9892 pub struct Hsctlr: u32 {
9893 const RES1 = 0b110000110001010000100000000000;
9895 const M = 1 << 0;
9897 const A = 1 << 1;
9899 const C = 1 << 2;
9901 const NTLSMD = 1 << 3;
9903 const LSMAOE = 1 << 4;
9905 const CP15BEN = 1 << 5;
9907 const ITD = 1 << 7;
9909 const SED = 1 << 8;
9911 const I = 1 << 12;
9913 const WXN = 1 << 19;
9915 const TE = 1 << 30;
9917 const DSSBS = 1 << 31;
9919 }
9920}
9921
9922impl Hsctlr {
9923 pub const M_SHIFT: u32 = 0;
9925 pub const A_SHIFT: u32 = 1;
9927 pub const C_SHIFT: u32 = 2;
9929 pub const NTLSMD_SHIFT: u32 = 3;
9931 pub const LSMAOE_SHIFT: u32 = 4;
9933 pub const CP15BEN_SHIFT: u32 = 5;
9935 pub const ITD_SHIFT: u32 = 7;
9937 pub const SED_SHIFT: u32 = 8;
9939 pub const I_SHIFT: u32 = 12;
9941 pub const WXN_SHIFT: u32 = 19;
9943 pub const TE_SHIFT: u32 = 30;
9945 pub const DSSBS_SHIFT: u32 = 31;
9947}
9948
9949bitflags! {
9950 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9952 #[repr(transparent)]
9953 pub struct Hsr: u32 {
9954 const IL = 1 << 25;
9956 }
9957}
9958
9959impl Hsr {
9960 pub const ISS_SHIFT: u32 = 0;
9962 pub const ISS_MASK: u32 = 0b1111111111111111111111111;
9964 pub const IL_SHIFT: u32 = 25;
9966 pub const EC_SHIFT: u32 = 26;
9968 pub const EC_MASK: u32 = 0b111111;
9970
9971 pub const fn iss(self) -> u32 {
9973 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
9974 }
9975
9976 pub const fn set_iss(&mut self, value: u32) {
9978 let offset = Self::ISS_SHIFT;
9979 assert!(value & (Self::ISS_MASK as u32) == value);
9980 *self = Self::from_bits_retain(
9981 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u32) << offset),
9982 );
9983 }
9984
9985 pub const fn with_iss(mut self, value: u32) -> Self {
9987 self.set_iss(value);
9988 self
9989 }
9990
9991 pub const fn ec(self) -> u8 {
9993 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
9994 }
9995
9996 pub const fn set_ec(&mut self, value: u8) {
9998 let offset = Self::EC_SHIFT;
9999 assert!(value & (Self::EC_MASK as u8) == value);
10000 *self = Self::from_bits_retain(
10001 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u32) << offset),
10002 );
10003 }
10004
10005 pub const fn with_ec(mut self, value: u8) -> Self {
10007 self.set_ec(value);
10008 self
10009 }
10010}
10011
10012bitflags! {
10013 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10015 #[repr(transparent)]
10016 pub struct Htcr: u32 {
10017 const RES1 = 0b10000000100000000000000000000000;
10019 const HPD = 1 << 24;
10021 const HWU59 = 1 << 25;
10023 const HWU60 = 1 << 26;
10025 const HWU61 = 1 << 27;
10027 const HWU62 = 1 << 28;
10029 }
10030}
10031
10032impl Htcr {
10033 pub const T0SZ_SHIFT: u32 = 0;
10035 pub const T0SZ_MASK: u32 = 0b111;
10037 pub const IRGN0_SHIFT: u32 = 8;
10039 pub const IRGN0_MASK: u32 = 0b11;
10041 pub const ORGN0_SHIFT: u32 = 10;
10043 pub const ORGN0_MASK: u32 = 0b11;
10045 pub const SH0_SHIFT: u32 = 12;
10047 pub const SH0_MASK: u32 = 0b11;
10049 pub const HPD_SHIFT: u32 = 24;
10051 pub const HWU59_SHIFT: u32 = 25;
10053 pub const HWU60_SHIFT: u32 = 26;
10055 pub const HWU61_SHIFT: u32 = 27;
10057 pub const HWU62_SHIFT: u32 = 28;
10059
10060 pub const fn t0sz(self) -> u8 {
10062 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111) as u8
10063 }
10064
10065 pub const fn set_t0sz(&mut self, value: u8) {
10067 let offset = Self::T0SZ_SHIFT;
10068 assert!(value & (Self::T0SZ_MASK as u8) == value);
10069 *self = Self::from_bits_retain(
10070 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u32) << offset),
10071 );
10072 }
10073
10074 pub const fn with_t0sz(mut self, value: u8) -> Self {
10076 self.set_t0sz(value);
10077 self
10078 }
10079
10080 pub const fn irgn0(self) -> u8 {
10082 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
10083 }
10084
10085 pub const fn set_irgn0(&mut self, value: u8) {
10087 let offset = Self::IRGN0_SHIFT;
10088 assert!(value & (Self::IRGN0_MASK as u8) == value);
10089 *self = Self::from_bits_retain(
10090 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u32) << offset),
10091 );
10092 }
10093
10094 pub const fn with_irgn0(mut self, value: u8) -> Self {
10096 self.set_irgn0(value);
10097 self
10098 }
10099
10100 pub const fn orgn0(self) -> u8 {
10102 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
10103 }
10104
10105 pub const fn set_orgn0(&mut self, value: u8) {
10107 let offset = Self::ORGN0_SHIFT;
10108 assert!(value & (Self::ORGN0_MASK as u8) == value);
10109 *self = Self::from_bits_retain(
10110 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u32) << offset),
10111 );
10112 }
10113
10114 pub const fn with_orgn0(mut self, value: u8) -> Self {
10116 self.set_orgn0(value);
10117 self
10118 }
10119
10120 pub const fn sh0(self) -> u8 {
10122 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
10123 }
10124
10125 pub const fn set_sh0(&mut self, value: u8) {
10127 let offset = Self::SH0_SHIFT;
10128 assert!(value & (Self::SH0_MASK as u8) == value);
10129 *self = Self::from_bits_retain(
10130 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u32) << offset),
10131 );
10132 }
10133
10134 pub const fn with_sh0(mut self, value: u8) -> Self {
10136 self.set_sh0(value);
10137 self
10138 }
10139}
10140
10141bitflags! {
10142 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10144 #[repr(transparent)]
10145 pub struct Htpidr: u32 {
10146 }
10147}
10148
10149impl Htpidr {
10150 pub const TID_SHIFT: u32 = 0;
10152 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
10154
10155 pub const fn tid(self) -> u32 {
10157 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
10158 }
10159
10160 pub const fn set_tid(&mut self, value: u32) {
10162 let offset = Self::TID_SHIFT;
10163 assert!(value & (Self::TID_MASK as u32) == value);
10164 *self = Self::from_bits_retain(
10165 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
10166 );
10167 }
10168
10169 pub const fn with_tid(mut self, value: u32) -> Self {
10171 self.set_tid(value);
10172 self
10173 }
10174}
10175
10176bitflags! {
10177 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10179 #[repr(transparent)]
10180 pub struct Htrfcr: u32 {
10181 const E0HTRE = 1 << 0;
10183 const E2TRE = 1 << 1;
10185 const CX = 1 << 3;
10187 }
10188}
10189
10190impl Htrfcr {
10191 pub const E0HTRE_SHIFT: u32 = 0;
10193 pub const E2TRE_SHIFT: u32 = 1;
10195 pub const CX_SHIFT: u32 = 3;
10197 pub const TS_SHIFT: u32 = 5;
10199 pub const TS_MASK: u32 = 0b11;
10201
10202 pub const fn ts(self) -> u8 {
10204 ((self.bits() >> Self::TS_SHIFT) & 0b11) as u8
10205 }
10206
10207 pub const fn set_ts(&mut self, value: u8) {
10209 let offset = Self::TS_SHIFT;
10210 assert!(value & (Self::TS_MASK as u8) == value);
10211 *self = Self::from_bits_retain(
10212 (self.bits() & !(Self::TS_MASK << offset)) | ((value as u32) << offset),
10213 );
10214 }
10215
10216 pub const fn with_ts(mut self, value: u8) -> Self {
10218 self.set_ts(value);
10219 self
10220 }
10221}
10222
10223bitflags! {
10224 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10226 #[repr(transparent)]
10227 pub struct Httbr: u64 {
10228 const CNP = 1 << 0;
10230 }
10231}
10232
10233impl Httbr {
10234 pub const CNP_SHIFT: u32 = 0;
10236 pub const BADDR_SHIFT: u32 = 1;
10238 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
10240
10241 pub const fn baddr(self) -> u64 {
10243 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
10244 as u64
10245 }
10246
10247 pub const fn set_baddr(&mut self, value: u64) {
10249 let offset = Self::BADDR_SHIFT;
10250 assert!(value & (Self::BADDR_MASK as u64) == value);
10251 *self = Self::from_bits_retain(
10252 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
10253 );
10254 }
10255
10256 pub const fn with_baddr(mut self, value: u64) -> Self {
10258 self.set_baddr(value);
10259 self
10260 }
10261}
10262
10263bitflags! {
10264 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10266 #[repr(transparent)]
10267 pub struct Hvbar: u32 {
10268 }
10269}
10270
10271impl Hvbar {
10272 pub const VBA_SHIFT: u32 = 5;
10274 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
10276
10277 pub const fn vba(self) -> u32 {
10279 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
10280 }
10281
10282 pub const fn set_vba(&mut self, value: u32) {
10284 let offset = Self::VBA_SHIFT;
10285 assert!(value & (Self::VBA_MASK as u32) == value);
10286 *self = Self::from_bits_retain(
10287 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u32) << offset),
10288 );
10289 }
10290
10291 pub const fn with_vba(mut self, value: u32) -> Self {
10293 self.set_vba(value);
10294 self
10295 }
10296}
10297
10298#[cfg(feature = "el1")]
10299bitflags! {
10300 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10302 #[repr(transparent)]
10303 pub struct IccAp1r0El1: u64 {
10304 const NMI = 1 << 63;
10306 }
10307}
10308
10309#[cfg(feature = "el1")]
10310impl IccAp1r0El1 {
10311 pub const NMI_SHIFT: u32 = 63;
10313}
10314
10315bitflags! {
10316 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10318 #[repr(transparent)]
10319 pub struct IccAsgi1r: u64 {
10320 const IRM = 1 << 40;
10322 }
10323}
10324
10325impl IccAsgi1r {
10326 pub const TARGETLIST_SHIFT: u32 = 0;
10328 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
10330 pub const AFF1_SHIFT: u32 = 16;
10332 pub const AFF1_MASK: u64 = 0b11111111;
10334 pub const INTID_SHIFT: u32 = 24;
10336 pub const INTID_MASK: u64 = 0b1111;
10338 pub const AFF2_SHIFT: u32 = 32;
10340 pub const AFF2_MASK: u64 = 0b11111111;
10342 pub const IRM_SHIFT: u32 = 40;
10344 pub const RS_SHIFT: u32 = 44;
10346 pub const RS_MASK: u64 = 0b1111;
10348 pub const AFF3_SHIFT: u32 = 48;
10350 pub const AFF3_MASK: u64 = 0b11111111;
10352
10353 pub const fn targetlist(self) -> u16 {
10355 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
10356 }
10357
10358 pub const fn set_targetlist(&mut self, value: u16) {
10360 let offset = Self::TARGETLIST_SHIFT;
10361 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
10362 *self = Self::from_bits_retain(
10363 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
10364 );
10365 }
10366
10367 pub const fn with_targetlist(mut self, value: u16) -> Self {
10369 self.set_targetlist(value);
10370 self
10371 }
10372
10373 pub const fn aff1(self) -> u8 {
10375 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
10376 }
10377
10378 pub const fn set_aff1(&mut self, value: u8) {
10380 let offset = Self::AFF1_SHIFT;
10381 assert!(value & (Self::AFF1_MASK as u8) == value);
10382 *self = Self::from_bits_retain(
10383 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
10384 );
10385 }
10386
10387 pub const fn with_aff1(mut self, value: u8) -> Self {
10389 self.set_aff1(value);
10390 self
10391 }
10392
10393 pub const fn intid(self) -> u8 {
10395 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
10396 }
10397
10398 pub const fn set_intid(&mut self, value: u8) {
10400 let offset = Self::INTID_SHIFT;
10401 assert!(value & (Self::INTID_MASK as u8) == value);
10402 *self = Self::from_bits_retain(
10403 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
10404 );
10405 }
10406
10407 pub const fn with_intid(mut self, value: u8) -> Self {
10409 self.set_intid(value);
10410 self
10411 }
10412
10413 pub const fn aff2(self) -> u8 {
10415 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
10416 }
10417
10418 pub const fn set_aff2(&mut self, value: u8) {
10420 let offset = Self::AFF2_SHIFT;
10421 assert!(value & (Self::AFF2_MASK as u8) == value);
10422 *self = Self::from_bits_retain(
10423 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
10424 );
10425 }
10426
10427 pub const fn with_aff2(mut self, value: u8) -> Self {
10429 self.set_aff2(value);
10430 self
10431 }
10432
10433 pub const fn rs(self) -> u8 {
10435 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
10436 }
10437
10438 pub const fn set_rs(&mut self, value: u8) {
10440 let offset = Self::RS_SHIFT;
10441 assert!(value & (Self::RS_MASK as u8) == value);
10442 *self = Self::from_bits_retain(
10443 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
10444 );
10445 }
10446
10447 pub const fn with_rs(mut self, value: u8) -> Self {
10449 self.set_rs(value);
10450 self
10451 }
10452
10453 pub const fn aff3(self) -> u8 {
10455 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
10456 }
10457
10458 pub const fn set_aff3(&mut self, value: u8) {
10460 let offset = Self::AFF3_SHIFT;
10461 assert!(value & (Self::AFF3_MASK as u8) == value);
10462 *self = Self::from_bits_retain(
10463 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
10464 );
10465 }
10466
10467 pub const fn with_aff3(mut self, value: u8) -> Self {
10469 self.set_aff3(value);
10470 self
10471 }
10472}
10473
10474#[cfg(feature = "el1")]
10475bitflags! {
10476 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10478 #[repr(transparent)]
10479 pub struct IccAsgi1rEl1: u64 {
10480 const IRM = 1 << 40;
10482 }
10483}
10484
10485#[cfg(feature = "el1")]
10486impl IccAsgi1rEl1 {
10487 pub const TARGETLIST_SHIFT: u32 = 0;
10489 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
10491 pub const AFF1_SHIFT: u32 = 16;
10493 pub const AFF1_MASK: u64 = 0b11111111;
10495 pub const INTID_SHIFT: u32 = 24;
10497 pub const INTID_MASK: u64 = 0b1111;
10499 pub const AFF2_SHIFT: u32 = 32;
10501 pub const AFF2_MASK: u64 = 0b11111111;
10503 pub const IRM_SHIFT: u32 = 40;
10505 pub const RS_SHIFT: u32 = 44;
10507 pub const RS_MASK: u64 = 0b1111;
10509 pub const AFF3_SHIFT: u32 = 48;
10511 pub const AFF3_MASK: u64 = 0b11111111;
10513
10514 pub const fn targetlist(self) -> u16 {
10516 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
10517 }
10518
10519 pub const fn set_targetlist(&mut self, value: u16) {
10521 let offset = Self::TARGETLIST_SHIFT;
10522 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
10523 *self = Self::from_bits_retain(
10524 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
10525 );
10526 }
10527
10528 pub const fn with_targetlist(mut self, value: u16) -> Self {
10530 self.set_targetlist(value);
10531 self
10532 }
10533
10534 pub const fn aff1(self) -> u8 {
10536 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
10537 }
10538
10539 pub const fn set_aff1(&mut self, value: u8) {
10541 let offset = Self::AFF1_SHIFT;
10542 assert!(value & (Self::AFF1_MASK as u8) == value);
10543 *self = Self::from_bits_retain(
10544 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
10545 );
10546 }
10547
10548 pub const fn with_aff1(mut self, value: u8) -> Self {
10550 self.set_aff1(value);
10551 self
10552 }
10553
10554 pub const fn intid(self) -> u8 {
10556 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
10557 }
10558
10559 pub const fn set_intid(&mut self, value: u8) {
10561 let offset = Self::INTID_SHIFT;
10562 assert!(value & (Self::INTID_MASK as u8) == value);
10563 *self = Self::from_bits_retain(
10564 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
10565 );
10566 }
10567
10568 pub const fn with_intid(mut self, value: u8) -> Self {
10570 self.set_intid(value);
10571 self
10572 }
10573
10574 pub const fn aff2(self) -> u8 {
10576 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
10577 }
10578
10579 pub const fn set_aff2(&mut self, value: u8) {
10581 let offset = Self::AFF2_SHIFT;
10582 assert!(value & (Self::AFF2_MASK as u8) == value);
10583 *self = Self::from_bits_retain(
10584 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
10585 );
10586 }
10587
10588 pub const fn with_aff2(mut self, value: u8) -> Self {
10590 self.set_aff2(value);
10591 self
10592 }
10593
10594 pub const fn rs(self) -> u8 {
10596 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
10597 }
10598
10599 pub const fn set_rs(&mut self, value: u8) {
10601 let offset = Self::RS_SHIFT;
10602 assert!(value & (Self::RS_MASK as u8) == value);
10603 *self = Self::from_bits_retain(
10604 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
10605 );
10606 }
10607
10608 pub const fn with_rs(mut self, value: u8) -> Self {
10610 self.set_rs(value);
10611 self
10612 }
10613
10614 pub const fn aff3(self) -> u8 {
10616 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
10617 }
10618
10619 pub const fn set_aff3(&mut self, value: u8) {
10621 let offset = Self::AFF3_SHIFT;
10622 assert!(value & (Self::AFF3_MASK as u8) == value);
10623 *self = Self::from_bits_retain(
10624 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
10625 );
10626 }
10627
10628 pub const fn with_aff3(mut self, value: u8) -> Self {
10630 self.set_aff3(value);
10631 self
10632 }
10633}
10634
10635bitflags! {
10636 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10638 #[repr(transparent)]
10639 pub struct IccBpr0: u32 {
10640 }
10641}
10642
10643impl IccBpr0 {
10644 pub const BINARYPOINT_SHIFT: u32 = 0;
10646 pub const BINARYPOINT_MASK: u32 = 0b111;
10648
10649 pub const fn binarypoint(self) -> u8 {
10651 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
10652 }
10653
10654 pub const fn set_binarypoint(&mut self, value: u8) {
10656 let offset = Self::BINARYPOINT_SHIFT;
10657 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
10658 *self = Self::from_bits_retain(
10659 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u32) << offset),
10660 );
10661 }
10662
10663 pub const fn with_binarypoint(mut self, value: u8) -> Self {
10665 self.set_binarypoint(value);
10666 self
10667 }
10668}
10669
10670#[cfg(feature = "el1")]
10671bitflags! {
10672 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10674 #[repr(transparent)]
10675 pub struct IccBpr0El1: u64 {
10676 }
10677}
10678
10679#[cfg(feature = "el1")]
10680impl IccBpr0El1 {
10681 pub const BINARYPOINT_SHIFT: u32 = 0;
10683 pub const BINARYPOINT_MASK: u64 = 0b111;
10685
10686 pub const fn binarypoint(self) -> u8 {
10688 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
10689 }
10690
10691 pub const fn set_binarypoint(&mut self, value: u8) {
10693 let offset = Self::BINARYPOINT_SHIFT;
10694 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
10695 *self = Self::from_bits_retain(
10696 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u64) << offset),
10697 );
10698 }
10699
10700 pub const fn with_binarypoint(mut self, value: u8) -> Self {
10702 self.set_binarypoint(value);
10703 self
10704 }
10705}
10706
10707bitflags! {
10708 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10710 #[repr(transparent)]
10711 pub struct IccBpr1: u32 {
10712 }
10713}
10714
10715impl IccBpr1 {
10716 pub const BINARYPOINT_SHIFT: u32 = 0;
10718 pub const BINARYPOINT_MASK: u32 = 0b111;
10720
10721 pub const fn binarypoint(self) -> u8 {
10723 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
10724 }
10725
10726 pub const fn set_binarypoint(&mut self, value: u8) {
10728 let offset = Self::BINARYPOINT_SHIFT;
10729 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
10730 *self = Self::from_bits_retain(
10731 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u32) << offset),
10732 );
10733 }
10734
10735 pub const fn with_binarypoint(mut self, value: u8) -> Self {
10737 self.set_binarypoint(value);
10738 self
10739 }
10740}
10741
10742#[cfg(feature = "el1")]
10743bitflags! {
10744 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10746 #[repr(transparent)]
10747 pub struct IccBpr1El1: u64 {
10748 }
10749}
10750
10751#[cfg(feature = "el1")]
10752impl IccBpr1El1 {
10753 pub const BINARYPOINT_SHIFT: u32 = 0;
10755 pub const BINARYPOINT_MASK: u64 = 0b111;
10757
10758 pub const fn binarypoint(self) -> u8 {
10760 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
10761 }
10762
10763 pub const fn set_binarypoint(&mut self, value: u8) {
10765 let offset = Self::BINARYPOINT_SHIFT;
10766 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
10767 *self = Self::from_bits_retain(
10768 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u64) << offset),
10769 );
10770 }
10771
10772 pub const fn with_binarypoint(mut self, value: u8) -> Self {
10774 self.set_binarypoint(value);
10775 self
10776 }
10777}
10778
10779bitflags! {
10780 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10782 #[repr(transparent)]
10783 pub struct IccCtlr: u32 {
10784 const CBPR = 1 << 0;
10786 const EOIMODE = 1 << 1;
10788 const PMHE = 1 << 6;
10790 const SEIS = 1 << 14;
10792 const A3V = 1 << 15;
10794 const RSS = 1 << 18;
10796 const EXTRANGE = 1 << 19;
10798 }
10799}
10800
10801impl IccCtlr {
10802 pub const CBPR_SHIFT: u32 = 0;
10804 pub const EOIMODE_SHIFT: u32 = 1;
10806 pub const PMHE_SHIFT: u32 = 6;
10808 pub const PRIBITS_SHIFT: u32 = 8;
10810 pub const PRIBITS_MASK: u32 = 0b111;
10812 pub const IDBITS_SHIFT: u32 = 11;
10814 pub const IDBITS_MASK: u32 = 0b111;
10816 pub const SEIS_SHIFT: u32 = 14;
10818 pub const A3V_SHIFT: u32 = 15;
10820 pub const RSS_SHIFT: u32 = 18;
10822 pub const EXTRANGE_SHIFT: u32 = 19;
10824
10825 pub const fn pribits(self) -> u8 {
10827 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
10828 }
10829
10830 pub const fn set_pribits(&mut self, value: u8) {
10832 let offset = Self::PRIBITS_SHIFT;
10833 assert!(value & (Self::PRIBITS_MASK as u8) == value);
10834 *self = Self::from_bits_retain(
10835 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u32) << offset),
10836 );
10837 }
10838
10839 pub const fn with_pribits(mut self, value: u8) -> Self {
10841 self.set_pribits(value);
10842 self
10843 }
10844
10845 pub const fn idbits(self) -> u8 {
10847 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
10848 }
10849
10850 pub const fn set_idbits(&mut self, value: u8) {
10852 let offset = Self::IDBITS_SHIFT;
10853 assert!(value & (Self::IDBITS_MASK as u8) == value);
10854 *self = Self::from_bits_retain(
10855 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u32) << offset),
10856 );
10857 }
10858
10859 pub const fn with_idbits(mut self, value: u8) -> Self {
10861 self.set_idbits(value);
10862 self
10863 }
10864}
10865
10866#[cfg(feature = "el1")]
10867bitflags! {
10868 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10870 #[repr(transparent)]
10871 pub struct IccCtlrEl1: u64 {
10872 const CBPR = 1 << 0;
10874 const EOIMODE = 1 << 1;
10876 const PMHE = 1 << 6;
10878 const SEIS = 1 << 14;
10880 const A3V = 1 << 15;
10882 const RSS = 1 << 18;
10884 const EXTRANGE = 1 << 19;
10886 }
10887}
10888
10889#[cfg(feature = "el1")]
10890impl IccCtlrEl1 {
10891 pub const CBPR_SHIFT: u32 = 0;
10893 pub const EOIMODE_SHIFT: u32 = 1;
10895 pub const PMHE_SHIFT: u32 = 6;
10897 pub const PRIBITS_SHIFT: u32 = 8;
10899 pub const PRIBITS_MASK: u64 = 0b111;
10901 pub const IDBITS_SHIFT: u32 = 11;
10903 pub const IDBITS_MASK: u64 = 0b111;
10905 pub const SEIS_SHIFT: u32 = 14;
10907 pub const A3V_SHIFT: u32 = 15;
10909 pub const RSS_SHIFT: u32 = 18;
10911 pub const EXTRANGE_SHIFT: u32 = 19;
10913
10914 pub const fn pribits(self) -> u8 {
10916 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
10917 }
10918
10919 pub const fn set_pribits(&mut self, value: u8) {
10921 let offset = Self::PRIBITS_SHIFT;
10922 assert!(value & (Self::PRIBITS_MASK as u8) == value);
10923 *self = Self::from_bits_retain(
10924 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u64) << offset),
10925 );
10926 }
10927
10928 pub const fn with_pribits(mut self, value: u8) -> Self {
10930 self.set_pribits(value);
10931 self
10932 }
10933
10934 pub const fn idbits(self) -> u8 {
10936 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
10937 }
10938
10939 pub const fn set_idbits(&mut self, value: u8) {
10941 let offset = Self::IDBITS_SHIFT;
10942 assert!(value & (Self::IDBITS_MASK as u8) == value);
10943 *self = Self::from_bits_retain(
10944 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u64) << offset),
10945 );
10946 }
10947
10948 pub const fn with_idbits(mut self, value: u8) -> Self {
10950 self.set_idbits(value);
10951 self
10952 }
10953}
10954
10955#[cfg(feature = "el3")]
10956bitflags! {
10957 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10959 #[repr(transparent)]
10960 pub struct IccCtlrEl3: u64 {
10961 const CBPR_EL1S = 1 << 0;
10963 const CBPR_EL1NS = 1 << 1;
10965 const EOIMODE_EL3 = 1 << 2;
10967 const EOIMODE_EL1S = 1 << 3;
10969 const EOIMODE_EL1NS = 1 << 4;
10971 const RM = 1 << 5;
10973 const PMHE = 1 << 6;
10975 const SEIS = 1 << 14;
10977 const A3V = 1 << 15;
10979 const NDS = 1 << 17;
10981 const RSS = 1 << 18;
10983 const EXTRANGE = 1 << 19;
10985 }
10986}
10987
10988#[cfg(feature = "el3")]
10989impl IccCtlrEl3 {
10990 pub const CBPR_EL1S_SHIFT: u32 = 0;
10992 pub const CBPR_EL1NS_SHIFT: u32 = 1;
10994 pub const EOIMODE_EL3_SHIFT: u32 = 2;
10996 pub const EOIMODE_EL1S_SHIFT: u32 = 3;
10998 pub const EOIMODE_EL1NS_SHIFT: u32 = 4;
11000 pub const RM_SHIFT: u32 = 5;
11002 pub const PMHE_SHIFT: u32 = 6;
11004 pub const PRIBITS_SHIFT: u32 = 8;
11006 pub const PRIBITS_MASK: u64 = 0b111;
11008 pub const IDBITS_SHIFT: u32 = 11;
11010 pub const IDBITS_MASK: u64 = 0b111;
11012 pub const SEIS_SHIFT: u32 = 14;
11014 pub const A3V_SHIFT: u32 = 15;
11016 pub const NDS_SHIFT: u32 = 17;
11018 pub const RSS_SHIFT: u32 = 18;
11020 pub const EXTRANGE_SHIFT: u32 = 19;
11022
11023 pub const fn pribits(self) -> u8 {
11025 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
11026 }
11027
11028 pub const fn set_pribits(&mut self, value: u8) {
11030 let offset = Self::PRIBITS_SHIFT;
11031 assert!(value & (Self::PRIBITS_MASK as u8) == value);
11032 *self = Self::from_bits_retain(
11033 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u64) << offset),
11034 );
11035 }
11036
11037 pub const fn with_pribits(mut self, value: u8) -> Self {
11039 self.set_pribits(value);
11040 self
11041 }
11042
11043 pub const fn idbits(self) -> u8 {
11045 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
11046 }
11047
11048 pub const fn set_idbits(&mut self, value: u8) {
11050 let offset = Self::IDBITS_SHIFT;
11051 assert!(value & (Self::IDBITS_MASK as u8) == value);
11052 *self = Self::from_bits_retain(
11053 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u64) << offset),
11054 );
11055 }
11056
11057 pub const fn with_idbits(mut self, value: u8) -> Self {
11059 self.set_idbits(value);
11060 self
11061 }
11062}
11063
11064bitflags! {
11065 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11067 #[repr(transparent)]
11068 pub struct IccDir: u32 {
11069 }
11070}
11071
11072impl IccDir {
11073 pub const INTID_SHIFT: u32 = 0;
11075 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11077
11078 pub const fn intid(self) -> u32 {
11080 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11081 }
11082
11083 pub const fn set_intid(&mut self, value: u32) {
11085 let offset = Self::INTID_SHIFT;
11086 assert!(value & (Self::INTID_MASK as u32) == value);
11087 *self = Self::from_bits_retain(
11088 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11089 );
11090 }
11091
11092 pub const fn with_intid(mut self, value: u32) -> Self {
11094 self.set_intid(value);
11095 self
11096 }
11097}
11098
11099#[cfg(feature = "el1")]
11100bitflags! {
11101 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11103 #[repr(transparent)]
11104 pub struct IccDirEl1: u64 {
11105 }
11106}
11107
11108#[cfg(feature = "el1")]
11109impl IccDirEl1 {
11110 pub const INTID_SHIFT: u32 = 0;
11112 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11114
11115 pub const fn intid(self) -> u32 {
11117 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11118 }
11119
11120 pub const fn set_intid(&mut self, value: u32) {
11122 let offset = Self::INTID_SHIFT;
11123 assert!(value & (Self::INTID_MASK as u32) == value);
11124 *self = Self::from_bits_retain(
11125 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11126 );
11127 }
11128
11129 pub const fn with_intid(mut self, value: u32) -> Self {
11131 self.set_intid(value);
11132 self
11133 }
11134}
11135
11136bitflags! {
11137 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11139 #[repr(transparent)]
11140 pub struct IccEoir0: u32 {
11141 }
11142}
11143
11144impl IccEoir0 {
11145 pub const INTID_SHIFT: u32 = 0;
11147 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11149
11150 pub const fn intid(self) -> u32 {
11152 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11153 }
11154
11155 pub const fn set_intid(&mut self, value: u32) {
11157 let offset = Self::INTID_SHIFT;
11158 assert!(value & (Self::INTID_MASK as u32) == value);
11159 *self = Self::from_bits_retain(
11160 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11161 );
11162 }
11163
11164 pub const fn with_intid(mut self, value: u32) -> Self {
11166 self.set_intid(value);
11167 self
11168 }
11169}
11170
11171#[cfg(feature = "el1")]
11172bitflags! {
11173 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11175 #[repr(transparent)]
11176 pub struct IccEoir0El1: u64 {
11177 }
11178}
11179
11180#[cfg(feature = "el1")]
11181impl IccEoir0El1 {
11182 pub const INTID_SHIFT: u32 = 0;
11184 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11186
11187 pub const fn intid(self) -> u32 {
11189 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11190 }
11191
11192 pub const fn set_intid(&mut self, value: u32) {
11194 let offset = Self::INTID_SHIFT;
11195 assert!(value & (Self::INTID_MASK as u32) == value);
11196 *self = Self::from_bits_retain(
11197 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11198 );
11199 }
11200
11201 pub const fn with_intid(mut self, value: u32) -> Self {
11203 self.set_intid(value);
11204 self
11205 }
11206}
11207
11208bitflags! {
11209 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11211 #[repr(transparent)]
11212 pub struct IccEoir1: u32 {
11213 }
11214}
11215
11216impl IccEoir1 {
11217 pub const INTID_SHIFT: u32 = 0;
11219 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11221
11222 pub const fn intid(self) -> u32 {
11224 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11225 }
11226
11227 pub const fn set_intid(&mut self, value: u32) {
11229 let offset = Self::INTID_SHIFT;
11230 assert!(value & (Self::INTID_MASK as u32) == value);
11231 *self = Self::from_bits_retain(
11232 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11233 );
11234 }
11235
11236 pub const fn with_intid(mut self, value: u32) -> Self {
11238 self.set_intid(value);
11239 self
11240 }
11241}
11242
11243#[cfg(feature = "el1")]
11244bitflags! {
11245 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11247 #[repr(transparent)]
11248 pub struct IccEoir1El1: u64 {
11249 }
11250}
11251
11252#[cfg(feature = "el1")]
11253impl IccEoir1El1 {
11254 pub const INTID_SHIFT: u32 = 0;
11256 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11258
11259 pub const fn intid(self) -> u32 {
11261 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11262 }
11263
11264 pub const fn set_intid(&mut self, value: u32) {
11266 let offset = Self::INTID_SHIFT;
11267 assert!(value & (Self::INTID_MASK as u32) == value);
11268 *self = Self::from_bits_retain(
11269 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11270 );
11271 }
11272
11273 pub const fn with_intid(mut self, value: u32) -> Self {
11275 self.set_intid(value);
11276 self
11277 }
11278}
11279
11280bitflags! {
11281 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11283 #[repr(transparent)]
11284 pub struct IccHppir0: u32 {
11285 }
11286}
11287
11288impl IccHppir0 {
11289 pub const INTID_SHIFT: u32 = 0;
11291 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11293
11294 pub const fn intid(self) -> u32 {
11296 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11297 }
11298
11299 pub const fn set_intid(&mut self, value: u32) {
11301 let offset = Self::INTID_SHIFT;
11302 assert!(value & (Self::INTID_MASK as u32) == value);
11303 *self = Self::from_bits_retain(
11304 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11305 );
11306 }
11307
11308 pub const fn with_intid(mut self, value: u32) -> Self {
11310 self.set_intid(value);
11311 self
11312 }
11313}
11314
11315#[cfg(feature = "el1")]
11316bitflags! {
11317 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11319 #[repr(transparent)]
11320 pub struct IccHppir0El1: u64 {
11321 }
11322}
11323
11324#[cfg(feature = "el1")]
11325impl IccHppir0El1 {
11326 pub const INTID_SHIFT: u32 = 0;
11328 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11330
11331 pub const fn intid(self) -> u32 {
11333 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11334 }
11335
11336 pub const fn set_intid(&mut self, value: u32) {
11338 let offset = Self::INTID_SHIFT;
11339 assert!(value & (Self::INTID_MASK as u32) == value);
11340 *self = Self::from_bits_retain(
11341 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11342 );
11343 }
11344
11345 pub const fn with_intid(mut self, value: u32) -> Self {
11347 self.set_intid(value);
11348 self
11349 }
11350}
11351
11352bitflags! {
11353 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11355 #[repr(transparent)]
11356 pub struct IccHppir1: u32 {
11357 }
11358}
11359
11360impl IccHppir1 {
11361 pub const INTID_SHIFT: u32 = 0;
11363 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11365
11366 pub const fn intid(self) -> u32 {
11368 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11369 }
11370
11371 pub const fn set_intid(&mut self, value: u32) {
11373 let offset = Self::INTID_SHIFT;
11374 assert!(value & (Self::INTID_MASK as u32) == value);
11375 *self = Self::from_bits_retain(
11376 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11377 );
11378 }
11379
11380 pub const fn with_intid(mut self, value: u32) -> Self {
11382 self.set_intid(value);
11383 self
11384 }
11385}
11386
11387#[cfg(feature = "el1")]
11388bitflags! {
11389 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11391 #[repr(transparent)]
11392 pub struct IccHppir1El1: u64 {
11393 }
11394}
11395
11396#[cfg(feature = "el1")]
11397impl IccHppir1El1 {
11398 pub const INTID_SHIFT: u32 = 0;
11400 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11402
11403 pub const fn intid(self) -> u32 {
11405 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11406 }
11407
11408 pub const fn set_intid(&mut self, value: u32) {
11410 let offset = Self::INTID_SHIFT;
11411 assert!(value & (Self::INTID_MASK as u32) == value);
11412 *self = Self::from_bits_retain(
11413 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11414 );
11415 }
11416
11417 pub const fn with_intid(mut self, value: u32) -> Self {
11419 self.set_intid(value);
11420 self
11421 }
11422}
11423
11424bitflags! {
11425 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11427 #[repr(transparent)]
11428 pub struct IccHsre: u32 {
11429 const SRE = 1 << 0;
11431 const DFB = 1 << 1;
11433 const DIB = 1 << 2;
11435 const ENABLE = 1 << 3;
11437 }
11438}
11439
11440impl IccHsre {
11441 pub const SRE_SHIFT: u32 = 0;
11443 pub const DFB_SHIFT: u32 = 1;
11445 pub const DIB_SHIFT: u32 = 2;
11447 pub const ENABLE_SHIFT: u32 = 3;
11449}
11450
11451bitflags! {
11452 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11454 #[repr(transparent)]
11455 pub struct IccIar0: u32 {
11456 }
11457}
11458
11459impl IccIar0 {
11460 pub const INTID_SHIFT: u32 = 0;
11462 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11464
11465 pub const fn intid(self) -> u32 {
11467 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11468 }
11469
11470 pub const fn set_intid(&mut self, value: u32) {
11472 let offset = Self::INTID_SHIFT;
11473 assert!(value & (Self::INTID_MASK as u32) == value);
11474 *self = Self::from_bits_retain(
11475 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11476 );
11477 }
11478
11479 pub const fn with_intid(mut self, value: u32) -> Self {
11481 self.set_intid(value);
11482 self
11483 }
11484}
11485
11486#[cfg(feature = "el1")]
11487bitflags! {
11488 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11490 #[repr(transparent)]
11491 pub struct IccIar0El1: u64 {
11492 }
11493}
11494
11495#[cfg(feature = "el1")]
11496impl IccIar0El1 {
11497 pub const INTID_SHIFT: u32 = 0;
11499 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11501
11502 pub const fn intid(self) -> u32 {
11504 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11505 }
11506
11507 pub const fn set_intid(&mut self, value: u32) {
11509 let offset = Self::INTID_SHIFT;
11510 assert!(value & (Self::INTID_MASK as u32) == value);
11511 *self = Self::from_bits_retain(
11512 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11513 );
11514 }
11515
11516 pub const fn with_intid(mut self, value: u32) -> Self {
11518 self.set_intid(value);
11519 self
11520 }
11521}
11522
11523bitflags! {
11524 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11526 #[repr(transparent)]
11527 pub struct IccIar1: u32 {
11528 }
11529}
11530
11531impl IccIar1 {
11532 pub const INTID_SHIFT: u32 = 0;
11534 pub const INTID_MASK: u32 = 0b111111111111111111111111;
11536
11537 pub const fn intid(self) -> u32 {
11539 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11540 }
11541
11542 pub const fn set_intid(&mut self, value: u32) {
11544 let offset = Self::INTID_SHIFT;
11545 assert!(value & (Self::INTID_MASK as u32) == value);
11546 *self = Self::from_bits_retain(
11547 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
11548 );
11549 }
11550
11551 pub const fn with_intid(mut self, value: u32) -> Self {
11553 self.set_intid(value);
11554 self
11555 }
11556}
11557
11558#[cfg(feature = "el1")]
11559bitflags! {
11560 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11562 #[repr(transparent)]
11563 pub struct IccIar1El1: u64 {
11564 }
11565}
11566
11567#[cfg(feature = "el1")]
11568impl IccIar1El1 {
11569 pub const INTID_SHIFT: u32 = 0;
11571 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11573
11574 pub const fn intid(self) -> u32 {
11576 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11577 }
11578
11579 pub const fn set_intid(&mut self, value: u32) {
11581 let offset = Self::INTID_SHIFT;
11582 assert!(value & (Self::INTID_MASK as u32) == value);
11583 *self = Self::from_bits_retain(
11584 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11585 );
11586 }
11587
11588 pub const fn with_intid(mut self, value: u32) -> Self {
11590 self.set_intid(value);
11591 self
11592 }
11593}
11594
11595bitflags! {
11596 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11598 #[repr(transparent)]
11599 pub struct IccIgrpen0: u32 {
11600 const ENABLE = 1 << 0;
11602 }
11603}
11604
11605impl IccIgrpen0 {
11606 pub const ENABLE_SHIFT: u32 = 0;
11608}
11609
11610#[cfg(feature = "el1")]
11611bitflags! {
11612 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11614 #[repr(transparent)]
11615 pub struct IccIgrpen0El1: u64 {
11616 const ENABLE = 1 << 0;
11618 }
11619}
11620
11621#[cfg(feature = "el1")]
11622impl IccIgrpen0El1 {
11623 pub const ENABLE_SHIFT: u32 = 0;
11625}
11626
11627bitflags! {
11628 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11630 #[repr(transparent)]
11631 pub struct IccIgrpen1: u32 {
11632 const ENABLE = 1 << 0;
11634 }
11635}
11636
11637impl IccIgrpen1 {
11638 pub const ENABLE_SHIFT: u32 = 0;
11640}
11641
11642#[cfg(feature = "el1")]
11643bitflags! {
11644 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11646 #[repr(transparent)]
11647 pub struct IccIgrpen1El1: u64 {
11648 const ENABLE = 1 << 0;
11650 }
11651}
11652
11653#[cfg(feature = "el1")]
11654impl IccIgrpen1El1 {
11655 pub const ENABLE_SHIFT: u32 = 0;
11657}
11658
11659#[cfg(feature = "el3")]
11660bitflags! {
11661 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11663 #[repr(transparent)]
11664 pub struct IccIgrpen1El3: u64 {
11665 const ENABLEGRP1NS = 1 << 0;
11667 const ENABLEGRP1S = 1 << 1;
11669 }
11670}
11671
11672#[cfg(feature = "el3")]
11673impl IccIgrpen1El3 {
11674 pub const ENABLEGRP1NS_SHIFT: u32 = 0;
11676 pub const ENABLEGRP1S_SHIFT: u32 = 1;
11678}
11679
11680bitflags! {
11681 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11683 #[repr(transparent)]
11684 pub struct IccMctlr: u32 {
11685 const CBPR_EL1S = 1 << 0;
11687 const CBPR_EL1NS = 1 << 1;
11689 const EOIMODE_EL3 = 1 << 2;
11691 const EOIMODE_EL1S = 1 << 3;
11693 const EOIMODE_EL1NS = 1 << 4;
11695 const RM = 1 << 5;
11697 const PMHE = 1 << 6;
11699 const SEIS = 1 << 14;
11701 const A3V = 1 << 15;
11703 const NDS = 1 << 17;
11705 const RSS = 1 << 18;
11707 const EXTRANGE = 1 << 19;
11709 }
11710}
11711
11712impl IccMctlr {
11713 pub const CBPR_EL1S_SHIFT: u32 = 0;
11715 pub const CBPR_EL1NS_SHIFT: u32 = 1;
11717 pub const EOIMODE_EL3_SHIFT: u32 = 2;
11719 pub const EOIMODE_EL1S_SHIFT: u32 = 3;
11721 pub const EOIMODE_EL1NS_SHIFT: u32 = 4;
11723 pub const RM_SHIFT: u32 = 5;
11725 pub const PMHE_SHIFT: u32 = 6;
11727 pub const PRIBITS_SHIFT: u32 = 8;
11729 pub const PRIBITS_MASK: u32 = 0b111;
11731 pub const IDBITS_SHIFT: u32 = 11;
11733 pub const IDBITS_MASK: u32 = 0b111;
11735 pub const SEIS_SHIFT: u32 = 14;
11737 pub const A3V_SHIFT: u32 = 15;
11739 pub const NDS_SHIFT: u32 = 17;
11741 pub const RSS_SHIFT: u32 = 18;
11743 pub const EXTRANGE_SHIFT: u32 = 19;
11745
11746 pub const fn pribits(self) -> u8 {
11748 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
11749 }
11750
11751 pub const fn set_pribits(&mut self, value: u8) {
11753 let offset = Self::PRIBITS_SHIFT;
11754 assert!(value & (Self::PRIBITS_MASK as u8) == value);
11755 *self = Self::from_bits_retain(
11756 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u32) << offset),
11757 );
11758 }
11759
11760 pub const fn with_pribits(mut self, value: u8) -> Self {
11762 self.set_pribits(value);
11763 self
11764 }
11765
11766 pub const fn idbits(self) -> u8 {
11768 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
11769 }
11770
11771 pub const fn set_idbits(&mut self, value: u8) {
11773 let offset = Self::IDBITS_SHIFT;
11774 assert!(value & (Self::IDBITS_MASK as u8) == value);
11775 *self = Self::from_bits_retain(
11776 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u32) << offset),
11777 );
11778 }
11779
11780 pub const fn with_idbits(mut self, value: u8) -> Self {
11782 self.set_idbits(value);
11783 self
11784 }
11785}
11786
11787bitflags! {
11788 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11790 #[repr(transparent)]
11791 pub struct IccMgrpen1: u32 {
11792 const ENABLEGRP1NS = 1 << 0;
11794 const ENABLEGRP1S = 1 << 1;
11796 }
11797}
11798
11799impl IccMgrpen1 {
11800 pub const ENABLEGRP1NS_SHIFT: u32 = 0;
11802 pub const ENABLEGRP1S_SHIFT: u32 = 1;
11804}
11805
11806bitflags! {
11807 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11809 #[repr(transparent)]
11810 pub struct IccMsre: u32 {
11811 const SRE = 1 << 0;
11813 const DFB = 1 << 1;
11815 const DIB = 1 << 2;
11817 const ENABLE = 1 << 3;
11819 }
11820}
11821
11822impl IccMsre {
11823 pub const SRE_SHIFT: u32 = 0;
11825 pub const DFB_SHIFT: u32 = 1;
11827 pub const DIB_SHIFT: u32 = 2;
11829 pub const ENABLE_SHIFT: u32 = 3;
11831}
11832
11833#[cfg(feature = "el1")]
11834bitflags! {
11835 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11837 #[repr(transparent)]
11838 pub struct IccNmiar1El1: u64 {
11839 }
11840}
11841
11842#[cfg(feature = "el1")]
11843impl IccNmiar1El1 {
11844 pub const INTID_SHIFT: u32 = 0;
11846 pub const INTID_MASK: u64 = 0b111111111111111111111111;
11848
11849 pub const fn intid(self) -> u32 {
11851 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
11852 }
11853
11854 pub const fn set_intid(&mut self, value: u32) {
11856 let offset = Self::INTID_SHIFT;
11857 assert!(value & (Self::INTID_MASK as u32) == value);
11858 *self = Self::from_bits_retain(
11859 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11860 );
11861 }
11862
11863 pub const fn with_intid(mut self, value: u32) -> Self {
11865 self.set_intid(value);
11866 self
11867 }
11868}
11869
11870bitflags! {
11871 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11873 #[repr(transparent)]
11874 pub struct IccPmr: u32 {
11875 }
11876}
11877
11878impl IccPmr {
11879 pub const PRIORITY_SHIFT: u32 = 0;
11881 pub const PRIORITY_MASK: u32 = 0b11111111;
11883
11884 pub const fn priority(self) -> u8 {
11886 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
11887 }
11888
11889 pub const fn set_priority(&mut self, value: u8) {
11891 let offset = Self::PRIORITY_SHIFT;
11892 assert!(value & (Self::PRIORITY_MASK as u8) == value);
11893 *self = Self::from_bits_retain(
11894 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u32) << offset),
11895 );
11896 }
11897
11898 pub const fn with_priority(mut self, value: u8) -> Self {
11900 self.set_priority(value);
11901 self
11902 }
11903}
11904
11905#[cfg(feature = "el1")]
11906bitflags! {
11907 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11909 #[repr(transparent)]
11910 pub struct IccPmrEl1: u64 {
11911 }
11912}
11913
11914#[cfg(feature = "el1")]
11915impl IccPmrEl1 {
11916 pub const PRIORITY_SHIFT: u32 = 0;
11918 pub const PRIORITY_MASK: u64 = 0b11111111;
11920
11921 pub const fn priority(self) -> u8 {
11923 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
11924 }
11925
11926 pub const fn set_priority(&mut self, value: u8) {
11928 let offset = Self::PRIORITY_SHIFT;
11929 assert!(value & (Self::PRIORITY_MASK as u8) == value);
11930 *self = Self::from_bits_retain(
11931 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u64) << offset),
11932 );
11933 }
11934
11935 pub const fn with_priority(mut self, value: u8) -> Self {
11937 self.set_priority(value);
11938 self
11939 }
11940}
11941
11942bitflags! {
11943 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11945 #[repr(transparent)]
11946 pub struct IccRpr: u32 {
11947 }
11948}
11949
11950impl IccRpr {
11951 pub const PRIORITY_SHIFT: u32 = 0;
11953 pub const PRIORITY_MASK: u32 = 0b11111111;
11955
11956 pub const fn priority(self) -> u8 {
11958 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
11959 }
11960
11961 pub const fn set_priority(&mut self, value: u8) {
11963 let offset = Self::PRIORITY_SHIFT;
11964 assert!(value & (Self::PRIORITY_MASK as u8) == value);
11965 *self = Self::from_bits_retain(
11966 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u32) << offset),
11967 );
11968 }
11969
11970 pub const fn with_priority(mut self, value: u8) -> Self {
11972 self.set_priority(value);
11973 self
11974 }
11975}
11976
11977#[cfg(feature = "el1")]
11978bitflags! {
11979 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11981 #[repr(transparent)]
11982 pub struct IccRprEl1: u64 {
11983 const NMI_NS = 1 << 62;
11985 const NMI = 1 << 63;
11987 }
11988}
11989
11990#[cfg(feature = "el1")]
11991impl IccRprEl1 {
11992 pub const PRIORITY_SHIFT: u32 = 0;
11994 pub const PRIORITY_MASK: u64 = 0b11111111;
11996 pub const NMI_NS_SHIFT: u32 = 62;
11998 pub const NMI_SHIFT: u32 = 63;
12000
12001 pub const fn priority(self) -> u8 {
12003 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
12004 }
12005
12006 pub const fn set_priority(&mut self, value: u8) {
12008 let offset = Self::PRIORITY_SHIFT;
12009 assert!(value & (Self::PRIORITY_MASK as u8) == value);
12010 *self = Self::from_bits_retain(
12011 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u64) << offset),
12012 );
12013 }
12014
12015 pub const fn with_priority(mut self, value: u8) -> Self {
12017 self.set_priority(value);
12018 self
12019 }
12020}
12021
12022bitflags! {
12023 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12025 #[repr(transparent)]
12026 pub struct IccSgi0r: u64 {
12027 const IRM = 1 << 40;
12029 }
12030}
12031
12032impl IccSgi0r {
12033 pub const TARGETLIST_SHIFT: u32 = 0;
12035 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
12037 pub const AFF1_SHIFT: u32 = 16;
12039 pub const AFF1_MASK: u64 = 0b11111111;
12041 pub const INTID_SHIFT: u32 = 24;
12043 pub const INTID_MASK: u64 = 0b1111;
12045 pub const AFF2_SHIFT: u32 = 32;
12047 pub const AFF2_MASK: u64 = 0b11111111;
12049 pub const IRM_SHIFT: u32 = 40;
12051 pub const RS_SHIFT: u32 = 44;
12053 pub const RS_MASK: u64 = 0b1111;
12055 pub const AFF3_SHIFT: u32 = 48;
12057 pub const AFF3_MASK: u64 = 0b11111111;
12059
12060 pub const fn targetlist(self) -> u16 {
12062 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
12063 }
12064
12065 pub const fn set_targetlist(&mut self, value: u16) {
12067 let offset = Self::TARGETLIST_SHIFT;
12068 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
12069 *self = Self::from_bits_retain(
12070 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
12071 );
12072 }
12073
12074 pub const fn with_targetlist(mut self, value: u16) -> Self {
12076 self.set_targetlist(value);
12077 self
12078 }
12079
12080 pub const fn aff1(self) -> u8 {
12082 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
12083 }
12084
12085 pub const fn set_aff1(&mut self, value: u8) {
12087 let offset = Self::AFF1_SHIFT;
12088 assert!(value & (Self::AFF1_MASK as u8) == value);
12089 *self = Self::from_bits_retain(
12090 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
12091 );
12092 }
12093
12094 pub const fn with_aff1(mut self, value: u8) -> Self {
12096 self.set_aff1(value);
12097 self
12098 }
12099
12100 pub const fn intid(self) -> u8 {
12102 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
12103 }
12104
12105 pub const fn set_intid(&mut self, value: u8) {
12107 let offset = Self::INTID_SHIFT;
12108 assert!(value & (Self::INTID_MASK as u8) == value);
12109 *self = Self::from_bits_retain(
12110 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12111 );
12112 }
12113
12114 pub const fn with_intid(mut self, value: u8) -> Self {
12116 self.set_intid(value);
12117 self
12118 }
12119
12120 pub const fn aff2(self) -> u8 {
12122 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
12123 }
12124
12125 pub const fn set_aff2(&mut self, value: u8) {
12127 let offset = Self::AFF2_SHIFT;
12128 assert!(value & (Self::AFF2_MASK as u8) == value);
12129 *self = Self::from_bits_retain(
12130 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
12131 );
12132 }
12133
12134 pub const fn with_aff2(mut self, value: u8) -> Self {
12136 self.set_aff2(value);
12137 self
12138 }
12139
12140 pub const fn rs(self) -> u8 {
12142 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
12143 }
12144
12145 pub const fn set_rs(&mut self, value: u8) {
12147 let offset = Self::RS_SHIFT;
12148 assert!(value & (Self::RS_MASK as u8) == value);
12149 *self = Self::from_bits_retain(
12150 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
12151 );
12152 }
12153
12154 pub const fn with_rs(mut self, value: u8) -> Self {
12156 self.set_rs(value);
12157 self
12158 }
12159
12160 pub const fn aff3(self) -> u8 {
12162 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
12163 }
12164
12165 pub const fn set_aff3(&mut self, value: u8) {
12167 let offset = Self::AFF3_SHIFT;
12168 assert!(value & (Self::AFF3_MASK as u8) == value);
12169 *self = Self::from_bits_retain(
12170 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
12171 );
12172 }
12173
12174 pub const fn with_aff3(mut self, value: u8) -> Self {
12176 self.set_aff3(value);
12177 self
12178 }
12179}
12180
12181#[cfg(feature = "el1")]
12182bitflags! {
12183 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12185 #[repr(transparent)]
12186 pub struct IccSgi0rEl1: u64 {
12187 const IRM = 1 << 40;
12189 }
12190}
12191
12192#[cfg(feature = "el1")]
12193impl IccSgi0rEl1 {
12194 pub const TARGETLIST_SHIFT: u32 = 0;
12196 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
12198 pub const AFF1_SHIFT: u32 = 16;
12200 pub const AFF1_MASK: u64 = 0b11111111;
12202 pub const INTID_SHIFT: u32 = 24;
12204 pub const INTID_MASK: u64 = 0b1111;
12206 pub const AFF2_SHIFT: u32 = 32;
12208 pub const AFF2_MASK: u64 = 0b11111111;
12210 pub const IRM_SHIFT: u32 = 40;
12212 pub const RS_SHIFT: u32 = 44;
12214 pub const RS_MASK: u64 = 0b1111;
12216 pub const AFF3_SHIFT: u32 = 48;
12218 pub const AFF3_MASK: u64 = 0b11111111;
12220
12221 pub const fn targetlist(self) -> u16 {
12223 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
12224 }
12225
12226 pub const fn set_targetlist(&mut self, value: u16) {
12228 let offset = Self::TARGETLIST_SHIFT;
12229 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
12230 *self = Self::from_bits_retain(
12231 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
12232 );
12233 }
12234
12235 pub const fn with_targetlist(mut self, value: u16) -> Self {
12237 self.set_targetlist(value);
12238 self
12239 }
12240
12241 pub const fn aff1(self) -> u8 {
12243 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
12244 }
12245
12246 pub const fn set_aff1(&mut self, value: u8) {
12248 let offset = Self::AFF1_SHIFT;
12249 assert!(value & (Self::AFF1_MASK as u8) == value);
12250 *self = Self::from_bits_retain(
12251 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
12252 );
12253 }
12254
12255 pub const fn with_aff1(mut self, value: u8) -> Self {
12257 self.set_aff1(value);
12258 self
12259 }
12260
12261 pub const fn intid(self) -> u8 {
12263 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
12264 }
12265
12266 pub const fn set_intid(&mut self, value: u8) {
12268 let offset = Self::INTID_SHIFT;
12269 assert!(value & (Self::INTID_MASK as u8) == value);
12270 *self = Self::from_bits_retain(
12271 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12272 );
12273 }
12274
12275 pub const fn with_intid(mut self, value: u8) -> Self {
12277 self.set_intid(value);
12278 self
12279 }
12280
12281 pub const fn aff2(self) -> u8 {
12283 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
12284 }
12285
12286 pub const fn set_aff2(&mut self, value: u8) {
12288 let offset = Self::AFF2_SHIFT;
12289 assert!(value & (Self::AFF2_MASK as u8) == value);
12290 *self = Self::from_bits_retain(
12291 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
12292 );
12293 }
12294
12295 pub const fn with_aff2(mut self, value: u8) -> Self {
12297 self.set_aff2(value);
12298 self
12299 }
12300
12301 pub const fn rs(self) -> u8 {
12303 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
12304 }
12305
12306 pub const fn set_rs(&mut self, value: u8) {
12308 let offset = Self::RS_SHIFT;
12309 assert!(value & (Self::RS_MASK as u8) == value);
12310 *self = Self::from_bits_retain(
12311 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
12312 );
12313 }
12314
12315 pub const fn with_rs(mut self, value: u8) -> Self {
12317 self.set_rs(value);
12318 self
12319 }
12320
12321 pub const fn aff3(self) -> u8 {
12323 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
12324 }
12325
12326 pub const fn set_aff3(&mut self, value: u8) {
12328 let offset = Self::AFF3_SHIFT;
12329 assert!(value & (Self::AFF3_MASK as u8) == value);
12330 *self = Self::from_bits_retain(
12331 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
12332 );
12333 }
12334
12335 pub const fn with_aff3(mut self, value: u8) -> Self {
12337 self.set_aff3(value);
12338 self
12339 }
12340}
12341
12342bitflags! {
12343 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12345 #[repr(transparent)]
12346 pub struct IccSgi1r: u64 {
12347 const IRM = 1 << 40;
12349 }
12350}
12351
12352impl IccSgi1r {
12353 pub const TARGETLIST_SHIFT: u32 = 0;
12355 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
12357 pub const AFF1_SHIFT: u32 = 16;
12359 pub const AFF1_MASK: u64 = 0b11111111;
12361 pub const INTID_SHIFT: u32 = 24;
12363 pub const INTID_MASK: u64 = 0b1111;
12365 pub const AFF2_SHIFT: u32 = 32;
12367 pub const AFF2_MASK: u64 = 0b11111111;
12369 pub const IRM_SHIFT: u32 = 40;
12371 pub const RS_SHIFT: u32 = 44;
12373 pub const RS_MASK: u64 = 0b1111;
12375 pub const AFF3_SHIFT: u32 = 48;
12377 pub const AFF3_MASK: u64 = 0b11111111;
12379
12380 pub const fn targetlist(self) -> u16 {
12382 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
12383 }
12384
12385 pub const fn set_targetlist(&mut self, value: u16) {
12387 let offset = Self::TARGETLIST_SHIFT;
12388 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
12389 *self = Self::from_bits_retain(
12390 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
12391 );
12392 }
12393
12394 pub const fn with_targetlist(mut self, value: u16) -> Self {
12396 self.set_targetlist(value);
12397 self
12398 }
12399
12400 pub const fn aff1(self) -> u8 {
12402 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
12403 }
12404
12405 pub const fn set_aff1(&mut self, value: u8) {
12407 let offset = Self::AFF1_SHIFT;
12408 assert!(value & (Self::AFF1_MASK as u8) == value);
12409 *self = Self::from_bits_retain(
12410 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
12411 );
12412 }
12413
12414 pub const fn with_aff1(mut self, value: u8) -> Self {
12416 self.set_aff1(value);
12417 self
12418 }
12419
12420 pub const fn intid(self) -> u8 {
12422 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
12423 }
12424
12425 pub const fn set_intid(&mut self, value: u8) {
12427 let offset = Self::INTID_SHIFT;
12428 assert!(value & (Self::INTID_MASK as u8) == value);
12429 *self = Self::from_bits_retain(
12430 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12431 );
12432 }
12433
12434 pub const fn with_intid(mut self, value: u8) -> Self {
12436 self.set_intid(value);
12437 self
12438 }
12439
12440 pub const fn aff2(self) -> u8 {
12442 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
12443 }
12444
12445 pub const fn set_aff2(&mut self, value: u8) {
12447 let offset = Self::AFF2_SHIFT;
12448 assert!(value & (Self::AFF2_MASK as u8) == value);
12449 *self = Self::from_bits_retain(
12450 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
12451 );
12452 }
12453
12454 pub const fn with_aff2(mut self, value: u8) -> Self {
12456 self.set_aff2(value);
12457 self
12458 }
12459
12460 pub const fn rs(self) -> u8 {
12462 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
12463 }
12464
12465 pub const fn set_rs(&mut self, value: u8) {
12467 let offset = Self::RS_SHIFT;
12468 assert!(value & (Self::RS_MASK as u8) == value);
12469 *self = Self::from_bits_retain(
12470 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
12471 );
12472 }
12473
12474 pub const fn with_rs(mut self, value: u8) -> Self {
12476 self.set_rs(value);
12477 self
12478 }
12479
12480 pub const fn aff3(self) -> u8 {
12482 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
12483 }
12484
12485 pub const fn set_aff3(&mut self, value: u8) {
12487 let offset = Self::AFF3_SHIFT;
12488 assert!(value & (Self::AFF3_MASK as u8) == value);
12489 *self = Self::from_bits_retain(
12490 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
12491 );
12492 }
12493
12494 pub const fn with_aff3(mut self, value: u8) -> Self {
12496 self.set_aff3(value);
12497 self
12498 }
12499}
12500
12501#[cfg(feature = "el1")]
12502bitflags! {
12503 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12505 #[repr(transparent)]
12506 pub struct IccSgi1rEl1: u64 {
12507 const IRM = 1 << 40;
12509 }
12510}
12511
12512#[cfg(feature = "el1")]
12513impl IccSgi1rEl1 {
12514 pub const TARGETLIST_SHIFT: u32 = 0;
12516 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
12518 pub const AFF1_SHIFT: u32 = 16;
12520 pub const AFF1_MASK: u64 = 0b11111111;
12522 pub const INTID_SHIFT: u32 = 24;
12524 pub const INTID_MASK: u64 = 0b1111;
12526 pub const AFF2_SHIFT: u32 = 32;
12528 pub const AFF2_MASK: u64 = 0b11111111;
12530 pub const IRM_SHIFT: u32 = 40;
12532 pub const RS_SHIFT: u32 = 44;
12534 pub const RS_MASK: u64 = 0b1111;
12536 pub const AFF3_SHIFT: u32 = 48;
12538 pub const AFF3_MASK: u64 = 0b11111111;
12540
12541 pub const fn targetlist(self) -> u16 {
12543 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
12544 }
12545
12546 pub const fn set_targetlist(&mut self, value: u16) {
12548 let offset = Self::TARGETLIST_SHIFT;
12549 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
12550 *self = Self::from_bits_retain(
12551 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
12552 );
12553 }
12554
12555 pub const fn with_targetlist(mut self, value: u16) -> Self {
12557 self.set_targetlist(value);
12558 self
12559 }
12560
12561 pub const fn aff1(self) -> u8 {
12563 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
12564 }
12565
12566 pub const fn set_aff1(&mut self, value: u8) {
12568 let offset = Self::AFF1_SHIFT;
12569 assert!(value & (Self::AFF1_MASK as u8) == value);
12570 *self = Self::from_bits_retain(
12571 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
12572 );
12573 }
12574
12575 pub const fn with_aff1(mut self, value: u8) -> Self {
12577 self.set_aff1(value);
12578 self
12579 }
12580
12581 pub const fn intid(self) -> u8 {
12583 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
12584 }
12585
12586 pub const fn set_intid(&mut self, value: u8) {
12588 let offset = Self::INTID_SHIFT;
12589 assert!(value & (Self::INTID_MASK as u8) == value);
12590 *self = Self::from_bits_retain(
12591 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12592 );
12593 }
12594
12595 pub const fn with_intid(mut self, value: u8) -> Self {
12597 self.set_intid(value);
12598 self
12599 }
12600
12601 pub const fn aff2(self) -> u8 {
12603 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
12604 }
12605
12606 pub const fn set_aff2(&mut self, value: u8) {
12608 let offset = Self::AFF2_SHIFT;
12609 assert!(value & (Self::AFF2_MASK as u8) == value);
12610 *self = Self::from_bits_retain(
12611 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
12612 );
12613 }
12614
12615 pub const fn with_aff2(mut self, value: u8) -> Self {
12617 self.set_aff2(value);
12618 self
12619 }
12620
12621 pub const fn rs(self) -> u8 {
12623 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
12624 }
12625
12626 pub const fn set_rs(&mut self, value: u8) {
12628 let offset = Self::RS_SHIFT;
12629 assert!(value & (Self::RS_MASK as u8) == value);
12630 *self = Self::from_bits_retain(
12631 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
12632 );
12633 }
12634
12635 pub const fn with_rs(mut self, value: u8) -> Self {
12637 self.set_rs(value);
12638 self
12639 }
12640
12641 pub const fn aff3(self) -> u8 {
12643 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
12644 }
12645
12646 pub const fn set_aff3(&mut self, value: u8) {
12648 let offset = Self::AFF3_SHIFT;
12649 assert!(value & (Self::AFF3_MASK as u8) == value);
12650 *self = Self::from_bits_retain(
12651 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
12652 );
12653 }
12654
12655 pub const fn with_aff3(mut self, value: u8) -> Self {
12657 self.set_aff3(value);
12658 self
12659 }
12660}
12661
12662bitflags! {
12663 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12665 #[repr(transparent)]
12666 pub struct IccSre: u32 {
12667 const SRE = 1 << 0;
12669 const DFB = 1 << 1;
12671 const DIB = 1 << 2;
12673 }
12674}
12675
12676impl IccSre {
12677 pub const SRE_SHIFT: u32 = 0;
12679 pub const DFB_SHIFT: u32 = 1;
12681 pub const DIB_SHIFT: u32 = 2;
12683}
12684
12685#[cfg(feature = "el1")]
12686bitflags! {
12687 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12689 #[repr(transparent)]
12690 pub struct IccSreEl1: u64 {
12691 const SRE = 1 << 0;
12693 const DFB = 1 << 1;
12695 const DIB = 1 << 2;
12697 }
12698}
12699
12700#[cfg(feature = "el1")]
12701impl IccSreEl1 {
12702 pub const SRE_SHIFT: u32 = 0;
12704 pub const DFB_SHIFT: u32 = 1;
12706 pub const DIB_SHIFT: u32 = 2;
12708}
12709
12710#[cfg(feature = "el2")]
12711bitflags! {
12712 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12714 #[repr(transparent)]
12715 pub struct IccSreEl2: u64 {
12716 const SRE = 1 << 0;
12718 const DFB = 1 << 1;
12720 const DIB = 1 << 2;
12722 const ENABLE = 1 << 3;
12724 }
12725}
12726
12727#[cfg(feature = "el2")]
12728impl IccSreEl2 {
12729 pub const SRE_SHIFT: u32 = 0;
12731 pub const DFB_SHIFT: u32 = 1;
12733 pub const DIB_SHIFT: u32 = 2;
12735 pub const ENABLE_SHIFT: u32 = 3;
12737}
12738
12739#[cfg(feature = "el3")]
12740bitflags! {
12741 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12743 #[repr(transparent)]
12744 pub struct IccSreEl3: u64 {
12745 const SRE = 1 << 0;
12747 const DFB = 1 << 1;
12749 const DIB = 1 << 2;
12751 const ENABLE = 1 << 3;
12753 }
12754}
12755
12756#[cfg(feature = "el3")]
12757impl IccSreEl3 {
12758 pub const SRE_SHIFT: u32 = 0;
12760 pub const DFB_SHIFT: u32 = 1;
12762 pub const DIB_SHIFT: u32 = 2;
12764 pub const ENABLE_SHIFT: u32 = 3;
12766}
12767
12768#[cfg(feature = "el2")]
12769bitflags! {
12770 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12772 #[repr(transparent)]
12773 pub struct IchHcrEl2: u64 {
12774 const EN = 1 << 0;
12776 const UIE = 1 << 1;
12778 const LRENPIE = 1 << 2;
12780 const NPIE = 1 << 3;
12782 const VGRP0EIE = 1 << 4;
12784 const VGRP0DIE = 1 << 5;
12786 const VGRP1EIE = 1 << 6;
12788 const VGRP1DIE = 1 << 7;
12790 const VSGIEOICOUNT = 1 << 8;
12792 const TC = 1 << 10;
12794 const TALL0 = 1 << 11;
12796 const TALL1 = 1 << 12;
12798 const TSEI = 1 << 13;
12800 const TDIR = 1 << 14;
12802 const DVIM = 1 << 15;
12804 }
12805}
12806
12807#[cfg(feature = "el2")]
12808impl IchHcrEl2 {
12809 pub const EN_SHIFT: u32 = 0;
12811 pub const UIE_SHIFT: u32 = 1;
12813 pub const LRENPIE_SHIFT: u32 = 2;
12815 pub const NPIE_SHIFT: u32 = 3;
12817 pub const VGRP0EIE_SHIFT: u32 = 4;
12819 pub const VGRP0DIE_SHIFT: u32 = 5;
12821 pub const VGRP1EIE_SHIFT: u32 = 6;
12823 pub const VGRP1DIE_SHIFT: u32 = 7;
12825 pub const VSGIEOICOUNT_SHIFT: u32 = 8;
12827 pub const TC_SHIFT: u32 = 10;
12829 pub const TALL0_SHIFT: u32 = 11;
12831 pub const TALL1_SHIFT: u32 = 12;
12833 pub const TSEI_SHIFT: u32 = 13;
12835 pub const TDIR_SHIFT: u32 = 14;
12837 pub const DVIM_SHIFT: u32 = 15;
12839 pub const EOICOUNT_SHIFT: u32 = 27;
12841 pub const EOICOUNT_MASK: u64 = 0b11111;
12843
12844 pub const fn eoicount(self) -> u8 {
12846 ((self.bits() >> Self::EOICOUNT_SHIFT) & 0b11111) as u8
12847 }
12848
12849 pub const fn set_eoicount(&mut self, value: u8) {
12851 let offset = Self::EOICOUNT_SHIFT;
12852 assert!(value & (Self::EOICOUNT_MASK as u8) == value);
12853 *self = Self::from_bits_retain(
12854 (self.bits() & !(Self::EOICOUNT_MASK << offset)) | ((value as u64) << offset),
12855 );
12856 }
12857
12858 pub const fn with_eoicount(mut self, value: u8) -> Self {
12860 self.set_eoicount(value);
12861 self
12862 }
12863}
12864
12865#[cfg(feature = "el2")]
12866bitflags! {
12867 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12869 #[repr(transparent)]
12870 pub struct IchVmcrEl2: u64 {
12871 const EN = 1 << 0;
12873 const VENG0 = 1 << 0;
12875 const VENG1 = 1 << 1;
12877 const VACKCTL = 1 << 2;
12879 const VFIQEN = 1 << 3;
12881 const VCBPR = 1 << 4;
12883 const VEOIM = 1 << 9;
12885 }
12886}
12887
12888#[cfg(feature = "el2")]
12889impl IchVmcrEl2 {
12890 pub const EN_SHIFT: u32 = 0;
12892 pub const VENG0_SHIFT: u32 = 0;
12894 pub const VENG1_SHIFT: u32 = 1;
12896 pub const VACKCTL_SHIFT: u32 = 2;
12898 pub const VFIQEN_SHIFT: u32 = 3;
12900 pub const VCBPR_SHIFT: u32 = 4;
12902 pub const VEOIM_SHIFT: u32 = 9;
12904 pub const VBPR1_SHIFT: u32 = 18;
12906 pub const VBPR1_MASK: u64 = 0b111;
12908 pub const VBPR0_SHIFT: u32 = 21;
12910 pub const VBPR0_MASK: u64 = 0b111;
12912
12913 pub const fn vbpr1(self) -> u8 {
12915 ((self.bits() >> Self::VBPR1_SHIFT) & 0b111) as u8
12916 }
12917
12918 pub const fn set_vbpr1(&mut self, value: u8) {
12920 let offset = Self::VBPR1_SHIFT;
12921 assert!(value & (Self::VBPR1_MASK as u8) == value);
12922 *self = Self::from_bits_retain(
12923 (self.bits() & !(Self::VBPR1_MASK << offset)) | ((value as u64) << offset),
12924 );
12925 }
12926
12927 pub const fn with_vbpr1(mut self, value: u8) -> Self {
12929 self.set_vbpr1(value);
12930 self
12931 }
12932
12933 pub const fn vbpr0(self) -> u8 {
12935 ((self.bits() >> Self::VBPR0_SHIFT) & 0b111) as u8
12936 }
12937
12938 pub const fn set_vbpr0(&mut self, value: u8) {
12940 let offset = Self::VBPR0_SHIFT;
12941 assert!(value & (Self::VBPR0_MASK as u8) == value);
12942 *self = Self::from_bits_retain(
12943 (self.bits() & !(Self::VBPR0_MASK << offset)) | ((value as u64) << offset),
12944 );
12945 }
12946
12947 pub const fn with_vbpr0(mut self, value: u8) -> Self {
12949 self.set_vbpr0(value);
12950 self
12951 }
12952}
12953
12954#[cfg(feature = "el1")]
12955bitflags! {
12956 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12958 #[repr(transparent)]
12959 pub struct IdAa64dfr0El1: u64 {
12960 }
12961}
12962
12963#[cfg(feature = "el1")]
12964impl IdAa64dfr0El1 {
12965 pub const DEBUGVER_SHIFT: u32 = 0;
12967 pub const DEBUGVER_MASK: u64 = 0b1111;
12969 pub const TRACEVER_SHIFT: u32 = 4;
12971 pub const TRACEVER_MASK: u64 = 0b1111;
12973 pub const PMUVER_SHIFT: u32 = 8;
12975 pub const PMUVER_MASK: u64 = 0b1111;
12977 pub const BRPS_SHIFT: u32 = 12;
12979 pub const BRPS_MASK: u64 = 0b1111;
12981 pub const PMSS_SHIFT: u32 = 16;
12983 pub const PMSS_MASK: u64 = 0b1111;
12985 pub const WRPS_SHIFT: u32 = 20;
12987 pub const WRPS_MASK: u64 = 0b1111;
12989 pub const SEBEP_SHIFT: u32 = 24;
12991 pub const SEBEP_MASK: u64 = 0b1111;
12993 pub const CTX_CMPS_SHIFT: u32 = 28;
12995 pub const CTX_CMPS_MASK: u64 = 0b1111;
12997 pub const PMSVER_SHIFT: u32 = 32;
12999 pub const PMSVER_MASK: u64 = 0b1111;
13001 pub const DOUBLELOCK_SHIFT: u32 = 36;
13003 pub const DOUBLELOCK_MASK: u64 = 0b1111;
13005 pub const TRACEFILT_SHIFT: u32 = 40;
13007 pub const TRACEFILT_MASK: u64 = 0b1111;
13009 pub const TRACEBUFFER_SHIFT: u32 = 44;
13011 pub const TRACEBUFFER_MASK: u64 = 0b1111;
13013 pub const MTPMU_SHIFT: u32 = 48;
13015 pub const MTPMU_MASK: u64 = 0b1111;
13017 pub const BRBE_SHIFT: u32 = 52;
13019 pub const BRBE_MASK: u64 = 0b1111;
13021 pub const EXTTRCBUFF_SHIFT: u32 = 56;
13023 pub const EXTTRCBUFF_MASK: u64 = 0b1111;
13025 pub const HPMN0_SHIFT: u32 = 60;
13027 pub const HPMN0_MASK: u64 = 0b1111;
13029
13030 pub const fn debugver(self) -> u8 {
13032 ((self.bits() >> Self::DEBUGVER_SHIFT) & 0b1111) as u8
13033 }
13034
13035 pub const fn set_debugver(&mut self, value: u8) {
13037 let offset = Self::DEBUGVER_SHIFT;
13038 assert!(value & (Self::DEBUGVER_MASK as u8) == value);
13039 *self = Self::from_bits_retain(
13040 (self.bits() & !(Self::DEBUGVER_MASK << offset)) | ((value as u64) << offset),
13041 );
13042 }
13043
13044 pub const fn with_debugver(mut self, value: u8) -> Self {
13046 self.set_debugver(value);
13047 self
13048 }
13049
13050 pub const fn tracever(self) -> u8 {
13052 ((self.bits() >> Self::TRACEVER_SHIFT) & 0b1111) as u8
13053 }
13054
13055 pub const fn set_tracever(&mut self, value: u8) {
13057 let offset = Self::TRACEVER_SHIFT;
13058 assert!(value & (Self::TRACEVER_MASK as u8) == value);
13059 *self = Self::from_bits_retain(
13060 (self.bits() & !(Self::TRACEVER_MASK << offset)) | ((value as u64) << offset),
13061 );
13062 }
13063
13064 pub const fn with_tracever(mut self, value: u8) -> Self {
13066 self.set_tracever(value);
13067 self
13068 }
13069
13070 pub const fn pmuver(self) -> u8 {
13072 ((self.bits() >> Self::PMUVER_SHIFT) & 0b1111) as u8
13073 }
13074
13075 pub const fn set_pmuver(&mut self, value: u8) {
13077 let offset = Self::PMUVER_SHIFT;
13078 assert!(value & (Self::PMUVER_MASK as u8) == value);
13079 *self = Self::from_bits_retain(
13080 (self.bits() & !(Self::PMUVER_MASK << offset)) | ((value as u64) << offset),
13081 );
13082 }
13083
13084 pub const fn with_pmuver(mut self, value: u8) -> Self {
13086 self.set_pmuver(value);
13087 self
13088 }
13089
13090 pub const fn brps(self) -> u8 {
13092 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
13093 }
13094
13095 pub const fn set_brps(&mut self, value: u8) {
13097 let offset = Self::BRPS_SHIFT;
13098 assert!(value & (Self::BRPS_MASK as u8) == value);
13099 *self = Self::from_bits_retain(
13100 (self.bits() & !(Self::BRPS_MASK << offset)) | ((value as u64) << offset),
13101 );
13102 }
13103
13104 pub const fn with_brps(mut self, value: u8) -> Self {
13106 self.set_brps(value);
13107 self
13108 }
13109
13110 pub const fn pmss(self) -> u8 {
13112 ((self.bits() >> Self::PMSS_SHIFT) & 0b1111) as u8
13113 }
13114
13115 pub const fn set_pmss(&mut self, value: u8) {
13117 let offset = Self::PMSS_SHIFT;
13118 assert!(value & (Self::PMSS_MASK as u8) == value);
13119 *self = Self::from_bits_retain(
13120 (self.bits() & !(Self::PMSS_MASK << offset)) | ((value as u64) << offset),
13121 );
13122 }
13123
13124 pub const fn with_pmss(mut self, value: u8) -> Self {
13126 self.set_pmss(value);
13127 self
13128 }
13129
13130 pub const fn wrps(self) -> u8 {
13132 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
13133 }
13134
13135 pub const fn set_wrps(&mut self, value: u8) {
13137 let offset = Self::WRPS_SHIFT;
13138 assert!(value & (Self::WRPS_MASK as u8) == value);
13139 *self = Self::from_bits_retain(
13140 (self.bits() & !(Self::WRPS_MASK << offset)) | ((value as u64) << offset),
13141 );
13142 }
13143
13144 pub const fn with_wrps(mut self, value: u8) -> Self {
13146 self.set_wrps(value);
13147 self
13148 }
13149
13150 pub const fn sebep(self) -> u8 {
13152 ((self.bits() >> Self::SEBEP_SHIFT) & 0b1111) as u8
13153 }
13154
13155 pub const fn set_sebep(&mut self, value: u8) {
13157 let offset = Self::SEBEP_SHIFT;
13158 assert!(value & (Self::SEBEP_MASK as u8) == value);
13159 *self = Self::from_bits_retain(
13160 (self.bits() & !(Self::SEBEP_MASK << offset)) | ((value as u64) << offset),
13161 );
13162 }
13163
13164 pub const fn with_sebep(mut self, value: u8) -> Self {
13166 self.set_sebep(value);
13167 self
13168 }
13169
13170 pub const fn ctx_cmps(self) -> u8 {
13172 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
13173 }
13174
13175 pub const fn set_ctx_cmps(&mut self, value: u8) {
13177 let offset = Self::CTX_CMPS_SHIFT;
13178 assert!(value & (Self::CTX_CMPS_MASK as u8) == value);
13179 *self = Self::from_bits_retain(
13180 (self.bits() & !(Self::CTX_CMPS_MASK << offset)) | ((value as u64) << offset),
13181 );
13182 }
13183
13184 pub const fn with_ctx_cmps(mut self, value: u8) -> Self {
13186 self.set_ctx_cmps(value);
13187 self
13188 }
13189
13190 pub const fn pmsver(self) -> u8 {
13192 ((self.bits() >> Self::PMSVER_SHIFT) & 0b1111) as u8
13193 }
13194
13195 pub const fn set_pmsver(&mut self, value: u8) {
13197 let offset = Self::PMSVER_SHIFT;
13198 assert!(value & (Self::PMSVER_MASK as u8) == value);
13199 *self = Self::from_bits_retain(
13200 (self.bits() & !(Self::PMSVER_MASK << offset)) | ((value as u64) << offset),
13201 );
13202 }
13203
13204 pub const fn with_pmsver(mut self, value: u8) -> Self {
13206 self.set_pmsver(value);
13207 self
13208 }
13209
13210 pub const fn doublelock(self) -> u8 {
13212 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
13213 }
13214
13215 pub const fn set_doublelock(&mut self, value: u8) {
13217 let offset = Self::DOUBLELOCK_SHIFT;
13218 assert!(value & (Self::DOUBLELOCK_MASK as u8) == value);
13219 *self = Self::from_bits_retain(
13220 (self.bits() & !(Self::DOUBLELOCK_MASK << offset)) | ((value as u64) << offset),
13221 );
13222 }
13223
13224 pub const fn with_doublelock(mut self, value: u8) -> Self {
13226 self.set_doublelock(value);
13227 self
13228 }
13229
13230 pub const fn tracefilt(self) -> u8 {
13232 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
13233 }
13234
13235 pub const fn set_tracefilt(&mut self, value: u8) {
13237 let offset = Self::TRACEFILT_SHIFT;
13238 assert!(value & (Self::TRACEFILT_MASK as u8) == value);
13239 *self = Self::from_bits_retain(
13240 (self.bits() & !(Self::TRACEFILT_MASK << offset)) | ((value as u64) << offset),
13241 );
13242 }
13243
13244 pub const fn with_tracefilt(mut self, value: u8) -> Self {
13246 self.set_tracefilt(value);
13247 self
13248 }
13249
13250 pub const fn tracebuffer(self) -> u8 {
13252 ((self.bits() >> Self::TRACEBUFFER_SHIFT) & 0b1111) as u8
13253 }
13254
13255 pub const fn set_tracebuffer(&mut self, value: u8) {
13257 let offset = Self::TRACEBUFFER_SHIFT;
13258 assert!(value & (Self::TRACEBUFFER_MASK as u8) == value);
13259 *self = Self::from_bits_retain(
13260 (self.bits() & !(Self::TRACEBUFFER_MASK << offset)) | ((value as u64) << offset),
13261 );
13262 }
13263
13264 pub const fn with_tracebuffer(mut self, value: u8) -> Self {
13266 self.set_tracebuffer(value);
13267 self
13268 }
13269
13270 pub const fn mtpmu(self) -> u8 {
13272 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
13273 }
13274
13275 pub const fn set_mtpmu(&mut self, value: u8) {
13277 let offset = Self::MTPMU_SHIFT;
13278 assert!(value & (Self::MTPMU_MASK as u8) == value);
13279 *self = Self::from_bits_retain(
13280 (self.bits() & !(Self::MTPMU_MASK << offset)) | ((value as u64) << offset),
13281 );
13282 }
13283
13284 pub const fn with_mtpmu(mut self, value: u8) -> Self {
13286 self.set_mtpmu(value);
13287 self
13288 }
13289
13290 pub const fn brbe(self) -> u8 {
13292 ((self.bits() >> Self::BRBE_SHIFT) & 0b1111) as u8
13293 }
13294
13295 pub const fn set_brbe(&mut self, value: u8) {
13297 let offset = Self::BRBE_SHIFT;
13298 assert!(value & (Self::BRBE_MASK as u8) == value);
13299 *self = Self::from_bits_retain(
13300 (self.bits() & !(Self::BRBE_MASK << offset)) | ((value as u64) << offset),
13301 );
13302 }
13303
13304 pub const fn with_brbe(mut self, value: u8) -> Self {
13306 self.set_brbe(value);
13307 self
13308 }
13309
13310 pub const fn exttrcbuff(self) -> u8 {
13312 ((self.bits() >> Self::EXTTRCBUFF_SHIFT) & 0b1111) as u8
13313 }
13314
13315 pub const fn set_exttrcbuff(&mut self, value: u8) {
13317 let offset = Self::EXTTRCBUFF_SHIFT;
13318 assert!(value & (Self::EXTTRCBUFF_MASK as u8) == value);
13319 *self = Self::from_bits_retain(
13320 (self.bits() & !(Self::EXTTRCBUFF_MASK << offset)) | ((value as u64) << offset),
13321 );
13322 }
13323
13324 pub const fn with_exttrcbuff(mut self, value: u8) -> Self {
13326 self.set_exttrcbuff(value);
13327 self
13328 }
13329
13330 pub const fn hpmn0(self) -> u8 {
13332 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
13333 }
13334
13335 pub const fn set_hpmn0(&mut self, value: u8) {
13337 let offset = Self::HPMN0_SHIFT;
13338 assert!(value & (Self::HPMN0_MASK as u8) == value);
13339 *self = Self::from_bits_retain(
13340 (self.bits() & !(Self::HPMN0_MASK << offset)) | ((value as u64) << offset),
13341 );
13342 }
13343
13344 pub const fn with_hpmn0(mut self, value: u8) -> Self {
13346 self.set_hpmn0(value);
13347 self
13348 }
13349}
13350
13351#[cfg(feature = "el1")]
13352bitflags! {
13353 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13355 #[repr(transparent)]
13356 pub struct IdAa64dfr1El1: u64 {
13357 }
13358}
13359
13360#[cfg(feature = "el1")]
13361impl IdAa64dfr1El1 {
13362 pub const SYSPMUID_SHIFT: u32 = 0;
13364 pub const SYSPMUID_MASK: u64 = 0b11111111;
13366 pub const BRPS_SHIFT: u32 = 8;
13368 pub const BRPS_MASK: u64 = 0b11111111;
13370 pub const WRPS_SHIFT: u32 = 16;
13372 pub const WRPS_MASK: u64 = 0b11111111;
13374 pub const CTX_CMPS_SHIFT: u32 = 24;
13376 pub const CTX_CMPS_MASK: u64 = 0b11111111;
13378 pub const SPMU_SHIFT: u32 = 32;
13380 pub const SPMU_MASK: u64 = 0b1111;
13382 pub const PMICNTR_SHIFT: u32 = 36;
13384 pub const PMICNTR_MASK: u64 = 0b1111;
13386 pub const ABLE_SHIFT: u32 = 40;
13388 pub const ABLE_MASK: u64 = 0b1111;
13390 pub const ITE_SHIFT: u32 = 44;
13392 pub const ITE_MASK: u64 = 0b1111;
13394 pub const EBEP_SHIFT: u32 = 48;
13396 pub const EBEP_MASK: u64 = 0b1111;
13398 pub const DPFZS_SHIFT: u32 = 52;
13400 pub const DPFZS_MASK: u64 = 0b1111;
13402 pub const ABL_CMPS_SHIFT: u32 = 56;
13404 pub const ABL_CMPS_MASK: u64 = 0b11111111;
13406
13407 pub const fn syspmuid(self) -> u8 {
13409 ((self.bits() >> Self::SYSPMUID_SHIFT) & 0b11111111) as u8
13410 }
13411
13412 pub const fn set_syspmuid(&mut self, value: u8) {
13414 let offset = Self::SYSPMUID_SHIFT;
13415 assert!(value & (Self::SYSPMUID_MASK as u8) == value);
13416 *self = Self::from_bits_retain(
13417 (self.bits() & !(Self::SYSPMUID_MASK << offset)) | ((value as u64) << offset),
13418 );
13419 }
13420
13421 pub const fn with_syspmuid(mut self, value: u8) -> Self {
13423 self.set_syspmuid(value);
13424 self
13425 }
13426
13427 pub const fn brps(self) -> u8 {
13429 ((self.bits() >> Self::BRPS_SHIFT) & 0b11111111) as u8
13430 }
13431
13432 pub const fn set_brps(&mut self, value: u8) {
13434 let offset = Self::BRPS_SHIFT;
13435 assert!(value & (Self::BRPS_MASK as u8) == value);
13436 *self = Self::from_bits_retain(
13437 (self.bits() & !(Self::BRPS_MASK << offset)) | ((value as u64) << offset),
13438 );
13439 }
13440
13441 pub const fn with_brps(mut self, value: u8) -> Self {
13443 self.set_brps(value);
13444 self
13445 }
13446
13447 pub const fn wrps(self) -> u8 {
13449 ((self.bits() >> Self::WRPS_SHIFT) & 0b11111111) as u8
13450 }
13451
13452 pub const fn set_wrps(&mut self, value: u8) {
13454 let offset = Self::WRPS_SHIFT;
13455 assert!(value & (Self::WRPS_MASK as u8) == value);
13456 *self = Self::from_bits_retain(
13457 (self.bits() & !(Self::WRPS_MASK << offset)) | ((value as u64) << offset),
13458 );
13459 }
13460
13461 pub const fn with_wrps(mut self, value: u8) -> Self {
13463 self.set_wrps(value);
13464 self
13465 }
13466
13467 pub const fn ctx_cmps(self) -> u8 {
13469 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b11111111) as u8
13470 }
13471
13472 pub const fn set_ctx_cmps(&mut self, value: u8) {
13474 let offset = Self::CTX_CMPS_SHIFT;
13475 assert!(value & (Self::CTX_CMPS_MASK as u8) == value);
13476 *self = Self::from_bits_retain(
13477 (self.bits() & !(Self::CTX_CMPS_MASK << offset)) | ((value as u64) << offset),
13478 );
13479 }
13480
13481 pub const fn with_ctx_cmps(mut self, value: u8) -> Self {
13483 self.set_ctx_cmps(value);
13484 self
13485 }
13486
13487 pub const fn spmu(self) -> u8 {
13489 ((self.bits() >> Self::SPMU_SHIFT) & 0b1111) as u8
13490 }
13491
13492 pub const fn set_spmu(&mut self, value: u8) {
13494 let offset = Self::SPMU_SHIFT;
13495 assert!(value & (Self::SPMU_MASK as u8) == value);
13496 *self = Self::from_bits_retain(
13497 (self.bits() & !(Self::SPMU_MASK << offset)) | ((value as u64) << offset),
13498 );
13499 }
13500
13501 pub const fn with_spmu(mut self, value: u8) -> Self {
13503 self.set_spmu(value);
13504 self
13505 }
13506
13507 pub const fn pmicntr(self) -> u8 {
13509 ((self.bits() >> Self::PMICNTR_SHIFT) & 0b1111) as u8
13510 }
13511
13512 pub const fn set_pmicntr(&mut self, value: u8) {
13514 let offset = Self::PMICNTR_SHIFT;
13515 assert!(value & (Self::PMICNTR_MASK as u8) == value);
13516 *self = Self::from_bits_retain(
13517 (self.bits() & !(Self::PMICNTR_MASK << offset)) | ((value as u64) << offset),
13518 );
13519 }
13520
13521 pub const fn with_pmicntr(mut self, value: u8) -> Self {
13523 self.set_pmicntr(value);
13524 self
13525 }
13526
13527 pub const fn able(self) -> u8 {
13529 ((self.bits() >> Self::ABLE_SHIFT) & 0b1111) as u8
13530 }
13531
13532 pub const fn set_able(&mut self, value: u8) {
13534 let offset = Self::ABLE_SHIFT;
13535 assert!(value & (Self::ABLE_MASK as u8) == value);
13536 *self = Self::from_bits_retain(
13537 (self.bits() & !(Self::ABLE_MASK << offset)) | ((value as u64) << offset),
13538 );
13539 }
13540
13541 pub const fn with_able(mut self, value: u8) -> Self {
13543 self.set_able(value);
13544 self
13545 }
13546
13547 pub const fn ite(self) -> u8 {
13549 ((self.bits() >> Self::ITE_SHIFT) & 0b1111) as u8
13550 }
13551
13552 pub const fn set_ite(&mut self, value: u8) {
13554 let offset = Self::ITE_SHIFT;
13555 assert!(value & (Self::ITE_MASK as u8) == value);
13556 *self = Self::from_bits_retain(
13557 (self.bits() & !(Self::ITE_MASK << offset)) | ((value as u64) << offset),
13558 );
13559 }
13560
13561 pub const fn with_ite(mut self, value: u8) -> Self {
13563 self.set_ite(value);
13564 self
13565 }
13566
13567 pub const fn ebep(self) -> u8 {
13569 ((self.bits() >> Self::EBEP_SHIFT) & 0b1111) as u8
13570 }
13571
13572 pub const fn set_ebep(&mut self, value: u8) {
13574 let offset = Self::EBEP_SHIFT;
13575 assert!(value & (Self::EBEP_MASK as u8) == value);
13576 *self = Self::from_bits_retain(
13577 (self.bits() & !(Self::EBEP_MASK << offset)) | ((value as u64) << offset),
13578 );
13579 }
13580
13581 pub const fn with_ebep(mut self, value: u8) -> Self {
13583 self.set_ebep(value);
13584 self
13585 }
13586
13587 pub const fn dpfzs(self) -> u8 {
13589 ((self.bits() >> Self::DPFZS_SHIFT) & 0b1111) as u8
13590 }
13591
13592 pub const fn set_dpfzs(&mut self, value: u8) {
13594 let offset = Self::DPFZS_SHIFT;
13595 assert!(value & (Self::DPFZS_MASK as u8) == value);
13596 *self = Self::from_bits_retain(
13597 (self.bits() & !(Self::DPFZS_MASK << offset)) | ((value as u64) << offset),
13598 );
13599 }
13600
13601 pub const fn with_dpfzs(mut self, value: u8) -> Self {
13603 self.set_dpfzs(value);
13604 self
13605 }
13606
13607 pub const fn abl_cmps(self) -> u8 {
13609 ((self.bits() >> Self::ABL_CMPS_SHIFT) & 0b11111111) as u8
13610 }
13611
13612 pub const fn set_abl_cmps(&mut self, value: u8) {
13614 let offset = Self::ABL_CMPS_SHIFT;
13615 assert!(value & (Self::ABL_CMPS_MASK as u8) == value);
13616 *self = Self::from_bits_retain(
13617 (self.bits() & !(Self::ABL_CMPS_MASK << offset)) | ((value as u64) << offset),
13618 );
13619 }
13620
13621 pub const fn with_abl_cmps(mut self, value: u8) -> Self {
13623 self.set_abl_cmps(value);
13624 self
13625 }
13626}
13627
13628#[cfg(feature = "el1")]
13629bitflags! {
13630 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13632 #[repr(transparent)]
13633 pub struct IdAa64isar1El1: u64 {
13634 }
13635}
13636
13637#[cfg(feature = "el1")]
13638impl IdAa64isar1El1 {
13639 pub const DPB_SHIFT: u32 = 0;
13641 pub const DPB_MASK: u64 = 0b1111;
13643 pub const APA_SHIFT: u32 = 4;
13645 pub const APA_MASK: u64 = 0b1111;
13647 pub const API_SHIFT: u32 = 8;
13649 pub const API_MASK: u64 = 0b1111;
13651 pub const JSCVT_SHIFT: u32 = 12;
13653 pub const JSCVT_MASK: u64 = 0b1111;
13655 pub const FCMA_SHIFT: u32 = 16;
13657 pub const FCMA_MASK: u64 = 0b1111;
13659 pub const LRCPC_SHIFT: u32 = 20;
13661 pub const LRCPC_MASK: u64 = 0b1111;
13663 pub const GPA_SHIFT: u32 = 24;
13665 pub const GPA_MASK: u64 = 0b1111;
13667 pub const GPI_SHIFT: u32 = 28;
13669 pub const GPI_MASK: u64 = 0b1111;
13671 pub const FRINTTS_SHIFT: u32 = 32;
13673 pub const FRINTTS_MASK: u64 = 0b1111;
13675 pub const SB_SHIFT: u32 = 36;
13677 pub const SB_MASK: u64 = 0b1111;
13679 pub const SPECRES_SHIFT: u32 = 40;
13681 pub const SPECRES_MASK: u64 = 0b1111;
13683 pub const BF16_SHIFT: u32 = 44;
13685 pub const BF16_MASK: u64 = 0b1111;
13687 pub const DGH_SHIFT: u32 = 48;
13689 pub const DGH_MASK: u64 = 0b1111;
13691 pub const I8MM_SHIFT: u32 = 52;
13693 pub const I8MM_MASK: u64 = 0b1111;
13695 pub const XS_SHIFT: u32 = 56;
13697 pub const XS_MASK: u64 = 0b1111;
13699 pub const LS64_SHIFT: u32 = 60;
13701 pub const LS64_MASK: u64 = 0b1111;
13703
13704 pub const fn dpb(self) -> u8 {
13706 ((self.bits() >> Self::DPB_SHIFT) & 0b1111) as u8
13707 }
13708
13709 pub const fn set_dpb(&mut self, value: u8) {
13711 let offset = Self::DPB_SHIFT;
13712 assert!(value & (Self::DPB_MASK as u8) == value);
13713 *self = Self::from_bits_retain(
13714 (self.bits() & !(Self::DPB_MASK << offset)) | ((value as u64) << offset),
13715 );
13716 }
13717
13718 pub const fn with_dpb(mut self, value: u8) -> Self {
13720 self.set_dpb(value);
13721 self
13722 }
13723
13724 pub const fn apa(self) -> u8 {
13726 ((self.bits() >> Self::APA_SHIFT) & 0b1111) as u8
13727 }
13728
13729 pub const fn set_apa(&mut self, value: u8) {
13731 let offset = Self::APA_SHIFT;
13732 assert!(value & (Self::APA_MASK as u8) == value);
13733 *self = Self::from_bits_retain(
13734 (self.bits() & !(Self::APA_MASK << offset)) | ((value as u64) << offset),
13735 );
13736 }
13737
13738 pub const fn with_apa(mut self, value: u8) -> Self {
13740 self.set_apa(value);
13741 self
13742 }
13743
13744 pub const fn api(self) -> u8 {
13746 ((self.bits() >> Self::API_SHIFT) & 0b1111) as u8
13747 }
13748
13749 pub const fn set_api(&mut self, value: u8) {
13751 let offset = Self::API_SHIFT;
13752 assert!(value & (Self::API_MASK as u8) == value);
13753 *self = Self::from_bits_retain(
13754 (self.bits() & !(Self::API_MASK << offset)) | ((value as u64) << offset),
13755 );
13756 }
13757
13758 pub const fn with_api(mut self, value: u8) -> Self {
13760 self.set_api(value);
13761 self
13762 }
13763
13764 pub const fn jscvt(self) -> u8 {
13766 ((self.bits() >> Self::JSCVT_SHIFT) & 0b1111) as u8
13767 }
13768
13769 pub const fn set_jscvt(&mut self, value: u8) {
13771 let offset = Self::JSCVT_SHIFT;
13772 assert!(value & (Self::JSCVT_MASK as u8) == value);
13773 *self = Self::from_bits_retain(
13774 (self.bits() & !(Self::JSCVT_MASK << offset)) | ((value as u64) << offset),
13775 );
13776 }
13777
13778 pub const fn with_jscvt(mut self, value: u8) -> Self {
13780 self.set_jscvt(value);
13781 self
13782 }
13783
13784 pub const fn fcma(self) -> u8 {
13786 ((self.bits() >> Self::FCMA_SHIFT) & 0b1111) as u8
13787 }
13788
13789 pub const fn set_fcma(&mut self, value: u8) {
13791 let offset = Self::FCMA_SHIFT;
13792 assert!(value & (Self::FCMA_MASK as u8) == value);
13793 *self = Self::from_bits_retain(
13794 (self.bits() & !(Self::FCMA_MASK << offset)) | ((value as u64) << offset),
13795 );
13796 }
13797
13798 pub const fn with_fcma(mut self, value: u8) -> Self {
13800 self.set_fcma(value);
13801 self
13802 }
13803
13804 pub const fn lrcpc(self) -> u8 {
13806 ((self.bits() >> Self::LRCPC_SHIFT) & 0b1111) as u8
13807 }
13808
13809 pub const fn set_lrcpc(&mut self, value: u8) {
13811 let offset = Self::LRCPC_SHIFT;
13812 assert!(value & (Self::LRCPC_MASK as u8) == value);
13813 *self = Self::from_bits_retain(
13814 (self.bits() & !(Self::LRCPC_MASK << offset)) | ((value as u64) << offset),
13815 );
13816 }
13817
13818 pub const fn with_lrcpc(mut self, value: u8) -> Self {
13820 self.set_lrcpc(value);
13821 self
13822 }
13823
13824 pub const fn gpa(self) -> u8 {
13826 ((self.bits() >> Self::GPA_SHIFT) & 0b1111) as u8
13827 }
13828
13829 pub const fn set_gpa(&mut self, value: u8) {
13831 let offset = Self::GPA_SHIFT;
13832 assert!(value & (Self::GPA_MASK as u8) == value);
13833 *self = Self::from_bits_retain(
13834 (self.bits() & !(Self::GPA_MASK << offset)) | ((value as u64) << offset),
13835 );
13836 }
13837
13838 pub const fn with_gpa(mut self, value: u8) -> Self {
13840 self.set_gpa(value);
13841 self
13842 }
13843
13844 pub const fn gpi(self) -> u8 {
13846 ((self.bits() >> Self::GPI_SHIFT) & 0b1111) as u8
13847 }
13848
13849 pub const fn set_gpi(&mut self, value: u8) {
13851 let offset = Self::GPI_SHIFT;
13852 assert!(value & (Self::GPI_MASK as u8) == value);
13853 *self = Self::from_bits_retain(
13854 (self.bits() & !(Self::GPI_MASK << offset)) | ((value as u64) << offset),
13855 );
13856 }
13857
13858 pub const fn with_gpi(mut self, value: u8) -> Self {
13860 self.set_gpi(value);
13861 self
13862 }
13863
13864 pub const fn frintts(self) -> u8 {
13866 ((self.bits() >> Self::FRINTTS_SHIFT) & 0b1111) as u8
13867 }
13868
13869 pub const fn set_frintts(&mut self, value: u8) {
13871 let offset = Self::FRINTTS_SHIFT;
13872 assert!(value & (Self::FRINTTS_MASK as u8) == value);
13873 *self = Self::from_bits_retain(
13874 (self.bits() & !(Self::FRINTTS_MASK << offset)) | ((value as u64) << offset),
13875 );
13876 }
13877
13878 pub const fn with_frintts(mut self, value: u8) -> Self {
13880 self.set_frintts(value);
13881 self
13882 }
13883
13884 pub const fn sb(self) -> u8 {
13886 ((self.bits() >> Self::SB_SHIFT) & 0b1111) as u8
13887 }
13888
13889 pub const fn set_sb(&mut self, value: u8) {
13891 let offset = Self::SB_SHIFT;
13892 assert!(value & (Self::SB_MASK as u8) == value);
13893 *self = Self::from_bits_retain(
13894 (self.bits() & !(Self::SB_MASK << offset)) | ((value as u64) << offset),
13895 );
13896 }
13897
13898 pub const fn with_sb(mut self, value: u8) -> Self {
13900 self.set_sb(value);
13901 self
13902 }
13903
13904 pub const fn specres(self) -> u8 {
13906 ((self.bits() >> Self::SPECRES_SHIFT) & 0b1111) as u8
13907 }
13908
13909 pub const fn set_specres(&mut self, value: u8) {
13911 let offset = Self::SPECRES_SHIFT;
13912 assert!(value & (Self::SPECRES_MASK as u8) == value);
13913 *self = Self::from_bits_retain(
13914 (self.bits() & !(Self::SPECRES_MASK << offset)) | ((value as u64) << offset),
13915 );
13916 }
13917
13918 pub const fn with_specres(mut self, value: u8) -> Self {
13920 self.set_specres(value);
13921 self
13922 }
13923
13924 pub const fn bf16(self) -> u8 {
13926 ((self.bits() >> Self::BF16_SHIFT) & 0b1111) as u8
13927 }
13928
13929 pub const fn set_bf16(&mut self, value: u8) {
13931 let offset = Self::BF16_SHIFT;
13932 assert!(value & (Self::BF16_MASK as u8) == value);
13933 *self = Self::from_bits_retain(
13934 (self.bits() & !(Self::BF16_MASK << offset)) | ((value as u64) << offset),
13935 );
13936 }
13937
13938 pub const fn with_bf16(mut self, value: u8) -> Self {
13940 self.set_bf16(value);
13941 self
13942 }
13943
13944 pub const fn dgh(self) -> u8 {
13946 ((self.bits() >> Self::DGH_SHIFT) & 0b1111) as u8
13947 }
13948
13949 pub const fn set_dgh(&mut self, value: u8) {
13951 let offset = Self::DGH_SHIFT;
13952 assert!(value & (Self::DGH_MASK as u8) == value);
13953 *self = Self::from_bits_retain(
13954 (self.bits() & !(Self::DGH_MASK << offset)) | ((value as u64) << offset),
13955 );
13956 }
13957
13958 pub const fn with_dgh(mut self, value: u8) -> Self {
13960 self.set_dgh(value);
13961 self
13962 }
13963
13964 pub const fn i8mm(self) -> u8 {
13966 ((self.bits() >> Self::I8MM_SHIFT) & 0b1111) as u8
13967 }
13968
13969 pub const fn set_i8mm(&mut self, value: u8) {
13971 let offset = Self::I8MM_SHIFT;
13972 assert!(value & (Self::I8MM_MASK as u8) == value);
13973 *self = Self::from_bits_retain(
13974 (self.bits() & !(Self::I8MM_MASK << offset)) | ((value as u64) << offset),
13975 );
13976 }
13977
13978 pub const fn with_i8mm(mut self, value: u8) -> Self {
13980 self.set_i8mm(value);
13981 self
13982 }
13983
13984 pub const fn xs(self) -> u8 {
13986 ((self.bits() >> Self::XS_SHIFT) & 0b1111) as u8
13987 }
13988
13989 pub const fn set_xs(&mut self, value: u8) {
13991 let offset = Self::XS_SHIFT;
13992 assert!(value & (Self::XS_MASK as u8) == value);
13993 *self = Self::from_bits_retain(
13994 (self.bits() & !(Self::XS_MASK << offset)) | ((value as u64) << offset),
13995 );
13996 }
13997
13998 pub const fn with_xs(mut self, value: u8) -> Self {
14000 self.set_xs(value);
14001 self
14002 }
14003
14004 pub const fn ls64(self) -> u8 {
14006 ((self.bits() >> Self::LS64_SHIFT) & 0b1111) as u8
14007 }
14008
14009 pub const fn set_ls64(&mut self, value: u8) {
14011 let offset = Self::LS64_SHIFT;
14012 assert!(value & (Self::LS64_MASK as u8) == value);
14013 *self = Self::from_bits_retain(
14014 (self.bits() & !(Self::LS64_MASK << offset)) | ((value as u64) << offset),
14015 );
14016 }
14017
14018 pub const fn with_ls64(mut self, value: u8) -> Self {
14020 self.set_ls64(value);
14021 self
14022 }
14023}
14024
14025#[cfg(feature = "el1")]
14026bitflags! {
14027 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14029 #[repr(transparent)]
14030 pub struct IdAa64isar2El1: u64 {
14031 }
14032}
14033
14034#[cfg(feature = "el1")]
14035impl IdAa64isar2El1 {
14036 pub const WFXT_SHIFT: u32 = 0;
14038 pub const WFXT_MASK: u64 = 0b1111;
14040 pub const RPRES_SHIFT: u32 = 4;
14042 pub const RPRES_MASK: u64 = 0b1111;
14044 pub const GPA3_SHIFT: u32 = 8;
14046 pub const GPA3_MASK: u64 = 0b1111;
14048 pub const APA3_SHIFT: u32 = 12;
14050 pub const APA3_MASK: u64 = 0b1111;
14052 pub const MOPS_SHIFT: u32 = 16;
14054 pub const MOPS_MASK: u64 = 0b1111;
14056 pub const BC_SHIFT: u32 = 20;
14058 pub const BC_MASK: u64 = 0b1111;
14060 pub const PAC_FRAC_SHIFT: u32 = 24;
14062 pub const PAC_FRAC_MASK: u64 = 0b1111;
14064 pub const CLRBHB_SHIFT: u32 = 28;
14066 pub const CLRBHB_MASK: u64 = 0b1111;
14068 pub const SYSREG_128_SHIFT: u32 = 32;
14070 pub const SYSREG_128_MASK: u64 = 0b1111;
14072 pub const SYSINSTR_128_SHIFT: u32 = 36;
14074 pub const SYSINSTR_128_MASK: u64 = 0b1111;
14076 pub const PRFMSLC_SHIFT: u32 = 40;
14078 pub const PRFMSLC_MASK: u64 = 0b1111;
14080 pub const PCDPHINT_SHIFT: u32 = 44;
14082 pub const PCDPHINT_MASK: u64 = 0b1111;
14084 pub const RPRFM_SHIFT: u32 = 48;
14086 pub const RPRFM_MASK: u64 = 0b1111;
14088 pub const CSSC_SHIFT: u32 = 52;
14090 pub const CSSC_MASK: u64 = 0b1111;
14092 pub const LUT_SHIFT: u32 = 56;
14094 pub const LUT_MASK: u64 = 0b1111;
14096 pub const ATS1A_SHIFT: u32 = 60;
14098 pub const ATS1A_MASK: u64 = 0b1111;
14100
14101 pub const fn wfxt(self) -> u8 {
14103 ((self.bits() >> Self::WFXT_SHIFT) & 0b1111) as u8
14104 }
14105
14106 pub const fn set_wfxt(&mut self, value: u8) {
14108 let offset = Self::WFXT_SHIFT;
14109 assert!(value & (Self::WFXT_MASK as u8) == value);
14110 *self = Self::from_bits_retain(
14111 (self.bits() & !(Self::WFXT_MASK << offset)) | ((value as u64) << offset),
14112 );
14113 }
14114
14115 pub const fn with_wfxt(mut self, value: u8) -> Self {
14117 self.set_wfxt(value);
14118 self
14119 }
14120
14121 pub const fn rpres(self) -> u8 {
14123 ((self.bits() >> Self::RPRES_SHIFT) & 0b1111) as u8
14124 }
14125
14126 pub const fn set_rpres(&mut self, value: u8) {
14128 let offset = Self::RPRES_SHIFT;
14129 assert!(value & (Self::RPRES_MASK as u8) == value);
14130 *self = Self::from_bits_retain(
14131 (self.bits() & !(Self::RPRES_MASK << offset)) | ((value as u64) << offset),
14132 );
14133 }
14134
14135 pub const fn with_rpres(mut self, value: u8) -> Self {
14137 self.set_rpres(value);
14138 self
14139 }
14140
14141 pub const fn gpa3(self) -> u8 {
14143 ((self.bits() >> Self::GPA3_SHIFT) & 0b1111) as u8
14144 }
14145
14146 pub const fn set_gpa3(&mut self, value: u8) {
14148 let offset = Self::GPA3_SHIFT;
14149 assert!(value & (Self::GPA3_MASK as u8) == value);
14150 *self = Self::from_bits_retain(
14151 (self.bits() & !(Self::GPA3_MASK << offset)) | ((value as u64) << offset),
14152 );
14153 }
14154
14155 pub const fn with_gpa3(mut self, value: u8) -> Self {
14157 self.set_gpa3(value);
14158 self
14159 }
14160
14161 pub const fn apa3(self) -> u8 {
14163 ((self.bits() >> Self::APA3_SHIFT) & 0b1111) as u8
14164 }
14165
14166 pub const fn set_apa3(&mut self, value: u8) {
14168 let offset = Self::APA3_SHIFT;
14169 assert!(value & (Self::APA3_MASK as u8) == value);
14170 *self = Self::from_bits_retain(
14171 (self.bits() & !(Self::APA3_MASK << offset)) | ((value as u64) << offset),
14172 );
14173 }
14174
14175 pub const fn with_apa3(mut self, value: u8) -> Self {
14177 self.set_apa3(value);
14178 self
14179 }
14180
14181 pub const fn mops(self) -> u8 {
14183 ((self.bits() >> Self::MOPS_SHIFT) & 0b1111) as u8
14184 }
14185
14186 pub const fn set_mops(&mut self, value: u8) {
14188 let offset = Self::MOPS_SHIFT;
14189 assert!(value & (Self::MOPS_MASK as u8) == value);
14190 *self = Self::from_bits_retain(
14191 (self.bits() & !(Self::MOPS_MASK << offset)) | ((value as u64) << offset),
14192 );
14193 }
14194
14195 pub const fn with_mops(mut self, value: u8) -> Self {
14197 self.set_mops(value);
14198 self
14199 }
14200
14201 pub const fn bc(self) -> u8 {
14203 ((self.bits() >> Self::BC_SHIFT) & 0b1111) as u8
14204 }
14205
14206 pub const fn set_bc(&mut self, value: u8) {
14208 let offset = Self::BC_SHIFT;
14209 assert!(value & (Self::BC_MASK as u8) == value);
14210 *self = Self::from_bits_retain(
14211 (self.bits() & !(Self::BC_MASK << offset)) | ((value as u64) << offset),
14212 );
14213 }
14214
14215 pub const fn with_bc(mut self, value: u8) -> Self {
14217 self.set_bc(value);
14218 self
14219 }
14220
14221 pub const fn pac_frac(self) -> u8 {
14223 ((self.bits() >> Self::PAC_FRAC_SHIFT) & 0b1111) as u8
14224 }
14225
14226 pub const fn set_pac_frac(&mut self, value: u8) {
14228 let offset = Self::PAC_FRAC_SHIFT;
14229 assert!(value & (Self::PAC_FRAC_MASK as u8) == value);
14230 *self = Self::from_bits_retain(
14231 (self.bits() & !(Self::PAC_FRAC_MASK << offset)) | ((value as u64) << offset),
14232 );
14233 }
14234
14235 pub const fn with_pac_frac(mut self, value: u8) -> Self {
14237 self.set_pac_frac(value);
14238 self
14239 }
14240
14241 pub const fn clrbhb(self) -> u8 {
14243 ((self.bits() >> Self::CLRBHB_SHIFT) & 0b1111) as u8
14244 }
14245
14246 pub const fn set_clrbhb(&mut self, value: u8) {
14248 let offset = Self::CLRBHB_SHIFT;
14249 assert!(value & (Self::CLRBHB_MASK as u8) == value);
14250 *self = Self::from_bits_retain(
14251 (self.bits() & !(Self::CLRBHB_MASK << offset)) | ((value as u64) << offset),
14252 );
14253 }
14254
14255 pub const fn with_clrbhb(mut self, value: u8) -> Self {
14257 self.set_clrbhb(value);
14258 self
14259 }
14260
14261 pub const fn sysreg_128(self) -> u8 {
14263 ((self.bits() >> Self::SYSREG_128_SHIFT) & 0b1111) as u8
14264 }
14265
14266 pub const fn set_sysreg_128(&mut self, value: u8) {
14268 let offset = Self::SYSREG_128_SHIFT;
14269 assert!(value & (Self::SYSREG_128_MASK as u8) == value);
14270 *self = Self::from_bits_retain(
14271 (self.bits() & !(Self::SYSREG_128_MASK << offset)) | ((value as u64) << offset),
14272 );
14273 }
14274
14275 pub const fn with_sysreg_128(mut self, value: u8) -> Self {
14277 self.set_sysreg_128(value);
14278 self
14279 }
14280
14281 pub const fn sysinstr_128(self) -> u8 {
14283 ((self.bits() >> Self::SYSINSTR_128_SHIFT) & 0b1111) as u8
14284 }
14285
14286 pub const fn set_sysinstr_128(&mut self, value: u8) {
14288 let offset = Self::SYSINSTR_128_SHIFT;
14289 assert!(value & (Self::SYSINSTR_128_MASK as u8) == value);
14290 *self = Self::from_bits_retain(
14291 (self.bits() & !(Self::SYSINSTR_128_MASK << offset)) | ((value as u64) << offset),
14292 );
14293 }
14294
14295 pub const fn with_sysinstr_128(mut self, value: u8) -> Self {
14297 self.set_sysinstr_128(value);
14298 self
14299 }
14300
14301 pub const fn prfmslc(self) -> u8 {
14303 ((self.bits() >> Self::PRFMSLC_SHIFT) & 0b1111) as u8
14304 }
14305
14306 pub const fn set_prfmslc(&mut self, value: u8) {
14308 let offset = Self::PRFMSLC_SHIFT;
14309 assert!(value & (Self::PRFMSLC_MASK as u8) == value);
14310 *self = Self::from_bits_retain(
14311 (self.bits() & !(Self::PRFMSLC_MASK << offset)) | ((value as u64) << offset),
14312 );
14313 }
14314
14315 pub const fn with_prfmslc(mut self, value: u8) -> Self {
14317 self.set_prfmslc(value);
14318 self
14319 }
14320
14321 pub const fn pcdphint(self) -> u8 {
14323 ((self.bits() >> Self::PCDPHINT_SHIFT) & 0b1111) as u8
14324 }
14325
14326 pub const fn set_pcdphint(&mut self, value: u8) {
14328 let offset = Self::PCDPHINT_SHIFT;
14329 assert!(value & (Self::PCDPHINT_MASK as u8) == value);
14330 *self = Self::from_bits_retain(
14331 (self.bits() & !(Self::PCDPHINT_MASK << offset)) | ((value as u64) << offset),
14332 );
14333 }
14334
14335 pub const fn with_pcdphint(mut self, value: u8) -> Self {
14337 self.set_pcdphint(value);
14338 self
14339 }
14340
14341 pub const fn rprfm(self) -> u8 {
14343 ((self.bits() >> Self::RPRFM_SHIFT) & 0b1111) as u8
14344 }
14345
14346 pub const fn set_rprfm(&mut self, value: u8) {
14348 let offset = Self::RPRFM_SHIFT;
14349 assert!(value & (Self::RPRFM_MASK as u8) == value);
14350 *self = Self::from_bits_retain(
14351 (self.bits() & !(Self::RPRFM_MASK << offset)) | ((value as u64) << offset),
14352 );
14353 }
14354
14355 pub const fn with_rprfm(mut self, value: u8) -> Self {
14357 self.set_rprfm(value);
14358 self
14359 }
14360
14361 pub const fn cssc(self) -> u8 {
14363 ((self.bits() >> Self::CSSC_SHIFT) & 0b1111) as u8
14364 }
14365
14366 pub const fn set_cssc(&mut self, value: u8) {
14368 let offset = Self::CSSC_SHIFT;
14369 assert!(value & (Self::CSSC_MASK as u8) == value);
14370 *self = Self::from_bits_retain(
14371 (self.bits() & !(Self::CSSC_MASK << offset)) | ((value as u64) << offset),
14372 );
14373 }
14374
14375 pub const fn with_cssc(mut self, value: u8) -> Self {
14377 self.set_cssc(value);
14378 self
14379 }
14380
14381 pub const fn lut(self) -> u8 {
14383 ((self.bits() >> Self::LUT_SHIFT) & 0b1111) as u8
14384 }
14385
14386 pub const fn set_lut(&mut self, value: u8) {
14388 let offset = Self::LUT_SHIFT;
14389 assert!(value & (Self::LUT_MASK as u8) == value);
14390 *self = Self::from_bits_retain(
14391 (self.bits() & !(Self::LUT_MASK << offset)) | ((value as u64) << offset),
14392 );
14393 }
14394
14395 pub const fn with_lut(mut self, value: u8) -> Self {
14397 self.set_lut(value);
14398 self
14399 }
14400
14401 pub const fn ats1a(self) -> u8 {
14403 ((self.bits() >> Self::ATS1A_SHIFT) & 0b1111) as u8
14404 }
14405
14406 pub const fn set_ats1a(&mut self, value: u8) {
14408 let offset = Self::ATS1A_SHIFT;
14409 assert!(value & (Self::ATS1A_MASK as u8) == value);
14410 *self = Self::from_bits_retain(
14411 (self.bits() & !(Self::ATS1A_MASK << offset)) | ((value as u64) << offset),
14412 );
14413 }
14414
14415 pub const fn with_ats1a(mut self, value: u8) -> Self {
14417 self.set_ats1a(value);
14418 self
14419 }
14420}
14421
14422#[cfg(feature = "el1")]
14423bitflags! {
14424 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14426 #[repr(transparent)]
14427 pub struct IdAa64mmfr0El1: u64 {
14428 }
14429}
14430
14431#[cfg(feature = "el1")]
14432impl IdAa64mmfr0El1 {
14433 pub const PARANGE_SHIFT: u32 = 0;
14435 pub const PARANGE_MASK: u64 = 0b1111;
14437 pub const ASIDBITS_SHIFT: u32 = 4;
14439 pub const ASIDBITS_MASK: u64 = 0b1111;
14441 pub const BIGEND_SHIFT: u32 = 8;
14443 pub const BIGEND_MASK: u64 = 0b1111;
14445 pub const SNSMEM_SHIFT: u32 = 12;
14447 pub const SNSMEM_MASK: u64 = 0b1111;
14449 pub const BIGENDEL0_SHIFT: u32 = 16;
14451 pub const BIGENDEL0_MASK: u64 = 0b1111;
14453 pub const TGRAN16_SHIFT: u32 = 20;
14455 pub const TGRAN16_MASK: u64 = 0b1111;
14457 pub const TGRAN64_SHIFT: u32 = 24;
14459 pub const TGRAN64_MASK: u64 = 0b1111;
14461 pub const TGRAN4_SHIFT: u32 = 28;
14463 pub const TGRAN4_MASK: u64 = 0b1111;
14465 pub const TGRAN16_2_SHIFT: u32 = 32;
14467 pub const TGRAN16_2_MASK: u64 = 0b1111;
14469 pub const TGRAN64_2_SHIFT: u32 = 36;
14471 pub const TGRAN64_2_MASK: u64 = 0b1111;
14473 pub const TGRAN4_2_SHIFT: u32 = 40;
14475 pub const TGRAN4_2_MASK: u64 = 0b1111;
14477 pub const EXS_SHIFT: u32 = 44;
14479 pub const EXS_MASK: u64 = 0b1111;
14481 pub const FGT_SHIFT: u32 = 56;
14483 pub const FGT_MASK: u64 = 0b1111;
14485 pub const ECV_SHIFT: u32 = 60;
14487 pub const ECV_MASK: u64 = 0b1111;
14489
14490 pub const fn parange(self) -> u8 {
14492 ((self.bits() >> Self::PARANGE_SHIFT) & 0b1111) as u8
14493 }
14494
14495 pub const fn set_parange(&mut self, value: u8) {
14497 let offset = Self::PARANGE_SHIFT;
14498 assert!(value & (Self::PARANGE_MASK as u8) == value);
14499 *self = Self::from_bits_retain(
14500 (self.bits() & !(Self::PARANGE_MASK << offset)) | ((value as u64) << offset),
14501 );
14502 }
14503
14504 pub const fn with_parange(mut self, value: u8) -> Self {
14506 self.set_parange(value);
14507 self
14508 }
14509
14510 pub const fn asidbits(self) -> u8 {
14512 ((self.bits() >> Self::ASIDBITS_SHIFT) & 0b1111) as u8
14513 }
14514
14515 pub const fn set_asidbits(&mut self, value: u8) {
14517 let offset = Self::ASIDBITS_SHIFT;
14518 assert!(value & (Self::ASIDBITS_MASK as u8) == value);
14519 *self = Self::from_bits_retain(
14520 (self.bits() & !(Self::ASIDBITS_MASK << offset)) | ((value as u64) << offset),
14521 );
14522 }
14523
14524 pub const fn with_asidbits(mut self, value: u8) -> Self {
14526 self.set_asidbits(value);
14527 self
14528 }
14529
14530 pub const fn bigend(self) -> u8 {
14532 ((self.bits() >> Self::BIGEND_SHIFT) & 0b1111) as u8
14533 }
14534
14535 pub const fn set_bigend(&mut self, value: u8) {
14537 let offset = Self::BIGEND_SHIFT;
14538 assert!(value & (Self::BIGEND_MASK as u8) == value);
14539 *self = Self::from_bits_retain(
14540 (self.bits() & !(Self::BIGEND_MASK << offset)) | ((value as u64) << offset),
14541 );
14542 }
14543
14544 pub const fn with_bigend(mut self, value: u8) -> Self {
14546 self.set_bigend(value);
14547 self
14548 }
14549
14550 pub const fn snsmem(self) -> u8 {
14552 ((self.bits() >> Self::SNSMEM_SHIFT) & 0b1111) as u8
14553 }
14554
14555 pub const fn set_snsmem(&mut self, value: u8) {
14557 let offset = Self::SNSMEM_SHIFT;
14558 assert!(value & (Self::SNSMEM_MASK as u8) == value);
14559 *self = Self::from_bits_retain(
14560 (self.bits() & !(Self::SNSMEM_MASK << offset)) | ((value as u64) << offset),
14561 );
14562 }
14563
14564 pub const fn with_snsmem(mut self, value: u8) -> Self {
14566 self.set_snsmem(value);
14567 self
14568 }
14569
14570 pub const fn bigendel0(self) -> u8 {
14572 ((self.bits() >> Self::BIGENDEL0_SHIFT) & 0b1111) as u8
14573 }
14574
14575 pub const fn set_bigendel0(&mut self, value: u8) {
14577 let offset = Self::BIGENDEL0_SHIFT;
14578 assert!(value & (Self::BIGENDEL0_MASK as u8) == value);
14579 *self = Self::from_bits_retain(
14580 (self.bits() & !(Self::BIGENDEL0_MASK << offset)) | ((value as u64) << offset),
14581 );
14582 }
14583
14584 pub const fn with_bigendel0(mut self, value: u8) -> Self {
14586 self.set_bigendel0(value);
14587 self
14588 }
14589
14590 pub const fn tgran16(self) -> u8 {
14592 ((self.bits() >> Self::TGRAN16_SHIFT) & 0b1111) as u8
14593 }
14594
14595 pub const fn set_tgran16(&mut self, value: u8) {
14597 let offset = Self::TGRAN16_SHIFT;
14598 assert!(value & (Self::TGRAN16_MASK as u8) == value);
14599 *self = Self::from_bits_retain(
14600 (self.bits() & !(Self::TGRAN16_MASK << offset)) | ((value as u64) << offset),
14601 );
14602 }
14603
14604 pub const fn with_tgran16(mut self, value: u8) -> Self {
14606 self.set_tgran16(value);
14607 self
14608 }
14609
14610 pub const fn tgran64(self) -> u8 {
14612 ((self.bits() >> Self::TGRAN64_SHIFT) & 0b1111) as u8
14613 }
14614
14615 pub const fn set_tgran64(&mut self, value: u8) {
14617 let offset = Self::TGRAN64_SHIFT;
14618 assert!(value & (Self::TGRAN64_MASK as u8) == value);
14619 *self = Self::from_bits_retain(
14620 (self.bits() & !(Self::TGRAN64_MASK << offset)) | ((value as u64) << offset),
14621 );
14622 }
14623
14624 pub const fn with_tgran64(mut self, value: u8) -> Self {
14626 self.set_tgran64(value);
14627 self
14628 }
14629
14630 pub const fn tgran4(self) -> u8 {
14632 ((self.bits() >> Self::TGRAN4_SHIFT) & 0b1111) as u8
14633 }
14634
14635 pub const fn set_tgran4(&mut self, value: u8) {
14637 let offset = Self::TGRAN4_SHIFT;
14638 assert!(value & (Self::TGRAN4_MASK as u8) == value);
14639 *self = Self::from_bits_retain(
14640 (self.bits() & !(Self::TGRAN4_MASK << offset)) | ((value as u64) << offset),
14641 );
14642 }
14643
14644 pub const fn with_tgran4(mut self, value: u8) -> Self {
14646 self.set_tgran4(value);
14647 self
14648 }
14649
14650 pub const fn tgran16_2(self) -> u8 {
14652 ((self.bits() >> Self::TGRAN16_2_SHIFT) & 0b1111) as u8
14653 }
14654
14655 pub const fn set_tgran16_2(&mut self, value: u8) {
14657 let offset = Self::TGRAN16_2_SHIFT;
14658 assert!(value & (Self::TGRAN16_2_MASK as u8) == value);
14659 *self = Self::from_bits_retain(
14660 (self.bits() & !(Self::TGRAN16_2_MASK << offset)) | ((value as u64) << offset),
14661 );
14662 }
14663
14664 pub const fn with_tgran16_2(mut self, value: u8) -> Self {
14666 self.set_tgran16_2(value);
14667 self
14668 }
14669
14670 pub const fn tgran64_2(self) -> u8 {
14672 ((self.bits() >> Self::TGRAN64_2_SHIFT) & 0b1111) as u8
14673 }
14674
14675 pub const fn set_tgran64_2(&mut self, value: u8) {
14677 let offset = Self::TGRAN64_2_SHIFT;
14678 assert!(value & (Self::TGRAN64_2_MASK as u8) == value);
14679 *self = Self::from_bits_retain(
14680 (self.bits() & !(Self::TGRAN64_2_MASK << offset)) | ((value as u64) << offset),
14681 );
14682 }
14683
14684 pub const fn with_tgran64_2(mut self, value: u8) -> Self {
14686 self.set_tgran64_2(value);
14687 self
14688 }
14689
14690 pub const fn tgran4_2(self) -> u8 {
14692 ((self.bits() >> Self::TGRAN4_2_SHIFT) & 0b1111) as u8
14693 }
14694
14695 pub const fn set_tgran4_2(&mut self, value: u8) {
14697 let offset = Self::TGRAN4_2_SHIFT;
14698 assert!(value & (Self::TGRAN4_2_MASK as u8) == value);
14699 *self = Self::from_bits_retain(
14700 (self.bits() & !(Self::TGRAN4_2_MASK << offset)) | ((value as u64) << offset),
14701 );
14702 }
14703
14704 pub const fn with_tgran4_2(mut self, value: u8) -> Self {
14706 self.set_tgran4_2(value);
14707 self
14708 }
14709
14710 pub const fn exs(self) -> u8 {
14712 ((self.bits() >> Self::EXS_SHIFT) & 0b1111) as u8
14713 }
14714
14715 pub const fn set_exs(&mut self, value: u8) {
14717 let offset = Self::EXS_SHIFT;
14718 assert!(value & (Self::EXS_MASK as u8) == value);
14719 *self = Self::from_bits_retain(
14720 (self.bits() & !(Self::EXS_MASK << offset)) | ((value as u64) << offset),
14721 );
14722 }
14723
14724 pub const fn with_exs(mut self, value: u8) -> Self {
14726 self.set_exs(value);
14727 self
14728 }
14729
14730 pub const fn fgt(self) -> u8 {
14732 ((self.bits() >> Self::FGT_SHIFT) & 0b1111) as u8
14733 }
14734
14735 pub const fn set_fgt(&mut self, value: u8) {
14737 let offset = Self::FGT_SHIFT;
14738 assert!(value & (Self::FGT_MASK as u8) == value);
14739 *self = Self::from_bits_retain(
14740 (self.bits() & !(Self::FGT_MASK << offset)) | ((value as u64) << offset),
14741 );
14742 }
14743
14744 pub const fn with_fgt(mut self, value: u8) -> Self {
14746 self.set_fgt(value);
14747 self
14748 }
14749
14750 pub const fn ecv(self) -> u8 {
14752 ((self.bits() >> Self::ECV_SHIFT) & 0b1111) as u8
14753 }
14754
14755 pub const fn set_ecv(&mut self, value: u8) {
14757 let offset = Self::ECV_SHIFT;
14758 assert!(value & (Self::ECV_MASK as u8) == value);
14759 *self = Self::from_bits_retain(
14760 (self.bits() & !(Self::ECV_MASK << offset)) | ((value as u64) << offset),
14761 );
14762 }
14763
14764 pub const fn with_ecv(mut self, value: u8) -> Self {
14766 self.set_ecv(value);
14767 self
14768 }
14769}
14770
14771#[cfg(feature = "el1")]
14772bitflags! {
14773 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14775 #[repr(transparent)]
14776 pub struct IdAa64mmfr1El1: u64 {
14777 }
14778}
14779
14780#[cfg(feature = "el1")]
14781impl IdAa64mmfr1El1 {
14782 pub const HAFDBS_SHIFT: u32 = 0;
14784 pub const HAFDBS_MASK: u64 = 0b1111;
14786 pub const VMIDBITS_SHIFT: u32 = 4;
14788 pub const VMIDBITS_MASK: u64 = 0b1111;
14790 pub const VH_SHIFT: u32 = 8;
14792 pub const VH_MASK: u64 = 0b1111;
14794 pub const HPDS_SHIFT: u32 = 12;
14796 pub const HPDS_MASK: u64 = 0b1111;
14798 pub const LO_SHIFT: u32 = 16;
14800 pub const LO_MASK: u64 = 0b1111;
14802 pub const PAN_SHIFT: u32 = 20;
14804 pub const PAN_MASK: u64 = 0b1111;
14806 pub const SPECSEI_SHIFT: u32 = 24;
14808 pub const SPECSEI_MASK: u64 = 0b1111;
14810 pub const XNX_SHIFT: u32 = 28;
14812 pub const XNX_MASK: u64 = 0b1111;
14814 pub const TWED_SHIFT: u32 = 32;
14816 pub const TWED_MASK: u64 = 0b1111;
14818 pub const ETS_SHIFT: u32 = 36;
14820 pub const ETS_MASK: u64 = 0b1111;
14822 pub const HCX_SHIFT: u32 = 40;
14824 pub const HCX_MASK: u64 = 0b1111;
14826 pub const AFP_SHIFT: u32 = 44;
14828 pub const AFP_MASK: u64 = 0b1111;
14830 pub const NTLBPA_SHIFT: u32 = 48;
14832 pub const NTLBPA_MASK: u64 = 0b1111;
14834 pub const TIDCP1_SHIFT: u32 = 52;
14836 pub const TIDCP1_MASK: u64 = 0b1111;
14838 pub const CMOW_SHIFT: u32 = 56;
14840 pub const CMOW_MASK: u64 = 0b1111;
14842 pub const ECBHB_SHIFT: u32 = 60;
14844 pub const ECBHB_MASK: u64 = 0b1111;
14846
14847 pub const fn hafdbs(self) -> u8 {
14849 ((self.bits() >> Self::HAFDBS_SHIFT) & 0b1111) as u8
14850 }
14851
14852 pub const fn set_hafdbs(&mut self, value: u8) {
14854 let offset = Self::HAFDBS_SHIFT;
14855 assert!(value & (Self::HAFDBS_MASK as u8) == value);
14856 *self = Self::from_bits_retain(
14857 (self.bits() & !(Self::HAFDBS_MASK << offset)) | ((value as u64) << offset),
14858 );
14859 }
14860
14861 pub const fn with_hafdbs(mut self, value: u8) -> Self {
14863 self.set_hafdbs(value);
14864 self
14865 }
14866
14867 pub const fn vmidbits(self) -> u8 {
14869 ((self.bits() >> Self::VMIDBITS_SHIFT) & 0b1111) as u8
14870 }
14871
14872 pub const fn set_vmidbits(&mut self, value: u8) {
14874 let offset = Self::VMIDBITS_SHIFT;
14875 assert!(value & (Self::VMIDBITS_MASK as u8) == value);
14876 *self = Self::from_bits_retain(
14877 (self.bits() & !(Self::VMIDBITS_MASK << offset)) | ((value as u64) << offset),
14878 );
14879 }
14880
14881 pub const fn with_vmidbits(mut self, value: u8) -> Self {
14883 self.set_vmidbits(value);
14884 self
14885 }
14886
14887 pub const fn vh(self) -> u8 {
14889 ((self.bits() >> Self::VH_SHIFT) & 0b1111) as u8
14890 }
14891
14892 pub const fn set_vh(&mut self, value: u8) {
14894 let offset = Self::VH_SHIFT;
14895 assert!(value & (Self::VH_MASK as u8) == value);
14896 *self = Self::from_bits_retain(
14897 (self.bits() & !(Self::VH_MASK << offset)) | ((value as u64) << offset),
14898 );
14899 }
14900
14901 pub const fn with_vh(mut self, value: u8) -> Self {
14903 self.set_vh(value);
14904 self
14905 }
14906
14907 pub const fn hpds(self) -> u8 {
14909 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
14910 }
14911
14912 pub const fn set_hpds(&mut self, value: u8) {
14914 let offset = Self::HPDS_SHIFT;
14915 assert!(value & (Self::HPDS_MASK as u8) == value);
14916 *self = Self::from_bits_retain(
14917 (self.bits() & !(Self::HPDS_MASK << offset)) | ((value as u64) << offset),
14918 );
14919 }
14920
14921 pub const fn with_hpds(mut self, value: u8) -> Self {
14923 self.set_hpds(value);
14924 self
14925 }
14926
14927 pub const fn lo(self) -> u8 {
14929 ((self.bits() >> Self::LO_SHIFT) & 0b1111) as u8
14930 }
14931
14932 pub const fn set_lo(&mut self, value: u8) {
14934 let offset = Self::LO_SHIFT;
14935 assert!(value & (Self::LO_MASK as u8) == value);
14936 *self = Self::from_bits_retain(
14937 (self.bits() & !(Self::LO_MASK << offset)) | ((value as u64) << offset),
14938 );
14939 }
14940
14941 pub const fn with_lo(mut self, value: u8) -> Self {
14943 self.set_lo(value);
14944 self
14945 }
14946
14947 pub const fn pan(self) -> u8 {
14949 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
14950 }
14951
14952 pub const fn set_pan(&mut self, value: u8) {
14954 let offset = Self::PAN_SHIFT;
14955 assert!(value & (Self::PAN_MASK as u8) == value);
14956 *self = Self::from_bits_retain(
14957 (self.bits() & !(Self::PAN_MASK << offset)) | ((value as u64) << offset),
14958 );
14959 }
14960
14961 pub const fn with_pan(mut self, value: u8) -> Self {
14963 self.set_pan(value);
14964 self
14965 }
14966
14967 pub const fn specsei(self) -> u8 {
14969 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
14970 }
14971
14972 pub const fn set_specsei(&mut self, value: u8) {
14974 let offset = Self::SPECSEI_SHIFT;
14975 assert!(value & (Self::SPECSEI_MASK as u8) == value);
14976 *self = Self::from_bits_retain(
14977 (self.bits() & !(Self::SPECSEI_MASK << offset)) | ((value as u64) << offset),
14978 );
14979 }
14980
14981 pub const fn with_specsei(mut self, value: u8) -> Self {
14983 self.set_specsei(value);
14984 self
14985 }
14986
14987 pub const fn xnx(self) -> u8 {
14989 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
14990 }
14991
14992 pub const fn set_xnx(&mut self, value: u8) {
14994 let offset = Self::XNX_SHIFT;
14995 assert!(value & (Self::XNX_MASK as u8) == value);
14996 *self = Self::from_bits_retain(
14997 (self.bits() & !(Self::XNX_MASK << offset)) | ((value as u64) << offset),
14998 );
14999 }
15000
15001 pub const fn with_xnx(mut self, value: u8) -> Self {
15003 self.set_xnx(value);
15004 self
15005 }
15006
15007 pub const fn twed(self) -> u8 {
15009 ((self.bits() >> Self::TWED_SHIFT) & 0b1111) as u8
15010 }
15011
15012 pub const fn set_twed(&mut self, value: u8) {
15014 let offset = Self::TWED_SHIFT;
15015 assert!(value & (Self::TWED_MASK as u8) == value);
15016 *self = Self::from_bits_retain(
15017 (self.bits() & !(Self::TWED_MASK << offset)) | ((value as u64) << offset),
15018 );
15019 }
15020
15021 pub const fn with_twed(mut self, value: u8) -> Self {
15023 self.set_twed(value);
15024 self
15025 }
15026
15027 pub const fn ets(self) -> u8 {
15029 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
15030 }
15031
15032 pub const fn set_ets(&mut self, value: u8) {
15034 let offset = Self::ETS_SHIFT;
15035 assert!(value & (Self::ETS_MASK as u8) == value);
15036 *self = Self::from_bits_retain(
15037 (self.bits() & !(Self::ETS_MASK << offset)) | ((value as u64) << offset),
15038 );
15039 }
15040
15041 pub const fn with_ets(mut self, value: u8) -> Self {
15043 self.set_ets(value);
15044 self
15045 }
15046
15047 pub const fn hcx(self) -> u8 {
15049 ((self.bits() >> Self::HCX_SHIFT) & 0b1111) as u8
15050 }
15051
15052 pub const fn set_hcx(&mut self, value: u8) {
15054 let offset = Self::HCX_SHIFT;
15055 assert!(value & (Self::HCX_MASK as u8) == value);
15056 *self = Self::from_bits_retain(
15057 (self.bits() & !(Self::HCX_MASK << offset)) | ((value as u64) << offset),
15058 );
15059 }
15060
15061 pub const fn with_hcx(mut self, value: u8) -> Self {
15063 self.set_hcx(value);
15064 self
15065 }
15066
15067 pub const fn afp(self) -> u8 {
15069 ((self.bits() >> Self::AFP_SHIFT) & 0b1111) as u8
15070 }
15071
15072 pub const fn set_afp(&mut self, value: u8) {
15074 let offset = Self::AFP_SHIFT;
15075 assert!(value & (Self::AFP_MASK as u8) == value);
15076 *self = Self::from_bits_retain(
15077 (self.bits() & !(Self::AFP_MASK << offset)) | ((value as u64) << offset),
15078 );
15079 }
15080
15081 pub const fn with_afp(mut self, value: u8) -> Self {
15083 self.set_afp(value);
15084 self
15085 }
15086
15087 pub const fn ntlbpa(self) -> u8 {
15089 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
15090 }
15091
15092 pub const fn set_ntlbpa(&mut self, value: u8) {
15094 let offset = Self::NTLBPA_SHIFT;
15095 assert!(value & (Self::NTLBPA_MASK as u8) == value);
15096 *self = Self::from_bits_retain(
15097 (self.bits() & !(Self::NTLBPA_MASK << offset)) | ((value as u64) << offset),
15098 );
15099 }
15100
15101 pub const fn with_ntlbpa(mut self, value: u8) -> Self {
15103 self.set_ntlbpa(value);
15104 self
15105 }
15106
15107 pub const fn tidcp1(self) -> u8 {
15109 ((self.bits() >> Self::TIDCP1_SHIFT) & 0b1111) as u8
15110 }
15111
15112 pub const fn set_tidcp1(&mut self, value: u8) {
15114 let offset = Self::TIDCP1_SHIFT;
15115 assert!(value & (Self::TIDCP1_MASK as u8) == value);
15116 *self = Self::from_bits_retain(
15117 (self.bits() & !(Self::TIDCP1_MASK << offset)) | ((value as u64) << offset),
15118 );
15119 }
15120
15121 pub const fn with_tidcp1(mut self, value: u8) -> Self {
15123 self.set_tidcp1(value);
15124 self
15125 }
15126
15127 pub const fn cmow(self) -> u8 {
15129 ((self.bits() >> Self::CMOW_SHIFT) & 0b1111) as u8
15130 }
15131
15132 pub const fn set_cmow(&mut self, value: u8) {
15134 let offset = Self::CMOW_SHIFT;
15135 assert!(value & (Self::CMOW_MASK as u8) == value);
15136 *self = Self::from_bits_retain(
15137 (self.bits() & !(Self::CMOW_MASK << offset)) | ((value as u64) << offset),
15138 );
15139 }
15140
15141 pub const fn with_cmow(mut self, value: u8) -> Self {
15143 self.set_cmow(value);
15144 self
15145 }
15146
15147 pub const fn ecbhb(self) -> u8 {
15149 ((self.bits() >> Self::ECBHB_SHIFT) & 0b1111) as u8
15150 }
15151
15152 pub const fn set_ecbhb(&mut self, value: u8) {
15154 let offset = Self::ECBHB_SHIFT;
15155 assert!(value & (Self::ECBHB_MASK as u8) == value);
15156 *self = Self::from_bits_retain(
15157 (self.bits() & !(Self::ECBHB_MASK << offset)) | ((value as u64) << offset),
15158 );
15159 }
15160
15161 pub const fn with_ecbhb(mut self, value: u8) -> Self {
15163 self.set_ecbhb(value);
15164 self
15165 }
15166}
15167
15168#[cfg(feature = "el1")]
15169bitflags! {
15170 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
15172 #[repr(transparent)]
15173 pub struct IdAa64mmfr2El1: u64 {
15174 }
15175}
15176
15177#[cfg(feature = "el1")]
15178impl IdAa64mmfr2El1 {
15179 pub const CNP_SHIFT: u32 = 0;
15181 pub const CNP_MASK: u64 = 0b1111;
15183 pub const UAO_SHIFT: u32 = 4;
15185 pub const UAO_MASK: u64 = 0b1111;
15187 pub const LSM_SHIFT: u32 = 8;
15189 pub const LSM_MASK: u64 = 0b1111;
15191 pub const IESB_SHIFT: u32 = 12;
15193 pub const IESB_MASK: u64 = 0b1111;
15195 pub const VARANGE_SHIFT: u32 = 16;
15197 pub const VARANGE_MASK: u64 = 0b1111;
15199 pub const CCIDX_SHIFT: u32 = 20;
15201 pub const CCIDX_MASK: u64 = 0b1111;
15203 pub const NV_SHIFT: u32 = 24;
15205 pub const NV_MASK: u64 = 0b1111;
15207 pub const ST_SHIFT: u32 = 28;
15209 pub const ST_MASK: u64 = 0b1111;
15211 pub const AT_SHIFT: u32 = 32;
15213 pub const AT_MASK: u64 = 0b1111;
15215 pub const IDS_SHIFT: u32 = 36;
15217 pub const IDS_MASK: u64 = 0b1111;
15219 pub const FWB_SHIFT: u32 = 40;
15221 pub const FWB_MASK: u64 = 0b1111;
15223 pub const TTL_SHIFT: u32 = 48;
15225 pub const TTL_MASK: u64 = 0b1111;
15227 pub const BBM_SHIFT: u32 = 52;
15229 pub const BBM_MASK: u64 = 0b1111;
15231 pub const EVT_SHIFT: u32 = 56;
15233 pub const EVT_MASK: u64 = 0b1111;
15235 pub const E0PD_SHIFT: u32 = 60;
15237 pub const E0PD_MASK: u64 = 0b1111;
15239
15240 pub const fn cnp(self) -> u8 {
15242 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
15243 }
15244
15245 pub const fn set_cnp(&mut self, value: u8) {
15247 let offset = Self::CNP_SHIFT;
15248 assert!(value & (Self::CNP_MASK as u8) == value);
15249 *self = Self::from_bits_retain(
15250 (self.bits() & !(Self::CNP_MASK << offset)) | ((value as u64) << offset),
15251 );
15252 }
15253
15254 pub const fn with_cnp(mut self, value: u8) -> Self {
15256 self.set_cnp(value);
15257 self
15258 }
15259
15260 pub const fn uao(self) -> u8 {
15262 ((self.bits() >> Self::UAO_SHIFT) & 0b1111) as u8
15263 }
15264
15265 pub const fn set_uao(&mut self, value: u8) {
15267 let offset = Self::UAO_SHIFT;
15268 assert!(value & (Self::UAO_MASK as u8) == value);
15269 *self = Self::from_bits_retain(
15270 (self.bits() & !(Self::UAO_MASK << offset)) | ((value as u64) << offset),
15271 );
15272 }
15273
15274 pub const fn with_uao(mut self, value: u8) -> Self {
15276 self.set_uao(value);
15277 self
15278 }
15279
15280 pub const fn lsm(self) -> u8 {
15282 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
15283 }
15284
15285 pub const fn set_lsm(&mut self, value: u8) {
15287 let offset = Self::LSM_SHIFT;
15288 assert!(value & (Self::LSM_MASK as u8) == value);
15289 *self = Self::from_bits_retain(
15290 (self.bits() & !(Self::LSM_MASK << offset)) | ((value as u64) << offset),
15291 );
15292 }
15293
15294 pub const fn with_lsm(mut self, value: u8) -> Self {
15296 self.set_lsm(value);
15297 self
15298 }
15299
15300 pub const fn iesb(self) -> u8 {
15302 ((self.bits() >> Self::IESB_SHIFT) & 0b1111) as u8
15303 }
15304
15305 pub const fn set_iesb(&mut self, value: u8) {
15307 let offset = Self::IESB_SHIFT;
15308 assert!(value & (Self::IESB_MASK as u8) == value);
15309 *self = Self::from_bits_retain(
15310 (self.bits() & !(Self::IESB_MASK << offset)) | ((value as u64) << offset),
15311 );
15312 }
15313
15314 pub const fn with_iesb(mut self, value: u8) -> Self {
15316 self.set_iesb(value);
15317 self
15318 }
15319
15320 pub const fn varange(self) -> u8 {
15322 ((self.bits() >> Self::VARANGE_SHIFT) & 0b1111) as u8
15323 }
15324
15325 pub const fn set_varange(&mut self, value: u8) {
15327 let offset = Self::VARANGE_SHIFT;
15328 assert!(value & (Self::VARANGE_MASK as u8) == value);
15329 *self = Self::from_bits_retain(
15330 (self.bits() & !(Self::VARANGE_MASK << offset)) | ((value as u64) << offset),
15331 );
15332 }
15333
15334 pub const fn with_varange(mut self, value: u8) -> Self {
15336 self.set_varange(value);
15337 self
15338 }
15339
15340 pub const fn ccidx(self) -> u8 {
15342 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
15343 }
15344
15345 pub const fn set_ccidx(&mut self, value: u8) {
15347 let offset = Self::CCIDX_SHIFT;
15348 assert!(value & (Self::CCIDX_MASK as u8) == value);
15349 *self = Self::from_bits_retain(
15350 (self.bits() & !(Self::CCIDX_MASK << offset)) | ((value as u64) << offset),
15351 );
15352 }
15353
15354 pub const fn with_ccidx(mut self, value: u8) -> Self {
15356 self.set_ccidx(value);
15357 self
15358 }
15359
15360 pub const fn nv(self) -> u8 {
15362 ((self.bits() >> Self::NV_SHIFT) & 0b1111) as u8
15363 }
15364
15365 pub const fn set_nv(&mut self, value: u8) {
15367 let offset = Self::NV_SHIFT;
15368 assert!(value & (Self::NV_MASK as u8) == value);
15369 *self = Self::from_bits_retain(
15370 (self.bits() & !(Self::NV_MASK << offset)) | ((value as u64) << offset),
15371 );
15372 }
15373
15374 pub const fn with_nv(mut self, value: u8) -> Self {
15376 self.set_nv(value);
15377 self
15378 }
15379
15380 pub const fn st(self) -> u8 {
15382 ((self.bits() >> Self::ST_SHIFT) & 0b1111) as u8
15383 }
15384
15385 pub const fn set_st(&mut self, value: u8) {
15387 let offset = Self::ST_SHIFT;
15388 assert!(value & (Self::ST_MASK as u8) == value);
15389 *self = Self::from_bits_retain(
15390 (self.bits() & !(Self::ST_MASK << offset)) | ((value as u64) << offset),
15391 );
15392 }
15393
15394 pub const fn with_st(mut self, value: u8) -> Self {
15396 self.set_st(value);
15397 self
15398 }
15399
15400 pub const fn at(self) -> u8 {
15402 ((self.bits() >> Self::AT_SHIFT) & 0b1111) as u8
15403 }
15404
15405 pub const fn set_at(&mut self, value: u8) {
15407 let offset = Self::AT_SHIFT;
15408 assert!(value & (Self::AT_MASK as u8) == value);
15409 *self = Self::from_bits_retain(
15410 (self.bits() & !(Self::AT_MASK << offset)) | ((value as u64) << offset),
15411 );
15412 }
15413
15414 pub const fn with_at(mut self, value: u8) -> Self {
15416 self.set_at(value);
15417 self
15418 }
15419
15420 pub const fn ids(self) -> u8 {
15422 ((self.bits() >> Self::IDS_SHIFT) & 0b1111) as u8
15423 }
15424
15425 pub const fn set_ids(&mut self, value: u8) {
15427 let offset = Self::IDS_SHIFT;
15428 assert!(value & (Self::IDS_MASK as u8) == value);
15429 *self = Self::from_bits_retain(
15430 (self.bits() & !(Self::IDS_MASK << offset)) | ((value as u64) << offset),
15431 );
15432 }
15433
15434 pub const fn with_ids(mut self, value: u8) -> Self {
15436 self.set_ids(value);
15437 self
15438 }
15439
15440 pub const fn fwb(self) -> u8 {
15442 ((self.bits() >> Self::FWB_SHIFT) & 0b1111) as u8
15443 }
15444
15445 pub const fn set_fwb(&mut self, value: u8) {
15447 let offset = Self::FWB_SHIFT;
15448 assert!(value & (Self::FWB_MASK as u8) == value);
15449 *self = Self::from_bits_retain(
15450 (self.bits() & !(Self::FWB_MASK << offset)) | ((value as u64) << offset),
15451 );
15452 }
15453
15454 pub const fn with_fwb(mut self, value: u8) -> Self {
15456 self.set_fwb(value);
15457 self
15458 }
15459
15460 pub const fn ttl(self) -> u8 {
15462 ((self.bits() >> Self::TTL_SHIFT) & 0b1111) as u8
15463 }
15464
15465 pub const fn set_ttl(&mut self, value: u8) {
15467 let offset = Self::TTL_SHIFT;
15468 assert!(value & (Self::TTL_MASK as u8) == value);
15469 *self = Self::from_bits_retain(
15470 (self.bits() & !(Self::TTL_MASK << offset)) | ((value as u64) << offset),
15471 );
15472 }
15473
15474 pub const fn with_ttl(mut self, value: u8) -> Self {
15476 self.set_ttl(value);
15477 self
15478 }
15479
15480 pub const fn bbm(self) -> u8 {
15482 ((self.bits() >> Self::BBM_SHIFT) & 0b1111) as u8
15483 }
15484
15485 pub const fn set_bbm(&mut self, value: u8) {
15487 let offset = Self::BBM_SHIFT;
15488 assert!(value & (Self::BBM_MASK as u8) == value);
15489 *self = Self::from_bits_retain(
15490 (self.bits() & !(Self::BBM_MASK << offset)) | ((value as u64) << offset),
15491 );
15492 }
15493
15494 pub const fn with_bbm(mut self, value: u8) -> Self {
15496 self.set_bbm(value);
15497 self
15498 }
15499
15500 pub const fn evt(self) -> u8 {
15502 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
15503 }
15504
15505 pub const fn set_evt(&mut self, value: u8) {
15507 let offset = Self::EVT_SHIFT;
15508 assert!(value & (Self::EVT_MASK as u8) == value);
15509 *self = Self::from_bits_retain(
15510 (self.bits() & !(Self::EVT_MASK << offset)) | ((value as u64) << offset),
15511 );
15512 }
15513
15514 pub const fn with_evt(mut self, value: u8) -> Self {
15516 self.set_evt(value);
15517 self
15518 }
15519
15520 pub const fn e0pd(self) -> u8 {
15522 ((self.bits() >> Self::E0PD_SHIFT) & 0b1111) as u8
15523 }
15524
15525 pub const fn set_e0pd(&mut self, value: u8) {
15527 let offset = Self::E0PD_SHIFT;
15528 assert!(value & (Self::E0PD_MASK as u8) == value);
15529 *self = Self::from_bits_retain(
15530 (self.bits() & !(Self::E0PD_MASK << offset)) | ((value as u64) << offset),
15531 );
15532 }
15533
15534 pub const fn with_e0pd(mut self, value: u8) -> Self {
15536 self.set_e0pd(value);
15537 self
15538 }
15539}
15540
15541#[cfg(feature = "el1")]
15542bitflags! {
15543 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
15545 #[repr(transparent)]
15546 pub struct IdAa64mmfr3El1: u64 {
15547 }
15548}
15549
15550#[cfg(feature = "el1")]
15551impl IdAa64mmfr3El1 {
15552 pub const TCRX_SHIFT: u32 = 0;
15554 pub const TCRX_MASK: u64 = 0b1111;
15556 pub const SCTLRX_SHIFT: u32 = 4;
15558 pub const SCTLRX_MASK: u64 = 0b1111;
15560 pub const S1PIE_SHIFT: u32 = 8;
15562 pub const S1PIE_MASK: u64 = 0b1111;
15564 pub const S2PIE_SHIFT: u32 = 12;
15566 pub const S2PIE_MASK: u64 = 0b1111;
15568 pub const S1POE_SHIFT: u32 = 16;
15570 pub const S1POE_MASK: u64 = 0b1111;
15572 pub const S2POE_SHIFT: u32 = 20;
15574 pub const S2POE_MASK: u64 = 0b1111;
15576 pub const AIE_SHIFT: u32 = 24;
15578 pub const AIE_MASK: u64 = 0b1111;
15580 pub const MEC_SHIFT: u32 = 28;
15582 pub const MEC_MASK: u64 = 0b1111;
15584 pub const D128_SHIFT: u32 = 32;
15586 pub const D128_MASK: u64 = 0b1111;
15588 pub const D128_2_SHIFT: u32 = 36;
15590 pub const D128_2_MASK: u64 = 0b1111;
15592 pub const SNERR_SHIFT: u32 = 40;
15594 pub const SNERR_MASK: u64 = 0b1111;
15596 pub const ANERR_SHIFT: u32 = 44;
15598 pub const ANERR_MASK: u64 = 0b1111;
15600 pub const SDERR_SHIFT: u32 = 52;
15602 pub const SDERR_MASK: u64 = 0b1111;
15604 pub const ADERR_SHIFT: u32 = 56;
15606 pub const ADERR_MASK: u64 = 0b1111;
15608 pub const SPEC_FPACC_SHIFT: u32 = 60;
15610 pub const SPEC_FPACC_MASK: u64 = 0b1111;
15612
15613 pub const fn tcrx(self) -> u8 {
15615 ((self.bits() >> Self::TCRX_SHIFT) & 0b1111) as u8
15616 }
15617
15618 pub const fn set_tcrx(&mut self, value: u8) {
15620 let offset = Self::TCRX_SHIFT;
15621 assert!(value & (Self::TCRX_MASK as u8) == value);
15622 *self = Self::from_bits_retain(
15623 (self.bits() & !(Self::TCRX_MASK << offset)) | ((value as u64) << offset),
15624 );
15625 }
15626
15627 pub const fn with_tcrx(mut self, value: u8) -> Self {
15629 self.set_tcrx(value);
15630 self
15631 }
15632
15633 pub const fn sctlrx(self) -> u8 {
15635 ((self.bits() >> Self::SCTLRX_SHIFT) & 0b1111) as u8
15636 }
15637
15638 pub const fn set_sctlrx(&mut self, value: u8) {
15640 let offset = Self::SCTLRX_SHIFT;
15641 assert!(value & (Self::SCTLRX_MASK as u8) == value);
15642 *self = Self::from_bits_retain(
15643 (self.bits() & !(Self::SCTLRX_MASK << offset)) | ((value as u64) << offset),
15644 );
15645 }
15646
15647 pub const fn with_sctlrx(mut self, value: u8) -> Self {
15649 self.set_sctlrx(value);
15650 self
15651 }
15652
15653 pub const fn s1pie(self) -> u8 {
15655 ((self.bits() >> Self::S1PIE_SHIFT) & 0b1111) as u8
15656 }
15657
15658 pub const fn set_s1pie(&mut self, value: u8) {
15660 let offset = Self::S1PIE_SHIFT;
15661 assert!(value & (Self::S1PIE_MASK as u8) == value);
15662 *self = Self::from_bits_retain(
15663 (self.bits() & !(Self::S1PIE_MASK << offset)) | ((value as u64) << offset),
15664 );
15665 }
15666
15667 pub const fn with_s1pie(mut self, value: u8) -> Self {
15669 self.set_s1pie(value);
15670 self
15671 }
15672
15673 pub const fn s2pie(self) -> u8 {
15675 ((self.bits() >> Self::S2PIE_SHIFT) & 0b1111) as u8
15676 }
15677
15678 pub const fn set_s2pie(&mut self, value: u8) {
15680 let offset = Self::S2PIE_SHIFT;
15681 assert!(value & (Self::S2PIE_MASK as u8) == value);
15682 *self = Self::from_bits_retain(
15683 (self.bits() & !(Self::S2PIE_MASK << offset)) | ((value as u64) << offset),
15684 );
15685 }
15686
15687 pub const fn with_s2pie(mut self, value: u8) -> Self {
15689 self.set_s2pie(value);
15690 self
15691 }
15692
15693 pub const fn s1poe(self) -> u8 {
15695 ((self.bits() >> Self::S1POE_SHIFT) & 0b1111) as u8
15696 }
15697
15698 pub const fn set_s1poe(&mut self, value: u8) {
15700 let offset = Self::S1POE_SHIFT;
15701 assert!(value & (Self::S1POE_MASK as u8) == value);
15702 *self = Self::from_bits_retain(
15703 (self.bits() & !(Self::S1POE_MASK << offset)) | ((value as u64) << offset),
15704 );
15705 }
15706
15707 pub const fn with_s1poe(mut self, value: u8) -> Self {
15709 self.set_s1poe(value);
15710 self
15711 }
15712
15713 pub const fn s2poe(self) -> u8 {
15715 ((self.bits() >> Self::S2POE_SHIFT) & 0b1111) as u8
15716 }
15717
15718 pub const fn set_s2poe(&mut self, value: u8) {
15720 let offset = Self::S2POE_SHIFT;
15721 assert!(value & (Self::S2POE_MASK as u8) == value);
15722 *self = Self::from_bits_retain(
15723 (self.bits() & !(Self::S2POE_MASK << offset)) | ((value as u64) << offset),
15724 );
15725 }
15726
15727 pub const fn with_s2poe(mut self, value: u8) -> Self {
15729 self.set_s2poe(value);
15730 self
15731 }
15732
15733 pub const fn aie(self) -> u8 {
15735 ((self.bits() >> Self::AIE_SHIFT) & 0b1111) as u8
15736 }
15737
15738 pub const fn set_aie(&mut self, value: u8) {
15740 let offset = Self::AIE_SHIFT;
15741 assert!(value & (Self::AIE_MASK as u8) == value);
15742 *self = Self::from_bits_retain(
15743 (self.bits() & !(Self::AIE_MASK << offset)) | ((value as u64) << offset),
15744 );
15745 }
15746
15747 pub const fn with_aie(mut self, value: u8) -> Self {
15749 self.set_aie(value);
15750 self
15751 }
15752
15753 pub const fn mec(self) -> u8 {
15755 ((self.bits() >> Self::MEC_SHIFT) & 0b1111) as u8
15756 }
15757
15758 pub const fn set_mec(&mut self, value: u8) {
15760 let offset = Self::MEC_SHIFT;
15761 assert!(value & (Self::MEC_MASK as u8) == value);
15762 *self = Self::from_bits_retain(
15763 (self.bits() & !(Self::MEC_MASK << offset)) | ((value as u64) << offset),
15764 );
15765 }
15766
15767 pub const fn with_mec(mut self, value: u8) -> Self {
15769 self.set_mec(value);
15770 self
15771 }
15772
15773 pub const fn d128(self) -> u8 {
15775 ((self.bits() >> Self::D128_SHIFT) & 0b1111) as u8
15776 }
15777
15778 pub const fn set_d128(&mut self, value: u8) {
15780 let offset = Self::D128_SHIFT;
15781 assert!(value & (Self::D128_MASK as u8) == value);
15782 *self = Self::from_bits_retain(
15783 (self.bits() & !(Self::D128_MASK << offset)) | ((value as u64) << offset),
15784 );
15785 }
15786
15787 pub const fn with_d128(mut self, value: u8) -> Self {
15789 self.set_d128(value);
15790 self
15791 }
15792
15793 pub const fn d128_2(self) -> u8 {
15795 ((self.bits() >> Self::D128_2_SHIFT) & 0b1111) as u8
15796 }
15797
15798 pub const fn set_d128_2(&mut self, value: u8) {
15800 let offset = Self::D128_2_SHIFT;
15801 assert!(value & (Self::D128_2_MASK as u8) == value);
15802 *self = Self::from_bits_retain(
15803 (self.bits() & !(Self::D128_2_MASK << offset)) | ((value as u64) << offset),
15804 );
15805 }
15806
15807 pub const fn with_d128_2(mut self, value: u8) -> Self {
15809 self.set_d128_2(value);
15810 self
15811 }
15812
15813 pub const fn snerr(self) -> u8 {
15815 ((self.bits() >> Self::SNERR_SHIFT) & 0b1111) as u8
15816 }
15817
15818 pub const fn set_snerr(&mut self, value: u8) {
15820 let offset = Self::SNERR_SHIFT;
15821 assert!(value & (Self::SNERR_MASK as u8) == value);
15822 *self = Self::from_bits_retain(
15823 (self.bits() & !(Self::SNERR_MASK << offset)) | ((value as u64) << offset),
15824 );
15825 }
15826
15827 pub const fn with_snerr(mut self, value: u8) -> Self {
15829 self.set_snerr(value);
15830 self
15831 }
15832
15833 pub const fn anerr(self) -> u8 {
15835 ((self.bits() >> Self::ANERR_SHIFT) & 0b1111) as u8
15836 }
15837
15838 pub const fn set_anerr(&mut self, value: u8) {
15840 let offset = Self::ANERR_SHIFT;
15841 assert!(value & (Self::ANERR_MASK as u8) == value);
15842 *self = Self::from_bits_retain(
15843 (self.bits() & !(Self::ANERR_MASK << offset)) | ((value as u64) << offset),
15844 );
15845 }
15846
15847 pub const fn with_anerr(mut self, value: u8) -> Self {
15849 self.set_anerr(value);
15850 self
15851 }
15852
15853 pub const fn sderr(self) -> u8 {
15855 ((self.bits() >> Self::SDERR_SHIFT) & 0b1111) as u8
15856 }
15857
15858 pub const fn set_sderr(&mut self, value: u8) {
15860 let offset = Self::SDERR_SHIFT;
15861 assert!(value & (Self::SDERR_MASK as u8) == value);
15862 *self = Self::from_bits_retain(
15863 (self.bits() & !(Self::SDERR_MASK << offset)) | ((value as u64) << offset),
15864 );
15865 }
15866
15867 pub const fn with_sderr(mut self, value: u8) -> Self {
15869 self.set_sderr(value);
15870 self
15871 }
15872
15873 pub const fn aderr(self) -> u8 {
15875 ((self.bits() >> Self::ADERR_SHIFT) & 0b1111) as u8
15876 }
15877
15878 pub const fn set_aderr(&mut self, value: u8) {
15880 let offset = Self::ADERR_SHIFT;
15881 assert!(value & (Self::ADERR_MASK as u8) == value);
15882 *self = Self::from_bits_retain(
15883 (self.bits() & !(Self::ADERR_MASK << offset)) | ((value as u64) << offset),
15884 );
15885 }
15886
15887 pub const fn with_aderr(mut self, value: u8) -> Self {
15889 self.set_aderr(value);
15890 self
15891 }
15892
15893 pub const fn spec_fpacc(self) -> u8 {
15895 ((self.bits() >> Self::SPEC_FPACC_SHIFT) & 0b1111) as u8
15896 }
15897
15898 pub const fn set_spec_fpacc(&mut self, value: u8) {
15900 let offset = Self::SPEC_FPACC_SHIFT;
15901 assert!(value & (Self::SPEC_FPACC_MASK as u8) == value);
15902 *self = Self::from_bits_retain(
15903 (self.bits() & !(Self::SPEC_FPACC_MASK << offset)) | ((value as u64) << offset),
15904 );
15905 }
15906
15907 pub const fn with_spec_fpacc(mut self, value: u8) -> Self {
15909 self.set_spec_fpacc(value);
15910 self
15911 }
15912}
15913
15914#[cfg(feature = "el1")]
15915bitflags! {
15916 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
15918 #[repr(transparent)]
15919 pub struct IdAa64pfr0El1: u64 {
15920 }
15921}
15922
15923#[cfg(feature = "el1")]
15924impl IdAa64pfr0El1 {
15925 pub const EL0_SHIFT: u32 = 0;
15927 pub const EL0_MASK: u64 = 0b1111;
15929 pub const EL1_SHIFT: u32 = 4;
15931 pub const EL1_MASK: u64 = 0b1111;
15933 pub const EL2_SHIFT: u32 = 8;
15935 pub const EL2_MASK: u64 = 0b1111;
15937 pub const EL3_SHIFT: u32 = 12;
15939 pub const EL3_MASK: u64 = 0b1111;
15941 pub const FP_SHIFT: u32 = 16;
15943 pub const FP_MASK: u64 = 0b1111;
15945 pub const ADVSIMD_SHIFT: u32 = 20;
15947 pub const ADVSIMD_MASK: u64 = 0b1111;
15949 pub const GIC_SHIFT: u32 = 24;
15951 pub const GIC_MASK: u64 = 0b1111;
15953 pub const RAS_SHIFT: u32 = 28;
15955 pub const RAS_MASK: u64 = 0b1111;
15957 pub const SVE_SHIFT: u32 = 32;
15959 pub const SVE_MASK: u64 = 0b1111;
15961 pub const SEL2_SHIFT: u32 = 36;
15963 pub const SEL2_MASK: u64 = 0b1111;
15965 pub const MPAM_SHIFT: u32 = 40;
15967 pub const MPAM_MASK: u64 = 0b1111;
15969 pub const AMU_SHIFT: u32 = 44;
15971 pub const AMU_MASK: u64 = 0b1111;
15973 pub const DIT_SHIFT: u32 = 48;
15975 pub const DIT_MASK: u64 = 0b1111;
15977 pub const RME_SHIFT: u32 = 52;
15979 pub const RME_MASK: u64 = 0b1111;
15981 pub const CSV2_SHIFT: u32 = 56;
15983 pub const CSV2_MASK: u64 = 0b1111;
15985 pub const CSV3_SHIFT: u32 = 60;
15987 pub const CSV3_MASK: u64 = 0b1111;
15989
15990 pub const fn el0(self) -> u8 {
15992 ((self.bits() >> Self::EL0_SHIFT) & 0b1111) as u8
15993 }
15994
15995 pub const fn set_el0(&mut self, value: u8) {
15997 let offset = Self::EL0_SHIFT;
15998 assert!(value & (Self::EL0_MASK as u8) == value);
15999 *self = Self::from_bits_retain(
16000 (self.bits() & !(Self::EL0_MASK << offset)) | ((value as u64) << offset),
16001 );
16002 }
16003
16004 pub const fn with_el0(mut self, value: u8) -> Self {
16006 self.set_el0(value);
16007 self
16008 }
16009
16010 pub const fn el1(self) -> u8 {
16012 ((self.bits() >> Self::EL1_SHIFT) & 0b1111) as u8
16013 }
16014
16015 pub const fn set_el1(&mut self, value: u8) {
16017 let offset = Self::EL1_SHIFT;
16018 assert!(value & (Self::EL1_MASK as u8) == value);
16019 *self = Self::from_bits_retain(
16020 (self.bits() & !(Self::EL1_MASK << offset)) | ((value as u64) << offset),
16021 );
16022 }
16023
16024 pub const fn with_el1(mut self, value: u8) -> Self {
16026 self.set_el1(value);
16027 self
16028 }
16029
16030 pub const fn el2(self) -> u8 {
16032 ((self.bits() >> Self::EL2_SHIFT) & 0b1111) as u8
16033 }
16034
16035 pub const fn set_el2(&mut self, value: u8) {
16037 let offset = Self::EL2_SHIFT;
16038 assert!(value & (Self::EL2_MASK as u8) == value);
16039 *self = Self::from_bits_retain(
16040 (self.bits() & !(Self::EL2_MASK << offset)) | ((value as u64) << offset),
16041 );
16042 }
16043
16044 pub const fn with_el2(mut self, value: u8) -> Self {
16046 self.set_el2(value);
16047 self
16048 }
16049
16050 pub const fn el3(self) -> u8 {
16052 ((self.bits() >> Self::EL3_SHIFT) & 0b1111) as u8
16053 }
16054
16055 pub const fn set_el3(&mut self, value: u8) {
16057 let offset = Self::EL3_SHIFT;
16058 assert!(value & (Self::EL3_MASK as u8) == value);
16059 *self = Self::from_bits_retain(
16060 (self.bits() & !(Self::EL3_MASK << offset)) | ((value as u64) << offset),
16061 );
16062 }
16063
16064 pub const fn with_el3(mut self, value: u8) -> Self {
16066 self.set_el3(value);
16067 self
16068 }
16069
16070 pub const fn fp(self) -> u8 {
16072 ((self.bits() >> Self::FP_SHIFT) & 0b1111) as u8
16073 }
16074
16075 pub const fn set_fp(&mut self, value: u8) {
16077 let offset = Self::FP_SHIFT;
16078 assert!(value & (Self::FP_MASK as u8) == value);
16079 *self = Self::from_bits_retain(
16080 (self.bits() & !(Self::FP_MASK << offset)) | ((value as u64) << offset),
16081 );
16082 }
16083
16084 pub const fn with_fp(mut self, value: u8) -> Self {
16086 self.set_fp(value);
16087 self
16088 }
16089
16090 pub const fn advsimd(self) -> u8 {
16092 ((self.bits() >> Self::ADVSIMD_SHIFT) & 0b1111) as u8
16093 }
16094
16095 pub const fn set_advsimd(&mut self, value: u8) {
16097 let offset = Self::ADVSIMD_SHIFT;
16098 assert!(value & (Self::ADVSIMD_MASK as u8) == value);
16099 *self = Self::from_bits_retain(
16100 (self.bits() & !(Self::ADVSIMD_MASK << offset)) | ((value as u64) << offset),
16101 );
16102 }
16103
16104 pub const fn with_advsimd(mut self, value: u8) -> Self {
16106 self.set_advsimd(value);
16107 self
16108 }
16109
16110 pub const fn gic(self) -> u8 {
16112 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
16113 }
16114
16115 pub const fn set_gic(&mut self, value: u8) {
16117 let offset = Self::GIC_SHIFT;
16118 assert!(value & (Self::GIC_MASK as u8) == value);
16119 *self = Self::from_bits_retain(
16120 (self.bits() & !(Self::GIC_MASK << offset)) | ((value as u64) << offset),
16121 );
16122 }
16123
16124 pub const fn with_gic(mut self, value: u8) -> Self {
16126 self.set_gic(value);
16127 self
16128 }
16129
16130 pub const fn ras(self) -> u8 {
16132 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
16133 }
16134
16135 pub const fn set_ras(&mut self, value: u8) {
16137 let offset = Self::RAS_SHIFT;
16138 assert!(value & (Self::RAS_MASK as u8) == value);
16139 *self = Self::from_bits_retain(
16140 (self.bits() & !(Self::RAS_MASK << offset)) | ((value as u64) << offset),
16141 );
16142 }
16143
16144 pub const fn with_ras(mut self, value: u8) -> Self {
16146 self.set_ras(value);
16147 self
16148 }
16149
16150 pub const fn sve(self) -> u8 {
16152 ((self.bits() >> Self::SVE_SHIFT) & 0b1111) as u8
16153 }
16154
16155 pub const fn set_sve(&mut self, value: u8) {
16157 let offset = Self::SVE_SHIFT;
16158 assert!(value & (Self::SVE_MASK as u8) == value);
16159 *self = Self::from_bits_retain(
16160 (self.bits() & !(Self::SVE_MASK << offset)) | ((value as u64) << offset),
16161 );
16162 }
16163
16164 pub const fn with_sve(mut self, value: u8) -> Self {
16166 self.set_sve(value);
16167 self
16168 }
16169
16170 pub const fn sel2(self) -> u8 {
16172 ((self.bits() >> Self::SEL2_SHIFT) & 0b1111) as u8
16173 }
16174
16175 pub const fn set_sel2(&mut self, value: u8) {
16177 let offset = Self::SEL2_SHIFT;
16178 assert!(value & (Self::SEL2_MASK as u8) == value);
16179 *self = Self::from_bits_retain(
16180 (self.bits() & !(Self::SEL2_MASK << offset)) | ((value as u64) << offset),
16181 );
16182 }
16183
16184 pub const fn with_sel2(mut self, value: u8) -> Self {
16186 self.set_sel2(value);
16187 self
16188 }
16189
16190 pub const fn mpam(self) -> u8 {
16192 ((self.bits() >> Self::MPAM_SHIFT) & 0b1111) as u8
16193 }
16194
16195 pub const fn set_mpam(&mut self, value: u8) {
16197 let offset = Self::MPAM_SHIFT;
16198 assert!(value & (Self::MPAM_MASK as u8) == value);
16199 *self = Self::from_bits_retain(
16200 (self.bits() & !(Self::MPAM_MASK << offset)) | ((value as u64) << offset),
16201 );
16202 }
16203
16204 pub const fn with_mpam(mut self, value: u8) -> Self {
16206 self.set_mpam(value);
16207 self
16208 }
16209
16210 pub const fn amu(self) -> u8 {
16212 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
16213 }
16214
16215 pub const fn set_amu(&mut self, value: u8) {
16217 let offset = Self::AMU_SHIFT;
16218 assert!(value & (Self::AMU_MASK as u8) == value);
16219 *self = Self::from_bits_retain(
16220 (self.bits() & !(Self::AMU_MASK << offset)) | ((value as u64) << offset),
16221 );
16222 }
16223
16224 pub const fn with_amu(mut self, value: u8) -> Self {
16226 self.set_amu(value);
16227 self
16228 }
16229
16230 pub const fn dit(self) -> u8 {
16232 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
16233 }
16234
16235 pub const fn set_dit(&mut self, value: u8) {
16237 let offset = Self::DIT_SHIFT;
16238 assert!(value & (Self::DIT_MASK as u8) == value);
16239 *self = Self::from_bits_retain(
16240 (self.bits() & !(Self::DIT_MASK << offset)) | ((value as u64) << offset),
16241 );
16242 }
16243
16244 pub const fn with_dit(mut self, value: u8) -> Self {
16246 self.set_dit(value);
16247 self
16248 }
16249
16250 pub const fn rme(self) -> u8 {
16252 ((self.bits() >> Self::RME_SHIFT) & 0b1111) as u8
16253 }
16254
16255 pub const fn set_rme(&mut self, value: u8) {
16257 let offset = Self::RME_SHIFT;
16258 assert!(value & (Self::RME_MASK as u8) == value);
16259 *self = Self::from_bits_retain(
16260 (self.bits() & !(Self::RME_MASK << offset)) | ((value as u64) << offset),
16261 );
16262 }
16263
16264 pub const fn with_rme(mut self, value: u8) -> Self {
16266 self.set_rme(value);
16267 self
16268 }
16269
16270 pub const fn csv2(self) -> u8 {
16272 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
16273 }
16274
16275 pub const fn set_csv2(&mut self, value: u8) {
16277 let offset = Self::CSV2_SHIFT;
16278 assert!(value & (Self::CSV2_MASK as u8) == value);
16279 *self = Self::from_bits_retain(
16280 (self.bits() & !(Self::CSV2_MASK << offset)) | ((value as u64) << offset),
16281 );
16282 }
16283
16284 pub const fn with_csv2(mut self, value: u8) -> Self {
16286 self.set_csv2(value);
16287 self
16288 }
16289
16290 pub const fn csv3(self) -> u8 {
16292 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
16293 }
16294
16295 pub const fn set_csv3(&mut self, value: u8) {
16297 let offset = Self::CSV3_SHIFT;
16298 assert!(value & (Self::CSV3_MASK as u8) == value);
16299 *self = Self::from_bits_retain(
16300 (self.bits() & !(Self::CSV3_MASK << offset)) | ((value as u64) << offset),
16301 );
16302 }
16303
16304 pub const fn with_csv3(mut self, value: u8) -> Self {
16306 self.set_csv3(value);
16307 self
16308 }
16309}
16310
16311#[cfg(feature = "el1")]
16312bitflags! {
16313 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
16315 #[repr(transparent)]
16316 pub struct IdAa64pfr1El1: u64 {
16317 }
16318}
16319
16320#[cfg(feature = "el1")]
16321impl IdAa64pfr1El1 {
16322 pub const BT_SHIFT: u32 = 0;
16324 pub const BT_MASK: u64 = 0b1111;
16326 pub const SSBS_SHIFT: u32 = 4;
16328 pub const SSBS_MASK: u64 = 0b1111;
16330 pub const MTE_SHIFT: u32 = 8;
16332 pub const MTE_MASK: u64 = 0b1111;
16334 pub const RAS_FRAC_SHIFT: u32 = 12;
16336 pub const RAS_FRAC_MASK: u64 = 0b1111;
16338 pub const MPAM_FRAC_SHIFT: u32 = 16;
16340 pub const MPAM_FRAC_MASK: u64 = 0b1111;
16342 pub const SME_SHIFT: u32 = 24;
16344 pub const SME_MASK: u64 = 0b1111;
16346 pub const RNDR_TRAP_SHIFT: u32 = 28;
16348 pub const RNDR_TRAP_MASK: u64 = 0b1111;
16350 pub const CSV2_FRAC_SHIFT: u32 = 32;
16352 pub const CSV2_FRAC_MASK: u64 = 0b1111;
16354 pub const NMI_SHIFT: u32 = 36;
16356 pub const NMI_MASK: u64 = 0b1111;
16358 pub const MTE_FRAC_SHIFT: u32 = 40;
16360 pub const MTE_FRAC_MASK: u64 = 0b1111;
16362 pub const GCS_SHIFT: u32 = 44;
16364 pub const GCS_MASK: u64 = 0b1111;
16366 pub const THE_SHIFT: u32 = 48;
16368 pub const THE_MASK: u64 = 0b1111;
16370 pub const MTEX_SHIFT: u32 = 52;
16372 pub const MTEX_MASK: u64 = 0b1111;
16374 pub const DF2_SHIFT: u32 = 56;
16376 pub const DF2_MASK: u64 = 0b1111;
16378 pub const PFAR_SHIFT: u32 = 60;
16380 pub const PFAR_MASK: u64 = 0b1111;
16382
16383 pub const fn bt(self) -> u8 {
16385 ((self.bits() >> Self::BT_SHIFT) & 0b1111) as u8
16386 }
16387
16388 pub const fn set_bt(&mut self, value: u8) {
16390 let offset = Self::BT_SHIFT;
16391 assert!(value & (Self::BT_MASK as u8) == value);
16392 *self = Self::from_bits_retain(
16393 (self.bits() & !(Self::BT_MASK << offset)) | ((value as u64) << offset),
16394 );
16395 }
16396
16397 pub const fn with_bt(mut self, value: u8) -> Self {
16399 self.set_bt(value);
16400 self
16401 }
16402
16403 pub const fn ssbs(self) -> u8 {
16405 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
16406 }
16407
16408 pub const fn set_ssbs(&mut self, value: u8) {
16410 let offset = Self::SSBS_SHIFT;
16411 assert!(value & (Self::SSBS_MASK as u8) == value);
16412 *self = Self::from_bits_retain(
16413 (self.bits() & !(Self::SSBS_MASK << offset)) | ((value as u64) << offset),
16414 );
16415 }
16416
16417 pub const fn with_ssbs(mut self, value: u8) -> Self {
16419 self.set_ssbs(value);
16420 self
16421 }
16422
16423 pub const fn mte(self) -> u8 {
16425 ((self.bits() >> Self::MTE_SHIFT) & 0b1111) as u8
16426 }
16427
16428 pub const fn set_mte(&mut self, value: u8) {
16430 let offset = Self::MTE_SHIFT;
16431 assert!(value & (Self::MTE_MASK as u8) == value);
16432 *self = Self::from_bits_retain(
16433 (self.bits() & !(Self::MTE_MASK << offset)) | ((value as u64) << offset),
16434 );
16435 }
16436
16437 pub const fn with_mte(mut self, value: u8) -> Self {
16439 self.set_mte(value);
16440 self
16441 }
16442
16443 pub const fn ras_frac(self) -> u8 {
16445 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
16446 }
16447
16448 pub const fn set_ras_frac(&mut self, value: u8) {
16450 let offset = Self::RAS_FRAC_SHIFT;
16451 assert!(value & (Self::RAS_FRAC_MASK as u8) == value);
16452 *self = Self::from_bits_retain(
16453 (self.bits() & !(Self::RAS_FRAC_MASK << offset)) | ((value as u64) << offset),
16454 );
16455 }
16456
16457 pub const fn with_ras_frac(mut self, value: u8) -> Self {
16459 self.set_ras_frac(value);
16460 self
16461 }
16462
16463 pub const fn mpam_frac(self) -> u8 {
16465 ((self.bits() >> Self::MPAM_FRAC_SHIFT) & 0b1111) as u8
16466 }
16467
16468 pub const fn set_mpam_frac(&mut self, value: u8) {
16470 let offset = Self::MPAM_FRAC_SHIFT;
16471 assert!(value & (Self::MPAM_FRAC_MASK as u8) == value);
16472 *self = Self::from_bits_retain(
16473 (self.bits() & !(Self::MPAM_FRAC_MASK << offset)) | ((value as u64) << offset),
16474 );
16475 }
16476
16477 pub const fn with_mpam_frac(mut self, value: u8) -> Self {
16479 self.set_mpam_frac(value);
16480 self
16481 }
16482
16483 pub const fn sme(self) -> u8 {
16485 ((self.bits() >> Self::SME_SHIFT) & 0b1111) as u8
16486 }
16487
16488 pub const fn set_sme(&mut self, value: u8) {
16490 let offset = Self::SME_SHIFT;
16491 assert!(value & (Self::SME_MASK as u8) == value);
16492 *self = Self::from_bits_retain(
16493 (self.bits() & !(Self::SME_MASK << offset)) | ((value as u64) << offset),
16494 );
16495 }
16496
16497 pub const fn with_sme(mut self, value: u8) -> Self {
16499 self.set_sme(value);
16500 self
16501 }
16502
16503 pub const fn rndr_trap(self) -> u8 {
16505 ((self.bits() >> Self::RNDR_TRAP_SHIFT) & 0b1111) as u8
16506 }
16507
16508 pub const fn set_rndr_trap(&mut self, value: u8) {
16510 let offset = Self::RNDR_TRAP_SHIFT;
16511 assert!(value & (Self::RNDR_TRAP_MASK as u8) == value);
16512 *self = Self::from_bits_retain(
16513 (self.bits() & !(Self::RNDR_TRAP_MASK << offset)) | ((value as u64) << offset),
16514 );
16515 }
16516
16517 pub const fn with_rndr_trap(mut self, value: u8) -> Self {
16519 self.set_rndr_trap(value);
16520 self
16521 }
16522
16523 pub const fn csv2_frac(self) -> u8 {
16525 ((self.bits() >> Self::CSV2_FRAC_SHIFT) & 0b1111) as u8
16526 }
16527
16528 pub const fn set_csv2_frac(&mut self, value: u8) {
16530 let offset = Self::CSV2_FRAC_SHIFT;
16531 assert!(value & (Self::CSV2_FRAC_MASK as u8) == value);
16532 *self = Self::from_bits_retain(
16533 (self.bits() & !(Self::CSV2_FRAC_MASK << offset)) | ((value as u64) << offset),
16534 );
16535 }
16536
16537 pub const fn with_csv2_frac(mut self, value: u8) -> Self {
16539 self.set_csv2_frac(value);
16540 self
16541 }
16542
16543 pub const fn nmi(self) -> u8 {
16545 ((self.bits() >> Self::NMI_SHIFT) & 0b1111) as u8
16546 }
16547
16548 pub const fn set_nmi(&mut self, value: u8) {
16550 let offset = Self::NMI_SHIFT;
16551 assert!(value & (Self::NMI_MASK as u8) == value);
16552 *self = Self::from_bits_retain(
16553 (self.bits() & !(Self::NMI_MASK << offset)) | ((value as u64) << offset),
16554 );
16555 }
16556
16557 pub const fn with_nmi(mut self, value: u8) -> Self {
16559 self.set_nmi(value);
16560 self
16561 }
16562
16563 pub const fn mte_frac(self) -> u8 {
16565 ((self.bits() >> Self::MTE_FRAC_SHIFT) & 0b1111) as u8
16566 }
16567
16568 pub const fn set_mte_frac(&mut self, value: u8) {
16570 let offset = Self::MTE_FRAC_SHIFT;
16571 assert!(value & (Self::MTE_FRAC_MASK as u8) == value);
16572 *self = Self::from_bits_retain(
16573 (self.bits() & !(Self::MTE_FRAC_MASK << offset)) | ((value as u64) << offset),
16574 );
16575 }
16576
16577 pub const fn with_mte_frac(mut self, value: u8) -> Self {
16579 self.set_mte_frac(value);
16580 self
16581 }
16582
16583 pub const fn gcs(self) -> u8 {
16585 ((self.bits() >> Self::GCS_SHIFT) & 0b1111) as u8
16586 }
16587
16588 pub const fn set_gcs(&mut self, value: u8) {
16590 let offset = Self::GCS_SHIFT;
16591 assert!(value & (Self::GCS_MASK as u8) == value);
16592 *self = Self::from_bits_retain(
16593 (self.bits() & !(Self::GCS_MASK << offset)) | ((value as u64) << offset),
16594 );
16595 }
16596
16597 pub const fn with_gcs(mut self, value: u8) -> Self {
16599 self.set_gcs(value);
16600 self
16601 }
16602
16603 pub const fn the(self) -> u8 {
16605 ((self.bits() >> Self::THE_SHIFT) & 0b1111) as u8
16606 }
16607
16608 pub const fn set_the(&mut self, value: u8) {
16610 let offset = Self::THE_SHIFT;
16611 assert!(value & (Self::THE_MASK as u8) == value);
16612 *self = Self::from_bits_retain(
16613 (self.bits() & !(Self::THE_MASK << offset)) | ((value as u64) << offset),
16614 );
16615 }
16616
16617 pub const fn with_the(mut self, value: u8) -> Self {
16619 self.set_the(value);
16620 self
16621 }
16622
16623 pub const fn mtex(self) -> u8 {
16625 ((self.bits() >> Self::MTEX_SHIFT) & 0b1111) as u8
16626 }
16627
16628 pub const fn set_mtex(&mut self, value: u8) {
16630 let offset = Self::MTEX_SHIFT;
16631 assert!(value & (Self::MTEX_MASK as u8) == value);
16632 *self = Self::from_bits_retain(
16633 (self.bits() & !(Self::MTEX_MASK << offset)) | ((value as u64) << offset),
16634 );
16635 }
16636
16637 pub const fn with_mtex(mut self, value: u8) -> Self {
16639 self.set_mtex(value);
16640 self
16641 }
16642
16643 pub const fn df2(self) -> u8 {
16645 ((self.bits() >> Self::DF2_SHIFT) & 0b1111) as u8
16646 }
16647
16648 pub const fn set_df2(&mut self, value: u8) {
16650 let offset = Self::DF2_SHIFT;
16651 assert!(value & (Self::DF2_MASK as u8) == value);
16652 *self = Self::from_bits_retain(
16653 (self.bits() & !(Self::DF2_MASK << offset)) | ((value as u64) << offset),
16654 );
16655 }
16656
16657 pub const fn with_df2(mut self, value: u8) -> Self {
16659 self.set_df2(value);
16660 self
16661 }
16662
16663 pub const fn pfar(self) -> u8 {
16665 ((self.bits() >> Self::PFAR_SHIFT) & 0b1111) as u8
16666 }
16667
16668 pub const fn set_pfar(&mut self, value: u8) {
16670 let offset = Self::PFAR_SHIFT;
16671 assert!(value & (Self::PFAR_MASK as u8) == value);
16672 *self = Self::from_bits_retain(
16673 (self.bits() & !(Self::PFAR_MASK << offset)) | ((value as u64) << offset),
16674 );
16675 }
16676
16677 pub const fn with_pfar(mut self, value: u8) -> Self {
16679 self.set_pfar(value);
16680 self
16681 }
16682}
16683
16684#[cfg(feature = "el1")]
16685bitflags! {
16686 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
16688 #[repr(transparent)]
16689 pub struct IdAa64smfr0El1: u64 {
16690 const SMOP4 = 1 << 0;
16692 const STMOP = 1 << 16;
16694 const SFEXPA = 1 << 23;
16696 const AES = 1 << 24;
16698 const SBITPERM = 1 << 25;
16700 const SF8DP2 = 1 << 28;
16702 const SF8DP4 = 1 << 29;
16704 const SF8FMA = 1 << 30;
16706 const F32F32 = 1 << 32;
16708 const BI32I32 = 1 << 33;
16710 const B16F32 = 1 << 34;
16712 const F16F32 = 1 << 35;
16714 const F8F32 = 1 << 40;
16716 const F8F16 = 1 << 41;
16718 const F16F16 = 1 << 42;
16720 const B16B16 = 1 << 43;
16722 const F64F64 = 1 << 48;
16724 const LUTV2 = 1 << 60;
16726 const LUT6 = 1 << 61;
16728 const FA64 = 1 << 63;
16730 }
16731}
16732
16733#[cfg(feature = "el1")]
16734impl IdAa64smfr0El1 {
16735 pub const SMOP4_SHIFT: u32 = 0;
16737 pub const STMOP_SHIFT: u32 = 16;
16739 pub const SFEXPA_SHIFT: u32 = 23;
16741 pub const AES_SHIFT: u32 = 24;
16743 pub const SBITPERM_SHIFT: u32 = 25;
16745 pub const SF8DP2_SHIFT: u32 = 28;
16747 pub const SF8DP4_SHIFT: u32 = 29;
16749 pub const SF8FMA_SHIFT: u32 = 30;
16751 pub const F32F32_SHIFT: u32 = 32;
16753 pub const BI32I32_SHIFT: u32 = 33;
16755 pub const B16F32_SHIFT: u32 = 34;
16757 pub const F16F32_SHIFT: u32 = 35;
16759 pub const I8I32_SHIFT: u32 = 36;
16761 pub const I8I32_MASK: u64 = 0b1111;
16763 pub const F8F32_SHIFT: u32 = 40;
16765 pub const F8F16_SHIFT: u32 = 41;
16767 pub const F16F16_SHIFT: u32 = 42;
16769 pub const B16B16_SHIFT: u32 = 43;
16771 pub const I16I32_SHIFT: u32 = 44;
16773 pub const I16I32_MASK: u64 = 0b1111;
16775 pub const F64F64_SHIFT: u32 = 48;
16777 pub const I16I64_SHIFT: u32 = 52;
16779 pub const I16I64_MASK: u64 = 0b1111;
16781 pub const SMEVER_SHIFT: u32 = 56;
16783 pub const SMEVER_MASK: u64 = 0b1111;
16785 pub const LUTV2_SHIFT: u32 = 60;
16787 pub const LUT6_SHIFT: u32 = 61;
16789 pub const FA64_SHIFT: u32 = 63;
16791
16792 pub const fn i8i32(self) -> u8 {
16794 ((self.bits() >> Self::I8I32_SHIFT) & 0b1111) as u8
16795 }
16796
16797 pub const fn set_i8i32(&mut self, value: u8) {
16799 let offset = Self::I8I32_SHIFT;
16800 assert!(value & (Self::I8I32_MASK as u8) == value);
16801 *self = Self::from_bits_retain(
16802 (self.bits() & !(Self::I8I32_MASK << offset)) | ((value as u64) << offset),
16803 );
16804 }
16805
16806 pub const fn with_i8i32(mut self, value: u8) -> Self {
16808 self.set_i8i32(value);
16809 self
16810 }
16811
16812 pub const fn i16i32(self) -> u8 {
16814 ((self.bits() >> Self::I16I32_SHIFT) & 0b1111) as u8
16815 }
16816
16817 pub const fn set_i16i32(&mut self, value: u8) {
16819 let offset = Self::I16I32_SHIFT;
16820 assert!(value & (Self::I16I32_MASK as u8) == value);
16821 *self = Self::from_bits_retain(
16822 (self.bits() & !(Self::I16I32_MASK << offset)) | ((value as u64) << offset),
16823 );
16824 }
16825
16826 pub const fn with_i16i32(mut self, value: u8) -> Self {
16828 self.set_i16i32(value);
16829 self
16830 }
16831
16832 pub const fn i16i64(self) -> u8 {
16834 ((self.bits() >> Self::I16I64_SHIFT) & 0b1111) as u8
16835 }
16836
16837 pub const fn set_i16i64(&mut self, value: u8) {
16839 let offset = Self::I16I64_SHIFT;
16840 assert!(value & (Self::I16I64_MASK as u8) == value);
16841 *self = Self::from_bits_retain(
16842 (self.bits() & !(Self::I16I64_MASK << offset)) | ((value as u64) << offset),
16843 );
16844 }
16845
16846 pub const fn with_i16i64(mut self, value: u8) -> Self {
16848 self.set_i16i64(value);
16849 self
16850 }
16851
16852 pub const fn smever(self) -> u8 {
16854 ((self.bits() >> Self::SMEVER_SHIFT) & 0b1111) as u8
16855 }
16856
16857 pub const fn set_smever(&mut self, value: u8) {
16859 let offset = Self::SMEVER_SHIFT;
16860 assert!(value & (Self::SMEVER_MASK as u8) == value);
16861 *self = Self::from_bits_retain(
16862 (self.bits() & !(Self::SMEVER_MASK << offset)) | ((value as u64) << offset),
16863 );
16864 }
16865
16866 pub const fn with_smever(mut self, value: u8) -> Self {
16868 self.set_smever(value);
16869 self
16870 }
16871}
16872
16873bitflags! {
16874 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
16876 #[repr(transparent)]
16877 pub struct IdDfr0: u32 {
16878 }
16879}
16880
16881impl IdDfr0 {
16882 pub const COPDBG_SHIFT: u32 = 0;
16884 pub const COPDBG_MASK: u32 = 0b1111;
16886 pub const COPSDBG_SHIFT: u32 = 4;
16888 pub const COPSDBG_MASK: u32 = 0b1111;
16890 pub const MMAPDBG_SHIFT: u32 = 8;
16892 pub const MMAPDBG_MASK: u32 = 0b1111;
16894 pub const COPTRC_SHIFT: u32 = 12;
16896 pub const COPTRC_MASK: u32 = 0b1111;
16898 pub const MMAPTRC_SHIFT: u32 = 16;
16900 pub const MMAPTRC_MASK: u32 = 0b1111;
16902 pub const MPROFDBG_SHIFT: u32 = 20;
16904 pub const MPROFDBG_MASK: u32 = 0b1111;
16906 pub const PERFMON_SHIFT: u32 = 24;
16908 pub const PERFMON_MASK: u32 = 0b1111;
16910 pub const TRACEFILT_SHIFT: u32 = 28;
16912 pub const TRACEFILT_MASK: u32 = 0b1111;
16914
16915 pub const fn copdbg(self) -> u8 {
16917 ((self.bits() >> Self::COPDBG_SHIFT) & 0b1111) as u8
16918 }
16919
16920 pub const fn set_copdbg(&mut self, value: u8) {
16922 let offset = Self::COPDBG_SHIFT;
16923 assert!(value & (Self::COPDBG_MASK as u8) == value);
16924 *self = Self::from_bits_retain(
16925 (self.bits() & !(Self::COPDBG_MASK << offset)) | ((value as u32) << offset),
16926 );
16927 }
16928
16929 pub const fn with_copdbg(mut self, value: u8) -> Self {
16931 self.set_copdbg(value);
16932 self
16933 }
16934
16935 pub const fn copsdbg(self) -> u8 {
16937 ((self.bits() >> Self::COPSDBG_SHIFT) & 0b1111) as u8
16938 }
16939
16940 pub const fn set_copsdbg(&mut self, value: u8) {
16942 let offset = Self::COPSDBG_SHIFT;
16943 assert!(value & (Self::COPSDBG_MASK as u8) == value);
16944 *self = Self::from_bits_retain(
16945 (self.bits() & !(Self::COPSDBG_MASK << offset)) | ((value as u32) << offset),
16946 );
16947 }
16948
16949 pub const fn with_copsdbg(mut self, value: u8) -> Self {
16951 self.set_copsdbg(value);
16952 self
16953 }
16954
16955 pub const fn mmapdbg(self) -> u8 {
16957 ((self.bits() >> Self::MMAPDBG_SHIFT) & 0b1111) as u8
16958 }
16959
16960 pub const fn set_mmapdbg(&mut self, value: u8) {
16962 let offset = Self::MMAPDBG_SHIFT;
16963 assert!(value & (Self::MMAPDBG_MASK as u8) == value);
16964 *self = Self::from_bits_retain(
16965 (self.bits() & !(Self::MMAPDBG_MASK << offset)) | ((value as u32) << offset),
16966 );
16967 }
16968
16969 pub const fn with_mmapdbg(mut self, value: u8) -> Self {
16971 self.set_mmapdbg(value);
16972 self
16973 }
16974
16975 pub const fn coptrc(self) -> u8 {
16977 ((self.bits() >> Self::COPTRC_SHIFT) & 0b1111) as u8
16978 }
16979
16980 pub const fn set_coptrc(&mut self, value: u8) {
16982 let offset = Self::COPTRC_SHIFT;
16983 assert!(value & (Self::COPTRC_MASK as u8) == value);
16984 *self = Self::from_bits_retain(
16985 (self.bits() & !(Self::COPTRC_MASK << offset)) | ((value as u32) << offset),
16986 );
16987 }
16988
16989 pub const fn with_coptrc(mut self, value: u8) -> Self {
16991 self.set_coptrc(value);
16992 self
16993 }
16994
16995 pub const fn mmaptrc(self) -> u8 {
16997 ((self.bits() >> Self::MMAPTRC_SHIFT) & 0b1111) as u8
16998 }
16999
17000 pub const fn set_mmaptrc(&mut self, value: u8) {
17002 let offset = Self::MMAPTRC_SHIFT;
17003 assert!(value & (Self::MMAPTRC_MASK as u8) == value);
17004 *self = Self::from_bits_retain(
17005 (self.bits() & !(Self::MMAPTRC_MASK << offset)) | ((value as u32) << offset),
17006 );
17007 }
17008
17009 pub const fn with_mmaptrc(mut self, value: u8) -> Self {
17011 self.set_mmaptrc(value);
17012 self
17013 }
17014
17015 pub const fn mprofdbg(self) -> u8 {
17017 ((self.bits() >> Self::MPROFDBG_SHIFT) & 0b1111) as u8
17018 }
17019
17020 pub const fn set_mprofdbg(&mut self, value: u8) {
17022 let offset = Self::MPROFDBG_SHIFT;
17023 assert!(value & (Self::MPROFDBG_MASK as u8) == value);
17024 *self = Self::from_bits_retain(
17025 (self.bits() & !(Self::MPROFDBG_MASK << offset)) | ((value as u32) << offset),
17026 );
17027 }
17028
17029 pub const fn with_mprofdbg(mut self, value: u8) -> Self {
17031 self.set_mprofdbg(value);
17032 self
17033 }
17034
17035 pub const fn perfmon(self) -> u8 {
17037 ((self.bits() >> Self::PERFMON_SHIFT) & 0b1111) as u8
17038 }
17039
17040 pub const fn set_perfmon(&mut self, value: u8) {
17042 let offset = Self::PERFMON_SHIFT;
17043 assert!(value & (Self::PERFMON_MASK as u8) == value);
17044 *self = Self::from_bits_retain(
17045 (self.bits() & !(Self::PERFMON_MASK << offset)) | ((value as u32) << offset),
17046 );
17047 }
17048
17049 pub const fn with_perfmon(mut self, value: u8) -> Self {
17051 self.set_perfmon(value);
17052 self
17053 }
17054
17055 pub const fn tracefilt(self) -> u8 {
17057 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
17058 }
17059
17060 pub const fn set_tracefilt(&mut self, value: u8) {
17062 let offset = Self::TRACEFILT_SHIFT;
17063 assert!(value & (Self::TRACEFILT_MASK as u8) == value);
17064 *self = Self::from_bits_retain(
17065 (self.bits() & !(Self::TRACEFILT_MASK << offset)) | ((value as u32) << offset),
17066 );
17067 }
17068
17069 pub const fn with_tracefilt(mut self, value: u8) -> Self {
17071 self.set_tracefilt(value);
17072 self
17073 }
17074}
17075
17076bitflags! {
17077 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17079 #[repr(transparent)]
17080 pub struct IdDfr1: u32 {
17081 }
17082}
17083
17084impl IdDfr1 {
17085 pub const MTPMU_SHIFT: u32 = 0;
17087 pub const MTPMU_MASK: u32 = 0b1111;
17089 pub const HPMN0_SHIFT: u32 = 4;
17091 pub const HPMN0_MASK: u32 = 0b1111;
17093
17094 pub const fn mtpmu(self) -> u8 {
17096 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
17097 }
17098
17099 pub const fn set_mtpmu(&mut self, value: u8) {
17101 let offset = Self::MTPMU_SHIFT;
17102 assert!(value & (Self::MTPMU_MASK as u8) == value);
17103 *self = Self::from_bits_retain(
17104 (self.bits() & !(Self::MTPMU_MASK << offset)) | ((value as u32) << offset),
17105 );
17106 }
17107
17108 pub const fn with_mtpmu(mut self, value: u8) -> Self {
17110 self.set_mtpmu(value);
17111 self
17112 }
17113
17114 pub const fn hpmn0(self) -> u8 {
17116 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
17117 }
17118
17119 pub const fn set_hpmn0(&mut self, value: u8) {
17121 let offset = Self::HPMN0_SHIFT;
17122 assert!(value & (Self::HPMN0_MASK as u8) == value);
17123 *self = Self::from_bits_retain(
17124 (self.bits() & !(Self::HPMN0_MASK << offset)) | ((value as u32) << offset),
17125 );
17126 }
17127
17128 pub const fn with_hpmn0(mut self, value: u8) -> Self {
17130 self.set_hpmn0(value);
17131 self
17132 }
17133}
17134
17135bitflags! {
17136 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17138 #[repr(transparent)]
17139 pub struct IdIsar0: u32 {
17140 }
17141}
17142
17143impl IdIsar0 {
17144 pub const SWAP_SHIFT: u32 = 0;
17146 pub const SWAP_MASK: u32 = 0b1111;
17148 pub const BITCOUNT_SHIFT: u32 = 4;
17150 pub const BITCOUNT_MASK: u32 = 0b1111;
17152 pub const BITFIELD_SHIFT: u32 = 8;
17154 pub const BITFIELD_MASK: u32 = 0b1111;
17156 pub const CMPBRANCH_SHIFT: u32 = 12;
17158 pub const CMPBRANCH_MASK: u32 = 0b1111;
17160 pub const COPROC_SHIFT: u32 = 16;
17162 pub const COPROC_MASK: u32 = 0b1111;
17164 pub const DEBUG_SHIFT: u32 = 20;
17166 pub const DEBUG_MASK: u32 = 0b1111;
17168 pub const DIVIDE_SHIFT: u32 = 24;
17170 pub const DIVIDE_MASK: u32 = 0b1111;
17172
17173 pub const fn swap(self) -> u8 {
17175 ((self.bits() >> Self::SWAP_SHIFT) & 0b1111) as u8
17176 }
17177
17178 pub const fn set_swap(&mut self, value: u8) {
17180 let offset = Self::SWAP_SHIFT;
17181 assert!(value & (Self::SWAP_MASK as u8) == value);
17182 *self = Self::from_bits_retain(
17183 (self.bits() & !(Self::SWAP_MASK << offset)) | ((value as u32) << offset),
17184 );
17185 }
17186
17187 pub const fn with_swap(mut self, value: u8) -> Self {
17189 self.set_swap(value);
17190 self
17191 }
17192
17193 pub const fn bitcount(self) -> u8 {
17195 ((self.bits() >> Self::BITCOUNT_SHIFT) & 0b1111) as u8
17196 }
17197
17198 pub const fn set_bitcount(&mut self, value: u8) {
17200 let offset = Self::BITCOUNT_SHIFT;
17201 assert!(value & (Self::BITCOUNT_MASK as u8) == value);
17202 *self = Self::from_bits_retain(
17203 (self.bits() & !(Self::BITCOUNT_MASK << offset)) | ((value as u32) << offset),
17204 );
17205 }
17206
17207 pub const fn with_bitcount(mut self, value: u8) -> Self {
17209 self.set_bitcount(value);
17210 self
17211 }
17212
17213 pub const fn bitfield(self) -> u8 {
17215 ((self.bits() >> Self::BITFIELD_SHIFT) & 0b1111) as u8
17216 }
17217
17218 pub const fn set_bitfield(&mut self, value: u8) {
17220 let offset = Self::BITFIELD_SHIFT;
17221 assert!(value & (Self::BITFIELD_MASK as u8) == value);
17222 *self = Self::from_bits_retain(
17223 (self.bits() & !(Self::BITFIELD_MASK << offset)) | ((value as u32) << offset),
17224 );
17225 }
17226
17227 pub const fn with_bitfield(mut self, value: u8) -> Self {
17229 self.set_bitfield(value);
17230 self
17231 }
17232
17233 pub const fn cmpbranch(self) -> u8 {
17235 ((self.bits() >> Self::CMPBRANCH_SHIFT) & 0b1111) as u8
17236 }
17237
17238 pub const fn set_cmpbranch(&mut self, value: u8) {
17240 let offset = Self::CMPBRANCH_SHIFT;
17241 assert!(value & (Self::CMPBRANCH_MASK as u8) == value);
17242 *self = Self::from_bits_retain(
17243 (self.bits() & !(Self::CMPBRANCH_MASK << offset)) | ((value as u32) << offset),
17244 );
17245 }
17246
17247 pub const fn with_cmpbranch(mut self, value: u8) -> Self {
17249 self.set_cmpbranch(value);
17250 self
17251 }
17252
17253 pub const fn coproc(self) -> u8 {
17255 ((self.bits() >> Self::COPROC_SHIFT) & 0b1111) as u8
17256 }
17257
17258 pub const fn set_coproc(&mut self, value: u8) {
17260 let offset = Self::COPROC_SHIFT;
17261 assert!(value & (Self::COPROC_MASK as u8) == value);
17262 *self = Self::from_bits_retain(
17263 (self.bits() & !(Self::COPROC_MASK << offset)) | ((value as u32) << offset),
17264 );
17265 }
17266
17267 pub const fn with_coproc(mut self, value: u8) -> Self {
17269 self.set_coproc(value);
17270 self
17271 }
17272
17273 pub const fn debug(self) -> u8 {
17275 ((self.bits() >> Self::DEBUG_SHIFT) & 0b1111) as u8
17276 }
17277
17278 pub const fn set_debug(&mut self, value: u8) {
17280 let offset = Self::DEBUG_SHIFT;
17281 assert!(value & (Self::DEBUG_MASK as u8) == value);
17282 *self = Self::from_bits_retain(
17283 (self.bits() & !(Self::DEBUG_MASK << offset)) | ((value as u32) << offset),
17284 );
17285 }
17286
17287 pub const fn with_debug(mut self, value: u8) -> Self {
17289 self.set_debug(value);
17290 self
17291 }
17292
17293 pub const fn divide(self) -> u8 {
17295 ((self.bits() >> Self::DIVIDE_SHIFT) & 0b1111) as u8
17296 }
17297
17298 pub const fn set_divide(&mut self, value: u8) {
17300 let offset = Self::DIVIDE_SHIFT;
17301 assert!(value & (Self::DIVIDE_MASK as u8) == value);
17302 *self = Self::from_bits_retain(
17303 (self.bits() & !(Self::DIVIDE_MASK << offset)) | ((value as u32) << offset),
17304 );
17305 }
17306
17307 pub const fn with_divide(mut self, value: u8) -> Self {
17309 self.set_divide(value);
17310 self
17311 }
17312}
17313
17314bitflags! {
17315 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17317 #[repr(transparent)]
17318 pub struct IdIsar1: u32 {
17319 }
17320}
17321
17322impl IdIsar1 {
17323 pub const ENDIAN_SHIFT: u32 = 0;
17325 pub const ENDIAN_MASK: u32 = 0b1111;
17327 pub const EXCEPT_SHIFT: u32 = 4;
17329 pub const EXCEPT_MASK: u32 = 0b1111;
17331 pub const EXCEPT_AR_SHIFT: u32 = 8;
17333 pub const EXCEPT_AR_MASK: u32 = 0b1111;
17335 pub const EXTEND_SHIFT: u32 = 12;
17337 pub const EXTEND_MASK: u32 = 0b1111;
17339 pub const IFTHEN_SHIFT: u32 = 16;
17341 pub const IFTHEN_MASK: u32 = 0b1111;
17343 pub const IMMEDIATE_SHIFT: u32 = 20;
17345 pub const IMMEDIATE_MASK: u32 = 0b1111;
17347 pub const INTERWORK_SHIFT: u32 = 24;
17349 pub const INTERWORK_MASK: u32 = 0b1111;
17351 pub const JAZELLE_SHIFT: u32 = 28;
17353 pub const JAZELLE_MASK: u32 = 0b1111;
17355
17356 pub const fn endian(self) -> u8 {
17358 ((self.bits() >> Self::ENDIAN_SHIFT) & 0b1111) as u8
17359 }
17360
17361 pub const fn set_endian(&mut self, value: u8) {
17363 let offset = Self::ENDIAN_SHIFT;
17364 assert!(value & (Self::ENDIAN_MASK as u8) == value);
17365 *self = Self::from_bits_retain(
17366 (self.bits() & !(Self::ENDIAN_MASK << offset)) | ((value as u32) << offset),
17367 );
17368 }
17369
17370 pub const fn with_endian(mut self, value: u8) -> Self {
17372 self.set_endian(value);
17373 self
17374 }
17375
17376 pub const fn except(self) -> u8 {
17378 ((self.bits() >> Self::EXCEPT_SHIFT) & 0b1111) as u8
17379 }
17380
17381 pub const fn set_except(&mut self, value: u8) {
17383 let offset = Self::EXCEPT_SHIFT;
17384 assert!(value & (Self::EXCEPT_MASK as u8) == value);
17385 *self = Self::from_bits_retain(
17386 (self.bits() & !(Self::EXCEPT_MASK << offset)) | ((value as u32) << offset),
17387 );
17388 }
17389
17390 pub const fn with_except(mut self, value: u8) -> Self {
17392 self.set_except(value);
17393 self
17394 }
17395
17396 pub const fn except_ar(self) -> u8 {
17398 ((self.bits() >> Self::EXCEPT_AR_SHIFT) & 0b1111) as u8
17399 }
17400
17401 pub const fn set_except_ar(&mut self, value: u8) {
17403 let offset = Self::EXCEPT_AR_SHIFT;
17404 assert!(value & (Self::EXCEPT_AR_MASK as u8) == value);
17405 *self = Self::from_bits_retain(
17406 (self.bits() & !(Self::EXCEPT_AR_MASK << offset)) | ((value as u32) << offset),
17407 );
17408 }
17409
17410 pub const fn with_except_ar(mut self, value: u8) -> Self {
17412 self.set_except_ar(value);
17413 self
17414 }
17415
17416 pub const fn extend_(self) -> u8 {
17418 ((self.bits() >> Self::EXTEND_SHIFT) & 0b1111) as u8
17419 }
17420
17421 pub const fn set_extend_(&mut self, value: u8) {
17423 let offset = Self::EXTEND_SHIFT;
17424 assert!(value & (Self::EXTEND_MASK as u8) == value);
17425 *self = Self::from_bits_retain(
17426 (self.bits() & !(Self::EXTEND_MASK << offset)) | ((value as u32) << offset),
17427 );
17428 }
17429
17430 pub const fn with_extend_(mut self, value: u8) -> Self {
17432 self.set_extend_(value);
17433 self
17434 }
17435
17436 pub const fn ifthen(self) -> u8 {
17438 ((self.bits() >> Self::IFTHEN_SHIFT) & 0b1111) as u8
17439 }
17440
17441 pub const fn set_ifthen(&mut self, value: u8) {
17443 let offset = Self::IFTHEN_SHIFT;
17444 assert!(value & (Self::IFTHEN_MASK as u8) == value);
17445 *self = Self::from_bits_retain(
17446 (self.bits() & !(Self::IFTHEN_MASK << offset)) | ((value as u32) << offset),
17447 );
17448 }
17449
17450 pub const fn with_ifthen(mut self, value: u8) -> Self {
17452 self.set_ifthen(value);
17453 self
17454 }
17455
17456 pub const fn immediate(self) -> u8 {
17458 ((self.bits() >> Self::IMMEDIATE_SHIFT) & 0b1111) as u8
17459 }
17460
17461 pub const fn set_immediate(&mut self, value: u8) {
17463 let offset = Self::IMMEDIATE_SHIFT;
17464 assert!(value & (Self::IMMEDIATE_MASK as u8) == value);
17465 *self = Self::from_bits_retain(
17466 (self.bits() & !(Self::IMMEDIATE_MASK << offset)) | ((value as u32) << offset),
17467 );
17468 }
17469
17470 pub const fn with_immediate(mut self, value: u8) -> Self {
17472 self.set_immediate(value);
17473 self
17474 }
17475
17476 pub const fn interwork(self) -> u8 {
17478 ((self.bits() >> Self::INTERWORK_SHIFT) & 0b1111) as u8
17479 }
17480
17481 pub const fn set_interwork(&mut self, value: u8) {
17483 let offset = Self::INTERWORK_SHIFT;
17484 assert!(value & (Self::INTERWORK_MASK as u8) == value);
17485 *self = Self::from_bits_retain(
17486 (self.bits() & !(Self::INTERWORK_MASK << offset)) | ((value as u32) << offset),
17487 );
17488 }
17489
17490 pub const fn with_interwork(mut self, value: u8) -> Self {
17492 self.set_interwork(value);
17493 self
17494 }
17495
17496 pub const fn jazelle(self) -> u8 {
17498 ((self.bits() >> Self::JAZELLE_SHIFT) & 0b1111) as u8
17499 }
17500
17501 pub const fn set_jazelle(&mut self, value: u8) {
17503 let offset = Self::JAZELLE_SHIFT;
17504 assert!(value & (Self::JAZELLE_MASK as u8) == value);
17505 *self = Self::from_bits_retain(
17506 (self.bits() & !(Self::JAZELLE_MASK << offset)) | ((value as u32) << offset),
17507 );
17508 }
17509
17510 pub const fn with_jazelle(mut self, value: u8) -> Self {
17512 self.set_jazelle(value);
17513 self
17514 }
17515}
17516
17517bitflags! {
17518 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17520 #[repr(transparent)]
17521 pub struct IdIsar2: u32 {
17522 }
17523}
17524
17525impl IdIsar2 {
17526 pub const LOADSTORE_SHIFT: u32 = 0;
17528 pub const LOADSTORE_MASK: u32 = 0b1111;
17530 pub const MEMHINT_SHIFT: u32 = 4;
17532 pub const MEMHINT_MASK: u32 = 0b1111;
17534 pub const MULTIACCESSINT_SHIFT: u32 = 8;
17536 pub const MULTIACCESSINT_MASK: u32 = 0b1111;
17538 pub const MULT_SHIFT: u32 = 12;
17540 pub const MULT_MASK: u32 = 0b1111;
17542 pub const MULTS_SHIFT: u32 = 16;
17544 pub const MULTS_MASK: u32 = 0b1111;
17546 pub const MULTU_SHIFT: u32 = 20;
17548 pub const MULTU_MASK: u32 = 0b1111;
17550 pub const PSR_AR_SHIFT: u32 = 24;
17552 pub const PSR_AR_MASK: u32 = 0b1111;
17554 pub const REVERSAL_SHIFT: u32 = 28;
17556 pub const REVERSAL_MASK: u32 = 0b1111;
17558
17559 pub const fn loadstore(self) -> u8 {
17561 ((self.bits() >> Self::LOADSTORE_SHIFT) & 0b1111) as u8
17562 }
17563
17564 pub const fn set_loadstore(&mut self, value: u8) {
17566 let offset = Self::LOADSTORE_SHIFT;
17567 assert!(value & (Self::LOADSTORE_MASK as u8) == value);
17568 *self = Self::from_bits_retain(
17569 (self.bits() & !(Self::LOADSTORE_MASK << offset)) | ((value as u32) << offset),
17570 );
17571 }
17572
17573 pub const fn with_loadstore(mut self, value: u8) -> Self {
17575 self.set_loadstore(value);
17576 self
17577 }
17578
17579 pub const fn memhint(self) -> u8 {
17581 ((self.bits() >> Self::MEMHINT_SHIFT) & 0b1111) as u8
17582 }
17583
17584 pub const fn set_memhint(&mut self, value: u8) {
17586 let offset = Self::MEMHINT_SHIFT;
17587 assert!(value & (Self::MEMHINT_MASK as u8) == value);
17588 *self = Self::from_bits_retain(
17589 (self.bits() & !(Self::MEMHINT_MASK << offset)) | ((value as u32) << offset),
17590 );
17591 }
17592
17593 pub const fn with_memhint(mut self, value: u8) -> Self {
17595 self.set_memhint(value);
17596 self
17597 }
17598
17599 pub const fn multiaccessint(self) -> u8 {
17601 ((self.bits() >> Self::MULTIACCESSINT_SHIFT) & 0b1111) as u8
17602 }
17603
17604 pub const fn set_multiaccessint(&mut self, value: u8) {
17606 let offset = Self::MULTIACCESSINT_SHIFT;
17607 assert!(value & (Self::MULTIACCESSINT_MASK as u8) == value);
17608 *self = Self::from_bits_retain(
17609 (self.bits() & !(Self::MULTIACCESSINT_MASK << offset)) | ((value as u32) << offset),
17610 );
17611 }
17612
17613 pub const fn with_multiaccessint(mut self, value: u8) -> Self {
17615 self.set_multiaccessint(value);
17616 self
17617 }
17618
17619 pub const fn mult(self) -> u8 {
17621 ((self.bits() >> Self::MULT_SHIFT) & 0b1111) as u8
17622 }
17623
17624 pub const fn set_mult(&mut self, value: u8) {
17626 let offset = Self::MULT_SHIFT;
17627 assert!(value & (Self::MULT_MASK as u8) == value);
17628 *self = Self::from_bits_retain(
17629 (self.bits() & !(Self::MULT_MASK << offset)) | ((value as u32) << offset),
17630 );
17631 }
17632
17633 pub const fn with_mult(mut self, value: u8) -> Self {
17635 self.set_mult(value);
17636 self
17637 }
17638
17639 pub const fn mults(self) -> u8 {
17641 ((self.bits() >> Self::MULTS_SHIFT) & 0b1111) as u8
17642 }
17643
17644 pub const fn set_mults(&mut self, value: u8) {
17646 let offset = Self::MULTS_SHIFT;
17647 assert!(value & (Self::MULTS_MASK as u8) == value);
17648 *self = Self::from_bits_retain(
17649 (self.bits() & !(Self::MULTS_MASK << offset)) | ((value as u32) << offset),
17650 );
17651 }
17652
17653 pub const fn with_mults(mut self, value: u8) -> Self {
17655 self.set_mults(value);
17656 self
17657 }
17658
17659 pub const fn multu(self) -> u8 {
17661 ((self.bits() >> Self::MULTU_SHIFT) & 0b1111) as u8
17662 }
17663
17664 pub const fn set_multu(&mut self, value: u8) {
17666 let offset = Self::MULTU_SHIFT;
17667 assert!(value & (Self::MULTU_MASK as u8) == value);
17668 *self = Self::from_bits_retain(
17669 (self.bits() & !(Self::MULTU_MASK << offset)) | ((value as u32) << offset),
17670 );
17671 }
17672
17673 pub const fn with_multu(mut self, value: u8) -> Self {
17675 self.set_multu(value);
17676 self
17677 }
17678
17679 pub const fn psr_ar(self) -> u8 {
17681 ((self.bits() >> Self::PSR_AR_SHIFT) & 0b1111) as u8
17682 }
17683
17684 pub const fn set_psr_ar(&mut self, value: u8) {
17686 let offset = Self::PSR_AR_SHIFT;
17687 assert!(value & (Self::PSR_AR_MASK as u8) == value);
17688 *self = Self::from_bits_retain(
17689 (self.bits() & !(Self::PSR_AR_MASK << offset)) | ((value as u32) << offset),
17690 );
17691 }
17692
17693 pub const fn with_psr_ar(mut self, value: u8) -> Self {
17695 self.set_psr_ar(value);
17696 self
17697 }
17698
17699 pub const fn reversal(self) -> u8 {
17701 ((self.bits() >> Self::REVERSAL_SHIFT) & 0b1111) as u8
17702 }
17703
17704 pub const fn set_reversal(&mut self, value: u8) {
17706 let offset = Self::REVERSAL_SHIFT;
17707 assert!(value & (Self::REVERSAL_MASK as u8) == value);
17708 *self = Self::from_bits_retain(
17709 (self.bits() & !(Self::REVERSAL_MASK << offset)) | ((value as u32) << offset),
17710 );
17711 }
17712
17713 pub const fn with_reversal(mut self, value: u8) -> Self {
17715 self.set_reversal(value);
17716 self
17717 }
17718}
17719
17720bitflags! {
17721 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17723 #[repr(transparent)]
17724 pub struct IdIsar3: u32 {
17725 }
17726}
17727
17728impl IdIsar3 {
17729 pub const SATURATE_SHIFT: u32 = 0;
17731 pub const SATURATE_MASK: u32 = 0b1111;
17733 pub const SIMD_SHIFT: u32 = 4;
17735 pub const SIMD_MASK: u32 = 0b1111;
17737 pub const SVC_SHIFT: u32 = 8;
17739 pub const SVC_MASK: u32 = 0b1111;
17741 pub const SYNCHPRIM_SHIFT: u32 = 12;
17743 pub const SYNCHPRIM_MASK: u32 = 0b1111;
17745 pub const TABBRANCH_SHIFT: u32 = 16;
17747 pub const TABBRANCH_MASK: u32 = 0b1111;
17749 pub const T32COPY_SHIFT: u32 = 20;
17751 pub const T32COPY_MASK: u32 = 0b1111;
17753 pub const TRUENOP_SHIFT: u32 = 24;
17755 pub const TRUENOP_MASK: u32 = 0b1111;
17757 pub const T32EE_SHIFT: u32 = 28;
17759 pub const T32EE_MASK: u32 = 0b1111;
17761
17762 pub const fn saturate(self) -> u8 {
17764 ((self.bits() >> Self::SATURATE_SHIFT) & 0b1111) as u8
17765 }
17766
17767 pub const fn set_saturate(&mut self, value: u8) {
17769 let offset = Self::SATURATE_SHIFT;
17770 assert!(value & (Self::SATURATE_MASK as u8) == value);
17771 *self = Self::from_bits_retain(
17772 (self.bits() & !(Self::SATURATE_MASK << offset)) | ((value as u32) << offset),
17773 );
17774 }
17775
17776 pub const fn with_saturate(mut self, value: u8) -> Self {
17778 self.set_saturate(value);
17779 self
17780 }
17781
17782 pub const fn simd(self) -> u8 {
17784 ((self.bits() >> Self::SIMD_SHIFT) & 0b1111) as u8
17785 }
17786
17787 pub const fn set_simd(&mut self, value: u8) {
17789 let offset = Self::SIMD_SHIFT;
17790 assert!(value & (Self::SIMD_MASK as u8) == value);
17791 *self = Self::from_bits_retain(
17792 (self.bits() & !(Self::SIMD_MASK << offset)) | ((value as u32) << offset),
17793 );
17794 }
17795
17796 pub const fn with_simd(mut self, value: u8) -> Self {
17798 self.set_simd(value);
17799 self
17800 }
17801
17802 pub const fn svc(self) -> u8 {
17804 ((self.bits() >> Self::SVC_SHIFT) & 0b1111) as u8
17805 }
17806
17807 pub const fn set_svc(&mut self, value: u8) {
17809 let offset = Self::SVC_SHIFT;
17810 assert!(value & (Self::SVC_MASK as u8) == value);
17811 *self = Self::from_bits_retain(
17812 (self.bits() & !(Self::SVC_MASK << offset)) | ((value as u32) << offset),
17813 );
17814 }
17815
17816 pub const fn with_svc(mut self, value: u8) -> Self {
17818 self.set_svc(value);
17819 self
17820 }
17821
17822 pub const fn synchprim(self) -> u8 {
17824 ((self.bits() >> Self::SYNCHPRIM_SHIFT) & 0b1111) as u8
17825 }
17826
17827 pub const fn set_synchprim(&mut self, value: u8) {
17829 let offset = Self::SYNCHPRIM_SHIFT;
17830 assert!(value & (Self::SYNCHPRIM_MASK as u8) == value);
17831 *self = Self::from_bits_retain(
17832 (self.bits() & !(Self::SYNCHPRIM_MASK << offset)) | ((value as u32) << offset),
17833 );
17834 }
17835
17836 pub const fn with_synchprim(mut self, value: u8) -> Self {
17838 self.set_synchprim(value);
17839 self
17840 }
17841
17842 pub const fn tabbranch(self) -> u8 {
17844 ((self.bits() >> Self::TABBRANCH_SHIFT) & 0b1111) as u8
17845 }
17846
17847 pub const fn set_tabbranch(&mut self, value: u8) {
17849 let offset = Self::TABBRANCH_SHIFT;
17850 assert!(value & (Self::TABBRANCH_MASK as u8) == value);
17851 *self = Self::from_bits_retain(
17852 (self.bits() & !(Self::TABBRANCH_MASK << offset)) | ((value as u32) << offset),
17853 );
17854 }
17855
17856 pub const fn with_tabbranch(mut self, value: u8) -> Self {
17858 self.set_tabbranch(value);
17859 self
17860 }
17861
17862 pub const fn t32copy(self) -> u8 {
17864 ((self.bits() >> Self::T32COPY_SHIFT) & 0b1111) as u8
17865 }
17866
17867 pub const fn set_t32copy(&mut self, value: u8) {
17869 let offset = Self::T32COPY_SHIFT;
17870 assert!(value & (Self::T32COPY_MASK as u8) == value);
17871 *self = Self::from_bits_retain(
17872 (self.bits() & !(Self::T32COPY_MASK << offset)) | ((value as u32) << offset),
17873 );
17874 }
17875
17876 pub const fn with_t32copy(mut self, value: u8) -> Self {
17878 self.set_t32copy(value);
17879 self
17880 }
17881
17882 pub const fn truenop(self) -> u8 {
17884 ((self.bits() >> Self::TRUENOP_SHIFT) & 0b1111) as u8
17885 }
17886
17887 pub const fn set_truenop(&mut self, value: u8) {
17889 let offset = Self::TRUENOP_SHIFT;
17890 assert!(value & (Self::TRUENOP_MASK as u8) == value);
17891 *self = Self::from_bits_retain(
17892 (self.bits() & !(Self::TRUENOP_MASK << offset)) | ((value as u32) << offset),
17893 );
17894 }
17895
17896 pub const fn with_truenop(mut self, value: u8) -> Self {
17898 self.set_truenop(value);
17899 self
17900 }
17901
17902 pub const fn t32ee(self) -> u8 {
17904 ((self.bits() >> Self::T32EE_SHIFT) & 0b1111) as u8
17905 }
17906
17907 pub const fn set_t32ee(&mut self, value: u8) {
17909 let offset = Self::T32EE_SHIFT;
17910 assert!(value & (Self::T32EE_MASK as u8) == value);
17911 *self = Self::from_bits_retain(
17912 (self.bits() & !(Self::T32EE_MASK << offset)) | ((value as u32) << offset),
17913 );
17914 }
17915
17916 pub const fn with_t32ee(mut self, value: u8) -> Self {
17918 self.set_t32ee(value);
17919 self
17920 }
17921}
17922
17923bitflags! {
17924 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17926 #[repr(transparent)]
17927 pub struct IdIsar4: u32 {
17928 }
17929}
17930
17931impl IdIsar4 {
17932 pub const UNPRIV_SHIFT: u32 = 0;
17934 pub const UNPRIV_MASK: u32 = 0b1111;
17936 pub const WITHSHIFTS_SHIFT: u32 = 4;
17938 pub const WITHSHIFTS_MASK: u32 = 0b1111;
17940 pub const WRITEBACK_SHIFT: u32 = 8;
17942 pub const WRITEBACK_MASK: u32 = 0b1111;
17944 pub const SMC_SHIFT: u32 = 12;
17946 pub const SMC_MASK: u32 = 0b1111;
17948 pub const BARRIER_SHIFT: u32 = 16;
17950 pub const BARRIER_MASK: u32 = 0b1111;
17952 pub const SYNCHPRIM_FRAC_SHIFT: u32 = 20;
17954 pub const SYNCHPRIM_FRAC_MASK: u32 = 0b1111;
17956 pub const PSR_M_SHIFT: u32 = 24;
17958 pub const PSR_M_MASK: u32 = 0b1111;
17960 pub const SWP_FRAC_SHIFT: u32 = 28;
17962 pub const SWP_FRAC_MASK: u32 = 0b1111;
17964
17965 pub const fn unpriv(self) -> u8 {
17967 ((self.bits() >> Self::UNPRIV_SHIFT) & 0b1111) as u8
17968 }
17969
17970 pub const fn set_unpriv(&mut self, value: u8) {
17972 let offset = Self::UNPRIV_SHIFT;
17973 assert!(value & (Self::UNPRIV_MASK as u8) == value);
17974 *self = Self::from_bits_retain(
17975 (self.bits() & !(Self::UNPRIV_MASK << offset)) | ((value as u32) << offset),
17976 );
17977 }
17978
17979 pub const fn with_unpriv(mut self, value: u8) -> Self {
17981 self.set_unpriv(value);
17982 self
17983 }
17984
17985 pub const fn withshifts(self) -> u8 {
17987 ((self.bits() >> Self::WITHSHIFTS_SHIFT) & 0b1111) as u8
17988 }
17989
17990 pub const fn set_withshifts(&mut self, value: u8) {
17992 let offset = Self::WITHSHIFTS_SHIFT;
17993 assert!(value & (Self::WITHSHIFTS_MASK as u8) == value);
17994 *self = Self::from_bits_retain(
17995 (self.bits() & !(Self::WITHSHIFTS_MASK << offset)) | ((value as u32) << offset),
17996 );
17997 }
17998
17999 pub const fn with_withshifts(mut self, value: u8) -> Self {
18001 self.set_withshifts(value);
18002 self
18003 }
18004
18005 pub const fn writeback(self) -> u8 {
18007 ((self.bits() >> Self::WRITEBACK_SHIFT) & 0b1111) as u8
18008 }
18009
18010 pub const fn set_writeback(&mut self, value: u8) {
18012 let offset = Self::WRITEBACK_SHIFT;
18013 assert!(value & (Self::WRITEBACK_MASK as u8) == value);
18014 *self = Self::from_bits_retain(
18015 (self.bits() & !(Self::WRITEBACK_MASK << offset)) | ((value as u32) << offset),
18016 );
18017 }
18018
18019 pub const fn with_writeback(mut self, value: u8) -> Self {
18021 self.set_writeback(value);
18022 self
18023 }
18024
18025 pub const fn smc(self) -> u8 {
18027 ((self.bits() >> Self::SMC_SHIFT) & 0b1111) as u8
18028 }
18029
18030 pub const fn set_smc(&mut self, value: u8) {
18032 let offset = Self::SMC_SHIFT;
18033 assert!(value & (Self::SMC_MASK as u8) == value);
18034 *self = Self::from_bits_retain(
18035 (self.bits() & !(Self::SMC_MASK << offset)) | ((value as u32) << offset),
18036 );
18037 }
18038
18039 pub const fn with_smc(mut self, value: u8) -> Self {
18041 self.set_smc(value);
18042 self
18043 }
18044
18045 pub const fn barrier(self) -> u8 {
18047 ((self.bits() >> Self::BARRIER_SHIFT) & 0b1111) as u8
18048 }
18049
18050 pub const fn set_barrier(&mut self, value: u8) {
18052 let offset = Self::BARRIER_SHIFT;
18053 assert!(value & (Self::BARRIER_MASK as u8) == value);
18054 *self = Self::from_bits_retain(
18055 (self.bits() & !(Self::BARRIER_MASK << offset)) | ((value as u32) << offset),
18056 );
18057 }
18058
18059 pub const fn with_barrier(mut self, value: u8) -> Self {
18061 self.set_barrier(value);
18062 self
18063 }
18064
18065 pub const fn synchprim_frac(self) -> u8 {
18067 ((self.bits() >> Self::SYNCHPRIM_FRAC_SHIFT) & 0b1111) as u8
18068 }
18069
18070 pub const fn set_synchprim_frac(&mut self, value: u8) {
18072 let offset = Self::SYNCHPRIM_FRAC_SHIFT;
18073 assert!(value & (Self::SYNCHPRIM_FRAC_MASK as u8) == value);
18074 *self = Self::from_bits_retain(
18075 (self.bits() & !(Self::SYNCHPRIM_FRAC_MASK << offset)) | ((value as u32) << offset),
18076 );
18077 }
18078
18079 pub const fn with_synchprim_frac(mut self, value: u8) -> Self {
18081 self.set_synchprim_frac(value);
18082 self
18083 }
18084
18085 pub const fn psr_m(self) -> u8 {
18087 ((self.bits() >> Self::PSR_M_SHIFT) & 0b1111) as u8
18088 }
18089
18090 pub const fn set_psr_m(&mut self, value: u8) {
18092 let offset = Self::PSR_M_SHIFT;
18093 assert!(value & (Self::PSR_M_MASK as u8) == value);
18094 *self = Self::from_bits_retain(
18095 (self.bits() & !(Self::PSR_M_MASK << offset)) | ((value as u32) << offset),
18096 );
18097 }
18098
18099 pub const fn with_psr_m(mut self, value: u8) -> Self {
18101 self.set_psr_m(value);
18102 self
18103 }
18104
18105 pub const fn swp_frac(self) -> u8 {
18107 ((self.bits() >> Self::SWP_FRAC_SHIFT) & 0b1111) as u8
18108 }
18109
18110 pub const fn set_swp_frac(&mut self, value: u8) {
18112 let offset = Self::SWP_FRAC_SHIFT;
18113 assert!(value & (Self::SWP_FRAC_MASK as u8) == value);
18114 *self = Self::from_bits_retain(
18115 (self.bits() & !(Self::SWP_FRAC_MASK << offset)) | ((value as u32) << offset),
18116 );
18117 }
18118
18119 pub const fn with_swp_frac(mut self, value: u8) -> Self {
18121 self.set_swp_frac(value);
18122 self
18123 }
18124}
18125
18126bitflags! {
18127 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18129 #[repr(transparent)]
18130 pub struct IdIsar5: u32 {
18131 }
18132}
18133
18134impl IdIsar5 {
18135 pub const SEVL_SHIFT: u32 = 0;
18137 pub const SEVL_MASK: u32 = 0b1111;
18139 pub const AES_SHIFT: u32 = 4;
18141 pub const AES_MASK: u32 = 0b1111;
18143 pub const SHA1_SHIFT: u32 = 8;
18145 pub const SHA1_MASK: u32 = 0b1111;
18147 pub const SHA2_SHIFT: u32 = 12;
18149 pub const SHA2_MASK: u32 = 0b1111;
18151 pub const CRC32_SHIFT: u32 = 16;
18153 pub const CRC32_MASK: u32 = 0b1111;
18155 pub const RDM_SHIFT: u32 = 24;
18157 pub const RDM_MASK: u32 = 0b1111;
18159 pub const VCMA_SHIFT: u32 = 28;
18161 pub const VCMA_MASK: u32 = 0b1111;
18163
18164 pub const fn sevl(self) -> u8 {
18166 ((self.bits() >> Self::SEVL_SHIFT) & 0b1111) as u8
18167 }
18168
18169 pub const fn set_sevl(&mut self, value: u8) {
18171 let offset = Self::SEVL_SHIFT;
18172 assert!(value & (Self::SEVL_MASK as u8) == value);
18173 *self = Self::from_bits_retain(
18174 (self.bits() & !(Self::SEVL_MASK << offset)) | ((value as u32) << offset),
18175 );
18176 }
18177
18178 pub const fn with_sevl(mut self, value: u8) -> Self {
18180 self.set_sevl(value);
18181 self
18182 }
18183
18184 pub const fn aes(self) -> u8 {
18186 ((self.bits() >> Self::AES_SHIFT) & 0b1111) as u8
18187 }
18188
18189 pub const fn set_aes(&mut self, value: u8) {
18191 let offset = Self::AES_SHIFT;
18192 assert!(value & (Self::AES_MASK as u8) == value);
18193 *self = Self::from_bits_retain(
18194 (self.bits() & !(Self::AES_MASK << offset)) | ((value as u32) << offset),
18195 );
18196 }
18197
18198 pub const fn with_aes(mut self, value: u8) -> Self {
18200 self.set_aes(value);
18201 self
18202 }
18203
18204 pub const fn sha1(self) -> u8 {
18206 ((self.bits() >> Self::SHA1_SHIFT) & 0b1111) as u8
18207 }
18208
18209 pub const fn set_sha1(&mut self, value: u8) {
18211 let offset = Self::SHA1_SHIFT;
18212 assert!(value & (Self::SHA1_MASK as u8) == value);
18213 *self = Self::from_bits_retain(
18214 (self.bits() & !(Self::SHA1_MASK << offset)) | ((value as u32) << offset),
18215 );
18216 }
18217
18218 pub const fn with_sha1(mut self, value: u8) -> Self {
18220 self.set_sha1(value);
18221 self
18222 }
18223
18224 pub const fn sha2(self) -> u8 {
18226 ((self.bits() >> Self::SHA2_SHIFT) & 0b1111) as u8
18227 }
18228
18229 pub const fn set_sha2(&mut self, value: u8) {
18231 let offset = Self::SHA2_SHIFT;
18232 assert!(value & (Self::SHA2_MASK as u8) == value);
18233 *self = Self::from_bits_retain(
18234 (self.bits() & !(Self::SHA2_MASK << offset)) | ((value as u32) << offset),
18235 );
18236 }
18237
18238 pub const fn with_sha2(mut self, value: u8) -> Self {
18240 self.set_sha2(value);
18241 self
18242 }
18243
18244 pub const fn crc32(self) -> u8 {
18246 ((self.bits() >> Self::CRC32_SHIFT) & 0b1111) as u8
18247 }
18248
18249 pub const fn set_crc32(&mut self, value: u8) {
18251 let offset = Self::CRC32_SHIFT;
18252 assert!(value & (Self::CRC32_MASK as u8) == value);
18253 *self = Self::from_bits_retain(
18254 (self.bits() & !(Self::CRC32_MASK << offset)) | ((value as u32) << offset),
18255 );
18256 }
18257
18258 pub const fn with_crc32(mut self, value: u8) -> Self {
18260 self.set_crc32(value);
18261 self
18262 }
18263
18264 pub const fn rdm(self) -> u8 {
18266 ((self.bits() >> Self::RDM_SHIFT) & 0b1111) as u8
18267 }
18268
18269 pub const fn set_rdm(&mut self, value: u8) {
18271 let offset = Self::RDM_SHIFT;
18272 assert!(value & (Self::RDM_MASK as u8) == value);
18273 *self = Self::from_bits_retain(
18274 (self.bits() & !(Self::RDM_MASK << offset)) | ((value as u32) << offset),
18275 );
18276 }
18277
18278 pub const fn with_rdm(mut self, value: u8) -> Self {
18280 self.set_rdm(value);
18281 self
18282 }
18283
18284 pub const fn vcma(self) -> u8 {
18286 ((self.bits() >> Self::VCMA_SHIFT) & 0b1111) as u8
18287 }
18288
18289 pub const fn set_vcma(&mut self, value: u8) {
18291 let offset = Self::VCMA_SHIFT;
18292 assert!(value & (Self::VCMA_MASK as u8) == value);
18293 *self = Self::from_bits_retain(
18294 (self.bits() & !(Self::VCMA_MASK << offset)) | ((value as u32) << offset),
18295 );
18296 }
18297
18298 pub const fn with_vcma(mut self, value: u8) -> Self {
18300 self.set_vcma(value);
18301 self
18302 }
18303}
18304
18305bitflags! {
18306 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18308 #[repr(transparent)]
18309 pub struct IdIsar6: u32 {
18310 }
18311}
18312
18313impl IdIsar6 {
18314 pub const JSCVT_SHIFT: u32 = 0;
18316 pub const JSCVT_MASK: u32 = 0b1111;
18318 pub const DP_SHIFT: u32 = 4;
18320 pub const DP_MASK: u32 = 0b1111;
18322 pub const FHM_SHIFT: u32 = 8;
18324 pub const FHM_MASK: u32 = 0b1111;
18326 pub const SB_SHIFT: u32 = 12;
18328 pub const SB_MASK: u32 = 0b1111;
18330 pub const SPECRES_SHIFT: u32 = 16;
18332 pub const SPECRES_MASK: u32 = 0b1111;
18334 pub const BF16_SHIFT: u32 = 20;
18336 pub const BF16_MASK: u32 = 0b1111;
18338 pub const I8MM_SHIFT: u32 = 24;
18340 pub const I8MM_MASK: u32 = 0b1111;
18342 pub const CLRBHB_SHIFT: u32 = 28;
18344 pub const CLRBHB_MASK: u32 = 0b1111;
18346
18347 pub const fn jscvt(self) -> u8 {
18349 ((self.bits() >> Self::JSCVT_SHIFT) & 0b1111) as u8
18350 }
18351
18352 pub const fn set_jscvt(&mut self, value: u8) {
18354 let offset = Self::JSCVT_SHIFT;
18355 assert!(value & (Self::JSCVT_MASK as u8) == value);
18356 *self = Self::from_bits_retain(
18357 (self.bits() & !(Self::JSCVT_MASK << offset)) | ((value as u32) << offset),
18358 );
18359 }
18360
18361 pub const fn with_jscvt(mut self, value: u8) -> Self {
18363 self.set_jscvt(value);
18364 self
18365 }
18366
18367 pub const fn dp(self) -> u8 {
18369 ((self.bits() >> Self::DP_SHIFT) & 0b1111) as u8
18370 }
18371
18372 pub const fn set_dp(&mut self, value: u8) {
18374 let offset = Self::DP_SHIFT;
18375 assert!(value & (Self::DP_MASK as u8) == value);
18376 *self = Self::from_bits_retain(
18377 (self.bits() & !(Self::DP_MASK << offset)) | ((value as u32) << offset),
18378 );
18379 }
18380
18381 pub const fn with_dp(mut self, value: u8) -> Self {
18383 self.set_dp(value);
18384 self
18385 }
18386
18387 pub const fn fhm(self) -> u8 {
18389 ((self.bits() >> Self::FHM_SHIFT) & 0b1111) as u8
18390 }
18391
18392 pub const fn set_fhm(&mut self, value: u8) {
18394 let offset = Self::FHM_SHIFT;
18395 assert!(value & (Self::FHM_MASK as u8) == value);
18396 *self = Self::from_bits_retain(
18397 (self.bits() & !(Self::FHM_MASK << offset)) | ((value as u32) << offset),
18398 );
18399 }
18400
18401 pub const fn with_fhm(mut self, value: u8) -> Self {
18403 self.set_fhm(value);
18404 self
18405 }
18406
18407 pub const fn sb(self) -> u8 {
18409 ((self.bits() >> Self::SB_SHIFT) & 0b1111) as u8
18410 }
18411
18412 pub const fn set_sb(&mut self, value: u8) {
18414 let offset = Self::SB_SHIFT;
18415 assert!(value & (Self::SB_MASK as u8) == value);
18416 *self = Self::from_bits_retain(
18417 (self.bits() & !(Self::SB_MASK << offset)) | ((value as u32) << offset),
18418 );
18419 }
18420
18421 pub const fn with_sb(mut self, value: u8) -> Self {
18423 self.set_sb(value);
18424 self
18425 }
18426
18427 pub const fn specres(self) -> u8 {
18429 ((self.bits() >> Self::SPECRES_SHIFT) & 0b1111) as u8
18430 }
18431
18432 pub const fn set_specres(&mut self, value: u8) {
18434 let offset = Self::SPECRES_SHIFT;
18435 assert!(value & (Self::SPECRES_MASK as u8) == value);
18436 *self = Self::from_bits_retain(
18437 (self.bits() & !(Self::SPECRES_MASK << offset)) | ((value as u32) << offset),
18438 );
18439 }
18440
18441 pub const fn with_specres(mut self, value: u8) -> Self {
18443 self.set_specres(value);
18444 self
18445 }
18446
18447 pub const fn bf16(self) -> u8 {
18449 ((self.bits() >> Self::BF16_SHIFT) & 0b1111) as u8
18450 }
18451
18452 pub const fn set_bf16(&mut self, value: u8) {
18454 let offset = Self::BF16_SHIFT;
18455 assert!(value & (Self::BF16_MASK as u8) == value);
18456 *self = Self::from_bits_retain(
18457 (self.bits() & !(Self::BF16_MASK << offset)) | ((value as u32) << offset),
18458 );
18459 }
18460
18461 pub const fn with_bf16(mut self, value: u8) -> Self {
18463 self.set_bf16(value);
18464 self
18465 }
18466
18467 pub const fn i8mm(self) -> u8 {
18469 ((self.bits() >> Self::I8MM_SHIFT) & 0b1111) as u8
18470 }
18471
18472 pub const fn set_i8mm(&mut self, value: u8) {
18474 let offset = Self::I8MM_SHIFT;
18475 assert!(value & (Self::I8MM_MASK as u8) == value);
18476 *self = Self::from_bits_retain(
18477 (self.bits() & !(Self::I8MM_MASK << offset)) | ((value as u32) << offset),
18478 );
18479 }
18480
18481 pub const fn with_i8mm(mut self, value: u8) -> Self {
18483 self.set_i8mm(value);
18484 self
18485 }
18486
18487 pub const fn clrbhb(self) -> u8 {
18489 ((self.bits() >> Self::CLRBHB_SHIFT) & 0b1111) as u8
18490 }
18491
18492 pub const fn set_clrbhb(&mut self, value: u8) {
18494 let offset = Self::CLRBHB_SHIFT;
18495 assert!(value & (Self::CLRBHB_MASK as u8) == value);
18496 *self = Self::from_bits_retain(
18497 (self.bits() & !(Self::CLRBHB_MASK << offset)) | ((value as u32) << offset),
18498 );
18499 }
18500
18501 pub const fn with_clrbhb(mut self, value: u8) -> Self {
18503 self.set_clrbhb(value);
18504 self
18505 }
18506}
18507
18508bitflags! {
18509 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18511 #[repr(transparent)]
18512 pub struct IdMmfr0: u32 {
18513 }
18514}
18515
18516impl IdMmfr0 {
18517 pub const VMSA_SHIFT: u32 = 0;
18519 pub const VMSA_MASK: u32 = 0b1111;
18521 pub const PMSA_SHIFT: u32 = 4;
18523 pub const PMSA_MASK: u32 = 0b1111;
18525 pub const OUTERSHR_SHIFT: u32 = 8;
18527 pub const OUTERSHR_MASK: u32 = 0b1111;
18529 pub const SHARELVL_SHIFT: u32 = 12;
18531 pub const SHARELVL_MASK: u32 = 0b1111;
18533 pub const TCM_SHIFT: u32 = 16;
18535 pub const TCM_MASK: u32 = 0b1111;
18537 pub const AUXREG_SHIFT: u32 = 20;
18539 pub const AUXREG_MASK: u32 = 0b1111;
18541 pub const FCSE_SHIFT: u32 = 24;
18543 pub const FCSE_MASK: u32 = 0b1111;
18545 pub const INNERSHR_SHIFT: u32 = 28;
18547 pub const INNERSHR_MASK: u32 = 0b1111;
18549
18550 pub const fn vmsa(self) -> u8 {
18552 ((self.bits() >> Self::VMSA_SHIFT) & 0b1111) as u8
18553 }
18554
18555 pub const fn set_vmsa(&mut self, value: u8) {
18557 let offset = Self::VMSA_SHIFT;
18558 assert!(value & (Self::VMSA_MASK as u8) == value);
18559 *self = Self::from_bits_retain(
18560 (self.bits() & !(Self::VMSA_MASK << offset)) | ((value as u32) << offset),
18561 );
18562 }
18563
18564 pub const fn with_vmsa(mut self, value: u8) -> Self {
18566 self.set_vmsa(value);
18567 self
18568 }
18569
18570 pub const fn pmsa(self) -> u8 {
18572 ((self.bits() >> Self::PMSA_SHIFT) & 0b1111) as u8
18573 }
18574
18575 pub const fn set_pmsa(&mut self, value: u8) {
18577 let offset = Self::PMSA_SHIFT;
18578 assert!(value & (Self::PMSA_MASK as u8) == value);
18579 *self = Self::from_bits_retain(
18580 (self.bits() & !(Self::PMSA_MASK << offset)) | ((value as u32) << offset),
18581 );
18582 }
18583
18584 pub const fn with_pmsa(mut self, value: u8) -> Self {
18586 self.set_pmsa(value);
18587 self
18588 }
18589
18590 pub const fn outershr(self) -> u8 {
18592 ((self.bits() >> Self::OUTERSHR_SHIFT) & 0b1111) as u8
18593 }
18594
18595 pub const fn set_outershr(&mut self, value: u8) {
18597 let offset = Self::OUTERSHR_SHIFT;
18598 assert!(value & (Self::OUTERSHR_MASK as u8) == value);
18599 *self = Self::from_bits_retain(
18600 (self.bits() & !(Self::OUTERSHR_MASK << offset)) | ((value as u32) << offset),
18601 );
18602 }
18603
18604 pub const fn with_outershr(mut self, value: u8) -> Self {
18606 self.set_outershr(value);
18607 self
18608 }
18609
18610 pub const fn sharelvl(self) -> u8 {
18612 ((self.bits() >> Self::SHARELVL_SHIFT) & 0b1111) as u8
18613 }
18614
18615 pub const fn set_sharelvl(&mut self, value: u8) {
18617 let offset = Self::SHARELVL_SHIFT;
18618 assert!(value & (Self::SHARELVL_MASK as u8) == value);
18619 *self = Self::from_bits_retain(
18620 (self.bits() & !(Self::SHARELVL_MASK << offset)) | ((value as u32) << offset),
18621 );
18622 }
18623
18624 pub const fn with_sharelvl(mut self, value: u8) -> Self {
18626 self.set_sharelvl(value);
18627 self
18628 }
18629
18630 pub const fn tcm(self) -> u8 {
18632 ((self.bits() >> Self::TCM_SHIFT) & 0b1111) as u8
18633 }
18634
18635 pub const fn set_tcm(&mut self, value: u8) {
18637 let offset = Self::TCM_SHIFT;
18638 assert!(value & (Self::TCM_MASK as u8) == value);
18639 *self = Self::from_bits_retain(
18640 (self.bits() & !(Self::TCM_MASK << offset)) | ((value as u32) << offset),
18641 );
18642 }
18643
18644 pub const fn with_tcm(mut self, value: u8) -> Self {
18646 self.set_tcm(value);
18647 self
18648 }
18649
18650 pub const fn auxreg(self) -> u8 {
18652 ((self.bits() >> Self::AUXREG_SHIFT) & 0b1111) as u8
18653 }
18654
18655 pub const fn set_auxreg(&mut self, value: u8) {
18657 let offset = Self::AUXREG_SHIFT;
18658 assert!(value & (Self::AUXREG_MASK as u8) == value);
18659 *self = Self::from_bits_retain(
18660 (self.bits() & !(Self::AUXREG_MASK << offset)) | ((value as u32) << offset),
18661 );
18662 }
18663
18664 pub const fn with_auxreg(mut self, value: u8) -> Self {
18666 self.set_auxreg(value);
18667 self
18668 }
18669
18670 pub const fn fcse(self) -> u8 {
18672 ((self.bits() >> Self::FCSE_SHIFT) & 0b1111) as u8
18673 }
18674
18675 pub const fn set_fcse(&mut self, value: u8) {
18677 let offset = Self::FCSE_SHIFT;
18678 assert!(value & (Self::FCSE_MASK as u8) == value);
18679 *self = Self::from_bits_retain(
18680 (self.bits() & !(Self::FCSE_MASK << offset)) | ((value as u32) << offset),
18681 );
18682 }
18683
18684 pub const fn with_fcse(mut self, value: u8) -> Self {
18686 self.set_fcse(value);
18687 self
18688 }
18689
18690 pub const fn innershr(self) -> u8 {
18692 ((self.bits() >> Self::INNERSHR_SHIFT) & 0b1111) as u8
18693 }
18694
18695 pub const fn set_innershr(&mut self, value: u8) {
18697 let offset = Self::INNERSHR_SHIFT;
18698 assert!(value & (Self::INNERSHR_MASK as u8) == value);
18699 *self = Self::from_bits_retain(
18700 (self.bits() & !(Self::INNERSHR_MASK << offset)) | ((value as u32) << offset),
18701 );
18702 }
18703
18704 pub const fn with_innershr(mut self, value: u8) -> Self {
18706 self.set_innershr(value);
18707 self
18708 }
18709}
18710
18711bitflags! {
18712 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18714 #[repr(transparent)]
18715 pub struct IdMmfr1: u32 {
18716 }
18717}
18718
18719impl IdMmfr1 {
18720 pub const L1HVDVA_SHIFT: u32 = 0;
18722 pub const L1HVDVA_MASK: u32 = 0b1111;
18724 pub const L1UNIVA_SHIFT: u32 = 4;
18726 pub const L1UNIVA_MASK: u32 = 0b1111;
18728 pub const L1HVDSW_SHIFT: u32 = 8;
18730 pub const L1HVDSW_MASK: u32 = 0b1111;
18732 pub const L1UNISW_SHIFT: u32 = 12;
18734 pub const L1UNISW_MASK: u32 = 0b1111;
18736 pub const L1HVD_SHIFT: u32 = 16;
18738 pub const L1HVD_MASK: u32 = 0b1111;
18740 pub const L1UNI_SHIFT: u32 = 20;
18742 pub const L1UNI_MASK: u32 = 0b1111;
18744 pub const L1TSTCLN_SHIFT: u32 = 24;
18746 pub const L1TSTCLN_MASK: u32 = 0b1111;
18748 pub const BPRED_SHIFT: u32 = 28;
18750 pub const BPRED_MASK: u32 = 0b1111;
18752
18753 pub const fn l1hvdva(self) -> u8 {
18755 ((self.bits() >> Self::L1HVDVA_SHIFT) & 0b1111) as u8
18756 }
18757
18758 pub const fn set_l1hvdva(&mut self, value: u8) {
18760 let offset = Self::L1HVDVA_SHIFT;
18761 assert!(value & (Self::L1HVDVA_MASK as u8) == value);
18762 *self = Self::from_bits_retain(
18763 (self.bits() & !(Self::L1HVDVA_MASK << offset)) | ((value as u32) << offset),
18764 );
18765 }
18766
18767 pub const fn with_l1hvdva(mut self, value: u8) -> Self {
18769 self.set_l1hvdva(value);
18770 self
18771 }
18772
18773 pub const fn l1univa(self) -> u8 {
18775 ((self.bits() >> Self::L1UNIVA_SHIFT) & 0b1111) as u8
18776 }
18777
18778 pub const fn set_l1univa(&mut self, value: u8) {
18780 let offset = Self::L1UNIVA_SHIFT;
18781 assert!(value & (Self::L1UNIVA_MASK as u8) == value);
18782 *self = Self::from_bits_retain(
18783 (self.bits() & !(Self::L1UNIVA_MASK << offset)) | ((value as u32) << offset),
18784 );
18785 }
18786
18787 pub const fn with_l1univa(mut self, value: u8) -> Self {
18789 self.set_l1univa(value);
18790 self
18791 }
18792
18793 pub const fn l1hvdsw(self) -> u8 {
18795 ((self.bits() >> Self::L1HVDSW_SHIFT) & 0b1111) as u8
18796 }
18797
18798 pub const fn set_l1hvdsw(&mut self, value: u8) {
18800 let offset = Self::L1HVDSW_SHIFT;
18801 assert!(value & (Self::L1HVDSW_MASK as u8) == value);
18802 *self = Self::from_bits_retain(
18803 (self.bits() & !(Self::L1HVDSW_MASK << offset)) | ((value as u32) << offset),
18804 );
18805 }
18806
18807 pub const fn with_l1hvdsw(mut self, value: u8) -> Self {
18809 self.set_l1hvdsw(value);
18810 self
18811 }
18812
18813 pub const fn l1unisw(self) -> u8 {
18815 ((self.bits() >> Self::L1UNISW_SHIFT) & 0b1111) as u8
18816 }
18817
18818 pub const fn set_l1unisw(&mut self, value: u8) {
18820 let offset = Self::L1UNISW_SHIFT;
18821 assert!(value & (Self::L1UNISW_MASK as u8) == value);
18822 *self = Self::from_bits_retain(
18823 (self.bits() & !(Self::L1UNISW_MASK << offset)) | ((value as u32) << offset),
18824 );
18825 }
18826
18827 pub const fn with_l1unisw(mut self, value: u8) -> Self {
18829 self.set_l1unisw(value);
18830 self
18831 }
18832
18833 pub const fn l1hvd(self) -> u8 {
18835 ((self.bits() >> Self::L1HVD_SHIFT) & 0b1111) as u8
18836 }
18837
18838 pub const fn set_l1hvd(&mut self, value: u8) {
18840 let offset = Self::L1HVD_SHIFT;
18841 assert!(value & (Self::L1HVD_MASK as u8) == value);
18842 *self = Self::from_bits_retain(
18843 (self.bits() & !(Self::L1HVD_MASK << offset)) | ((value as u32) << offset),
18844 );
18845 }
18846
18847 pub const fn with_l1hvd(mut self, value: u8) -> Self {
18849 self.set_l1hvd(value);
18850 self
18851 }
18852
18853 pub const fn l1uni(self) -> u8 {
18855 ((self.bits() >> Self::L1UNI_SHIFT) & 0b1111) as u8
18856 }
18857
18858 pub const fn set_l1uni(&mut self, value: u8) {
18860 let offset = Self::L1UNI_SHIFT;
18861 assert!(value & (Self::L1UNI_MASK as u8) == value);
18862 *self = Self::from_bits_retain(
18863 (self.bits() & !(Self::L1UNI_MASK << offset)) | ((value as u32) << offset),
18864 );
18865 }
18866
18867 pub const fn with_l1uni(mut self, value: u8) -> Self {
18869 self.set_l1uni(value);
18870 self
18871 }
18872
18873 pub const fn l1tstcln(self) -> u8 {
18875 ((self.bits() >> Self::L1TSTCLN_SHIFT) & 0b1111) as u8
18876 }
18877
18878 pub const fn set_l1tstcln(&mut self, value: u8) {
18880 let offset = Self::L1TSTCLN_SHIFT;
18881 assert!(value & (Self::L1TSTCLN_MASK as u8) == value);
18882 *self = Self::from_bits_retain(
18883 (self.bits() & !(Self::L1TSTCLN_MASK << offset)) | ((value as u32) << offset),
18884 );
18885 }
18886
18887 pub const fn with_l1tstcln(mut self, value: u8) -> Self {
18889 self.set_l1tstcln(value);
18890 self
18891 }
18892
18893 pub const fn bpred(self) -> u8 {
18895 ((self.bits() >> Self::BPRED_SHIFT) & 0b1111) as u8
18896 }
18897
18898 pub const fn set_bpred(&mut self, value: u8) {
18900 let offset = Self::BPRED_SHIFT;
18901 assert!(value & (Self::BPRED_MASK as u8) == value);
18902 *self = Self::from_bits_retain(
18903 (self.bits() & !(Self::BPRED_MASK << offset)) | ((value as u32) << offset),
18904 );
18905 }
18906
18907 pub const fn with_bpred(mut self, value: u8) -> Self {
18909 self.set_bpred(value);
18910 self
18911 }
18912}
18913
18914bitflags! {
18915 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18917 #[repr(transparent)]
18918 pub struct IdMmfr2: u32 {
18919 }
18920}
18921
18922impl IdMmfr2 {
18923 pub const L1HVDFG_SHIFT: u32 = 0;
18925 pub const L1HVDFG_MASK: u32 = 0b1111;
18927 pub const L1HVDBG_SHIFT: u32 = 4;
18929 pub const L1HVDBG_MASK: u32 = 0b1111;
18931 pub const L1HVDRNG_SHIFT: u32 = 8;
18933 pub const L1HVDRNG_MASK: u32 = 0b1111;
18935 pub const HVDTLB_SHIFT: u32 = 12;
18937 pub const HVDTLB_MASK: u32 = 0b1111;
18939 pub const UNITLB_SHIFT: u32 = 16;
18941 pub const UNITLB_MASK: u32 = 0b1111;
18943 pub const MEMBARR_SHIFT: u32 = 20;
18945 pub const MEMBARR_MASK: u32 = 0b1111;
18947 pub const WFISTALL_SHIFT: u32 = 24;
18949 pub const WFISTALL_MASK: u32 = 0b1111;
18951 pub const HWACCFLG_SHIFT: u32 = 28;
18953 pub const HWACCFLG_MASK: u32 = 0b1111;
18955
18956 pub const fn l1hvdfg(self) -> u8 {
18958 ((self.bits() >> Self::L1HVDFG_SHIFT) & 0b1111) as u8
18959 }
18960
18961 pub const fn set_l1hvdfg(&mut self, value: u8) {
18963 let offset = Self::L1HVDFG_SHIFT;
18964 assert!(value & (Self::L1HVDFG_MASK as u8) == value);
18965 *self = Self::from_bits_retain(
18966 (self.bits() & !(Self::L1HVDFG_MASK << offset)) | ((value as u32) << offset),
18967 );
18968 }
18969
18970 pub const fn with_l1hvdfg(mut self, value: u8) -> Self {
18972 self.set_l1hvdfg(value);
18973 self
18974 }
18975
18976 pub const fn l1hvdbg(self) -> u8 {
18978 ((self.bits() >> Self::L1HVDBG_SHIFT) & 0b1111) as u8
18979 }
18980
18981 pub const fn set_l1hvdbg(&mut self, value: u8) {
18983 let offset = Self::L1HVDBG_SHIFT;
18984 assert!(value & (Self::L1HVDBG_MASK as u8) == value);
18985 *self = Self::from_bits_retain(
18986 (self.bits() & !(Self::L1HVDBG_MASK << offset)) | ((value as u32) << offset),
18987 );
18988 }
18989
18990 pub const fn with_l1hvdbg(mut self, value: u8) -> Self {
18992 self.set_l1hvdbg(value);
18993 self
18994 }
18995
18996 pub const fn l1hvdrng(self) -> u8 {
18998 ((self.bits() >> Self::L1HVDRNG_SHIFT) & 0b1111) as u8
18999 }
19000
19001 pub const fn set_l1hvdrng(&mut self, value: u8) {
19003 let offset = Self::L1HVDRNG_SHIFT;
19004 assert!(value & (Self::L1HVDRNG_MASK as u8) == value);
19005 *self = Self::from_bits_retain(
19006 (self.bits() & !(Self::L1HVDRNG_MASK << offset)) | ((value as u32) << offset),
19007 );
19008 }
19009
19010 pub const fn with_l1hvdrng(mut self, value: u8) -> Self {
19012 self.set_l1hvdrng(value);
19013 self
19014 }
19015
19016 pub const fn hvdtlb(self) -> u8 {
19018 ((self.bits() >> Self::HVDTLB_SHIFT) & 0b1111) as u8
19019 }
19020
19021 pub const fn set_hvdtlb(&mut self, value: u8) {
19023 let offset = Self::HVDTLB_SHIFT;
19024 assert!(value & (Self::HVDTLB_MASK as u8) == value);
19025 *self = Self::from_bits_retain(
19026 (self.bits() & !(Self::HVDTLB_MASK << offset)) | ((value as u32) << offset),
19027 );
19028 }
19029
19030 pub const fn with_hvdtlb(mut self, value: u8) -> Self {
19032 self.set_hvdtlb(value);
19033 self
19034 }
19035
19036 pub const fn unitlb(self) -> u8 {
19038 ((self.bits() >> Self::UNITLB_SHIFT) & 0b1111) as u8
19039 }
19040
19041 pub const fn set_unitlb(&mut self, value: u8) {
19043 let offset = Self::UNITLB_SHIFT;
19044 assert!(value & (Self::UNITLB_MASK as u8) == value);
19045 *self = Self::from_bits_retain(
19046 (self.bits() & !(Self::UNITLB_MASK << offset)) | ((value as u32) << offset),
19047 );
19048 }
19049
19050 pub const fn with_unitlb(mut self, value: u8) -> Self {
19052 self.set_unitlb(value);
19053 self
19054 }
19055
19056 pub const fn membarr(self) -> u8 {
19058 ((self.bits() >> Self::MEMBARR_SHIFT) & 0b1111) as u8
19059 }
19060
19061 pub const fn set_membarr(&mut self, value: u8) {
19063 let offset = Self::MEMBARR_SHIFT;
19064 assert!(value & (Self::MEMBARR_MASK as u8) == value);
19065 *self = Self::from_bits_retain(
19066 (self.bits() & !(Self::MEMBARR_MASK << offset)) | ((value as u32) << offset),
19067 );
19068 }
19069
19070 pub const fn with_membarr(mut self, value: u8) -> Self {
19072 self.set_membarr(value);
19073 self
19074 }
19075
19076 pub const fn wfistall(self) -> u8 {
19078 ((self.bits() >> Self::WFISTALL_SHIFT) & 0b1111) as u8
19079 }
19080
19081 pub const fn set_wfistall(&mut self, value: u8) {
19083 let offset = Self::WFISTALL_SHIFT;
19084 assert!(value & (Self::WFISTALL_MASK as u8) == value);
19085 *self = Self::from_bits_retain(
19086 (self.bits() & !(Self::WFISTALL_MASK << offset)) | ((value as u32) << offset),
19087 );
19088 }
19089
19090 pub const fn with_wfistall(mut self, value: u8) -> Self {
19092 self.set_wfistall(value);
19093 self
19094 }
19095
19096 pub const fn hwaccflg(self) -> u8 {
19098 ((self.bits() >> Self::HWACCFLG_SHIFT) & 0b1111) as u8
19099 }
19100
19101 pub const fn set_hwaccflg(&mut self, value: u8) {
19103 let offset = Self::HWACCFLG_SHIFT;
19104 assert!(value & (Self::HWACCFLG_MASK as u8) == value);
19105 *self = Self::from_bits_retain(
19106 (self.bits() & !(Self::HWACCFLG_MASK << offset)) | ((value as u32) << offset),
19107 );
19108 }
19109
19110 pub const fn with_hwaccflg(mut self, value: u8) -> Self {
19112 self.set_hwaccflg(value);
19113 self
19114 }
19115}
19116
19117bitflags! {
19118 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19120 #[repr(transparent)]
19121 pub struct IdMmfr3: u32 {
19122 }
19123}
19124
19125impl IdMmfr3 {
19126 pub const CMAINTVA_SHIFT: u32 = 0;
19128 pub const CMAINTVA_MASK: u32 = 0b1111;
19130 pub const CMAINTSW_SHIFT: u32 = 4;
19132 pub const CMAINTSW_MASK: u32 = 0b1111;
19134 pub const BPMAINT_SHIFT: u32 = 8;
19136 pub const BPMAINT_MASK: u32 = 0b1111;
19138 pub const MAINTBCST_SHIFT: u32 = 12;
19140 pub const MAINTBCST_MASK: u32 = 0b1111;
19142 pub const PAN_SHIFT: u32 = 16;
19144 pub const PAN_MASK: u32 = 0b1111;
19146 pub const COHWALK_SHIFT: u32 = 20;
19148 pub const COHWALK_MASK: u32 = 0b1111;
19150 pub const CMEMSZ_SHIFT: u32 = 24;
19152 pub const CMEMSZ_MASK: u32 = 0b1111;
19154 pub const SUPERSEC_SHIFT: u32 = 28;
19156 pub const SUPERSEC_MASK: u32 = 0b1111;
19158
19159 pub const fn cmaintva(self) -> u8 {
19161 ((self.bits() >> Self::CMAINTVA_SHIFT) & 0b1111) as u8
19162 }
19163
19164 pub const fn set_cmaintva(&mut self, value: u8) {
19166 let offset = Self::CMAINTVA_SHIFT;
19167 assert!(value & (Self::CMAINTVA_MASK as u8) == value);
19168 *self = Self::from_bits_retain(
19169 (self.bits() & !(Self::CMAINTVA_MASK << offset)) | ((value as u32) << offset),
19170 );
19171 }
19172
19173 pub const fn with_cmaintva(mut self, value: u8) -> Self {
19175 self.set_cmaintva(value);
19176 self
19177 }
19178
19179 pub const fn cmaintsw(self) -> u8 {
19181 ((self.bits() >> Self::CMAINTSW_SHIFT) & 0b1111) as u8
19182 }
19183
19184 pub const fn set_cmaintsw(&mut self, value: u8) {
19186 let offset = Self::CMAINTSW_SHIFT;
19187 assert!(value & (Self::CMAINTSW_MASK as u8) == value);
19188 *self = Self::from_bits_retain(
19189 (self.bits() & !(Self::CMAINTSW_MASK << offset)) | ((value as u32) << offset),
19190 );
19191 }
19192
19193 pub const fn with_cmaintsw(mut self, value: u8) -> Self {
19195 self.set_cmaintsw(value);
19196 self
19197 }
19198
19199 pub const fn bpmaint(self) -> u8 {
19201 ((self.bits() >> Self::BPMAINT_SHIFT) & 0b1111) as u8
19202 }
19203
19204 pub const fn set_bpmaint(&mut self, value: u8) {
19206 let offset = Self::BPMAINT_SHIFT;
19207 assert!(value & (Self::BPMAINT_MASK as u8) == value);
19208 *self = Self::from_bits_retain(
19209 (self.bits() & !(Self::BPMAINT_MASK << offset)) | ((value as u32) << offset),
19210 );
19211 }
19212
19213 pub const fn with_bpmaint(mut self, value: u8) -> Self {
19215 self.set_bpmaint(value);
19216 self
19217 }
19218
19219 pub const fn maintbcst(self) -> u8 {
19221 ((self.bits() >> Self::MAINTBCST_SHIFT) & 0b1111) as u8
19222 }
19223
19224 pub const fn set_maintbcst(&mut self, value: u8) {
19226 let offset = Self::MAINTBCST_SHIFT;
19227 assert!(value & (Self::MAINTBCST_MASK as u8) == value);
19228 *self = Self::from_bits_retain(
19229 (self.bits() & !(Self::MAINTBCST_MASK << offset)) | ((value as u32) << offset),
19230 );
19231 }
19232
19233 pub const fn with_maintbcst(mut self, value: u8) -> Self {
19235 self.set_maintbcst(value);
19236 self
19237 }
19238
19239 pub const fn pan(self) -> u8 {
19241 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
19242 }
19243
19244 pub const fn set_pan(&mut self, value: u8) {
19246 let offset = Self::PAN_SHIFT;
19247 assert!(value & (Self::PAN_MASK as u8) == value);
19248 *self = Self::from_bits_retain(
19249 (self.bits() & !(Self::PAN_MASK << offset)) | ((value as u32) << offset),
19250 );
19251 }
19252
19253 pub const fn with_pan(mut self, value: u8) -> Self {
19255 self.set_pan(value);
19256 self
19257 }
19258
19259 pub const fn cohwalk(self) -> u8 {
19261 ((self.bits() >> Self::COHWALK_SHIFT) & 0b1111) as u8
19262 }
19263
19264 pub const fn set_cohwalk(&mut self, value: u8) {
19266 let offset = Self::COHWALK_SHIFT;
19267 assert!(value & (Self::COHWALK_MASK as u8) == value);
19268 *self = Self::from_bits_retain(
19269 (self.bits() & !(Self::COHWALK_MASK << offset)) | ((value as u32) << offset),
19270 );
19271 }
19272
19273 pub const fn with_cohwalk(mut self, value: u8) -> Self {
19275 self.set_cohwalk(value);
19276 self
19277 }
19278
19279 pub const fn cmemsz(self) -> u8 {
19281 ((self.bits() >> Self::CMEMSZ_SHIFT) & 0b1111) as u8
19282 }
19283
19284 pub const fn set_cmemsz(&mut self, value: u8) {
19286 let offset = Self::CMEMSZ_SHIFT;
19287 assert!(value & (Self::CMEMSZ_MASK as u8) == value);
19288 *self = Self::from_bits_retain(
19289 (self.bits() & !(Self::CMEMSZ_MASK << offset)) | ((value as u32) << offset),
19290 );
19291 }
19292
19293 pub const fn with_cmemsz(mut self, value: u8) -> Self {
19295 self.set_cmemsz(value);
19296 self
19297 }
19298
19299 pub const fn supersec(self) -> u8 {
19301 ((self.bits() >> Self::SUPERSEC_SHIFT) & 0b1111) as u8
19302 }
19303
19304 pub const fn set_supersec(&mut self, value: u8) {
19306 let offset = Self::SUPERSEC_SHIFT;
19307 assert!(value & (Self::SUPERSEC_MASK as u8) == value);
19308 *self = Self::from_bits_retain(
19309 (self.bits() & !(Self::SUPERSEC_MASK << offset)) | ((value as u32) << offset),
19310 );
19311 }
19312
19313 pub const fn with_supersec(mut self, value: u8) -> Self {
19315 self.set_supersec(value);
19316 self
19317 }
19318}
19319
19320bitflags! {
19321 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19323 #[repr(transparent)]
19324 pub struct IdMmfr4: u32 {
19325 }
19326}
19327
19328impl IdMmfr4 {
19329 pub const SPECSEI_SHIFT: u32 = 0;
19331 pub const SPECSEI_MASK: u32 = 0b1111;
19333 pub const AC2_SHIFT: u32 = 4;
19335 pub const AC2_MASK: u32 = 0b1111;
19337 pub const XNX_SHIFT: u32 = 8;
19339 pub const XNX_MASK: u32 = 0b1111;
19341 pub const CNP_SHIFT: u32 = 12;
19343 pub const CNP_MASK: u32 = 0b1111;
19345 pub const HPDS_SHIFT: u32 = 16;
19347 pub const HPDS_MASK: u32 = 0b1111;
19349 pub const LSM_SHIFT: u32 = 20;
19351 pub const LSM_MASK: u32 = 0b1111;
19353 pub const CCIDX_SHIFT: u32 = 24;
19355 pub const CCIDX_MASK: u32 = 0b1111;
19357 pub const EVT_SHIFT: u32 = 28;
19359 pub const EVT_MASK: u32 = 0b1111;
19361
19362 pub const fn specsei(self) -> u8 {
19364 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
19365 }
19366
19367 pub const fn set_specsei(&mut self, value: u8) {
19369 let offset = Self::SPECSEI_SHIFT;
19370 assert!(value & (Self::SPECSEI_MASK as u8) == value);
19371 *self = Self::from_bits_retain(
19372 (self.bits() & !(Self::SPECSEI_MASK << offset)) | ((value as u32) << offset),
19373 );
19374 }
19375
19376 pub const fn with_specsei(mut self, value: u8) -> Self {
19378 self.set_specsei(value);
19379 self
19380 }
19381
19382 pub const fn ac2(self) -> u8 {
19384 ((self.bits() >> Self::AC2_SHIFT) & 0b1111) as u8
19385 }
19386
19387 pub const fn set_ac2(&mut self, value: u8) {
19389 let offset = Self::AC2_SHIFT;
19390 assert!(value & (Self::AC2_MASK as u8) == value);
19391 *self = Self::from_bits_retain(
19392 (self.bits() & !(Self::AC2_MASK << offset)) | ((value as u32) << offset),
19393 );
19394 }
19395
19396 pub const fn with_ac2(mut self, value: u8) -> Self {
19398 self.set_ac2(value);
19399 self
19400 }
19401
19402 pub const fn xnx(self) -> u8 {
19404 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
19405 }
19406
19407 pub const fn set_xnx(&mut self, value: u8) {
19409 let offset = Self::XNX_SHIFT;
19410 assert!(value & (Self::XNX_MASK as u8) == value);
19411 *self = Self::from_bits_retain(
19412 (self.bits() & !(Self::XNX_MASK << offset)) | ((value as u32) << offset),
19413 );
19414 }
19415
19416 pub const fn with_xnx(mut self, value: u8) -> Self {
19418 self.set_xnx(value);
19419 self
19420 }
19421
19422 pub const fn cnp(self) -> u8 {
19424 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
19425 }
19426
19427 pub const fn set_cnp(&mut self, value: u8) {
19429 let offset = Self::CNP_SHIFT;
19430 assert!(value & (Self::CNP_MASK as u8) == value);
19431 *self = Self::from_bits_retain(
19432 (self.bits() & !(Self::CNP_MASK << offset)) | ((value as u32) << offset),
19433 );
19434 }
19435
19436 pub const fn with_cnp(mut self, value: u8) -> Self {
19438 self.set_cnp(value);
19439 self
19440 }
19441
19442 pub const fn hpds(self) -> u8 {
19444 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
19445 }
19446
19447 pub const fn set_hpds(&mut self, value: u8) {
19449 let offset = Self::HPDS_SHIFT;
19450 assert!(value & (Self::HPDS_MASK as u8) == value);
19451 *self = Self::from_bits_retain(
19452 (self.bits() & !(Self::HPDS_MASK << offset)) | ((value as u32) << offset),
19453 );
19454 }
19455
19456 pub const fn with_hpds(mut self, value: u8) -> Self {
19458 self.set_hpds(value);
19459 self
19460 }
19461
19462 pub const fn lsm(self) -> u8 {
19464 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
19465 }
19466
19467 pub const fn set_lsm(&mut self, value: u8) {
19469 let offset = Self::LSM_SHIFT;
19470 assert!(value & (Self::LSM_MASK as u8) == value);
19471 *self = Self::from_bits_retain(
19472 (self.bits() & !(Self::LSM_MASK << offset)) | ((value as u32) << offset),
19473 );
19474 }
19475
19476 pub const fn with_lsm(mut self, value: u8) -> Self {
19478 self.set_lsm(value);
19479 self
19480 }
19481
19482 pub const fn ccidx(self) -> u8 {
19484 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
19485 }
19486
19487 pub const fn set_ccidx(&mut self, value: u8) {
19489 let offset = Self::CCIDX_SHIFT;
19490 assert!(value & (Self::CCIDX_MASK as u8) == value);
19491 *self = Self::from_bits_retain(
19492 (self.bits() & !(Self::CCIDX_MASK << offset)) | ((value as u32) << offset),
19493 );
19494 }
19495
19496 pub const fn with_ccidx(mut self, value: u8) -> Self {
19498 self.set_ccidx(value);
19499 self
19500 }
19501
19502 pub const fn evt(self) -> u8 {
19504 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
19505 }
19506
19507 pub const fn set_evt(&mut self, value: u8) {
19509 let offset = Self::EVT_SHIFT;
19510 assert!(value & (Self::EVT_MASK as u8) == value);
19511 *self = Self::from_bits_retain(
19512 (self.bits() & !(Self::EVT_MASK << offset)) | ((value as u32) << offset),
19513 );
19514 }
19515
19516 pub const fn with_evt(mut self, value: u8) -> Self {
19518 self.set_evt(value);
19519 self
19520 }
19521}
19522
19523bitflags! {
19524 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19526 #[repr(transparent)]
19527 pub struct IdMmfr5: u32 {
19528 }
19529}
19530
19531impl IdMmfr5 {
19532 pub const ETS_SHIFT: u32 = 0;
19534 pub const ETS_MASK: u32 = 0b1111;
19536 pub const NTLBPA_SHIFT: u32 = 4;
19538 pub const NTLBPA_MASK: u32 = 0b1111;
19540
19541 pub const fn ets(self) -> u8 {
19543 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
19544 }
19545
19546 pub const fn set_ets(&mut self, value: u8) {
19548 let offset = Self::ETS_SHIFT;
19549 assert!(value & (Self::ETS_MASK as u8) == value);
19550 *self = Self::from_bits_retain(
19551 (self.bits() & !(Self::ETS_MASK << offset)) | ((value as u32) << offset),
19552 );
19553 }
19554
19555 pub const fn with_ets(mut self, value: u8) -> Self {
19557 self.set_ets(value);
19558 self
19559 }
19560
19561 pub const fn ntlbpa(self) -> u8 {
19563 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
19564 }
19565
19566 pub const fn set_ntlbpa(&mut self, value: u8) {
19568 let offset = Self::NTLBPA_SHIFT;
19569 assert!(value & (Self::NTLBPA_MASK as u8) == value);
19570 *self = Self::from_bits_retain(
19571 (self.bits() & !(Self::NTLBPA_MASK << offset)) | ((value as u32) << offset),
19572 );
19573 }
19574
19575 pub const fn with_ntlbpa(mut self, value: u8) -> Self {
19577 self.set_ntlbpa(value);
19578 self
19579 }
19580}
19581
19582bitflags! {
19583 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19585 #[repr(transparent)]
19586 pub struct IdPfr0: u32 {
19587 }
19588}
19589
19590impl IdPfr0 {
19591 pub const STATE0_SHIFT: u32 = 0;
19593 pub const STATE0_MASK: u32 = 0b1111;
19595 pub const STATE1_SHIFT: u32 = 4;
19597 pub const STATE1_MASK: u32 = 0b1111;
19599 pub const STATE2_SHIFT: u32 = 8;
19601 pub const STATE2_MASK: u32 = 0b1111;
19603 pub const STATE3_SHIFT: u32 = 12;
19605 pub const STATE3_MASK: u32 = 0b1111;
19607 pub const CSV2_SHIFT: u32 = 16;
19609 pub const CSV2_MASK: u32 = 0b1111;
19611 pub const AMU_SHIFT: u32 = 20;
19613 pub const AMU_MASK: u32 = 0b1111;
19615 pub const DIT_SHIFT: u32 = 24;
19617 pub const DIT_MASK: u32 = 0b1111;
19619 pub const RAS_SHIFT: u32 = 28;
19621 pub const RAS_MASK: u32 = 0b1111;
19623
19624 pub const fn state0(self) -> u8 {
19626 ((self.bits() >> Self::STATE0_SHIFT) & 0b1111) as u8
19627 }
19628
19629 pub const fn set_state0(&mut self, value: u8) {
19631 let offset = Self::STATE0_SHIFT;
19632 assert!(value & (Self::STATE0_MASK as u8) == value);
19633 *self = Self::from_bits_retain(
19634 (self.bits() & !(Self::STATE0_MASK << offset)) | ((value as u32) << offset),
19635 );
19636 }
19637
19638 pub const fn with_state0(mut self, value: u8) -> Self {
19640 self.set_state0(value);
19641 self
19642 }
19643
19644 pub const fn state1(self) -> u8 {
19646 ((self.bits() >> Self::STATE1_SHIFT) & 0b1111) as u8
19647 }
19648
19649 pub const fn set_state1(&mut self, value: u8) {
19651 let offset = Self::STATE1_SHIFT;
19652 assert!(value & (Self::STATE1_MASK as u8) == value);
19653 *self = Self::from_bits_retain(
19654 (self.bits() & !(Self::STATE1_MASK << offset)) | ((value as u32) << offset),
19655 );
19656 }
19657
19658 pub const fn with_state1(mut self, value: u8) -> Self {
19660 self.set_state1(value);
19661 self
19662 }
19663
19664 pub const fn state2(self) -> u8 {
19666 ((self.bits() >> Self::STATE2_SHIFT) & 0b1111) as u8
19667 }
19668
19669 pub const fn set_state2(&mut self, value: u8) {
19671 let offset = Self::STATE2_SHIFT;
19672 assert!(value & (Self::STATE2_MASK as u8) == value);
19673 *self = Self::from_bits_retain(
19674 (self.bits() & !(Self::STATE2_MASK << offset)) | ((value as u32) << offset),
19675 );
19676 }
19677
19678 pub const fn with_state2(mut self, value: u8) -> Self {
19680 self.set_state2(value);
19681 self
19682 }
19683
19684 pub const fn state3(self) -> u8 {
19686 ((self.bits() >> Self::STATE3_SHIFT) & 0b1111) as u8
19687 }
19688
19689 pub const fn set_state3(&mut self, value: u8) {
19691 let offset = Self::STATE3_SHIFT;
19692 assert!(value & (Self::STATE3_MASK as u8) == value);
19693 *self = Self::from_bits_retain(
19694 (self.bits() & !(Self::STATE3_MASK << offset)) | ((value as u32) << offset),
19695 );
19696 }
19697
19698 pub const fn with_state3(mut self, value: u8) -> Self {
19700 self.set_state3(value);
19701 self
19702 }
19703
19704 pub const fn csv2(self) -> u8 {
19706 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
19707 }
19708
19709 pub const fn set_csv2(&mut self, value: u8) {
19711 let offset = Self::CSV2_SHIFT;
19712 assert!(value & (Self::CSV2_MASK as u8) == value);
19713 *self = Self::from_bits_retain(
19714 (self.bits() & !(Self::CSV2_MASK << offset)) | ((value as u32) << offset),
19715 );
19716 }
19717
19718 pub const fn with_csv2(mut self, value: u8) -> Self {
19720 self.set_csv2(value);
19721 self
19722 }
19723
19724 pub const fn amu(self) -> u8 {
19726 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
19727 }
19728
19729 pub const fn set_amu(&mut self, value: u8) {
19731 let offset = Self::AMU_SHIFT;
19732 assert!(value & (Self::AMU_MASK as u8) == value);
19733 *self = Self::from_bits_retain(
19734 (self.bits() & !(Self::AMU_MASK << offset)) | ((value as u32) << offset),
19735 );
19736 }
19737
19738 pub const fn with_amu(mut self, value: u8) -> Self {
19740 self.set_amu(value);
19741 self
19742 }
19743
19744 pub const fn dit(self) -> u8 {
19746 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
19747 }
19748
19749 pub const fn set_dit(&mut self, value: u8) {
19751 let offset = Self::DIT_SHIFT;
19752 assert!(value & (Self::DIT_MASK as u8) == value);
19753 *self = Self::from_bits_retain(
19754 (self.bits() & !(Self::DIT_MASK << offset)) | ((value as u32) << offset),
19755 );
19756 }
19757
19758 pub const fn with_dit(mut self, value: u8) -> Self {
19760 self.set_dit(value);
19761 self
19762 }
19763
19764 pub const fn ras(self) -> u8 {
19766 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
19767 }
19768
19769 pub const fn set_ras(&mut self, value: u8) {
19771 let offset = Self::RAS_SHIFT;
19772 assert!(value & (Self::RAS_MASK as u8) == value);
19773 *self = Self::from_bits_retain(
19774 (self.bits() & !(Self::RAS_MASK << offset)) | ((value as u32) << offset),
19775 );
19776 }
19777
19778 pub const fn with_ras(mut self, value: u8) -> Self {
19780 self.set_ras(value);
19781 self
19782 }
19783}
19784
19785bitflags! {
19786 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19788 #[repr(transparent)]
19789 pub struct IdPfr1: u32 {
19790 }
19791}
19792
19793impl IdPfr1 {
19794 pub const PROGMOD_SHIFT: u32 = 0;
19796 pub const PROGMOD_MASK: u32 = 0b1111;
19798 pub const SECURITY_SHIFT: u32 = 4;
19800 pub const SECURITY_MASK: u32 = 0b1111;
19802 pub const MPROGMOD_SHIFT: u32 = 8;
19804 pub const MPROGMOD_MASK: u32 = 0b1111;
19806 pub const VIRTUALIZATION_SHIFT: u32 = 12;
19808 pub const VIRTUALIZATION_MASK: u32 = 0b1111;
19810 pub const GENTIMER_SHIFT: u32 = 16;
19812 pub const GENTIMER_MASK: u32 = 0b1111;
19814 pub const SEC_FRAC_SHIFT: u32 = 20;
19816 pub const SEC_FRAC_MASK: u32 = 0b1111;
19818 pub const VIRT_FRAC_SHIFT: u32 = 24;
19820 pub const VIRT_FRAC_MASK: u32 = 0b1111;
19822 pub const GIC_SHIFT: u32 = 28;
19824 pub const GIC_MASK: u32 = 0b1111;
19826
19827 pub const fn progmod(self) -> u8 {
19829 ((self.bits() >> Self::PROGMOD_SHIFT) & 0b1111) as u8
19830 }
19831
19832 pub const fn set_progmod(&mut self, value: u8) {
19834 let offset = Self::PROGMOD_SHIFT;
19835 assert!(value & (Self::PROGMOD_MASK as u8) == value);
19836 *self = Self::from_bits_retain(
19837 (self.bits() & !(Self::PROGMOD_MASK << offset)) | ((value as u32) << offset),
19838 );
19839 }
19840
19841 pub const fn with_progmod(mut self, value: u8) -> Self {
19843 self.set_progmod(value);
19844 self
19845 }
19846
19847 pub const fn security(self) -> u8 {
19849 ((self.bits() >> Self::SECURITY_SHIFT) & 0b1111) as u8
19850 }
19851
19852 pub const fn set_security(&mut self, value: u8) {
19854 let offset = Self::SECURITY_SHIFT;
19855 assert!(value & (Self::SECURITY_MASK as u8) == value);
19856 *self = Self::from_bits_retain(
19857 (self.bits() & !(Self::SECURITY_MASK << offset)) | ((value as u32) << offset),
19858 );
19859 }
19860
19861 pub const fn with_security(mut self, value: u8) -> Self {
19863 self.set_security(value);
19864 self
19865 }
19866
19867 pub const fn mprogmod(self) -> u8 {
19869 ((self.bits() >> Self::MPROGMOD_SHIFT) & 0b1111) as u8
19870 }
19871
19872 pub const fn set_mprogmod(&mut self, value: u8) {
19874 let offset = Self::MPROGMOD_SHIFT;
19875 assert!(value & (Self::MPROGMOD_MASK as u8) == value);
19876 *self = Self::from_bits_retain(
19877 (self.bits() & !(Self::MPROGMOD_MASK << offset)) | ((value as u32) << offset),
19878 );
19879 }
19880
19881 pub const fn with_mprogmod(mut self, value: u8) -> Self {
19883 self.set_mprogmod(value);
19884 self
19885 }
19886
19887 pub const fn virtualization(self) -> u8 {
19889 ((self.bits() >> Self::VIRTUALIZATION_SHIFT) & 0b1111) as u8
19890 }
19891
19892 pub const fn set_virtualization(&mut self, value: u8) {
19894 let offset = Self::VIRTUALIZATION_SHIFT;
19895 assert!(value & (Self::VIRTUALIZATION_MASK as u8) == value);
19896 *self = Self::from_bits_retain(
19897 (self.bits() & !(Self::VIRTUALIZATION_MASK << offset)) | ((value as u32) << offset),
19898 );
19899 }
19900
19901 pub const fn with_virtualization(mut self, value: u8) -> Self {
19903 self.set_virtualization(value);
19904 self
19905 }
19906
19907 pub const fn gentimer(self) -> u8 {
19909 ((self.bits() >> Self::GENTIMER_SHIFT) & 0b1111) as u8
19910 }
19911
19912 pub const fn set_gentimer(&mut self, value: u8) {
19914 let offset = Self::GENTIMER_SHIFT;
19915 assert!(value & (Self::GENTIMER_MASK as u8) == value);
19916 *self = Self::from_bits_retain(
19917 (self.bits() & !(Self::GENTIMER_MASK << offset)) | ((value as u32) << offset),
19918 );
19919 }
19920
19921 pub const fn with_gentimer(mut self, value: u8) -> Self {
19923 self.set_gentimer(value);
19924 self
19925 }
19926
19927 pub const fn sec_frac(self) -> u8 {
19929 ((self.bits() >> Self::SEC_FRAC_SHIFT) & 0b1111) as u8
19930 }
19931
19932 pub const fn set_sec_frac(&mut self, value: u8) {
19934 let offset = Self::SEC_FRAC_SHIFT;
19935 assert!(value & (Self::SEC_FRAC_MASK as u8) == value);
19936 *self = Self::from_bits_retain(
19937 (self.bits() & !(Self::SEC_FRAC_MASK << offset)) | ((value as u32) << offset),
19938 );
19939 }
19940
19941 pub const fn with_sec_frac(mut self, value: u8) -> Self {
19943 self.set_sec_frac(value);
19944 self
19945 }
19946
19947 pub const fn virt_frac(self) -> u8 {
19949 ((self.bits() >> Self::VIRT_FRAC_SHIFT) & 0b1111) as u8
19950 }
19951
19952 pub const fn set_virt_frac(&mut self, value: u8) {
19954 let offset = Self::VIRT_FRAC_SHIFT;
19955 assert!(value & (Self::VIRT_FRAC_MASK as u8) == value);
19956 *self = Self::from_bits_retain(
19957 (self.bits() & !(Self::VIRT_FRAC_MASK << offset)) | ((value as u32) << offset),
19958 );
19959 }
19960
19961 pub const fn with_virt_frac(mut self, value: u8) -> Self {
19963 self.set_virt_frac(value);
19964 self
19965 }
19966
19967 pub const fn gic(self) -> u8 {
19969 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
19970 }
19971
19972 pub const fn set_gic(&mut self, value: u8) {
19974 let offset = Self::GIC_SHIFT;
19975 assert!(value & (Self::GIC_MASK as u8) == value);
19976 *self = Self::from_bits_retain(
19977 (self.bits() & !(Self::GIC_MASK << offset)) | ((value as u32) << offset),
19978 );
19979 }
19980
19981 pub const fn with_gic(mut self, value: u8) -> Self {
19983 self.set_gic(value);
19984 self
19985 }
19986}
19987
19988bitflags! {
19989 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19991 #[repr(transparent)]
19992 pub struct IdPfr2: u32 {
19993 }
19994}
19995
19996impl IdPfr2 {
19997 pub const CSV3_SHIFT: u32 = 0;
19999 pub const CSV3_MASK: u32 = 0b1111;
20001 pub const SSBS_SHIFT: u32 = 4;
20003 pub const SSBS_MASK: u32 = 0b1111;
20005 pub const RAS_FRAC_SHIFT: u32 = 8;
20007 pub const RAS_FRAC_MASK: u32 = 0b1111;
20009
20010 pub const fn csv3(self) -> u8 {
20012 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
20013 }
20014
20015 pub const fn set_csv3(&mut self, value: u8) {
20017 let offset = Self::CSV3_SHIFT;
20018 assert!(value & (Self::CSV3_MASK as u8) == value);
20019 *self = Self::from_bits_retain(
20020 (self.bits() & !(Self::CSV3_MASK << offset)) | ((value as u32) << offset),
20021 );
20022 }
20023
20024 pub const fn with_csv3(mut self, value: u8) -> Self {
20026 self.set_csv3(value);
20027 self
20028 }
20029
20030 pub const fn ssbs(self) -> u8 {
20032 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
20033 }
20034
20035 pub const fn set_ssbs(&mut self, value: u8) {
20037 let offset = Self::SSBS_SHIFT;
20038 assert!(value & (Self::SSBS_MASK as u8) == value);
20039 *self = Self::from_bits_retain(
20040 (self.bits() & !(Self::SSBS_MASK << offset)) | ((value as u32) << offset),
20041 );
20042 }
20043
20044 pub const fn with_ssbs(mut self, value: u8) -> Self {
20046 self.set_ssbs(value);
20047 self
20048 }
20049
20050 pub const fn ras_frac(self) -> u8 {
20052 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
20053 }
20054
20055 pub const fn set_ras_frac(&mut self, value: u8) {
20057 let offset = Self::RAS_FRAC_SHIFT;
20058 assert!(value & (Self::RAS_FRAC_MASK as u8) == value);
20059 *self = Self::from_bits_retain(
20060 (self.bits() & !(Self::RAS_FRAC_MASK << offset)) | ((value as u32) << offset),
20061 );
20062 }
20063
20064 pub const fn with_ras_frac(mut self, value: u8) -> Self {
20066 self.set_ras_frac(value);
20067 self
20068 }
20069}
20070
20071bitflags! {
20072 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20074 #[repr(transparent)]
20075 pub struct Ifar: u32 {
20076 }
20077}
20078
20079impl Ifar {
20080 pub const VA_SHIFT: u32 = 0;
20082 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
20084
20085 pub const fn va(self) -> u32 {
20087 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
20088 }
20089
20090 pub const fn set_va(&mut self, value: u32) {
20092 let offset = Self::VA_SHIFT;
20093 assert!(value & (Self::VA_MASK as u32) == value);
20094 *self = Self::from_bits_retain(
20095 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
20096 );
20097 }
20098
20099 pub const fn with_va(mut self, value: u32) -> Self {
20101 self.set_va(value);
20102 self
20103 }
20104}
20105
20106bitflags! {
20107 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20109 #[repr(transparent)]
20110 pub struct Ifsr: u32 {
20111 const LPAE = 1 << 9;
20113 const EXT = 1 << 12;
20115 const FNV = 1 << 16;
20117 }
20118}
20119
20120impl Ifsr {
20121 pub const STATUS_SHIFT: u32 = 0;
20123 pub const STATUS_MASK: u32 = 0b111111;
20125 pub const LPAE_SHIFT: u32 = 9;
20127 pub const EXT_SHIFT: u32 = 12;
20129 pub const FNV_SHIFT: u32 = 16;
20131
20132 pub const fn status(self) -> u8 {
20134 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
20135 }
20136
20137 pub const fn set_status(&mut self, value: u8) {
20139 let offset = Self::STATUS_SHIFT;
20140 assert!(value & (Self::STATUS_MASK as u8) == value);
20141 *self = Self::from_bits_retain(
20142 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
20143 );
20144 }
20145
20146 pub const fn with_status(mut self, value: u8) -> Self {
20148 self.set_status(value);
20149 self
20150 }
20151}
20152
20153bitflags! {
20154 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20156 #[repr(transparent)]
20157 pub struct Isr: u32 {
20158 const F = 1 << 6;
20160 const I = 1 << 7;
20162 const A = 1 << 8;
20164 }
20165}
20166
20167impl Isr {
20168 pub const F_SHIFT: u32 = 6;
20170 pub const I_SHIFT: u32 = 7;
20172 pub const A_SHIFT: u32 = 8;
20174}
20175
20176#[cfg(feature = "el1")]
20177bitflags! {
20178 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20180 #[repr(transparent)]
20181 pub struct IsrEl1: u64 {
20182 const F = 1 << 6;
20184 const I = 1 << 7;
20186 const A = 1 << 8;
20188 const FS = 1 << 9;
20190 const IS = 1 << 10;
20192 }
20193}
20194
20195#[cfg(feature = "el1")]
20196impl IsrEl1 {
20197 pub const F_SHIFT: u32 = 6;
20199 pub const I_SHIFT: u32 = 7;
20201 pub const A_SHIFT: u32 = 8;
20203 pub const FS_SHIFT: u32 = 9;
20205 pub const IS_SHIFT: u32 = 10;
20207}
20208
20209bitflags! {
20210 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20212 #[repr(transparent)]
20213 pub struct Mair0: u32 {
20214 }
20215}
20216
20217impl Mair0 {
20218 pub const ATTR_SHIFT: u32 = 0;
20220 pub const ATTR_MASK: u32 = 0b11111111;
20222
20223 pub const fn attr(self, n: u32) -> u8 {
20225 assert!(n < 4);
20226 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
20227 }
20228
20229 pub const fn set_attr(&mut self, n: u32, value: u8) {
20231 assert!(n < 4);
20232 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
20233 assert!(value & (Self::ATTR_MASK as u8) == value);
20234 *self = Self::from_bits_retain(
20235 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
20236 );
20237 }
20238
20239 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
20241 self.set_attr(n, value);
20242 self
20243 }
20244}
20245
20246bitflags! {
20247 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20249 #[repr(transparent)]
20250 pub struct Mair1: u32 {
20251 }
20252}
20253
20254impl Mair1 {
20255 pub const ATTR_SHIFT: u32 = 0;
20257 pub const ATTR_MASK: u32 = 0b11111111;
20259
20260 pub const fn attr(self, n: u32) -> u8 {
20262 assert!(n >= 4 && n < 8);
20263 ((self.bits() >> (Self::ATTR_SHIFT + (n - 4) * 8)) & 0b11111111) as u8
20264 }
20265
20266 pub const fn set_attr(&mut self, n: u32, value: u8) {
20268 assert!(n >= 4 && n < 8);
20269 let offset = Self::ATTR_SHIFT + (n - 4) * 8;
20270 assert!(value & (Self::ATTR_MASK as u8) == value);
20271 *self = Self::from_bits_retain(
20272 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
20273 );
20274 }
20275
20276 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
20278 self.set_attr(n, value);
20279 self
20280 }
20281}
20282
20283#[cfg(feature = "el1")]
20284bitflags! {
20285 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20287 #[repr(transparent)]
20288 pub struct MairEl1: u64 {
20289 }
20290}
20291
20292#[cfg(feature = "el1")]
20293impl MairEl1 {
20294 pub const ATTR_SHIFT: u32 = 0;
20296 pub const ATTR_MASK: u64 = 0b11111111;
20298
20299 pub const fn attr(self, n: u32) -> u8 {
20301 assert!(n < 8);
20302 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
20303 }
20304
20305 pub const fn set_attr(&mut self, n: u32, value: u8) {
20307 assert!(n < 8);
20308 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
20309 assert!(value & (Self::ATTR_MASK as u8) == value);
20310 *self = Self::from_bits_retain(
20311 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
20312 );
20313 }
20314
20315 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
20317 self.set_attr(n, value);
20318 self
20319 }
20320}
20321
20322#[cfg(feature = "el2")]
20323bitflags! {
20324 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20326 #[repr(transparent)]
20327 pub struct MairEl2: u64 {
20328 }
20329}
20330
20331#[cfg(feature = "el2")]
20332impl MairEl2 {
20333 pub const ATTR_SHIFT: u32 = 0;
20335 pub const ATTR_MASK: u64 = 0b11111111;
20337
20338 pub const fn attr(self, n: u32) -> u8 {
20340 assert!(n < 8);
20341 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
20342 }
20343
20344 pub const fn set_attr(&mut self, n: u32, value: u8) {
20346 assert!(n < 8);
20347 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
20348 assert!(value & (Self::ATTR_MASK as u8) == value);
20349 *self = Self::from_bits_retain(
20350 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
20351 );
20352 }
20353
20354 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
20356 self.set_attr(n, value);
20357 self
20358 }
20359}
20360
20361#[cfg(feature = "el3")]
20362bitflags! {
20363 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20365 #[repr(transparent)]
20366 pub struct MairEl3: u64 {
20367 }
20368}
20369
20370#[cfg(feature = "el3")]
20371impl MairEl3 {
20372 pub const ATTR_SHIFT: u32 = 0;
20374 pub const ATTR_MASK: u64 = 0b11111111;
20376
20377 pub const fn attr(self, n: u32) -> u8 {
20379 assert!(n < 8);
20380 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
20381 }
20382
20383 pub const fn set_attr(&mut self, n: u32, value: u8) {
20385 assert!(n < 8);
20386 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
20387 assert!(value & (Self::ATTR_MASK as u8) == value);
20388 *self = Self::from_bits_retain(
20389 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
20390 );
20391 }
20392
20393 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
20395 self.set_attr(n, value);
20396 self
20397 }
20398}
20399
20400#[cfg(feature = "el1")]
20401bitflags! {
20402 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20404 #[repr(transparent)]
20405 pub struct MdccintEl1: u64 {
20406 const TX = 1 << 29;
20408 const RX = 1 << 30;
20410 }
20411}
20412
20413#[cfg(feature = "el1")]
20414impl MdccintEl1 {
20415 pub const TX_SHIFT: u32 = 29;
20417 pub const RX_SHIFT: u32 = 30;
20419}
20420
20421#[cfg(feature = "el2")]
20422bitflags! {
20423 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20425 #[repr(transparent)]
20426 pub struct MdcrEl2: u64 {
20427 const TPMCR = 1 << 5;
20429 const TPM = 1 << 6;
20431 const HPME = 1 << 7;
20433 const TDE = 1 << 8;
20435 const TDA = 1 << 9;
20437 const TDOSA = 1 << 10;
20439 const TDRA = 1 << 11;
20441 const TPMS = 1 << 14;
20443 const ENSPM = 1 << 15;
20445 const HPMD = 1 << 17;
20447 const TTRF = 1 << 19;
20449 const HCCD = 1 << 23;
20451 const HLP = 1 << 26;
20453 const TDCC = 1 << 27;
20455 const MTPME = 1 << 28;
20457 const HPMFZO = 1 << 29;
20459 const HPMFZS = 1 << 36;
20461 const EBWE = 1 << 43;
20463 const ENSTEPOP = 1 << 50;
20465 }
20466}
20467
20468#[cfg(feature = "el2")]
20469impl MdcrEl2 {
20470 pub const HPMN_SHIFT: u32 = 0;
20472 pub const HPMN_MASK: u64 = 0b11111;
20474 pub const TPMCR_SHIFT: u32 = 5;
20476 pub const TPM_SHIFT: u32 = 6;
20478 pub const HPME_SHIFT: u32 = 7;
20480 pub const TDE_SHIFT: u32 = 8;
20482 pub const TDA_SHIFT: u32 = 9;
20484 pub const TDOSA_SHIFT: u32 = 10;
20486 pub const TDRA_SHIFT: u32 = 11;
20488 pub const E2PB_SHIFT: u32 = 12;
20490 pub const E2PB_MASK: u64 = 0b11;
20492 pub const TPMS_SHIFT: u32 = 14;
20494 pub const ENSPM_SHIFT: u32 = 15;
20496 pub const HPMD_SHIFT: u32 = 17;
20498 pub const TTRF_SHIFT: u32 = 19;
20500 pub const HCCD_SHIFT: u32 = 23;
20502 pub const E2TB_SHIFT: u32 = 24;
20504 pub const E2TB_MASK: u64 = 0b11;
20506 pub const HLP_SHIFT: u32 = 26;
20508 pub const TDCC_SHIFT: u32 = 27;
20510 pub const MTPME_SHIFT: u32 = 28;
20512 pub const HPMFZO_SHIFT: u32 = 29;
20514 pub const PMSSE_SHIFT: u32 = 30;
20516 pub const PMSSE_MASK: u64 = 0b11;
20518 pub const HPMFZS_SHIFT: u32 = 36;
20520 pub const PMEE_SHIFT: u32 = 40;
20522 pub const PMEE_MASK: u64 = 0b11;
20524 pub const EBWE_SHIFT: u32 = 43;
20526 pub const ENSTEPOP_SHIFT: u32 = 50;
20528
20529 pub const fn hpmn(self) -> u8 {
20531 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
20532 }
20533
20534 pub const fn set_hpmn(&mut self, value: u8) {
20536 let offset = Self::HPMN_SHIFT;
20537 assert!(value & (Self::HPMN_MASK as u8) == value);
20538 *self = Self::from_bits_retain(
20539 (self.bits() & !(Self::HPMN_MASK << offset)) | ((value as u64) << offset),
20540 );
20541 }
20542
20543 pub const fn with_hpmn(mut self, value: u8) -> Self {
20545 self.set_hpmn(value);
20546 self
20547 }
20548
20549 pub const fn e2pb(self) -> u8 {
20551 ((self.bits() >> Self::E2PB_SHIFT) & 0b11) as u8
20552 }
20553
20554 pub const fn set_e2pb(&mut self, value: u8) {
20556 let offset = Self::E2PB_SHIFT;
20557 assert!(value & (Self::E2PB_MASK as u8) == value);
20558 *self = Self::from_bits_retain(
20559 (self.bits() & !(Self::E2PB_MASK << offset)) | ((value as u64) << offset),
20560 );
20561 }
20562
20563 pub const fn with_e2pb(mut self, value: u8) -> Self {
20565 self.set_e2pb(value);
20566 self
20567 }
20568
20569 pub const fn e2tb(self) -> u8 {
20571 ((self.bits() >> Self::E2TB_SHIFT) & 0b11) as u8
20572 }
20573
20574 pub const fn set_e2tb(&mut self, value: u8) {
20576 let offset = Self::E2TB_SHIFT;
20577 assert!(value & (Self::E2TB_MASK as u8) == value);
20578 *self = Self::from_bits_retain(
20579 (self.bits() & !(Self::E2TB_MASK << offset)) | ((value as u64) << offset),
20580 );
20581 }
20582
20583 pub const fn with_e2tb(mut self, value: u8) -> Self {
20585 self.set_e2tb(value);
20586 self
20587 }
20588
20589 pub const fn pmsse(self) -> u8 {
20591 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
20592 }
20593
20594 pub const fn set_pmsse(&mut self, value: u8) {
20596 let offset = Self::PMSSE_SHIFT;
20597 assert!(value & (Self::PMSSE_MASK as u8) == value);
20598 *self = Self::from_bits_retain(
20599 (self.bits() & !(Self::PMSSE_MASK << offset)) | ((value as u64) << offset),
20600 );
20601 }
20602
20603 pub const fn with_pmsse(mut self, value: u8) -> Self {
20605 self.set_pmsse(value);
20606 self
20607 }
20608
20609 pub const fn pmee(self) -> u8 {
20611 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
20612 }
20613
20614 pub const fn set_pmee(&mut self, value: u8) {
20616 let offset = Self::PMEE_SHIFT;
20617 assert!(value & (Self::PMEE_MASK as u8) == value);
20618 *self = Self::from_bits_retain(
20619 (self.bits() & !(Self::PMEE_MASK << offset)) | ((value as u64) << offset),
20620 );
20621 }
20622
20623 pub const fn with_pmee(mut self, value: u8) -> Self {
20625 self.set_pmee(value);
20626 self
20627 }
20628}
20629
20630#[cfg(feature = "el3")]
20631bitflags! {
20632 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20634 #[repr(transparent)]
20635 pub struct MdcrEl3: u64 {
20636 const RLTE = 1 << 0;
20638 const EPMADE = 1 << 2;
20640 const ETADE = 1 << 3;
20642 const EDADE = 1 << 4;
20644 const TPM = 1 << 6;
20646 const ENPM2 = 1 << 7;
20648 const TDA = 1 << 9;
20650 const TDOSA = 1 << 10;
20652 const NSPBE = 1 << 11;
20654 const SDD = 1 << 16;
20656 const SPME = 1 << 17;
20658 const STE = 1 << 18;
20660 const TTRF = 1 << 19;
20662 const EDAD = 1 << 20;
20664 const EPMAD = 1 << 21;
20666 const ETAD = 1 << 22;
20668 const SCCD = 1 << 23;
20670 const NSTBE = 1 << 26;
20672 const TDCC = 1 << 27;
20674 const MTPME = 1 << 28;
20676 const MCCD = 1 << 34;
20678 const MPMX = 1 << 35;
20680 const ENPMSN = 1 << 36;
20682 const E3BREW = 1 << 37;
20684 const E3BREC = 1 << 38;
20686 const ENTB2 = 1 << 39;
20688 const ENPMS3 = 1 << 42;
20690 const EBWE = 1 << 43;
20692 const ENPMSS = 1 << 44;
20694 const ENITE = 1 << 47;
20696 const ENSTEPOP = 1 << 50;
20698 const ENPMS4 = 1 << 55;
20700 }
20701}
20702
20703#[cfg(feature = "el3")]
20704impl MdcrEl3 {
20705 pub const RLTE_SHIFT: u32 = 0;
20707 pub const EPMADE_SHIFT: u32 = 2;
20709 pub const ETADE_SHIFT: u32 = 3;
20711 pub const EDADE_SHIFT: u32 = 4;
20713 pub const TPM_SHIFT: u32 = 6;
20715 pub const ENPM2_SHIFT: u32 = 7;
20717 pub const TDA_SHIFT: u32 = 9;
20719 pub const TDOSA_SHIFT: u32 = 10;
20721 pub const NSPBE_SHIFT: u32 = 11;
20723 pub const NSPB_SHIFT: u32 = 12;
20725 pub const NSPB_MASK: u64 = 0b11;
20727 pub const SPD32_SHIFT: u32 = 14;
20729 pub const SPD32_MASK: u64 = 0b11;
20731 pub const SDD_SHIFT: u32 = 16;
20733 pub const SPME_SHIFT: u32 = 17;
20735 pub const STE_SHIFT: u32 = 18;
20737 pub const TTRF_SHIFT: u32 = 19;
20739 pub const EDAD_SHIFT: u32 = 20;
20741 pub const EPMAD_SHIFT: u32 = 21;
20743 pub const ETAD_SHIFT: u32 = 22;
20745 pub const SCCD_SHIFT: u32 = 23;
20747 pub const NSTB_SHIFT: u32 = 24;
20749 pub const NSTB_MASK: u64 = 0b11;
20751 pub const NSTBE_SHIFT: u32 = 26;
20753 pub const TDCC_SHIFT: u32 = 27;
20755 pub const MTPME_SHIFT: u32 = 28;
20757 pub const PMSSE_SHIFT: u32 = 30;
20759 pub const PMSSE_MASK: u64 = 0b11;
20761 pub const SBRBE_SHIFT: u32 = 32;
20763 pub const SBRBE_MASK: u64 = 0b11;
20765 pub const MCCD_SHIFT: u32 = 34;
20767 pub const MPMX_SHIFT: u32 = 35;
20769 pub const ENPMSN_SHIFT: u32 = 36;
20771 pub const E3BREW_SHIFT: u32 = 37;
20773 pub const E3BREC_SHIFT: u32 = 38;
20775 pub const ENTB2_SHIFT: u32 = 39;
20777 pub const PMEE_SHIFT: u32 = 40;
20779 pub const PMEE_MASK: u64 = 0b11;
20781 pub const ENPMS3_SHIFT: u32 = 42;
20783 pub const EBWE_SHIFT: u32 = 43;
20785 pub const ENPMSS_SHIFT: u32 = 44;
20787 pub const EPMSSAD_SHIFT: u32 = 45;
20789 pub const EPMSSAD_MASK: u64 = 0b11;
20791 pub const ENITE_SHIFT: u32 = 47;
20793 pub const ETBAD_SHIFT: u32 = 48;
20795 pub const ETBAD_MASK: u64 = 0b11;
20797 pub const ENSTEPOP_SHIFT: u32 = 50;
20799 pub const PMSEE_SHIFT: u32 = 51;
20801 pub const PMSEE_MASK: u64 = 0b11;
20803 pub const TRBEE_SHIFT: u32 = 53;
20805 pub const TRBEE_MASK: u64 = 0b11;
20807 pub const ENPMS4_SHIFT: u32 = 55;
20809
20810 pub const fn nspb(self) -> u8 {
20812 ((self.bits() >> Self::NSPB_SHIFT) & 0b11) as u8
20813 }
20814
20815 pub const fn set_nspb(&mut self, value: u8) {
20817 let offset = Self::NSPB_SHIFT;
20818 assert!(value & (Self::NSPB_MASK as u8) == value);
20819 *self = Self::from_bits_retain(
20820 (self.bits() & !(Self::NSPB_MASK << offset)) | ((value as u64) << offset),
20821 );
20822 }
20823
20824 pub const fn with_nspb(mut self, value: u8) -> Self {
20826 self.set_nspb(value);
20827 self
20828 }
20829
20830 pub const fn spd32(self) -> u8 {
20832 ((self.bits() >> Self::SPD32_SHIFT) & 0b11) as u8
20833 }
20834
20835 pub const fn set_spd32(&mut self, value: u8) {
20837 let offset = Self::SPD32_SHIFT;
20838 assert!(value & (Self::SPD32_MASK as u8) == value);
20839 *self = Self::from_bits_retain(
20840 (self.bits() & !(Self::SPD32_MASK << offset)) | ((value as u64) << offset),
20841 );
20842 }
20843
20844 pub const fn with_spd32(mut self, value: u8) -> Self {
20846 self.set_spd32(value);
20847 self
20848 }
20849
20850 pub const fn nstb(self) -> u8 {
20852 ((self.bits() >> Self::NSTB_SHIFT) & 0b11) as u8
20853 }
20854
20855 pub const fn set_nstb(&mut self, value: u8) {
20857 let offset = Self::NSTB_SHIFT;
20858 assert!(value & (Self::NSTB_MASK as u8) == value);
20859 *self = Self::from_bits_retain(
20860 (self.bits() & !(Self::NSTB_MASK << offset)) | ((value as u64) << offset),
20861 );
20862 }
20863
20864 pub const fn with_nstb(mut self, value: u8) -> Self {
20866 self.set_nstb(value);
20867 self
20868 }
20869
20870 pub const fn pmsse(self) -> u8 {
20872 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
20873 }
20874
20875 pub const fn set_pmsse(&mut self, value: u8) {
20877 let offset = Self::PMSSE_SHIFT;
20878 assert!(value & (Self::PMSSE_MASK as u8) == value);
20879 *self = Self::from_bits_retain(
20880 (self.bits() & !(Self::PMSSE_MASK << offset)) | ((value as u64) << offset),
20881 );
20882 }
20883
20884 pub const fn with_pmsse(mut self, value: u8) -> Self {
20886 self.set_pmsse(value);
20887 self
20888 }
20889
20890 pub const fn sbrbe(self) -> u8 {
20892 ((self.bits() >> Self::SBRBE_SHIFT) & 0b11) as u8
20893 }
20894
20895 pub const fn set_sbrbe(&mut self, value: u8) {
20897 let offset = Self::SBRBE_SHIFT;
20898 assert!(value & (Self::SBRBE_MASK as u8) == value);
20899 *self = Self::from_bits_retain(
20900 (self.bits() & !(Self::SBRBE_MASK << offset)) | ((value as u64) << offset),
20901 );
20902 }
20903
20904 pub const fn with_sbrbe(mut self, value: u8) -> Self {
20906 self.set_sbrbe(value);
20907 self
20908 }
20909
20910 pub const fn pmee(self) -> u8 {
20912 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
20913 }
20914
20915 pub const fn set_pmee(&mut self, value: u8) {
20917 let offset = Self::PMEE_SHIFT;
20918 assert!(value & (Self::PMEE_MASK as u8) == value);
20919 *self = Self::from_bits_retain(
20920 (self.bits() & !(Self::PMEE_MASK << offset)) | ((value as u64) << offset),
20921 );
20922 }
20923
20924 pub const fn with_pmee(mut self, value: u8) -> Self {
20926 self.set_pmee(value);
20927 self
20928 }
20929
20930 pub const fn epmssad(self) -> u8 {
20932 ((self.bits() >> Self::EPMSSAD_SHIFT) & 0b11) as u8
20933 }
20934
20935 pub const fn set_epmssad(&mut self, value: u8) {
20937 let offset = Self::EPMSSAD_SHIFT;
20938 assert!(value & (Self::EPMSSAD_MASK as u8) == value);
20939 *self = Self::from_bits_retain(
20940 (self.bits() & !(Self::EPMSSAD_MASK << offset)) | ((value as u64) << offset),
20941 );
20942 }
20943
20944 pub const fn with_epmssad(mut self, value: u8) -> Self {
20946 self.set_epmssad(value);
20947 self
20948 }
20949
20950 pub const fn etbad(self) -> u8 {
20952 ((self.bits() >> Self::ETBAD_SHIFT) & 0b11) as u8
20953 }
20954
20955 pub const fn set_etbad(&mut self, value: u8) {
20957 let offset = Self::ETBAD_SHIFT;
20958 assert!(value & (Self::ETBAD_MASK as u8) == value);
20959 *self = Self::from_bits_retain(
20960 (self.bits() & !(Self::ETBAD_MASK << offset)) | ((value as u64) << offset),
20961 );
20962 }
20963
20964 pub const fn with_etbad(mut self, value: u8) -> Self {
20966 self.set_etbad(value);
20967 self
20968 }
20969
20970 pub const fn pmsee(self) -> u8 {
20972 ((self.bits() >> Self::PMSEE_SHIFT) & 0b11) as u8
20973 }
20974
20975 pub const fn set_pmsee(&mut self, value: u8) {
20977 let offset = Self::PMSEE_SHIFT;
20978 assert!(value & (Self::PMSEE_MASK as u8) == value);
20979 *self = Self::from_bits_retain(
20980 (self.bits() & !(Self::PMSEE_MASK << offset)) | ((value as u64) << offset),
20981 );
20982 }
20983
20984 pub const fn with_pmsee(mut self, value: u8) -> Self {
20986 self.set_pmsee(value);
20987 self
20988 }
20989
20990 pub const fn trbee(self) -> u8 {
20992 ((self.bits() >> Self::TRBEE_SHIFT) & 0b11) as u8
20993 }
20994
20995 pub const fn set_trbee(&mut self, value: u8) {
20997 let offset = Self::TRBEE_SHIFT;
20998 assert!(value & (Self::TRBEE_MASK as u8) == value);
20999 *self = Self::from_bits_retain(
21000 (self.bits() & !(Self::TRBEE_MASK << offset)) | ((value as u64) << offset),
21001 );
21002 }
21003
21004 pub const fn with_trbee(mut self, value: u8) -> Self {
21006 self.set_trbee(value);
21007 self
21008 }
21009}
21010
21011#[cfg(feature = "el1")]
21012bitflags! {
21013 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21015 #[repr(transparent)]
21016 pub struct MdscrEl1: u64 {
21017 const SS = 1 << 0;
21019 const ERR = 1 << 6;
21021 const TDCC = 1 << 12;
21023 const KDE = 1 << 13;
21025 const HDE = 1 << 14;
21027 const MDE = 1 << 15;
21029 const SC2 = 1 << 19;
21031 const TDA = 1 << 21;
21033 const TXU = 1 << 26;
21035 const RXO = 1 << 27;
21037 const TXFULL = 1 << 29;
21039 const RXFULL = 1 << 30;
21041 const TFO = 1 << 31;
21043 const EMBWE = 1 << 32;
21045 const TTA = 1 << 33;
21047 const ENSPM = 1 << 34;
21049 const EHBWE = 1 << 35;
21051 const ENSTEPOP = 1 << 50;
21053 }
21054}
21055
21056#[cfg(feature = "el1")]
21057impl MdscrEl1 {
21058 pub const SS_SHIFT: u32 = 0;
21060 pub const ERR_SHIFT: u32 = 6;
21062 pub const TDCC_SHIFT: u32 = 12;
21064 pub const KDE_SHIFT: u32 = 13;
21066 pub const HDE_SHIFT: u32 = 14;
21068 pub const MDE_SHIFT: u32 = 15;
21070 pub const SC2_SHIFT: u32 = 19;
21072 pub const TDA_SHIFT: u32 = 21;
21074 pub const INTDIS_SHIFT: u32 = 22;
21076 pub const INTDIS_MASK: u64 = 0b11;
21078 pub const TXU_SHIFT: u32 = 26;
21080 pub const RXO_SHIFT: u32 = 27;
21082 pub const TXFULL_SHIFT: u32 = 29;
21084 pub const RXFULL_SHIFT: u32 = 30;
21086 pub const TFO_SHIFT: u32 = 31;
21088 pub const EMBWE_SHIFT: u32 = 32;
21090 pub const TTA_SHIFT: u32 = 33;
21092 pub const ENSPM_SHIFT: u32 = 34;
21094 pub const EHBWE_SHIFT: u32 = 35;
21096 pub const ENSTEPOP_SHIFT: u32 = 50;
21098
21099 pub const fn intdis(self) -> u8 {
21101 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
21102 }
21103
21104 pub const fn set_intdis(&mut self, value: u8) {
21106 let offset = Self::INTDIS_SHIFT;
21107 assert!(value & (Self::INTDIS_MASK as u8) == value);
21108 *self = Self::from_bits_retain(
21109 (self.bits() & !(Self::INTDIS_MASK << offset)) | ((value as u64) << offset),
21110 );
21111 }
21112
21113 pub const fn with_intdis(mut self, value: u8) -> Self {
21115 self.set_intdis(value);
21116 self
21117 }
21118}
21119
21120bitflags! {
21121 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21123 #[repr(transparent)]
21124 pub struct Midr: u32 {
21125 }
21126}
21127
21128impl Midr {
21129 pub const REVISION_SHIFT: u32 = 0;
21131 pub const REVISION_MASK: u32 = 0b1111;
21133 pub const PARTNUM_SHIFT: u32 = 4;
21135 pub const PARTNUM_MASK: u32 = 0b111111111111;
21137 pub const ARCHITECTURE_SHIFT: u32 = 16;
21139 pub const ARCHITECTURE_MASK: u32 = 0b1111;
21141 pub const VARIANT_SHIFT: u32 = 20;
21143 pub const VARIANT_MASK: u32 = 0b1111;
21145 pub const IMPLEMENTER_SHIFT: u32 = 24;
21147 pub const IMPLEMENTER_MASK: u32 = 0b11111111;
21149
21150 pub const fn revision(self) -> u8 {
21152 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
21153 }
21154
21155 pub const fn set_revision(&mut self, value: u8) {
21157 let offset = Self::REVISION_SHIFT;
21158 assert!(value & (Self::REVISION_MASK as u8) == value);
21159 *self = Self::from_bits_retain(
21160 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u32) << offset),
21161 );
21162 }
21163
21164 pub const fn with_revision(mut self, value: u8) -> Self {
21166 self.set_revision(value);
21167 self
21168 }
21169
21170 pub const fn partnum(self) -> u16 {
21172 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
21173 }
21174
21175 pub const fn set_partnum(&mut self, value: u16) {
21177 let offset = Self::PARTNUM_SHIFT;
21178 assert!(value & (Self::PARTNUM_MASK as u16) == value);
21179 *self = Self::from_bits_retain(
21180 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u32) << offset),
21181 );
21182 }
21183
21184 pub const fn with_partnum(mut self, value: u16) -> Self {
21186 self.set_partnum(value);
21187 self
21188 }
21189
21190 pub const fn architecture(self) -> u8 {
21192 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
21193 }
21194
21195 pub const fn set_architecture(&mut self, value: u8) {
21197 let offset = Self::ARCHITECTURE_SHIFT;
21198 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
21199 *self = Self::from_bits_retain(
21200 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u32) << offset),
21201 );
21202 }
21203
21204 pub const fn with_architecture(mut self, value: u8) -> Self {
21206 self.set_architecture(value);
21207 self
21208 }
21209
21210 pub const fn variant(self) -> u8 {
21212 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
21213 }
21214
21215 pub const fn set_variant(&mut self, value: u8) {
21217 let offset = Self::VARIANT_SHIFT;
21218 assert!(value & (Self::VARIANT_MASK as u8) == value);
21219 *self = Self::from_bits_retain(
21220 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u32) << offset),
21221 );
21222 }
21223
21224 pub const fn with_variant(mut self, value: u8) -> Self {
21226 self.set_variant(value);
21227 self
21228 }
21229
21230 pub const fn implementer(self) -> u8 {
21232 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
21233 }
21234
21235 pub const fn set_implementer(&mut self, value: u8) {
21237 let offset = Self::IMPLEMENTER_SHIFT;
21238 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
21239 *self = Self::from_bits_retain(
21240 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u32) << offset),
21241 );
21242 }
21243
21244 pub const fn with_implementer(mut self, value: u8) -> Self {
21246 self.set_implementer(value);
21247 self
21248 }
21249}
21250
21251#[cfg(feature = "el1")]
21252bitflags! {
21253 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21255 #[repr(transparent)]
21256 pub struct MidrEl1: u64 {
21257 }
21258}
21259
21260#[cfg(feature = "el1")]
21261impl MidrEl1 {
21262 pub const REVISION_SHIFT: u32 = 0;
21264 pub const REVISION_MASK: u64 = 0b1111;
21266 pub const PARTNUM_SHIFT: u32 = 4;
21268 pub const PARTNUM_MASK: u64 = 0b111111111111;
21270 pub const ARCHITECTURE_SHIFT: u32 = 16;
21272 pub const ARCHITECTURE_MASK: u64 = 0b1111;
21274 pub const VARIANT_SHIFT: u32 = 20;
21276 pub const VARIANT_MASK: u64 = 0b1111;
21278 pub const IMPLEMENTER_SHIFT: u32 = 24;
21280 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
21282
21283 pub const fn revision(self) -> u8 {
21285 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
21286 }
21287
21288 pub const fn set_revision(&mut self, value: u8) {
21290 let offset = Self::REVISION_SHIFT;
21291 assert!(value & (Self::REVISION_MASK as u8) == value);
21292 *self = Self::from_bits_retain(
21293 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u64) << offset),
21294 );
21295 }
21296
21297 pub const fn with_revision(mut self, value: u8) -> Self {
21299 self.set_revision(value);
21300 self
21301 }
21302
21303 pub const fn partnum(self) -> u16 {
21305 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
21306 }
21307
21308 pub const fn set_partnum(&mut self, value: u16) {
21310 let offset = Self::PARTNUM_SHIFT;
21311 assert!(value & (Self::PARTNUM_MASK as u16) == value);
21312 *self = Self::from_bits_retain(
21313 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u64) << offset),
21314 );
21315 }
21316
21317 pub const fn with_partnum(mut self, value: u16) -> Self {
21319 self.set_partnum(value);
21320 self
21321 }
21322
21323 pub const fn architecture(self) -> u8 {
21325 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
21326 }
21327
21328 pub const fn set_architecture(&mut self, value: u8) {
21330 let offset = Self::ARCHITECTURE_SHIFT;
21331 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
21332 *self = Self::from_bits_retain(
21333 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u64) << offset),
21334 );
21335 }
21336
21337 pub const fn with_architecture(mut self, value: u8) -> Self {
21339 self.set_architecture(value);
21340 self
21341 }
21342
21343 pub const fn variant(self) -> u8 {
21345 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
21346 }
21347
21348 pub const fn set_variant(&mut self, value: u8) {
21350 let offset = Self::VARIANT_SHIFT;
21351 assert!(value & (Self::VARIANT_MASK as u8) == value);
21352 *self = Self::from_bits_retain(
21353 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u64) << offset),
21354 );
21355 }
21356
21357 pub const fn with_variant(mut self, value: u8) -> Self {
21359 self.set_variant(value);
21360 self
21361 }
21362
21363 pub const fn implementer(self) -> u8 {
21365 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
21366 }
21367
21368 pub const fn set_implementer(&mut self, value: u8) {
21370 let offset = Self::IMPLEMENTER_SHIFT;
21371 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
21372 *self = Self::from_bits_retain(
21373 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u64) << offset),
21374 );
21375 }
21376
21377 pub const fn with_implementer(mut self, value: u8) -> Self {
21379 self.set_implementer(value);
21380 self
21381 }
21382}
21383
21384#[cfg(feature = "el2")]
21385bitflags! {
21386 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21388 #[repr(transparent)]
21389 pub struct Mpam2El2: u64 {
21390 const TRAPMPAM1EL1 = 1 << 48;
21392 const TRAPMPAM0EL1 = 1 << 49;
21394 const ENMPAMSM = 1 << 50;
21396 const ALTSP_FRCD = 1 << 54;
21398 const ALTSP_EL2 = 1 << 55;
21400 const ALTSP_HFC = 1 << 56;
21402 const TIDR = 1 << 58;
21404 const MPAMEN = 1 << 63;
21406 }
21407}
21408
21409#[cfg(feature = "el2")]
21410impl Mpam2El2 {
21411 pub const PARTID_SHIFT: u32 = 0;
21413 pub const PARTID_MASK: u64 = 0b1111111111111111;
21415 pub const PARTID_I_SHIFT: u32 = 0;
21417 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
21419 pub const PARTID_D_SHIFT: u32 = 16;
21421 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
21423 pub const ALTPARTID_SHIFT: u32 = 16;
21425 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
21427 pub const PMG_SHIFT: u32 = 32;
21429 pub const PMG_MASK: u64 = 0b1111111111111111;
21431 pub const PMG_I_SHIFT: u32 = 32;
21433 pub const PMG_I_MASK: u64 = 0b11111111;
21435 pub const PMG_D_SHIFT: u32 = 40;
21437 pub const PMG_D_MASK: u64 = 0b11111111;
21439 pub const TRAPMPAM1EL1_SHIFT: u32 = 48;
21441 pub const ALTPMG_SHIFT: u32 = 48;
21443 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
21445 pub const TRAPMPAM0EL1_SHIFT: u32 = 49;
21447 pub const ENMPAMSM_SHIFT: u32 = 50;
21449 pub const ALTSP_FRCD_SHIFT: u32 = 54;
21451 pub const ALTSP_EL2_SHIFT: u32 = 55;
21453 pub const ALTSP_HFC_SHIFT: u32 = 56;
21455 pub const TIDR_SHIFT: u32 = 58;
21457 pub const MPAMEN_SHIFT: u32 = 63;
21459
21460 pub const fn partid(self) -> u16 {
21462 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
21463 }
21464
21465 pub const fn set_partid(&mut self, value: u16) {
21467 let offset = Self::PARTID_SHIFT;
21468 assert!(value & (Self::PARTID_MASK as u16) == value);
21469 *self = Self::from_bits_retain(
21470 (self.bits() & !(Self::PARTID_MASK << offset)) | ((value as u64) << offset),
21471 );
21472 }
21473
21474 pub const fn with_partid(mut self, value: u16) -> Self {
21476 self.set_partid(value);
21477 self
21478 }
21479
21480 pub const fn partid_i(self) -> u16 {
21482 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
21483 }
21484
21485 pub const fn set_partid_i(&mut self, value: u16) {
21487 let offset = Self::PARTID_I_SHIFT;
21488 assert!(value & (Self::PARTID_I_MASK as u16) == value);
21489 *self = Self::from_bits_retain(
21490 (self.bits() & !(Self::PARTID_I_MASK << offset)) | ((value as u64) << offset),
21491 );
21492 }
21493
21494 pub const fn with_partid_i(mut self, value: u16) -> Self {
21496 self.set_partid_i(value);
21497 self
21498 }
21499
21500 pub const fn partid_d(self) -> u16 {
21502 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
21503 }
21504
21505 pub const fn set_partid_d(&mut self, value: u16) {
21507 let offset = Self::PARTID_D_SHIFT;
21508 assert!(value & (Self::PARTID_D_MASK as u16) == value);
21509 *self = Self::from_bits_retain(
21510 (self.bits() & !(Self::PARTID_D_MASK << offset)) | ((value as u64) << offset),
21511 );
21512 }
21513
21514 pub const fn with_partid_d(mut self, value: u16) -> Self {
21516 self.set_partid_d(value);
21517 self
21518 }
21519
21520 pub const fn altpartid(self) -> u16 {
21522 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
21523 }
21524
21525 pub const fn set_altpartid(&mut self, value: u16) {
21527 let offset = Self::ALTPARTID_SHIFT;
21528 assert!(value & (Self::ALTPARTID_MASK as u16) == value);
21529 *self = Self::from_bits_retain(
21530 (self.bits() & !(Self::ALTPARTID_MASK << offset)) | ((value as u64) << offset),
21531 );
21532 }
21533
21534 pub const fn with_altpartid(mut self, value: u16) -> Self {
21536 self.set_altpartid(value);
21537 self
21538 }
21539
21540 pub const fn pmg(self) -> u16 {
21542 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
21543 }
21544
21545 pub const fn set_pmg(&mut self, value: u16) {
21547 let offset = Self::PMG_SHIFT;
21548 assert!(value & (Self::PMG_MASK as u16) == value);
21549 *self = Self::from_bits_retain(
21550 (self.bits() & !(Self::PMG_MASK << offset)) | ((value as u64) << offset),
21551 );
21552 }
21553
21554 pub const fn with_pmg(mut self, value: u16) -> Self {
21556 self.set_pmg(value);
21557 self
21558 }
21559
21560 pub const fn pmg_i(self) -> u8 {
21562 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
21563 }
21564
21565 pub const fn set_pmg_i(&mut self, value: u8) {
21567 let offset = Self::PMG_I_SHIFT;
21568 assert!(value & (Self::PMG_I_MASK as u8) == value);
21569 *self = Self::from_bits_retain(
21570 (self.bits() & !(Self::PMG_I_MASK << offset)) | ((value as u64) << offset),
21571 );
21572 }
21573
21574 pub const fn with_pmg_i(mut self, value: u8) -> Self {
21576 self.set_pmg_i(value);
21577 self
21578 }
21579
21580 pub const fn pmg_d(self) -> u8 {
21582 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
21583 }
21584
21585 pub const fn set_pmg_d(&mut self, value: u8) {
21587 let offset = Self::PMG_D_SHIFT;
21588 assert!(value & (Self::PMG_D_MASK as u8) == value);
21589 *self = Self::from_bits_retain(
21590 (self.bits() & !(Self::PMG_D_MASK << offset)) | ((value as u64) << offset),
21591 );
21592 }
21593
21594 pub const fn with_pmg_d(mut self, value: u8) -> Self {
21596 self.set_pmg_d(value);
21597 self
21598 }
21599
21600 pub const fn altpmg(self) -> u16 {
21602 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
21603 }
21604
21605 pub const fn set_altpmg(&mut self, value: u16) {
21607 let offset = Self::ALTPMG_SHIFT;
21608 assert!(value & (Self::ALTPMG_MASK as u16) == value);
21609 *self = Self::from_bits_retain(
21610 (self.bits() & !(Self::ALTPMG_MASK << offset)) | ((value as u64) << offset),
21611 );
21612 }
21613
21614 pub const fn with_altpmg(mut self, value: u16) -> Self {
21616 self.set_altpmg(value);
21617 self
21618 }
21619}
21620
21621#[cfg(feature = "el3")]
21622bitflags! {
21623 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21627 #[repr(transparent)]
21628 pub struct Mpam3El3: u64 {
21629 const RT_ALTSP_NS = 1 << 52;
21631 const ALTSP_EL3 = 1 << 55;
21633 const ALTSP_HFC = 1 << 56;
21635 const ALTSP_HEN = 1 << 57;
21637 const FORCE_NS = 1 << 60;
21639 const SDEFLT = 1 << 61;
21641 const TRAPLOWER = 1 << 62;
21643 const MPAMEN = 1 << 63;
21645 }
21646}
21647
21648#[cfg(feature = "el3")]
21649impl Mpam3El3 {
21650 pub const PARTID_SHIFT: u32 = 0;
21652 pub const PARTID_MASK: u64 = 0b1111111111111111;
21654 pub const PARTID_I_SHIFT: u32 = 0;
21656 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
21658 pub const PARTID_D_SHIFT: u32 = 16;
21660 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
21662 pub const ALTPARTID_SHIFT: u32 = 16;
21664 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
21666 pub const PMG_SHIFT: u32 = 32;
21668 pub const PMG_MASK: u64 = 0b1111111111111111;
21670 pub const PMG_I_SHIFT: u32 = 32;
21672 pub const PMG_I_MASK: u64 = 0b11111111;
21674 pub const PMG_D_SHIFT: u32 = 40;
21676 pub const PMG_D_MASK: u64 = 0b11111111;
21678 pub const ALTPMG_SHIFT: u32 = 48;
21680 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
21682 pub const RT_ALTSP_NS_SHIFT: u32 = 52;
21684 pub const ALTSP_EL3_SHIFT: u32 = 55;
21686 pub const ALTSP_HFC_SHIFT: u32 = 56;
21688 pub const ALTSP_HEN_SHIFT: u32 = 57;
21690 pub const FORCE_NS_SHIFT: u32 = 60;
21692 pub const SDEFLT_SHIFT: u32 = 61;
21694 pub const TRAPLOWER_SHIFT: u32 = 62;
21696 pub const MPAMEN_SHIFT: u32 = 63;
21698
21699 pub const fn partid(self) -> u16 {
21701 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
21702 }
21703
21704 pub const fn set_partid(&mut self, value: u16) {
21706 let offset = Self::PARTID_SHIFT;
21707 assert!(value & (Self::PARTID_MASK as u16) == value);
21708 *self = Self::from_bits_retain(
21709 (self.bits() & !(Self::PARTID_MASK << offset)) | ((value as u64) << offset),
21710 );
21711 }
21712
21713 pub const fn with_partid(mut self, value: u16) -> Self {
21715 self.set_partid(value);
21716 self
21717 }
21718
21719 pub const fn partid_i(self) -> u16 {
21721 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
21722 }
21723
21724 pub const fn set_partid_i(&mut self, value: u16) {
21726 let offset = Self::PARTID_I_SHIFT;
21727 assert!(value & (Self::PARTID_I_MASK as u16) == value);
21728 *self = Self::from_bits_retain(
21729 (self.bits() & !(Self::PARTID_I_MASK << offset)) | ((value as u64) << offset),
21730 );
21731 }
21732
21733 pub const fn with_partid_i(mut self, value: u16) -> Self {
21735 self.set_partid_i(value);
21736 self
21737 }
21738
21739 pub const fn partid_d(self) -> u16 {
21741 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
21742 }
21743
21744 pub const fn set_partid_d(&mut self, value: u16) {
21746 let offset = Self::PARTID_D_SHIFT;
21747 assert!(value & (Self::PARTID_D_MASK as u16) == value);
21748 *self = Self::from_bits_retain(
21749 (self.bits() & !(Self::PARTID_D_MASK << offset)) | ((value as u64) << offset),
21750 );
21751 }
21752
21753 pub const fn with_partid_d(mut self, value: u16) -> Self {
21755 self.set_partid_d(value);
21756 self
21757 }
21758
21759 pub const fn altpartid(self) -> u16 {
21761 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
21762 }
21763
21764 pub const fn set_altpartid(&mut self, value: u16) {
21766 let offset = Self::ALTPARTID_SHIFT;
21767 assert!(value & (Self::ALTPARTID_MASK as u16) == value);
21768 *self = Self::from_bits_retain(
21769 (self.bits() & !(Self::ALTPARTID_MASK << offset)) | ((value as u64) << offset),
21770 );
21771 }
21772
21773 pub const fn with_altpartid(mut self, value: u16) -> Self {
21775 self.set_altpartid(value);
21776 self
21777 }
21778
21779 pub const fn pmg(self) -> u16 {
21781 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
21782 }
21783
21784 pub const fn set_pmg(&mut self, value: u16) {
21786 let offset = Self::PMG_SHIFT;
21787 assert!(value & (Self::PMG_MASK as u16) == value);
21788 *self = Self::from_bits_retain(
21789 (self.bits() & !(Self::PMG_MASK << offset)) | ((value as u64) << offset),
21790 );
21791 }
21792
21793 pub const fn with_pmg(mut self, value: u16) -> Self {
21795 self.set_pmg(value);
21796 self
21797 }
21798
21799 pub const fn pmg_i(self) -> u8 {
21801 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
21802 }
21803
21804 pub const fn set_pmg_i(&mut self, value: u8) {
21806 let offset = Self::PMG_I_SHIFT;
21807 assert!(value & (Self::PMG_I_MASK as u8) == value);
21808 *self = Self::from_bits_retain(
21809 (self.bits() & !(Self::PMG_I_MASK << offset)) | ((value as u64) << offset),
21810 );
21811 }
21812
21813 pub const fn with_pmg_i(mut self, value: u8) -> Self {
21815 self.set_pmg_i(value);
21816 self
21817 }
21818
21819 pub const fn pmg_d(self) -> u8 {
21821 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
21822 }
21823
21824 pub const fn set_pmg_d(&mut self, value: u8) {
21826 let offset = Self::PMG_D_SHIFT;
21827 assert!(value & (Self::PMG_D_MASK as u8) == value);
21828 *self = Self::from_bits_retain(
21829 (self.bits() & !(Self::PMG_D_MASK << offset)) | ((value as u64) << offset),
21830 );
21831 }
21832
21833 pub const fn with_pmg_d(mut self, value: u8) -> Self {
21835 self.set_pmg_d(value);
21836 self
21837 }
21838
21839 pub const fn altpmg(self) -> u16 {
21841 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
21842 }
21843
21844 pub const fn set_altpmg(&mut self, value: u16) {
21846 let offset = Self::ALTPMG_SHIFT;
21847 assert!(value & (Self::ALTPMG_MASK as u16) == value);
21848 *self = Self::from_bits_retain(
21849 (self.bits() & !(Self::ALTPMG_MASK << offset)) | ((value as u64) << offset),
21850 );
21851 }
21852
21853 pub const fn with_altpmg(mut self, value: u16) -> Self {
21855 self.set_altpmg(value);
21856 self
21857 }
21858}
21859
21860#[cfg(feature = "el2")]
21861bitflags! {
21862 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21864 #[repr(transparent)]
21865 pub struct MpamhcrEl2: u64 {
21866 const EL0_VPMEN = 1 << 0;
21868 const EL1_VPMEN = 1 << 1;
21870 const VPMEN = 1 << 2;
21872 const VMMEN = 1 << 3;
21874 const SMVPMEN = 1 << 4;
21876 const SMVMMEN = 1 << 5;
21878 const GSTAPP_PLK = 1 << 8;
21880 const TRAP_MPAMIDR_EL1 = 1 << 31;
21882 const NTRAPMPAM1EL1 = 1 << 48;
21884 const NTRAPMPAM0EL1 = 1 << 49;
21886 const NTRAPMPAMSM = 1 << 50;
21888 const NTIDR = 1 << 58;
21890 }
21891}
21892
21893#[cfg(feature = "el2")]
21894impl MpamhcrEl2 {
21895 pub const EL0_VPMEN_SHIFT: u32 = 0;
21897 pub const EL1_VPMEN_SHIFT: u32 = 1;
21899 pub const VPMEN_SHIFT: u32 = 2;
21901 pub const VMMEN_SHIFT: u32 = 3;
21903 pub const SMVPMEN_SHIFT: u32 = 4;
21905 pub const SMVMMEN_SHIFT: u32 = 5;
21907 pub const GSTAPP_PLK_SHIFT: u32 = 8;
21909 pub const TRAP_MPAMIDR_EL1_SHIFT: u32 = 31;
21911 pub const NTRAPMPAM1EL1_SHIFT: u32 = 48;
21913 pub const NTRAPMPAM0EL1_SHIFT: u32 = 49;
21915 pub const NTRAPMPAMSM_SHIFT: u32 = 50;
21917 pub const NTIDR_SHIFT: u32 = 58;
21919}
21920
21921#[cfg(feature = "el1")]
21922bitflags! {
21923 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21927 #[repr(transparent)]
21928 pub struct MpamidrEl1: u64 {
21929 const HAS_HCR = 1 << 17;
21931 const HAS_ALT_ID = 1 << 21;
21933 const HAS_INSTR_ALT_ID = 1 << 22;
21935 const HAS_BW_CTRL = 1 << 56;
21937 const HAS_ALTSP = 1 << 57;
21939 const HAS_TIDR = 1 << 58;
21941 const SP4 = 1 << 59;
21943 const HAS_FORCE_NS = 1 << 60;
21945 const HAS_SDEFLT = 1 << 61;
21947 }
21948}
21949
21950#[cfg(feature = "el1")]
21951impl MpamidrEl1 {
21952 pub const PARTID_MAX_SHIFT: u32 = 0;
21954 pub const PARTID_MAX_MASK: u64 = 0b1111111111111111;
21956 pub const HAS_HCR_SHIFT: u32 = 17;
21958 pub const VPMR_MAX_SHIFT: u32 = 18;
21960 pub const VPMR_MAX_MASK: u64 = 0b111;
21962 pub const HAS_ALT_ID_SHIFT: u32 = 21;
21964 pub const HAS_INSTR_ALT_ID_SHIFT: u32 = 22;
21966 pub const HAS_BW_CTRL_SHIFT: u32 = 56;
21968 pub const HAS_ALTSP_SHIFT: u32 = 57;
21970 pub const HAS_TIDR_SHIFT: u32 = 58;
21972 pub const SP4_SHIFT: u32 = 59;
21974 pub const HAS_FORCE_NS_SHIFT: u32 = 60;
21976 pub const HAS_SDEFLT_SHIFT: u32 = 61;
21978
21979 pub const fn partid_max(self) -> u16 {
21981 ((self.bits() >> Self::PARTID_MAX_SHIFT) & 0b1111111111111111) as u16
21982 }
21983
21984 pub const fn set_partid_max(&mut self, value: u16) {
21986 let offset = Self::PARTID_MAX_SHIFT;
21987 assert!(value & (Self::PARTID_MAX_MASK as u16) == value);
21988 *self = Self::from_bits_retain(
21989 (self.bits() & !(Self::PARTID_MAX_MASK << offset)) | ((value as u64) << offset),
21990 );
21991 }
21992
21993 pub const fn with_partid_max(mut self, value: u16) -> Self {
21995 self.set_partid_max(value);
21996 self
21997 }
21998
21999 pub const fn vpmr_max(self) -> u8 {
22003 ((self.bits() >> Self::VPMR_MAX_SHIFT) & 0b111) as u8
22004 }
22005
22006 pub const fn set_vpmr_max(&mut self, value: u8) {
22010 let offset = Self::VPMR_MAX_SHIFT;
22011 assert!(value & (Self::VPMR_MAX_MASK as u8) == value);
22012 *self = Self::from_bits_retain(
22013 (self.bits() & !(Self::VPMR_MAX_MASK << offset)) | ((value as u64) << offset),
22014 );
22015 }
22016
22017 pub const fn with_vpmr_max(mut self, value: u8) -> Self {
22021 self.set_vpmr_max(value);
22022 self
22023 }
22024}
22025
22026#[cfg(feature = "el2")]
22027bitflags! {
22028 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22030 #[repr(transparent)]
22031 pub struct Mpamvpm0El2: u64 {
22032 }
22033}
22034
22035#[cfg(feature = "el2")]
22036impl Mpamvpm0El2 {
22037 pub const PHYPARTID0_SHIFT: u32 = 0;
22039 pub const PHYPARTID0_MASK: u64 = 0b1111111111111111;
22041 pub const PHYPARTID1_SHIFT: u32 = 16;
22043 pub const PHYPARTID1_MASK: u64 = 0b1111111111111111;
22045 pub const PHYPARTID2_SHIFT: u32 = 32;
22047 pub const PHYPARTID2_MASK: u64 = 0b1111111111111111;
22049 pub const PHYPARTID3_SHIFT: u32 = 48;
22051 pub const PHYPARTID3_MASK: u64 = 0b1111111111111111;
22053
22054 pub const fn phypartid0(self) -> u16 {
22056 ((self.bits() >> Self::PHYPARTID0_SHIFT) & 0b1111111111111111) as u16
22057 }
22058
22059 pub const fn set_phypartid0(&mut self, value: u16) {
22061 let offset = Self::PHYPARTID0_SHIFT;
22062 assert!(value & (Self::PHYPARTID0_MASK as u16) == value);
22063 *self = Self::from_bits_retain(
22064 (self.bits() & !(Self::PHYPARTID0_MASK << offset)) | ((value as u64) << offset),
22065 );
22066 }
22067
22068 pub const fn with_phypartid0(mut self, value: u16) -> Self {
22070 self.set_phypartid0(value);
22071 self
22072 }
22073
22074 pub const fn phypartid1(self) -> u16 {
22076 ((self.bits() >> Self::PHYPARTID1_SHIFT) & 0b1111111111111111) as u16
22077 }
22078
22079 pub const fn set_phypartid1(&mut self, value: u16) {
22081 let offset = Self::PHYPARTID1_SHIFT;
22082 assert!(value & (Self::PHYPARTID1_MASK as u16) == value);
22083 *self = Self::from_bits_retain(
22084 (self.bits() & !(Self::PHYPARTID1_MASK << offset)) | ((value as u64) << offset),
22085 );
22086 }
22087
22088 pub const fn with_phypartid1(mut self, value: u16) -> Self {
22090 self.set_phypartid1(value);
22091 self
22092 }
22093
22094 pub const fn phypartid2(self) -> u16 {
22096 ((self.bits() >> Self::PHYPARTID2_SHIFT) & 0b1111111111111111) as u16
22097 }
22098
22099 pub const fn set_phypartid2(&mut self, value: u16) {
22101 let offset = Self::PHYPARTID2_SHIFT;
22102 assert!(value & (Self::PHYPARTID2_MASK as u16) == value);
22103 *self = Self::from_bits_retain(
22104 (self.bits() & !(Self::PHYPARTID2_MASK << offset)) | ((value as u64) << offset),
22105 );
22106 }
22107
22108 pub const fn with_phypartid2(mut self, value: u16) -> Self {
22110 self.set_phypartid2(value);
22111 self
22112 }
22113
22114 pub const fn phypartid3(self) -> u16 {
22116 ((self.bits() >> Self::PHYPARTID3_SHIFT) & 0b1111111111111111) as u16
22117 }
22118
22119 pub const fn set_phypartid3(&mut self, value: u16) {
22121 let offset = Self::PHYPARTID3_SHIFT;
22122 assert!(value & (Self::PHYPARTID3_MASK as u16) == value);
22123 *self = Self::from_bits_retain(
22124 (self.bits() & !(Self::PHYPARTID3_MASK << offset)) | ((value as u64) << offset),
22125 );
22126 }
22127
22128 pub const fn with_phypartid3(mut self, value: u16) -> Self {
22130 self.set_phypartid3(value);
22131 self
22132 }
22133}
22134
22135#[cfg(feature = "el2")]
22136bitflags! {
22137 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22139 #[repr(transparent)]
22140 pub struct Mpamvpm1El2: u64 {
22141 }
22142}
22143
22144#[cfg(feature = "el2")]
22145impl Mpamvpm1El2 {
22146 pub const PHYPARTID4_SHIFT: u32 = 0;
22148 pub const PHYPARTID4_MASK: u64 = 0b1111111111111111;
22150 pub const PHYPARTID5_SHIFT: u32 = 16;
22152 pub const PHYPARTID5_MASK: u64 = 0b1111111111111111;
22154 pub const PHYPARTID6_SHIFT: u32 = 32;
22156 pub const PHYPARTID6_MASK: u64 = 0b1111111111111111;
22158 pub const PHYPARTID7_SHIFT: u32 = 48;
22160 pub const PHYPARTID7_MASK: u64 = 0b1111111111111111;
22162
22163 pub const fn phypartid4(self) -> u16 {
22165 ((self.bits() >> Self::PHYPARTID4_SHIFT) & 0b1111111111111111) as u16
22166 }
22167
22168 pub const fn set_phypartid4(&mut self, value: u16) {
22170 let offset = Self::PHYPARTID4_SHIFT;
22171 assert!(value & (Self::PHYPARTID4_MASK as u16) == value);
22172 *self = Self::from_bits_retain(
22173 (self.bits() & !(Self::PHYPARTID4_MASK << offset)) | ((value as u64) << offset),
22174 );
22175 }
22176
22177 pub const fn with_phypartid4(mut self, value: u16) -> Self {
22179 self.set_phypartid4(value);
22180 self
22181 }
22182
22183 pub const fn phypartid5(self) -> u16 {
22185 ((self.bits() >> Self::PHYPARTID5_SHIFT) & 0b1111111111111111) as u16
22186 }
22187
22188 pub const fn set_phypartid5(&mut self, value: u16) {
22190 let offset = Self::PHYPARTID5_SHIFT;
22191 assert!(value & (Self::PHYPARTID5_MASK as u16) == value);
22192 *self = Self::from_bits_retain(
22193 (self.bits() & !(Self::PHYPARTID5_MASK << offset)) | ((value as u64) << offset),
22194 );
22195 }
22196
22197 pub const fn with_phypartid5(mut self, value: u16) -> Self {
22199 self.set_phypartid5(value);
22200 self
22201 }
22202
22203 pub const fn phypartid6(self) -> u16 {
22205 ((self.bits() >> Self::PHYPARTID6_SHIFT) & 0b1111111111111111) as u16
22206 }
22207
22208 pub const fn set_phypartid6(&mut self, value: u16) {
22210 let offset = Self::PHYPARTID6_SHIFT;
22211 assert!(value & (Self::PHYPARTID6_MASK as u16) == value);
22212 *self = Self::from_bits_retain(
22213 (self.bits() & !(Self::PHYPARTID6_MASK << offset)) | ((value as u64) << offset),
22214 );
22215 }
22216
22217 pub const fn with_phypartid6(mut self, value: u16) -> Self {
22219 self.set_phypartid6(value);
22220 self
22221 }
22222
22223 pub const fn phypartid7(self) -> u16 {
22225 ((self.bits() >> Self::PHYPARTID7_SHIFT) & 0b1111111111111111) as u16
22226 }
22227
22228 pub const fn set_phypartid7(&mut self, value: u16) {
22230 let offset = Self::PHYPARTID7_SHIFT;
22231 assert!(value & (Self::PHYPARTID7_MASK as u16) == value);
22232 *self = Self::from_bits_retain(
22233 (self.bits() & !(Self::PHYPARTID7_MASK << offset)) | ((value as u64) << offset),
22234 );
22235 }
22236
22237 pub const fn with_phypartid7(mut self, value: u16) -> Self {
22239 self.set_phypartid7(value);
22240 self
22241 }
22242}
22243
22244#[cfg(feature = "el2")]
22245bitflags! {
22246 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22248 #[repr(transparent)]
22249 pub struct Mpamvpm2El2: u64 {
22250 }
22251}
22252
22253#[cfg(feature = "el2")]
22254impl Mpamvpm2El2 {
22255 pub const PHYPARTID8_SHIFT: u32 = 0;
22257 pub const PHYPARTID8_MASK: u64 = 0b1111111111111111;
22259 pub const PHYPARTID9_SHIFT: u32 = 16;
22261 pub const PHYPARTID9_MASK: u64 = 0b1111111111111111;
22263 pub const PHYPARTID10_SHIFT: u32 = 32;
22265 pub const PHYPARTID10_MASK: u64 = 0b1111111111111111;
22267 pub const PHYPARTID11_SHIFT: u32 = 48;
22269 pub const PHYPARTID11_MASK: u64 = 0b1111111111111111;
22271
22272 pub const fn phypartid8(self) -> u16 {
22274 ((self.bits() >> Self::PHYPARTID8_SHIFT) & 0b1111111111111111) as u16
22275 }
22276
22277 pub const fn set_phypartid8(&mut self, value: u16) {
22279 let offset = Self::PHYPARTID8_SHIFT;
22280 assert!(value & (Self::PHYPARTID8_MASK as u16) == value);
22281 *self = Self::from_bits_retain(
22282 (self.bits() & !(Self::PHYPARTID8_MASK << offset)) | ((value as u64) << offset),
22283 );
22284 }
22285
22286 pub const fn with_phypartid8(mut self, value: u16) -> Self {
22288 self.set_phypartid8(value);
22289 self
22290 }
22291
22292 pub const fn phypartid9(self) -> u16 {
22294 ((self.bits() >> Self::PHYPARTID9_SHIFT) & 0b1111111111111111) as u16
22295 }
22296
22297 pub const fn set_phypartid9(&mut self, value: u16) {
22299 let offset = Self::PHYPARTID9_SHIFT;
22300 assert!(value & (Self::PHYPARTID9_MASK as u16) == value);
22301 *self = Self::from_bits_retain(
22302 (self.bits() & !(Self::PHYPARTID9_MASK << offset)) | ((value as u64) << offset),
22303 );
22304 }
22305
22306 pub const fn with_phypartid9(mut self, value: u16) -> Self {
22308 self.set_phypartid9(value);
22309 self
22310 }
22311
22312 pub const fn phypartid10(self) -> u16 {
22314 ((self.bits() >> Self::PHYPARTID10_SHIFT) & 0b1111111111111111) as u16
22315 }
22316
22317 pub const fn set_phypartid10(&mut self, value: u16) {
22319 let offset = Self::PHYPARTID10_SHIFT;
22320 assert!(value & (Self::PHYPARTID10_MASK as u16) == value);
22321 *self = Self::from_bits_retain(
22322 (self.bits() & !(Self::PHYPARTID10_MASK << offset)) | ((value as u64) << offset),
22323 );
22324 }
22325
22326 pub const fn with_phypartid10(mut self, value: u16) -> Self {
22328 self.set_phypartid10(value);
22329 self
22330 }
22331
22332 pub const fn phypartid11(self) -> u16 {
22334 ((self.bits() >> Self::PHYPARTID11_SHIFT) & 0b1111111111111111) as u16
22335 }
22336
22337 pub const fn set_phypartid11(&mut self, value: u16) {
22339 let offset = Self::PHYPARTID11_SHIFT;
22340 assert!(value & (Self::PHYPARTID11_MASK as u16) == value);
22341 *self = Self::from_bits_retain(
22342 (self.bits() & !(Self::PHYPARTID11_MASK << offset)) | ((value as u64) << offset),
22343 );
22344 }
22345
22346 pub const fn with_phypartid11(mut self, value: u16) -> Self {
22348 self.set_phypartid11(value);
22349 self
22350 }
22351}
22352
22353#[cfg(feature = "el2")]
22354bitflags! {
22355 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22357 #[repr(transparent)]
22358 pub struct Mpamvpm3El2: u64 {
22359 }
22360}
22361
22362#[cfg(feature = "el2")]
22363impl Mpamvpm3El2 {
22364 pub const PHYPARTID12_SHIFT: u32 = 0;
22366 pub const PHYPARTID12_MASK: u64 = 0b1111111111111111;
22368 pub const PHYPARTID13_SHIFT: u32 = 16;
22370 pub const PHYPARTID13_MASK: u64 = 0b1111111111111111;
22372 pub const PHYPARTID14_SHIFT: u32 = 32;
22374 pub const PHYPARTID14_MASK: u64 = 0b1111111111111111;
22376 pub const PHYPARTID15_SHIFT: u32 = 48;
22378 pub const PHYPARTID15_MASK: u64 = 0b1111111111111111;
22380
22381 pub const fn phypartid12(self) -> u16 {
22383 ((self.bits() >> Self::PHYPARTID12_SHIFT) & 0b1111111111111111) as u16
22384 }
22385
22386 pub const fn set_phypartid12(&mut self, value: u16) {
22388 let offset = Self::PHYPARTID12_SHIFT;
22389 assert!(value & (Self::PHYPARTID12_MASK as u16) == value);
22390 *self = Self::from_bits_retain(
22391 (self.bits() & !(Self::PHYPARTID12_MASK << offset)) | ((value as u64) << offset),
22392 );
22393 }
22394
22395 pub const fn with_phypartid12(mut self, value: u16) -> Self {
22397 self.set_phypartid12(value);
22398 self
22399 }
22400
22401 pub const fn phypartid13(self) -> u16 {
22403 ((self.bits() >> Self::PHYPARTID13_SHIFT) & 0b1111111111111111) as u16
22404 }
22405
22406 pub const fn set_phypartid13(&mut self, value: u16) {
22408 let offset = Self::PHYPARTID13_SHIFT;
22409 assert!(value & (Self::PHYPARTID13_MASK as u16) == value);
22410 *self = Self::from_bits_retain(
22411 (self.bits() & !(Self::PHYPARTID13_MASK << offset)) | ((value as u64) << offset),
22412 );
22413 }
22414
22415 pub const fn with_phypartid13(mut self, value: u16) -> Self {
22417 self.set_phypartid13(value);
22418 self
22419 }
22420
22421 pub const fn phypartid14(self) -> u16 {
22423 ((self.bits() >> Self::PHYPARTID14_SHIFT) & 0b1111111111111111) as u16
22424 }
22425
22426 pub const fn set_phypartid14(&mut self, value: u16) {
22428 let offset = Self::PHYPARTID14_SHIFT;
22429 assert!(value & (Self::PHYPARTID14_MASK as u16) == value);
22430 *self = Self::from_bits_retain(
22431 (self.bits() & !(Self::PHYPARTID14_MASK << offset)) | ((value as u64) << offset),
22432 );
22433 }
22434
22435 pub const fn with_phypartid14(mut self, value: u16) -> Self {
22437 self.set_phypartid14(value);
22438 self
22439 }
22440
22441 pub const fn phypartid15(self) -> u16 {
22443 ((self.bits() >> Self::PHYPARTID15_SHIFT) & 0b1111111111111111) as u16
22444 }
22445
22446 pub const fn set_phypartid15(&mut self, value: u16) {
22448 let offset = Self::PHYPARTID15_SHIFT;
22449 assert!(value & (Self::PHYPARTID15_MASK as u16) == value);
22450 *self = Self::from_bits_retain(
22451 (self.bits() & !(Self::PHYPARTID15_MASK << offset)) | ((value as u64) << offset),
22452 );
22453 }
22454
22455 pub const fn with_phypartid15(mut self, value: u16) -> Self {
22457 self.set_phypartid15(value);
22458 self
22459 }
22460}
22461
22462#[cfg(feature = "el2")]
22463bitflags! {
22464 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22466 #[repr(transparent)]
22467 pub struct Mpamvpm4El2: u64 {
22468 }
22469}
22470
22471#[cfg(feature = "el2")]
22472impl Mpamvpm4El2 {
22473 pub const PHYPARTID16_SHIFT: u32 = 0;
22475 pub const PHYPARTID16_MASK: u64 = 0b1111111111111111;
22477 pub const PHYPARTID17_SHIFT: u32 = 16;
22479 pub const PHYPARTID17_MASK: u64 = 0b1111111111111111;
22481 pub const PHYPARTID18_SHIFT: u32 = 32;
22483 pub const PHYPARTID18_MASK: u64 = 0b1111111111111111;
22485 pub const PHYPARTID19_SHIFT: u32 = 48;
22487 pub const PHYPARTID19_MASK: u64 = 0b1111111111111111;
22489
22490 pub const fn phypartid16(self) -> u16 {
22492 ((self.bits() >> Self::PHYPARTID16_SHIFT) & 0b1111111111111111) as u16
22493 }
22494
22495 pub const fn set_phypartid16(&mut self, value: u16) {
22497 let offset = Self::PHYPARTID16_SHIFT;
22498 assert!(value & (Self::PHYPARTID16_MASK as u16) == value);
22499 *self = Self::from_bits_retain(
22500 (self.bits() & !(Self::PHYPARTID16_MASK << offset)) | ((value as u64) << offset),
22501 );
22502 }
22503
22504 pub const fn with_phypartid16(mut self, value: u16) -> Self {
22506 self.set_phypartid16(value);
22507 self
22508 }
22509
22510 pub const fn phypartid17(self) -> u16 {
22512 ((self.bits() >> Self::PHYPARTID17_SHIFT) & 0b1111111111111111) as u16
22513 }
22514
22515 pub const fn set_phypartid17(&mut self, value: u16) {
22517 let offset = Self::PHYPARTID17_SHIFT;
22518 assert!(value & (Self::PHYPARTID17_MASK as u16) == value);
22519 *self = Self::from_bits_retain(
22520 (self.bits() & !(Self::PHYPARTID17_MASK << offset)) | ((value as u64) << offset),
22521 );
22522 }
22523
22524 pub const fn with_phypartid17(mut self, value: u16) -> Self {
22526 self.set_phypartid17(value);
22527 self
22528 }
22529
22530 pub const fn phypartid18(self) -> u16 {
22532 ((self.bits() >> Self::PHYPARTID18_SHIFT) & 0b1111111111111111) as u16
22533 }
22534
22535 pub const fn set_phypartid18(&mut self, value: u16) {
22537 let offset = Self::PHYPARTID18_SHIFT;
22538 assert!(value & (Self::PHYPARTID18_MASK as u16) == value);
22539 *self = Self::from_bits_retain(
22540 (self.bits() & !(Self::PHYPARTID18_MASK << offset)) | ((value as u64) << offset),
22541 );
22542 }
22543
22544 pub const fn with_phypartid18(mut self, value: u16) -> Self {
22546 self.set_phypartid18(value);
22547 self
22548 }
22549
22550 pub const fn phypartid19(self) -> u16 {
22552 ((self.bits() >> Self::PHYPARTID19_SHIFT) & 0b1111111111111111) as u16
22553 }
22554
22555 pub const fn set_phypartid19(&mut self, value: u16) {
22557 let offset = Self::PHYPARTID19_SHIFT;
22558 assert!(value & (Self::PHYPARTID19_MASK as u16) == value);
22559 *self = Self::from_bits_retain(
22560 (self.bits() & !(Self::PHYPARTID19_MASK << offset)) | ((value as u64) << offset),
22561 );
22562 }
22563
22564 pub const fn with_phypartid19(mut self, value: u16) -> Self {
22566 self.set_phypartid19(value);
22567 self
22568 }
22569}
22570
22571#[cfg(feature = "el2")]
22572bitflags! {
22573 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22575 #[repr(transparent)]
22576 pub struct Mpamvpm5El2: u64 {
22577 }
22578}
22579
22580#[cfg(feature = "el2")]
22581impl Mpamvpm5El2 {
22582 pub const PHYPARTID20_SHIFT: u32 = 0;
22584 pub const PHYPARTID20_MASK: u64 = 0b1111111111111111;
22586 pub const PHYPARTID21_SHIFT: u32 = 16;
22588 pub const PHYPARTID21_MASK: u64 = 0b1111111111111111;
22590 pub const PHYPARTID22_SHIFT: u32 = 32;
22592 pub const PHYPARTID22_MASK: u64 = 0b1111111111111111;
22594 pub const PHYPARTID23_SHIFT: u32 = 48;
22596 pub const PHYPARTID23_MASK: u64 = 0b1111111111111111;
22598
22599 pub const fn phypartid20(self) -> u16 {
22601 ((self.bits() >> Self::PHYPARTID20_SHIFT) & 0b1111111111111111) as u16
22602 }
22603
22604 pub const fn set_phypartid20(&mut self, value: u16) {
22606 let offset = Self::PHYPARTID20_SHIFT;
22607 assert!(value & (Self::PHYPARTID20_MASK as u16) == value);
22608 *self = Self::from_bits_retain(
22609 (self.bits() & !(Self::PHYPARTID20_MASK << offset)) | ((value as u64) << offset),
22610 );
22611 }
22612
22613 pub const fn with_phypartid20(mut self, value: u16) -> Self {
22615 self.set_phypartid20(value);
22616 self
22617 }
22618
22619 pub const fn phypartid21(self) -> u16 {
22621 ((self.bits() >> Self::PHYPARTID21_SHIFT) & 0b1111111111111111) as u16
22622 }
22623
22624 pub const fn set_phypartid21(&mut self, value: u16) {
22626 let offset = Self::PHYPARTID21_SHIFT;
22627 assert!(value & (Self::PHYPARTID21_MASK as u16) == value);
22628 *self = Self::from_bits_retain(
22629 (self.bits() & !(Self::PHYPARTID21_MASK << offset)) | ((value as u64) << offset),
22630 );
22631 }
22632
22633 pub const fn with_phypartid21(mut self, value: u16) -> Self {
22635 self.set_phypartid21(value);
22636 self
22637 }
22638
22639 pub const fn phypartid22(self) -> u16 {
22641 ((self.bits() >> Self::PHYPARTID22_SHIFT) & 0b1111111111111111) as u16
22642 }
22643
22644 pub const fn set_phypartid22(&mut self, value: u16) {
22646 let offset = Self::PHYPARTID22_SHIFT;
22647 assert!(value & (Self::PHYPARTID22_MASK as u16) == value);
22648 *self = Self::from_bits_retain(
22649 (self.bits() & !(Self::PHYPARTID22_MASK << offset)) | ((value as u64) << offset),
22650 );
22651 }
22652
22653 pub const fn with_phypartid22(mut self, value: u16) -> Self {
22655 self.set_phypartid22(value);
22656 self
22657 }
22658
22659 pub const fn phypartid23(self) -> u16 {
22661 ((self.bits() >> Self::PHYPARTID23_SHIFT) & 0b1111111111111111) as u16
22662 }
22663
22664 pub const fn set_phypartid23(&mut self, value: u16) {
22666 let offset = Self::PHYPARTID23_SHIFT;
22667 assert!(value & (Self::PHYPARTID23_MASK as u16) == value);
22668 *self = Self::from_bits_retain(
22669 (self.bits() & !(Self::PHYPARTID23_MASK << offset)) | ((value as u64) << offset),
22670 );
22671 }
22672
22673 pub const fn with_phypartid23(mut self, value: u16) -> Self {
22675 self.set_phypartid23(value);
22676 self
22677 }
22678}
22679
22680#[cfg(feature = "el2")]
22681bitflags! {
22682 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22684 #[repr(transparent)]
22685 pub struct Mpamvpm6El2: u64 {
22686 }
22687}
22688
22689#[cfg(feature = "el2")]
22690impl Mpamvpm6El2 {
22691 pub const PHYPARTID24_SHIFT: u32 = 0;
22693 pub const PHYPARTID24_MASK: u64 = 0b1111111111111111;
22695 pub const PHYPARTID25_SHIFT: u32 = 16;
22697 pub const PHYPARTID25_MASK: u64 = 0b1111111111111111;
22699 pub const PHYPARTID26_SHIFT: u32 = 32;
22701 pub const PHYPARTID26_MASK: u64 = 0b1111111111111111;
22703 pub const PHYPARTID27_SHIFT: u32 = 48;
22705 pub const PHYPARTID27_MASK: u64 = 0b1111111111111111;
22707
22708 pub const fn phypartid24(self) -> u16 {
22710 ((self.bits() >> Self::PHYPARTID24_SHIFT) & 0b1111111111111111) as u16
22711 }
22712
22713 pub const fn set_phypartid24(&mut self, value: u16) {
22715 let offset = Self::PHYPARTID24_SHIFT;
22716 assert!(value & (Self::PHYPARTID24_MASK as u16) == value);
22717 *self = Self::from_bits_retain(
22718 (self.bits() & !(Self::PHYPARTID24_MASK << offset)) | ((value as u64) << offset),
22719 );
22720 }
22721
22722 pub const fn with_phypartid24(mut self, value: u16) -> Self {
22724 self.set_phypartid24(value);
22725 self
22726 }
22727
22728 pub const fn phypartid25(self) -> u16 {
22730 ((self.bits() >> Self::PHYPARTID25_SHIFT) & 0b1111111111111111) as u16
22731 }
22732
22733 pub const fn set_phypartid25(&mut self, value: u16) {
22735 let offset = Self::PHYPARTID25_SHIFT;
22736 assert!(value & (Self::PHYPARTID25_MASK as u16) == value);
22737 *self = Self::from_bits_retain(
22738 (self.bits() & !(Self::PHYPARTID25_MASK << offset)) | ((value as u64) << offset),
22739 );
22740 }
22741
22742 pub const fn with_phypartid25(mut self, value: u16) -> Self {
22744 self.set_phypartid25(value);
22745 self
22746 }
22747
22748 pub const fn phypartid26(self) -> u16 {
22750 ((self.bits() >> Self::PHYPARTID26_SHIFT) & 0b1111111111111111) as u16
22751 }
22752
22753 pub const fn set_phypartid26(&mut self, value: u16) {
22755 let offset = Self::PHYPARTID26_SHIFT;
22756 assert!(value & (Self::PHYPARTID26_MASK as u16) == value);
22757 *self = Self::from_bits_retain(
22758 (self.bits() & !(Self::PHYPARTID26_MASK << offset)) | ((value as u64) << offset),
22759 );
22760 }
22761
22762 pub const fn with_phypartid26(mut self, value: u16) -> Self {
22764 self.set_phypartid26(value);
22765 self
22766 }
22767
22768 pub const fn phypartid27(self) -> u16 {
22770 ((self.bits() >> Self::PHYPARTID27_SHIFT) & 0b1111111111111111) as u16
22771 }
22772
22773 pub const fn set_phypartid27(&mut self, value: u16) {
22775 let offset = Self::PHYPARTID27_SHIFT;
22776 assert!(value & (Self::PHYPARTID27_MASK as u16) == value);
22777 *self = Self::from_bits_retain(
22778 (self.bits() & !(Self::PHYPARTID27_MASK << offset)) | ((value as u64) << offset),
22779 );
22780 }
22781
22782 pub const fn with_phypartid27(mut self, value: u16) -> Self {
22784 self.set_phypartid27(value);
22785 self
22786 }
22787}
22788
22789#[cfg(feature = "el2")]
22790bitflags! {
22791 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22793 #[repr(transparent)]
22794 pub struct Mpamvpm7El2: u64 {
22795 }
22796}
22797
22798#[cfg(feature = "el2")]
22799impl Mpamvpm7El2 {
22800 pub const PHYPARTID28_SHIFT: u32 = 0;
22802 pub const PHYPARTID28_MASK: u64 = 0b1111111111111111;
22804 pub const PHYPARTID29_SHIFT: u32 = 16;
22806 pub const PHYPARTID29_MASK: u64 = 0b1111111111111111;
22808 pub const PHYPARTID30_SHIFT: u32 = 32;
22810 pub const PHYPARTID30_MASK: u64 = 0b1111111111111111;
22812 pub const PHYPARTID31_SHIFT: u32 = 48;
22814 pub const PHYPARTID31_MASK: u64 = 0b1111111111111111;
22816
22817 pub const fn phypartid28(self) -> u16 {
22819 ((self.bits() >> Self::PHYPARTID28_SHIFT) & 0b1111111111111111) as u16
22820 }
22821
22822 pub const fn set_phypartid28(&mut self, value: u16) {
22824 let offset = Self::PHYPARTID28_SHIFT;
22825 assert!(value & (Self::PHYPARTID28_MASK as u16) == value);
22826 *self = Self::from_bits_retain(
22827 (self.bits() & !(Self::PHYPARTID28_MASK << offset)) | ((value as u64) << offset),
22828 );
22829 }
22830
22831 pub const fn with_phypartid28(mut self, value: u16) -> Self {
22833 self.set_phypartid28(value);
22834 self
22835 }
22836
22837 pub const fn phypartid29(self) -> u16 {
22839 ((self.bits() >> Self::PHYPARTID29_SHIFT) & 0b1111111111111111) as u16
22840 }
22841
22842 pub const fn set_phypartid29(&mut self, value: u16) {
22844 let offset = Self::PHYPARTID29_SHIFT;
22845 assert!(value & (Self::PHYPARTID29_MASK as u16) == value);
22846 *self = Self::from_bits_retain(
22847 (self.bits() & !(Self::PHYPARTID29_MASK << offset)) | ((value as u64) << offset),
22848 );
22849 }
22850
22851 pub const fn with_phypartid29(mut self, value: u16) -> Self {
22853 self.set_phypartid29(value);
22854 self
22855 }
22856
22857 pub const fn phypartid30(self) -> u16 {
22859 ((self.bits() >> Self::PHYPARTID30_SHIFT) & 0b1111111111111111) as u16
22860 }
22861
22862 pub const fn set_phypartid30(&mut self, value: u16) {
22864 let offset = Self::PHYPARTID30_SHIFT;
22865 assert!(value & (Self::PHYPARTID30_MASK as u16) == value);
22866 *self = Self::from_bits_retain(
22867 (self.bits() & !(Self::PHYPARTID30_MASK << offset)) | ((value as u64) << offset),
22868 );
22869 }
22870
22871 pub const fn with_phypartid30(mut self, value: u16) -> Self {
22873 self.set_phypartid30(value);
22874 self
22875 }
22876
22877 pub const fn phypartid31(self) -> u16 {
22879 ((self.bits() >> Self::PHYPARTID31_SHIFT) & 0b1111111111111111) as u16
22880 }
22881
22882 pub const fn set_phypartid31(&mut self, value: u16) {
22884 let offset = Self::PHYPARTID31_SHIFT;
22885 assert!(value & (Self::PHYPARTID31_MASK as u16) == value);
22886 *self = Self::from_bits_retain(
22887 (self.bits() & !(Self::PHYPARTID31_MASK << offset)) | ((value as u64) << offset),
22888 );
22889 }
22890
22891 pub const fn with_phypartid31(mut self, value: u16) -> Self {
22893 self.set_phypartid31(value);
22894 self
22895 }
22896}
22897
22898#[cfg(feature = "el2")]
22899bitflags! {
22900 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22902 #[repr(transparent)]
22903 pub struct MpamvpmvEl2: u64 {
22904 const VPM_V0 = 1 << 0;
22906 const VPM_V1 = 1 << 1;
22908 const VPM_V2 = 1 << 2;
22910 const VPM_V3 = 1 << 3;
22912 const VPM_V4 = 1 << 4;
22914 const VPM_V5 = 1 << 5;
22916 const VPM_V6 = 1 << 6;
22918 const VPM_V7 = 1 << 7;
22920 const VPM_V8 = 1 << 8;
22922 const VPM_V9 = 1 << 9;
22924 const VPM_V10 = 1 << 10;
22926 const VPM_V11 = 1 << 11;
22928 const VPM_V12 = 1 << 12;
22930 const VPM_V13 = 1 << 13;
22932 const VPM_V14 = 1 << 14;
22934 const VPM_V15 = 1 << 15;
22936 const VPM_V16 = 1 << 16;
22938 const VPM_V17 = 1 << 17;
22940 const VPM_V18 = 1 << 18;
22942 const VPM_V19 = 1 << 19;
22944 const VPM_V20 = 1 << 20;
22946 const VPM_V21 = 1 << 21;
22948 const VPM_V22 = 1 << 22;
22950 const VPM_V23 = 1 << 23;
22952 const VPM_V24 = 1 << 24;
22954 const VPM_V25 = 1 << 25;
22956 const VPM_V26 = 1 << 26;
22958 const VPM_V27 = 1 << 27;
22960 const VPM_V28 = 1 << 28;
22962 const VPM_V29 = 1 << 29;
22964 const VPM_V30 = 1 << 30;
22966 const VPM_V31 = 1 << 31;
22968 }
22969}
22970
22971#[cfg(feature = "el2")]
22972impl MpamvpmvEl2 {
22973 pub const VPM_V_SHIFT: u32 = 0;
22975}
22976
22977bitflags! {
22978 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22980 #[repr(transparent)]
22981 pub struct Mpidr: u32 {
22982 const MT = 1 << 24;
22984 const U = 1 << 30;
22986 const M = 1 << 31;
22988 }
22989}
22990
22991impl Mpidr {
22992 pub const AFF0_SHIFT: u32 = 0;
22994 pub const AFF0_MASK: u32 = 0b11111111;
22996 pub const AFF1_SHIFT: u32 = 8;
22998 pub const AFF1_MASK: u32 = 0b11111111;
23000 pub const AFF2_SHIFT: u32 = 16;
23002 pub const AFF2_MASK: u32 = 0b11111111;
23004 pub const MT_SHIFT: u32 = 24;
23006 pub const U_SHIFT: u32 = 30;
23008 pub const M_SHIFT: u32 = 31;
23010
23011 pub const fn aff0(self) -> u8 {
23013 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
23014 }
23015
23016 pub const fn set_aff0(&mut self, value: u8) {
23018 let offset = Self::AFF0_SHIFT;
23019 assert!(value & (Self::AFF0_MASK as u8) == value);
23020 *self = Self::from_bits_retain(
23021 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u32) << offset),
23022 );
23023 }
23024
23025 pub const fn with_aff0(mut self, value: u8) -> Self {
23027 self.set_aff0(value);
23028 self
23029 }
23030
23031 pub const fn aff1(self) -> u8 {
23033 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
23034 }
23035
23036 pub const fn set_aff1(&mut self, value: u8) {
23038 let offset = Self::AFF1_SHIFT;
23039 assert!(value & (Self::AFF1_MASK as u8) == value);
23040 *self = Self::from_bits_retain(
23041 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u32) << offset),
23042 );
23043 }
23044
23045 pub const fn with_aff1(mut self, value: u8) -> Self {
23047 self.set_aff1(value);
23048 self
23049 }
23050
23051 pub const fn aff2(self) -> u8 {
23053 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
23054 }
23055
23056 pub const fn set_aff2(&mut self, value: u8) {
23058 let offset = Self::AFF2_SHIFT;
23059 assert!(value & (Self::AFF2_MASK as u8) == value);
23060 *self = Self::from_bits_retain(
23061 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u32) << offset),
23062 );
23063 }
23064
23065 pub const fn with_aff2(mut self, value: u8) -> Self {
23067 self.set_aff2(value);
23068 self
23069 }
23070}
23071
23072#[cfg(feature = "el1")]
23073bitflags! {
23074 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23076 #[repr(transparent)]
23077 pub struct MpidrEl1: u64 {
23078 const RES1 = 0b10000000000000000000000000000000;
23080 const MT = 1 << 24;
23082 const U = 1 << 30;
23084 }
23085}
23086
23087#[cfg(feature = "el1")]
23088impl MpidrEl1 {
23089 pub const AFF0_SHIFT: u32 = 0;
23091 pub const AFF0_MASK: u64 = 0b11111111;
23093 pub const AFF1_SHIFT: u32 = 8;
23095 pub const AFF1_MASK: u64 = 0b11111111;
23097 pub const AFF2_SHIFT: u32 = 16;
23099 pub const AFF2_MASK: u64 = 0b11111111;
23101 pub const MT_SHIFT: u32 = 24;
23103 pub const U_SHIFT: u32 = 30;
23105 pub const AFF3_SHIFT: u32 = 32;
23107 pub const AFF3_MASK: u64 = 0b11111111;
23109
23110 pub const fn aff0(self) -> u8 {
23112 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
23113 }
23114
23115 pub const fn set_aff0(&mut self, value: u8) {
23117 let offset = Self::AFF0_SHIFT;
23118 assert!(value & (Self::AFF0_MASK as u8) == value);
23119 *self = Self::from_bits_retain(
23120 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u64) << offset),
23121 );
23122 }
23123
23124 pub const fn with_aff0(mut self, value: u8) -> Self {
23126 self.set_aff0(value);
23127 self
23128 }
23129
23130 pub const fn aff1(self) -> u8 {
23132 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
23133 }
23134
23135 pub const fn set_aff1(&mut self, value: u8) {
23137 let offset = Self::AFF1_SHIFT;
23138 assert!(value & (Self::AFF1_MASK as u8) == value);
23139 *self = Self::from_bits_retain(
23140 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
23141 );
23142 }
23143
23144 pub const fn with_aff1(mut self, value: u8) -> Self {
23146 self.set_aff1(value);
23147 self
23148 }
23149
23150 pub const fn aff2(self) -> u8 {
23152 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
23153 }
23154
23155 pub const fn set_aff2(&mut self, value: u8) {
23157 let offset = Self::AFF2_SHIFT;
23158 assert!(value & (Self::AFF2_MASK as u8) == value);
23159 *self = Self::from_bits_retain(
23160 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
23161 );
23162 }
23163
23164 pub const fn with_aff2(mut self, value: u8) -> Self {
23166 self.set_aff2(value);
23167 self
23168 }
23169
23170 pub const fn aff3(self) -> u8 {
23172 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
23173 }
23174
23175 pub const fn set_aff3(&mut self, value: u8) {
23177 let offset = Self::AFF3_SHIFT;
23178 assert!(value & (Self::AFF3_MASK as u8) == value);
23179 *self = Self::from_bits_retain(
23180 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
23181 );
23182 }
23183
23184 pub const fn with_aff3(mut self, value: u8) -> Self {
23186 self.set_aff3(value);
23187 self
23188 }
23189}
23190
23191bitflags! {
23192 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23194 #[repr(transparent)]
23195 pub struct Mvbar: u32 {
23196 }
23197}
23198
23199impl Mvbar {
23200 pub const RESERVED_SHIFT: u32 = 0;
23202 pub const RESERVED_MASK: u32 = 0b11111;
23204 pub const VBA_SHIFT: u32 = 5;
23206 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
23208
23209 pub const fn reserved(self) -> u8 {
23211 ((self.bits() >> Self::RESERVED_SHIFT) & 0b11111) as u8
23212 }
23213
23214 pub const fn set_reserved(&mut self, value: u8) {
23216 let offset = Self::RESERVED_SHIFT;
23217 assert!(value & (Self::RESERVED_MASK as u8) == value);
23218 *self = Self::from_bits_retain(
23219 (self.bits() & !(Self::RESERVED_MASK << offset)) | ((value as u32) << offset),
23220 );
23221 }
23222
23223 pub const fn with_reserved(mut self, value: u8) -> Self {
23225 self.set_reserved(value);
23226 self
23227 }
23228
23229 pub const fn vba(self) -> u32 {
23231 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
23232 }
23233
23234 pub const fn set_vba(&mut self, value: u32) {
23236 let offset = Self::VBA_SHIFT;
23237 assert!(value & (Self::VBA_MASK as u32) == value);
23238 *self = Self::from_bits_retain(
23239 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u32) << offset),
23240 );
23241 }
23242
23243 pub const fn with_vba(mut self, value: u32) -> Self {
23245 self.set_vba(value);
23246 self
23247 }
23248}
23249
23250bitflags! {
23251 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23253 #[repr(transparent)]
23254 pub struct Nmrr: u32 {
23255 }
23256}
23257
23258impl Nmrr {
23259 pub const IR_SHIFT: u32 = 0;
23261 pub const IR_MASK: u32 = 0b11;
23263 pub const OR_SHIFT: u32 = 16;
23265 pub const OR_MASK: u32 = 0b11;
23267
23268 pub const fn ir(self, n: u32) -> u8 {
23270 assert!(n < 8);
23271 ((self.bits() >> (Self::IR_SHIFT + (n - 0) * 2)) & 0b11) as u8
23272 }
23273
23274 pub const fn set_ir(&mut self, n: u32, value: u8) {
23276 assert!(n < 8);
23277 let offset = Self::IR_SHIFT + (n - 0) * 2;
23278 assert!(value & (Self::IR_MASK as u8) == value);
23279 *self = Self::from_bits_retain(
23280 (self.bits() & !(Self::IR_MASK << offset)) | ((value as u32) << offset),
23281 );
23282 }
23283
23284 pub const fn with_ir(mut self, n: u32, value: u8) -> Self {
23286 self.set_ir(n, value);
23287 self
23288 }
23289
23290 pub const fn or(self, n: u32) -> u8 {
23292 assert!(n < 8);
23293 ((self.bits() >> (Self::OR_SHIFT + (n - 0) * 2)) & 0b11) as u8
23294 }
23295
23296 pub const fn set_or(&mut self, n: u32, value: u8) {
23298 assert!(n < 8);
23299 let offset = Self::OR_SHIFT + (n - 0) * 2;
23300 assert!(value & (Self::OR_MASK as u8) == value);
23301 *self = Self::from_bits_retain(
23302 (self.bits() & !(Self::OR_MASK << offset)) | ((value as u32) << offset),
23303 );
23304 }
23305
23306 pub const fn with_or(mut self, n: u32, value: u8) -> Self {
23308 self.set_or(n, value);
23309 self
23310 }
23311}
23312
23313bitflags! {
23314 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23316 #[repr(transparent)]
23317 pub struct Nsacr: u32 {
23318 const CP10 = 1 << 10;
23320 const CP11 = 1 << 11;
23322 const NSASEDIS = 1 << 15;
23324 const NSTRCDIS = 1 << 20;
23326 }
23327}
23328
23329impl Nsacr {
23330 pub const CP10_SHIFT: u32 = 10;
23332 pub const CP11_SHIFT: u32 = 11;
23334 pub const NSASEDIS_SHIFT: u32 = 15;
23336 pub const NSTRCDIS_SHIFT: u32 = 20;
23338}
23339
23340bitflags! {
23341 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23343 #[repr(transparent)]
23344 pub struct Par: u64 {
23345 const F = 1 << 0;
23347 const SS = 1 << 1;
23349 const FS_5 = 1 << 6;
23351 const S2WLK = 1 << 8;
23353 const FSTAGE = 1 << 9;
23355 const NS = 1 << 9;
23357 const NOS = 1 << 10;
23359 const LPAE = 1 << 11;
23361 }
23362}
23363
23364impl Par {
23365 pub const F_SHIFT: u32 = 0;
23367 pub const FST_SHIFT: u32 = 1;
23369 pub const FST_MASK: u64 = 0b111111;
23371 pub const FS_4_0_SHIFT: u32 = 1;
23373 pub const FS_4_0_MASK: u64 = 0b11111;
23375 pub const SS_SHIFT: u32 = 1;
23377 pub const OUTER_1_0_SHIFT: u32 = 2;
23379 pub const OUTER_1_0_MASK: u64 = 0b11;
23381 pub const INNER_2_0_SHIFT: u32 = 4;
23383 pub const INNER_2_0_MASK: u64 = 0b111;
23385 pub const FS_5_SHIFT: u32 = 6;
23387 pub const S2WLK_SHIFT: u32 = 8;
23389 pub const FSTAGE_SHIFT: u32 = 9;
23391 pub const NS_SHIFT: u32 = 9;
23393 pub const NOS_SHIFT: u32 = 10;
23395 pub const LPAE_SHIFT: u32 = 11;
23397 pub const ATTR_SHIFT: u32 = 56;
23399 pub const ATTR_MASK: u64 = 0b11111111;
23401
23402 pub const fn fst(self) -> u8 {
23404 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
23405 }
23406
23407 pub const fn set_fst(&mut self, value: u8) {
23409 let offset = Self::FST_SHIFT;
23410 assert!(value & (Self::FST_MASK as u8) == value);
23411 *self = Self::from_bits_retain(
23412 (self.bits() & !(Self::FST_MASK << offset)) | ((value as u64) << offset),
23413 );
23414 }
23415
23416 pub const fn with_fst(mut self, value: u8) -> Self {
23418 self.set_fst(value);
23419 self
23420 }
23421
23422 pub const fn fs_4_0(self) -> u8 {
23424 ((self.bits() >> Self::FS_4_0_SHIFT) & 0b11111) as u8
23425 }
23426
23427 pub const fn set_fs_4_0(&mut self, value: u8) {
23429 let offset = Self::FS_4_0_SHIFT;
23430 assert!(value & (Self::FS_4_0_MASK as u8) == value);
23431 *self = Self::from_bits_retain(
23432 (self.bits() & !(Self::FS_4_0_MASK << offset)) | ((value as u64) << offset),
23433 );
23434 }
23435
23436 pub const fn with_fs_4_0(mut self, value: u8) -> Self {
23438 self.set_fs_4_0(value);
23439 self
23440 }
23441
23442 pub const fn outer_1_0(self) -> u8 {
23444 ((self.bits() >> Self::OUTER_1_0_SHIFT) & 0b11) as u8
23445 }
23446
23447 pub const fn set_outer_1_0(&mut self, value: u8) {
23449 let offset = Self::OUTER_1_0_SHIFT;
23450 assert!(value & (Self::OUTER_1_0_MASK as u8) == value);
23451 *self = Self::from_bits_retain(
23452 (self.bits() & !(Self::OUTER_1_0_MASK << offset)) | ((value as u64) << offset),
23453 );
23454 }
23455
23456 pub const fn with_outer_1_0(mut self, value: u8) -> Self {
23458 self.set_outer_1_0(value);
23459 self
23460 }
23461
23462 pub const fn inner_2_0(self) -> u8 {
23464 ((self.bits() >> Self::INNER_2_0_SHIFT) & 0b111) as u8
23465 }
23466
23467 pub const fn set_inner_2_0(&mut self, value: u8) {
23469 let offset = Self::INNER_2_0_SHIFT;
23470 assert!(value & (Self::INNER_2_0_MASK as u8) == value);
23471 *self = Self::from_bits_retain(
23472 (self.bits() & !(Self::INNER_2_0_MASK << offset)) | ((value as u64) << offset),
23473 );
23474 }
23475
23476 pub const fn with_inner_2_0(mut self, value: u8) -> Self {
23478 self.set_inner_2_0(value);
23479 self
23480 }
23481
23482 pub const fn attr(self) -> u8 {
23484 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
23485 }
23486
23487 pub const fn set_attr(&mut self, value: u8) {
23489 let offset = Self::ATTR_SHIFT;
23490 assert!(value & (Self::ATTR_MASK as u8) == value);
23491 *self = Self::from_bits_retain(
23492 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
23493 );
23494 }
23495
23496 pub const fn with_attr(mut self, value: u8) -> Self {
23498 self.set_attr(value);
23499 self
23500 }
23501}
23502
23503#[cfg(feature = "el1")]
23504bitflags! {
23505 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23507 #[repr(transparent)]
23508 pub struct ParEl1: u64 {
23509 const RES1 = 0b100000000000;
23511 const F = 1 << 0;
23513 const PTW = 1 << 8;
23515 const NS = 1 << 9;
23517 const S = 1 << 9;
23519 const NSE = 1 << 11;
23521 const ASSUREDONLY = 1 << 12;
23523 const TOPLEVEL = 1 << 13;
23525 const OVERLAY = 1 << 14;
23527 const DIRTYBIT = 1 << 15;
23529 }
23530}
23531
23532#[cfg(feature = "el1")]
23533impl ParEl1 {
23534 pub const F_SHIFT: u32 = 0;
23536 pub const FST_SHIFT: u32 = 1;
23538 pub const FST_MASK: u64 = 0b111111;
23540 pub const SH_SHIFT: u32 = 7;
23542 pub const SH_MASK: u64 = 0b11;
23544 pub const PTW_SHIFT: u32 = 8;
23546 pub const NS_SHIFT: u32 = 9;
23548 pub const S_SHIFT: u32 = 9;
23550 pub const NSE_SHIFT: u32 = 11;
23552 pub const ASSUREDONLY_SHIFT: u32 = 12;
23554 pub const PA_47_12_SHIFT: u32 = 12;
23556 pub const PA_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
23558 pub const TOPLEVEL_SHIFT: u32 = 13;
23560 pub const OVERLAY_SHIFT: u32 = 14;
23562 pub const DIRTYBIT_SHIFT: u32 = 15;
23564 pub const PA_51_48_SHIFT: u32 = 48;
23566 pub const PA_51_48_MASK: u64 = 0b1111;
23568 pub const ATTR_SHIFT: u32 = 56;
23570 pub const ATTR_MASK: u64 = 0b11111111;
23572
23573 pub const fn fst(self) -> u8 {
23575 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
23576 }
23577
23578 pub const fn set_fst(&mut self, value: u8) {
23580 let offset = Self::FST_SHIFT;
23581 assert!(value & (Self::FST_MASK as u8) == value);
23582 *self = Self::from_bits_retain(
23583 (self.bits() & !(Self::FST_MASK << offset)) | ((value as u64) << offset),
23584 );
23585 }
23586
23587 pub const fn with_fst(mut self, value: u8) -> Self {
23589 self.set_fst(value);
23590 self
23591 }
23592
23593 pub const fn sh(self) -> u8 {
23595 ((self.bits() >> Self::SH_SHIFT) & 0b11) as u8
23596 }
23597
23598 pub const fn set_sh(&mut self, value: u8) {
23600 let offset = Self::SH_SHIFT;
23601 assert!(value & (Self::SH_MASK as u8) == value);
23602 *self = Self::from_bits_retain(
23603 (self.bits() & !(Self::SH_MASK << offset)) | ((value as u64) << offset),
23604 );
23605 }
23606
23607 pub const fn with_sh(mut self, value: u8) -> Self {
23609 self.set_sh(value);
23610 self
23611 }
23612
23613 pub const fn pa_47_12(self) -> u64 {
23615 ((self.bits() >> Self::PA_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
23616 }
23617
23618 pub const fn set_pa_47_12(&mut self, value: u64) {
23620 let offset = Self::PA_47_12_SHIFT;
23621 assert!(value & (Self::PA_47_12_MASK as u64) == value);
23622 *self = Self::from_bits_retain(
23623 (self.bits() & !(Self::PA_47_12_MASK << offset)) | ((value as u64) << offset),
23624 );
23625 }
23626
23627 pub const fn with_pa_47_12(mut self, value: u64) -> Self {
23629 self.set_pa_47_12(value);
23630 self
23631 }
23632
23633 pub const fn pa_51_48(self) -> u8 {
23635 ((self.bits() >> Self::PA_51_48_SHIFT) & 0b1111) as u8
23636 }
23637
23638 pub const fn set_pa_51_48(&mut self, value: u8) {
23640 let offset = Self::PA_51_48_SHIFT;
23641 assert!(value & (Self::PA_51_48_MASK as u8) == value);
23642 *self = Self::from_bits_retain(
23643 (self.bits() & !(Self::PA_51_48_MASK << offset)) | ((value as u64) << offset),
23644 );
23645 }
23646
23647 pub const fn with_pa_51_48(mut self, value: u8) -> Self {
23649 self.set_pa_51_48(value);
23650 self
23651 }
23652
23653 pub const fn attr(self) -> u8 {
23655 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
23656 }
23657
23658 pub const fn set_attr(&mut self, value: u8) {
23660 let offset = Self::ATTR_SHIFT;
23661 assert!(value & (Self::ATTR_MASK as u8) == value);
23662 *self = Self::from_bits_retain(
23663 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
23664 );
23665 }
23666
23667 pub const fn with_attr(mut self, value: u8) -> Self {
23669 self.set_attr(value);
23670 self
23671 }
23672}
23673
23674bitflags! {
23675 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23677 #[repr(transparent)]
23678 pub struct Pmccfiltr: u32 {
23679 const RLU = 1 << 21;
23681 const NSH = 1 << 27;
23683 const NSU = 1 << 28;
23685 const NSK = 1 << 29;
23687 const U = 1 << 30;
23689 const P = 1 << 31;
23691 }
23692}
23693
23694impl Pmccfiltr {
23695 pub const RLU_SHIFT: u32 = 21;
23697 pub const NSH_SHIFT: u32 = 27;
23699 pub const NSU_SHIFT: u32 = 28;
23701 pub const NSK_SHIFT: u32 = 29;
23703 pub const U_SHIFT: u32 = 30;
23705 pub const P_SHIFT: u32 = 31;
23707}
23708
23709bitflags! {
23710 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23712 #[repr(transparent)]
23713 pub struct Pmccntr: u64 {
23714 }
23715}
23716
23717impl Pmccntr {
23718 pub const CCNT_SHIFT: u32 = 0;
23720 pub const CCNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
23722
23723 pub const fn ccnt(self) -> u64 {
23725 ((self.bits() >> Self::CCNT_SHIFT)
23726 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
23727 }
23728
23729 pub const fn set_ccnt(&mut self, value: u64) {
23731 let offset = Self::CCNT_SHIFT;
23732 assert!(value & (Self::CCNT_MASK as u64) == value);
23733 *self = Self::from_bits_retain(
23734 (self.bits() & !(Self::CCNT_MASK << offset)) | ((value as u64) << offset),
23735 );
23736 }
23737
23738 pub const fn with_ccnt(mut self, value: u64) -> Self {
23740 self.set_ccnt(value);
23741 self
23742 }
23743}
23744
23745bitflags! {
23746 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23748 #[repr(transparent)]
23749 pub struct Pmceid0: u32 {
23750 const ID0 = 1 << 0;
23752 const ID1 = 1 << 1;
23754 const ID2 = 1 << 2;
23756 const ID3 = 1 << 3;
23758 const ID4 = 1 << 4;
23760 const ID5 = 1 << 5;
23762 const ID6 = 1 << 6;
23764 const ID7 = 1 << 7;
23766 const ID8 = 1 << 8;
23768 const ID9 = 1 << 9;
23770 const ID10 = 1 << 10;
23772 const ID11 = 1 << 11;
23774 const ID12 = 1 << 12;
23776 const ID13 = 1 << 13;
23778 const ID14 = 1 << 14;
23780 const ID15 = 1 << 15;
23782 const ID16 = 1 << 16;
23784 const ID17 = 1 << 17;
23786 const ID18 = 1 << 18;
23788 const ID19 = 1 << 19;
23790 const ID20 = 1 << 20;
23792 const ID21 = 1 << 21;
23794 const ID22 = 1 << 22;
23796 const ID23 = 1 << 23;
23798 const ID24 = 1 << 24;
23800 const ID25 = 1 << 25;
23802 const ID26 = 1 << 26;
23804 const ID27 = 1 << 27;
23806 const ID28 = 1 << 28;
23808 const ID29 = 1 << 29;
23810 const ID30 = 1 << 30;
23812 const ID31 = 1 << 31;
23814 }
23815}
23816
23817impl Pmceid0 {
23818 pub const ID_SHIFT: u32 = 0;
23820}
23821
23822bitflags! {
23823 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23825 #[repr(transparent)]
23826 pub struct Pmceid1: u32 {
23827 const ID0 = 1 << 0;
23829 const ID1 = 1 << 1;
23831 const ID2 = 1 << 2;
23833 const ID3 = 1 << 3;
23835 const ID4 = 1 << 4;
23837 const ID5 = 1 << 5;
23839 const ID6 = 1 << 6;
23841 const ID7 = 1 << 7;
23843 const ID8 = 1 << 8;
23845 const ID9 = 1 << 9;
23847 const ID10 = 1 << 10;
23849 const ID11 = 1 << 11;
23851 const ID12 = 1 << 12;
23853 const ID13 = 1 << 13;
23855 const ID14 = 1 << 14;
23857 const ID15 = 1 << 15;
23859 const ID16 = 1 << 16;
23861 const ID17 = 1 << 17;
23863 const ID18 = 1 << 18;
23865 const ID19 = 1 << 19;
23867 const ID20 = 1 << 20;
23869 const ID21 = 1 << 21;
23871 const ID22 = 1 << 22;
23873 const ID23 = 1 << 23;
23875 const ID24 = 1 << 24;
23877 const ID25 = 1 << 25;
23879 const ID26 = 1 << 26;
23881 const ID27 = 1 << 27;
23883 const ID28 = 1 << 28;
23885 const ID29 = 1 << 29;
23887 const ID30 = 1 << 30;
23889 const ID31 = 1 << 31;
23891 }
23892}
23893
23894impl Pmceid1 {
23895 pub const ID_SHIFT: u32 = 0;
23897}
23898
23899bitflags! {
23900 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23902 #[repr(transparent)]
23903 pub struct Pmceid2: u32 {
23904 const IDHI0 = 1 << 0;
23906 const IDHI1 = 1 << 1;
23908 const IDHI2 = 1 << 2;
23910 const IDHI3 = 1 << 3;
23912 const IDHI4 = 1 << 4;
23914 const IDHI5 = 1 << 5;
23916 const IDHI6 = 1 << 6;
23918 const IDHI7 = 1 << 7;
23920 const IDHI8 = 1 << 8;
23922 const IDHI9 = 1 << 9;
23924 const IDHI10 = 1 << 10;
23926 const IDHI11 = 1 << 11;
23928 const IDHI12 = 1 << 12;
23930 const IDHI13 = 1 << 13;
23932 const IDHI14 = 1 << 14;
23934 const IDHI15 = 1 << 15;
23936 const IDHI16 = 1 << 16;
23938 const IDHI17 = 1 << 17;
23940 const IDHI18 = 1 << 18;
23942 const IDHI19 = 1 << 19;
23944 const IDHI20 = 1 << 20;
23946 const IDHI21 = 1 << 21;
23948 const IDHI22 = 1 << 22;
23950 const IDHI23 = 1 << 23;
23952 const IDHI24 = 1 << 24;
23954 const IDHI25 = 1 << 25;
23956 const IDHI26 = 1 << 26;
23958 const IDHI27 = 1 << 27;
23960 const IDHI28 = 1 << 28;
23962 const IDHI29 = 1 << 29;
23964 const IDHI30 = 1 << 30;
23966 const IDHI31 = 1 << 31;
23968 }
23969}
23970
23971impl Pmceid2 {
23972 pub const IDHI_SHIFT: u32 = 0;
23974}
23975
23976bitflags! {
23977 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23979 #[repr(transparent)]
23980 pub struct Pmceid3: u32 {
23981 const IDHI0 = 1 << 0;
23983 const IDHI1 = 1 << 1;
23985 const IDHI2 = 1 << 2;
23987 const IDHI3 = 1 << 3;
23989 const IDHI4 = 1 << 4;
23991 const IDHI5 = 1 << 5;
23993 const IDHI6 = 1 << 6;
23995 const IDHI7 = 1 << 7;
23997 const IDHI8 = 1 << 8;
23999 const IDHI9 = 1 << 9;
24001 const IDHI10 = 1 << 10;
24003 const IDHI11 = 1 << 11;
24005 const IDHI12 = 1 << 12;
24007 const IDHI13 = 1 << 13;
24009 const IDHI14 = 1 << 14;
24011 const IDHI15 = 1 << 15;
24013 const IDHI16 = 1 << 16;
24015 const IDHI17 = 1 << 17;
24017 const IDHI18 = 1 << 18;
24019 const IDHI19 = 1 << 19;
24021 const IDHI20 = 1 << 20;
24023 const IDHI21 = 1 << 21;
24025 const IDHI22 = 1 << 22;
24027 const IDHI23 = 1 << 23;
24029 const IDHI24 = 1 << 24;
24031 const IDHI25 = 1 << 25;
24033 const IDHI26 = 1 << 26;
24035 const IDHI27 = 1 << 27;
24037 const IDHI28 = 1 << 28;
24039 const IDHI29 = 1 << 29;
24041 const IDHI30 = 1 << 30;
24043 const IDHI31 = 1 << 31;
24045 }
24046}
24047
24048impl Pmceid3 {
24049 pub const IDHI_SHIFT: u32 = 0;
24051}
24052
24053bitflags! {
24054 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24056 #[repr(transparent)]
24057 pub struct Pmcntenclr: u32 {
24058 const P0 = 1 << 0;
24060 const P1 = 1 << 1;
24062 const P2 = 1 << 2;
24064 const P3 = 1 << 3;
24066 const P4 = 1 << 4;
24068 const P5 = 1 << 5;
24070 const P6 = 1 << 6;
24072 const P7 = 1 << 7;
24074 const P8 = 1 << 8;
24076 const P9 = 1 << 9;
24078 const P10 = 1 << 10;
24080 const P11 = 1 << 11;
24082 const P12 = 1 << 12;
24084 const P13 = 1 << 13;
24086 const P14 = 1 << 14;
24088 const P15 = 1 << 15;
24090 const P16 = 1 << 16;
24092 const P17 = 1 << 17;
24094 const P18 = 1 << 18;
24096 const P19 = 1 << 19;
24098 const P20 = 1 << 20;
24100 const P21 = 1 << 21;
24102 const P22 = 1 << 22;
24104 const P23 = 1 << 23;
24106 const P24 = 1 << 24;
24108 const P25 = 1 << 25;
24110 const P26 = 1 << 26;
24112 const P27 = 1 << 27;
24114 const P28 = 1 << 28;
24116 const P29 = 1 << 29;
24118 const P30 = 1 << 30;
24120 const C = 1 << 31;
24122 }
24123}
24124
24125impl Pmcntenclr {
24126 pub const P_SHIFT: u32 = 0;
24128 pub const C_SHIFT: u32 = 31;
24130}
24131
24132bitflags! {
24133 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24135 #[repr(transparent)]
24136 pub struct Pmcntenset: u32 {
24137 const P0 = 1 << 0;
24139 const P1 = 1 << 1;
24141 const P2 = 1 << 2;
24143 const P3 = 1 << 3;
24145 const P4 = 1 << 4;
24147 const P5 = 1 << 5;
24149 const P6 = 1 << 6;
24151 const P7 = 1 << 7;
24153 const P8 = 1 << 8;
24155 const P9 = 1 << 9;
24157 const P10 = 1 << 10;
24159 const P11 = 1 << 11;
24161 const P12 = 1 << 12;
24163 const P13 = 1 << 13;
24165 const P14 = 1 << 14;
24167 const P15 = 1 << 15;
24169 const P16 = 1 << 16;
24171 const P17 = 1 << 17;
24173 const P18 = 1 << 18;
24175 const P19 = 1 << 19;
24177 const P20 = 1 << 20;
24179 const P21 = 1 << 21;
24181 const P22 = 1 << 22;
24183 const P23 = 1 << 23;
24185 const P24 = 1 << 24;
24187 const P25 = 1 << 25;
24189 const P26 = 1 << 26;
24191 const P27 = 1 << 27;
24193 const P28 = 1 << 28;
24195 const P29 = 1 << 29;
24197 const P30 = 1 << 30;
24199 const C = 1 << 31;
24201 }
24202}
24203
24204impl Pmcntenset {
24205 pub const P_SHIFT: u32 = 0;
24207 pub const C_SHIFT: u32 = 31;
24209}
24210
24211bitflags! {
24212 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24214 #[repr(transparent)]
24215 pub struct Pmcr: u32 {
24216 const E = 1 << 0;
24218 const P = 1 << 1;
24220 const C = 1 << 2;
24222 const D = 1 << 3;
24224 const X = 1 << 4;
24226 const DP = 1 << 5;
24228 const LC = 1 << 6;
24230 const LP = 1 << 7;
24232 const FZO = 1 << 9;
24234 }
24235}
24236
24237impl Pmcr {
24238 pub const E_SHIFT: u32 = 0;
24240 pub const P_SHIFT: u32 = 1;
24242 pub const C_SHIFT: u32 = 2;
24244 pub const D_SHIFT: u32 = 3;
24246 pub const X_SHIFT: u32 = 4;
24248 pub const DP_SHIFT: u32 = 5;
24250 pub const LC_SHIFT: u32 = 6;
24252 pub const LP_SHIFT: u32 = 7;
24254 pub const FZO_SHIFT: u32 = 9;
24256 pub const N_SHIFT: u32 = 11;
24258 pub const N_MASK: u32 = 0b11111;
24260 pub const IDCODE_SHIFT: u32 = 16;
24262 pub const IDCODE_MASK: u32 = 0b11111111;
24264 pub const IMP_SHIFT: u32 = 24;
24266 pub const IMP_MASK: u32 = 0b11111111;
24268
24269 pub const fn n(self) -> u8 {
24271 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
24272 }
24273
24274 pub const fn set_n(&mut self, value: u8) {
24276 let offset = Self::N_SHIFT;
24277 assert!(value & (Self::N_MASK as u8) == value);
24278 *self = Self::from_bits_retain(
24279 (self.bits() & !(Self::N_MASK << offset)) | ((value as u32) << offset),
24280 );
24281 }
24282
24283 pub const fn with_n(mut self, value: u8) -> Self {
24285 self.set_n(value);
24286 self
24287 }
24288
24289 pub const fn idcode(self) -> u8 {
24291 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
24292 }
24293
24294 pub const fn set_idcode(&mut self, value: u8) {
24296 let offset = Self::IDCODE_SHIFT;
24297 assert!(value & (Self::IDCODE_MASK as u8) == value);
24298 *self = Self::from_bits_retain(
24299 (self.bits() & !(Self::IDCODE_MASK << offset)) | ((value as u32) << offset),
24300 );
24301 }
24302
24303 pub const fn with_idcode(mut self, value: u8) -> Self {
24305 self.set_idcode(value);
24306 self
24307 }
24308
24309 pub const fn imp(self) -> u8 {
24311 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
24312 }
24313
24314 pub const fn set_imp(&mut self, value: u8) {
24316 let offset = Self::IMP_SHIFT;
24317 assert!(value & (Self::IMP_MASK as u8) == value);
24318 *self = Self::from_bits_retain(
24319 (self.bits() & !(Self::IMP_MASK << offset)) | ((value as u32) << offset),
24320 );
24321 }
24322
24323 pub const fn with_imp(mut self, value: u8) -> Self {
24325 self.set_imp(value);
24326 self
24327 }
24328}
24329
24330bitflags! {
24331 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24333 #[repr(transparent)]
24334 pub struct PmcrEl0: u64 {
24335 const E = 1 << 0;
24337 const P = 1 << 1;
24339 const C = 1 << 2;
24341 const D = 1 << 3;
24343 const X = 1 << 4;
24345 const DP = 1 << 5;
24347 const LC = 1 << 6;
24349 const LP = 1 << 7;
24351 const FZO = 1 << 9;
24353 const FZS = 1 << 32;
24355 }
24356}
24357
24358impl PmcrEl0 {
24359 pub const E_SHIFT: u32 = 0;
24361 pub const P_SHIFT: u32 = 1;
24363 pub const C_SHIFT: u32 = 2;
24365 pub const D_SHIFT: u32 = 3;
24367 pub const X_SHIFT: u32 = 4;
24369 pub const DP_SHIFT: u32 = 5;
24371 pub const LC_SHIFT: u32 = 6;
24373 pub const LP_SHIFT: u32 = 7;
24375 pub const FZO_SHIFT: u32 = 9;
24377 pub const N_SHIFT: u32 = 11;
24379 pub const N_MASK: u64 = 0b11111;
24381 pub const IDCODE_SHIFT: u32 = 16;
24383 pub const IDCODE_MASK: u64 = 0b11111111;
24385 pub const IMP_SHIFT: u32 = 24;
24387 pub const IMP_MASK: u64 = 0b11111111;
24389 pub const FZS_SHIFT: u32 = 32;
24391
24392 pub const fn n(self) -> u8 {
24394 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
24395 }
24396
24397 pub const fn set_n(&mut self, value: u8) {
24399 let offset = Self::N_SHIFT;
24400 assert!(value & (Self::N_MASK as u8) == value);
24401 *self = Self::from_bits_retain(
24402 (self.bits() & !(Self::N_MASK << offset)) | ((value as u64) << offset),
24403 );
24404 }
24405
24406 pub const fn with_n(mut self, value: u8) -> Self {
24408 self.set_n(value);
24409 self
24410 }
24411
24412 pub const fn idcode(self) -> u8 {
24414 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
24415 }
24416
24417 pub const fn set_idcode(&mut self, value: u8) {
24419 let offset = Self::IDCODE_SHIFT;
24420 assert!(value & (Self::IDCODE_MASK as u8) == value);
24421 *self = Self::from_bits_retain(
24422 (self.bits() & !(Self::IDCODE_MASK << offset)) | ((value as u64) << offset),
24423 );
24424 }
24425
24426 pub const fn with_idcode(mut self, value: u8) -> Self {
24428 self.set_idcode(value);
24429 self
24430 }
24431
24432 pub const fn imp(self) -> u8 {
24434 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
24435 }
24436
24437 pub const fn set_imp(&mut self, value: u8) {
24439 let offset = Self::IMP_SHIFT;
24440 assert!(value & (Self::IMP_MASK as u8) == value);
24441 *self = Self::from_bits_retain(
24442 (self.bits() & !(Self::IMP_MASK << offset)) | ((value as u64) << offset),
24443 );
24444 }
24445
24446 pub const fn with_imp(mut self, value: u8) -> Self {
24448 self.set_imp(value);
24449 self
24450 }
24451}
24452
24453bitflags! {
24454 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24456 #[repr(transparent)]
24457 pub struct Pmintenclr: u32 {
24458 const P0 = 1 << 0;
24460 const P1 = 1 << 1;
24462 const P2 = 1 << 2;
24464 const P3 = 1 << 3;
24466 const P4 = 1 << 4;
24468 const P5 = 1 << 5;
24470 const P6 = 1 << 6;
24472 const P7 = 1 << 7;
24474 const P8 = 1 << 8;
24476 const P9 = 1 << 9;
24478 const P10 = 1 << 10;
24480 const P11 = 1 << 11;
24482 const P12 = 1 << 12;
24484 const P13 = 1 << 13;
24486 const P14 = 1 << 14;
24488 const P15 = 1 << 15;
24490 const P16 = 1 << 16;
24492 const P17 = 1 << 17;
24494 const P18 = 1 << 18;
24496 const P19 = 1 << 19;
24498 const P20 = 1 << 20;
24500 const P21 = 1 << 21;
24502 const P22 = 1 << 22;
24504 const P23 = 1 << 23;
24506 const P24 = 1 << 24;
24508 const P25 = 1 << 25;
24510 const P26 = 1 << 26;
24512 const P27 = 1 << 27;
24514 const P28 = 1 << 28;
24516 const P29 = 1 << 29;
24518 const P30 = 1 << 30;
24520 const C = 1 << 31;
24522 }
24523}
24524
24525impl Pmintenclr {
24526 pub const P_SHIFT: u32 = 0;
24528 pub const C_SHIFT: u32 = 31;
24530}
24531
24532bitflags! {
24533 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24535 #[repr(transparent)]
24536 pub struct Pmintenset: u32 {
24537 const P0 = 1 << 0;
24539 const P1 = 1 << 1;
24541 const P2 = 1 << 2;
24543 const P3 = 1 << 3;
24545 const P4 = 1 << 4;
24547 const P5 = 1 << 5;
24549 const P6 = 1 << 6;
24551 const P7 = 1 << 7;
24553 const P8 = 1 << 8;
24555 const P9 = 1 << 9;
24557 const P10 = 1 << 10;
24559 const P11 = 1 << 11;
24561 const P12 = 1 << 12;
24563 const P13 = 1 << 13;
24565 const P14 = 1 << 14;
24567 const P15 = 1 << 15;
24569 const P16 = 1 << 16;
24571 const P17 = 1 << 17;
24573 const P18 = 1 << 18;
24575 const P19 = 1 << 19;
24577 const P20 = 1 << 20;
24579 const P21 = 1 << 21;
24581 const P22 = 1 << 22;
24583 const P23 = 1 << 23;
24585 const P24 = 1 << 24;
24587 const P25 = 1 << 25;
24589 const P26 = 1 << 26;
24591 const P27 = 1 << 27;
24593 const P28 = 1 << 28;
24595 const P29 = 1 << 29;
24597 const P30 = 1 << 30;
24599 const C = 1 << 31;
24601 }
24602}
24603
24604impl Pmintenset {
24605 pub const P_SHIFT: u32 = 0;
24607 pub const C_SHIFT: u32 = 31;
24609}
24610
24611bitflags! {
24612 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24614 #[repr(transparent)]
24615 pub struct Pmmir: u32 {
24616 }
24617}
24618
24619impl Pmmir {
24620 pub const SLOTS_SHIFT: u32 = 0;
24622 pub const SLOTS_MASK: u32 = 0b11111111;
24624 pub const BUS_SLOTS_SHIFT: u32 = 8;
24626 pub const BUS_SLOTS_MASK: u32 = 0b11111111;
24628 pub const BUS_WIDTH_SHIFT: u32 = 16;
24630 pub const BUS_WIDTH_MASK: u32 = 0b1111;
24632 pub const THWIDTH_SHIFT: u32 = 20;
24634 pub const THWIDTH_MASK: u32 = 0b1111;
24636 pub const EDGE_SHIFT: u32 = 24;
24638 pub const EDGE_MASK: u32 = 0b1111;
24640
24641 pub const fn slots(self) -> u8 {
24643 ((self.bits() >> Self::SLOTS_SHIFT) & 0b11111111) as u8
24644 }
24645
24646 pub const fn set_slots(&mut self, value: u8) {
24648 let offset = Self::SLOTS_SHIFT;
24649 assert!(value & (Self::SLOTS_MASK as u8) == value);
24650 *self = Self::from_bits_retain(
24651 (self.bits() & !(Self::SLOTS_MASK << offset)) | ((value as u32) << offset),
24652 );
24653 }
24654
24655 pub const fn with_slots(mut self, value: u8) -> Self {
24657 self.set_slots(value);
24658 self
24659 }
24660
24661 pub const fn bus_slots(self) -> u8 {
24663 ((self.bits() >> Self::BUS_SLOTS_SHIFT) & 0b11111111) as u8
24664 }
24665
24666 pub const fn set_bus_slots(&mut self, value: u8) {
24668 let offset = Self::BUS_SLOTS_SHIFT;
24669 assert!(value & (Self::BUS_SLOTS_MASK as u8) == value);
24670 *self = Self::from_bits_retain(
24671 (self.bits() & !(Self::BUS_SLOTS_MASK << offset)) | ((value as u32) << offset),
24672 );
24673 }
24674
24675 pub const fn with_bus_slots(mut self, value: u8) -> Self {
24677 self.set_bus_slots(value);
24678 self
24679 }
24680
24681 pub const fn bus_width(self) -> u8 {
24683 ((self.bits() >> Self::BUS_WIDTH_SHIFT) & 0b1111) as u8
24684 }
24685
24686 pub const fn set_bus_width(&mut self, value: u8) {
24688 let offset = Self::BUS_WIDTH_SHIFT;
24689 assert!(value & (Self::BUS_WIDTH_MASK as u8) == value);
24690 *self = Self::from_bits_retain(
24691 (self.bits() & !(Self::BUS_WIDTH_MASK << offset)) | ((value as u32) << offset),
24692 );
24693 }
24694
24695 pub const fn with_bus_width(mut self, value: u8) -> Self {
24697 self.set_bus_width(value);
24698 self
24699 }
24700
24701 pub const fn thwidth(self) -> u8 {
24703 ((self.bits() >> Self::THWIDTH_SHIFT) & 0b1111) as u8
24704 }
24705
24706 pub const fn set_thwidth(&mut self, value: u8) {
24708 let offset = Self::THWIDTH_SHIFT;
24709 assert!(value & (Self::THWIDTH_MASK as u8) == value);
24710 *self = Self::from_bits_retain(
24711 (self.bits() & !(Self::THWIDTH_MASK << offset)) | ((value as u32) << offset),
24712 );
24713 }
24714
24715 pub const fn with_thwidth(mut self, value: u8) -> Self {
24717 self.set_thwidth(value);
24718 self
24719 }
24720
24721 pub const fn edge(self) -> u8 {
24723 ((self.bits() >> Self::EDGE_SHIFT) & 0b1111) as u8
24724 }
24725
24726 pub const fn set_edge(&mut self, value: u8) {
24728 let offset = Self::EDGE_SHIFT;
24729 assert!(value & (Self::EDGE_MASK as u8) == value);
24730 *self = Self::from_bits_retain(
24731 (self.bits() & !(Self::EDGE_MASK << offset)) | ((value as u32) << offset),
24732 );
24733 }
24734
24735 pub const fn with_edge(mut self, value: u8) -> Self {
24737 self.set_edge(value);
24738 self
24739 }
24740}
24741
24742bitflags! {
24743 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24745 #[repr(transparent)]
24746 pub struct Pmovsr: u32 {
24747 const P0 = 1 << 0;
24749 const P1 = 1 << 1;
24751 const P2 = 1 << 2;
24753 const P3 = 1 << 3;
24755 const P4 = 1 << 4;
24757 const P5 = 1 << 5;
24759 const P6 = 1 << 6;
24761 const P7 = 1 << 7;
24763 const P8 = 1 << 8;
24765 const P9 = 1 << 9;
24767 const P10 = 1 << 10;
24769 const P11 = 1 << 11;
24771 const P12 = 1 << 12;
24773 const P13 = 1 << 13;
24775 const P14 = 1 << 14;
24777 const P15 = 1 << 15;
24779 const P16 = 1 << 16;
24781 const P17 = 1 << 17;
24783 const P18 = 1 << 18;
24785 const P19 = 1 << 19;
24787 const P20 = 1 << 20;
24789 const P21 = 1 << 21;
24791 const P22 = 1 << 22;
24793 const P23 = 1 << 23;
24795 const P24 = 1 << 24;
24797 const P25 = 1 << 25;
24799 const P26 = 1 << 26;
24801 const P27 = 1 << 27;
24803 const P28 = 1 << 28;
24805 const P29 = 1 << 29;
24807 const P30 = 1 << 30;
24809 const C = 1 << 31;
24811 }
24812}
24813
24814impl Pmovsr {
24815 pub const P_SHIFT: u32 = 0;
24817 pub const C_SHIFT: u32 = 31;
24819}
24820
24821bitflags! {
24822 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24824 #[repr(transparent)]
24825 pub struct Pmovsset: u32 {
24826 const P0 = 1 << 0;
24828 const P1 = 1 << 1;
24830 const P2 = 1 << 2;
24832 const P3 = 1 << 3;
24834 const P4 = 1 << 4;
24836 const P5 = 1 << 5;
24838 const P6 = 1 << 6;
24840 const P7 = 1 << 7;
24842 const P8 = 1 << 8;
24844 const P9 = 1 << 9;
24846 const P10 = 1 << 10;
24848 const P11 = 1 << 11;
24850 const P12 = 1 << 12;
24852 const P13 = 1 << 13;
24854 const P14 = 1 << 14;
24856 const P15 = 1 << 15;
24858 const P16 = 1 << 16;
24860 const P17 = 1 << 17;
24862 const P18 = 1 << 18;
24864 const P19 = 1 << 19;
24866 const P20 = 1 << 20;
24868 const P21 = 1 << 21;
24870 const P22 = 1 << 22;
24872 const P23 = 1 << 23;
24874 const P24 = 1 << 24;
24876 const P25 = 1 << 25;
24878 const P26 = 1 << 26;
24880 const P27 = 1 << 27;
24882 const P28 = 1 << 28;
24884 const P29 = 1 << 29;
24886 const P30 = 1 << 30;
24888 const C = 1 << 31;
24890 }
24891}
24892
24893impl Pmovsset {
24894 pub const P_SHIFT: u32 = 0;
24896 pub const C_SHIFT: u32 = 31;
24898}
24899
24900bitflags! {
24901 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24903 #[repr(transparent)]
24904 pub struct Pmselr: u32 {
24905 }
24906}
24907
24908impl Pmselr {
24909 pub const SEL_SHIFT: u32 = 0;
24911 pub const SEL_MASK: u32 = 0b11111;
24913
24914 pub const fn sel(self) -> u8 {
24916 ((self.bits() >> Self::SEL_SHIFT) & 0b11111) as u8
24917 }
24918
24919 pub const fn set_sel(&mut self, value: u8) {
24921 let offset = Self::SEL_SHIFT;
24922 assert!(value & (Self::SEL_MASK as u8) == value);
24923 *self = Self::from_bits_retain(
24924 (self.bits() & !(Self::SEL_MASK << offset)) | ((value as u32) << offset),
24925 );
24926 }
24927
24928 pub const fn with_sel(mut self, value: u8) -> Self {
24930 self.set_sel(value);
24931 self
24932 }
24933}
24934
24935bitflags! {
24936 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24938 #[repr(transparent)]
24939 pub struct Pmswinc: u32 {
24940 const P0 = 1 << 0;
24942 const P1 = 1 << 1;
24944 const P2 = 1 << 2;
24946 const P3 = 1 << 3;
24948 const P4 = 1 << 4;
24950 const P5 = 1 << 5;
24952 const P6 = 1 << 6;
24954 const P7 = 1 << 7;
24956 const P8 = 1 << 8;
24958 const P9 = 1 << 9;
24960 const P10 = 1 << 10;
24962 const P11 = 1 << 11;
24964 const P12 = 1 << 12;
24966 const P13 = 1 << 13;
24968 const P14 = 1 << 14;
24970 const P15 = 1 << 15;
24972 const P16 = 1 << 16;
24974 const P17 = 1 << 17;
24976 const P18 = 1 << 18;
24978 const P19 = 1 << 19;
24980 const P20 = 1 << 20;
24982 const P21 = 1 << 21;
24984 const P22 = 1 << 22;
24986 const P23 = 1 << 23;
24988 const P24 = 1 << 24;
24990 const P25 = 1 << 25;
24992 const P26 = 1 << 26;
24994 const P27 = 1 << 27;
24996 const P28 = 1 << 28;
24998 const P29 = 1 << 29;
25000 const P30 = 1 << 30;
25002 }
25003}
25004
25005impl Pmswinc {
25006 pub const P_SHIFT: u32 = 0;
25008}
25009
25010bitflags! {
25011 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25013 #[repr(transparent)]
25014 pub struct Pmuserenr: u32 {
25015 const EN = 1 << 0;
25017 const SW = 1 << 1;
25019 const CR = 1 << 2;
25021 const ER = 1 << 3;
25023 const TID = 1 << 6;
25025 }
25026}
25027
25028impl Pmuserenr {
25029 pub const EN_SHIFT: u32 = 0;
25031 pub const SW_SHIFT: u32 = 1;
25033 pub const CR_SHIFT: u32 = 2;
25035 pub const ER_SHIFT: u32 = 3;
25037 pub const TID_SHIFT: u32 = 6;
25039}
25040
25041bitflags! {
25042 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25044 #[repr(transparent)]
25045 pub struct Pmxevtyper: u32 {
25046 }
25047}
25048
25049impl Pmxevtyper {
25050 pub const ETR_SHIFT: u32 = 0;
25052 pub const ETR_MASK: u32 = 0b11111111111111111111111111111111;
25054
25055 pub const fn etr(self) -> u32 {
25057 ((self.bits() >> Self::ETR_SHIFT) & 0b11111111111111111111111111111111) as u32
25058 }
25059
25060 pub const fn set_etr(&mut self, value: u32) {
25062 let offset = Self::ETR_SHIFT;
25063 assert!(value & (Self::ETR_MASK as u32) == value);
25064 *self = Self::from_bits_retain(
25065 (self.bits() & !(Self::ETR_MASK << offset)) | ((value as u32) << offset),
25066 );
25067 }
25068
25069 pub const fn with_etr(mut self, value: u32) -> Self {
25071 self.set_etr(value);
25072 self
25073 }
25074}
25075
25076bitflags! {
25077 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25079 #[repr(transparent)]
25080 pub struct Prrr: u32 {
25081 const DS0 = 1 << 16;
25083 const DS1 = 1 << 17;
25085 const NS0 = 1 << 18;
25087 const NS1 = 1 << 19;
25089 const NOS0 = 1 << 24;
25091 const NOS1 = 1 << 25;
25093 const NOS2 = 1 << 26;
25095 const NOS3 = 1 << 27;
25097 const NOS4 = 1 << 28;
25099 const NOS5 = 1 << 29;
25101 const NOS6 = 1 << 30;
25103 const NOS7 = 1 << 31;
25105 }
25106}
25107
25108impl Prrr {
25109 pub const TR_SHIFT: u32 = 0;
25111 pub const TR_MASK: u32 = 0b11;
25113 pub const DS0_SHIFT: u32 = 16;
25115 pub const DS1_SHIFT: u32 = 17;
25117 pub const NS0_SHIFT: u32 = 18;
25119 pub const NS1_SHIFT: u32 = 19;
25121 pub const NOS_SHIFT: u32 = 24;
25123
25124 pub const fn tr(self, n: u32) -> u8 {
25126 assert!(n < 8);
25127 ((self.bits() >> (Self::TR_SHIFT + (n - 0) * 2)) & 0b11) as u8
25128 }
25129
25130 pub const fn set_tr(&mut self, n: u32, value: u8) {
25132 assert!(n < 8);
25133 let offset = Self::TR_SHIFT + (n - 0) * 2;
25134 assert!(value & (Self::TR_MASK as u8) == value);
25135 *self = Self::from_bits_retain(
25136 (self.bits() & !(Self::TR_MASK << offset)) | ((value as u32) << offset),
25137 );
25138 }
25139
25140 pub const fn with_tr(mut self, n: u32, value: u8) -> Self {
25142 self.set_tr(n, value);
25143 self
25144 }
25145}
25146
25147#[cfg(feature = "el1")]
25148bitflags! {
25149 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25151 #[repr(transparent)]
25152 pub struct RgsrEl1: u64 {
25153 }
25154}
25155
25156#[cfg(feature = "el1")]
25157impl RgsrEl1 {
25158 pub const TAG_SHIFT: u32 = 0;
25160 pub const TAG_MASK: u64 = 0b1111;
25162 pub const SEED_SHIFT: u32 = 8;
25164 pub const SEED_MASK: u64 = 0b1111111111111111;
25166
25167 pub const fn tag(self) -> u8 {
25169 ((self.bits() >> Self::TAG_SHIFT) & 0b1111) as u8
25170 }
25171
25172 pub const fn set_tag(&mut self, value: u8) {
25174 let offset = Self::TAG_SHIFT;
25175 assert!(value & (Self::TAG_MASK as u8) == value);
25176 *self = Self::from_bits_retain(
25177 (self.bits() & !(Self::TAG_MASK << offset)) | ((value as u64) << offset),
25178 );
25179 }
25180
25181 pub const fn with_tag(mut self, value: u8) -> Self {
25183 self.set_tag(value);
25184 self
25185 }
25186
25187 pub const fn seed(self) -> u16 {
25189 ((self.bits() >> Self::SEED_SHIFT) & 0b1111111111111111) as u16
25190 }
25191
25192 pub const fn set_seed(&mut self, value: u16) {
25194 let offset = Self::SEED_SHIFT;
25195 assert!(value & (Self::SEED_MASK as u16) == value);
25196 *self = Self::from_bits_retain(
25197 (self.bits() & !(Self::SEED_MASK << offset)) | ((value as u64) << offset),
25198 );
25199 }
25200
25201 pub const fn with_seed(mut self, value: u16) -> Self {
25203 self.set_seed(value);
25204 self
25205 }
25206}
25207
25208bitflags! {
25209 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25211 #[repr(transparent)]
25212 pub struct Rmr: u32 {
25213 const AA64 = 1 << 0;
25215 const RR = 1 << 1;
25217 }
25218}
25219
25220impl Rmr {
25221 pub const AA64_SHIFT: u32 = 0;
25223 pub const RR_SHIFT: u32 = 1;
25225}
25226
25227bitflags! {
25228 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25230 #[repr(transparent)]
25231 pub struct Rvbar: u32 {
25232 const RES1 = 0b1;
25234 }
25235}
25236
25237impl Rvbar {
25238 pub const RESETADDRESS_SHIFT: u32 = 1;
25240 pub const RESETADDRESS_MASK: u32 = 0b1111111111111111111111111111111;
25242
25243 pub const fn resetaddress(self) -> u32 {
25245 ((self.bits() >> Self::RESETADDRESS_SHIFT) & 0b1111111111111111111111111111111) as u32
25246 }
25247
25248 pub const fn set_resetaddress(&mut self, value: u32) {
25250 let offset = Self::RESETADDRESS_SHIFT;
25251 assert!(value & (Self::RESETADDRESS_MASK as u32) == value);
25252 *self = Self::from_bits_retain(
25253 (self.bits() & !(Self::RESETADDRESS_MASK << offset)) | ((value as u32) << offset),
25254 );
25255 }
25256
25257 pub const fn with_resetaddress(mut self, value: u32) -> Self {
25259 self.set_resetaddress(value);
25260 self
25261 }
25262}
25263
25264bitflags! {
25265 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25267 #[repr(transparent)]
25268 pub struct Scr: u32 {
25269 const NS = 1 << 0;
25271 const IRQ = 1 << 1;
25273 const FIQ = 1 << 2;
25275 const EA = 1 << 3;
25277 const FW = 1 << 4;
25279 const AW = 1 << 5;
25281 const NET = 1 << 6;
25283 const SCD = 1 << 7;
25285 const HCE = 1 << 8;
25287 const SIF = 1 << 9;
25289 const TWI = 1 << 12;
25291 const TWE = 1 << 13;
25293 const TERR = 1 << 15;
25295 }
25296}
25297
25298impl Scr {
25299 pub const NS_SHIFT: u32 = 0;
25301 pub const IRQ_SHIFT: u32 = 1;
25303 pub const FIQ_SHIFT: u32 = 2;
25305 pub const EA_SHIFT: u32 = 3;
25307 pub const FW_SHIFT: u32 = 4;
25309 pub const AW_SHIFT: u32 = 5;
25311 pub const NET_SHIFT: u32 = 6;
25313 pub const SCD_SHIFT: u32 = 7;
25315 pub const HCE_SHIFT: u32 = 8;
25317 pub const SIF_SHIFT: u32 = 9;
25319 pub const TWI_SHIFT: u32 = 12;
25321 pub const TWE_SHIFT: u32 = 13;
25323 pub const TERR_SHIFT: u32 = 15;
25325}
25326
25327#[cfg(feature = "el3")]
25328bitflags! {
25329 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25331 #[repr(transparent)]
25332 pub struct ScrEl3: u64 {
25333 const RES1 = 0b110000;
25335 const NS = 1 << 0;
25337 const IRQ = 1 << 1;
25339 const FIQ = 1 << 2;
25341 const EA = 1 << 3;
25343 const SMD = 1 << 7;
25345 const HCE = 1 << 8;
25347 const SIF = 1 << 9;
25349 const RW = 1 << 10;
25351 const ST = 1 << 11;
25353 const TWI = 1 << 12;
25355 const TWE = 1 << 13;
25357 const TLOR = 1 << 14;
25359 const TERR = 1 << 15;
25361 const APK = 1 << 16;
25363 const API = 1 << 17;
25365 const EEL2 = 1 << 18;
25367 const EASE = 1 << 19;
25369 const NMEA = 1 << 20;
25371 const FIEN = 1 << 21;
25373 const TID3 = 1 << 22;
25375 const TID5 = 1 << 23;
25377 const POE2EN = 1 << 24;
25379 const ENSCXT = 1 << 25;
25381 const ATA = 1 << 26;
25383 const FGTEN = 1 << 27;
25385 const ECVEN = 1 << 28;
25387 const TWEDEN = 1 << 29;
25389 const AMVOFFEN = 1 << 35;
25391 const ENAS0 = 1 << 36;
25393 const ADEN = 1 << 37;
25395 const HXEN = 1 << 38;
25397 const GCSEN = 1 << 39;
25399 const TRNDR = 1 << 40;
25401 const ENTP2 = 1 << 41;
25403 const RCWMASKEN = 1 << 42;
25405 const TCR2EN = 1 << 43;
25407 const SCTLR2EN = 1 << 44;
25409 const PIEN = 1 << 45;
25411 const AIEN = 1 << 46;
25413 const D128EN = 1 << 47;
25415 const GPF = 1 << 48;
25417 const MECEN = 1 << 49;
25419 const ENFPM = 1 << 50;
25421 const TMEA = 1 << 51;
25423 const TWERR = 1 << 52;
25425 const PFAREN = 1 << 53;
25427 const SRMASKEN = 1 << 54;
25429 const ENIDCP128 = 1 << 55;
25431 const VTLBIDEN = 1 << 56;
25433 const DSE = 1 << 57;
25435 const ENDSE = 1 << 58;
25437 const FGTEN2 = 1 << 59;
25439 const HDBSSEN = 1 << 60;
25441 const HACDBSEN = 1 << 61;
25443 const NSE = 1 << 62;
25445 const TPLIMEN = 1 << 63;
25447 }
25448}
25449
25450#[cfg(feature = "el3")]
25451impl ScrEl3 {
25452 pub const NS_SHIFT: u32 = 0;
25454 pub const IRQ_SHIFT: u32 = 1;
25456 pub const FIQ_SHIFT: u32 = 2;
25458 pub const EA_SHIFT: u32 = 3;
25460 pub const SMD_SHIFT: u32 = 7;
25462 pub const HCE_SHIFT: u32 = 8;
25464 pub const SIF_SHIFT: u32 = 9;
25466 pub const RW_SHIFT: u32 = 10;
25468 pub const ST_SHIFT: u32 = 11;
25470 pub const TWI_SHIFT: u32 = 12;
25472 pub const TWE_SHIFT: u32 = 13;
25474 pub const TLOR_SHIFT: u32 = 14;
25476 pub const TERR_SHIFT: u32 = 15;
25478 pub const APK_SHIFT: u32 = 16;
25480 pub const API_SHIFT: u32 = 17;
25482 pub const EEL2_SHIFT: u32 = 18;
25484 pub const EASE_SHIFT: u32 = 19;
25486 pub const NMEA_SHIFT: u32 = 20;
25488 pub const FIEN_SHIFT: u32 = 21;
25490 pub const TID3_SHIFT: u32 = 22;
25492 pub const TID5_SHIFT: u32 = 23;
25494 pub const POE2EN_SHIFT: u32 = 24;
25496 pub const ENSCXT_SHIFT: u32 = 25;
25498 pub const ATA_SHIFT: u32 = 26;
25500 pub const FGTEN_SHIFT: u32 = 27;
25502 pub const ECVEN_SHIFT: u32 = 28;
25504 pub const TWEDEN_SHIFT: u32 = 29;
25506 pub const TWEDEL_SHIFT: u32 = 30;
25508 pub const TWEDEL_MASK: u64 = 0b1111;
25510 pub const AMVOFFEN_SHIFT: u32 = 35;
25512 pub const ENAS0_SHIFT: u32 = 36;
25514 pub const ADEN_SHIFT: u32 = 37;
25516 pub const HXEN_SHIFT: u32 = 38;
25518 pub const GCSEN_SHIFT: u32 = 39;
25520 pub const TRNDR_SHIFT: u32 = 40;
25522 pub const ENTP2_SHIFT: u32 = 41;
25524 pub const RCWMASKEN_SHIFT: u32 = 42;
25526 pub const TCR2EN_SHIFT: u32 = 43;
25528 pub const SCTLR2EN_SHIFT: u32 = 44;
25530 pub const PIEN_SHIFT: u32 = 45;
25532 pub const AIEN_SHIFT: u32 = 46;
25534 pub const D128EN_SHIFT: u32 = 47;
25536 pub const GPF_SHIFT: u32 = 48;
25538 pub const MECEN_SHIFT: u32 = 49;
25540 pub const ENFPM_SHIFT: u32 = 50;
25542 pub const TMEA_SHIFT: u32 = 51;
25544 pub const TWERR_SHIFT: u32 = 52;
25546 pub const PFAREN_SHIFT: u32 = 53;
25548 pub const SRMASKEN_SHIFT: u32 = 54;
25550 pub const ENIDCP128_SHIFT: u32 = 55;
25552 pub const VTLBIDEN_SHIFT: u32 = 56;
25554 pub const DSE_SHIFT: u32 = 57;
25556 pub const ENDSE_SHIFT: u32 = 58;
25558 pub const FGTEN2_SHIFT: u32 = 59;
25560 pub const HDBSSEN_SHIFT: u32 = 60;
25562 pub const HACDBSEN_SHIFT: u32 = 61;
25564 pub const NSE_SHIFT: u32 = 62;
25566 pub const TPLIMEN_SHIFT: u32 = 63;
25568
25569 pub const fn twedel(self) -> u8 {
25571 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
25572 }
25573
25574 pub const fn set_twedel(&mut self, value: u8) {
25576 let offset = Self::TWEDEL_SHIFT;
25577 assert!(value & (Self::TWEDEL_MASK as u8) == value);
25578 *self = Self::from_bits_retain(
25579 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
25580 );
25581 }
25582
25583 pub const fn with_twedel(mut self, value: u8) -> Self {
25585 self.set_twedel(value);
25586 self
25587 }
25588}
25589
25590bitflags! {
25591 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25593 #[repr(transparent)]
25594 pub struct Sctlr: u32 {
25595 const RES1 = 0b10000000000100000000000;
25597 const M = 1 << 0;
25599 const A = 1 << 1;
25601 const C = 1 << 2;
25603 const NTLSMD = 1 << 3;
25605 const LSMAOE = 1 << 4;
25607 const CP15BEN = 1 << 5;
25609 const UNK = 1 << 6;
25611 const ITD = 1 << 7;
25613 const SED = 1 << 8;
25615 const ENRCTX = 1 << 10;
25617 const I = 1 << 12;
25619 const V = 1 << 13;
25621 const NTWI = 1 << 16;
25623 const NTWE = 1 << 18;
25625 const WXN = 1 << 19;
25627 const UWXN = 1 << 20;
25629 const SPAN = 1 << 23;
25631 const EE = 1 << 25;
25633 const TRE = 1 << 28;
25635 const AFE = 1 << 29;
25637 const TE = 1 << 30;
25639 const DSSBS = 1 << 31;
25641 }
25642}
25643
25644impl Sctlr {
25645 pub const M_SHIFT: u32 = 0;
25647 pub const A_SHIFT: u32 = 1;
25649 pub const C_SHIFT: u32 = 2;
25651 pub const NTLSMD_SHIFT: u32 = 3;
25653 pub const LSMAOE_SHIFT: u32 = 4;
25655 pub const CP15BEN_SHIFT: u32 = 5;
25657 pub const UNK_SHIFT: u32 = 6;
25659 pub const ITD_SHIFT: u32 = 7;
25661 pub const SED_SHIFT: u32 = 8;
25663 pub const ENRCTX_SHIFT: u32 = 10;
25665 pub const I_SHIFT: u32 = 12;
25667 pub const V_SHIFT: u32 = 13;
25669 pub const NTWI_SHIFT: u32 = 16;
25671 pub const NTWE_SHIFT: u32 = 18;
25673 pub const WXN_SHIFT: u32 = 19;
25675 pub const UWXN_SHIFT: u32 = 20;
25677 pub const SPAN_SHIFT: u32 = 23;
25679 pub const EE_SHIFT: u32 = 25;
25681 pub const TRE_SHIFT: u32 = 28;
25683 pub const AFE_SHIFT: u32 = 29;
25685 pub const TE_SHIFT: u32 = 30;
25687 pub const DSSBS_SHIFT: u32 = 31;
25689}
25690
25691#[cfg(feature = "el3")]
25692bitflags! {
25693 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25695 #[repr(transparent)]
25696 pub struct Sctlr2El3: u64 {
25697 const EMEC = 1 << 1;
25699 const ENADERR = 1 << 3;
25701 const ENANERR = 1 << 4;
25703 const ENPACM = 1 << 7;
25705 const CPTA = 1 << 9;
25707 const CPTM = 1 << 11;
25709 const DTZ = 1 << 14;
25711 const TEIS = 1 << 15;
25713 const TEOS = 1 << 16;
25715 const VT = 1 << 17;
25717 const BTD = 1 << 24;
25719 }
25720}
25721
25722#[cfg(feature = "el3")]
25723impl Sctlr2El3 {
25724 pub const EMEC_SHIFT: u32 = 1;
25726 pub const ENADERR_SHIFT: u32 = 3;
25728 pub const ENANERR_SHIFT: u32 = 4;
25730 pub const ENPACM_SHIFT: u32 = 7;
25732 pub const CPTA_SHIFT: u32 = 9;
25734 pub const CPTM_SHIFT: u32 = 11;
25736 pub const DTZ_SHIFT: u32 = 14;
25738 pub const TEIS_SHIFT: u32 = 15;
25740 pub const TEOS_SHIFT: u32 = 16;
25742 pub const VT_SHIFT: u32 = 17;
25744 pub const BTD_SHIFT: u32 = 24;
25746}
25747
25748#[cfg(feature = "el1")]
25749bitflags! {
25750 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25752 #[repr(transparent)]
25753 pub struct SctlrEl1: u64 {
25754 const M = 1 << 0;
25756 const A = 1 << 1;
25758 const C = 1 << 2;
25760 const SA = 1 << 3;
25762 const SA0 = 1 << 4;
25764 const CP15BEN = 1 << 5;
25766 const NAA = 1 << 6;
25768 const ITD = 1 << 7;
25770 const SED = 1 << 8;
25772 const UMA = 1 << 9;
25774 const ENRCTX = 1 << 10;
25776 const EOS = 1 << 11;
25778 const I = 1 << 12;
25780 const ENDB = 1 << 13;
25782 const DZE = 1 << 14;
25784 const UCT = 1 << 15;
25786 const NTWI = 1 << 16;
25788 const NTWE = 1 << 18;
25790 const WXN = 1 << 19;
25792 const TSCXT = 1 << 20;
25794 const IESB = 1 << 21;
25796 const EIS = 1 << 22;
25798 const SPAN = 1 << 23;
25800 const UCI = 1 << 26;
25802 const ENDA = 1 << 27;
25804 const NTLSMD = 1 << 28;
25806 const LSMAOE = 1 << 29;
25808 const ENIB = 1 << 30;
25810 const ENIA = 1 << 31;
25812 const CMOW = 1 << 32;
25814 const MSCEN = 1 << 33;
25816 const ENFPM = 1 << 34;
25818 const BT0 = 1 << 35;
25820 const BT1 = 1 << 36;
25822 const ITFSB = 1 << 37;
25824 const ATA0 = 1 << 42;
25826 const ATA = 1 << 43;
25828 const DSSBS = 1 << 44;
25830 const TWEDEN = 1 << 45;
25832 const ENASR = 1 << 54;
25834 const ENAS0 = 1 << 55;
25836 const ENALS = 1 << 56;
25838 const EPAN = 1 << 57;
25840 const TCSO0 = 1 << 58;
25842 const TCSO = 1 << 59;
25844 const ENTP2 = 1 << 60;
25846 const NMI = 1 << 61;
25848 const SPINTMASK = 1 << 62;
25850 const TIDCP = 1 << 63;
25852 }
25853}
25854
25855#[cfg(feature = "el1")]
25856impl SctlrEl1 {
25857 pub const M_SHIFT: u32 = 0;
25859 pub const A_SHIFT: u32 = 1;
25861 pub const C_SHIFT: u32 = 2;
25863 pub const SA_SHIFT: u32 = 3;
25865 pub const SA0_SHIFT: u32 = 4;
25867 pub const CP15BEN_SHIFT: u32 = 5;
25869 pub const NAA_SHIFT: u32 = 6;
25871 pub const ITD_SHIFT: u32 = 7;
25873 pub const SED_SHIFT: u32 = 8;
25875 pub const UMA_SHIFT: u32 = 9;
25877 pub const ENRCTX_SHIFT: u32 = 10;
25879 pub const EOS_SHIFT: u32 = 11;
25881 pub const I_SHIFT: u32 = 12;
25883 pub const ENDB_SHIFT: u32 = 13;
25885 pub const DZE_SHIFT: u32 = 14;
25887 pub const UCT_SHIFT: u32 = 15;
25889 pub const NTWI_SHIFT: u32 = 16;
25891 pub const NTWE_SHIFT: u32 = 18;
25893 pub const WXN_SHIFT: u32 = 19;
25895 pub const TSCXT_SHIFT: u32 = 20;
25897 pub const IESB_SHIFT: u32 = 21;
25899 pub const EIS_SHIFT: u32 = 22;
25901 pub const SPAN_SHIFT: u32 = 23;
25903 pub const UCI_SHIFT: u32 = 26;
25905 pub const ENDA_SHIFT: u32 = 27;
25907 pub const NTLSMD_SHIFT: u32 = 28;
25909 pub const LSMAOE_SHIFT: u32 = 29;
25911 pub const ENIB_SHIFT: u32 = 30;
25913 pub const ENIA_SHIFT: u32 = 31;
25915 pub const CMOW_SHIFT: u32 = 32;
25917 pub const MSCEN_SHIFT: u32 = 33;
25919 pub const ENFPM_SHIFT: u32 = 34;
25921 pub const BT0_SHIFT: u32 = 35;
25923 pub const BT1_SHIFT: u32 = 36;
25925 pub const ITFSB_SHIFT: u32 = 37;
25927 pub const TCF0_SHIFT: u32 = 38;
25929 pub const TCF0_MASK: u64 = 0b11;
25931 pub const TCF_SHIFT: u32 = 40;
25933 pub const TCF_MASK: u64 = 0b11;
25935 pub const ATA0_SHIFT: u32 = 42;
25937 pub const ATA_SHIFT: u32 = 43;
25939 pub const DSSBS_SHIFT: u32 = 44;
25941 pub const TWEDEN_SHIFT: u32 = 45;
25943 pub const TWEDEL_SHIFT: u32 = 46;
25945 pub const TWEDEL_MASK: u64 = 0b1111;
25947 pub const ENASR_SHIFT: u32 = 54;
25949 pub const ENAS0_SHIFT: u32 = 55;
25951 pub const ENALS_SHIFT: u32 = 56;
25953 pub const EPAN_SHIFT: u32 = 57;
25955 pub const TCSO0_SHIFT: u32 = 58;
25957 pub const TCSO_SHIFT: u32 = 59;
25959 pub const ENTP2_SHIFT: u32 = 60;
25961 pub const NMI_SHIFT: u32 = 61;
25963 pub const SPINTMASK_SHIFT: u32 = 62;
25965 pub const TIDCP_SHIFT: u32 = 63;
25967
25968 pub const fn tcf0(self) -> u8 {
25970 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
25971 }
25972
25973 pub const fn set_tcf0(&mut self, value: u8) {
25975 let offset = Self::TCF0_SHIFT;
25976 assert!(value & (Self::TCF0_MASK as u8) == value);
25977 *self = Self::from_bits_retain(
25978 (self.bits() & !(Self::TCF0_MASK << offset)) | ((value as u64) << offset),
25979 );
25980 }
25981
25982 pub const fn with_tcf0(mut self, value: u8) -> Self {
25984 self.set_tcf0(value);
25985 self
25986 }
25987
25988 pub const fn tcf(self) -> u8 {
25990 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
25991 }
25992
25993 pub const fn set_tcf(&mut self, value: u8) {
25995 let offset = Self::TCF_SHIFT;
25996 assert!(value & (Self::TCF_MASK as u8) == value);
25997 *self = Self::from_bits_retain(
25998 (self.bits() & !(Self::TCF_MASK << offset)) | ((value as u64) << offset),
25999 );
26000 }
26001
26002 pub const fn with_tcf(mut self, value: u8) -> Self {
26004 self.set_tcf(value);
26005 self
26006 }
26007
26008 pub const fn twedel(self) -> u8 {
26010 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
26011 }
26012
26013 pub const fn set_twedel(&mut self, value: u8) {
26015 let offset = Self::TWEDEL_SHIFT;
26016 assert!(value & (Self::TWEDEL_MASK as u8) == value);
26017 *self = Self::from_bits_retain(
26018 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
26019 );
26020 }
26021
26022 pub const fn with_twedel(mut self, value: u8) -> Self {
26024 self.set_twedel(value);
26025 self
26026 }
26027}
26028
26029#[cfg(feature = "el2")]
26030bitflags! {
26031 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26033 #[repr(transparent)]
26034 pub struct SctlrEl2: u64 {
26035 const M = 1 << 0;
26037 const A = 1 << 1;
26039 const C = 1 << 2;
26041 const SA = 1 << 3;
26043 const SA0 = 1 << 4;
26045 const CP15BEN = 1 << 5;
26047 const NAA = 1 << 6;
26049 const SED = 1 << 8;
26051 const UMA = 1 << 9;
26053 const ENRCTX = 1 << 10;
26055 const EOS = 1 << 11;
26057 const I = 1 << 12;
26059 const ENDB = 1 << 13;
26061 const DZE = 1 << 14;
26063 const UCT = 1 << 15;
26065 const NTWI = 1 << 16;
26067 const NTWE = 1 << 18;
26069 const WXN = 1 << 19;
26071 const IESB = 1 << 21;
26073 const EIS = 1 << 22;
26075 const SPAN = 1 << 23;
26077 const UCI = 1 << 26;
26079 const ENDA = 1 << 27;
26081 const NTLSMD = 1 << 28;
26083 const LSMAOE = 1 << 29;
26085 const ENIB = 1 << 30;
26087 const ENIA = 1 << 31;
26089 const CMOW = 1 << 32;
26091 const MSCEN = 1 << 33;
26093 const ENFPM = 1 << 34;
26095 const BT0 = 1 << 35;
26097 const BT = 1 << 36;
26099 const ITFSB = 1 << 37;
26101 const ATA0 = 1 << 42;
26103 const ATA = 1 << 43;
26105 const DSSBS = 1 << 44;
26107 const TWEDEN = 1 << 45;
26109 const ENASR = 1 << 54;
26111 const ENAS0 = 1 << 55;
26113 const ENALS = 1 << 56;
26115 const EPAN = 1 << 57;
26117 const TCSO0 = 1 << 58;
26119 const TCSO = 1 << 59;
26121 const ENTP2 = 1 << 60;
26123 const NMI = 1 << 61;
26125 const SPINTMASK = 1 << 62;
26127 const TIDCP = 1 << 63;
26129 }
26130}
26131
26132#[cfg(feature = "el2")]
26133impl SctlrEl2 {
26134 pub const M_SHIFT: u32 = 0;
26136 pub const A_SHIFT: u32 = 1;
26138 pub const C_SHIFT: u32 = 2;
26140 pub const SA_SHIFT: u32 = 3;
26142 pub const SA0_SHIFT: u32 = 4;
26144 pub const CP15BEN_SHIFT: u32 = 5;
26146 pub const NAA_SHIFT: u32 = 6;
26148 pub const SED_SHIFT: u32 = 8;
26150 pub const UMA_SHIFT: u32 = 9;
26152 pub const ENRCTX_SHIFT: u32 = 10;
26154 pub const EOS_SHIFT: u32 = 11;
26156 pub const I_SHIFT: u32 = 12;
26158 pub const ENDB_SHIFT: u32 = 13;
26160 pub const DZE_SHIFT: u32 = 14;
26162 pub const UCT_SHIFT: u32 = 15;
26164 pub const NTWI_SHIFT: u32 = 16;
26166 pub const NTWE_SHIFT: u32 = 18;
26168 pub const WXN_SHIFT: u32 = 19;
26170 pub const IESB_SHIFT: u32 = 21;
26172 pub const EIS_SHIFT: u32 = 22;
26174 pub const SPAN_SHIFT: u32 = 23;
26176 pub const UCI_SHIFT: u32 = 26;
26178 pub const ENDA_SHIFT: u32 = 27;
26180 pub const NTLSMD_SHIFT: u32 = 28;
26182 pub const LSMAOE_SHIFT: u32 = 29;
26184 pub const ENIB_SHIFT: u32 = 30;
26186 pub const ENIA_SHIFT: u32 = 31;
26188 pub const CMOW_SHIFT: u32 = 32;
26190 pub const MSCEN_SHIFT: u32 = 33;
26192 pub const ENFPM_SHIFT: u32 = 34;
26194 pub const BT0_SHIFT: u32 = 35;
26196 pub const BT_SHIFT: u32 = 36;
26198 pub const ITFSB_SHIFT: u32 = 37;
26200 pub const TCF0_SHIFT: u32 = 38;
26202 pub const TCF0_MASK: u64 = 0b11;
26204 pub const TCF_SHIFT: u32 = 40;
26206 pub const TCF_MASK: u64 = 0b11;
26208 pub const ATA0_SHIFT: u32 = 42;
26210 pub const ATA_SHIFT: u32 = 43;
26212 pub const DSSBS_SHIFT: u32 = 44;
26214 pub const TWEDEN_SHIFT: u32 = 45;
26216 pub const TWEDEL_SHIFT: u32 = 46;
26218 pub const TWEDEL_MASK: u64 = 0b1111;
26220 pub const ENASR_SHIFT: u32 = 54;
26222 pub const ENAS0_SHIFT: u32 = 55;
26224 pub const ENALS_SHIFT: u32 = 56;
26226 pub const EPAN_SHIFT: u32 = 57;
26228 pub const TCSO0_SHIFT: u32 = 58;
26230 pub const TCSO_SHIFT: u32 = 59;
26232 pub const ENTP2_SHIFT: u32 = 60;
26234 pub const NMI_SHIFT: u32 = 61;
26236 pub const SPINTMASK_SHIFT: u32 = 62;
26238 pub const TIDCP_SHIFT: u32 = 63;
26240
26241 pub const fn tcf0(self) -> u8 {
26243 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
26244 }
26245
26246 pub const fn set_tcf0(&mut self, value: u8) {
26248 let offset = Self::TCF0_SHIFT;
26249 assert!(value & (Self::TCF0_MASK as u8) == value);
26250 *self = Self::from_bits_retain(
26251 (self.bits() & !(Self::TCF0_MASK << offset)) | ((value as u64) << offset),
26252 );
26253 }
26254
26255 pub const fn with_tcf0(mut self, value: u8) -> Self {
26257 self.set_tcf0(value);
26258 self
26259 }
26260
26261 pub const fn tcf(self) -> u8 {
26263 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
26264 }
26265
26266 pub const fn set_tcf(&mut self, value: u8) {
26268 let offset = Self::TCF_SHIFT;
26269 assert!(value & (Self::TCF_MASK as u8) == value);
26270 *self = Self::from_bits_retain(
26271 (self.bits() & !(Self::TCF_MASK << offset)) | ((value as u64) << offset),
26272 );
26273 }
26274
26275 pub const fn with_tcf(mut self, value: u8) -> Self {
26277 self.set_tcf(value);
26278 self
26279 }
26280
26281 pub const fn twedel(self) -> u8 {
26283 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
26284 }
26285
26286 pub const fn set_twedel(&mut self, value: u8) {
26288 let offset = Self::TWEDEL_SHIFT;
26289 assert!(value & (Self::TWEDEL_MASK as u8) == value);
26290 *self = Self::from_bits_retain(
26291 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
26292 );
26293 }
26294
26295 pub const fn with_twedel(mut self, value: u8) -> Self {
26297 self.set_twedel(value);
26298 self
26299 }
26300}
26301
26302#[cfg(feature = "el3")]
26303bitflags! {
26304 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26306 #[repr(transparent)]
26307 pub struct SctlrEl3: u64 {
26308 const RES1 = 0b110000100001010000000000110000;
26310 const M = 1 << 0;
26312 const A = 1 << 1;
26314 const C = 1 << 2;
26316 const SA = 1 << 3;
26318 const NAA = 1 << 6;
26320 const EOS = 1 << 11;
26322 const I = 1 << 12;
26324 const ENDB = 1 << 13;
26326 const WXN = 1 << 19;
26328 const IESB = 1 << 21;
26330 const EIS = 1 << 22;
26332 const ENDA = 1 << 27;
26334 const ENIB = 1 << 30;
26336 const ENIA = 1 << 31;
26338 const BT = 1 << 36;
26340 const ITFSB = 1 << 37;
26342 const ATA = 1 << 43;
26344 const DSSBS = 1 << 44;
26346 const TCSO = 1 << 59;
26348 const NMI = 1 << 61;
26350 const SPINTMASK = 1 << 62;
26352 }
26353}
26354
26355#[cfg(feature = "el3")]
26356impl SctlrEl3 {
26357 pub const M_SHIFT: u32 = 0;
26359 pub const A_SHIFT: u32 = 1;
26361 pub const C_SHIFT: u32 = 2;
26363 pub const SA_SHIFT: u32 = 3;
26365 pub const NAA_SHIFT: u32 = 6;
26367 pub const EOS_SHIFT: u32 = 11;
26369 pub const I_SHIFT: u32 = 12;
26371 pub const ENDB_SHIFT: u32 = 13;
26373 pub const WXN_SHIFT: u32 = 19;
26375 pub const IESB_SHIFT: u32 = 21;
26377 pub const EIS_SHIFT: u32 = 22;
26379 pub const ENDA_SHIFT: u32 = 27;
26381 pub const ENIB_SHIFT: u32 = 30;
26383 pub const ENIA_SHIFT: u32 = 31;
26385 pub const BT_SHIFT: u32 = 36;
26387 pub const ITFSB_SHIFT: u32 = 37;
26389 pub const TCF_SHIFT: u32 = 40;
26391 pub const TCF_MASK: u64 = 0b11;
26393 pub const ATA_SHIFT: u32 = 43;
26395 pub const DSSBS_SHIFT: u32 = 44;
26397 pub const TCSO_SHIFT: u32 = 59;
26399 pub const NMI_SHIFT: u32 = 61;
26401 pub const SPINTMASK_SHIFT: u32 = 62;
26403
26404 pub const fn tcf(self) -> u8 {
26406 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
26407 }
26408
26409 pub const fn set_tcf(&mut self, value: u8) {
26411 let offset = Self::TCF_SHIFT;
26412 assert!(value & (Self::TCF_MASK as u8) == value);
26413 *self = Self::from_bits_retain(
26414 (self.bits() & !(Self::TCF_MASK << offset)) | ((value as u64) << offset),
26415 );
26416 }
26417
26418 pub const fn with_tcf(mut self, value: u8) -> Self {
26420 self.set_tcf(value);
26421 self
26422 }
26423}
26424
26425bitflags! {
26426 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26428 #[repr(transparent)]
26429 pub struct Sdcr: u32 {
26430 const SPME = 1 << 17;
26432 const STE = 1 << 18;
26434 const TTRF = 1 << 19;
26436 const EDAD = 1 << 20;
26438 const EPMAD = 1 << 21;
26440 const SCCD = 1 << 23;
26442 const TDCC = 1 << 27;
26444 const MTPME = 1 << 28;
26446 }
26447}
26448
26449impl Sdcr {
26450 pub const SPD_SHIFT: u32 = 14;
26452 pub const SPD_MASK: u32 = 0b11;
26454 pub const SPME_SHIFT: u32 = 17;
26456 pub const STE_SHIFT: u32 = 18;
26458 pub const TTRF_SHIFT: u32 = 19;
26460 pub const EDAD_SHIFT: u32 = 20;
26462 pub const EPMAD_SHIFT: u32 = 21;
26464 pub const SCCD_SHIFT: u32 = 23;
26466 pub const TDCC_SHIFT: u32 = 27;
26468 pub const MTPME_SHIFT: u32 = 28;
26470
26471 pub const fn spd(self) -> u8 {
26473 ((self.bits() >> Self::SPD_SHIFT) & 0b11) as u8
26474 }
26475
26476 pub const fn set_spd(&mut self, value: u8) {
26478 let offset = Self::SPD_SHIFT;
26479 assert!(value & (Self::SPD_MASK as u8) == value);
26480 *self = Self::from_bits_retain(
26481 (self.bits() & !(Self::SPD_MASK << offset)) | ((value as u32) << offset),
26482 );
26483 }
26484
26485 pub const fn with_spd(mut self, value: u8) -> Self {
26487 self.set_spd(value);
26488 self
26489 }
26490}
26491
26492bitflags! {
26493 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26495 #[repr(transparent)]
26496 pub struct Sder: u32 {
26497 const SUIDEN = 1 << 0;
26499 const SUNIDEN = 1 << 1;
26501 }
26502}
26503
26504impl Sder {
26505 pub const SUIDEN_SHIFT: u32 = 0;
26507 pub const SUNIDEN_SHIFT: u32 = 1;
26509}
26510
26511#[cfg(feature = "el3")]
26512bitflags! {
26513 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26515 #[repr(transparent)]
26516 pub struct SmcrEl3: u64 {
26517 const EZT0 = 1 << 30;
26519 const FA64 = 1 << 31;
26521 }
26522}
26523
26524#[cfg(feature = "el3")]
26525impl SmcrEl3 {
26526 pub const LEN_SHIFT: u32 = 0;
26528 pub const LEN_MASK: u64 = 0b1111;
26530 pub const EZT0_SHIFT: u32 = 30;
26532 pub const FA64_SHIFT: u32 = 31;
26534
26535 pub const fn len(self) -> u8 {
26537 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
26538 }
26539
26540 pub const fn set_len(&mut self, value: u8) {
26542 let offset = Self::LEN_SHIFT;
26543 assert!(value & (Self::LEN_MASK as u8) == value);
26544 *self = Self::from_bits_retain(
26545 (self.bits() & !(Self::LEN_MASK << offset)) | ((value as u64) << offset),
26546 );
26547 }
26548
26549 pub const fn with_len(mut self, value: u8) -> Self {
26551 self.set_len(value);
26552 self
26553 }
26554}
26555
26556#[cfg(feature = "el1")]
26557bitflags! {
26558 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26560 #[repr(transparent)]
26561 pub struct SpsrEl1: u64 {
26562 const M_4 = 1 << 4;
26564 const T = 1 << 5;
26566 const F = 1 << 6;
26568 const I = 1 << 7;
26570 const A = 1 << 8;
26572 const D = 1 << 9;
26574 const E = 1 << 9;
26576 const ALLINT = 1 << 13;
26578 const BTYPE2 = 1 << 14;
26580 const IL = 1 << 20;
26582 const SS = 1 << 21;
26584 const PAN = 1 << 22;
26586 const UAO = 1 << 23;
26588 const DIT = 1 << 24;
26590 const TCO = 1 << 25;
26592 const Q = 1 << 27;
26594 const V = 1 << 28;
26596 const C = 1 << 29;
26598 const Z = 1 << 30;
26600 const N = 1 << 31;
26602 const PM = 1 << 32;
26604 const PPEND = 1 << 33;
26606 const EXLOCK = 1 << 34;
26608 const PACM = 1 << 35;
26610 const UINJ = 1 << 36;
26612 }
26613}
26614
26615#[cfg(feature = "el1")]
26616impl SpsrEl1 {
26617 pub const M_3_0_SHIFT: u32 = 0;
26619 pub const M_3_0_MASK: u64 = 0b1111;
26621 pub const M_4_SHIFT: u32 = 4;
26623 pub const T_SHIFT: u32 = 5;
26625 pub const F_SHIFT: u32 = 6;
26627 pub const I_SHIFT: u32 = 7;
26629 pub const A_SHIFT: u32 = 8;
26631 pub const D_SHIFT: u32 = 9;
26633 pub const E_SHIFT: u32 = 9;
26635 pub const BTYPE_SHIFT: u32 = 10;
26637 pub const BTYPE_MASK: u64 = 0b11;
26639 pub const ALLINT_SHIFT: u32 = 13;
26641 pub const BTYPE2_SHIFT: u32 = 14;
26643 pub const GE_SHIFT: u32 = 16;
26645 pub const GE_MASK: u64 = 0b1111;
26647 pub const IL_SHIFT: u32 = 20;
26649 pub const SS_SHIFT: u32 = 21;
26651 pub const PAN_SHIFT: u32 = 22;
26653 pub const UAO_SHIFT: u32 = 23;
26655 pub const DIT_SHIFT: u32 = 24;
26657 pub const TCO_SHIFT: u32 = 25;
26659 pub const Q_SHIFT: u32 = 27;
26661 pub const V_SHIFT: u32 = 28;
26663 pub const C_SHIFT: u32 = 29;
26665 pub const Z_SHIFT: u32 = 30;
26667 pub const N_SHIFT: u32 = 31;
26669 pub const PM_SHIFT: u32 = 32;
26671 pub const PPEND_SHIFT: u32 = 33;
26673 pub const EXLOCK_SHIFT: u32 = 34;
26675 pub const PACM_SHIFT: u32 = 35;
26677 pub const UINJ_SHIFT: u32 = 36;
26679
26680 pub const fn m_3_0(self) -> u8 {
26682 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
26683 }
26684
26685 pub const fn set_m_3_0(&mut self, value: u8) {
26687 let offset = Self::M_3_0_SHIFT;
26688 assert!(value & (Self::M_3_0_MASK as u8) == value);
26689 *self = Self::from_bits_retain(
26690 (self.bits() & !(Self::M_3_0_MASK << offset)) | ((value as u64) << offset),
26691 );
26692 }
26693
26694 pub const fn with_m_3_0(mut self, value: u8) -> Self {
26696 self.set_m_3_0(value);
26697 self
26698 }
26699
26700 pub const fn btype(self) -> u8 {
26702 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
26703 }
26704
26705 pub const fn set_btype(&mut self, value: u8) {
26707 let offset = Self::BTYPE_SHIFT;
26708 assert!(value & (Self::BTYPE_MASK as u8) == value);
26709 *self = Self::from_bits_retain(
26710 (self.bits() & !(Self::BTYPE_MASK << offset)) | ((value as u64) << offset),
26711 );
26712 }
26713
26714 pub const fn with_btype(mut self, value: u8) -> Self {
26716 self.set_btype(value);
26717 self
26718 }
26719
26720 pub const fn ge(self) -> u8 {
26722 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
26723 }
26724
26725 pub const fn set_ge(&mut self, value: u8) {
26727 let offset = Self::GE_SHIFT;
26728 assert!(value & (Self::GE_MASK as u8) == value);
26729 *self = Self::from_bits_retain(
26730 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u64) << offset),
26731 );
26732 }
26733
26734 pub const fn with_ge(mut self, value: u8) -> Self {
26736 self.set_ge(value);
26737 self
26738 }
26739}
26740
26741#[cfg(feature = "el2")]
26742bitflags! {
26743 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26745 #[repr(transparent)]
26746 pub struct SpsrEl2: u64 {
26747 const M_4 = 1 << 4;
26749 const T = 1 << 5;
26751 const F = 1 << 6;
26753 const I = 1 << 7;
26755 const A = 1 << 8;
26757 const D = 1 << 9;
26759 const E = 1 << 9;
26761 const ALLINT = 1 << 13;
26763 const BTYPE2 = 1 << 14;
26765 const IL = 1 << 20;
26767 const SS = 1 << 21;
26769 const PAN = 1 << 22;
26771 const UAO = 1 << 23;
26773 const DIT = 1 << 24;
26775 const TCO = 1 << 25;
26777 const Q = 1 << 27;
26779 const V = 1 << 28;
26781 const C = 1 << 29;
26783 const Z = 1 << 30;
26785 const N = 1 << 31;
26787 const PM = 1 << 32;
26789 const PPEND = 1 << 33;
26791 const EXLOCK = 1 << 34;
26793 const PACM = 1 << 35;
26795 const UINJ = 1 << 36;
26797 }
26798}
26799
26800#[cfg(feature = "el2")]
26801impl SpsrEl2 {
26802 pub const M_3_0_SHIFT: u32 = 0;
26804 pub const M_3_0_MASK: u64 = 0b1111;
26806 pub const M_4_SHIFT: u32 = 4;
26808 pub const T_SHIFT: u32 = 5;
26810 pub const F_SHIFT: u32 = 6;
26812 pub const I_SHIFT: u32 = 7;
26814 pub const A_SHIFT: u32 = 8;
26816 pub const D_SHIFT: u32 = 9;
26818 pub const E_SHIFT: u32 = 9;
26820 pub const BTYPE_SHIFT: u32 = 10;
26822 pub const BTYPE_MASK: u64 = 0b11;
26824 pub const ALLINT_SHIFT: u32 = 13;
26826 pub const BTYPE2_SHIFT: u32 = 14;
26828 pub const GE_SHIFT: u32 = 16;
26830 pub const GE_MASK: u64 = 0b1111;
26832 pub const IL_SHIFT: u32 = 20;
26834 pub const SS_SHIFT: u32 = 21;
26836 pub const PAN_SHIFT: u32 = 22;
26838 pub const UAO_SHIFT: u32 = 23;
26840 pub const DIT_SHIFT: u32 = 24;
26842 pub const TCO_SHIFT: u32 = 25;
26844 pub const Q_SHIFT: u32 = 27;
26846 pub const V_SHIFT: u32 = 28;
26848 pub const C_SHIFT: u32 = 29;
26850 pub const Z_SHIFT: u32 = 30;
26852 pub const N_SHIFT: u32 = 31;
26854 pub const PM_SHIFT: u32 = 32;
26856 pub const PPEND_SHIFT: u32 = 33;
26858 pub const EXLOCK_SHIFT: u32 = 34;
26860 pub const PACM_SHIFT: u32 = 35;
26862 pub const UINJ_SHIFT: u32 = 36;
26864
26865 pub const fn m_3_0(self) -> u8 {
26867 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
26868 }
26869
26870 pub const fn set_m_3_0(&mut self, value: u8) {
26872 let offset = Self::M_3_0_SHIFT;
26873 assert!(value & (Self::M_3_0_MASK as u8) == value);
26874 *self = Self::from_bits_retain(
26875 (self.bits() & !(Self::M_3_0_MASK << offset)) | ((value as u64) << offset),
26876 );
26877 }
26878
26879 pub const fn with_m_3_0(mut self, value: u8) -> Self {
26881 self.set_m_3_0(value);
26882 self
26883 }
26884
26885 pub const fn btype(self) -> u8 {
26887 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
26888 }
26889
26890 pub const fn set_btype(&mut self, value: u8) {
26892 let offset = Self::BTYPE_SHIFT;
26893 assert!(value & (Self::BTYPE_MASK as u8) == value);
26894 *self = Self::from_bits_retain(
26895 (self.bits() & !(Self::BTYPE_MASK << offset)) | ((value as u64) << offset),
26896 );
26897 }
26898
26899 pub const fn with_btype(mut self, value: u8) -> Self {
26901 self.set_btype(value);
26902 self
26903 }
26904
26905 pub const fn ge(self) -> u8 {
26907 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
26908 }
26909
26910 pub const fn set_ge(&mut self, value: u8) {
26912 let offset = Self::GE_SHIFT;
26913 assert!(value & (Self::GE_MASK as u8) == value);
26914 *self = Self::from_bits_retain(
26915 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u64) << offset),
26916 );
26917 }
26918
26919 pub const fn with_ge(mut self, value: u8) -> Self {
26921 self.set_ge(value);
26922 self
26923 }
26924}
26925
26926#[cfg(feature = "el3")]
26927bitflags! {
26928 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26930 #[repr(transparent)]
26931 pub struct SpsrEl3: u64 {
26932 const M_4 = 1 << 4;
26934 const T = 1 << 5;
26936 const F = 1 << 6;
26938 const I = 1 << 7;
26940 const A = 1 << 8;
26942 const D = 1 << 9;
26944 const E = 1 << 9;
26946 const ALLINT = 1 << 13;
26948 const BTYPE2 = 1 << 14;
26950 const IL = 1 << 20;
26952 const SS = 1 << 21;
26954 const PAN = 1 << 22;
26956 const UAO = 1 << 23;
26958 const DIT = 1 << 24;
26960 const TCO = 1 << 25;
26962 const Q = 1 << 27;
26964 const V = 1 << 28;
26966 const C = 1 << 29;
26968 const Z = 1 << 30;
26970 const N = 1 << 31;
26972 const PM = 1 << 32;
26974 const PPEND = 1 << 33;
26976 const EXLOCK = 1 << 34;
26978 const PACM = 1 << 35;
26980 const UINJ = 1 << 36;
26982 }
26983}
26984
26985#[cfg(feature = "el3")]
26986impl SpsrEl3 {
26987 pub const M_3_0_SHIFT: u32 = 0;
26989 pub const M_3_0_MASK: u64 = 0b1111;
26991 pub const M_4_SHIFT: u32 = 4;
26993 pub const T_SHIFT: u32 = 5;
26995 pub const F_SHIFT: u32 = 6;
26997 pub const I_SHIFT: u32 = 7;
26999 pub const A_SHIFT: u32 = 8;
27001 pub const D_SHIFT: u32 = 9;
27003 pub const E_SHIFT: u32 = 9;
27005 pub const BTYPE_SHIFT: u32 = 10;
27007 pub const BTYPE_MASK: u64 = 0b11;
27009 pub const ALLINT_SHIFT: u32 = 13;
27011 pub const BTYPE2_SHIFT: u32 = 14;
27013 pub const GE_SHIFT: u32 = 16;
27015 pub const GE_MASK: u64 = 0b1111;
27017 pub const IL_SHIFT: u32 = 20;
27019 pub const SS_SHIFT: u32 = 21;
27021 pub const PAN_SHIFT: u32 = 22;
27023 pub const UAO_SHIFT: u32 = 23;
27025 pub const DIT_SHIFT: u32 = 24;
27027 pub const TCO_SHIFT: u32 = 25;
27029 pub const Q_SHIFT: u32 = 27;
27031 pub const V_SHIFT: u32 = 28;
27033 pub const C_SHIFT: u32 = 29;
27035 pub const Z_SHIFT: u32 = 30;
27037 pub const N_SHIFT: u32 = 31;
27039 pub const PM_SHIFT: u32 = 32;
27041 pub const PPEND_SHIFT: u32 = 33;
27043 pub const EXLOCK_SHIFT: u32 = 34;
27045 pub const PACM_SHIFT: u32 = 35;
27047 pub const UINJ_SHIFT: u32 = 36;
27049
27050 pub const fn m_3_0(self) -> u8 {
27052 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
27053 }
27054
27055 pub const fn set_m_3_0(&mut self, value: u8) {
27057 let offset = Self::M_3_0_SHIFT;
27058 assert!(value & (Self::M_3_0_MASK as u8) == value);
27059 *self = Self::from_bits_retain(
27060 (self.bits() & !(Self::M_3_0_MASK << offset)) | ((value as u64) << offset),
27061 );
27062 }
27063
27064 pub const fn with_m_3_0(mut self, value: u8) -> Self {
27066 self.set_m_3_0(value);
27067 self
27068 }
27069
27070 pub const fn btype(self) -> u8 {
27072 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
27073 }
27074
27075 pub const fn set_btype(&mut self, value: u8) {
27077 let offset = Self::BTYPE_SHIFT;
27078 assert!(value & (Self::BTYPE_MASK as u8) == value);
27079 *self = Self::from_bits_retain(
27080 (self.bits() & !(Self::BTYPE_MASK << offset)) | ((value as u64) << offset),
27081 );
27082 }
27083
27084 pub const fn with_btype(mut self, value: u8) -> Self {
27086 self.set_btype(value);
27087 self
27088 }
27089
27090 pub const fn ge(self) -> u8 {
27092 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
27093 }
27094
27095 pub const fn set_ge(&mut self, value: u8) {
27097 let offset = Self::GE_SHIFT;
27098 assert!(value & (Self::GE_MASK as u8) == value);
27099 *self = Self::from_bits_retain(
27100 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u64) << offset),
27101 );
27102 }
27103
27104 pub const fn with_ge(mut self, value: u8) -> Self {
27106 self.set_ge(value);
27107 self
27108 }
27109}
27110
27111#[cfg(feature = "el1")]
27112bitflags! {
27113 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27115 #[repr(transparent)]
27116 pub struct SpEl1: u64 {
27117 }
27118}
27119
27120#[cfg(feature = "el1")]
27121impl SpEl1 {
27122 pub const STACKPOINTER_SHIFT: u32 = 0;
27124 pub const STACKPOINTER_MASK: u64 =
27126 0b1111111111111111111111111111111111111111111111111111111111111111;
27127
27128 pub const fn stackpointer(self) -> u64 {
27130 ((self.bits() >> Self::STACKPOINTER_SHIFT)
27131 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
27132 }
27133
27134 pub const fn set_stackpointer(&mut self, value: u64) {
27136 let offset = Self::STACKPOINTER_SHIFT;
27137 assert!(value & (Self::STACKPOINTER_MASK as u64) == value);
27138 *self = Self::from_bits_retain(
27139 (self.bits() & !(Self::STACKPOINTER_MASK << offset)) | ((value as u64) << offset),
27140 );
27141 }
27142
27143 pub const fn with_stackpointer(mut self, value: u64) -> Self {
27145 self.set_stackpointer(value);
27146 self
27147 }
27148}
27149
27150#[cfg(feature = "el2")]
27151bitflags! {
27152 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27154 #[repr(transparent)]
27155 pub struct SpEl2: u64 {
27156 }
27157}
27158
27159#[cfg(feature = "el2")]
27160impl SpEl2 {
27161 pub const STACKPOINTER_SHIFT: u32 = 0;
27163 pub const STACKPOINTER_MASK: u64 =
27165 0b1111111111111111111111111111111111111111111111111111111111111111;
27166
27167 pub const fn stackpointer(self) -> u64 {
27169 ((self.bits() >> Self::STACKPOINTER_SHIFT)
27170 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
27171 }
27172
27173 pub const fn set_stackpointer(&mut self, value: u64) {
27175 let offset = Self::STACKPOINTER_SHIFT;
27176 assert!(value & (Self::STACKPOINTER_MASK as u64) == value);
27177 *self = Self::from_bits_retain(
27178 (self.bits() & !(Self::STACKPOINTER_MASK << offset)) | ((value as u64) << offset),
27179 );
27180 }
27181
27182 pub const fn with_stackpointer(mut self, value: u64) -> Self {
27184 self.set_stackpointer(value);
27185 self
27186 }
27187}
27188
27189bitflags! {
27190 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27192 #[repr(transparent)]
27193 pub struct Svcr: u64 {
27194 const SM = 1 << 0;
27196 const ZA = 1 << 1;
27198 }
27199}
27200
27201impl Svcr {
27202 pub const SM_SHIFT: u32 = 0;
27204 pub const ZA_SHIFT: u32 = 1;
27206}
27207
27208#[cfg(feature = "el1")]
27209bitflags! {
27210 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27212 #[repr(transparent)]
27213 pub struct Tcr2El1: u64 {
27214 const PNCH = 1 << 0;
27216 const PIE = 1 << 1;
27218 const E0POE = 1 << 2;
27220 const POE = 1 << 3;
27222 const AIE = 1 << 4;
27224 const D128 = 1 << 5;
27226 const PTTWI = 1 << 10;
27228 const HAFT = 1 << 11;
27230 const DISCH0 = 1 << 14;
27232 const DISCH1 = 1 << 15;
27234 const A2 = 1 << 16;
27236 const FNG0 = 1 << 17;
27238 const FNG1 = 1 << 18;
27240 const POE2F = 1 << 19;
27242 const FNGNA0 = 1 << 20;
27244 const FNGNA1 = 1 << 21;
27246 const TVAD0 = 1 << 35;
27248 const TVAD1 = 1 << 36;
27250 }
27251}
27252
27253#[cfg(feature = "el1")]
27254impl Tcr2El1 {
27255 pub const PNCH_SHIFT: u32 = 0;
27257 pub const PIE_SHIFT: u32 = 1;
27259 pub const E0POE_SHIFT: u32 = 2;
27261 pub const POE_SHIFT: u32 = 3;
27263 pub const AIE_SHIFT: u32 = 4;
27265 pub const D128_SHIFT: u32 = 5;
27267 pub const PTTWI_SHIFT: u32 = 10;
27269 pub const HAFT_SHIFT: u32 = 11;
27271 pub const DISCH0_SHIFT: u32 = 14;
27273 pub const DISCH1_SHIFT: u32 = 15;
27275 pub const A2_SHIFT: u32 = 16;
27277 pub const FNG0_SHIFT: u32 = 17;
27279 pub const FNG1_SHIFT: u32 = 18;
27281 pub const POE2F_SHIFT: u32 = 19;
27283 pub const FNGNA0_SHIFT: u32 = 20;
27285 pub const FNGNA1_SHIFT: u32 = 21;
27287 pub const POIW_SHIFT: u32 = 22;
27289 pub const POIW_MASK: u64 = 0b111;
27291 pub const VTB0_SHIFT: u32 = 25;
27293 pub const VTB0_MASK: u64 = 0b11111;
27295 pub const VTB1_SHIFT: u32 = 30;
27297 pub const VTB1_MASK: u64 = 0b11111;
27299 pub const TVAD0_SHIFT: u32 = 35;
27301 pub const TVAD1_SHIFT: u32 = 36;
27303
27304 pub const fn poiw(self) -> u8 {
27306 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
27307 }
27308
27309 pub const fn set_poiw(&mut self, value: u8) {
27311 let offset = Self::POIW_SHIFT;
27312 assert!(value & (Self::POIW_MASK as u8) == value);
27313 *self = Self::from_bits_retain(
27314 (self.bits() & !(Self::POIW_MASK << offset)) | ((value as u64) << offset),
27315 );
27316 }
27317
27318 pub const fn with_poiw(mut self, value: u8) -> Self {
27320 self.set_poiw(value);
27321 self
27322 }
27323
27324 pub const fn vtb0(self) -> u8 {
27326 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
27327 }
27328
27329 pub const fn set_vtb0(&mut self, value: u8) {
27331 let offset = Self::VTB0_SHIFT;
27332 assert!(value & (Self::VTB0_MASK as u8) == value);
27333 *self = Self::from_bits_retain(
27334 (self.bits() & !(Self::VTB0_MASK << offset)) | ((value as u64) << offset),
27335 );
27336 }
27337
27338 pub const fn with_vtb0(mut self, value: u8) -> Self {
27340 self.set_vtb0(value);
27341 self
27342 }
27343
27344 pub const fn vtb1(self) -> u8 {
27346 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
27347 }
27348
27349 pub const fn set_vtb1(&mut self, value: u8) {
27351 let offset = Self::VTB1_SHIFT;
27352 assert!(value & (Self::VTB1_MASK as u8) == value);
27353 *self = Self::from_bits_retain(
27354 (self.bits() & !(Self::VTB1_MASK << offset)) | ((value as u64) << offset),
27355 );
27356 }
27357
27358 pub const fn with_vtb1(mut self, value: u8) -> Self {
27360 self.set_vtb1(value);
27361 self
27362 }
27363}
27364
27365#[cfg(feature = "el2")]
27366bitflags! {
27367 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27369 #[repr(transparent)]
27370 pub struct Tcr2El2: u64 {
27371 const PNCH = 1 << 0;
27373 const PIE = 1 << 1;
27375 const E0POE = 1 << 2;
27377 const POE = 1 << 3;
27379 const AIE = 1 << 4;
27381 const D128 = 1 << 5;
27383 const PTTWI = 1 << 10;
27385 const HAFT = 1 << 11;
27387 const AMEC0 = 1 << 12;
27389 const AMEC1 = 1 << 13;
27391 const DISCH0 = 1 << 14;
27393 const DISCH1 = 1 << 15;
27395 const A2 = 1 << 16;
27397 const FNG0 = 1 << 17;
27399 const FNG1 = 1 << 18;
27401 const POE2F = 1 << 19;
27403 const TVAD0 = 1 << 35;
27405 const TVAD1 = 1 << 36;
27407 }
27408}
27409
27410#[cfg(feature = "el2")]
27411impl Tcr2El2 {
27412 pub const PNCH_SHIFT: u32 = 0;
27414 pub const PIE_SHIFT: u32 = 1;
27416 pub const E0POE_SHIFT: u32 = 2;
27418 pub const POE_SHIFT: u32 = 3;
27420 pub const AIE_SHIFT: u32 = 4;
27422 pub const D128_SHIFT: u32 = 5;
27424 pub const PTTWI_SHIFT: u32 = 10;
27426 pub const HAFT_SHIFT: u32 = 11;
27428 pub const AMEC0_SHIFT: u32 = 12;
27430 pub const AMEC1_SHIFT: u32 = 13;
27432 pub const DISCH0_SHIFT: u32 = 14;
27434 pub const DISCH1_SHIFT: u32 = 15;
27436 pub const A2_SHIFT: u32 = 16;
27438 pub const FNG0_SHIFT: u32 = 17;
27440 pub const FNG1_SHIFT: u32 = 18;
27442 pub const POE2F_SHIFT: u32 = 19;
27444 pub const POIW_SHIFT: u32 = 22;
27446 pub const POIW_MASK: u64 = 0b111;
27448 pub const VTB0_SHIFT: u32 = 25;
27450 pub const VTB0_MASK: u64 = 0b11111;
27452 pub const VTB1_SHIFT: u32 = 30;
27454 pub const VTB1_MASK: u64 = 0b11111;
27456 pub const TVAD0_SHIFT: u32 = 35;
27458 pub const TVAD1_SHIFT: u32 = 36;
27460
27461 pub const fn poiw(self) -> u8 {
27463 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
27464 }
27465
27466 pub const fn set_poiw(&mut self, value: u8) {
27468 let offset = Self::POIW_SHIFT;
27469 assert!(value & (Self::POIW_MASK as u8) == value);
27470 *self = Self::from_bits_retain(
27471 (self.bits() & !(Self::POIW_MASK << offset)) | ((value as u64) << offset),
27472 );
27473 }
27474
27475 pub const fn with_poiw(mut self, value: u8) -> Self {
27477 self.set_poiw(value);
27478 self
27479 }
27480
27481 pub const fn vtb0(self) -> u8 {
27483 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
27484 }
27485
27486 pub const fn set_vtb0(&mut self, value: u8) {
27488 let offset = Self::VTB0_SHIFT;
27489 assert!(value & (Self::VTB0_MASK as u8) == value);
27490 *self = Self::from_bits_retain(
27491 (self.bits() & !(Self::VTB0_MASK << offset)) | ((value as u64) << offset),
27492 );
27493 }
27494
27495 pub const fn with_vtb0(mut self, value: u8) -> Self {
27497 self.set_vtb0(value);
27498 self
27499 }
27500
27501 pub const fn vtb1(self) -> u8 {
27503 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
27504 }
27505
27506 pub const fn set_vtb1(&mut self, value: u8) {
27508 let offset = Self::VTB1_SHIFT;
27509 assert!(value & (Self::VTB1_MASK as u8) == value);
27510 *self = Self::from_bits_retain(
27511 (self.bits() & !(Self::VTB1_MASK << offset)) | ((value as u64) << offset),
27512 );
27513 }
27514
27515 pub const fn with_vtb1(mut self, value: u8) -> Self {
27517 self.set_vtb1(value);
27518 self
27519 }
27520}
27521
27522#[cfg(feature = "el1")]
27523bitflags! {
27524 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27526 #[repr(transparent)]
27527 pub struct TcrEl1: u64 {
27528 const EPD0 = 1 << 7;
27530 const A1 = 1 << 22;
27532 const EPD1 = 1 << 23;
27534 const AS = 1 << 36;
27536 const TBI0 = 1 << 37;
27538 const TBI1 = 1 << 38;
27540 const HA = 1 << 39;
27542 const HD = 1 << 40;
27544 const HPD0 = 1 << 41;
27546 const HPD1 = 1 << 42;
27548 const HWU059 = 1 << 43;
27550 const HWU060 = 1 << 44;
27552 const HWU061 = 1 << 45;
27554 const HWU062 = 1 << 46;
27556 const HWU159 = 1 << 47;
27558 const HWU160 = 1 << 48;
27560 const HWU161 = 1 << 49;
27562 const HWU162 = 1 << 50;
27564 const TBID0 = 1 << 51;
27566 const TBID1 = 1 << 52;
27568 const NFD0 = 1 << 53;
27570 const NFD1 = 1 << 54;
27572 const E0PD0 = 1 << 55;
27574 const E0PD1 = 1 << 56;
27576 const TCMA0 = 1 << 57;
27578 const TCMA1 = 1 << 58;
27580 const DS = 1 << 59;
27582 const MTX0 = 1 << 60;
27584 const MTX1 = 1 << 61;
27586 }
27587}
27588
27589#[cfg(feature = "el1")]
27590impl TcrEl1 {
27591 pub const T0SZ_SHIFT: u32 = 0;
27593 pub const T0SZ_MASK: u64 = 0b111111;
27595 pub const EPD0_SHIFT: u32 = 7;
27597 pub const IRGN0_SHIFT: u32 = 8;
27599 pub const IRGN0_MASK: u64 = 0b11;
27601 pub const ORGN0_SHIFT: u32 = 10;
27603 pub const ORGN0_MASK: u64 = 0b11;
27605 pub const SH0_SHIFT: u32 = 12;
27607 pub const SH0_MASK: u64 = 0b11;
27609 pub const TG0_SHIFT: u32 = 14;
27611 pub const TG0_MASK: u64 = 0b11;
27613 pub const T1SZ_SHIFT: u32 = 16;
27615 pub const T1SZ_MASK: u64 = 0b111111;
27617 pub const A1_SHIFT: u32 = 22;
27619 pub const EPD1_SHIFT: u32 = 23;
27621 pub const IRGN1_SHIFT: u32 = 24;
27623 pub const IRGN1_MASK: u64 = 0b11;
27625 pub const ORGN1_SHIFT: u32 = 26;
27627 pub const ORGN1_MASK: u64 = 0b11;
27629 pub const SH1_SHIFT: u32 = 28;
27631 pub const SH1_MASK: u64 = 0b11;
27633 pub const TG1_SHIFT: u32 = 30;
27635 pub const TG1_MASK: u64 = 0b11;
27637 pub const IPS_SHIFT: u32 = 32;
27639 pub const IPS_MASK: u64 = 0b111;
27641 pub const AS_SHIFT: u32 = 36;
27643 pub const TBI0_SHIFT: u32 = 37;
27645 pub const TBI1_SHIFT: u32 = 38;
27647 pub const HA_SHIFT: u32 = 39;
27649 pub const HD_SHIFT: u32 = 40;
27651 pub const HPD0_SHIFT: u32 = 41;
27653 pub const HPD1_SHIFT: u32 = 42;
27655 pub const HWU059_SHIFT: u32 = 43;
27657 pub const HWU060_SHIFT: u32 = 44;
27659 pub const HWU061_SHIFT: u32 = 45;
27661 pub const HWU062_SHIFT: u32 = 46;
27663 pub const HWU159_SHIFT: u32 = 47;
27665 pub const HWU160_SHIFT: u32 = 48;
27667 pub const HWU161_SHIFT: u32 = 49;
27669 pub const HWU162_SHIFT: u32 = 50;
27671 pub const TBID0_SHIFT: u32 = 51;
27673 pub const TBID1_SHIFT: u32 = 52;
27675 pub const NFD0_SHIFT: u32 = 53;
27677 pub const NFD1_SHIFT: u32 = 54;
27679 pub const E0PD0_SHIFT: u32 = 55;
27681 pub const E0PD1_SHIFT: u32 = 56;
27683 pub const TCMA0_SHIFT: u32 = 57;
27685 pub const TCMA1_SHIFT: u32 = 58;
27687 pub const DS_SHIFT: u32 = 59;
27689 pub const MTX0_SHIFT: u32 = 60;
27691 pub const MTX1_SHIFT: u32 = 61;
27693
27694 pub const fn t0sz(self) -> u8 {
27696 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
27697 }
27698
27699 pub const fn set_t0sz(&mut self, value: u8) {
27701 let offset = Self::T0SZ_SHIFT;
27702 assert!(value & (Self::T0SZ_MASK as u8) == value);
27703 *self = Self::from_bits_retain(
27704 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
27705 );
27706 }
27707
27708 pub const fn with_t0sz(mut self, value: u8) -> Self {
27710 self.set_t0sz(value);
27711 self
27712 }
27713
27714 pub const fn irgn0(self) -> u8 {
27716 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
27717 }
27718
27719 pub const fn set_irgn0(&mut self, value: u8) {
27721 let offset = Self::IRGN0_SHIFT;
27722 assert!(value & (Self::IRGN0_MASK as u8) == value);
27723 *self = Self::from_bits_retain(
27724 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
27725 );
27726 }
27727
27728 pub const fn with_irgn0(mut self, value: u8) -> Self {
27730 self.set_irgn0(value);
27731 self
27732 }
27733
27734 pub const fn orgn0(self) -> u8 {
27736 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
27737 }
27738
27739 pub const fn set_orgn0(&mut self, value: u8) {
27741 let offset = Self::ORGN0_SHIFT;
27742 assert!(value & (Self::ORGN0_MASK as u8) == value);
27743 *self = Self::from_bits_retain(
27744 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
27745 );
27746 }
27747
27748 pub const fn with_orgn0(mut self, value: u8) -> Self {
27750 self.set_orgn0(value);
27751 self
27752 }
27753
27754 pub const fn sh0(self) -> u8 {
27756 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
27757 }
27758
27759 pub const fn set_sh0(&mut self, value: u8) {
27761 let offset = Self::SH0_SHIFT;
27762 assert!(value & (Self::SH0_MASK as u8) == value);
27763 *self = Self::from_bits_retain(
27764 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
27765 );
27766 }
27767
27768 pub const fn with_sh0(mut self, value: u8) -> Self {
27770 self.set_sh0(value);
27771 self
27772 }
27773
27774 pub const fn tg0(self) -> u8 {
27776 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
27777 }
27778
27779 pub const fn set_tg0(&mut self, value: u8) {
27781 let offset = Self::TG0_SHIFT;
27782 assert!(value & (Self::TG0_MASK as u8) == value);
27783 *self = Self::from_bits_retain(
27784 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
27785 );
27786 }
27787
27788 pub const fn with_tg0(mut self, value: u8) -> Self {
27790 self.set_tg0(value);
27791 self
27792 }
27793
27794 pub const fn t1sz(self) -> u8 {
27796 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
27797 }
27798
27799 pub const fn set_t1sz(&mut self, value: u8) {
27801 let offset = Self::T1SZ_SHIFT;
27802 assert!(value & (Self::T1SZ_MASK as u8) == value);
27803 *self = Self::from_bits_retain(
27804 (self.bits() & !(Self::T1SZ_MASK << offset)) | ((value as u64) << offset),
27805 );
27806 }
27807
27808 pub const fn with_t1sz(mut self, value: u8) -> Self {
27810 self.set_t1sz(value);
27811 self
27812 }
27813
27814 pub const fn irgn1(self) -> u8 {
27816 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
27817 }
27818
27819 pub const fn set_irgn1(&mut self, value: u8) {
27821 let offset = Self::IRGN1_SHIFT;
27822 assert!(value & (Self::IRGN1_MASK as u8) == value);
27823 *self = Self::from_bits_retain(
27824 (self.bits() & !(Self::IRGN1_MASK << offset)) | ((value as u64) << offset),
27825 );
27826 }
27827
27828 pub const fn with_irgn1(mut self, value: u8) -> Self {
27830 self.set_irgn1(value);
27831 self
27832 }
27833
27834 pub const fn orgn1(self) -> u8 {
27836 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
27837 }
27838
27839 pub const fn set_orgn1(&mut self, value: u8) {
27841 let offset = Self::ORGN1_SHIFT;
27842 assert!(value & (Self::ORGN1_MASK as u8) == value);
27843 *self = Self::from_bits_retain(
27844 (self.bits() & !(Self::ORGN1_MASK << offset)) | ((value as u64) << offset),
27845 );
27846 }
27847
27848 pub const fn with_orgn1(mut self, value: u8) -> Self {
27850 self.set_orgn1(value);
27851 self
27852 }
27853
27854 pub const fn sh1(self) -> u8 {
27856 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
27857 }
27858
27859 pub const fn set_sh1(&mut self, value: u8) {
27861 let offset = Self::SH1_SHIFT;
27862 assert!(value & (Self::SH1_MASK as u8) == value);
27863 *self = Self::from_bits_retain(
27864 (self.bits() & !(Self::SH1_MASK << offset)) | ((value as u64) << offset),
27865 );
27866 }
27867
27868 pub const fn with_sh1(mut self, value: u8) -> Self {
27870 self.set_sh1(value);
27871 self
27872 }
27873
27874 pub const fn tg1(self) -> u8 {
27876 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
27877 }
27878
27879 pub const fn set_tg1(&mut self, value: u8) {
27881 let offset = Self::TG1_SHIFT;
27882 assert!(value & (Self::TG1_MASK as u8) == value);
27883 *self = Self::from_bits_retain(
27884 (self.bits() & !(Self::TG1_MASK << offset)) | ((value as u64) << offset),
27885 );
27886 }
27887
27888 pub const fn with_tg1(mut self, value: u8) -> Self {
27890 self.set_tg1(value);
27891 self
27892 }
27893
27894 pub const fn ips(self) -> u8 {
27896 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
27897 }
27898
27899 pub const fn set_ips(&mut self, value: u8) {
27901 let offset = Self::IPS_SHIFT;
27902 assert!(value & (Self::IPS_MASK as u8) == value);
27903 *self = Self::from_bits_retain(
27904 (self.bits() & !(Self::IPS_MASK << offset)) | ((value as u64) << offset),
27905 );
27906 }
27907
27908 pub const fn with_ips(mut self, value: u8) -> Self {
27910 self.set_ips(value);
27911 self
27912 }
27913}
27914
27915#[cfg(feature = "el2")]
27916bitflags! {
27917 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27919 #[repr(transparent)]
27920 pub struct TcrEl2: u64 {
27921 const RES1 = 0b10000000100000000000000000000000;
27923 const EPD0 = 1 << 7;
27925 const TBI = 1 << 20;
27927 const A1 = 1 << 22;
27929 const EPD1 = 1 << 23;
27931 const HPD = 1 << 24;
27933 const HWU59 = 1 << 25;
27935 const HWU60 = 1 << 26;
27937 const HWU61 = 1 << 27;
27939 const HWU62 = 1 << 28;
27941 const TBID = 1 << 29;
27943 const TCMA = 1 << 30;
27945 const MTX = 1 << 33;
27947 const AS = 1 << 36;
27949 const TBI0 = 1 << 37;
27951 const TBI1 = 1 << 38;
27953 const HPD0 = 1 << 41;
27955 const HPD1 = 1 << 42;
27957 const HWU059 = 1 << 43;
27959 const HWU060 = 1 << 44;
27961 const HWU061 = 1 << 45;
27963 const HWU062 = 1 << 46;
27965 const HWU159 = 1 << 47;
27967 const HWU160 = 1 << 48;
27969 const HWU161 = 1 << 49;
27971 const HWU162 = 1 << 50;
27973 const TBID0 = 1 << 51;
27975 const TBID1 = 1 << 52;
27977 const NFD0 = 1 << 53;
27979 const TVAD = 1 << 53;
27981 const NFD1 = 1 << 54;
27983 const E0PD0 = 1 << 55;
27985 const E0PD1 = 1 << 56;
27987 const TCMA0 = 1 << 57;
27989 const TCMA1 = 1 << 58;
27991 const MTX0 = 1 << 60;
27993 const MTX1 = 1 << 61;
27995 }
27996}
27997
27998#[cfg(feature = "el2")]
27999impl TcrEl2 {
28000 pub const T0SZ_SHIFT: u32 = 0;
28002 pub const T0SZ_MASK: u64 = 0b111111;
28004 pub const EPD0_SHIFT: u32 = 7;
28006 pub const IRGN0_SHIFT: u32 = 8;
28008 pub const IRGN0_MASK: u64 = 0b11;
28010 pub const ORGN0_SHIFT: u32 = 10;
28012 pub const ORGN0_MASK: u64 = 0b11;
28014 pub const SH0_SHIFT: u32 = 12;
28016 pub const SH0_MASK: u64 = 0b11;
28018 pub const TG0_SHIFT: u32 = 14;
28020 pub const TG0_MASK: u64 = 0b11;
28022 pub const PS_SHIFT: u32 = 16;
28024 pub const PS_MASK: u64 = 0b111;
28026 pub const T1SZ_SHIFT: u32 = 16;
28028 pub const T1SZ_MASK: u64 = 0b111111;
28030 pub const TBI_SHIFT: u32 = 20;
28032 pub const A1_SHIFT: u32 = 22;
28034 pub const EPD1_SHIFT: u32 = 23;
28036 pub const HPD_SHIFT: u32 = 24;
28038 pub const IRGN1_SHIFT: u32 = 24;
28040 pub const IRGN1_MASK: u64 = 0b11;
28042 pub const HWU59_SHIFT: u32 = 25;
28044 pub const HWU60_SHIFT: u32 = 26;
28046 pub const ORGN1_SHIFT: u32 = 26;
28048 pub const ORGN1_MASK: u64 = 0b11;
28050 pub const HWU61_SHIFT: u32 = 27;
28052 pub const HWU62_SHIFT: u32 = 28;
28054 pub const SH1_SHIFT: u32 = 28;
28056 pub const SH1_MASK: u64 = 0b11;
28058 pub const TBID_SHIFT: u32 = 29;
28060 pub const TCMA_SHIFT: u32 = 30;
28062 pub const TG1_SHIFT: u32 = 30;
28064 pub const TG1_MASK: u64 = 0b11;
28066 pub const IPS_SHIFT: u32 = 32;
28068 pub const IPS_MASK: u64 = 0b111;
28070 pub const MTX_SHIFT: u32 = 33;
28072 pub const AS_SHIFT: u32 = 36;
28074 pub const TBI0_SHIFT: u32 = 37;
28076 pub const TBI1_SHIFT: u32 = 38;
28078 pub const HPD0_SHIFT: u32 = 41;
28080 pub const HPD1_SHIFT: u32 = 42;
28082 pub const HWU059_SHIFT: u32 = 43;
28084 pub const HWU060_SHIFT: u32 = 44;
28086 pub const HWU061_SHIFT: u32 = 45;
28088 pub const HWU062_SHIFT: u32 = 46;
28090 pub const HWU159_SHIFT: u32 = 47;
28092 pub const HWU160_SHIFT: u32 = 48;
28094 pub const VTB_SHIFT: u32 = 48;
28096 pub const VTB_MASK: u64 = 0b11111;
28098 pub const HWU161_SHIFT: u32 = 49;
28100 pub const HWU162_SHIFT: u32 = 50;
28102 pub const TBID0_SHIFT: u32 = 51;
28104 pub const TBID1_SHIFT: u32 = 52;
28106 pub const NFD0_SHIFT: u32 = 53;
28108 pub const TVAD_SHIFT: u32 = 53;
28110 pub const NFD1_SHIFT: u32 = 54;
28112 pub const E0PD0_SHIFT: u32 = 55;
28114 pub const E0PD1_SHIFT: u32 = 56;
28116 pub const TCMA0_SHIFT: u32 = 57;
28118 pub const TCMA1_SHIFT: u32 = 58;
28120 pub const MTX0_SHIFT: u32 = 60;
28122 pub const MTX1_SHIFT: u32 = 61;
28124
28125 pub const fn t0sz(self) -> u8 {
28127 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
28128 }
28129
28130 pub const fn set_t0sz(&mut self, value: u8) {
28132 let offset = Self::T0SZ_SHIFT;
28133 assert!(value & (Self::T0SZ_MASK as u8) == value);
28134 *self = Self::from_bits_retain(
28135 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
28136 );
28137 }
28138
28139 pub const fn with_t0sz(mut self, value: u8) -> Self {
28141 self.set_t0sz(value);
28142 self
28143 }
28144
28145 pub const fn irgn0(self) -> u8 {
28147 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
28148 }
28149
28150 pub const fn set_irgn0(&mut self, value: u8) {
28152 let offset = Self::IRGN0_SHIFT;
28153 assert!(value & (Self::IRGN0_MASK as u8) == value);
28154 *self = Self::from_bits_retain(
28155 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
28156 );
28157 }
28158
28159 pub const fn with_irgn0(mut self, value: u8) -> Self {
28161 self.set_irgn0(value);
28162 self
28163 }
28164
28165 pub const fn orgn0(self) -> u8 {
28167 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
28168 }
28169
28170 pub const fn set_orgn0(&mut self, value: u8) {
28172 let offset = Self::ORGN0_SHIFT;
28173 assert!(value & (Self::ORGN0_MASK as u8) == value);
28174 *self = Self::from_bits_retain(
28175 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
28176 );
28177 }
28178
28179 pub const fn with_orgn0(mut self, value: u8) -> Self {
28181 self.set_orgn0(value);
28182 self
28183 }
28184
28185 pub const fn sh0(self) -> u8 {
28187 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
28188 }
28189
28190 pub const fn set_sh0(&mut self, value: u8) {
28192 let offset = Self::SH0_SHIFT;
28193 assert!(value & (Self::SH0_MASK as u8) == value);
28194 *self = Self::from_bits_retain(
28195 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
28196 );
28197 }
28198
28199 pub const fn with_sh0(mut self, value: u8) -> Self {
28201 self.set_sh0(value);
28202 self
28203 }
28204
28205 pub const fn tg0(self) -> u8 {
28207 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
28208 }
28209
28210 pub const fn set_tg0(&mut self, value: u8) {
28212 let offset = Self::TG0_SHIFT;
28213 assert!(value & (Self::TG0_MASK as u8) == value);
28214 *self = Self::from_bits_retain(
28215 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
28216 );
28217 }
28218
28219 pub const fn with_tg0(mut self, value: u8) -> Self {
28221 self.set_tg0(value);
28222 self
28223 }
28224
28225 pub const fn ps(self) -> u8 {
28227 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
28228 }
28229
28230 pub const fn set_ps(&mut self, value: u8) {
28232 let offset = Self::PS_SHIFT;
28233 assert!(value & (Self::PS_MASK as u8) == value);
28234 *self = Self::from_bits_retain(
28235 (self.bits() & !(Self::PS_MASK << offset)) | ((value as u64) << offset),
28236 );
28237 }
28238
28239 pub const fn with_ps(mut self, value: u8) -> Self {
28241 self.set_ps(value);
28242 self
28243 }
28244
28245 pub const fn t1sz(self) -> u8 {
28247 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
28248 }
28249
28250 pub const fn set_t1sz(&mut self, value: u8) {
28252 let offset = Self::T1SZ_SHIFT;
28253 assert!(value & (Self::T1SZ_MASK as u8) == value);
28254 *self = Self::from_bits_retain(
28255 (self.bits() & !(Self::T1SZ_MASK << offset)) | ((value as u64) << offset),
28256 );
28257 }
28258
28259 pub const fn with_t1sz(mut self, value: u8) -> Self {
28261 self.set_t1sz(value);
28262 self
28263 }
28264
28265 pub const fn irgn1(self) -> u8 {
28267 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
28268 }
28269
28270 pub const fn set_irgn1(&mut self, value: u8) {
28272 let offset = Self::IRGN1_SHIFT;
28273 assert!(value & (Self::IRGN1_MASK as u8) == value);
28274 *self = Self::from_bits_retain(
28275 (self.bits() & !(Self::IRGN1_MASK << offset)) | ((value as u64) << offset),
28276 );
28277 }
28278
28279 pub const fn with_irgn1(mut self, value: u8) -> Self {
28281 self.set_irgn1(value);
28282 self
28283 }
28284
28285 pub const fn orgn1(self) -> u8 {
28287 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
28288 }
28289
28290 pub const fn set_orgn1(&mut self, value: u8) {
28292 let offset = Self::ORGN1_SHIFT;
28293 assert!(value & (Self::ORGN1_MASK as u8) == value);
28294 *self = Self::from_bits_retain(
28295 (self.bits() & !(Self::ORGN1_MASK << offset)) | ((value as u64) << offset),
28296 );
28297 }
28298
28299 pub const fn with_orgn1(mut self, value: u8) -> Self {
28301 self.set_orgn1(value);
28302 self
28303 }
28304
28305 pub const fn sh1(self) -> u8 {
28307 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
28308 }
28309
28310 pub const fn set_sh1(&mut self, value: u8) {
28312 let offset = Self::SH1_SHIFT;
28313 assert!(value & (Self::SH1_MASK as u8) == value);
28314 *self = Self::from_bits_retain(
28315 (self.bits() & !(Self::SH1_MASK << offset)) | ((value as u64) << offset),
28316 );
28317 }
28318
28319 pub const fn with_sh1(mut self, value: u8) -> Self {
28321 self.set_sh1(value);
28322 self
28323 }
28324
28325 pub const fn tg1(self) -> u8 {
28327 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
28328 }
28329
28330 pub const fn set_tg1(&mut self, value: u8) {
28332 let offset = Self::TG1_SHIFT;
28333 assert!(value & (Self::TG1_MASK as u8) == value);
28334 *self = Self::from_bits_retain(
28335 (self.bits() & !(Self::TG1_MASK << offset)) | ((value as u64) << offset),
28336 );
28337 }
28338
28339 pub const fn with_tg1(mut self, value: u8) -> Self {
28341 self.set_tg1(value);
28342 self
28343 }
28344
28345 pub const fn ips(self) -> u8 {
28347 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
28348 }
28349
28350 pub const fn set_ips(&mut self, value: u8) {
28352 let offset = Self::IPS_SHIFT;
28353 assert!(value & (Self::IPS_MASK as u8) == value);
28354 *self = Self::from_bits_retain(
28355 (self.bits() & !(Self::IPS_MASK << offset)) | ((value as u64) << offset),
28356 );
28357 }
28358
28359 pub const fn with_ips(mut self, value: u8) -> Self {
28361 self.set_ips(value);
28362 self
28363 }
28364
28365 pub const fn vtb(self) -> u8 {
28367 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
28368 }
28369
28370 pub const fn set_vtb(&mut self, value: u8) {
28372 let offset = Self::VTB_SHIFT;
28373 assert!(value & (Self::VTB_MASK as u8) == value);
28374 *self = Self::from_bits_retain(
28375 (self.bits() & !(Self::VTB_MASK << offset)) | ((value as u64) << offset),
28376 );
28377 }
28378
28379 pub const fn with_vtb(mut self, value: u8) -> Self {
28381 self.set_vtb(value);
28382 self
28383 }
28384}
28385
28386#[cfg(feature = "el3")]
28387bitflags! {
28388 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28390 #[repr(transparent)]
28391 pub struct TcrEl3: u64 {
28392 const RES1 = 0b10000000100000000000000000000000;
28394 const TBI = 1 << 20;
28396 const HA = 1 << 21;
28398 const HD = 1 << 22;
28400 const HPD = 1 << 24;
28402 const HWU59 = 1 << 25;
28404 const HWU60 = 1 << 26;
28406 const HWU61 = 1 << 27;
28408 const HWU62 = 1 << 28;
28410 const TBID = 1 << 29;
28412 const TCMA = 1 << 30;
28414 const DS = 1 << 32;
28416 const MTX = 1 << 33;
28418 const PNCH = 1 << 34;
28420 const PIE = 1 << 35;
28422 const POE = 1 << 36;
28424 const AIE = 1 << 37;
28426 const D128 = 1 << 38;
28428 const PTTWI = 1 << 41;
28430 const HAFT = 1 << 42;
28432 const DISCH0 = 1 << 43;
28434 const POE2F = 1 << 44;
28436 const TVAD = 1 << 53;
28438 }
28439}
28440
28441#[cfg(feature = "el3")]
28442impl TcrEl3 {
28443 pub const T0SZ_SHIFT: u32 = 0;
28445 pub const T0SZ_MASK: u64 = 0b111111;
28447 pub const IRGN0_SHIFT: u32 = 8;
28449 pub const IRGN0_MASK: u64 = 0b11;
28451 pub const ORGN0_SHIFT: u32 = 10;
28453 pub const ORGN0_MASK: u64 = 0b11;
28455 pub const SH0_SHIFT: u32 = 12;
28457 pub const SH0_MASK: u64 = 0b11;
28459 pub const TG0_SHIFT: u32 = 14;
28461 pub const TG0_MASK: u64 = 0b11;
28463 pub const PS_SHIFT: u32 = 16;
28465 pub const PS_MASK: u64 = 0b111;
28467 pub const TBI_SHIFT: u32 = 20;
28469 pub const HA_SHIFT: u32 = 21;
28471 pub const HD_SHIFT: u32 = 22;
28473 pub const HPD_SHIFT: u32 = 24;
28475 pub const HWU59_SHIFT: u32 = 25;
28477 pub const HWU60_SHIFT: u32 = 26;
28479 pub const HWU61_SHIFT: u32 = 27;
28481 pub const HWU62_SHIFT: u32 = 28;
28483 pub const TBID_SHIFT: u32 = 29;
28485 pub const TCMA_SHIFT: u32 = 30;
28487 pub const DS_SHIFT: u32 = 32;
28489 pub const MTX_SHIFT: u32 = 33;
28491 pub const PNCH_SHIFT: u32 = 34;
28493 pub const PIE_SHIFT: u32 = 35;
28495 pub const POE_SHIFT: u32 = 36;
28497 pub const AIE_SHIFT: u32 = 37;
28499 pub const D128_SHIFT: u32 = 38;
28501 pub const PTTWI_SHIFT: u32 = 41;
28503 pub const HAFT_SHIFT: u32 = 42;
28505 pub const DISCH0_SHIFT: u32 = 43;
28507 pub const POE2F_SHIFT: u32 = 44;
28509 pub const POIW_SHIFT: u32 = 45;
28511 pub const POIW_MASK: u64 = 0b111;
28513 pub const VTB_SHIFT: u32 = 48;
28515 pub const VTB_MASK: u64 = 0b11111;
28517 pub const TVAD_SHIFT: u32 = 53;
28519
28520 pub const fn t0sz(self) -> u8 {
28522 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
28523 }
28524
28525 pub const fn set_t0sz(&mut self, value: u8) {
28527 let offset = Self::T0SZ_SHIFT;
28528 assert!(value & (Self::T0SZ_MASK as u8) == value);
28529 *self = Self::from_bits_retain(
28530 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
28531 );
28532 }
28533
28534 pub const fn with_t0sz(mut self, value: u8) -> Self {
28536 self.set_t0sz(value);
28537 self
28538 }
28539
28540 pub const fn irgn0(self) -> u8 {
28542 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
28543 }
28544
28545 pub const fn set_irgn0(&mut self, value: u8) {
28547 let offset = Self::IRGN0_SHIFT;
28548 assert!(value & (Self::IRGN0_MASK as u8) == value);
28549 *self = Self::from_bits_retain(
28550 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
28551 );
28552 }
28553
28554 pub const fn with_irgn0(mut self, value: u8) -> Self {
28556 self.set_irgn0(value);
28557 self
28558 }
28559
28560 pub const fn orgn0(self) -> u8 {
28562 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
28563 }
28564
28565 pub const fn set_orgn0(&mut self, value: u8) {
28567 let offset = Self::ORGN0_SHIFT;
28568 assert!(value & (Self::ORGN0_MASK as u8) == value);
28569 *self = Self::from_bits_retain(
28570 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
28571 );
28572 }
28573
28574 pub const fn with_orgn0(mut self, value: u8) -> Self {
28576 self.set_orgn0(value);
28577 self
28578 }
28579
28580 pub const fn sh0(self) -> u8 {
28582 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
28583 }
28584
28585 pub const fn set_sh0(&mut self, value: u8) {
28587 let offset = Self::SH0_SHIFT;
28588 assert!(value & (Self::SH0_MASK as u8) == value);
28589 *self = Self::from_bits_retain(
28590 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
28591 );
28592 }
28593
28594 pub const fn with_sh0(mut self, value: u8) -> Self {
28596 self.set_sh0(value);
28597 self
28598 }
28599
28600 pub const fn tg0(self) -> u8 {
28602 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
28603 }
28604
28605 pub const fn set_tg0(&mut self, value: u8) {
28607 let offset = Self::TG0_SHIFT;
28608 assert!(value & (Self::TG0_MASK as u8) == value);
28609 *self = Self::from_bits_retain(
28610 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
28611 );
28612 }
28613
28614 pub const fn with_tg0(mut self, value: u8) -> Self {
28616 self.set_tg0(value);
28617 self
28618 }
28619
28620 pub const fn ps(self) -> u8 {
28622 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
28623 }
28624
28625 pub const fn set_ps(&mut self, value: u8) {
28627 let offset = Self::PS_SHIFT;
28628 assert!(value & (Self::PS_MASK as u8) == value);
28629 *self = Self::from_bits_retain(
28630 (self.bits() & !(Self::PS_MASK << offset)) | ((value as u64) << offset),
28631 );
28632 }
28633
28634 pub const fn with_ps(mut self, value: u8) -> Self {
28636 self.set_ps(value);
28637 self
28638 }
28639
28640 pub const fn poiw(self) -> u8 {
28642 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
28643 }
28644
28645 pub const fn set_poiw(&mut self, value: u8) {
28647 let offset = Self::POIW_SHIFT;
28648 assert!(value & (Self::POIW_MASK as u8) == value);
28649 *self = Self::from_bits_retain(
28650 (self.bits() & !(Self::POIW_MASK << offset)) | ((value as u64) << offset),
28651 );
28652 }
28653
28654 pub const fn with_poiw(mut self, value: u8) -> Self {
28656 self.set_poiw(value);
28657 self
28658 }
28659
28660 pub const fn vtb(self) -> u8 {
28662 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
28663 }
28664
28665 pub const fn set_vtb(&mut self, value: u8) {
28667 let offset = Self::VTB_SHIFT;
28668 assert!(value & (Self::VTB_MASK as u8) == value);
28669 *self = Self::from_bits_retain(
28670 (self.bits() & !(Self::VTB_MASK << offset)) | ((value as u64) << offset),
28671 );
28672 }
28673
28674 pub const fn with_vtb(mut self, value: u8) -> Self {
28676 self.set_vtb(value);
28677 self
28678 }
28679}
28680
28681#[cfg(feature = "el1")]
28682bitflags! {
28683 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28685 #[repr(transparent)]
28686 pub struct Tfsre0El1: u64 {
28687 const TF0 = 1 << 0;
28689 const TF1 = 1 << 1;
28691 }
28692}
28693
28694#[cfg(feature = "el1")]
28695impl Tfsre0El1 {
28696 pub const TF0_SHIFT: u32 = 0;
28698 pub const TF1_SHIFT: u32 = 1;
28700}
28701
28702#[cfg(feature = "el1")]
28703bitflags! {
28704 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28706 #[repr(transparent)]
28707 pub struct TfsrEl1: u64 {
28708 const TF0 = 1 << 0;
28710 const TF1 = 1 << 1;
28712 }
28713}
28714
28715#[cfg(feature = "el1")]
28716impl TfsrEl1 {
28717 pub const TF0_SHIFT: u32 = 0;
28719 pub const TF1_SHIFT: u32 = 1;
28721}
28722
28723#[cfg(feature = "el2")]
28724bitflags! {
28725 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28727 #[repr(transparent)]
28728 pub struct TfsrEl2: u64 {
28729 const TF0 = 1 << 0;
28731 const TF1 = 1 << 1;
28733 }
28734}
28735
28736#[cfg(feature = "el2")]
28737impl TfsrEl2 {
28738 pub const TF0_SHIFT: u32 = 0;
28740 pub const TF1_SHIFT: u32 = 1;
28742}
28743
28744bitflags! {
28745 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28747 #[repr(transparent)]
28748 pub struct Tlbtr: u32 {
28749 const NU = 1 << 0;
28751 }
28752}
28753
28754impl Tlbtr {
28755 pub const NU_SHIFT: u32 = 0;
28757}
28758
28759bitflags! {
28760 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28762 #[repr(transparent)]
28763 pub struct Tpidrprw: u32 {
28764 }
28765}
28766
28767impl Tpidrprw {
28768 pub const TID_SHIFT: u32 = 0;
28770 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
28772
28773 pub const fn tid(self) -> u32 {
28775 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
28776 }
28777
28778 pub const fn set_tid(&mut self, value: u32) {
28780 let offset = Self::TID_SHIFT;
28781 assert!(value & (Self::TID_MASK as u32) == value);
28782 *self = Self::from_bits_retain(
28783 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
28784 );
28785 }
28786
28787 pub const fn with_tid(mut self, value: u32) -> Self {
28789 self.set_tid(value);
28790 self
28791 }
28792}
28793
28794bitflags! {
28795 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28797 #[repr(transparent)]
28798 pub struct TpidrroEl0: u64 {
28799 }
28800}
28801
28802impl TpidrroEl0 {
28803 pub const THREADID_SHIFT: u32 = 0;
28805 pub const THREADID_MASK: u64 =
28807 0b1111111111111111111111111111111111111111111111111111111111111111;
28808
28809 pub const fn threadid(self) -> u64 {
28811 ((self.bits() >> Self::THREADID_SHIFT)
28812 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
28813 }
28814
28815 pub const fn set_threadid(&mut self, value: u64) {
28817 let offset = Self::THREADID_SHIFT;
28818 assert!(value & (Self::THREADID_MASK as u64) == value);
28819 *self = Self::from_bits_retain(
28820 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
28821 );
28822 }
28823
28824 pub const fn with_threadid(mut self, value: u64) -> Self {
28826 self.set_threadid(value);
28827 self
28828 }
28829}
28830
28831bitflags! {
28832 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28834 #[repr(transparent)]
28835 pub struct Tpidruro: u32 {
28836 }
28837}
28838
28839impl Tpidruro {
28840 pub const TID_SHIFT: u32 = 0;
28842 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
28844
28845 pub const fn tid(self) -> u32 {
28847 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
28848 }
28849
28850 pub const fn set_tid(&mut self, value: u32) {
28852 let offset = Self::TID_SHIFT;
28853 assert!(value & (Self::TID_MASK as u32) == value);
28854 *self = Self::from_bits_retain(
28855 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
28856 );
28857 }
28858
28859 pub const fn with_tid(mut self, value: u32) -> Self {
28861 self.set_tid(value);
28862 self
28863 }
28864}
28865
28866bitflags! {
28867 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28869 #[repr(transparent)]
28870 pub struct Tpidrurw: u32 {
28871 }
28872}
28873
28874impl Tpidrurw {
28875 pub const TID_SHIFT: u32 = 0;
28877 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
28879
28880 pub const fn tid(self) -> u32 {
28882 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
28883 }
28884
28885 pub const fn set_tid(&mut self, value: u32) {
28887 let offset = Self::TID_SHIFT;
28888 assert!(value & (Self::TID_MASK as u32) == value);
28889 *self = Self::from_bits_retain(
28890 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
28891 );
28892 }
28893
28894 pub const fn with_tid(mut self, value: u32) -> Self {
28896 self.set_tid(value);
28897 self
28898 }
28899}
28900
28901bitflags! {
28902 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28904 #[repr(transparent)]
28905 pub struct TpidrEl0: u64 {
28906 }
28907}
28908
28909impl TpidrEl0 {
28910 pub const THREADID_SHIFT: u32 = 0;
28912 pub const THREADID_MASK: u64 =
28914 0b1111111111111111111111111111111111111111111111111111111111111111;
28915
28916 pub const fn threadid(self) -> u64 {
28918 ((self.bits() >> Self::THREADID_SHIFT)
28919 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
28920 }
28921
28922 pub const fn set_threadid(&mut self, value: u64) {
28924 let offset = Self::THREADID_SHIFT;
28925 assert!(value & (Self::THREADID_MASK as u64) == value);
28926 *self = Self::from_bits_retain(
28927 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
28928 );
28929 }
28930
28931 pub const fn with_threadid(mut self, value: u64) -> Self {
28933 self.set_threadid(value);
28934 self
28935 }
28936}
28937
28938#[cfg(feature = "el1")]
28939bitflags! {
28940 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28942 #[repr(transparent)]
28943 pub struct TpidrEl1: u64 {
28944 }
28945}
28946
28947#[cfg(feature = "el1")]
28948impl TpidrEl1 {
28949 pub const THREADID_SHIFT: u32 = 0;
28951 pub const THREADID_MASK: u64 =
28953 0b1111111111111111111111111111111111111111111111111111111111111111;
28954
28955 pub const fn threadid(self) -> u64 {
28957 ((self.bits() >> Self::THREADID_SHIFT)
28958 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
28959 }
28960
28961 pub const fn set_threadid(&mut self, value: u64) {
28963 let offset = Self::THREADID_SHIFT;
28964 assert!(value & (Self::THREADID_MASK as u64) == value);
28965 *self = Self::from_bits_retain(
28966 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
28967 );
28968 }
28969
28970 pub const fn with_threadid(mut self, value: u64) -> Self {
28972 self.set_threadid(value);
28973 self
28974 }
28975}
28976
28977#[cfg(feature = "el2")]
28978bitflags! {
28979 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28981 #[repr(transparent)]
28982 pub struct TpidrEl2: u64 {
28983 }
28984}
28985
28986#[cfg(feature = "el2")]
28987impl TpidrEl2 {
28988 pub const THREADID_SHIFT: u32 = 0;
28990 pub const THREADID_MASK: u64 =
28992 0b1111111111111111111111111111111111111111111111111111111111111111;
28993
28994 pub const fn threadid(self) -> u64 {
28996 ((self.bits() >> Self::THREADID_SHIFT)
28997 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
28998 }
28999
29000 pub const fn set_threadid(&mut self, value: u64) {
29002 let offset = Self::THREADID_SHIFT;
29003 assert!(value & (Self::THREADID_MASK as u64) == value);
29004 *self = Self::from_bits_retain(
29005 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
29006 );
29007 }
29008
29009 pub const fn with_threadid(mut self, value: u64) -> Self {
29011 self.set_threadid(value);
29012 self
29013 }
29014}
29015
29016#[cfg(feature = "el3")]
29017bitflags! {
29018 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29020 #[repr(transparent)]
29021 pub struct TpidrEl3: u64 {
29022 }
29023}
29024
29025#[cfg(feature = "el3")]
29026impl TpidrEl3 {
29027 pub const THREADID_SHIFT: u32 = 0;
29029 pub const THREADID_MASK: u64 =
29031 0b1111111111111111111111111111111111111111111111111111111111111111;
29032
29033 pub const fn threadid(self) -> u64 {
29035 ((self.bits() >> Self::THREADID_SHIFT)
29036 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
29037 }
29038
29039 pub const fn set_threadid(&mut self, value: u64) {
29041 let offset = Self::THREADID_SHIFT;
29042 assert!(value & (Self::THREADID_MASK as u64) == value);
29043 *self = Self::from_bits_retain(
29044 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
29045 );
29046 }
29047
29048 pub const fn with_threadid(mut self, value: u64) -> Self {
29050 self.set_threadid(value);
29051 self
29052 }
29053}
29054
29055bitflags! {
29056 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29058 #[repr(transparent)]
29059 pub struct Trfcr: u32 {
29060 const E0TRE = 1 << 0;
29062 const E1TRE = 1 << 1;
29064 }
29065}
29066
29067impl Trfcr {
29068 pub const E0TRE_SHIFT: u32 = 0;
29070 pub const E1TRE_SHIFT: u32 = 1;
29072 pub const TS_SHIFT: u32 = 5;
29074 pub const TS_MASK: u32 = 0b11;
29076
29077 pub const fn ts(self) -> u8 {
29079 ((self.bits() >> Self::TS_SHIFT) & 0b11) as u8
29080 }
29081
29082 pub const fn set_ts(&mut self, value: u8) {
29084 let offset = Self::TS_SHIFT;
29085 assert!(value & (Self::TS_MASK as u8) == value);
29086 *self = Self::from_bits_retain(
29087 (self.bits() & !(Self::TS_MASK << offset)) | ((value as u32) << offset),
29088 );
29089 }
29090
29091 pub const fn with_ts(mut self, value: u8) -> Self {
29093 self.set_ts(value);
29094 self
29095 }
29096}
29097
29098bitflags! {
29099 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29101 #[repr(transparent)]
29102 pub struct Ttbcr: u32 {
29103 const PD0 = 1 << 4;
29105 const PD1 = 1 << 5;
29107 const T2E = 1 << 6;
29109 const EPD0 = 1 << 7;
29111 const A1 = 1 << 22;
29113 const EPD1 = 1 << 23;
29115 const EAE = 1 << 31;
29117 }
29118}
29119
29120impl Ttbcr {
29121 pub const N_SHIFT: u32 = 0;
29123 pub const N_MASK: u32 = 0b111;
29125 pub const T0SZ_SHIFT: u32 = 0;
29127 pub const T0SZ_MASK: u32 = 0b111;
29129 pub const PD0_SHIFT: u32 = 4;
29131 pub const PD1_SHIFT: u32 = 5;
29133 pub const T2E_SHIFT: u32 = 6;
29135 pub const EPD0_SHIFT: u32 = 7;
29137 pub const IRGN0_SHIFT: u32 = 8;
29139 pub const IRGN0_MASK: u32 = 0b11;
29141 pub const ORGN0_SHIFT: u32 = 10;
29143 pub const ORGN0_MASK: u32 = 0b11;
29145 pub const SH0_SHIFT: u32 = 12;
29147 pub const SH0_MASK: u32 = 0b11;
29149 pub const T1SZ_SHIFT: u32 = 16;
29151 pub const T1SZ_MASK: u32 = 0b111;
29153 pub const A1_SHIFT: u32 = 22;
29155 pub const EPD1_SHIFT: u32 = 23;
29157 pub const IRGN1_SHIFT: u32 = 24;
29159 pub const IRGN1_MASK: u32 = 0b11;
29161 pub const ORGN1_SHIFT: u32 = 26;
29163 pub const ORGN1_MASK: u32 = 0b11;
29165 pub const SH1_SHIFT: u32 = 28;
29167 pub const SH1_MASK: u32 = 0b11;
29169 pub const EAE_SHIFT: u32 = 31;
29171
29172 pub const fn n(self) -> u8 {
29174 ((self.bits() >> Self::N_SHIFT) & 0b111) as u8
29175 }
29176
29177 pub const fn set_n(&mut self, value: u8) {
29179 let offset = Self::N_SHIFT;
29180 assert!(value & (Self::N_MASK as u8) == value);
29181 *self = Self::from_bits_retain(
29182 (self.bits() & !(Self::N_MASK << offset)) | ((value as u32) << offset),
29183 );
29184 }
29185
29186 pub const fn with_n(mut self, value: u8) -> Self {
29188 self.set_n(value);
29189 self
29190 }
29191
29192 pub const fn t0sz(self) -> u8 {
29194 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111) as u8
29195 }
29196
29197 pub const fn set_t0sz(&mut self, value: u8) {
29199 let offset = Self::T0SZ_SHIFT;
29200 assert!(value & (Self::T0SZ_MASK as u8) == value);
29201 *self = Self::from_bits_retain(
29202 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u32) << offset),
29203 );
29204 }
29205
29206 pub const fn with_t0sz(mut self, value: u8) -> Self {
29208 self.set_t0sz(value);
29209 self
29210 }
29211
29212 pub const fn irgn0(self) -> u8 {
29214 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
29215 }
29216
29217 pub const fn set_irgn0(&mut self, value: u8) {
29219 let offset = Self::IRGN0_SHIFT;
29220 assert!(value & (Self::IRGN0_MASK as u8) == value);
29221 *self = Self::from_bits_retain(
29222 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u32) << offset),
29223 );
29224 }
29225
29226 pub const fn with_irgn0(mut self, value: u8) -> Self {
29228 self.set_irgn0(value);
29229 self
29230 }
29231
29232 pub const fn orgn0(self) -> u8 {
29234 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
29235 }
29236
29237 pub const fn set_orgn0(&mut self, value: u8) {
29239 let offset = Self::ORGN0_SHIFT;
29240 assert!(value & (Self::ORGN0_MASK as u8) == value);
29241 *self = Self::from_bits_retain(
29242 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u32) << offset),
29243 );
29244 }
29245
29246 pub const fn with_orgn0(mut self, value: u8) -> Self {
29248 self.set_orgn0(value);
29249 self
29250 }
29251
29252 pub const fn sh0(self) -> u8 {
29254 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
29255 }
29256
29257 pub const fn set_sh0(&mut self, value: u8) {
29259 let offset = Self::SH0_SHIFT;
29260 assert!(value & (Self::SH0_MASK as u8) == value);
29261 *self = Self::from_bits_retain(
29262 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u32) << offset),
29263 );
29264 }
29265
29266 pub const fn with_sh0(mut self, value: u8) -> Self {
29268 self.set_sh0(value);
29269 self
29270 }
29271
29272 pub const fn t1sz(self) -> u8 {
29274 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111) as u8
29275 }
29276
29277 pub const fn set_t1sz(&mut self, value: u8) {
29279 let offset = Self::T1SZ_SHIFT;
29280 assert!(value & (Self::T1SZ_MASK as u8) == value);
29281 *self = Self::from_bits_retain(
29282 (self.bits() & !(Self::T1SZ_MASK << offset)) | ((value as u32) << offset),
29283 );
29284 }
29285
29286 pub const fn with_t1sz(mut self, value: u8) -> Self {
29288 self.set_t1sz(value);
29289 self
29290 }
29291
29292 pub const fn irgn1(self) -> u8 {
29294 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
29295 }
29296
29297 pub const fn set_irgn1(&mut self, value: u8) {
29299 let offset = Self::IRGN1_SHIFT;
29300 assert!(value & (Self::IRGN1_MASK as u8) == value);
29301 *self = Self::from_bits_retain(
29302 (self.bits() & !(Self::IRGN1_MASK << offset)) | ((value as u32) << offset),
29303 );
29304 }
29305
29306 pub const fn with_irgn1(mut self, value: u8) -> Self {
29308 self.set_irgn1(value);
29309 self
29310 }
29311
29312 pub const fn orgn1(self) -> u8 {
29314 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
29315 }
29316
29317 pub const fn set_orgn1(&mut self, value: u8) {
29319 let offset = Self::ORGN1_SHIFT;
29320 assert!(value & (Self::ORGN1_MASK as u8) == value);
29321 *self = Self::from_bits_retain(
29322 (self.bits() & !(Self::ORGN1_MASK << offset)) | ((value as u32) << offset),
29323 );
29324 }
29325
29326 pub const fn with_orgn1(mut self, value: u8) -> Self {
29328 self.set_orgn1(value);
29329 self
29330 }
29331
29332 pub const fn sh1(self) -> u8 {
29334 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
29335 }
29336
29337 pub const fn set_sh1(&mut self, value: u8) {
29339 let offset = Self::SH1_SHIFT;
29340 assert!(value & (Self::SH1_MASK as u8) == value);
29341 *self = Self::from_bits_retain(
29342 (self.bits() & !(Self::SH1_MASK << offset)) | ((value as u32) << offset),
29343 );
29344 }
29345
29346 pub const fn with_sh1(mut self, value: u8) -> Self {
29348 self.set_sh1(value);
29349 self
29350 }
29351}
29352
29353bitflags! {
29354 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29356 #[repr(transparent)]
29357 pub struct Ttbcr2: u32 {
29358 const HPD0 = 1 << 9;
29360 const HPD1 = 1 << 10;
29362 const HWU059 = 1 << 11;
29364 const HWU060 = 1 << 12;
29366 const HWU061 = 1 << 13;
29368 const HWU062 = 1 << 14;
29370 const HWU159 = 1 << 15;
29372 const HWU160 = 1 << 16;
29374 const HWU161 = 1 << 17;
29376 const HWU162 = 1 << 18;
29378 }
29379}
29380
29381impl Ttbcr2 {
29382 pub const HPD0_SHIFT: u32 = 9;
29384 pub const HPD1_SHIFT: u32 = 10;
29386 pub const HWU059_SHIFT: u32 = 11;
29388 pub const HWU060_SHIFT: u32 = 12;
29390 pub const HWU061_SHIFT: u32 = 13;
29392 pub const HWU062_SHIFT: u32 = 14;
29394 pub const HWU159_SHIFT: u32 = 15;
29396 pub const HWU160_SHIFT: u32 = 16;
29398 pub const HWU161_SHIFT: u32 = 17;
29400 pub const HWU162_SHIFT: u32 = 18;
29402}
29403
29404bitflags! {
29405 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29407 #[repr(transparent)]
29408 pub struct Ttbr0: u64 {
29409 const CNP = 1 << 0;
29411 const S = 1 << 1;
29413 const IMP = 1 << 2;
29415 const NOS = 1 << 5;
29417 }
29418}
29419
29420impl Ttbr0 {
29421 pub const CNP_SHIFT: u32 = 0;
29423 pub const BADDR_SHIFT: u32 = 1;
29425 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
29427 pub const S_SHIFT: u32 = 1;
29429 pub const IMP_SHIFT: u32 = 2;
29431 pub const RGN_SHIFT: u32 = 3;
29433 pub const RGN_MASK: u64 = 0b11;
29435 pub const NOS_SHIFT: u32 = 5;
29437 pub const TTB0_SHIFT: u32 = 7;
29439 pub const TTB0_MASK: u64 = 0b1111111111111111111111111;
29441 pub const ASID_SHIFT: u32 = 48;
29443 pub const ASID_MASK: u64 = 0b11111111;
29445
29446 pub const fn baddr(self) -> u64 {
29448 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
29449 as u64
29450 }
29451
29452 pub const fn set_baddr(&mut self, value: u64) {
29454 let offset = Self::BADDR_SHIFT;
29455 assert!(value & (Self::BADDR_MASK as u64) == value);
29456 *self = Self::from_bits_retain(
29457 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
29458 );
29459 }
29460
29461 pub const fn with_baddr(mut self, value: u64) -> Self {
29463 self.set_baddr(value);
29464 self
29465 }
29466
29467 pub const fn rgn(self) -> u8 {
29469 ((self.bits() >> Self::RGN_SHIFT) & 0b11) as u8
29470 }
29471
29472 pub const fn set_rgn(&mut self, value: u8) {
29474 let offset = Self::RGN_SHIFT;
29475 assert!(value & (Self::RGN_MASK as u8) == value);
29476 *self = Self::from_bits_retain(
29477 (self.bits() & !(Self::RGN_MASK << offset)) | ((value as u64) << offset),
29478 );
29479 }
29480
29481 pub const fn with_rgn(mut self, value: u8) -> Self {
29483 self.set_rgn(value);
29484 self
29485 }
29486
29487 pub const fn ttb0(self) -> u32 {
29489 ((self.bits() >> Self::TTB0_SHIFT) & 0b1111111111111111111111111) as u32
29490 }
29491
29492 pub const fn set_ttb0(&mut self, value: u32) {
29494 let offset = Self::TTB0_SHIFT;
29495 assert!(value & (Self::TTB0_MASK as u32) == value);
29496 *self = Self::from_bits_retain(
29497 (self.bits() & !(Self::TTB0_MASK << offset)) | ((value as u64) << offset),
29498 );
29499 }
29500
29501 pub const fn with_ttb0(mut self, value: u32) -> Self {
29503 self.set_ttb0(value);
29504 self
29505 }
29506
29507 pub const fn asid(self) -> u8 {
29509 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
29510 }
29511
29512 pub const fn set_asid(&mut self, value: u8) {
29514 let offset = Self::ASID_SHIFT;
29515 assert!(value & (Self::ASID_MASK as u8) == value);
29516 *self = Self::from_bits_retain(
29517 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
29518 );
29519 }
29520
29521 pub const fn with_asid(mut self, value: u8) -> Self {
29523 self.set_asid(value);
29524 self
29525 }
29526}
29527
29528#[cfg(feature = "el1")]
29529bitflags! {
29530 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29532 #[repr(transparent)]
29533 pub struct Ttbr0El1: u64 {
29534 const CNP = 1 << 0;
29536 }
29537}
29538
29539#[cfg(feature = "el1")]
29540impl Ttbr0El1 {
29541 pub const CNP_SHIFT: u32 = 0;
29543 pub const BADDR_47_1_SHIFT: u32 = 1;
29545 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
29547 pub const SKL_SHIFT: u32 = 1;
29549 pub const SKL_MASK: u64 = 0b11;
29551 pub const ASID_SHIFT: u32 = 48;
29553 pub const ASID_MASK: u64 = 0b1111111111111111;
29555
29556 pub const fn baddr_47_1(self) -> u64 {
29558 ((self.bits() >> Self::BADDR_47_1_SHIFT)
29559 & 0b11111111111111111111111111111111111111111111111) as u64
29560 }
29561
29562 pub const fn set_baddr_47_1(&mut self, value: u64) {
29564 let offset = Self::BADDR_47_1_SHIFT;
29565 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
29566 *self = Self::from_bits_retain(
29567 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
29568 );
29569 }
29570
29571 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
29573 self.set_baddr_47_1(value);
29574 self
29575 }
29576
29577 pub const fn skl(self) -> u8 {
29579 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
29580 }
29581
29582 pub const fn set_skl(&mut self, value: u8) {
29584 let offset = Self::SKL_SHIFT;
29585 assert!(value & (Self::SKL_MASK as u8) == value);
29586 *self = Self::from_bits_retain(
29587 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
29588 );
29589 }
29590
29591 pub const fn with_skl(mut self, value: u8) -> Self {
29593 self.set_skl(value);
29594 self
29595 }
29596
29597 pub const fn asid(self) -> u16 {
29599 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
29600 }
29601
29602 pub const fn set_asid(&mut self, value: u16) {
29604 let offset = Self::ASID_SHIFT;
29605 assert!(value & (Self::ASID_MASK as u16) == value);
29606 *self = Self::from_bits_retain(
29607 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
29608 );
29609 }
29610
29611 pub const fn with_asid(mut self, value: u16) -> Self {
29613 self.set_asid(value);
29614 self
29615 }
29616}
29617
29618#[cfg(feature = "el2")]
29619bitflags! {
29620 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29622 #[repr(transparent)]
29623 pub struct Ttbr0El2: u64 {
29624 const CNP = 1 << 0;
29626 }
29627}
29628
29629#[cfg(feature = "el2")]
29630impl Ttbr0El2 {
29631 pub const CNP_SHIFT: u32 = 0;
29633 pub const BADDR_47_1_SHIFT: u32 = 1;
29635 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
29637 pub const SKL_SHIFT: u32 = 1;
29639 pub const SKL_MASK: u64 = 0b11;
29641 pub const ASID_SHIFT: u32 = 48;
29643 pub const ASID_MASK: u64 = 0b1111111111111111;
29645
29646 pub const fn baddr_47_1(self) -> u64 {
29648 ((self.bits() >> Self::BADDR_47_1_SHIFT)
29649 & 0b11111111111111111111111111111111111111111111111) as u64
29650 }
29651
29652 pub const fn set_baddr_47_1(&mut self, value: u64) {
29654 let offset = Self::BADDR_47_1_SHIFT;
29655 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
29656 *self = Self::from_bits_retain(
29657 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
29658 );
29659 }
29660
29661 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
29663 self.set_baddr_47_1(value);
29664 self
29665 }
29666
29667 pub const fn skl(self) -> u8 {
29669 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
29670 }
29671
29672 pub const fn set_skl(&mut self, value: u8) {
29674 let offset = Self::SKL_SHIFT;
29675 assert!(value & (Self::SKL_MASK as u8) == value);
29676 *self = Self::from_bits_retain(
29677 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
29678 );
29679 }
29680
29681 pub const fn with_skl(mut self, value: u8) -> Self {
29683 self.set_skl(value);
29684 self
29685 }
29686
29687 pub const fn asid(self) -> u16 {
29689 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
29690 }
29691
29692 pub const fn set_asid(&mut self, value: u16) {
29694 let offset = Self::ASID_SHIFT;
29695 assert!(value & (Self::ASID_MASK as u16) == value);
29696 *self = Self::from_bits_retain(
29697 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
29698 );
29699 }
29700
29701 pub const fn with_asid(mut self, value: u16) -> Self {
29703 self.set_asid(value);
29704 self
29705 }
29706}
29707
29708#[cfg(feature = "el3")]
29709bitflags! {
29710 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29712 #[repr(transparent)]
29713 pub struct Ttbr0El3: u64 {
29714 const CNP = 1 << 0;
29716 }
29717}
29718
29719#[cfg(feature = "el3")]
29720impl Ttbr0El3 {
29721 pub const CNP_SHIFT: u32 = 0;
29723 pub const SKL_SHIFT: u32 = 1;
29725 pub const SKL_MASK: u64 = 0b11;
29727
29728 pub const fn skl(self) -> u8 {
29730 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
29731 }
29732
29733 pub const fn set_skl(&mut self, value: u8) {
29735 let offset = Self::SKL_SHIFT;
29736 assert!(value & (Self::SKL_MASK as u8) == value);
29737 *self = Self::from_bits_retain(
29738 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
29739 );
29740 }
29741
29742 pub const fn with_skl(mut self, value: u8) -> Self {
29744 self.set_skl(value);
29745 self
29746 }
29747}
29748
29749bitflags! {
29750 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29752 #[repr(transparent)]
29753 pub struct Ttbr1: u64 {
29754 const CNP = 1 << 0;
29756 const S = 1 << 1;
29758 const IMP = 1 << 2;
29760 const NOS = 1 << 5;
29762 }
29763}
29764
29765impl Ttbr1 {
29766 pub const CNP_SHIFT: u32 = 0;
29768 pub const BADDR_SHIFT: u32 = 1;
29770 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
29772 pub const S_SHIFT: u32 = 1;
29774 pub const IMP_SHIFT: u32 = 2;
29776 pub const RGN_SHIFT: u32 = 3;
29778 pub const RGN_MASK: u64 = 0b11;
29780 pub const NOS_SHIFT: u32 = 5;
29782 pub const TTB1_SHIFT: u32 = 7;
29784 pub const TTB1_MASK: u64 = 0b1111111111111111111111111;
29786 pub const ASID_SHIFT: u32 = 48;
29788 pub const ASID_MASK: u64 = 0b11111111;
29790
29791 pub const fn baddr(self) -> u64 {
29793 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
29794 as u64
29795 }
29796
29797 pub const fn set_baddr(&mut self, value: u64) {
29799 let offset = Self::BADDR_SHIFT;
29800 assert!(value & (Self::BADDR_MASK as u64) == value);
29801 *self = Self::from_bits_retain(
29802 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
29803 );
29804 }
29805
29806 pub const fn with_baddr(mut self, value: u64) -> Self {
29808 self.set_baddr(value);
29809 self
29810 }
29811
29812 pub const fn rgn(self) -> u8 {
29814 ((self.bits() >> Self::RGN_SHIFT) & 0b11) as u8
29815 }
29816
29817 pub const fn set_rgn(&mut self, value: u8) {
29819 let offset = Self::RGN_SHIFT;
29820 assert!(value & (Self::RGN_MASK as u8) == value);
29821 *self = Self::from_bits_retain(
29822 (self.bits() & !(Self::RGN_MASK << offset)) | ((value as u64) << offset),
29823 );
29824 }
29825
29826 pub const fn with_rgn(mut self, value: u8) -> Self {
29828 self.set_rgn(value);
29829 self
29830 }
29831
29832 pub const fn ttb1(self) -> u32 {
29834 ((self.bits() >> Self::TTB1_SHIFT) & 0b1111111111111111111111111) as u32
29835 }
29836
29837 pub const fn set_ttb1(&mut self, value: u32) {
29839 let offset = Self::TTB1_SHIFT;
29840 assert!(value & (Self::TTB1_MASK as u32) == value);
29841 *self = Self::from_bits_retain(
29842 (self.bits() & !(Self::TTB1_MASK << offset)) | ((value as u64) << offset),
29843 );
29844 }
29845
29846 pub const fn with_ttb1(mut self, value: u32) -> Self {
29848 self.set_ttb1(value);
29849 self
29850 }
29851
29852 pub const fn asid(self) -> u8 {
29854 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
29855 }
29856
29857 pub const fn set_asid(&mut self, value: u8) {
29859 let offset = Self::ASID_SHIFT;
29860 assert!(value & (Self::ASID_MASK as u8) == value);
29861 *self = Self::from_bits_retain(
29862 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
29863 );
29864 }
29865
29866 pub const fn with_asid(mut self, value: u8) -> Self {
29868 self.set_asid(value);
29869 self
29870 }
29871}
29872
29873#[cfg(feature = "el1")]
29874bitflags! {
29875 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29877 #[repr(transparent)]
29878 pub struct Ttbr1El1: u64 {
29879 const CNP = 1 << 0;
29881 }
29882}
29883
29884#[cfg(feature = "el1")]
29885impl Ttbr1El1 {
29886 pub const CNP_SHIFT: u32 = 0;
29888 pub const BADDR_47_1_SHIFT: u32 = 1;
29890 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
29892 pub const SKL_SHIFT: u32 = 1;
29894 pub const SKL_MASK: u64 = 0b11;
29896 pub const ASID_SHIFT: u32 = 48;
29898 pub const ASID_MASK: u64 = 0b1111111111111111;
29900
29901 pub const fn baddr_47_1(self) -> u64 {
29903 ((self.bits() >> Self::BADDR_47_1_SHIFT)
29904 & 0b11111111111111111111111111111111111111111111111) as u64
29905 }
29906
29907 pub const fn set_baddr_47_1(&mut self, value: u64) {
29909 let offset = Self::BADDR_47_1_SHIFT;
29910 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
29911 *self = Self::from_bits_retain(
29912 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
29913 );
29914 }
29915
29916 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
29918 self.set_baddr_47_1(value);
29919 self
29920 }
29921
29922 pub const fn skl(self) -> u8 {
29924 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
29925 }
29926
29927 pub const fn set_skl(&mut self, value: u8) {
29929 let offset = Self::SKL_SHIFT;
29930 assert!(value & (Self::SKL_MASK as u8) == value);
29931 *self = Self::from_bits_retain(
29932 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
29933 );
29934 }
29935
29936 pub const fn with_skl(mut self, value: u8) -> Self {
29938 self.set_skl(value);
29939 self
29940 }
29941
29942 pub const fn asid(self) -> u16 {
29944 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
29945 }
29946
29947 pub const fn set_asid(&mut self, value: u16) {
29949 let offset = Self::ASID_SHIFT;
29950 assert!(value & (Self::ASID_MASK as u16) == value);
29951 *self = Self::from_bits_retain(
29952 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
29953 );
29954 }
29955
29956 pub const fn with_asid(mut self, value: u16) -> Self {
29958 self.set_asid(value);
29959 self
29960 }
29961}
29962
29963#[cfg(feature = "el2")]
29964bitflags! {
29965 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29967 #[repr(transparent)]
29968 pub struct Ttbr1El2: u64 {
29969 const CNP = 1 << 0;
29971 }
29972}
29973
29974#[cfg(feature = "el2")]
29975impl Ttbr1El2 {
29976 pub const CNP_SHIFT: u32 = 0;
29978 pub const BADDR_47_1_SHIFT: u32 = 1;
29980 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
29982 pub const SKL_SHIFT: u32 = 1;
29984 pub const SKL_MASK: u64 = 0b11;
29986 pub const ASID_SHIFT: u32 = 48;
29988 pub const ASID_MASK: u64 = 0b1111111111111111;
29990
29991 pub const fn baddr_47_1(self) -> u64 {
29993 ((self.bits() >> Self::BADDR_47_1_SHIFT)
29994 & 0b11111111111111111111111111111111111111111111111) as u64
29995 }
29996
29997 pub const fn set_baddr_47_1(&mut self, value: u64) {
29999 let offset = Self::BADDR_47_1_SHIFT;
30000 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
30001 *self = Self::from_bits_retain(
30002 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
30003 );
30004 }
30005
30006 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
30008 self.set_baddr_47_1(value);
30009 self
30010 }
30011
30012 pub const fn skl(self) -> u8 {
30014 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
30015 }
30016
30017 pub const fn set_skl(&mut self, value: u8) {
30019 let offset = Self::SKL_SHIFT;
30020 assert!(value & (Self::SKL_MASK as u8) == value);
30021 *self = Self::from_bits_retain(
30022 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
30023 );
30024 }
30025
30026 pub const fn with_skl(mut self, value: u8) -> Self {
30028 self.set_skl(value);
30029 self
30030 }
30031
30032 pub const fn asid(self) -> u16 {
30034 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
30035 }
30036
30037 pub const fn set_asid(&mut self, value: u16) {
30039 let offset = Self::ASID_SHIFT;
30040 assert!(value & (Self::ASID_MASK as u16) == value);
30041 *self = Self::from_bits_retain(
30042 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
30043 );
30044 }
30045
30046 pub const fn with_asid(mut self, value: u16) -> Self {
30048 self.set_asid(value);
30049 self
30050 }
30051}
30052
30053bitflags! {
30054 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30056 #[repr(transparent)]
30057 pub struct Vbar: u32 {
30058 }
30059}
30060
30061impl Vbar {
30062 pub const VBA_SHIFT: u32 = 5;
30064 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
30066
30067 pub const fn vba(self) -> u32 {
30069 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
30070 }
30071
30072 pub const fn set_vba(&mut self, value: u32) {
30074 let offset = Self::VBA_SHIFT;
30075 assert!(value & (Self::VBA_MASK as u32) == value);
30076 *self = Self::from_bits_retain(
30077 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u32) << offset),
30078 );
30079 }
30080
30081 pub const fn with_vba(mut self, value: u32) -> Self {
30083 self.set_vba(value);
30084 self
30085 }
30086}
30087
30088#[cfg(feature = "el1")]
30089bitflags! {
30090 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30092 #[repr(transparent)]
30093 pub struct VbarEl1: u64 {
30094 const UT = 1 << 0;
30096 }
30097}
30098
30099#[cfg(feature = "el1")]
30100impl VbarEl1 {
30101 pub const UT_SHIFT: u32 = 0;
30103 pub const VBA_SHIFT: u32 = 11;
30105 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
30107
30108 pub const fn vba(self) -> u64 {
30110 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
30111 as u64
30112 }
30113
30114 pub const fn set_vba(&mut self, value: u64) {
30116 let offset = Self::VBA_SHIFT;
30117 assert!(value & (Self::VBA_MASK as u64) == value);
30118 *self = Self::from_bits_retain(
30119 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u64) << offset),
30120 );
30121 }
30122
30123 pub const fn with_vba(mut self, value: u64) -> Self {
30125 self.set_vba(value);
30126 self
30127 }
30128}
30129
30130#[cfg(feature = "el2")]
30131bitflags! {
30132 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30134 #[repr(transparent)]
30135 pub struct VbarEl2: u64 {
30136 const UT = 1 << 0;
30138 }
30139}
30140
30141#[cfg(feature = "el2")]
30142impl VbarEl2 {
30143 pub const UT_SHIFT: u32 = 0;
30145 pub const VBA_SHIFT: u32 = 11;
30147 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
30149
30150 pub const fn vba(self) -> u64 {
30152 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
30153 as u64
30154 }
30155
30156 pub const fn set_vba(&mut self, value: u64) {
30158 let offset = Self::VBA_SHIFT;
30159 assert!(value & (Self::VBA_MASK as u64) == value);
30160 *self = Self::from_bits_retain(
30161 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u64) << offset),
30162 );
30163 }
30164
30165 pub const fn with_vba(mut self, value: u64) -> Self {
30167 self.set_vba(value);
30168 self
30169 }
30170}
30171
30172bitflags! {
30173 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30175 #[repr(transparent)]
30176 pub struct Vdfsr: u32 {
30177 const EXT = 1 << 12;
30179 }
30180}
30181
30182impl Vdfsr {
30183 pub const EXT_SHIFT: u32 = 12;
30185 pub const AET_SHIFT: u32 = 14;
30187 pub const AET_MASK: u32 = 0b11;
30189
30190 pub const fn aet(self) -> u8 {
30192 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
30193 }
30194
30195 pub const fn set_aet(&mut self, value: u8) {
30197 let offset = Self::AET_SHIFT;
30198 assert!(value & (Self::AET_MASK as u8) == value);
30199 *self = Self::from_bits_retain(
30200 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u32) << offset),
30201 );
30202 }
30203
30204 pub const fn with_aet(mut self, value: u8) -> Self {
30206 self.set_aet(value);
30207 self
30208 }
30209}
30210
30211bitflags! {
30212 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30214 #[repr(transparent)]
30215 pub struct Vdisr: u32 {
30216 const LPAE = 1 << 9;
30218 const EXT = 1 << 12;
30220 const A = 1 << 31;
30222 }
30223}
30224
30225impl Vdisr {
30226 pub const STATUS_SHIFT: u32 = 0;
30228 pub const STATUS_MASK: u32 = 0b111111;
30230 pub const LPAE_SHIFT: u32 = 9;
30232 pub const EXT_SHIFT: u32 = 12;
30234 pub const AET_SHIFT: u32 = 14;
30236 pub const AET_MASK: u32 = 0b11;
30238 pub const A_SHIFT: u32 = 31;
30240
30241 pub const fn status(self) -> u8 {
30243 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
30244 }
30245
30246 pub const fn set_status(&mut self, value: u8) {
30248 let offset = Self::STATUS_SHIFT;
30249 assert!(value & (Self::STATUS_MASK as u8) == value);
30250 *self = Self::from_bits_retain(
30251 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
30252 );
30253 }
30254
30255 pub const fn with_status(mut self, value: u8) -> Self {
30257 self.set_status(value);
30258 self
30259 }
30260
30261 pub const fn aet(self) -> u8 {
30263 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
30264 }
30265
30266 pub const fn set_aet(&mut self, value: u8) {
30268 let offset = Self::AET_SHIFT;
30269 assert!(value & (Self::AET_MASK as u8) == value);
30270 *self = Self::from_bits_retain(
30271 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u32) << offset),
30272 );
30273 }
30274
30275 pub const fn with_aet(mut self, value: u8) -> Self {
30277 self.set_aet(value);
30278 self
30279 }
30280}
30281
30282#[cfg(feature = "el2")]
30283bitflags! {
30284 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30286 #[repr(transparent)]
30287 pub struct VdisrEl2: u64 {
30288 const LPAE = 1 << 9;
30290 const EXT = 1 << 12;
30292 const IDS = 1 << 24;
30294 const A = 1 << 31;
30296 }
30297}
30298
30299#[cfg(feature = "el2")]
30300impl VdisrEl2 {
30301 pub const ISS_SHIFT: u32 = 0;
30303 pub const ISS_MASK: u64 = 0b111111111111111111111111;
30305 pub const STATUS_SHIFT: u32 = 0;
30307 pub const STATUS_MASK: u64 = 0b111111;
30309 pub const LPAE_SHIFT: u32 = 9;
30311 pub const EXT_SHIFT: u32 = 12;
30313 pub const AET_SHIFT: u32 = 14;
30315 pub const AET_MASK: u64 = 0b11;
30317 pub const IDS_SHIFT: u32 = 24;
30319 pub const A_SHIFT: u32 = 31;
30321
30322 pub const fn iss(self) -> u32 {
30324 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
30325 }
30326
30327 pub const fn set_iss(&mut self, value: u32) {
30329 let offset = Self::ISS_SHIFT;
30330 assert!(value & (Self::ISS_MASK as u32) == value);
30331 *self = Self::from_bits_retain(
30332 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
30333 );
30334 }
30335
30336 pub const fn with_iss(mut self, value: u32) -> Self {
30338 self.set_iss(value);
30339 self
30340 }
30341
30342 pub const fn status(self) -> u8 {
30344 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
30345 }
30346
30347 pub const fn set_status(&mut self, value: u8) {
30349 let offset = Self::STATUS_SHIFT;
30350 assert!(value & (Self::STATUS_MASK as u8) == value);
30351 *self = Self::from_bits_retain(
30352 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u64) << offset),
30353 );
30354 }
30355
30356 pub const fn with_status(mut self, value: u8) -> Self {
30358 self.set_status(value);
30359 self
30360 }
30361
30362 pub const fn aet(self) -> u8 {
30364 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
30365 }
30366
30367 pub const fn set_aet(&mut self, value: u8) {
30369 let offset = Self::AET_SHIFT;
30370 assert!(value & (Self::AET_MASK as u8) == value);
30371 *self = Self::from_bits_retain(
30372 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u64) << offset),
30373 );
30374 }
30375
30376 pub const fn with_aet(mut self, value: u8) -> Self {
30378 self.set_aet(value);
30379 self
30380 }
30381}
30382
30383bitflags! {
30384 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30386 #[repr(transparent)]
30387 pub struct Vmpidr: u32 {
30388 const MT = 1 << 24;
30390 const U = 1 << 30;
30392 const M = 1 << 31;
30394 }
30395}
30396
30397impl Vmpidr {
30398 pub const AFF0_SHIFT: u32 = 0;
30400 pub const AFF0_MASK: u32 = 0b11111111;
30402 pub const AFF1_SHIFT: u32 = 8;
30404 pub const AFF1_MASK: u32 = 0b11111111;
30406 pub const AFF2_SHIFT: u32 = 16;
30408 pub const AFF2_MASK: u32 = 0b11111111;
30410 pub const MT_SHIFT: u32 = 24;
30412 pub const U_SHIFT: u32 = 30;
30414 pub const M_SHIFT: u32 = 31;
30416
30417 pub const fn aff0(self) -> u8 {
30419 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
30420 }
30421
30422 pub const fn set_aff0(&mut self, value: u8) {
30424 let offset = Self::AFF0_SHIFT;
30425 assert!(value & (Self::AFF0_MASK as u8) == value);
30426 *self = Self::from_bits_retain(
30427 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u32) << offset),
30428 );
30429 }
30430
30431 pub const fn with_aff0(mut self, value: u8) -> Self {
30433 self.set_aff0(value);
30434 self
30435 }
30436
30437 pub const fn aff1(self) -> u8 {
30439 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
30440 }
30441
30442 pub const fn set_aff1(&mut self, value: u8) {
30444 let offset = Self::AFF1_SHIFT;
30445 assert!(value & (Self::AFF1_MASK as u8) == value);
30446 *self = Self::from_bits_retain(
30447 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u32) << offset),
30448 );
30449 }
30450
30451 pub const fn with_aff1(mut self, value: u8) -> Self {
30453 self.set_aff1(value);
30454 self
30455 }
30456
30457 pub const fn aff2(self) -> u8 {
30459 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
30460 }
30461
30462 pub const fn set_aff2(&mut self, value: u8) {
30464 let offset = Self::AFF2_SHIFT;
30465 assert!(value & (Self::AFF2_MASK as u8) == value);
30466 *self = Self::from_bits_retain(
30467 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u32) << offset),
30468 );
30469 }
30470
30471 pub const fn with_aff2(mut self, value: u8) -> Self {
30473 self.set_aff2(value);
30474 self
30475 }
30476}
30477
30478#[cfg(feature = "el2")]
30479bitflags! {
30480 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30482 #[repr(transparent)]
30483 pub struct VmpidrEl2: u64 {
30484 const RES1 = 0b10000000000000000000000000000000;
30486 const MT = 1 << 24;
30488 const U = 1 << 30;
30490 }
30491}
30492
30493#[cfg(feature = "el2")]
30494impl VmpidrEl2 {
30495 pub const AFF0_SHIFT: u32 = 0;
30497 pub const AFF0_MASK: u64 = 0b11111111;
30499 pub const AFF1_SHIFT: u32 = 8;
30501 pub const AFF1_MASK: u64 = 0b11111111;
30503 pub const AFF2_SHIFT: u32 = 16;
30505 pub const AFF2_MASK: u64 = 0b11111111;
30507 pub const MT_SHIFT: u32 = 24;
30509 pub const U_SHIFT: u32 = 30;
30511 pub const AFF3_SHIFT: u32 = 32;
30513 pub const AFF3_MASK: u64 = 0b11111111;
30515
30516 pub const fn aff0(self) -> u8 {
30518 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
30519 }
30520
30521 pub const fn set_aff0(&mut self, value: u8) {
30523 let offset = Self::AFF0_SHIFT;
30524 assert!(value & (Self::AFF0_MASK as u8) == value);
30525 *self = Self::from_bits_retain(
30526 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u64) << offset),
30527 );
30528 }
30529
30530 pub const fn with_aff0(mut self, value: u8) -> Self {
30532 self.set_aff0(value);
30533 self
30534 }
30535
30536 pub const fn aff1(self) -> u8 {
30538 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
30539 }
30540
30541 pub const fn set_aff1(&mut self, value: u8) {
30543 let offset = Self::AFF1_SHIFT;
30544 assert!(value & (Self::AFF1_MASK as u8) == value);
30545 *self = Self::from_bits_retain(
30546 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
30547 );
30548 }
30549
30550 pub const fn with_aff1(mut self, value: u8) -> Self {
30552 self.set_aff1(value);
30553 self
30554 }
30555
30556 pub const fn aff2(self) -> u8 {
30558 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
30559 }
30560
30561 pub const fn set_aff2(&mut self, value: u8) {
30563 let offset = Self::AFF2_SHIFT;
30564 assert!(value & (Self::AFF2_MASK as u8) == value);
30565 *self = Self::from_bits_retain(
30566 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
30567 );
30568 }
30569
30570 pub const fn with_aff2(mut self, value: u8) -> Self {
30572 self.set_aff2(value);
30573 self
30574 }
30575
30576 pub const fn aff3(self) -> u8 {
30578 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
30579 }
30580
30581 pub const fn set_aff3(&mut self, value: u8) {
30583 let offset = Self::AFF3_SHIFT;
30584 assert!(value & (Self::AFF3_MASK as u8) == value);
30585 *self = Self::from_bits_retain(
30586 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
30587 );
30588 }
30589
30590 pub const fn with_aff3(mut self, value: u8) -> Self {
30592 self.set_aff3(value);
30593 self
30594 }
30595}
30596
30597bitflags! {
30598 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30600 #[repr(transparent)]
30601 pub struct Vpidr: u32 {
30602 }
30603}
30604
30605impl Vpidr {
30606 pub const REVISION_SHIFT: u32 = 0;
30608 pub const REVISION_MASK: u32 = 0b1111;
30610 pub const PARTNUM_SHIFT: u32 = 4;
30612 pub const PARTNUM_MASK: u32 = 0b111111111111;
30614 pub const ARCHITECTURE_SHIFT: u32 = 16;
30616 pub const ARCHITECTURE_MASK: u32 = 0b1111;
30618 pub const VARIANT_SHIFT: u32 = 20;
30620 pub const VARIANT_MASK: u32 = 0b1111;
30622 pub const IMPLEMENTER_SHIFT: u32 = 24;
30624 pub const IMPLEMENTER_MASK: u32 = 0b11111111;
30626
30627 pub const fn revision(self) -> u8 {
30629 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
30630 }
30631
30632 pub const fn set_revision(&mut self, value: u8) {
30634 let offset = Self::REVISION_SHIFT;
30635 assert!(value & (Self::REVISION_MASK as u8) == value);
30636 *self = Self::from_bits_retain(
30637 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u32) << offset),
30638 );
30639 }
30640
30641 pub const fn with_revision(mut self, value: u8) -> Self {
30643 self.set_revision(value);
30644 self
30645 }
30646
30647 pub const fn partnum(self) -> u16 {
30649 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
30650 }
30651
30652 pub const fn set_partnum(&mut self, value: u16) {
30654 let offset = Self::PARTNUM_SHIFT;
30655 assert!(value & (Self::PARTNUM_MASK as u16) == value);
30656 *self = Self::from_bits_retain(
30657 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u32) << offset),
30658 );
30659 }
30660
30661 pub const fn with_partnum(mut self, value: u16) -> Self {
30663 self.set_partnum(value);
30664 self
30665 }
30666
30667 pub const fn architecture(self) -> u8 {
30669 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
30670 }
30671
30672 pub const fn set_architecture(&mut self, value: u8) {
30674 let offset = Self::ARCHITECTURE_SHIFT;
30675 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
30676 *self = Self::from_bits_retain(
30677 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u32) << offset),
30678 );
30679 }
30680
30681 pub const fn with_architecture(mut self, value: u8) -> Self {
30683 self.set_architecture(value);
30684 self
30685 }
30686
30687 pub const fn variant(self) -> u8 {
30689 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
30690 }
30691
30692 pub const fn set_variant(&mut self, value: u8) {
30694 let offset = Self::VARIANT_SHIFT;
30695 assert!(value & (Self::VARIANT_MASK as u8) == value);
30696 *self = Self::from_bits_retain(
30697 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u32) << offset),
30698 );
30699 }
30700
30701 pub const fn with_variant(mut self, value: u8) -> Self {
30703 self.set_variant(value);
30704 self
30705 }
30706
30707 pub const fn implementer(self) -> u8 {
30709 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
30710 }
30711
30712 pub const fn set_implementer(&mut self, value: u8) {
30714 let offset = Self::IMPLEMENTER_SHIFT;
30715 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
30716 *self = Self::from_bits_retain(
30717 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u32) << offset),
30718 );
30719 }
30720
30721 pub const fn with_implementer(mut self, value: u8) -> Self {
30723 self.set_implementer(value);
30724 self
30725 }
30726}
30727
30728#[cfg(feature = "el2")]
30729bitflags! {
30730 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30732 #[repr(transparent)]
30733 pub struct VpidrEl2: u64 {
30734 }
30735}
30736
30737#[cfg(feature = "el2")]
30738impl VpidrEl2 {
30739 pub const REVISION_SHIFT: u32 = 0;
30741 pub const REVISION_MASK: u64 = 0b1111;
30743 pub const PARTNUM_SHIFT: u32 = 4;
30745 pub const PARTNUM_MASK: u64 = 0b111111111111;
30747 pub const ARCHITECTURE_SHIFT: u32 = 16;
30749 pub const ARCHITECTURE_MASK: u64 = 0b1111;
30751 pub const VARIANT_SHIFT: u32 = 20;
30753 pub const VARIANT_MASK: u64 = 0b1111;
30755 pub const IMPLEMENTER_SHIFT: u32 = 24;
30757 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
30759
30760 pub const fn revision(self) -> u8 {
30762 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
30763 }
30764
30765 pub const fn set_revision(&mut self, value: u8) {
30767 let offset = Self::REVISION_SHIFT;
30768 assert!(value & (Self::REVISION_MASK as u8) == value);
30769 *self = Self::from_bits_retain(
30770 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u64) << offset),
30771 );
30772 }
30773
30774 pub const fn with_revision(mut self, value: u8) -> Self {
30776 self.set_revision(value);
30777 self
30778 }
30779
30780 pub const fn partnum(self) -> u16 {
30782 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
30783 }
30784
30785 pub const fn set_partnum(&mut self, value: u16) {
30787 let offset = Self::PARTNUM_SHIFT;
30788 assert!(value & (Self::PARTNUM_MASK as u16) == value);
30789 *self = Self::from_bits_retain(
30790 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u64) << offset),
30791 );
30792 }
30793
30794 pub const fn with_partnum(mut self, value: u16) -> Self {
30796 self.set_partnum(value);
30797 self
30798 }
30799
30800 pub const fn architecture(self) -> u8 {
30802 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
30803 }
30804
30805 pub const fn set_architecture(&mut self, value: u8) {
30807 let offset = Self::ARCHITECTURE_SHIFT;
30808 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
30809 *self = Self::from_bits_retain(
30810 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u64) << offset),
30811 );
30812 }
30813
30814 pub const fn with_architecture(mut self, value: u8) -> Self {
30816 self.set_architecture(value);
30817 self
30818 }
30819
30820 pub const fn variant(self) -> u8 {
30822 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
30823 }
30824
30825 pub const fn set_variant(&mut self, value: u8) {
30827 let offset = Self::VARIANT_SHIFT;
30828 assert!(value & (Self::VARIANT_MASK as u8) == value);
30829 *self = Self::from_bits_retain(
30830 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u64) << offset),
30831 );
30832 }
30833
30834 pub const fn with_variant(mut self, value: u8) -> Self {
30836 self.set_variant(value);
30837 self
30838 }
30839
30840 pub const fn implementer(self) -> u8 {
30842 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
30843 }
30844
30845 pub const fn set_implementer(&mut self, value: u8) {
30847 let offset = Self::IMPLEMENTER_SHIFT;
30848 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
30849 *self = Self::from_bits_retain(
30850 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u64) << offset),
30851 );
30852 }
30853
30854 pub const fn with_implementer(mut self, value: u8) -> Self {
30856 self.set_implementer(value);
30857 self
30858 }
30859}
30860
30861#[cfg(feature = "el2")]
30862bitflags! {
30863 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30865 #[repr(transparent)]
30866 pub struct VsesrEl2: u64 {
30867 const EXT = 1 << 12;
30869 const IDS = 1 << 24;
30871 }
30872}
30873
30874#[cfg(feature = "el2")]
30875impl VsesrEl2 {
30876 pub const ISS_SHIFT: u32 = 0;
30878 pub const ISS_MASK: u64 = 0b111111111111111111111111;
30880 pub const EXT_SHIFT: u32 = 12;
30882 pub const AET_SHIFT: u32 = 14;
30884 pub const AET_MASK: u64 = 0b11;
30886 pub const IDS_SHIFT: u32 = 24;
30888
30889 pub const fn iss(self) -> u32 {
30891 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
30892 }
30893
30894 pub const fn set_iss(&mut self, value: u32) {
30896 let offset = Self::ISS_SHIFT;
30897 assert!(value & (Self::ISS_MASK as u32) == value);
30898 *self = Self::from_bits_retain(
30899 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
30900 );
30901 }
30902
30903 pub const fn with_iss(mut self, value: u32) -> Self {
30905 self.set_iss(value);
30906 self
30907 }
30908
30909 pub const fn aet(self) -> u8 {
30911 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
30912 }
30913
30914 pub const fn set_aet(&mut self, value: u8) {
30916 let offset = Self::AET_SHIFT;
30917 assert!(value & (Self::AET_MASK as u8) == value);
30918 *self = Self::from_bits_retain(
30919 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u64) << offset),
30920 );
30921 }
30922
30923 pub const fn with_aet(mut self, value: u8) -> Self {
30925 self.set_aet(value);
30926 self
30927 }
30928}
30929
30930bitflags! {
30931 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30933 #[repr(transparent)]
30934 pub struct Vtcr: u32 {
30935 const RES1 = 0b10000000000000000000000000000000;
30937 const S = 1 << 4;
30939 const HWU59 = 1 << 25;
30941 const HWU60 = 1 << 26;
30943 const HWU61 = 1 << 27;
30945 const HWU62 = 1 << 28;
30947 }
30948}
30949
30950impl Vtcr {
30951 pub const T0SZ_SHIFT: u32 = 0;
30953 pub const T0SZ_MASK: u32 = 0b1111;
30955 pub const S_SHIFT: u32 = 4;
30957 pub const SL0_SHIFT: u32 = 6;
30959 pub const SL0_MASK: u32 = 0b11;
30961 pub const IRGN0_SHIFT: u32 = 8;
30963 pub const IRGN0_MASK: u32 = 0b11;
30965 pub const ORGN0_SHIFT: u32 = 10;
30967 pub const ORGN0_MASK: u32 = 0b11;
30969 pub const SH0_SHIFT: u32 = 12;
30971 pub const SH0_MASK: u32 = 0b11;
30973 pub const HWU59_SHIFT: u32 = 25;
30975 pub const HWU60_SHIFT: u32 = 26;
30977 pub const HWU61_SHIFT: u32 = 27;
30979 pub const HWU62_SHIFT: u32 = 28;
30981
30982 pub const fn t0sz(self) -> u8 {
30984 ((self.bits() >> Self::T0SZ_SHIFT) & 0b1111) as u8
30985 }
30986
30987 pub const fn set_t0sz(&mut self, value: u8) {
30989 let offset = Self::T0SZ_SHIFT;
30990 assert!(value & (Self::T0SZ_MASK as u8) == value);
30991 *self = Self::from_bits_retain(
30992 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u32) << offset),
30993 );
30994 }
30995
30996 pub const fn with_t0sz(mut self, value: u8) -> Self {
30998 self.set_t0sz(value);
30999 self
31000 }
31001
31002 pub const fn sl0(self) -> u8 {
31004 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
31005 }
31006
31007 pub const fn set_sl0(&mut self, value: u8) {
31009 let offset = Self::SL0_SHIFT;
31010 assert!(value & (Self::SL0_MASK as u8) == value);
31011 *self = Self::from_bits_retain(
31012 (self.bits() & !(Self::SL0_MASK << offset)) | ((value as u32) << offset),
31013 );
31014 }
31015
31016 pub const fn with_sl0(mut self, value: u8) -> Self {
31018 self.set_sl0(value);
31019 self
31020 }
31021
31022 pub const fn irgn0(self) -> u8 {
31024 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
31025 }
31026
31027 pub const fn set_irgn0(&mut self, value: u8) {
31029 let offset = Self::IRGN0_SHIFT;
31030 assert!(value & (Self::IRGN0_MASK as u8) == value);
31031 *self = Self::from_bits_retain(
31032 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u32) << offset),
31033 );
31034 }
31035
31036 pub const fn with_irgn0(mut self, value: u8) -> Self {
31038 self.set_irgn0(value);
31039 self
31040 }
31041
31042 pub const fn orgn0(self) -> u8 {
31044 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
31045 }
31046
31047 pub const fn set_orgn0(&mut self, value: u8) {
31049 let offset = Self::ORGN0_SHIFT;
31050 assert!(value & (Self::ORGN0_MASK as u8) == value);
31051 *self = Self::from_bits_retain(
31052 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u32) << offset),
31053 );
31054 }
31055
31056 pub const fn with_orgn0(mut self, value: u8) -> Self {
31058 self.set_orgn0(value);
31059 self
31060 }
31061
31062 pub const fn sh0(self) -> u8 {
31064 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
31065 }
31066
31067 pub const fn set_sh0(&mut self, value: u8) {
31069 let offset = Self::SH0_SHIFT;
31070 assert!(value & (Self::SH0_MASK as u8) == value);
31071 *self = Self::from_bits_retain(
31072 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u32) << offset),
31073 );
31074 }
31075
31076 pub const fn with_sh0(mut self, value: u8) -> Self {
31078 self.set_sh0(value);
31079 self
31080 }
31081}
31082
31083#[cfg(feature = "el2")]
31084bitflags! {
31085 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31087 #[repr(transparent)]
31088 pub struct VtcrEl2: u64 {
31089 const RES1 = 0b10000000000000000000000000000000;
31091 const VS = 1 << 19;
31093 const HA = 1 << 21;
31095 const HD = 1 << 22;
31097 const HWU59 = 1 << 25;
31099 const HWU60 = 1 << 26;
31101 const HWU61 = 1 << 27;
31103 const HWU62 = 1 << 28;
31105 const NSW = 1 << 29;
31107 const NSA = 1 << 30;
31109 const DS = 1 << 32;
31111 const SL2 = 1 << 33;
31113 const ASSUREDONLY = 1 << 34;
31115 const TL1 = 1 << 35;
31117 const S2PIE = 1 << 36;
31119 const S2POE = 1 << 37;
31121 const D128 = 1 << 38;
31123 const GCSH = 1 << 40;
31125 const TL0 = 1 << 41;
31127 const HAFT = 1 << 44;
31129 const HDBSS = 1 << 45;
31131 }
31132}
31133
31134#[cfg(feature = "el2")]
31135impl VtcrEl2 {
31136 pub const T0SZ_SHIFT: u32 = 0;
31138 pub const T0SZ_MASK: u64 = 0b111111;
31140 pub const SL0_SHIFT: u32 = 6;
31142 pub const SL0_MASK: u64 = 0b11;
31144 pub const IRGN0_SHIFT: u32 = 8;
31146 pub const IRGN0_MASK: u64 = 0b11;
31148 pub const ORGN0_SHIFT: u32 = 10;
31150 pub const ORGN0_MASK: u64 = 0b11;
31152 pub const SH0_SHIFT: u32 = 12;
31154 pub const SH0_MASK: u64 = 0b11;
31156 pub const TG0_SHIFT: u32 = 14;
31158 pub const TG0_MASK: u64 = 0b11;
31160 pub const PS_SHIFT: u32 = 16;
31162 pub const PS_MASK: u64 = 0b111;
31164 pub const VS_SHIFT: u32 = 19;
31166 pub const HA_SHIFT: u32 = 21;
31168 pub const HD_SHIFT: u32 = 22;
31170 pub const HWU59_SHIFT: u32 = 25;
31172 pub const HWU60_SHIFT: u32 = 26;
31174 pub const HWU61_SHIFT: u32 = 27;
31176 pub const HWU62_SHIFT: u32 = 28;
31178 pub const NSW_SHIFT: u32 = 29;
31180 pub const NSA_SHIFT: u32 = 30;
31182 pub const DS_SHIFT: u32 = 32;
31184 pub const SL2_SHIFT: u32 = 33;
31186 pub const ASSUREDONLY_SHIFT: u32 = 34;
31188 pub const TL1_SHIFT: u32 = 35;
31190 pub const S2PIE_SHIFT: u32 = 36;
31192 pub const S2POE_SHIFT: u32 = 37;
31194 pub const D128_SHIFT: u32 = 38;
31196 pub const GCSH_SHIFT: u32 = 40;
31198 pub const TL0_SHIFT: u32 = 41;
31200 pub const HAFT_SHIFT: u32 = 44;
31202 pub const HDBSS_SHIFT: u32 = 45;
31204
31205 pub const fn t0sz(self) -> u8 {
31207 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
31208 }
31209
31210 pub const fn set_t0sz(&mut self, value: u8) {
31212 let offset = Self::T0SZ_SHIFT;
31213 assert!(value & (Self::T0SZ_MASK as u8) == value);
31214 *self = Self::from_bits_retain(
31215 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
31216 );
31217 }
31218
31219 pub const fn with_t0sz(mut self, value: u8) -> Self {
31221 self.set_t0sz(value);
31222 self
31223 }
31224
31225 pub const fn sl0(self) -> u8 {
31227 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
31228 }
31229
31230 pub const fn set_sl0(&mut self, value: u8) {
31232 let offset = Self::SL0_SHIFT;
31233 assert!(value & (Self::SL0_MASK as u8) == value);
31234 *self = Self::from_bits_retain(
31235 (self.bits() & !(Self::SL0_MASK << offset)) | ((value as u64) << offset),
31236 );
31237 }
31238
31239 pub const fn with_sl0(mut self, value: u8) -> Self {
31241 self.set_sl0(value);
31242 self
31243 }
31244
31245 pub const fn irgn0(self) -> u8 {
31247 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
31248 }
31249
31250 pub const fn set_irgn0(&mut self, value: u8) {
31252 let offset = Self::IRGN0_SHIFT;
31253 assert!(value & (Self::IRGN0_MASK as u8) == value);
31254 *self = Self::from_bits_retain(
31255 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
31256 );
31257 }
31258
31259 pub const fn with_irgn0(mut self, value: u8) -> Self {
31261 self.set_irgn0(value);
31262 self
31263 }
31264
31265 pub const fn orgn0(self) -> u8 {
31267 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
31268 }
31269
31270 pub const fn set_orgn0(&mut self, value: u8) {
31272 let offset = Self::ORGN0_SHIFT;
31273 assert!(value & (Self::ORGN0_MASK as u8) == value);
31274 *self = Self::from_bits_retain(
31275 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
31276 );
31277 }
31278
31279 pub const fn with_orgn0(mut self, value: u8) -> Self {
31281 self.set_orgn0(value);
31282 self
31283 }
31284
31285 pub const fn sh0(self) -> u8 {
31287 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
31288 }
31289
31290 pub const fn set_sh0(&mut self, value: u8) {
31292 let offset = Self::SH0_SHIFT;
31293 assert!(value & (Self::SH0_MASK as u8) == value);
31294 *self = Self::from_bits_retain(
31295 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
31296 );
31297 }
31298
31299 pub const fn with_sh0(mut self, value: u8) -> Self {
31301 self.set_sh0(value);
31302 self
31303 }
31304
31305 pub const fn tg0(self) -> u8 {
31307 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
31308 }
31309
31310 pub const fn set_tg0(&mut self, value: u8) {
31312 let offset = Self::TG0_SHIFT;
31313 assert!(value & (Self::TG0_MASK as u8) == value);
31314 *self = Self::from_bits_retain(
31315 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
31316 );
31317 }
31318
31319 pub const fn with_tg0(mut self, value: u8) -> Self {
31321 self.set_tg0(value);
31322 self
31323 }
31324
31325 pub const fn ps(self) -> u8 {
31327 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
31328 }
31329
31330 pub const fn set_ps(&mut self, value: u8) {
31332 let offset = Self::PS_SHIFT;
31333 assert!(value & (Self::PS_MASK as u8) == value);
31334 *self = Self::from_bits_retain(
31335 (self.bits() & !(Self::PS_MASK << offset)) | ((value as u64) << offset),
31336 );
31337 }
31338
31339 pub const fn with_ps(mut self, value: u8) -> Self {
31341 self.set_ps(value);
31342 self
31343 }
31344}
31345
31346bitflags! {
31347 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31349 #[repr(transparent)]
31350 pub struct Vttbr: u64 {
31351 const CNP = 1 << 0;
31353 }
31354}
31355
31356impl Vttbr {
31357 pub const CNP_SHIFT: u32 = 0;
31359 pub const BADDR_SHIFT: u32 = 1;
31361 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
31363 pub const VMID_SHIFT: u32 = 48;
31365 pub const VMID_MASK: u64 = 0b11111111;
31367
31368 pub const fn baddr(self) -> u64 {
31370 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
31371 as u64
31372 }
31373
31374 pub const fn set_baddr(&mut self, value: u64) {
31376 let offset = Self::BADDR_SHIFT;
31377 assert!(value & (Self::BADDR_MASK as u64) == value);
31378 *self = Self::from_bits_retain(
31379 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
31380 );
31381 }
31382
31383 pub const fn with_baddr(mut self, value: u64) -> Self {
31385 self.set_baddr(value);
31386 self
31387 }
31388
31389 pub const fn vmid(self) -> u8 {
31391 ((self.bits() >> Self::VMID_SHIFT) & 0b11111111) as u8
31392 }
31393
31394 pub const fn set_vmid(&mut self, value: u8) {
31396 let offset = Self::VMID_SHIFT;
31397 assert!(value & (Self::VMID_MASK as u8) == value);
31398 *self = Self::from_bits_retain(
31399 (self.bits() & !(Self::VMID_MASK << offset)) | ((value as u64) << offset),
31400 );
31401 }
31402
31403 pub const fn with_vmid(mut self, value: u8) -> Self {
31405 self.set_vmid(value);
31406 self
31407 }
31408}
31409
31410#[cfg(feature = "el2")]
31411bitflags! {
31412 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31414 #[repr(transparent)]
31415 pub struct VttbrEl2: u64 {
31416 const CNP = 1 << 0;
31418 }
31419}
31420
31421#[cfg(feature = "el2")]
31422impl VttbrEl2 {
31423 pub const CNP_SHIFT: u32 = 0;
31425 pub const BADDR_SHIFT: u32 = 1;
31427 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
31429 pub const SKL_SHIFT: u32 = 1;
31431 pub const SKL_MASK: u64 = 0b11;
31433 pub const VMID_SHIFT: u32 = 48;
31435 pub const VMID_MASK: u64 = 0b1111111111111111;
31437
31438 pub const fn baddr(self) -> u64 {
31440 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
31441 as u64
31442 }
31443
31444 pub const fn set_baddr(&mut self, value: u64) {
31446 let offset = Self::BADDR_SHIFT;
31447 assert!(value & (Self::BADDR_MASK as u64) == value);
31448 *self = Self::from_bits_retain(
31449 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
31450 );
31451 }
31452
31453 pub const fn with_baddr(mut self, value: u64) -> Self {
31455 self.set_baddr(value);
31456 self
31457 }
31458
31459 pub const fn skl(self) -> u8 {
31461 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
31462 }
31463
31464 pub const fn set_skl(&mut self, value: u8) {
31466 let offset = Self::SKL_SHIFT;
31467 assert!(value & (Self::SKL_MASK as u8) == value);
31468 *self = Self::from_bits_retain(
31469 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
31470 );
31471 }
31472
31473 pub const fn with_skl(mut self, value: u8) -> Self {
31475 self.set_skl(value);
31476 self
31477 }
31478
31479 pub const fn vmid(self) -> u16 {
31481 ((self.bits() >> Self::VMID_SHIFT) & 0b1111111111111111) as u16
31482 }
31483
31484 pub const fn set_vmid(&mut self, value: u16) {
31486 let offset = Self::VMID_SHIFT;
31487 assert!(value & (Self::VMID_MASK as u16) == value);
31488 *self = Self::from_bits_retain(
31489 (self.bits() & !(Self::VMID_MASK << offset)) | ((value as u64) << offset),
31490 );
31491 }
31492
31493 pub const fn with_vmid(mut self, value: u16) -> Self {
31495 self.set_vmid(value);
31496 self
31497 }
31498}
31499
31500#[cfg(feature = "el3")]
31501bitflags! {
31502 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31504 #[repr(transparent)]
31505 pub struct ZcrEl3: u64 {
31506 }
31507}
31508
31509#[cfg(feature = "el3")]
31510impl ZcrEl3 {
31511 pub const LEN_SHIFT: u32 = 0;
31513 pub const LEN_MASK: u64 = 0b1111;
31515
31516 pub const fn len(self) -> u8 {
31518 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
31519 }
31520
31521 pub const fn set_len(&mut self, value: u8) {
31523 let offset = Self::LEN_SHIFT;
31524 assert!(value & (Self::LEN_MASK as u8) == value);
31525 *self = Self::from_bits_retain(
31526 (self.bits() & !(Self::LEN_MASK << offset)) | ((value as u64) << offset),
31527 );
31528 }
31529
31530 pub const fn with_len(mut self, value: u8) -> Self {
31532 self.set_len(value);
31533 self
31534 }
31535}
31536
31537#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31538read_write_sysreg!(actlr: (p15, 0, c0, c1, 1), u32, safe_read, fake::SYSREGS);
31539#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31540read_write_sysreg!(actlr2: (p15, 0, c0, c1, 3), u32, safe_read, fake::SYSREGS);
31541#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31542read_write_sysreg!(actlr_el1, u64, safe_read, fake::SYSREGS);
31543#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31544read_write_sysreg!(actlr_el2, u64, safe_read, fake::SYSREGS);
31545#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31546read_write_sysreg!(adfsr: (p15, 0, c1, c5, 0), u32, safe_read, fake::SYSREGS);
31547#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31548read_write_sysreg!(afsr0_el1, u64, safe_read, fake::SYSREGS);
31549#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31550read_write_sysreg!(afsr0_el2, u64, safe_read, fake::SYSREGS);
31551#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31552read_write_sysreg!(afsr1_el1, u64, safe_read, fake::SYSREGS);
31553#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31554read_write_sysreg!(afsr1_el2, u64, safe_read, fake::SYSREGS);
31555#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31556read_sysreg!(aidr: (p15, 1, c0, c0, 7), u32, safe, fake::SYSREGS);
31557#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31558read_write_sysreg!(aifsr: (p15, 0, c1, c5, 1), u32, safe_read, fake::SYSREGS);
31559#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31560read_write_sysreg!(amair0: (p15, 0, c3, c10, 0), u32, safe_read, fake::SYSREGS);
31561#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31562read_write_sysreg!(amair1: (p15, 0, c3, c10, 1), u32, safe_read, fake::SYSREGS);
31563#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31564read_write_sysreg!(amair_el1, u64, safe_read, fake::SYSREGS);
31565#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31566read_write_sysreg!(amair_el2, u64, safe_read, fake::SYSREGS);
31567#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31568read_sysreg!(amcfgr: (p15, 0, c2, c13, 1), u32: Amcfgr, safe, fake::SYSREGS);
31569#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31570read_sysreg!(amcgcr: (p15, 0, c2, c13, 2), u32: Amcgcr, safe, fake::SYSREGS);
31571#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31572read_write_sysreg!(amcntenclr0: (p15, 0, c2, c13, 4), u32: Amcntenclr0, safe_read, fake::SYSREGS);
31573#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31574read_write_sysreg!(amcntenclr1: (p15, 0, c3, c13, 0), u32: Amcntenclr1, safe_read, fake::SYSREGS);
31575#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31576read_write_sysreg!(amcntenset0: (p15, 0, c2, c13, 5), u32: Amcntenset0, safe_read, fake::SYSREGS);
31577#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31578read_write_sysreg!(amcntenset1: (p15, 0, c3, c13, 1), u32: Amcntenset1, safe_read, fake::SYSREGS);
31579#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31580read_write_sysreg!(amcr: (p15, 0, c2, c13, 0), u32: Amcr, safe_read, fake::SYSREGS);
31581#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31582read_write_sysreg!(amuserenr: (p15, 0, c2, c13, 3), u32: Amuserenr, safe_read, fake::SYSREGS);
31583#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31584read_write_sysreg!(apiakeyhi_el1: s3_0_c2_c1_1, u64: ApiakeyhiEl1, safe_read, fake::SYSREGS);
31585#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31586read_write_sysreg!(apiakeylo_el1: s3_0_c2_c1_0, u64: ApiakeyloEl1, safe_read, fake::SYSREGS);
31587#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31588read_sysreg!(ccsidr: (p15, 1, c0, c0, 0), u32: Ccsidr, safe, fake::SYSREGS);
31589#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31590read_sysreg!(ccsidr2: (p15, 1, c0, c0, 2), u32: Ccsidr2, safe, fake::SYSREGS);
31591#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31592read_sysreg!(ccsidr_el1, u64: CcsidrEl1, safe, fake::SYSREGS);
31593#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31594read_sysreg!(clidr: (p15, 1, c0, c0, 1), u32: Clidr, safe, fake::SYSREGS);
31595#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31596read_sysreg!(clidr_el1, u64: ClidrEl1, safe, fake::SYSREGS);
31597#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31598read_write_sysreg!(cntfrq: (p15, 0, c0, c14, 0), u32: Cntfrq, safe_read, fake::SYSREGS);
31599#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31600read_write_sysreg!(cntfrq_el0, u64: CntfrqEl0, safe_read, safe_write, fake::SYSREGS);
31601#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31602read_write_sysreg!(cnthctl: (p15, 4, c1, c14, 0), u32: Cnthctl, safe_read, fake::SYSREGS);
31603#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31604read_write_sysreg!(cnthctl_el2, u64: CnthctlEl2, safe_read, safe_write, fake::SYSREGS);
31605#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31606read_write_sysreg!(cnthps_ctl: (p15, 0, c2, c14, 1), u32: CnthpsCtl, safe_read, fake::SYSREGS);
31607#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31608read_write_sysreg!(cnthps_ctl_el2: s3_4_c14_c5_1, u64: CnthpsCtlEl2, safe_read, safe_write, fake::SYSREGS);
31609#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31610read_write_sysreg!(cnthps_cval: (p15, 2, c14), u64: CnthpsCval, safe_read, fake::SYSREGS);
31611#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31612read_write_sysreg!(cnthps_cval_el2: s3_4_c14_c5_2, u64: CnthpsCvalEl2, safe_read, safe_write, fake::SYSREGS);
31613#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31614read_write_sysreg!(cnthps_tval: (p15, 0, c2, c14, 0), u32: CnthpsTval, safe_read, fake::SYSREGS);
31615#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31616read_write_sysreg!(cnthps_tval_el2: s3_4_c14_c5_0, u64: CnthpsTvalEl2, safe_read, safe_write, fake::SYSREGS);
31617#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31618read_write_sysreg!(cnthp_ctl: (p15, 0, c2, c14, 1), u32: CnthpCtl, safe_read, fake::SYSREGS);
31619#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31620read_write_sysreg!(cnthp_ctl_el2: s3_4_c14_c2_1, u64: CnthpCtlEl2, safe_read, safe_write, fake::SYSREGS);
31621#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31622read_write_sysreg!(cnthp_cval: (p15, 2, c14), u64: CnthpCval, safe_read, fake::SYSREGS);
31623#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31624read_write_sysreg!(cnthp_cval_el2: s3_4_c14_c2_2, u64: CnthpCvalEl2, safe_read, safe_write, fake::SYSREGS);
31625#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31626read_write_sysreg!(cnthp_tval: (p15, 0, c2, c14, 0), u32: CnthpTval, safe_read, fake::SYSREGS);
31627#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31628read_write_sysreg!(cnthp_tval_el2: s3_4_c14_c2_0, u64: CnthpTvalEl2, safe_read, safe_write, fake::SYSREGS);
31629#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31630read_write_sysreg!(cnthvs_ctl: (p15, 0, c3, c14, 1), u32: CnthvsCtl, safe_read, fake::SYSREGS);
31631#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31632read_write_sysreg!(cnthvs_ctl_el2: s3_4_c14_c4_1, u64: CnthvsCtlEl2, safe_read, safe_write, fake::SYSREGS);
31633#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31634read_write_sysreg!(cnthvs_cval: (p15, 3, c14), u64: CnthvsCval, safe_read, fake::SYSREGS);
31635#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31636read_write_sysreg!(cnthvs_cval_el2: s3_4_c14_c4_2, u64: CnthvsCvalEl2, safe_read, safe_write, fake::SYSREGS);
31637#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31638read_write_sysreg!(cnthvs_tval: (p15, 0, c3, c14, 0), u32: CnthvsTval, safe_read, fake::SYSREGS);
31639#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31640read_write_sysreg!(cnthvs_tval_el2: s3_4_c14_c4_0, u64: CnthvsTvalEl2, safe_read, safe_write, fake::SYSREGS);
31641#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31642read_write_sysreg!(cnthv_ctl: (p15, 0, c3, c14, 1), u32: CnthvCtl, safe_read, fake::SYSREGS);
31643#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31644read_write_sysreg!(cnthv_ctl_el2: s3_4_c14_c3_1, u64: CnthvCtlEl2, safe_read, safe_write, fake::SYSREGS);
31645#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31646read_write_sysreg!(cnthv_cval: (p15, 3, c14), u64: CnthvCval, safe_read, fake::SYSREGS);
31647#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31648read_write_sysreg!(cnthv_cval_el2: s3_4_c14_c3_2, u64: CnthvCvalEl2, safe_read, safe_write, fake::SYSREGS);
31649#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31650read_write_sysreg!(cnthv_tval: (p15, 0, c3, c14, 0), u32: CnthvTval, safe_read, fake::SYSREGS);
31651#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31652read_write_sysreg!(cnthv_tval_el2: s3_4_c14_c3_0, u64: CnthvTvalEl2, safe_read, safe_write, fake::SYSREGS);
31653#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31654read_write_sysreg!(cntkctl: (p15, 0, c1, c14, 0), u32: Cntkctl, safe_read, fake::SYSREGS);
31655#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31656read_write_sysreg!(cntkctl_el1, u64: CntkctlEl1, safe_read, safe_write, fake::SYSREGS);
31657#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31658read_sysreg!(cntpct: (p15, 0, c14), u64: Cntpct, safe, fake::SYSREGS);
31659#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31660read_sysreg!(cntpctss: (p15, 8, c14), u64: Cntpctss, safe, fake::SYSREGS);
31661#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31662read_sysreg!(cntpctss_el0: s3_3_c14_c0_5, u64: CntpctssEl0, safe, fake::SYSREGS);
31663#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31664read_sysreg!(cntpct_el0, u64: CntpctEl0, safe, fake::SYSREGS);
31665#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31666read_write_sysreg!(cntpoff_el2: s3_4_c14_c0_6, u64: CntpoffEl2, safe_read, safe_write, fake::SYSREGS);
31667#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31668read_write_sysreg!(cntps_ctl_el1, u64: CntpsCtlEl1, safe_read, safe_write, fake::SYSREGS);
31669#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31670read_write_sysreg!(cntps_cval_el1, u64: CntpsCvalEl1, safe_read, safe_write, fake::SYSREGS);
31671#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31672read_write_sysreg!(cntps_tval_el1, u64: CntpsTvalEl1, safe_read, safe_write, fake::SYSREGS);
31673#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31674read_write_sysreg!(cntp_ctl: (p15, 0, c2, c14, 1), u32: CntpCtl, safe_read, fake::SYSREGS);
31675#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31676read_write_sysreg!(cntp_ctl_el0, u64: CntpCtlEl0, safe_read, safe_write, fake::SYSREGS);
31677#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31678read_write_sysreg!(cntp_cval: (p15, 2, c14), u64: CntpCval, safe_read, fake::SYSREGS);
31679#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31680read_write_sysreg!(cntp_cval_el0, u64: CntpCvalEl0, safe_read, safe_write, fake::SYSREGS);
31681#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31682read_write_sysreg!(cntp_tval: (p15, 0, c2, c14, 0), u32: CntpTval, safe_read, fake::SYSREGS);
31683#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31684read_write_sysreg!(cntp_tval_el0, u64: CntpTvalEl0, safe_read, safe_write, fake::SYSREGS);
31685#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31686read_sysreg!(cntvct: (p15, 1, c14), u64: Cntvct, safe, fake::SYSREGS);
31687#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31688read_sysreg!(cntvctss: (p15, 9, c14), u64: Cntvctss, safe, fake::SYSREGS);
31689#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31690read_sysreg!(cntvctss_el0: s3_3_c14_c0_6, u64: CntvctssEl0, safe, fake::SYSREGS);
31691#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31692read_sysreg!(cntvct_el0, u64: CntvctEl0, safe, fake::SYSREGS);
31693#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31694read_write_sysreg!(cntvoff: (p15, 4, c14), u64: Cntvoff, safe_read, fake::SYSREGS);
31695#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31696read_write_sysreg!(cntvoff_el2, u64: CntvoffEl2, safe_read, safe_write, fake::SYSREGS);
31697#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31698read_write_sysreg!(cntv_ctl: (p15, 0, c3, c14, 1), u32: CntvCtl, safe_read, fake::SYSREGS);
31699#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31700read_write_sysreg!(cntv_ctl_el0, u64: CntvCtlEl0, safe_read, safe_write, fake::SYSREGS);
31701#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31702read_write_sysreg!(cntv_cval: (p15, 3, c14), u64: CntvCval, safe_read, fake::SYSREGS);
31703#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31704read_write_sysreg!(cntv_cval_el0, u64: CntvCvalEl0, safe_read, safe_write, fake::SYSREGS);
31705#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31706read_write_sysreg!(cntv_tval: (p15, 0, c3, c14, 0), u32: CntvTval, safe_read, fake::SYSREGS);
31707#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31708read_write_sysreg!(cntv_tval_el0, u64: CntvTvalEl0, safe_read, safe_write, fake::SYSREGS);
31709#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31710read_write_sysreg!(contextidr: (p15, 0, c0, c13, 1), u32: Contextidr, safe_read, fake::SYSREGS);
31711#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31712read_write_sysreg!(contextidr_el1, u64: ContextidrEl1, safe_read, safe_write, fake::SYSREGS);
31713#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31714read_write_sysreg!(contextidr_el2: s3_4_c13_c0_1, u64: ContextidrEl2, safe_read, safe_write, fake::SYSREGS);
31715#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31716read_write_sysreg!(cpacr: (p15, 0, c0, c1, 2), u32: Cpacr, safe_read, fake::SYSREGS);
31717#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31718read_write_sysreg!(cpacr_el1, u64: CpacrEl1, safe_read, fake::SYSREGS);
31719#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31720read_write_sysreg!(cptr_el2, u64: CptrEl2, safe_read, fake::SYSREGS);
31721#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
31722read_write_sysreg!(cptr_el3, u64: CptrEl3, safe_read, fake::SYSREGS);
31723#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31724read_write_sysreg!(csselr: (p15, 2, c0, c0, 0), u32: Csselr, safe_read, fake::SYSREGS);
31725#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31726read_write_sysreg!(csselr_el1, u64: CsselrEl1, safe_read, safe_write, fake::SYSREGS);
31727#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31728read_sysreg!(ctr: (p15, 0, c0, c0, 1), u32: Ctr, safe, fake::SYSREGS);
31729#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31730read_sysreg!(ctr_el0, u64: CtrEl0, safe, fake::SYSREGS);
31731#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31732read_sysreg!(currentel, u64: Currentel, safe, fake::SYSREGS);
31733#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31734read_write_sysreg!(dacr: (p15, 0, c0, c3, 0), u32: Dacr, safe_read, fake::SYSREGS);
31735#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31736read_sysreg!(dbgauthstatus: (p14, 0, c14, c7, 6), u32: Dbgauthstatus, safe, fake::SYSREGS);
31737#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31738read_write_sysreg!(dbgclaimclr: (p14, 0, c9, c7, 6), u32: Dbgclaimclr, safe_read, fake::SYSREGS);
31739#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31740read_write_sysreg!(dbgclaimset: (p14, 0, c8, c7, 6), u32: Dbgclaimset, safe_read, fake::SYSREGS);
31741#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31742read_write_sysreg!(dbgdccint: (p14, 0, c2, c0, 0), u32: Dbgdccint, safe_read, fake::SYSREGS);
31743#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31744read_sysreg!(dbgdevid: (p14, 0, c2, c7, 7), u32: Dbgdevid, safe, fake::SYSREGS);
31745#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31746read_sysreg!(dbgdevid1: (p14, 0, c1, c7, 7), u32: Dbgdevid1, safe, fake::SYSREGS);
31747#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31748read_sysreg!(dbgdevid2: (p14, 0, c0, c7, 7), u32, safe, fake::SYSREGS);
31749#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31750read_sysreg!(dbgdidr: (p14, 0, c0, c0, 0), u32: Dbgdidr, safe, fake::SYSREGS);
31751#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31752read_sysreg!(dbgdrar: (p14, 0, c1), u64: Dbgdrar, safe, fake::SYSREGS);
31753#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31754read_sysreg!(dbgdsar: (p14, 0, c2), u64, safe, fake::SYSREGS);
31755#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31756read_write_sysreg!(dbgdscrext: (p14, 0, c2, c0, 2), u32: Dbgdscrext, safe_read, fake::SYSREGS);
31757#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31758read_sysreg!(dbgdscrint: (p14, 0, c1, c0, 0), u32: Dbgdscrint, safe, fake::SYSREGS);
31759#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31760read_write_sysreg!(dbgdtrrxext: (p14, 0, c0, c0, 2), u32: Dbgdtrrxext, safe_read, fake::SYSREGS);
31761#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31762read_sysreg!(dbgdtrrxint: (p14, 0, c5, c0, 0), u32: Dbgdtrrxint, safe, fake::SYSREGS);
31763#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31764read_write_sysreg!(dbgdtrtxext: (p14, 0, c3, c0, 2), u32: Dbgdtrtxext, safe_read, fake::SYSREGS);
31765#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31766write_sysreg!(dbgdtrtxint: (p14, 0, c5, c0, 0), u32: Dbgdtrtxint, fake::SYSREGS);
31767#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31768read_write_sysreg!(dbgosdlr: (p14, 0, c3, c1, 4), u32: Dbgosdlr, safe_read, fake::SYSREGS);
31769#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31770read_write_sysreg!(dbgoseccr: (p14, 0, c6, c0, 2), u32: Dbgoseccr, safe_read, fake::SYSREGS);
31771#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31772write_sysreg!(dbgoslar: (p14, 0, c0, c1, 4), u32: Dbgoslar, fake::SYSREGS);
31773#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31774read_sysreg!(dbgoslsr: (p14, 0, c1, c1, 4), u32: Dbgoslsr, safe, fake::SYSREGS);
31775#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31776read_write_sysreg!(dbgprcr: (p14, 0, c4, c1, 4), u32: Dbgprcr, safe_read, fake::SYSREGS);
31777#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31778read_write_sysreg!(dbgvcr: (p14, 0, c7, c0, 0), u32: Dbgvcr, safe_read, fake::SYSREGS);
31779#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31780read_write_sysreg!(dbgwfar: (p14, 0, c6, c0, 0), u32, safe_read, fake::SYSREGS);
31781#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31782read_write_sysreg!(dfar: (p15, 0, c0, c6, 0), u32: Dfar, safe_read, fake::SYSREGS);
31783#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31784read_write_sysreg!(dfsr: (p15, 0, c0, c5, 0), u32: Dfsr, safe_read, fake::SYSREGS);
31785#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31786read_write_sysreg!(disr: (p15, 0, c1, c12, 1), u32: Disr, safe_read, fake::SYSREGS);
31787#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31788read_write_sysreg!(disr_el1: s3_0_c12_c1_1, u64: DisrEl1, safe_read, safe_write, fake::SYSREGS);
31789#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
31790read_write_sysreg!(dit: s3_3_c4_c2_5, u64: Dit, safe_read, safe_write, fake::SYSREGS);
31791#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31792read_write_sysreg!(dlr: (p15, 3, c5, c4, 1), u32: Dlr, safe_read, fake::SYSREGS);
31793#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31794read_write_sysreg!(dspsr: (p15, 3, c5, c4, 0), u32: Dspsr, safe_read, fake::SYSREGS);
31795#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31796read_write_sysreg!(dspsr2: (p15, 3, c5, c4, 2), u32: Dspsr2, safe_read, fake::SYSREGS);
31797#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31798read_write_sysreg!(elr_el1, u64: ElrEl1, safe_read, fake::SYSREGS);
31799#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31800read_write_sysreg!(elr_el2, u64: ElrEl2, safe_read, fake::SYSREGS);
31801#[cfg(all(any(test, feature = "fakes", target_arch = "arm"), feature = "el2"))]
31802read_write_sysreg!(elr_hyp, u32: ElrHyp, safe_read, fake::SYSREGS);
31803#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31804read_sysreg!(erridr: (p15, 0, c3, c5, 0), u32: Erridr, safe, fake::SYSREGS);
31805#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31806read_write_sysreg!(errselr: (p15, 0, c3, c5, 1), u32: Errselr, safe_read, fake::SYSREGS);
31807#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31808read_write_sysreg!(erxaddr: (p15, 0, c4, c5, 3), u32: Erxaddr, safe_read, fake::SYSREGS);
31809#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31810read_write_sysreg!(erxaddr2: (p15, 0, c4, c5, 7), u32: Erxaddr2, safe_read, fake::SYSREGS);
31811#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31812read_write_sysreg!(erxctlr: (p15, 0, c4, c5, 1), u32: Erxctlr, safe_read, fake::SYSREGS);
31813#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31814read_write_sysreg!(erxctlr2: (p15, 0, c4, c5, 5), u32: Erxctlr2, safe_read, fake::SYSREGS);
31815#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31816read_sysreg!(erxfr: (p15, 0, c4, c5, 0), u32: Erxfr, safe, fake::SYSREGS);
31817#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31818read_sysreg!(erxfr2: (p15, 0, c4, c5, 4), u32: Erxfr2, safe, fake::SYSREGS);
31819#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31820read_write_sysreg!(erxmisc0: (p15, 0, c5, c5, 0), u32: Erxmisc0, safe_read, fake::SYSREGS);
31821#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31822read_write_sysreg!(erxmisc1: (p15, 0, c5, c5, 1), u32: Erxmisc1, safe_read, fake::SYSREGS);
31823#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31824read_write_sysreg!(erxmisc2: (p15, 0, c5, c5, 4), u32: Erxmisc2, safe_read, fake::SYSREGS);
31825#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31826read_write_sysreg!(erxmisc3: (p15, 0, c5, c5, 5), u32: Erxmisc3, safe_read, fake::SYSREGS);
31827#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31828read_write_sysreg!(erxmisc4: (p15, 0, c5, c5, 2), u32: Erxmisc4, safe_read, fake::SYSREGS);
31829#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31830read_write_sysreg!(erxmisc5: (p15, 0, c5, c5, 3), u32: Erxmisc5, safe_read, fake::SYSREGS);
31831#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31832read_write_sysreg!(erxmisc6: (p15, 0, c5, c5, 6), u32: Erxmisc6, safe_read, fake::SYSREGS);
31833#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31834read_write_sysreg!(erxmisc7: (p15, 0, c5, c5, 7), u32: Erxmisc7, safe_read, fake::SYSREGS);
31835#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31836read_write_sysreg!(erxstatus: (p15, 0, c4, c5, 2), u32: Erxstatus, safe_read, fake::SYSREGS);
31837#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31838read_write_sysreg!(esr_el1, u64: EsrEl1, safe_read, safe_write, fake::SYSREGS);
31839#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31840read_write_sysreg!(esr_el2, u64: EsrEl2, safe_read, safe_write, fake::SYSREGS);
31841#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
31842read_write_sysreg!(esr_el3, u64: EsrEl3, safe_read, safe_write, fake::SYSREGS);
31843#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31844read_write_sysreg!(far_el1, u64: FarEl1, safe_read, fake::SYSREGS);
31845#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31846read_write_sysreg!(far_el2, u64: FarEl2, safe_read, fake::SYSREGS);
31847#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31848read_write_sysreg!(fcseidr: (p15, 0, c0, c13, 0), u32, safe_read, fake::SYSREGS);
31849#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31850read_write_sysreg!(gcr_el1: s3_0_c1_c0_6, u64: GcrEl1, safe_read, fake::SYSREGS);
31851#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31852read_write_sysreg!(gcscr_el1: s3_0_c2_c5_0, u64: GcscrEl1, safe_read, fake::SYSREGS);
31853#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31854read_write_sysreg!(gcscr_el2: s3_4_c2_c5_0, u64: GcscrEl2, safe_read, fake::SYSREGS);
31855#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
31856read_write_sysreg!(gpccr_el3: s3_6_c2_c1_6, u64: GpccrEl3, safe_read, fake::SYSREGS);
31857#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
31858read_write_sysreg!(gptbr_el3: s3_6_c2_c1_4, u64: GptbrEl3, safe_read, fake::SYSREGS);
31859#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31860read_write_sysreg!(hacr: (p15, 4, c1, c1, 7), u32, safe_read, fake::SYSREGS);
31861#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31862read_write_sysreg!(hacr_el2, u64, safe_read, fake::SYSREGS);
31863#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31864read_write_sysreg!(hactlr: (p15, 4, c0, c1, 1), u32, safe_read, fake::SYSREGS);
31865#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31866read_write_sysreg!(hactlr2: (p15, 4, c0, c1, 3), u32, safe_read, fake::SYSREGS);
31867#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31868read_write_sysreg!(hadfsr: (p15, 4, c1, c5, 0), u32, safe_read, fake::SYSREGS);
31869#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31870read_write_sysreg!(hafgrtr_el2: s3_4_c3_c1_6, u64: HafgrtrEl2, safe_read, fake::SYSREGS);
31871#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31872read_write_sysreg!(haifsr: (p15, 4, c1, c5, 1), u32, safe_read, fake::SYSREGS);
31873#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31874read_write_sysreg!(hamair0: (p15, 4, c3, c10, 0), u32, safe_read, fake::SYSREGS);
31875#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31876read_write_sysreg!(hamair1: (p15, 4, c3, c10, 1), u32, safe_read, fake::SYSREGS);
31877#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31878read_write_sysreg!(hcptr: (p15, 4, c1, c1, 2), u32: Hcptr, safe_read, fake::SYSREGS);
31879#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31880read_write_sysreg!(hcr: (p15, 4, c1, c1, 0), u32: Hcr, safe_read, fake::SYSREGS);
31881#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31882read_write_sysreg!(hcr2: (p15, 4, c1, c1, 4), u32: Hcr2, safe_read, fake::SYSREGS);
31883#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31884read_write_sysreg!(hcrx_el2: s3_4_c1_c2_2, u64: HcrxEl2, safe_read, fake::SYSREGS);
31885#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31886read_write_sysreg!(hcr_el2, u64: HcrEl2, safe_read, fake::SYSREGS);
31887#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31888read_write_sysreg!(hdcr: (p15, 4, c1, c1, 1), u32: Hdcr, safe_read, fake::SYSREGS);
31889#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31890read_write_sysreg!(hdfar: (p15, 4, c0, c6, 0), u32: Hdfar, safe_read, fake::SYSREGS);
31891#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31892read_write_sysreg!(hdfgrtr2_el2: s3_4_c3_c1_0, u64: Hdfgrtr2El2, safe_read, fake::SYSREGS);
31893#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31894read_write_sysreg!(hdfgrtr_el2: s3_4_c3_c1_4, u64: HdfgrtrEl2, safe_read, fake::SYSREGS);
31895#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31896read_write_sysreg!(hdfgwtr2_el2: s3_4_c3_c1_1, u64: Hdfgwtr2El2, safe_read, fake::SYSREGS);
31897#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31898read_write_sysreg!(hdfgwtr_el2: s3_4_c3_c1_5, u64: HdfgwtrEl2, safe_read, fake::SYSREGS);
31899#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31900read_write_sysreg!(hfgitr2_el2: s3_4_c3_c1_7, u64: Hfgitr2El2, safe_read, fake::SYSREGS);
31901#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31902read_write_sysreg!(hfgitr_el2: s3_4_c1_c1_6, u64: HfgitrEl2, safe_read, fake::SYSREGS);
31903#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31904read_write_sysreg!(hfgrtr2_el2: s3_4_c3_c1_2, u64: Hfgrtr2El2, safe_read, fake::SYSREGS);
31905#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31906read_write_sysreg!(hfgrtr_el2: s3_4_c1_c1_4, u64: HfgrtrEl2, safe_read, fake::SYSREGS);
31907#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31908read_write_sysreg!(hfgwtr2_el2: s3_4_c3_c1_3, u64: Hfgwtr2El2, safe_read, fake::SYSREGS);
31909#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31910read_write_sysreg!(hfgwtr_el2: s3_4_c1_c1_5, u64: HfgwtrEl2, safe_read, fake::SYSREGS);
31911#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31912read_write_sysreg!(hifar: (p15, 4, c0, c6, 2), u32: Hifar, safe_read, fake::SYSREGS);
31913#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31914read_write_sysreg!(hmair0: (p15, 4, c2, c10, 0), u32: Hmair0, safe_read, fake::SYSREGS);
31915#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31916read_write_sysreg!(hmair1: (p15, 4, c2, c10, 1), u32: Hmair1, safe_read, fake::SYSREGS);
31917#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31918read_write_sysreg!(hpfar: (p15, 4, c0, c6, 4), u32: Hpfar, safe_read, fake::SYSREGS);
31919#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31920read_write_sysreg!(hpfar_el2, u64: HpfarEl2, safe_read, fake::SYSREGS);
31921#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31922read_write_sysreg!(hrmr: (p15, 4, c0, c12, 2), u32: Hrmr, safe_read, fake::SYSREGS);
31923#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31924read_write_sysreg!(hsctlr: (p15, 4, c0, c1, 0), u32: Hsctlr, safe_read, fake::SYSREGS);
31925#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31926read_write_sysreg!(hsr: (p15, 4, c2, c5, 0), u32: Hsr, safe_read, fake::SYSREGS);
31927#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31928read_write_sysreg!(hstr: (p15, 4, c1, c1, 3), u32, safe_read, fake::SYSREGS);
31929#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
31930read_write_sysreg!(hstr_el2, u64, safe_read, safe_write, fake::SYSREGS);
31931#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31932read_write_sysreg!(htcr: (p15, 4, c0, c2, 2), u32: Htcr, safe_read, fake::SYSREGS);
31933#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31934read_write_sysreg!(htpidr: (p15, 4, c0, c13, 2), u32: Htpidr, safe_read, fake::SYSREGS);
31935#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31936read_write_sysreg!(htrfcr: (p15, 4, c2, c1, 1), u32: Htrfcr, safe_read, fake::SYSREGS);
31937#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31938read_write_sysreg!(httbr: (p15, 4, c2), u64: Httbr, safe_read, fake::SYSREGS);
31939#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31940read_write_sysreg!(hvbar: (p15, 4, c0, c12, 0), u32: Hvbar, safe_read, fake::SYSREGS);
31941#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31942read_write_sysreg!(icc_ap0r0_el1, u64, safe_read, fake::SYSREGS);
31943#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31944read_write_sysreg!(icc_ap0r1_el1, u64, safe_read, fake::SYSREGS);
31945#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31946read_write_sysreg!(icc_ap0r2_el1, u64, safe_read, fake::SYSREGS);
31947#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31948read_write_sysreg!(icc_ap0r3_el1, u64, safe_read, fake::SYSREGS);
31949#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31950read_write_sysreg!(icc_ap1r0_el1, u64: IccAp1r0El1, safe_read, fake::SYSREGS);
31951#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31952read_write_sysreg!(icc_ap1r1_el1, u64, safe_read, fake::SYSREGS);
31953#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31954read_write_sysreg!(icc_ap1r2_el1, u64, safe_read, fake::SYSREGS);
31955#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31956read_write_sysreg!(icc_ap1r3_el1, u64, safe_read, fake::SYSREGS);
31957#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31958write_sysreg!(icc_asgi1r: (p15, 1, c12), u64: IccAsgi1r, safe, fake::SYSREGS);
31959#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31960write_sysreg!(icc_asgi1r_el1: s3_0_c12_c11_6, u64: IccAsgi1rEl1, safe, fake::SYSREGS);
31961#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31962read_write_sysreg!(icc_bpr0: (p15, 0, c8, c12, 3), u32: IccBpr0, safe_read, safe_write, fake::SYSREGS);
31963#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31964read_write_sysreg!(icc_bpr0_el1: s3_0_c12_c8_3, u64: IccBpr0El1, safe_read, safe_write, fake::SYSREGS);
31965#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31966read_write_sysreg!(icc_bpr1: (p15, 0, c12, c12, 3), u32: IccBpr1, safe_read, safe_write, fake::SYSREGS);
31967#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31968read_write_sysreg!(icc_bpr1_el1: s3_0_c12_c12_3, u64: IccBpr1El1, safe_read, safe_write, fake::SYSREGS);
31969#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31970read_write_sysreg!(icc_ctlr: (p15, 0, c12, c12, 4), u32: IccCtlr, safe_read, safe_write, fake::SYSREGS);
31971#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31972read_write_sysreg!(icc_ctlr_el1: s3_0_c12_c12_4, u64: IccCtlrEl1, safe_read, safe_write, fake::SYSREGS);
31973#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
31974read_write_sysreg!(icc_ctlr_el3: s3_6_c12_c12_4, u64: IccCtlrEl3, safe_read, safe_write, fake::SYSREGS);
31975#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31976write_sysreg!(icc_dir: (p15, 0, c11, c12, 1), u32: IccDir, safe, fake::SYSREGS);
31977#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31978write_sysreg!(icc_dir_el1: s3_0_c12_c11_1, u64: IccDirEl1, safe, fake::SYSREGS);
31979#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31980write_sysreg!(icc_eoir0: (p15, 0, c8, c12, 1), u32: IccEoir0, safe, fake::SYSREGS);
31981#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31982write_sysreg!(icc_eoir0_el1: s3_0_c12_c8_1, u64: IccEoir0El1, safe, fake::SYSREGS);
31983#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31984write_sysreg!(icc_eoir1: (p15, 0, c12, c12, 1), u32: IccEoir1, safe, fake::SYSREGS);
31985#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31986write_sysreg!(icc_eoir1_el1: s3_0_c12_c12_1, u64: IccEoir1El1, safe, fake::SYSREGS);
31987#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31988read_sysreg!(icc_hppir0: (p15, 0, c8, c12, 2), u32: IccHppir0, safe, fake::SYSREGS);
31989#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31990read_sysreg!(icc_hppir0_el1: s3_0_c12_c8_2, u64: IccHppir0El1, safe, fake::SYSREGS);
31991#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31992read_sysreg!(icc_hppir1: (p15, 0, c12, c12, 2), u32: IccHppir1, safe, fake::SYSREGS);
31993#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
31994read_sysreg!(icc_hppir1_el1: s3_0_c12_c12_2, u64: IccHppir1El1, safe, fake::SYSREGS);
31995#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31996read_write_sysreg!(icc_hsre: (p15, 4, c9, c12, 5), u32: IccHsre, safe_read, fake::SYSREGS);
31997#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
31998read_sysreg!(icc_iar0: (p15, 0, c8, c12, 0), u32: IccIar0, safe, fake::SYSREGS);
31999#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32000read_sysreg!(icc_iar0_el1: s3_0_c12_c8_0, u64: IccIar0El1, safe, fake::SYSREGS);
32001#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32002read_sysreg!(icc_iar1: (p15, 0, c12, c12, 0), u32: IccIar1, safe, fake::SYSREGS);
32003#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32004read_sysreg!(icc_iar1_el1: s3_0_c12_c12_0, u64: IccIar1El1, safe, fake::SYSREGS);
32005#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32006read_write_sysreg!(icc_igrpen0: (p15, 0, c12, c12, 6), u32: IccIgrpen0, safe_read, safe_write, fake::SYSREGS);
32007#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32008read_write_sysreg!(icc_igrpen0_el1: s3_0_c12_c12_6, u64: IccIgrpen0El1, safe_read, safe_write, fake::SYSREGS);
32009#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32010read_write_sysreg!(icc_igrpen1: (p15, 0, c12, c12, 7), u32: IccIgrpen1, safe_read, safe_write, fake::SYSREGS);
32011#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32012read_write_sysreg!(icc_igrpen1_el1: s3_0_c12_c12_7, u64: IccIgrpen1El1, safe_read, safe_write, fake::SYSREGS);
32013#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32014read_write_sysreg!(icc_igrpen1_el3: s3_6_c12_c12_7, u64: IccIgrpen1El3, safe_read, safe_write, fake::SYSREGS);
32015#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32016read_write_sysreg!(icc_mctlr: (p15, 6, c12, c12, 4), u32: IccMctlr, safe_read, safe_write, fake::SYSREGS);
32017#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32018read_write_sysreg!(icc_mgrpen1: (p15, 6, c12, c12, 7), u32: IccMgrpen1, safe_read, safe_write, fake::SYSREGS);
32019#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32020read_write_sysreg!(icc_msre: (p15, 6, c12, c12, 5), u32: IccMsre, safe_read, fake::SYSREGS);
32021#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32022read_sysreg!(icc_nmiar1_el1: s3_0_c12_c9_5, u64: IccNmiar1El1, safe, fake::SYSREGS);
32023#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32024read_write_sysreg!(icc_pmr: (p15, 0, c6, c4, 0), u32: IccPmr, safe_read, safe_write, fake::SYSREGS);
32025#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32026read_write_sysreg!(icc_pmr_el1: s3_0_c4_c6_0, u64: IccPmrEl1, safe_read, safe_write, fake::SYSREGS);
32027#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32028read_sysreg!(icc_rpr: (p15, 0, c11, c12, 3), u32: IccRpr, safe, fake::SYSREGS);
32029#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32030read_sysreg!(icc_rpr_el1: s3_0_c12_c11_3, u64: IccRprEl1, safe, fake::SYSREGS);
32031#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32032write_sysreg!(icc_sgi0r: (p15, 2, c12), u64: IccSgi0r, safe, fake::SYSREGS);
32033#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32034write_sysreg!(icc_sgi0r_el1: s3_0_c12_c11_7, u64: IccSgi0rEl1, safe, fake::SYSREGS);
32035#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32036write_sysreg!(icc_sgi1r: (p15, 0, c12), u64: IccSgi1r, safe, fake::SYSREGS);
32037#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32038write_sysreg!(icc_sgi1r_el1: s3_0_c12_c11_5, u64: IccSgi1rEl1, safe, fake::SYSREGS);
32039#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32040read_write_sysreg!(icc_sre: (p15, 0, c12, c12, 5), u32: IccSre, safe_read, fake::SYSREGS);
32041#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32042read_write_sysreg!(icc_sre_el1: s3_0_c12_c12_5, u64: IccSreEl1, safe_read, fake::SYSREGS);
32043#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32044read_write_sysreg!(icc_sre_el2: s3_4_c12_c9_5, u64: IccSreEl2, safe_read, fake::SYSREGS);
32045#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32046read_write_sysreg! {
32047 icc_sre_el3: s3_6_c12_c12_5, u64: IccSreEl3, safe_read, fake::SYSREGS
32051}
32052#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32053read_write_sysreg!(ich_hcr_el2: s3_4_c12_c11_0, u64: IchHcrEl2, safe_read, fake::SYSREGS);
32054#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32055read_write_sysreg!(ich_vmcr_el2: s3_4_c12_c11_7, u64: IchVmcrEl2, safe_read, safe_write, fake::SYSREGS);
32056#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32057read_sysreg!(id_aa64dfr0_el1, u64: IdAa64dfr0El1, safe, fake::SYSREGS);
32058#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32059read_sysreg!(id_aa64dfr1_el1, u64: IdAa64dfr1El1, safe, fake::SYSREGS);
32060#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32061read_sysreg!(id_aa64isar1_el1, u64: IdAa64isar1El1, safe, fake::SYSREGS);
32062#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32063read_sysreg!(id_aa64isar2_el1, u64: IdAa64isar2El1, safe, fake::SYSREGS);
32064#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32065read_sysreg!(id_aa64mmfr0_el1, u64: IdAa64mmfr0El1, safe, fake::SYSREGS);
32066#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32067read_sysreg!(id_aa64mmfr1_el1, u64: IdAa64mmfr1El1, safe, fake::SYSREGS);
32068#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32069read_sysreg!(id_aa64mmfr2_el1, u64: IdAa64mmfr2El1, safe, fake::SYSREGS);
32070#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32071read_sysreg!(id_aa64mmfr3_el1, u64: IdAa64mmfr3El1, safe, fake::SYSREGS);
32072#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32073read_sysreg!(id_aa64pfr0_el1, u64: IdAa64pfr0El1, safe, fake::SYSREGS);
32074#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32075read_sysreg!(id_aa64pfr1_el1, u64: IdAa64pfr1El1, safe, fake::SYSREGS);
32076#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32077read_sysreg!(id_aa64smfr0_el1: s3_0_c0_c4_5, u64: IdAa64smfr0El1, safe, fake::SYSREGS);
32078#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32079read_sysreg!(id_afr0: (p15, 0, c1, c0, 3), u32, safe, fake::SYSREGS);
32080#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32081read_sysreg!(id_dfr0: (p15, 0, c1, c0, 2), u32: IdDfr0, safe, fake::SYSREGS);
32082#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32083read_sysreg!(id_dfr1: (p15, 0, c3, c0, 5), u32: IdDfr1, safe, fake::SYSREGS);
32084#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32085read_sysreg!(id_isar0: (p15, 0, c2, c0, 0), u32: IdIsar0, safe, fake::SYSREGS);
32086#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32087read_sysreg!(id_isar1: (p15, 0, c2, c0, 1), u32: IdIsar1, safe, fake::SYSREGS);
32088#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32089read_sysreg!(id_isar2: (p15, 0, c2, c0, 2), u32: IdIsar2, safe, fake::SYSREGS);
32090#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32091read_sysreg!(id_isar3: (p15, 0, c2, c0, 3), u32: IdIsar3, safe, fake::SYSREGS);
32092#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32093read_sysreg!(id_isar4: (p15, 0, c2, c0, 4), u32: IdIsar4, safe, fake::SYSREGS);
32094#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32095read_sysreg!(id_isar5: (p15, 0, c2, c0, 5), u32: IdIsar5, safe, fake::SYSREGS);
32096#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32097read_sysreg!(id_isar6: (p15, 0, c2, c0, 7), u32: IdIsar6, safe, fake::SYSREGS);
32098#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32099read_sysreg!(id_mmfr0: (p15, 0, c1, c0, 4), u32: IdMmfr0, safe, fake::SYSREGS);
32100#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32101read_sysreg!(id_mmfr1: (p15, 0, c1, c0, 5), u32: IdMmfr1, safe, fake::SYSREGS);
32102#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32103read_sysreg!(id_mmfr2: (p15, 0, c1, c0, 6), u32: IdMmfr2, safe, fake::SYSREGS);
32104#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32105read_sysreg!(id_mmfr3: (p15, 0, c1, c0, 7), u32: IdMmfr3, safe, fake::SYSREGS);
32106#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32107read_sysreg!(id_mmfr4: (p15, 0, c2, c0, 6), u32: IdMmfr4, safe, fake::SYSREGS);
32108#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32109read_sysreg!(id_mmfr5: (p15, 0, c3, c0, 6), u32: IdMmfr5, safe, fake::SYSREGS);
32110#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32111read_sysreg!(id_pfr0: (p15, 0, c1, c0, 0), u32: IdPfr0, safe, fake::SYSREGS);
32112#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32113read_sysreg!(id_pfr1: (p15, 0, c1, c0, 1), u32: IdPfr1, safe, fake::SYSREGS);
32114#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32115read_sysreg!(id_pfr2: (p15, 0, c3, c0, 4), u32: IdPfr2, safe, fake::SYSREGS);
32116#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32117read_write_sysreg!(ifar: (p15, 0, c0, c6, 2), u32: Ifar, safe_read, fake::SYSREGS);
32118#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32119read_write_sysreg!(ifsr: (p15, 0, c0, c5, 1), u32: Ifsr, safe_read, fake::SYSREGS);
32120#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32121read_sysreg!(isr: (p15, 0, c1, c12, 0), u32: Isr, safe, fake::SYSREGS);
32122#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32123read_sysreg!(isr_el1, u64: IsrEl1, safe, fake::SYSREGS);
32124#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32125read_sysreg!(jidr: (p14, 7, c0, c0, 0), u32, safe, fake::SYSREGS);
32126#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32127read_write_sysreg!(jmcr: (p14, 7, c0, c2, 0), u32, safe_read, fake::SYSREGS);
32128#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32129read_write_sysreg!(joscr: (p14, 7, c0, c1, 0), u32, safe_read, fake::SYSREGS);
32130#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32131read_write_sysreg!(mair0: (p15, 0, c2, c10, 0), u32: Mair0, safe_read, fake::SYSREGS);
32132#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32133read_write_sysreg!(mair1: (p15, 0, c2, c10, 1), u32: Mair1, safe_read, fake::SYSREGS);
32134#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32135read_write_sysreg!(mair_el1, u64: MairEl1, safe_read, fake::SYSREGS);
32136#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32137read_write_sysreg!(mair_el2, u64: MairEl2, safe_read, fake::SYSREGS);
32138#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32139read_write_sysreg! {
32140 mair_el3, u64: MairEl3, safe_read, fake::SYSREGS
32144}
32145#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32146read_write_sysreg!(mdccint_el1, u64: MdccintEl1, safe_read, safe_write, fake::SYSREGS);
32147#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32148read_write_sysreg!(mdcr_el2, u64: MdcrEl2, safe_read, safe_write, fake::SYSREGS);
32149#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32150read_write_sysreg!(mdcr_el3, u64: MdcrEl3, safe_read, safe_write, fake::SYSREGS);
32151#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32152read_write_sysreg!(mdscr_el1, u64: MdscrEl1, safe_read, safe_write, fake::SYSREGS);
32153#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32154read_sysreg!(midr: (p15, 0, c0, c0, 0), u32: Midr, safe, fake::SYSREGS);
32155#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32156read_sysreg!(midr_el1, u64: MidrEl1, safe, fake::SYSREGS);
32157#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32158read_write_sysreg!(mpam2_el2: s3_4_c10_c5_0, u64: Mpam2El2, safe_read, fake::SYSREGS);
32159#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32160read_write_sysreg!(mpam3_el3: s3_6_c10_c5_0, u64: Mpam3El3, safe_read, fake::SYSREGS);
32161#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32162read_write_sysreg!(mpamhcr_el2: s3_4_c10_c4_0, u64: MpamhcrEl2, safe_read, fake::SYSREGS);
32163#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32164read_sysreg!(mpamidr_el1: s3_0_c10_c4_4, u64: MpamidrEl1, safe, fake::SYSREGS);
32165#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32166read_write_sysreg!(mpamvpm0_el2: s3_4_c10_c6_0, u64: Mpamvpm0El2, safe_read, fake::SYSREGS);
32167#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32168read_write_sysreg!(mpamvpm1_el2: s3_4_c10_c6_1, u64: Mpamvpm1El2, safe_read, fake::SYSREGS);
32169#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32170read_write_sysreg!(mpamvpm2_el2: s3_4_c10_c6_2, u64: Mpamvpm2El2, safe_read, fake::SYSREGS);
32171#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32172read_write_sysreg!(mpamvpm3_el2: s3_4_c10_c6_3, u64: Mpamvpm3El2, safe_read, fake::SYSREGS);
32173#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32174read_write_sysreg!(mpamvpm4_el2: s3_4_c10_c6_4, u64: Mpamvpm4El2, safe_read, fake::SYSREGS);
32175#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32176read_write_sysreg!(mpamvpm5_el2: s3_4_c10_c6_5, u64: Mpamvpm5El2, safe_read, fake::SYSREGS);
32177#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32178read_write_sysreg!(mpamvpm6_el2: s3_4_c10_c6_6, u64: Mpamvpm6El2, safe_read, fake::SYSREGS);
32179#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32180read_write_sysreg!(mpamvpm7_el2: s3_4_c10_c6_7, u64: Mpamvpm7El2, safe_read, fake::SYSREGS);
32181#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32182read_write_sysreg!(mpamvpmv_el2: s3_4_c10_c4_1, u64: MpamvpmvEl2, safe_read, fake::SYSREGS);
32183#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32184read_sysreg!(mpidr: (p15, 0, c0, c0, 5), u32: Mpidr, safe, fake::SYSREGS);
32185#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32186read_sysreg!(mpidr_el1, u64: MpidrEl1, safe, fake::SYSREGS);
32187#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32188read_write_sysreg!(mvbar: (p15, 0, c0, c12, 1), u32: Mvbar, safe_read, fake::SYSREGS);
32189#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32190read_write_sysreg!(nmrr: (p15, 0, c2, c10, 1), u32: Nmrr, safe_read, fake::SYSREGS);
32191#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32192read_write_sysreg!(nsacr: (p15, 0, c1, c1, 2), u32: Nsacr, safe_read, fake::SYSREGS);
32193#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32194read_write_sysreg!(par: (p15, 0, c7), u64: Par, safe_read, fake::SYSREGS);
32195#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32196read_write_sysreg!(par_el1, u64: ParEl1, safe_read, fake::SYSREGS);
32197#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32198read_write_sysreg!(pmccfiltr: (p15, 0, c15, c14, 7), u32: Pmccfiltr, safe_read, fake::SYSREGS);
32199#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32200read_write_sysreg!(pmccntr: (p15, 0, c9), u64: Pmccntr, safe_read, fake::SYSREGS);
32201#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32202read_sysreg!(pmceid0: (p15, 0, c12, c9, 6), u32: Pmceid0, safe, fake::SYSREGS);
32203#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32204read_sysreg!(pmceid1: (p15, 0, c12, c9, 7), u32: Pmceid1, safe, fake::SYSREGS);
32205#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32206read_sysreg!(pmceid2: (p15, 0, c14, c9, 4), u32: Pmceid2, safe, fake::SYSREGS);
32207#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32208read_sysreg!(pmceid3: (p15, 0, c14, c9, 5), u32: Pmceid3, safe, fake::SYSREGS);
32209#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32210read_write_sysreg!(pmcntenclr: (p15, 0, c12, c9, 2), u32: Pmcntenclr, safe_read, fake::SYSREGS);
32211#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32212read_write_sysreg!(pmcntenset: (p15, 0, c12, c9, 1), u32: Pmcntenset, safe_read, fake::SYSREGS);
32213#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32214read_write_sysreg!(pmcr: (p15, 0, c12, c9, 0), u32: Pmcr, safe_read, fake::SYSREGS);
32215#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32216read_write_sysreg!(pmcr_el0: s3_3_c9_c12_0, u64: PmcrEl0, safe_read, safe_write, fake::SYSREGS);
32217#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32218read_write_sysreg!(pmintenclr: (p15, 0, c14, c9, 2), u32: Pmintenclr, safe_read, fake::SYSREGS);
32219#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32220read_write_sysreg!(pmintenset: (p15, 0, c14, c9, 1), u32: Pmintenset, safe_read, fake::SYSREGS);
32221#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32222read_sysreg!(pmmir: (p15, 0, c14, c9, 6), u32: Pmmir, safe, fake::SYSREGS);
32223#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32224read_write_sysreg!(pmovsr: (p15, 0, c12, c9, 3), u32: Pmovsr, safe_read, fake::SYSREGS);
32225#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32226read_write_sysreg!(pmovsset: (p15, 0, c14, c9, 3), u32: Pmovsset, safe_read, fake::SYSREGS);
32227#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32228read_write_sysreg!(pmselr: (p15, 0, c12, c9, 5), u32: Pmselr, safe_read, fake::SYSREGS);
32229#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32230write_sysreg!(pmswinc: (p15, 0, c12, c9, 4), u32: Pmswinc, fake::SYSREGS);
32231#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32232read_write_sysreg!(pmuserenr: (p15, 0, c14, c9, 0), u32: Pmuserenr, safe_read, fake::SYSREGS);
32233#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32234read_write_sysreg!(pmxevtyper: (p15, 0, c13, c9, 1), u32: Pmxevtyper, safe_read, fake::SYSREGS);
32235#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32236read_write_sysreg!(prrr: (p15, 0, c2, c10, 0), u32: Prrr, safe_read, fake::SYSREGS);
32237#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32238read_sysreg!(revidr: (p15, 0, c0, c0, 6), u32, safe, fake::SYSREGS);
32239#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32240read_write_sysreg!(rgsr_el1: s3_0_c1_c0_5, u64: RgsrEl1, safe_read, safe_write, fake::SYSREGS);
32241#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32242read_write_sysreg!(rmr: (p15, 0, c0, c12, 2), u32: Rmr, safe_read, fake::SYSREGS);
32243#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32244read_sysreg!(rvbar: (p15, 0, c0, c12, 1), u32: Rvbar, safe, fake::SYSREGS);
32245#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32246read_write_sysreg!(scr: (p15, 0, c1, c1, 0), u32: Scr, safe_read, fake::SYSREGS);
32247#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32248read_write_sysreg!(scr_el3, u64: ScrEl3, safe_read, fake::SYSREGS);
32249#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32250read_write_sysreg!(sctlr: (p15, 0, c0, c1, 0), u32: Sctlr, safe_read, fake::SYSREGS);
32251#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32252read_write_sysreg!(sctlr2_el3: s3_6_c1_c0_3, u64: Sctlr2El3, safe_read, fake::SYSREGS);
32253#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32254read_write_sysreg!(sctlr_el1, u64: SctlrEl1, safe_read, fake::SYSREGS);
32255#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32256read_write_sysreg!(sctlr_el2, u64: SctlrEl2, safe_read, fake::SYSREGS);
32257#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32258read_write_sysreg! {
32259 sctlr_el3, u64: SctlrEl3, safe_read, fake::SYSREGS
32263}
32264#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32265read_write_sysreg!(sdcr: (p15, 0, c3, c1, 1), u32: Sdcr, safe_read, fake::SYSREGS);
32266#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32267read_write_sysreg!(sder: (p15, 0, c1, c1, 1), u32: Sder, safe_read, fake::SYSREGS);
32268#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32269read_write_sysreg!(smcr_el3: s3_6_c1_c2_6, u64: SmcrEl3, safe_read, fake::SYSREGS);
32270#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32271read_write_sysreg!(spsr_el1, u64: SpsrEl1, safe_read, fake::SYSREGS);
32272#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32273read_write_sysreg!(spsr_el2, u64: SpsrEl2, safe_read, fake::SYSREGS);
32274#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32275read_write_sysreg!(spsr_el3, u64: SpsrEl3, safe_read, fake::SYSREGS);
32276#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32277read_write_sysreg!(sp_el1, u64: SpEl1, safe_read, fake::SYSREGS);
32278#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32279read_write_sysreg!(sp_el2, u64: SpEl2, safe_read, fake::SYSREGS);
32280#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32281read_write_sysreg!(svcr: s3_3_c4_c2_2, u64: Svcr, safe_read, fake::SYSREGS);
32282#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32283read_sysreg!(tcmtr: (p15, 0, c0, c0, 2), u32, safe, fake::SYSREGS);
32284#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32285read_write_sysreg!(tcr2_el1: s3_0_c2_c0_3, u64: Tcr2El1, safe_read, fake::SYSREGS);
32286#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32287read_write_sysreg!(tcr2_el2: s3_4_c2_c0_3, u64: Tcr2El2, safe_read, fake::SYSREGS);
32288#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32289read_write_sysreg!(tcr_el1, u64: TcrEl1, safe_read, fake::SYSREGS);
32290#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32291read_write_sysreg!(tcr_el2, u64: TcrEl2, safe_read, fake::SYSREGS);
32292#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32293read_write_sysreg! {
32294 tcr_el3, u64: TcrEl3, safe_read, fake::SYSREGS
32298}
32299#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32300read_write_sysreg!(tfsre0_el1: s3_0_c5_c6_1, u64: Tfsre0El1, safe_read, safe_write, fake::SYSREGS);
32301#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32302read_write_sysreg!(tfsr_el1: s3_0_c5_c6_0, u64: TfsrEl1, safe_read, safe_write, fake::SYSREGS);
32303#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32304read_write_sysreg!(tfsr_el2: s3_4_c5_c6_0, u64: TfsrEl2, safe_read, safe_write, fake::SYSREGS);
32305#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32306read_sysreg!(tlbtr: (p15, 0, c0, c0, 3), u32: Tlbtr, safe, fake::SYSREGS);
32307#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32308read_write_sysreg!(tpidrprw: (p15, 0, c0, c13, 4), u32: Tpidrprw, safe_read, fake::SYSREGS);
32309#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32310read_write_sysreg!(tpidrro_el0, u64: TpidrroEl0, safe_read, fake::SYSREGS);
32311#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32312read_write_sysreg!(tpidruro: (p15, 0, c0, c13, 3), u32: Tpidruro, safe_read, fake::SYSREGS);
32313#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32314read_write_sysreg!(tpidrurw: (p15, 0, c0, c13, 2), u32: Tpidrurw, safe_read, fake::SYSREGS);
32315#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32316read_write_sysreg!(tpidr_el0, u64: TpidrEl0, safe_read, fake::SYSREGS);
32317#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32318read_write_sysreg!(tpidr_el1, u64: TpidrEl1, safe_read, fake::SYSREGS);
32319#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32320read_write_sysreg!(tpidr_el2, u64: TpidrEl2, safe_read, fake::SYSREGS);
32321#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32322read_write_sysreg!(tpidr_el3, u64: TpidrEl3, safe_read, fake::SYSREGS);
32323#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32324read_write_sysreg!(trfcr: (p15, 0, c2, c1, 1), u32: Trfcr, safe_read, fake::SYSREGS);
32325#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32326read_write_sysreg!(ttbcr: (p15, 0, c0, c2, 2), u32: Ttbcr, safe_read, fake::SYSREGS);
32327#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32328read_write_sysreg!(ttbcr2: (p15, 0, c0, c2, 3), u32: Ttbcr2, safe_read, fake::SYSREGS);
32329#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32330read_write_sysreg!(ttbr0: (p15, 0, c2), u64: Ttbr0, safe_read, fake::SYSREGS);
32331#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32332read_write_sysreg! {
32333 ttbr0_el1, u64: Ttbr0El1, safe_read, fake::SYSREGS
32337}
32338#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32339read_write_sysreg! {
32340 ttbr0_el2, u64: Ttbr0El2, safe_read, fake::SYSREGS
32344}
32345#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32346read_write_sysreg! {
32347 ttbr0_el3, u64: Ttbr0El3, safe_read, fake::SYSREGS
32351}
32352#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32353read_write_sysreg!(ttbr1: (p15, 1, c2), u64: Ttbr1, safe_read, fake::SYSREGS);
32354#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32355read_write_sysreg! {
32356 ttbr1_el1, u64: Ttbr1El1, safe_read, fake::SYSREGS
32360}
32361#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32362read_write_sysreg! {
32363 ttbr1_el2: s3_4_c2_c0_1, u64: Ttbr1El2, safe_read, fake::SYSREGS
32367}
32368#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32369read_write_sysreg!(vbar: (p15, 0, c0, c12, 0), u32: Vbar, safe_read, fake::SYSREGS);
32370#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32371read_write_sysreg! {
32372 vbar_el1, u64: VbarEl1, safe_read, fake::SYSREGS
32376}
32377#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32378read_write_sysreg! {
32379 vbar_el2, u64: VbarEl2, safe_read, fake::SYSREGS
32383}
32384#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32385read_write_sysreg!(vdfsr: (p15, 4, c2, c5, 3), u32: Vdfsr, safe_read, fake::SYSREGS);
32386#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32387read_write_sysreg!(vdisr: (p15, 0, c1, c12, 1), u32: Vdisr, safe_read, fake::SYSREGS);
32388#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32389read_write_sysreg!(vdisr_el2: s3_4_c12_c1_1, u64: VdisrEl2, safe_read, safe_write, fake::SYSREGS);
32390#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32391read_write_sysreg!(vmpidr: (p15, 0, c0, c0, 5), u32: Vmpidr, safe_read, fake::SYSREGS);
32392#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32393read_write_sysreg!(vmpidr_el2, u64: VmpidrEl2, safe_read, safe_write, fake::SYSREGS);
32394#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32395read_write_sysreg!(vpidr: (p15, 0, c0, c0, 0), u32: Vpidr, safe_read, fake::SYSREGS);
32396#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32397read_write_sysreg!(vpidr_el2, u64: VpidrEl2, safe_read, safe_write, fake::SYSREGS);
32398#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32399read_write_sysreg!(vsesr_el2: s3_4_c5_c2_3, u64: VsesrEl2, safe_read, safe_write, fake::SYSREGS);
32400#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32401read_write_sysreg!(vtcr: (p15, 4, c1, c2, 2), u32: Vtcr, safe_read, fake::SYSREGS);
32402#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32403read_write_sysreg!(vtcr_el2, u64: VtcrEl2, safe_read, fake::SYSREGS);
32404#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32405read_write_sysreg!(vttbr: (p15, 6, c2), u64: Vttbr, safe_read, fake::SYSREGS);
32406#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32407read_write_sysreg! {
32408 vttbr_el2, u64: VttbrEl2, safe_read, fake::SYSREGS
32412}
32413#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32414read_write_sysreg!(zcr_el3: s3_6_c1_c2_0, u64: ZcrEl3, safe_read, fake::SYSREGS);