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 AmcfgrEl0: u64 {
117 const HDBG = 1 << 24;
119 }
120}
121
122impl AmcfgrEl0 {
123 pub const N_SHIFT: u32 = 0;
125 pub const N_MASK: u64 = 0b11111111;
127 pub const SIZE_SHIFT: u32 = 8;
129 pub const SIZE_MASK: u64 = 0b111111;
131 pub const HDBG_SHIFT: u32 = 24;
133 pub const NCG_SHIFT: u32 = 28;
135 pub const NCG_MASK: u64 = 0b1111;
137
138 pub const fn n(self) -> u8 {
140 ((self.bits() >> Self::N_SHIFT) & 0b11111111) as u8
141 }
142
143 pub const fn set_n(&mut self, value: u8) {
145 let offset = Self::N_SHIFT;
146 assert!(value & (Self::N_MASK as u8) == value);
147 *self = Self::from_bits_retain(
148 (self.bits() & !(Self::N_MASK << offset)) | ((value as u64) << offset),
149 );
150 }
151
152 pub const fn with_n(mut self, value: u8) -> Self {
154 self.set_n(value);
155 self
156 }
157
158 pub const fn size(self) -> u8 {
160 ((self.bits() >> Self::SIZE_SHIFT) & 0b111111) as u8
161 }
162
163 pub const fn set_size(&mut self, value: u8) {
165 let offset = Self::SIZE_SHIFT;
166 assert!(value & (Self::SIZE_MASK as u8) == value);
167 *self = Self::from_bits_retain(
168 (self.bits() & !(Self::SIZE_MASK << offset)) | ((value as u64) << offset),
169 );
170 }
171
172 pub const fn with_size(mut self, value: u8) -> Self {
174 self.set_size(value);
175 self
176 }
177
178 pub const fn ncg(self) -> u8 {
180 ((self.bits() >> Self::NCG_SHIFT) & 0b1111) as u8
181 }
182
183 pub const fn set_ncg(&mut self, value: u8) {
185 let offset = Self::NCG_SHIFT;
186 assert!(value & (Self::NCG_MASK as u8) == value);
187 *self = Self::from_bits_retain(
188 (self.bits() & !(Self::NCG_MASK << offset)) | ((value as u64) << offset),
189 );
190 }
191
192 pub const fn with_ncg(mut self, value: u8) -> Self {
194 self.set_ncg(value);
195 self
196 }
197}
198
199bitflags! {
200 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
202 #[repr(transparent)]
203 pub struct Amcgcr: u32 {
204 }
205}
206
207impl Amcgcr {
208 pub const CG0NC_SHIFT: u32 = 0;
210 pub const CG0NC_MASK: u32 = 0b11111111;
212 pub const CG1NC_SHIFT: u32 = 8;
214 pub const CG1NC_MASK: u32 = 0b11111111;
216
217 pub const fn cg0nc(self) -> u8 {
219 ((self.bits() >> Self::CG0NC_SHIFT) & 0b11111111) as u8
220 }
221
222 pub const fn set_cg0nc(&mut self, value: u8) {
224 let offset = Self::CG0NC_SHIFT;
225 assert!(value & (Self::CG0NC_MASK as u8) == value);
226 *self = Self::from_bits_retain(
227 (self.bits() & !(Self::CG0NC_MASK << offset)) | ((value as u32) << offset),
228 );
229 }
230
231 pub const fn with_cg0nc(mut self, value: u8) -> Self {
233 self.set_cg0nc(value);
234 self
235 }
236
237 pub const fn cg1nc(self) -> u8 {
239 ((self.bits() >> Self::CG1NC_SHIFT) & 0b11111111) as u8
240 }
241
242 pub const fn set_cg1nc(&mut self, value: u8) {
244 let offset = Self::CG1NC_SHIFT;
245 assert!(value & (Self::CG1NC_MASK as u8) == value);
246 *self = Self::from_bits_retain(
247 (self.bits() & !(Self::CG1NC_MASK << offset)) | ((value as u32) << offset),
248 );
249 }
250
251 pub const fn with_cg1nc(mut self, value: u8) -> Self {
253 self.set_cg1nc(value);
254 self
255 }
256}
257
258bitflags! {
259 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
261 #[repr(transparent)]
262 pub struct AmcgcrEl0: u64 {
263 }
264}
265
266impl AmcgcrEl0 {
267 pub const CG0NC_SHIFT: u32 = 0;
269 pub const CG0NC_MASK: u64 = 0b11111111;
271 pub const CG1NC_SHIFT: u32 = 8;
273 pub const CG1NC_MASK: u64 = 0b11111111;
275
276 pub const fn cg0nc(self) -> u8 {
278 ((self.bits() >> Self::CG0NC_SHIFT) & 0b11111111) as u8
279 }
280
281 pub const fn set_cg0nc(&mut self, value: u8) {
283 let offset = Self::CG0NC_SHIFT;
284 assert!(value & (Self::CG0NC_MASK as u8) == value);
285 *self = Self::from_bits_retain(
286 (self.bits() & !(Self::CG0NC_MASK << offset)) | ((value as u64) << offset),
287 );
288 }
289
290 pub const fn with_cg0nc(mut self, value: u8) -> Self {
292 self.set_cg0nc(value);
293 self
294 }
295
296 pub const fn cg1nc(self) -> u8 {
298 ((self.bits() >> Self::CG1NC_SHIFT) & 0b11111111) as u8
299 }
300
301 pub const fn set_cg1nc(&mut self, value: u8) {
303 let offset = Self::CG1NC_SHIFT;
304 assert!(value & (Self::CG1NC_MASK as u8) == value);
305 *self = Self::from_bits_retain(
306 (self.bits() & !(Self::CG1NC_MASK << offset)) | ((value as u64) << offset),
307 );
308 }
309
310 pub const fn with_cg1nc(mut self, value: u8) -> Self {
312 self.set_cg1nc(value);
313 self
314 }
315}
316
317bitflags! {
318 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
320 #[repr(transparent)]
321 pub struct Amcntenclr0: u32 {
322 const P0 = 1 << 0;
324 const P1 = 1 << 1;
326 const P2 = 1 << 2;
328 const P3 = 1 << 3;
330 }
331}
332
333impl Amcntenclr0 {
334 pub const P_SHIFT: u32 = 0;
336}
337
338bitflags! {
339 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
341 #[repr(transparent)]
342 pub struct Amcntenclr0El0: u64 {
343 const P0 = 1 << 0;
345 const P1 = 1 << 1;
347 const P2 = 1 << 2;
349 const P3 = 1 << 3;
351 }
352}
353
354impl Amcntenclr0El0 {
355 pub const P_SHIFT: u32 = 0;
357}
358
359bitflags! {
360 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
362 #[repr(transparent)]
363 pub struct Amcntenclr1: u32 {
364 const P0 = 1 << 0;
366 const P1 = 1 << 1;
368 const P2 = 1 << 2;
370 const P3 = 1 << 3;
372 const P4 = 1 << 4;
374 const P5 = 1 << 5;
376 const P6 = 1 << 6;
378 const P7 = 1 << 7;
380 const P8 = 1 << 8;
382 const P9 = 1 << 9;
384 const P10 = 1 << 10;
386 const P11 = 1 << 11;
388 const P12 = 1 << 12;
390 const P13 = 1 << 13;
392 const P14 = 1 << 14;
394 const P15 = 1 << 15;
396 }
397}
398
399impl Amcntenclr1 {
400 pub const P_SHIFT: u32 = 0;
402}
403
404bitflags! {
405 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
407 #[repr(transparent)]
408 pub struct Amcntenclr1El0: u64 {
409 const P0 = 1 << 0;
411 const P1 = 1 << 1;
413 const P2 = 1 << 2;
415 const P3 = 1 << 3;
417 const P4 = 1 << 4;
419 const P5 = 1 << 5;
421 const P6 = 1 << 6;
423 const P7 = 1 << 7;
425 const P8 = 1 << 8;
427 const P9 = 1 << 9;
429 const P10 = 1 << 10;
431 const P11 = 1 << 11;
433 const P12 = 1 << 12;
435 const P13 = 1 << 13;
437 const P14 = 1 << 14;
439 const P15 = 1 << 15;
441 }
442}
443
444impl Amcntenclr1El0 {
445 pub const P_SHIFT: u32 = 0;
447}
448
449bitflags! {
450 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
452 #[repr(transparent)]
453 pub struct Amcntenset0: u32 {
454 const P0 = 1 << 0;
456 const P1 = 1 << 1;
458 const P2 = 1 << 2;
460 const P3 = 1 << 3;
462 }
463}
464
465impl Amcntenset0 {
466 pub const P_SHIFT: u32 = 0;
468}
469
470bitflags! {
471 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
473 #[repr(transparent)]
474 pub struct Amcntenset0El0: u64 {
475 const P0 = 1 << 0;
477 const P1 = 1 << 1;
479 const P2 = 1 << 2;
481 const P3 = 1 << 3;
483 }
484}
485
486impl Amcntenset0El0 {
487 pub const P_SHIFT: u32 = 0;
489}
490
491bitflags! {
492 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
494 #[repr(transparent)]
495 pub struct Amcntenset1: u32 {
496 const P0 = 1 << 0;
498 const P1 = 1 << 1;
500 const P2 = 1 << 2;
502 const P3 = 1 << 3;
504 const P4 = 1 << 4;
506 const P5 = 1 << 5;
508 const P6 = 1 << 6;
510 const P7 = 1 << 7;
512 const P8 = 1 << 8;
514 const P9 = 1 << 9;
516 const P10 = 1 << 10;
518 const P11 = 1 << 11;
520 const P12 = 1 << 12;
522 const P13 = 1 << 13;
524 const P14 = 1 << 14;
526 const P15 = 1 << 15;
528 }
529}
530
531impl Amcntenset1 {
532 pub const P_SHIFT: u32 = 0;
534}
535
536bitflags! {
537 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
539 #[repr(transparent)]
540 pub struct Amcntenset1El0: u64 {
541 const P0 = 1 << 0;
543 const P1 = 1 << 1;
545 const P2 = 1 << 2;
547 const P3 = 1 << 3;
549 const P4 = 1 << 4;
551 const P5 = 1 << 5;
553 const P6 = 1 << 6;
555 const P7 = 1 << 7;
557 const P8 = 1 << 8;
559 const P9 = 1 << 9;
561 const P10 = 1 << 10;
563 const P11 = 1 << 11;
565 const P12 = 1 << 12;
567 const P13 = 1 << 13;
569 const P14 = 1 << 14;
571 const P15 = 1 << 15;
573 }
574}
575
576impl Amcntenset1El0 {
577 pub const P_SHIFT: u32 = 0;
579}
580
581bitflags! {
582 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
584 #[repr(transparent)]
585 pub struct Amcr: u32 {
586 const HDBG = 1 << 10;
588 const CG1RZ = 1 << 17;
590 }
591}
592
593impl Amcr {
594 pub const HDBG_SHIFT: u32 = 10;
596 pub const CG1RZ_SHIFT: u32 = 17;
598}
599
600bitflags! {
601 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
603 #[repr(transparent)]
604 pub struct AmcrEl0: u64 {
605 const HDBG = 1 << 10;
607 const CG1RZ = 1 << 17;
609 }
610}
611
612impl AmcrEl0 {
613 pub const HDBG_SHIFT: u32 = 10;
615 pub const CG1RZ_SHIFT: u32 = 17;
617}
618
619bitflags! {
620 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
622 #[repr(transparent)]
623 pub struct Amevcntr00: u64 {
624 }
625}
626
627impl Amevcntr00 {
628 pub const ACNT_SHIFT: u32 = 0;
630 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
632
633 pub const fn acnt(self) -> u64 {
635 ((self.bits() >> Self::ACNT_SHIFT)
636 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
637 }
638
639 pub const fn set_acnt(&mut self, value: u64) {
641 let offset = Self::ACNT_SHIFT;
642 assert!(value & (Self::ACNT_MASK as u64) == value);
643 *self = Self::from_bits_retain(
644 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
645 );
646 }
647
648 pub const fn with_acnt(mut self, value: u64) -> Self {
650 self.set_acnt(value);
651 self
652 }
653}
654
655bitflags! {
656 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
658 #[repr(transparent)]
659 pub struct Amevcntr00El0: u64 {
660 }
661}
662
663impl Amevcntr00El0 {
664 pub const ACNT_SHIFT: u32 = 0;
666 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
668
669 pub const fn acnt(self) -> u64 {
671 ((self.bits() >> Self::ACNT_SHIFT)
672 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
673 }
674
675 pub const fn set_acnt(&mut self, value: u64) {
677 let offset = Self::ACNT_SHIFT;
678 assert!(value & (Self::ACNT_MASK as u64) == value);
679 *self = Self::from_bits_retain(
680 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
681 );
682 }
683
684 pub const fn with_acnt(mut self, value: u64) -> Self {
686 self.set_acnt(value);
687 self
688 }
689}
690
691bitflags! {
692 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
694 #[repr(transparent)]
695 pub struct Amevcntr01: u64 {
696 }
697}
698
699impl Amevcntr01 {
700 pub const ACNT_SHIFT: u32 = 0;
702 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
704
705 pub const fn acnt(self) -> u64 {
707 ((self.bits() >> Self::ACNT_SHIFT)
708 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
709 }
710
711 pub const fn set_acnt(&mut self, value: u64) {
713 let offset = Self::ACNT_SHIFT;
714 assert!(value & (Self::ACNT_MASK as u64) == value);
715 *self = Self::from_bits_retain(
716 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
717 );
718 }
719
720 pub const fn with_acnt(mut self, value: u64) -> Self {
722 self.set_acnt(value);
723 self
724 }
725}
726
727bitflags! {
728 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
730 #[repr(transparent)]
731 pub struct Amevcntr01El0: u64 {
732 }
733}
734
735impl Amevcntr01El0 {
736 pub const ACNT_SHIFT: u32 = 0;
738 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
740
741 pub const fn acnt(self) -> u64 {
743 ((self.bits() >> Self::ACNT_SHIFT)
744 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
745 }
746
747 pub const fn set_acnt(&mut self, value: u64) {
749 let offset = Self::ACNT_SHIFT;
750 assert!(value & (Self::ACNT_MASK as u64) == value);
751 *self = Self::from_bits_retain(
752 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
753 );
754 }
755
756 pub const fn with_acnt(mut self, value: u64) -> Self {
758 self.set_acnt(value);
759 self
760 }
761}
762
763bitflags! {
764 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
766 #[repr(transparent)]
767 pub struct Amevcntr02: u64 {
768 }
769}
770
771impl Amevcntr02 {
772 pub const ACNT_SHIFT: u32 = 0;
774 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
776
777 pub const fn acnt(self) -> u64 {
779 ((self.bits() >> Self::ACNT_SHIFT)
780 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
781 }
782
783 pub const fn set_acnt(&mut self, value: u64) {
785 let offset = Self::ACNT_SHIFT;
786 assert!(value & (Self::ACNT_MASK as u64) == value);
787 *self = Self::from_bits_retain(
788 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
789 );
790 }
791
792 pub const fn with_acnt(mut self, value: u64) -> Self {
794 self.set_acnt(value);
795 self
796 }
797}
798
799bitflags! {
800 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
802 #[repr(transparent)]
803 pub struct Amevcntr02El0: u64 {
804 }
805}
806
807impl Amevcntr02El0 {
808 pub const ACNT_SHIFT: u32 = 0;
810 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
812
813 pub const fn acnt(self) -> u64 {
815 ((self.bits() >> Self::ACNT_SHIFT)
816 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
817 }
818
819 pub const fn set_acnt(&mut self, value: u64) {
821 let offset = Self::ACNT_SHIFT;
822 assert!(value & (Self::ACNT_MASK as u64) == value);
823 *self = Self::from_bits_retain(
824 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
825 );
826 }
827
828 pub const fn with_acnt(mut self, value: u64) -> Self {
830 self.set_acnt(value);
831 self
832 }
833}
834
835bitflags! {
836 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
838 #[repr(transparent)]
839 pub struct Amevcntr03: u64 {
840 }
841}
842
843impl Amevcntr03 {
844 pub const ACNT_SHIFT: u32 = 0;
846 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
848
849 pub const fn acnt(self) -> u64 {
851 ((self.bits() >> Self::ACNT_SHIFT)
852 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
853 }
854
855 pub const fn set_acnt(&mut self, value: u64) {
857 let offset = Self::ACNT_SHIFT;
858 assert!(value & (Self::ACNT_MASK as u64) == value);
859 *self = Self::from_bits_retain(
860 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
861 );
862 }
863
864 pub const fn with_acnt(mut self, value: u64) -> Self {
866 self.set_acnt(value);
867 self
868 }
869}
870
871bitflags! {
872 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
874 #[repr(transparent)]
875 pub struct Amevcntr03El0: u64 {
876 }
877}
878
879impl Amevcntr03El0 {
880 pub const ACNT_SHIFT: u32 = 0;
882 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
884
885 pub const fn acnt(self) -> u64 {
887 ((self.bits() >> Self::ACNT_SHIFT)
888 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
889 }
890
891 pub const fn set_acnt(&mut self, value: u64) {
893 let offset = Self::ACNT_SHIFT;
894 assert!(value & (Self::ACNT_MASK as u64) == value);
895 *self = Self::from_bits_retain(
896 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
897 );
898 }
899
900 pub const fn with_acnt(mut self, value: u64) -> Self {
902 self.set_acnt(value);
903 self
904 }
905}
906
907bitflags! {
908 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
910 #[repr(transparent)]
911 pub struct Amevcntr10El0: u64 {
912 }
913}
914
915impl Amevcntr10El0 {
916 pub const ACNT_SHIFT: u32 = 0;
918 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
920
921 pub const fn acnt(self) -> u64 {
923 ((self.bits() >> Self::ACNT_SHIFT)
924 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
925 }
926
927 pub const fn set_acnt(&mut self, value: u64) {
929 let offset = Self::ACNT_SHIFT;
930 assert!(value & (Self::ACNT_MASK as u64) == value);
931 *self = Self::from_bits_retain(
932 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
933 );
934 }
935
936 pub const fn with_acnt(mut self, value: u64) -> Self {
938 self.set_acnt(value);
939 self
940 }
941}
942
943bitflags! {
944 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
946 #[repr(transparent)]
947 pub struct Amevcntr110El0: u64 {
948 }
949}
950
951impl Amevcntr110El0 {
952 pub const ACNT_SHIFT: u32 = 0;
954 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
956
957 pub const fn acnt(self) -> u64 {
959 ((self.bits() >> Self::ACNT_SHIFT)
960 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
961 }
962
963 pub const fn set_acnt(&mut self, value: u64) {
965 let offset = Self::ACNT_SHIFT;
966 assert!(value & (Self::ACNT_MASK as u64) == value);
967 *self = Self::from_bits_retain(
968 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
969 );
970 }
971
972 pub const fn with_acnt(mut self, value: u64) -> Self {
974 self.set_acnt(value);
975 self
976 }
977}
978
979bitflags! {
980 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
982 #[repr(transparent)]
983 pub struct Amevcntr111El0: u64 {
984 }
985}
986
987impl Amevcntr111El0 {
988 pub const ACNT_SHIFT: u32 = 0;
990 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
992
993 pub const fn acnt(self) -> u64 {
995 ((self.bits() >> Self::ACNT_SHIFT)
996 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
997 }
998
999 pub const fn set_acnt(&mut self, value: u64) {
1001 let offset = Self::ACNT_SHIFT;
1002 assert!(value & (Self::ACNT_MASK as u64) == value);
1003 *self = Self::from_bits_retain(
1004 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1005 );
1006 }
1007
1008 pub const fn with_acnt(mut self, value: u64) -> Self {
1010 self.set_acnt(value);
1011 self
1012 }
1013}
1014
1015bitflags! {
1016 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1018 #[repr(transparent)]
1019 pub struct Amevcntr112El0: u64 {
1020 }
1021}
1022
1023impl Amevcntr112El0 {
1024 pub const ACNT_SHIFT: u32 = 0;
1026 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1028
1029 pub const fn acnt(self) -> u64 {
1031 ((self.bits() >> Self::ACNT_SHIFT)
1032 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1033 }
1034
1035 pub const fn set_acnt(&mut self, value: u64) {
1037 let offset = Self::ACNT_SHIFT;
1038 assert!(value & (Self::ACNT_MASK as u64) == value);
1039 *self = Self::from_bits_retain(
1040 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1041 );
1042 }
1043
1044 pub const fn with_acnt(mut self, value: u64) -> Self {
1046 self.set_acnt(value);
1047 self
1048 }
1049}
1050
1051bitflags! {
1052 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1054 #[repr(transparent)]
1055 pub struct Amevcntr113El0: u64 {
1056 }
1057}
1058
1059impl Amevcntr113El0 {
1060 pub const ACNT_SHIFT: u32 = 0;
1062 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1064
1065 pub const fn acnt(self) -> u64 {
1067 ((self.bits() >> Self::ACNT_SHIFT)
1068 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1069 }
1070
1071 pub const fn set_acnt(&mut self, value: u64) {
1073 let offset = Self::ACNT_SHIFT;
1074 assert!(value & (Self::ACNT_MASK as u64) == value);
1075 *self = Self::from_bits_retain(
1076 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1077 );
1078 }
1079
1080 pub const fn with_acnt(mut self, value: u64) -> Self {
1082 self.set_acnt(value);
1083 self
1084 }
1085}
1086
1087bitflags! {
1088 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1090 #[repr(transparent)]
1091 pub struct Amevcntr114El0: u64 {
1092 }
1093}
1094
1095impl Amevcntr114El0 {
1096 pub const ACNT_SHIFT: u32 = 0;
1098 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1100
1101 pub const fn acnt(self) -> u64 {
1103 ((self.bits() >> Self::ACNT_SHIFT)
1104 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1105 }
1106
1107 pub const fn set_acnt(&mut self, value: u64) {
1109 let offset = Self::ACNT_SHIFT;
1110 assert!(value & (Self::ACNT_MASK as u64) == value);
1111 *self = Self::from_bits_retain(
1112 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1113 );
1114 }
1115
1116 pub const fn with_acnt(mut self, value: u64) -> Self {
1118 self.set_acnt(value);
1119 self
1120 }
1121}
1122
1123bitflags! {
1124 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1126 #[repr(transparent)]
1127 pub struct Amevcntr115El0: u64 {
1128 }
1129}
1130
1131impl Amevcntr115El0 {
1132 pub const ACNT_SHIFT: u32 = 0;
1134 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1136
1137 pub const fn acnt(self) -> u64 {
1139 ((self.bits() >> Self::ACNT_SHIFT)
1140 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1141 }
1142
1143 pub const fn set_acnt(&mut self, value: u64) {
1145 let offset = Self::ACNT_SHIFT;
1146 assert!(value & (Self::ACNT_MASK as u64) == value);
1147 *self = Self::from_bits_retain(
1148 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1149 );
1150 }
1151
1152 pub const fn with_acnt(mut self, value: u64) -> Self {
1154 self.set_acnt(value);
1155 self
1156 }
1157}
1158
1159bitflags! {
1160 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1162 #[repr(transparent)]
1163 pub struct Amevcntr11El0: u64 {
1164 }
1165}
1166
1167impl Amevcntr11El0 {
1168 pub const ACNT_SHIFT: u32 = 0;
1170 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1172
1173 pub const fn acnt(self) -> u64 {
1175 ((self.bits() >> Self::ACNT_SHIFT)
1176 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1177 }
1178
1179 pub const fn set_acnt(&mut self, value: u64) {
1181 let offset = Self::ACNT_SHIFT;
1182 assert!(value & (Self::ACNT_MASK as u64) == value);
1183 *self = Self::from_bits_retain(
1184 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1185 );
1186 }
1187
1188 pub const fn with_acnt(mut self, value: u64) -> Self {
1190 self.set_acnt(value);
1191 self
1192 }
1193}
1194
1195bitflags! {
1196 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1198 #[repr(transparent)]
1199 pub struct Amevcntr12El0: u64 {
1200 }
1201}
1202
1203impl Amevcntr12El0 {
1204 pub const ACNT_SHIFT: u32 = 0;
1206 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1208
1209 pub const fn acnt(self) -> u64 {
1211 ((self.bits() >> Self::ACNT_SHIFT)
1212 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1213 }
1214
1215 pub const fn set_acnt(&mut self, value: u64) {
1217 let offset = Self::ACNT_SHIFT;
1218 assert!(value & (Self::ACNT_MASK as u64) == value);
1219 *self = Self::from_bits_retain(
1220 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1221 );
1222 }
1223
1224 pub const fn with_acnt(mut self, value: u64) -> Self {
1226 self.set_acnt(value);
1227 self
1228 }
1229}
1230
1231bitflags! {
1232 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1234 #[repr(transparent)]
1235 pub struct Amevcntr13El0: u64 {
1236 }
1237}
1238
1239impl Amevcntr13El0 {
1240 pub const ACNT_SHIFT: u32 = 0;
1242 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1244
1245 pub const fn acnt(self) -> u64 {
1247 ((self.bits() >> Self::ACNT_SHIFT)
1248 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1249 }
1250
1251 pub const fn set_acnt(&mut self, value: u64) {
1253 let offset = Self::ACNT_SHIFT;
1254 assert!(value & (Self::ACNT_MASK as u64) == value);
1255 *self = Self::from_bits_retain(
1256 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1257 );
1258 }
1259
1260 pub const fn with_acnt(mut self, value: u64) -> Self {
1262 self.set_acnt(value);
1263 self
1264 }
1265}
1266
1267bitflags! {
1268 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1270 #[repr(transparent)]
1271 pub struct Amevcntr14El0: u64 {
1272 }
1273}
1274
1275impl Amevcntr14El0 {
1276 pub const ACNT_SHIFT: u32 = 0;
1278 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1280
1281 pub const fn acnt(self) -> u64 {
1283 ((self.bits() >> Self::ACNT_SHIFT)
1284 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1285 }
1286
1287 pub const fn set_acnt(&mut self, value: u64) {
1289 let offset = Self::ACNT_SHIFT;
1290 assert!(value & (Self::ACNT_MASK as u64) == value);
1291 *self = Self::from_bits_retain(
1292 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1293 );
1294 }
1295
1296 pub const fn with_acnt(mut self, value: u64) -> Self {
1298 self.set_acnt(value);
1299 self
1300 }
1301}
1302
1303bitflags! {
1304 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1306 #[repr(transparent)]
1307 pub struct Amevcntr15El0: u64 {
1308 }
1309}
1310
1311impl Amevcntr15El0 {
1312 pub const ACNT_SHIFT: u32 = 0;
1314 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1316
1317 pub const fn acnt(self) -> u64 {
1319 ((self.bits() >> Self::ACNT_SHIFT)
1320 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1321 }
1322
1323 pub const fn set_acnt(&mut self, value: u64) {
1325 let offset = Self::ACNT_SHIFT;
1326 assert!(value & (Self::ACNT_MASK as u64) == value);
1327 *self = Self::from_bits_retain(
1328 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1329 );
1330 }
1331
1332 pub const fn with_acnt(mut self, value: u64) -> Self {
1334 self.set_acnt(value);
1335 self
1336 }
1337}
1338
1339bitflags! {
1340 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1342 #[repr(transparent)]
1343 pub struct Amevcntr16El0: u64 {
1344 }
1345}
1346
1347impl Amevcntr16El0 {
1348 pub const ACNT_SHIFT: u32 = 0;
1350 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1352
1353 pub const fn acnt(self) -> u64 {
1355 ((self.bits() >> Self::ACNT_SHIFT)
1356 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1357 }
1358
1359 pub const fn set_acnt(&mut self, value: u64) {
1361 let offset = Self::ACNT_SHIFT;
1362 assert!(value & (Self::ACNT_MASK as u64) == value);
1363 *self = Self::from_bits_retain(
1364 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1365 );
1366 }
1367
1368 pub const fn with_acnt(mut self, value: u64) -> Self {
1370 self.set_acnt(value);
1371 self
1372 }
1373}
1374
1375bitflags! {
1376 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1378 #[repr(transparent)]
1379 pub struct Amevcntr17El0: u64 {
1380 }
1381}
1382
1383impl Amevcntr17El0 {
1384 pub const ACNT_SHIFT: u32 = 0;
1386 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1388
1389 pub const fn acnt(self) -> u64 {
1391 ((self.bits() >> Self::ACNT_SHIFT)
1392 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1393 }
1394
1395 pub const fn set_acnt(&mut self, value: u64) {
1397 let offset = Self::ACNT_SHIFT;
1398 assert!(value & (Self::ACNT_MASK as u64) == value);
1399 *self = Self::from_bits_retain(
1400 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1401 );
1402 }
1403
1404 pub const fn with_acnt(mut self, value: u64) -> Self {
1406 self.set_acnt(value);
1407 self
1408 }
1409}
1410
1411bitflags! {
1412 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1414 #[repr(transparent)]
1415 pub struct Amevcntr18El0: u64 {
1416 }
1417}
1418
1419impl Amevcntr18El0 {
1420 pub const ACNT_SHIFT: u32 = 0;
1422 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1424
1425 pub const fn acnt(self) -> u64 {
1427 ((self.bits() >> Self::ACNT_SHIFT)
1428 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1429 }
1430
1431 pub const fn set_acnt(&mut self, value: u64) {
1433 let offset = Self::ACNT_SHIFT;
1434 assert!(value & (Self::ACNT_MASK as u64) == value);
1435 *self = Self::from_bits_retain(
1436 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1437 );
1438 }
1439
1440 pub const fn with_acnt(mut self, value: u64) -> Self {
1442 self.set_acnt(value);
1443 self
1444 }
1445}
1446
1447bitflags! {
1448 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1450 #[repr(transparent)]
1451 pub struct Amevcntr19El0: u64 {
1452 }
1453}
1454
1455impl Amevcntr19El0 {
1456 pub const ACNT_SHIFT: u32 = 0;
1458 pub const ACNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
1460
1461 pub const fn acnt(self) -> u64 {
1463 ((self.bits() >> Self::ACNT_SHIFT)
1464 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1465 }
1466
1467 pub const fn set_acnt(&mut self, value: u64) {
1469 let offset = Self::ACNT_SHIFT;
1470 assert!(value & (Self::ACNT_MASK as u64) == value);
1471 *self = Self::from_bits_retain(
1472 (self.bits() & !(Self::ACNT_MASK << offset)) | ((value as u64) << offset),
1473 );
1474 }
1475
1476 pub const fn with_acnt(mut self, value: u64) -> Self {
1478 self.set_acnt(value);
1479 self
1480 }
1481}
1482
1483bitflags! {
1484 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1486 #[repr(transparent)]
1487 pub struct Amuserenr: u32 {
1488 const EN = 1 << 0;
1490 }
1491}
1492
1493impl Amuserenr {
1494 pub const EN_SHIFT: u32 = 0;
1496}
1497
1498bitflags! {
1499 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1501 #[repr(transparent)]
1502 pub struct AmuserenrEl0: u64 {
1503 const EN = 1 << 0;
1505 }
1506}
1507
1508impl AmuserenrEl0 {
1509 pub const EN_SHIFT: u32 = 0;
1511}
1512
1513#[cfg(feature = "el1")]
1514bitflags! {
1515 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1517 #[repr(transparent)]
1518 pub struct ApiakeyhiEl1: u64 {
1519 }
1520}
1521
1522#[cfg(feature = "el1")]
1523impl ApiakeyhiEl1 {
1524 pub const APIAKEYHI_SHIFT: u32 = 0;
1526 pub const APIAKEYHI_MASK: u64 =
1528 0b1111111111111111111111111111111111111111111111111111111111111111;
1529
1530 pub const fn apiakeyhi(self) -> u64 {
1532 ((self.bits() >> Self::APIAKEYHI_SHIFT)
1533 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1534 }
1535
1536 pub const fn set_apiakeyhi(&mut self, value: u64) {
1538 let offset = Self::APIAKEYHI_SHIFT;
1539 assert!(value & (Self::APIAKEYHI_MASK as u64) == value);
1540 *self = Self::from_bits_retain(
1541 (self.bits() & !(Self::APIAKEYHI_MASK << offset)) | ((value as u64) << offset),
1542 );
1543 }
1544
1545 pub const fn with_apiakeyhi(mut self, value: u64) -> Self {
1547 self.set_apiakeyhi(value);
1548 self
1549 }
1550}
1551
1552#[cfg(feature = "el1")]
1553bitflags! {
1554 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1556 #[repr(transparent)]
1557 pub struct ApiakeyloEl1: u64 {
1558 }
1559}
1560
1561#[cfg(feature = "el1")]
1562impl ApiakeyloEl1 {
1563 pub const APIAKEYLO_SHIFT: u32 = 0;
1565 pub const APIAKEYLO_MASK: u64 =
1567 0b1111111111111111111111111111111111111111111111111111111111111111;
1568
1569 pub const fn apiakeylo(self) -> u64 {
1571 ((self.bits() >> Self::APIAKEYLO_SHIFT)
1572 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
1573 }
1574
1575 pub const fn set_apiakeylo(&mut self, value: u64) {
1577 let offset = Self::APIAKEYLO_SHIFT;
1578 assert!(value & (Self::APIAKEYLO_MASK as u64) == value);
1579 *self = Self::from_bits_retain(
1580 (self.bits() & !(Self::APIAKEYLO_MASK << offset)) | ((value as u64) << offset),
1581 );
1582 }
1583
1584 pub const fn with_apiakeylo(mut self, value: u64) -> Self {
1586 self.set_apiakeylo(value);
1587 self
1588 }
1589}
1590
1591bitflags! {
1592 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1594 #[repr(transparent)]
1595 pub struct Ccsidr: u32 {
1596 }
1597}
1598
1599impl Ccsidr {
1600 pub const LINESIZE_SHIFT: u32 = 0;
1602 pub const LINESIZE_MASK: u32 = 0b111;
1604 pub const NUMSETS_SHIFT: u32 = 13;
1606 pub const NUMSETS_MASK: u32 = 0b111111111111111;
1608
1609 pub const fn linesize(self) -> u8 {
1611 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
1612 }
1613
1614 pub const fn set_linesize(&mut self, value: u8) {
1616 let offset = Self::LINESIZE_SHIFT;
1617 assert!(value & (Self::LINESIZE_MASK as u8) == value);
1618 *self = Self::from_bits_retain(
1619 (self.bits() & !(Self::LINESIZE_MASK << offset)) | ((value as u32) << offset),
1620 );
1621 }
1622
1623 pub const fn with_linesize(mut self, value: u8) -> Self {
1625 self.set_linesize(value);
1626 self
1627 }
1628
1629 pub const fn numsets(self) -> u16 {
1631 ((self.bits() >> Self::NUMSETS_SHIFT) & 0b111111111111111) as u16
1632 }
1633
1634 pub const fn set_numsets(&mut self, value: u16) {
1636 let offset = Self::NUMSETS_SHIFT;
1637 assert!(value & (Self::NUMSETS_MASK as u16) == value);
1638 *self = Self::from_bits_retain(
1639 (self.bits() & !(Self::NUMSETS_MASK << offset)) | ((value as u32) << offset),
1640 );
1641 }
1642
1643 pub const fn with_numsets(mut self, value: u16) -> Self {
1645 self.set_numsets(value);
1646 self
1647 }
1648}
1649
1650bitflags! {
1651 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1653 #[repr(transparent)]
1654 pub struct Ccsidr2: u32 {
1655 }
1656}
1657
1658impl Ccsidr2 {
1659 pub const NUMSETS_SHIFT: u32 = 0;
1661 pub const NUMSETS_MASK: u32 = 0b111111111111111111111111;
1663
1664 pub const fn numsets(self) -> u32 {
1666 ((self.bits() >> Self::NUMSETS_SHIFT) & 0b111111111111111111111111) as u32
1667 }
1668
1669 pub const fn set_numsets(&mut self, value: u32) {
1671 let offset = Self::NUMSETS_SHIFT;
1672 assert!(value & (Self::NUMSETS_MASK as u32) == value);
1673 *self = Self::from_bits_retain(
1674 (self.bits() & !(Self::NUMSETS_MASK << offset)) | ((value as u32) << offset),
1675 );
1676 }
1677
1678 pub const fn with_numsets(mut self, value: u32) -> Self {
1680 self.set_numsets(value);
1681 self
1682 }
1683}
1684
1685#[cfg(feature = "el1")]
1686bitflags! {
1687 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1689 #[repr(transparent)]
1690 pub struct CcsidrEl1: u64 {
1691 }
1692}
1693
1694#[cfg(feature = "el1")]
1695impl CcsidrEl1 {
1696 pub const LINESIZE_SHIFT: u32 = 0;
1698 pub const LINESIZE_MASK: u64 = 0b111;
1700
1701 pub const fn linesize(self) -> u8 {
1703 ((self.bits() >> Self::LINESIZE_SHIFT) & 0b111) as u8
1704 }
1705
1706 pub const fn set_linesize(&mut self, value: u8) {
1708 let offset = Self::LINESIZE_SHIFT;
1709 assert!(value & (Self::LINESIZE_MASK as u8) == value);
1710 *self = Self::from_bits_retain(
1711 (self.bits() & !(Self::LINESIZE_MASK << offset)) | ((value as u64) << offset),
1712 );
1713 }
1714
1715 pub const fn with_linesize(mut self, value: u8) -> Self {
1717 self.set_linesize(value);
1718 self
1719 }
1720}
1721
1722bitflags! {
1723 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1725 #[repr(transparent)]
1726 pub struct Clidr: u32 {
1727 }
1728}
1729
1730impl Clidr {
1731 pub const CTYPE_SHIFT: u32 = 0;
1733 pub const CTYPE_MASK: u32 = 0b111;
1735 pub const LOUIS_SHIFT: u32 = 21;
1737 pub const LOUIS_MASK: u32 = 0b111;
1739 pub const LOC_SHIFT: u32 = 24;
1741 pub const LOC_MASK: u32 = 0b111;
1743 pub const LOUU_SHIFT: u32 = 27;
1745 pub const LOUU_MASK: u32 = 0b111;
1747 pub const ICB_SHIFT: u32 = 30;
1749 pub const ICB_MASK: u32 = 0b11;
1751
1752 pub const fn ctype(self, n: u32) -> u8 {
1754 assert!(n >= 1 && n < 8);
1755 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8
1756 }
1757
1758 pub const fn set_ctype(&mut self, n: u32, value: u8) {
1760 assert!(n >= 1 && n < 8);
1761 let offset = Self::CTYPE_SHIFT + (n - 1) * 3;
1762 assert!(value & (Self::CTYPE_MASK as u8) == value);
1763 *self = Self::from_bits_retain(
1764 (self.bits() & !(Self::CTYPE_MASK << offset)) | ((value as u32) << offset),
1765 );
1766 }
1767
1768 pub const fn with_ctype(mut self, n: u32, value: u8) -> Self {
1770 self.set_ctype(n, value);
1771 self
1772 }
1773
1774 pub const fn louis(self) -> u8 {
1776 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
1777 }
1778
1779 pub const fn set_louis(&mut self, value: u8) {
1781 let offset = Self::LOUIS_SHIFT;
1782 assert!(value & (Self::LOUIS_MASK as u8) == value);
1783 *self = Self::from_bits_retain(
1784 (self.bits() & !(Self::LOUIS_MASK << offset)) | ((value as u32) << offset),
1785 );
1786 }
1787
1788 pub const fn with_louis(mut self, value: u8) -> Self {
1790 self.set_louis(value);
1791 self
1792 }
1793
1794 pub const fn loc(self) -> u8 {
1796 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
1797 }
1798
1799 pub const fn set_loc(&mut self, value: u8) {
1801 let offset = Self::LOC_SHIFT;
1802 assert!(value & (Self::LOC_MASK as u8) == value);
1803 *self = Self::from_bits_retain(
1804 (self.bits() & !(Self::LOC_MASK << offset)) | ((value as u32) << offset),
1805 );
1806 }
1807
1808 pub const fn with_loc(mut self, value: u8) -> Self {
1810 self.set_loc(value);
1811 self
1812 }
1813
1814 pub const fn louu(self) -> u8 {
1816 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
1817 }
1818
1819 pub const fn set_louu(&mut self, value: u8) {
1821 let offset = Self::LOUU_SHIFT;
1822 assert!(value & (Self::LOUU_MASK as u8) == value);
1823 *self = Self::from_bits_retain(
1824 (self.bits() & !(Self::LOUU_MASK << offset)) | ((value as u32) << offset),
1825 );
1826 }
1827
1828 pub const fn with_louu(mut self, value: u8) -> Self {
1830 self.set_louu(value);
1831 self
1832 }
1833
1834 pub const fn icb(self) -> u8 {
1836 ((self.bits() >> Self::ICB_SHIFT) & 0b11) as u8
1837 }
1838
1839 pub const fn set_icb(&mut self, value: u8) {
1841 let offset = Self::ICB_SHIFT;
1842 assert!(value & (Self::ICB_MASK as u8) == value);
1843 *self = Self::from_bits_retain(
1844 (self.bits() & !(Self::ICB_MASK << offset)) | ((value as u32) << offset),
1845 );
1846 }
1847
1848 pub const fn with_icb(mut self, value: u8) -> Self {
1850 self.set_icb(value);
1851 self
1852 }
1853}
1854
1855#[cfg(feature = "el1")]
1856bitflags! {
1857 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
1861 #[repr(transparent)]
1862 pub struct ClidrEl1: u64 {
1863 }
1864}
1865
1866#[cfg(feature = "el1")]
1867impl ClidrEl1 {
1868 pub const CTYPE_SHIFT: u32 = 0;
1870 pub const CTYPE_MASK: u64 = 0b111;
1872 pub const LOUIS_SHIFT: u32 = 21;
1874 pub const LOUIS_MASK: u64 = 0b111;
1876 pub const LOC_SHIFT: u32 = 24;
1878 pub const LOC_MASK: u64 = 0b111;
1880 pub const LOUU_SHIFT: u32 = 27;
1882 pub const LOUU_MASK: u64 = 0b111;
1884 pub const ICB_SHIFT: u32 = 30;
1886 pub const ICB_MASK: u64 = 0b111;
1888 pub const TTYPE_SHIFT: u32 = 33;
1890 pub const TTYPE_MASK: u64 = 0b11;
1892
1893 pub fn ctype(self, n: u32) -> crate::manual::CacheType {
1895 assert!(n >= 1 && n < 8);
1896 crate::manual::CacheType::try_from(
1897 ((self.bits() >> (Self::CTYPE_SHIFT + (n - 1) * 3)) & 0b111) as u8,
1898 )
1899 .unwrap()
1900 }
1901
1902 pub fn set_ctype(&mut self, n: u32, value: crate::manual::CacheType) {
1904 assert!(n >= 1 && n < 8);
1905 let offset = Self::CTYPE_SHIFT + (n - 1) * 3;
1906 let value: u8 = value.into();
1907 assert!(value & (Self::CTYPE_MASK as u8) == value);
1908 *self = Self::from_bits_retain(
1909 (self.bits() & !(Self::CTYPE_MASK << offset)) | ((value as u64) << offset),
1910 );
1911 }
1912
1913 pub fn with_ctype(mut self, n: u32, value: crate::manual::CacheType) -> Self {
1915 self.set_ctype(n, value);
1916 self
1917 }
1918
1919 pub const fn louis(self) -> u8 {
1923 ((self.bits() >> Self::LOUIS_SHIFT) & 0b111) as u8
1924 }
1925
1926 pub const fn set_louis(&mut self, value: u8) {
1930 let offset = Self::LOUIS_SHIFT;
1931 assert!(value & (Self::LOUIS_MASK as u8) == value);
1932 *self = Self::from_bits_retain(
1933 (self.bits() & !(Self::LOUIS_MASK << offset)) | ((value as u64) << offset),
1934 );
1935 }
1936
1937 pub const fn with_louis(mut self, value: u8) -> Self {
1941 self.set_louis(value);
1942 self
1943 }
1944
1945 pub const fn loc(self) -> u8 {
1949 ((self.bits() >> Self::LOC_SHIFT) & 0b111) as u8
1950 }
1951
1952 pub const fn set_loc(&mut self, value: u8) {
1956 let offset = Self::LOC_SHIFT;
1957 assert!(value & (Self::LOC_MASK as u8) == value);
1958 *self = Self::from_bits_retain(
1959 (self.bits() & !(Self::LOC_MASK << offset)) | ((value as u64) << offset),
1960 );
1961 }
1962
1963 pub const fn with_loc(mut self, value: u8) -> Self {
1967 self.set_loc(value);
1968 self
1969 }
1970
1971 pub const fn louu(self) -> u8 {
1975 ((self.bits() >> Self::LOUU_SHIFT) & 0b111) as u8
1976 }
1977
1978 pub const fn set_louu(&mut self, value: u8) {
1982 let offset = Self::LOUU_SHIFT;
1983 assert!(value & (Self::LOUU_MASK as u8) == value);
1984 *self = Self::from_bits_retain(
1985 (self.bits() & !(Self::LOUU_MASK << offset)) | ((value as u64) << offset),
1986 );
1987 }
1988
1989 pub const fn with_louu(mut self, value: u8) -> Self {
1993 self.set_louu(value);
1994 self
1995 }
1996
1997 pub const fn icb(self) -> u8 {
2001 ((self.bits() >> Self::ICB_SHIFT) & 0b111) as u8
2002 }
2003
2004 pub const fn set_icb(&mut self, value: u8) {
2008 let offset = Self::ICB_SHIFT;
2009 assert!(value & (Self::ICB_MASK as u8) == value);
2010 *self = Self::from_bits_retain(
2011 (self.bits() & !(Self::ICB_MASK << offset)) | ((value as u64) << offset),
2012 );
2013 }
2014
2015 pub const fn with_icb(mut self, value: u8) -> Self {
2019 self.set_icb(value);
2020 self
2021 }
2022
2023 pub const fn ttype(self, n: u32) -> u8 {
2025 assert!(n >= 1 && n < 8);
2026 ((self.bits() >> (Self::TTYPE_SHIFT + (n - 1) * 2)) & 0b11) as u8
2027 }
2028
2029 pub const fn set_ttype(&mut self, n: u32, value: u8) {
2031 assert!(n >= 1 && n < 8);
2032 let offset = Self::TTYPE_SHIFT + (n - 1) * 2;
2033 assert!(value & (Self::TTYPE_MASK as u8) == value);
2034 *self = Self::from_bits_retain(
2035 (self.bits() & !(Self::TTYPE_MASK << offset)) | ((value as u64) << offset),
2036 );
2037 }
2038
2039 pub const fn with_ttype(mut self, n: u32, value: u8) -> Self {
2041 self.set_ttype(n, value);
2042 self
2043 }
2044}
2045
2046bitflags! {
2047 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2049 #[repr(transparent)]
2050 pub struct Cntfrq: u32 {
2051 }
2052}
2053
2054impl Cntfrq {
2055 pub const CLOCKFREQ_SHIFT: u32 = 0;
2057 pub const CLOCKFREQ_MASK: u32 = 0b11111111111111111111111111111111;
2059
2060 pub const fn clockfreq(self) -> u32 {
2062 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
2063 }
2064
2065 pub const fn set_clockfreq(&mut self, value: u32) {
2067 let offset = Self::CLOCKFREQ_SHIFT;
2068 assert!(value & (Self::CLOCKFREQ_MASK as u32) == value);
2069 *self = Self::from_bits_retain(
2070 (self.bits() & !(Self::CLOCKFREQ_MASK << offset)) | ((value as u32) << offset),
2071 );
2072 }
2073
2074 pub const fn with_clockfreq(mut self, value: u32) -> Self {
2076 self.set_clockfreq(value);
2077 self
2078 }
2079}
2080
2081bitflags! {
2082 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2086 #[repr(transparent)]
2087 pub struct CntfrqEl0: u64 {
2088 }
2089}
2090
2091impl CntfrqEl0 {
2092 pub const CLOCKFREQ_SHIFT: u32 = 0;
2094 pub const CLOCKFREQ_MASK: u64 = 0b11111111111111111111111111111111;
2096
2097 pub const fn clockfreq(self) -> u32 {
2099 ((self.bits() >> Self::CLOCKFREQ_SHIFT) & 0b11111111111111111111111111111111) as u32
2100 }
2101
2102 pub const fn set_clockfreq(&mut self, value: u32) {
2104 let offset = Self::CLOCKFREQ_SHIFT;
2105 assert!(value & (Self::CLOCKFREQ_MASK as u32) == value);
2106 *self = Self::from_bits_retain(
2107 (self.bits() & !(Self::CLOCKFREQ_MASK << offset)) | ((value as u64) << offset),
2108 );
2109 }
2110
2111 pub const fn with_clockfreq(mut self, value: u32) -> Self {
2113 self.set_clockfreq(value);
2114 self
2115 }
2116}
2117
2118bitflags! {
2119 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2121 #[repr(transparent)]
2122 pub struct Cnthctl: u32 {
2123 const PL1PCTEN = 1 << 0;
2125 const PL1PCEN = 1 << 1;
2127 const EVNTEN = 1 << 2;
2129 const EVNTDIR = 1 << 3;
2131 const EVNTIS = 1 << 17;
2133 }
2134}
2135
2136impl Cnthctl {
2137 pub const PL1PCTEN_SHIFT: u32 = 0;
2139 pub const PL1PCEN_SHIFT: u32 = 1;
2141 pub const EVNTEN_SHIFT: u32 = 2;
2143 pub const EVNTDIR_SHIFT: u32 = 3;
2145 pub const EVNTI_SHIFT: u32 = 4;
2147 pub const EVNTI_MASK: u32 = 0b1111;
2149 pub const EVNTIS_SHIFT: u32 = 17;
2151
2152 pub const fn evnti(self) -> u8 {
2154 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
2155 }
2156
2157 pub const fn set_evnti(&mut self, value: u8) {
2159 let offset = Self::EVNTI_SHIFT;
2160 assert!(value & (Self::EVNTI_MASK as u8) == value);
2161 *self = Self::from_bits_retain(
2162 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u32) << offset),
2163 );
2164 }
2165
2166 pub const fn with_evnti(mut self, value: u8) -> Self {
2168 self.set_evnti(value);
2169 self
2170 }
2171}
2172
2173#[cfg(feature = "el2")]
2174bitflags! {
2175 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2179 #[repr(transparent)]
2180 pub struct CnthctlEl2: u64 {
2181 const EL0PCTEN = 1 << 0;
2183 const EL0VCTEN = 1 << 1;
2185 const EL1PCEN = 1 << 1;
2187 const EVNTEN = 1 << 2;
2189 const EVNTDIR = 1 << 3;
2191 const EL0VTEN = 1 << 8;
2193 const EL0PTEN = 1 << 9;
2195 const EL1PTEN = 1 << 11;
2197 const ECV = 1 << 12;
2199 const EL1TVT = 1 << 13;
2201 const EL1TVCT = 1 << 14;
2203 const EL1NVPCT = 1 << 15;
2205 const EL1NVVCT = 1 << 16;
2207 const EVNTIS = 1 << 17;
2209 const CNTVMASK = 1 << 18;
2211 const CNTPMASK = 1 << 19;
2213 }
2214}
2215
2216#[cfg(feature = "el2")]
2217impl CnthctlEl2 {
2218 pub const EL0PCTEN_SHIFT: u32 = 0;
2220 pub const EL0VCTEN_SHIFT: u32 = 1;
2222 pub const EL1PCEN_SHIFT: u32 = 1;
2224 pub const EVNTEN_SHIFT: u32 = 2;
2226 pub const EVNTDIR_SHIFT: u32 = 3;
2228 pub const EVNTI_SHIFT: u32 = 4;
2230 pub const EVNTI_MASK: u64 = 0b1111;
2232 pub const EL0VTEN_SHIFT: u32 = 8;
2234 pub const EL0PTEN_SHIFT: u32 = 9;
2236 pub const EL1PTEN_SHIFT: u32 = 11;
2238 pub const ECV_SHIFT: u32 = 12;
2240 pub const EL1TVT_SHIFT: u32 = 13;
2242 pub const EL1TVCT_SHIFT: u32 = 14;
2244 pub const EL1NVPCT_SHIFT: u32 = 15;
2246 pub const EL1NVVCT_SHIFT: u32 = 16;
2248 pub const EVNTIS_SHIFT: u32 = 17;
2250 pub const CNTVMASK_SHIFT: u32 = 18;
2252 pub const CNTPMASK_SHIFT: u32 = 19;
2254
2255 pub const fn evnti(self) -> u8 {
2257 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
2258 }
2259
2260 pub const fn set_evnti(&mut self, value: u8) {
2262 let offset = Self::EVNTI_SHIFT;
2263 assert!(value & (Self::EVNTI_MASK as u8) == value);
2264 *self = Self::from_bits_retain(
2265 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u64) << offset),
2266 );
2267 }
2268
2269 pub const fn with_evnti(mut self, value: u8) -> Self {
2271 self.set_evnti(value);
2272 self
2273 }
2274}
2275
2276bitflags! {
2277 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2279 #[repr(transparent)]
2280 pub struct CnthpsCtl: u32 {
2281 const ENABLE = 1 << 0;
2283 const IMASK = 1 << 1;
2285 const ISTATUS = 1 << 2;
2287 }
2288}
2289
2290impl CnthpsCtl {
2291 pub const ENABLE_SHIFT: u32 = 0;
2293 pub const IMASK_SHIFT: u32 = 1;
2295 pub const ISTATUS_SHIFT: u32 = 2;
2297}
2298
2299#[cfg(feature = "el2")]
2300bitflags! {
2301 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2305 #[repr(transparent)]
2306 pub struct CnthpsCtlEl2: u64 {
2307 const ENABLE = 1 << 0;
2309 const IMASK = 1 << 1;
2311 const ISTATUS = 1 << 2;
2313 }
2314}
2315
2316#[cfg(feature = "el2")]
2317impl CnthpsCtlEl2 {
2318 pub const ENABLE_SHIFT: u32 = 0;
2320 pub const IMASK_SHIFT: u32 = 1;
2322 pub const ISTATUS_SHIFT: u32 = 2;
2324}
2325
2326bitflags! {
2327 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2329 #[repr(transparent)]
2330 pub struct CnthpsCval: u64 {
2331 }
2332}
2333
2334impl CnthpsCval {
2335 pub const COMPAREVALUE_SHIFT: u32 = 0;
2337 pub const COMPAREVALUE_MASK: u64 =
2339 0b1111111111111111111111111111111111111111111111111111111111111111;
2340
2341 pub const fn comparevalue(self) -> u64 {
2343 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2344 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2345 }
2346
2347 pub const fn set_comparevalue(&mut self, value: u64) {
2349 let offset = Self::COMPAREVALUE_SHIFT;
2350 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2351 *self = Self::from_bits_retain(
2352 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2353 );
2354 }
2355
2356 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2358 self.set_comparevalue(value);
2359 self
2360 }
2361}
2362
2363#[cfg(feature = "el2")]
2364bitflags! {
2365 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2369 #[repr(transparent)]
2370 pub struct CnthpsCvalEl2: u64 {
2371 }
2372}
2373
2374#[cfg(feature = "el2")]
2375impl CnthpsCvalEl2 {
2376 pub const COMPAREVALUE_SHIFT: u32 = 0;
2378 pub const COMPAREVALUE_MASK: u64 =
2380 0b1111111111111111111111111111111111111111111111111111111111111111;
2381
2382 pub const fn comparevalue(self) -> u64 {
2384 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2385 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2386 }
2387
2388 pub const fn set_comparevalue(&mut self, value: u64) {
2390 let offset = Self::COMPAREVALUE_SHIFT;
2391 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2392 *self = Self::from_bits_retain(
2393 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2394 );
2395 }
2396
2397 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2399 self.set_comparevalue(value);
2400 self
2401 }
2402}
2403
2404bitflags! {
2405 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2407 #[repr(transparent)]
2408 pub struct CnthpsTval: u32 {
2409 }
2410}
2411
2412impl CnthpsTval {
2413 pub const TIMERVALUE_SHIFT: u32 = 0;
2415 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
2417
2418 pub const fn timervalue(self) -> u32 {
2420 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2421 }
2422
2423 pub const fn set_timervalue(&mut self, value: u32) {
2425 let offset = Self::TIMERVALUE_SHIFT;
2426 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2427 *self = Self::from_bits_retain(
2428 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
2429 );
2430 }
2431
2432 pub const fn with_timervalue(mut self, value: u32) -> Self {
2434 self.set_timervalue(value);
2435 self
2436 }
2437}
2438
2439#[cfg(feature = "el2")]
2440bitflags! {
2441 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2445 #[repr(transparent)]
2446 pub struct CnthpsTvalEl2: u64 {
2447 }
2448}
2449
2450#[cfg(feature = "el2")]
2451impl CnthpsTvalEl2 {
2452 pub const TIMERVALUE_SHIFT: u32 = 0;
2454 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
2456
2457 pub const fn timervalue(self) -> u32 {
2459 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2460 }
2461
2462 pub const fn set_timervalue(&mut self, value: u32) {
2464 let offset = Self::TIMERVALUE_SHIFT;
2465 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2466 *self = Self::from_bits_retain(
2467 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
2468 );
2469 }
2470
2471 pub const fn with_timervalue(mut self, value: u32) -> Self {
2473 self.set_timervalue(value);
2474 self
2475 }
2476}
2477
2478bitflags! {
2479 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2481 #[repr(transparent)]
2482 pub struct CnthpCtl: u32 {
2483 const ENABLE = 1 << 0;
2485 const IMASK = 1 << 1;
2487 const ISTATUS = 1 << 2;
2489 }
2490}
2491
2492impl CnthpCtl {
2493 pub const ENABLE_SHIFT: u32 = 0;
2495 pub const IMASK_SHIFT: u32 = 1;
2497 pub const ISTATUS_SHIFT: u32 = 2;
2499}
2500
2501#[cfg(feature = "el2")]
2502bitflags! {
2503 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2507 #[repr(transparent)]
2508 pub struct CnthpCtlEl2: u64 {
2509 const ENABLE = 1 << 0;
2511 const IMASK = 1 << 1;
2513 const ISTATUS = 1 << 2;
2515 }
2516}
2517
2518#[cfg(feature = "el2")]
2519impl CnthpCtlEl2 {
2520 pub const ENABLE_SHIFT: u32 = 0;
2522 pub const IMASK_SHIFT: u32 = 1;
2524 pub const ISTATUS_SHIFT: u32 = 2;
2526}
2527
2528bitflags! {
2529 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2531 #[repr(transparent)]
2532 pub struct CnthpCval: u64 {
2533 }
2534}
2535
2536impl CnthpCval {
2537 pub const COMPAREVALUE_SHIFT: u32 = 0;
2539 pub const COMPAREVALUE_MASK: u64 =
2541 0b1111111111111111111111111111111111111111111111111111111111111111;
2542
2543 pub const fn comparevalue(self) -> u64 {
2545 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2546 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2547 }
2548
2549 pub const fn set_comparevalue(&mut self, value: u64) {
2551 let offset = Self::COMPAREVALUE_SHIFT;
2552 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2553 *self = Self::from_bits_retain(
2554 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2555 );
2556 }
2557
2558 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2560 self.set_comparevalue(value);
2561 self
2562 }
2563}
2564
2565#[cfg(feature = "el2")]
2566bitflags! {
2567 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2571 #[repr(transparent)]
2572 pub struct CnthpCvalEl2: u64 {
2573 }
2574}
2575
2576#[cfg(feature = "el2")]
2577impl CnthpCvalEl2 {
2578 pub const COMPAREVALUE_SHIFT: u32 = 0;
2580 pub const COMPAREVALUE_MASK: u64 =
2582 0b1111111111111111111111111111111111111111111111111111111111111111;
2583
2584 pub const fn comparevalue(self) -> u64 {
2586 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2587 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2588 }
2589
2590 pub const fn set_comparevalue(&mut self, value: u64) {
2592 let offset = Self::COMPAREVALUE_SHIFT;
2593 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2594 *self = Self::from_bits_retain(
2595 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2596 );
2597 }
2598
2599 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2601 self.set_comparevalue(value);
2602 self
2603 }
2604}
2605
2606bitflags! {
2607 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2609 #[repr(transparent)]
2610 pub struct CnthpTval: u32 {
2611 }
2612}
2613
2614impl CnthpTval {
2615 pub const TIMERVALUE_SHIFT: u32 = 0;
2617 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
2619
2620 pub const fn timervalue(self) -> u32 {
2622 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2623 }
2624
2625 pub const fn set_timervalue(&mut self, value: u32) {
2627 let offset = Self::TIMERVALUE_SHIFT;
2628 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2629 *self = Self::from_bits_retain(
2630 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
2631 );
2632 }
2633
2634 pub const fn with_timervalue(mut self, value: u32) -> Self {
2636 self.set_timervalue(value);
2637 self
2638 }
2639}
2640
2641#[cfg(feature = "el2")]
2642bitflags! {
2643 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2647 #[repr(transparent)]
2648 pub struct CnthpTvalEl2: u64 {
2649 }
2650}
2651
2652#[cfg(feature = "el2")]
2653impl CnthpTvalEl2 {
2654 pub const TIMERVALUE_SHIFT: u32 = 0;
2656 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
2658
2659 pub const fn timervalue(self) -> u32 {
2661 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2662 }
2663
2664 pub const fn set_timervalue(&mut self, value: u32) {
2666 let offset = Self::TIMERVALUE_SHIFT;
2667 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2668 *self = Self::from_bits_retain(
2669 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
2670 );
2671 }
2672
2673 pub const fn with_timervalue(mut self, value: u32) -> Self {
2675 self.set_timervalue(value);
2676 self
2677 }
2678}
2679
2680bitflags! {
2681 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2683 #[repr(transparent)]
2684 pub struct CnthvsCtl: u32 {
2685 const ENABLE = 1 << 0;
2687 const IMASK = 1 << 1;
2689 const ISTATUS = 1 << 2;
2691 }
2692}
2693
2694impl CnthvsCtl {
2695 pub const ENABLE_SHIFT: u32 = 0;
2697 pub const IMASK_SHIFT: u32 = 1;
2699 pub const ISTATUS_SHIFT: u32 = 2;
2701}
2702
2703#[cfg(feature = "el2")]
2704bitflags! {
2705 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2709 #[repr(transparent)]
2710 pub struct CnthvsCtlEl2: u64 {
2711 const ENABLE = 1 << 0;
2713 const IMASK = 1 << 1;
2715 const ISTATUS = 1 << 2;
2717 }
2718}
2719
2720#[cfg(feature = "el2")]
2721impl CnthvsCtlEl2 {
2722 pub const ENABLE_SHIFT: u32 = 0;
2724 pub const IMASK_SHIFT: u32 = 1;
2726 pub const ISTATUS_SHIFT: u32 = 2;
2728}
2729
2730bitflags! {
2731 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2733 #[repr(transparent)]
2734 pub struct CnthvsCval: u64 {
2735 }
2736}
2737
2738impl CnthvsCval {
2739 pub const COMPAREVALUE_SHIFT: u32 = 0;
2741 pub const COMPAREVALUE_MASK: u64 =
2743 0b1111111111111111111111111111111111111111111111111111111111111111;
2744
2745 pub const fn comparevalue(self) -> u64 {
2747 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2748 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2749 }
2750
2751 pub const fn set_comparevalue(&mut self, value: u64) {
2753 let offset = Self::COMPAREVALUE_SHIFT;
2754 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2755 *self = Self::from_bits_retain(
2756 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2757 );
2758 }
2759
2760 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2762 self.set_comparevalue(value);
2763 self
2764 }
2765}
2766
2767#[cfg(feature = "el2")]
2768bitflags! {
2769 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2773 #[repr(transparent)]
2774 pub struct CnthvsCvalEl2: u64 {
2775 }
2776}
2777
2778#[cfg(feature = "el2")]
2779impl CnthvsCvalEl2 {
2780 pub const COMPAREVALUE_SHIFT: u32 = 0;
2782 pub const COMPAREVALUE_MASK: u64 =
2784 0b1111111111111111111111111111111111111111111111111111111111111111;
2785
2786 pub const fn comparevalue(self) -> u64 {
2788 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2789 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2790 }
2791
2792 pub const fn set_comparevalue(&mut self, value: u64) {
2794 let offset = Self::COMPAREVALUE_SHIFT;
2795 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2796 *self = Self::from_bits_retain(
2797 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2798 );
2799 }
2800
2801 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2803 self.set_comparevalue(value);
2804 self
2805 }
2806}
2807
2808bitflags! {
2809 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2811 #[repr(transparent)]
2812 pub struct CnthvsTval: u32 {
2813 }
2814}
2815
2816impl CnthvsTval {
2817 pub const TIMERVALUE_SHIFT: u32 = 0;
2819 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
2821
2822 pub const fn timervalue(self) -> u32 {
2824 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2825 }
2826
2827 pub const fn set_timervalue(&mut self, value: u32) {
2829 let offset = Self::TIMERVALUE_SHIFT;
2830 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2831 *self = Self::from_bits_retain(
2832 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
2833 );
2834 }
2835
2836 pub const fn with_timervalue(mut self, value: u32) -> Self {
2838 self.set_timervalue(value);
2839 self
2840 }
2841}
2842
2843#[cfg(feature = "el2")]
2844bitflags! {
2845 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2849 #[repr(transparent)]
2850 pub struct CnthvsTvalEl2: u64 {
2851 }
2852}
2853
2854#[cfg(feature = "el2")]
2855impl CnthvsTvalEl2 {
2856 pub const TIMERVALUE_SHIFT: u32 = 0;
2858 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
2860
2861 pub const fn timervalue(self) -> u32 {
2863 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
2864 }
2865
2866 pub const fn set_timervalue(&mut self, value: u32) {
2868 let offset = Self::TIMERVALUE_SHIFT;
2869 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
2870 *self = Self::from_bits_retain(
2871 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
2872 );
2873 }
2874
2875 pub const fn with_timervalue(mut self, value: u32) -> Self {
2877 self.set_timervalue(value);
2878 self
2879 }
2880}
2881
2882bitflags! {
2883 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2885 #[repr(transparent)]
2886 pub struct CnthvCtl: u32 {
2887 const ENABLE = 1 << 0;
2889 const IMASK = 1 << 1;
2891 const ISTATUS = 1 << 2;
2893 }
2894}
2895
2896impl CnthvCtl {
2897 pub const ENABLE_SHIFT: u32 = 0;
2899 pub const IMASK_SHIFT: u32 = 1;
2901 pub const ISTATUS_SHIFT: u32 = 2;
2903}
2904
2905#[cfg(feature = "el2")]
2906bitflags! {
2907 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2911 #[repr(transparent)]
2912 pub struct CnthvCtlEl2: u64 {
2913 const ENABLE = 1 << 0;
2915 const IMASK = 1 << 1;
2917 const ISTATUS = 1 << 2;
2919 }
2920}
2921
2922#[cfg(feature = "el2")]
2923impl CnthvCtlEl2 {
2924 pub const ENABLE_SHIFT: u32 = 0;
2926 pub const IMASK_SHIFT: u32 = 1;
2928 pub const ISTATUS_SHIFT: u32 = 2;
2930}
2931
2932bitflags! {
2933 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2935 #[repr(transparent)]
2936 pub struct CnthvCval: u64 {
2937 }
2938}
2939
2940impl CnthvCval {
2941 pub const COMPAREVALUE_SHIFT: u32 = 0;
2943 pub const COMPAREVALUE_MASK: u64 =
2945 0b1111111111111111111111111111111111111111111111111111111111111111;
2946
2947 pub const fn comparevalue(self) -> u64 {
2949 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2950 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2951 }
2952
2953 pub const fn set_comparevalue(&mut self, value: u64) {
2955 let offset = Self::COMPAREVALUE_SHIFT;
2956 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2957 *self = Self::from_bits_retain(
2958 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
2959 );
2960 }
2961
2962 pub const fn with_comparevalue(mut self, value: u64) -> Self {
2964 self.set_comparevalue(value);
2965 self
2966 }
2967}
2968
2969#[cfg(feature = "el2")]
2970bitflags! {
2971 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
2975 #[repr(transparent)]
2976 pub struct CnthvCvalEl2: u64 {
2977 }
2978}
2979
2980#[cfg(feature = "el2")]
2981impl CnthvCvalEl2 {
2982 pub const COMPAREVALUE_SHIFT: u32 = 0;
2984 pub const COMPAREVALUE_MASK: u64 =
2986 0b1111111111111111111111111111111111111111111111111111111111111111;
2987
2988 pub const fn comparevalue(self) -> u64 {
2990 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
2991 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
2992 }
2993
2994 pub const fn set_comparevalue(&mut self, value: u64) {
2996 let offset = Self::COMPAREVALUE_SHIFT;
2997 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
2998 *self = Self::from_bits_retain(
2999 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
3000 );
3001 }
3002
3003 pub const fn with_comparevalue(mut self, value: u64) -> Self {
3005 self.set_comparevalue(value);
3006 self
3007 }
3008}
3009
3010bitflags! {
3011 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3013 #[repr(transparent)]
3014 pub struct CnthvTval: u32 {
3015 }
3016}
3017
3018impl CnthvTval {
3019 pub const TIMERVALUE_SHIFT: u32 = 0;
3021 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
3023
3024 pub const fn timervalue(self) -> u32 {
3026 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
3027 }
3028
3029 pub const fn set_timervalue(&mut self, value: u32) {
3031 let offset = Self::TIMERVALUE_SHIFT;
3032 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
3033 *self = Self::from_bits_retain(
3034 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
3035 );
3036 }
3037
3038 pub const fn with_timervalue(mut self, value: u32) -> Self {
3040 self.set_timervalue(value);
3041 self
3042 }
3043}
3044
3045#[cfg(feature = "el2")]
3046bitflags! {
3047 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3051 #[repr(transparent)]
3052 pub struct CnthvTvalEl2: u64 {
3053 }
3054}
3055
3056#[cfg(feature = "el2")]
3057impl CnthvTvalEl2 {
3058 pub const TIMERVALUE_SHIFT: u32 = 0;
3060 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
3062
3063 pub const fn timervalue(self) -> u32 {
3065 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
3066 }
3067
3068 pub const fn set_timervalue(&mut self, value: u32) {
3070 let offset = Self::TIMERVALUE_SHIFT;
3071 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
3072 *self = Self::from_bits_retain(
3073 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
3074 );
3075 }
3076
3077 pub const fn with_timervalue(mut self, value: u32) -> Self {
3079 self.set_timervalue(value);
3080 self
3081 }
3082}
3083
3084bitflags! {
3085 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3087 #[repr(transparent)]
3088 pub struct Cntkctl: u32 {
3089 const PL0PCTEN = 1 << 0;
3091 const PL0VCTEN = 1 << 1;
3093 const EVNTEN = 1 << 2;
3095 const EVNTDIR = 1 << 3;
3097 const PL0VTEN = 1 << 8;
3099 const PL0PTEN = 1 << 9;
3101 const EVNTIS = 1 << 17;
3103 }
3104}
3105
3106impl Cntkctl {
3107 pub const PL0PCTEN_SHIFT: u32 = 0;
3109 pub const PL0VCTEN_SHIFT: u32 = 1;
3111 pub const EVNTEN_SHIFT: u32 = 2;
3113 pub const EVNTDIR_SHIFT: u32 = 3;
3115 pub const EVNTI_SHIFT: u32 = 4;
3117 pub const EVNTI_MASK: u32 = 0b1111;
3119 pub const PL0VTEN_SHIFT: u32 = 8;
3121 pub const PL0PTEN_SHIFT: u32 = 9;
3123 pub const EVNTIS_SHIFT: u32 = 17;
3125
3126 pub const fn evnti(self) -> u8 {
3128 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
3129 }
3130
3131 pub const fn set_evnti(&mut self, value: u8) {
3133 let offset = Self::EVNTI_SHIFT;
3134 assert!(value & (Self::EVNTI_MASK as u8) == value);
3135 *self = Self::from_bits_retain(
3136 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u32) << offset),
3137 );
3138 }
3139
3140 pub const fn with_evnti(mut self, value: u8) -> Self {
3142 self.set_evnti(value);
3143 self
3144 }
3145}
3146
3147#[cfg(feature = "el1")]
3148bitflags! {
3149 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3153 #[repr(transparent)]
3154 pub struct CntkctlEl1: u64 {
3155 const EL0PCTEN = 1 << 0;
3157 const EL0VCTEN = 1 << 1;
3159 const EVNTEN = 1 << 2;
3161 const EVNTDIR = 1 << 3;
3163 const EL0VTEN = 1 << 8;
3165 const EL0PTEN = 1 << 9;
3167 const EL1PCTEN = 1 << 10;
3169 const EL1PTEN = 1 << 11;
3171 const ECV = 1 << 12;
3173 const EL1TVT = 1 << 13;
3175 const EL1TVCT = 1 << 14;
3177 const EL1NVPCT = 1 << 15;
3179 const EL1NVVCT = 1 << 16;
3181 const EVNTIS = 1 << 17;
3183 const CNTVMASK = 1 << 18;
3185 const CNTPMASK = 1 << 19;
3187 }
3188}
3189
3190#[cfg(feature = "el1")]
3191impl CntkctlEl1 {
3192 pub const EL0PCTEN_SHIFT: u32 = 0;
3194 pub const EL0VCTEN_SHIFT: u32 = 1;
3196 pub const EVNTEN_SHIFT: u32 = 2;
3198 pub const EVNTDIR_SHIFT: u32 = 3;
3200 pub const EVNTI_SHIFT: u32 = 4;
3202 pub const EVNTI_MASK: u64 = 0b1111;
3204 pub const EL0VTEN_SHIFT: u32 = 8;
3206 pub const EL0PTEN_SHIFT: u32 = 9;
3208 pub const EL1PCTEN_SHIFT: u32 = 10;
3210 pub const EL1PTEN_SHIFT: u32 = 11;
3212 pub const ECV_SHIFT: u32 = 12;
3214 pub const EL1TVT_SHIFT: u32 = 13;
3216 pub const EL1TVCT_SHIFT: u32 = 14;
3218 pub const EL1NVPCT_SHIFT: u32 = 15;
3220 pub const EL1NVVCT_SHIFT: u32 = 16;
3222 pub const EVNTIS_SHIFT: u32 = 17;
3224 pub const CNTVMASK_SHIFT: u32 = 18;
3226 pub const CNTPMASK_SHIFT: u32 = 19;
3228
3229 pub const fn evnti(self) -> u8 {
3231 ((self.bits() >> Self::EVNTI_SHIFT) & 0b1111) as u8
3232 }
3233
3234 pub const fn set_evnti(&mut self, value: u8) {
3236 let offset = Self::EVNTI_SHIFT;
3237 assert!(value & (Self::EVNTI_MASK as u8) == value);
3238 *self = Self::from_bits_retain(
3239 (self.bits() & !(Self::EVNTI_MASK << offset)) | ((value as u64) << offset),
3240 );
3241 }
3242
3243 pub const fn with_evnti(mut self, value: u8) -> Self {
3245 self.set_evnti(value);
3246 self
3247 }
3248}
3249
3250bitflags! {
3251 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3253 #[repr(transparent)]
3254 pub struct Cntpct: u64 {
3255 }
3256}
3257
3258impl Cntpct {
3259 pub const PHYSICALCOUNT_SHIFT: u32 = 0;
3261 pub const PHYSICALCOUNT_MASK: u64 =
3263 0b1111111111111111111111111111111111111111111111111111111111111111;
3264
3265 pub const fn physicalcount(self) -> u64 {
3267 ((self.bits() >> Self::PHYSICALCOUNT_SHIFT)
3268 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3269 }
3270
3271 pub const fn set_physicalcount(&mut self, value: u64) {
3273 let offset = Self::PHYSICALCOUNT_SHIFT;
3274 assert!(value & (Self::PHYSICALCOUNT_MASK as u64) == value);
3275 *self = Self::from_bits_retain(
3276 (self.bits() & !(Self::PHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
3277 );
3278 }
3279
3280 pub const fn with_physicalcount(mut self, value: u64) -> Self {
3282 self.set_physicalcount(value);
3283 self
3284 }
3285}
3286
3287bitflags! {
3288 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3290 #[repr(transparent)]
3291 pub struct Cntpctss: u64 {
3292 }
3293}
3294
3295impl Cntpctss {
3296 pub const SSPHYSICALCOUNT_SHIFT: u32 = 0;
3298 pub const SSPHYSICALCOUNT_MASK: u64 =
3300 0b1111111111111111111111111111111111111111111111111111111111111111;
3301
3302 pub const fn ssphysicalcount(self) -> u64 {
3304 ((self.bits() >> Self::SSPHYSICALCOUNT_SHIFT)
3305 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3306 }
3307
3308 pub const fn set_ssphysicalcount(&mut self, value: u64) {
3310 let offset = Self::SSPHYSICALCOUNT_SHIFT;
3311 assert!(value & (Self::SSPHYSICALCOUNT_MASK as u64) == value);
3312 *self = Self::from_bits_retain(
3313 (self.bits() & !(Self::SSPHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
3314 );
3315 }
3316
3317 pub const fn with_ssphysicalcount(mut self, value: u64) -> Self {
3319 self.set_ssphysicalcount(value);
3320 self
3321 }
3322}
3323
3324bitflags! {
3325 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3329 #[repr(transparent)]
3330 pub struct CntpctssEl0: u64 {
3331 }
3332}
3333
3334impl CntpctssEl0 {
3335 pub const SSPHYSICALCOUNT_SHIFT: u32 = 0;
3337 pub const SSPHYSICALCOUNT_MASK: u64 =
3339 0b1111111111111111111111111111111111111111111111111111111111111111;
3340
3341 pub const fn ssphysicalcount(self) -> u64 {
3343 ((self.bits() >> Self::SSPHYSICALCOUNT_SHIFT)
3344 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3345 }
3346
3347 pub const fn set_ssphysicalcount(&mut self, value: u64) {
3349 let offset = Self::SSPHYSICALCOUNT_SHIFT;
3350 assert!(value & (Self::SSPHYSICALCOUNT_MASK as u64) == value);
3351 *self = Self::from_bits_retain(
3352 (self.bits() & !(Self::SSPHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
3353 );
3354 }
3355
3356 pub const fn with_ssphysicalcount(mut self, value: u64) -> Self {
3358 self.set_ssphysicalcount(value);
3359 self
3360 }
3361}
3362
3363bitflags! {
3364 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3368 #[repr(transparent)]
3369 pub struct CntpctEl0: u64 {
3370 }
3371}
3372
3373impl CntpctEl0 {
3374 pub const PHYSICALCOUNT_SHIFT: u32 = 0;
3376 pub const PHYSICALCOUNT_MASK: u64 =
3378 0b1111111111111111111111111111111111111111111111111111111111111111;
3379
3380 pub const fn physicalcount(self) -> u64 {
3382 ((self.bits() >> Self::PHYSICALCOUNT_SHIFT)
3383 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3384 }
3385
3386 pub const fn set_physicalcount(&mut self, value: u64) {
3388 let offset = Self::PHYSICALCOUNT_SHIFT;
3389 assert!(value & (Self::PHYSICALCOUNT_MASK as u64) == value);
3390 *self = Self::from_bits_retain(
3391 (self.bits() & !(Self::PHYSICALCOUNT_MASK << offset)) | ((value as u64) << offset),
3392 );
3393 }
3394
3395 pub const fn with_physicalcount(mut self, value: u64) -> Self {
3397 self.set_physicalcount(value);
3398 self
3399 }
3400}
3401
3402#[cfg(feature = "el2")]
3403bitflags! {
3404 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3408 #[repr(transparent)]
3409 pub struct CntpoffEl2: u64 {
3410 }
3411}
3412
3413#[cfg(feature = "el2")]
3414impl CntpoffEl2 {
3415 pub const PO_SHIFT: u32 = 0;
3417 pub const PO_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
3419
3420 pub const fn po(self) -> u64 {
3422 ((self.bits() >> Self::PO_SHIFT)
3423 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3424 }
3425
3426 pub const fn set_po(&mut self, value: u64) {
3428 let offset = Self::PO_SHIFT;
3429 assert!(value & (Self::PO_MASK as u64) == value);
3430 *self = Self::from_bits_retain(
3431 (self.bits() & !(Self::PO_MASK << offset)) | ((value as u64) << offset),
3432 );
3433 }
3434
3435 pub const fn with_po(mut self, value: u64) -> Self {
3437 self.set_po(value);
3438 self
3439 }
3440}
3441
3442#[cfg(feature = "el1")]
3443bitflags! {
3444 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3448 #[repr(transparent)]
3449 pub struct CntpsCtlEl1: u64 {
3450 const ENABLE = 1 << 0;
3452 const IMASK = 1 << 1;
3454 const ISTATUS = 1 << 2;
3456 }
3457}
3458
3459#[cfg(feature = "el1")]
3460impl CntpsCtlEl1 {
3461 pub const ENABLE_SHIFT: u32 = 0;
3463 pub const IMASK_SHIFT: u32 = 1;
3465 pub const ISTATUS_SHIFT: u32 = 2;
3467}
3468
3469#[cfg(feature = "el1")]
3470bitflags! {
3471 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3475 #[repr(transparent)]
3476 pub struct CntpsCvalEl1: u64 {
3477 }
3478}
3479
3480#[cfg(feature = "el1")]
3481impl CntpsCvalEl1 {
3482 pub const COMPAREVALUE_SHIFT: u32 = 0;
3484 pub const COMPAREVALUE_MASK: u64 =
3486 0b1111111111111111111111111111111111111111111111111111111111111111;
3487
3488 pub const fn comparevalue(self) -> u64 {
3490 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
3491 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3492 }
3493
3494 pub const fn set_comparevalue(&mut self, value: u64) {
3496 let offset = Self::COMPAREVALUE_SHIFT;
3497 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
3498 *self = Self::from_bits_retain(
3499 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
3500 );
3501 }
3502
3503 pub const fn with_comparevalue(mut self, value: u64) -> Self {
3505 self.set_comparevalue(value);
3506 self
3507 }
3508}
3509
3510#[cfg(feature = "el1")]
3511bitflags! {
3512 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3516 #[repr(transparent)]
3517 pub struct CntpsTvalEl1: u64 {
3518 }
3519}
3520
3521#[cfg(feature = "el1")]
3522impl CntpsTvalEl1 {
3523 pub const TIMERVALUE_SHIFT: u32 = 0;
3525 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
3527
3528 pub const fn timervalue(self) -> u32 {
3530 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
3531 }
3532
3533 pub const fn set_timervalue(&mut self, value: u32) {
3535 let offset = Self::TIMERVALUE_SHIFT;
3536 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
3537 *self = Self::from_bits_retain(
3538 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
3539 );
3540 }
3541
3542 pub const fn with_timervalue(mut self, value: u32) -> Self {
3544 self.set_timervalue(value);
3545 self
3546 }
3547}
3548
3549bitflags! {
3550 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3552 #[repr(transparent)]
3553 pub struct CntpCtl: u32 {
3554 const ENABLE = 1 << 0;
3556 const IMASK = 1 << 1;
3558 const ISTATUS = 1 << 2;
3560 }
3561}
3562
3563impl CntpCtl {
3564 pub const ENABLE_SHIFT: u32 = 0;
3566 pub const IMASK_SHIFT: u32 = 1;
3568 pub const ISTATUS_SHIFT: u32 = 2;
3570}
3571
3572bitflags! {
3573 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3577 #[repr(transparent)]
3578 pub struct CntpCtlEl0: u64 {
3579 const ENABLE = 1 << 0;
3581 const IMASK = 1 << 1;
3583 const ISTATUS = 1 << 2;
3585 }
3586}
3587
3588impl CntpCtlEl0 {
3589 pub const ENABLE_SHIFT: u32 = 0;
3591 pub const IMASK_SHIFT: u32 = 1;
3593 pub const ISTATUS_SHIFT: u32 = 2;
3595}
3596
3597bitflags! {
3598 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3600 #[repr(transparent)]
3601 pub struct CntpCval: u64 {
3602 }
3603}
3604
3605impl CntpCval {
3606 pub const COMPAREVALUE_SHIFT: u32 = 0;
3608 pub const COMPAREVALUE_MASK: u64 =
3610 0b1111111111111111111111111111111111111111111111111111111111111111;
3611
3612 pub const fn comparevalue(self) -> u64 {
3614 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
3615 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3616 }
3617
3618 pub const fn set_comparevalue(&mut self, value: u64) {
3620 let offset = Self::COMPAREVALUE_SHIFT;
3621 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
3622 *self = Self::from_bits_retain(
3623 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
3624 );
3625 }
3626
3627 pub const fn with_comparevalue(mut self, value: u64) -> Self {
3629 self.set_comparevalue(value);
3630 self
3631 }
3632}
3633
3634bitflags! {
3635 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3639 #[repr(transparent)]
3640 pub struct CntpCvalEl0: u64 {
3641 }
3642}
3643
3644impl CntpCvalEl0 {
3645 pub const COMPAREVALUE_SHIFT: u32 = 0;
3647 pub const COMPAREVALUE_MASK: u64 =
3649 0b1111111111111111111111111111111111111111111111111111111111111111;
3650
3651 pub const fn comparevalue(self) -> u64 {
3653 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
3654 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3655 }
3656
3657 pub const fn set_comparevalue(&mut self, value: u64) {
3659 let offset = Self::COMPAREVALUE_SHIFT;
3660 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
3661 *self = Self::from_bits_retain(
3662 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
3663 );
3664 }
3665
3666 pub const fn with_comparevalue(mut self, value: u64) -> Self {
3668 self.set_comparevalue(value);
3669 self
3670 }
3671}
3672
3673bitflags! {
3674 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3676 #[repr(transparent)]
3677 pub struct CntpTval: u32 {
3678 }
3679}
3680
3681impl CntpTval {
3682 pub const TIMERVALUE_SHIFT: u32 = 0;
3684 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
3686
3687 pub const fn timervalue(self) -> u32 {
3689 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
3690 }
3691
3692 pub const fn set_timervalue(&mut self, value: u32) {
3694 let offset = Self::TIMERVALUE_SHIFT;
3695 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
3696 *self = Self::from_bits_retain(
3697 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
3698 );
3699 }
3700
3701 pub const fn with_timervalue(mut self, value: u32) -> Self {
3703 self.set_timervalue(value);
3704 self
3705 }
3706}
3707
3708bitflags! {
3709 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3713 #[repr(transparent)]
3714 pub struct CntpTvalEl0: u64 {
3715 }
3716}
3717
3718impl CntpTvalEl0 {
3719 pub const TIMERVALUE_SHIFT: u32 = 0;
3721 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
3723
3724 pub const fn timervalue(self) -> u32 {
3726 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
3727 }
3728
3729 pub const fn set_timervalue(&mut self, value: u32) {
3731 let offset = Self::TIMERVALUE_SHIFT;
3732 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
3733 *self = Self::from_bits_retain(
3734 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
3735 );
3736 }
3737
3738 pub const fn with_timervalue(mut self, value: u32) -> Self {
3740 self.set_timervalue(value);
3741 self
3742 }
3743}
3744
3745bitflags! {
3746 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3748 #[repr(transparent)]
3749 pub struct Cntvct: u64 {
3750 }
3751}
3752
3753impl Cntvct {
3754 pub const VIRTUALCOUNT_SHIFT: u32 = 0;
3756 pub const VIRTUALCOUNT_MASK: u64 =
3758 0b1111111111111111111111111111111111111111111111111111111111111111;
3759
3760 pub const fn virtualcount(self) -> u64 {
3762 ((self.bits() >> Self::VIRTUALCOUNT_SHIFT)
3763 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3764 }
3765
3766 pub const fn set_virtualcount(&mut self, value: u64) {
3768 let offset = Self::VIRTUALCOUNT_SHIFT;
3769 assert!(value & (Self::VIRTUALCOUNT_MASK as u64) == value);
3770 *self = Self::from_bits_retain(
3771 (self.bits() & !(Self::VIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
3772 );
3773 }
3774
3775 pub const fn with_virtualcount(mut self, value: u64) -> Self {
3777 self.set_virtualcount(value);
3778 self
3779 }
3780}
3781
3782bitflags! {
3783 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3785 #[repr(transparent)]
3786 pub struct Cntvctss: u64 {
3787 }
3788}
3789
3790impl Cntvctss {
3791 pub const SSVIRTUALCOUNT_SHIFT: u32 = 0;
3793 pub const SSVIRTUALCOUNT_MASK: u64 =
3795 0b1111111111111111111111111111111111111111111111111111111111111111;
3796
3797 pub const fn ssvirtualcount(self) -> u64 {
3799 ((self.bits() >> Self::SSVIRTUALCOUNT_SHIFT)
3800 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3801 }
3802
3803 pub const fn set_ssvirtualcount(&mut self, value: u64) {
3805 let offset = Self::SSVIRTUALCOUNT_SHIFT;
3806 assert!(value & (Self::SSVIRTUALCOUNT_MASK as u64) == value);
3807 *self = Self::from_bits_retain(
3808 (self.bits() & !(Self::SSVIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
3809 );
3810 }
3811
3812 pub const fn with_ssvirtualcount(mut self, value: u64) -> Self {
3814 self.set_ssvirtualcount(value);
3815 self
3816 }
3817}
3818
3819bitflags! {
3820 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3824 #[repr(transparent)]
3825 pub struct CntvctssEl0: u64 {
3826 }
3827}
3828
3829impl CntvctssEl0 {
3830 pub const SSVIRTUALCOUNT_SHIFT: u32 = 0;
3832 pub const SSVIRTUALCOUNT_MASK: u64 =
3834 0b1111111111111111111111111111111111111111111111111111111111111111;
3835
3836 pub const fn ssvirtualcount(self) -> u64 {
3838 ((self.bits() >> Self::SSVIRTUALCOUNT_SHIFT)
3839 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3840 }
3841
3842 pub const fn set_ssvirtualcount(&mut self, value: u64) {
3844 let offset = Self::SSVIRTUALCOUNT_SHIFT;
3845 assert!(value & (Self::SSVIRTUALCOUNT_MASK as u64) == value);
3846 *self = Self::from_bits_retain(
3847 (self.bits() & !(Self::SSVIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
3848 );
3849 }
3850
3851 pub const fn with_ssvirtualcount(mut self, value: u64) -> Self {
3853 self.set_ssvirtualcount(value);
3854 self
3855 }
3856}
3857
3858bitflags! {
3859 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3863 #[repr(transparent)]
3864 pub struct CntvctEl0: u64 {
3865 }
3866}
3867
3868impl CntvctEl0 {
3869 pub const VIRTUALCOUNT_SHIFT: u32 = 0;
3871 pub const VIRTUALCOUNT_MASK: u64 =
3873 0b1111111111111111111111111111111111111111111111111111111111111111;
3874
3875 pub const fn virtualcount(self) -> u64 {
3877 ((self.bits() >> Self::VIRTUALCOUNT_SHIFT)
3878 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3879 }
3880
3881 pub const fn set_virtualcount(&mut self, value: u64) {
3883 let offset = Self::VIRTUALCOUNT_SHIFT;
3884 assert!(value & (Self::VIRTUALCOUNT_MASK as u64) == value);
3885 *self = Self::from_bits_retain(
3886 (self.bits() & !(Self::VIRTUALCOUNT_MASK << offset)) | ((value as u64) << offset),
3887 );
3888 }
3889
3890 pub const fn with_virtualcount(mut self, value: u64) -> Self {
3892 self.set_virtualcount(value);
3893 self
3894 }
3895}
3896
3897bitflags! {
3898 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3900 #[repr(transparent)]
3901 pub struct Cntvoff: u64 {
3902 }
3903}
3904
3905impl Cntvoff {
3906 pub const VOFFSET_SHIFT: u32 = 0;
3908 pub const VOFFSET_MASK: u64 =
3910 0b1111111111111111111111111111111111111111111111111111111111111111;
3911
3912 pub const fn voffset(self) -> u64 {
3914 ((self.bits() >> Self::VOFFSET_SHIFT)
3915 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3916 }
3917
3918 pub const fn set_voffset(&mut self, value: u64) {
3920 let offset = Self::VOFFSET_SHIFT;
3921 assert!(value & (Self::VOFFSET_MASK as u64) == value);
3922 *self = Self::from_bits_retain(
3923 (self.bits() & !(Self::VOFFSET_MASK << offset)) | ((value as u64) << offset),
3924 );
3925 }
3926
3927 pub const fn with_voffset(mut self, value: u64) -> Self {
3929 self.set_voffset(value);
3930 self
3931 }
3932}
3933
3934#[cfg(feature = "el2")]
3935bitflags! {
3936 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3940 #[repr(transparent)]
3941 pub struct CntvoffEl2: u64 {
3942 }
3943}
3944
3945#[cfg(feature = "el2")]
3946impl CntvoffEl2 {
3947 pub const VOFFSET_SHIFT: u32 = 0;
3949 pub const VOFFSET_MASK: u64 =
3951 0b1111111111111111111111111111111111111111111111111111111111111111;
3952
3953 pub const fn voffset(self) -> u64 {
3955 ((self.bits() >> Self::VOFFSET_SHIFT)
3956 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
3957 }
3958
3959 pub const fn set_voffset(&mut self, value: u64) {
3961 let offset = Self::VOFFSET_SHIFT;
3962 assert!(value & (Self::VOFFSET_MASK as u64) == value);
3963 *self = Self::from_bits_retain(
3964 (self.bits() & !(Self::VOFFSET_MASK << offset)) | ((value as u64) << offset),
3965 );
3966 }
3967
3968 pub const fn with_voffset(mut self, value: u64) -> Self {
3970 self.set_voffset(value);
3971 self
3972 }
3973}
3974
3975bitflags! {
3976 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
3978 #[repr(transparent)]
3979 pub struct CntvCtl: u32 {
3980 const ENABLE = 1 << 0;
3982 const IMASK = 1 << 1;
3984 const ISTATUS = 1 << 2;
3986 }
3987}
3988
3989impl CntvCtl {
3990 pub const ENABLE_SHIFT: u32 = 0;
3992 pub const IMASK_SHIFT: u32 = 1;
3994 pub const ISTATUS_SHIFT: u32 = 2;
3996}
3997
3998bitflags! {
3999 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4003 #[repr(transparent)]
4004 pub struct CntvCtlEl0: u64 {
4005 const ENABLE = 1 << 0;
4007 const IMASK = 1 << 1;
4009 const ISTATUS = 1 << 2;
4011 }
4012}
4013
4014impl CntvCtlEl0 {
4015 pub const ENABLE_SHIFT: u32 = 0;
4017 pub const IMASK_SHIFT: u32 = 1;
4019 pub const ISTATUS_SHIFT: u32 = 2;
4021}
4022
4023bitflags! {
4024 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4026 #[repr(transparent)]
4027 pub struct CntvCval: u64 {
4028 }
4029}
4030
4031impl CntvCval {
4032 pub const COMPAREVALUE_SHIFT: u32 = 0;
4034 pub const COMPAREVALUE_MASK: u64 =
4036 0b1111111111111111111111111111111111111111111111111111111111111111;
4037
4038 pub const fn comparevalue(self) -> u64 {
4040 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
4041 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
4042 }
4043
4044 pub const fn set_comparevalue(&mut self, value: u64) {
4046 let offset = Self::COMPAREVALUE_SHIFT;
4047 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
4048 *self = Self::from_bits_retain(
4049 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
4050 );
4051 }
4052
4053 pub const fn with_comparevalue(mut self, value: u64) -> Self {
4055 self.set_comparevalue(value);
4056 self
4057 }
4058}
4059
4060bitflags! {
4061 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4065 #[repr(transparent)]
4066 pub struct CntvCvalEl0: u64 {
4067 }
4068}
4069
4070impl CntvCvalEl0 {
4071 pub const COMPAREVALUE_SHIFT: u32 = 0;
4073 pub const COMPAREVALUE_MASK: u64 =
4075 0b1111111111111111111111111111111111111111111111111111111111111111;
4076
4077 pub const fn comparevalue(self) -> u64 {
4079 ((self.bits() >> Self::COMPAREVALUE_SHIFT)
4080 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
4081 }
4082
4083 pub const fn set_comparevalue(&mut self, value: u64) {
4085 let offset = Self::COMPAREVALUE_SHIFT;
4086 assert!(value & (Self::COMPAREVALUE_MASK as u64) == value);
4087 *self = Self::from_bits_retain(
4088 (self.bits() & !(Self::COMPAREVALUE_MASK << offset)) | ((value as u64) << offset),
4089 );
4090 }
4091
4092 pub const fn with_comparevalue(mut self, value: u64) -> Self {
4094 self.set_comparevalue(value);
4095 self
4096 }
4097}
4098
4099bitflags! {
4100 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4102 #[repr(transparent)]
4103 pub struct CntvTval: u32 {
4104 }
4105}
4106
4107impl CntvTval {
4108 pub const TIMERVALUE_SHIFT: u32 = 0;
4110 pub const TIMERVALUE_MASK: u32 = 0b11111111111111111111111111111111;
4112
4113 pub const fn timervalue(self) -> u32 {
4115 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
4116 }
4117
4118 pub const fn set_timervalue(&mut self, value: u32) {
4120 let offset = Self::TIMERVALUE_SHIFT;
4121 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
4122 *self = Self::from_bits_retain(
4123 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u32) << offset),
4124 );
4125 }
4126
4127 pub const fn with_timervalue(mut self, value: u32) -> Self {
4129 self.set_timervalue(value);
4130 self
4131 }
4132}
4133
4134bitflags! {
4135 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4139 #[repr(transparent)]
4140 pub struct CntvTvalEl0: u64 {
4141 }
4142}
4143
4144impl CntvTvalEl0 {
4145 pub const TIMERVALUE_SHIFT: u32 = 0;
4147 pub const TIMERVALUE_MASK: u64 = 0b11111111111111111111111111111111;
4149
4150 pub const fn timervalue(self) -> u32 {
4152 ((self.bits() >> Self::TIMERVALUE_SHIFT) & 0b11111111111111111111111111111111) as u32
4153 }
4154
4155 pub const fn set_timervalue(&mut self, value: u32) {
4157 let offset = Self::TIMERVALUE_SHIFT;
4158 assert!(value & (Self::TIMERVALUE_MASK as u32) == value);
4159 *self = Self::from_bits_retain(
4160 (self.bits() & !(Self::TIMERVALUE_MASK << offset)) | ((value as u64) << offset),
4161 );
4162 }
4163
4164 pub const fn with_timervalue(mut self, value: u32) -> Self {
4166 self.set_timervalue(value);
4167 self
4168 }
4169}
4170
4171bitflags! {
4172 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4174 #[repr(transparent)]
4175 pub struct Contextidr: u32 {
4176 }
4177}
4178
4179impl Contextidr {
4180 pub const ASID_SHIFT: u32 = 0;
4182 pub const ASID_MASK: u32 = 0b11111111;
4184
4185 pub const fn asid(self) -> u8 {
4187 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
4188 }
4189
4190 pub const fn set_asid(&mut self, value: u8) {
4192 let offset = Self::ASID_SHIFT;
4193 assert!(value & (Self::ASID_MASK as u8) == value);
4194 *self = Self::from_bits_retain(
4195 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u32) << offset),
4196 );
4197 }
4198
4199 pub const fn with_asid(mut self, value: u8) -> Self {
4201 self.set_asid(value);
4202 self
4203 }
4204}
4205
4206#[cfg(feature = "el1")]
4207bitflags! {
4208 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4210 #[repr(transparent)]
4211 pub struct ContextidrEl1: u64 {
4212 }
4213}
4214
4215#[cfg(feature = "el1")]
4216impl ContextidrEl1 {
4217 pub const PROCID_SHIFT: u32 = 0;
4219 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
4221
4222 pub const fn procid(self) -> u32 {
4224 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
4225 }
4226
4227 pub const fn set_procid(&mut self, value: u32) {
4229 let offset = Self::PROCID_SHIFT;
4230 assert!(value & (Self::PROCID_MASK as u32) == value);
4231 *self = Self::from_bits_retain(
4232 (self.bits() & !(Self::PROCID_MASK << offset)) | ((value as u64) << offset),
4233 );
4234 }
4235
4236 pub const fn with_procid(mut self, value: u32) -> Self {
4238 self.set_procid(value);
4239 self
4240 }
4241}
4242
4243#[cfg(feature = "el2")]
4244bitflags! {
4245 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4247 #[repr(transparent)]
4248 pub struct ContextidrEl2: u64 {
4249 }
4250}
4251
4252#[cfg(feature = "el2")]
4253impl ContextidrEl2 {
4254 pub const PROCID_SHIFT: u32 = 0;
4256 pub const PROCID_MASK: u64 = 0b11111111111111111111111111111111;
4258
4259 pub const fn procid(self) -> u32 {
4261 ((self.bits() >> Self::PROCID_SHIFT) & 0b11111111111111111111111111111111) as u32
4262 }
4263
4264 pub const fn set_procid(&mut self, value: u32) {
4266 let offset = Self::PROCID_SHIFT;
4267 assert!(value & (Self::PROCID_MASK as u32) == value);
4268 *self = Self::from_bits_retain(
4269 (self.bits() & !(Self::PROCID_MASK << offset)) | ((value as u64) << offset),
4270 );
4271 }
4272
4273 pub const fn with_procid(mut self, value: u32) -> Self {
4275 self.set_procid(value);
4276 self
4277 }
4278}
4279
4280bitflags! {
4281 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4283 #[repr(transparent)]
4284 pub struct Cpacr: u32 {
4285 const TRCDIS = 1 << 28;
4287 const ASEDIS = 1 << 31;
4289 }
4290}
4291
4292impl Cpacr {
4293 pub const CP10_SHIFT: u32 = 20;
4295 pub const CP10_MASK: u32 = 0b11;
4297 pub const CP11_SHIFT: u32 = 22;
4299 pub const CP11_MASK: u32 = 0b11;
4301 pub const TRCDIS_SHIFT: u32 = 28;
4303 pub const ASEDIS_SHIFT: u32 = 31;
4305
4306 pub const fn cp10(self) -> u8 {
4308 ((self.bits() >> Self::CP10_SHIFT) & 0b11) as u8
4309 }
4310
4311 pub const fn set_cp10(&mut self, value: u8) {
4313 let offset = Self::CP10_SHIFT;
4314 assert!(value & (Self::CP10_MASK as u8) == value);
4315 *self = Self::from_bits_retain(
4316 (self.bits() & !(Self::CP10_MASK << offset)) | ((value as u32) << offset),
4317 );
4318 }
4319
4320 pub const fn with_cp10(mut self, value: u8) -> Self {
4322 self.set_cp10(value);
4323 self
4324 }
4325
4326 pub const fn cp11(self) -> u8 {
4328 ((self.bits() >> Self::CP11_SHIFT) & 0b11) as u8
4329 }
4330
4331 pub const fn set_cp11(&mut self, value: u8) {
4333 let offset = Self::CP11_SHIFT;
4334 assert!(value & (Self::CP11_MASK as u8) == value);
4335 *self = Self::from_bits_retain(
4336 (self.bits() & !(Self::CP11_MASK << offset)) | ((value as u32) << offset),
4337 );
4338 }
4339
4340 pub const fn with_cp11(mut self, value: u8) -> Self {
4342 self.set_cp11(value);
4343 self
4344 }
4345}
4346
4347#[cfg(feature = "el1")]
4348bitflags! {
4349 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4351 #[repr(transparent)]
4352 pub struct CpacrEl1: u64 {
4353 const TTA = 1 << 28;
4355 const E0POE = 1 << 29;
4357 const TAM = 1 << 30;
4359 const TCPAC = 1 << 31;
4361 const E0TP0E = 1 << 32;
4363 const E0TP1E = 1 << 33;
4365 }
4366}
4367
4368#[cfg(feature = "el1")]
4369impl CpacrEl1 {
4370 pub const ZEN_SHIFT: u32 = 16;
4372 pub const ZEN_MASK: u64 = 0b11;
4374 pub const FPEN_SHIFT: u32 = 20;
4376 pub const FPEN_MASK: u64 = 0b11;
4378 pub const SMEN_SHIFT: u32 = 24;
4380 pub const SMEN_MASK: u64 = 0b11;
4382 pub const TTA_SHIFT: u32 = 28;
4384 pub const E0POE_SHIFT: u32 = 29;
4386 pub const TAM_SHIFT: u32 = 30;
4388 pub const TCPAC_SHIFT: u32 = 31;
4390 pub const E0TP0E_SHIFT: u32 = 32;
4392 pub const E0TP1E_SHIFT: u32 = 33;
4394
4395 pub const fn zen(self) -> u8 {
4397 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
4398 }
4399
4400 pub const fn set_zen(&mut self, value: u8) {
4402 let offset = Self::ZEN_SHIFT;
4403 assert!(value & (Self::ZEN_MASK as u8) == value);
4404 *self = Self::from_bits_retain(
4405 (self.bits() & !(Self::ZEN_MASK << offset)) | ((value as u64) << offset),
4406 );
4407 }
4408
4409 pub const fn with_zen(mut self, value: u8) -> Self {
4411 self.set_zen(value);
4412 self
4413 }
4414
4415 pub const fn fpen(self) -> u8 {
4417 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
4418 }
4419
4420 pub const fn set_fpen(&mut self, value: u8) {
4422 let offset = Self::FPEN_SHIFT;
4423 assert!(value & (Self::FPEN_MASK as u8) == value);
4424 *self = Self::from_bits_retain(
4425 (self.bits() & !(Self::FPEN_MASK << offset)) | ((value as u64) << offset),
4426 );
4427 }
4428
4429 pub const fn with_fpen(mut self, value: u8) -> Self {
4431 self.set_fpen(value);
4432 self
4433 }
4434
4435 pub const fn smen(self) -> u8 {
4437 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
4438 }
4439
4440 pub const fn set_smen(&mut self, value: u8) {
4442 let offset = Self::SMEN_SHIFT;
4443 assert!(value & (Self::SMEN_MASK as u8) == value);
4444 *self = Self::from_bits_retain(
4445 (self.bits() & !(Self::SMEN_MASK << offset)) | ((value as u64) << offset),
4446 );
4447 }
4448
4449 pub const fn with_smen(mut self, value: u8) -> Self {
4451 self.set_smen(value);
4452 self
4453 }
4454}
4455
4456#[cfg(feature = "el2")]
4457bitflags! {
4458 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4460 #[repr(transparent)]
4461 pub struct CptrEl2: u64 {
4462 const RES1 = 0b10001011111111;
4464 const TZ = 1 << 8;
4466 const TFP = 1 << 10;
4468 const TSM = 1 << 12;
4470 const E0POE = 1 << 29;
4472 const TAM = 1 << 30;
4474 const TCPAC = 1 << 31;
4476 const E0TP0E = 1 << 32;
4478 const E0TP1E = 1 << 33;
4480 }
4481}
4482
4483#[cfg(feature = "el2")]
4484impl CptrEl2 {
4485 pub const TZ_SHIFT: u32 = 8;
4487 pub const TFP_SHIFT: u32 = 10;
4489 pub const TSM_SHIFT: u32 = 12;
4491 pub const ZEN_SHIFT: u32 = 16;
4493 pub const ZEN_MASK: u64 = 0b11;
4495 pub const FPEN_SHIFT: u32 = 20;
4497 pub const FPEN_MASK: u64 = 0b11;
4499 pub const SMEN_SHIFT: u32 = 24;
4501 pub const SMEN_MASK: u64 = 0b11;
4503 pub const E0POE_SHIFT: u32 = 29;
4505 pub const TAM_SHIFT: u32 = 30;
4507 pub const TCPAC_SHIFT: u32 = 31;
4509 pub const E0TP0E_SHIFT: u32 = 32;
4511 pub const E0TP1E_SHIFT: u32 = 33;
4513
4514 pub const fn zen(self) -> u8 {
4516 ((self.bits() >> Self::ZEN_SHIFT) & 0b11) as u8
4517 }
4518
4519 pub const fn set_zen(&mut self, value: u8) {
4521 let offset = Self::ZEN_SHIFT;
4522 assert!(value & (Self::ZEN_MASK as u8) == value);
4523 *self = Self::from_bits_retain(
4524 (self.bits() & !(Self::ZEN_MASK << offset)) | ((value as u64) << offset),
4525 );
4526 }
4527
4528 pub const fn with_zen(mut self, value: u8) -> Self {
4530 self.set_zen(value);
4531 self
4532 }
4533
4534 pub const fn fpen(self) -> u8 {
4536 ((self.bits() >> Self::FPEN_SHIFT) & 0b11) as u8
4537 }
4538
4539 pub const fn set_fpen(&mut self, value: u8) {
4541 let offset = Self::FPEN_SHIFT;
4542 assert!(value & (Self::FPEN_MASK as u8) == value);
4543 *self = Self::from_bits_retain(
4544 (self.bits() & !(Self::FPEN_MASK << offset)) | ((value as u64) << offset),
4545 );
4546 }
4547
4548 pub const fn with_fpen(mut self, value: u8) -> Self {
4550 self.set_fpen(value);
4551 self
4552 }
4553
4554 pub const fn smen(self) -> u8 {
4556 ((self.bits() >> Self::SMEN_SHIFT) & 0b11) as u8
4557 }
4558
4559 pub const fn set_smen(&mut self, value: u8) {
4561 let offset = Self::SMEN_SHIFT;
4562 assert!(value & (Self::SMEN_MASK as u8) == value);
4563 *self = Self::from_bits_retain(
4564 (self.bits() & !(Self::SMEN_MASK << offset)) | ((value as u64) << offset),
4565 );
4566 }
4567
4568 pub const fn with_smen(mut self, value: u8) -> Self {
4570 self.set_smen(value);
4571 self
4572 }
4573}
4574
4575#[cfg(feature = "el3")]
4576bitflags! {
4577 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4579 #[repr(transparent)]
4580 pub struct CptrEl3: u64 {
4581 const EZ = 1 << 8;
4583 const TFP = 1 << 10;
4585 const ESM = 1 << 12;
4587 const TTA = 1 << 20;
4589 const TAM = 1 << 30;
4591 const TCPAC = 1 << 31;
4593 }
4594}
4595
4596#[cfg(feature = "el3")]
4597impl CptrEl3 {
4598 pub const EZ_SHIFT: u32 = 8;
4600 pub const TFP_SHIFT: u32 = 10;
4602 pub const ESM_SHIFT: u32 = 12;
4604 pub const TTA_SHIFT: u32 = 20;
4606 pub const TAM_SHIFT: u32 = 30;
4608 pub const TCPAC_SHIFT: u32 = 31;
4610}
4611
4612bitflags! {
4613 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4615 #[repr(transparent)]
4616 pub struct Csselr: u32 {
4617 const IND = 1 << 0;
4619 }
4620}
4621
4622impl Csselr {
4623 pub const IND_SHIFT: u32 = 0;
4625 pub const LEVEL_SHIFT: u32 = 1;
4627 pub const LEVEL_MASK: u32 = 0b111;
4629
4630 pub const fn level(self) -> u8 {
4632 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
4633 }
4634
4635 pub const fn set_level(&mut self, value: u8) {
4637 let offset = Self::LEVEL_SHIFT;
4638 assert!(value & (Self::LEVEL_MASK as u8) == value);
4639 *self = Self::from_bits_retain(
4640 (self.bits() & !(Self::LEVEL_MASK << offset)) | ((value as u32) << offset),
4641 );
4642 }
4643
4644 pub const fn with_level(mut self, value: u8) -> Self {
4646 self.set_level(value);
4647 self
4648 }
4649}
4650
4651#[cfg(feature = "el1")]
4652bitflags! {
4653 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4655 #[repr(transparent)]
4656 pub struct CsselrEl1: u64 {
4657 const IND = 1 << 0;
4659 const TND = 1 << 4;
4661 }
4662}
4663
4664#[cfg(feature = "el1")]
4665impl CsselrEl1 {
4666 pub const IND_SHIFT: u32 = 0;
4668 pub const LEVEL_SHIFT: u32 = 1;
4670 pub const LEVEL_MASK: u64 = 0b111;
4672 pub const TND_SHIFT: u32 = 4;
4674
4675 pub const fn level(self) -> u8 {
4677 ((self.bits() >> Self::LEVEL_SHIFT) & 0b111) as u8
4678 }
4679
4680 pub const fn set_level(&mut self, value: u8) {
4682 let offset = Self::LEVEL_SHIFT;
4683 assert!(value & (Self::LEVEL_MASK as u8) == value);
4684 *self = Self::from_bits_retain(
4685 (self.bits() & !(Self::LEVEL_MASK << offset)) | ((value as u64) << offset),
4686 );
4687 }
4688
4689 pub const fn with_level(mut self, value: u8) -> Self {
4691 self.set_level(value);
4692 self
4693 }
4694}
4695
4696bitflags! {
4697 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4699 #[repr(transparent)]
4700 pub struct Ctr: u32 {
4701 const RES1 = 0b10000000000000000000000000000000;
4703 const IDC = 1 << 28;
4705 const DIC = 1 << 29;
4707 }
4708}
4709
4710impl Ctr {
4711 pub const IMINLINE_SHIFT: u32 = 0;
4713 pub const IMINLINE_MASK: u32 = 0b1111;
4715 pub const L1IP_SHIFT: u32 = 14;
4717 pub const L1IP_MASK: u32 = 0b11;
4719 pub const DMINLINE_SHIFT: u32 = 16;
4721 pub const DMINLINE_MASK: u32 = 0b1111;
4723 pub const ERG_SHIFT: u32 = 20;
4725 pub const ERG_MASK: u32 = 0b1111;
4727 pub const CWG_SHIFT: u32 = 24;
4729 pub const CWG_MASK: u32 = 0b1111;
4731 pub const IDC_SHIFT: u32 = 28;
4733 pub const DIC_SHIFT: u32 = 29;
4735
4736 pub const fn iminline(self) -> u8 {
4738 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
4739 }
4740
4741 pub const fn set_iminline(&mut self, value: u8) {
4743 let offset = Self::IMINLINE_SHIFT;
4744 assert!(value & (Self::IMINLINE_MASK as u8) == value);
4745 *self = Self::from_bits_retain(
4746 (self.bits() & !(Self::IMINLINE_MASK << offset)) | ((value as u32) << offset),
4747 );
4748 }
4749
4750 pub const fn with_iminline(mut self, value: u8) -> Self {
4752 self.set_iminline(value);
4753 self
4754 }
4755
4756 pub const fn l1ip(self) -> u8 {
4758 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
4759 }
4760
4761 pub const fn set_l1ip(&mut self, value: u8) {
4763 let offset = Self::L1IP_SHIFT;
4764 assert!(value & (Self::L1IP_MASK as u8) == value);
4765 *self = Self::from_bits_retain(
4766 (self.bits() & !(Self::L1IP_MASK << offset)) | ((value as u32) << offset),
4767 );
4768 }
4769
4770 pub const fn with_l1ip(mut self, value: u8) -> Self {
4772 self.set_l1ip(value);
4773 self
4774 }
4775
4776 pub const fn dminline(self) -> u8 {
4778 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
4779 }
4780
4781 pub const fn set_dminline(&mut self, value: u8) {
4783 let offset = Self::DMINLINE_SHIFT;
4784 assert!(value & (Self::DMINLINE_MASK as u8) == value);
4785 *self = Self::from_bits_retain(
4786 (self.bits() & !(Self::DMINLINE_MASK << offset)) | ((value as u32) << offset),
4787 );
4788 }
4789
4790 pub const fn with_dminline(mut self, value: u8) -> Self {
4792 self.set_dminline(value);
4793 self
4794 }
4795
4796 pub const fn erg(self) -> u8 {
4798 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
4799 }
4800
4801 pub const fn set_erg(&mut self, value: u8) {
4803 let offset = Self::ERG_SHIFT;
4804 assert!(value & (Self::ERG_MASK as u8) == value);
4805 *self = Self::from_bits_retain(
4806 (self.bits() & !(Self::ERG_MASK << offset)) | ((value as u32) << offset),
4807 );
4808 }
4809
4810 pub const fn with_erg(mut self, value: u8) -> Self {
4812 self.set_erg(value);
4813 self
4814 }
4815
4816 pub const fn cwg(self) -> u8 {
4818 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
4819 }
4820
4821 pub const fn set_cwg(&mut self, value: u8) {
4823 let offset = Self::CWG_SHIFT;
4824 assert!(value & (Self::CWG_MASK as u8) == value);
4825 *self = Self::from_bits_retain(
4826 (self.bits() & !(Self::CWG_MASK << offset)) | ((value as u32) << offset),
4827 );
4828 }
4829
4830 pub const fn with_cwg(mut self, value: u8) -> Self {
4832 self.set_cwg(value);
4833 self
4834 }
4835}
4836
4837bitflags! {
4838 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
4842 #[repr(transparent)]
4843 pub struct CtrEl0: u64 {
4844 const RES1 = 0b10000000000000000000000000000000;
4846 const IDC = 1 << 28;
4848 const DIC = 1 << 29;
4850 }
4851}
4852
4853impl CtrEl0 {
4854 pub const IMINLINE_SHIFT: u32 = 0;
4856 pub const IMINLINE_MASK: u64 = 0b1111;
4858 pub const L1IP_SHIFT: u32 = 14;
4860 pub const L1IP_MASK: u64 = 0b11;
4862 pub const DMINLINE_SHIFT: u32 = 16;
4864 pub const DMINLINE_MASK: u64 = 0b1111;
4866 pub const ERG_SHIFT: u32 = 20;
4868 pub const ERG_MASK: u64 = 0b1111;
4870 pub const CWG_SHIFT: u32 = 24;
4872 pub const CWG_MASK: u64 = 0b1111;
4874 pub const IDC_SHIFT: u32 = 28;
4876 pub const DIC_SHIFT: u32 = 29;
4878 pub const TMINLINE_SHIFT: u32 = 32;
4880 pub const TMINLINE_MASK: u64 = 0b111111;
4882
4883 pub const fn iminline(self) -> u8 {
4885 ((self.bits() >> Self::IMINLINE_SHIFT) & 0b1111) as u8
4886 }
4887
4888 pub const fn set_iminline(&mut self, value: u8) {
4890 let offset = Self::IMINLINE_SHIFT;
4891 assert!(value & (Self::IMINLINE_MASK as u8) == value);
4892 *self = Self::from_bits_retain(
4893 (self.bits() & !(Self::IMINLINE_MASK << offset)) | ((value as u64) << offset),
4894 );
4895 }
4896
4897 pub const fn with_iminline(mut self, value: u8) -> Self {
4899 self.set_iminline(value);
4900 self
4901 }
4902
4903 pub const fn l1ip(self) -> u8 {
4905 ((self.bits() >> Self::L1IP_SHIFT) & 0b11) as u8
4906 }
4907
4908 pub const fn set_l1ip(&mut self, value: u8) {
4910 let offset = Self::L1IP_SHIFT;
4911 assert!(value & (Self::L1IP_MASK as u8) == value);
4912 *self = Self::from_bits_retain(
4913 (self.bits() & !(Self::L1IP_MASK << offset)) | ((value as u64) << offset),
4914 );
4915 }
4916
4917 pub const fn with_l1ip(mut self, value: u8) -> Self {
4919 self.set_l1ip(value);
4920 self
4921 }
4922
4923 pub const fn dminline(self) -> u8 {
4927 ((self.bits() >> Self::DMINLINE_SHIFT) & 0b1111) as u8
4928 }
4929
4930 pub const fn set_dminline(&mut self, value: u8) {
4934 let offset = Self::DMINLINE_SHIFT;
4935 assert!(value & (Self::DMINLINE_MASK as u8) == value);
4936 *self = Self::from_bits_retain(
4937 (self.bits() & !(Self::DMINLINE_MASK << offset)) | ((value as u64) << offset),
4938 );
4939 }
4940
4941 pub const fn with_dminline(mut self, value: u8) -> Self {
4945 self.set_dminline(value);
4946 self
4947 }
4948
4949 pub const fn erg(self) -> u8 {
4951 ((self.bits() >> Self::ERG_SHIFT) & 0b1111) as u8
4952 }
4953
4954 pub const fn set_erg(&mut self, value: u8) {
4956 let offset = Self::ERG_SHIFT;
4957 assert!(value & (Self::ERG_MASK as u8) == value);
4958 *self = Self::from_bits_retain(
4959 (self.bits() & !(Self::ERG_MASK << offset)) | ((value as u64) << offset),
4960 );
4961 }
4962
4963 pub const fn with_erg(mut self, value: u8) -> Self {
4965 self.set_erg(value);
4966 self
4967 }
4968
4969 pub const fn cwg(self) -> u8 {
4971 ((self.bits() >> Self::CWG_SHIFT) & 0b1111) as u8
4972 }
4973
4974 pub const fn set_cwg(&mut self, value: u8) {
4976 let offset = Self::CWG_SHIFT;
4977 assert!(value & (Self::CWG_MASK as u8) == value);
4978 *self = Self::from_bits_retain(
4979 (self.bits() & !(Self::CWG_MASK << offset)) | ((value as u64) << offset),
4980 );
4981 }
4982
4983 pub const fn with_cwg(mut self, value: u8) -> Self {
4985 self.set_cwg(value);
4986 self
4987 }
4988
4989 pub const fn tminline(self) -> u8 {
4991 ((self.bits() >> Self::TMINLINE_SHIFT) & 0b111111) as u8
4992 }
4993
4994 pub const fn set_tminline(&mut self, value: u8) {
4996 let offset = Self::TMINLINE_SHIFT;
4997 assert!(value & (Self::TMINLINE_MASK as u8) == value);
4998 *self = Self::from_bits_retain(
4999 (self.bits() & !(Self::TMINLINE_MASK << offset)) | ((value as u64) << offset),
5000 );
5001 }
5002
5003 pub const fn with_tminline(mut self, value: u8) -> Self {
5005 self.set_tminline(value);
5006 self
5007 }
5008}
5009
5010bitflags! {
5011 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5013 #[repr(transparent)]
5014 pub struct Currentel: u64 {
5015 }
5016}
5017
5018impl Currentel {
5019 pub const EL_SHIFT: u32 = 2;
5021 pub const EL_MASK: u64 = 0b11;
5023
5024 pub const fn el(self) -> u8 {
5026 ((self.bits() >> Self::EL_SHIFT) & 0b11) as u8
5027 }
5028
5029 pub const fn set_el(&mut self, value: u8) {
5031 let offset = Self::EL_SHIFT;
5032 assert!(value & (Self::EL_MASK as u8) == value);
5033 *self = Self::from_bits_retain(
5034 (self.bits() & !(Self::EL_MASK << offset)) | ((value as u64) << offset),
5035 );
5036 }
5037
5038 pub const fn with_el(mut self, value: u8) -> Self {
5040 self.set_el(value);
5041 self
5042 }
5043}
5044
5045bitflags! {
5046 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5048 #[repr(transparent)]
5049 pub struct Dacr: u32 {
5050 }
5051}
5052
5053impl Dacr {
5054 pub const D_SHIFT: u32 = 0;
5056 pub const D_MASK: u32 = 0b11;
5058
5059 pub const fn d(self, n: u32) -> u8 {
5061 assert!(n < 16);
5062 ((self.bits() >> (Self::D_SHIFT + (n - 0) * 2)) & 0b11) as u8
5063 }
5064
5065 pub const fn set_d(&mut self, n: u32, value: u8) {
5067 assert!(n < 16);
5068 let offset = Self::D_SHIFT + (n - 0) * 2;
5069 assert!(value & (Self::D_MASK as u8) == value);
5070 *self = Self::from_bits_retain(
5071 (self.bits() & !(Self::D_MASK << offset)) | ((value as u32) << offset),
5072 );
5073 }
5074
5075 pub const fn with_d(mut self, n: u32, value: u8) -> Self {
5077 self.set_d(n, value);
5078 self
5079 }
5080}
5081
5082bitflags! {
5083 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5085 #[repr(transparent)]
5086 pub struct Dbgauthstatus: u32 {
5087 }
5088}
5089
5090impl Dbgauthstatus {
5091 pub const NSID_SHIFT: u32 = 0;
5093 pub const NSID_MASK: u32 = 0b11;
5095 pub const NSNID_SHIFT: u32 = 2;
5097 pub const NSNID_MASK: u32 = 0b11;
5099 pub const SID_SHIFT: u32 = 4;
5101 pub const SID_MASK: u32 = 0b11;
5103 pub const SNID_SHIFT: u32 = 6;
5105 pub const SNID_MASK: u32 = 0b11;
5107
5108 pub const fn nsid(self) -> u8 {
5110 ((self.bits() >> Self::NSID_SHIFT) & 0b11) as u8
5111 }
5112
5113 pub const fn set_nsid(&mut self, value: u8) {
5115 let offset = Self::NSID_SHIFT;
5116 assert!(value & (Self::NSID_MASK as u8) == value);
5117 *self = Self::from_bits_retain(
5118 (self.bits() & !(Self::NSID_MASK << offset)) | ((value as u32) << offset),
5119 );
5120 }
5121
5122 pub const fn with_nsid(mut self, value: u8) -> Self {
5124 self.set_nsid(value);
5125 self
5126 }
5127
5128 pub const fn nsnid(self) -> u8 {
5130 ((self.bits() >> Self::NSNID_SHIFT) & 0b11) as u8
5131 }
5132
5133 pub const fn set_nsnid(&mut self, value: u8) {
5135 let offset = Self::NSNID_SHIFT;
5136 assert!(value & (Self::NSNID_MASK as u8) == value);
5137 *self = Self::from_bits_retain(
5138 (self.bits() & !(Self::NSNID_MASK << offset)) | ((value as u32) << offset),
5139 );
5140 }
5141
5142 pub const fn with_nsnid(mut self, value: u8) -> Self {
5144 self.set_nsnid(value);
5145 self
5146 }
5147
5148 pub const fn sid(self) -> u8 {
5150 ((self.bits() >> Self::SID_SHIFT) & 0b11) as u8
5151 }
5152
5153 pub const fn set_sid(&mut self, value: u8) {
5155 let offset = Self::SID_SHIFT;
5156 assert!(value & (Self::SID_MASK as u8) == value);
5157 *self = Self::from_bits_retain(
5158 (self.bits() & !(Self::SID_MASK << offset)) | ((value as u32) << offset),
5159 );
5160 }
5161
5162 pub const fn with_sid(mut self, value: u8) -> Self {
5164 self.set_sid(value);
5165 self
5166 }
5167
5168 pub const fn snid(self) -> u8 {
5170 ((self.bits() >> Self::SNID_SHIFT) & 0b11) as u8
5171 }
5172
5173 pub const fn set_snid(&mut self, value: u8) {
5175 let offset = Self::SNID_SHIFT;
5176 assert!(value & (Self::SNID_MASK as u8) == value);
5177 *self = Self::from_bits_retain(
5178 (self.bits() & !(Self::SNID_MASK << offset)) | ((value as u32) << offset),
5179 );
5180 }
5181
5182 pub const fn with_snid(mut self, value: u8) -> Self {
5184 self.set_snid(value);
5185 self
5186 }
5187}
5188
5189bitflags! {
5190 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5192 #[repr(transparent)]
5193 pub struct Dbgclaimclr: u32 {
5194 const CLAIM0 = 1 << 0;
5196 const CLAIM1 = 1 << 1;
5198 const CLAIM2 = 1 << 2;
5200 const CLAIM3 = 1 << 3;
5202 const CLAIM4 = 1 << 4;
5204 const CLAIM5 = 1 << 5;
5206 const CLAIM6 = 1 << 6;
5208 const CLAIM7 = 1 << 7;
5210 }
5211}
5212
5213impl Dbgclaimclr {
5214 pub const CLAIM_SHIFT: u32 = 0;
5216}
5217
5218bitflags! {
5219 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5221 #[repr(transparent)]
5222 pub struct Dbgclaimset: u32 {
5223 const CLAIM0 = 1 << 0;
5225 const CLAIM1 = 1 << 1;
5227 const CLAIM2 = 1 << 2;
5229 const CLAIM3 = 1 << 3;
5231 const CLAIM4 = 1 << 4;
5233 const CLAIM5 = 1 << 5;
5235 const CLAIM6 = 1 << 6;
5237 const CLAIM7 = 1 << 7;
5239 }
5240}
5241
5242impl Dbgclaimset {
5243 pub const CLAIM_SHIFT: u32 = 0;
5245}
5246
5247bitflags! {
5248 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5250 #[repr(transparent)]
5251 pub struct Dbgdccint: u32 {
5252 const TX = 1 << 29;
5254 const RX = 1 << 30;
5256 }
5257}
5258
5259impl Dbgdccint {
5260 pub const TX_SHIFT: u32 = 29;
5262 pub const RX_SHIFT: u32 = 30;
5264}
5265
5266bitflags! {
5267 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5269 #[repr(transparent)]
5270 pub struct Dbgdevid: u32 {
5271 }
5272}
5273
5274impl Dbgdevid {
5275 pub const PCSAMPLE_SHIFT: u32 = 0;
5277 pub const PCSAMPLE_MASK: u32 = 0b1111;
5279 pub const WPADDRMASK_SHIFT: u32 = 4;
5281 pub const WPADDRMASK_MASK: u32 = 0b1111;
5283 pub const BPADDRMASK_SHIFT: u32 = 8;
5285 pub const BPADDRMASK_MASK: u32 = 0b1111;
5287 pub const VECTORCATCH_SHIFT: u32 = 12;
5289 pub const VECTORCATCH_MASK: u32 = 0b1111;
5291 pub const VIRTEXTNS_SHIFT: u32 = 16;
5293 pub const VIRTEXTNS_MASK: u32 = 0b1111;
5295 pub const DOUBLELOCK_SHIFT: u32 = 20;
5297 pub const DOUBLELOCK_MASK: u32 = 0b1111;
5299 pub const AUXREGS_SHIFT: u32 = 24;
5301 pub const AUXREGS_MASK: u32 = 0b1111;
5303 pub const CIDMASK_SHIFT: u32 = 28;
5305 pub const CIDMASK_MASK: u32 = 0b1111;
5307
5308 pub const fn pcsample(self) -> u8 {
5310 ((self.bits() >> Self::PCSAMPLE_SHIFT) & 0b1111) as u8
5311 }
5312
5313 pub const fn set_pcsample(&mut self, value: u8) {
5315 let offset = Self::PCSAMPLE_SHIFT;
5316 assert!(value & (Self::PCSAMPLE_MASK as u8) == value);
5317 *self = Self::from_bits_retain(
5318 (self.bits() & !(Self::PCSAMPLE_MASK << offset)) | ((value as u32) << offset),
5319 );
5320 }
5321
5322 pub const fn with_pcsample(mut self, value: u8) -> Self {
5324 self.set_pcsample(value);
5325 self
5326 }
5327
5328 pub const fn wpaddrmask(self) -> u8 {
5330 ((self.bits() >> Self::WPADDRMASK_SHIFT) & 0b1111) as u8
5331 }
5332
5333 pub const fn set_wpaddrmask(&mut self, value: u8) {
5335 let offset = Self::WPADDRMASK_SHIFT;
5336 assert!(value & (Self::WPADDRMASK_MASK as u8) == value);
5337 *self = Self::from_bits_retain(
5338 (self.bits() & !(Self::WPADDRMASK_MASK << offset)) | ((value as u32) << offset),
5339 );
5340 }
5341
5342 pub const fn with_wpaddrmask(mut self, value: u8) -> Self {
5344 self.set_wpaddrmask(value);
5345 self
5346 }
5347
5348 pub const fn bpaddrmask(self) -> u8 {
5350 ((self.bits() >> Self::BPADDRMASK_SHIFT) & 0b1111) as u8
5351 }
5352
5353 pub const fn set_bpaddrmask(&mut self, value: u8) {
5355 let offset = Self::BPADDRMASK_SHIFT;
5356 assert!(value & (Self::BPADDRMASK_MASK as u8) == value);
5357 *self = Self::from_bits_retain(
5358 (self.bits() & !(Self::BPADDRMASK_MASK << offset)) | ((value as u32) << offset),
5359 );
5360 }
5361
5362 pub const fn with_bpaddrmask(mut self, value: u8) -> Self {
5364 self.set_bpaddrmask(value);
5365 self
5366 }
5367
5368 pub const fn vectorcatch(self) -> u8 {
5370 ((self.bits() >> Self::VECTORCATCH_SHIFT) & 0b1111) as u8
5371 }
5372
5373 pub const fn set_vectorcatch(&mut self, value: u8) {
5375 let offset = Self::VECTORCATCH_SHIFT;
5376 assert!(value & (Self::VECTORCATCH_MASK as u8) == value);
5377 *self = Self::from_bits_retain(
5378 (self.bits() & !(Self::VECTORCATCH_MASK << offset)) | ((value as u32) << offset),
5379 );
5380 }
5381
5382 pub const fn with_vectorcatch(mut self, value: u8) -> Self {
5384 self.set_vectorcatch(value);
5385 self
5386 }
5387
5388 pub const fn virtextns(self) -> u8 {
5390 ((self.bits() >> Self::VIRTEXTNS_SHIFT) & 0b1111) as u8
5391 }
5392
5393 pub const fn set_virtextns(&mut self, value: u8) {
5395 let offset = Self::VIRTEXTNS_SHIFT;
5396 assert!(value & (Self::VIRTEXTNS_MASK as u8) == value);
5397 *self = Self::from_bits_retain(
5398 (self.bits() & !(Self::VIRTEXTNS_MASK << offset)) | ((value as u32) << offset),
5399 );
5400 }
5401
5402 pub const fn with_virtextns(mut self, value: u8) -> Self {
5404 self.set_virtextns(value);
5405 self
5406 }
5407
5408 pub const fn doublelock(self) -> u8 {
5410 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
5411 }
5412
5413 pub const fn set_doublelock(&mut self, value: u8) {
5415 let offset = Self::DOUBLELOCK_SHIFT;
5416 assert!(value & (Self::DOUBLELOCK_MASK as u8) == value);
5417 *self = Self::from_bits_retain(
5418 (self.bits() & !(Self::DOUBLELOCK_MASK << offset)) | ((value as u32) << offset),
5419 );
5420 }
5421
5422 pub const fn with_doublelock(mut self, value: u8) -> Self {
5424 self.set_doublelock(value);
5425 self
5426 }
5427
5428 pub const fn auxregs(self) -> u8 {
5430 ((self.bits() >> Self::AUXREGS_SHIFT) & 0b1111) as u8
5431 }
5432
5433 pub const fn set_auxregs(&mut self, value: u8) {
5435 let offset = Self::AUXREGS_SHIFT;
5436 assert!(value & (Self::AUXREGS_MASK as u8) == value);
5437 *self = Self::from_bits_retain(
5438 (self.bits() & !(Self::AUXREGS_MASK << offset)) | ((value as u32) << offset),
5439 );
5440 }
5441
5442 pub const fn with_auxregs(mut self, value: u8) -> Self {
5444 self.set_auxregs(value);
5445 self
5446 }
5447
5448 pub const fn cidmask(self) -> u8 {
5450 ((self.bits() >> Self::CIDMASK_SHIFT) & 0b1111) as u8
5451 }
5452
5453 pub const fn set_cidmask(&mut self, value: u8) {
5455 let offset = Self::CIDMASK_SHIFT;
5456 assert!(value & (Self::CIDMASK_MASK as u8) == value);
5457 *self = Self::from_bits_retain(
5458 (self.bits() & !(Self::CIDMASK_MASK << offset)) | ((value as u32) << offset),
5459 );
5460 }
5461
5462 pub const fn with_cidmask(mut self, value: u8) -> Self {
5464 self.set_cidmask(value);
5465 self
5466 }
5467}
5468
5469bitflags! {
5470 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5472 #[repr(transparent)]
5473 pub struct Dbgdevid1: u32 {
5474 }
5475}
5476
5477impl Dbgdevid1 {
5478 pub const PCSROFFSET_SHIFT: u32 = 0;
5480 pub const PCSROFFSET_MASK: u32 = 0b1111;
5482
5483 pub const fn pcsroffset(self) -> u8 {
5485 ((self.bits() >> Self::PCSROFFSET_SHIFT) & 0b1111) as u8
5486 }
5487
5488 pub const fn set_pcsroffset(&mut self, value: u8) {
5490 let offset = Self::PCSROFFSET_SHIFT;
5491 assert!(value & (Self::PCSROFFSET_MASK as u8) == value);
5492 *self = Self::from_bits_retain(
5493 (self.bits() & !(Self::PCSROFFSET_MASK << offset)) | ((value as u32) << offset),
5494 );
5495 }
5496
5497 pub const fn with_pcsroffset(mut self, value: u8) -> Self {
5499 self.set_pcsroffset(value);
5500 self
5501 }
5502}
5503
5504bitflags! {
5505 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5507 #[repr(transparent)]
5508 pub struct Dbgdidr: u32 {
5509 const RES1 = 0b1000000000000000;
5511 const SE_IMP = 1 << 12;
5513 const NSUHD_IMP = 1 << 14;
5515 }
5516}
5517
5518impl Dbgdidr {
5519 pub const SE_IMP_SHIFT: u32 = 12;
5521 pub const NSUHD_IMP_SHIFT: u32 = 14;
5523 pub const VERSION_SHIFT: u32 = 16;
5525 pub const VERSION_MASK: u32 = 0b1111;
5527 pub const CTX_CMPS_SHIFT: u32 = 20;
5529 pub const CTX_CMPS_MASK: u32 = 0b1111;
5531 pub const BRPS_SHIFT: u32 = 24;
5533 pub const BRPS_MASK: u32 = 0b1111;
5535 pub const WRPS_SHIFT: u32 = 28;
5537 pub const WRPS_MASK: u32 = 0b1111;
5539
5540 pub const fn version(self) -> u8 {
5542 ((self.bits() >> Self::VERSION_SHIFT) & 0b1111) as u8
5543 }
5544
5545 pub const fn set_version(&mut self, value: u8) {
5547 let offset = Self::VERSION_SHIFT;
5548 assert!(value & (Self::VERSION_MASK as u8) == value);
5549 *self = Self::from_bits_retain(
5550 (self.bits() & !(Self::VERSION_MASK << offset)) | ((value as u32) << offset),
5551 );
5552 }
5553
5554 pub const fn with_version(mut self, value: u8) -> Self {
5556 self.set_version(value);
5557 self
5558 }
5559
5560 pub const fn ctx_cmps(self) -> u8 {
5562 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
5563 }
5564
5565 pub const fn set_ctx_cmps(&mut self, value: u8) {
5567 let offset = Self::CTX_CMPS_SHIFT;
5568 assert!(value & (Self::CTX_CMPS_MASK as u8) == value);
5569 *self = Self::from_bits_retain(
5570 (self.bits() & !(Self::CTX_CMPS_MASK << offset)) | ((value as u32) << offset),
5571 );
5572 }
5573
5574 pub const fn with_ctx_cmps(mut self, value: u8) -> Self {
5576 self.set_ctx_cmps(value);
5577 self
5578 }
5579
5580 pub const fn brps(self) -> u8 {
5582 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
5583 }
5584
5585 pub const fn set_brps(&mut self, value: u8) {
5587 let offset = Self::BRPS_SHIFT;
5588 assert!(value & (Self::BRPS_MASK as u8) == value);
5589 *self = Self::from_bits_retain(
5590 (self.bits() & !(Self::BRPS_MASK << offset)) | ((value as u32) << offset),
5591 );
5592 }
5593
5594 pub const fn with_brps(mut self, value: u8) -> Self {
5596 self.set_brps(value);
5597 self
5598 }
5599
5600 pub const fn wrps(self) -> u8 {
5602 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
5603 }
5604
5605 pub const fn set_wrps(&mut self, value: u8) {
5607 let offset = Self::WRPS_SHIFT;
5608 assert!(value & (Self::WRPS_MASK as u8) == value);
5609 *self = Self::from_bits_retain(
5610 (self.bits() & !(Self::WRPS_MASK << offset)) | ((value as u32) << offset),
5611 );
5612 }
5613
5614 pub const fn with_wrps(mut self, value: u8) -> Self {
5616 self.set_wrps(value);
5617 self
5618 }
5619}
5620
5621bitflags! {
5622 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5624 #[repr(transparent)]
5625 pub struct Dbgdrar: u64 {
5626 }
5627}
5628
5629impl Dbgdrar {
5630 pub const VALID_SHIFT: u32 = 0;
5632 pub const VALID_MASK: u64 = 0b11;
5634 pub const ROMADDR_47_12_SHIFT: u32 = 12;
5636 pub const ROMADDR_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
5638
5639 pub const fn valid(self) -> u8 {
5641 ((self.bits() >> Self::VALID_SHIFT) & 0b11) as u8
5642 }
5643
5644 pub const fn set_valid(&mut self, value: u8) {
5646 let offset = Self::VALID_SHIFT;
5647 assert!(value & (Self::VALID_MASK as u8) == value);
5648 *self = Self::from_bits_retain(
5649 (self.bits() & !(Self::VALID_MASK << offset)) | ((value as u64) << offset),
5650 );
5651 }
5652
5653 pub const fn with_valid(mut self, value: u8) -> Self {
5655 self.set_valid(value);
5656 self
5657 }
5658
5659 pub const fn romaddr_47_12(self) -> u64 {
5661 ((self.bits() >> Self::ROMADDR_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
5662 }
5663
5664 pub const fn set_romaddr_47_12(&mut self, value: u64) {
5666 let offset = Self::ROMADDR_47_12_SHIFT;
5667 assert!(value & (Self::ROMADDR_47_12_MASK as u64) == value);
5668 *self = Self::from_bits_retain(
5669 (self.bits() & !(Self::ROMADDR_47_12_MASK << offset)) | ((value as u64) << offset),
5670 );
5671 }
5672
5673 pub const fn with_romaddr_47_12(mut self, value: u64) -> Self {
5675 self.set_romaddr_47_12(value);
5676 self
5677 }
5678}
5679
5680bitflags! {
5681 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5683 #[repr(transparent)]
5684 pub struct Dbgdscrext: u32 {
5685 const ERR = 1 << 6;
5687 const UDCCDIS = 1 << 12;
5689 const HDE = 1 << 14;
5691 const MDBGEN = 1 << 15;
5693 const SPIDDIS = 1 << 16;
5695 const SPNIDDIS = 1 << 17;
5697 const NS = 1 << 18;
5699 const SC2 = 1 << 19;
5701 const TDA = 1 << 21;
5703 const TXU = 1 << 26;
5705 const RXO = 1 << 27;
5707 const TXFULL = 1 << 29;
5709 const RXFULL = 1 << 30;
5711 const TFO = 1 << 31;
5713 }
5714}
5715
5716impl Dbgdscrext {
5717 pub const MOE_SHIFT: u32 = 2;
5719 pub const MOE_MASK: u32 = 0b1111;
5721 pub const ERR_SHIFT: u32 = 6;
5723 pub const UDCCDIS_SHIFT: u32 = 12;
5725 pub const HDE_SHIFT: u32 = 14;
5727 pub const MDBGEN_SHIFT: u32 = 15;
5729 pub const SPIDDIS_SHIFT: u32 = 16;
5731 pub const SPNIDDIS_SHIFT: u32 = 17;
5733 pub const NS_SHIFT: u32 = 18;
5735 pub const SC2_SHIFT: u32 = 19;
5737 pub const TDA_SHIFT: u32 = 21;
5739 pub const INTDIS_SHIFT: u32 = 22;
5741 pub const INTDIS_MASK: u32 = 0b11;
5743 pub const TXU_SHIFT: u32 = 26;
5745 pub const RXO_SHIFT: u32 = 27;
5747 pub const TXFULL_SHIFT: u32 = 29;
5749 pub const RXFULL_SHIFT: u32 = 30;
5751 pub const TFO_SHIFT: u32 = 31;
5753
5754 pub const fn moe(self) -> u8 {
5756 ((self.bits() >> Self::MOE_SHIFT) & 0b1111) as u8
5757 }
5758
5759 pub const fn set_moe(&mut self, value: u8) {
5761 let offset = Self::MOE_SHIFT;
5762 assert!(value & (Self::MOE_MASK as u8) == value);
5763 *self = Self::from_bits_retain(
5764 (self.bits() & !(Self::MOE_MASK << offset)) | ((value as u32) << offset),
5765 );
5766 }
5767
5768 pub const fn with_moe(mut self, value: u8) -> Self {
5770 self.set_moe(value);
5771 self
5772 }
5773
5774 pub const fn intdis(self) -> u8 {
5776 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
5777 }
5778
5779 pub const fn set_intdis(&mut self, value: u8) {
5781 let offset = Self::INTDIS_SHIFT;
5782 assert!(value & (Self::INTDIS_MASK as u8) == value);
5783 *self = Self::from_bits_retain(
5784 (self.bits() & !(Self::INTDIS_MASK << offset)) | ((value as u32) << offset),
5785 );
5786 }
5787
5788 pub const fn with_intdis(mut self, value: u8) -> Self {
5790 self.set_intdis(value);
5791 self
5792 }
5793}
5794
5795bitflags! {
5796 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5798 #[repr(transparent)]
5799 pub struct Dbgdscrint: u32 {
5800 const UDCCDIS = 1 << 12;
5802 const MDBGEN = 1 << 15;
5804 const SPIDDIS = 1 << 16;
5806 const SPNIDDIS = 1 << 17;
5808 const NS = 1 << 18;
5810 const TXFULL = 1 << 29;
5812 const RXFULL = 1 << 30;
5814 }
5815}
5816
5817impl Dbgdscrint {
5818 pub const MOE_SHIFT: u32 = 2;
5820 pub const MOE_MASK: u32 = 0b1111;
5822 pub const UDCCDIS_SHIFT: u32 = 12;
5824 pub const MDBGEN_SHIFT: u32 = 15;
5826 pub const SPIDDIS_SHIFT: u32 = 16;
5828 pub const SPNIDDIS_SHIFT: u32 = 17;
5830 pub const NS_SHIFT: u32 = 18;
5832 pub const TXFULL_SHIFT: u32 = 29;
5834 pub const RXFULL_SHIFT: u32 = 30;
5836
5837 pub const fn moe(self) -> u8 {
5839 ((self.bits() >> Self::MOE_SHIFT) & 0b1111) as u8
5840 }
5841
5842 pub const fn set_moe(&mut self, value: u8) {
5844 let offset = Self::MOE_SHIFT;
5845 assert!(value & (Self::MOE_MASK as u8) == value);
5846 *self = Self::from_bits_retain(
5847 (self.bits() & !(Self::MOE_MASK << offset)) | ((value as u32) << offset),
5848 );
5849 }
5850
5851 pub const fn with_moe(mut self, value: u8) -> Self {
5853 self.set_moe(value);
5854 self
5855 }
5856}
5857
5858bitflags! {
5859 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5861 #[repr(transparent)]
5862 pub struct Dbgdtrrxext: u32 {
5863 }
5864}
5865
5866impl Dbgdtrrxext {
5867 pub const DTRRX_SHIFT: u32 = 0;
5869 pub const DTRRX_MASK: u32 = 0b11111111111111111111111111111111;
5871
5872 pub const fn dtrrx(self) -> u32 {
5874 ((self.bits() >> Self::DTRRX_SHIFT) & 0b11111111111111111111111111111111) as u32
5875 }
5876
5877 pub const fn set_dtrrx(&mut self, value: u32) {
5879 let offset = Self::DTRRX_SHIFT;
5880 assert!(value & (Self::DTRRX_MASK as u32) == value);
5881 *self = Self::from_bits_retain(
5882 (self.bits() & !(Self::DTRRX_MASK << offset)) | ((value as u32) << offset),
5883 );
5884 }
5885
5886 pub const fn with_dtrrx(mut self, value: u32) -> Self {
5888 self.set_dtrrx(value);
5889 self
5890 }
5891}
5892
5893bitflags! {
5894 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5896 #[repr(transparent)]
5897 pub struct Dbgdtrrxint: u32 {
5898 }
5899}
5900
5901impl Dbgdtrrxint {
5902 pub const DTRRX_SHIFT: u32 = 0;
5904 pub const DTRRX_MASK: u32 = 0b11111111111111111111111111111111;
5906
5907 pub const fn dtrrx(self) -> u32 {
5909 ((self.bits() >> Self::DTRRX_SHIFT) & 0b11111111111111111111111111111111) as u32
5910 }
5911
5912 pub const fn set_dtrrx(&mut self, value: u32) {
5914 let offset = Self::DTRRX_SHIFT;
5915 assert!(value & (Self::DTRRX_MASK as u32) == value);
5916 *self = Self::from_bits_retain(
5917 (self.bits() & !(Self::DTRRX_MASK << offset)) | ((value as u32) << offset),
5918 );
5919 }
5920
5921 pub const fn with_dtrrx(mut self, value: u32) -> Self {
5923 self.set_dtrrx(value);
5924 self
5925 }
5926}
5927
5928bitflags! {
5929 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5931 #[repr(transparent)]
5932 pub struct Dbgdtrtxext: u32 {
5933 }
5934}
5935
5936impl Dbgdtrtxext {
5937 pub const DTRTX_SHIFT: u32 = 0;
5939 pub const DTRTX_MASK: u32 = 0b11111111111111111111111111111111;
5941
5942 pub const fn dtrtx(self) -> u32 {
5944 ((self.bits() >> Self::DTRTX_SHIFT) & 0b11111111111111111111111111111111) as u32
5945 }
5946
5947 pub const fn set_dtrtx(&mut self, value: u32) {
5949 let offset = Self::DTRTX_SHIFT;
5950 assert!(value & (Self::DTRTX_MASK as u32) == value);
5951 *self = Self::from_bits_retain(
5952 (self.bits() & !(Self::DTRTX_MASK << offset)) | ((value as u32) << offset),
5953 );
5954 }
5955
5956 pub const fn with_dtrtx(mut self, value: u32) -> Self {
5958 self.set_dtrtx(value);
5959 self
5960 }
5961}
5962
5963bitflags! {
5964 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
5966 #[repr(transparent)]
5967 pub struct Dbgdtrtxint: u32 {
5968 }
5969}
5970
5971impl Dbgdtrtxint {
5972 pub const DTRTX_SHIFT: u32 = 0;
5974 pub const DTRTX_MASK: u32 = 0b11111111111111111111111111111111;
5976
5977 pub const fn dtrtx(self) -> u32 {
5979 ((self.bits() >> Self::DTRTX_SHIFT) & 0b11111111111111111111111111111111) as u32
5980 }
5981
5982 pub const fn set_dtrtx(&mut self, value: u32) {
5984 let offset = Self::DTRTX_SHIFT;
5985 assert!(value & (Self::DTRTX_MASK as u32) == value);
5986 *self = Self::from_bits_retain(
5987 (self.bits() & !(Self::DTRTX_MASK << offset)) | ((value as u32) << offset),
5988 );
5989 }
5990
5991 pub const fn with_dtrtx(mut self, value: u32) -> Self {
5993 self.set_dtrtx(value);
5994 self
5995 }
5996}
5997
5998bitflags! {
5999 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6001 #[repr(transparent)]
6002 pub struct Dbgosdlr: u32 {
6003 const DLK = 1 << 0;
6005 }
6006}
6007
6008impl Dbgosdlr {
6009 pub const DLK_SHIFT: u32 = 0;
6011}
6012
6013bitflags! {
6014 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6016 #[repr(transparent)]
6017 pub struct Dbgoseccr: u32 {
6018 }
6019}
6020
6021impl Dbgoseccr {
6022 pub const EDECCR_SHIFT: u32 = 0;
6024 pub const EDECCR_MASK: u32 = 0b11111111111111111111111111111111;
6026
6027 pub const fn edeccr(self) -> u32 {
6029 ((self.bits() >> Self::EDECCR_SHIFT) & 0b11111111111111111111111111111111) as u32
6030 }
6031
6032 pub const fn set_edeccr(&mut self, value: u32) {
6034 let offset = Self::EDECCR_SHIFT;
6035 assert!(value & (Self::EDECCR_MASK as u32) == value);
6036 *self = Self::from_bits_retain(
6037 (self.bits() & !(Self::EDECCR_MASK << offset)) | ((value as u32) << offset),
6038 );
6039 }
6040
6041 pub const fn with_edeccr(mut self, value: u32) -> Self {
6043 self.set_edeccr(value);
6044 self
6045 }
6046}
6047
6048bitflags! {
6049 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6051 #[repr(transparent)]
6052 pub struct Dbgoslar: u32 {
6053 }
6054}
6055
6056impl Dbgoslar {
6057 pub const OSLA_SHIFT: u32 = 0;
6059 pub const OSLA_MASK: u32 = 0b11111111111111111111111111111111;
6061
6062 pub const fn osla(self) -> u32 {
6064 ((self.bits() >> Self::OSLA_SHIFT) & 0b11111111111111111111111111111111) as u32
6065 }
6066
6067 pub const fn set_osla(&mut self, value: u32) {
6069 let offset = Self::OSLA_SHIFT;
6070 assert!(value & (Self::OSLA_MASK as u32) == value);
6071 *self = Self::from_bits_retain(
6072 (self.bits() & !(Self::OSLA_MASK << offset)) | ((value as u32) << offset),
6073 );
6074 }
6075
6076 pub const fn with_osla(mut self, value: u32) -> Self {
6078 self.set_osla(value);
6079 self
6080 }
6081}
6082
6083bitflags! {
6084 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6086 #[repr(transparent)]
6087 pub struct Dbgoslsr: u32 {
6088 const OSLK = 1 << 1;
6090 const NTT = 1 << 2;
6092 }
6093}
6094
6095impl Dbgoslsr {
6096 pub const OSLK_SHIFT: u32 = 1;
6098 pub const NTT_SHIFT: u32 = 2;
6100}
6101
6102bitflags! {
6103 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6105 #[repr(transparent)]
6106 pub struct Dbgprcr: u32 {
6107 const CORENPDRQ = 1 << 0;
6109 }
6110}
6111
6112impl Dbgprcr {
6113 pub const CORENPDRQ_SHIFT: u32 = 0;
6115}
6116
6117bitflags! {
6118 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6120 #[repr(transparent)]
6121 pub struct Dbgvcr: u32 {
6122 const SU = 1 << 1;
6124 const U = 1 << 1;
6126 const S = 1 << 2;
6128 const SS = 1 << 2;
6130 const P = 1 << 3;
6132 const SP = 1 << 3;
6134 const D = 1 << 4;
6136 const SD = 1 << 4;
6138 const I = 1 << 6;
6140 const SI = 1 << 6;
6142 const F = 1 << 7;
6144 const SF = 1 << 7;
6146 const MS = 1 << 10;
6148 const MP = 1 << 11;
6150 const MD = 1 << 12;
6152 const MI = 1 << 14;
6154 const MF = 1 << 15;
6156 const NSU = 1 << 25;
6158 const NSS = 1 << 26;
6160 const NSP = 1 << 27;
6162 const NSD = 1 << 28;
6164 const NSI = 1 << 30;
6166 const NSF = 1 << 31;
6168 }
6169}
6170
6171impl Dbgvcr {
6172 pub const SU_SHIFT: u32 = 1;
6174 pub const U_SHIFT: u32 = 1;
6176 pub const S_SHIFT: u32 = 2;
6178 pub const SS_SHIFT: u32 = 2;
6180 pub const P_SHIFT: u32 = 3;
6182 pub const SP_SHIFT: u32 = 3;
6184 pub const D_SHIFT: u32 = 4;
6186 pub const SD_SHIFT: u32 = 4;
6188 pub const I_SHIFT: u32 = 6;
6190 pub const SI_SHIFT: u32 = 6;
6192 pub const F_SHIFT: u32 = 7;
6194 pub const SF_SHIFT: u32 = 7;
6196 pub const MS_SHIFT: u32 = 10;
6198 pub const MP_SHIFT: u32 = 11;
6200 pub const MD_SHIFT: u32 = 12;
6202 pub const MI_SHIFT: u32 = 14;
6204 pub const MF_SHIFT: u32 = 15;
6206 pub const NSU_SHIFT: u32 = 25;
6208 pub const NSS_SHIFT: u32 = 26;
6210 pub const NSP_SHIFT: u32 = 27;
6212 pub const NSD_SHIFT: u32 = 28;
6214 pub const NSI_SHIFT: u32 = 30;
6216 pub const NSF_SHIFT: u32 = 31;
6218}
6219
6220bitflags! {
6221 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6223 #[repr(transparent)]
6224 pub struct Dfar: u32 {
6225 }
6226}
6227
6228impl Dfar {
6229 pub const VA_SHIFT: u32 = 0;
6231 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
6233
6234 pub const fn va(self) -> u32 {
6236 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
6237 }
6238
6239 pub const fn set_va(&mut self, value: u32) {
6241 let offset = Self::VA_SHIFT;
6242 assert!(value & (Self::VA_MASK as u32) == value);
6243 *self = Self::from_bits_retain(
6244 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
6245 );
6246 }
6247
6248 pub const fn with_va(mut self, value: u32) -> Self {
6250 self.set_va(value);
6251 self
6252 }
6253}
6254
6255bitflags! {
6256 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6258 #[repr(transparent)]
6259 pub struct Dfsr: u32 {
6260 const LPAE = 1 << 9;
6262 const WNR = 1 << 11;
6264 const EXT = 1 << 12;
6266 const CM = 1 << 13;
6268 const FNV = 1 << 16;
6270 }
6271}
6272
6273impl Dfsr {
6274 pub const STATUS_SHIFT: u32 = 0;
6276 pub const STATUS_MASK: u32 = 0b111111;
6278 pub const DOMAIN_SHIFT: u32 = 4;
6280 pub const DOMAIN_MASK: u32 = 0b1111;
6282 pub const LPAE_SHIFT: u32 = 9;
6284 pub const WNR_SHIFT: u32 = 11;
6286 pub const EXT_SHIFT: u32 = 12;
6288 pub const CM_SHIFT: u32 = 13;
6290 pub const AET_SHIFT: u32 = 14;
6292 pub const AET_MASK: u32 = 0b11;
6294 pub const FNV_SHIFT: u32 = 16;
6296
6297 pub const fn status(self) -> u8 {
6299 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
6300 }
6301
6302 pub const fn set_status(&mut self, value: u8) {
6304 let offset = Self::STATUS_SHIFT;
6305 assert!(value & (Self::STATUS_MASK as u8) == value);
6306 *self = Self::from_bits_retain(
6307 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
6308 );
6309 }
6310
6311 pub const fn with_status(mut self, value: u8) -> Self {
6313 self.set_status(value);
6314 self
6315 }
6316
6317 pub const fn domain(self) -> u8 {
6319 ((self.bits() >> Self::DOMAIN_SHIFT) & 0b1111) as u8
6320 }
6321
6322 pub const fn set_domain(&mut self, value: u8) {
6324 let offset = Self::DOMAIN_SHIFT;
6325 assert!(value & (Self::DOMAIN_MASK as u8) == value);
6326 *self = Self::from_bits_retain(
6327 (self.bits() & !(Self::DOMAIN_MASK << offset)) | ((value as u32) << offset),
6328 );
6329 }
6330
6331 pub const fn with_domain(mut self, value: u8) -> Self {
6333 self.set_domain(value);
6334 self
6335 }
6336
6337 pub const fn aet(self) -> u8 {
6339 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
6340 }
6341
6342 pub const fn set_aet(&mut self, value: u8) {
6344 let offset = Self::AET_SHIFT;
6345 assert!(value & (Self::AET_MASK as u8) == value);
6346 *self = Self::from_bits_retain(
6347 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u32) << offset),
6348 );
6349 }
6350
6351 pub const fn with_aet(mut self, value: u8) -> Self {
6353 self.set_aet(value);
6354 self
6355 }
6356}
6357
6358bitflags! {
6359 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6361 #[repr(transparent)]
6362 pub struct Disr: u32 {
6363 const EA = 1 << 9;
6365 const LPAE = 1 << 9;
6367 const EXT = 1 << 12;
6369 const A = 1 << 31;
6371 }
6372}
6373
6374impl Disr {
6375 pub const DFSC_SHIFT: u32 = 0;
6377 pub const DFSC_MASK: u32 = 0b111111;
6379 pub const STATUS_SHIFT: u32 = 0;
6381 pub const STATUS_MASK: u32 = 0b111111;
6383 pub const EA_SHIFT: u32 = 9;
6385 pub const LPAE_SHIFT: u32 = 9;
6387 pub const EXT_SHIFT: u32 = 12;
6389 pub const A_SHIFT: u32 = 31;
6391
6392 pub const fn dfsc(self) -> u8 {
6394 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
6395 }
6396
6397 pub const fn set_dfsc(&mut self, value: u8) {
6399 let offset = Self::DFSC_SHIFT;
6400 assert!(value & (Self::DFSC_MASK as u8) == value);
6401 *self = Self::from_bits_retain(
6402 (self.bits() & !(Self::DFSC_MASK << offset)) | ((value as u32) << offset),
6403 );
6404 }
6405
6406 pub const fn with_dfsc(mut self, value: u8) -> Self {
6408 self.set_dfsc(value);
6409 self
6410 }
6411
6412 pub const fn status(self) -> u8 {
6414 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
6415 }
6416
6417 pub const fn set_status(&mut self, value: u8) {
6419 let offset = Self::STATUS_SHIFT;
6420 assert!(value & (Self::STATUS_MASK as u8) == value);
6421 *self = Self::from_bits_retain(
6422 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
6423 );
6424 }
6425
6426 pub const fn with_status(mut self, value: u8) -> Self {
6428 self.set_status(value);
6429 self
6430 }
6431}
6432
6433#[cfg(feature = "el1")]
6434bitflags! {
6435 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6437 #[repr(transparent)]
6438 pub struct DisrEl1: u64 {
6439 const WNR = 1 << 6;
6441 const WNRV = 1 << 7;
6443 const EA = 1 << 9;
6445 const IDS = 1 << 24;
6447 const A = 1 << 31;
6449 }
6450}
6451
6452#[cfg(feature = "el1")]
6453impl DisrEl1 {
6454 pub const DFSC_SHIFT: u32 = 0;
6456 pub const DFSC_MASK: u64 = 0b111111;
6458 pub const WNR_SHIFT: u32 = 6;
6460 pub const WNRV_SHIFT: u32 = 7;
6462 pub const EA_SHIFT: u32 = 9;
6464 pub const AET_SHIFT: u32 = 10;
6466 pub const AET_MASK: u64 = 0b111;
6468 pub const WU_SHIFT: u32 = 16;
6470 pub const WU_MASK: u64 = 0b11;
6472 pub const IDS_SHIFT: u32 = 24;
6474 pub const A_SHIFT: u32 = 31;
6476
6477 pub const fn dfsc(self) -> u8 {
6479 ((self.bits() >> Self::DFSC_SHIFT) & 0b111111) as u8
6480 }
6481
6482 pub const fn set_dfsc(&mut self, value: u8) {
6484 let offset = Self::DFSC_SHIFT;
6485 assert!(value & (Self::DFSC_MASK as u8) == value);
6486 *self = Self::from_bits_retain(
6487 (self.bits() & !(Self::DFSC_MASK << offset)) | ((value as u64) << offset),
6488 );
6489 }
6490
6491 pub const fn with_dfsc(mut self, value: u8) -> Self {
6493 self.set_dfsc(value);
6494 self
6495 }
6496
6497 pub const fn aet(self) -> u8 {
6499 ((self.bits() >> Self::AET_SHIFT) & 0b111) as u8
6500 }
6501
6502 pub const fn set_aet(&mut self, value: u8) {
6504 let offset = Self::AET_SHIFT;
6505 assert!(value & (Self::AET_MASK as u8) == value);
6506 *self = Self::from_bits_retain(
6507 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u64) << offset),
6508 );
6509 }
6510
6511 pub const fn with_aet(mut self, value: u8) -> Self {
6513 self.set_aet(value);
6514 self
6515 }
6516
6517 pub const fn wu(self) -> u8 {
6519 ((self.bits() >> Self::WU_SHIFT) & 0b11) as u8
6520 }
6521
6522 pub const fn set_wu(&mut self, value: u8) {
6524 let offset = Self::WU_SHIFT;
6525 assert!(value & (Self::WU_MASK as u8) == value);
6526 *self = Self::from_bits_retain(
6527 (self.bits() & !(Self::WU_MASK << offset)) | ((value as u64) << offset),
6528 );
6529 }
6530
6531 pub const fn with_wu(mut self, value: u8) -> Self {
6533 self.set_wu(value);
6534 self
6535 }
6536}
6537
6538bitflags! {
6539 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6543 #[repr(transparent)]
6544 pub struct Dit: u64 {
6545 const DIT = 1 << 24;
6547 }
6548}
6549
6550impl Dit {
6551 pub const DIT_SHIFT: u32 = 24;
6553}
6554
6555bitflags! {
6556 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6558 #[repr(transparent)]
6559 pub struct Dlr: u32 {
6560 }
6561}
6562
6563impl Dlr {
6564 pub const ADDR_SHIFT: u32 = 0;
6566 pub const ADDR_MASK: u32 = 0b11111111111111111111111111111111;
6568
6569 pub const fn addr(self) -> u32 {
6571 ((self.bits() >> Self::ADDR_SHIFT) & 0b11111111111111111111111111111111) as u32
6572 }
6573
6574 pub const fn set_addr(&mut self, value: u32) {
6576 let offset = Self::ADDR_SHIFT;
6577 assert!(value & (Self::ADDR_MASK as u32) == value);
6578 *self = Self::from_bits_retain(
6579 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u32) << offset),
6580 );
6581 }
6582
6583 pub const fn with_addr(mut self, value: u32) -> Self {
6585 self.set_addr(value);
6586 self
6587 }
6588}
6589
6590bitflags! {
6591 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6593 #[repr(transparent)]
6594 pub struct Dspsr: u32 {
6595 const T = 1 << 5;
6597 const F = 1 << 6;
6599 const I = 1 << 7;
6601 const A = 1 << 8;
6603 const E = 1 << 9;
6605 const IL = 1 << 20;
6607 const SS = 1 << 21;
6609 const PAN = 1 << 22;
6611 const SSBS = 1 << 23;
6613 const DIT = 1 << 24;
6615 const Q = 1 << 27;
6617 const V = 1 << 28;
6619 const C = 1 << 29;
6621 const Z = 1 << 30;
6623 const N = 1 << 31;
6625 }
6626}
6627
6628impl Dspsr {
6629 pub const M_4_0_SHIFT: u32 = 0;
6631 pub const M_4_0_MASK: u32 = 0b11111;
6633 pub const T_SHIFT: u32 = 5;
6635 pub const F_SHIFT: u32 = 6;
6637 pub const I_SHIFT: u32 = 7;
6639 pub const A_SHIFT: u32 = 8;
6641 pub const E_SHIFT: u32 = 9;
6643 pub const GE_SHIFT: u32 = 16;
6645 pub const GE_MASK: u32 = 0b1111;
6647 pub const IL_SHIFT: u32 = 20;
6649 pub const SS_SHIFT: u32 = 21;
6651 pub const PAN_SHIFT: u32 = 22;
6653 pub const SSBS_SHIFT: u32 = 23;
6655 pub const DIT_SHIFT: u32 = 24;
6657 pub const Q_SHIFT: u32 = 27;
6659 pub const V_SHIFT: u32 = 28;
6661 pub const C_SHIFT: u32 = 29;
6663 pub const Z_SHIFT: u32 = 30;
6665 pub const N_SHIFT: u32 = 31;
6667
6668 pub const fn m_4_0(self) -> u8 {
6670 ((self.bits() >> Self::M_4_0_SHIFT) & 0b11111) as u8
6671 }
6672
6673 pub const fn set_m_4_0(&mut self, value: u8) {
6675 let offset = Self::M_4_0_SHIFT;
6676 assert!(value & (Self::M_4_0_MASK as u8) == value);
6677 *self = Self::from_bits_retain(
6678 (self.bits() & !(Self::M_4_0_MASK << offset)) | ((value as u32) << offset),
6679 );
6680 }
6681
6682 pub const fn with_m_4_0(mut self, value: u8) -> Self {
6684 self.set_m_4_0(value);
6685 self
6686 }
6687
6688 pub const fn ge(self) -> u8 {
6690 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
6691 }
6692
6693 pub const fn set_ge(&mut self, value: u8) {
6695 let offset = Self::GE_SHIFT;
6696 assert!(value & (Self::GE_MASK as u8) == value);
6697 *self = Self::from_bits_retain(
6698 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u32) << offset),
6699 );
6700 }
6701
6702 pub const fn with_ge(mut self, value: u8) -> Self {
6704 self.set_ge(value);
6705 self
6706 }
6707}
6708
6709bitflags! {
6710 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6712 #[repr(transparent)]
6713 pub struct Dspsr2: u32 {
6714 const PPEND = 1 << 1;
6716 const UINJ = 1 << 4;
6718 }
6719}
6720
6721impl Dspsr2 {
6722 pub const PPEND_SHIFT: u32 = 1;
6724 pub const UINJ_SHIFT: u32 = 4;
6726}
6727
6728#[cfg(feature = "el1")]
6729bitflags! {
6730 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6732 #[repr(transparent)]
6733 pub struct ElrEl1: u64 {
6734 }
6735}
6736
6737#[cfg(feature = "el1")]
6738impl ElrEl1 {
6739 pub const ADDR_SHIFT: u32 = 0;
6741 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
6743
6744 pub const fn addr(self) -> u64 {
6746 ((self.bits() >> Self::ADDR_SHIFT)
6747 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
6748 }
6749
6750 pub const fn set_addr(&mut self, value: u64) {
6752 let offset = Self::ADDR_SHIFT;
6753 assert!(value & (Self::ADDR_MASK as u64) == value);
6754 *self = Self::from_bits_retain(
6755 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u64) << offset),
6756 );
6757 }
6758
6759 pub const fn with_addr(mut self, value: u64) -> Self {
6761 self.set_addr(value);
6762 self
6763 }
6764}
6765
6766#[cfg(feature = "el2")]
6767bitflags! {
6768 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6770 #[repr(transparent)]
6771 pub struct ElrEl2: u64 {
6772 }
6773}
6774
6775#[cfg(feature = "el2")]
6776impl ElrEl2 {
6777 pub const ADDR_SHIFT: u32 = 0;
6779 pub const ADDR_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
6781
6782 pub const fn addr(self) -> u64 {
6784 ((self.bits() >> Self::ADDR_SHIFT)
6785 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
6786 }
6787
6788 pub const fn set_addr(&mut self, value: u64) {
6790 let offset = Self::ADDR_SHIFT;
6791 assert!(value & (Self::ADDR_MASK as u64) == value);
6792 *self = Self::from_bits_retain(
6793 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u64) << offset),
6794 );
6795 }
6796
6797 pub const fn with_addr(mut self, value: u64) -> Self {
6799 self.set_addr(value);
6800 self
6801 }
6802}
6803
6804#[cfg(feature = "el2")]
6805bitflags! {
6806 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6808 #[repr(transparent)]
6809 pub struct ElrHyp: u32 {
6810 }
6811}
6812
6813#[cfg(feature = "el2")]
6814impl ElrHyp {
6815 pub const ADDR_SHIFT: u32 = 0;
6817 pub const ADDR_MASK: u32 = 0b11111111111111111111111111111111;
6819
6820 pub const fn addr(self) -> u32 {
6822 ((self.bits() >> Self::ADDR_SHIFT) & 0b11111111111111111111111111111111) as u32
6823 }
6824
6825 pub const fn set_addr(&mut self, value: u32) {
6827 let offset = Self::ADDR_SHIFT;
6828 assert!(value & (Self::ADDR_MASK as u32) == value);
6829 *self = Self::from_bits_retain(
6830 (self.bits() & !(Self::ADDR_MASK << offset)) | ((value as u32) << offset),
6831 );
6832 }
6833
6834 pub const fn with_addr(mut self, value: u32) -> Self {
6836 self.set_addr(value);
6837 self
6838 }
6839}
6840
6841bitflags! {
6842 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6844 #[repr(transparent)]
6845 pub struct Erridr: u32 {
6846 }
6847}
6848
6849impl Erridr {
6850 pub const NUM_SHIFT: u32 = 0;
6852 pub const NUM_MASK: u32 = 0b1111111111111111;
6854
6855 pub const fn num(self) -> u16 {
6857 ((self.bits() >> Self::NUM_SHIFT) & 0b1111111111111111) as u16
6858 }
6859
6860 pub const fn set_num(&mut self, value: u16) {
6862 let offset = Self::NUM_SHIFT;
6863 assert!(value & (Self::NUM_MASK as u16) == value);
6864 *self = Self::from_bits_retain(
6865 (self.bits() & !(Self::NUM_MASK << offset)) | ((value as u32) << offset),
6866 );
6867 }
6868
6869 pub const fn with_num(mut self, value: u16) -> Self {
6871 self.set_num(value);
6872 self
6873 }
6874}
6875
6876bitflags! {
6877 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6879 #[repr(transparent)]
6880 pub struct Errselr: u32 {
6881 }
6882}
6883
6884impl Errselr {
6885 pub const SEL_SHIFT: u32 = 0;
6887 pub const SEL_MASK: u32 = 0b1111111111111111;
6889
6890 pub const fn sel(self) -> u16 {
6892 ((self.bits() >> Self::SEL_SHIFT) & 0b1111111111111111) as u16
6893 }
6894
6895 pub const fn set_sel(&mut self, value: u16) {
6897 let offset = Self::SEL_SHIFT;
6898 assert!(value & (Self::SEL_MASK as u16) == value);
6899 *self = Self::from_bits_retain(
6900 (self.bits() & !(Self::SEL_MASK << offset)) | ((value as u32) << offset),
6901 );
6902 }
6903
6904 pub const fn with_sel(mut self, value: u16) -> Self {
6906 self.set_sel(value);
6907 self
6908 }
6909}
6910
6911bitflags! {
6912 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6914 #[repr(transparent)]
6915 pub struct Erxaddr: u32 {
6916 }
6917}
6918
6919impl Erxaddr {
6920 pub const ERRNADDRLO_SHIFT: u32 = 0;
6922 pub const ERRNADDRLO_MASK: u32 = 0b11111111111111111111111111111111;
6924
6925 pub const fn errnaddrlo(self) -> u32 {
6927 ((self.bits() >> Self::ERRNADDRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
6928 }
6929
6930 pub const fn set_errnaddrlo(&mut self, value: u32) {
6932 let offset = Self::ERRNADDRLO_SHIFT;
6933 assert!(value & (Self::ERRNADDRLO_MASK as u32) == value);
6934 *self = Self::from_bits_retain(
6935 (self.bits() & !(Self::ERRNADDRLO_MASK << offset)) | ((value as u32) << offset),
6936 );
6937 }
6938
6939 pub const fn with_errnaddrlo(mut self, value: u32) -> Self {
6941 self.set_errnaddrlo(value);
6942 self
6943 }
6944}
6945
6946bitflags! {
6947 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6949 #[repr(transparent)]
6950 pub struct Erxaddr2: u32 {
6951 }
6952}
6953
6954impl Erxaddr2 {
6955 pub const ERRNADDRHI_SHIFT: u32 = 0;
6957 pub const ERRNADDRHI_MASK: u32 = 0b11111111111111111111111111111111;
6959
6960 pub const fn errnaddrhi(self) -> u32 {
6962 ((self.bits() >> Self::ERRNADDRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
6963 }
6964
6965 pub const fn set_errnaddrhi(&mut self, value: u32) {
6967 let offset = Self::ERRNADDRHI_SHIFT;
6968 assert!(value & (Self::ERRNADDRHI_MASK as u32) == value);
6969 *self = Self::from_bits_retain(
6970 (self.bits() & !(Self::ERRNADDRHI_MASK << offset)) | ((value as u32) << offset),
6971 );
6972 }
6973
6974 pub const fn with_errnaddrhi(mut self, value: u32) -> Self {
6976 self.set_errnaddrhi(value);
6977 self
6978 }
6979}
6980
6981bitflags! {
6982 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
6984 #[repr(transparent)]
6985 pub struct Erxctlr: u32 {
6986 }
6987}
6988
6989impl Erxctlr {
6990 pub const ERRNCTLRLO_SHIFT: u32 = 0;
6992 pub const ERRNCTLRLO_MASK: u32 = 0b11111111111111111111111111111111;
6994
6995 pub const fn errnctlrlo(self) -> u32 {
6997 ((self.bits() >> Self::ERRNCTLRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
6998 }
6999
7000 pub const fn set_errnctlrlo(&mut self, value: u32) {
7002 let offset = Self::ERRNCTLRLO_SHIFT;
7003 assert!(value & (Self::ERRNCTLRLO_MASK as u32) == value);
7004 *self = Self::from_bits_retain(
7005 (self.bits() & !(Self::ERRNCTLRLO_MASK << offset)) | ((value as u32) << offset),
7006 );
7007 }
7008
7009 pub const fn with_errnctlrlo(mut self, value: u32) -> Self {
7011 self.set_errnctlrlo(value);
7012 self
7013 }
7014}
7015
7016bitflags! {
7017 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7019 #[repr(transparent)]
7020 pub struct Erxctlr2: u32 {
7021 }
7022}
7023
7024impl Erxctlr2 {
7025 pub const ERRNCTLRHI_SHIFT: u32 = 0;
7027 pub const ERRNCTLRHI_MASK: u32 = 0b11111111111111111111111111111111;
7029
7030 pub const fn errnctlrhi(self) -> u32 {
7032 ((self.bits() >> Self::ERRNCTLRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
7033 }
7034
7035 pub const fn set_errnctlrhi(&mut self, value: u32) {
7037 let offset = Self::ERRNCTLRHI_SHIFT;
7038 assert!(value & (Self::ERRNCTLRHI_MASK as u32) == value);
7039 *self = Self::from_bits_retain(
7040 (self.bits() & !(Self::ERRNCTLRHI_MASK << offset)) | ((value as u32) << offset),
7041 );
7042 }
7043
7044 pub const fn with_errnctlrhi(mut self, value: u32) -> Self {
7046 self.set_errnctlrhi(value);
7047 self
7048 }
7049}
7050
7051bitflags! {
7052 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7054 #[repr(transparent)]
7055 pub struct Erxfr: u32 {
7056 }
7057}
7058
7059impl Erxfr {
7060 pub const ERRNFRLO_SHIFT: u32 = 0;
7062 pub const ERRNFRLO_MASK: u32 = 0b11111111111111111111111111111111;
7064
7065 pub const fn errnfrlo(self) -> u32 {
7067 ((self.bits() >> Self::ERRNFRLO_SHIFT) & 0b11111111111111111111111111111111) as u32
7068 }
7069
7070 pub const fn set_errnfrlo(&mut self, value: u32) {
7072 let offset = Self::ERRNFRLO_SHIFT;
7073 assert!(value & (Self::ERRNFRLO_MASK as u32) == value);
7074 *self = Self::from_bits_retain(
7075 (self.bits() & !(Self::ERRNFRLO_MASK << offset)) | ((value as u32) << offset),
7076 );
7077 }
7078
7079 pub const fn with_errnfrlo(mut self, value: u32) -> Self {
7081 self.set_errnfrlo(value);
7082 self
7083 }
7084}
7085
7086bitflags! {
7087 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7089 #[repr(transparent)]
7090 pub struct Erxfr2: u32 {
7091 }
7092}
7093
7094impl Erxfr2 {
7095 pub const ERRNFRHI_SHIFT: u32 = 0;
7097 pub const ERRNFRHI_MASK: u32 = 0b11111111111111111111111111111111;
7099
7100 pub const fn errnfrhi(self) -> u32 {
7102 ((self.bits() >> Self::ERRNFRHI_SHIFT) & 0b11111111111111111111111111111111) as u32
7103 }
7104
7105 pub const fn set_errnfrhi(&mut self, value: u32) {
7107 let offset = Self::ERRNFRHI_SHIFT;
7108 assert!(value & (Self::ERRNFRHI_MASK as u32) == value);
7109 *self = Self::from_bits_retain(
7110 (self.bits() & !(Self::ERRNFRHI_MASK << offset)) | ((value as u32) << offset),
7111 );
7112 }
7113
7114 pub const fn with_errnfrhi(mut self, value: u32) -> Self {
7116 self.set_errnfrhi(value);
7117 self
7118 }
7119}
7120
7121bitflags! {
7122 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7124 #[repr(transparent)]
7125 pub struct Erxmisc0: u32 {
7126 }
7127}
7128
7129impl Erxmisc0 {
7130 pub const ERRNMISC0LO_SHIFT: u32 = 0;
7132 pub const ERRNMISC0LO_MASK: u32 = 0b11111111111111111111111111111111;
7134
7135 pub const fn errnmisc0lo(self) -> u32 {
7137 ((self.bits() >> Self::ERRNMISC0LO_SHIFT) & 0b11111111111111111111111111111111) as u32
7138 }
7139
7140 pub const fn set_errnmisc0lo(&mut self, value: u32) {
7142 let offset = Self::ERRNMISC0LO_SHIFT;
7143 assert!(value & (Self::ERRNMISC0LO_MASK as u32) == value);
7144 *self = Self::from_bits_retain(
7145 (self.bits() & !(Self::ERRNMISC0LO_MASK << offset)) | ((value as u32) << offset),
7146 );
7147 }
7148
7149 pub const fn with_errnmisc0lo(mut self, value: u32) -> Self {
7151 self.set_errnmisc0lo(value);
7152 self
7153 }
7154}
7155
7156bitflags! {
7157 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7159 #[repr(transparent)]
7160 pub struct Erxmisc1: u32 {
7161 }
7162}
7163
7164impl Erxmisc1 {
7165 pub const ERRNMISC0HI_SHIFT: u32 = 0;
7167 pub const ERRNMISC0HI_MASK: u32 = 0b11111111111111111111111111111111;
7169
7170 pub const fn errnmisc0hi(self) -> u32 {
7172 ((self.bits() >> Self::ERRNMISC0HI_SHIFT) & 0b11111111111111111111111111111111) as u32
7173 }
7174
7175 pub const fn set_errnmisc0hi(&mut self, value: u32) {
7177 let offset = Self::ERRNMISC0HI_SHIFT;
7178 assert!(value & (Self::ERRNMISC0HI_MASK as u32) == value);
7179 *self = Self::from_bits_retain(
7180 (self.bits() & !(Self::ERRNMISC0HI_MASK << offset)) | ((value as u32) << offset),
7181 );
7182 }
7183
7184 pub const fn with_errnmisc0hi(mut self, value: u32) -> Self {
7186 self.set_errnmisc0hi(value);
7187 self
7188 }
7189}
7190
7191bitflags! {
7192 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7194 #[repr(transparent)]
7195 pub struct Erxmisc2: u32 {
7196 }
7197}
7198
7199impl Erxmisc2 {
7200 pub const ERRNMISC1LO_SHIFT: u32 = 0;
7202 pub const ERRNMISC1LO_MASK: u32 = 0b11111111111111111111111111111111;
7204
7205 pub const fn errnmisc1lo(self) -> u32 {
7207 ((self.bits() >> Self::ERRNMISC1LO_SHIFT) & 0b11111111111111111111111111111111) as u32
7208 }
7209
7210 pub const fn set_errnmisc1lo(&mut self, value: u32) {
7212 let offset = Self::ERRNMISC1LO_SHIFT;
7213 assert!(value & (Self::ERRNMISC1LO_MASK as u32) == value);
7214 *self = Self::from_bits_retain(
7215 (self.bits() & !(Self::ERRNMISC1LO_MASK << offset)) | ((value as u32) << offset),
7216 );
7217 }
7218
7219 pub const fn with_errnmisc1lo(mut self, value: u32) -> Self {
7221 self.set_errnmisc1lo(value);
7222 self
7223 }
7224}
7225
7226bitflags! {
7227 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7229 #[repr(transparent)]
7230 pub struct Erxmisc3: u32 {
7231 }
7232}
7233
7234impl Erxmisc3 {
7235 pub const ERRNMISC1HI_SHIFT: u32 = 0;
7237 pub const ERRNMISC1HI_MASK: u32 = 0b11111111111111111111111111111111;
7239
7240 pub const fn errnmisc1hi(self) -> u32 {
7242 ((self.bits() >> Self::ERRNMISC1HI_SHIFT) & 0b11111111111111111111111111111111) as u32
7243 }
7244
7245 pub const fn set_errnmisc1hi(&mut self, value: u32) {
7247 let offset = Self::ERRNMISC1HI_SHIFT;
7248 assert!(value & (Self::ERRNMISC1HI_MASK as u32) == value);
7249 *self = Self::from_bits_retain(
7250 (self.bits() & !(Self::ERRNMISC1HI_MASK << offset)) | ((value as u32) << offset),
7251 );
7252 }
7253
7254 pub const fn with_errnmisc1hi(mut self, value: u32) -> Self {
7256 self.set_errnmisc1hi(value);
7257 self
7258 }
7259}
7260
7261bitflags! {
7262 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7264 #[repr(transparent)]
7265 pub struct Erxmisc4: u32 {
7266 }
7267}
7268
7269impl Erxmisc4 {
7270 pub const ERRNMISC2LO_SHIFT: u32 = 0;
7272 pub const ERRNMISC2LO_MASK: u32 = 0b11111111111111111111111111111111;
7274
7275 pub const fn errnmisc2lo(self) -> u32 {
7277 ((self.bits() >> Self::ERRNMISC2LO_SHIFT) & 0b11111111111111111111111111111111) as u32
7278 }
7279
7280 pub const fn set_errnmisc2lo(&mut self, value: u32) {
7282 let offset = Self::ERRNMISC2LO_SHIFT;
7283 assert!(value & (Self::ERRNMISC2LO_MASK as u32) == value);
7284 *self = Self::from_bits_retain(
7285 (self.bits() & !(Self::ERRNMISC2LO_MASK << offset)) | ((value as u32) << offset),
7286 );
7287 }
7288
7289 pub const fn with_errnmisc2lo(mut self, value: u32) -> Self {
7291 self.set_errnmisc2lo(value);
7292 self
7293 }
7294}
7295
7296bitflags! {
7297 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7299 #[repr(transparent)]
7300 pub struct Erxmisc5: u32 {
7301 }
7302}
7303
7304impl Erxmisc5 {
7305 pub const ERRNMISC2HI_SHIFT: u32 = 0;
7307 pub const ERRNMISC2HI_MASK: u32 = 0b11111111111111111111111111111111;
7309
7310 pub const fn errnmisc2hi(self) -> u32 {
7312 ((self.bits() >> Self::ERRNMISC2HI_SHIFT) & 0b11111111111111111111111111111111) as u32
7313 }
7314
7315 pub const fn set_errnmisc2hi(&mut self, value: u32) {
7317 let offset = Self::ERRNMISC2HI_SHIFT;
7318 assert!(value & (Self::ERRNMISC2HI_MASK as u32) == value);
7319 *self = Self::from_bits_retain(
7320 (self.bits() & !(Self::ERRNMISC2HI_MASK << offset)) | ((value as u32) << offset),
7321 );
7322 }
7323
7324 pub const fn with_errnmisc2hi(mut self, value: u32) -> Self {
7326 self.set_errnmisc2hi(value);
7327 self
7328 }
7329}
7330
7331bitflags! {
7332 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7334 #[repr(transparent)]
7335 pub struct Erxmisc6: u32 {
7336 }
7337}
7338
7339impl Erxmisc6 {
7340 pub const ERRNMISC3LO_SHIFT: u32 = 0;
7342 pub const ERRNMISC3LO_MASK: u32 = 0b11111111111111111111111111111111;
7344
7345 pub const fn errnmisc3lo(self) -> u32 {
7347 ((self.bits() >> Self::ERRNMISC3LO_SHIFT) & 0b11111111111111111111111111111111) as u32
7348 }
7349
7350 pub const fn set_errnmisc3lo(&mut self, value: u32) {
7352 let offset = Self::ERRNMISC3LO_SHIFT;
7353 assert!(value & (Self::ERRNMISC3LO_MASK as u32) == value);
7354 *self = Self::from_bits_retain(
7355 (self.bits() & !(Self::ERRNMISC3LO_MASK << offset)) | ((value as u32) << offset),
7356 );
7357 }
7358
7359 pub const fn with_errnmisc3lo(mut self, value: u32) -> Self {
7361 self.set_errnmisc3lo(value);
7362 self
7363 }
7364}
7365
7366bitflags! {
7367 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7369 #[repr(transparent)]
7370 pub struct Erxmisc7: u32 {
7371 }
7372}
7373
7374impl Erxmisc7 {
7375 pub const ERRNMISC3HI_SHIFT: u32 = 0;
7377 pub const ERRNMISC3HI_MASK: u32 = 0b11111111111111111111111111111111;
7379
7380 pub const fn errnmisc3hi(self) -> u32 {
7382 ((self.bits() >> Self::ERRNMISC3HI_SHIFT) & 0b11111111111111111111111111111111) as u32
7383 }
7384
7385 pub const fn set_errnmisc3hi(&mut self, value: u32) {
7387 let offset = Self::ERRNMISC3HI_SHIFT;
7388 assert!(value & (Self::ERRNMISC3HI_MASK as u32) == value);
7389 *self = Self::from_bits_retain(
7390 (self.bits() & !(Self::ERRNMISC3HI_MASK << offset)) | ((value as u32) << offset),
7391 );
7392 }
7393
7394 pub const fn with_errnmisc3hi(mut self, value: u32) -> Self {
7396 self.set_errnmisc3hi(value);
7397 self
7398 }
7399}
7400
7401bitflags! {
7402 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7404 #[repr(transparent)]
7405 pub struct Erxstatus: u32 {
7406 }
7407}
7408
7409impl Erxstatus {
7410 pub const ERRNSTATUSLO_SHIFT: u32 = 0;
7412 pub const ERRNSTATUSLO_MASK: u32 = 0b11111111111111111111111111111111;
7414
7415 pub const fn errnstatuslo(self) -> u32 {
7417 ((self.bits() >> Self::ERRNSTATUSLO_SHIFT) & 0b11111111111111111111111111111111) as u32
7418 }
7419
7420 pub const fn set_errnstatuslo(&mut self, value: u32) {
7422 let offset = Self::ERRNSTATUSLO_SHIFT;
7423 assert!(value & (Self::ERRNSTATUSLO_MASK as u32) == value);
7424 *self = Self::from_bits_retain(
7425 (self.bits() & !(Self::ERRNSTATUSLO_MASK << offset)) | ((value as u32) << offset),
7426 );
7427 }
7428
7429 pub const fn with_errnstatuslo(mut self, value: u32) -> Self {
7431 self.set_errnstatuslo(value);
7432 self
7433 }
7434}
7435
7436#[cfg(feature = "el1")]
7437bitflags! {
7438 #[derive(Clone, Copy, Eq, Default, PartialEq)]
7440 #[repr(transparent)]
7441 pub struct EsrEl1: u64 {
7442 const IL = 1 << 25;
7444 }
7445}
7446
7447#[cfg(feature = "el1")]
7448impl EsrEl1 {
7449 pub const ISS_SHIFT: u32 = 0;
7451 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
7453 pub const IL_SHIFT: u32 = 25;
7455 pub const EC_SHIFT: u32 = 26;
7457 pub const EC_MASK: u64 = 0b111111;
7459 pub const ISS2_SHIFT: u32 = 32;
7461 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
7463
7464 pub const fn iss(self) -> u32 {
7466 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
7467 }
7468
7469 pub const fn set_iss(&mut self, value: u32) {
7471 let offset = Self::ISS_SHIFT;
7472 assert!(value & (Self::ISS_MASK as u32) == value);
7473 *self = Self::from_bits_retain(
7474 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
7475 );
7476 }
7477
7478 pub const fn with_iss(mut self, value: u32) -> Self {
7480 self.set_iss(value);
7481 self
7482 }
7483
7484 pub const fn ec(self) -> u8 {
7486 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
7487 }
7488
7489 pub const fn set_ec(&mut self, value: u8) {
7491 let offset = Self::EC_SHIFT;
7492 assert!(value & (Self::EC_MASK as u8) == value);
7493 *self = Self::from_bits_retain(
7494 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u64) << offset),
7495 );
7496 }
7497
7498 pub const fn with_ec(mut self, value: u8) -> Self {
7500 self.set_ec(value);
7501 self
7502 }
7503
7504 pub const fn iss2(self) -> u32 {
7506 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
7507 }
7508
7509 pub const fn set_iss2(&mut self, value: u32) {
7511 let offset = Self::ISS2_SHIFT;
7512 assert!(value & (Self::ISS2_MASK as u32) == value);
7513 *self = Self::from_bits_retain(
7514 (self.bits() & !(Self::ISS2_MASK << offset)) | ((value as u64) << offset),
7515 );
7516 }
7517
7518 pub const fn with_iss2(mut self, value: u32) -> Self {
7520 self.set_iss2(value);
7521 self
7522 }
7523}
7524
7525#[cfg(feature = "el2")]
7526bitflags! {
7527 #[derive(Clone, Copy, Eq, Default, PartialEq)]
7529 #[repr(transparent)]
7530 pub struct EsrEl2: u64 {
7531 const IL = 1 << 25;
7533 }
7534}
7535
7536#[cfg(feature = "el2")]
7537impl EsrEl2 {
7538 pub const ISS_SHIFT: u32 = 0;
7540 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
7542 pub const IL_SHIFT: u32 = 25;
7544 pub const EC_SHIFT: u32 = 26;
7546 pub const EC_MASK: u64 = 0b111111;
7548 pub const ISS2_SHIFT: u32 = 32;
7550 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
7552
7553 pub const fn iss(self) -> u32 {
7555 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
7556 }
7557
7558 pub const fn set_iss(&mut self, value: u32) {
7560 let offset = Self::ISS_SHIFT;
7561 assert!(value & (Self::ISS_MASK as u32) == value);
7562 *self = Self::from_bits_retain(
7563 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
7564 );
7565 }
7566
7567 pub const fn with_iss(mut self, value: u32) -> Self {
7569 self.set_iss(value);
7570 self
7571 }
7572
7573 pub const fn ec(self) -> u8 {
7575 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
7576 }
7577
7578 pub const fn set_ec(&mut self, value: u8) {
7580 let offset = Self::EC_SHIFT;
7581 assert!(value & (Self::EC_MASK as u8) == value);
7582 *self = Self::from_bits_retain(
7583 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u64) << offset),
7584 );
7585 }
7586
7587 pub const fn with_ec(mut self, value: u8) -> Self {
7589 self.set_ec(value);
7590 self
7591 }
7592
7593 pub const fn iss2(self) -> u32 {
7595 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
7596 }
7597
7598 pub const fn set_iss2(&mut self, value: u32) {
7600 let offset = Self::ISS2_SHIFT;
7601 assert!(value & (Self::ISS2_MASK as u32) == value);
7602 *self = Self::from_bits_retain(
7603 (self.bits() & !(Self::ISS2_MASK << offset)) | ((value as u64) << offset),
7604 );
7605 }
7606
7607 pub const fn with_iss2(mut self, value: u32) -> Self {
7609 self.set_iss2(value);
7610 self
7611 }
7612}
7613
7614#[cfg(feature = "el3")]
7615bitflags! {
7616 #[derive(Clone, Copy, Eq, Default, PartialEq)]
7618 #[repr(transparent)]
7619 pub struct EsrEl3: u64 {
7620 const IL = 1 << 25;
7622 }
7623}
7624
7625#[cfg(feature = "el3")]
7626impl EsrEl3 {
7627 pub const ISS_SHIFT: u32 = 0;
7629 pub const ISS_MASK: u64 = 0b1111111111111111111111111;
7631 pub const IL_SHIFT: u32 = 25;
7633 pub const EC_SHIFT: u32 = 26;
7635 pub const EC_MASK: u64 = 0b111111;
7637 pub const ISS2_SHIFT: u32 = 32;
7639 pub const ISS2_MASK: u64 = 0b111111111111111111111111;
7641
7642 pub const fn iss(self) -> u32 {
7644 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
7645 }
7646
7647 pub const fn set_iss(&mut self, value: u32) {
7649 let offset = Self::ISS_SHIFT;
7650 assert!(value & (Self::ISS_MASK as u32) == value);
7651 *self = Self::from_bits_retain(
7652 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
7653 );
7654 }
7655
7656 pub const fn with_iss(mut self, value: u32) -> Self {
7658 self.set_iss(value);
7659 self
7660 }
7661
7662 pub const fn ec(self) -> u8 {
7664 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
7665 }
7666
7667 pub const fn set_ec(&mut self, value: u8) {
7669 let offset = Self::EC_SHIFT;
7670 assert!(value & (Self::EC_MASK as u8) == value);
7671 *self = Self::from_bits_retain(
7672 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u64) << offset),
7673 );
7674 }
7675
7676 pub const fn with_ec(mut self, value: u8) -> Self {
7678 self.set_ec(value);
7679 self
7680 }
7681
7682 pub const fn iss2(self) -> u32 {
7684 ((self.bits() >> Self::ISS2_SHIFT) & 0b111111111111111111111111) as u32
7685 }
7686
7687 pub const fn set_iss2(&mut self, value: u32) {
7689 let offset = Self::ISS2_SHIFT;
7690 assert!(value & (Self::ISS2_MASK as u32) == value);
7691 *self = Self::from_bits_retain(
7692 (self.bits() & !(Self::ISS2_MASK << offset)) | ((value as u64) << offset),
7693 );
7694 }
7695
7696 pub const fn with_iss2(mut self, value: u32) -> Self {
7698 self.set_iss2(value);
7699 self
7700 }
7701}
7702
7703#[cfg(feature = "el1")]
7704bitflags! {
7705 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7707 #[repr(transparent)]
7708 pub struct FarEl1: u64 {
7709 }
7710}
7711
7712#[cfg(feature = "el1")]
7713impl FarEl1 {
7714 pub const VA_SHIFT: u32 = 0;
7716 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
7718
7719 pub const fn va(self) -> u64 {
7721 ((self.bits() >> Self::VA_SHIFT)
7722 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
7723 }
7724
7725 pub const fn set_va(&mut self, value: u64) {
7727 let offset = Self::VA_SHIFT;
7728 assert!(value & (Self::VA_MASK as u64) == value);
7729 *self = Self::from_bits_retain(
7730 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u64) << offset),
7731 );
7732 }
7733
7734 pub const fn with_va(mut self, value: u64) -> Self {
7736 self.set_va(value);
7737 self
7738 }
7739}
7740
7741#[cfg(feature = "el2")]
7742bitflags! {
7743 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7745 #[repr(transparent)]
7746 pub struct FarEl2: u64 {
7747 }
7748}
7749
7750#[cfg(feature = "el2")]
7751impl FarEl2 {
7752 pub const VA_SHIFT: u32 = 0;
7754 pub const VA_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
7756
7757 pub const fn va(self) -> u64 {
7759 ((self.bits() >> Self::VA_SHIFT)
7760 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
7761 }
7762
7763 pub const fn set_va(&mut self, value: u64) {
7765 let offset = Self::VA_SHIFT;
7766 assert!(value & (Self::VA_MASK as u64) == value);
7767 *self = Self::from_bits_retain(
7768 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u64) << offset),
7769 );
7770 }
7771
7772 pub const fn with_va(mut self, value: u64) -> Self {
7774 self.set_va(value);
7775 self
7776 }
7777}
7778
7779#[cfg(feature = "el1")]
7780bitflags! {
7781 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7783 #[repr(transparent)]
7784 pub struct GcrEl1: u64 {
7785 const RRND = 1 << 16;
7787 }
7788}
7789
7790#[cfg(feature = "el1")]
7791impl GcrEl1 {
7792 pub const EXCLUDE_SHIFT: u32 = 0;
7794 pub const EXCLUDE_MASK: u64 = 0b1111111111111111;
7796 pub const RRND_SHIFT: u32 = 16;
7798
7799 pub const fn exclude(self) -> u16 {
7801 ((self.bits() >> Self::EXCLUDE_SHIFT) & 0b1111111111111111) as u16
7802 }
7803
7804 pub const fn set_exclude(&mut self, value: u16) {
7806 let offset = Self::EXCLUDE_SHIFT;
7807 assert!(value & (Self::EXCLUDE_MASK as u16) == value);
7808 *self = Self::from_bits_retain(
7809 (self.bits() & !(Self::EXCLUDE_MASK << offset)) | ((value as u64) << offset),
7810 );
7811 }
7812
7813 pub const fn with_exclude(mut self, value: u16) -> Self {
7815 self.set_exclude(value);
7816 self
7817 }
7818}
7819
7820#[cfg(feature = "el1")]
7821bitflags! {
7822 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7826 #[repr(transparent)]
7827 pub struct GcscrEl1: u64 {
7828 const PCRSEL = 1 << 0;
7830 const RVCHKEN = 1 << 5;
7832 const EXLOCKEN = 1 << 6;
7834 const PUSHMEN = 1 << 8;
7836 const STREN = 1 << 9;
7838 }
7839}
7840
7841#[cfg(feature = "el1")]
7842impl GcscrEl1 {
7843 pub const PCRSEL_SHIFT: u32 = 0;
7845 pub const RVCHKEN_SHIFT: u32 = 5;
7847 pub const EXLOCKEN_SHIFT: u32 = 6;
7849 pub const PUSHMEN_SHIFT: u32 = 8;
7851 pub const STREN_SHIFT: u32 = 9;
7853}
7854
7855#[cfg(feature = "el2")]
7856bitflags! {
7857 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7861 #[repr(transparent)]
7862 pub struct GcscrEl2: u64 {
7863 const PCRSEL = 1 << 0;
7865 const RVCHKEN = 1 << 5;
7867 const EXLOCKEN = 1 << 6;
7869 const PUSHMEN = 1 << 8;
7871 const STREN = 1 << 9;
7873 }
7874}
7875
7876#[cfg(feature = "el2")]
7877impl GcscrEl2 {
7878 pub const PCRSEL_SHIFT: u32 = 0;
7880 pub const RVCHKEN_SHIFT: u32 = 5;
7882 pub const EXLOCKEN_SHIFT: u32 = 6;
7884 pub const PUSHMEN_SHIFT: u32 = 8;
7886 pub const STREN_SHIFT: u32 = 9;
7888}
7889
7890#[cfg(feature = "el3")]
7891bitflags! {
7892 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
7894 #[repr(transparent)]
7895 pub struct GpccrEl3: u64 {
7896 const PPS3 = 1 << 3;
7898 const RLPAD = 1 << 5;
7900 const NSPAD = 1 << 6;
7902 const SPAD = 1 << 7;
7904 const GPC = 1 << 16;
7906 const GPCP = 1 << 17;
7908 const TBGPCD = 1 << 18;
7910 const NSO = 1 << 19;
7912 const APPSAA = 1 << 24;
7914 const SA = 1 << 25;
7916 const NSP = 1 << 26;
7918 const NA6 = 1 << 27;
7920 const NA7 = 1 << 28;
7922 const GPCBW = 1 << 29;
7924 }
7925}
7926
7927#[cfg(feature = "el3")]
7928impl GpccrEl3 {
7929 pub const PPS_SHIFT: u32 = 0;
7931 pub const PPS_MASK: u64 = 0b111;
7933 pub const PPS3_SHIFT: u32 = 3;
7935 pub const RLPAD_SHIFT: u32 = 5;
7937 pub const NSPAD_SHIFT: u32 = 6;
7939 pub const SPAD_SHIFT: u32 = 7;
7941 pub const IRGN_SHIFT: u32 = 8;
7943 pub const IRGN_MASK: u64 = 0b11;
7945 pub const ORGN_SHIFT: u32 = 10;
7947 pub const ORGN_MASK: u64 = 0b11;
7949 pub const SH_SHIFT: u32 = 12;
7951 pub const SH_MASK: u64 = 0b11;
7953 pub const PGS_SHIFT: u32 = 14;
7955 pub const PGS_MASK: u64 = 0b11;
7957 pub const GPC_SHIFT: u32 = 16;
7959 pub const GPCP_SHIFT: u32 = 17;
7961 pub const TBGPCD_SHIFT: u32 = 18;
7963 pub const NSO_SHIFT: u32 = 19;
7965 pub const L0GPTSZ_SHIFT: u32 = 20;
7967 pub const L0GPTSZ_MASK: u64 = 0b1111;
7969 pub const APPSAA_SHIFT: u32 = 24;
7971 pub const SA_SHIFT: u32 = 25;
7973 pub const NSP_SHIFT: u32 = 26;
7975 pub const NA6_SHIFT: u32 = 27;
7977 pub const NA7_SHIFT: u32 = 28;
7979 pub const GPCBW_SHIFT: u32 = 29;
7981
7982 pub const fn pps(self) -> u8 {
7984 ((self.bits() >> Self::PPS_SHIFT) & 0b111) as u8
7985 }
7986
7987 pub const fn set_pps(&mut self, value: u8) {
7989 let offset = Self::PPS_SHIFT;
7990 assert!(value & (Self::PPS_MASK as u8) == value);
7991 *self = Self::from_bits_retain(
7992 (self.bits() & !(Self::PPS_MASK << offset)) | ((value as u64) << offset),
7993 );
7994 }
7995
7996 pub const fn with_pps(mut self, value: u8) -> Self {
7998 self.set_pps(value);
7999 self
8000 }
8001
8002 pub fn irgn(self) -> crate::manual::Cacheability {
8004 crate::manual::Cacheability::try_from(((self.bits() >> Self::IRGN_SHIFT) & 0b11) as u8)
8005 .unwrap()
8006 }
8007
8008 pub fn set_irgn(&mut self, value: crate::manual::Cacheability) {
8010 let offset = Self::IRGN_SHIFT;
8011 let value: u8 = value.into();
8012 assert!(value & (Self::IRGN_MASK as u8) == value);
8013 *self = Self::from_bits_retain(
8014 (self.bits() & !(Self::IRGN_MASK << offset)) | ((value as u64) << offset),
8015 );
8016 }
8017
8018 pub fn with_irgn(mut self, value: crate::manual::Cacheability) -> Self {
8020 self.set_irgn(value);
8021 self
8022 }
8023
8024 pub fn orgn(self) -> crate::manual::Cacheability {
8026 crate::manual::Cacheability::try_from(((self.bits() >> Self::ORGN_SHIFT) & 0b11) as u8)
8027 .unwrap()
8028 }
8029
8030 pub fn set_orgn(&mut self, value: crate::manual::Cacheability) {
8032 let offset = Self::ORGN_SHIFT;
8033 let value: u8 = value.into();
8034 assert!(value & (Self::ORGN_MASK as u8) == value);
8035 *self = Self::from_bits_retain(
8036 (self.bits() & !(Self::ORGN_MASK << offset)) | ((value as u64) << offset),
8037 );
8038 }
8039
8040 pub fn with_orgn(mut self, value: crate::manual::Cacheability) -> Self {
8042 self.set_orgn(value);
8043 self
8044 }
8045
8046 pub fn sh(self) -> crate::manual::Shareability {
8048 crate::manual::Shareability::try_from(((self.bits() >> Self::SH_SHIFT) & 0b11) as u8)
8049 .unwrap()
8050 }
8051
8052 pub fn set_sh(&mut self, value: crate::manual::Shareability) {
8054 let offset = Self::SH_SHIFT;
8055 let value: u8 = value.into();
8056 assert!(value & (Self::SH_MASK as u8) == value);
8057 *self = Self::from_bits_retain(
8058 (self.bits() & !(Self::SH_MASK << offset)) | ((value as u64) << offset),
8059 );
8060 }
8061
8062 pub fn with_sh(mut self, value: crate::manual::Shareability) -> Self {
8064 self.set_sh(value);
8065 self
8066 }
8067
8068 pub const fn pgs(self) -> u8 {
8070 ((self.bits() >> Self::PGS_SHIFT) & 0b11) as u8
8071 }
8072
8073 pub const fn set_pgs(&mut self, value: u8) {
8075 let offset = Self::PGS_SHIFT;
8076 assert!(value & (Self::PGS_MASK as u8) == value);
8077 *self = Self::from_bits_retain(
8078 (self.bits() & !(Self::PGS_MASK << offset)) | ((value as u64) << offset),
8079 );
8080 }
8081
8082 pub const fn with_pgs(mut self, value: u8) -> Self {
8084 self.set_pgs(value);
8085 self
8086 }
8087
8088 pub const fn l0gptsz(self) -> u8 {
8090 ((self.bits() >> Self::L0GPTSZ_SHIFT) & 0b1111) as u8
8091 }
8092
8093 pub const fn set_l0gptsz(&mut self, value: u8) {
8095 let offset = Self::L0GPTSZ_SHIFT;
8096 assert!(value & (Self::L0GPTSZ_MASK as u8) == value);
8097 *self = Self::from_bits_retain(
8098 (self.bits() & !(Self::L0GPTSZ_MASK << offset)) | ((value as u64) << offset),
8099 );
8100 }
8101
8102 pub const fn with_l0gptsz(mut self, value: u8) -> Self {
8104 self.set_l0gptsz(value);
8105 self
8106 }
8107}
8108
8109#[cfg(feature = "el3")]
8110bitflags! {
8111 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8113 #[repr(transparent)]
8114 pub struct GptbrEl3: u64 {
8115 }
8116}
8117
8118#[cfg(feature = "el3")]
8119impl GptbrEl3 {
8120 pub const BADDR_SHIFT: u32 = 0;
8122 pub const BADDR_MASK: u64 = 0b1111111111111111111111111111111111111111;
8124 pub const BADDR_43_40_SHIFT: u32 = 40;
8126 pub const BADDR_43_40_MASK: u64 = 0b1111;
8128
8129 pub const fn baddr(self) -> u64 {
8131 ((self.bits() >> Self::BADDR_SHIFT) & 0b1111111111111111111111111111111111111111) as u64
8132 }
8133
8134 pub const fn set_baddr(&mut self, value: u64) {
8136 let offset = Self::BADDR_SHIFT;
8137 assert!(value & (Self::BADDR_MASK as u64) == value);
8138 *self = Self::from_bits_retain(
8139 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
8140 );
8141 }
8142
8143 pub const fn with_baddr(mut self, value: u64) -> Self {
8145 self.set_baddr(value);
8146 self
8147 }
8148
8149 pub const fn baddr_43_40(self) -> u8 {
8151 ((self.bits() >> Self::BADDR_43_40_SHIFT) & 0b1111) as u8
8152 }
8153
8154 pub const fn set_baddr_43_40(&mut self, value: u8) {
8156 let offset = Self::BADDR_43_40_SHIFT;
8157 assert!(value & (Self::BADDR_43_40_MASK as u8) == value);
8158 *self = Self::from_bits_retain(
8159 (self.bits() & !(Self::BADDR_43_40_MASK << offset)) | ((value as u64) << offset),
8160 );
8161 }
8162
8163 pub const fn with_baddr_43_40(mut self, value: u8) -> Self {
8165 self.set_baddr_43_40(value);
8166 self
8167 }
8168}
8169
8170#[cfg(feature = "el2")]
8171bitflags! {
8172 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8174 #[repr(transparent)]
8175 pub struct HafgrtrEl2: u64 {
8176 const AMEVCNTR00_EL0 = 1 << 1;
8178 const AMEVCNTR01_EL0 = 1 << 2;
8180 const AMEVCNTR02_EL0 = 1 << 3;
8182 const AMEVCNTR03_EL0 = 1 << 4;
8184 }
8185}
8186
8187#[cfg(feature = "el2")]
8188impl HafgrtrEl2 {
8189 pub const AMEVCNTR0_EL0_SHIFT: u32 = 1;
8191}
8192
8193bitflags! {
8194 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8196 #[repr(transparent)]
8197 pub struct Hcptr: u32 {
8198 const RES1 = 0b11001111111111;
8200 const TCP10 = 1 << 10;
8202 const TCP11 = 1 << 11;
8204 const TASE = 1 << 15;
8206 const TTA = 1 << 20;
8208 const TAM = 1 << 30;
8210 const TCPAC = 1 << 31;
8212 }
8213}
8214
8215impl Hcptr {
8216 pub const TCP10_SHIFT: u32 = 10;
8218 pub const TCP11_SHIFT: u32 = 11;
8220 pub const TASE_SHIFT: u32 = 15;
8222 pub const TTA_SHIFT: u32 = 20;
8224 pub const TAM_SHIFT: u32 = 30;
8226 pub const TCPAC_SHIFT: u32 = 31;
8228}
8229
8230bitflags! {
8231 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8233 #[repr(transparent)]
8234 pub struct Hcr: u32 {
8235 const VM = 1 << 0;
8237 const SWIO = 1 << 1;
8239 const PTW = 1 << 2;
8241 const FMO = 1 << 3;
8243 const IMO = 1 << 4;
8245 const AMO = 1 << 5;
8247 const VF = 1 << 6;
8249 const VI = 1 << 7;
8251 const VA = 1 << 8;
8253 const FB = 1 << 9;
8255 const DC = 1 << 12;
8257 const TWI = 1 << 13;
8259 const TWE = 1 << 14;
8261 const TID0 = 1 << 15;
8263 const TID1 = 1 << 16;
8265 const TID2 = 1 << 17;
8267 const TID3 = 1 << 18;
8269 const TSC = 1 << 19;
8271 const TIDCP = 1 << 20;
8273 const TAC = 1 << 21;
8275 const TSW = 1 << 22;
8277 const TPC = 1 << 23;
8279 const TPU = 1 << 24;
8281 const TTLB = 1 << 25;
8283 const TVM = 1 << 26;
8285 const TGE = 1 << 27;
8287 const HCD = 1 << 29;
8289 const TRVM = 1 << 30;
8291 }
8292}
8293
8294impl Hcr {
8295 pub const VM_SHIFT: u32 = 0;
8297 pub const SWIO_SHIFT: u32 = 1;
8299 pub const PTW_SHIFT: u32 = 2;
8301 pub const FMO_SHIFT: u32 = 3;
8303 pub const IMO_SHIFT: u32 = 4;
8305 pub const AMO_SHIFT: u32 = 5;
8307 pub const VF_SHIFT: u32 = 6;
8309 pub const VI_SHIFT: u32 = 7;
8311 pub const VA_SHIFT: u32 = 8;
8313 pub const FB_SHIFT: u32 = 9;
8315 pub const BSU_SHIFT: u32 = 10;
8317 pub const BSU_MASK: u32 = 0b11;
8319 pub const DC_SHIFT: u32 = 12;
8321 pub const TWI_SHIFT: u32 = 13;
8323 pub const TWE_SHIFT: u32 = 14;
8325 pub const TID0_SHIFT: u32 = 15;
8327 pub const TID1_SHIFT: u32 = 16;
8329 pub const TID2_SHIFT: u32 = 17;
8331 pub const TID3_SHIFT: u32 = 18;
8333 pub const TSC_SHIFT: u32 = 19;
8335 pub const TIDCP_SHIFT: u32 = 20;
8337 pub const TAC_SHIFT: u32 = 21;
8339 pub const TSW_SHIFT: u32 = 22;
8341 pub const TPC_SHIFT: u32 = 23;
8343 pub const TPU_SHIFT: u32 = 24;
8345 pub const TTLB_SHIFT: u32 = 25;
8347 pub const TVM_SHIFT: u32 = 26;
8349 pub const TGE_SHIFT: u32 = 27;
8351 pub const HCD_SHIFT: u32 = 29;
8353 pub const TRVM_SHIFT: u32 = 30;
8355
8356 pub const fn bsu(self) -> u8 {
8358 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
8359 }
8360
8361 pub const fn set_bsu(&mut self, value: u8) {
8363 let offset = Self::BSU_SHIFT;
8364 assert!(value & (Self::BSU_MASK as u8) == value);
8365 *self = Self::from_bits_retain(
8366 (self.bits() & !(Self::BSU_MASK << offset)) | ((value as u32) << offset),
8367 );
8368 }
8369
8370 pub const fn with_bsu(mut self, value: u8) -> Self {
8372 self.set_bsu(value);
8373 self
8374 }
8375}
8376
8377bitflags! {
8378 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8380 #[repr(transparent)]
8381 pub struct Hcr2: u32 {
8382 const CD = 1 << 0;
8384 const ID = 1 << 1;
8386 const TERR = 1 << 4;
8388 const TEA = 1 << 5;
8390 const TID4 = 1 << 17;
8392 const TICAB = 1 << 18;
8394 const TOCU = 1 << 20;
8396 const TTLBIS = 1 << 22;
8398 }
8399}
8400
8401impl Hcr2 {
8402 pub const CD_SHIFT: u32 = 0;
8404 pub const ID_SHIFT: u32 = 1;
8406 pub const TERR_SHIFT: u32 = 4;
8408 pub const TEA_SHIFT: u32 = 5;
8410 pub const TID4_SHIFT: u32 = 17;
8412 pub const TICAB_SHIFT: u32 = 18;
8414 pub const TOCU_SHIFT: u32 = 20;
8416 pub const TTLBIS_SHIFT: u32 = 22;
8418}
8419
8420#[cfg(feature = "el2")]
8421bitflags! {
8422 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8426 #[repr(transparent)]
8427 pub struct HcrxEl2: u64 {
8428 const ENAS0 = 1 << 0;
8430 const ENALS = 1 << 1;
8432 const ENASR = 1 << 2;
8434 const FNXS = 1 << 3;
8436 const FGTNXS = 1 << 4;
8438 const SMPME = 1 << 5;
8440 const TALLINT = 1 << 6;
8442 const VINMI = 1 << 7;
8444 const VFNMI = 1 << 8;
8446 const CMOW = 1 << 9;
8448 const MCE2 = 1 << 10;
8450 const MSCEN = 1 << 11;
8452 const TCR2EN = 1 << 14;
8454 const SCTLR2EN = 1 << 15;
8456 const PTTWI = 1 << 16;
8458 const D128EN = 1 << 17;
8460 const ENSNERR = 1 << 18;
8462 const TMEA = 1 << 19;
8464 const ENSDERR = 1 << 20;
8466 const ENIDCP128 = 1 << 21;
8468 const GCSEN = 1 << 22;
8470 const ENFPM = 1 << 23;
8472 const PACMEN = 1 << 24;
8474 const VTLBIDEN = 1 << 25;
8476 const SRMASKEN = 1 << 26;
8478 const NVTGE = 1 << 27;
8480 const POE2EN = 1 << 29;
8482 const TPLIMEN = 1 << 30;
8484 const FDIT = 1 << 31;
8486 const NVNTTLB = 1 << 32;
8488 const NVNTTLBIS = 1 << 33;
8490 const NVNTTLBOS = 1 << 34;
8492 const VTLBIDOSEN = 1 << 35;
8494 const FNB = 1 << 36;
8496 const VTE = 1 << 37;
8498 const VTAO = 1 << 38;
8500 const VTCO = 1 << 39;
8502 }
8503}
8504
8505#[cfg(feature = "el2")]
8506impl HcrxEl2 {
8507 pub const ENAS0_SHIFT: u32 = 0;
8509 pub const ENALS_SHIFT: u32 = 1;
8511 pub const ENASR_SHIFT: u32 = 2;
8513 pub const FNXS_SHIFT: u32 = 3;
8515 pub const FGTNXS_SHIFT: u32 = 4;
8517 pub const SMPME_SHIFT: u32 = 5;
8519 pub const TALLINT_SHIFT: u32 = 6;
8521 pub const VINMI_SHIFT: u32 = 7;
8523 pub const VFNMI_SHIFT: u32 = 8;
8525 pub const CMOW_SHIFT: u32 = 9;
8527 pub const MCE2_SHIFT: u32 = 10;
8529 pub const MSCEN_SHIFT: u32 = 11;
8531 pub const TCR2EN_SHIFT: u32 = 14;
8533 pub const SCTLR2EN_SHIFT: u32 = 15;
8535 pub const PTTWI_SHIFT: u32 = 16;
8537 pub const D128EN_SHIFT: u32 = 17;
8539 pub const ENSNERR_SHIFT: u32 = 18;
8541 pub const TMEA_SHIFT: u32 = 19;
8543 pub const ENSDERR_SHIFT: u32 = 20;
8545 pub const ENIDCP128_SHIFT: u32 = 21;
8547 pub const GCSEN_SHIFT: u32 = 22;
8549 pub const ENFPM_SHIFT: u32 = 23;
8551 pub const PACMEN_SHIFT: u32 = 24;
8553 pub const VTLBIDEN_SHIFT: u32 = 25;
8555 pub const SRMASKEN_SHIFT: u32 = 26;
8557 pub const NVTGE_SHIFT: u32 = 27;
8559 pub const POE2EN_SHIFT: u32 = 29;
8561 pub const TPLIMEN_SHIFT: u32 = 30;
8563 pub const FDIT_SHIFT: u32 = 31;
8565 pub const NVNTTLB_SHIFT: u32 = 32;
8567 pub const NVNTTLBIS_SHIFT: u32 = 33;
8569 pub const NVNTTLBOS_SHIFT: u32 = 34;
8571 pub const VTLBIDOSEN_SHIFT: u32 = 35;
8573 pub const FNB_SHIFT: u32 = 36;
8575 pub const VTE_SHIFT: u32 = 37;
8577 pub const VTAO_SHIFT: u32 = 38;
8579 pub const VTCO_SHIFT: u32 = 39;
8581}
8582
8583#[cfg(feature = "el2")]
8584bitflags! {
8585 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8587 #[repr(transparent)]
8588 pub struct HcrEl2: u64 {
8589 const VM = 1 << 0;
8591 const SWIO = 1 << 1;
8593 const PTW = 1 << 2;
8595 const FMO = 1 << 3;
8597 const IMO = 1 << 4;
8599 const AMO = 1 << 5;
8601 const VF = 1 << 6;
8603 const VI = 1 << 7;
8605 const VSE = 1 << 8;
8607 const FB = 1 << 9;
8609 const DC = 1 << 12;
8611 const TWI = 1 << 13;
8613 const TWE = 1 << 14;
8615 const TID0 = 1 << 15;
8617 const TID1 = 1 << 16;
8619 const TID2 = 1 << 17;
8621 const TID3 = 1 << 18;
8623 const TSC = 1 << 19;
8625 const TIDCP = 1 << 20;
8627 const TACR = 1 << 21;
8629 const TSW = 1 << 22;
8631 const TPCP = 1 << 23;
8633 const TPU = 1 << 24;
8635 const TTLB = 1 << 25;
8637 const TVM = 1 << 26;
8639 const TGE = 1 << 27;
8641 const TDZ = 1 << 28;
8643 const HCD = 1 << 29;
8645 const TRVM = 1 << 30;
8647 const RW = 1 << 31;
8649 const CD = 1 << 32;
8651 const ID = 1 << 33;
8653 const E2H = 1 << 34;
8655 const TLOR = 1 << 35;
8657 const TERR = 1 << 36;
8659 const TEA = 1 << 37;
8661 const APK = 1 << 40;
8663 const API = 1 << 41;
8665 const NV = 1 << 42;
8667 const NV1 = 1 << 43;
8669 const AT = 1 << 44;
8671 const NV2 = 1 << 45;
8673 const FWB = 1 << 46;
8675 const FIEN = 1 << 47;
8677 const GPF = 1 << 48;
8679 const TID4 = 1 << 49;
8681 const TICAB = 1 << 50;
8683 const AMVOFFEN = 1 << 51;
8685 const TOCU = 1 << 52;
8687 const ENSCXT = 1 << 53;
8689 const TTLBIS = 1 << 54;
8691 const TTLBOS = 1 << 55;
8693 const ATA = 1 << 56;
8695 const DCT = 1 << 57;
8697 const TID5 = 1 << 58;
8699 const TWEDEN = 1 << 59;
8701 }
8702}
8703
8704#[cfg(feature = "el2")]
8705impl HcrEl2 {
8706 pub const VM_SHIFT: u32 = 0;
8708 pub const SWIO_SHIFT: u32 = 1;
8710 pub const PTW_SHIFT: u32 = 2;
8712 pub const FMO_SHIFT: u32 = 3;
8714 pub const IMO_SHIFT: u32 = 4;
8716 pub const AMO_SHIFT: u32 = 5;
8718 pub const VF_SHIFT: u32 = 6;
8720 pub const VI_SHIFT: u32 = 7;
8722 pub const VSE_SHIFT: u32 = 8;
8724 pub const FB_SHIFT: u32 = 9;
8726 pub const BSU_SHIFT: u32 = 10;
8728 pub const BSU_MASK: u64 = 0b11;
8730 pub const DC_SHIFT: u32 = 12;
8732 pub const TWI_SHIFT: u32 = 13;
8734 pub const TWE_SHIFT: u32 = 14;
8736 pub const TID0_SHIFT: u32 = 15;
8738 pub const TID1_SHIFT: u32 = 16;
8740 pub const TID2_SHIFT: u32 = 17;
8742 pub const TID3_SHIFT: u32 = 18;
8744 pub const TSC_SHIFT: u32 = 19;
8746 pub const TIDCP_SHIFT: u32 = 20;
8748 pub const TACR_SHIFT: u32 = 21;
8750 pub const TSW_SHIFT: u32 = 22;
8752 pub const TPCP_SHIFT: u32 = 23;
8754 pub const TPU_SHIFT: u32 = 24;
8756 pub const TTLB_SHIFT: u32 = 25;
8758 pub const TVM_SHIFT: u32 = 26;
8760 pub const TGE_SHIFT: u32 = 27;
8762 pub const TDZ_SHIFT: u32 = 28;
8764 pub const HCD_SHIFT: u32 = 29;
8766 pub const TRVM_SHIFT: u32 = 30;
8768 pub const RW_SHIFT: u32 = 31;
8770 pub const CD_SHIFT: u32 = 32;
8772 pub const ID_SHIFT: u32 = 33;
8774 pub const E2H_SHIFT: u32 = 34;
8776 pub const TLOR_SHIFT: u32 = 35;
8778 pub const TERR_SHIFT: u32 = 36;
8780 pub const TEA_SHIFT: u32 = 37;
8782 pub const APK_SHIFT: u32 = 40;
8784 pub const API_SHIFT: u32 = 41;
8786 pub const NV_SHIFT: u32 = 42;
8788 pub const NV1_SHIFT: u32 = 43;
8790 pub const AT_SHIFT: u32 = 44;
8792 pub const NV2_SHIFT: u32 = 45;
8794 pub const FWB_SHIFT: u32 = 46;
8796 pub const FIEN_SHIFT: u32 = 47;
8798 pub const GPF_SHIFT: u32 = 48;
8800 pub const TID4_SHIFT: u32 = 49;
8802 pub const TICAB_SHIFT: u32 = 50;
8804 pub const AMVOFFEN_SHIFT: u32 = 51;
8806 pub const TOCU_SHIFT: u32 = 52;
8808 pub const ENSCXT_SHIFT: u32 = 53;
8810 pub const TTLBIS_SHIFT: u32 = 54;
8812 pub const TTLBOS_SHIFT: u32 = 55;
8814 pub const ATA_SHIFT: u32 = 56;
8816 pub const DCT_SHIFT: u32 = 57;
8818 pub const TID5_SHIFT: u32 = 58;
8820 pub const TWEDEN_SHIFT: u32 = 59;
8822 pub const TWEDEL_SHIFT: u32 = 60;
8824 pub const TWEDEL_MASK: u64 = 0b1111;
8826
8827 pub const fn bsu(self) -> u8 {
8829 ((self.bits() >> Self::BSU_SHIFT) & 0b11) as u8
8830 }
8831
8832 pub const fn set_bsu(&mut self, value: u8) {
8834 let offset = Self::BSU_SHIFT;
8835 assert!(value & (Self::BSU_MASK as u8) == value);
8836 *self = Self::from_bits_retain(
8837 (self.bits() & !(Self::BSU_MASK << offset)) | ((value as u64) << offset),
8838 );
8839 }
8840
8841 pub const fn with_bsu(mut self, value: u8) -> Self {
8843 self.set_bsu(value);
8844 self
8845 }
8846
8847 pub const fn twedel(self) -> u8 {
8849 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
8850 }
8851
8852 pub const fn set_twedel(&mut self, value: u8) {
8854 let offset = Self::TWEDEL_SHIFT;
8855 assert!(value & (Self::TWEDEL_MASK as u8) == value);
8856 *self = Self::from_bits_retain(
8857 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
8858 );
8859 }
8860
8861 pub const fn with_twedel(mut self, value: u8) -> Self {
8863 self.set_twedel(value);
8864 self
8865 }
8866}
8867
8868bitflags! {
8869 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8871 #[repr(transparent)]
8872 pub struct Hdcr: u32 {
8873 const TPMCR = 1 << 5;
8875 const TPM = 1 << 6;
8877 const HPME = 1 << 7;
8879 const TDE = 1 << 8;
8881 const TDA = 1 << 9;
8883 const TDOSA = 1 << 10;
8885 const TDRA = 1 << 11;
8887 const HPMD = 1 << 17;
8889 const TTRF = 1 << 19;
8891 const HCCD = 1 << 23;
8893 const HLP = 1 << 26;
8895 const TDCC = 1 << 27;
8897 const MTPME = 1 << 28;
8899 const HPMFZO = 1 << 29;
8901 }
8902}
8903
8904impl Hdcr {
8905 pub const HPMN_SHIFT: u32 = 0;
8907 pub const HPMN_MASK: u32 = 0b11111;
8909 pub const TPMCR_SHIFT: u32 = 5;
8911 pub const TPM_SHIFT: u32 = 6;
8913 pub const HPME_SHIFT: u32 = 7;
8915 pub const TDE_SHIFT: u32 = 8;
8917 pub const TDA_SHIFT: u32 = 9;
8919 pub const TDOSA_SHIFT: u32 = 10;
8921 pub const TDRA_SHIFT: u32 = 11;
8923 pub const HPMD_SHIFT: u32 = 17;
8925 pub const TTRF_SHIFT: u32 = 19;
8927 pub const HCCD_SHIFT: u32 = 23;
8929 pub const HLP_SHIFT: u32 = 26;
8931 pub const TDCC_SHIFT: u32 = 27;
8933 pub const MTPME_SHIFT: u32 = 28;
8935 pub const HPMFZO_SHIFT: u32 = 29;
8937
8938 pub const fn hpmn(self) -> u8 {
8940 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
8941 }
8942
8943 pub const fn set_hpmn(&mut self, value: u8) {
8945 let offset = Self::HPMN_SHIFT;
8946 assert!(value & (Self::HPMN_MASK as u8) == value);
8947 *self = Self::from_bits_retain(
8948 (self.bits() & !(Self::HPMN_MASK << offset)) | ((value as u32) << offset),
8949 );
8950 }
8951
8952 pub const fn with_hpmn(mut self, value: u8) -> Self {
8954 self.set_hpmn(value);
8955 self
8956 }
8957}
8958
8959bitflags! {
8960 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8962 #[repr(transparent)]
8963 pub struct Hdfar: u32 {
8964 }
8965}
8966
8967impl Hdfar {
8968 pub const VA_SHIFT: u32 = 0;
8970 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
8972
8973 pub const fn va(self) -> u32 {
8975 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
8976 }
8977
8978 pub const fn set_va(&mut self, value: u32) {
8980 let offset = Self::VA_SHIFT;
8981 assert!(value & (Self::VA_MASK as u32) == value);
8982 *self = Self::from_bits_retain(
8983 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
8984 );
8985 }
8986
8987 pub const fn with_va(mut self, value: u32) -> Self {
8989 self.set_va(value);
8990 self
8991 }
8992}
8993
8994#[cfg(feature = "el2")]
8995bitflags! {
8996 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
8998 #[repr(transparent)]
8999 pub struct Hdfgrtr2El2: u64 {
9000 const NPMECR_EL1 = 1 << 0;
9002 const NPMIAR_EL1 = 1 << 1;
9004 const NPMICNTR_EL0 = 1 << 2;
9006 const NPMICFILTR_EL0 = 1 << 3;
9008 const NPMUACR_EL1 = 1 << 4;
9010 const NMDSELR_EL1 = 1 << 5;
9012 const NPMSSDATA = 1 << 6;
9014 const NPMSSCR_EL1 = 1 << 7;
9016 const NSPMEVCNTRN_EL0 = 1 << 8;
9018 const NSPMEVTYPERN_EL0 = 1 << 9;
9020 const NSPMSELR_EL0 = 1 << 10;
9022 const NSPMCNTEN = 1 << 11;
9024 const NSPMINTEN = 1 << 12;
9026 const NSPMOVS = 1 << 13;
9028 const NSPMCR_EL0 = 1 << 14;
9030 const NSPMACCESSR_EL1 = 1 << 15;
9032 const NSPMSCR_EL1 = 1 << 16;
9034 const NSPMID = 1 << 17;
9036 const NSPMDEVAFF_EL1 = 1 << 18;
9038 const NPMSDSFR_EL1 = 1 << 19;
9040 const NTRCITECR_EL1 = 1 << 20;
9042 const NTRBMPAM_EL1 = 1 << 22;
9044 const NMDSTEPOP_EL1 = 1 << 23;
9046 const NPMBMAR_EL1 = 1 << 24;
9048 }
9049}
9050
9051#[cfg(feature = "el2")]
9052impl Hdfgrtr2El2 {
9053 pub const NPMECR_EL1_SHIFT: u32 = 0;
9055 pub const NPMIAR_EL1_SHIFT: u32 = 1;
9057 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
9059 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
9061 pub const NPMUACR_EL1_SHIFT: u32 = 4;
9063 pub const NMDSELR_EL1_SHIFT: u32 = 5;
9065 pub const NPMSSDATA_SHIFT: u32 = 6;
9067 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
9069 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
9071 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
9073 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
9075 pub const NSPMCNTEN_SHIFT: u32 = 11;
9077 pub const NSPMINTEN_SHIFT: u32 = 12;
9079 pub const NSPMOVS_SHIFT: u32 = 13;
9081 pub const NSPMCR_EL0_SHIFT: u32 = 14;
9083 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
9085 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
9087 pub const NSPMID_SHIFT: u32 = 17;
9089 pub const NSPMDEVAFF_EL1_SHIFT: u32 = 18;
9091 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
9093 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
9095 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
9097 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
9099 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
9101}
9102
9103#[cfg(feature = "el2")]
9104bitflags! {
9105 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9107 #[repr(transparent)]
9108 pub struct HdfgrtrEl2: u64 {
9109 const DBGBCRN_EL1 = 1 << 0;
9111 const DBGBVRN_EL1 = 1 << 1;
9113 const DBGWCRN_EL1 = 1 << 2;
9115 const DBGWVRN_EL1 = 1 << 3;
9117 const MDSCR_EL1 = 1 << 4;
9119 const DBGCLAIM = 1 << 5;
9121 const DBGAUTHSTATUS_EL1 = 1 << 6;
9123 const DBGPRCR_EL1 = 1 << 7;
9125 const OSLSR_EL1 = 1 << 9;
9127 const OSECCR_EL1 = 1 << 10;
9129 const OSDLR_EL1 = 1 << 11;
9131 const PMEVCNTRN_EL0 = 1 << 12;
9133 const PMEVTYPERN_EL0 = 1 << 13;
9135 const PMCCFILTR_EL0 = 1 << 14;
9137 const PMCCNTR_EL0 = 1 << 15;
9139 const PMCNTEN = 1 << 16;
9141 const PMINTEN = 1 << 17;
9143 const PMOVS = 1 << 18;
9145 const PMSELR_EL0 = 1 << 19;
9147 const PMMIR_EL1 = 1 << 22;
9149 const PMBLIMITR_EL1 = 1 << 23;
9151 const PMBPTR_EL1 = 1 << 24;
9153 const PMBSR_EL1 = 1 << 25;
9155 const PMSCR_EL1 = 1 << 26;
9157 const PMSEVFR_EL1 = 1 << 27;
9159 const PMSFCR_EL1 = 1 << 28;
9161 const PMSICR_EL1 = 1 << 29;
9163 const PMSIDR_EL1 = 1 << 30;
9165 const PMSIRR_EL1 = 1 << 31;
9167 const PMSLATFR_EL1 = 1 << 32;
9169 const TRC = 1 << 33;
9171 const TRCAUTHSTATUS = 1 << 34;
9173 const TRCAUXCTLR = 1 << 35;
9175 const TRCCLAIM = 1 << 36;
9177 const TRCCNTVRN = 1 << 37;
9179 const TRCID = 1 << 40;
9181 const TRCIMSPECN = 1 << 41;
9183 const TRCOSLSR = 1 << 43;
9185 const TRCPRGCTLR = 1 << 44;
9187 const TRCSEQSTR = 1 << 45;
9189 const TRCSSCSRN = 1 << 46;
9191 const TRCSTATR = 1 << 47;
9193 const TRCVICTLR = 1 << 48;
9195 const TRBBASER_EL1 = 1 << 50;
9197 const TRBIDR_EL1 = 1 << 51;
9199 const TRBLIMITR_EL1 = 1 << 52;
9201 const TRBMAR_EL1 = 1 << 53;
9203 const TRBPTR_EL1 = 1 << 54;
9205 const TRBSR_EL1 = 1 << 55;
9207 const TRBTRG_EL1 = 1 << 56;
9209 const PMUSERENR_EL0 = 1 << 57;
9211 const PMCEIDN_EL0 = 1 << 58;
9213 const NBRBIDR = 1 << 59;
9215 const NBRBCTL = 1 << 60;
9217 const NBRBDATA = 1 << 61;
9219 const NPMSNEVFR_EL1 = 1 << 62;
9221 const PMBIDR_EL1 = 1 << 63;
9223 }
9224}
9225
9226#[cfg(feature = "el2")]
9227impl HdfgrtrEl2 {
9228 pub const DBGBCRN_EL1_SHIFT: u32 = 0;
9230 pub const DBGBVRN_EL1_SHIFT: u32 = 1;
9232 pub const DBGWCRN_EL1_SHIFT: u32 = 2;
9234 pub const DBGWVRN_EL1_SHIFT: u32 = 3;
9236 pub const MDSCR_EL1_SHIFT: u32 = 4;
9238 pub const DBGCLAIM_SHIFT: u32 = 5;
9240 pub const DBGAUTHSTATUS_EL1_SHIFT: u32 = 6;
9242 pub const DBGPRCR_EL1_SHIFT: u32 = 7;
9244 pub const OSLSR_EL1_SHIFT: u32 = 9;
9246 pub const OSECCR_EL1_SHIFT: u32 = 10;
9248 pub const OSDLR_EL1_SHIFT: u32 = 11;
9250 pub const PMEVCNTRN_EL0_SHIFT: u32 = 12;
9252 pub const PMEVTYPERN_EL0_SHIFT: u32 = 13;
9254 pub const PMCCFILTR_EL0_SHIFT: u32 = 14;
9256 pub const PMCCNTR_EL0_SHIFT: u32 = 15;
9258 pub const PMCNTEN_SHIFT: u32 = 16;
9260 pub const PMINTEN_SHIFT: u32 = 17;
9262 pub const PMOVS_SHIFT: u32 = 18;
9264 pub const PMSELR_EL0_SHIFT: u32 = 19;
9266 pub const PMMIR_EL1_SHIFT: u32 = 22;
9268 pub const PMBLIMITR_EL1_SHIFT: u32 = 23;
9270 pub const PMBPTR_EL1_SHIFT: u32 = 24;
9272 pub const PMBSR_EL1_SHIFT: u32 = 25;
9274 pub const PMSCR_EL1_SHIFT: u32 = 26;
9276 pub const PMSEVFR_EL1_SHIFT: u32 = 27;
9278 pub const PMSFCR_EL1_SHIFT: u32 = 28;
9280 pub const PMSICR_EL1_SHIFT: u32 = 29;
9282 pub const PMSIDR_EL1_SHIFT: u32 = 30;
9284 pub const PMSIRR_EL1_SHIFT: u32 = 31;
9286 pub const PMSLATFR_EL1_SHIFT: u32 = 32;
9288 pub const TRC_SHIFT: u32 = 33;
9290 pub const TRCAUTHSTATUS_SHIFT: u32 = 34;
9292 pub const TRCAUXCTLR_SHIFT: u32 = 35;
9294 pub const TRCCLAIM_SHIFT: u32 = 36;
9296 pub const TRCCNTVRN_SHIFT: u32 = 37;
9298 pub const TRCID_SHIFT: u32 = 40;
9300 pub const TRCIMSPECN_SHIFT: u32 = 41;
9302 pub const TRCOSLSR_SHIFT: u32 = 43;
9304 pub const TRCPRGCTLR_SHIFT: u32 = 44;
9306 pub const TRCSEQSTR_SHIFT: u32 = 45;
9308 pub const TRCSSCSRN_SHIFT: u32 = 46;
9310 pub const TRCSTATR_SHIFT: u32 = 47;
9312 pub const TRCVICTLR_SHIFT: u32 = 48;
9314 pub const TRBBASER_EL1_SHIFT: u32 = 50;
9316 pub const TRBIDR_EL1_SHIFT: u32 = 51;
9318 pub const TRBLIMITR_EL1_SHIFT: u32 = 52;
9320 pub const TRBMAR_EL1_SHIFT: u32 = 53;
9322 pub const TRBPTR_EL1_SHIFT: u32 = 54;
9324 pub const TRBSR_EL1_SHIFT: u32 = 55;
9326 pub const TRBTRG_EL1_SHIFT: u32 = 56;
9328 pub const PMUSERENR_EL0_SHIFT: u32 = 57;
9330 pub const PMCEIDN_EL0_SHIFT: u32 = 58;
9332 pub const NBRBIDR_SHIFT: u32 = 59;
9334 pub const NBRBCTL_SHIFT: u32 = 60;
9336 pub const NBRBDATA_SHIFT: u32 = 61;
9338 pub const NPMSNEVFR_EL1_SHIFT: u32 = 62;
9340 pub const PMBIDR_EL1_SHIFT: u32 = 63;
9342}
9343
9344#[cfg(feature = "el2")]
9345bitflags! {
9346 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9348 #[repr(transparent)]
9349 pub struct Hdfgwtr2El2: u64 {
9350 const NPMECR_EL1 = 1 << 0;
9352 const NPMIAR_EL1 = 1 << 1;
9354 const NPMICNTR_EL0 = 1 << 2;
9356 const NPMICFILTR_EL0 = 1 << 3;
9358 const NPMUACR_EL1 = 1 << 4;
9360 const NMDSELR_EL1 = 1 << 5;
9362 const NPMSSCR_EL1 = 1 << 7;
9364 const NSPMEVCNTRN_EL0 = 1 << 8;
9366 const NSPMEVTYPERN_EL0 = 1 << 9;
9368 const NSPMSELR_EL0 = 1 << 10;
9370 const NSPMCNTEN = 1 << 11;
9372 const NSPMINTEN = 1 << 12;
9374 const NSPMOVS = 1 << 13;
9376 const NSPMCR_EL0 = 1 << 14;
9378 const NSPMACCESSR_EL1 = 1 << 15;
9380 const NSPMSCR_EL1 = 1 << 16;
9382 const NPMSDSFR_EL1 = 1 << 19;
9384 const NTRCITECR_EL1 = 1 << 20;
9386 const NPMZR_EL0 = 1 << 21;
9388 const NTRBMPAM_EL1 = 1 << 22;
9390 const NMDSTEPOP_EL1 = 1 << 23;
9392 const NPMBMAR_EL1 = 1 << 24;
9394 }
9395}
9396
9397#[cfg(feature = "el2")]
9398impl Hdfgwtr2El2 {
9399 pub const NPMECR_EL1_SHIFT: u32 = 0;
9401 pub const NPMIAR_EL1_SHIFT: u32 = 1;
9403 pub const NPMICNTR_EL0_SHIFT: u32 = 2;
9405 pub const NPMICFILTR_EL0_SHIFT: u32 = 3;
9407 pub const NPMUACR_EL1_SHIFT: u32 = 4;
9409 pub const NMDSELR_EL1_SHIFT: u32 = 5;
9411 pub const NPMSSCR_EL1_SHIFT: u32 = 7;
9413 pub const NSPMEVCNTRN_EL0_SHIFT: u32 = 8;
9415 pub const NSPMEVTYPERN_EL0_SHIFT: u32 = 9;
9417 pub const NSPMSELR_EL0_SHIFT: u32 = 10;
9419 pub const NSPMCNTEN_SHIFT: u32 = 11;
9421 pub const NSPMINTEN_SHIFT: u32 = 12;
9423 pub const NSPMOVS_SHIFT: u32 = 13;
9425 pub const NSPMCR_EL0_SHIFT: u32 = 14;
9427 pub const NSPMACCESSR_EL1_SHIFT: u32 = 15;
9429 pub const NSPMSCR_EL1_SHIFT: u32 = 16;
9431 pub const NPMSDSFR_EL1_SHIFT: u32 = 19;
9433 pub const NTRCITECR_EL1_SHIFT: u32 = 20;
9435 pub const NPMZR_EL0_SHIFT: u32 = 21;
9437 pub const NTRBMPAM_EL1_SHIFT: u32 = 22;
9439 pub const NMDSTEPOP_EL1_SHIFT: u32 = 23;
9441 pub const NPMBMAR_EL1_SHIFT: u32 = 24;
9443}
9444
9445#[cfg(feature = "el2")]
9446bitflags! {
9447 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9449 #[repr(transparent)]
9450 pub struct HdfgwtrEl2: u64 {
9451 const DBGBCRN_EL1 = 1 << 0;
9453 const DBGBVRN_EL1 = 1 << 1;
9455 const DBGWCRN_EL1 = 1 << 2;
9457 const DBGWVRN_EL1 = 1 << 3;
9459 const MDSCR_EL1 = 1 << 4;
9461 const DBGCLAIM = 1 << 5;
9463 const DBGPRCR_EL1 = 1 << 7;
9465 const OSLAR_EL1 = 1 << 8;
9467 const OSECCR_EL1 = 1 << 10;
9469 const OSDLR_EL1 = 1 << 11;
9471 const PMEVCNTRN_EL0 = 1 << 12;
9473 const PMEVTYPERN_EL0 = 1 << 13;
9475 const PMCCFILTR_EL0 = 1 << 14;
9477 const PMCCNTR_EL0 = 1 << 15;
9479 const PMCNTEN = 1 << 16;
9481 const PMINTEN = 1 << 17;
9483 const PMOVS = 1 << 18;
9485 const PMSELR_EL0 = 1 << 19;
9487 const PMSWINC_EL0 = 1 << 20;
9489 const PMCR_EL0 = 1 << 21;
9491 const PMBLIMITR_EL1 = 1 << 23;
9493 const PMBPTR_EL1 = 1 << 24;
9495 const PMBSR_EL1 = 1 << 25;
9497 const PMSCR_EL1 = 1 << 26;
9499 const PMSEVFR_EL1 = 1 << 27;
9501 const PMSFCR_EL1 = 1 << 28;
9503 const PMSICR_EL1 = 1 << 29;
9505 const PMSIRR_EL1 = 1 << 31;
9507 const PMSLATFR_EL1 = 1 << 32;
9509 const TRC = 1 << 33;
9511 const TRCAUXCTLR = 1 << 35;
9513 const TRCCLAIM = 1 << 36;
9515 const TRCCNTVRN = 1 << 37;
9517 const TRCIMSPECN = 1 << 41;
9519 const TRCOSLAR = 1 << 42;
9521 const TRCPRGCTLR = 1 << 44;
9523 const TRCSEQSTR = 1 << 45;
9525 const TRCSSCSRN = 1 << 46;
9527 const TRCVICTLR = 1 << 48;
9529 const TRFCR_EL1 = 1 << 49;
9531 const TRBBASER_EL1 = 1 << 50;
9533 const TRBLIMITR_EL1 = 1 << 52;
9535 const TRBMAR_EL1 = 1 << 53;
9537 const TRBPTR_EL1 = 1 << 54;
9539 const TRBSR_EL1 = 1 << 55;
9541 const TRBTRG_EL1 = 1 << 56;
9543 const PMUSERENR_EL0 = 1 << 57;
9545 const NBRBCTL = 1 << 60;
9547 const NBRBDATA = 1 << 61;
9549 const NPMSNEVFR_EL1 = 1 << 62;
9551 }
9552}
9553
9554#[cfg(feature = "el2")]
9555impl HdfgwtrEl2 {
9556 pub const DBGBCRN_EL1_SHIFT: u32 = 0;
9558 pub const DBGBVRN_EL1_SHIFT: u32 = 1;
9560 pub const DBGWCRN_EL1_SHIFT: u32 = 2;
9562 pub const DBGWVRN_EL1_SHIFT: u32 = 3;
9564 pub const MDSCR_EL1_SHIFT: u32 = 4;
9566 pub const DBGCLAIM_SHIFT: u32 = 5;
9568 pub const DBGPRCR_EL1_SHIFT: u32 = 7;
9570 pub const OSLAR_EL1_SHIFT: u32 = 8;
9572 pub const OSECCR_EL1_SHIFT: u32 = 10;
9574 pub const OSDLR_EL1_SHIFT: u32 = 11;
9576 pub const PMEVCNTRN_EL0_SHIFT: u32 = 12;
9578 pub const PMEVTYPERN_EL0_SHIFT: u32 = 13;
9580 pub const PMCCFILTR_EL0_SHIFT: u32 = 14;
9582 pub const PMCCNTR_EL0_SHIFT: u32 = 15;
9584 pub const PMCNTEN_SHIFT: u32 = 16;
9586 pub const PMINTEN_SHIFT: u32 = 17;
9588 pub const PMOVS_SHIFT: u32 = 18;
9590 pub const PMSELR_EL0_SHIFT: u32 = 19;
9592 pub const PMSWINC_EL0_SHIFT: u32 = 20;
9594 pub const PMCR_EL0_SHIFT: u32 = 21;
9596 pub const PMBLIMITR_EL1_SHIFT: u32 = 23;
9598 pub const PMBPTR_EL1_SHIFT: u32 = 24;
9600 pub const PMBSR_EL1_SHIFT: u32 = 25;
9602 pub const PMSCR_EL1_SHIFT: u32 = 26;
9604 pub const PMSEVFR_EL1_SHIFT: u32 = 27;
9606 pub const PMSFCR_EL1_SHIFT: u32 = 28;
9608 pub const PMSICR_EL1_SHIFT: u32 = 29;
9610 pub const PMSIRR_EL1_SHIFT: u32 = 31;
9612 pub const PMSLATFR_EL1_SHIFT: u32 = 32;
9614 pub const TRC_SHIFT: u32 = 33;
9616 pub const TRCAUXCTLR_SHIFT: u32 = 35;
9618 pub const TRCCLAIM_SHIFT: u32 = 36;
9620 pub const TRCCNTVRN_SHIFT: u32 = 37;
9622 pub const TRCIMSPECN_SHIFT: u32 = 41;
9624 pub const TRCOSLAR_SHIFT: u32 = 42;
9626 pub const TRCPRGCTLR_SHIFT: u32 = 44;
9628 pub const TRCSEQSTR_SHIFT: u32 = 45;
9630 pub const TRCSSCSRN_SHIFT: u32 = 46;
9632 pub const TRCVICTLR_SHIFT: u32 = 48;
9634 pub const TRFCR_EL1_SHIFT: u32 = 49;
9636 pub const TRBBASER_EL1_SHIFT: u32 = 50;
9638 pub const TRBLIMITR_EL1_SHIFT: u32 = 52;
9640 pub const TRBMAR_EL1_SHIFT: u32 = 53;
9642 pub const TRBPTR_EL1_SHIFT: u32 = 54;
9644 pub const TRBSR_EL1_SHIFT: u32 = 55;
9646 pub const TRBTRG_EL1_SHIFT: u32 = 56;
9648 pub const PMUSERENR_EL0_SHIFT: u32 = 57;
9650 pub const NBRBCTL_SHIFT: u32 = 60;
9652 pub const NBRBDATA_SHIFT: u32 = 61;
9654 pub const NPMSNEVFR_EL1_SHIFT: u32 = 62;
9656}
9657
9658#[cfg(feature = "el2")]
9659bitflags! {
9660 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9662 #[repr(transparent)]
9663 pub struct Hfgitr2El2: u64 {
9664 const TSBCSYNC = 1 << 0;
9666 const NDCCIVAPS = 1 << 1;
9668 const PLBIPERME1OS = 1 << 2;
9670 const PLBIASIDE1OS = 1 << 3;
9672 const PLBIVMALLE1OS = 1 << 4;
9674 const PLBIPERME1IS = 1 << 5;
9676 const PLBIASIDE1IS = 1 << 6;
9678 const PLBIVMALLE1IS = 1 << 7;
9680 const PLBIPERME1 = 1 << 8;
9682 const PLBIASIDE1 = 1 << 9;
9684 const PLBIVMALLE1 = 1 << 10;
9686 const PLBIPERMAE1OS = 1 << 11;
9688 const PLBIPERMAE1IS = 1 << 12;
9690 const PLBIPERMAE1 = 1 << 13;
9692 const DCGBVA = 1 << 14;
9694 }
9695}
9696
9697#[cfg(feature = "el2")]
9698impl Hfgitr2El2 {
9699 pub const TSBCSYNC_SHIFT: u32 = 0;
9701 pub const NDCCIVAPS_SHIFT: u32 = 1;
9703 pub const PLBIPERME1OS_SHIFT: u32 = 2;
9705 pub const PLBIASIDE1OS_SHIFT: u32 = 3;
9707 pub const PLBIVMALLE1OS_SHIFT: u32 = 4;
9709 pub const PLBIPERME1IS_SHIFT: u32 = 5;
9711 pub const PLBIASIDE1IS_SHIFT: u32 = 6;
9713 pub const PLBIVMALLE1IS_SHIFT: u32 = 7;
9715 pub const PLBIPERME1_SHIFT: u32 = 8;
9717 pub const PLBIASIDE1_SHIFT: u32 = 9;
9719 pub const PLBIVMALLE1_SHIFT: u32 = 10;
9721 pub const PLBIPERMAE1OS_SHIFT: u32 = 11;
9723 pub const PLBIPERMAE1IS_SHIFT: u32 = 12;
9725 pub const PLBIPERMAE1_SHIFT: u32 = 13;
9727 pub const DCGBVA_SHIFT: u32 = 14;
9729}
9730
9731#[cfg(feature = "el2")]
9732bitflags! {
9733 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
9735 #[repr(transparent)]
9736 pub struct HfgitrEl2: u64 {
9737 const ICIALLUIS = 1 << 0;
9739 const ICIALLU = 1 << 1;
9741 const ICIVAU = 1 << 2;
9743 const DCIVAC = 1 << 3;
9745 const DCISW = 1 << 4;
9747 const DCCSW = 1 << 5;
9749 const DCCISW = 1 << 6;
9751 const DCCVAU = 1 << 7;
9753 const DCCVAP = 1 << 8;
9755 const DCCVADP = 1 << 9;
9757 const DCCIVAC = 1 << 10;
9759 const DCZVA = 1 << 11;
9761 const ATS1E1R = 1 << 12;
9763 const ATS1E1W = 1 << 13;
9765 const ATS1E0R = 1 << 14;
9767 const ATS1E0W = 1 << 15;
9769 const ATS1E1RP = 1 << 16;
9771 const ATS1E1WP = 1 << 17;
9773 const TLBIVMALLE1OS = 1 << 18;
9775 const TLBIVAE1OS = 1 << 19;
9777 const TLBIASIDE1OS = 1 << 20;
9779 const TLBIVAAE1OS = 1 << 21;
9781 const TLBIVALE1OS = 1 << 22;
9783 const TLBIVAALE1OS = 1 << 23;
9785 const TLBIRVAE1OS = 1 << 24;
9787 const TLBIRVAAE1OS = 1 << 25;
9789 const TLBIRVALE1OS = 1 << 26;
9791 const TLBIRVAALE1OS = 1 << 27;
9793 const TLBIVMALLE1IS = 1 << 28;
9795 const TLBIVAE1IS = 1 << 29;
9797 const TLBIASIDE1IS = 1 << 30;
9799 const TLBIVAAE1IS = 1 << 31;
9801 const TLBIVALE1IS = 1 << 32;
9803 const TLBIVAALE1IS = 1 << 33;
9805 const TLBIRVAE1IS = 1 << 34;
9807 const TLBIRVAAE1IS = 1 << 35;
9809 const TLBIRVALE1IS = 1 << 36;
9811 const TLBIRVAALE1IS = 1 << 37;
9813 const TLBIRVAE1 = 1 << 38;
9815 const TLBIRVAAE1 = 1 << 39;
9817 const TLBIRVALE1 = 1 << 40;
9819 const TLBIRVAALE1 = 1 << 41;
9821 const TLBIVMALLE1 = 1 << 42;
9823 const TLBIVAE1 = 1 << 43;
9825 const TLBIASIDE1 = 1 << 44;
9827 const TLBIVAAE1 = 1 << 45;
9829 const TLBIVALE1 = 1 << 46;
9831 const TLBIVAALE1 = 1 << 47;
9833 const CFPRCTX = 1 << 48;
9835 const DVPRCTX = 1 << 49;
9837 const CPPRCTX = 1 << 50;
9839 const ERET = 1 << 51;
9841 const SVC_EL0 = 1 << 52;
9843 const SVC_EL1 = 1 << 53;
9845 const DCCVAC = 1 << 54;
9847 const NBRBINJ = 1 << 55;
9849 const NBRBIALL = 1 << 56;
9851 const NGCSPUSHM_EL1 = 1 << 57;
9853 const NGCSSTR_EL1 = 1 << 58;
9855 const NGCSEPP = 1 << 59;
9857 const COSPRCTX = 1 << 60;
9859 const ATS1E1A = 1 << 62;
9861 const PSBCSYNC = 1 << 63;
9863 }
9864}
9865
9866#[cfg(feature = "el2")]
9867impl HfgitrEl2 {
9868 pub const ICIALLUIS_SHIFT: u32 = 0;
9870 pub const ICIALLU_SHIFT: u32 = 1;
9872 pub const ICIVAU_SHIFT: u32 = 2;
9874 pub const DCIVAC_SHIFT: u32 = 3;
9876 pub const DCISW_SHIFT: u32 = 4;
9878 pub const DCCSW_SHIFT: u32 = 5;
9880 pub const DCCISW_SHIFT: u32 = 6;
9882 pub const DCCVAU_SHIFT: u32 = 7;
9884 pub const DCCVAP_SHIFT: u32 = 8;
9886 pub const DCCVADP_SHIFT: u32 = 9;
9888 pub const DCCIVAC_SHIFT: u32 = 10;
9890 pub const DCZVA_SHIFT: u32 = 11;
9892 pub const ATS1E1R_SHIFT: u32 = 12;
9894 pub const ATS1E1W_SHIFT: u32 = 13;
9896 pub const ATS1E0R_SHIFT: u32 = 14;
9898 pub const ATS1E0W_SHIFT: u32 = 15;
9900 pub const ATS1E1RP_SHIFT: u32 = 16;
9902 pub const ATS1E1WP_SHIFT: u32 = 17;
9904 pub const TLBIVMALLE1OS_SHIFT: u32 = 18;
9906 pub const TLBIVAE1OS_SHIFT: u32 = 19;
9908 pub const TLBIASIDE1OS_SHIFT: u32 = 20;
9910 pub const TLBIVAAE1OS_SHIFT: u32 = 21;
9912 pub const TLBIVALE1OS_SHIFT: u32 = 22;
9914 pub const TLBIVAALE1OS_SHIFT: u32 = 23;
9916 pub const TLBIRVAE1OS_SHIFT: u32 = 24;
9918 pub const TLBIRVAAE1OS_SHIFT: u32 = 25;
9920 pub const TLBIRVALE1OS_SHIFT: u32 = 26;
9922 pub const TLBIRVAALE1OS_SHIFT: u32 = 27;
9924 pub const TLBIVMALLE1IS_SHIFT: u32 = 28;
9926 pub const TLBIVAE1IS_SHIFT: u32 = 29;
9928 pub const TLBIASIDE1IS_SHIFT: u32 = 30;
9930 pub const TLBIVAAE1IS_SHIFT: u32 = 31;
9932 pub const TLBIVALE1IS_SHIFT: u32 = 32;
9934 pub const TLBIVAALE1IS_SHIFT: u32 = 33;
9936 pub const TLBIRVAE1IS_SHIFT: u32 = 34;
9938 pub const TLBIRVAAE1IS_SHIFT: u32 = 35;
9940 pub const TLBIRVALE1IS_SHIFT: u32 = 36;
9942 pub const TLBIRVAALE1IS_SHIFT: u32 = 37;
9944 pub const TLBIRVAE1_SHIFT: u32 = 38;
9946 pub const TLBIRVAAE1_SHIFT: u32 = 39;
9948 pub const TLBIRVALE1_SHIFT: u32 = 40;
9950 pub const TLBIRVAALE1_SHIFT: u32 = 41;
9952 pub const TLBIVMALLE1_SHIFT: u32 = 42;
9954 pub const TLBIVAE1_SHIFT: u32 = 43;
9956 pub const TLBIASIDE1_SHIFT: u32 = 44;
9958 pub const TLBIVAAE1_SHIFT: u32 = 45;
9960 pub const TLBIVALE1_SHIFT: u32 = 46;
9962 pub const TLBIVAALE1_SHIFT: u32 = 47;
9964 pub const CFPRCTX_SHIFT: u32 = 48;
9966 pub const DVPRCTX_SHIFT: u32 = 49;
9968 pub const CPPRCTX_SHIFT: u32 = 50;
9970 pub const ERET_SHIFT: u32 = 51;
9972 pub const SVC_EL0_SHIFT: u32 = 52;
9974 pub const SVC_EL1_SHIFT: u32 = 53;
9976 pub const DCCVAC_SHIFT: u32 = 54;
9978 pub const NBRBINJ_SHIFT: u32 = 55;
9980 pub const NBRBIALL_SHIFT: u32 = 56;
9982 pub const NGCSPUSHM_EL1_SHIFT: u32 = 57;
9984 pub const NGCSSTR_EL1_SHIFT: u32 = 58;
9986 pub const NGCSEPP_SHIFT: u32 = 59;
9988 pub const COSPRCTX_SHIFT: u32 = 60;
9990 pub const ATS1E1A_SHIFT: u32 = 62;
9992 pub const PSBCSYNC_SHIFT: u32 = 63;
9994}
9995
9996#[cfg(feature = "el2")]
9997bitflags! {
9998 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10000 #[repr(transparent)]
10001 pub struct Hfgrtr2El2: u64 {
10002 const NPFAR_EL1 = 1 << 0;
10004 const NERXGSR_EL1 = 1 << 1;
10006 const NRCWSMASK_EL1 = 1 << 2;
10008 const NCPACRMASK_EL1 = 1 << 3;
10010 const NSCTLRMASK_EL1 = 1 << 4;
10012 const NSCTLR2MASK_EL1 = 1 << 5;
10014 const NTCRMASK_EL1 = 1 << 6;
10016 const NTCR2MASK_EL1 = 1 << 7;
10018 const NCPACRALIAS_EL1 = 1 << 8;
10020 const NSCTLRALIAS_EL1 = 1 << 9;
10022 const NSCTLR2ALIAS_EL1 = 1 << 10;
10024 const NTCRALIAS_EL1 = 1 << 11;
10026 const NTCR2ALIAS_EL1 = 1 << 12;
10028 const NACTLRMASK_EL1 = 1 << 13;
10030 const NACTLRALIAS_EL1 = 1 << 14;
10032 const NTINDEX_EL0 = 1 << 15;
10034 const NTINDEX_EL1 = 1 << 16;
10036 const NSTINDEX_EL1 = 1 << 17;
10038 const NTTTBRP_EL1 = 1 << 20;
10040 const NTTTBRU_EL1 = 1 << 21;
10042 const NIRTBRP_EL1 = 1 << 22;
10044 const NIRTBRU_EL1 = 1 << 23;
10046 const NDPOTBR1_EL1 = 1 << 24;
10048 const NDPOTBR0_EL1 = 1 << 25;
10050 const NTPMIN1_EL1 = 1 << 26;
10052 const NTPMIN0_EL1 = 1 << 27;
10054 const NTPMIN1_EL0 = 1 << 28;
10056 const NTPMIN0_EL0 = 1 << 29;
10058 const NTLBIDIDR_EL1 = 1 << 30;
10060 const TFSR_EL1 = 1 << 33;
10062 const RGSR_EL1 = 1 << 34;
10064 const GCR_EL1 = 1 << 35;
10066 const NTPIDR3_EL0 = 1 << 36;
10068 const NTPIDR3_EL1 = 1 << 37;
10070 }
10071}
10072
10073#[cfg(feature = "el2")]
10074impl Hfgrtr2El2 {
10075 pub const NPFAR_EL1_SHIFT: u32 = 0;
10077 pub const NERXGSR_EL1_SHIFT: u32 = 1;
10079 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
10081 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
10083 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
10085 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
10087 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
10089 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
10091 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
10093 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
10095 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
10097 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
10099 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
10101 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
10103 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
10105 pub const NTINDEX_EL0_SHIFT: u32 = 15;
10107 pub const NTINDEX_EL1_SHIFT: u32 = 16;
10109 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
10111 pub const NFGDTN_EL1_SHIFT: u32 = 18;
10113 pub const NFGDTN_EL1_MASK: u64 = 0b11;
10115 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
10117 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
10119 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
10121 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
10123 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
10125 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
10127 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
10129 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
10131 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
10133 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
10135 pub const NTLBIDIDR_EL1_SHIFT: u32 = 30;
10137 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
10139 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
10141 pub const TFSR_EL1_SHIFT: u32 = 33;
10143 pub const RGSR_EL1_SHIFT: u32 = 34;
10145 pub const GCR_EL1_SHIFT: u32 = 35;
10147 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
10149 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
10151
10152 pub const fn nfgdtn_el1(self) -> u8 {
10154 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
10155 }
10156
10157 pub const fn set_nfgdtn_el1(&mut self, value: u8) {
10159 let offset = Self::NFGDTN_EL1_SHIFT;
10160 assert!(value & (Self::NFGDTN_EL1_MASK as u8) == value);
10161 *self = Self::from_bits_retain(
10162 (self.bits() & !(Self::NFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
10163 );
10164 }
10165
10166 pub const fn with_nfgdtn_el1(mut self, value: u8) -> Self {
10168 self.set_nfgdtn_el1(value);
10169 self
10170 }
10171
10172 pub const fn nafgdtn_el1(self) -> u8 {
10174 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
10175 }
10176
10177 pub const fn set_nafgdtn_el1(&mut self, value: u8) {
10179 let offset = Self::NAFGDTN_EL1_SHIFT;
10180 assert!(value & (Self::NAFGDTN_EL1_MASK as u8) == value);
10181 *self = Self::from_bits_retain(
10182 (self.bits() & !(Self::NAFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
10183 );
10184 }
10185
10186 pub const fn with_nafgdtn_el1(mut self, value: u8) -> Self {
10188 self.set_nafgdtn_el1(value);
10189 self
10190 }
10191}
10192
10193#[cfg(feature = "el2")]
10194bitflags! {
10195 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10197 #[repr(transparent)]
10198 pub struct HfgrtrEl2: u64 {
10199 const AFSR0_EL1 = 1 << 0;
10201 const AFSR1_EL1 = 1 << 1;
10203 const AIDR_EL1 = 1 << 2;
10205 const AMAIR_EL1 = 1 << 3;
10207 const APDAKEY = 1 << 4;
10209 const APDBKEY = 1 << 5;
10211 const APGAKEY = 1 << 6;
10213 const APIAKEY = 1 << 7;
10215 const APIBKEY = 1 << 8;
10217 const CCSIDR_EL1 = 1 << 9;
10219 const CLIDR_EL1 = 1 << 10;
10221 const CONTEXTIDR_EL1 = 1 << 11;
10223 const CPACR_EL1 = 1 << 12;
10225 const CSSELR_EL1 = 1 << 13;
10227 const CTR_EL0 = 1 << 14;
10229 const DCZID_EL0 = 1 << 15;
10231 const ESR_EL1 = 1 << 16;
10233 const FAR_EL1 = 1 << 17;
10235 const ISR_EL1 = 1 << 18;
10237 const LORC_EL1 = 1 << 19;
10239 const LOREA_EL1 = 1 << 20;
10241 const LORID_EL1 = 1 << 21;
10243 const LORN_EL1 = 1 << 22;
10245 const LORSA_EL1 = 1 << 23;
10247 const MAIR_EL1 = 1 << 24;
10249 const MIDR_EL1 = 1 << 25;
10251 const MPIDR_EL1 = 1 << 26;
10253 const PAR_EL1 = 1 << 27;
10255 const REVIDR_EL1 = 1 << 28;
10257 const SCTLR_EL1 = 1 << 29;
10259 const SCXTNUM_EL1 = 1 << 30;
10261 const SCXTNUM_EL0 = 1 << 31;
10263 const TCR_EL1 = 1 << 32;
10265 const TPIDR_EL1 = 1 << 33;
10267 const TPIDRRO_EL0 = 1 << 34;
10269 const TPIDR_EL0 = 1 << 35;
10271 const TTBR0_EL1 = 1 << 36;
10273 const TTBR1_EL1 = 1 << 37;
10275 const VBAR_EL1 = 1 << 38;
10277 const ICC_IGRPENN_EL1 = 1 << 39;
10279 const ERRIDR_EL1 = 1 << 40;
10281 const ERRSELR_EL1 = 1 << 41;
10283 const ERXFR_EL1 = 1 << 42;
10285 const ERXCTLR_EL1 = 1 << 43;
10287 const ERXSTATUS_EL1 = 1 << 44;
10289 const ERXMISCN_EL1 = 1 << 45;
10291 const ERXPFGF_EL1 = 1 << 46;
10293 const ERXPFGCTL_EL1 = 1 << 47;
10295 const ERXPFGCDN_EL1 = 1 << 48;
10297 const ERXADDR_EL1 = 1 << 49;
10299 const NACCDATA_EL1 = 1 << 50;
10301 const NGCS_EL0 = 1 << 52;
10303 const NGCS_EL1 = 1 << 53;
10305 const NSMPRI_EL1 = 1 << 54;
10307 const NTPIDR2_EL0 = 1 << 55;
10309 const NRCWMASK_EL1 = 1 << 56;
10311 const NPIRE0_EL1 = 1 << 57;
10313 const NPIR_EL1 = 1 << 58;
10315 const NPOR_EL0 = 1 << 59;
10317 const NPOR_EL1 = 1 << 60;
10319 const NS2POR_EL1 = 1 << 61;
10321 const NMAIR2_EL1 = 1 << 62;
10323 const NAMAIR2_EL1 = 1 << 63;
10325 }
10326}
10327
10328#[cfg(feature = "el2")]
10329impl HfgrtrEl2 {
10330 pub const AFSR0_EL1_SHIFT: u32 = 0;
10332 pub const AFSR1_EL1_SHIFT: u32 = 1;
10334 pub const AIDR_EL1_SHIFT: u32 = 2;
10336 pub const AMAIR_EL1_SHIFT: u32 = 3;
10338 pub const APDAKEY_SHIFT: u32 = 4;
10340 pub const APDBKEY_SHIFT: u32 = 5;
10342 pub const APGAKEY_SHIFT: u32 = 6;
10344 pub const APIAKEY_SHIFT: u32 = 7;
10346 pub const APIBKEY_SHIFT: u32 = 8;
10348 pub const CCSIDR_EL1_SHIFT: u32 = 9;
10350 pub const CLIDR_EL1_SHIFT: u32 = 10;
10352 pub const CONTEXTIDR_EL1_SHIFT: u32 = 11;
10354 pub const CPACR_EL1_SHIFT: u32 = 12;
10356 pub const CSSELR_EL1_SHIFT: u32 = 13;
10358 pub const CTR_EL0_SHIFT: u32 = 14;
10360 pub const DCZID_EL0_SHIFT: u32 = 15;
10362 pub const ESR_EL1_SHIFT: u32 = 16;
10364 pub const FAR_EL1_SHIFT: u32 = 17;
10366 pub const ISR_EL1_SHIFT: u32 = 18;
10368 pub const LORC_EL1_SHIFT: u32 = 19;
10370 pub const LOREA_EL1_SHIFT: u32 = 20;
10372 pub const LORID_EL1_SHIFT: u32 = 21;
10374 pub const LORN_EL1_SHIFT: u32 = 22;
10376 pub const LORSA_EL1_SHIFT: u32 = 23;
10378 pub const MAIR_EL1_SHIFT: u32 = 24;
10380 pub const MIDR_EL1_SHIFT: u32 = 25;
10382 pub const MPIDR_EL1_SHIFT: u32 = 26;
10384 pub const PAR_EL1_SHIFT: u32 = 27;
10386 pub const REVIDR_EL1_SHIFT: u32 = 28;
10388 pub const SCTLR_EL1_SHIFT: u32 = 29;
10390 pub const SCXTNUM_EL1_SHIFT: u32 = 30;
10392 pub const SCXTNUM_EL0_SHIFT: u32 = 31;
10394 pub const TCR_EL1_SHIFT: u32 = 32;
10396 pub const TPIDR_EL1_SHIFT: u32 = 33;
10398 pub const TPIDRRO_EL0_SHIFT: u32 = 34;
10400 pub const TPIDR_EL0_SHIFT: u32 = 35;
10402 pub const TTBR0_EL1_SHIFT: u32 = 36;
10404 pub const TTBR1_EL1_SHIFT: u32 = 37;
10406 pub const VBAR_EL1_SHIFT: u32 = 38;
10408 pub const ICC_IGRPENN_EL1_SHIFT: u32 = 39;
10410 pub const ERRIDR_EL1_SHIFT: u32 = 40;
10412 pub const ERRSELR_EL1_SHIFT: u32 = 41;
10414 pub const ERXFR_EL1_SHIFT: u32 = 42;
10416 pub const ERXCTLR_EL1_SHIFT: u32 = 43;
10418 pub const ERXSTATUS_EL1_SHIFT: u32 = 44;
10420 pub const ERXMISCN_EL1_SHIFT: u32 = 45;
10422 pub const ERXPFGF_EL1_SHIFT: u32 = 46;
10424 pub const ERXPFGCTL_EL1_SHIFT: u32 = 47;
10426 pub const ERXPFGCDN_EL1_SHIFT: u32 = 48;
10428 pub const ERXADDR_EL1_SHIFT: u32 = 49;
10430 pub const NACCDATA_EL1_SHIFT: u32 = 50;
10432 pub const NGCS_EL0_SHIFT: u32 = 52;
10434 pub const NGCS_EL1_SHIFT: u32 = 53;
10436 pub const NSMPRI_EL1_SHIFT: u32 = 54;
10438 pub const NTPIDR2_EL0_SHIFT: u32 = 55;
10440 pub const NRCWMASK_EL1_SHIFT: u32 = 56;
10442 pub const NPIRE0_EL1_SHIFT: u32 = 57;
10444 pub const NPIR_EL1_SHIFT: u32 = 58;
10446 pub const NPOR_EL0_SHIFT: u32 = 59;
10448 pub const NPOR_EL1_SHIFT: u32 = 60;
10450 pub const NS2POR_EL1_SHIFT: u32 = 61;
10452 pub const NMAIR2_EL1_SHIFT: u32 = 62;
10454 pub const NAMAIR2_EL1_SHIFT: u32 = 63;
10456}
10457
10458#[cfg(feature = "el2")]
10459bitflags! {
10460 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10462 #[repr(transparent)]
10463 pub struct Hfgwtr2El2: u64 {
10464 const NPFAR_EL1 = 1 << 0;
10466 const NRCWSMASK_EL1 = 1 << 2;
10468 const NCPACRMASK_EL1 = 1 << 3;
10470 const NSCTLRMASK_EL1 = 1 << 4;
10472 const NSCTLR2MASK_EL1 = 1 << 5;
10474 const NTCRMASK_EL1 = 1 << 6;
10476 const NTCR2MASK_EL1 = 1 << 7;
10478 const NCPACRALIAS_EL1 = 1 << 8;
10480 const NSCTLRALIAS_EL1 = 1 << 9;
10482 const NSCTLR2ALIAS_EL1 = 1 << 10;
10484 const NTCRALIAS_EL1 = 1 << 11;
10486 const NTCR2ALIAS_EL1 = 1 << 12;
10488 const NACTLRMASK_EL1 = 1 << 13;
10490 const NACTLRALIAS_EL1 = 1 << 14;
10492 const NTINDEX_EL0 = 1 << 15;
10494 const NTINDEX_EL1 = 1 << 16;
10496 const NSTINDEX_EL1 = 1 << 17;
10498 const NTTTBRP_EL1 = 1 << 20;
10500 const NTTTBRU_EL1 = 1 << 21;
10502 const NIRTBRP_EL1 = 1 << 22;
10504 const NIRTBRU_EL1 = 1 << 23;
10506 const NDPOTBR1_EL1 = 1 << 24;
10508 const NDPOTBR0_EL1 = 1 << 25;
10510 const NTPMIN1_EL1 = 1 << 26;
10512 const NTPMIN0_EL1 = 1 << 27;
10514 const NTPMIN1_EL0 = 1 << 28;
10516 const NTPMIN0_EL0 = 1 << 29;
10518 const TFSR_EL1 = 1 << 33;
10520 const RGSR_EL1 = 1 << 34;
10522 const GCR_EL1 = 1 << 35;
10524 const NTPIDR3_EL0 = 1 << 36;
10526 const NTPIDR3_EL1 = 1 << 37;
10528 }
10529}
10530
10531#[cfg(feature = "el2")]
10532impl Hfgwtr2El2 {
10533 pub const NPFAR_EL1_SHIFT: u32 = 0;
10535 pub const NRCWSMASK_EL1_SHIFT: u32 = 2;
10537 pub const NCPACRMASK_EL1_SHIFT: u32 = 3;
10539 pub const NSCTLRMASK_EL1_SHIFT: u32 = 4;
10541 pub const NSCTLR2MASK_EL1_SHIFT: u32 = 5;
10543 pub const NTCRMASK_EL1_SHIFT: u32 = 6;
10545 pub const NTCR2MASK_EL1_SHIFT: u32 = 7;
10547 pub const NCPACRALIAS_EL1_SHIFT: u32 = 8;
10549 pub const NSCTLRALIAS_EL1_SHIFT: u32 = 9;
10551 pub const NSCTLR2ALIAS_EL1_SHIFT: u32 = 10;
10553 pub const NTCRALIAS_EL1_SHIFT: u32 = 11;
10555 pub const NTCR2ALIAS_EL1_SHIFT: u32 = 12;
10557 pub const NACTLRMASK_EL1_SHIFT: u32 = 13;
10559 pub const NACTLRALIAS_EL1_SHIFT: u32 = 14;
10561 pub const NTINDEX_EL0_SHIFT: u32 = 15;
10563 pub const NTINDEX_EL1_SHIFT: u32 = 16;
10565 pub const NSTINDEX_EL1_SHIFT: u32 = 17;
10567 pub const NFGDTN_EL1_SHIFT: u32 = 18;
10569 pub const NFGDTN_EL1_MASK: u64 = 0b11;
10571 pub const NTTTBRP_EL1_SHIFT: u32 = 20;
10573 pub const NTTTBRU_EL1_SHIFT: u32 = 21;
10575 pub const NIRTBRP_EL1_SHIFT: u32 = 22;
10577 pub const NIRTBRU_EL1_SHIFT: u32 = 23;
10579 pub const NDPOTBR1_EL1_SHIFT: u32 = 24;
10581 pub const NDPOTBR0_EL1_SHIFT: u32 = 25;
10583 pub const NTPMIN1_EL1_SHIFT: u32 = 26;
10585 pub const NTPMIN0_EL1_SHIFT: u32 = 27;
10587 pub const NTPMIN1_EL0_SHIFT: u32 = 28;
10589 pub const NTPMIN0_EL0_SHIFT: u32 = 29;
10591 pub const NAFGDTN_EL1_SHIFT: u32 = 31;
10593 pub const NAFGDTN_EL1_MASK: u64 = 0b11;
10595 pub const TFSR_EL1_SHIFT: u32 = 33;
10597 pub const RGSR_EL1_SHIFT: u32 = 34;
10599 pub const GCR_EL1_SHIFT: u32 = 35;
10601 pub const NTPIDR3_EL0_SHIFT: u32 = 36;
10603 pub const NTPIDR3_EL1_SHIFT: u32 = 37;
10605
10606 pub const fn nfgdtn_el1(self) -> u8 {
10608 ((self.bits() >> Self::NFGDTN_EL1_SHIFT) & 0b11) as u8
10609 }
10610
10611 pub const fn set_nfgdtn_el1(&mut self, value: u8) {
10613 let offset = Self::NFGDTN_EL1_SHIFT;
10614 assert!(value & (Self::NFGDTN_EL1_MASK as u8) == value);
10615 *self = Self::from_bits_retain(
10616 (self.bits() & !(Self::NFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
10617 );
10618 }
10619
10620 pub const fn with_nfgdtn_el1(mut self, value: u8) -> Self {
10622 self.set_nfgdtn_el1(value);
10623 self
10624 }
10625
10626 pub const fn nafgdtn_el1(self) -> u8 {
10628 ((self.bits() >> Self::NAFGDTN_EL1_SHIFT) & 0b11) as u8
10629 }
10630
10631 pub const fn set_nafgdtn_el1(&mut self, value: u8) {
10633 let offset = Self::NAFGDTN_EL1_SHIFT;
10634 assert!(value & (Self::NAFGDTN_EL1_MASK as u8) == value);
10635 *self = Self::from_bits_retain(
10636 (self.bits() & !(Self::NAFGDTN_EL1_MASK << offset)) | ((value as u64) << offset),
10637 );
10638 }
10639
10640 pub const fn with_nafgdtn_el1(mut self, value: u8) -> Self {
10642 self.set_nafgdtn_el1(value);
10643 self
10644 }
10645}
10646
10647#[cfg(feature = "el2")]
10648bitflags! {
10649 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10651 #[repr(transparent)]
10652 pub struct HfgwtrEl2: u64 {
10653 const AFSR0_EL1 = 1 << 0;
10655 const AFSR1_EL1 = 1 << 1;
10657 const AMAIR_EL1 = 1 << 3;
10659 const APDAKEY = 1 << 4;
10661 const APDBKEY = 1 << 5;
10663 const APGAKEY = 1 << 6;
10665 const APIAKEY = 1 << 7;
10667 const APIBKEY = 1 << 8;
10669 const CONTEXTIDR_EL1 = 1 << 11;
10671 const CPACR_EL1 = 1 << 12;
10673 const CSSELR_EL1 = 1 << 13;
10675 const ESR_EL1 = 1 << 16;
10677 const FAR_EL1 = 1 << 17;
10679 const LORC_EL1 = 1 << 19;
10681 const LOREA_EL1 = 1 << 20;
10683 const LORN_EL1 = 1 << 22;
10685 const LORSA_EL1 = 1 << 23;
10687 const MAIR_EL1 = 1 << 24;
10689 const PAR_EL1 = 1 << 27;
10691 const SCTLR_EL1 = 1 << 29;
10693 const SCXTNUM_EL1 = 1 << 30;
10695 const SCXTNUM_EL0 = 1 << 31;
10697 const TCR_EL1 = 1 << 32;
10699 const TPIDR_EL1 = 1 << 33;
10701 const TPIDRRO_EL0 = 1 << 34;
10703 const TPIDR_EL0 = 1 << 35;
10705 const TTBR0_EL1 = 1 << 36;
10707 const TTBR1_EL1 = 1 << 37;
10709 const VBAR_EL1 = 1 << 38;
10711 const ICC_IGRPENN_EL1 = 1 << 39;
10713 const ERRSELR_EL1 = 1 << 41;
10715 const ERXCTLR_EL1 = 1 << 43;
10717 const ERXSTATUS_EL1 = 1 << 44;
10719 const ERXMISCN_EL1 = 1 << 45;
10721 const ERXPFGCTL_EL1 = 1 << 47;
10723 const ERXPFGCDN_EL1 = 1 << 48;
10725 const ERXADDR_EL1 = 1 << 49;
10727 const NACCDATA_EL1 = 1 << 50;
10729 const NGCS_EL0 = 1 << 52;
10731 const NGCS_EL1 = 1 << 53;
10733 const NSMPRI_EL1 = 1 << 54;
10735 const NTPIDR2_EL0 = 1 << 55;
10737 const NRCWMASK_EL1 = 1 << 56;
10739 const NPIRE0_EL1 = 1 << 57;
10741 const NPIR_EL1 = 1 << 58;
10743 const NPOR_EL0 = 1 << 59;
10745 const NPOR_EL1 = 1 << 60;
10747 const NS2POR_EL1 = 1 << 61;
10749 const NMAIR2_EL1 = 1 << 62;
10751 const NAMAIR2_EL1 = 1 << 63;
10753 }
10754}
10755
10756#[cfg(feature = "el2")]
10757impl HfgwtrEl2 {
10758 pub const AFSR0_EL1_SHIFT: u32 = 0;
10760 pub const AFSR1_EL1_SHIFT: u32 = 1;
10762 pub const AMAIR_EL1_SHIFT: u32 = 3;
10764 pub const APDAKEY_SHIFT: u32 = 4;
10766 pub const APDBKEY_SHIFT: u32 = 5;
10768 pub const APGAKEY_SHIFT: u32 = 6;
10770 pub const APIAKEY_SHIFT: u32 = 7;
10772 pub const APIBKEY_SHIFT: u32 = 8;
10774 pub const CONTEXTIDR_EL1_SHIFT: u32 = 11;
10776 pub const CPACR_EL1_SHIFT: u32 = 12;
10778 pub const CSSELR_EL1_SHIFT: u32 = 13;
10780 pub const ESR_EL1_SHIFT: u32 = 16;
10782 pub const FAR_EL1_SHIFT: u32 = 17;
10784 pub const LORC_EL1_SHIFT: u32 = 19;
10786 pub const LOREA_EL1_SHIFT: u32 = 20;
10788 pub const LORN_EL1_SHIFT: u32 = 22;
10790 pub const LORSA_EL1_SHIFT: u32 = 23;
10792 pub const MAIR_EL1_SHIFT: u32 = 24;
10794 pub const PAR_EL1_SHIFT: u32 = 27;
10796 pub const SCTLR_EL1_SHIFT: u32 = 29;
10798 pub const SCXTNUM_EL1_SHIFT: u32 = 30;
10800 pub const SCXTNUM_EL0_SHIFT: u32 = 31;
10802 pub const TCR_EL1_SHIFT: u32 = 32;
10804 pub const TPIDR_EL1_SHIFT: u32 = 33;
10806 pub const TPIDRRO_EL0_SHIFT: u32 = 34;
10808 pub const TPIDR_EL0_SHIFT: u32 = 35;
10810 pub const TTBR0_EL1_SHIFT: u32 = 36;
10812 pub const TTBR1_EL1_SHIFT: u32 = 37;
10814 pub const VBAR_EL1_SHIFT: u32 = 38;
10816 pub const ICC_IGRPENN_EL1_SHIFT: u32 = 39;
10818 pub const ERRSELR_EL1_SHIFT: u32 = 41;
10820 pub const ERXCTLR_EL1_SHIFT: u32 = 43;
10822 pub const ERXSTATUS_EL1_SHIFT: u32 = 44;
10824 pub const ERXMISCN_EL1_SHIFT: u32 = 45;
10826 pub const ERXPFGCTL_EL1_SHIFT: u32 = 47;
10828 pub const ERXPFGCDN_EL1_SHIFT: u32 = 48;
10830 pub const ERXADDR_EL1_SHIFT: u32 = 49;
10832 pub const NACCDATA_EL1_SHIFT: u32 = 50;
10834 pub const NGCS_EL0_SHIFT: u32 = 52;
10836 pub const NGCS_EL1_SHIFT: u32 = 53;
10838 pub const NSMPRI_EL1_SHIFT: u32 = 54;
10840 pub const NTPIDR2_EL0_SHIFT: u32 = 55;
10842 pub const NRCWMASK_EL1_SHIFT: u32 = 56;
10844 pub const NPIRE0_EL1_SHIFT: u32 = 57;
10846 pub const NPIR_EL1_SHIFT: u32 = 58;
10848 pub const NPOR_EL0_SHIFT: u32 = 59;
10850 pub const NPOR_EL1_SHIFT: u32 = 60;
10852 pub const NS2POR_EL1_SHIFT: u32 = 61;
10854 pub const NMAIR2_EL1_SHIFT: u32 = 62;
10856 pub const NAMAIR2_EL1_SHIFT: u32 = 63;
10858}
10859
10860bitflags! {
10861 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10863 #[repr(transparent)]
10864 pub struct Hifar: u32 {
10865 }
10866}
10867
10868impl Hifar {
10869 pub const VA_SHIFT: u32 = 0;
10871 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
10873
10874 pub const fn va(self) -> u32 {
10876 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
10877 }
10878
10879 pub const fn set_va(&mut self, value: u32) {
10881 let offset = Self::VA_SHIFT;
10882 assert!(value & (Self::VA_MASK as u32) == value);
10883 *self = Self::from_bits_retain(
10884 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
10885 );
10886 }
10887
10888 pub const fn with_va(mut self, value: u32) -> Self {
10890 self.set_va(value);
10891 self
10892 }
10893}
10894
10895bitflags! {
10896 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10898 #[repr(transparent)]
10899 pub struct Hmair0: u32 {
10900 }
10901}
10902
10903impl Hmair0 {
10904 pub const ATTR_SHIFT: u32 = 0;
10906 pub const ATTR_MASK: u32 = 0b11111111;
10908
10909 pub const fn attr(self, n: u32) -> u8 {
10911 assert!(n < 4);
10912 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
10913 }
10914
10915 pub const fn set_attr(&mut self, n: u32, value: u8) {
10917 assert!(n < 4);
10918 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
10919 assert!(value & (Self::ATTR_MASK as u8) == value);
10920 *self = Self::from_bits_retain(
10921 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
10922 );
10923 }
10924
10925 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
10927 self.set_attr(n, value);
10928 self
10929 }
10930}
10931
10932bitflags! {
10933 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10935 #[repr(transparent)]
10936 pub struct Hmair1: u32 {
10937 }
10938}
10939
10940impl Hmair1 {
10941 pub const ATTR_SHIFT: u32 = 0;
10943 pub const ATTR_MASK: u32 = 0b11111111;
10945
10946 pub const fn attr(self, n: u32) -> u8 {
10948 assert!(n >= 4 && n < 8);
10949 ((self.bits() >> (Self::ATTR_SHIFT + (n - 4) * 8)) & 0b11111111) as u8
10950 }
10951
10952 pub const fn set_attr(&mut self, n: u32, value: u8) {
10954 assert!(n >= 4 && n < 8);
10955 let offset = Self::ATTR_SHIFT + (n - 4) * 8;
10956 assert!(value & (Self::ATTR_MASK as u8) == value);
10957 *self = Self::from_bits_retain(
10958 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
10959 );
10960 }
10961
10962 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
10964 self.set_attr(n, value);
10965 self
10966 }
10967}
10968
10969bitflags! {
10970 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
10972 #[repr(transparent)]
10973 pub struct Hpfar: u32 {
10974 }
10975}
10976
10977impl Hpfar {
10978 pub const FIPA_39_12_SHIFT: u32 = 4;
10980 pub const FIPA_39_12_MASK: u32 = 0b1111111111111111111111111111;
10982
10983 pub const fn fipa_39_12(self) -> u32 {
10985 ((self.bits() >> Self::FIPA_39_12_SHIFT) & 0b1111111111111111111111111111) as u32
10986 }
10987
10988 pub const fn set_fipa_39_12(&mut self, value: u32) {
10990 let offset = Self::FIPA_39_12_SHIFT;
10991 assert!(value & (Self::FIPA_39_12_MASK as u32) == value);
10992 *self = Self::from_bits_retain(
10993 (self.bits() & !(Self::FIPA_39_12_MASK << offset)) | ((value as u32) << offset),
10994 );
10995 }
10996
10997 pub const fn with_fipa_39_12(mut self, value: u32) -> Self {
10999 self.set_fipa_39_12(value);
11000 self
11001 }
11002}
11003
11004#[cfg(feature = "el2")]
11005bitflags! {
11006 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11008 #[repr(transparent)]
11009 pub struct HpfarEl2: u64 {
11010 const NS = 1 << 63;
11012 }
11013}
11014
11015#[cfg(feature = "el2")]
11016impl HpfarEl2 {
11017 pub const FIPA_SHIFT: u32 = 4;
11019 pub const FIPA_MASK: u64 = 0b11111111111111111111111111111111111111111111;
11021 pub const NS_SHIFT: u32 = 63;
11023
11024 pub const fn fipa(self) -> u64 {
11026 ((self.bits() >> Self::FIPA_SHIFT) & 0b11111111111111111111111111111111111111111111) as u64
11027 }
11028
11029 pub const fn set_fipa(&mut self, value: u64) {
11031 let offset = Self::FIPA_SHIFT;
11032 assert!(value & (Self::FIPA_MASK as u64) == value);
11033 *self = Self::from_bits_retain(
11034 (self.bits() & !(Self::FIPA_MASK << offset)) | ((value as u64) << offset),
11035 );
11036 }
11037
11038 pub const fn with_fipa(mut self, value: u64) -> Self {
11040 self.set_fipa(value);
11041 self
11042 }
11043}
11044
11045bitflags! {
11046 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11048 #[repr(transparent)]
11049 pub struct Hrmr: u32 {
11050 const AA64 = 1 << 0;
11052 const RR = 1 << 1;
11054 }
11055}
11056
11057impl Hrmr {
11058 pub const AA64_SHIFT: u32 = 0;
11060 pub const RR_SHIFT: u32 = 1;
11062}
11063
11064bitflags! {
11065 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11067 #[repr(transparent)]
11068 pub struct Hsctlr: u32 {
11069 const RES1 = 0b110000110001010000100000000000;
11071 const M = 1 << 0;
11073 const A = 1 << 1;
11075 const C = 1 << 2;
11077 const NTLSMD = 1 << 3;
11079 const LSMAOE = 1 << 4;
11081 const CP15BEN = 1 << 5;
11083 const ITD = 1 << 7;
11085 const SED = 1 << 8;
11087 const I = 1 << 12;
11089 const WXN = 1 << 19;
11091 const TE = 1 << 30;
11093 const DSSBS = 1 << 31;
11095 }
11096}
11097
11098impl Hsctlr {
11099 pub const M_SHIFT: u32 = 0;
11101 pub const A_SHIFT: u32 = 1;
11103 pub const C_SHIFT: u32 = 2;
11105 pub const NTLSMD_SHIFT: u32 = 3;
11107 pub const LSMAOE_SHIFT: u32 = 4;
11109 pub const CP15BEN_SHIFT: u32 = 5;
11111 pub const ITD_SHIFT: u32 = 7;
11113 pub const SED_SHIFT: u32 = 8;
11115 pub const I_SHIFT: u32 = 12;
11117 pub const WXN_SHIFT: u32 = 19;
11119 pub const TE_SHIFT: u32 = 30;
11121 pub const DSSBS_SHIFT: u32 = 31;
11123}
11124
11125bitflags! {
11126 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11128 #[repr(transparent)]
11129 pub struct Hsr: u32 {
11130 const IL = 1 << 25;
11132 }
11133}
11134
11135impl Hsr {
11136 pub const ISS_SHIFT: u32 = 0;
11138 pub const ISS_MASK: u32 = 0b1111111111111111111111111;
11140 pub const IL_SHIFT: u32 = 25;
11142 pub const EC_SHIFT: u32 = 26;
11144 pub const EC_MASK: u32 = 0b111111;
11146
11147 pub const fn iss(self) -> u32 {
11149 ((self.bits() >> Self::ISS_SHIFT) & 0b1111111111111111111111111) as u32
11150 }
11151
11152 pub const fn set_iss(&mut self, value: u32) {
11154 let offset = Self::ISS_SHIFT;
11155 assert!(value & (Self::ISS_MASK as u32) == value);
11156 *self = Self::from_bits_retain(
11157 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u32) << offset),
11158 );
11159 }
11160
11161 pub const fn with_iss(mut self, value: u32) -> Self {
11163 self.set_iss(value);
11164 self
11165 }
11166
11167 pub const fn ec(self) -> u8 {
11169 ((self.bits() >> Self::EC_SHIFT) & 0b111111) as u8
11170 }
11171
11172 pub const fn set_ec(&mut self, value: u8) {
11174 let offset = Self::EC_SHIFT;
11175 assert!(value & (Self::EC_MASK as u8) == value);
11176 *self = Self::from_bits_retain(
11177 (self.bits() & !(Self::EC_MASK << offset)) | ((value as u32) << offset),
11178 );
11179 }
11180
11181 pub const fn with_ec(mut self, value: u8) -> Self {
11183 self.set_ec(value);
11184 self
11185 }
11186}
11187
11188bitflags! {
11189 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11191 #[repr(transparent)]
11192 pub struct Htcr: u32 {
11193 const RES1 = 0b10000000100000000000000000000000;
11195 const HPD = 1 << 24;
11197 const HWU59 = 1 << 25;
11199 const HWU60 = 1 << 26;
11201 const HWU61 = 1 << 27;
11203 const HWU62 = 1 << 28;
11205 }
11206}
11207
11208impl Htcr {
11209 pub const T0SZ_SHIFT: u32 = 0;
11211 pub const T0SZ_MASK: u32 = 0b111;
11213 pub const IRGN0_SHIFT: u32 = 8;
11215 pub const IRGN0_MASK: u32 = 0b11;
11217 pub const ORGN0_SHIFT: u32 = 10;
11219 pub const ORGN0_MASK: u32 = 0b11;
11221 pub const SH0_SHIFT: u32 = 12;
11223 pub const SH0_MASK: u32 = 0b11;
11225 pub const HPD_SHIFT: u32 = 24;
11227 pub const HWU59_SHIFT: u32 = 25;
11229 pub const HWU60_SHIFT: u32 = 26;
11231 pub const HWU61_SHIFT: u32 = 27;
11233 pub const HWU62_SHIFT: u32 = 28;
11235
11236 pub const fn t0sz(self) -> u8 {
11238 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111) as u8
11239 }
11240
11241 pub const fn set_t0sz(&mut self, value: u8) {
11243 let offset = Self::T0SZ_SHIFT;
11244 assert!(value & (Self::T0SZ_MASK as u8) == value);
11245 *self = Self::from_bits_retain(
11246 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u32) << offset),
11247 );
11248 }
11249
11250 pub const fn with_t0sz(mut self, value: u8) -> Self {
11252 self.set_t0sz(value);
11253 self
11254 }
11255
11256 pub const fn irgn0(self) -> u8 {
11258 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
11259 }
11260
11261 pub const fn set_irgn0(&mut self, value: u8) {
11263 let offset = Self::IRGN0_SHIFT;
11264 assert!(value & (Self::IRGN0_MASK as u8) == value);
11265 *self = Self::from_bits_retain(
11266 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u32) << offset),
11267 );
11268 }
11269
11270 pub const fn with_irgn0(mut self, value: u8) -> Self {
11272 self.set_irgn0(value);
11273 self
11274 }
11275
11276 pub const fn orgn0(self) -> u8 {
11278 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
11279 }
11280
11281 pub const fn set_orgn0(&mut self, value: u8) {
11283 let offset = Self::ORGN0_SHIFT;
11284 assert!(value & (Self::ORGN0_MASK as u8) == value);
11285 *self = Self::from_bits_retain(
11286 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u32) << offset),
11287 );
11288 }
11289
11290 pub const fn with_orgn0(mut self, value: u8) -> Self {
11292 self.set_orgn0(value);
11293 self
11294 }
11295
11296 pub const fn sh0(self) -> u8 {
11298 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
11299 }
11300
11301 pub const fn set_sh0(&mut self, value: u8) {
11303 let offset = Self::SH0_SHIFT;
11304 assert!(value & (Self::SH0_MASK as u8) == value);
11305 *self = Self::from_bits_retain(
11306 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u32) << offset),
11307 );
11308 }
11309
11310 pub const fn with_sh0(mut self, value: u8) -> Self {
11312 self.set_sh0(value);
11313 self
11314 }
11315}
11316
11317bitflags! {
11318 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11320 #[repr(transparent)]
11321 pub struct Htpidr: u32 {
11322 }
11323}
11324
11325impl Htpidr {
11326 pub const TID_SHIFT: u32 = 0;
11328 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
11330
11331 pub const fn tid(self) -> u32 {
11333 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
11334 }
11335
11336 pub const fn set_tid(&mut self, value: u32) {
11338 let offset = Self::TID_SHIFT;
11339 assert!(value & (Self::TID_MASK as u32) == value);
11340 *self = Self::from_bits_retain(
11341 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
11342 );
11343 }
11344
11345 pub const fn with_tid(mut self, value: u32) -> Self {
11347 self.set_tid(value);
11348 self
11349 }
11350}
11351
11352bitflags! {
11353 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11355 #[repr(transparent)]
11356 pub struct Htrfcr: u32 {
11357 const E0HTRE = 1 << 0;
11359 const E2TRE = 1 << 1;
11361 const CX = 1 << 3;
11363 }
11364}
11365
11366impl Htrfcr {
11367 pub const E0HTRE_SHIFT: u32 = 0;
11369 pub const E2TRE_SHIFT: u32 = 1;
11371 pub const CX_SHIFT: u32 = 3;
11373 pub const TS_SHIFT: u32 = 5;
11375 pub const TS_MASK: u32 = 0b11;
11377
11378 pub const fn ts(self) -> u8 {
11380 ((self.bits() >> Self::TS_SHIFT) & 0b11) as u8
11381 }
11382
11383 pub const fn set_ts(&mut self, value: u8) {
11385 let offset = Self::TS_SHIFT;
11386 assert!(value & (Self::TS_MASK as u8) == value);
11387 *self = Self::from_bits_retain(
11388 (self.bits() & !(Self::TS_MASK << offset)) | ((value as u32) << offset),
11389 );
11390 }
11391
11392 pub const fn with_ts(mut self, value: u8) -> Self {
11394 self.set_ts(value);
11395 self
11396 }
11397}
11398
11399bitflags! {
11400 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11402 #[repr(transparent)]
11403 pub struct Httbr: u64 {
11404 const CNP = 1 << 0;
11406 }
11407}
11408
11409impl Httbr {
11410 pub const CNP_SHIFT: u32 = 0;
11412 pub const BADDR_SHIFT: u32 = 1;
11414 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
11416
11417 pub const fn baddr(self) -> u64 {
11419 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
11420 as u64
11421 }
11422
11423 pub const fn set_baddr(&mut self, value: u64) {
11425 let offset = Self::BADDR_SHIFT;
11426 assert!(value & (Self::BADDR_MASK as u64) == value);
11427 *self = Self::from_bits_retain(
11428 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
11429 );
11430 }
11431
11432 pub const fn with_baddr(mut self, value: u64) -> Self {
11434 self.set_baddr(value);
11435 self
11436 }
11437}
11438
11439bitflags! {
11440 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11442 #[repr(transparent)]
11443 pub struct Hvbar: u32 {
11444 }
11445}
11446
11447impl Hvbar {
11448 pub const VBA_SHIFT: u32 = 5;
11450 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
11452
11453 pub const fn vba(self) -> u32 {
11455 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
11456 }
11457
11458 pub const fn set_vba(&mut self, value: u32) {
11460 let offset = Self::VBA_SHIFT;
11461 assert!(value & (Self::VBA_MASK as u32) == value);
11462 *self = Self::from_bits_retain(
11463 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u32) << offset),
11464 );
11465 }
11466
11467 pub const fn with_vba(mut self, value: u32) -> Self {
11469 self.set_vba(value);
11470 self
11471 }
11472}
11473
11474#[cfg(feature = "el1")]
11475bitflags! {
11476 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11478 #[repr(transparent)]
11479 pub struct IccAp1r0El1: u64 {
11480 const NMI = 1 << 63;
11482 }
11483}
11484
11485#[cfg(feature = "el1")]
11486impl IccAp1r0El1 {
11487 pub const NMI_SHIFT: u32 = 63;
11489}
11490
11491bitflags! {
11492 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11494 #[repr(transparent)]
11495 pub struct IccAsgi1r: u64 {
11496 const IRM = 1 << 40;
11498 }
11499}
11500
11501impl IccAsgi1r {
11502 pub const TARGETLIST_SHIFT: u32 = 0;
11504 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
11506 pub const AFF1_SHIFT: u32 = 16;
11508 pub const AFF1_MASK: u64 = 0b11111111;
11510 pub const INTID_SHIFT: u32 = 24;
11512 pub const INTID_MASK: u64 = 0b1111;
11514 pub const AFF2_SHIFT: u32 = 32;
11516 pub const AFF2_MASK: u64 = 0b11111111;
11518 pub const IRM_SHIFT: u32 = 40;
11520 pub const RS_SHIFT: u32 = 44;
11522 pub const RS_MASK: u64 = 0b1111;
11524 pub const AFF3_SHIFT: u32 = 48;
11526 pub const AFF3_MASK: u64 = 0b11111111;
11528
11529 pub const fn targetlist(self) -> u16 {
11531 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
11532 }
11533
11534 pub const fn set_targetlist(&mut self, value: u16) {
11536 let offset = Self::TARGETLIST_SHIFT;
11537 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
11538 *self = Self::from_bits_retain(
11539 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
11540 );
11541 }
11542
11543 pub const fn with_targetlist(mut self, value: u16) -> Self {
11545 self.set_targetlist(value);
11546 self
11547 }
11548
11549 pub const fn aff1(self) -> u8 {
11551 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
11552 }
11553
11554 pub const fn set_aff1(&mut self, value: u8) {
11556 let offset = Self::AFF1_SHIFT;
11557 assert!(value & (Self::AFF1_MASK as u8) == value);
11558 *self = Self::from_bits_retain(
11559 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
11560 );
11561 }
11562
11563 pub const fn with_aff1(mut self, value: u8) -> Self {
11565 self.set_aff1(value);
11566 self
11567 }
11568
11569 pub const fn intid(self) -> u8 {
11571 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
11572 }
11573
11574 pub const fn set_intid(&mut self, value: u8) {
11576 let offset = Self::INTID_SHIFT;
11577 assert!(value & (Self::INTID_MASK as u8) == value);
11578 *self = Self::from_bits_retain(
11579 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11580 );
11581 }
11582
11583 pub const fn with_intid(mut self, value: u8) -> Self {
11585 self.set_intid(value);
11586 self
11587 }
11588
11589 pub const fn aff2(self) -> u8 {
11591 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
11592 }
11593
11594 pub const fn set_aff2(&mut self, value: u8) {
11596 let offset = Self::AFF2_SHIFT;
11597 assert!(value & (Self::AFF2_MASK as u8) == value);
11598 *self = Self::from_bits_retain(
11599 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
11600 );
11601 }
11602
11603 pub const fn with_aff2(mut self, value: u8) -> Self {
11605 self.set_aff2(value);
11606 self
11607 }
11608
11609 pub const fn rs(self) -> u8 {
11611 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
11612 }
11613
11614 pub const fn set_rs(&mut self, value: u8) {
11616 let offset = Self::RS_SHIFT;
11617 assert!(value & (Self::RS_MASK as u8) == value);
11618 *self = Self::from_bits_retain(
11619 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
11620 );
11621 }
11622
11623 pub const fn with_rs(mut self, value: u8) -> Self {
11625 self.set_rs(value);
11626 self
11627 }
11628
11629 pub const fn aff3(self) -> u8 {
11631 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
11632 }
11633
11634 pub const fn set_aff3(&mut self, value: u8) {
11636 let offset = Self::AFF3_SHIFT;
11637 assert!(value & (Self::AFF3_MASK as u8) == value);
11638 *self = Self::from_bits_retain(
11639 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
11640 );
11641 }
11642
11643 pub const fn with_aff3(mut self, value: u8) -> Self {
11645 self.set_aff3(value);
11646 self
11647 }
11648}
11649
11650#[cfg(feature = "el1")]
11651bitflags! {
11652 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11654 #[repr(transparent)]
11655 pub struct IccAsgi1rEl1: u64 {
11656 const IRM = 1 << 40;
11658 }
11659}
11660
11661#[cfg(feature = "el1")]
11662impl IccAsgi1rEl1 {
11663 pub const TARGETLIST_SHIFT: u32 = 0;
11665 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
11667 pub const AFF1_SHIFT: u32 = 16;
11669 pub const AFF1_MASK: u64 = 0b11111111;
11671 pub const INTID_SHIFT: u32 = 24;
11673 pub const INTID_MASK: u64 = 0b1111;
11675 pub const AFF2_SHIFT: u32 = 32;
11677 pub const AFF2_MASK: u64 = 0b11111111;
11679 pub const IRM_SHIFT: u32 = 40;
11681 pub const RS_SHIFT: u32 = 44;
11683 pub const RS_MASK: u64 = 0b1111;
11685 pub const AFF3_SHIFT: u32 = 48;
11687 pub const AFF3_MASK: u64 = 0b11111111;
11689
11690 pub const fn targetlist(self) -> u16 {
11692 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
11693 }
11694
11695 pub const fn set_targetlist(&mut self, value: u16) {
11697 let offset = Self::TARGETLIST_SHIFT;
11698 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
11699 *self = Self::from_bits_retain(
11700 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
11701 );
11702 }
11703
11704 pub const fn with_targetlist(mut self, value: u16) -> Self {
11706 self.set_targetlist(value);
11707 self
11708 }
11709
11710 pub const fn aff1(self) -> u8 {
11712 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
11713 }
11714
11715 pub const fn set_aff1(&mut self, value: u8) {
11717 let offset = Self::AFF1_SHIFT;
11718 assert!(value & (Self::AFF1_MASK as u8) == value);
11719 *self = Self::from_bits_retain(
11720 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
11721 );
11722 }
11723
11724 pub const fn with_aff1(mut self, value: u8) -> Self {
11726 self.set_aff1(value);
11727 self
11728 }
11729
11730 pub const fn intid(self) -> u8 {
11732 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
11733 }
11734
11735 pub const fn set_intid(&mut self, value: u8) {
11737 let offset = Self::INTID_SHIFT;
11738 assert!(value & (Self::INTID_MASK as u8) == value);
11739 *self = Self::from_bits_retain(
11740 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
11741 );
11742 }
11743
11744 pub const fn with_intid(mut self, value: u8) -> Self {
11746 self.set_intid(value);
11747 self
11748 }
11749
11750 pub const fn aff2(self) -> u8 {
11752 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
11753 }
11754
11755 pub const fn set_aff2(&mut self, value: u8) {
11757 let offset = Self::AFF2_SHIFT;
11758 assert!(value & (Self::AFF2_MASK as u8) == value);
11759 *self = Self::from_bits_retain(
11760 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
11761 );
11762 }
11763
11764 pub const fn with_aff2(mut self, value: u8) -> Self {
11766 self.set_aff2(value);
11767 self
11768 }
11769
11770 pub const fn rs(self) -> u8 {
11772 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
11773 }
11774
11775 pub const fn set_rs(&mut self, value: u8) {
11777 let offset = Self::RS_SHIFT;
11778 assert!(value & (Self::RS_MASK as u8) == value);
11779 *self = Self::from_bits_retain(
11780 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
11781 );
11782 }
11783
11784 pub const fn with_rs(mut self, value: u8) -> Self {
11786 self.set_rs(value);
11787 self
11788 }
11789
11790 pub const fn aff3(self) -> u8 {
11792 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
11793 }
11794
11795 pub const fn set_aff3(&mut self, value: u8) {
11797 let offset = Self::AFF3_SHIFT;
11798 assert!(value & (Self::AFF3_MASK as u8) == value);
11799 *self = Self::from_bits_retain(
11800 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
11801 );
11802 }
11803
11804 pub const fn with_aff3(mut self, value: u8) -> Self {
11806 self.set_aff3(value);
11807 self
11808 }
11809}
11810
11811bitflags! {
11812 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11814 #[repr(transparent)]
11815 pub struct IccBpr0: u32 {
11816 }
11817}
11818
11819impl IccBpr0 {
11820 pub const BINARYPOINT_SHIFT: u32 = 0;
11822 pub const BINARYPOINT_MASK: u32 = 0b111;
11824
11825 pub const fn binarypoint(self) -> u8 {
11827 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
11828 }
11829
11830 pub const fn set_binarypoint(&mut self, value: u8) {
11832 let offset = Self::BINARYPOINT_SHIFT;
11833 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
11834 *self = Self::from_bits_retain(
11835 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u32) << offset),
11836 );
11837 }
11838
11839 pub const fn with_binarypoint(mut self, value: u8) -> Self {
11841 self.set_binarypoint(value);
11842 self
11843 }
11844}
11845
11846#[cfg(feature = "el1")]
11847bitflags! {
11848 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11850 #[repr(transparent)]
11851 pub struct IccBpr0El1: u64 {
11852 }
11853}
11854
11855#[cfg(feature = "el1")]
11856impl IccBpr0El1 {
11857 pub const BINARYPOINT_SHIFT: u32 = 0;
11859 pub const BINARYPOINT_MASK: u64 = 0b111;
11861
11862 pub const fn binarypoint(self) -> u8 {
11864 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
11865 }
11866
11867 pub const fn set_binarypoint(&mut self, value: u8) {
11869 let offset = Self::BINARYPOINT_SHIFT;
11870 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
11871 *self = Self::from_bits_retain(
11872 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u64) << offset),
11873 );
11874 }
11875
11876 pub const fn with_binarypoint(mut self, value: u8) -> Self {
11878 self.set_binarypoint(value);
11879 self
11880 }
11881}
11882
11883bitflags! {
11884 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11886 #[repr(transparent)]
11887 pub struct IccBpr1: u32 {
11888 }
11889}
11890
11891impl IccBpr1 {
11892 pub const BINARYPOINT_SHIFT: u32 = 0;
11894 pub const BINARYPOINT_MASK: u32 = 0b111;
11896
11897 pub const fn binarypoint(self) -> u8 {
11899 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
11900 }
11901
11902 pub const fn set_binarypoint(&mut self, value: u8) {
11904 let offset = Self::BINARYPOINT_SHIFT;
11905 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
11906 *self = Self::from_bits_retain(
11907 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u32) << offset),
11908 );
11909 }
11910
11911 pub const fn with_binarypoint(mut self, value: u8) -> Self {
11913 self.set_binarypoint(value);
11914 self
11915 }
11916}
11917
11918#[cfg(feature = "el1")]
11919bitflags! {
11920 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11922 #[repr(transparent)]
11923 pub struct IccBpr1El1: u64 {
11924 }
11925}
11926
11927#[cfg(feature = "el1")]
11928impl IccBpr1El1 {
11929 pub const BINARYPOINT_SHIFT: u32 = 0;
11931 pub const BINARYPOINT_MASK: u64 = 0b111;
11933
11934 pub const fn binarypoint(self) -> u8 {
11936 ((self.bits() >> Self::BINARYPOINT_SHIFT) & 0b111) as u8
11937 }
11938
11939 pub const fn set_binarypoint(&mut self, value: u8) {
11941 let offset = Self::BINARYPOINT_SHIFT;
11942 assert!(value & (Self::BINARYPOINT_MASK as u8) == value);
11943 *self = Self::from_bits_retain(
11944 (self.bits() & !(Self::BINARYPOINT_MASK << offset)) | ((value as u64) << offset),
11945 );
11946 }
11947
11948 pub const fn with_binarypoint(mut self, value: u8) -> Self {
11950 self.set_binarypoint(value);
11951 self
11952 }
11953}
11954
11955bitflags! {
11956 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11958 #[repr(transparent)]
11959 pub struct IccCtlr: u32 {
11960 const CBPR = 1 << 0;
11962 const EOIMODE = 1 << 1;
11964 const PMHE = 1 << 6;
11966 const SEIS = 1 << 14;
11968 const A3V = 1 << 15;
11970 const RSS = 1 << 18;
11972 const EXTRANGE = 1 << 19;
11974 }
11975}
11976
11977impl IccCtlr {
11978 pub const CBPR_SHIFT: u32 = 0;
11980 pub const EOIMODE_SHIFT: u32 = 1;
11982 pub const PMHE_SHIFT: u32 = 6;
11984 pub const PRIBITS_SHIFT: u32 = 8;
11986 pub const PRIBITS_MASK: u32 = 0b111;
11988 pub const IDBITS_SHIFT: u32 = 11;
11990 pub const IDBITS_MASK: u32 = 0b111;
11992 pub const SEIS_SHIFT: u32 = 14;
11994 pub const A3V_SHIFT: u32 = 15;
11996 pub const RSS_SHIFT: u32 = 18;
11998 pub const EXTRANGE_SHIFT: u32 = 19;
12000
12001 pub const fn pribits(self) -> u8 {
12003 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
12004 }
12005
12006 pub const fn set_pribits(&mut self, value: u8) {
12008 let offset = Self::PRIBITS_SHIFT;
12009 assert!(value & (Self::PRIBITS_MASK as u8) == value);
12010 *self = Self::from_bits_retain(
12011 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u32) << offset),
12012 );
12013 }
12014
12015 pub const fn with_pribits(mut self, value: u8) -> Self {
12017 self.set_pribits(value);
12018 self
12019 }
12020
12021 pub const fn idbits(self) -> u8 {
12023 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
12024 }
12025
12026 pub const fn set_idbits(&mut self, value: u8) {
12028 let offset = Self::IDBITS_SHIFT;
12029 assert!(value & (Self::IDBITS_MASK as u8) == value);
12030 *self = Self::from_bits_retain(
12031 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u32) << offset),
12032 );
12033 }
12034
12035 pub const fn with_idbits(mut self, value: u8) -> Self {
12037 self.set_idbits(value);
12038 self
12039 }
12040}
12041
12042#[cfg(feature = "el1")]
12043bitflags! {
12044 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12046 #[repr(transparent)]
12047 pub struct IccCtlrEl1: u64 {
12048 const CBPR = 1 << 0;
12050 const EOIMODE = 1 << 1;
12052 const PMHE = 1 << 6;
12054 const SEIS = 1 << 14;
12056 const A3V = 1 << 15;
12058 const RSS = 1 << 18;
12060 const EXTRANGE = 1 << 19;
12062 }
12063}
12064
12065#[cfg(feature = "el1")]
12066impl IccCtlrEl1 {
12067 pub const CBPR_SHIFT: u32 = 0;
12069 pub const EOIMODE_SHIFT: u32 = 1;
12071 pub const PMHE_SHIFT: u32 = 6;
12073 pub const PRIBITS_SHIFT: u32 = 8;
12075 pub const PRIBITS_MASK: u64 = 0b111;
12077 pub const IDBITS_SHIFT: u32 = 11;
12079 pub const IDBITS_MASK: u64 = 0b111;
12081 pub const SEIS_SHIFT: u32 = 14;
12083 pub const A3V_SHIFT: u32 = 15;
12085 pub const RSS_SHIFT: u32 = 18;
12087 pub const EXTRANGE_SHIFT: u32 = 19;
12089
12090 pub const fn pribits(self) -> u8 {
12092 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
12093 }
12094
12095 pub const fn set_pribits(&mut self, value: u8) {
12097 let offset = Self::PRIBITS_SHIFT;
12098 assert!(value & (Self::PRIBITS_MASK as u8) == value);
12099 *self = Self::from_bits_retain(
12100 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u64) << offset),
12101 );
12102 }
12103
12104 pub const fn with_pribits(mut self, value: u8) -> Self {
12106 self.set_pribits(value);
12107 self
12108 }
12109
12110 pub const fn idbits(self) -> u8 {
12112 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
12113 }
12114
12115 pub const fn set_idbits(&mut self, value: u8) {
12117 let offset = Self::IDBITS_SHIFT;
12118 assert!(value & (Self::IDBITS_MASK as u8) == value);
12119 *self = Self::from_bits_retain(
12120 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u64) << offset),
12121 );
12122 }
12123
12124 pub const fn with_idbits(mut self, value: u8) -> Self {
12126 self.set_idbits(value);
12127 self
12128 }
12129}
12130
12131#[cfg(feature = "el3")]
12132bitflags! {
12133 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12135 #[repr(transparent)]
12136 pub struct IccCtlrEl3: u64 {
12137 const CBPR_EL1S = 1 << 0;
12139 const CBPR_EL1NS = 1 << 1;
12141 const EOIMODE_EL3 = 1 << 2;
12143 const EOIMODE_EL1S = 1 << 3;
12145 const EOIMODE_EL1NS = 1 << 4;
12147 const RM = 1 << 5;
12149 const PMHE = 1 << 6;
12151 const SEIS = 1 << 14;
12153 const A3V = 1 << 15;
12155 const NDS = 1 << 17;
12157 const RSS = 1 << 18;
12159 const EXTRANGE = 1 << 19;
12161 }
12162}
12163
12164#[cfg(feature = "el3")]
12165impl IccCtlrEl3 {
12166 pub const CBPR_EL1S_SHIFT: u32 = 0;
12168 pub const CBPR_EL1NS_SHIFT: u32 = 1;
12170 pub const EOIMODE_EL3_SHIFT: u32 = 2;
12172 pub const EOIMODE_EL1S_SHIFT: u32 = 3;
12174 pub const EOIMODE_EL1NS_SHIFT: u32 = 4;
12176 pub const RM_SHIFT: u32 = 5;
12178 pub const PMHE_SHIFT: u32 = 6;
12180 pub const PRIBITS_SHIFT: u32 = 8;
12182 pub const PRIBITS_MASK: u64 = 0b111;
12184 pub const IDBITS_SHIFT: u32 = 11;
12186 pub const IDBITS_MASK: u64 = 0b111;
12188 pub const SEIS_SHIFT: u32 = 14;
12190 pub const A3V_SHIFT: u32 = 15;
12192 pub const NDS_SHIFT: u32 = 17;
12194 pub const RSS_SHIFT: u32 = 18;
12196 pub const EXTRANGE_SHIFT: u32 = 19;
12198
12199 pub const fn pribits(self) -> u8 {
12201 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
12202 }
12203
12204 pub const fn set_pribits(&mut self, value: u8) {
12206 let offset = Self::PRIBITS_SHIFT;
12207 assert!(value & (Self::PRIBITS_MASK as u8) == value);
12208 *self = Self::from_bits_retain(
12209 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u64) << offset),
12210 );
12211 }
12212
12213 pub const fn with_pribits(mut self, value: u8) -> Self {
12215 self.set_pribits(value);
12216 self
12217 }
12218
12219 pub const fn idbits(self) -> u8 {
12221 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
12222 }
12223
12224 pub const fn set_idbits(&mut self, value: u8) {
12226 let offset = Self::IDBITS_SHIFT;
12227 assert!(value & (Self::IDBITS_MASK as u8) == value);
12228 *self = Self::from_bits_retain(
12229 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u64) << offset),
12230 );
12231 }
12232
12233 pub const fn with_idbits(mut self, value: u8) -> Self {
12235 self.set_idbits(value);
12236 self
12237 }
12238}
12239
12240bitflags! {
12241 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12243 #[repr(transparent)]
12244 pub struct IccDir: u32 {
12245 }
12246}
12247
12248impl IccDir {
12249 pub const INTID_SHIFT: u32 = 0;
12251 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12253
12254 pub const fn intid(self) -> u32 {
12256 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12257 }
12258
12259 pub const fn set_intid(&mut self, value: u32) {
12261 let offset = Self::INTID_SHIFT;
12262 assert!(value & (Self::INTID_MASK as u32) == value);
12263 *self = Self::from_bits_retain(
12264 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12265 );
12266 }
12267
12268 pub const fn with_intid(mut self, value: u32) -> Self {
12270 self.set_intid(value);
12271 self
12272 }
12273}
12274
12275#[cfg(feature = "el1")]
12276bitflags! {
12277 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12279 #[repr(transparent)]
12280 pub struct IccDirEl1: u64 {
12281 }
12282}
12283
12284#[cfg(feature = "el1")]
12285impl IccDirEl1 {
12286 pub const INTID_SHIFT: u32 = 0;
12288 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12290
12291 pub const fn intid(self) -> u32 {
12293 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12294 }
12295
12296 pub const fn set_intid(&mut self, value: u32) {
12298 let offset = Self::INTID_SHIFT;
12299 assert!(value & (Self::INTID_MASK as u32) == value);
12300 *self = Self::from_bits_retain(
12301 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12302 );
12303 }
12304
12305 pub const fn with_intid(mut self, value: u32) -> Self {
12307 self.set_intid(value);
12308 self
12309 }
12310}
12311
12312bitflags! {
12313 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12315 #[repr(transparent)]
12316 pub struct IccEoir0: u32 {
12317 }
12318}
12319
12320impl IccEoir0 {
12321 pub const INTID_SHIFT: u32 = 0;
12323 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12325
12326 pub const fn intid(self) -> u32 {
12328 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12329 }
12330
12331 pub const fn set_intid(&mut self, value: u32) {
12333 let offset = Self::INTID_SHIFT;
12334 assert!(value & (Self::INTID_MASK as u32) == value);
12335 *self = Self::from_bits_retain(
12336 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12337 );
12338 }
12339
12340 pub const fn with_intid(mut self, value: u32) -> Self {
12342 self.set_intid(value);
12343 self
12344 }
12345}
12346
12347#[cfg(feature = "el1")]
12348bitflags! {
12349 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12351 #[repr(transparent)]
12352 pub struct IccEoir0El1: u64 {
12353 }
12354}
12355
12356#[cfg(feature = "el1")]
12357impl IccEoir0El1 {
12358 pub const INTID_SHIFT: u32 = 0;
12360 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12362
12363 pub const fn intid(self) -> u32 {
12365 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12366 }
12367
12368 pub const fn set_intid(&mut self, value: u32) {
12370 let offset = Self::INTID_SHIFT;
12371 assert!(value & (Self::INTID_MASK as u32) == value);
12372 *self = Self::from_bits_retain(
12373 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12374 );
12375 }
12376
12377 pub const fn with_intid(mut self, value: u32) -> Self {
12379 self.set_intid(value);
12380 self
12381 }
12382}
12383
12384bitflags! {
12385 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12387 #[repr(transparent)]
12388 pub struct IccEoir1: u32 {
12389 }
12390}
12391
12392impl IccEoir1 {
12393 pub const INTID_SHIFT: u32 = 0;
12395 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12397
12398 pub const fn intid(self) -> u32 {
12400 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12401 }
12402
12403 pub const fn set_intid(&mut self, value: u32) {
12405 let offset = Self::INTID_SHIFT;
12406 assert!(value & (Self::INTID_MASK as u32) == value);
12407 *self = Self::from_bits_retain(
12408 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12409 );
12410 }
12411
12412 pub const fn with_intid(mut self, value: u32) -> Self {
12414 self.set_intid(value);
12415 self
12416 }
12417}
12418
12419#[cfg(feature = "el1")]
12420bitflags! {
12421 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12423 #[repr(transparent)]
12424 pub struct IccEoir1El1: u64 {
12425 }
12426}
12427
12428#[cfg(feature = "el1")]
12429impl IccEoir1El1 {
12430 pub const INTID_SHIFT: u32 = 0;
12432 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12434
12435 pub const fn intid(self) -> u32 {
12437 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12438 }
12439
12440 pub const fn set_intid(&mut self, value: u32) {
12442 let offset = Self::INTID_SHIFT;
12443 assert!(value & (Self::INTID_MASK as u32) == value);
12444 *self = Self::from_bits_retain(
12445 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12446 );
12447 }
12448
12449 pub const fn with_intid(mut self, value: u32) -> Self {
12451 self.set_intid(value);
12452 self
12453 }
12454}
12455
12456bitflags! {
12457 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12459 #[repr(transparent)]
12460 pub struct IccHppir0: u32 {
12461 }
12462}
12463
12464impl IccHppir0 {
12465 pub const INTID_SHIFT: u32 = 0;
12467 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12469
12470 pub const fn intid(self) -> u32 {
12472 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12473 }
12474
12475 pub const fn set_intid(&mut self, value: u32) {
12477 let offset = Self::INTID_SHIFT;
12478 assert!(value & (Self::INTID_MASK as u32) == value);
12479 *self = Self::from_bits_retain(
12480 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12481 );
12482 }
12483
12484 pub const fn with_intid(mut self, value: u32) -> Self {
12486 self.set_intid(value);
12487 self
12488 }
12489}
12490
12491#[cfg(feature = "el1")]
12492bitflags! {
12493 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12495 #[repr(transparent)]
12496 pub struct IccHppir0El1: u64 {
12497 }
12498}
12499
12500#[cfg(feature = "el1")]
12501impl IccHppir0El1 {
12502 pub const INTID_SHIFT: u32 = 0;
12504 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12506
12507 pub const fn intid(self) -> u32 {
12509 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12510 }
12511
12512 pub const fn set_intid(&mut self, value: u32) {
12514 let offset = Self::INTID_SHIFT;
12515 assert!(value & (Self::INTID_MASK as u32) == value);
12516 *self = Self::from_bits_retain(
12517 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12518 );
12519 }
12520
12521 pub const fn with_intid(mut self, value: u32) -> Self {
12523 self.set_intid(value);
12524 self
12525 }
12526}
12527
12528bitflags! {
12529 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12531 #[repr(transparent)]
12532 pub struct IccHppir1: u32 {
12533 }
12534}
12535
12536impl IccHppir1 {
12537 pub const INTID_SHIFT: u32 = 0;
12539 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12541
12542 pub const fn intid(self) -> u32 {
12544 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12545 }
12546
12547 pub const fn set_intid(&mut self, value: u32) {
12549 let offset = Self::INTID_SHIFT;
12550 assert!(value & (Self::INTID_MASK as u32) == value);
12551 *self = Self::from_bits_retain(
12552 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12553 );
12554 }
12555
12556 pub const fn with_intid(mut self, value: u32) -> Self {
12558 self.set_intid(value);
12559 self
12560 }
12561}
12562
12563#[cfg(feature = "el1")]
12564bitflags! {
12565 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12567 #[repr(transparent)]
12568 pub struct IccHppir1El1: u64 {
12569 }
12570}
12571
12572#[cfg(feature = "el1")]
12573impl IccHppir1El1 {
12574 pub const INTID_SHIFT: u32 = 0;
12576 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12578
12579 pub const fn intid(self) -> u32 {
12581 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12582 }
12583
12584 pub const fn set_intid(&mut self, value: u32) {
12586 let offset = Self::INTID_SHIFT;
12587 assert!(value & (Self::INTID_MASK as u32) == value);
12588 *self = Self::from_bits_retain(
12589 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12590 );
12591 }
12592
12593 pub const fn with_intid(mut self, value: u32) -> Self {
12595 self.set_intid(value);
12596 self
12597 }
12598}
12599
12600bitflags! {
12601 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12603 #[repr(transparent)]
12604 pub struct IccHsre: u32 {
12605 const SRE = 1 << 0;
12607 const DFB = 1 << 1;
12609 const DIB = 1 << 2;
12611 const ENABLE = 1 << 3;
12613 }
12614}
12615
12616impl IccHsre {
12617 pub const SRE_SHIFT: u32 = 0;
12619 pub const DFB_SHIFT: u32 = 1;
12621 pub const DIB_SHIFT: u32 = 2;
12623 pub const ENABLE_SHIFT: u32 = 3;
12625}
12626
12627bitflags! {
12628 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12630 #[repr(transparent)]
12631 pub struct IccIar0: u32 {
12632 }
12633}
12634
12635impl IccIar0 {
12636 pub const INTID_SHIFT: u32 = 0;
12638 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12640
12641 pub const fn intid(self) -> u32 {
12643 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12644 }
12645
12646 pub const fn set_intid(&mut self, value: u32) {
12648 let offset = Self::INTID_SHIFT;
12649 assert!(value & (Self::INTID_MASK as u32) == value);
12650 *self = Self::from_bits_retain(
12651 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12652 );
12653 }
12654
12655 pub const fn with_intid(mut self, value: u32) -> Self {
12657 self.set_intid(value);
12658 self
12659 }
12660}
12661
12662#[cfg(feature = "el1")]
12663bitflags! {
12664 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12666 #[repr(transparent)]
12667 pub struct IccIar0El1: u64 {
12668 }
12669}
12670
12671#[cfg(feature = "el1")]
12672impl IccIar0El1 {
12673 pub const INTID_SHIFT: u32 = 0;
12675 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12677
12678 pub const fn intid(self) -> u32 {
12680 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12681 }
12682
12683 pub const fn set_intid(&mut self, value: u32) {
12685 let offset = Self::INTID_SHIFT;
12686 assert!(value & (Self::INTID_MASK as u32) == value);
12687 *self = Self::from_bits_retain(
12688 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12689 );
12690 }
12691
12692 pub const fn with_intid(mut self, value: u32) -> Self {
12694 self.set_intid(value);
12695 self
12696 }
12697}
12698
12699bitflags! {
12700 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12702 #[repr(transparent)]
12703 pub struct IccIar1: u32 {
12704 }
12705}
12706
12707impl IccIar1 {
12708 pub const INTID_SHIFT: u32 = 0;
12710 pub const INTID_MASK: u32 = 0b111111111111111111111111;
12712
12713 pub const fn intid(self) -> u32 {
12715 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12716 }
12717
12718 pub const fn set_intid(&mut self, value: u32) {
12720 let offset = Self::INTID_SHIFT;
12721 assert!(value & (Self::INTID_MASK as u32) == value);
12722 *self = Self::from_bits_retain(
12723 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u32) << offset),
12724 );
12725 }
12726
12727 pub const fn with_intid(mut self, value: u32) -> Self {
12729 self.set_intid(value);
12730 self
12731 }
12732}
12733
12734#[cfg(feature = "el1")]
12735bitflags! {
12736 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12738 #[repr(transparent)]
12739 pub struct IccIar1El1: u64 {
12740 }
12741}
12742
12743#[cfg(feature = "el1")]
12744impl IccIar1El1 {
12745 pub const INTID_SHIFT: u32 = 0;
12747 pub const INTID_MASK: u64 = 0b111111111111111111111111;
12749
12750 pub const fn intid(self) -> u32 {
12752 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
12753 }
12754
12755 pub const fn set_intid(&mut self, value: u32) {
12757 let offset = Self::INTID_SHIFT;
12758 assert!(value & (Self::INTID_MASK as u32) == value);
12759 *self = Self::from_bits_retain(
12760 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
12761 );
12762 }
12763
12764 pub const fn with_intid(mut self, value: u32) -> Self {
12766 self.set_intid(value);
12767 self
12768 }
12769}
12770
12771bitflags! {
12772 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12774 #[repr(transparent)]
12775 pub struct IccIgrpen0: u32 {
12776 const ENABLE = 1 << 0;
12778 }
12779}
12780
12781impl IccIgrpen0 {
12782 pub const ENABLE_SHIFT: u32 = 0;
12784}
12785
12786#[cfg(feature = "el1")]
12787bitflags! {
12788 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12790 #[repr(transparent)]
12791 pub struct IccIgrpen0El1: u64 {
12792 const ENABLE = 1 << 0;
12794 }
12795}
12796
12797#[cfg(feature = "el1")]
12798impl IccIgrpen0El1 {
12799 pub const ENABLE_SHIFT: u32 = 0;
12801}
12802
12803bitflags! {
12804 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12806 #[repr(transparent)]
12807 pub struct IccIgrpen1: u32 {
12808 const ENABLE = 1 << 0;
12810 }
12811}
12812
12813impl IccIgrpen1 {
12814 pub const ENABLE_SHIFT: u32 = 0;
12816}
12817
12818#[cfg(feature = "el1")]
12819bitflags! {
12820 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12822 #[repr(transparent)]
12823 pub struct IccIgrpen1El1: u64 {
12824 const ENABLE = 1 << 0;
12826 }
12827}
12828
12829#[cfg(feature = "el1")]
12830impl IccIgrpen1El1 {
12831 pub const ENABLE_SHIFT: u32 = 0;
12833}
12834
12835#[cfg(feature = "el3")]
12836bitflags! {
12837 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12839 #[repr(transparent)]
12840 pub struct IccIgrpen1El3: u64 {
12841 const ENABLEGRP1NS = 1 << 0;
12843 const ENABLEGRP1S = 1 << 1;
12845 }
12846}
12847
12848#[cfg(feature = "el3")]
12849impl IccIgrpen1El3 {
12850 pub const ENABLEGRP1NS_SHIFT: u32 = 0;
12852 pub const ENABLEGRP1S_SHIFT: u32 = 1;
12854}
12855
12856bitflags! {
12857 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12859 #[repr(transparent)]
12860 pub struct IccMctlr: u32 {
12861 const CBPR_EL1S = 1 << 0;
12863 const CBPR_EL1NS = 1 << 1;
12865 const EOIMODE_EL3 = 1 << 2;
12867 const EOIMODE_EL1S = 1 << 3;
12869 const EOIMODE_EL1NS = 1 << 4;
12871 const RM = 1 << 5;
12873 const PMHE = 1 << 6;
12875 const SEIS = 1 << 14;
12877 const A3V = 1 << 15;
12879 const NDS = 1 << 17;
12881 const RSS = 1 << 18;
12883 const EXTRANGE = 1 << 19;
12885 }
12886}
12887
12888impl IccMctlr {
12889 pub const CBPR_EL1S_SHIFT: u32 = 0;
12891 pub const CBPR_EL1NS_SHIFT: u32 = 1;
12893 pub const EOIMODE_EL3_SHIFT: u32 = 2;
12895 pub const EOIMODE_EL1S_SHIFT: u32 = 3;
12897 pub const EOIMODE_EL1NS_SHIFT: u32 = 4;
12899 pub const RM_SHIFT: u32 = 5;
12901 pub const PMHE_SHIFT: u32 = 6;
12903 pub const PRIBITS_SHIFT: u32 = 8;
12905 pub const PRIBITS_MASK: u32 = 0b111;
12907 pub const IDBITS_SHIFT: u32 = 11;
12909 pub const IDBITS_MASK: u32 = 0b111;
12911 pub const SEIS_SHIFT: u32 = 14;
12913 pub const A3V_SHIFT: u32 = 15;
12915 pub const NDS_SHIFT: u32 = 17;
12917 pub const RSS_SHIFT: u32 = 18;
12919 pub const EXTRANGE_SHIFT: u32 = 19;
12921
12922 pub const fn pribits(self) -> u8 {
12924 ((self.bits() >> Self::PRIBITS_SHIFT) & 0b111) as u8
12925 }
12926
12927 pub const fn set_pribits(&mut self, value: u8) {
12929 let offset = Self::PRIBITS_SHIFT;
12930 assert!(value & (Self::PRIBITS_MASK as u8) == value);
12931 *self = Self::from_bits_retain(
12932 (self.bits() & !(Self::PRIBITS_MASK << offset)) | ((value as u32) << offset),
12933 );
12934 }
12935
12936 pub const fn with_pribits(mut self, value: u8) -> Self {
12938 self.set_pribits(value);
12939 self
12940 }
12941
12942 pub const fn idbits(self) -> u8 {
12944 ((self.bits() >> Self::IDBITS_SHIFT) & 0b111) as u8
12945 }
12946
12947 pub const fn set_idbits(&mut self, value: u8) {
12949 let offset = Self::IDBITS_SHIFT;
12950 assert!(value & (Self::IDBITS_MASK as u8) == value);
12951 *self = Self::from_bits_retain(
12952 (self.bits() & !(Self::IDBITS_MASK << offset)) | ((value as u32) << offset),
12953 );
12954 }
12955
12956 pub const fn with_idbits(mut self, value: u8) -> Self {
12958 self.set_idbits(value);
12959 self
12960 }
12961}
12962
12963bitflags! {
12964 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12966 #[repr(transparent)]
12967 pub struct IccMgrpen1: u32 {
12968 const ENABLEGRP1NS = 1 << 0;
12970 const ENABLEGRP1S = 1 << 1;
12972 }
12973}
12974
12975impl IccMgrpen1 {
12976 pub const ENABLEGRP1NS_SHIFT: u32 = 0;
12978 pub const ENABLEGRP1S_SHIFT: u32 = 1;
12980}
12981
12982bitflags! {
12983 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
12985 #[repr(transparent)]
12986 pub struct IccMsre: u32 {
12987 const SRE = 1 << 0;
12989 const DFB = 1 << 1;
12991 const DIB = 1 << 2;
12993 const ENABLE = 1 << 3;
12995 }
12996}
12997
12998impl IccMsre {
12999 pub const SRE_SHIFT: u32 = 0;
13001 pub const DFB_SHIFT: u32 = 1;
13003 pub const DIB_SHIFT: u32 = 2;
13005 pub const ENABLE_SHIFT: u32 = 3;
13007}
13008
13009#[cfg(feature = "el1")]
13010bitflags! {
13011 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13013 #[repr(transparent)]
13014 pub struct IccNmiar1El1: u64 {
13015 }
13016}
13017
13018#[cfg(feature = "el1")]
13019impl IccNmiar1El1 {
13020 pub const INTID_SHIFT: u32 = 0;
13022 pub const INTID_MASK: u64 = 0b111111111111111111111111;
13024
13025 pub const fn intid(self) -> u32 {
13027 ((self.bits() >> Self::INTID_SHIFT) & 0b111111111111111111111111) as u32
13028 }
13029
13030 pub const fn set_intid(&mut self, value: u32) {
13032 let offset = Self::INTID_SHIFT;
13033 assert!(value & (Self::INTID_MASK as u32) == value);
13034 *self = Self::from_bits_retain(
13035 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
13036 );
13037 }
13038
13039 pub const fn with_intid(mut self, value: u32) -> Self {
13041 self.set_intid(value);
13042 self
13043 }
13044}
13045
13046bitflags! {
13047 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13049 #[repr(transparent)]
13050 pub struct IccPmr: u32 {
13051 }
13052}
13053
13054impl IccPmr {
13055 pub const PRIORITY_SHIFT: u32 = 0;
13057 pub const PRIORITY_MASK: u32 = 0b11111111;
13059
13060 pub const fn priority(self) -> u8 {
13062 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
13063 }
13064
13065 pub const fn set_priority(&mut self, value: u8) {
13067 let offset = Self::PRIORITY_SHIFT;
13068 assert!(value & (Self::PRIORITY_MASK as u8) == value);
13069 *self = Self::from_bits_retain(
13070 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u32) << offset),
13071 );
13072 }
13073
13074 pub const fn with_priority(mut self, value: u8) -> Self {
13076 self.set_priority(value);
13077 self
13078 }
13079}
13080
13081#[cfg(feature = "el1")]
13082bitflags! {
13083 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13085 #[repr(transparent)]
13086 pub struct IccPmrEl1: u64 {
13087 }
13088}
13089
13090#[cfg(feature = "el1")]
13091impl IccPmrEl1 {
13092 pub const PRIORITY_SHIFT: u32 = 0;
13094 pub const PRIORITY_MASK: u64 = 0b11111111;
13096
13097 pub const fn priority(self) -> u8 {
13099 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
13100 }
13101
13102 pub const fn set_priority(&mut self, value: u8) {
13104 let offset = Self::PRIORITY_SHIFT;
13105 assert!(value & (Self::PRIORITY_MASK as u8) == value);
13106 *self = Self::from_bits_retain(
13107 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u64) << offset),
13108 );
13109 }
13110
13111 pub const fn with_priority(mut self, value: u8) -> Self {
13113 self.set_priority(value);
13114 self
13115 }
13116}
13117
13118bitflags! {
13119 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13121 #[repr(transparent)]
13122 pub struct IccRpr: u32 {
13123 }
13124}
13125
13126impl IccRpr {
13127 pub const PRIORITY_SHIFT: u32 = 0;
13129 pub const PRIORITY_MASK: u32 = 0b11111111;
13131
13132 pub const fn priority(self) -> u8 {
13134 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
13135 }
13136
13137 pub const fn set_priority(&mut self, value: u8) {
13139 let offset = Self::PRIORITY_SHIFT;
13140 assert!(value & (Self::PRIORITY_MASK as u8) == value);
13141 *self = Self::from_bits_retain(
13142 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u32) << offset),
13143 );
13144 }
13145
13146 pub const fn with_priority(mut self, value: u8) -> Self {
13148 self.set_priority(value);
13149 self
13150 }
13151}
13152
13153#[cfg(feature = "el1")]
13154bitflags! {
13155 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13157 #[repr(transparent)]
13158 pub struct IccRprEl1: u64 {
13159 const NMI_NS = 1 << 62;
13161 const NMI = 1 << 63;
13163 }
13164}
13165
13166#[cfg(feature = "el1")]
13167impl IccRprEl1 {
13168 pub const PRIORITY_SHIFT: u32 = 0;
13170 pub const PRIORITY_MASK: u64 = 0b11111111;
13172 pub const NMI_NS_SHIFT: u32 = 62;
13174 pub const NMI_SHIFT: u32 = 63;
13176
13177 pub const fn priority(self) -> u8 {
13179 ((self.bits() >> Self::PRIORITY_SHIFT) & 0b11111111) as u8
13180 }
13181
13182 pub const fn set_priority(&mut self, value: u8) {
13184 let offset = Self::PRIORITY_SHIFT;
13185 assert!(value & (Self::PRIORITY_MASK as u8) == value);
13186 *self = Self::from_bits_retain(
13187 (self.bits() & !(Self::PRIORITY_MASK << offset)) | ((value as u64) << offset),
13188 );
13189 }
13190
13191 pub const fn with_priority(mut self, value: u8) -> Self {
13193 self.set_priority(value);
13194 self
13195 }
13196}
13197
13198bitflags! {
13199 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13201 #[repr(transparent)]
13202 pub struct IccSgi0r: u64 {
13203 const IRM = 1 << 40;
13205 }
13206}
13207
13208impl IccSgi0r {
13209 pub const TARGETLIST_SHIFT: u32 = 0;
13211 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
13213 pub const AFF1_SHIFT: u32 = 16;
13215 pub const AFF1_MASK: u64 = 0b11111111;
13217 pub const INTID_SHIFT: u32 = 24;
13219 pub const INTID_MASK: u64 = 0b1111;
13221 pub const AFF2_SHIFT: u32 = 32;
13223 pub const AFF2_MASK: u64 = 0b11111111;
13225 pub const IRM_SHIFT: u32 = 40;
13227 pub const RS_SHIFT: u32 = 44;
13229 pub const RS_MASK: u64 = 0b1111;
13231 pub const AFF3_SHIFT: u32 = 48;
13233 pub const AFF3_MASK: u64 = 0b11111111;
13235
13236 pub const fn targetlist(self) -> u16 {
13238 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
13239 }
13240
13241 pub const fn set_targetlist(&mut self, value: u16) {
13243 let offset = Self::TARGETLIST_SHIFT;
13244 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
13245 *self = Self::from_bits_retain(
13246 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
13247 );
13248 }
13249
13250 pub const fn with_targetlist(mut self, value: u16) -> Self {
13252 self.set_targetlist(value);
13253 self
13254 }
13255
13256 pub const fn aff1(self) -> u8 {
13258 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
13259 }
13260
13261 pub const fn set_aff1(&mut self, value: u8) {
13263 let offset = Self::AFF1_SHIFT;
13264 assert!(value & (Self::AFF1_MASK as u8) == value);
13265 *self = Self::from_bits_retain(
13266 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
13267 );
13268 }
13269
13270 pub const fn with_aff1(mut self, value: u8) -> Self {
13272 self.set_aff1(value);
13273 self
13274 }
13275
13276 pub const fn intid(self) -> u8 {
13278 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
13279 }
13280
13281 pub const fn set_intid(&mut self, value: u8) {
13283 let offset = Self::INTID_SHIFT;
13284 assert!(value & (Self::INTID_MASK as u8) == value);
13285 *self = Self::from_bits_retain(
13286 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
13287 );
13288 }
13289
13290 pub const fn with_intid(mut self, value: u8) -> Self {
13292 self.set_intid(value);
13293 self
13294 }
13295
13296 pub const fn aff2(self) -> u8 {
13298 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
13299 }
13300
13301 pub const fn set_aff2(&mut self, value: u8) {
13303 let offset = Self::AFF2_SHIFT;
13304 assert!(value & (Self::AFF2_MASK as u8) == value);
13305 *self = Self::from_bits_retain(
13306 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
13307 );
13308 }
13309
13310 pub const fn with_aff2(mut self, value: u8) -> Self {
13312 self.set_aff2(value);
13313 self
13314 }
13315
13316 pub const fn rs(self) -> u8 {
13318 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
13319 }
13320
13321 pub const fn set_rs(&mut self, value: u8) {
13323 let offset = Self::RS_SHIFT;
13324 assert!(value & (Self::RS_MASK as u8) == value);
13325 *self = Self::from_bits_retain(
13326 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
13327 );
13328 }
13329
13330 pub const fn with_rs(mut self, value: u8) -> Self {
13332 self.set_rs(value);
13333 self
13334 }
13335
13336 pub const fn aff3(self) -> u8 {
13338 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
13339 }
13340
13341 pub const fn set_aff3(&mut self, value: u8) {
13343 let offset = Self::AFF3_SHIFT;
13344 assert!(value & (Self::AFF3_MASK as u8) == value);
13345 *self = Self::from_bits_retain(
13346 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
13347 );
13348 }
13349
13350 pub const fn with_aff3(mut self, value: u8) -> Self {
13352 self.set_aff3(value);
13353 self
13354 }
13355}
13356
13357#[cfg(feature = "el1")]
13358bitflags! {
13359 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13361 #[repr(transparent)]
13362 pub struct IccSgi0rEl1: u64 {
13363 const IRM = 1 << 40;
13365 }
13366}
13367
13368#[cfg(feature = "el1")]
13369impl IccSgi0rEl1 {
13370 pub const TARGETLIST_SHIFT: u32 = 0;
13372 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
13374 pub const AFF1_SHIFT: u32 = 16;
13376 pub const AFF1_MASK: u64 = 0b11111111;
13378 pub const INTID_SHIFT: u32 = 24;
13380 pub const INTID_MASK: u64 = 0b1111;
13382 pub const AFF2_SHIFT: u32 = 32;
13384 pub const AFF2_MASK: u64 = 0b11111111;
13386 pub const IRM_SHIFT: u32 = 40;
13388 pub const RS_SHIFT: u32 = 44;
13390 pub const RS_MASK: u64 = 0b1111;
13392 pub const AFF3_SHIFT: u32 = 48;
13394 pub const AFF3_MASK: u64 = 0b11111111;
13396
13397 pub const fn targetlist(self) -> u16 {
13399 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
13400 }
13401
13402 pub const fn set_targetlist(&mut self, value: u16) {
13404 let offset = Self::TARGETLIST_SHIFT;
13405 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
13406 *self = Self::from_bits_retain(
13407 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
13408 );
13409 }
13410
13411 pub const fn with_targetlist(mut self, value: u16) -> Self {
13413 self.set_targetlist(value);
13414 self
13415 }
13416
13417 pub const fn aff1(self) -> u8 {
13419 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
13420 }
13421
13422 pub const fn set_aff1(&mut self, value: u8) {
13424 let offset = Self::AFF1_SHIFT;
13425 assert!(value & (Self::AFF1_MASK as u8) == value);
13426 *self = Self::from_bits_retain(
13427 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
13428 );
13429 }
13430
13431 pub const fn with_aff1(mut self, value: u8) -> Self {
13433 self.set_aff1(value);
13434 self
13435 }
13436
13437 pub const fn intid(self) -> u8 {
13439 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
13440 }
13441
13442 pub const fn set_intid(&mut self, value: u8) {
13444 let offset = Self::INTID_SHIFT;
13445 assert!(value & (Self::INTID_MASK as u8) == value);
13446 *self = Self::from_bits_retain(
13447 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
13448 );
13449 }
13450
13451 pub const fn with_intid(mut self, value: u8) -> Self {
13453 self.set_intid(value);
13454 self
13455 }
13456
13457 pub const fn aff2(self) -> u8 {
13459 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
13460 }
13461
13462 pub const fn set_aff2(&mut self, value: u8) {
13464 let offset = Self::AFF2_SHIFT;
13465 assert!(value & (Self::AFF2_MASK as u8) == value);
13466 *self = Self::from_bits_retain(
13467 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
13468 );
13469 }
13470
13471 pub const fn with_aff2(mut self, value: u8) -> Self {
13473 self.set_aff2(value);
13474 self
13475 }
13476
13477 pub const fn rs(self) -> u8 {
13479 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
13480 }
13481
13482 pub const fn set_rs(&mut self, value: u8) {
13484 let offset = Self::RS_SHIFT;
13485 assert!(value & (Self::RS_MASK as u8) == value);
13486 *self = Self::from_bits_retain(
13487 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
13488 );
13489 }
13490
13491 pub const fn with_rs(mut self, value: u8) -> Self {
13493 self.set_rs(value);
13494 self
13495 }
13496
13497 pub const fn aff3(self) -> u8 {
13499 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
13500 }
13501
13502 pub const fn set_aff3(&mut self, value: u8) {
13504 let offset = Self::AFF3_SHIFT;
13505 assert!(value & (Self::AFF3_MASK as u8) == value);
13506 *self = Self::from_bits_retain(
13507 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
13508 );
13509 }
13510
13511 pub const fn with_aff3(mut self, value: u8) -> Self {
13513 self.set_aff3(value);
13514 self
13515 }
13516}
13517
13518bitflags! {
13519 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13521 #[repr(transparent)]
13522 pub struct IccSgi1r: u64 {
13523 const IRM = 1 << 40;
13525 }
13526}
13527
13528impl IccSgi1r {
13529 pub const TARGETLIST_SHIFT: u32 = 0;
13531 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
13533 pub const AFF1_SHIFT: u32 = 16;
13535 pub const AFF1_MASK: u64 = 0b11111111;
13537 pub const INTID_SHIFT: u32 = 24;
13539 pub const INTID_MASK: u64 = 0b1111;
13541 pub const AFF2_SHIFT: u32 = 32;
13543 pub const AFF2_MASK: u64 = 0b11111111;
13545 pub const IRM_SHIFT: u32 = 40;
13547 pub const RS_SHIFT: u32 = 44;
13549 pub const RS_MASK: u64 = 0b1111;
13551 pub const AFF3_SHIFT: u32 = 48;
13553 pub const AFF3_MASK: u64 = 0b11111111;
13555
13556 pub const fn targetlist(self) -> u16 {
13558 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
13559 }
13560
13561 pub const fn set_targetlist(&mut self, value: u16) {
13563 let offset = Self::TARGETLIST_SHIFT;
13564 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
13565 *self = Self::from_bits_retain(
13566 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
13567 );
13568 }
13569
13570 pub const fn with_targetlist(mut self, value: u16) -> Self {
13572 self.set_targetlist(value);
13573 self
13574 }
13575
13576 pub const fn aff1(self) -> u8 {
13578 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
13579 }
13580
13581 pub const fn set_aff1(&mut self, value: u8) {
13583 let offset = Self::AFF1_SHIFT;
13584 assert!(value & (Self::AFF1_MASK as u8) == value);
13585 *self = Self::from_bits_retain(
13586 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
13587 );
13588 }
13589
13590 pub const fn with_aff1(mut self, value: u8) -> Self {
13592 self.set_aff1(value);
13593 self
13594 }
13595
13596 pub const fn intid(self) -> u8 {
13598 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
13599 }
13600
13601 pub const fn set_intid(&mut self, value: u8) {
13603 let offset = Self::INTID_SHIFT;
13604 assert!(value & (Self::INTID_MASK as u8) == value);
13605 *self = Self::from_bits_retain(
13606 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
13607 );
13608 }
13609
13610 pub const fn with_intid(mut self, value: u8) -> Self {
13612 self.set_intid(value);
13613 self
13614 }
13615
13616 pub const fn aff2(self) -> u8 {
13618 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
13619 }
13620
13621 pub const fn set_aff2(&mut self, value: u8) {
13623 let offset = Self::AFF2_SHIFT;
13624 assert!(value & (Self::AFF2_MASK as u8) == value);
13625 *self = Self::from_bits_retain(
13626 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
13627 );
13628 }
13629
13630 pub const fn with_aff2(mut self, value: u8) -> Self {
13632 self.set_aff2(value);
13633 self
13634 }
13635
13636 pub const fn rs(self) -> u8 {
13638 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
13639 }
13640
13641 pub const fn set_rs(&mut self, value: u8) {
13643 let offset = Self::RS_SHIFT;
13644 assert!(value & (Self::RS_MASK as u8) == value);
13645 *self = Self::from_bits_retain(
13646 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
13647 );
13648 }
13649
13650 pub const fn with_rs(mut self, value: u8) -> Self {
13652 self.set_rs(value);
13653 self
13654 }
13655
13656 pub const fn aff3(self) -> u8 {
13658 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
13659 }
13660
13661 pub const fn set_aff3(&mut self, value: u8) {
13663 let offset = Self::AFF3_SHIFT;
13664 assert!(value & (Self::AFF3_MASK as u8) == value);
13665 *self = Self::from_bits_retain(
13666 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
13667 );
13668 }
13669
13670 pub const fn with_aff3(mut self, value: u8) -> Self {
13672 self.set_aff3(value);
13673 self
13674 }
13675}
13676
13677#[cfg(feature = "el1")]
13678bitflags! {
13679 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13681 #[repr(transparent)]
13682 pub struct IccSgi1rEl1: u64 {
13683 const IRM = 1 << 40;
13685 }
13686}
13687
13688#[cfg(feature = "el1")]
13689impl IccSgi1rEl1 {
13690 pub const TARGETLIST_SHIFT: u32 = 0;
13692 pub const TARGETLIST_MASK: u64 = 0b1111111111111111;
13694 pub const AFF1_SHIFT: u32 = 16;
13696 pub const AFF1_MASK: u64 = 0b11111111;
13698 pub const INTID_SHIFT: u32 = 24;
13700 pub const INTID_MASK: u64 = 0b1111;
13702 pub const AFF2_SHIFT: u32 = 32;
13704 pub const AFF2_MASK: u64 = 0b11111111;
13706 pub const IRM_SHIFT: u32 = 40;
13708 pub const RS_SHIFT: u32 = 44;
13710 pub const RS_MASK: u64 = 0b1111;
13712 pub const AFF3_SHIFT: u32 = 48;
13714 pub const AFF3_MASK: u64 = 0b11111111;
13716
13717 pub const fn targetlist(self) -> u16 {
13719 ((self.bits() >> Self::TARGETLIST_SHIFT) & 0b1111111111111111) as u16
13720 }
13721
13722 pub const fn set_targetlist(&mut self, value: u16) {
13724 let offset = Self::TARGETLIST_SHIFT;
13725 assert!(value & (Self::TARGETLIST_MASK as u16) == value);
13726 *self = Self::from_bits_retain(
13727 (self.bits() & !(Self::TARGETLIST_MASK << offset)) | ((value as u64) << offset),
13728 );
13729 }
13730
13731 pub const fn with_targetlist(mut self, value: u16) -> Self {
13733 self.set_targetlist(value);
13734 self
13735 }
13736
13737 pub const fn aff1(self) -> u8 {
13739 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
13740 }
13741
13742 pub const fn set_aff1(&mut self, value: u8) {
13744 let offset = Self::AFF1_SHIFT;
13745 assert!(value & (Self::AFF1_MASK as u8) == value);
13746 *self = Self::from_bits_retain(
13747 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
13748 );
13749 }
13750
13751 pub const fn with_aff1(mut self, value: u8) -> Self {
13753 self.set_aff1(value);
13754 self
13755 }
13756
13757 pub const fn intid(self) -> u8 {
13759 ((self.bits() >> Self::INTID_SHIFT) & 0b1111) as u8
13760 }
13761
13762 pub const fn set_intid(&mut self, value: u8) {
13764 let offset = Self::INTID_SHIFT;
13765 assert!(value & (Self::INTID_MASK as u8) == value);
13766 *self = Self::from_bits_retain(
13767 (self.bits() & !(Self::INTID_MASK << offset)) | ((value as u64) << offset),
13768 );
13769 }
13770
13771 pub const fn with_intid(mut self, value: u8) -> Self {
13773 self.set_intid(value);
13774 self
13775 }
13776
13777 pub const fn aff2(self) -> u8 {
13779 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
13780 }
13781
13782 pub const fn set_aff2(&mut self, value: u8) {
13784 let offset = Self::AFF2_SHIFT;
13785 assert!(value & (Self::AFF2_MASK as u8) == value);
13786 *self = Self::from_bits_retain(
13787 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
13788 );
13789 }
13790
13791 pub const fn with_aff2(mut self, value: u8) -> Self {
13793 self.set_aff2(value);
13794 self
13795 }
13796
13797 pub const fn rs(self) -> u8 {
13799 ((self.bits() >> Self::RS_SHIFT) & 0b1111) as u8
13800 }
13801
13802 pub const fn set_rs(&mut self, value: u8) {
13804 let offset = Self::RS_SHIFT;
13805 assert!(value & (Self::RS_MASK as u8) == value);
13806 *self = Self::from_bits_retain(
13807 (self.bits() & !(Self::RS_MASK << offset)) | ((value as u64) << offset),
13808 );
13809 }
13810
13811 pub const fn with_rs(mut self, value: u8) -> Self {
13813 self.set_rs(value);
13814 self
13815 }
13816
13817 pub const fn aff3(self) -> u8 {
13819 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
13820 }
13821
13822 pub const fn set_aff3(&mut self, value: u8) {
13824 let offset = Self::AFF3_SHIFT;
13825 assert!(value & (Self::AFF3_MASK as u8) == value);
13826 *self = Self::from_bits_retain(
13827 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
13828 );
13829 }
13830
13831 pub const fn with_aff3(mut self, value: u8) -> Self {
13833 self.set_aff3(value);
13834 self
13835 }
13836}
13837
13838bitflags! {
13839 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13841 #[repr(transparent)]
13842 pub struct IccSre: u32 {
13843 const SRE = 1 << 0;
13845 const DFB = 1 << 1;
13847 const DIB = 1 << 2;
13849 }
13850}
13851
13852impl IccSre {
13853 pub const SRE_SHIFT: u32 = 0;
13855 pub const DFB_SHIFT: u32 = 1;
13857 pub const DIB_SHIFT: u32 = 2;
13859}
13860
13861#[cfg(feature = "el1")]
13862bitflags! {
13863 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13865 #[repr(transparent)]
13866 pub struct IccSreEl1: u64 {
13867 const SRE = 1 << 0;
13869 const DFB = 1 << 1;
13871 const DIB = 1 << 2;
13873 }
13874}
13875
13876#[cfg(feature = "el1")]
13877impl IccSreEl1 {
13878 pub const SRE_SHIFT: u32 = 0;
13880 pub const DFB_SHIFT: u32 = 1;
13882 pub const DIB_SHIFT: u32 = 2;
13884}
13885
13886#[cfg(feature = "el2")]
13887bitflags! {
13888 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13890 #[repr(transparent)]
13891 pub struct IccSreEl2: u64 {
13892 const SRE = 1 << 0;
13894 const DFB = 1 << 1;
13896 const DIB = 1 << 2;
13898 const ENABLE = 1 << 3;
13900 }
13901}
13902
13903#[cfg(feature = "el2")]
13904impl IccSreEl2 {
13905 pub const SRE_SHIFT: u32 = 0;
13907 pub const DFB_SHIFT: u32 = 1;
13909 pub const DIB_SHIFT: u32 = 2;
13911 pub const ENABLE_SHIFT: u32 = 3;
13913}
13914
13915#[cfg(feature = "el3")]
13916bitflags! {
13917 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13919 #[repr(transparent)]
13920 pub struct IccSreEl3: u64 {
13921 const SRE = 1 << 0;
13923 const DFB = 1 << 1;
13925 const DIB = 1 << 2;
13927 const ENABLE = 1 << 3;
13929 }
13930}
13931
13932#[cfg(feature = "el3")]
13933impl IccSreEl3 {
13934 pub const SRE_SHIFT: u32 = 0;
13936 pub const DFB_SHIFT: u32 = 1;
13938 pub const DIB_SHIFT: u32 = 2;
13940 pub const ENABLE_SHIFT: u32 = 3;
13942}
13943
13944#[cfg(feature = "el2")]
13945bitflags! {
13946 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
13948 #[repr(transparent)]
13949 pub struct IchHcrEl2: u64 {
13950 const EN = 1 << 0;
13952 const UIE = 1 << 1;
13954 const LRENPIE = 1 << 2;
13956 const NPIE = 1 << 3;
13958 const VGRP0EIE = 1 << 4;
13960 const VGRP0DIE = 1 << 5;
13962 const VGRP1EIE = 1 << 6;
13964 const VGRP1DIE = 1 << 7;
13966 const VSGIEOICOUNT = 1 << 8;
13968 const TC = 1 << 10;
13970 const TALL0 = 1 << 11;
13972 const TALL1 = 1 << 12;
13974 const TSEI = 1 << 13;
13976 const TDIR = 1 << 14;
13978 const DVIM = 1 << 15;
13980 }
13981}
13982
13983#[cfg(feature = "el2")]
13984impl IchHcrEl2 {
13985 pub const EN_SHIFT: u32 = 0;
13987 pub const UIE_SHIFT: u32 = 1;
13989 pub const LRENPIE_SHIFT: u32 = 2;
13991 pub const NPIE_SHIFT: u32 = 3;
13993 pub const VGRP0EIE_SHIFT: u32 = 4;
13995 pub const VGRP0DIE_SHIFT: u32 = 5;
13997 pub const VGRP1EIE_SHIFT: u32 = 6;
13999 pub const VGRP1DIE_SHIFT: u32 = 7;
14001 pub const VSGIEOICOUNT_SHIFT: u32 = 8;
14003 pub const TC_SHIFT: u32 = 10;
14005 pub const TALL0_SHIFT: u32 = 11;
14007 pub const TALL1_SHIFT: u32 = 12;
14009 pub const TSEI_SHIFT: u32 = 13;
14011 pub const TDIR_SHIFT: u32 = 14;
14013 pub const DVIM_SHIFT: u32 = 15;
14015 pub const EOICOUNT_SHIFT: u32 = 27;
14017 pub const EOICOUNT_MASK: u64 = 0b11111;
14019
14020 pub const fn eoicount(self) -> u8 {
14022 ((self.bits() >> Self::EOICOUNT_SHIFT) & 0b11111) as u8
14023 }
14024
14025 pub const fn set_eoicount(&mut self, value: u8) {
14027 let offset = Self::EOICOUNT_SHIFT;
14028 assert!(value & (Self::EOICOUNT_MASK as u8) == value);
14029 *self = Self::from_bits_retain(
14030 (self.bits() & !(Self::EOICOUNT_MASK << offset)) | ((value as u64) << offset),
14031 );
14032 }
14033
14034 pub const fn with_eoicount(mut self, value: u8) -> Self {
14036 self.set_eoicount(value);
14037 self
14038 }
14039}
14040
14041#[cfg(feature = "el2")]
14042bitflags! {
14043 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14045 #[repr(transparent)]
14046 pub struct IchVmcrEl2: u64 {
14047 const EN = 1 << 0;
14049 const VENG0 = 1 << 0;
14051 const VENG1 = 1 << 1;
14053 const VACKCTL = 1 << 2;
14055 const VFIQEN = 1 << 3;
14057 const VCBPR = 1 << 4;
14059 const VEOIM = 1 << 9;
14061 }
14062}
14063
14064#[cfg(feature = "el2")]
14065impl IchVmcrEl2 {
14066 pub const EN_SHIFT: u32 = 0;
14068 pub const VENG0_SHIFT: u32 = 0;
14070 pub const VENG1_SHIFT: u32 = 1;
14072 pub const VACKCTL_SHIFT: u32 = 2;
14074 pub const VFIQEN_SHIFT: u32 = 3;
14076 pub const VCBPR_SHIFT: u32 = 4;
14078 pub const VEOIM_SHIFT: u32 = 9;
14080 pub const VBPR1_SHIFT: u32 = 18;
14082 pub const VBPR1_MASK: u64 = 0b111;
14084 pub const VBPR0_SHIFT: u32 = 21;
14086 pub const VBPR0_MASK: u64 = 0b111;
14088
14089 pub const fn vbpr1(self) -> u8 {
14091 ((self.bits() >> Self::VBPR1_SHIFT) & 0b111) as u8
14092 }
14093
14094 pub const fn set_vbpr1(&mut self, value: u8) {
14096 let offset = Self::VBPR1_SHIFT;
14097 assert!(value & (Self::VBPR1_MASK as u8) == value);
14098 *self = Self::from_bits_retain(
14099 (self.bits() & !(Self::VBPR1_MASK << offset)) | ((value as u64) << offset),
14100 );
14101 }
14102
14103 pub const fn with_vbpr1(mut self, value: u8) -> Self {
14105 self.set_vbpr1(value);
14106 self
14107 }
14108
14109 pub const fn vbpr0(self) -> u8 {
14111 ((self.bits() >> Self::VBPR0_SHIFT) & 0b111) as u8
14112 }
14113
14114 pub const fn set_vbpr0(&mut self, value: u8) {
14116 let offset = Self::VBPR0_SHIFT;
14117 assert!(value & (Self::VBPR0_MASK as u8) == value);
14118 *self = Self::from_bits_retain(
14119 (self.bits() & !(Self::VBPR0_MASK << offset)) | ((value as u64) << offset),
14120 );
14121 }
14122
14123 pub const fn with_vbpr0(mut self, value: u8) -> Self {
14125 self.set_vbpr0(value);
14126 self
14127 }
14128}
14129
14130#[cfg(feature = "el1")]
14131bitflags! {
14132 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14134 #[repr(transparent)]
14135 pub struct IdAa64dfr0El1: u64 {
14136 }
14137}
14138
14139#[cfg(feature = "el1")]
14140impl IdAa64dfr0El1 {
14141 pub const DEBUGVER_SHIFT: u32 = 0;
14143 pub const DEBUGVER_MASK: u64 = 0b1111;
14145 pub const TRACEVER_SHIFT: u32 = 4;
14147 pub const TRACEVER_MASK: u64 = 0b1111;
14149 pub const PMUVER_SHIFT: u32 = 8;
14151 pub const PMUVER_MASK: u64 = 0b1111;
14153 pub const BRPS_SHIFT: u32 = 12;
14155 pub const BRPS_MASK: u64 = 0b1111;
14157 pub const PMSS_SHIFT: u32 = 16;
14159 pub const PMSS_MASK: u64 = 0b1111;
14161 pub const WRPS_SHIFT: u32 = 20;
14163 pub const WRPS_MASK: u64 = 0b1111;
14165 pub const SEBEP_SHIFT: u32 = 24;
14167 pub const SEBEP_MASK: u64 = 0b1111;
14169 pub const CTX_CMPS_SHIFT: u32 = 28;
14171 pub const CTX_CMPS_MASK: u64 = 0b1111;
14173 pub const PMSVER_SHIFT: u32 = 32;
14175 pub const PMSVER_MASK: u64 = 0b1111;
14177 pub const DOUBLELOCK_SHIFT: u32 = 36;
14179 pub const DOUBLELOCK_MASK: u64 = 0b1111;
14181 pub const TRACEFILT_SHIFT: u32 = 40;
14183 pub const TRACEFILT_MASK: u64 = 0b1111;
14185 pub const TRACEBUFFER_SHIFT: u32 = 44;
14187 pub const TRACEBUFFER_MASK: u64 = 0b1111;
14189 pub const MTPMU_SHIFT: u32 = 48;
14191 pub const MTPMU_MASK: u64 = 0b1111;
14193 pub const BRBE_SHIFT: u32 = 52;
14195 pub const BRBE_MASK: u64 = 0b1111;
14197 pub const EXTTRCBUFF_SHIFT: u32 = 56;
14199 pub const EXTTRCBUFF_MASK: u64 = 0b1111;
14201 pub const HPMN0_SHIFT: u32 = 60;
14203 pub const HPMN0_MASK: u64 = 0b1111;
14205
14206 pub const fn debugver(self) -> u8 {
14208 ((self.bits() >> Self::DEBUGVER_SHIFT) & 0b1111) as u8
14209 }
14210
14211 pub const fn set_debugver(&mut self, value: u8) {
14213 let offset = Self::DEBUGVER_SHIFT;
14214 assert!(value & (Self::DEBUGVER_MASK as u8) == value);
14215 *self = Self::from_bits_retain(
14216 (self.bits() & !(Self::DEBUGVER_MASK << offset)) | ((value as u64) << offset),
14217 );
14218 }
14219
14220 pub const fn with_debugver(mut self, value: u8) -> Self {
14222 self.set_debugver(value);
14223 self
14224 }
14225
14226 pub const fn tracever(self) -> u8 {
14228 ((self.bits() >> Self::TRACEVER_SHIFT) & 0b1111) as u8
14229 }
14230
14231 pub const fn set_tracever(&mut self, value: u8) {
14233 let offset = Self::TRACEVER_SHIFT;
14234 assert!(value & (Self::TRACEVER_MASK as u8) == value);
14235 *self = Self::from_bits_retain(
14236 (self.bits() & !(Self::TRACEVER_MASK << offset)) | ((value as u64) << offset),
14237 );
14238 }
14239
14240 pub const fn with_tracever(mut self, value: u8) -> Self {
14242 self.set_tracever(value);
14243 self
14244 }
14245
14246 pub const fn pmuver(self) -> u8 {
14248 ((self.bits() >> Self::PMUVER_SHIFT) & 0b1111) as u8
14249 }
14250
14251 pub const fn set_pmuver(&mut self, value: u8) {
14253 let offset = Self::PMUVER_SHIFT;
14254 assert!(value & (Self::PMUVER_MASK as u8) == value);
14255 *self = Self::from_bits_retain(
14256 (self.bits() & !(Self::PMUVER_MASK << offset)) | ((value as u64) << offset),
14257 );
14258 }
14259
14260 pub const fn with_pmuver(mut self, value: u8) -> Self {
14262 self.set_pmuver(value);
14263 self
14264 }
14265
14266 pub const fn brps(self) -> u8 {
14268 ((self.bits() >> Self::BRPS_SHIFT) & 0b1111) as u8
14269 }
14270
14271 pub const fn set_brps(&mut self, value: u8) {
14273 let offset = Self::BRPS_SHIFT;
14274 assert!(value & (Self::BRPS_MASK as u8) == value);
14275 *self = Self::from_bits_retain(
14276 (self.bits() & !(Self::BRPS_MASK << offset)) | ((value as u64) << offset),
14277 );
14278 }
14279
14280 pub const fn with_brps(mut self, value: u8) -> Self {
14282 self.set_brps(value);
14283 self
14284 }
14285
14286 pub const fn pmss(self) -> u8 {
14288 ((self.bits() >> Self::PMSS_SHIFT) & 0b1111) as u8
14289 }
14290
14291 pub const fn set_pmss(&mut self, value: u8) {
14293 let offset = Self::PMSS_SHIFT;
14294 assert!(value & (Self::PMSS_MASK as u8) == value);
14295 *self = Self::from_bits_retain(
14296 (self.bits() & !(Self::PMSS_MASK << offset)) | ((value as u64) << offset),
14297 );
14298 }
14299
14300 pub const fn with_pmss(mut self, value: u8) -> Self {
14302 self.set_pmss(value);
14303 self
14304 }
14305
14306 pub const fn wrps(self) -> u8 {
14308 ((self.bits() >> Self::WRPS_SHIFT) & 0b1111) as u8
14309 }
14310
14311 pub const fn set_wrps(&mut self, value: u8) {
14313 let offset = Self::WRPS_SHIFT;
14314 assert!(value & (Self::WRPS_MASK as u8) == value);
14315 *self = Self::from_bits_retain(
14316 (self.bits() & !(Self::WRPS_MASK << offset)) | ((value as u64) << offset),
14317 );
14318 }
14319
14320 pub const fn with_wrps(mut self, value: u8) -> Self {
14322 self.set_wrps(value);
14323 self
14324 }
14325
14326 pub const fn sebep(self) -> u8 {
14328 ((self.bits() >> Self::SEBEP_SHIFT) & 0b1111) as u8
14329 }
14330
14331 pub const fn set_sebep(&mut self, value: u8) {
14333 let offset = Self::SEBEP_SHIFT;
14334 assert!(value & (Self::SEBEP_MASK as u8) == value);
14335 *self = Self::from_bits_retain(
14336 (self.bits() & !(Self::SEBEP_MASK << offset)) | ((value as u64) << offset),
14337 );
14338 }
14339
14340 pub const fn with_sebep(mut self, value: u8) -> Self {
14342 self.set_sebep(value);
14343 self
14344 }
14345
14346 pub const fn ctx_cmps(self) -> u8 {
14348 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b1111) as u8
14349 }
14350
14351 pub const fn set_ctx_cmps(&mut self, value: u8) {
14353 let offset = Self::CTX_CMPS_SHIFT;
14354 assert!(value & (Self::CTX_CMPS_MASK as u8) == value);
14355 *self = Self::from_bits_retain(
14356 (self.bits() & !(Self::CTX_CMPS_MASK << offset)) | ((value as u64) << offset),
14357 );
14358 }
14359
14360 pub const fn with_ctx_cmps(mut self, value: u8) -> Self {
14362 self.set_ctx_cmps(value);
14363 self
14364 }
14365
14366 pub const fn pmsver(self) -> u8 {
14368 ((self.bits() >> Self::PMSVER_SHIFT) & 0b1111) as u8
14369 }
14370
14371 pub const fn set_pmsver(&mut self, value: u8) {
14373 let offset = Self::PMSVER_SHIFT;
14374 assert!(value & (Self::PMSVER_MASK as u8) == value);
14375 *self = Self::from_bits_retain(
14376 (self.bits() & !(Self::PMSVER_MASK << offset)) | ((value as u64) << offset),
14377 );
14378 }
14379
14380 pub const fn with_pmsver(mut self, value: u8) -> Self {
14382 self.set_pmsver(value);
14383 self
14384 }
14385
14386 pub const fn doublelock(self) -> u8 {
14388 ((self.bits() >> Self::DOUBLELOCK_SHIFT) & 0b1111) as u8
14389 }
14390
14391 pub const fn set_doublelock(&mut self, value: u8) {
14393 let offset = Self::DOUBLELOCK_SHIFT;
14394 assert!(value & (Self::DOUBLELOCK_MASK as u8) == value);
14395 *self = Self::from_bits_retain(
14396 (self.bits() & !(Self::DOUBLELOCK_MASK << offset)) | ((value as u64) << offset),
14397 );
14398 }
14399
14400 pub const fn with_doublelock(mut self, value: u8) -> Self {
14402 self.set_doublelock(value);
14403 self
14404 }
14405
14406 pub const fn tracefilt(self) -> u8 {
14408 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
14409 }
14410
14411 pub const fn set_tracefilt(&mut self, value: u8) {
14413 let offset = Self::TRACEFILT_SHIFT;
14414 assert!(value & (Self::TRACEFILT_MASK as u8) == value);
14415 *self = Self::from_bits_retain(
14416 (self.bits() & !(Self::TRACEFILT_MASK << offset)) | ((value as u64) << offset),
14417 );
14418 }
14419
14420 pub const fn with_tracefilt(mut self, value: u8) -> Self {
14422 self.set_tracefilt(value);
14423 self
14424 }
14425
14426 pub const fn tracebuffer(self) -> u8 {
14428 ((self.bits() >> Self::TRACEBUFFER_SHIFT) & 0b1111) as u8
14429 }
14430
14431 pub const fn set_tracebuffer(&mut self, value: u8) {
14433 let offset = Self::TRACEBUFFER_SHIFT;
14434 assert!(value & (Self::TRACEBUFFER_MASK as u8) == value);
14435 *self = Self::from_bits_retain(
14436 (self.bits() & !(Self::TRACEBUFFER_MASK << offset)) | ((value as u64) << offset),
14437 );
14438 }
14439
14440 pub const fn with_tracebuffer(mut self, value: u8) -> Self {
14442 self.set_tracebuffer(value);
14443 self
14444 }
14445
14446 pub const fn mtpmu(self) -> u8 {
14448 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
14449 }
14450
14451 pub const fn set_mtpmu(&mut self, value: u8) {
14453 let offset = Self::MTPMU_SHIFT;
14454 assert!(value & (Self::MTPMU_MASK as u8) == value);
14455 *self = Self::from_bits_retain(
14456 (self.bits() & !(Self::MTPMU_MASK << offset)) | ((value as u64) << offset),
14457 );
14458 }
14459
14460 pub const fn with_mtpmu(mut self, value: u8) -> Self {
14462 self.set_mtpmu(value);
14463 self
14464 }
14465
14466 pub const fn brbe(self) -> u8 {
14468 ((self.bits() >> Self::BRBE_SHIFT) & 0b1111) as u8
14469 }
14470
14471 pub const fn set_brbe(&mut self, value: u8) {
14473 let offset = Self::BRBE_SHIFT;
14474 assert!(value & (Self::BRBE_MASK as u8) == value);
14475 *self = Self::from_bits_retain(
14476 (self.bits() & !(Self::BRBE_MASK << offset)) | ((value as u64) << offset),
14477 );
14478 }
14479
14480 pub const fn with_brbe(mut self, value: u8) -> Self {
14482 self.set_brbe(value);
14483 self
14484 }
14485
14486 pub const fn exttrcbuff(self) -> u8 {
14488 ((self.bits() >> Self::EXTTRCBUFF_SHIFT) & 0b1111) as u8
14489 }
14490
14491 pub const fn set_exttrcbuff(&mut self, value: u8) {
14493 let offset = Self::EXTTRCBUFF_SHIFT;
14494 assert!(value & (Self::EXTTRCBUFF_MASK as u8) == value);
14495 *self = Self::from_bits_retain(
14496 (self.bits() & !(Self::EXTTRCBUFF_MASK << offset)) | ((value as u64) << offset),
14497 );
14498 }
14499
14500 pub const fn with_exttrcbuff(mut self, value: u8) -> Self {
14502 self.set_exttrcbuff(value);
14503 self
14504 }
14505
14506 pub const fn hpmn0(self) -> u8 {
14508 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
14509 }
14510
14511 pub const fn set_hpmn0(&mut self, value: u8) {
14513 let offset = Self::HPMN0_SHIFT;
14514 assert!(value & (Self::HPMN0_MASK as u8) == value);
14515 *self = Self::from_bits_retain(
14516 (self.bits() & !(Self::HPMN0_MASK << offset)) | ((value as u64) << offset),
14517 );
14518 }
14519
14520 pub const fn with_hpmn0(mut self, value: u8) -> Self {
14522 self.set_hpmn0(value);
14523 self
14524 }
14525}
14526
14527#[cfg(feature = "el1")]
14528bitflags! {
14529 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14531 #[repr(transparent)]
14532 pub struct IdAa64dfr1El1: u64 {
14533 }
14534}
14535
14536#[cfg(feature = "el1")]
14537impl IdAa64dfr1El1 {
14538 pub const SYSPMUID_SHIFT: u32 = 0;
14540 pub const SYSPMUID_MASK: u64 = 0b11111111;
14542 pub const BRPS_SHIFT: u32 = 8;
14544 pub const BRPS_MASK: u64 = 0b11111111;
14546 pub const WRPS_SHIFT: u32 = 16;
14548 pub const WRPS_MASK: u64 = 0b11111111;
14550 pub const CTX_CMPS_SHIFT: u32 = 24;
14552 pub const CTX_CMPS_MASK: u64 = 0b11111111;
14554 pub const SPMU_SHIFT: u32 = 32;
14556 pub const SPMU_MASK: u64 = 0b1111;
14558 pub const PMICNTR_SHIFT: u32 = 36;
14560 pub const PMICNTR_MASK: u64 = 0b1111;
14562 pub const ABLE_SHIFT: u32 = 40;
14564 pub const ABLE_MASK: u64 = 0b1111;
14566 pub const ITE_SHIFT: u32 = 44;
14568 pub const ITE_MASK: u64 = 0b1111;
14570 pub const EBEP_SHIFT: u32 = 48;
14572 pub const EBEP_MASK: u64 = 0b1111;
14574 pub const DPFZS_SHIFT: u32 = 52;
14576 pub const DPFZS_MASK: u64 = 0b1111;
14578 pub const ABL_CMPS_SHIFT: u32 = 56;
14580 pub const ABL_CMPS_MASK: u64 = 0b11111111;
14582
14583 pub const fn syspmuid(self) -> u8 {
14585 ((self.bits() >> Self::SYSPMUID_SHIFT) & 0b11111111) as u8
14586 }
14587
14588 pub const fn set_syspmuid(&mut self, value: u8) {
14590 let offset = Self::SYSPMUID_SHIFT;
14591 assert!(value & (Self::SYSPMUID_MASK as u8) == value);
14592 *self = Self::from_bits_retain(
14593 (self.bits() & !(Self::SYSPMUID_MASK << offset)) | ((value as u64) << offset),
14594 );
14595 }
14596
14597 pub const fn with_syspmuid(mut self, value: u8) -> Self {
14599 self.set_syspmuid(value);
14600 self
14601 }
14602
14603 pub const fn brps(self) -> u8 {
14605 ((self.bits() >> Self::BRPS_SHIFT) & 0b11111111) as u8
14606 }
14607
14608 pub const fn set_brps(&mut self, value: u8) {
14610 let offset = Self::BRPS_SHIFT;
14611 assert!(value & (Self::BRPS_MASK as u8) == value);
14612 *self = Self::from_bits_retain(
14613 (self.bits() & !(Self::BRPS_MASK << offset)) | ((value as u64) << offset),
14614 );
14615 }
14616
14617 pub const fn with_brps(mut self, value: u8) -> Self {
14619 self.set_brps(value);
14620 self
14621 }
14622
14623 pub const fn wrps(self) -> u8 {
14625 ((self.bits() >> Self::WRPS_SHIFT) & 0b11111111) as u8
14626 }
14627
14628 pub const fn set_wrps(&mut self, value: u8) {
14630 let offset = Self::WRPS_SHIFT;
14631 assert!(value & (Self::WRPS_MASK as u8) == value);
14632 *self = Self::from_bits_retain(
14633 (self.bits() & !(Self::WRPS_MASK << offset)) | ((value as u64) << offset),
14634 );
14635 }
14636
14637 pub const fn with_wrps(mut self, value: u8) -> Self {
14639 self.set_wrps(value);
14640 self
14641 }
14642
14643 pub const fn ctx_cmps(self) -> u8 {
14645 ((self.bits() >> Self::CTX_CMPS_SHIFT) & 0b11111111) as u8
14646 }
14647
14648 pub const fn set_ctx_cmps(&mut self, value: u8) {
14650 let offset = Self::CTX_CMPS_SHIFT;
14651 assert!(value & (Self::CTX_CMPS_MASK as u8) == value);
14652 *self = Self::from_bits_retain(
14653 (self.bits() & !(Self::CTX_CMPS_MASK << offset)) | ((value as u64) << offset),
14654 );
14655 }
14656
14657 pub const fn with_ctx_cmps(mut self, value: u8) -> Self {
14659 self.set_ctx_cmps(value);
14660 self
14661 }
14662
14663 pub const fn spmu(self) -> u8 {
14665 ((self.bits() >> Self::SPMU_SHIFT) & 0b1111) as u8
14666 }
14667
14668 pub const fn set_spmu(&mut self, value: u8) {
14670 let offset = Self::SPMU_SHIFT;
14671 assert!(value & (Self::SPMU_MASK as u8) == value);
14672 *self = Self::from_bits_retain(
14673 (self.bits() & !(Self::SPMU_MASK << offset)) | ((value as u64) << offset),
14674 );
14675 }
14676
14677 pub const fn with_spmu(mut self, value: u8) -> Self {
14679 self.set_spmu(value);
14680 self
14681 }
14682
14683 pub const fn pmicntr(self) -> u8 {
14685 ((self.bits() >> Self::PMICNTR_SHIFT) & 0b1111) as u8
14686 }
14687
14688 pub const fn set_pmicntr(&mut self, value: u8) {
14690 let offset = Self::PMICNTR_SHIFT;
14691 assert!(value & (Self::PMICNTR_MASK as u8) == value);
14692 *self = Self::from_bits_retain(
14693 (self.bits() & !(Self::PMICNTR_MASK << offset)) | ((value as u64) << offset),
14694 );
14695 }
14696
14697 pub const fn with_pmicntr(mut self, value: u8) -> Self {
14699 self.set_pmicntr(value);
14700 self
14701 }
14702
14703 pub const fn able(self) -> u8 {
14705 ((self.bits() >> Self::ABLE_SHIFT) & 0b1111) as u8
14706 }
14707
14708 pub const fn set_able(&mut self, value: u8) {
14710 let offset = Self::ABLE_SHIFT;
14711 assert!(value & (Self::ABLE_MASK as u8) == value);
14712 *self = Self::from_bits_retain(
14713 (self.bits() & !(Self::ABLE_MASK << offset)) | ((value as u64) << offset),
14714 );
14715 }
14716
14717 pub const fn with_able(mut self, value: u8) -> Self {
14719 self.set_able(value);
14720 self
14721 }
14722
14723 pub const fn ite(self) -> u8 {
14725 ((self.bits() >> Self::ITE_SHIFT) & 0b1111) as u8
14726 }
14727
14728 pub const fn set_ite(&mut self, value: u8) {
14730 let offset = Self::ITE_SHIFT;
14731 assert!(value & (Self::ITE_MASK as u8) == value);
14732 *self = Self::from_bits_retain(
14733 (self.bits() & !(Self::ITE_MASK << offset)) | ((value as u64) << offset),
14734 );
14735 }
14736
14737 pub const fn with_ite(mut self, value: u8) -> Self {
14739 self.set_ite(value);
14740 self
14741 }
14742
14743 pub const fn ebep(self) -> u8 {
14745 ((self.bits() >> Self::EBEP_SHIFT) & 0b1111) as u8
14746 }
14747
14748 pub const fn set_ebep(&mut self, value: u8) {
14750 let offset = Self::EBEP_SHIFT;
14751 assert!(value & (Self::EBEP_MASK as u8) == value);
14752 *self = Self::from_bits_retain(
14753 (self.bits() & !(Self::EBEP_MASK << offset)) | ((value as u64) << offset),
14754 );
14755 }
14756
14757 pub const fn with_ebep(mut self, value: u8) -> Self {
14759 self.set_ebep(value);
14760 self
14761 }
14762
14763 pub const fn dpfzs(self) -> u8 {
14765 ((self.bits() >> Self::DPFZS_SHIFT) & 0b1111) as u8
14766 }
14767
14768 pub const fn set_dpfzs(&mut self, value: u8) {
14770 let offset = Self::DPFZS_SHIFT;
14771 assert!(value & (Self::DPFZS_MASK as u8) == value);
14772 *self = Self::from_bits_retain(
14773 (self.bits() & !(Self::DPFZS_MASK << offset)) | ((value as u64) << offset),
14774 );
14775 }
14776
14777 pub const fn with_dpfzs(mut self, value: u8) -> Self {
14779 self.set_dpfzs(value);
14780 self
14781 }
14782
14783 pub const fn abl_cmps(self) -> u8 {
14785 ((self.bits() >> Self::ABL_CMPS_SHIFT) & 0b11111111) as u8
14786 }
14787
14788 pub const fn set_abl_cmps(&mut self, value: u8) {
14790 let offset = Self::ABL_CMPS_SHIFT;
14791 assert!(value & (Self::ABL_CMPS_MASK as u8) == value);
14792 *self = Self::from_bits_retain(
14793 (self.bits() & !(Self::ABL_CMPS_MASK << offset)) | ((value as u64) << offset),
14794 );
14795 }
14796
14797 pub const fn with_abl_cmps(mut self, value: u8) -> Self {
14799 self.set_abl_cmps(value);
14800 self
14801 }
14802}
14803
14804#[cfg(feature = "el1")]
14805bitflags! {
14806 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
14808 #[repr(transparent)]
14809 pub struct IdAa64isar1El1: u64 {
14810 }
14811}
14812
14813#[cfg(feature = "el1")]
14814impl IdAa64isar1El1 {
14815 pub const DPB_SHIFT: u32 = 0;
14817 pub const DPB_MASK: u64 = 0b1111;
14819 pub const APA_SHIFT: u32 = 4;
14821 pub const APA_MASK: u64 = 0b1111;
14823 pub const API_SHIFT: u32 = 8;
14825 pub const API_MASK: u64 = 0b1111;
14827 pub const JSCVT_SHIFT: u32 = 12;
14829 pub const JSCVT_MASK: u64 = 0b1111;
14831 pub const FCMA_SHIFT: u32 = 16;
14833 pub const FCMA_MASK: u64 = 0b1111;
14835 pub const LRCPC_SHIFT: u32 = 20;
14837 pub const LRCPC_MASK: u64 = 0b1111;
14839 pub const GPA_SHIFT: u32 = 24;
14841 pub const GPA_MASK: u64 = 0b1111;
14843 pub const GPI_SHIFT: u32 = 28;
14845 pub const GPI_MASK: u64 = 0b1111;
14847 pub const FRINTTS_SHIFT: u32 = 32;
14849 pub const FRINTTS_MASK: u64 = 0b1111;
14851 pub const SB_SHIFT: u32 = 36;
14853 pub const SB_MASK: u64 = 0b1111;
14855 pub const SPECRES_SHIFT: u32 = 40;
14857 pub const SPECRES_MASK: u64 = 0b1111;
14859 pub const BF16_SHIFT: u32 = 44;
14861 pub const BF16_MASK: u64 = 0b1111;
14863 pub const DGH_SHIFT: u32 = 48;
14865 pub const DGH_MASK: u64 = 0b1111;
14867 pub const I8MM_SHIFT: u32 = 52;
14869 pub const I8MM_MASK: u64 = 0b1111;
14871 pub const XS_SHIFT: u32 = 56;
14873 pub const XS_MASK: u64 = 0b1111;
14875 pub const LS64_SHIFT: u32 = 60;
14877 pub const LS64_MASK: u64 = 0b1111;
14879
14880 pub const fn dpb(self) -> u8 {
14882 ((self.bits() >> Self::DPB_SHIFT) & 0b1111) as u8
14883 }
14884
14885 pub const fn set_dpb(&mut self, value: u8) {
14887 let offset = Self::DPB_SHIFT;
14888 assert!(value & (Self::DPB_MASK as u8) == value);
14889 *self = Self::from_bits_retain(
14890 (self.bits() & !(Self::DPB_MASK << offset)) | ((value as u64) << offset),
14891 );
14892 }
14893
14894 pub const fn with_dpb(mut self, value: u8) -> Self {
14896 self.set_dpb(value);
14897 self
14898 }
14899
14900 pub const fn apa(self) -> u8 {
14902 ((self.bits() >> Self::APA_SHIFT) & 0b1111) as u8
14903 }
14904
14905 pub const fn set_apa(&mut self, value: u8) {
14907 let offset = Self::APA_SHIFT;
14908 assert!(value & (Self::APA_MASK as u8) == value);
14909 *self = Self::from_bits_retain(
14910 (self.bits() & !(Self::APA_MASK << offset)) | ((value as u64) << offset),
14911 );
14912 }
14913
14914 pub const fn with_apa(mut self, value: u8) -> Self {
14916 self.set_apa(value);
14917 self
14918 }
14919
14920 pub const fn api(self) -> u8 {
14922 ((self.bits() >> Self::API_SHIFT) & 0b1111) as u8
14923 }
14924
14925 pub const fn set_api(&mut self, value: u8) {
14927 let offset = Self::API_SHIFT;
14928 assert!(value & (Self::API_MASK as u8) == value);
14929 *self = Self::from_bits_retain(
14930 (self.bits() & !(Self::API_MASK << offset)) | ((value as u64) << offset),
14931 );
14932 }
14933
14934 pub const fn with_api(mut self, value: u8) -> Self {
14936 self.set_api(value);
14937 self
14938 }
14939
14940 pub const fn jscvt(self) -> u8 {
14942 ((self.bits() >> Self::JSCVT_SHIFT) & 0b1111) as u8
14943 }
14944
14945 pub const fn set_jscvt(&mut self, value: u8) {
14947 let offset = Self::JSCVT_SHIFT;
14948 assert!(value & (Self::JSCVT_MASK as u8) == value);
14949 *self = Self::from_bits_retain(
14950 (self.bits() & !(Self::JSCVT_MASK << offset)) | ((value as u64) << offset),
14951 );
14952 }
14953
14954 pub const fn with_jscvt(mut self, value: u8) -> Self {
14956 self.set_jscvt(value);
14957 self
14958 }
14959
14960 pub const fn fcma(self) -> u8 {
14962 ((self.bits() >> Self::FCMA_SHIFT) & 0b1111) as u8
14963 }
14964
14965 pub const fn set_fcma(&mut self, value: u8) {
14967 let offset = Self::FCMA_SHIFT;
14968 assert!(value & (Self::FCMA_MASK as u8) == value);
14969 *self = Self::from_bits_retain(
14970 (self.bits() & !(Self::FCMA_MASK << offset)) | ((value as u64) << offset),
14971 );
14972 }
14973
14974 pub const fn with_fcma(mut self, value: u8) -> Self {
14976 self.set_fcma(value);
14977 self
14978 }
14979
14980 pub const fn lrcpc(self) -> u8 {
14982 ((self.bits() >> Self::LRCPC_SHIFT) & 0b1111) as u8
14983 }
14984
14985 pub const fn set_lrcpc(&mut self, value: u8) {
14987 let offset = Self::LRCPC_SHIFT;
14988 assert!(value & (Self::LRCPC_MASK as u8) == value);
14989 *self = Self::from_bits_retain(
14990 (self.bits() & !(Self::LRCPC_MASK << offset)) | ((value as u64) << offset),
14991 );
14992 }
14993
14994 pub const fn with_lrcpc(mut self, value: u8) -> Self {
14996 self.set_lrcpc(value);
14997 self
14998 }
14999
15000 pub const fn gpa(self) -> u8 {
15002 ((self.bits() >> Self::GPA_SHIFT) & 0b1111) as u8
15003 }
15004
15005 pub const fn set_gpa(&mut self, value: u8) {
15007 let offset = Self::GPA_SHIFT;
15008 assert!(value & (Self::GPA_MASK as u8) == value);
15009 *self = Self::from_bits_retain(
15010 (self.bits() & !(Self::GPA_MASK << offset)) | ((value as u64) << offset),
15011 );
15012 }
15013
15014 pub const fn with_gpa(mut self, value: u8) -> Self {
15016 self.set_gpa(value);
15017 self
15018 }
15019
15020 pub const fn gpi(self) -> u8 {
15022 ((self.bits() >> Self::GPI_SHIFT) & 0b1111) as u8
15023 }
15024
15025 pub const fn set_gpi(&mut self, value: u8) {
15027 let offset = Self::GPI_SHIFT;
15028 assert!(value & (Self::GPI_MASK as u8) == value);
15029 *self = Self::from_bits_retain(
15030 (self.bits() & !(Self::GPI_MASK << offset)) | ((value as u64) << offset),
15031 );
15032 }
15033
15034 pub const fn with_gpi(mut self, value: u8) -> Self {
15036 self.set_gpi(value);
15037 self
15038 }
15039
15040 pub const fn frintts(self) -> u8 {
15042 ((self.bits() >> Self::FRINTTS_SHIFT) & 0b1111) as u8
15043 }
15044
15045 pub const fn set_frintts(&mut self, value: u8) {
15047 let offset = Self::FRINTTS_SHIFT;
15048 assert!(value & (Self::FRINTTS_MASK as u8) == value);
15049 *self = Self::from_bits_retain(
15050 (self.bits() & !(Self::FRINTTS_MASK << offset)) | ((value as u64) << offset),
15051 );
15052 }
15053
15054 pub const fn with_frintts(mut self, value: u8) -> Self {
15056 self.set_frintts(value);
15057 self
15058 }
15059
15060 pub const fn sb(self) -> u8 {
15062 ((self.bits() >> Self::SB_SHIFT) & 0b1111) as u8
15063 }
15064
15065 pub const fn set_sb(&mut self, value: u8) {
15067 let offset = Self::SB_SHIFT;
15068 assert!(value & (Self::SB_MASK as u8) == value);
15069 *self = Self::from_bits_retain(
15070 (self.bits() & !(Self::SB_MASK << offset)) | ((value as u64) << offset),
15071 );
15072 }
15073
15074 pub const fn with_sb(mut self, value: u8) -> Self {
15076 self.set_sb(value);
15077 self
15078 }
15079
15080 pub const fn specres(self) -> u8 {
15082 ((self.bits() >> Self::SPECRES_SHIFT) & 0b1111) as u8
15083 }
15084
15085 pub const fn set_specres(&mut self, value: u8) {
15087 let offset = Self::SPECRES_SHIFT;
15088 assert!(value & (Self::SPECRES_MASK as u8) == value);
15089 *self = Self::from_bits_retain(
15090 (self.bits() & !(Self::SPECRES_MASK << offset)) | ((value as u64) << offset),
15091 );
15092 }
15093
15094 pub const fn with_specres(mut self, value: u8) -> Self {
15096 self.set_specres(value);
15097 self
15098 }
15099
15100 pub const fn bf16(self) -> u8 {
15102 ((self.bits() >> Self::BF16_SHIFT) & 0b1111) as u8
15103 }
15104
15105 pub const fn set_bf16(&mut self, value: u8) {
15107 let offset = Self::BF16_SHIFT;
15108 assert!(value & (Self::BF16_MASK as u8) == value);
15109 *self = Self::from_bits_retain(
15110 (self.bits() & !(Self::BF16_MASK << offset)) | ((value as u64) << offset),
15111 );
15112 }
15113
15114 pub const fn with_bf16(mut self, value: u8) -> Self {
15116 self.set_bf16(value);
15117 self
15118 }
15119
15120 pub const fn dgh(self) -> u8 {
15122 ((self.bits() >> Self::DGH_SHIFT) & 0b1111) as u8
15123 }
15124
15125 pub const fn set_dgh(&mut self, value: u8) {
15127 let offset = Self::DGH_SHIFT;
15128 assert!(value & (Self::DGH_MASK as u8) == value);
15129 *self = Self::from_bits_retain(
15130 (self.bits() & !(Self::DGH_MASK << offset)) | ((value as u64) << offset),
15131 );
15132 }
15133
15134 pub const fn with_dgh(mut self, value: u8) -> Self {
15136 self.set_dgh(value);
15137 self
15138 }
15139
15140 pub const fn i8mm(self) -> u8 {
15142 ((self.bits() >> Self::I8MM_SHIFT) & 0b1111) as u8
15143 }
15144
15145 pub const fn set_i8mm(&mut self, value: u8) {
15147 let offset = Self::I8MM_SHIFT;
15148 assert!(value & (Self::I8MM_MASK as u8) == value);
15149 *self = Self::from_bits_retain(
15150 (self.bits() & !(Self::I8MM_MASK << offset)) | ((value as u64) << offset),
15151 );
15152 }
15153
15154 pub const fn with_i8mm(mut self, value: u8) -> Self {
15156 self.set_i8mm(value);
15157 self
15158 }
15159
15160 pub const fn xs(self) -> u8 {
15162 ((self.bits() >> Self::XS_SHIFT) & 0b1111) as u8
15163 }
15164
15165 pub const fn set_xs(&mut self, value: u8) {
15167 let offset = Self::XS_SHIFT;
15168 assert!(value & (Self::XS_MASK as u8) == value);
15169 *self = Self::from_bits_retain(
15170 (self.bits() & !(Self::XS_MASK << offset)) | ((value as u64) << offset),
15171 );
15172 }
15173
15174 pub const fn with_xs(mut self, value: u8) -> Self {
15176 self.set_xs(value);
15177 self
15178 }
15179
15180 pub const fn ls64(self) -> u8 {
15182 ((self.bits() >> Self::LS64_SHIFT) & 0b1111) as u8
15183 }
15184
15185 pub const fn set_ls64(&mut self, value: u8) {
15187 let offset = Self::LS64_SHIFT;
15188 assert!(value & (Self::LS64_MASK as u8) == value);
15189 *self = Self::from_bits_retain(
15190 (self.bits() & !(Self::LS64_MASK << offset)) | ((value as u64) << offset),
15191 );
15192 }
15193
15194 pub const fn with_ls64(mut self, value: u8) -> Self {
15196 self.set_ls64(value);
15197 self
15198 }
15199}
15200
15201#[cfg(feature = "el1")]
15202bitflags! {
15203 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
15205 #[repr(transparent)]
15206 pub struct IdAa64isar2El1: u64 {
15207 }
15208}
15209
15210#[cfg(feature = "el1")]
15211impl IdAa64isar2El1 {
15212 pub const WFXT_SHIFT: u32 = 0;
15214 pub const WFXT_MASK: u64 = 0b1111;
15216 pub const RPRES_SHIFT: u32 = 4;
15218 pub const RPRES_MASK: u64 = 0b1111;
15220 pub const GPA3_SHIFT: u32 = 8;
15222 pub const GPA3_MASK: u64 = 0b1111;
15224 pub const APA3_SHIFT: u32 = 12;
15226 pub const APA3_MASK: u64 = 0b1111;
15228 pub const MOPS_SHIFT: u32 = 16;
15230 pub const MOPS_MASK: u64 = 0b1111;
15232 pub const BC_SHIFT: u32 = 20;
15234 pub const BC_MASK: u64 = 0b1111;
15236 pub const PAC_FRAC_SHIFT: u32 = 24;
15238 pub const PAC_FRAC_MASK: u64 = 0b1111;
15240 pub const CLRBHB_SHIFT: u32 = 28;
15242 pub const CLRBHB_MASK: u64 = 0b1111;
15244 pub const SYSREG_128_SHIFT: u32 = 32;
15246 pub const SYSREG_128_MASK: u64 = 0b1111;
15248 pub const SYSINSTR_128_SHIFT: u32 = 36;
15250 pub const SYSINSTR_128_MASK: u64 = 0b1111;
15252 pub const PRFMSLC_SHIFT: u32 = 40;
15254 pub const PRFMSLC_MASK: u64 = 0b1111;
15256 pub const PCDPHINT_SHIFT: u32 = 44;
15258 pub const PCDPHINT_MASK: u64 = 0b1111;
15260 pub const RPRFM_SHIFT: u32 = 48;
15262 pub const RPRFM_MASK: u64 = 0b1111;
15264 pub const CSSC_SHIFT: u32 = 52;
15266 pub const CSSC_MASK: u64 = 0b1111;
15268 pub const LUT_SHIFT: u32 = 56;
15270 pub const LUT_MASK: u64 = 0b1111;
15272 pub const ATS1A_SHIFT: u32 = 60;
15274 pub const ATS1A_MASK: u64 = 0b1111;
15276
15277 pub const fn wfxt(self) -> u8 {
15279 ((self.bits() >> Self::WFXT_SHIFT) & 0b1111) as u8
15280 }
15281
15282 pub const fn set_wfxt(&mut self, value: u8) {
15284 let offset = Self::WFXT_SHIFT;
15285 assert!(value & (Self::WFXT_MASK as u8) == value);
15286 *self = Self::from_bits_retain(
15287 (self.bits() & !(Self::WFXT_MASK << offset)) | ((value as u64) << offset),
15288 );
15289 }
15290
15291 pub const fn with_wfxt(mut self, value: u8) -> Self {
15293 self.set_wfxt(value);
15294 self
15295 }
15296
15297 pub const fn rpres(self) -> u8 {
15299 ((self.bits() >> Self::RPRES_SHIFT) & 0b1111) as u8
15300 }
15301
15302 pub const fn set_rpres(&mut self, value: u8) {
15304 let offset = Self::RPRES_SHIFT;
15305 assert!(value & (Self::RPRES_MASK as u8) == value);
15306 *self = Self::from_bits_retain(
15307 (self.bits() & !(Self::RPRES_MASK << offset)) | ((value as u64) << offset),
15308 );
15309 }
15310
15311 pub const fn with_rpres(mut self, value: u8) -> Self {
15313 self.set_rpres(value);
15314 self
15315 }
15316
15317 pub const fn gpa3(self) -> u8 {
15319 ((self.bits() >> Self::GPA3_SHIFT) & 0b1111) as u8
15320 }
15321
15322 pub const fn set_gpa3(&mut self, value: u8) {
15324 let offset = Self::GPA3_SHIFT;
15325 assert!(value & (Self::GPA3_MASK as u8) == value);
15326 *self = Self::from_bits_retain(
15327 (self.bits() & !(Self::GPA3_MASK << offset)) | ((value as u64) << offset),
15328 );
15329 }
15330
15331 pub const fn with_gpa3(mut self, value: u8) -> Self {
15333 self.set_gpa3(value);
15334 self
15335 }
15336
15337 pub const fn apa3(self) -> u8 {
15339 ((self.bits() >> Self::APA3_SHIFT) & 0b1111) as u8
15340 }
15341
15342 pub const fn set_apa3(&mut self, value: u8) {
15344 let offset = Self::APA3_SHIFT;
15345 assert!(value & (Self::APA3_MASK as u8) == value);
15346 *self = Self::from_bits_retain(
15347 (self.bits() & !(Self::APA3_MASK << offset)) | ((value as u64) << offset),
15348 );
15349 }
15350
15351 pub const fn with_apa3(mut self, value: u8) -> Self {
15353 self.set_apa3(value);
15354 self
15355 }
15356
15357 pub const fn mops(self) -> u8 {
15359 ((self.bits() >> Self::MOPS_SHIFT) & 0b1111) as u8
15360 }
15361
15362 pub const fn set_mops(&mut self, value: u8) {
15364 let offset = Self::MOPS_SHIFT;
15365 assert!(value & (Self::MOPS_MASK as u8) == value);
15366 *self = Self::from_bits_retain(
15367 (self.bits() & !(Self::MOPS_MASK << offset)) | ((value as u64) << offset),
15368 );
15369 }
15370
15371 pub const fn with_mops(mut self, value: u8) -> Self {
15373 self.set_mops(value);
15374 self
15375 }
15376
15377 pub const fn bc(self) -> u8 {
15379 ((self.bits() >> Self::BC_SHIFT) & 0b1111) as u8
15380 }
15381
15382 pub const fn set_bc(&mut self, value: u8) {
15384 let offset = Self::BC_SHIFT;
15385 assert!(value & (Self::BC_MASK as u8) == value);
15386 *self = Self::from_bits_retain(
15387 (self.bits() & !(Self::BC_MASK << offset)) | ((value as u64) << offset),
15388 );
15389 }
15390
15391 pub const fn with_bc(mut self, value: u8) -> Self {
15393 self.set_bc(value);
15394 self
15395 }
15396
15397 pub const fn pac_frac(self) -> u8 {
15399 ((self.bits() >> Self::PAC_FRAC_SHIFT) & 0b1111) as u8
15400 }
15401
15402 pub const fn set_pac_frac(&mut self, value: u8) {
15404 let offset = Self::PAC_FRAC_SHIFT;
15405 assert!(value & (Self::PAC_FRAC_MASK as u8) == value);
15406 *self = Self::from_bits_retain(
15407 (self.bits() & !(Self::PAC_FRAC_MASK << offset)) | ((value as u64) << offset),
15408 );
15409 }
15410
15411 pub const fn with_pac_frac(mut self, value: u8) -> Self {
15413 self.set_pac_frac(value);
15414 self
15415 }
15416
15417 pub const fn clrbhb(self) -> u8 {
15419 ((self.bits() >> Self::CLRBHB_SHIFT) & 0b1111) as u8
15420 }
15421
15422 pub const fn set_clrbhb(&mut self, value: u8) {
15424 let offset = Self::CLRBHB_SHIFT;
15425 assert!(value & (Self::CLRBHB_MASK as u8) == value);
15426 *self = Self::from_bits_retain(
15427 (self.bits() & !(Self::CLRBHB_MASK << offset)) | ((value as u64) << offset),
15428 );
15429 }
15430
15431 pub const fn with_clrbhb(mut self, value: u8) -> Self {
15433 self.set_clrbhb(value);
15434 self
15435 }
15436
15437 pub const fn sysreg_128(self) -> u8 {
15439 ((self.bits() >> Self::SYSREG_128_SHIFT) & 0b1111) as u8
15440 }
15441
15442 pub const fn set_sysreg_128(&mut self, value: u8) {
15444 let offset = Self::SYSREG_128_SHIFT;
15445 assert!(value & (Self::SYSREG_128_MASK as u8) == value);
15446 *self = Self::from_bits_retain(
15447 (self.bits() & !(Self::SYSREG_128_MASK << offset)) | ((value as u64) << offset),
15448 );
15449 }
15450
15451 pub const fn with_sysreg_128(mut self, value: u8) -> Self {
15453 self.set_sysreg_128(value);
15454 self
15455 }
15456
15457 pub const fn sysinstr_128(self) -> u8 {
15459 ((self.bits() >> Self::SYSINSTR_128_SHIFT) & 0b1111) as u8
15460 }
15461
15462 pub const fn set_sysinstr_128(&mut self, value: u8) {
15464 let offset = Self::SYSINSTR_128_SHIFT;
15465 assert!(value & (Self::SYSINSTR_128_MASK as u8) == value);
15466 *self = Self::from_bits_retain(
15467 (self.bits() & !(Self::SYSINSTR_128_MASK << offset)) | ((value as u64) << offset),
15468 );
15469 }
15470
15471 pub const fn with_sysinstr_128(mut self, value: u8) -> Self {
15473 self.set_sysinstr_128(value);
15474 self
15475 }
15476
15477 pub const fn prfmslc(self) -> u8 {
15479 ((self.bits() >> Self::PRFMSLC_SHIFT) & 0b1111) as u8
15480 }
15481
15482 pub const fn set_prfmslc(&mut self, value: u8) {
15484 let offset = Self::PRFMSLC_SHIFT;
15485 assert!(value & (Self::PRFMSLC_MASK as u8) == value);
15486 *self = Self::from_bits_retain(
15487 (self.bits() & !(Self::PRFMSLC_MASK << offset)) | ((value as u64) << offset),
15488 );
15489 }
15490
15491 pub const fn with_prfmslc(mut self, value: u8) -> Self {
15493 self.set_prfmslc(value);
15494 self
15495 }
15496
15497 pub const fn pcdphint(self) -> u8 {
15499 ((self.bits() >> Self::PCDPHINT_SHIFT) & 0b1111) as u8
15500 }
15501
15502 pub const fn set_pcdphint(&mut self, value: u8) {
15504 let offset = Self::PCDPHINT_SHIFT;
15505 assert!(value & (Self::PCDPHINT_MASK as u8) == value);
15506 *self = Self::from_bits_retain(
15507 (self.bits() & !(Self::PCDPHINT_MASK << offset)) | ((value as u64) << offset),
15508 );
15509 }
15510
15511 pub const fn with_pcdphint(mut self, value: u8) -> Self {
15513 self.set_pcdphint(value);
15514 self
15515 }
15516
15517 pub const fn rprfm(self) -> u8 {
15519 ((self.bits() >> Self::RPRFM_SHIFT) & 0b1111) as u8
15520 }
15521
15522 pub const fn set_rprfm(&mut self, value: u8) {
15524 let offset = Self::RPRFM_SHIFT;
15525 assert!(value & (Self::RPRFM_MASK as u8) == value);
15526 *self = Self::from_bits_retain(
15527 (self.bits() & !(Self::RPRFM_MASK << offset)) | ((value as u64) << offset),
15528 );
15529 }
15530
15531 pub const fn with_rprfm(mut self, value: u8) -> Self {
15533 self.set_rprfm(value);
15534 self
15535 }
15536
15537 pub const fn cssc(self) -> u8 {
15539 ((self.bits() >> Self::CSSC_SHIFT) & 0b1111) as u8
15540 }
15541
15542 pub const fn set_cssc(&mut self, value: u8) {
15544 let offset = Self::CSSC_SHIFT;
15545 assert!(value & (Self::CSSC_MASK as u8) == value);
15546 *self = Self::from_bits_retain(
15547 (self.bits() & !(Self::CSSC_MASK << offset)) | ((value as u64) << offset),
15548 );
15549 }
15550
15551 pub const fn with_cssc(mut self, value: u8) -> Self {
15553 self.set_cssc(value);
15554 self
15555 }
15556
15557 pub const fn lut(self) -> u8 {
15559 ((self.bits() >> Self::LUT_SHIFT) & 0b1111) as u8
15560 }
15561
15562 pub const fn set_lut(&mut self, value: u8) {
15564 let offset = Self::LUT_SHIFT;
15565 assert!(value & (Self::LUT_MASK as u8) == value);
15566 *self = Self::from_bits_retain(
15567 (self.bits() & !(Self::LUT_MASK << offset)) | ((value as u64) << offset),
15568 );
15569 }
15570
15571 pub const fn with_lut(mut self, value: u8) -> Self {
15573 self.set_lut(value);
15574 self
15575 }
15576
15577 pub const fn ats1a(self) -> u8 {
15579 ((self.bits() >> Self::ATS1A_SHIFT) & 0b1111) as u8
15580 }
15581
15582 pub const fn set_ats1a(&mut self, value: u8) {
15584 let offset = Self::ATS1A_SHIFT;
15585 assert!(value & (Self::ATS1A_MASK as u8) == value);
15586 *self = Self::from_bits_retain(
15587 (self.bits() & !(Self::ATS1A_MASK << offset)) | ((value as u64) << offset),
15588 );
15589 }
15590
15591 pub const fn with_ats1a(mut self, value: u8) -> Self {
15593 self.set_ats1a(value);
15594 self
15595 }
15596}
15597
15598#[cfg(feature = "el1")]
15599bitflags! {
15600 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
15602 #[repr(transparent)]
15603 pub struct IdAa64mmfr0El1: u64 {
15604 }
15605}
15606
15607#[cfg(feature = "el1")]
15608impl IdAa64mmfr0El1 {
15609 pub const PARANGE_SHIFT: u32 = 0;
15611 pub const PARANGE_MASK: u64 = 0b1111;
15613 pub const ASIDBITS_SHIFT: u32 = 4;
15615 pub const ASIDBITS_MASK: u64 = 0b1111;
15617 pub const BIGEND_SHIFT: u32 = 8;
15619 pub const BIGEND_MASK: u64 = 0b1111;
15621 pub const SNSMEM_SHIFT: u32 = 12;
15623 pub const SNSMEM_MASK: u64 = 0b1111;
15625 pub const BIGENDEL0_SHIFT: u32 = 16;
15627 pub const BIGENDEL0_MASK: u64 = 0b1111;
15629 pub const TGRAN16_SHIFT: u32 = 20;
15631 pub const TGRAN16_MASK: u64 = 0b1111;
15633 pub const TGRAN64_SHIFT: u32 = 24;
15635 pub const TGRAN64_MASK: u64 = 0b1111;
15637 pub const TGRAN4_SHIFT: u32 = 28;
15639 pub const TGRAN4_MASK: u64 = 0b1111;
15641 pub const TGRAN16_2_SHIFT: u32 = 32;
15643 pub const TGRAN16_2_MASK: u64 = 0b1111;
15645 pub const TGRAN64_2_SHIFT: u32 = 36;
15647 pub const TGRAN64_2_MASK: u64 = 0b1111;
15649 pub const TGRAN4_2_SHIFT: u32 = 40;
15651 pub const TGRAN4_2_MASK: u64 = 0b1111;
15653 pub const EXS_SHIFT: u32 = 44;
15655 pub const EXS_MASK: u64 = 0b1111;
15657 pub const FGT_SHIFT: u32 = 56;
15659 pub const FGT_MASK: u64 = 0b1111;
15661 pub const ECV_SHIFT: u32 = 60;
15663 pub const ECV_MASK: u64 = 0b1111;
15665
15666 pub const fn parange(self) -> u8 {
15668 ((self.bits() >> Self::PARANGE_SHIFT) & 0b1111) as u8
15669 }
15670
15671 pub const fn set_parange(&mut self, value: u8) {
15673 let offset = Self::PARANGE_SHIFT;
15674 assert!(value & (Self::PARANGE_MASK as u8) == value);
15675 *self = Self::from_bits_retain(
15676 (self.bits() & !(Self::PARANGE_MASK << offset)) | ((value as u64) << offset),
15677 );
15678 }
15679
15680 pub const fn with_parange(mut self, value: u8) -> Self {
15682 self.set_parange(value);
15683 self
15684 }
15685
15686 pub const fn asidbits(self) -> u8 {
15688 ((self.bits() >> Self::ASIDBITS_SHIFT) & 0b1111) as u8
15689 }
15690
15691 pub const fn set_asidbits(&mut self, value: u8) {
15693 let offset = Self::ASIDBITS_SHIFT;
15694 assert!(value & (Self::ASIDBITS_MASK as u8) == value);
15695 *self = Self::from_bits_retain(
15696 (self.bits() & !(Self::ASIDBITS_MASK << offset)) | ((value as u64) << offset),
15697 );
15698 }
15699
15700 pub const fn with_asidbits(mut self, value: u8) -> Self {
15702 self.set_asidbits(value);
15703 self
15704 }
15705
15706 pub const fn bigend(self) -> u8 {
15708 ((self.bits() >> Self::BIGEND_SHIFT) & 0b1111) as u8
15709 }
15710
15711 pub const fn set_bigend(&mut self, value: u8) {
15713 let offset = Self::BIGEND_SHIFT;
15714 assert!(value & (Self::BIGEND_MASK as u8) == value);
15715 *self = Self::from_bits_retain(
15716 (self.bits() & !(Self::BIGEND_MASK << offset)) | ((value as u64) << offset),
15717 );
15718 }
15719
15720 pub const fn with_bigend(mut self, value: u8) -> Self {
15722 self.set_bigend(value);
15723 self
15724 }
15725
15726 pub const fn snsmem(self) -> u8 {
15728 ((self.bits() >> Self::SNSMEM_SHIFT) & 0b1111) as u8
15729 }
15730
15731 pub const fn set_snsmem(&mut self, value: u8) {
15733 let offset = Self::SNSMEM_SHIFT;
15734 assert!(value & (Self::SNSMEM_MASK as u8) == value);
15735 *self = Self::from_bits_retain(
15736 (self.bits() & !(Self::SNSMEM_MASK << offset)) | ((value as u64) << offset),
15737 );
15738 }
15739
15740 pub const fn with_snsmem(mut self, value: u8) -> Self {
15742 self.set_snsmem(value);
15743 self
15744 }
15745
15746 pub const fn bigendel0(self) -> u8 {
15748 ((self.bits() >> Self::BIGENDEL0_SHIFT) & 0b1111) as u8
15749 }
15750
15751 pub const fn set_bigendel0(&mut self, value: u8) {
15753 let offset = Self::BIGENDEL0_SHIFT;
15754 assert!(value & (Self::BIGENDEL0_MASK as u8) == value);
15755 *self = Self::from_bits_retain(
15756 (self.bits() & !(Self::BIGENDEL0_MASK << offset)) | ((value as u64) << offset),
15757 );
15758 }
15759
15760 pub const fn with_bigendel0(mut self, value: u8) -> Self {
15762 self.set_bigendel0(value);
15763 self
15764 }
15765
15766 pub const fn tgran16(self) -> u8 {
15768 ((self.bits() >> Self::TGRAN16_SHIFT) & 0b1111) as u8
15769 }
15770
15771 pub const fn set_tgran16(&mut self, value: u8) {
15773 let offset = Self::TGRAN16_SHIFT;
15774 assert!(value & (Self::TGRAN16_MASK as u8) == value);
15775 *self = Self::from_bits_retain(
15776 (self.bits() & !(Self::TGRAN16_MASK << offset)) | ((value as u64) << offset),
15777 );
15778 }
15779
15780 pub const fn with_tgran16(mut self, value: u8) -> Self {
15782 self.set_tgran16(value);
15783 self
15784 }
15785
15786 pub const fn tgran64(self) -> u8 {
15788 ((self.bits() >> Self::TGRAN64_SHIFT) & 0b1111) as u8
15789 }
15790
15791 pub const fn set_tgran64(&mut self, value: u8) {
15793 let offset = Self::TGRAN64_SHIFT;
15794 assert!(value & (Self::TGRAN64_MASK as u8) == value);
15795 *self = Self::from_bits_retain(
15796 (self.bits() & !(Self::TGRAN64_MASK << offset)) | ((value as u64) << offset),
15797 );
15798 }
15799
15800 pub const fn with_tgran64(mut self, value: u8) -> Self {
15802 self.set_tgran64(value);
15803 self
15804 }
15805
15806 pub const fn tgran4(self) -> u8 {
15808 ((self.bits() >> Self::TGRAN4_SHIFT) & 0b1111) as u8
15809 }
15810
15811 pub const fn set_tgran4(&mut self, value: u8) {
15813 let offset = Self::TGRAN4_SHIFT;
15814 assert!(value & (Self::TGRAN4_MASK as u8) == value);
15815 *self = Self::from_bits_retain(
15816 (self.bits() & !(Self::TGRAN4_MASK << offset)) | ((value as u64) << offset),
15817 );
15818 }
15819
15820 pub const fn with_tgran4(mut self, value: u8) -> Self {
15822 self.set_tgran4(value);
15823 self
15824 }
15825
15826 pub const fn tgran16_2(self) -> u8 {
15828 ((self.bits() >> Self::TGRAN16_2_SHIFT) & 0b1111) as u8
15829 }
15830
15831 pub const fn set_tgran16_2(&mut self, value: u8) {
15833 let offset = Self::TGRAN16_2_SHIFT;
15834 assert!(value & (Self::TGRAN16_2_MASK as u8) == value);
15835 *self = Self::from_bits_retain(
15836 (self.bits() & !(Self::TGRAN16_2_MASK << offset)) | ((value as u64) << offset),
15837 );
15838 }
15839
15840 pub const fn with_tgran16_2(mut self, value: u8) -> Self {
15842 self.set_tgran16_2(value);
15843 self
15844 }
15845
15846 pub const fn tgran64_2(self) -> u8 {
15848 ((self.bits() >> Self::TGRAN64_2_SHIFT) & 0b1111) as u8
15849 }
15850
15851 pub const fn set_tgran64_2(&mut self, value: u8) {
15853 let offset = Self::TGRAN64_2_SHIFT;
15854 assert!(value & (Self::TGRAN64_2_MASK as u8) == value);
15855 *self = Self::from_bits_retain(
15856 (self.bits() & !(Self::TGRAN64_2_MASK << offset)) | ((value as u64) << offset),
15857 );
15858 }
15859
15860 pub const fn with_tgran64_2(mut self, value: u8) -> Self {
15862 self.set_tgran64_2(value);
15863 self
15864 }
15865
15866 pub const fn tgran4_2(self) -> u8 {
15868 ((self.bits() >> Self::TGRAN4_2_SHIFT) & 0b1111) as u8
15869 }
15870
15871 pub const fn set_tgran4_2(&mut self, value: u8) {
15873 let offset = Self::TGRAN4_2_SHIFT;
15874 assert!(value & (Self::TGRAN4_2_MASK as u8) == value);
15875 *self = Self::from_bits_retain(
15876 (self.bits() & !(Self::TGRAN4_2_MASK << offset)) | ((value as u64) << offset),
15877 );
15878 }
15879
15880 pub const fn with_tgran4_2(mut self, value: u8) -> Self {
15882 self.set_tgran4_2(value);
15883 self
15884 }
15885
15886 pub const fn exs(self) -> u8 {
15888 ((self.bits() >> Self::EXS_SHIFT) & 0b1111) as u8
15889 }
15890
15891 pub const fn set_exs(&mut self, value: u8) {
15893 let offset = Self::EXS_SHIFT;
15894 assert!(value & (Self::EXS_MASK as u8) == value);
15895 *self = Self::from_bits_retain(
15896 (self.bits() & !(Self::EXS_MASK << offset)) | ((value as u64) << offset),
15897 );
15898 }
15899
15900 pub const fn with_exs(mut self, value: u8) -> Self {
15902 self.set_exs(value);
15903 self
15904 }
15905
15906 pub const fn fgt(self) -> u8 {
15908 ((self.bits() >> Self::FGT_SHIFT) & 0b1111) as u8
15909 }
15910
15911 pub const fn set_fgt(&mut self, value: u8) {
15913 let offset = Self::FGT_SHIFT;
15914 assert!(value & (Self::FGT_MASK as u8) == value);
15915 *self = Self::from_bits_retain(
15916 (self.bits() & !(Self::FGT_MASK << offset)) | ((value as u64) << offset),
15917 );
15918 }
15919
15920 pub const fn with_fgt(mut self, value: u8) -> Self {
15922 self.set_fgt(value);
15923 self
15924 }
15925
15926 pub const fn ecv(self) -> u8 {
15928 ((self.bits() >> Self::ECV_SHIFT) & 0b1111) as u8
15929 }
15930
15931 pub const fn set_ecv(&mut self, value: u8) {
15933 let offset = Self::ECV_SHIFT;
15934 assert!(value & (Self::ECV_MASK as u8) == value);
15935 *self = Self::from_bits_retain(
15936 (self.bits() & !(Self::ECV_MASK << offset)) | ((value as u64) << offset),
15937 );
15938 }
15939
15940 pub const fn with_ecv(mut self, value: u8) -> Self {
15942 self.set_ecv(value);
15943 self
15944 }
15945}
15946
15947#[cfg(feature = "el1")]
15948bitflags! {
15949 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
15951 #[repr(transparent)]
15952 pub struct IdAa64mmfr1El1: u64 {
15953 }
15954}
15955
15956#[cfg(feature = "el1")]
15957impl IdAa64mmfr1El1 {
15958 pub const HAFDBS_SHIFT: u32 = 0;
15960 pub const HAFDBS_MASK: u64 = 0b1111;
15962 pub const VMIDBITS_SHIFT: u32 = 4;
15964 pub const VMIDBITS_MASK: u64 = 0b1111;
15966 pub const VH_SHIFT: u32 = 8;
15968 pub const VH_MASK: u64 = 0b1111;
15970 pub const HPDS_SHIFT: u32 = 12;
15972 pub const HPDS_MASK: u64 = 0b1111;
15974 pub const LO_SHIFT: u32 = 16;
15976 pub const LO_MASK: u64 = 0b1111;
15978 pub const PAN_SHIFT: u32 = 20;
15980 pub const PAN_MASK: u64 = 0b1111;
15982 pub const SPECSEI_SHIFT: u32 = 24;
15984 pub const SPECSEI_MASK: u64 = 0b1111;
15986 pub const XNX_SHIFT: u32 = 28;
15988 pub const XNX_MASK: u64 = 0b1111;
15990 pub const TWED_SHIFT: u32 = 32;
15992 pub const TWED_MASK: u64 = 0b1111;
15994 pub const ETS_SHIFT: u32 = 36;
15996 pub const ETS_MASK: u64 = 0b1111;
15998 pub const HCX_SHIFT: u32 = 40;
16000 pub const HCX_MASK: u64 = 0b1111;
16002 pub const AFP_SHIFT: u32 = 44;
16004 pub const AFP_MASK: u64 = 0b1111;
16006 pub const NTLBPA_SHIFT: u32 = 48;
16008 pub const NTLBPA_MASK: u64 = 0b1111;
16010 pub const TIDCP1_SHIFT: u32 = 52;
16012 pub const TIDCP1_MASK: u64 = 0b1111;
16014 pub const CMOW_SHIFT: u32 = 56;
16016 pub const CMOW_MASK: u64 = 0b1111;
16018 pub const ECBHB_SHIFT: u32 = 60;
16020 pub const ECBHB_MASK: u64 = 0b1111;
16022
16023 pub const fn hafdbs(self) -> u8 {
16025 ((self.bits() >> Self::HAFDBS_SHIFT) & 0b1111) as u8
16026 }
16027
16028 pub const fn set_hafdbs(&mut self, value: u8) {
16030 let offset = Self::HAFDBS_SHIFT;
16031 assert!(value & (Self::HAFDBS_MASK as u8) == value);
16032 *self = Self::from_bits_retain(
16033 (self.bits() & !(Self::HAFDBS_MASK << offset)) | ((value as u64) << offset),
16034 );
16035 }
16036
16037 pub const fn with_hafdbs(mut self, value: u8) -> Self {
16039 self.set_hafdbs(value);
16040 self
16041 }
16042
16043 pub const fn vmidbits(self) -> u8 {
16045 ((self.bits() >> Self::VMIDBITS_SHIFT) & 0b1111) as u8
16046 }
16047
16048 pub const fn set_vmidbits(&mut self, value: u8) {
16050 let offset = Self::VMIDBITS_SHIFT;
16051 assert!(value & (Self::VMIDBITS_MASK as u8) == value);
16052 *self = Self::from_bits_retain(
16053 (self.bits() & !(Self::VMIDBITS_MASK << offset)) | ((value as u64) << offset),
16054 );
16055 }
16056
16057 pub const fn with_vmidbits(mut self, value: u8) -> Self {
16059 self.set_vmidbits(value);
16060 self
16061 }
16062
16063 pub const fn vh(self) -> u8 {
16065 ((self.bits() >> Self::VH_SHIFT) & 0b1111) as u8
16066 }
16067
16068 pub const fn set_vh(&mut self, value: u8) {
16070 let offset = Self::VH_SHIFT;
16071 assert!(value & (Self::VH_MASK as u8) == value);
16072 *self = Self::from_bits_retain(
16073 (self.bits() & !(Self::VH_MASK << offset)) | ((value as u64) << offset),
16074 );
16075 }
16076
16077 pub const fn with_vh(mut self, value: u8) -> Self {
16079 self.set_vh(value);
16080 self
16081 }
16082
16083 pub const fn hpds(self) -> u8 {
16085 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
16086 }
16087
16088 pub const fn set_hpds(&mut self, value: u8) {
16090 let offset = Self::HPDS_SHIFT;
16091 assert!(value & (Self::HPDS_MASK as u8) == value);
16092 *self = Self::from_bits_retain(
16093 (self.bits() & !(Self::HPDS_MASK << offset)) | ((value as u64) << offset),
16094 );
16095 }
16096
16097 pub const fn with_hpds(mut self, value: u8) -> Self {
16099 self.set_hpds(value);
16100 self
16101 }
16102
16103 pub const fn lo(self) -> u8 {
16105 ((self.bits() >> Self::LO_SHIFT) & 0b1111) as u8
16106 }
16107
16108 pub const fn set_lo(&mut self, value: u8) {
16110 let offset = Self::LO_SHIFT;
16111 assert!(value & (Self::LO_MASK as u8) == value);
16112 *self = Self::from_bits_retain(
16113 (self.bits() & !(Self::LO_MASK << offset)) | ((value as u64) << offset),
16114 );
16115 }
16116
16117 pub const fn with_lo(mut self, value: u8) -> Self {
16119 self.set_lo(value);
16120 self
16121 }
16122
16123 pub const fn pan(self) -> u8 {
16125 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
16126 }
16127
16128 pub const fn set_pan(&mut self, value: u8) {
16130 let offset = Self::PAN_SHIFT;
16131 assert!(value & (Self::PAN_MASK as u8) == value);
16132 *self = Self::from_bits_retain(
16133 (self.bits() & !(Self::PAN_MASK << offset)) | ((value as u64) << offset),
16134 );
16135 }
16136
16137 pub const fn with_pan(mut self, value: u8) -> Self {
16139 self.set_pan(value);
16140 self
16141 }
16142
16143 pub const fn specsei(self) -> u8 {
16145 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
16146 }
16147
16148 pub const fn set_specsei(&mut self, value: u8) {
16150 let offset = Self::SPECSEI_SHIFT;
16151 assert!(value & (Self::SPECSEI_MASK as u8) == value);
16152 *self = Self::from_bits_retain(
16153 (self.bits() & !(Self::SPECSEI_MASK << offset)) | ((value as u64) << offset),
16154 );
16155 }
16156
16157 pub const fn with_specsei(mut self, value: u8) -> Self {
16159 self.set_specsei(value);
16160 self
16161 }
16162
16163 pub const fn xnx(self) -> u8 {
16165 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
16166 }
16167
16168 pub const fn set_xnx(&mut self, value: u8) {
16170 let offset = Self::XNX_SHIFT;
16171 assert!(value & (Self::XNX_MASK as u8) == value);
16172 *self = Self::from_bits_retain(
16173 (self.bits() & !(Self::XNX_MASK << offset)) | ((value as u64) << offset),
16174 );
16175 }
16176
16177 pub const fn with_xnx(mut self, value: u8) -> Self {
16179 self.set_xnx(value);
16180 self
16181 }
16182
16183 pub const fn twed(self) -> u8 {
16185 ((self.bits() >> Self::TWED_SHIFT) & 0b1111) as u8
16186 }
16187
16188 pub const fn set_twed(&mut self, value: u8) {
16190 let offset = Self::TWED_SHIFT;
16191 assert!(value & (Self::TWED_MASK as u8) == value);
16192 *self = Self::from_bits_retain(
16193 (self.bits() & !(Self::TWED_MASK << offset)) | ((value as u64) << offset),
16194 );
16195 }
16196
16197 pub const fn with_twed(mut self, value: u8) -> Self {
16199 self.set_twed(value);
16200 self
16201 }
16202
16203 pub const fn ets(self) -> u8 {
16205 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
16206 }
16207
16208 pub const fn set_ets(&mut self, value: u8) {
16210 let offset = Self::ETS_SHIFT;
16211 assert!(value & (Self::ETS_MASK as u8) == value);
16212 *self = Self::from_bits_retain(
16213 (self.bits() & !(Self::ETS_MASK << offset)) | ((value as u64) << offset),
16214 );
16215 }
16216
16217 pub const fn with_ets(mut self, value: u8) -> Self {
16219 self.set_ets(value);
16220 self
16221 }
16222
16223 pub const fn hcx(self) -> u8 {
16225 ((self.bits() >> Self::HCX_SHIFT) & 0b1111) as u8
16226 }
16227
16228 pub const fn set_hcx(&mut self, value: u8) {
16230 let offset = Self::HCX_SHIFT;
16231 assert!(value & (Self::HCX_MASK as u8) == value);
16232 *self = Self::from_bits_retain(
16233 (self.bits() & !(Self::HCX_MASK << offset)) | ((value as u64) << offset),
16234 );
16235 }
16236
16237 pub const fn with_hcx(mut self, value: u8) -> Self {
16239 self.set_hcx(value);
16240 self
16241 }
16242
16243 pub const fn afp(self) -> u8 {
16245 ((self.bits() >> Self::AFP_SHIFT) & 0b1111) as u8
16246 }
16247
16248 pub const fn set_afp(&mut self, value: u8) {
16250 let offset = Self::AFP_SHIFT;
16251 assert!(value & (Self::AFP_MASK as u8) == value);
16252 *self = Self::from_bits_retain(
16253 (self.bits() & !(Self::AFP_MASK << offset)) | ((value as u64) << offset),
16254 );
16255 }
16256
16257 pub const fn with_afp(mut self, value: u8) -> Self {
16259 self.set_afp(value);
16260 self
16261 }
16262
16263 pub const fn ntlbpa(self) -> u8 {
16265 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
16266 }
16267
16268 pub const fn set_ntlbpa(&mut self, value: u8) {
16270 let offset = Self::NTLBPA_SHIFT;
16271 assert!(value & (Self::NTLBPA_MASK as u8) == value);
16272 *self = Self::from_bits_retain(
16273 (self.bits() & !(Self::NTLBPA_MASK << offset)) | ((value as u64) << offset),
16274 );
16275 }
16276
16277 pub const fn with_ntlbpa(mut self, value: u8) -> Self {
16279 self.set_ntlbpa(value);
16280 self
16281 }
16282
16283 pub const fn tidcp1(self) -> u8 {
16285 ((self.bits() >> Self::TIDCP1_SHIFT) & 0b1111) as u8
16286 }
16287
16288 pub const fn set_tidcp1(&mut self, value: u8) {
16290 let offset = Self::TIDCP1_SHIFT;
16291 assert!(value & (Self::TIDCP1_MASK as u8) == value);
16292 *self = Self::from_bits_retain(
16293 (self.bits() & !(Self::TIDCP1_MASK << offset)) | ((value as u64) << offset),
16294 );
16295 }
16296
16297 pub const fn with_tidcp1(mut self, value: u8) -> Self {
16299 self.set_tidcp1(value);
16300 self
16301 }
16302
16303 pub const fn cmow(self) -> u8 {
16305 ((self.bits() >> Self::CMOW_SHIFT) & 0b1111) as u8
16306 }
16307
16308 pub const fn set_cmow(&mut self, value: u8) {
16310 let offset = Self::CMOW_SHIFT;
16311 assert!(value & (Self::CMOW_MASK as u8) == value);
16312 *self = Self::from_bits_retain(
16313 (self.bits() & !(Self::CMOW_MASK << offset)) | ((value as u64) << offset),
16314 );
16315 }
16316
16317 pub const fn with_cmow(mut self, value: u8) -> Self {
16319 self.set_cmow(value);
16320 self
16321 }
16322
16323 pub const fn ecbhb(self) -> u8 {
16325 ((self.bits() >> Self::ECBHB_SHIFT) & 0b1111) as u8
16326 }
16327
16328 pub const fn set_ecbhb(&mut self, value: u8) {
16330 let offset = Self::ECBHB_SHIFT;
16331 assert!(value & (Self::ECBHB_MASK as u8) == value);
16332 *self = Self::from_bits_retain(
16333 (self.bits() & !(Self::ECBHB_MASK << offset)) | ((value as u64) << offset),
16334 );
16335 }
16336
16337 pub const fn with_ecbhb(mut self, value: u8) -> Self {
16339 self.set_ecbhb(value);
16340 self
16341 }
16342}
16343
16344#[cfg(feature = "el1")]
16345bitflags! {
16346 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
16348 #[repr(transparent)]
16349 pub struct IdAa64mmfr2El1: u64 {
16350 }
16351}
16352
16353#[cfg(feature = "el1")]
16354impl IdAa64mmfr2El1 {
16355 pub const CNP_SHIFT: u32 = 0;
16357 pub const CNP_MASK: u64 = 0b1111;
16359 pub const UAO_SHIFT: u32 = 4;
16361 pub const UAO_MASK: u64 = 0b1111;
16363 pub const LSM_SHIFT: u32 = 8;
16365 pub const LSM_MASK: u64 = 0b1111;
16367 pub const IESB_SHIFT: u32 = 12;
16369 pub const IESB_MASK: u64 = 0b1111;
16371 pub const VARANGE_SHIFT: u32 = 16;
16373 pub const VARANGE_MASK: u64 = 0b1111;
16375 pub const CCIDX_SHIFT: u32 = 20;
16377 pub const CCIDX_MASK: u64 = 0b1111;
16379 pub const NV_SHIFT: u32 = 24;
16381 pub const NV_MASK: u64 = 0b1111;
16383 pub const ST_SHIFT: u32 = 28;
16385 pub const ST_MASK: u64 = 0b1111;
16387 pub const AT_SHIFT: u32 = 32;
16389 pub const AT_MASK: u64 = 0b1111;
16391 pub const IDS_SHIFT: u32 = 36;
16393 pub const IDS_MASK: u64 = 0b1111;
16395 pub const FWB_SHIFT: u32 = 40;
16397 pub const FWB_MASK: u64 = 0b1111;
16399 pub const TTL_SHIFT: u32 = 48;
16401 pub const TTL_MASK: u64 = 0b1111;
16403 pub const BBM_SHIFT: u32 = 52;
16405 pub const BBM_MASK: u64 = 0b1111;
16407 pub const EVT_SHIFT: u32 = 56;
16409 pub const EVT_MASK: u64 = 0b1111;
16411 pub const E0PD_SHIFT: u32 = 60;
16413 pub const E0PD_MASK: u64 = 0b1111;
16415
16416 pub const fn cnp(self) -> u8 {
16418 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
16419 }
16420
16421 pub const fn set_cnp(&mut self, value: u8) {
16423 let offset = Self::CNP_SHIFT;
16424 assert!(value & (Self::CNP_MASK as u8) == value);
16425 *self = Self::from_bits_retain(
16426 (self.bits() & !(Self::CNP_MASK << offset)) | ((value as u64) << offset),
16427 );
16428 }
16429
16430 pub const fn with_cnp(mut self, value: u8) -> Self {
16432 self.set_cnp(value);
16433 self
16434 }
16435
16436 pub const fn uao(self) -> u8 {
16438 ((self.bits() >> Self::UAO_SHIFT) & 0b1111) as u8
16439 }
16440
16441 pub const fn set_uao(&mut self, value: u8) {
16443 let offset = Self::UAO_SHIFT;
16444 assert!(value & (Self::UAO_MASK as u8) == value);
16445 *self = Self::from_bits_retain(
16446 (self.bits() & !(Self::UAO_MASK << offset)) | ((value as u64) << offset),
16447 );
16448 }
16449
16450 pub const fn with_uao(mut self, value: u8) -> Self {
16452 self.set_uao(value);
16453 self
16454 }
16455
16456 pub const fn lsm(self) -> u8 {
16458 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
16459 }
16460
16461 pub const fn set_lsm(&mut self, value: u8) {
16463 let offset = Self::LSM_SHIFT;
16464 assert!(value & (Self::LSM_MASK as u8) == value);
16465 *self = Self::from_bits_retain(
16466 (self.bits() & !(Self::LSM_MASK << offset)) | ((value as u64) << offset),
16467 );
16468 }
16469
16470 pub const fn with_lsm(mut self, value: u8) -> Self {
16472 self.set_lsm(value);
16473 self
16474 }
16475
16476 pub const fn iesb(self) -> u8 {
16478 ((self.bits() >> Self::IESB_SHIFT) & 0b1111) as u8
16479 }
16480
16481 pub const fn set_iesb(&mut self, value: u8) {
16483 let offset = Self::IESB_SHIFT;
16484 assert!(value & (Self::IESB_MASK as u8) == value);
16485 *self = Self::from_bits_retain(
16486 (self.bits() & !(Self::IESB_MASK << offset)) | ((value as u64) << offset),
16487 );
16488 }
16489
16490 pub const fn with_iesb(mut self, value: u8) -> Self {
16492 self.set_iesb(value);
16493 self
16494 }
16495
16496 pub const fn varange(self) -> u8 {
16498 ((self.bits() >> Self::VARANGE_SHIFT) & 0b1111) as u8
16499 }
16500
16501 pub const fn set_varange(&mut self, value: u8) {
16503 let offset = Self::VARANGE_SHIFT;
16504 assert!(value & (Self::VARANGE_MASK as u8) == value);
16505 *self = Self::from_bits_retain(
16506 (self.bits() & !(Self::VARANGE_MASK << offset)) | ((value as u64) << offset),
16507 );
16508 }
16509
16510 pub const fn with_varange(mut self, value: u8) -> Self {
16512 self.set_varange(value);
16513 self
16514 }
16515
16516 pub const fn ccidx(self) -> u8 {
16518 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
16519 }
16520
16521 pub const fn set_ccidx(&mut self, value: u8) {
16523 let offset = Self::CCIDX_SHIFT;
16524 assert!(value & (Self::CCIDX_MASK as u8) == value);
16525 *self = Self::from_bits_retain(
16526 (self.bits() & !(Self::CCIDX_MASK << offset)) | ((value as u64) << offset),
16527 );
16528 }
16529
16530 pub const fn with_ccidx(mut self, value: u8) -> Self {
16532 self.set_ccidx(value);
16533 self
16534 }
16535
16536 pub const fn nv(self) -> u8 {
16538 ((self.bits() >> Self::NV_SHIFT) & 0b1111) as u8
16539 }
16540
16541 pub const fn set_nv(&mut self, value: u8) {
16543 let offset = Self::NV_SHIFT;
16544 assert!(value & (Self::NV_MASK as u8) == value);
16545 *self = Self::from_bits_retain(
16546 (self.bits() & !(Self::NV_MASK << offset)) | ((value as u64) << offset),
16547 );
16548 }
16549
16550 pub const fn with_nv(mut self, value: u8) -> Self {
16552 self.set_nv(value);
16553 self
16554 }
16555
16556 pub const fn st(self) -> u8 {
16558 ((self.bits() >> Self::ST_SHIFT) & 0b1111) as u8
16559 }
16560
16561 pub const fn set_st(&mut self, value: u8) {
16563 let offset = Self::ST_SHIFT;
16564 assert!(value & (Self::ST_MASK as u8) == value);
16565 *self = Self::from_bits_retain(
16566 (self.bits() & !(Self::ST_MASK << offset)) | ((value as u64) << offset),
16567 );
16568 }
16569
16570 pub const fn with_st(mut self, value: u8) -> Self {
16572 self.set_st(value);
16573 self
16574 }
16575
16576 pub const fn at(self) -> u8 {
16578 ((self.bits() >> Self::AT_SHIFT) & 0b1111) as u8
16579 }
16580
16581 pub const fn set_at(&mut self, value: u8) {
16583 let offset = Self::AT_SHIFT;
16584 assert!(value & (Self::AT_MASK as u8) == value);
16585 *self = Self::from_bits_retain(
16586 (self.bits() & !(Self::AT_MASK << offset)) | ((value as u64) << offset),
16587 );
16588 }
16589
16590 pub const fn with_at(mut self, value: u8) -> Self {
16592 self.set_at(value);
16593 self
16594 }
16595
16596 pub const fn ids(self) -> u8 {
16598 ((self.bits() >> Self::IDS_SHIFT) & 0b1111) as u8
16599 }
16600
16601 pub const fn set_ids(&mut self, value: u8) {
16603 let offset = Self::IDS_SHIFT;
16604 assert!(value & (Self::IDS_MASK as u8) == value);
16605 *self = Self::from_bits_retain(
16606 (self.bits() & !(Self::IDS_MASK << offset)) | ((value as u64) << offset),
16607 );
16608 }
16609
16610 pub const fn with_ids(mut self, value: u8) -> Self {
16612 self.set_ids(value);
16613 self
16614 }
16615
16616 pub const fn fwb(self) -> u8 {
16618 ((self.bits() >> Self::FWB_SHIFT) & 0b1111) as u8
16619 }
16620
16621 pub const fn set_fwb(&mut self, value: u8) {
16623 let offset = Self::FWB_SHIFT;
16624 assert!(value & (Self::FWB_MASK as u8) == value);
16625 *self = Self::from_bits_retain(
16626 (self.bits() & !(Self::FWB_MASK << offset)) | ((value as u64) << offset),
16627 );
16628 }
16629
16630 pub const fn with_fwb(mut self, value: u8) -> Self {
16632 self.set_fwb(value);
16633 self
16634 }
16635
16636 pub const fn ttl(self) -> u8 {
16638 ((self.bits() >> Self::TTL_SHIFT) & 0b1111) as u8
16639 }
16640
16641 pub const fn set_ttl(&mut self, value: u8) {
16643 let offset = Self::TTL_SHIFT;
16644 assert!(value & (Self::TTL_MASK as u8) == value);
16645 *self = Self::from_bits_retain(
16646 (self.bits() & !(Self::TTL_MASK << offset)) | ((value as u64) << offset),
16647 );
16648 }
16649
16650 pub const fn with_ttl(mut self, value: u8) -> Self {
16652 self.set_ttl(value);
16653 self
16654 }
16655
16656 pub const fn bbm(self) -> u8 {
16658 ((self.bits() >> Self::BBM_SHIFT) & 0b1111) as u8
16659 }
16660
16661 pub const fn set_bbm(&mut self, value: u8) {
16663 let offset = Self::BBM_SHIFT;
16664 assert!(value & (Self::BBM_MASK as u8) == value);
16665 *self = Self::from_bits_retain(
16666 (self.bits() & !(Self::BBM_MASK << offset)) | ((value as u64) << offset),
16667 );
16668 }
16669
16670 pub const fn with_bbm(mut self, value: u8) -> Self {
16672 self.set_bbm(value);
16673 self
16674 }
16675
16676 pub const fn evt(self) -> u8 {
16678 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
16679 }
16680
16681 pub const fn set_evt(&mut self, value: u8) {
16683 let offset = Self::EVT_SHIFT;
16684 assert!(value & (Self::EVT_MASK as u8) == value);
16685 *self = Self::from_bits_retain(
16686 (self.bits() & !(Self::EVT_MASK << offset)) | ((value as u64) << offset),
16687 );
16688 }
16689
16690 pub const fn with_evt(mut self, value: u8) -> Self {
16692 self.set_evt(value);
16693 self
16694 }
16695
16696 pub const fn e0pd(self) -> u8 {
16698 ((self.bits() >> Self::E0PD_SHIFT) & 0b1111) as u8
16699 }
16700
16701 pub const fn set_e0pd(&mut self, value: u8) {
16703 let offset = Self::E0PD_SHIFT;
16704 assert!(value & (Self::E0PD_MASK as u8) == value);
16705 *self = Self::from_bits_retain(
16706 (self.bits() & !(Self::E0PD_MASK << offset)) | ((value as u64) << offset),
16707 );
16708 }
16709
16710 pub const fn with_e0pd(mut self, value: u8) -> Self {
16712 self.set_e0pd(value);
16713 self
16714 }
16715}
16716
16717#[cfg(feature = "el1")]
16718bitflags! {
16719 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
16721 #[repr(transparent)]
16722 pub struct IdAa64mmfr3El1: u64 {
16723 }
16724}
16725
16726#[cfg(feature = "el1")]
16727impl IdAa64mmfr3El1 {
16728 pub const TCRX_SHIFT: u32 = 0;
16730 pub const TCRX_MASK: u64 = 0b1111;
16732 pub const SCTLRX_SHIFT: u32 = 4;
16734 pub const SCTLRX_MASK: u64 = 0b1111;
16736 pub const S1PIE_SHIFT: u32 = 8;
16738 pub const S1PIE_MASK: u64 = 0b1111;
16740 pub const S2PIE_SHIFT: u32 = 12;
16742 pub const S2PIE_MASK: u64 = 0b1111;
16744 pub const S1POE_SHIFT: u32 = 16;
16746 pub const S1POE_MASK: u64 = 0b1111;
16748 pub const S2POE_SHIFT: u32 = 20;
16750 pub const S2POE_MASK: u64 = 0b1111;
16752 pub const AIE_SHIFT: u32 = 24;
16754 pub const AIE_MASK: u64 = 0b1111;
16756 pub const MEC_SHIFT: u32 = 28;
16758 pub const MEC_MASK: u64 = 0b1111;
16760 pub const D128_SHIFT: u32 = 32;
16762 pub const D128_MASK: u64 = 0b1111;
16764 pub const D128_2_SHIFT: u32 = 36;
16766 pub const D128_2_MASK: u64 = 0b1111;
16768 pub const SNERR_SHIFT: u32 = 40;
16770 pub const SNERR_MASK: u64 = 0b1111;
16772 pub const ANERR_SHIFT: u32 = 44;
16774 pub const ANERR_MASK: u64 = 0b1111;
16776 pub const SDERR_SHIFT: u32 = 52;
16778 pub const SDERR_MASK: u64 = 0b1111;
16780 pub const ADERR_SHIFT: u32 = 56;
16782 pub const ADERR_MASK: u64 = 0b1111;
16784 pub const SPEC_FPACC_SHIFT: u32 = 60;
16786 pub const SPEC_FPACC_MASK: u64 = 0b1111;
16788
16789 pub const fn tcrx(self) -> u8 {
16791 ((self.bits() >> Self::TCRX_SHIFT) & 0b1111) as u8
16792 }
16793
16794 pub const fn set_tcrx(&mut self, value: u8) {
16796 let offset = Self::TCRX_SHIFT;
16797 assert!(value & (Self::TCRX_MASK as u8) == value);
16798 *self = Self::from_bits_retain(
16799 (self.bits() & !(Self::TCRX_MASK << offset)) | ((value as u64) << offset),
16800 );
16801 }
16802
16803 pub const fn with_tcrx(mut self, value: u8) -> Self {
16805 self.set_tcrx(value);
16806 self
16807 }
16808
16809 pub const fn sctlrx(self) -> u8 {
16811 ((self.bits() >> Self::SCTLRX_SHIFT) & 0b1111) as u8
16812 }
16813
16814 pub const fn set_sctlrx(&mut self, value: u8) {
16816 let offset = Self::SCTLRX_SHIFT;
16817 assert!(value & (Self::SCTLRX_MASK as u8) == value);
16818 *self = Self::from_bits_retain(
16819 (self.bits() & !(Self::SCTLRX_MASK << offset)) | ((value as u64) << offset),
16820 );
16821 }
16822
16823 pub const fn with_sctlrx(mut self, value: u8) -> Self {
16825 self.set_sctlrx(value);
16826 self
16827 }
16828
16829 pub const fn s1pie(self) -> u8 {
16831 ((self.bits() >> Self::S1PIE_SHIFT) & 0b1111) as u8
16832 }
16833
16834 pub const fn set_s1pie(&mut self, value: u8) {
16836 let offset = Self::S1PIE_SHIFT;
16837 assert!(value & (Self::S1PIE_MASK as u8) == value);
16838 *self = Self::from_bits_retain(
16839 (self.bits() & !(Self::S1PIE_MASK << offset)) | ((value as u64) << offset),
16840 );
16841 }
16842
16843 pub const fn with_s1pie(mut self, value: u8) -> Self {
16845 self.set_s1pie(value);
16846 self
16847 }
16848
16849 pub const fn s2pie(self) -> u8 {
16851 ((self.bits() >> Self::S2PIE_SHIFT) & 0b1111) as u8
16852 }
16853
16854 pub const fn set_s2pie(&mut self, value: u8) {
16856 let offset = Self::S2PIE_SHIFT;
16857 assert!(value & (Self::S2PIE_MASK as u8) == value);
16858 *self = Self::from_bits_retain(
16859 (self.bits() & !(Self::S2PIE_MASK << offset)) | ((value as u64) << offset),
16860 );
16861 }
16862
16863 pub const fn with_s2pie(mut self, value: u8) -> Self {
16865 self.set_s2pie(value);
16866 self
16867 }
16868
16869 pub const fn s1poe(self) -> u8 {
16871 ((self.bits() >> Self::S1POE_SHIFT) & 0b1111) as u8
16872 }
16873
16874 pub const fn set_s1poe(&mut self, value: u8) {
16876 let offset = Self::S1POE_SHIFT;
16877 assert!(value & (Self::S1POE_MASK as u8) == value);
16878 *self = Self::from_bits_retain(
16879 (self.bits() & !(Self::S1POE_MASK << offset)) | ((value as u64) << offset),
16880 );
16881 }
16882
16883 pub const fn with_s1poe(mut self, value: u8) -> Self {
16885 self.set_s1poe(value);
16886 self
16887 }
16888
16889 pub const fn s2poe(self) -> u8 {
16891 ((self.bits() >> Self::S2POE_SHIFT) & 0b1111) as u8
16892 }
16893
16894 pub const fn set_s2poe(&mut self, value: u8) {
16896 let offset = Self::S2POE_SHIFT;
16897 assert!(value & (Self::S2POE_MASK as u8) == value);
16898 *self = Self::from_bits_retain(
16899 (self.bits() & !(Self::S2POE_MASK << offset)) | ((value as u64) << offset),
16900 );
16901 }
16902
16903 pub const fn with_s2poe(mut self, value: u8) -> Self {
16905 self.set_s2poe(value);
16906 self
16907 }
16908
16909 pub const fn aie(self) -> u8 {
16911 ((self.bits() >> Self::AIE_SHIFT) & 0b1111) as u8
16912 }
16913
16914 pub const fn set_aie(&mut self, value: u8) {
16916 let offset = Self::AIE_SHIFT;
16917 assert!(value & (Self::AIE_MASK as u8) == value);
16918 *self = Self::from_bits_retain(
16919 (self.bits() & !(Self::AIE_MASK << offset)) | ((value as u64) << offset),
16920 );
16921 }
16922
16923 pub const fn with_aie(mut self, value: u8) -> Self {
16925 self.set_aie(value);
16926 self
16927 }
16928
16929 pub const fn mec(self) -> u8 {
16931 ((self.bits() >> Self::MEC_SHIFT) & 0b1111) as u8
16932 }
16933
16934 pub const fn set_mec(&mut self, value: u8) {
16936 let offset = Self::MEC_SHIFT;
16937 assert!(value & (Self::MEC_MASK as u8) == value);
16938 *self = Self::from_bits_retain(
16939 (self.bits() & !(Self::MEC_MASK << offset)) | ((value as u64) << offset),
16940 );
16941 }
16942
16943 pub const fn with_mec(mut self, value: u8) -> Self {
16945 self.set_mec(value);
16946 self
16947 }
16948
16949 pub const fn d128(self) -> u8 {
16951 ((self.bits() >> Self::D128_SHIFT) & 0b1111) as u8
16952 }
16953
16954 pub const fn set_d128(&mut self, value: u8) {
16956 let offset = Self::D128_SHIFT;
16957 assert!(value & (Self::D128_MASK as u8) == value);
16958 *self = Self::from_bits_retain(
16959 (self.bits() & !(Self::D128_MASK << offset)) | ((value as u64) << offset),
16960 );
16961 }
16962
16963 pub const fn with_d128(mut self, value: u8) -> Self {
16965 self.set_d128(value);
16966 self
16967 }
16968
16969 pub const fn d128_2(self) -> u8 {
16971 ((self.bits() >> Self::D128_2_SHIFT) & 0b1111) as u8
16972 }
16973
16974 pub const fn set_d128_2(&mut self, value: u8) {
16976 let offset = Self::D128_2_SHIFT;
16977 assert!(value & (Self::D128_2_MASK as u8) == value);
16978 *self = Self::from_bits_retain(
16979 (self.bits() & !(Self::D128_2_MASK << offset)) | ((value as u64) << offset),
16980 );
16981 }
16982
16983 pub const fn with_d128_2(mut self, value: u8) -> Self {
16985 self.set_d128_2(value);
16986 self
16987 }
16988
16989 pub const fn snerr(self) -> u8 {
16991 ((self.bits() >> Self::SNERR_SHIFT) & 0b1111) as u8
16992 }
16993
16994 pub const fn set_snerr(&mut self, value: u8) {
16996 let offset = Self::SNERR_SHIFT;
16997 assert!(value & (Self::SNERR_MASK as u8) == value);
16998 *self = Self::from_bits_retain(
16999 (self.bits() & !(Self::SNERR_MASK << offset)) | ((value as u64) << offset),
17000 );
17001 }
17002
17003 pub const fn with_snerr(mut self, value: u8) -> Self {
17005 self.set_snerr(value);
17006 self
17007 }
17008
17009 pub const fn anerr(self) -> u8 {
17011 ((self.bits() >> Self::ANERR_SHIFT) & 0b1111) as u8
17012 }
17013
17014 pub const fn set_anerr(&mut self, value: u8) {
17016 let offset = Self::ANERR_SHIFT;
17017 assert!(value & (Self::ANERR_MASK as u8) == value);
17018 *self = Self::from_bits_retain(
17019 (self.bits() & !(Self::ANERR_MASK << offset)) | ((value as u64) << offset),
17020 );
17021 }
17022
17023 pub const fn with_anerr(mut self, value: u8) -> Self {
17025 self.set_anerr(value);
17026 self
17027 }
17028
17029 pub const fn sderr(self) -> u8 {
17031 ((self.bits() >> Self::SDERR_SHIFT) & 0b1111) as u8
17032 }
17033
17034 pub const fn set_sderr(&mut self, value: u8) {
17036 let offset = Self::SDERR_SHIFT;
17037 assert!(value & (Self::SDERR_MASK as u8) == value);
17038 *self = Self::from_bits_retain(
17039 (self.bits() & !(Self::SDERR_MASK << offset)) | ((value as u64) << offset),
17040 );
17041 }
17042
17043 pub const fn with_sderr(mut self, value: u8) -> Self {
17045 self.set_sderr(value);
17046 self
17047 }
17048
17049 pub const fn aderr(self) -> u8 {
17051 ((self.bits() >> Self::ADERR_SHIFT) & 0b1111) as u8
17052 }
17053
17054 pub const fn set_aderr(&mut self, value: u8) {
17056 let offset = Self::ADERR_SHIFT;
17057 assert!(value & (Self::ADERR_MASK as u8) == value);
17058 *self = Self::from_bits_retain(
17059 (self.bits() & !(Self::ADERR_MASK << offset)) | ((value as u64) << offset),
17060 );
17061 }
17062
17063 pub const fn with_aderr(mut self, value: u8) -> Self {
17065 self.set_aderr(value);
17066 self
17067 }
17068
17069 pub const fn spec_fpacc(self) -> u8 {
17071 ((self.bits() >> Self::SPEC_FPACC_SHIFT) & 0b1111) as u8
17072 }
17073
17074 pub const fn set_spec_fpacc(&mut self, value: u8) {
17076 let offset = Self::SPEC_FPACC_SHIFT;
17077 assert!(value & (Self::SPEC_FPACC_MASK as u8) == value);
17078 *self = Self::from_bits_retain(
17079 (self.bits() & !(Self::SPEC_FPACC_MASK << offset)) | ((value as u64) << offset),
17080 );
17081 }
17082
17083 pub const fn with_spec_fpacc(mut self, value: u8) -> Self {
17085 self.set_spec_fpacc(value);
17086 self
17087 }
17088}
17089
17090#[cfg(feature = "el1")]
17091bitflags! {
17092 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17094 #[repr(transparent)]
17095 pub struct IdAa64pfr0El1: u64 {
17096 }
17097}
17098
17099#[cfg(feature = "el1")]
17100impl IdAa64pfr0El1 {
17101 pub const EL0_SHIFT: u32 = 0;
17103 pub const EL0_MASK: u64 = 0b1111;
17105 pub const EL1_SHIFT: u32 = 4;
17107 pub const EL1_MASK: u64 = 0b1111;
17109 pub const EL2_SHIFT: u32 = 8;
17111 pub const EL2_MASK: u64 = 0b1111;
17113 pub const EL3_SHIFT: u32 = 12;
17115 pub const EL3_MASK: u64 = 0b1111;
17117 pub const FP_SHIFT: u32 = 16;
17119 pub const FP_MASK: u64 = 0b1111;
17121 pub const ADVSIMD_SHIFT: u32 = 20;
17123 pub const ADVSIMD_MASK: u64 = 0b1111;
17125 pub const GIC_SHIFT: u32 = 24;
17127 pub const GIC_MASK: u64 = 0b1111;
17129 pub const RAS_SHIFT: u32 = 28;
17131 pub const RAS_MASK: u64 = 0b1111;
17133 pub const SVE_SHIFT: u32 = 32;
17135 pub const SVE_MASK: u64 = 0b1111;
17137 pub const SEL2_SHIFT: u32 = 36;
17139 pub const SEL2_MASK: u64 = 0b1111;
17141 pub const MPAM_SHIFT: u32 = 40;
17143 pub const MPAM_MASK: u64 = 0b1111;
17145 pub const AMU_SHIFT: u32 = 44;
17147 pub const AMU_MASK: u64 = 0b1111;
17149 pub const DIT_SHIFT: u32 = 48;
17151 pub const DIT_MASK: u64 = 0b1111;
17153 pub const RME_SHIFT: u32 = 52;
17155 pub const RME_MASK: u64 = 0b1111;
17157 pub const CSV2_SHIFT: u32 = 56;
17159 pub const CSV2_MASK: u64 = 0b1111;
17161 pub const CSV3_SHIFT: u32 = 60;
17163 pub const CSV3_MASK: u64 = 0b1111;
17165
17166 pub const fn el0(self) -> u8 {
17168 ((self.bits() >> Self::EL0_SHIFT) & 0b1111) as u8
17169 }
17170
17171 pub const fn set_el0(&mut self, value: u8) {
17173 let offset = Self::EL0_SHIFT;
17174 assert!(value & (Self::EL0_MASK as u8) == value);
17175 *self = Self::from_bits_retain(
17176 (self.bits() & !(Self::EL0_MASK << offset)) | ((value as u64) << offset),
17177 );
17178 }
17179
17180 pub const fn with_el0(mut self, value: u8) -> Self {
17182 self.set_el0(value);
17183 self
17184 }
17185
17186 pub const fn el1(self) -> u8 {
17188 ((self.bits() >> Self::EL1_SHIFT) & 0b1111) as u8
17189 }
17190
17191 pub const fn set_el1(&mut self, value: u8) {
17193 let offset = Self::EL1_SHIFT;
17194 assert!(value & (Self::EL1_MASK as u8) == value);
17195 *self = Self::from_bits_retain(
17196 (self.bits() & !(Self::EL1_MASK << offset)) | ((value as u64) << offset),
17197 );
17198 }
17199
17200 pub const fn with_el1(mut self, value: u8) -> Self {
17202 self.set_el1(value);
17203 self
17204 }
17205
17206 pub const fn el2(self) -> u8 {
17208 ((self.bits() >> Self::EL2_SHIFT) & 0b1111) as u8
17209 }
17210
17211 pub const fn set_el2(&mut self, value: u8) {
17213 let offset = Self::EL2_SHIFT;
17214 assert!(value & (Self::EL2_MASK as u8) == value);
17215 *self = Self::from_bits_retain(
17216 (self.bits() & !(Self::EL2_MASK << offset)) | ((value as u64) << offset),
17217 );
17218 }
17219
17220 pub const fn with_el2(mut self, value: u8) -> Self {
17222 self.set_el2(value);
17223 self
17224 }
17225
17226 pub const fn el3(self) -> u8 {
17228 ((self.bits() >> Self::EL3_SHIFT) & 0b1111) as u8
17229 }
17230
17231 pub const fn set_el3(&mut self, value: u8) {
17233 let offset = Self::EL3_SHIFT;
17234 assert!(value & (Self::EL3_MASK as u8) == value);
17235 *self = Self::from_bits_retain(
17236 (self.bits() & !(Self::EL3_MASK << offset)) | ((value as u64) << offset),
17237 );
17238 }
17239
17240 pub const fn with_el3(mut self, value: u8) -> Self {
17242 self.set_el3(value);
17243 self
17244 }
17245
17246 pub const fn fp(self) -> u8 {
17248 ((self.bits() >> Self::FP_SHIFT) & 0b1111) as u8
17249 }
17250
17251 pub const fn set_fp(&mut self, value: u8) {
17253 let offset = Self::FP_SHIFT;
17254 assert!(value & (Self::FP_MASK as u8) == value);
17255 *self = Self::from_bits_retain(
17256 (self.bits() & !(Self::FP_MASK << offset)) | ((value as u64) << offset),
17257 );
17258 }
17259
17260 pub const fn with_fp(mut self, value: u8) -> Self {
17262 self.set_fp(value);
17263 self
17264 }
17265
17266 pub const fn advsimd(self) -> u8 {
17268 ((self.bits() >> Self::ADVSIMD_SHIFT) & 0b1111) as u8
17269 }
17270
17271 pub const fn set_advsimd(&mut self, value: u8) {
17273 let offset = Self::ADVSIMD_SHIFT;
17274 assert!(value & (Self::ADVSIMD_MASK as u8) == value);
17275 *self = Self::from_bits_retain(
17276 (self.bits() & !(Self::ADVSIMD_MASK << offset)) | ((value as u64) << offset),
17277 );
17278 }
17279
17280 pub const fn with_advsimd(mut self, value: u8) -> Self {
17282 self.set_advsimd(value);
17283 self
17284 }
17285
17286 pub const fn gic(self) -> u8 {
17288 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
17289 }
17290
17291 pub const fn set_gic(&mut self, value: u8) {
17293 let offset = Self::GIC_SHIFT;
17294 assert!(value & (Self::GIC_MASK as u8) == value);
17295 *self = Self::from_bits_retain(
17296 (self.bits() & !(Self::GIC_MASK << offset)) | ((value as u64) << offset),
17297 );
17298 }
17299
17300 pub const fn with_gic(mut self, value: u8) -> Self {
17302 self.set_gic(value);
17303 self
17304 }
17305
17306 pub const fn ras(self) -> u8 {
17308 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
17309 }
17310
17311 pub const fn set_ras(&mut self, value: u8) {
17313 let offset = Self::RAS_SHIFT;
17314 assert!(value & (Self::RAS_MASK as u8) == value);
17315 *self = Self::from_bits_retain(
17316 (self.bits() & !(Self::RAS_MASK << offset)) | ((value as u64) << offset),
17317 );
17318 }
17319
17320 pub const fn with_ras(mut self, value: u8) -> Self {
17322 self.set_ras(value);
17323 self
17324 }
17325
17326 pub const fn sve(self) -> u8 {
17328 ((self.bits() >> Self::SVE_SHIFT) & 0b1111) as u8
17329 }
17330
17331 pub const fn set_sve(&mut self, value: u8) {
17333 let offset = Self::SVE_SHIFT;
17334 assert!(value & (Self::SVE_MASK as u8) == value);
17335 *self = Self::from_bits_retain(
17336 (self.bits() & !(Self::SVE_MASK << offset)) | ((value as u64) << offset),
17337 );
17338 }
17339
17340 pub const fn with_sve(mut self, value: u8) -> Self {
17342 self.set_sve(value);
17343 self
17344 }
17345
17346 pub const fn sel2(self) -> u8 {
17348 ((self.bits() >> Self::SEL2_SHIFT) & 0b1111) as u8
17349 }
17350
17351 pub const fn set_sel2(&mut self, value: u8) {
17353 let offset = Self::SEL2_SHIFT;
17354 assert!(value & (Self::SEL2_MASK as u8) == value);
17355 *self = Self::from_bits_retain(
17356 (self.bits() & !(Self::SEL2_MASK << offset)) | ((value as u64) << offset),
17357 );
17358 }
17359
17360 pub const fn with_sel2(mut self, value: u8) -> Self {
17362 self.set_sel2(value);
17363 self
17364 }
17365
17366 pub const fn mpam(self) -> u8 {
17368 ((self.bits() >> Self::MPAM_SHIFT) & 0b1111) as u8
17369 }
17370
17371 pub const fn set_mpam(&mut self, value: u8) {
17373 let offset = Self::MPAM_SHIFT;
17374 assert!(value & (Self::MPAM_MASK as u8) == value);
17375 *self = Self::from_bits_retain(
17376 (self.bits() & !(Self::MPAM_MASK << offset)) | ((value as u64) << offset),
17377 );
17378 }
17379
17380 pub const fn with_mpam(mut self, value: u8) -> Self {
17382 self.set_mpam(value);
17383 self
17384 }
17385
17386 pub const fn amu(self) -> u8 {
17388 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
17389 }
17390
17391 pub const fn set_amu(&mut self, value: u8) {
17393 let offset = Self::AMU_SHIFT;
17394 assert!(value & (Self::AMU_MASK as u8) == value);
17395 *self = Self::from_bits_retain(
17396 (self.bits() & !(Self::AMU_MASK << offset)) | ((value as u64) << offset),
17397 );
17398 }
17399
17400 pub const fn with_amu(mut self, value: u8) -> Self {
17402 self.set_amu(value);
17403 self
17404 }
17405
17406 pub const fn dit(self) -> u8 {
17408 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
17409 }
17410
17411 pub const fn set_dit(&mut self, value: u8) {
17413 let offset = Self::DIT_SHIFT;
17414 assert!(value & (Self::DIT_MASK as u8) == value);
17415 *self = Self::from_bits_retain(
17416 (self.bits() & !(Self::DIT_MASK << offset)) | ((value as u64) << offset),
17417 );
17418 }
17419
17420 pub const fn with_dit(mut self, value: u8) -> Self {
17422 self.set_dit(value);
17423 self
17424 }
17425
17426 pub const fn rme(self) -> u8 {
17428 ((self.bits() >> Self::RME_SHIFT) & 0b1111) as u8
17429 }
17430
17431 pub const fn set_rme(&mut self, value: u8) {
17433 let offset = Self::RME_SHIFT;
17434 assert!(value & (Self::RME_MASK as u8) == value);
17435 *self = Self::from_bits_retain(
17436 (self.bits() & !(Self::RME_MASK << offset)) | ((value as u64) << offset),
17437 );
17438 }
17439
17440 pub const fn with_rme(mut self, value: u8) -> Self {
17442 self.set_rme(value);
17443 self
17444 }
17445
17446 pub const fn csv2(self) -> u8 {
17448 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
17449 }
17450
17451 pub const fn set_csv2(&mut self, value: u8) {
17453 let offset = Self::CSV2_SHIFT;
17454 assert!(value & (Self::CSV2_MASK as u8) == value);
17455 *self = Self::from_bits_retain(
17456 (self.bits() & !(Self::CSV2_MASK << offset)) | ((value as u64) << offset),
17457 );
17458 }
17459
17460 pub const fn with_csv2(mut self, value: u8) -> Self {
17462 self.set_csv2(value);
17463 self
17464 }
17465
17466 pub const fn csv3(self) -> u8 {
17468 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
17469 }
17470
17471 pub const fn set_csv3(&mut self, value: u8) {
17473 let offset = Self::CSV3_SHIFT;
17474 assert!(value & (Self::CSV3_MASK as u8) == value);
17475 *self = Self::from_bits_retain(
17476 (self.bits() & !(Self::CSV3_MASK << offset)) | ((value as u64) << offset),
17477 );
17478 }
17479
17480 pub const fn with_csv3(mut self, value: u8) -> Self {
17482 self.set_csv3(value);
17483 self
17484 }
17485}
17486
17487#[cfg(feature = "el1")]
17488bitflags! {
17489 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17491 #[repr(transparent)]
17492 pub struct IdAa64pfr1El1: u64 {
17493 }
17494}
17495
17496#[cfg(feature = "el1")]
17497impl IdAa64pfr1El1 {
17498 pub const BT_SHIFT: u32 = 0;
17500 pub const BT_MASK: u64 = 0b1111;
17502 pub const SSBS_SHIFT: u32 = 4;
17504 pub const SSBS_MASK: u64 = 0b1111;
17506 pub const MTE_SHIFT: u32 = 8;
17508 pub const MTE_MASK: u64 = 0b1111;
17510 pub const RAS_FRAC_SHIFT: u32 = 12;
17512 pub const RAS_FRAC_MASK: u64 = 0b1111;
17514 pub const MPAM_FRAC_SHIFT: u32 = 16;
17516 pub const MPAM_FRAC_MASK: u64 = 0b1111;
17518 pub const SME_SHIFT: u32 = 24;
17520 pub const SME_MASK: u64 = 0b1111;
17522 pub const RNDR_TRAP_SHIFT: u32 = 28;
17524 pub const RNDR_TRAP_MASK: u64 = 0b1111;
17526 pub const CSV2_FRAC_SHIFT: u32 = 32;
17528 pub const CSV2_FRAC_MASK: u64 = 0b1111;
17530 pub const NMI_SHIFT: u32 = 36;
17532 pub const NMI_MASK: u64 = 0b1111;
17534 pub const MTE_FRAC_SHIFT: u32 = 40;
17536 pub const MTE_FRAC_MASK: u64 = 0b1111;
17538 pub const GCS_SHIFT: u32 = 44;
17540 pub const GCS_MASK: u64 = 0b1111;
17542 pub const THE_SHIFT: u32 = 48;
17544 pub const THE_MASK: u64 = 0b1111;
17546 pub const MTEX_SHIFT: u32 = 52;
17548 pub const MTEX_MASK: u64 = 0b1111;
17550 pub const DF2_SHIFT: u32 = 56;
17552 pub const DF2_MASK: u64 = 0b1111;
17554 pub const PFAR_SHIFT: u32 = 60;
17556 pub const PFAR_MASK: u64 = 0b1111;
17558
17559 pub const fn bt(self) -> u8 {
17561 ((self.bits() >> Self::BT_SHIFT) & 0b1111) as u8
17562 }
17563
17564 pub const fn set_bt(&mut self, value: u8) {
17566 let offset = Self::BT_SHIFT;
17567 assert!(value & (Self::BT_MASK as u8) == value);
17568 *self = Self::from_bits_retain(
17569 (self.bits() & !(Self::BT_MASK << offset)) | ((value as u64) << offset),
17570 );
17571 }
17572
17573 pub const fn with_bt(mut self, value: u8) -> Self {
17575 self.set_bt(value);
17576 self
17577 }
17578
17579 pub const fn ssbs(self) -> u8 {
17581 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
17582 }
17583
17584 pub const fn set_ssbs(&mut self, value: u8) {
17586 let offset = Self::SSBS_SHIFT;
17587 assert!(value & (Self::SSBS_MASK as u8) == value);
17588 *self = Self::from_bits_retain(
17589 (self.bits() & !(Self::SSBS_MASK << offset)) | ((value as u64) << offset),
17590 );
17591 }
17592
17593 pub const fn with_ssbs(mut self, value: u8) -> Self {
17595 self.set_ssbs(value);
17596 self
17597 }
17598
17599 pub const fn mte(self) -> u8 {
17601 ((self.bits() >> Self::MTE_SHIFT) & 0b1111) as u8
17602 }
17603
17604 pub const fn set_mte(&mut self, value: u8) {
17606 let offset = Self::MTE_SHIFT;
17607 assert!(value & (Self::MTE_MASK as u8) == value);
17608 *self = Self::from_bits_retain(
17609 (self.bits() & !(Self::MTE_MASK << offset)) | ((value as u64) << offset),
17610 );
17611 }
17612
17613 pub const fn with_mte(mut self, value: u8) -> Self {
17615 self.set_mte(value);
17616 self
17617 }
17618
17619 pub const fn ras_frac(self) -> u8 {
17621 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
17622 }
17623
17624 pub const fn set_ras_frac(&mut self, value: u8) {
17626 let offset = Self::RAS_FRAC_SHIFT;
17627 assert!(value & (Self::RAS_FRAC_MASK as u8) == value);
17628 *self = Self::from_bits_retain(
17629 (self.bits() & !(Self::RAS_FRAC_MASK << offset)) | ((value as u64) << offset),
17630 );
17631 }
17632
17633 pub const fn with_ras_frac(mut self, value: u8) -> Self {
17635 self.set_ras_frac(value);
17636 self
17637 }
17638
17639 pub const fn mpam_frac(self) -> u8 {
17641 ((self.bits() >> Self::MPAM_FRAC_SHIFT) & 0b1111) as u8
17642 }
17643
17644 pub const fn set_mpam_frac(&mut self, value: u8) {
17646 let offset = Self::MPAM_FRAC_SHIFT;
17647 assert!(value & (Self::MPAM_FRAC_MASK as u8) == value);
17648 *self = Self::from_bits_retain(
17649 (self.bits() & !(Self::MPAM_FRAC_MASK << offset)) | ((value as u64) << offset),
17650 );
17651 }
17652
17653 pub const fn with_mpam_frac(mut self, value: u8) -> Self {
17655 self.set_mpam_frac(value);
17656 self
17657 }
17658
17659 pub const fn sme(self) -> u8 {
17661 ((self.bits() >> Self::SME_SHIFT) & 0b1111) as u8
17662 }
17663
17664 pub const fn set_sme(&mut self, value: u8) {
17666 let offset = Self::SME_SHIFT;
17667 assert!(value & (Self::SME_MASK as u8) == value);
17668 *self = Self::from_bits_retain(
17669 (self.bits() & !(Self::SME_MASK << offset)) | ((value as u64) << offset),
17670 );
17671 }
17672
17673 pub const fn with_sme(mut self, value: u8) -> Self {
17675 self.set_sme(value);
17676 self
17677 }
17678
17679 pub const fn rndr_trap(self) -> u8 {
17681 ((self.bits() >> Self::RNDR_TRAP_SHIFT) & 0b1111) as u8
17682 }
17683
17684 pub const fn set_rndr_trap(&mut self, value: u8) {
17686 let offset = Self::RNDR_TRAP_SHIFT;
17687 assert!(value & (Self::RNDR_TRAP_MASK as u8) == value);
17688 *self = Self::from_bits_retain(
17689 (self.bits() & !(Self::RNDR_TRAP_MASK << offset)) | ((value as u64) << offset),
17690 );
17691 }
17692
17693 pub const fn with_rndr_trap(mut self, value: u8) -> Self {
17695 self.set_rndr_trap(value);
17696 self
17697 }
17698
17699 pub const fn csv2_frac(self) -> u8 {
17701 ((self.bits() >> Self::CSV2_FRAC_SHIFT) & 0b1111) as u8
17702 }
17703
17704 pub const fn set_csv2_frac(&mut self, value: u8) {
17706 let offset = Self::CSV2_FRAC_SHIFT;
17707 assert!(value & (Self::CSV2_FRAC_MASK as u8) == value);
17708 *self = Self::from_bits_retain(
17709 (self.bits() & !(Self::CSV2_FRAC_MASK << offset)) | ((value as u64) << offset),
17710 );
17711 }
17712
17713 pub const fn with_csv2_frac(mut self, value: u8) -> Self {
17715 self.set_csv2_frac(value);
17716 self
17717 }
17718
17719 pub const fn nmi(self) -> u8 {
17721 ((self.bits() >> Self::NMI_SHIFT) & 0b1111) as u8
17722 }
17723
17724 pub const fn set_nmi(&mut self, value: u8) {
17726 let offset = Self::NMI_SHIFT;
17727 assert!(value & (Self::NMI_MASK as u8) == value);
17728 *self = Self::from_bits_retain(
17729 (self.bits() & !(Self::NMI_MASK << offset)) | ((value as u64) << offset),
17730 );
17731 }
17732
17733 pub const fn with_nmi(mut self, value: u8) -> Self {
17735 self.set_nmi(value);
17736 self
17737 }
17738
17739 pub const fn mte_frac(self) -> u8 {
17741 ((self.bits() >> Self::MTE_FRAC_SHIFT) & 0b1111) as u8
17742 }
17743
17744 pub const fn set_mte_frac(&mut self, value: u8) {
17746 let offset = Self::MTE_FRAC_SHIFT;
17747 assert!(value & (Self::MTE_FRAC_MASK as u8) == value);
17748 *self = Self::from_bits_retain(
17749 (self.bits() & !(Self::MTE_FRAC_MASK << offset)) | ((value as u64) << offset),
17750 );
17751 }
17752
17753 pub const fn with_mte_frac(mut self, value: u8) -> Self {
17755 self.set_mte_frac(value);
17756 self
17757 }
17758
17759 pub const fn gcs(self) -> u8 {
17761 ((self.bits() >> Self::GCS_SHIFT) & 0b1111) as u8
17762 }
17763
17764 pub const fn set_gcs(&mut self, value: u8) {
17766 let offset = Self::GCS_SHIFT;
17767 assert!(value & (Self::GCS_MASK as u8) == value);
17768 *self = Self::from_bits_retain(
17769 (self.bits() & !(Self::GCS_MASK << offset)) | ((value as u64) << offset),
17770 );
17771 }
17772
17773 pub const fn with_gcs(mut self, value: u8) -> Self {
17775 self.set_gcs(value);
17776 self
17777 }
17778
17779 pub const fn the(self) -> u8 {
17781 ((self.bits() >> Self::THE_SHIFT) & 0b1111) as u8
17782 }
17783
17784 pub const fn set_the(&mut self, value: u8) {
17786 let offset = Self::THE_SHIFT;
17787 assert!(value & (Self::THE_MASK as u8) == value);
17788 *self = Self::from_bits_retain(
17789 (self.bits() & !(Self::THE_MASK << offset)) | ((value as u64) << offset),
17790 );
17791 }
17792
17793 pub const fn with_the(mut self, value: u8) -> Self {
17795 self.set_the(value);
17796 self
17797 }
17798
17799 pub const fn mtex(self) -> u8 {
17801 ((self.bits() >> Self::MTEX_SHIFT) & 0b1111) as u8
17802 }
17803
17804 pub const fn set_mtex(&mut self, value: u8) {
17806 let offset = Self::MTEX_SHIFT;
17807 assert!(value & (Self::MTEX_MASK as u8) == value);
17808 *self = Self::from_bits_retain(
17809 (self.bits() & !(Self::MTEX_MASK << offset)) | ((value as u64) << offset),
17810 );
17811 }
17812
17813 pub const fn with_mtex(mut self, value: u8) -> Self {
17815 self.set_mtex(value);
17816 self
17817 }
17818
17819 pub const fn df2(self) -> u8 {
17821 ((self.bits() >> Self::DF2_SHIFT) & 0b1111) as u8
17822 }
17823
17824 pub const fn set_df2(&mut self, value: u8) {
17826 let offset = Self::DF2_SHIFT;
17827 assert!(value & (Self::DF2_MASK as u8) == value);
17828 *self = Self::from_bits_retain(
17829 (self.bits() & !(Self::DF2_MASK << offset)) | ((value as u64) << offset),
17830 );
17831 }
17832
17833 pub const fn with_df2(mut self, value: u8) -> Self {
17835 self.set_df2(value);
17836 self
17837 }
17838
17839 pub const fn pfar(self) -> u8 {
17841 ((self.bits() >> Self::PFAR_SHIFT) & 0b1111) as u8
17842 }
17843
17844 pub const fn set_pfar(&mut self, value: u8) {
17846 let offset = Self::PFAR_SHIFT;
17847 assert!(value & (Self::PFAR_MASK as u8) == value);
17848 *self = Self::from_bits_retain(
17849 (self.bits() & !(Self::PFAR_MASK << offset)) | ((value as u64) << offset),
17850 );
17851 }
17852
17853 pub const fn with_pfar(mut self, value: u8) -> Self {
17855 self.set_pfar(value);
17856 self
17857 }
17858}
17859
17860#[cfg(feature = "el1")]
17861bitflags! {
17862 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
17864 #[repr(transparent)]
17865 pub struct IdAa64smfr0El1: u64 {
17866 const SMOP4 = 1 << 0;
17868 const STMOP = 1 << 16;
17870 const SFEXPA = 1 << 23;
17872 const AES = 1 << 24;
17874 const SBITPERM = 1 << 25;
17876 const SF8DP2 = 1 << 28;
17878 const SF8DP4 = 1 << 29;
17880 const SF8FMA = 1 << 30;
17882 const F32F32 = 1 << 32;
17884 const BI32I32 = 1 << 33;
17886 const B16F32 = 1 << 34;
17888 const F16F32 = 1 << 35;
17890 const F8F32 = 1 << 40;
17892 const F8F16 = 1 << 41;
17894 const F16F16 = 1 << 42;
17896 const B16B16 = 1 << 43;
17898 const F64F64 = 1 << 48;
17900 const LUTV2 = 1 << 60;
17902 const LUT6 = 1 << 61;
17904 const FA64 = 1 << 63;
17906 }
17907}
17908
17909#[cfg(feature = "el1")]
17910impl IdAa64smfr0El1 {
17911 pub const SMOP4_SHIFT: u32 = 0;
17913 pub const STMOP_SHIFT: u32 = 16;
17915 pub const SFEXPA_SHIFT: u32 = 23;
17917 pub const AES_SHIFT: u32 = 24;
17919 pub const SBITPERM_SHIFT: u32 = 25;
17921 pub const SF8DP2_SHIFT: u32 = 28;
17923 pub const SF8DP4_SHIFT: u32 = 29;
17925 pub const SF8FMA_SHIFT: u32 = 30;
17927 pub const F32F32_SHIFT: u32 = 32;
17929 pub const BI32I32_SHIFT: u32 = 33;
17931 pub const B16F32_SHIFT: u32 = 34;
17933 pub const F16F32_SHIFT: u32 = 35;
17935 pub const I8I32_SHIFT: u32 = 36;
17937 pub const I8I32_MASK: u64 = 0b1111;
17939 pub const F8F32_SHIFT: u32 = 40;
17941 pub const F8F16_SHIFT: u32 = 41;
17943 pub const F16F16_SHIFT: u32 = 42;
17945 pub const B16B16_SHIFT: u32 = 43;
17947 pub const I16I32_SHIFT: u32 = 44;
17949 pub const I16I32_MASK: u64 = 0b1111;
17951 pub const F64F64_SHIFT: u32 = 48;
17953 pub const I16I64_SHIFT: u32 = 52;
17955 pub const I16I64_MASK: u64 = 0b1111;
17957 pub const SMEVER_SHIFT: u32 = 56;
17959 pub const SMEVER_MASK: u64 = 0b1111;
17961 pub const LUTV2_SHIFT: u32 = 60;
17963 pub const LUT6_SHIFT: u32 = 61;
17965 pub const FA64_SHIFT: u32 = 63;
17967
17968 pub const fn i8i32(self) -> u8 {
17970 ((self.bits() >> Self::I8I32_SHIFT) & 0b1111) as u8
17971 }
17972
17973 pub const fn set_i8i32(&mut self, value: u8) {
17975 let offset = Self::I8I32_SHIFT;
17976 assert!(value & (Self::I8I32_MASK as u8) == value);
17977 *self = Self::from_bits_retain(
17978 (self.bits() & !(Self::I8I32_MASK << offset)) | ((value as u64) << offset),
17979 );
17980 }
17981
17982 pub const fn with_i8i32(mut self, value: u8) -> Self {
17984 self.set_i8i32(value);
17985 self
17986 }
17987
17988 pub const fn i16i32(self) -> u8 {
17990 ((self.bits() >> Self::I16I32_SHIFT) & 0b1111) as u8
17991 }
17992
17993 pub const fn set_i16i32(&mut self, value: u8) {
17995 let offset = Self::I16I32_SHIFT;
17996 assert!(value & (Self::I16I32_MASK as u8) == value);
17997 *self = Self::from_bits_retain(
17998 (self.bits() & !(Self::I16I32_MASK << offset)) | ((value as u64) << offset),
17999 );
18000 }
18001
18002 pub const fn with_i16i32(mut self, value: u8) -> Self {
18004 self.set_i16i32(value);
18005 self
18006 }
18007
18008 pub const fn i16i64(self) -> u8 {
18010 ((self.bits() >> Self::I16I64_SHIFT) & 0b1111) as u8
18011 }
18012
18013 pub const fn set_i16i64(&mut self, value: u8) {
18015 let offset = Self::I16I64_SHIFT;
18016 assert!(value & (Self::I16I64_MASK as u8) == value);
18017 *self = Self::from_bits_retain(
18018 (self.bits() & !(Self::I16I64_MASK << offset)) | ((value as u64) << offset),
18019 );
18020 }
18021
18022 pub const fn with_i16i64(mut self, value: u8) -> Self {
18024 self.set_i16i64(value);
18025 self
18026 }
18027
18028 pub const fn smever(self) -> u8 {
18030 ((self.bits() >> Self::SMEVER_SHIFT) & 0b1111) as u8
18031 }
18032
18033 pub const fn set_smever(&mut self, value: u8) {
18035 let offset = Self::SMEVER_SHIFT;
18036 assert!(value & (Self::SMEVER_MASK as u8) == value);
18037 *self = Self::from_bits_retain(
18038 (self.bits() & !(Self::SMEVER_MASK << offset)) | ((value as u64) << offset),
18039 );
18040 }
18041
18042 pub const fn with_smever(mut self, value: u8) -> Self {
18044 self.set_smever(value);
18045 self
18046 }
18047}
18048
18049bitflags! {
18050 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18052 #[repr(transparent)]
18053 pub struct IdDfr0: u32 {
18054 }
18055}
18056
18057impl IdDfr0 {
18058 pub const COPDBG_SHIFT: u32 = 0;
18060 pub const COPDBG_MASK: u32 = 0b1111;
18062 pub const COPSDBG_SHIFT: u32 = 4;
18064 pub const COPSDBG_MASK: u32 = 0b1111;
18066 pub const MMAPDBG_SHIFT: u32 = 8;
18068 pub const MMAPDBG_MASK: u32 = 0b1111;
18070 pub const COPTRC_SHIFT: u32 = 12;
18072 pub const COPTRC_MASK: u32 = 0b1111;
18074 pub const MMAPTRC_SHIFT: u32 = 16;
18076 pub const MMAPTRC_MASK: u32 = 0b1111;
18078 pub const MPROFDBG_SHIFT: u32 = 20;
18080 pub const MPROFDBG_MASK: u32 = 0b1111;
18082 pub const PERFMON_SHIFT: u32 = 24;
18084 pub const PERFMON_MASK: u32 = 0b1111;
18086 pub const TRACEFILT_SHIFT: u32 = 28;
18088 pub const TRACEFILT_MASK: u32 = 0b1111;
18090
18091 pub const fn copdbg(self) -> u8 {
18093 ((self.bits() >> Self::COPDBG_SHIFT) & 0b1111) as u8
18094 }
18095
18096 pub const fn set_copdbg(&mut self, value: u8) {
18098 let offset = Self::COPDBG_SHIFT;
18099 assert!(value & (Self::COPDBG_MASK as u8) == value);
18100 *self = Self::from_bits_retain(
18101 (self.bits() & !(Self::COPDBG_MASK << offset)) | ((value as u32) << offset),
18102 );
18103 }
18104
18105 pub const fn with_copdbg(mut self, value: u8) -> Self {
18107 self.set_copdbg(value);
18108 self
18109 }
18110
18111 pub const fn copsdbg(self) -> u8 {
18113 ((self.bits() >> Self::COPSDBG_SHIFT) & 0b1111) as u8
18114 }
18115
18116 pub const fn set_copsdbg(&mut self, value: u8) {
18118 let offset = Self::COPSDBG_SHIFT;
18119 assert!(value & (Self::COPSDBG_MASK as u8) == value);
18120 *self = Self::from_bits_retain(
18121 (self.bits() & !(Self::COPSDBG_MASK << offset)) | ((value as u32) << offset),
18122 );
18123 }
18124
18125 pub const fn with_copsdbg(mut self, value: u8) -> Self {
18127 self.set_copsdbg(value);
18128 self
18129 }
18130
18131 pub const fn mmapdbg(self) -> u8 {
18133 ((self.bits() >> Self::MMAPDBG_SHIFT) & 0b1111) as u8
18134 }
18135
18136 pub const fn set_mmapdbg(&mut self, value: u8) {
18138 let offset = Self::MMAPDBG_SHIFT;
18139 assert!(value & (Self::MMAPDBG_MASK as u8) == value);
18140 *self = Self::from_bits_retain(
18141 (self.bits() & !(Self::MMAPDBG_MASK << offset)) | ((value as u32) << offset),
18142 );
18143 }
18144
18145 pub const fn with_mmapdbg(mut self, value: u8) -> Self {
18147 self.set_mmapdbg(value);
18148 self
18149 }
18150
18151 pub const fn coptrc(self) -> u8 {
18153 ((self.bits() >> Self::COPTRC_SHIFT) & 0b1111) as u8
18154 }
18155
18156 pub const fn set_coptrc(&mut self, value: u8) {
18158 let offset = Self::COPTRC_SHIFT;
18159 assert!(value & (Self::COPTRC_MASK as u8) == value);
18160 *self = Self::from_bits_retain(
18161 (self.bits() & !(Self::COPTRC_MASK << offset)) | ((value as u32) << offset),
18162 );
18163 }
18164
18165 pub const fn with_coptrc(mut self, value: u8) -> Self {
18167 self.set_coptrc(value);
18168 self
18169 }
18170
18171 pub const fn mmaptrc(self) -> u8 {
18173 ((self.bits() >> Self::MMAPTRC_SHIFT) & 0b1111) as u8
18174 }
18175
18176 pub const fn set_mmaptrc(&mut self, value: u8) {
18178 let offset = Self::MMAPTRC_SHIFT;
18179 assert!(value & (Self::MMAPTRC_MASK as u8) == value);
18180 *self = Self::from_bits_retain(
18181 (self.bits() & !(Self::MMAPTRC_MASK << offset)) | ((value as u32) << offset),
18182 );
18183 }
18184
18185 pub const fn with_mmaptrc(mut self, value: u8) -> Self {
18187 self.set_mmaptrc(value);
18188 self
18189 }
18190
18191 pub const fn mprofdbg(self) -> u8 {
18193 ((self.bits() >> Self::MPROFDBG_SHIFT) & 0b1111) as u8
18194 }
18195
18196 pub const fn set_mprofdbg(&mut self, value: u8) {
18198 let offset = Self::MPROFDBG_SHIFT;
18199 assert!(value & (Self::MPROFDBG_MASK as u8) == value);
18200 *self = Self::from_bits_retain(
18201 (self.bits() & !(Self::MPROFDBG_MASK << offset)) | ((value as u32) << offset),
18202 );
18203 }
18204
18205 pub const fn with_mprofdbg(mut self, value: u8) -> Self {
18207 self.set_mprofdbg(value);
18208 self
18209 }
18210
18211 pub const fn perfmon(self) -> u8 {
18213 ((self.bits() >> Self::PERFMON_SHIFT) & 0b1111) as u8
18214 }
18215
18216 pub const fn set_perfmon(&mut self, value: u8) {
18218 let offset = Self::PERFMON_SHIFT;
18219 assert!(value & (Self::PERFMON_MASK as u8) == value);
18220 *self = Self::from_bits_retain(
18221 (self.bits() & !(Self::PERFMON_MASK << offset)) | ((value as u32) << offset),
18222 );
18223 }
18224
18225 pub const fn with_perfmon(mut self, value: u8) -> Self {
18227 self.set_perfmon(value);
18228 self
18229 }
18230
18231 pub const fn tracefilt(self) -> u8 {
18233 ((self.bits() >> Self::TRACEFILT_SHIFT) & 0b1111) as u8
18234 }
18235
18236 pub const fn set_tracefilt(&mut self, value: u8) {
18238 let offset = Self::TRACEFILT_SHIFT;
18239 assert!(value & (Self::TRACEFILT_MASK as u8) == value);
18240 *self = Self::from_bits_retain(
18241 (self.bits() & !(Self::TRACEFILT_MASK << offset)) | ((value as u32) << offset),
18242 );
18243 }
18244
18245 pub const fn with_tracefilt(mut self, value: u8) -> Self {
18247 self.set_tracefilt(value);
18248 self
18249 }
18250}
18251
18252bitflags! {
18253 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18255 #[repr(transparent)]
18256 pub struct IdDfr1: u32 {
18257 }
18258}
18259
18260impl IdDfr1 {
18261 pub const MTPMU_SHIFT: u32 = 0;
18263 pub const MTPMU_MASK: u32 = 0b1111;
18265 pub const HPMN0_SHIFT: u32 = 4;
18267 pub const HPMN0_MASK: u32 = 0b1111;
18269
18270 pub const fn mtpmu(self) -> u8 {
18272 ((self.bits() >> Self::MTPMU_SHIFT) & 0b1111) as u8
18273 }
18274
18275 pub const fn set_mtpmu(&mut self, value: u8) {
18277 let offset = Self::MTPMU_SHIFT;
18278 assert!(value & (Self::MTPMU_MASK as u8) == value);
18279 *self = Self::from_bits_retain(
18280 (self.bits() & !(Self::MTPMU_MASK << offset)) | ((value as u32) << offset),
18281 );
18282 }
18283
18284 pub const fn with_mtpmu(mut self, value: u8) -> Self {
18286 self.set_mtpmu(value);
18287 self
18288 }
18289
18290 pub const fn hpmn0(self) -> u8 {
18292 ((self.bits() >> Self::HPMN0_SHIFT) & 0b1111) as u8
18293 }
18294
18295 pub const fn set_hpmn0(&mut self, value: u8) {
18297 let offset = Self::HPMN0_SHIFT;
18298 assert!(value & (Self::HPMN0_MASK as u8) == value);
18299 *self = Self::from_bits_retain(
18300 (self.bits() & !(Self::HPMN0_MASK << offset)) | ((value as u32) << offset),
18301 );
18302 }
18303
18304 pub const fn with_hpmn0(mut self, value: u8) -> Self {
18306 self.set_hpmn0(value);
18307 self
18308 }
18309}
18310
18311bitflags! {
18312 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18314 #[repr(transparent)]
18315 pub struct IdIsar0: u32 {
18316 }
18317}
18318
18319impl IdIsar0 {
18320 pub const SWAP_SHIFT: u32 = 0;
18322 pub const SWAP_MASK: u32 = 0b1111;
18324 pub const BITCOUNT_SHIFT: u32 = 4;
18326 pub const BITCOUNT_MASK: u32 = 0b1111;
18328 pub const BITFIELD_SHIFT: u32 = 8;
18330 pub const BITFIELD_MASK: u32 = 0b1111;
18332 pub const CMPBRANCH_SHIFT: u32 = 12;
18334 pub const CMPBRANCH_MASK: u32 = 0b1111;
18336 pub const COPROC_SHIFT: u32 = 16;
18338 pub const COPROC_MASK: u32 = 0b1111;
18340 pub const DEBUG_SHIFT: u32 = 20;
18342 pub const DEBUG_MASK: u32 = 0b1111;
18344 pub const DIVIDE_SHIFT: u32 = 24;
18346 pub const DIVIDE_MASK: u32 = 0b1111;
18348
18349 pub const fn swap(self) -> u8 {
18351 ((self.bits() >> Self::SWAP_SHIFT) & 0b1111) as u8
18352 }
18353
18354 pub const fn set_swap(&mut self, value: u8) {
18356 let offset = Self::SWAP_SHIFT;
18357 assert!(value & (Self::SWAP_MASK as u8) == value);
18358 *self = Self::from_bits_retain(
18359 (self.bits() & !(Self::SWAP_MASK << offset)) | ((value as u32) << offset),
18360 );
18361 }
18362
18363 pub const fn with_swap(mut self, value: u8) -> Self {
18365 self.set_swap(value);
18366 self
18367 }
18368
18369 pub const fn bitcount(self) -> u8 {
18371 ((self.bits() >> Self::BITCOUNT_SHIFT) & 0b1111) as u8
18372 }
18373
18374 pub const fn set_bitcount(&mut self, value: u8) {
18376 let offset = Self::BITCOUNT_SHIFT;
18377 assert!(value & (Self::BITCOUNT_MASK as u8) == value);
18378 *self = Self::from_bits_retain(
18379 (self.bits() & !(Self::BITCOUNT_MASK << offset)) | ((value as u32) << offset),
18380 );
18381 }
18382
18383 pub const fn with_bitcount(mut self, value: u8) -> Self {
18385 self.set_bitcount(value);
18386 self
18387 }
18388
18389 pub const fn bitfield(self) -> u8 {
18391 ((self.bits() >> Self::BITFIELD_SHIFT) & 0b1111) as u8
18392 }
18393
18394 pub const fn set_bitfield(&mut self, value: u8) {
18396 let offset = Self::BITFIELD_SHIFT;
18397 assert!(value & (Self::BITFIELD_MASK as u8) == value);
18398 *self = Self::from_bits_retain(
18399 (self.bits() & !(Self::BITFIELD_MASK << offset)) | ((value as u32) << offset),
18400 );
18401 }
18402
18403 pub const fn with_bitfield(mut self, value: u8) -> Self {
18405 self.set_bitfield(value);
18406 self
18407 }
18408
18409 pub const fn cmpbranch(self) -> u8 {
18411 ((self.bits() >> Self::CMPBRANCH_SHIFT) & 0b1111) as u8
18412 }
18413
18414 pub const fn set_cmpbranch(&mut self, value: u8) {
18416 let offset = Self::CMPBRANCH_SHIFT;
18417 assert!(value & (Self::CMPBRANCH_MASK as u8) == value);
18418 *self = Self::from_bits_retain(
18419 (self.bits() & !(Self::CMPBRANCH_MASK << offset)) | ((value as u32) << offset),
18420 );
18421 }
18422
18423 pub const fn with_cmpbranch(mut self, value: u8) -> Self {
18425 self.set_cmpbranch(value);
18426 self
18427 }
18428
18429 pub const fn coproc(self) -> u8 {
18431 ((self.bits() >> Self::COPROC_SHIFT) & 0b1111) as u8
18432 }
18433
18434 pub const fn set_coproc(&mut self, value: u8) {
18436 let offset = Self::COPROC_SHIFT;
18437 assert!(value & (Self::COPROC_MASK as u8) == value);
18438 *self = Self::from_bits_retain(
18439 (self.bits() & !(Self::COPROC_MASK << offset)) | ((value as u32) << offset),
18440 );
18441 }
18442
18443 pub const fn with_coproc(mut self, value: u8) -> Self {
18445 self.set_coproc(value);
18446 self
18447 }
18448
18449 pub const fn debug(self) -> u8 {
18451 ((self.bits() >> Self::DEBUG_SHIFT) & 0b1111) as u8
18452 }
18453
18454 pub const fn set_debug(&mut self, value: u8) {
18456 let offset = Self::DEBUG_SHIFT;
18457 assert!(value & (Self::DEBUG_MASK as u8) == value);
18458 *self = Self::from_bits_retain(
18459 (self.bits() & !(Self::DEBUG_MASK << offset)) | ((value as u32) << offset),
18460 );
18461 }
18462
18463 pub const fn with_debug(mut self, value: u8) -> Self {
18465 self.set_debug(value);
18466 self
18467 }
18468
18469 pub const fn divide(self) -> u8 {
18471 ((self.bits() >> Self::DIVIDE_SHIFT) & 0b1111) as u8
18472 }
18473
18474 pub const fn set_divide(&mut self, value: u8) {
18476 let offset = Self::DIVIDE_SHIFT;
18477 assert!(value & (Self::DIVIDE_MASK as u8) == value);
18478 *self = Self::from_bits_retain(
18479 (self.bits() & !(Self::DIVIDE_MASK << offset)) | ((value as u32) << offset),
18480 );
18481 }
18482
18483 pub const fn with_divide(mut self, value: u8) -> Self {
18485 self.set_divide(value);
18486 self
18487 }
18488}
18489
18490bitflags! {
18491 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18493 #[repr(transparent)]
18494 pub struct IdIsar1: u32 {
18495 }
18496}
18497
18498impl IdIsar1 {
18499 pub const ENDIAN_SHIFT: u32 = 0;
18501 pub const ENDIAN_MASK: u32 = 0b1111;
18503 pub const EXCEPT_SHIFT: u32 = 4;
18505 pub const EXCEPT_MASK: u32 = 0b1111;
18507 pub const EXCEPT_AR_SHIFT: u32 = 8;
18509 pub const EXCEPT_AR_MASK: u32 = 0b1111;
18511 pub const EXTEND_SHIFT: u32 = 12;
18513 pub const EXTEND_MASK: u32 = 0b1111;
18515 pub const IFTHEN_SHIFT: u32 = 16;
18517 pub const IFTHEN_MASK: u32 = 0b1111;
18519 pub const IMMEDIATE_SHIFT: u32 = 20;
18521 pub const IMMEDIATE_MASK: u32 = 0b1111;
18523 pub const INTERWORK_SHIFT: u32 = 24;
18525 pub const INTERWORK_MASK: u32 = 0b1111;
18527 pub const JAZELLE_SHIFT: u32 = 28;
18529 pub const JAZELLE_MASK: u32 = 0b1111;
18531
18532 pub const fn endian(self) -> u8 {
18534 ((self.bits() >> Self::ENDIAN_SHIFT) & 0b1111) as u8
18535 }
18536
18537 pub const fn set_endian(&mut self, value: u8) {
18539 let offset = Self::ENDIAN_SHIFT;
18540 assert!(value & (Self::ENDIAN_MASK as u8) == value);
18541 *self = Self::from_bits_retain(
18542 (self.bits() & !(Self::ENDIAN_MASK << offset)) | ((value as u32) << offset),
18543 );
18544 }
18545
18546 pub const fn with_endian(mut self, value: u8) -> Self {
18548 self.set_endian(value);
18549 self
18550 }
18551
18552 pub const fn except(self) -> u8 {
18554 ((self.bits() >> Self::EXCEPT_SHIFT) & 0b1111) as u8
18555 }
18556
18557 pub const fn set_except(&mut self, value: u8) {
18559 let offset = Self::EXCEPT_SHIFT;
18560 assert!(value & (Self::EXCEPT_MASK as u8) == value);
18561 *self = Self::from_bits_retain(
18562 (self.bits() & !(Self::EXCEPT_MASK << offset)) | ((value as u32) << offset),
18563 );
18564 }
18565
18566 pub const fn with_except(mut self, value: u8) -> Self {
18568 self.set_except(value);
18569 self
18570 }
18571
18572 pub const fn except_ar(self) -> u8 {
18574 ((self.bits() >> Self::EXCEPT_AR_SHIFT) & 0b1111) as u8
18575 }
18576
18577 pub const fn set_except_ar(&mut self, value: u8) {
18579 let offset = Self::EXCEPT_AR_SHIFT;
18580 assert!(value & (Self::EXCEPT_AR_MASK as u8) == value);
18581 *self = Self::from_bits_retain(
18582 (self.bits() & !(Self::EXCEPT_AR_MASK << offset)) | ((value as u32) << offset),
18583 );
18584 }
18585
18586 pub const fn with_except_ar(mut self, value: u8) -> Self {
18588 self.set_except_ar(value);
18589 self
18590 }
18591
18592 pub const fn extend_(self) -> u8 {
18594 ((self.bits() >> Self::EXTEND_SHIFT) & 0b1111) as u8
18595 }
18596
18597 pub const fn set_extend_(&mut self, value: u8) {
18599 let offset = Self::EXTEND_SHIFT;
18600 assert!(value & (Self::EXTEND_MASK as u8) == value);
18601 *self = Self::from_bits_retain(
18602 (self.bits() & !(Self::EXTEND_MASK << offset)) | ((value as u32) << offset),
18603 );
18604 }
18605
18606 pub const fn with_extend_(mut self, value: u8) -> Self {
18608 self.set_extend_(value);
18609 self
18610 }
18611
18612 pub const fn ifthen(self) -> u8 {
18614 ((self.bits() >> Self::IFTHEN_SHIFT) & 0b1111) as u8
18615 }
18616
18617 pub const fn set_ifthen(&mut self, value: u8) {
18619 let offset = Self::IFTHEN_SHIFT;
18620 assert!(value & (Self::IFTHEN_MASK as u8) == value);
18621 *self = Self::from_bits_retain(
18622 (self.bits() & !(Self::IFTHEN_MASK << offset)) | ((value as u32) << offset),
18623 );
18624 }
18625
18626 pub const fn with_ifthen(mut self, value: u8) -> Self {
18628 self.set_ifthen(value);
18629 self
18630 }
18631
18632 pub const fn immediate(self) -> u8 {
18634 ((self.bits() >> Self::IMMEDIATE_SHIFT) & 0b1111) as u8
18635 }
18636
18637 pub const fn set_immediate(&mut self, value: u8) {
18639 let offset = Self::IMMEDIATE_SHIFT;
18640 assert!(value & (Self::IMMEDIATE_MASK as u8) == value);
18641 *self = Self::from_bits_retain(
18642 (self.bits() & !(Self::IMMEDIATE_MASK << offset)) | ((value as u32) << offset),
18643 );
18644 }
18645
18646 pub const fn with_immediate(mut self, value: u8) -> Self {
18648 self.set_immediate(value);
18649 self
18650 }
18651
18652 pub const fn interwork(self) -> u8 {
18654 ((self.bits() >> Self::INTERWORK_SHIFT) & 0b1111) as u8
18655 }
18656
18657 pub const fn set_interwork(&mut self, value: u8) {
18659 let offset = Self::INTERWORK_SHIFT;
18660 assert!(value & (Self::INTERWORK_MASK as u8) == value);
18661 *self = Self::from_bits_retain(
18662 (self.bits() & !(Self::INTERWORK_MASK << offset)) | ((value as u32) << offset),
18663 );
18664 }
18665
18666 pub const fn with_interwork(mut self, value: u8) -> Self {
18668 self.set_interwork(value);
18669 self
18670 }
18671
18672 pub const fn jazelle(self) -> u8 {
18674 ((self.bits() >> Self::JAZELLE_SHIFT) & 0b1111) as u8
18675 }
18676
18677 pub const fn set_jazelle(&mut self, value: u8) {
18679 let offset = Self::JAZELLE_SHIFT;
18680 assert!(value & (Self::JAZELLE_MASK as u8) == value);
18681 *self = Self::from_bits_retain(
18682 (self.bits() & !(Self::JAZELLE_MASK << offset)) | ((value as u32) << offset),
18683 );
18684 }
18685
18686 pub const fn with_jazelle(mut self, value: u8) -> Self {
18688 self.set_jazelle(value);
18689 self
18690 }
18691}
18692
18693bitflags! {
18694 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18696 #[repr(transparent)]
18697 pub struct IdIsar2: u32 {
18698 }
18699}
18700
18701impl IdIsar2 {
18702 pub const LOADSTORE_SHIFT: u32 = 0;
18704 pub const LOADSTORE_MASK: u32 = 0b1111;
18706 pub const MEMHINT_SHIFT: u32 = 4;
18708 pub const MEMHINT_MASK: u32 = 0b1111;
18710 pub const MULTIACCESSINT_SHIFT: u32 = 8;
18712 pub const MULTIACCESSINT_MASK: u32 = 0b1111;
18714 pub const MULT_SHIFT: u32 = 12;
18716 pub const MULT_MASK: u32 = 0b1111;
18718 pub const MULTS_SHIFT: u32 = 16;
18720 pub const MULTS_MASK: u32 = 0b1111;
18722 pub const MULTU_SHIFT: u32 = 20;
18724 pub const MULTU_MASK: u32 = 0b1111;
18726 pub const PSR_AR_SHIFT: u32 = 24;
18728 pub const PSR_AR_MASK: u32 = 0b1111;
18730 pub const REVERSAL_SHIFT: u32 = 28;
18732 pub const REVERSAL_MASK: u32 = 0b1111;
18734
18735 pub const fn loadstore(self) -> u8 {
18737 ((self.bits() >> Self::LOADSTORE_SHIFT) & 0b1111) as u8
18738 }
18739
18740 pub const fn set_loadstore(&mut self, value: u8) {
18742 let offset = Self::LOADSTORE_SHIFT;
18743 assert!(value & (Self::LOADSTORE_MASK as u8) == value);
18744 *self = Self::from_bits_retain(
18745 (self.bits() & !(Self::LOADSTORE_MASK << offset)) | ((value as u32) << offset),
18746 );
18747 }
18748
18749 pub const fn with_loadstore(mut self, value: u8) -> Self {
18751 self.set_loadstore(value);
18752 self
18753 }
18754
18755 pub const fn memhint(self) -> u8 {
18757 ((self.bits() >> Self::MEMHINT_SHIFT) & 0b1111) as u8
18758 }
18759
18760 pub const fn set_memhint(&mut self, value: u8) {
18762 let offset = Self::MEMHINT_SHIFT;
18763 assert!(value & (Self::MEMHINT_MASK as u8) == value);
18764 *self = Self::from_bits_retain(
18765 (self.bits() & !(Self::MEMHINT_MASK << offset)) | ((value as u32) << offset),
18766 );
18767 }
18768
18769 pub const fn with_memhint(mut self, value: u8) -> Self {
18771 self.set_memhint(value);
18772 self
18773 }
18774
18775 pub const fn multiaccessint(self) -> u8 {
18777 ((self.bits() >> Self::MULTIACCESSINT_SHIFT) & 0b1111) as u8
18778 }
18779
18780 pub const fn set_multiaccessint(&mut self, value: u8) {
18782 let offset = Self::MULTIACCESSINT_SHIFT;
18783 assert!(value & (Self::MULTIACCESSINT_MASK as u8) == value);
18784 *self = Self::from_bits_retain(
18785 (self.bits() & !(Self::MULTIACCESSINT_MASK << offset)) | ((value as u32) << offset),
18786 );
18787 }
18788
18789 pub const fn with_multiaccessint(mut self, value: u8) -> Self {
18791 self.set_multiaccessint(value);
18792 self
18793 }
18794
18795 pub const fn mult(self) -> u8 {
18797 ((self.bits() >> Self::MULT_SHIFT) & 0b1111) as u8
18798 }
18799
18800 pub const fn set_mult(&mut self, value: u8) {
18802 let offset = Self::MULT_SHIFT;
18803 assert!(value & (Self::MULT_MASK as u8) == value);
18804 *self = Self::from_bits_retain(
18805 (self.bits() & !(Self::MULT_MASK << offset)) | ((value as u32) << offset),
18806 );
18807 }
18808
18809 pub const fn with_mult(mut self, value: u8) -> Self {
18811 self.set_mult(value);
18812 self
18813 }
18814
18815 pub const fn mults(self) -> u8 {
18817 ((self.bits() >> Self::MULTS_SHIFT) & 0b1111) as u8
18818 }
18819
18820 pub const fn set_mults(&mut self, value: u8) {
18822 let offset = Self::MULTS_SHIFT;
18823 assert!(value & (Self::MULTS_MASK as u8) == value);
18824 *self = Self::from_bits_retain(
18825 (self.bits() & !(Self::MULTS_MASK << offset)) | ((value as u32) << offset),
18826 );
18827 }
18828
18829 pub const fn with_mults(mut self, value: u8) -> Self {
18831 self.set_mults(value);
18832 self
18833 }
18834
18835 pub const fn multu(self) -> u8 {
18837 ((self.bits() >> Self::MULTU_SHIFT) & 0b1111) as u8
18838 }
18839
18840 pub const fn set_multu(&mut self, value: u8) {
18842 let offset = Self::MULTU_SHIFT;
18843 assert!(value & (Self::MULTU_MASK as u8) == value);
18844 *self = Self::from_bits_retain(
18845 (self.bits() & !(Self::MULTU_MASK << offset)) | ((value as u32) << offset),
18846 );
18847 }
18848
18849 pub const fn with_multu(mut self, value: u8) -> Self {
18851 self.set_multu(value);
18852 self
18853 }
18854
18855 pub const fn psr_ar(self) -> u8 {
18857 ((self.bits() >> Self::PSR_AR_SHIFT) & 0b1111) as u8
18858 }
18859
18860 pub const fn set_psr_ar(&mut self, value: u8) {
18862 let offset = Self::PSR_AR_SHIFT;
18863 assert!(value & (Self::PSR_AR_MASK as u8) == value);
18864 *self = Self::from_bits_retain(
18865 (self.bits() & !(Self::PSR_AR_MASK << offset)) | ((value as u32) << offset),
18866 );
18867 }
18868
18869 pub const fn with_psr_ar(mut self, value: u8) -> Self {
18871 self.set_psr_ar(value);
18872 self
18873 }
18874
18875 pub const fn reversal(self) -> u8 {
18877 ((self.bits() >> Self::REVERSAL_SHIFT) & 0b1111) as u8
18878 }
18879
18880 pub const fn set_reversal(&mut self, value: u8) {
18882 let offset = Self::REVERSAL_SHIFT;
18883 assert!(value & (Self::REVERSAL_MASK as u8) == value);
18884 *self = Self::from_bits_retain(
18885 (self.bits() & !(Self::REVERSAL_MASK << offset)) | ((value as u32) << offset),
18886 );
18887 }
18888
18889 pub const fn with_reversal(mut self, value: u8) -> Self {
18891 self.set_reversal(value);
18892 self
18893 }
18894}
18895
18896bitflags! {
18897 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
18899 #[repr(transparent)]
18900 pub struct IdIsar3: u32 {
18901 }
18902}
18903
18904impl IdIsar3 {
18905 pub const SATURATE_SHIFT: u32 = 0;
18907 pub const SATURATE_MASK: u32 = 0b1111;
18909 pub const SIMD_SHIFT: u32 = 4;
18911 pub const SIMD_MASK: u32 = 0b1111;
18913 pub const SVC_SHIFT: u32 = 8;
18915 pub const SVC_MASK: u32 = 0b1111;
18917 pub const SYNCHPRIM_SHIFT: u32 = 12;
18919 pub const SYNCHPRIM_MASK: u32 = 0b1111;
18921 pub const TABBRANCH_SHIFT: u32 = 16;
18923 pub const TABBRANCH_MASK: u32 = 0b1111;
18925 pub const T32COPY_SHIFT: u32 = 20;
18927 pub const T32COPY_MASK: u32 = 0b1111;
18929 pub const TRUENOP_SHIFT: u32 = 24;
18931 pub const TRUENOP_MASK: u32 = 0b1111;
18933 pub const T32EE_SHIFT: u32 = 28;
18935 pub const T32EE_MASK: u32 = 0b1111;
18937
18938 pub const fn saturate(self) -> u8 {
18940 ((self.bits() >> Self::SATURATE_SHIFT) & 0b1111) as u8
18941 }
18942
18943 pub const fn set_saturate(&mut self, value: u8) {
18945 let offset = Self::SATURATE_SHIFT;
18946 assert!(value & (Self::SATURATE_MASK as u8) == value);
18947 *self = Self::from_bits_retain(
18948 (self.bits() & !(Self::SATURATE_MASK << offset)) | ((value as u32) << offset),
18949 );
18950 }
18951
18952 pub const fn with_saturate(mut self, value: u8) -> Self {
18954 self.set_saturate(value);
18955 self
18956 }
18957
18958 pub const fn simd(self) -> u8 {
18960 ((self.bits() >> Self::SIMD_SHIFT) & 0b1111) as u8
18961 }
18962
18963 pub const fn set_simd(&mut self, value: u8) {
18965 let offset = Self::SIMD_SHIFT;
18966 assert!(value & (Self::SIMD_MASK as u8) == value);
18967 *self = Self::from_bits_retain(
18968 (self.bits() & !(Self::SIMD_MASK << offset)) | ((value as u32) << offset),
18969 );
18970 }
18971
18972 pub const fn with_simd(mut self, value: u8) -> Self {
18974 self.set_simd(value);
18975 self
18976 }
18977
18978 pub const fn svc(self) -> u8 {
18980 ((self.bits() >> Self::SVC_SHIFT) & 0b1111) as u8
18981 }
18982
18983 pub const fn set_svc(&mut self, value: u8) {
18985 let offset = Self::SVC_SHIFT;
18986 assert!(value & (Self::SVC_MASK as u8) == value);
18987 *self = Self::from_bits_retain(
18988 (self.bits() & !(Self::SVC_MASK << offset)) | ((value as u32) << offset),
18989 );
18990 }
18991
18992 pub const fn with_svc(mut self, value: u8) -> Self {
18994 self.set_svc(value);
18995 self
18996 }
18997
18998 pub const fn synchprim(self) -> u8 {
19000 ((self.bits() >> Self::SYNCHPRIM_SHIFT) & 0b1111) as u8
19001 }
19002
19003 pub const fn set_synchprim(&mut self, value: u8) {
19005 let offset = Self::SYNCHPRIM_SHIFT;
19006 assert!(value & (Self::SYNCHPRIM_MASK as u8) == value);
19007 *self = Self::from_bits_retain(
19008 (self.bits() & !(Self::SYNCHPRIM_MASK << offset)) | ((value as u32) << offset),
19009 );
19010 }
19011
19012 pub const fn with_synchprim(mut self, value: u8) -> Self {
19014 self.set_synchprim(value);
19015 self
19016 }
19017
19018 pub const fn tabbranch(self) -> u8 {
19020 ((self.bits() >> Self::TABBRANCH_SHIFT) & 0b1111) as u8
19021 }
19022
19023 pub const fn set_tabbranch(&mut self, value: u8) {
19025 let offset = Self::TABBRANCH_SHIFT;
19026 assert!(value & (Self::TABBRANCH_MASK as u8) == value);
19027 *self = Self::from_bits_retain(
19028 (self.bits() & !(Self::TABBRANCH_MASK << offset)) | ((value as u32) << offset),
19029 );
19030 }
19031
19032 pub const fn with_tabbranch(mut self, value: u8) -> Self {
19034 self.set_tabbranch(value);
19035 self
19036 }
19037
19038 pub const fn t32copy(self) -> u8 {
19040 ((self.bits() >> Self::T32COPY_SHIFT) & 0b1111) as u8
19041 }
19042
19043 pub const fn set_t32copy(&mut self, value: u8) {
19045 let offset = Self::T32COPY_SHIFT;
19046 assert!(value & (Self::T32COPY_MASK as u8) == value);
19047 *self = Self::from_bits_retain(
19048 (self.bits() & !(Self::T32COPY_MASK << offset)) | ((value as u32) << offset),
19049 );
19050 }
19051
19052 pub const fn with_t32copy(mut self, value: u8) -> Self {
19054 self.set_t32copy(value);
19055 self
19056 }
19057
19058 pub const fn truenop(self) -> u8 {
19060 ((self.bits() >> Self::TRUENOP_SHIFT) & 0b1111) as u8
19061 }
19062
19063 pub const fn set_truenop(&mut self, value: u8) {
19065 let offset = Self::TRUENOP_SHIFT;
19066 assert!(value & (Self::TRUENOP_MASK as u8) == value);
19067 *self = Self::from_bits_retain(
19068 (self.bits() & !(Self::TRUENOP_MASK << offset)) | ((value as u32) << offset),
19069 );
19070 }
19071
19072 pub const fn with_truenop(mut self, value: u8) -> Self {
19074 self.set_truenop(value);
19075 self
19076 }
19077
19078 pub const fn t32ee(self) -> u8 {
19080 ((self.bits() >> Self::T32EE_SHIFT) & 0b1111) as u8
19081 }
19082
19083 pub const fn set_t32ee(&mut self, value: u8) {
19085 let offset = Self::T32EE_SHIFT;
19086 assert!(value & (Self::T32EE_MASK as u8) == value);
19087 *self = Self::from_bits_retain(
19088 (self.bits() & !(Self::T32EE_MASK << offset)) | ((value as u32) << offset),
19089 );
19090 }
19091
19092 pub const fn with_t32ee(mut self, value: u8) -> Self {
19094 self.set_t32ee(value);
19095 self
19096 }
19097}
19098
19099bitflags! {
19100 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19102 #[repr(transparent)]
19103 pub struct IdIsar4: u32 {
19104 }
19105}
19106
19107impl IdIsar4 {
19108 pub const UNPRIV_SHIFT: u32 = 0;
19110 pub const UNPRIV_MASK: u32 = 0b1111;
19112 pub const WITHSHIFTS_SHIFT: u32 = 4;
19114 pub const WITHSHIFTS_MASK: u32 = 0b1111;
19116 pub const WRITEBACK_SHIFT: u32 = 8;
19118 pub const WRITEBACK_MASK: u32 = 0b1111;
19120 pub const SMC_SHIFT: u32 = 12;
19122 pub const SMC_MASK: u32 = 0b1111;
19124 pub const BARRIER_SHIFT: u32 = 16;
19126 pub const BARRIER_MASK: u32 = 0b1111;
19128 pub const SYNCHPRIM_FRAC_SHIFT: u32 = 20;
19130 pub const SYNCHPRIM_FRAC_MASK: u32 = 0b1111;
19132 pub const PSR_M_SHIFT: u32 = 24;
19134 pub const PSR_M_MASK: u32 = 0b1111;
19136 pub const SWP_FRAC_SHIFT: u32 = 28;
19138 pub const SWP_FRAC_MASK: u32 = 0b1111;
19140
19141 pub const fn unpriv(self) -> u8 {
19143 ((self.bits() >> Self::UNPRIV_SHIFT) & 0b1111) as u8
19144 }
19145
19146 pub const fn set_unpriv(&mut self, value: u8) {
19148 let offset = Self::UNPRIV_SHIFT;
19149 assert!(value & (Self::UNPRIV_MASK as u8) == value);
19150 *self = Self::from_bits_retain(
19151 (self.bits() & !(Self::UNPRIV_MASK << offset)) | ((value as u32) << offset),
19152 );
19153 }
19154
19155 pub const fn with_unpriv(mut self, value: u8) -> Self {
19157 self.set_unpriv(value);
19158 self
19159 }
19160
19161 pub const fn withshifts(self) -> u8 {
19163 ((self.bits() >> Self::WITHSHIFTS_SHIFT) & 0b1111) as u8
19164 }
19165
19166 pub const fn set_withshifts(&mut self, value: u8) {
19168 let offset = Self::WITHSHIFTS_SHIFT;
19169 assert!(value & (Self::WITHSHIFTS_MASK as u8) == value);
19170 *self = Self::from_bits_retain(
19171 (self.bits() & !(Self::WITHSHIFTS_MASK << offset)) | ((value as u32) << offset),
19172 );
19173 }
19174
19175 pub const fn with_withshifts(mut self, value: u8) -> Self {
19177 self.set_withshifts(value);
19178 self
19179 }
19180
19181 pub const fn writeback(self) -> u8 {
19183 ((self.bits() >> Self::WRITEBACK_SHIFT) & 0b1111) as u8
19184 }
19185
19186 pub const fn set_writeback(&mut self, value: u8) {
19188 let offset = Self::WRITEBACK_SHIFT;
19189 assert!(value & (Self::WRITEBACK_MASK as u8) == value);
19190 *self = Self::from_bits_retain(
19191 (self.bits() & !(Self::WRITEBACK_MASK << offset)) | ((value as u32) << offset),
19192 );
19193 }
19194
19195 pub const fn with_writeback(mut self, value: u8) -> Self {
19197 self.set_writeback(value);
19198 self
19199 }
19200
19201 pub const fn smc(self) -> u8 {
19203 ((self.bits() >> Self::SMC_SHIFT) & 0b1111) as u8
19204 }
19205
19206 pub const fn set_smc(&mut self, value: u8) {
19208 let offset = Self::SMC_SHIFT;
19209 assert!(value & (Self::SMC_MASK as u8) == value);
19210 *self = Self::from_bits_retain(
19211 (self.bits() & !(Self::SMC_MASK << offset)) | ((value as u32) << offset),
19212 );
19213 }
19214
19215 pub const fn with_smc(mut self, value: u8) -> Self {
19217 self.set_smc(value);
19218 self
19219 }
19220
19221 pub const fn barrier(self) -> u8 {
19223 ((self.bits() >> Self::BARRIER_SHIFT) & 0b1111) as u8
19224 }
19225
19226 pub const fn set_barrier(&mut self, value: u8) {
19228 let offset = Self::BARRIER_SHIFT;
19229 assert!(value & (Self::BARRIER_MASK as u8) == value);
19230 *self = Self::from_bits_retain(
19231 (self.bits() & !(Self::BARRIER_MASK << offset)) | ((value as u32) << offset),
19232 );
19233 }
19234
19235 pub const fn with_barrier(mut self, value: u8) -> Self {
19237 self.set_barrier(value);
19238 self
19239 }
19240
19241 pub const fn synchprim_frac(self) -> u8 {
19243 ((self.bits() >> Self::SYNCHPRIM_FRAC_SHIFT) & 0b1111) as u8
19244 }
19245
19246 pub const fn set_synchprim_frac(&mut self, value: u8) {
19248 let offset = Self::SYNCHPRIM_FRAC_SHIFT;
19249 assert!(value & (Self::SYNCHPRIM_FRAC_MASK as u8) == value);
19250 *self = Self::from_bits_retain(
19251 (self.bits() & !(Self::SYNCHPRIM_FRAC_MASK << offset)) | ((value as u32) << offset),
19252 );
19253 }
19254
19255 pub const fn with_synchprim_frac(mut self, value: u8) -> Self {
19257 self.set_synchprim_frac(value);
19258 self
19259 }
19260
19261 pub const fn psr_m(self) -> u8 {
19263 ((self.bits() >> Self::PSR_M_SHIFT) & 0b1111) as u8
19264 }
19265
19266 pub const fn set_psr_m(&mut self, value: u8) {
19268 let offset = Self::PSR_M_SHIFT;
19269 assert!(value & (Self::PSR_M_MASK as u8) == value);
19270 *self = Self::from_bits_retain(
19271 (self.bits() & !(Self::PSR_M_MASK << offset)) | ((value as u32) << offset),
19272 );
19273 }
19274
19275 pub const fn with_psr_m(mut self, value: u8) -> Self {
19277 self.set_psr_m(value);
19278 self
19279 }
19280
19281 pub const fn swp_frac(self) -> u8 {
19283 ((self.bits() >> Self::SWP_FRAC_SHIFT) & 0b1111) as u8
19284 }
19285
19286 pub const fn set_swp_frac(&mut self, value: u8) {
19288 let offset = Self::SWP_FRAC_SHIFT;
19289 assert!(value & (Self::SWP_FRAC_MASK as u8) == value);
19290 *self = Self::from_bits_retain(
19291 (self.bits() & !(Self::SWP_FRAC_MASK << offset)) | ((value as u32) << offset),
19292 );
19293 }
19294
19295 pub const fn with_swp_frac(mut self, value: u8) -> Self {
19297 self.set_swp_frac(value);
19298 self
19299 }
19300}
19301
19302bitflags! {
19303 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19305 #[repr(transparent)]
19306 pub struct IdIsar5: u32 {
19307 }
19308}
19309
19310impl IdIsar5 {
19311 pub const SEVL_SHIFT: u32 = 0;
19313 pub const SEVL_MASK: u32 = 0b1111;
19315 pub const AES_SHIFT: u32 = 4;
19317 pub const AES_MASK: u32 = 0b1111;
19319 pub const SHA1_SHIFT: u32 = 8;
19321 pub const SHA1_MASK: u32 = 0b1111;
19323 pub const SHA2_SHIFT: u32 = 12;
19325 pub const SHA2_MASK: u32 = 0b1111;
19327 pub const CRC32_SHIFT: u32 = 16;
19329 pub const CRC32_MASK: u32 = 0b1111;
19331 pub const RDM_SHIFT: u32 = 24;
19333 pub const RDM_MASK: u32 = 0b1111;
19335 pub const VCMA_SHIFT: u32 = 28;
19337 pub const VCMA_MASK: u32 = 0b1111;
19339
19340 pub const fn sevl(self) -> u8 {
19342 ((self.bits() >> Self::SEVL_SHIFT) & 0b1111) as u8
19343 }
19344
19345 pub const fn set_sevl(&mut self, value: u8) {
19347 let offset = Self::SEVL_SHIFT;
19348 assert!(value & (Self::SEVL_MASK as u8) == value);
19349 *self = Self::from_bits_retain(
19350 (self.bits() & !(Self::SEVL_MASK << offset)) | ((value as u32) << offset),
19351 );
19352 }
19353
19354 pub const fn with_sevl(mut self, value: u8) -> Self {
19356 self.set_sevl(value);
19357 self
19358 }
19359
19360 pub const fn aes(self) -> u8 {
19362 ((self.bits() >> Self::AES_SHIFT) & 0b1111) as u8
19363 }
19364
19365 pub const fn set_aes(&mut self, value: u8) {
19367 let offset = Self::AES_SHIFT;
19368 assert!(value & (Self::AES_MASK as u8) == value);
19369 *self = Self::from_bits_retain(
19370 (self.bits() & !(Self::AES_MASK << offset)) | ((value as u32) << offset),
19371 );
19372 }
19373
19374 pub const fn with_aes(mut self, value: u8) -> Self {
19376 self.set_aes(value);
19377 self
19378 }
19379
19380 pub const fn sha1(self) -> u8 {
19382 ((self.bits() >> Self::SHA1_SHIFT) & 0b1111) as u8
19383 }
19384
19385 pub const fn set_sha1(&mut self, value: u8) {
19387 let offset = Self::SHA1_SHIFT;
19388 assert!(value & (Self::SHA1_MASK as u8) == value);
19389 *self = Self::from_bits_retain(
19390 (self.bits() & !(Self::SHA1_MASK << offset)) | ((value as u32) << offset),
19391 );
19392 }
19393
19394 pub const fn with_sha1(mut self, value: u8) -> Self {
19396 self.set_sha1(value);
19397 self
19398 }
19399
19400 pub const fn sha2(self) -> u8 {
19402 ((self.bits() >> Self::SHA2_SHIFT) & 0b1111) as u8
19403 }
19404
19405 pub const fn set_sha2(&mut self, value: u8) {
19407 let offset = Self::SHA2_SHIFT;
19408 assert!(value & (Self::SHA2_MASK as u8) == value);
19409 *self = Self::from_bits_retain(
19410 (self.bits() & !(Self::SHA2_MASK << offset)) | ((value as u32) << offset),
19411 );
19412 }
19413
19414 pub const fn with_sha2(mut self, value: u8) -> Self {
19416 self.set_sha2(value);
19417 self
19418 }
19419
19420 pub const fn crc32(self) -> u8 {
19422 ((self.bits() >> Self::CRC32_SHIFT) & 0b1111) as u8
19423 }
19424
19425 pub const fn set_crc32(&mut self, value: u8) {
19427 let offset = Self::CRC32_SHIFT;
19428 assert!(value & (Self::CRC32_MASK as u8) == value);
19429 *self = Self::from_bits_retain(
19430 (self.bits() & !(Self::CRC32_MASK << offset)) | ((value as u32) << offset),
19431 );
19432 }
19433
19434 pub const fn with_crc32(mut self, value: u8) -> Self {
19436 self.set_crc32(value);
19437 self
19438 }
19439
19440 pub const fn rdm(self) -> u8 {
19442 ((self.bits() >> Self::RDM_SHIFT) & 0b1111) as u8
19443 }
19444
19445 pub const fn set_rdm(&mut self, value: u8) {
19447 let offset = Self::RDM_SHIFT;
19448 assert!(value & (Self::RDM_MASK as u8) == value);
19449 *self = Self::from_bits_retain(
19450 (self.bits() & !(Self::RDM_MASK << offset)) | ((value as u32) << offset),
19451 );
19452 }
19453
19454 pub const fn with_rdm(mut self, value: u8) -> Self {
19456 self.set_rdm(value);
19457 self
19458 }
19459
19460 pub const fn vcma(self) -> u8 {
19462 ((self.bits() >> Self::VCMA_SHIFT) & 0b1111) as u8
19463 }
19464
19465 pub const fn set_vcma(&mut self, value: u8) {
19467 let offset = Self::VCMA_SHIFT;
19468 assert!(value & (Self::VCMA_MASK as u8) == value);
19469 *self = Self::from_bits_retain(
19470 (self.bits() & !(Self::VCMA_MASK << offset)) | ((value as u32) << offset),
19471 );
19472 }
19473
19474 pub const fn with_vcma(mut self, value: u8) -> Self {
19476 self.set_vcma(value);
19477 self
19478 }
19479}
19480
19481bitflags! {
19482 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19484 #[repr(transparent)]
19485 pub struct IdIsar6: u32 {
19486 }
19487}
19488
19489impl IdIsar6 {
19490 pub const JSCVT_SHIFT: u32 = 0;
19492 pub const JSCVT_MASK: u32 = 0b1111;
19494 pub const DP_SHIFT: u32 = 4;
19496 pub const DP_MASK: u32 = 0b1111;
19498 pub const FHM_SHIFT: u32 = 8;
19500 pub const FHM_MASK: u32 = 0b1111;
19502 pub const SB_SHIFT: u32 = 12;
19504 pub const SB_MASK: u32 = 0b1111;
19506 pub const SPECRES_SHIFT: u32 = 16;
19508 pub const SPECRES_MASK: u32 = 0b1111;
19510 pub const BF16_SHIFT: u32 = 20;
19512 pub const BF16_MASK: u32 = 0b1111;
19514 pub const I8MM_SHIFT: u32 = 24;
19516 pub const I8MM_MASK: u32 = 0b1111;
19518 pub const CLRBHB_SHIFT: u32 = 28;
19520 pub const CLRBHB_MASK: u32 = 0b1111;
19522
19523 pub const fn jscvt(self) -> u8 {
19525 ((self.bits() >> Self::JSCVT_SHIFT) & 0b1111) as u8
19526 }
19527
19528 pub const fn set_jscvt(&mut self, value: u8) {
19530 let offset = Self::JSCVT_SHIFT;
19531 assert!(value & (Self::JSCVT_MASK as u8) == value);
19532 *self = Self::from_bits_retain(
19533 (self.bits() & !(Self::JSCVT_MASK << offset)) | ((value as u32) << offset),
19534 );
19535 }
19536
19537 pub const fn with_jscvt(mut self, value: u8) -> Self {
19539 self.set_jscvt(value);
19540 self
19541 }
19542
19543 pub const fn dp(self) -> u8 {
19545 ((self.bits() >> Self::DP_SHIFT) & 0b1111) as u8
19546 }
19547
19548 pub const fn set_dp(&mut self, value: u8) {
19550 let offset = Self::DP_SHIFT;
19551 assert!(value & (Self::DP_MASK as u8) == value);
19552 *self = Self::from_bits_retain(
19553 (self.bits() & !(Self::DP_MASK << offset)) | ((value as u32) << offset),
19554 );
19555 }
19556
19557 pub const fn with_dp(mut self, value: u8) -> Self {
19559 self.set_dp(value);
19560 self
19561 }
19562
19563 pub const fn fhm(self) -> u8 {
19565 ((self.bits() >> Self::FHM_SHIFT) & 0b1111) as u8
19566 }
19567
19568 pub const fn set_fhm(&mut self, value: u8) {
19570 let offset = Self::FHM_SHIFT;
19571 assert!(value & (Self::FHM_MASK as u8) == value);
19572 *self = Self::from_bits_retain(
19573 (self.bits() & !(Self::FHM_MASK << offset)) | ((value as u32) << offset),
19574 );
19575 }
19576
19577 pub const fn with_fhm(mut self, value: u8) -> Self {
19579 self.set_fhm(value);
19580 self
19581 }
19582
19583 pub const fn sb(self) -> u8 {
19585 ((self.bits() >> Self::SB_SHIFT) & 0b1111) as u8
19586 }
19587
19588 pub const fn set_sb(&mut self, value: u8) {
19590 let offset = Self::SB_SHIFT;
19591 assert!(value & (Self::SB_MASK as u8) == value);
19592 *self = Self::from_bits_retain(
19593 (self.bits() & !(Self::SB_MASK << offset)) | ((value as u32) << offset),
19594 );
19595 }
19596
19597 pub const fn with_sb(mut self, value: u8) -> Self {
19599 self.set_sb(value);
19600 self
19601 }
19602
19603 pub const fn specres(self) -> u8 {
19605 ((self.bits() >> Self::SPECRES_SHIFT) & 0b1111) as u8
19606 }
19607
19608 pub const fn set_specres(&mut self, value: u8) {
19610 let offset = Self::SPECRES_SHIFT;
19611 assert!(value & (Self::SPECRES_MASK as u8) == value);
19612 *self = Self::from_bits_retain(
19613 (self.bits() & !(Self::SPECRES_MASK << offset)) | ((value as u32) << offset),
19614 );
19615 }
19616
19617 pub const fn with_specres(mut self, value: u8) -> Self {
19619 self.set_specres(value);
19620 self
19621 }
19622
19623 pub const fn bf16(self) -> u8 {
19625 ((self.bits() >> Self::BF16_SHIFT) & 0b1111) as u8
19626 }
19627
19628 pub const fn set_bf16(&mut self, value: u8) {
19630 let offset = Self::BF16_SHIFT;
19631 assert!(value & (Self::BF16_MASK as u8) == value);
19632 *self = Self::from_bits_retain(
19633 (self.bits() & !(Self::BF16_MASK << offset)) | ((value as u32) << offset),
19634 );
19635 }
19636
19637 pub const fn with_bf16(mut self, value: u8) -> Self {
19639 self.set_bf16(value);
19640 self
19641 }
19642
19643 pub const fn i8mm(self) -> u8 {
19645 ((self.bits() >> Self::I8MM_SHIFT) & 0b1111) as u8
19646 }
19647
19648 pub const fn set_i8mm(&mut self, value: u8) {
19650 let offset = Self::I8MM_SHIFT;
19651 assert!(value & (Self::I8MM_MASK as u8) == value);
19652 *self = Self::from_bits_retain(
19653 (self.bits() & !(Self::I8MM_MASK << offset)) | ((value as u32) << offset),
19654 );
19655 }
19656
19657 pub const fn with_i8mm(mut self, value: u8) -> Self {
19659 self.set_i8mm(value);
19660 self
19661 }
19662
19663 pub const fn clrbhb(self) -> u8 {
19665 ((self.bits() >> Self::CLRBHB_SHIFT) & 0b1111) as u8
19666 }
19667
19668 pub const fn set_clrbhb(&mut self, value: u8) {
19670 let offset = Self::CLRBHB_SHIFT;
19671 assert!(value & (Self::CLRBHB_MASK as u8) == value);
19672 *self = Self::from_bits_retain(
19673 (self.bits() & !(Self::CLRBHB_MASK << offset)) | ((value as u32) << offset),
19674 );
19675 }
19676
19677 pub const fn with_clrbhb(mut self, value: u8) -> Self {
19679 self.set_clrbhb(value);
19680 self
19681 }
19682}
19683
19684bitflags! {
19685 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19687 #[repr(transparent)]
19688 pub struct IdMmfr0: u32 {
19689 }
19690}
19691
19692impl IdMmfr0 {
19693 pub const VMSA_SHIFT: u32 = 0;
19695 pub const VMSA_MASK: u32 = 0b1111;
19697 pub const PMSA_SHIFT: u32 = 4;
19699 pub const PMSA_MASK: u32 = 0b1111;
19701 pub const OUTERSHR_SHIFT: u32 = 8;
19703 pub const OUTERSHR_MASK: u32 = 0b1111;
19705 pub const SHARELVL_SHIFT: u32 = 12;
19707 pub const SHARELVL_MASK: u32 = 0b1111;
19709 pub const TCM_SHIFT: u32 = 16;
19711 pub const TCM_MASK: u32 = 0b1111;
19713 pub const AUXREG_SHIFT: u32 = 20;
19715 pub const AUXREG_MASK: u32 = 0b1111;
19717 pub const FCSE_SHIFT: u32 = 24;
19719 pub const FCSE_MASK: u32 = 0b1111;
19721 pub const INNERSHR_SHIFT: u32 = 28;
19723 pub const INNERSHR_MASK: u32 = 0b1111;
19725
19726 pub const fn vmsa(self) -> u8 {
19728 ((self.bits() >> Self::VMSA_SHIFT) & 0b1111) as u8
19729 }
19730
19731 pub const fn set_vmsa(&mut self, value: u8) {
19733 let offset = Self::VMSA_SHIFT;
19734 assert!(value & (Self::VMSA_MASK as u8) == value);
19735 *self = Self::from_bits_retain(
19736 (self.bits() & !(Self::VMSA_MASK << offset)) | ((value as u32) << offset),
19737 );
19738 }
19739
19740 pub const fn with_vmsa(mut self, value: u8) -> Self {
19742 self.set_vmsa(value);
19743 self
19744 }
19745
19746 pub const fn pmsa(self) -> u8 {
19748 ((self.bits() >> Self::PMSA_SHIFT) & 0b1111) as u8
19749 }
19750
19751 pub const fn set_pmsa(&mut self, value: u8) {
19753 let offset = Self::PMSA_SHIFT;
19754 assert!(value & (Self::PMSA_MASK as u8) == value);
19755 *self = Self::from_bits_retain(
19756 (self.bits() & !(Self::PMSA_MASK << offset)) | ((value as u32) << offset),
19757 );
19758 }
19759
19760 pub const fn with_pmsa(mut self, value: u8) -> Self {
19762 self.set_pmsa(value);
19763 self
19764 }
19765
19766 pub const fn outershr(self) -> u8 {
19768 ((self.bits() >> Self::OUTERSHR_SHIFT) & 0b1111) as u8
19769 }
19770
19771 pub const fn set_outershr(&mut self, value: u8) {
19773 let offset = Self::OUTERSHR_SHIFT;
19774 assert!(value & (Self::OUTERSHR_MASK as u8) == value);
19775 *self = Self::from_bits_retain(
19776 (self.bits() & !(Self::OUTERSHR_MASK << offset)) | ((value as u32) << offset),
19777 );
19778 }
19779
19780 pub const fn with_outershr(mut self, value: u8) -> Self {
19782 self.set_outershr(value);
19783 self
19784 }
19785
19786 pub const fn sharelvl(self) -> u8 {
19788 ((self.bits() >> Self::SHARELVL_SHIFT) & 0b1111) as u8
19789 }
19790
19791 pub const fn set_sharelvl(&mut self, value: u8) {
19793 let offset = Self::SHARELVL_SHIFT;
19794 assert!(value & (Self::SHARELVL_MASK as u8) == value);
19795 *self = Self::from_bits_retain(
19796 (self.bits() & !(Self::SHARELVL_MASK << offset)) | ((value as u32) << offset),
19797 );
19798 }
19799
19800 pub const fn with_sharelvl(mut self, value: u8) -> Self {
19802 self.set_sharelvl(value);
19803 self
19804 }
19805
19806 pub const fn tcm(self) -> u8 {
19808 ((self.bits() >> Self::TCM_SHIFT) & 0b1111) as u8
19809 }
19810
19811 pub const fn set_tcm(&mut self, value: u8) {
19813 let offset = Self::TCM_SHIFT;
19814 assert!(value & (Self::TCM_MASK as u8) == value);
19815 *self = Self::from_bits_retain(
19816 (self.bits() & !(Self::TCM_MASK << offset)) | ((value as u32) << offset),
19817 );
19818 }
19819
19820 pub const fn with_tcm(mut self, value: u8) -> Self {
19822 self.set_tcm(value);
19823 self
19824 }
19825
19826 pub const fn auxreg(self) -> u8 {
19828 ((self.bits() >> Self::AUXREG_SHIFT) & 0b1111) as u8
19829 }
19830
19831 pub const fn set_auxreg(&mut self, value: u8) {
19833 let offset = Self::AUXREG_SHIFT;
19834 assert!(value & (Self::AUXREG_MASK as u8) == value);
19835 *self = Self::from_bits_retain(
19836 (self.bits() & !(Self::AUXREG_MASK << offset)) | ((value as u32) << offset),
19837 );
19838 }
19839
19840 pub const fn with_auxreg(mut self, value: u8) -> Self {
19842 self.set_auxreg(value);
19843 self
19844 }
19845
19846 pub const fn fcse(self) -> u8 {
19848 ((self.bits() >> Self::FCSE_SHIFT) & 0b1111) as u8
19849 }
19850
19851 pub const fn set_fcse(&mut self, value: u8) {
19853 let offset = Self::FCSE_SHIFT;
19854 assert!(value & (Self::FCSE_MASK as u8) == value);
19855 *self = Self::from_bits_retain(
19856 (self.bits() & !(Self::FCSE_MASK << offset)) | ((value as u32) << offset),
19857 );
19858 }
19859
19860 pub const fn with_fcse(mut self, value: u8) -> Self {
19862 self.set_fcse(value);
19863 self
19864 }
19865
19866 pub const fn innershr(self) -> u8 {
19868 ((self.bits() >> Self::INNERSHR_SHIFT) & 0b1111) as u8
19869 }
19870
19871 pub const fn set_innershr(&mut self, value: u8) {
19873 let offset = Self::INNERSHR_SHIFT;
19874 assert!(value & (Self::INNERSHR_MASK as u8) == value);
19875 *self = Self::from_bits_retain(
19876 (self.bits() & !(Self::INNERSHR_MASK << offset)) | ((value as u32) << offset),
19877 );
19878 }
19879
19880 pub const fn with_innershr(mut self, value: u8) -> Self {
19882 self.set_innershr(value);
19883 self
19884 }
19885}
19886
19887bitflags! {
19888 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
19890 #[repr(transparent)]
19891 pub struct IdMmfr1: u32 {
19892 }
19893}
19894
19895impl IdMmfr1 {
19896 pub const L1HVDVA_SHIFT: u32 = 0;
19898 pub const L1HVDVA_MASK: u32 = 0b1111;
19900 pub const L1UNIVA_SHIFT: u32 = 4;
19902 pub const L1UNIVA_MASK: u32 = 0b1111;
19904 pub const L1HVDSW_SHIFT: u32 = 8;
19906 pub const L1HVDSW_MASK: u32 = 0b1111;
19908 pub const L1UNISW_SHIFT: u32 = 12;
19910 pub const L1UNISW_MASK: u32 = 0b1111;
19912 pub const L1HVD_SHIFT: u32 = 16;
19914 pub const L1HVD_MASK: u32 = 0b1111;
19916 pub const L1UNI_SHIFT: u32 = 20;
19918 pub const L1UNI_MASK: u32 = 0b1111;
19920 pub const L1TSTCLN_SHIFT: u32 = 24;
19922 pub const L1TSTCLN_MASK: u32 = 0b1111;
19924 pub const BPRED_SHIFT: u32 = 28;
19926 pub const BPRED_MASK: u32 = 0b1111;
19928
19929 pub const fn l1hvdva(self) -> u8 {
19931 ((self.bits() >> Self::L1HVDVA_SHIFT) & 0b1111) as u8
19932 }
19933
19934 pub const fn set_l1hvdva(&mut self, value: u8) {
19936 let offset = Self::L1HVDVA_SHIFT;
19937 assert!(value & (Self::L1HVDVA_MASK as u8) == value);
19938 *self = Self::from_bits_retain(
19939 (self.bits() & !(Self::L1HVDVA_MASK << offset)) | ((value as u32) << offset),
19940 );
19941 }
19942
19943 pub const fn with_l1hvdva(mut self, value: u8) -> Self {
19945 self.set_l1hvdva(value);
19946 self
19947 }
19948
19949 pub const fn l1univa(self) -> u8 {
19951 ((self.bits() >> Self::L1UNIVA_SHIFT) & 0b1111) as u8
19952 }
19953
19954 pub const fn set_l1univa(&mut self, value: u8) {
19956 let offset = Self::L1UNIVA_SHIFT;
19957 assert!(value & (Self::L1UNIVA_MASK as u8) == value);
19958 *self = Self::from_bits_retain(
19959 (self.bits() & !(Self::L1UNIVA_MASK << offset)) | ((value as u32) << offset),
19960 );
19961 }
19962
19963 pub const fn with_l1univa(mut self, value: u8) -> Self {
19965 self.set_l1univa(value);
19966 self
19967 }
19968
19969 pub const fn l1hvdsw(self) -> u8 {
19971 ((self.bits() >> Self::L1HVDSW_SHIFT) & 0b1111) as u8
19972 }
19973
19974 pub const fn set_l1hvdsw(&mut self, value: u8) {
19976 let offset = Self::L1HVDSW_SHIFT;
19977 assert!(value & (Self::L1HVDSW_MASK as u8) == value);
19978 *self = Self::from_bits_retain(
19979 (self.bits() & !(Self::L1HVDSW_MASK << offset)) | ((value as u32) << offset),
19980 );
19981 }
19982
19983 pub const fn with_l1hvdsw(mut self, value: u8) -> Self {
19985 self.set_l1hvdsw(value);
19986 self
19987 }
19988
19989 pub const fn l1unisw(self) -> u8 {
19991 ((self.bits() >> Self::L1UNISW_SHIFT) & 0b1111) as u8
19992 }
19993
19994 pub const fn set_l1unisw(&mut self, value: u8) {
19996 let offset = Self::L1UNISW_SHIFT;
19997 assert!(value & (Self::L1UNISW_MASK as u8) == value);
19998 *self = Self::from_bits_retain(
19999 (self.bits() & !(Self::L1UNISW_MASK << offset)) | ((value as u32) << offset),
20000 );
20001 }
20002
20003 pub const fn with_l1unisw(mut self, value: u8) -> Self {
20005 self.set_l1unisw(value);
20006 self
20007 }
20008
20009 pub const fn l1hvd(self) -> u8 {
20011 ((self.bits() >> Self::L1HVD_SHIFT) & 0b1111) as u8
20012 }
20013
20014 pub const fn set_l1hvd(&mut self, value: u8) {
20016 let offset = Self::L1HVD_SHIFT;
20017 assert!(value & (Self::L1HVD_MASK as u8) == value);
20018 *self = Self::from_bits_retain(
20019 (self.bits() & !(Self::L1HVD_MASK << offset)) | ((value as u32) << offset),
20020 );
20021 }
20022
20023 pub const fn with_l1hvd(mut self, value: u8) -> Self {
20025 self.set_l1hvd(value);
20026 self
20027 }
20028
20029 pub const fn l1uni(self) -> u8 {
20031 ((self.bits() >> Self::L1UNI_SHIFT) & 0b1111) as u8
20032 }
20033
20034 pub const fn set_l1uni(&mut self, value: u8) {
20036 let offset = Self::L1UNI_SHIFT;
20037 assert!(value & (Self::L1UNI_MASK as u8) == value);
20038 *self = Self::from_bits_retain(
20039 (self.bits() & !(Self::L1UNI_MASK << offset)) | ((value as u32) << offset),
20040 );
20041 }
20042
20043 pub const fn with_l1uni(mut self, value: u8) -> Self {
20045 self.set_l1uni(value);
20046 self
20047 }
20048
20049 pub const fn l1tstcln(self) -> u8 {
20051 ((self.bits() >> Self::L1TSTCLN_SHIFT) & 0b1111) as u8
20052 }
20053
20054 pub const fn set_l1tstcln(&mut self, value: u8) {
20056 let offset = Self::L1TSTCLN_SHIFT;
20057 assert!(value & (Self::L1TSTCLN_MASK as u8) == value);
20058 *self = Self::from_bits_retain(
20059 (self.bits() & !(Self::L1TSTCLN_MASK << offset)) | ((value as u32) << offset),
20060 );
20061 }
20062
20063 pub const fn with_l1tstcln(mut self, value: u8) -> Self {
20065 self.set_l1tstcln(value);
20066 self
20067 }
20068
20069 pub const fn bpred(self) -> u8 {
20071 ((self.bits() >> Self::BPRED_SHIFT) & 0b1111) as u8
20072 }
20073
20074 pub const fn set_bpred(&mut self, value: u8) {
20076 let offset = Self::BPRED_SHIFT;
20077 assert!(value & (Self::BPRED_MASK as u8) == value);
20078 *self = Self::from_bits_retain(
20079 (self.bits() & !(Self::BPRED_MASK << offset)) | ((value as u32) << offset),
20080 );
20081 }
20082
20083 pub const fn with_bpred(mut self, value: u8) -> Self {
20085 self.set_bpred(value);
20086 self
20087 }
20088}
20089
20090bitflags! {
20091 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20093 #[repr(transparent)]
20094 pub struct IdMmfr2: u32 {
20095 }
20096}
20097
20098impl IdMmfr2 {
20099 pub const L1HVDFG_SHIFT: u32 = 0;
20101 pub const L1HVDFG_MASK: u32 = 0b1111;
20103 pub const L1HVDBG_SHIFT: u32 = 4;
20105 pub const L1HVDBG_MASK: u32 = 0b1111;
20107 pub const L1HVDRNG_SHIFT: u32 = 8;
20109 pub const L1HVDRNG_MASK: u32 = 0b1111;
20111 pub const HVDTLB_SHIFT: u32 = 12;
20113 pub const HVDTLB_MASK: u32 = 0b1111;
20115 pub const UNITLB_SHIFT: u32 = 16;
20117 pub const UNITLB_MASK: u32 = 0b1111;
20119 pub const MEMBARR_SHIFT: u32 = 20;
20121 pub const MEMBARR_MASK: u32 = 0b1111;
20123 pub const WFISTALL_SHIFT: u32 = 24;
20125 pub const WFISTALL_MASK: u32 = 0b1111;
20127 pub const HWACCFLG_SHIFT: u32 = 28;
20129 pub const HWACCFLG_MASK: u32 = 0b1111;
20131
20132 pub const fn l1hvdfg(self) -> u8 {
20134 ((self.bits() >> Self::L1HVDFG_SHIFT) & 0b1111) as u8
20135 }
20136
20137 pub const fn set_l1hvdfg(&mut self, value: u8) {
20139 let offset = Self::L1HVDFG_SHIFT;
20140 assert!(value & (Self::L1HVDFG_MASK as u8) == value);
20141 *self = Self::from_bits_retain(
20142 (self.bits() & !(Self::L1HVDFG_MASK << offset)) | ((value as u32) << offset),
20143 );
20144 }
20145
20146 pub const fn with_l1hvdfg(mut self, value: u8) -> Self {
20148 self.set_l1hvdfg(value);
20149 self
20150 }
20151
20152 pub const fn l1hvdbg(self) -> u8 {
20154 ((self.bits() >> Self::L1HVDBG_SHIFT) & 0b1111) as u8
20155 }
20156
20157 pub const fn set_l1hvdbg(&mut self, value: u8) {
20159 let offset = Self::L1HVDBG_SHIFT;
20160 assert!(value & (Self::L1HVDBG_MASK as u8) == value);
20161 *self = Self::from_bits_retain(
20162 (self.bits() & !(Self::L1HVDBG_MASK << offset)) | ((value as u32) << offset),
20163 );
20164 }
20165
20166 pub const fn with_l1hvdbg(mut self, value: u8) -> Self {
20168 self.set_l1hvdbg(value);
20169 self
20170 }
20171
20172 pub const fn l1hvdrng(self) -> u8 {
20174 ((self.bits() >> Self::L1HVDRNG_SHIFT) & 0b1111) as u8
20175 }
20176
20177 pub const fn set_l1hvdrng(&mut self, value: u8) {
20179 let offset = Self::L1HVDRNG_SHIFT;
20180 assert!(value & (Self::L1HVDRNG_MASK as u8) == value);
20181 *self = Self::from_bits_retain(
20182 (self.bits() & !(Self::L1HVDRNG_MASK << offset)) | ((value as u32) << offset),
20183 );
20184 }
20185
20186 pub const fn with_l1hvdrng(mut self, value: u8) -> Self {
20188 self.set_l1hvdrng(value);
20189 self
20190 }
20191
20192 pub const fn hvdtlb(self) -> u8 {
20194 ((self.bits() >> Self::HVDTLB_SHIFT) & 0b1111) as u8
20195 }
20196
20197 pub const fn set_hvdtlb(&mut self, value: u8) {
20199 let offset = Self::HVDTLB_SHIFT;
20200 assert!(value & (Self::HVDTLB_MASK as u8) == value);
20201 *self = Self::from_bits_retain(
20202 (self.bits() & !(Self::HVDTLB_MASK << offset)) | ((value as u32) << offset),
20203 );
20204 }
20205
20206 pub const fn with_hvdtlb(mut self, value: u8) -> Self {
20208 self.set_hvdtlb(value);
20209 self
20210 }
20211
20212 pub const fn unitlb(self) -> u8 {
20214 ((self.bits() >> Self::UNITLB_SHIFT) & 0b1111) as u8
20215 }
20216
20217 pub const fn set_unitlb(&mut self, value: u8) {
20219 let offset = Self::UNITLB_SHIFT;
20220 assert!(value & (Self::UNITLB_MASK as u8) == value);
20221 *self = Self::from_bits_retain(
20222 (self.bits() & !(Self::UNITLB_MASK << offset)) | ((value as u32) << offset),
20223 );
20224 }
20225
20226 pub const fn with_unitlb(mut self, value: u8) -> Self {
20228 self.set_unitlb(value);
20229 self
20230 }
20231
20232 pub const fn membarr(self) -> u8 {
20234 ((self.bits() >> Self::MEMBARR_SHIFT) & 0b1111) as u8
20235 }
20236
20237 pub const fn set_membarr(&mut self, value: u8) {
20239 let offset = Self::MEMBARR_SHIFT;
20240 assert!(value & (Self::MEMBARR_MASK as u8) == value);
20241 *self = Self::from_bits_retain(
20242 (self.bits() & !(Self::MEMBARR_MASK << offset)) | ((value as u32) << offset),
20243 );
20244 }
20245
20246 pub const fn with_membarr(mut self, value: u8) -> Self {
20248 self.set_membarr(value);
20249 self
20250 }
20251
20252 pub const fn wfistall(self) -> u8 {
20254 ((self.bits() >> Self::WFISTALL_SHIFT) & 0b1111) as u8
20255 }
20256
20257 pub const fn set_wfistall(&mut self, value: u8) {
20259 let offset = Self::WFISTALL_SHIFT;
20260 assert!(value & (Self::WFISTALL_MASK as u8) == value);
20261 *self = Self::from_bits_retain(
20262 (self.bits() & !(Self::WFISTALL_MASK << offset)) | ((value as u32) << offset),
20263 );
20264 }
20265
20266 pub const fn with_wfistall(mut self, value: u8) -> Self {
20268 self.set_wfistall(value);
20269 self
20270 }
20271
20272 pub const fn hwaccflg(self) -> u8 {
20274 ((self.bits() >> Self::HWACCFLG_SHIFT) & 0b1111) as u8
20275 }
20276
20277 pub const fn set_hwaccflg(&mut self, value: u8) {
20279 let offset = Self::HWACCFLG_SHIFT;
20280 assert!(value & (Self::HWACCFLG_MASK as u8) == value);
20281 *self = Self::from_bits_retain(
20282 (self.bits() & !(Self::HWACCFLG_MASK << offset)) | ((value as u32) << offset),
20283 );
20284 }
20285
20286 pub const fn with_hwaccflg(mut self, value: u8) -> Self {
20288 self.set_hwaccflg(value);
20289 self
20290 }
20291}
20292
20293bitflags! {
20294 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20296 #[repr(transparent)]
20297 pub struct IdMmfr3: u32 {
20298 }
20299}
20300
20301impl IdMmfr3 {
20302 pub const CMAINTVA_SHIFT: u32 = 0;
20304 pub const CMAINTVA_MASK: u32 = 0b1111;
20306 pub const CMAINTSW_SHIFT: u32 = 4;
20308 pub const CMAINTSW_MASK: u32 = 0b1111;
20310 pub const BPMAINT_SHIFT: u32 = 8;
20312 pub const BPMAINT_MASK: u32 = 0b1111;
20314 pub const MAINTBCST_SHIFT: u32 = 12;
20316 pub const MAINTBCST_MASK: u32 = 0b1111;
20318 pub const PAN_SHIFT: u32 = 16;
20320 pub const PAN_MASK: u32 = 0b1111;
20322 pub const COHWALK_SHIFT: u32 = 20;
20324 pub const COHWALK_MASK: u32 = 0b1111;
20326 pub const CMEMSZ_SHIFT: u32 = 24;
20328 pub const CMEMSZ_MASK: u32 = 0b1111;
20330 pub const SUPERSEC_SHIFT: u32 = 28;
20332 pub const SUPERSEC_MASK: u32 = 0b1111;
20334
20335 pub const fn cmaintva(self) -> u8 {
20337 ((self.bits() >> Self::CMAINTVA_SHIFT) & 0b1111) as u8
20338 }
20339
20340 pub const fn set_cmaintva(&mut self, value: u8) {
20342 let offset = Self::CMAINTVA_SHIFT;
20343 assert!(value & (Self::CMAINTVA_MASK as u8) == value);
20344 *self = Self::from_bits_retain(
20345 (self.bits() & !(Self::CMAINTVA_MASK << offset)) | ((value as u32) << offset),
20346 );
20347 }
20348
20349 pub const fn with_cmaintva(mut self, value: u8) -> Self {
20351 self.set_cmaintva(value);
20352 self
20353 }
20354
20355 pub const fn cmaintsw(self) -> u8 {
20357 ((self.bits() >> Self::CMAINTSW_SHIFT) & 0b1111) as u8
20358 }
20359
20360 pub const fn set_cmaintsw(&mut self, value: u8) {
20362 let offset = Self::CMAINTSW_SHIFT;
20363 assert!(value & (Self::CMAINTSW_MASK as u8) == value);
20364 *self = Self::from_bits_retain(
20365 (self.bits() & !(Self::CMAINTSW_MASK << offset)) | ((value as u32) << offset),
20366 );
20367 }
20368
20369 pub const fn with_cmaintsw(mut self, value: u8) -> Self {
20371 self.set_cmaintsw(value);
20372 self
20373 }
20374
20375 pub const fn bpmaint(self) -> u8 {
20377 ((self.bits() >> Self::BPMAINT_SHIFT) & 0b1111) as u8
20378 }
20379
20380 pub const fn set_bpmaint(&mut self, value: u8) {
20382 let offset = Self::BPMAINT_SHIFT;
20383 assert!(value & (Self::BPMAINT_MASK as u8) == value);
20384 *self = Self::from_bits_retain(
20385 (self.bits() & !(Self::BPMAINT_MASK << offset)) | ((value as u32) << offset),
20386 );
20387 }
20388
20389 pub const fn with_bpmaint(mut self, value: u8) -> Self {
20391 self.set_bpmaint(value);
20392 self
20393 }
20394
20395 pub const fn maintbcst(self) -> u8 {
20397 ((self.bits() >> Self::MAINTBCST_SHIFT) & 0b1111) as u8
20398 }
20399
20400 pub const fn set_maintbcst(&mut self, value: u8) {
20402 let offset = Self::MAINTBCST_SHIFT;
20403 assert!(value & (Self::MAINTBCST_MASK as u8) == value);
20404 *self = Self::from_bits_retain(
20405 (self.bits() & !(Self::MAINTBCST_MASK << offset)) | ((value as u32) << offset),
20406 );
20407 }
20408
20409 pub const fn with_maintbcst(mut self, value: u8) -> Self {
20411 self.set_maintbcst(value);
20412 self
20413 }
20414
20415 pub const fn pan(self) -> u8 {
20417 ((self.bits() >> Self::PAN_SHIFT) & 0b1111) as u8
20418 }
20419
20420 pub const fn set_pan(&mut self, value: u8) {
20422 let offset = Self::PAN_SHIFT;
20423 assert!(value & (Self::PAN_MASK as u8) == value);
20424 *self = Self::from_bits_retain(
20425 (self.bits() & !(Self::PAN_MASK << offset)) | ((value as u32) << offset),
20426 );
20427 }
20428
20429 pub const fn with_pan(mut self, value: u8) -> Self {
20431 self.set_pan(value);
20432 self
20433 }
20434
20435 pub const fn cohwalk(self) -> u8 {
20437 ((self.bits() >> Self::COHWALK_SHIFT) & 0b1111) as u8
20438 }
20439
20440 pub const fn set_cohwalk(&mut self, value: u8) {
20442 let offset = Self::COHWALK_SHIFT;
20443 assert!(value & (Self::COHWALK_MASK as u8) == value);
20444 *self = Self::from_bits_retain(
20445 (self.bits() & !(Self::COHWALK_MASK << offset)) | ((value as u32) << offset),
20446 );
20447 }
20448
20449 pub const fn with_cohwalk(mut self, value: u8) -> Self {
20451 self.set_cohwalk(value);
20452 self
20453 }
20454
20455 pub const fn cmemsz(self) -> u8 {
20457 ((self.bits() >> Self::CMEMSZ_SHIFT) & 0b1111) as u8
20458 }
20459
20460 pub const fn set_cmemsz(&mut self, value: u8) {
20462 let offset = Self::CMEMSZ_SHIFT;
20463 assert!(value & (Self::CMEMSZ_MASK as u8) == value);
20464 *self = Self::from_bits_retain(
20465 (self.bits() & !(Self::CMEMSZ_MASK << offset)) | ((value as u32) << offset),
20466 );
20467 }
20468
20469 pub const fn with_cmemsz(mut self, value: u8) -> Self {
20471 self.set_cmemsz(value);
20472 self
20473 }
20474
20475 pub const fn supersec(self) -> u8 {
20477 ((self.bits() >> Self::SUPERSEC_SHIFT) & 0b1111) as u8
20478 }
20479
20480 pub const fn set_supersec(&mut self, value: u8) {
20482 let offset = Self::SUPERSEC_SHIFT;
20483 assert!(value & (Self::SUPERSEC_MASK as u8) == value);
20484 *self = Self::from_bits_retain(
20485 (self.bits() & !(Self::SUPERSEC_MASK << offset)) | ((value as u32) << offset),
20486 );
20487 }
20488
20489 pub const fn with_supersec(mut self, value: u8) -> Self {
20491 self.set_supersec(value);
20492 self
20493 }
20494}
20495
20496bitflags! {
20497 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20499 #[repr(transparent)]
20500 pub struct IdMmfr4: u32 {
20501 }
20502}
20503
20504impl IdMmfr4 {
20505 pub const SPECSEI_SHIFT: u32 = 0;
20507 pub const SPECSEI_MASK: u32 = 0b1111;
20509 pub const AC2_SHIFT: u32 = 4;
20511 pub const AC2_MASK: u32 = 0b1111;
20513 pub const XNX_SHIFT: u32 = 8;
20515 pub const XNX_MASK: u32 = 0b1111;
20517 pub const CNP_SHIFT: u32 = 12;
20519 pub const CNP_MASK: u32 = 0b1111;
20521 pub const HPDS_SHIFT: u32 = 16;
20523 pub const HPDS_MASK: u32 = 0b1111;
20525 pub const LSM_SHIFT: u32 = 20;
20527 pub const LSM_MASK: u32 = 0b1111;
20529 pub const CCIDX_SHIFT: u32 = 24;
20531 pub const CCIDX_MASK: u32 = 0b1111;
20533 pub const EVT_SHIFT: u32 = 28;
20535 pub const EVT_MASK: u32 = 0b1111;
20537
20538 pub const fn specsei(self) -> u8 {
20540 ((self.bits() >> Self::SPECSEI_SHIFT) & 0b1111) as u8
20541 }
20542
20543 pub const fn set_specsei(&mut self, value: u8) {
20545 let offset = Self::SPECSEI_SHIFT;
20546 assert!(value & (Self::SPECSEI_MASK as u8) == value);
20547 *self = Self::from_bits_retain(
20548 (self.bits() & !(Self::SPECSEI_MASK << offset)) | ((value as u32) << offset),
20549 );
20550 }
20551
20552 pub const fn with_specsei(mut self, value: u8) -> Self {
20554 self.set_specsei(value);
20555 self
20556 }
20557
20558 pub const fn ac2(self) -> u8 {
20560 ((self.bits() >> Self::AC2_SHIFT) & 0b1111) as u8
20561 }
20562
20563 pub const fn set_ac2(&mut self, value: u8) {
20565 let offset = Self::AC2_SHIFT;
20566 assert!(value & (Self::AC2_MASK as u8) == value);
20567 *self = Self::from_bits_retain(
20568 (self.bits() & !(Self::AC2_MASK << offset)) | ((value as u32) << offset),
20569 );
20570 }
20571
20572 pub const fn with_ac2(mut self, value: u8) -> Self {
20574 self.set_ac2(value);
20575 self
20576 }
20577
20578 pub const fn xnx(self) -> u8 {
20580 ((self.bits() >> Self::XNX_SHIFT) & 0b1111) as u8
20581 }
20582
20583 pub const fn set_xnx(&mut self, value: u8) {
20585 let offset = Self::XNX_SHIFT;
20586 assert!(value & (Self::XNX_MASK as u8) == value);
20587 *self = Self::from_bits_retain(
20588 (self.bits() & !(Self::XNX_MASK << offset)) | ((value as u32) << offset),
20589 );
20590 }
20591
20592 pub const fn with_xnx(mut self, value: u8) -> Self {
20594 self.set_xnx(value);
20595 self
20596 }
20597
20598 pub const fn cnp(self) -> u8 {
20600 ((self.bits() >> Self::CNP_SHIFT) & 0b1111) as u8
20601 }
20602
20603 pub const fn set_cnp(&mut self, value: u8) {
20605 let offset = Self::CNP_SHIFT;
20606 assert!(value & (Self::CNP_MASK as u8) == value);
20607 *self = Self::from_bits_retain(
20608 (self.bits() & !(Self::CNP_MASK << offset)) | ((value as u32) << offset),
20609 );
20610 }
20611
20612 pub const fn with_cnp(mut self, value: u8) -> Self {
20614 self.set_cnp(value);
20615 self
20616 }
20617
20618 pub const fn hpds(self) -> u8 {
20620 ((self.bits() >> Self::HPDS_SHIFT) & 0b1111) as u8
20621 }
20622
20623 pub const fn set_hpds(&mut self, value: u8) {
20625 let offset = Self::HPDS_SHIFT;
20626 assert!(value & (Self::HPDS_MASK as u8) == value);
20627 *self = Self::from_bits_retain(
20628 (self.bits() & !(Self::HPDS_MASK << offset)) | ((value as u32) << offset),
20629 );
20630 }
20631
20632 pub const fn with_hpds(mut self, value: u8) -> Self {
20634 self.set_hpds(value);
20635 self
20636 }
20637
20638 pub const fn lsm(self) -> u8 {
20640 ((self.bits() >> Self::LSM_SHIFT) & 0b1111) as u8
20641 }
20642
20643 pub const fn set_lsm(&mut self, value: u8) {
20645 let offset = Self::LSM_SHIFT;
20646 assert!(value & (Self::LSM_MASK as u8) == value);
20647 *self = Self::from_bits_retain(
20648 (self.bits() & !(Self::LSM_MASK << offset)) | ((value as u32) << offset),
20649 );
20650 }
20651
20652 pub const fn with_lsm(mut self, value: u8) -> Self {
20654 self.set_lsm(value);
20655 self
20656 }
20657
20658 pub const fn ccidx(self) -> u8 {
20660 ((self.bits() >> Self::CCIDX_SHIFT) & 0b1111) as u8
20661 }
20662
20663 pub const fn set_ccidx(&mut self, value: u8) {
20665 let offset = Self::CCIDX_SHIFT;
20666 assert!(value & (Self::CCIDX_MASK as u8) == value);
20667 *self = Self::from_bits_retain(
20668 (self.bits() & !(Self::CCIDX_MASK << offset)) | ((value as u32) << offset),
20669 );
20670 }
20671
20672 pub const fn with_ccidx(mut self, value: u8) -> Self {
20674 self.set_ccidx(value);
20675 self
20676 }
20677
20678 pub const fn evt(self) -> u8 {
20680 ((self.bits() >> Self::EVT_SHIFT) & 0b1111) as u8
20681 }
20682
20683 pub const fn set_evt(&mut self, value: u8) {
20685 let offset = Self::EVT_SHIFT;
20686 assert!(value & (Self::EVT_MASK as u8) == value);
20687 *self = Self::from_bits_retain(
20688 (self.bits() & !(Self::EVT_MASK << offset)) | ((value as u32) << offset),
20689 );
20690 }
20691
20692 pub const fn with_evt(mut self, value: u8) -> Self {
20694 self.set_evt(value);
20695 self
20696 }
20697}
20698
20699bitflags! {
20700 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20702 #[repr(transparent)]
20703 pub struct IdMmfr5: u32 {
20704 }
20705}
20706
20707impl IdMmfr5 {
20708 pub const ETS_SHIFT: u32 = 0;
20710 pub const ETS_MASK: u32 = 0b1111;
20712 pub const NTLBPA_SHIFT: u32 = 4;
20714 pub const NTLBPA_MASK: u32 = 0b1111;
20716
20717 pub const fn ets(self) -> u8 {
20719 ((self.bits() >> Self::ETS_SHIFT) & 0b1111) as u8
20720 }
20721
20722 pub const fn set_ets(&mut self, value: u8) {
20724 let offset = Self::ETS_SHIFT;
20725 assert!(value & (Self::ETS_MASK as u8) == value);
20726 *self = Self::from_bits_retain(
20727 (self.bits() & !(Self::ETS_MASK << offset)) | ((value as u32) << offset),
20728 );
20729 }
20730
20731 pub const fn with_ets(mut self, value: u8) -> Self {
20733 self.set_ets(value);
20734 self
20735 }
20736
20737 pub const fn ntlbpa(self) -> u8 {
20739 ((self.bits() >> Self::NTLBPA_SHIFT) & 0b1111) as u8
20740 }
20741
20742 pub const fn set_ntlbpa(&mut self, value: u8) {
20744 let offset = Self::NTLBPA_SHIFT;
20745 assert!(value & (Self::NTLBPA_MASK as u8) == value);
20746 *self = Self::from_bits_retain(
20747 (self.bits() & !(Self::NTLBPA_MASK << offset)) | ((value as u32) << offset),
20748 );
20749 }
20750
20751 pub const fn with_ntlbpa(mut self, value: u8) -> Self {
20753 self.set_ntlbpa(value);
20754 self
20755 }
20756}
20757
20758bitflags! {
20759 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20761 #[repr(transparent)]
20762 pub struct IdPfr0: u32 {
20763 }
20764}
20765
20766impl IdPfr0 {
20767 pub const STATE0_SHIFT: u32 = 0;
20769 pub const STATE0_MASK: u32 = 0b1111;
20771 pub const STATE1_SHIFT: u32 = 4;
20773 pub const STATE1_MASK: u32 = 0b1111;
20775 pub const STATE2_SHIFT: u32 = 8;
20777 pub const STATE2_MASK: u32 = 0b1111;
20779 pub const STATE3_SHIFT: u32 = 12;
20781 pub const STATE3_MASK: u32 = 0b1111;
20783 pub const CSV2_SHIFT: u32 = 16;
20785 pub const CSV2_MASK: u32 = 0b1111;
20787 pub const AMU_SHIFT: u32 = 20;
20789 pub const AMU_MASK: u32 = 0b1111;
20791 pub const DIT_SHIFT: u32 = 24;
20793 pub const DIT_MASK: u32 = 0b1111;
20795 pub const RAS_SHIFT: u32 = 28;
20797 pub const RAS_MASK: u32 = 0b1111;
20799
20800 pub const fn state0(self) -> u8 {
20802 ((self.bits() >> Self::STATE0_SHIFT) & 0b1111) as u8
20803 }
20804
20805 pub const fn set_state0(&mut self, value: u8) {
20807 let offset = Self::STATE0_SHIFT;
20808 assert!(value & (Self::STATE0_MASK as u8) == value);
20809 *self = Self::from_bits_retain(
20810 (self.bits() & !(Self::STATE0_MASK << offset)) | ((value as u32) << offset),
20811 );
20812 }
20813
20814 pub const fn with_state0(mut self, value: u8) -> Self {
20816 self.set_state0(value);
20817 self
20818 }
20819
20820 pub const fn state1(self) -> u8 {
20822 ((self.bits() >> Self::STATE1_SHIFT) & 0b1111) as u8
20823 }
20824
20825 pub const fn set_state1(&mut self, value: u8) {
20827 let offset = Self::STATE1_SHIFT;
20828 assert!(value & (Self::STATE1_MASK as u8) == value);
20829 *self = Self::from_bits_retain(
20830 (self.bits() & !(Self::STATE1_MASK << offset)) | ((value as u32) << offset),
20831 );
20832 }
20833
20834 pub const fn with_state1(mut self, value: u8) -> Self {
20836 self.set_state1(value);
20837 self
20838 }
20839
20840 pub const fn state2(self) -> u8 {
20842 ((self.bits() >> Self::STATE2_SHIFT) & 0b1111) as u8
20843 }
20844
20845 pub const fn set_state2(&mut self, value: u8) {
20847 let offset = Self::STATE2_SHIFT;
20848 assert!(value & (Self::STATE2_MASK as u8) == value);
20849 *self = Self::from_bits_retain(
20850 (self.bits() & !(Self::STATE2_MASK << offset)) | ((value as u32) << offset),
20851 );
20852 }
20853
20854 pub const fn with_state2(mut self, value: u8) -> Self {
20856 self.set_state2(value);
20857 self
20858 }
20859
20860 pub const fn state3(self) -> u8 {
20862 ((self.bits() >> Self::STATE3_SHIFT) & 0b1111) as u8
20863 }
20864
20865 pub const fn set_state3(&mut self, value: u8) {
20867 let offset = Self::STATE3_SHIFT;
20868 assert!(value & (Self::STATE3_MASK as u8) == value);
20869 *self = Self::from_bits_retain(
20870 (self.bits() & !(Self::STATE3_MASK << offset)) | ((value as u32) << offset),
20871 );
20872 }
20873
20874 pub const fn with_state3(mut self, value: u8) -> Self {
20876 self.set_state3(value);
20877 self
20878 }
20879
20880 pub const fn csv2(self) -> u8 {
20882 ((self.bits() >> Self::CSV2_SHIFT) & 0b1111) as u8
20883 }
20884
20885 pub const fn set_csv2(&mut self, value: u8) {
20887 let offset = Self::CSV2_SHIFT;
20888 assert!(value & (Self::CSV2_MASK as u8) == value);
20889 *self = Self::from_bits_retain(
20890 (self.bits() & !(Self::CSV2_MASK << offset)) | ((value as u32) << offset),
20891 );
20892 }
20893
20894 pub const fn with_csv2(mut self, value: u8) -> Self {
20896 self.set_csv2(value);
20897 self
20898 }
20899
20900 pub const fn amu(self) -> u8 {
20902 ((self.bits() >> Self::AMU_SHIFT) & 0b1111) as u8
20903 }
20904
20905 pub const fn set_amu(&mut self, value: u8) {
20907 let offset = Self::AMU_SHIFT;
20908 assert!(value & (Self::AMU_MASK as u8) == value);
20909 *self = Self::from_bits_retain(
20910 (self.bits() & !(Self::AMU_MASK << offset)) | ((value as u32) << offset),
20911 );
20912 }
20913
20914 pub const fn with_amu(mut self, value: u8) -> Self {
20916 self.set_amu(value);
20917 self
20918 }
20919
20920 pub const fn dit(self) -> u8 {
20922 ((self.bits() >> Self::DIT_SHIFT) & 0b1111) as u8
20923 }
20924
20925 pub const fn set_dit(&mut self, value: u8) {
20927 let offset = Self::DIT_SHIFT;
20928 assert!(value & (Self::DIT_MASK as u8) == value);
20929 *self = Self::from_bits_retain(
20930 (self.bits() & !(Self::DIT_MASK << offset)) | ((value as u32) << offset),
20931 );
20932 }
20933
20934 pub const fn with_dit(mut self, value: u8) -> Self {
20936 self.set_dit(value);
20937 self
20938 }
20939
20940 pub const fn ras(self) -> u8 {
20942 ((self.bits() >> Self::RAS_SHIFT) & 0b1111) as u8
20943 }
20944
20945 pub const fn set_ras(&mut self, value: u8) {
20947 let offset = Self::RAS_SHIFT;
20948 assert!(value & (Self::RAS_MASK as u8) == value);
20949 *self = Self::from_bits_retain(
20950 (self.bits() & !(Self::RAS_MASK << offset)) | ((value as u32) << offset),
20951 );
20952 }
20953
20954 pub const fn with_ras(mut self, value: u8) -> Self {
20956 self.set_ras(value);
20957 self
20958 }
20959}
20960
20961bitflags! {
20962 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
20964 #[repr(transparent)]
20965 pub struct IdPfr1: u32 {
20966 }
20967}
20968
20969impl IdPfr1 {
20970 pub const PROGMOD_SHIFT: u32 = 0;
20972 pub const PROGMOD_MASK: u32 = 0b1111;
20974 pub const SECURITY_SHIFT: u32 = 4;
20976 pub const SECURITY_MASK: u32 = 0b1111;
20978 pub const MPROGMOD_SHIFT: u32 = 8;
20980 pub const MPROGMOD_MASK: u32 = 0b1111;
20982 pub const VIRTUALIZATION_SHIFT: u32 = 12;
20984 pub const VIRTUALIZATION_MASK: u32 = 0b1111;
20986 pub const GENTIMER_SHIFT: u32 = 16;
20988 pub const GENTIMER_MASK: u32 = 0b1111;
20990 pub const SEC_FRAC_SHIFT: u32 = 20;
20992 pub const SEC_FRAC_MASK: u32 = 0b1111;
20994 pub const VIRT_FRAC_SHIFT: u32 = 24;
20996 pub const VIRT_FRAC_MASK: u32 = 0b1111;
20998 pub const GIC_SHIFT: u32 = 28;
21000 pub const GIC_MASK: u32 = 0b1111;
21002
21003 pub const fn progmod(self) -> u8 {
21005 ((self.bits() >> Self::PROGMOD_SHIFT) & 0b1111) as u8
21006 }
21007
21008 pub const fn set_progmod(&mut self, value: u8) {
21010 let offset = Self::PROGMOD_SHIFT;
21011 assert!(value & (Self::PROGMOD_MASK as u8) == value);
21012 *self = Self::from_bits_retain(
21013 (self.bits() & !(Self::PROGMOD_MASK << offset)) | ((value as u32) << offset),
21014 );
21015 }
21016
21017 pub const fn with_progmod(mut self, value: u8) -> Self {
21019 self.set_progmod(value);
21020 self
21021 }
21022
21023 pub const fn security(self) -> u8 {
21025 ((self.bits() >> Self::SECURITY_SHIFT) & 0b1111) as u8
21026 }
21027
21028 pub const fn set_security(&mut self, value: u8) {
21030 let offset = Self::SECURITY_SHIFT;
21031 assert!(value & (Self::SECURITY_MASK as u8) == value);
21032 *self = Self::from_bits_retain(
21033 (self.bits() & !(Self::SECURITY_MASK << offset)) | ((value as u32) << offset),
21034 );
21035 }
21036
21037 pub const fn with_security(mut self, value: u8) -> Self {
21039 self.set_security(value);
21040 self
21041 }
21042
21043 pub const fn mprogmod(self) -> u8 {
21045 ((self.bits() >> Self::MPROGMOD_SHIFT) & 0b1111) as u8
21046 }
21047
21048 pub const fn set_mprogmod(&mut self, value: u8) {
21050 let offset = Self::MPROGMOD_SHIFT;
21051 assert!(value & (Self::MPROGMOD_MASK as u8) == value);
21052 *self = Self::from_bits_retain(
21053 (self.bits() & !(Self::MPROGMOD_MASK << offset)) | ((value as u32) << offset),
21054 );
21055 }
21056
21057 pub const fn with_mprogmod(mut self, value: u8) -> Self {
21059 self.set_mprogmod(value);
21060 self
21061 }
21062
21063 pub const fn virtualization(self) -> u8 {
21065 ((self.bits() >> Self::VIRTUALIZATION_SHIFT) & 0b1111) as u8
21066 }
21067
21068 pub const fn set_virtualization(&mut self, value: u8) {
21070 let offset = Self::VIRTUALIZATION_SHIFT;
21071 assert!(value & (Self::VIRTUALIZATION_MASK as u8) == value);
21072 *self = Self::from_bits_retain(
21073 (self.bits() & !(Self::VIRTUALIZATION_MASK << offset)) | ((value as u32) << offset),
21074 );
21075 }
21076
21077 pub const fn with_virtualization(mut self, value: u8) -> Self {
21079 self.set_virtualization(value);
21080 self
21081 }
21082
21083 pub const fn gentimer(self) -> u8 {
21085 ((self.bits() >> Self::GENTIMER_SHIFT) & 0b1111) as u8
21086 }
21087
21088 pub const fn set_gentimer(&mut self, value: u8) {
21090 let offset = Self::GENTIMER_SHIFT;
21091 assert!(value & (Self::GENTIMER_MASK as u8) == value);
21092 *self = Self::from_bits_retain(
21093 (self.bits() & !(Self::GENTIMER_MASK << offset)) | ((value as u32) << offset),
21094 );
21095 }
21096
21097 pub const fn with_gentimer(mut self, value: u8) -> Self {
21099 self.set_gentimer(value);
21100 self
21101 }
21102
21103 pub const fn sec_frac(self) -> u8 {
21105 ((self.bits() >> Self::SEC_FRAC_SHIFT) & 0b1111) as u8
21106 }
21107
21108 pub const fn set_sec_frac(&mut self, value: u8) {
21110 let offset = Self::SEC_FRAC_SHIFT;
21111 assert!(value & (Self::SEC_FRAC_MASK as u8) == value);
21112 *self = Self::from_bits_retain(
21113 (self.bits() & !(Self::SEC_FRAC_MASK << offset)) | ((value as u32) << offset),
21114 );
21115 }
21116
21117 pub const fn with_sec_frac(mut self, value: u8) -> Self {
21119 self.set_sec_frac(value);
21120 self
21121 }
21122
21123 pub const fn virt_frac(self) -> u8 {
21125 ((self.bits() >> Self::VIRT_FRAC_SHIFT) & 0b1111) as u8
21126 }
21127
21128 pub const fn set_virt_frac(&mut self, value: u8) {
21130 let offset = Self::VIRT_FRAC_SHIFT;
21131 assert!(value & (Self::VIRT_FRAC_MASK as u8) == value);
21132 *self = Self::from_bits_retain(
21133 (self.bits() & !(Self::VIRT_FRAC_MASK << offset)) | ((value as u32) << offset),
21134 );
21135 }
21136
21137 pub const fn with_virt_frac(mut self, value: u8) -> Self {
21139 self.set_virt_frac(value);
21140 self
21141 }
21142
21143 pub const fn gic(self) -> u8 {
21145 ((self.bits() >> Self::GIC_SHIFT) & 0b1111) as u8
21146 }
21147
21148 pub const fn set_gic(&mut self, value: u8) {
21150 let offset = Self::GIC_SHIFT;
21151 assert!(value & (Self::GIC_MASK as u8) == value);
21152 *self = Self::from_bits_retain(
21153 (self.bits() & !(Self::GIC_MASK << offset)) | ((value as u32) << offset),
21154 );
21155 }
21156
21157 pub const fn with_gic(mut self, value: u8) -> Self {
21159 self.set_gic(value);
21160 self
21161 }
21162}
21163
21164bitflags! {
21165 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21167 #[repr(transparent)]
21168 pub struct IdPfr2: u32 {
21169 }
21170}
21171
21172impl IdPfr2 {
21173 pub const CSV3_SHIFT: u32 = 0;
21175 pub const CSV3_MASK: u32 = 0b1111;
21177 pub const SSBS_SHIFT: u32 = 4;
21179 pub const SSBS_MASK: u32 = 0b1111;
21181 pub const RAS_FRAC_SHIFT: u32 = 8;
21183 pub const RAS_FRAC_MASK: u32 = 0b1111;
21185
21186 pub const fn csv3(self) -> u8 {
21188 ((self.bits() >> Self::CSV3_SHIFT) & 0b1111) as u8
21189 }
21190
21191 pub const fn set_csv3(&mut self, value: u8) {
21193 let offset = Self::CSV3_SHIFT;
21194 assert!(value & (Self::CSV3_MASK as u8) == value);
21195 *self = Self::from_bits_retain(
21196 (self.bits() & !(Self::CSV3_MASK << offset)) | ((value as u32) << offset),
21197 );
21198 }
21199
21200 pub const fn with_csv3(mut self, value: u8) -> Self {
21202 self.set_csv3(value);
21203 self
21204 }
21205
21206 pub const fn ssbs(self) -> u8 {
21208 ((self.bits() >> Self::SSBS_SHIFT) & 0b1111) as u8
21209 }
21210
21211 pub const fn set_ssbs(&mut self, value: u8) {
21213 let offset = Self::SSBS_SHIFT;
21214 assert!(value & (Self::SSBS_MASK as u8) == value);
21215 *self = Self::from_bits_retain(
21216 (self.bits() & !(Self::SSBS_MASK << offset)) | ((value as u32) << offset),
21217 );
21218 }
21219
21220 pub const fn with_ssbs(mut self, value: u8) -> Self {
21222 self.set_ssbs(value);
21223 self
21224 }
21225
21226 pub const fn ras_frac(self) -> u8 {
21228 ((self.bits() >> Self::RAS_FRAC_SHIFT) & 0b1111) as u8
21229 }
21230
21231 pub const fn set_ras_frac(&mut self, value: u8) {
21233 let offset = Self::RAS_FRAC_SHIFT;
21234 assert!(value & (Self::RAS_FRAC_MASK as u8) == value);
21235 *self = Self::from_bits_retain(
21236 (self.bits() & !(Self::RAS_FRAC_MASK << offset)) | ((value as u32) << offset),
21237 );
21238 }
21239
21240 pub const fn with_ras_frac(mut self, value: u8) -> Self {
21242 self.set_ras_frac(value);
21243 self
21244 }
21245}
21246
21247bitflags! {
21248 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21250 #[repr(transparent)]
21251 pub struct Ifar: u32 {
21252 }
21253}
21254
21255impl Ifar {
21256 pub const VA_SHIFT: u32 = 0;
21258 pub const VA_MASK: u32 = 0b11111111111111111111111111111111;
21260
21261 pub const fn va(self) -> u32 {
21263 ((self.bits() >> Self::VA_SHIFT) & 0b11111111111111111111111111111111) as u32
21264 }
21265
21266 pub const fn set_va(&mut self, value: u32) {
21268 let offset = Self::VA_SHIFT;
21269 assert!(value & (Self::VA_MASK as u32) == value);
21270 *self = Self::from_bits_retain(
21271 (self.bits() & !(Self::VA_MASK << offset)) | ((value as u32) << offset),
21272 );
21273 }
21274
21275 pub const fn with_va(mut self, value: u32) -> Self {
21277 self.set_va(value);
21278 self
21279 }
21280}
21281
21282bitflags! {
21283 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21285 #[repr(transparent)]
21286 pub struct Ifsr: u32 {
21287 const LPAE = 1 << 9;
21289 const EXT = 1 << 12;
21291 const FNV = 1 << 16;
21293 }
21294}
21295
21296impl Ifsr {
21297 pub const STATUS_SHIFT: u32 = 0;
21299 pub const STATUS_MASK: u32 = 0b111111;
21301 pub const LPAE_SHIFT: u32 = 9;
21303 pub const EXT_SHIFT: u32 = 12;
21305 pub const FNV_SHIFT: u32 = 16;
21307
21308 pub const fn status(self) -> u8 {
21310 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
21311 }
21312
21313 pub const fn set_status(&mut self, value: u8) {
21315 let offset = Self::STATUS_SHIFT;
21316 assert!(value & (Self::STATUS_MASK as u8) == value);
21317 *self = Self::from_bits_retain(
21318 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
21319 );
21320 }
21321
21322 pub const fn with_status(mut self, value: u8) -> Self {
21324 self.set_status(value);
21325 self
21326 }
21327}
21328
21329bitflags! {
21330 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21332 #[repr(transparent)]
21333 pub struct Isr: u32 {
21334 const F = 1 << 6;
21336 const I = 1 << 7;
21338 const A = 1 << 8;
21340 }
21341}
21342
21343impl Isr {
21344 pub const F_SHIFT: u32 = 6;
21346 pub const I_SHIFT: u32 = 7;
21348 pub const A_SHIFT: u32 = 8;
21350}
21351
21352#[cfg(feature = "el1")]
21353bitflags! {
21354 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21356 #[repr(transparent)]
21357 pub struct IsrEl1: u64 {
21358 const F = 1 << 6;
21360 const I = 1 << 7;
21362 const A = 1 << 8;
21364 const FS = 1 << 9;
21366 const IS = 1 << 10;
21368 }
21369}
21370
21371#[cfg(feature = "el1")]
21372impl IsrEl1 {
21373 pub const F_SHIFT: u32 = 6;
21375 pub const I_SHIFT: u32 = 7;
21377 pub const A_SHIFT: u32 = 8;
21379 pub const FS_SHIFT: u32 = 9;
21381 pub const IS_SHIFT: u32 = 10;
21383}
21384
21385bitflags! {
21386 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21388 #[repr(transparent)]
21389 pub struct Mair0: u32 {
21390 }
21391}
21392
21393impl Mair0 {
21394 pub const ATTR_SHIFT: u32 = 0;
21396 pub const ATTR_MASK: u32 = 0b11111111;
21398
21399 pub const fn attr(self, n: u32) -> u8 {
21401 assert!(n < 4);
21402 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
21403 }
21404
21405 pub const fn set_attr(&mut self, n: u32, value: u8) {
21407 assert!(n < 4);
21408 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
21409 assert!(value & (Self::ATTR_MASK as u8) == value);
21410 *self = Self::from_bits_retain(
21411 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
21412 );
21413 }
21414
21415 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
21417 self.set_attr(n, value);
21418 self
21419 }
21420}
21421
21422bitflags! {
21423 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21425 #[repr(transparent)]
21426 pub struct Mair1: u32 {
21427 }
21428}
21429
21430impl Mair1 {
21431 pub const ATTR_SHIFT: u32 = 0;
21433 pub const ATTR_MASK: u32 = 0b11111111;
21435
21436 pub const fn attr(self, n: u32) -> u8 {
21438 assert!(n >= 4 && n < 8);
21439 ((self.bits() >> (Self::ATTR_SHIFT + (n - 4) * 8)) & 0b11111111) as u8
21440 }
21441
21442 pub const fn set_attr(&mut self, n: u32, value: u8) {
21444 assert!(n >= 4 && n < 8);
21445 let offset = Self::ATTR_SHIFT + (n - 4) * 8;
21446 assert!(value & (Self::ATTR_MASK as u8) == value);
21447 *self = Self::from_bits_retain(
21448 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u32) << offset),
21449 );
21450 }
21451
21452 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
21454 self.set_attr(n, value);
21455 self
21456 }
21457}
21458
21459#[cfg(feature = "el1")]
21460bitflags! {
21461 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21463 #[repr(transparent)]
21464 pub struct MairEl1: u64 {
21465 }
21466}
21467
21468#[cfg(feature = "el1")]
21469impl MairEl1 {
21470 pub const ATTR_SHIFT: u32 = 0;
21472 pub const ATTR_MASK: u64 = 0b11111111;
21474
21475 pub const fn attr(self, n: u32) -> u8 {
21477 assert!(n < 8);
21478 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
21479 }
21480
21481 pub const fn set_attr(&mut self, n: u32, value: u8) {
21483 assert!(n < 8);
21484 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
21485 assert!(value & (Self::ATTR_MASK as u8) == value);
21486 *self = Self::from_bits_retain(
21487 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
21488 );
21489 }
21490
21491 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
21493 self.set_attr(n, value);
21494 self
21495 }
21496}
21497
21498#[cfg(feature = "el2")]
21499bitflags! {
21500 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21502 #[repr(transparent)]
21503 pub struct MairEl2: u64 {
21504 }
21505}
21506
21507#[cfg(feature = "el2")]
21508impl MairEl2 {
21509 pub const ATTR_SHIFT: u32 = 0;
21511 pub const ATTR_MASK: u64 = 0b11111111;
21513
21514 pub const fn attr(self, n: u32) -> u8 {
21516 assert!(n < 8);
21517 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
21518 }
21519
21520 pub const fn set_attr(&mut self, n: u32, value: u8) {
21522 assert!(n < 8);
21523 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
21524 assert!(value & (Self::ATTR_MASK as u8) == value);
21525 *self = Self::from_bits_retain(
21526 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
21527 );
21528 }
21529
21530 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
21532 self.set_attr(n, value);
21533 self
21534 }
21535}
21536
21537#[cfg(feature = "el3")]
21538bitflags! {
21539 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21541 #[repr(transparent)]
21542 pub struct MairEl3: u64 {
21543 }
21544}
21545
21546#[cfg(feature = "el3")]
21547impl MairEl3 {
21548 pub const ATTR_SHIFT: u32 = 0;
21550 pub const ATTR_MASK: u64 = 0b11111111;
21552
21553 pub const fn attr(self, n: u32) -> u8 {
21555 assert!(n < 8);
21556 ((self.bits() >> (Self::ATTR_SHIFT + (n - 0) * 8)) & 0b11111111) as u8
21557 }
21558
21559 pub const fn set_attr(&mut self, n: u32, value: u8) {
21561 assert!(n < 8);
21562 let offset = Self::ATTR_SHIFT + (n - 0) * 8;
21563 assert!(value & (Self::ATTR_MASK as u8) == value);
21564 *self = Self::from_bits_retain(
21565 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
21566 );
21567 }
21568
21569 pub const fn with_attr(mut self, n: u32, value: u8) -> Self {
21571 self.set_attr(n, value);
21572 self
21573 }
21574}
21575
21576#[cfg(feature = "el1")]
21577bitflags! {
21578 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21580 #[repr(transparent)]
21581 pub struct MdccintEl1: u64 {
21582 const TX = 1 << 29;
21584 const RX = 1 << 30;
21586 }
21587}
21588
21589#[cfg(feature = "el1")]
21590impl MdccintEl1 {
21591 pub const TX_SHIFT: u32 = 29;
21593 pub const RX_SHIFT: u32 = 30;
21595}
21596
21597#[cfg(feature = "el2")]
21598bitflags! {
21599 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21601 #[repr(transparent)]
21602 pub struct MdcrEl2: u64 {
21603 const TPMCR = 1 << 5;
21605 const TPM = 1 << 6;
21607 const HPME = 1 << 7;
21609 const TDE = 1 << 8;
21611 const TDA = 1 << 9;
21613 const TDOSA = 1 << 10;
21615 const TDRA = 1 << 11;
21617 const TPMS = 1 << 14;
21619 const ENSPM = 1 << 15;
21621 const HPMD = 1 << 17;
21623 const TTRF = 1 << 19;
21625 const HCCD = 1 << 23;
21627 const HLP = 1 << 26;
21629 const TDCC = 1 << 27;
21631 const MTPME = 1 << 28;
21633 const HPMFZO = 1 << 29;
21635 const HPMFZS = 1 << 36;
21637 const EBWE = 1 << 43;
21639 const ENSTEPOP = 1 << 50;
21641 }
21642}
21643
21644#[cfg(feature = "el2")]
21645impl MdcrEl2 {
21646 pub const HPMN_SHIFT: u32 = 0;
21648 pub const HPMN_MASK: u64 = 0b11111;
21650 pub const TPMCR_SHIFT: u32 = 5;
21652 pub const TPM_SHIFT: u32 = 6;
21654 pub const HPME_SHIFT: u32 = 7;
21656 pub const TDE_SHIFT: u32 = 8;
21658 pub const TDA_SHIFT: u32 = 9;
21660 pub const TDOSA_SHIFT: u32 = 10;
21662 pub const TDRA_SHIFT: u32 = 11;
21664 pub const E2PB_SHIFT: u32 = 12;
21666 pub const E2PB_MASK: u64 = 0b11;
21668 pub const TPMS_SHIFT: u32 = 14;
21670 pub const ENSPM_SHIFT: u32 = 15;
21672 pub const HPMD_SHIFT: u32 = 17;
21674 pub const TTRF_SHIFT: u32 = 19;
21676 pub const HCCD_SHIFT: u32 = 23;
21678 pub const E2TB_SHIFT: u32 = 24;
21680 pub const E2TB_MASK: u64 = 0b11;
21682 pub const HLP_SHIFT: u32 = 26;
21684 pub const TDCC_SHIFT: u32 = 27;
21686 pub const MTPME_SHIFT: u32 = 28;
21688 pub const HPMFZO_SHIFT: u32 = 29;
21690 pub const PMSSE_SHIFT: u32 = 30;
21692 pub const PMSSE_MASK: u64 = 0b11;
21694 pub const HPMFZS_SHIFT: u32 = 36;
21696 pub const PMEE_SHIFT: u32 = 40;
21698 pub const PMEE_MASK: u64 = 0b11;
21700 pub const EBWE_SHIFT: u32 = 43;
21702 pub const ENSTEPOP_SHIFT: u32 = 50;
21704
21705 pub const fn hpmn(self) -> u8 {
21707 ((self.bits() >> Self::HPMN_SHIFT) & 0b11111) as u8
21708 }
21709
21710 pub const fn set_hpmn(&mut self, value: u8) {
21712 let offset = Self::HPMN_SHIFT;
21713 assert!(value & (Self::HPMN_MASK as u8) == value);
21714 *self = Self::from_bits_retain(
21715 (self.bits() & !(Self::HPMN_MASK << offset)) | ((value as u64) << offset),
21716 );
21717 }
21718
21719 pub const fn with_hpmn(mut self, value: u8) -> Self {
21721 self.set_hpmn(value);
21722 self
21723 }
21724
21725 pub const fn e2pb(self) -> u8 {
21727 ((self.bits() >> Self::E2PB_SHIFT) & 0b11) as u8
21728 }
21729
21730 pub const fn set_e2pb(&mut self, value: u8) {
21732 let offset = Self::E2PB_SHIFT;
21733 assert!(value & (Self::E2PB_MASK as u8) == value);
21734 *self = Self::from_bits_retain(
21735 (self.bits() & !(Self::E2PB_MASK << offset)) | ((value as u64) << offset),
21736 );
21737 }
21738
21739 pub const fn with_e2pb(mut self, value: u8) -> Self {
21741 self.set_e2pb(value);
21742 self
21743 }
21744
21745 pub const fn e2tb(self) -> u8 {
21747 ((self.bits() >> Self::E2TB_SHIFT) & 0b11) as u8
21748 }
21749
21750 pub const fn set_e2tb(&mut self, value: u8) {
21752 let offset = Self::E2TB_SHIFT;
21753 assert!(value & (Self::E2TB_MASK as u8) == value);
21754 *self = Self::from_bits_retain(
21755 (self.bits() & !(Self::E2TB_MASK << offset)) | ((value as u64) << offset),
21756 );
21757 }
21758
21759 pub const fn with_e2tb(mut self, value: u8) -> Self {
21761 self.set_e2tb(value);
21762 self
21763 }
21764
21765 pub const fn pmsse(self) -> u8 {
21767 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
21768 }
21769
21770 pub const fn set_pmsse(&mut self, value: u8) {
21772 let offset = Self::PMSSE_SHIFT;
21773 assert!(value & (Self::PMSSE_MASK as u8) == value);
21774 *self = Self::from_bits_retain(
21775 (self.bits() & !(Self::PMSSE_MASK << offset)) | ((value as u64) << offset),
21776 );
21777 }
21778
21779 pub const fn with_pmsse(mut self, value: u8) -> Self {
21781 self.set_pmsse(value);
21782 self
21783 }
21784
21785 pub const fn pmee(self) -> u8 {
21787 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
21788 }
21789
21790 pub const fn set_pmee(&mut self, value: u8) {
21792 let offset = Self::PMEE_SHIFT;
21793 assert!(value & (Self::PMEE_MASK as u8) == value);
21794 *self = Self::from_bits_retain(
21795 (self.bits() & !(Self::PMEE_MASK << offset)) | ((value as u64) << offset),
21796 );
21797 }
21798
21799 pub const fn with_pmee(mut self, value: u8) -> Self {
21801 self.set_pmee(value);
21802 self
21803 }
21804}
21805
21806#[cfg(feature = "el3")]
21807bitflags! {
21808 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
21810 #[repr(transparent)]
21811 pub struct MdcrEl3: u64 {
21812 const RLTE = 1 << 0;
21814 const EPMADE = 1 << 2;
21816 const ETADE = 1 << 3;
21818 const EDADE = 1 << 4;
21820 const TPM = 1 << 6;
21822 const ENPM2 = 1 << 7;
21824 const TDA = 1 << 9;
21826 const TDOSA = 1 << 10;
21828 const NSPBE = 1 << 11;
21830 const SDD = 1 << 16;
21832 const SPME = 1 << 17;
21834 const STE = 1 << 18;
21836 const TTRF = 1 << 19;
21838 const EDAD = 1 << 20;
21840 const EPMAD = 1 << 21;
21842 const ETAD = 1 << 22;
21844 const SCCD = 1 << 23;
21846 const NSTBE = 1 << 26;
21848 const TDCC = 1 << 27;
21850 const MTPME = 1 << 28;
21852 const MCCD = 1 << 34;
21854 const MPMX = 1 << 35;
21856 const ENPMSN = 1 << 36;
21858 const E3BREW = 1 << 37;
21860 const E3BREC = 1 << 38;
21862 const ENTB2 = 1 << 39;
21864 const ENPMS3 = 1 << 42;
21866 const EBWE = 1 << 43;
21868 const ENPMSS = 1 << 44;
21870 const ENITE = 1 << 47;
21872 const ENSTEPOP = 1 << 50;
21874 const ENPMS4 = 1 << 55;
21876 }
21877}
21878
21879#[cfg(feature = "el3")]
21880impl MdcrEl3 {
21881 pub const RLTE_SHIFT: u32 = 0;
21883 pub const EPMADE_SHIFT: u32 = 2;
21885 pub const ETADE_SHIFT: u32 = 3;
21887 pub const EDADE_SHIFT: u32 = 4;
21889 pub const TPM_SHIFT: u32 = 6;
21891 pub const ENPM2_SHIFT: u32 = 7;
21893 pub const TDA_SHIFT: u32 = 9;
21895 pub const TDOSA_SHIFT: u32 = 10;
21897 pub const NSPBE_SHIFT: u32 = 11;
21899 pub const NSPB_SHIFT: u32 = 12;
21901 pub const NSPB_MASK: u64 = 0b11;
21903 pub const SPD32_SHIFT: u32 = 14;
21905 pub const SPD32_MASK: u64 = 0b11;
21907 pub const SDD_SHIFT: u32 = 16;
21909 pub const SPME_SHIFT: u32 = 17;
21911 pub const STE_SHIFT: u32 = 18;
21913 pub const TTRF_SHIFT: u32 = 19;
21915 pub const EDAD_SHIFT: u32 = 20;
21917 pub const EPMAD_SHIFT: u32 = 21;
21919 pub const ETAD_SHIFT: u32 = 22;
21921 pub const SCCD_SHIFT: u32 = 23;
21923 pub const NSTB_SHIFT: u32 = 24;
21925 pub const NSTB_MASK: u64 = 0b11;
21927 pub const NSTBE_SHIFT: u32 = 26;
21929 pub const TDCC_SHIFT: u32 = 27;
21931 pub const MTPME_SHIFT: u32 = 28;
21933 pub const PMSSE_SHIFT: u32 = 30;
21935 pub const PMSSE_MASK: u64 = 0b11;
21937 pub const SBRBE_SHIFT: u32 = 32;
21939 pub const SBRBE_MASK: u64 = 0b11;
21941 pub const MCCD_SHIFT: u32 = 34;
21943 pub const MPMX_SHIFT: u32 = 35;
21945 pub const ENPMSN_SHIFT: u32 = 36;
21947 pub const E3BREW_SHIFT: u32 = 37;
21949 pub const E3BREC_SHIFT: u32 = 38;
21951 pub const ENTB2_SHIFT: u32 = 39;
21953 pub const PMEE_SHIFT: u32 = 40;
21955 pub const PMEE_MASK: u64 = 0b11;
21957 pub const ENPMS3_SHIFT: u32 = 42;
21959 pub const EBWE_SHIFT: u32 = 43;
21961 pub const ENPMSS_SHIFT: u32 = 44;
21963 pub const EPMSSAD_SHIFT: u32 = 45;
21965 pub const EPMSSAD_MASK: u64 = 0b11;
21967 pub const ENITE_SHIFT: u32 = 47;
21969 pub const ETBAD_SHIFT: u32 = 48;
21971 pub const ETBAD_MASK: u64 = 0b11;
21973 pub const ENSTEPOP_SHIFT: u32 = 50;
21975 pub const PMSEE_SHIFT: u32 = 51;
21977 pub const PMSEE_MASK: u64 = 0b11;
21979 pub const TRBEE_SHIFT: u32 = 53;
21981 pub const TRBEE_MASK: u64 = 0b11;
21983 pub const ENPMS4_SHIFT: u32 = 55;
21985
21986 pub const fn nspb(self) -> u8 {
21988 ((self.bits() >> Self::NSPB_SHIFT) & 0b11) as u8
21989 }
21990
21991 pub const fn set_nspb(&mut self, value: u8) {
21993 let offset = Self::NSPB_SHIFT;
21994 assert!(value & (Self::NSPB_MASK as u8) == value);
21995 *self = Self::from_bits_retain(
21996 (self.bits() & !(Self::NSPB_MASK << offset)) | ((value as u64) << offset),
21997 );
21998 }
21999
22000 pub const fn with_nspb(mut self, value: u8) -> Self {
22002 self.set_nspb(value);
22003 self
22004 }
22005
22006 pub const fn spd32(self) -> u8 {
22008 ((self.bits() >> Self::SPD32_SHIFT) & 0b11) as u8
22009 }
22010
22011 pub const fn set_spd32(&mut self, value: u8) {
22013 let offset = Self::SPD32_SHIFT;
22014 assert!(value & (Self::SPD32_MASK as u8) == value);
22015 *self = Self::from_bits_retain(
22016 (self.bits() & !(Self::SPD32_MASK << offset)) | ((value as u64) << offset),
22017 );
22018 }
22019
22020 pub const fn with_spd32(mut self, value: u8) -> Self {
22022 self.set_spd32(value);
22023 self
22024 }
22025
22026 pub const fn nstb(self) -> u8 {
22028 ((self.bits() >> Self::NSTB_SHIFT) & 0b11) as u8
22029 }
22030
22031 pub const fn set_nstb(&mut self, value: u8) {
22033 let offset = Self::NSTB_SHIFT;
22034 assert!(value & (Self::NSTB_MASK as u8) == value);
22035 *self = Self::from_bits_retain(
22036 (self.bits() & !(Self::NSTB_MASK << offset)) | ((value as u64) << offset),
22037 );
22038 }
22039
22040 pub const fn with_nstb(mut self, value: u8) -> Self {
22042 self.set_nstb(value);
22043 self
22044 }
22045
22046 pub const fn pmsse(self) -> u8 {
22048 ((self.bits() >> Self::PMSSE_SHIFT) & 0b11) as u8
22049 }
22050
22051 pub const fn set_pmsse(&mut self, value: u8) {
22053 let offset = Self::PMSSE_SHIFT;
22054 assert!(value & (Self::PMSSE_MASK as u8) == value);
22055 *self = Self::from_bits_retain(
22056 (self.bits() & !(Self::PMSSE_MASK << offset)) | ((value as u64) << offset),
22057 );
22058 }
22059
22060 pub const fn with_pmsse(mut self, value: u8) -> Self {
22062 self.set_pmsse(value);
22063 self
22064 }
22065
22066 pub const fn sbrbe(self) -> u8 {
22068 ((self.bits() >> Self::SBRBE_SHIFT) & 0b11) as u8
22069 }
22070
22071 pub const fn set_sbrbe(&mut self, value: u8) {
22073 let offset = Self::SBRBE_SHIFT;
22074 assert!(value & (Self::SBRBE_MASK as u8) == value);
22075 *self = Self::from_bits_retain(
22076 (self.bits() & !(Self::SBRBE_MASK << offset)) | ((value as u64) << offset),
22077 );
22078 }
22079
22080 pub const fn with_sbrbe(mut self, value: u8) -> Self {
22082 self.set_sbrbe(value);
22083 self
22084 }
22085
22086 pub const fn pmee(self) -> u8 {
22088 ((self.bits() >> Self::PMEE_SHIFT) & 0b11) as u8
22089 }
22090
22091 pub const fn set_pmee(&mut self, value: u8) {
22093 let offset = Self::PMEE_SHIFT;
22094 assert!(value & (Self::PMEE_MASK as u8) == value);
22095 *self = Self::from_bits_retain(
22096 (self.bits() & !(Self::PMEE_MASK << offset)) | ((value as u64) << offset),
22097 );
22098 }
22099
22100 pub const fn with_pmee(mut self, value: u8) -> Self {
22102 self.set_pmee(value);
22103 self
22104 }
22105
22106 pub const fn epmssad(self) -> u8 {
22108 ((self.bits() >> Self::EPMSSAD_SHIFT) & 0b11) as u8
22109 }
22110
22111 pub const fn set_epmssad(&mut self, value: u8) {
22113 let offset = Self::EPMSSAD_SHIFT;
22114 assert!(value & (Self::EPMSSAD_MASK as u8) == value);
22115 *self = Self::from_bits_retain(
22116 (self.bits() & !(Self::EPMSSAD_MASK << offset)) | ((value as u64) << offset),
22117 );
22118 }
22119
22120 pub const fn with_epmssad(mut self, value: u8) -> Self {
22122 self.set_epmssad(value);
22123 self
22124 }
22125
22126 pub const fn etbad(self) -> u8 {
22128 ((self.bits() >> Self::ETBAD_SHIFT) & 0b11) as u8
22129 }
22130
22131 pub const fn set_etbad(&mut self, value: u8) {
22133 let offset = Self::ETBAD_SHIFT;
22134 assert!(value & (Self::ETBAD_MASK as u8) == value);
22135 *self = Self::from_bits_retain(
22136 (self.bits() & !(Self::ETBAD_MASK << offset)) | ((value as u64) << offset),
22137 );
22138 }
22139
22140 pub const fn with_etbad(mut self, value: u8) -> Self {
22142 self.set_etbad(value);
22143 self
22144 }
22145
22146 pub const fn pmsee(self) -> u8 {
22148 ((self.bits() >> Self::PMSEE_SHIFT) & 0b11) as u8
22149 }
22150
22151 pub const fn set_pmsee(&mut self, value: u8) {
22153 let offset = Self::PMSEE_SHIFT;
22154 assert!(value & (Self::PMSEE_MASK as u8) == value);
22155 *self = Self::from_bits_retain(
22156 (self.bits() & !(Self::PMSEE_MASK << offset)) | ((value as u64) << offset),
22157 );
22158 }
22159
22160 pub const fn with_pmsee(mut self, value: u8) -> Self {
22162 self.set_pmsee(value);
22163 self
22164 }
22165
22166 pub const fn trbee(self) -> u8 {
22168 ((self.bits() >> Self::TRBEE_SHIFT) & 0b11) as u8
22169 }
22170
22171 pub const fn set_trbee(&mut self, value: u8) {
22173 let offset = Self::TRBEE_SHIFT;
22174 assert!(value & (Self::TRBEE_MASK as u8) == value);
22175 *self = Self::from_bits_retain(
22176 (self.bits() & !(Self::TRBEE_MASK << offset)) | ((value as u64) << offset),
22177 );
22178 }
22179
22180 pub const fn with_trbee(mut self, value: u8) -> Self {
22182 self.set_trbee(value);
22183 self
22184 }
22185}
22186
22187#[cfg(feature = "el1")]
22188bitflags! {
22189 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22191 #[repr(transparent)]
22192 pub struct MdscrEl1: u64 {
22193 const SS = 1 << 0;
22195 const ERR = 1 << 6;
22197 const TDCC = 1 << 12;
22199 const KDE = 1 << 13;
22201 const HDE = 1 << 14;
22203 const MDE = 1 << 15;
22205 const SC2 = 1 << 19;
22207 const TDA = 1 << 21;
22209 const TXU = 1 << 26;
22211 const RXO = 1 << 27;
22213 const TXFULL = 1 << 29;
22215 const RXFULL = 1 << 30;
22217 const TFO = 1 << 31;
22219 const EMBWE = 1 << 32;
22221 const TTA = 1 << 33;
22223 const ENSPM = 1 << 34;
22225 const EHBWE = 1 << 35;
22227 const ENSTEPOP = 1 << 50;
22229 }
22230}
22231
22232#[cfg(feature = "el1")]
22233impl MdscrEl1 {
22234 pub const SS_SHIFT: u32 = 0;
22236 pub const ERR_SHIFT: u32 = 6;
22238 pub const TDCC_SHIFT: u32 = 12;
22240 pub const KDE_SHIFT: u32 = 13;
22242 pub const HDE_SHIFT: u32 = 14;
22244 pub const MDE_SHIFT: u32 = 15;
22246 pub const SC2_SHIFT: u32 = 19;
22248 pub const TDA_SHIFT: u32 = 21;
22250 pub const INTDIS_SHIFT: u32 = 22;
22252 pub const INTDIS_MASK: u64 = 0b11;
22254 pub const TXU_SHIFT: u32 = 26;
22256 pub const RXO_SHIFT: u32 = 27;
22258 pub const TXFULL_SHIFT: u32 = 29;
22260 pub const RXFULL_SHIFT: u32 = 30;
22262 pub const TFO_SHIFT: u32 = 31;
22264 pub const EMBWE_SHIFT: u32 = 32;
22266 pub const TTA_SHIFT: u32 = 33;
22268 pub const ENSPM_SHIFT: u32 = 34;
22270 pub const EHBWE_SHIFT: u32 = 35;
22272 pub const ENSTEPOP_SHIFT: u32 = 50;
22274
22275 pub const fn intdis(self) -> u8 {
22277 ((self.bits() >> Self::INTDIS_SHIFT) & 0b11) as u8
22278 }
22279
22280 pub const fn set_intdis(&mut self, value: u8) {
22282 let offset = Self::INTDIS_SHIFT;
22283 assert!(value & (Self::INTDIS_MASK as u8) == value);
22284 *self = Self::from_bits_retain(
22285 (self.bits() & !(Self::INTDIS_MASK << offset)) | ((value as u64) << offset),
22286 );
22287 }
22288
22289 pub const fn with_intdis(mut self, value: u8) -> Self {
22291 self.set_intdis(value);
22292 self
22293 }
22294}
22295
22296bitflags! {
22297 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22299 #[repr(transparent)]
22300 pub struct Midr: u32 {
22301 }
22302}
22303
22304impl Midr {
22305 pub const REVISION_SHIFT: u32 = 0;
22307 pub const REVISION_MASK: u32 = 0b1111;
22309 pub const PARTNUM_SHIFT: u32 = 4;
22311 pub const PARTNUM_MASK: u32 = 0b111111111111;
22313 pub const ARCHITECTURE_SHIFT: u32 = 16;
22315 pub const ARCHITECTURE_MASK: u32 = 0b1111;
22317 pub const VARIANT_SHIFT: u32 = 20;
22319 pub const VARIANT_MASK: u32 = 0b1111;
22321 pub const IMPLEMENTER_SHIFT: u32 = 24;
22323 pub const IMPLEMENTER_MASK: u32 = 0b11111111;
22325
22326 pub const fn revision(self) -> u8 {
22328 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
22329 }
22330
22331 pub const fn set_revision(&mut self, value: u8) {
22333 let offset = Self::REVISION_SHIFT;
22334 assert!(value & (Self::REVISION_MASK as u8) == value);
22335 *self = Self::from_bits_retain(
22336 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u32) << offset),
22337 );
22338 }
22339
22340 pub const fn with_revision(mut self, value: u8) -> Self {
22342 self.set_revision(value);
22343 self
22344 }
22345
22346 pub const fn partnum(self) -> u16 {
22348 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
22349 }
22350
22351 pub const fn set_partnum(&mut self, value: u16) {
22353 let offset = Self::PARTNUM_SHIFT;
22354 assert!(value & (Self::PARTNUM_MASK as u16) == value);
22355 *self = Self::from_bits_retain(
22356 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u32) << offset),
22357 );
22358 }
22359
22360 pub const fn with_partnum(mut self, value: u16) -> Self {
22362 self.set_partnum(value);
22363 self
22364 }
22365
22366 pub const fn architecture(self) -> u8 {
22368 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
22369 }
22370
22371 pub const fn set_architecture(&mut self, value: u8) {
22373 let offset = Self::ARCHITECTURE_SHIFT;
22374 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
22375 *self = Self::from_bits_retain(
22376 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u32) << offset),
22377 );
22378 }
22379
22380 pub const fn with_architecture(mut self, value: u8) -> Self {
22382 self.set_architecture(value);
22383 self
22384 }
22385
22386 pub const fn variant(self) -> u8 {
22388 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
22389 }
22390
22391 pub const fn set_variant(&mut self, value: u8) {
22393 let offset = Self::VARIANT_SHIFT;
22394 assert!(value & (Self::VARIANT_MASK as u8) == value);
22395 *self = Self::from_bits_retain(
22396 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u32) << offset),
22397 );
22398 }
22399
22400 pub const fn with_variant(mut self, value: u8) -> Self {
22402 self.set_variant(value);
22403 self
22404 }
22405
22406 pub const fn implementer(self) -> u8 {
22408 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
22409 }
22410
22411 pub const fn set_implementer(&mut self, value: u8) {
22413 let offset = Self::IMPLEMENTER_SHIFT;
22414 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
22415 *self = Self::from_bits_retain(
22416 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u32) << offset),
22417 );
22418 }
22419
22420 pub const fn with_implementer(mut self, value: u8) -> Self {
22422 self.set_implementer(value);
22423 self
22424 }
22425}
22426
22427#[cfg(feature = "el1")]
22428bitflags! {
22429 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22431 #[repr(transparent)]
22432 pub struct MidrEl1: u64 {
22433 }
22434}
22435
22436#[cfg(feature = "el1")]
22437impl MidrEl1 {
22438 pub const REVISION_SHIFT: u32 = 0;
22440 pub const REVISION_MASK: u64 = 0b1111;
22442 pub const PARTNUM_SHIFT: u32 = 4;
22444 pub const PARTNUM_MASK: u64 = 0b111111111111;
22446 pub const ARCHITECTURE_SHIFT: u32 = 16;
22448 pub const ARCHITECTURE_MASK: u64 = 0b1111;
22450 pub const VARIANT_SHIFT: u32 = 20;
22452 pub const VARIANT_MASK: u64 = 0b1111;
22454 pub const IMPLEMENTER_SHIFT: u32 = 24;
22456 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
22458
22459 pub const fn revision(self) -> u8 {
22461 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
22462 }
22463
22464 pub const fn set_revision(&mut self, value: u8) {
22466 let offset = Self::REVISION_SHIFT;
22467 assert!(value & (Self::REVISION_MASK as u8) == value);
22468 *self = Self::from_bits_retain(
22469 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u64) << offset),
22470 );
22471 }
22472
22473 pub const fn with_revision(mut self, value: u8) -> Self {
22475 self.set_revision(value);
22476 self
22477 }
22478
22479 pub const fn partnum(self) -> u16 {
22481 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
22482 }
22483
22484 pub const fn set_partnum(&mut self, value: u16) {
22486 let offset = Self::PARTNUM_SHIFT;
22487 assert!(value & (Self::PARTNUM_MASK as u16) == value);
22488 *self = Self::from_bits_retain(
22489 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u64) << offset),
22490 );
22491 }
22492
22493 pub const fn with_partnum(mut self, value: u16) -> Self {
22495 self.set_partnum(value);
22496 self
22497 }
22498
22499 pub const fn architecture(self) -> u8 {
22501 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
22502 }
22503
22504 pub const fn set_architecture(&mut self, value: u8) {
22506 let offset = Self::ARCHITECTURE_SHIFT;
22507 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
22508 *self = Self::from_bits_retain(
22509 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u64) << offset),
22510 );
22511 }
22512
22513 pub const fn with_architecture(mut self, value: u8) -> Self {
22515 self.set_architecture(value);
22516 self
22517 }
22518
22519 pub const fn variant(self) -> u8 {
22521 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
22522 }
22523
22524 pub const fn set_variant(&mut self, value: u8) {
22526 let offset = Self::VARIANT_SHIFT;
22527 assert!(value & (Self::VARIANT_MASK as u8) == value);
22528 *self = Self::from_bits_retain(
22529 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u64) << offset),
22530 );
22531 }
22532
22533 pub const fn with_variant(mut self, value: u8) -> Self {
22535 self.set_variant(value);
22536 self
22537 }
22538
22539 pub const fn implementer(self) -> u8 {
22541 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
22542 }
22543
22544 pub const fn set_implementer(&mut self, value: u8) {
22546 let offset = Self::IMPLEMENTER_SHIFT;
22547 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
22548 *self = Self::from_bits_retain(
22549 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u64) << offset),
22550 );
22551 }
22552
22553 pub const fn with_implementer(mut self, value: u8) -> Self {
22555 self.set_implementer(value);
22556 self
22557 }
22558}
22559
22560#[cfg(feature = "el2")]
22561bitflags! {
22562 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22564 #[repr(transparent)]
22565 pub struct Mpam2El2: u64 {
22566 const TRAPMPAM1EL1 = 1 << 48;
22568 const TRAPMPAM0EL1 = 1 << 49;
22570 const ENMPAMSM = 1 << 50;
22572 const ALTSP_FRCD = 1 << 54;
22574 const ALTSP_EL2 = 1 << 55;
22576 const ALTSP_HFC = 1 << 56;
22578 const TIDR = 1 << 58;
22580 const MPAMEN = 1 << 63;
22582 }
22583}
22584
22585#[cfg(feature = "el2")]
22586impl Mpam2El2 {
22587 pub const PARTID_SHIFT: u32 = 0;
22589 pub const PARTID_MASK: u64 = 0b1111111111111111;
22591 pub const PARTID_I_SHIFT: u32 = 0;
22593 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
22595 pub const PARTID_D_SHIFT: u32 = 16;
22597 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
22599 pub const ALTPARTID_SHIFT: u32 = 16;
22601 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
22603 pub const PMG_SHIFT: u32 = 32;
22605 pub const PMG_MASK: u64 = 0b1111111111111111;
22607 pub const PMG_I_SHIFT: u32 = 32;
22609 pub const PMG_I_MASK: u64 = 0b11111111;
22611 pub const PMG_D_SHIFT: u32 = 40;
22613 pub const PMG_D_MASK: u64 = 0b11111111;
22615 pub const TRAPMPAM1EL1_SHIFT: u32 = 48;
22617 pub const ALTPMG_SHIFT: u32 = 48;
22619 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
22621 pub const TRAPMPAM0EL1_SHIFT: u32 = 49;
22623 pub const ENMPAMSM_SHIFT: u32 = 50;
22625 pub const ALTSP_FRCD_SHIFT: u32 = 54;
22627 pub const ALTSP_EL2_SHIFT: u32 = 55;
22629 pub const ALTSP_HFC_SHIFT: u32 = 56;
22631 pub const TIDR_SHIFT: u32 = 58;
22633 pub const MPAMEN_SHIFT: u32 = 63;
22635
22636 pub const fn partid(self) -> u16 {
22638 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
22639 }
22640
22641 pub const fn set_partid(&mut self, value: u16) {
22643 let offset = Self::PARTID_SHIFT;
22644 assert!(value & (Self::PARTID_MASK as u16) == value);
22645 *self = Self::from_bits_retain(
22646 (self.bits() & !(Self::PARTID_MASK << offset)) | ((value as u64) << offset),
22647 );
22648 }
22649
22650 pub const fn with_partid(mut self, value: u16) -> Self {
22652 self.set_partid(value);
22653 self
22654 }
22655
22656 pub const fn partid_i(self) -> u16 {
22658 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
22659 }
22660
22661 pub const fn set_partid_i(&mut self, value: u16) {
22663 let offset = Self::PARTID_I_SHIFT;
22664 assert!(value & (Self::PARTID_I_MASK as u16) == value);
22665 *self = Self::from_bits_retain(
22666 (self.bits() & !(Self::PARTID_I_MASK << offset)) | ((value as u64) << offset),
22667 );
22668 }
22669
22670 pub const fn with_partid_i(mut self, value: u16) -> Self {
22672 self.set_partid_i(value);
22673 self
22674 }
22675
22676 pub const fn partid_d(self) -> u16 {
22678 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
22679 }
22680
22681 pub const fn set_partid_d(&mut self, value: u16) {
22683 let offset = Self::PARTID_D_SHIFT;
22684 assert!(value & (Self::PARTID_D_MASK as u16) == value);
22685 *self = Self::from_bits_retain(
22686 (self.bits() & !(Self::PARTID_D_MASK << offset)) | ((value as u64) << offset),
22687 );
22688 }
22689
22690 pub const fn with_partid_d(mut self, value: u16) -> Self {
22692 self.set_partid_d(value);
22693 self
22694 }
22695
22696 pub const fn altpartid(self) -> u16 {
22698 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
22699 }
22700
22701 pub const fn set_altpartid(&mut self, value: u16) {
22703 let offset = Self::ALTPARTID_SHIFT;
22704 assert!(value & (Self::ALTPARTID_MASK as u16) == value);
22705 *self = Self::from_bits_retain(
22706 (self.bits() & !(Self::ALTPARTID_MASK << offset)) | ((value as u64) << offset),
22707 );
22708 }
22709
22710 pub const fn with_altpartid(mut self, value: u16) -> Self {
22712 self.set_altpartid(value);
22713 self
22714 }
22715
22716 pub const fn pmg(self) -> u16 {
22718 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
22719 }
22720
22721 pub const fn set_pmg(&mut self, value: u16) {
22723 let offset = Self::PMG_SHIFT;
22724 assert!(value & (Self::PMG_MASK as u16) == value);
22725 *self = Self::from_bits_retain(
22726 (self.bits() & !(Self::PMG_MASK << offset)) | ((value as u64) << offset),
22727 );
22728 }
22729
22730 pub const fn with_pmg(mut self, value: u16) -> Self {
22732 self.set_pmg(value);
22733 self
22734 }
22735
22736 pub const fn pmg_i(self) -> u8 {
22738 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
22739 }
22740
22741 pub const fn set_pmg_i(&mut self, value: u8) {
22743 let offset = Self::PMG_I_SHIFT;
22744 assert!(value & (Self::PMG_I_MASK as u8) == value);
22745 *self = Self::from_bits_retain(
22746 (self.bits() & !(Self::PMG_I_MASK << offset)) | ((value as u64) << offset),
22747 );
22748 }
22749
22750 pub const fn with_pmg_i(mut self, value: u8) -> Self {
22752 self.set_pmg_i(value);
22753 self
22754 }
22755
22756 pub const fn pmg_d(self) -> u8 {
22758 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
22759 }
22760
22761 pub const fn set_pmg_d(&mut self, value: u8) {
22763 let offset = Self::PMG_D_SHIFT;
22764 assert!(value & (Self::PMG_D_MASK as u8) == value);
22765 *self = Self::from_bits_retain(
22766 (self.bits() & !(Self::PMG_D_MASK << offset)) | ((value as u64) << offset),
22767 );
22768 }
22769
22770 pub const fn with_pmg_d(mut self, value: u8) -> Self {
22772 self.set_pmg_d(value);
22773 self
22774 }
22775
22776 pub const fn altpmg(self) -> u16 {
22778 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
22779 }
22780
22781 pub const fn set_altpmg(&mut self, value: u16) {
22783 let offset = Self::ALTPMG_SHIFT;
22784 assert!(value & (Self::ALTPMG_MASK as u16) == value);
22785 *self = Self::from_bits_retain(
22786 (self.bits() & !(Self::ALTPMG_MASK << offset)) | ((value as u64) << offset),
22787 );
22788 }
22789
22790 pub const fn with_altpmg(mut self, value: u16) -> Self {
22792 self.set_altpmg(value);
22793 self
22794 }
22795}
22796
22797#[cfg(feature = "el3")]
22798bitflags! {
22799 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
22803 #[repr(transparent)]
22804 pub struct Mpam3El3: u64 {
22805 const RT_ALTSP_NS = 1 << 52;
22807 const ALTSP_EL3 = 1 << 55;
22809 const ALTSP_HFC = 1 << 56;
22811 const ALTSP_HEN = 1 << 57;
22813 const FORCE_NS = 1 << 60;
22815 const SDEFLT = 1 << 61;
22817 const TRAPLOWER = 1 << 62;
22819 const MPAMEN = 1 << 63;
22821 }
22822}
22823
22824#[cfg(feature = "el3")]
22825impl Mpam3El3 {
22826 pub const PARTID_SHIFT: u32 = 0;
22828 pub const PARTID_MASK: u64 = 0b1111111111111111;
22830 pub const PARTID_I_SHIFT: u32 = 0;
22832 pub const PARTID_I_MASK: u64 = 0b1111111111111111;
22834 pub const PARTID_D_SHIFT: u32 = 16;
22836 pub const PARTID_D_MASK: u64 = 0b1111111111111111;
22838 pub const ALTPARTID_SHIFT: u32 = 16;
22840 pub const ALTPARTID_MASK: u64 = 0b1111111111111111;
22842 pub const PMG_SHIFT: u32 = 32;
22844 pub const PMG_MASK: u64 = 0b1111111111111111;
22846 pub const PMG_I_SHIFT: u32 = 32;
22848 pub const PMG_I_MASK: u64 = 0b11111111;
22850 pub const PMG_D_SHIFT: u32 = 40;
22852 pub const PMG_D_MASK: u64 = 0b11111111;
22854 pub const ALTPMG_SHIFT: u32 = 48;
22856 pub const ALTPMG_MASK: u64 = 0b1111111111111111;
22858 pub const RT_ALTSP_NS_SHIFT: u32 = 52;
22860 pub const ALTSP_EL3_SHIFT: u32 = 55;
22862 pub const ALTSP_HFC_SHIFT: u32 = 56;
22864 pub const ALTSP_HEN_SHIFT: u32 = 57;
22866 pub const FORCE_NS_SHIFT: u32 = 60;
22868 pub const SDEFLT_SHIFT: u32 = 61;
22870 pub const TRAPLOWER_SHIFT: u32 = 62;
22872 pub const MPAMEN_SHIFT: u32 = 63;
22874
22875 pub const fn partid(self) -> u16 {
22877 ((self.bits() >> Self::PARTID_SHIFT) & 0b1111111111111111) as u16
22878 }
22879
22880 pub const fn set_partid(&mut self, value: u16) {
22882 let offset = Self::PARTID_SHIFT;
22883 assert!(value & (Self::PARTID_MASK as u16) == value);
22884 *self = Self::from_bits_retain(
22885 (self.bits() & !(Self::PARTID_MASK << offset)) | ((value as u64) << offset),
22886 );
22887 }
22888
22889 pub const fn with_partid(mut self, value: u16) -> Self {
22891 self.set_partid(value);
22892 self
22893 }
22894
22895 pub const fn partid_i(self) -> u16 {
22897 ((self.bits() >> Self::PARTID_I_SHIFT) & 0b1111111111111111) as u16
22898 }
22899
22900 pub const fn set_partid_i(&mut self, value: u16) {
22902 let offset = Self::PARTID_I_SHIFT;
22903 assert!(value & (Self::PARTID_I_MASK as u16) == value);
22904 *self = Self::from_bits_retain(
22905 (self.bits() & !(Self::PARTID_I_MASK << offset)) | ((value as u64) << offset),
22906 );
22907 }
22908
22909 pub const fn with_partid_i(mut self, value: u16) -> Self {
22911 self.set_partid_i(value);
22912 self
22913 }
22914
22915 pub const fn partid_d(self) -> u16 {
22917 ((self.bits() >> Self::PARTID_D_SHIFT) & 0b1111111111111111) as u16
22918 }
22919
22920 pub const fn set_partid_d(&mut self, value: u16) {
22922 let offset = Self::PARTID_D_SHIFT;
22923 assert!(value & (Self::PARTID_D_MASK as u16) == value);
22924 *self = Self::from_bits_retain(
22925 (self.bits() & !(Self::PARTID_D_MASK << offset)) | ((value as u64) << offset),
22926 );
22927 }
22928
22929 pub const fn with_partid_d(mut self, value: u16) -> Self {
22931 self.set_partid_d(value);
22932 self
22933 }
22934
22935 pub const fn altpartid(self) -> u16 {
22937 ((self.bits() >> Self::ALTPARTID_SHIFT) & 0b1111111111111111) as u16
22938 }
22939
22940 pub const fn set_altpartid(&mut self, value: u16) {
22942 let offset = Self::ALTPARTID_SHIFT;
22943 assert!(value & (Self::ALTPARTID_MASK as u16) == value);
22944 *self = Self::from_bits_retain(
22945 (self.bits() & !(Self::ALTPARTID_MASK << offset)) | ((value as u64) << offset),
22946 );
22947 }
22948
22949 pub const fn with_altpartid(mut self, value: u16) -> Self {
22951 self.set_altpartid(value);
22952 self
22953 }
22954
22955 pub const fn pmg(self) -> u16 {
22957 ((self.bits() >> Self::PMG_SHIFT) & 0b1111111111111111) as u16
22958 }
22959
22960 pub const fn set_pmg(&mut self, value: u16) {
22962 let offset = Self::PMG_SHIFT;
22963 assert!(value & (Self::PMG_MASK as u16) == value);
22964 *self = Self::from_bits_retain(
22965 (self.bits() & !(Self::PMG_MASK << offset)) | ((value as u64) << offset),
22966 );
22967 }
22968
22969 pub const fn with_pmg(mut self, value: u16) -> Self {
22971 self.set_pmg(value);
22972 self
22973 }
22974
22975 pub const fn pmg_i(self) -> u8 {
22977 ((self.bits() >> Self::PMG_I_SHIFT) & 0b11111111) as u8
22978 }
22979
22980 pub const fn set_pmg_i(&mut self, value: u8) {
22982 let offset = Self::PMG_I_SHIFT;
22983 assert!(value & (Self::PMG_I_MASK as u8) == value);
22984 *self = Self::from_bits_retain(
22985 (self.bits() & !(Self::PMG_I_MASK << offset)) | ((value as u64) << offset),
22986 );
22987 }
22988
22989 pub const fn with_pmg_i(mut self, value: u8) -> Self {
22991 self.set_pmg_i(value);
22992 self
22993 }
22994
22995 pub const fn pmg_d(self) -> u8 {
22997 ((self.bits() >> Self::PMG_D_SHIFT) & 0b11111111) as u8
22998 }
22999
23000 pub const fn set_pmg_d(&mut self, value: u8) {
23002 let offset = Self::PMG_D_SHIFT;
23003 assert!(value & (Self::PMG_D_MASK as u8) == value);
23004 *self = Self::from_bits_retain(
23005 (self.bits() & !(Self::PMG_D_MASK << offset)) | ((value as u64) << offset),
23006 );
23007 }
23008
23009 pub const fn with_pmg_d(mut self, value: u8) -> Self {
23011 self.set_pmg_d(value);
23012 self
23013 }
23014
23015 pub const fn altpmg(self) -> u16 {
23017 ((self.bits() >> Self::ALTPMG_SHIFT) & 0b1111111111111111) as u16
23018 }
23019
23020 pub const fn set_altpmg(&mut self, value: u16) {
23022 let offset = Self::ALTPMG_SHIFT;
23023 assert!(value & (Self::ALTPMG_MASK as u16) == value);
23024 *self = Self::from_bits_retain(
23025 (self.bits() & !(Self::ALTPMG_MASK << offset)) | ((value as u64) << offset),
23026 );
23027 }
23028
23029 pub const fn with_altpmg(mut self, value: u16) -> Self {
23031 self.set_altpmg(value);
23032 self
23033 }
23034}
23035
23036#[cfg(feature = "el2")]
23037bitflags! {
23038 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23040 #[repr(transparent)]
23041 pub struct MpamhcrEl2: u64 {
23042 const EL0_VPMEN = 1 << 0;
23044 const EL1_VPMEN = 1 << 1;
23046 const VPMEN = 1 << 2;
23048 const VMMEN = 1 << 3;
23050 const SMVPMEN = 1 << 4;
23052 const SMVMMEN = 1 << 5;
23054 const GSTAPP_PLK = 1 << 8;
23056 const TRAP_MPAMIDR_EL1 = 1 << 31;
23058 const NTRAPMPAM1EL1 = 1 << 48;
23060 const NTRAPMPAM0EL1 = 1 << 49;
23062 const NTRAPMPAMSM = 1 << 50;
23064 const NTIDR = 1 << 58;
23066 }
23067}
23068
23069#[cfg(feature = "el2")]
23070impl MpamhcrEl2 {
23071 pub const EL0_VPMEN_SHIFT: u32 = 0;
23073 pub const EL1_VPMEN_SHIFT: u32 = 1;
23075 pub const VPMEN_SHIFT: u32 = 2;
23077 pub const VMMEN_SHIFT: u32 = 3;
23079 pub const SMVPMEN_SHIFT: u32 = 4;
23081 pub const SMVMMEN_SHIFT: u32 = 5;
23083 pub const GSTAPP_PLK_SHIFT: u32 = 8;
23085 pub const TRAP_MPAMIDR_EL1_SHIFT: u32 = 31;
23087 pub const NTRAPMPAM1EL1_SHIFT: u32 = 48;
23089 pub const NTRAPMPAM0EL1_SHIFT: u32 = 49;
23091 pub const NTRAPMPAMSM_SHIFT: u32 = 50;
23093 pub const NTIDR_SHIFT: u32 = 58;
23095}
23096
23097#[cfg(feature = "el1")]
23098bitflags! {
23099 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23103 #[repr(transparent)]
23104 pub struct MpamidrEl1: u64 {
23105 const HAS_HCR = 1 << 17;
23107 const HAS_ALT_ID = 1 << 21;
23109 const HAS_INSTR_ALT_ID = 1 << 22;
23111 const HAS_BW_CTRL = 1 << 56;
23113 const HAS_ALTSP = 1 << 57;
23115 const HAS_TIDR = 1 << 58;
23117 const SP4 = 1 << 59;
23119 const HAS_FORCE_NS = 1 << 60;
23121 const HAS_SDEFLT = 1 << 61;
23123 }
23124}
23125
23126#[cfg(feature = "el1")]
23127impl MpamidrEl1 {
23128 pub const PARTID_MAX_SHIFT: u32 = 0;
23130 pub const PARTID_MAX_MASK: u64 = 0b1111111111111111;
23132 pub const HAS_HCR_SHIFT: u32 = 17;
23134 pub const VPMR_MAX_SHIFT: u32 = 18;
23136 pub const VPMR_MAX_MASK: u64 = 0b111;
23138 pub const HAS_ALT_ID_SHIFT: u32 = 21;
23140 pub const HAS_INSTR_ALT_ID_SHIFT: u32 = 22;
23142 pub const HAS_BW_CTRL_SHIFT: u32 = 56;
23144 pub const HAS_ALTSP_SHIFT: u32 = 57;
23146 pub const HAS_TIDR_SHIFT: u32 = 58;
23148 pub const SP4_SHIFT: u32 = 59;
23150 pub const HAS_FORCE_NS_SHIFT: u32 = 60;
23152 pub const HAS_SDEFLT_SHIFT: u32 = 61;
23154
23155 pub const fn partid_max(self) -> u16 {
23157 ((self.bits() >> Self::PARTID_MAX_SHIFT) & 0b1111111111111111) as u16
23158 }
23159
23160 pub const fn set_partid_max(&mut self, value: u16) {
23162 let offset = Self::PARTID_MAX_SHIFT;
23163 assert!(value & (Self::PARTID_MAX_MASK as u16) == value);
23164 *self = Self::from_bits_retain(
23165 (self.bits() & !(Self::PARTID_MAX_MASK << offset)) | ((value as u64) << offset),
23166 );
23167 }
23168
23169 pub const fn with_partid_max(mut self, value: u16) -> Self {
23171 self.set_partid_max(value);
23172 self
23173 }
23174
23175 pub const fn vpmr_max(self) -> u8 {
23179 ((self.bits() >> Self::VPMR_MAX_SHIFT) & 0b111) as u8
23180 }
23181
23182 pub const fn set_vpmr_max(&mut self, value: u8) {
23186 let offset = Self::VPMR_MAX_SHIFT;
23187 assert!(value & (Self::VPMR_MAX_MASK as u8) == value);
23188 *self = Self::from_bits_retain(
23189 (self.bits() & !(Self::VPMR_MAX_MASK << offset)) | ((value as u64) << offset),
23190 );
23191 }
23192
23193 pub const fn with_vpmr_max(mut self, value: u8) -> Self {
23197 self.set_vpmr_max(value);
23198 self
23199 }
23200}
23201
23202#[cfg(feature = "el2")]
23203bitflags! {
23204 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23206 #[repr(transparent)]
23207 pub struct Mpamvpm0El2: u64 {
23208 }
23209}
23210
23211#[cfg(feature = "el2")]
23212impl Mpamvpm0El2 {
23213 pub const PHYPARTID0_SHIFT: u32 = 0;
23215 pub const PHYPARTID0_MASK: u64 = 0b1111111111111111;
23217 pub const PHYPARTID1_SHIFT: u32 = 16;
23219 pub const PHYPARTID1_MASK: u64 = 0b1111111111111111;
23221 pub const PHYPARTID2_SHIFT: u32 = 32;
23223 pub const PHYPARTID2_MASK: u64 = 0b1111111111111111;
23225 pub const PHYPARTID3_SHIFT: u32 = 48;
23227 pub const PHYPARTID3_MASK: u64 = 0b1111111111111111;
23229
23230 pub const fn phypartid0(self) -> u16 {
23232 ((self.bits() >> Self::PHYPARTID0_SHIFT) & 0b1111111111111111) as u16
23233 }
23234
23235 pub const fn set_phypartid0(&mut self, value: u16) {
23237 let offset = Self::PHYPARTID0_SHIFT;
23238 assert!(value & (Self::PHYPARTID0_MASK as u16) == value);
23239 *self = Self::from_bits_retain(
23240 (self.bits() & !(Self::PHYPARTID0_MASK << offset)) | ((value as u64) << offset),
23241 );
23242 }
23243
23244 pub const fn with_phypartid0(mut self, value: u16) -> Self {
23246 self.set_phypartid0(value);
23247 self
23248 }
23249
23250 pub const fn phypartid1(self) -> u16 {
23252 ((self.bits() >> Self::PHYPARTID1_SHIFT) & 0b1111111111111111) as u16
23253 }
23254
23255 pub const fn set_phypartid1(&mut self, value: u16) {
23257 let offset = Self::PHYPARTID1_SHIFT;
23258 assert!(value & (Self::PHYPARTID1_MASK as u16) == value);
23259 *self = Self::from_bits_retain(
23260 (self.bits() & !(Self::PHYPARTID1_MASK << offset)) | ((value as u64) << offset),
23261 );
23262 }
23263
23264 pub const fn with_phypartid1(mut self, value: u16) -> Self {
23266 self.set_phypartid1(value);
23267 self
23268 }
23269
23270 pub const fn phypartid2(self) -> u16 {
23272 ((self.bits() >> Self::PHYPARTID2_SHIFT) & 0b1111111111111111) as u16
23273 }
23274
23275 pub const fn set_phypartid2(&mut self, value: u16) {
23277 let offset = Self::PHYPARTID2_SHIFT;
23278 assert!(value & (Self::PHYPARTID2_MASK as u16) == value);
23279 *self = Self::from_bits_retain(
23280 (self.bits() & !(Self::PHYPARTID2_MASK << offset)) | ((value as u64) << offset),
23281 );
23282 }
23283
23284 pub const fn with_phypartid2(mut self, value: u16) -> Self {
23286 self.set_phypartid2(value);
23287 self
23288 }
23289
23290 pub const fn phypartid3(self) -> u16 {
23292 ((self.bits() >> Self::PHYPARTID3_SHIFT) & 0b1111111111111111) as u16
23293 }
23294
23295 pub const fn set_phypartid3(&mut self, value: u16) {
23297 let offset = Self::PHYPARTID3_SHIFT;
23298 assert!(value & (Self::PHYPARTID3_MASK as u16) == value);
23299 *self = Self::from_bits_retain(
23300 (self.bits() & !(Self::PHYPARTID3_MASK << offset)) | ((value as u64) << offset),
23301 );
23302 }
23303
23304 pub const fn with_phypartid3(mut self, value: u16) -> Self {
23306 self.set_phypartid3(value);
23307 self
23308 }
23309}
23310
23311#[cfg(feature = "el2")]
23312bitflags! {
23313 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23315 #[repr(transparent)]
23316 pub struct Mpamvpm1El2: u64 {
23317 }
23318}
23319
23320#[cfg(feature = "el2")]
23321impl Mpamvpm1El2 {
23322 pub const PHYPARTID4_SHIFT: u32 = 0;
23324 pub const PHYPARTID4_MASK: u64 = 0b1111111111111111;
23326 pub const PHYPARTID5_SHIFT: u32 = 16;
23328 pub const PHYPARTID5_MASK: u64 = 0b1111111111111111;
23330 pub const PHYPARTID6_SHIFT: u32 = 32;
23332 pub const PHYPARTID6_MASK: u64 = 0b1111111111111111;
23334 pub const PHYPARTID7_SHIFT: u32 = 48;
23336 pub const PHYPARTID7_MASK: u64 = 0b1111111111111111;
23338
23339 pub const fn phypartid4(self) -> u16 {
23341 ((self.bits() >> Self::PHYPARTID4_SHIFT) & 0b1111111111111111) as u16
23342 }
23343
23344 pub const fn set_phypartid4(&mut self, value: u16) {
23346 let offset = Self::PHYPARTID4_SHIFT;
23347 assert!(value & (Self::PHYPARTID4_MASK as u16) == value);
23348 *self = Self::from_bits_retain(
23349 (self.bits() & !(Self::PHYPARTID4_MASK << offset)) | ((value as u64) << offset),
23350 );
23351 }
23352
23353 pub const fn with_phypartid4(mut self, value: u16) -> Self {
23355 self.set_phypartid4(value);
23356 self
23357 }
23358
23359 pub const fn phypartid5(self) -> u16 {
23361 ((self.bits() >> Self::PHYPARTID5_SHIFT) & 0b1111111111111111) as u16
23362 }
23363
23364 pub const fn set_phypartid5(&mut self, value: u16) {
23366 let offset = Self::PHYPARTID5_SHIFT;
23367 assert!(value & (Self::PHYPARTID5_MASK as u16) == value);
23368 *self = Self::from_bits_retain(
23369 (self.bits() & !(Self::PHYPARTID5_MASK << offset)) | ((value as u64) << offset),
23370 );
23371 }
23372
23373 pub const fn with_phypartid5(mut self, value: u16) -> Self {
23375 self.set_phypartid5(value);
23376 self
23377 }
23378
23379 pub const fn phypartid6(self) -> u16 {
23381 ((self.bits() >> Self::PHYPARTID6_SHIFT) & 0b1111111111111111) as u16
23382 }
23383
23384 pub const fn set_phypartid6(&mut self, value: u16) {
23386 let offset = Self::PHYPARTID6_SHIFT;
23387 assert!(value & (Self::PHYPARTID6_MASK as u16) == value);
23388 *self = Self::from_bits_retain(
23389 (self.bits() & !(Self::PHYPARTID6_MASK << offset)) | ((value as u64) << offset),
23390 );
23391 }
23392
23393 pub const fn with_phypartid6(mut self, value: u16) -> Self {
23395 self.set_phypartid6(value);
23396 self
23397 }
23398
23399 pub const fn phypartid7(self) -> u16 {
23401 ((self.bits() >> Self::PHYPARTID7_SHIFT) & 0b1111111111111111) as u16
23402 }
23403
23404 pub const fn set_phypartid7(&mut self, value: u16) {
23406 let offset = Self::PHYPARTID7_SHIFT;
23407 assert!(value & (Self::PHYPARTID7_MASK as u16) == value);
23408 *self = Self::from_bits_retain(
23409 (self.bits() & !(Self::PHYPARTID7_MASK << offset)) | ((value as u64) << offset),
23410 );
23411 }
23412
23413 pub const fn with_phypartid7(mut self, value: u16) -> Self {
23415 self.set_phypartid7(value);
23416 self
23417 }
23418}
23419
23420#[cfg(feature = "el2")]
23421bitflags! {
23422 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23424 #[repr(transparent)]
23425 pub struct Mpamvpm2El2: u64 {
23426 }
23427}
23428
23429#[cfg(feature = "el2")]
23430impl Mpamvpm2El2 {
23431 pub const PHYPARTID8_SHIFT: u32 = 0;
23433 pub const PHYPARTID8_MASK: u64 = 0b1111111111111111;
23435 pub const PHYPARTID9_SHIFT: u32 = 16;
23437 pub const PHYPARTID9_MASK: u64 = 0b1111111111111111;
23439 pub const PHYPARTID10_SHIFT: u32 = 32;
23441 pub const PHYPARTID10_MASK: u64 = 0b1111111111111111;
23443 pub const PHYPARTID11_SHIFT: u32 = 48;
23445 pub const PHYPARTID11_MASK: u64 = 0b1111111111111111;
23447
23448 pub const fn phypartid8(self) -> u16 {
23450 ((self.bits() >> Self::PHYPARTID8_SHIFT) & 0b1111111111111111) as u16
23451 }
23452
23453 pub const fn set_phypartid8(&mut self, value: u16) {
23455 let offset = Self::PHYPARTID8_SHIFT;
23456 assert!(value & (Self::PHYPARTID8_MASK as u16) == value);
23457 *self = Self::from_bits_retain(
23458 (self.bits() & !(Self::PHYPARTID8_MASK << offset)) | ((value as u64) << offset),
23459 );
23460 }
23461
23462 pub const fn with_phypartid8(mut self, value: u16) -> Self {
23464 self.set_phypartid8(value);
23465 self
23466 }
23467
23468 pub const fn phypartid9(self) -> u16 {
23470 ((self.bits() >> Self::PHYPARTID9_SHIFT) & 0b1111111111111111) as u16
23471 }
23472
23473 pub const fn set_phypartid9(&mut self, value: u16) {
23475 let offset = Self::PHYPARTID9_SHIFT;
23476 assert!(value & (Self::PHYPARTID9_MASK as u16) == value);
23477 *self = Self::from_bits_retain(
23478 (self.bits() & !(Self::PHYPARTID9_MASK << offset)) | ((value as u64) << offset),
23479 );
23480 }
23481
23482 pub const fn with_phypartid9(mut self, value: u16) -> Self {
23484 self.set_phypartid9(value);
23485 self
23486 }
23487
23488 pub const fn phypartid10(self) -> u16 {
23490 ((self.bits() >> Self::PHYPARTID10_SHIFT) & 0b1111111111111111) as u16
23491 }
23492
23493 pub const fn set_phypartid10(&mut self, value: u16) {
23495 let offset = Self::PHYPARTID10_SHIFT;
23496 assert!(value & (Self::PHYPARTID10_MASK as u16) == value);
23497 *self = Self::from_bits_retain(
23498 (self.bits() & !(Self::PHYPARTID10_MASK << offset)) | ((value as u64) << offset),
23499 );
23500 }
23501
23502 pub const fn with_phypartid10(mut self, value: u16) -> Self {
23504 self.set_phypartid10(value);
23505 self
23506 }
23507
23508 pub const fn phypartid11(self) -> u16 {
23510 ((self.bits() >> Self::PHYPARTID11_SHIFT) & 0b1111111111111111) as u16
23511 }
23512
23513 pub const fn set_phypartid11(&mut self, value: u16) {
23515 let offset = Self::PHYPARTID11_SHIFT;
23516 assert!(value & (Self::PHYPARTID11_MASK as u16) == value);
23517 *self = Self::from_bits_retain(
23518 (self.bits() & !(Self::PHYPARTID11_MASK << offset)) | ((value as u64) << offset),
23519 );
23520 }
23521
23522 pub const fn with_phypartid11(mut self, value: u16) -> Self {
23524 self.set_phypartid11(value);
23525 self
23526 }
23527}
23528
23529#[cfg(feature = "el2")]
23530bitflags! {
23531 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23533 #[repr(transparent)]
23534 pub struct Mpamvpm3El2: u64 {
23535 }
23536}
23537
23538#[cfg(feature = "el2")]
23539impl Mpamvpm3El2 {
23540 pub const PHYPARTID12_SHIFT: u32 = 0;
23542 pub const PHYPARTID12_MASK: u64 = 0b1111111111111111;
23544 pub const PHYPARTID13_SHIFT: u32 = 16;
23546 pub const PHYPARTID13_MASK: u64 = 0b1111111111111111;
23548 pub const PHYPARTID14_SHIFT: u32 = 32;
23550 pub const PHYPARTID14_MASK: u64 = 0b1111111111111111;
23552 pub const PHYPARTID15_SHIFT: u32 = 48;
23554 pub const PHYPARTID15_MASK: u64 = 0b1111111111111111;
23556
23557 pub const fn phypartid12(self) -> u16 {
23559 ((self.bits() >> Self::PHYPARTID12_SHIFT) & 0b1111111111111111) as u16
23560 }
23561
23562 pub const fn set_phypartid12(&mut self, value: u16) {
23564 let offset = Self::PHYPARTID12_SHIFT;
23565 assert!(value & (Self::PHYPARTID12_MASK as u16) == value);
23566 *self = Self::from_bits_retain(
23567 (self.bits() & !(Self::PHYPARTID12_MASK << offset)) | ((value as u64) << offset),
23568 );
23569 }
23570
23571 pub const fn with_phypartid12(mut self, value: u16) -> Self {
23573 self.set_phypartid12(value);
23574 self
23575 }
23576
23577 pub const fn phypartid13(self) -> u16 {
23579 ((self.bits() >> Self::PHYPARTID13_SHIFT) & 0b1111111111111111) as u16
23580 }
23581
23582 pub const fn set_phypartid13(&mut self, value: u16) {
23584 let offset = Self::PHYPARTID13_SHIFT;
23585 assert!(value & (Self::PHYPARTID13_MASK as u16) == value);
23586 *self = Self::from_bits_retain(
23587 (self.bits() & !(Self::PHYPARTID13_MASK << offset)) | ((value as u64) << offset),
23588 );
23589 }
23590
23591 pub const fn with_phypartid13(mut self, value: u16) -> Self {
23593 self.set_phypartid13(value);
23594 self
23595 }
23596
23597 pub const fn phypartid14(self) -> u16 {
23599 ((self.bits() >> Self::PHYPARTID14_SHIFT) & 0b1111111111111111) as u16
23600 }
23601
23602 pub const fn set_phypartid14(&mut self, value: u16) {
23604 let offset = Self::PHYPARTID14_SHIFT;
23605 assert!(value & (Self::PHYPARTID14_MASK as u16) == value);
23606 *self = Self::from_bits_retain(
23607 (self.bits() & !(Self::PHYPARTID14_MASK << offset)) | ((value as u64) << offset),
23608 );
23609 }
23610
23611 pub const fn with_phypartid14(mut self, value: u16) -> Self {
23613 self.set_phypartid14(value);
23614 self
23615 }
23616
23617 pub const fn phypartid15(self) -> u16 {
23619 ((self.bits() >> Self::PHYPARTID15_SHIFT) & 0b1111111111111111) as u16
23620 }
23621
23622 pub const fn set_phypartid15(&mut self, value: u16) {
23624 let offset = Self::PHYPARTID15_SHIFT;
23625 assert!(value & (Self::PHYPARTID15_MASK as u16) == value);
23626 *self = Self::from_bits_retain(
23627 (self.bits() & !(Self::PHYPARTID15_MASK << offset)) | ((value as u64) << offset),
23628 );
23629 }
23630
23631 pub const fn with_phypartid15(mut self, value: u16) -> Self {
23633 self.set_phypartid15(value);
23634 self
23635 }
23636}
23637
23638#[cfg(feature = "el2")]
23639bitflags! {
23640 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23642 #[repr(transparent)]
23643 pub struct Mpamvpm4El2: u64 {
23644 }
23645}
23646
23647#[cfg(feature = "el2")]
23648impl Mpamvpm4El2 {
23649 pub const PHYPARTID16_SHIFT: u32 = 0;
23651 pub const PHYPARTID16_MASK: u64 = 0b1111111111111111;
23653 pub const PHYPARTID17_SHIFT: u32 = 16;
23655 pub const PHYPARTID17_MASK: u64 = 0b1111111111111111;
23657 pub const PHYPARTID18_SHIFT: u32 = 32;
23659 pub const PHYPARTID18_MASK: u64 = 0b1111111111111111;
23661 pub const PHYPARTID19_SHIFT: u32 = 48;
23663 pub const PHYPARTID19_MASK: u64 = 0b1111111111111111;
23665
23666 pub const fn phypartid16(self) -> u16 {
23668 ((self.bits() >> Self::PHYPARTID16_SHIFT) & 0b1111111111111111) as u16
23669 }
23670
23671 pub const fn set_phypartid16(&mut self, value: u16) {
23673 let offset = Self::PHYPARTID16_SHIFT;
23674 assert!(value & (Self::PHYPARTID16_MASK as u16) == value);
23675 *self = Self::from_bits_retain(
23676 (self.bits() & !(Self::PHYPARTID16_MASK << offset)) | ((value as u64) << offset),
23677 );
23678 }
23679
23680 pub const fn with_phypartid16(mut self, value: u16) -> Self {
23682 self.set_phypartid16(value);
23683 self
23684 }
23685
23686 pub const fn phypartid17(self) -> u16 {
23688 ((self.bits() >> Self::PHYPARTID17_SHIFT) & 0b1111111111111111) as u16
23689 }
23690
23691 pub const fn set_phypartid17(&mut self, value: u16) {
23693 let offset = Self::PHYPARTID17_SHIFT;
23694 assert!(value & (Self::PHYPARTID17_MASK as u16) == value);
23695 *self = Self::from_bits_retain(
23696 (self.bits() & !(Self::PHYPARTID17_MASK << offset)) | ((value as u64) << offset),
23697 );
23698 }
23699
23700 pub const fn with_phypartid17(mut self, value: u16) -> Self {
23702 self.set_phypartid17(value);
23703 self
23704 }
23705
23706 pub const fn phypartid18(self) -> u16 {
23708 ((self.bits() >> Self::PHYPARTID18_SHIFT) & 0b1111111111111111) as u16
23709 }
23710
23711 pub const fn set_phypartid18(&mut self, value: u16) {
23713 let offset = Self::PHYPARTID18_SHIFT;
23714 assert!(value & (Self::PHYPARTID18_MASK as u16) == value);
23715 *self = Self::from_bits_retain(
23716 (self.bits() & !(Self::PHYPARTID18_MASK << offset)) | ((value as u64) << offset),
23717 );
23718 }
23719
23720 pub const fn with_phypartid18(mut self, value: u16) -> Self {
23722 self.set_phypartid18(value);
23723 self
23724 }
23725
23726 pub const fn phypartid19(self) -> u16 {
23728 ((self.bits() >> Self::PHYPARTID19_SHIFT) & 0b1111111111111111) as u16
23729 }
23730
23731 pub const fn set_phypartid19(&mut self, value: u16) {
23733 let offset = Self::PHYPARTID19_SHIFT;
23734 assert!(value & (Self::PHYPARTID19_MASK as u16) == value);
23735 *self = Self::from_bits_retain(
23736 (self.bits() & !(Self::PHYPARTID19_MASK << offset)) | ((value as u64) << offset),
23737 );
23738 }
23739
23740 pub const fn with_phypartid19(mut self, value: u16) -> Self {
23742 self.set_phypartid19(value);
23743 self
23744 }
23745}
23746
23747#[cfg(feature = "el2")]
23748bitflags! {
23749 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23751 #[repr(transparent)]
23752 pub struct Mpamvpm5El2: u64 {
23753 }
23754}
23755
23756#[cfg(feature = "el2")]
23757impl Mpamvpm5El2 {
23758 pub const PHYPARTID20_SHIFT: u32 = 0;
23760 pub const PHYPARTID20_MASK: u64 = 0b1111111111111111;
23762 pub const PHYPARTID21_SHIFT: u32 = 16;
23764 pub const PHYPARTID21_MASK: u64 = 0b1111111111111111;
23766 pub const PHYPARTID22_SHIFT: u32 = 32;
23768 pub const PHYPARTID22_MASK: u64 = 0b1111111111111111;
23770 pub const PHYPARTID23_SHIFT: u32 = 48;
23772 pub const PHYPARTID23_MASK: u64 = 0b1111111111111111;
23774
23775 pub const fn phypartid20(self) -> u16 {
23777 ((self.bits() >> Self::PHYPARTID20_SHIFT) & 0b1111111111111111) as u16
23778 }
23779
23780 pub const fn set_phypartid20(&mut self, value: u16) {
23782 let offset = Self::PHYPARTID20_SHIFT;
23783 assert!(value & (Self::PHYPARTID20_MASK as u16) == value);
23784 *self = Self::from_bits_retain(
23785 (self.bits() & !(Self::PHYPARTID20_MASK << offset)) | ((value as u64) << offset),
23786 );
23787 }
23788
23789 pub const fn with_phypartid20(mut self, value: u16) -> Self {
23791 self.set_phypartid20(value);
23792 self
23793 }
23794
23795 pub const fn phypartid21(self) -> u16 {
23797 ((self.bits() >> Self::PHYPARTID21_SHIFT) & 0b1111111111111111) as u16
23798 }
23799
23800 pub const fn set_phypartid21(&mut self, value: u16) {
23802 let offset = Self::PHYPARTID21_SHIFT;
23803 assert!(value & (Self::PHYPARTID21_MASK as u16) == value);
23804 *self = Self::from_bits_retain(
23805 (self.bits() & !(Self::PHYPARTID21_MASK << offset)) | ((value as u64) << offset),
23806 );
23807 }
23808
23809 pub const fn with_phypartid21(mut self, value: u16) -> Self {
23811 self.set_phypartid21(value);
23812 self
23813 }
23814
23815 pub const fn phypartid22(self) -> u16 {
23817 ((self.bits() >> Self::PHYPARTID22_SHIFT) & 0b1111111111111111) as u16
23818 }
23819
23820 pub const fn set_phypartid22(&mut self, value: u16) {
23822 let offset = Self::PHYPARTID22_SHIFT;
23823 assert!(value & (Self::PHYPARTID22_MASK as u16) == value);
23824 *self = Self::from_bits_retain(
23825 (self.bits() & !(Self::PHYPARTID22_MASK << offset)) | ((value as u64) << offset),
23826 );
23827 }
23828
23829 pub const fn with_phypartid22(mut self, value: u16) -> Self {
23831 self.set_phypartid22(value);
23832 self
23833 }
23834
23835 pub const fn phypartid23(self) -> u16 {
23837 ((self.bits() >> Self::PHYPARTID23_SHIFT) & 0b1111111111111111) as u16
23838 }
23839
23840 pub const fn set_phypartid23(&mut self, value: u16) {
23842 let offset = Self::PHYPARTID23_SHIFT;
23843 assert!(value & (Self::PHYPARTID23_MASK as u16) == value);
23844 *self = Self::from_bits_retain(
23845 (self.bits() & !(Self::PHYPARTID23_MASK << offset)) | ((value as u64) << offset),
23846 );
23847 }
23848
23849 pub const fn with_phypartid23(mut self, value: u16) -> Self {
23851 self.set_phypartid23(value);
23852 self
23853 }
23854}
23855
23856#[cfg(feature = "el2")]
23857bitflags! {
23858 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23860 #[repr(transparent)]
23861 pub struct Mpamvpm6El2: u64 {
23862 }
23863}
23864
23865#[cfg(feature = "el2")]
23866impl Mpamvpm6El2 {
23867 pub const PHYPARTID24_SHIFT: u32 = 0;
23869 pub const PHYPARTID24_MASK: u64 = 0b1111111111111111;
23871 pub const PHYPARTID25_SHIFT: u32 = 16;
23873 pub const PHYPARTID25_MASK: u64 = 0b1111111111111111;
23875 pub const PHYPARTID26_SHIFT: u32 = 32;
23877 pub const PHYPARTID26_MASK: u64 = 0b1111111111111111;
23879 pub const PHYPARTID27_SHIFT: u32 = 48;
23881 pub const PHYPARTID27_MASK: u64 = 0b1111111111111111;
23883
23884 pub const fn phypartid24(self) -> u16 {
23886 ((self.bits() >> Self::PHYPARTID24_SHIFT) & 0b1111111111111111) as u16
23887 }
23888
23889 pub const fn set_phypartid24(&mut self, value: u16) {
23891 let offset = Self::PHYPARTID24_SHIFT;
23892 assert!(value & (Self::PHYPARTID24_MASK as u16) == value);
23893 *self = Self::from_bits_retain(
23894 (self.bits() & !(Self::PHYPARTID24_MASK << offset)) | ((value as u64) << offset),
23895 );
23896 }
23897
23898 pub const fn with_phypartid24(mut self, value: u16) -> Self {
23900 self.set_phypartid24(value);
23901 self
23902 }
23903
23904 pub const fn phypartid25(self) -> u16 {
23906 ((self.bits() >> Self::PHYPARTID25_SHIFT) & 0b1111111111111111) as u16
23907 }
23908
23909 pub const fn set_phypartid25(&mut self, value: u16) {
23911 let offset = Self::PHYPARTID25_SHIFT;
23912 assert!(value & (Self::PHYPARTID25_MASK as u16) == value);
23913 *self = Self::from_bits_retain(
23914 (self.bits() & !(Self::PHYPARTID25_MASK << offset)) | ((value as u64) << offset),
23915 );
23916 }
23917
23918 pub const fn with_phypartid25(mut self, value: u16) -> Self {
23920 self.set_phypartid25(value);
23921 self
23922 }
23923
23924 pub const fn phypartid26(self) -> u16 {
23926 ((self.bits() >> Self::PHYPARTID26_SHIFT) & 0b1111111111111111) as u16
23927 }
23928
23929 pub const fn set_phypartid26(&mut self, value: u16) {
23931 let offset = Self::PHYPARTID26_SHIFT;
23932 assert!(value & (Self::PHYPARTID26_MASK as u16) == value);
23933 *self = Self::from_bits_retain(
23934 (self.bits() & !(Self::PHYPARTID26_MASK << offset)) | ((value as u64) << offset),
23935 );
23936 }
23937
23938 pub const fn with_phypartid26(mut self, value: u16) -> Self {
23940 self.set_phypartid26(value);
23941 self
23942 }
23943
23944 pub const fn phypartid27(self) -> u16 {
23946 ((self.bits() >> Self::PHYPARTID27_SHIFT) & 0b1111111111111111) as u16
23947 }
23948
23949 pub const fn set_phypartid27(&mut self, value: u16) {
23951 let offset = Self::PHYPARTID27_SHIFT;
23952 assert!(value & (Self::PHYPARTID27_MASK as u16) == value);
23953 *self = Self::from_bits_retain(
23954 (self.bits() & !(Self::PHYPARTID27_MASK << offset)) | ((value as u64) << offset),
23955 );
23956 }
23957
23958 pub const fn with_phypartid27(mut self, value: u16) -> Self {
23960 self.set_phypartid27(value);
23961 self
23962 }
23963}
23964
23965#[cfg(feature = "el2")]
23966bitflags! {
23967 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
23969 #[repr(transparent)]
23970 pub struct Mpamvpm7El2: u64 {
23971 }
23972}
23973
23974#[cfg(feature = "el2")]
23975impl Mpamvpm7El2 {
23976 pub const PHYPARTID28_SHIFT: u32 = 0;
23978 pub const PHYPARTID28_MASK: u64 = 0b1111111111111111;
23980 pub const PHYPARTID29_SHIFT: u32 = 16;
23982 pub const PHYPARTID29_MASK: u64 = 0b1111111111111111;
23984 pub const PHYPARTID30_SHIFT: u32 = 32;
23986 pub const PHYPARTID30_MASK: u64 = 0b1111111111111111;
23988 pub const PHYPARTID31_SHIFT: u32 = 48;
23990 pub const PHYPARTID31_MASK: u64 = 0b1111111111111111;
23992
23993 pub const fn phypartid28(self) -> u16 {
23995 ((self.bits() >> Self::PHYPARTID28_SHIFT) & 0b1111111111111111) as u16
23996 }
23997
23998 pub const fn set_phypartid28(&mut self, value: u16) {
24000 let offset = Self::PHYPARTID28_SHIFT;
24001 assert!(value & (Self::PHYPARTID28_MASK as u16) == value);
24002 *self = Self::from_bits_retain(
24003 (self.bits() & !(Self::PHYPARTID28_MASK << offset)) | ((value as u64) << offset),
24004 );
24005 }
24006
24007 pub const fn with_phypartid28(mut self, value: u16) -> Self {
24009 self.set_phypartid28(value);
24010 self
24011 }
24012
24013 pub const fn phypartid29(self) -> u16 {
24015 ((self.bits() >> Self::PHYPARTID29_SHIFT) & 0b1111111111111111) as u16
24016 }
24017
24018 pub const fn set_phypartid29(&mut self, value: u16) {
24020 let offset = Self::PHYPARTID29_SHIFT;
24021 assert!(value & (Self::PHYPARTID29_MASK as u16) == value);
24022 *self = Self::from_bits_retain(
24023 (self.bits() & !(Self::PHYPARTID29_MASK << offset)) | ((value as u64) << offset),
24024 );
24025 }
24026
24027 pub const fn with_phypartid29(mut self, value: u16) -> Self {
24029 self.set_phypartid29(value);
24030 self
24031 }
24032
24033 pub const fn phypartid30(self) -> u16 {
24035 ((self.bits() >> Self::PHYPARTID30_SHIFT) & 0b1111111111111111) as u16
24036 }
24037
24038 pub const fn set_phypartid30(&mut self, value: u16) {
24040 let offset = Self::PHYPARTID30_SHIFT;
24041 assert!(value & (Self::PHYPARTID30_MASK as u16) == value);
24042 *self = Self::from_bits_retain(
24043 (self.bits() & !(Self::PHYPARTID30_MASK << offset)) | ((value as u64) << offset),
24044 );
24045 }
24046
24047 pub const fn with_phypartid30(mut self, value: u16) -> Self {
24049 self.set_phypartid30(value);
24050 self
24051 }
24052
24053 pub const fn phypartid31(self) -> u16 {
24055 ((self.bits() >> Self::PHYPARTID31_SHIFT) & 0b1111111111111111) as u16
24056 }
24057
24058 pub const fn set_phypartid31(&mut self, value: u16) {
24060 let offset = Self::PHYPARTID31_SHIFT;
24061 assert!(value & (Self::PHYPARTID31_MASK as u16) == value);
24062 *self = Self::from_bits_retain(
24063 (self.bits() & !(Self::PHYPARTID31_MASK << offset)) | ((value as u64) << offset),
24064 );
24065 }
24066
24067 pub const fn with_phypartid31(mut self, value: u16) -> Self {
24069 self.set_phypartid31(value);
24070 self
24071 }
24072}
24073
24074#[cfg(feature = "el2")]
24075bitflags! {
24076 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24078 #[repr(transparent)]
24079 pub struct MpamvpmvEl2: u64 {
24080 const VPM_V0 = 1 << 0;
24082 const VPM_V1 = 1 << 1;
24084 const VPM_V2 = 1 << 2;
24086 const VPM_V3 = 1 << 3;
24088 const VPM_V4 = 1 << 4;
24090 const VPM_V5 = 1 << 5;
24092 const VPM_V6 = 1 << 6;
24094 const VPM_V7 = 1 << 7;
24096 const VPM_V8 = 1 << 8;
24098 const VPM_V9 = 1 << 9;
24100 const VPM_V10 = 1 << 10;
24102 const VPM_V11 = 1 << 11;
24104 const VPM_V12 = 1 << 12;
24106 const VPM_V13 = 1 << 13;
24108 const VPM_V14 = 1 << 14;
24110 const VPM_V15 = 1 << 15;
24112 const VPM_V16 = 1 << 16;
24114 const VPM_V17 = 1 << 17;
24116 const VPM_V18 = 1 << 18;
24118 const VPM_V19 = 1 << 19;
24120 const VPM_V20 = 1 << 20;
24122 const VPM_V21 = 1 << 21;
24124 const VPM_V22 = 1 << 22;
24126 const VPM_V23 = 1 << 23;
24128 const VPM_V24 = 1 << 24;
24130 const VPM_V25 = 1 << 25;
24132 const VPM_V26 = 1 << 26;
24134 const VPM_V27 = 1 << 27;
24136 const VPM_V28 = 1 << 28;
24138 const VPM_V29 = 1 << 29;
24140 const VPM_V30 = 1 << 30;
24142 const VPM_V31 = 1 << 31;
24144 }
24145}
24146
24147#[cfg(feature = "el2")]
24148impl MpamvpmvEl2 {
24149 pub const VPM_V_SHIFT: u32 = 0;
24151}
24152
24153bitflags! {
24154 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24156 #[repr(transparent)]
24157 pub struct Mpidr: u32 {
24158 const MT = 1 << 24;
24160 const U = 1 << 30;
24162 const M = 1 << 31;
24164 }
24165}
24166
24167impl Mpidr {
24168 pub const AFF0_SHIFT: u32 = 0;
24170 pub const AFF0_MASK: u32 = 0b11111111;
24172 pub const AFF1_SHIFT: u32 = 8;
24174 pub const AFF1_MASK: u32 = 0b11111111;
24176 pub const AFF2_SHIFT: u32 = 16;
24178 pub const AFF2_MASK: u32 = 0b11111111;
24180 pub const MT_SHIFT: u32 = 24;
24182 pub const U_SHIFT: u32 = 30;
24184 pub const M_SHIFT: u32 = 31;
24186
24187 pub const fn aff0(self) -> u8 {
24189 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
24190 }
24191
24192 pub const fn set_aff0(&mut self, value: u8) {
24194 let offset = Self::AFF0_SHIFT;
24195 assert!(value & (Self::AFF0_MASK as u8) == value);
24196 *self = Self::from_bits_retain(
24197 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u32) << offset),
24198 );
24199 }
24200
24201 pub const fn with_aff0(mut self, value: u8) -> Self {
24203 self.set_aff0(value);
24204 self
24205 }
24206
24207 pub const fn aff1(self) -> u8 {
24209 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
24210 }
24211
24212 pub const fn set_aff1(&mut self, value: u8) {
24214 let offset = Self::AFF1_SHIFT;
24215 assert!(value & (Self::AFF1_MASK as u8) == value);
24216 *self = Self::from_bits_retain(
24217 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u32) << offset),
24218 );
24219 }
24220
24221 pub const fn with_aff1(mut self, value: u8) -> Self {
24223 self.set_aff1(value);
24224 self
24225 }
24226
24227 pub const fn aff2(self) -> u8 {
24229 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
24230 }
24231
24232 pub const fn set_aff2(&mut self, value: u8) {
24234 let offset = Self::AFF2_SHIFT;
24235 assert!(value & (Self::AFF2_MASK as u8) == value);
24236 *self = Self::from_bits_retain(
24237 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u32) << offset),
24238 );
24239 }
24240
24241 pub const fn with_aff2(mut self, value: u8) -> Self {
24243 self.set_aff2(value);
24244 self
24245 }
24246}
24247
24248#[cfg(feature = "el1")]
24249bitflags! {
24250 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24252 #[repr(transparent)]
24253 pub struct MpidrEl1: u64 {
24254 const RES1 = 0b10000000000000000000000000000000;
24256 const MT = 1 << 24;
24258 const U = 1 << 30;
24260 }
24261}
24262
24263#[cfg(feature = "el1")]
24264impl MpidrEl1 {
24265 pub const AFF0_SHIFT: u32 = 0;
24267 pub const AFF0_MASK: u64 = 0b11111111;
24269 pub const AFF1_SHIFT: u32 = 8;
24271 pub const AFF1_MASK: u64 = 0b11111111;
24273 pub const AFF2_SHIFT: u32 = 16;
24275 pub const AFF2_MASK: u64 = 0b11111111;
24277 pub const MT_SHIFT: u32 = 24;
24279 pub const U_SHIFT: u32 = 30;
24281 pub const AFF3_SHIFT: u32 = 32;
24283 pub const AFF3_MASK: u64 = 0b11111111;
24285
24286 pub const fn aff0(self) -> u8 {
24288 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
24289 }
24290
24291 pub const fn set_aff0(&mut self, value: u8) {
24293 let offset = Self::AFF0_SHIFT;
24294 assert!(value & (Self::AFF0_MASK as u8) == value);
24295 *self = Self::from_bits_retain(
24296 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u64) << offset),
24297 );
24298 }
24299
24300 pub const fn with_aff0(mut self, value: u8) -> Self {
24302 self.set_aff0(value);
24303 self
24304 }
24305
24306 pub const fn aff1(self) -> u8 {
24308 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
24309 }
24310
24311 pub const fn set_aff1(&mut self, value: u8) {
24313 let offset = Self::AFF1_SHIFT;
24314 assert!(value & (Self::AFF1_MASK as u8) == value);
24315 *self = Self::from_bits_retain(
24316 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
24317 );
24318 }
24319
24320 pub const fn with_aff1(mut self, value: u8) -> Self {
24322 self.set_aff1(value);
24323 self
24324 }
24325
24326 pub const fn aff2(self) -> u8 {
24328 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
24329 }
24330
24331 pub const fn set_aff2(&mut self, value: u8) {
24333 let offset = Self::AFF2_SHIFT;
24334 assert!(value & (Self::AFF2_MASK as u8) == value);
24335 *self = Self::from_bits_retain(
24336 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
24337 );
24338 }
24339
24340 pub const fn with_aff2(mut self, value: u8) -> Self {
24342 self.set_aff2(value);
24343 self
24344 }
24345
24346 pub const fn aff3(self) -> u8 {
24348 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
24349 }
24350
24351 pub const fn set_aff3(&mut self, value: u8) {
24353 let offset = Self::AFF3_SHIFT;
24354 assert!(value & (Self::AFF3_MASK as u8) == value);
24355 *self = Self::from_bits_retain(
24356 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
24357 );
24358 }
24359
24360 pub const fn with_aff3(mut self, value: u8) -> Self {
24362 self.set_aff3(value);
24363 self
24364 }
24365}
24366
24367bitflags! {
24368 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24370 #[repr(transparent)]
24371 pub struct Mvbar: u32 {
24372 }
24373}
24374
24375impl Mvbar {
24376 pub const RESERVED_SHIFT: u32 = 0;
24378 pub const RESERVED_MASK: u32 = 0b11111;
24380 pub const VBA_SHIFT: u32 = 5;
24382 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
24384
24385 pub const fn reserved(self) -> u8 {
24387 ((self.bits() >> Self::RESERVED_SHIFT) & 0b11111) as u8
24388 }
24389
24390 pub const fn set_reserved(&mut self, value: u8) {
24392 let offset = Self::RESERVED_SHIFT;
24393 assert!(value & (Self::RESERVED_MASK as u8) == value);
24394 *self = Self::from_bits_retain(
24395 (self.bits() & !(Self::RESERVED_MASK << offset)) | ((value as u32) << offset),
24396 );
24397 }
24398
24399 pub const fn with_reserved(mut self, value: u8) -> Self {
24401 self.set_reserved(value);
24402 self
24403 }
24404
24405 pub const fn vba(self) -> u32 {
24407 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
24408 }
24409
24410 pub const fn set_vba(&mut self, value: u32) {
24412 let offset = Self::VBA_SHIFT;
24413 assert!(value & (Self::VBA_MASK as u32) == value);
24414 *self = Self::from_bits_retain(
24415 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u32) << offset),
24416 );
24417 }
24418
24419 pub const fn with_vba(mut self, value: u32) -> Self {
24421 self.set_vba(value);
24422 self
24423 }
24424}
24425
24426bitflags! {
24427 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24429 #[repr(transparent)]
24430 pub struct Nmrr: u32 {
24431 }
24432}
24433
24434impl Nmrr {
24435 pub const IR_SHIFT: u32 = 0;
24437 pub const IR_MASK: u32 = 0b11;
24439 pub const OR_SHIFT: u32 = 16;
24441 pub const OR_MASK: u32 = 0b11;
24443
24444 pub const fn ir(self, n: u32) -> u8 {
24446 assert!(n < 8);
24447 ((self.bits() >> (Self::IR_SHIFT + (n - 0) * 2)) & 0b11) as u8
24448 }
24449
24450 pub const fn set_ir(&mut self, n: u32, value: u8) {
24452 assert!(n < 8);
24453 let offset = Self::IR_SHIFT + (n - 0) * 2;
24454 assert!(value & (Self::IR_MASK as u8) == value);
24455 *self = Self::from_bits_retain(
24456 (self.bits() & !(Self::IR_MASK << offset)) | ((value as u32) << offset),
24457 );
24458 }
24459
24460 pub const fn with_ir(mut self, n: u32, value: u8) -> Self {
24462 self.set_ir(n, value);
24463 self
24464 }
24465
24466 pub const fn or(self, n: u32) -> u8 {
24468 assert!(n < 8);
24469 ((self.bits() >> (Self::OR_SHIFT + (n - 0) * 2)) & 0b11) as u8
24470 }
24471
24472 pub const fn set_or(&mut self, n: u32, value: u8) {
24474 assert!(n < 8);
24475 let offset = Self::OR_SHIFT + (n - 0) * 2;
24476 assert!(value & (Self::OR_MASK as u8) == value);
24477 *self = Self::from_bits_retain(
24478 (self.bits() & !(Self::OR_MASK << offset)) | ((value as u32) << offset),
24479 );
24480 }
24481
24482 pub const fn with_or(mut self, n: u32, value: u8) -> Self {
24484 self.set_or(n, value);
24485 self
24486 }
24487}
24488
24489bitflags! {
24490 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24492 #[repr(transparent)]
24493 pub struct Nsacr: u32 {
24494 const CP10 = 1 << 10;
24496 const CP11 = 1 << 11;
24498 const NSASEDIS = 1 << 15;
24500 const NSTRCDIS = 1 << 20;
24502 }
24503}
24504
24505impl Nsacr {
24506 pub const CP10_SHIFT: u32 = 10;
24508 pub const CP11_SHIFT: u32 = 11;
24510 pub const NSASEDIS_SHIFT: u32 = 15;
24512 pub const NSTRCDIS_SHIFT: u32 = 20;
24514}
24515
24516bitflags! {
24517 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24519 #[repr(transparent)]
24520 pub struct Par: u64 {
24521 const F = 1 << 0;
24523 const SS = 1 << 1;
24525 const FS_5 = 1 << 6;
24527 const S2WLK = 1 << 8;
24529 const FSTAGE = 1 << 9;
24531 const NS = 1 << 9;
24533 const NOS = 1 << 10;
24535 const LPAE = 1 << 11;
24537 }
24538}
24539
24540impl Par {
24541 pub const F_SHIFT: u32 = 0;
24543 pub const FST_SHIFT: u32 = 1;
24545 pub const FST_MASK: u64 = 0b111111;
24547 pub const FS_4_0_SHIFT: u32 = 1;
24549 pub const FS_4_0_MASK: u64 = 0b11111;
24551 pub const SS_SHIFT: u32 = 1;
24553 pub const OUTER_1_0_SHIFT: u32 = 2;
24555 pub const OUTER_1_0_MASK: u64 = 0b11;
24557 pub const INNER_2_0_SHIFT: u32 = 4;
24559 pub const INNER_2_0_MASK: u64 = 0b111;
24561 pub const FS_5_SHIFT: u32 = 6;
24563 pub const S2WLK_SHIFT: u32 = 8;
24565 pub const FSTAGE_SHIFT: u32 = 9;
24567 pub const NS_SHIFT: u32 = 9;
24569 pub const NOS_SHIFT: u32 = 10;
24571 pub const LPAE_SHIFT: u32 = 11;
24573 pub const ATTR_SHIFT: u32 = 56;
24575 pub const ATTR_MASK: u64 = 0b11111111;
24577
24578 pub const fn fst(self) -> u8 {
24580 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
24581 }
24582
24583 pub const fn set_fst(&mut self, value: u8) {
24585 let offset = Self::FST_SHIFT;
24586 assert!(value & (Self::FST_MASK as u8) == value);
24587 *self = Self::from_bits_retain(
24588 (self.bits() & !(Self::FST_MASK << offset)) | ((value as u64) << offset),
24589 );
24590 }
24591
24592 pub const fn with_fst(mut self, value: u8) -> Self {
24594 self.set_fst(value);
24595 self
24596 }
24597
24598 pub const fn fs_4_0(self) -> u8 {
24600 ((self.bits() >> Self::FS_4_0_SHIFT) & 0b11111) as u8
24601 }
24602
24603 pub const fn set_fs_4_0(&mut self, value: u8) {
24605 let offset = Self::FS_4_0_SHIFT;
24606 assert!(value & (Self::FS_4_0_MASK as u8) == value);
24607 *self = Self::from_bits_retain(
24608 (self.bits() & !(Self::FS_4_0_MASK << offset)) | ((value as u64) << offset),
24609 );
24610 }
24611
24612 pub const fn with_fs_4_0(mut self, value: u8) -> Self {
24614 self.set_fs_4_0(value);
24615 self
24616 }
24617
24618 pub const fn outer_1_0(self) -> u8 {
24620 ((self.bits() >> Self::OUTER_1_0_SHIFT) & 0b11) as u8
24621 }
24622
24623 pub const fn set_outer_1_0(&mut self, value: u8) {
24625 let offset = Self::OUTER_1_0_SHIFT;
24626 assert!(value & (Self::OUTER_1_0_MASK as u8) == value);
24627 *self = Self::from_bits_retain(
24628 (self.bits() & !(Self::OUTER_1_0_MASK << offset)) | ((value as u64) << offset),
24629 );
24630 }
24631
24632 pub const fn with_outer_1_0(mut self, value: u8) -> Self {
24634 self.set_outer_1_0(value);
24635 self
24636 }
24637
24638 pub const fn inner_2_0(self) -> u8 {
24640 ((self.bits() >> Self::INNER_2_0_SHIFT) & 0b111) as u8
24641 }
24642
24643 pub const fn set_inner_2_0(&mut self, value: u8) {
24645 let offset = Self::INNER_2_0_SHIFT;
24646 assert!(value & (Self::INNER_2_0_MASK as u8) == value);
24647 *self = Self::from_bits_retain(
24648 (self.bits() & !(Self::INNER_2_0_MASK << offset)) | ((value as u64) << offset),
24649 );
24650 }
24651
24652 pub const fn with_inner_2_0(mut self, value: u8) -> Self {
24654 self.set_inner_2_0(value);
24655 self
24656 }
24657
24658 pub const fn attr(self) -> u8 {
24660 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
24661 }
24662
24663 pub const fn set_attr(&mut self, value: u8) {
24665 let offset = Self::ATTR_SHIFT;
24666 assert!(value & (Self::ATTR_MASK as u8) == value);
24667 *self = Self::from_bits_retain(
24668 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
24669 );
24670 }
24671
24672 pub const fn with_attr(mut self, value: u8) -> Self {
24674 self.set_attr(value);
24675 self
24676 }
24677}
24678
24679#[cfg(feature = "el1")]
24680bitflags! {
24681 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24683 #[repr(transparent)]
24684 pub struct ParEl1: u64 {
24685 const RES1 = 0b100000000000;
24687 const F = 1 << 0;
24689 const PTW = 1 << 8;
24691 const NS = 1 << 9;
24693 const S = 1 << 9;
24695 const NSE = 1 << 11;
24697 const ASSUREDONLY = 1 << 12;
24699 const TOPLEVEL = 1 << 13;
24701 const OVERLAY = 1 << 14;
24703 const DIRTYBIT = 1 << 15;
24705 }
24706}
24707
24708#[cfg(feature = "el1")]
24709impl ParEl1 {
24710 pub const F_SHIFT: u32 = 0;
24712 pub const FST_SHIFT: u32 = 1;
24714 pub const FST_MASK: u64 = 0b111111;
24716 pub const SH_SHIFT: u32 = 7;
24718 pub const SH_MASK: u64 = 0b11;
24720 pub const PTW_SHIFT: u32 = 8;
24722 pub const NS_SHIFT: u32 = 9;
24724 pub const S_SHIFT: u32 = 9;
24726 pub const NSE_SHIFT: u32 = 11;
24728 pub const ASSUREDONLY_SHIFT: u32 = 12;
24730 pub const PA_47_12_SHIFT: u32 = 12;
24732 pub const PA_47_12_MASK: u64 = 0b111111111111111111111111111111111111;
24734 pub const TOPLEVEL_SHIFT: u32 = 13;
24736 pub const OVERLAY_SHIFT: u32 = 14;
24738 pub const DIRTYBIT_SHIFT: u32 = 15;
24740 pub const PA_51_48_SHIFT: u32 = 48;
24742 pub const PA_51_48_MASK: u64 = 0b1111;
24744 pub const ATTR_SHIFT: u32 = 56;
24746 pub const ATTR_MASK: u64 = 0b11111111;
24748
24749 pub const fn fst(self) -> u8 {
24751 ((self.bits() >> Self::FST_SHIFT) & 0b111111) as u8
24752 }
24753
24754 pub const fn set_fst(&mut self, value: u8) {
24756 let offset = Self::FST_SHIFT;
24757 assert!(value & (Self::FST_MASK as u8) == value);
24758 *self = Self::from_bits_retain(
24759 (self.bits() & !(Self::FST_MASK << offset)) | ((value as u64) << offset),
24760 );
24761 }
24762
24763 pub const fn with_fst(mut self, value: u8) -> Self {
24765 self.set_fst(value);
24766 self
24767 }
24768
24769 pub const fn sh(self) -> u8 {
24771 ((self.bits() >> Self::SH_SHIFT) & 0b11) as u8
24772 }
24773
24774 pub const fn set_sh(&mut self, value: u8) {
24776 let offset = Self::SH_SHIFT;
24777 assert!(value & (Self::SH_MASK as u8) == value);
24778 *self = Self::from_bits_retain(
24779 (self.bits() & !(Self::SH_MASK << offset)) | ((value as u64) << offset),
24780 );
24781 }
24782
24783 pub const fn with_sh(mut self, value: u8) -> Self {
24785 self.set_sh(value);
24786 self
24787 }
24788
24789 pub const fn pa_47_12(self) -> u64 {
24791 ((self.bits() >> Self::PA_47_12_SHIFT) & 0b111111111111111111111111111111111111) as u64
24792 }
24793
24794 pub const fn set_pa_47_12(&mut self, value: u64) {
24796 let offset = Self::PA_47_12_SHIFT;
24797 assert!(value & (Self::PA_47_12_MASK as u64) == value);
24798 *self = Self::from_bits_retain(
24799 (self.bits() & !(Self::PA_47_12_MASK << offset)) | ((value as u64) << offset),
24800 );
24801 }
24802
24803 pub const fn with_pa_47_12(mut self, value: u64) -> Self {
24805 self.set_pa_47_12(value);
24806 self
24807 }
24808
24809 pub const fn pa_51_48(self) -> u8 {
24811 ((self.bits() >> Self::PA_51_48_SHIFT) & 0b1111) as u8
24812 }
24813
24814 pub const fn set_pa_51_48(&mut self, value: u8) {
24816 let offset = Self::PA_51_48_SHIFT;
24817 assert!(value & (Self::PA_51_48_MASK as u8) == value);
24818 *self = Self::from_bits_retain(
24819 (self.bits() & !(Self::PA_51_48_MASK << offset)) | ((value as u64) << offset),
24820 );
24821 }
24822
24823 pub const fn with_pa_51_48(mut self, value: u8) -> Self {
24825 self.set_pa_51_48(value);
24826 self
24827 }
24828
24829 pub const fn attr(self) -> u8 {
24831 ((self.bits() >> Self::ATTR_SHIFT) & 0b11111111) as u8
24832 }
24833
24834 pub const fn set_attr(&mut self, value: u8) {
24836 let offset = Self::ATTR_SHIFT;
24837 assert!(value & (Self::ATTR_MASK as u8) == value);
24838 *self = Self::from_bits_retain(
24839 (self.bits() & !(Self::ATTR_MASK << offset)) | ((value as u64) << offset),
24840 );
24841 }
24842
24843 pub const fn with_attr(mut self, value: u8) -> Self {
24845 self.set_attr(value);
24846 self
24847 }
24848}
24849
24850bitflags! {
24851 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24853 #[repr(transparent)]
24854 pub struct Pmccfiltr: u32 {
24855 const RLU = 1 << 21;
24857 const NSH = 1 << 27;
24859 const NSU = 1 << 28;
24861 const NSK = 1 << 29;
24863 const U = 1 << 30;
24865 const P = 1 << 31;
24867 }
24868}
24869
24870impl Pmccfiltr {
24871 pub const RLU_SHIFT: u32 = 21;
24873 pub const NSH_SHIFT: u32 = 27;
24875 pub const NSU_SHIFT: u32 = 28;
24877 pub const NSK_SHIFT: u32 = 29;
24879 pub const U_SHIFT: u32 = 30;
24881 pub const P_SHIFT: u32 = 31;
24883}
24884
24885bitflags! {
24886 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24888 #[repr(transparent)]
24889 pub struct Pmccntr: u64 {
24890 }
24891}
24892
24893impl Pmccntr {
24894 pub const CCNT_SHIFT: u32 = 0;
24896 pub const CCNT_MASK: u64 = 0b1111111111111111111111111111111111111111111111111111111111111111;
24898
24899 pub const fn ccnt(self) -> u64 {
24901 ((self.bits() >> Self::CCNT_SHIFT)
24902 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
24903 }
24904
24905 pub const fn set_ccnt(&mut self, value: u64) {
24907 let offset = Self::CCNT_SHIFT;
24908 assert!(value & (Self::CCNT_MASK as u64) == value);
24909 *self = Self::from_bits_retain(
24910 (self.bits() & !(Self::CCNT_MASK << offset)) | ((value as u64) << offset),
24911 );
24912 }
24913
24914 pub const fn with_ccnt(mut self, value: u64) -> Self {
24916 self.set_ccnt(value);
24917 self
24918 }
24919}
24920
24921bitflags! {
24922 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
24924 #[repr(transparent)]
24925 pub struct Pmceid0: u32 {
24926 const ID0 = 1 << 0;
24928 const ID1 = 1 << 1;
24930 const ID2 = 1 << 2;
24932 const ID3 = 1 << 3;
24934 const ID4 = 1 << 4;
24936 const ID5 = 1 << 5;
24938 const ID6 = 1 << 6;
24940 const ID7 = 1 << 7;
24942 const ID8 = 1 << 8;
24944 const ID9 = 1 << 9;
24946 const ID10 = 1 << 10;
24948 const ID11 = 1 << 11;
24950 const ID12 = 1 << 12;
24952 const ID13 = 1 << 13;
24954 const ID14 = 1 << 14;
24956 const ID15 = 1 << 15;
24958 const ID16 = 1 << 16;
24960 const ID17 = 1 << 17;
24962 const ID18 = 1 << 18;
24964 const ID19 = 1 << 19;
24966 const ID20 = 1 << 20;
24968 const ID21 = 1 << 21;
24970 const ID22 = 1 << 22;
24972 const ID23 = 1 << 23;
24974 const ID24 = 1 << 24;
24976 const ID25 = 1 << 25;
24978 const ID26 = 1 << 26;
24980 const ID27 = 1 << 27;
24982 const ID28 = 1 << 28;
24984 const ID29 = 1 << 29;
24986 const ID30 = 1 << 30;
24988 const ID31 = 1 << 31;
24990 }
24991}
24992
24993impl Pmceid0 {
24994 pub const ID_SHIFT: u32 = 0;
24996}
24997
24998bitflags! {
24999 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25001 #[repr(transparent)]
25002 pub struct Pmceid1: u32 {
25003 const ID0 = 1 << 0;
25005 const ID1 = 1 << 1;
25007 const ID2 = 1 << 2;
25009 const ID3 = 1 << 3;
25011 const ID4 = 1 << 4;
25013 const ID5 = 1 << 5;
25015 const ID6 = 1 << 6;
25017 const ID7 = 1 << 7;
25019 const ID8 = 1 << 8;
25021 const ID9 = 1 << 9;
25023 const ID10 = 1 << 10;
25025 const ID11 = 1 << 11;
25027 const ID12 = 1 << 12;
25029 const ID13 = 1 << 13;
25031 const ID14 = 1 << 14;
25033 const ID15 = 1 << 15;
25035 const ID16 = 1 << 16;
25037 const ID17 = 1 << 17;
25039 const ID18 = 1 << 18;
25041 const ID19 = 1 << 19;
25043 const ID20 = 1 << 20;
25045 const ID21 = 1 << 21;
25047 const ID22 = 1 << 22;
25049 const ID23 = 1 << 23;
25051 const ID24 = 1 << 24;
25053 const ID25 = 1 << 25;
25055 const ID26 = 1 << 26;
25057 const ID27 = 1 << 27;
25059 const ID28 = 1 << 28;
25061 const ID29 = 1 << 29;
25063 const ID30 = 1 << 30;
25065 const ID31 = 1 << 31;
25067 }
25068}
25069
25070impl Pmceid1 {
25071 pub const ID_SHIFT: u32 = 0;
25073}
25074
25075bitflags! {
25076 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25078 #[repr(transparent)]
25079 pub struct Pmceid2: u32 {
25080 const IDHI0 = 1 << 0;
25082 const IDHI1 = 1 << 1;
25084 const IDHI2 = 1 << 2;
25086 const IDHI3 = 1 << 3;
25088 const IDHI4 = 1 << 4;
25090 const IDHI5 = 1 << 5;
25092 const IDHI6 = 1 << 6;
25094 const IDHI7 = 1 << 7;
25096 const IDHI8 = 1 << 8;
25098 const IDHI9 = 1 << 9;
25100 const IDHI10 = 1 << 10;
25102 const IDHI11 = 1 << 11;
25104 const IDHI12 = 1 << 12;
25106 const IDHI13 = 1 << 13;
25108 const IDHI14 = 1 << 14;
25110 const IDHI15 = 1 << 15;
25112 const IDHI16 = 1 << 16;
25114 const IDHI17 = 1 << 17;
25116 const IDHI18 = 1 << 18;
25118 const IDHI19 = 1 << 19;
25120 const IDHI20 = 1 << 20;
25122 const IDHI21 = 1 << 21;
25124 const IDHI22 = 1 << 22;
25126 const IDHI23 = 1 << 23;
25128 const IDHI24 = 1 << 24;
25130 const IDHI25 = 1 << 25;
25132 const IDHI26 = 1 << 26;
25134 const IDHI27 = 1 << 27;
25136 const IDHI28 = 1 << 28;
25138 const IDHI29 = 1 << 29;
25140 const IDHI30 = 1 << 30;
25142 const IDHI31 = 1 << 31;
25144 }
25145}
25146
25147impl Pmceid2 {
25148 pub const IDHI_SHIFT: u32 = 0;
25150}
25151
25152bitflags! {
25153 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25155 #[repr(transparent)]
25156 pub struct Pmceid3: u32 {
25157 const IDHI0 = 1 << 0;
25159 const IDHI1 = 1 << 1;
25161 const IDHI2 = 1 << 2;
25163 const IDHI3 = 1 << 3;
25165 const IDHI4 = 1 << 4;
25167 const IDHI5 = 1 << 5;
25169 const IDHI6 = 1 << 6;
25171 const IDHI7 = 1 << 7;
25173 const IDHI8 = 1 << 8;
25175 const IDHI9 = 1 << 9;
25177 const IDHI10 = 1 << 10;
25179 const IDHI11 = 1 << 11;
25181 const IDHI12 = 1 << 12;
25183 const IDHI13 = 1 << 13;
25185 const IDHI14 = 1 << 14;
25187 const IDHI15 = 1 << 15;
25189 const IDHI16 = 1 << 16;
25191 const IDHI17 = 1 << 17;
25193 const IDHI18 = 1 << 18;
25195 const IDHI19 = 1 << 19;
25197 const IDHI20 = 1 << 20;
25199 const IDHI21 = 1 << 21;
25201 const IDHI22 = 1 << 22;
25203 const IDHI23 = 1 << 23;
25205 const IDHI24 = 1 << 24;
25207 const IDHI25 = 1 << 25;
25209 const IDHI26 = 1 << 26;
25211 const IDHI27 = 1 << 27;
25213 const IDHI28 = 1 << 28;
25215 const IDHI29 = 1 << 29;
25217 const IDHI30 = 1 << 30;
25219 const IDHI31 = 1 << 31;
25221 }
25222}
25223
25224impl Pmceid3 {
25225 pub const IDHI_SHIFT: u32 = 0;
25227}
25228
25229bitflags! {
25230 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25232 #[repr(transparent)]
25233 pub struct Pmcntenclr: u32 {
25234 const P0 = 1 << 0;
25236 const P1 = 1 << 1;
25238 const P2 = 1 << 2;
25240 const P3 = 1 << 3;
25242 const P4 = 1 << 4;
25244 const P5 = 1 << 5;
25246 const P6 = 1 << 6;
25248 const P7 = 1 << 7;
25250 const P8 = 1 << 8;
25252 const P9 = 1 << 9;
25254 const P10 = 1 << 10;
25256 const P11 = 1 << 11;
25258 const P12 = 1 << 12;
25260 const P13 = 1 << 13;
25262 const P14 = 1 << 14;
25264 const P15 = 1 << 15;
25266 const P16 = 1 << 16;
25268 const P17 = 1 << 17;
25270 const P18 = 1 << 18;
25272 const P19 = 1 << 19;
25274 const P20 = 1 << 20;
25276 const P21 = 1 << 21;
25278 const P22 = 1 << 22;
25280 const P23 = 1 << 23;
25282 const P24 = 1 << 24;
25284 const P25 = 1 << 25;
25286 const P26 = 1 << 26;
25288 const P27 = 1 << 27;
25290 const P28 = 1 << 28;
25292 const P29 = 1 << 29;
25294 const P30 = 1 << 30;
25296 const C = 1 << 31;
25298 }
25299}
25300
25301impl Pmcntenclr {
25302 pub const P_SHIFT: u32 = 0;
25304 pub const C_SHIFT: u32 = 31;
25306}
25307
25308bitflags! {
25309 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25311 #[repr(transparent)]
25312 pub struct Pmcntenset: u32 {
25313 const P0 = 1 << 0;
25315 const P1 = 1 << 1;
25317 const P2 = 1 << 2;
25319 const P3 = 1 << 3;
25321 const P4 = 1 << 4;
25323 const P5 = 1 << 5;
25325 const P6 = 1 << 6;
25327 const P7 = 1 << 7;
25329 const P8 = 1 << 8;
25331 const P9 = 1 << 9;
25333 const P10 = 1 << 10;
25335 const P11 = 1 << 11;
25337 const P12 = 1 << 12;
25339 const P13 = 1 << 13;
25341 const P14 = 1 << 14;
25343 const P15 = 1 << 15;
25345 const P16 = 1 << 16;
25347 const P17 = 1 << 17;
25349 const P18 = 1 << 18;
25351 const P19 = 1 << 19;
25353 const P20 = 1 << 20;
25355 const P21 = 1 << 21;
25357 const P22 = 1 << 22;
25359 const P23 = 1 << 23;
25361 const P24 = 1 << 24;
25363 const P25 = 1 << 25;
25365 const P26 = 1 << 26;
25367 const P27 = 1 << 27;
25369 const P28 = 1 << 28;
25371 const P29 = 1 << 29;
25373 const P30 = 1 << 30;
25375 const C = 1 << 31;
25377 }
25378}
25379
25380impl Pmcntenset {
25381 pub const P_SHIFT: u32 = 0;
25383 pub const C_SHIFT: u32 = 31;
25385}
25386
25387bitflags! {
25388 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25390 #[repr(transparent)]
25391 pub struct Pmcr: u32 {
25392 const E = 1 << 0;
25394 const P = 1 << 1;
25396 const C = 1 << 2;
25398 const D = 1 << 3;
25400 const X = 1 << 4;
25402 const DP = 1 << 5;
25404 const LC = 1 << 6;
25406 const LP = 1 << 7;
25408 const FZO = 1 << 9;
25410 }
25411}
25412
25413impl Pmcr {
25414 pub const E_SHIFT: u32 = 0;
25416 pub const P_SHIFT: u32 = 1;
25418 pub const C_SHIFT: u32 = 2;
25420 pub const D_SHIFT: u32 = 3;
25422 pub const X_SHIFT: u32 = 4;
25424 pub const DP_SHIFT: u32 = 5;
25426 pub const LC_SHIFT: u32 = 6;
25428 pub const LP_SHIFT: u32 = 7;
25430 pub const FZO_SHIFT: u32 = 9;
25432 pub const N_SHIFT: u32 = 11;
25434 pub const N_MASK: u32 = 0b11111;
25436 pub const IDCODE_SHIFT: u32 = 16;
25438 pub const IDCODE_MASK: u32 = 0b11111111;
25440 pub const IMP_SHIFT: u32 = 24;
25442 pub const IMP_MASK: u32 = 0b11111111;
25444
25445 pub const fn n(self) -> u8 {
25447 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
25448 }
25449
25450 pub const fn set_n(&mut self, value: u8) {
25452 let offset = Self::N_SHIFT;
25453 assert!(value & (Self::N_MASK as u8) == value);
25454 *self = Self::from_bits_retain(
25455 (self.bits() & !(Self::N_MASK << offset)) | ((value as u32) << offset),
25456 );
25457 }
25458
25459 pub const fn with_n(mut self, value: u8) -> Self {
25461 self.set_n(value);
25462 self
25463 }
25464
25465 pub const fn idcode(self) -> u8 {
25467 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
25468 }
25469
25470 pub const fn set_idcode(&mut self, value: u8) {
25472 let offset = Self::IDCODE_SHIFT;
25473 assert!(value & (Self::IDCODE_MASK as u8) == value);
25474 *self = Self::from_bits_retain(
25475 (self.bits() & !(Self::IDCODE_MASK << offset)) | ((value as u32) << offset),
25476 );
25477 }
25478
25479 pub const fn with_idcode(mut self, value: u8) -> Self {
25481 self.set_idcode(value);
25482 self
25483 }
25484
25485 pub const fn imp(self) -> u8 {
25487 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
25488 }
25489
25490 pub const fn set_imp(&mut self, value: u8) {
25492 let offset = Self::IMP_SHIFT;
25493 assert!(value & (Self::IMP_MASK as u8) == value);
25494 *self = Self::from_bits_retain(
25495 (self.bits() & !(Self::IMP_MASK << offset)) | ((value as u32) << offset),
25496 );
25497 }
25498
25499 pub const fn with_imp(mut self, value: u8) -> Self {
25501 self.set_imp(value);
25502 self
25503 }
25504}
25505
25506bitflags! {
25507 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25509 #[repr(transparent)]
25510 pub struct PmcrEl0: u64 {
25511 const E = 1 << 0;
25513 const P = 1 << 1;
25515 const C = 1 << 2;
25517 const D = 1 << 3;
25519 const X = 1 << 4;
25521 const DP = 1 << 5;
25523 const LC = 1 << 6;
25525 const LP = 1 << 7;
25527 const FZO = 1 << 9;
25529 const FZS = 1 << 32;
25531 }
25532}
25533
25534impl PmcrEl0 {
25535 pub const E_SHIFT: u32 = 0;
25537 pub const P_SHIFT: u32 = 1;
25539 pub const C_SHIFT: u32 = 2;
25541 pub const D_SHIFT: u32 = 3;
25543 pub const X_SHIFT: u32 = 4;
25545 pub const DP_SHIFT: u32 = 5;
25547 pub const LC_SHIFT: u32 = 6;
25549 pub const LP_SHIFT: u32 = 7;
25551 pub const FZO_SHIFT: u32 = 9;
25553 pub const N_SHIFT: u32 = 11;
25555 pub const N_MASK: u64 = 0b11111;
25557 pub const IDCODE_SHIFT: u32 = 16;
25559 pub const IDCODE_MASK: u64 = 0b11111111;
25561 pub const IMP_SHIFT: u32 = 24;
25563 pub const IMP_MASK: u64 = 0b11111111;
25565 pub const FZS_SHIFT: u32 = 32;
25567
25568 pub const fn n(self) -> u8 {
25570 ((self.bits() >> Self::N_SHIFT) & 0b11111) as u8
25571 }
25572
25573 pub const fn set_n(&mut self, value: u8) {
25575 let offset = Self::N_SHIFT;
25576 assert!(value & (Self::N_MASK as u8) == value);
25577 *self = Self::from_bits_retain(
25578 (self.bits() & !(Self::N_MASK << offset)) | ((value as u64) << offset),
25579 );
25580 }
25581
25582 pub const fn with_n(mut self, value: u8) -> Self {
25584 self.set_n(value);
25585 self
25586 }
25587
25588 pub const fn idcode(self) -> u8 {
25590 ((self.bits() >> Self::IDCODE_SHIFT) & 0b11111111) as u8
25591 }
25592
25593 pub const fn set_idcode(&mut self, value: u8) {
25595 let offset = Self::IDCODE_SHIFT;
25596 assert!(value & (Self::IDCODE_MASK as u8) == value);
25597 *self = Self::from_bits_retain(
25598 (self.bits() & !(Self::IDCODE_MASK << offset)) | ((value as u64) << offset),
25599 );
25600 }
25601
25602 pub const fn with_idcode(mut self, value: u8) -> Self {
25604 self.set_idcode(value);
25605 self
25606 }
25607
25608 pub const fn imp(self) -> u8 {
25610 ((self.bits() >> Self::IMP_SHIFT) & 0b11111111) as u8
25611 }
25612
25613 pub const fn set_imp(&mut self, value: u8) {
25615 let offset = Self::IMP_SHIFT;
25616 assert!(value & (Self::IMP_MASK as u8) == value);
25617 *self = Self::from_bits_retain(
25618 (self.bits() & !(Self::IMP_MASK << offset)) | ((value as u64) << offset),
25619 );
25620 }
25621
25622 pub const fn with_imp(mut self, value: u8) -> Self {
25624 self.set_imp(value);
25625 self
25626 }
25627}
25628
25629bitflags! {
25630 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25632 #[repr(transparent)]
25633 pub struct Pmintenclr: u32 {
25634 const P0 = 1 << 0;
25636 const P1 = 1 << 1;
25638 const P2 = 1 << 2;
25640 const P3 = 1 << 3;
25642 const P4 = 1 << 4;
25644 const P5 = 1 << 5;
25646 const P6 = 1 << 6;
25648 const P7 = 1 << 7;
25650 const P8 = 1 << 8;
25652 const P9 = 1 << 9;
25654 const P10 = 1 << 10;
25656 const P11 = 1 << 11;
25658 const P12 = 1 << 12;
25660 const P13 = 1 << 13;
25662 const P14 = 1 << 14;
25664 const P15 = 1 << 15;
25666 const P16 = 1 << 16;
25668 const P17 = 1 << 17;
25670 const P18 = 1 << 18;
25672 const P19 = 1 << 19;
25674 const P20 = 1 << 20;
25676 const P21 = 1 << 21;
25678 const P22 = 1 << 22;
25680 const P23 = 1 << 23;
25682 const P24 = 1 << 24;
25684 const P25 = 1 << 25;
25686 const P26 = 1 << 26;
25688 const P27 = 1 << 27;
25690 const P28 = 1 << 28;
25692 const P29 = 1 << 29;
25694 const P30 = 1 << 30;
25696 const C = 1 << 31;
25698 }
25699}
25700
25701impl Pmintenclr {
25702 pub const P_SHIFT: u32 = 0;
25704 pub const C_SHIFT: u32 = 31;
25706}
25707
25708bitflags! {
25709 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25711 #[repr(transparent)]
25712 pub struct Pmintenset: u32 {
25713 const P0 = 1 << 0;
25715 const P1 = 1 << 1;
25717 const P2 = 1 << 2;
25719 const P3 = 1 << 3;
25721 const P4 = 1 << 4;
25723 const P5 = 1 << 5;
25725 const P6 = 1 << 6;
25727 const P7 = 1 << 7;
25729 const P8 = 1 << 8;
25731 const P9 = 1 << 9;
25733 const P10 = 1 << 10;
25735 const P11 = 1 << 11;
25737 const P12 = 1 << 12;
25739 const P13 = 1 << 13;
25741 const P14 = 1 << 14;
25743 const P15 = 1 << 15;
25745 const P16 = 1 << 16;
25747 const P17 = 1 << 17;
25749 const P18 = 1 << 18;
25751 const P19 = 1 << 19;
25753 const P20 = 1 << 20;
25755 const P21 = 1 << 21;
25757 const P22 = 1 << 22;
25759 const P23 = 1 << 23;
25761 const P24 = 1 << 24;
25763 const P25 = 1 << 25;
25765 const P26 = 1 << 26;
25767 const P27 = 1 << 27;
25769 const P28 = 1 << 28;
25771 const P29 = 1 << 29;
25773 const P30 = 1 << 30;
25775 const C = 1 << 31;
25777 }
25778}
25779
25780impl Pmintenset {
25781 pub const P_SHIFT: u32 = 0;
25783 pub const C_SHIFT: u32 = 31;
25785}
25786
25787bitflags! {
25788 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25790 #[repr(transparent)]
25791 pub struct Pmmir: u32 {
25792 }
25793}
25794
25795impl Pmmir {
25796 pub const SLOTS_SHIFT: u32 = 0;
25798 pub const SLOTS_MASK: u32 = 0b11111111;
25800 pub const BUS_SLOTS_SHIFT: u32 = 8;
25802 pub const BUS_SLOTS_MASK: u32 = 0b11111111;
25804 pub const BUS_WIDTH_SHIFT: u32 = 16;
25806 pub const BUS_WIDTH_MASK: u32 = 0b1111;
25808 pub const THWIDTH_SHIFT: u32 = 20;
25810 pub const THWIDTH_MASK: u32 = 0b1111;
25812 pub const EDGE_SHIFT: u32 = 24;
25814 pub const EDGE_MASK: u32 = 0b1111;
25816
25817 pub const fn slots(self) -> u8 {
25819 ((self.bits() >> Self::SLOTS_SHIFT) & 0b11111111) as u8
25820 }
25821
25822 pub const fn set_slots(&mut self, value: u8) {
25824 let offset = Self::SLOTS_SHIFT;
25825 assert!(value & (Self::SLOTS_MASK as u8) == value);
25826 *self = Self::from_bits_retain(
25827 (self.bits() & !(Self::SLOTS_MASK << offset)) | ((value as u32) << offset),
25828 );
25829 }
25830
25831 pub const fn with_slots(mut self, value: u8) -> Self {
25833 self.set_slots(value);
25834 self
25835 }
25836
25837 pub const fn bus_slots(self) -> u8 {
25839 ((self.bits() >> Self::BUS_SLOTS_SHIFT) & 0b11111111) as u8
25840 }
25841
25842 pub const fn set_bus_slots(&mut self, value: u8) {
25844 let offset = Self::BUS_SLOTS_SHIFT;
25845 assert!(value & (Self::BUS_SLOTS_MASK as u8) == value);
25846 *self = Self::from_bits_retain(
25847 (self.bits() & !(Self::BUS_SLOTS_MASK << offset)) | ((value as u32) << offset),
25848 );
25849 }
25850
25851 pub const fn with_bus_slots(mut self, value: u8) -> Self {
25853 self.set_bus_slots(value);
25854 self
25855 }
25856
25857 pub const fn bus_width(self) -> u8 {
25859 ((self.bits() >> Self::BUS_WIDTH_SHIFT) & 0b1111) as u8
25860 }
25861
25862 pub const fn set_bus_width(&mut self, value: u8) {
25864 let offset = Self::BUS_WIDTH_SHIFT;
25865 assert!(value & (Self::BUS_WIDTH_MASK as u8) == value);
25866 *self = Self::from_bits_retain(
25867 (self.bits() & !(Self::BUS_WIDTH_MASK << offset)) | ((value as u32) << offset),
25868 );
25869 }
25870
25871 pub const fn with_bus_width(mut self, value: u8) -> Self {
25873 self.set_bus_width(value);
25874 self
25875 }
25876
25877 pub const fn thwidth(self) -> u8 {
25879 ((self.bits() >> Self::THWIDTH_SHIFT) & 0b1111) as u8
25880 }
25881
25882 pub const fn set_thwidth(&mut self, value: u8) {
25884 let offset = Self::THWIDTH_SHIFT;
25885 assert!(value & (Self::THWIDTH_MASK as u8) == value);
25886 *self = Self::from_bits_retain(
25887 (self.bits() & !(Self::THWIDTH_MASK << offset)) | ((value as u32) << offset),
25888 );
25889 }
25890
25891 pub const fn with_thwidth(mut self, value: u8) -> Self {
25893 self.set_thwidth(value);
25894 self
25895 }
25896
25897 pub const fn edge(self) -> u8 {
25899 ((self.bits() >> Self::EDGE_SHIFT) & 0b1111) as u8
25900 }
25901
25902 pub const fn set_edge(&mut self, value: u8) {
25904 let offset = Self::EDGE_SHIFT;
25905 assert!(value & (Self::EDGE_MASK as u8) == value);
25906 *self = Self::from_bits_retain(
25907 (self.bits() & !(Self::EDGE_MASK << offset)) | ((value as u32) << offset),
25908 );
25909 }
25910
25911 pub const fn with_edge(mut self, value: u8) -> Self {
25913 self.set_edge(value);
25914 self
25915 }
25916}
25917
25918bitflags! {
25919 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
25921 #[repr(transparent)]
25922 pub struct Pmovsr: u32 {
25923 const P0 = 1 << 0;
25925 const P1 = 1 << 1;
25927 const P2 = 1 << 2;
25929 const P3 = 1 << 3;
25931 const P4 = 1 << 4;
25933 const P5 = 1 << 5;
25935 const P6 = 1 << 6;
25937 const P7 = 1 << 7;
25939 const P8 = 1 << 8;
25941 const P9 = 1 << 9;
25943 const P10 = 1 << 10;
25945 const P11 = 1 << 11;
25947 const P12 = 1 << 12;
25949 const P13 = 1 << 13;
25951 const P14 = 1 << 14;
25953 const P15 = 1 << 15;
25955 const P16 = 1 << 16;
25957 const P17 = 1 << 17;
25959 const P18 = 1 << 18;
25961 const P19 = 1 << 19;
25963 const P20 = 1 << 20;
25965 const P21 = 1 << 21;
25967 const P22 = 1 << 22;
25969 const P23 = 1 << 23;
25971 const P24 = 1 << 24;
25973 const P25 = 1 << 25;
25975 const P26 = 1 << 26;
25977 const P27 = 1 << 27;
25979 const P28 = 1 << 28;
25981 const P29 = 1 << 29;
25983 const P30 = 1 << 30;
25985 const C = 1 << 31;
25987 }
25988}
25989
25990impl Pmovsr {
25991 pub const P_SHIFT: u32 = 0;
25993 pub const C_SHIFT: u32 = 31;
25995}
25996
25997bitflags! {
25998 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26000 #[repr(transparent)]
26001 pub struct Pmovsset: u32 {
26002 const P0 = 1 << 0;
26004 const P1 = 1 << 1;
26006 const P2 = 1 << 2;
26008 const P3 = 1 << 3;
26010 const P4 = 1 << 4;
26012 const P5 = 1 << 5;
26014 const P6 = 1 << 6;
26016 const P7 = 1 << 7;
26018 const P8 = 1 << 8;
26020 const P9 = 1 << 9;
26022 const P10 = 1 << 10;
26024 const P11 = 1 << 11;
26026 const P12 = 1 << 12;
26028 const P13 = 1 << 13;
26030 const P14 = 1 << 14;
26032 const P15 = 1 << 15;
26034 const P16 = 1 << 16;
26036 const P17 = 1 << 17;
26038 const P18 = 1 << 18;
26040 const P19 = 1 << 19;
26042 const P20 = 1 << 20;
26044 const P21 = 1 << 21;
26046 const P22 = 1 << 22;
26048 const P23 = 1 << 23;
26050 const P24 = 1 << 24;
26052 const P25 = 1 << 25;
26054 const P26 = 1 << 26;
26056 const P27 = 1 << 27;
26058 const P28 = 1 << 28;
26060 const P29 = 1 << 29;
26062 const P30 = 1 << 30;
26064 const C = 1 << 31;
26066 }
26067}
26068
26069impl Pmovsset {
26070 pub const P_SHIFT: u32 = 0;
26072 pub const C_SHIFT: u32 = 31;
26074}
26075
26076bitflags! {
26077 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26079 #[repr(transparent)]
26080 pub struct Pmselr: u32 {
26081 }
26082}
26083
26084impl Pmselr {
26085 pub const SEL_SHIFT: u32 = 0;
26087 pub const SEL_MASK: u32 = 0b11111;
26089
26090 pub const fn sel(self) -> u8 {
26092 ((self.bits() >> Self::SEL_SHIFT) & 0b11111) as u8
26093 }
26094
26095 pub const fn set_sel(&mut self, value: u8) {
26097 let offset = Self::SEL_SHIFT;
26098 assert!(value & (Self::SEL_MASK as u8) == value);
26099 *self = Self::from_bits_retain(
26100 (self.bits() & !(Self::SEL_MASK << offset)) | ((value as u32) << offset),
26101 );
26102 }
26103
26104 pub const fn with_sel(mut self, value: u8) -> Self {
26106 self.set_sel(value);
26107 self
26108 }
26109}
26110
26111bitflags! {
26112 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26114 #[repr(transparent)]
26115 pub struct Pmswinc: u32 {
26116 const P0 = 1 << 0;
26118 const P1 = 1 << 1;
26120 const P2 = 1 << 2;
26122 const P3 = 1 << 3;
26124 const P4 = 1 << 4;
26126 const P5 = 1 << 5;
26128 const P6 = 1 << 6;
26130 const P7 = 1 << 7;
26132 const P8 = 1 << 8;
26134 const P9 = 1 << 9;
26136 const P10 = 1 << 10;
26138 const P11 = 1 << 11;
26140 const P12 = 1 << 12;
26142 const P13 = 1 << 13;
26144 const P14 = 1 << 14;
26146 const P15 = 1 << 15;
26148 const P16 = 1 << 16;
26150 const P17 = 1 << 17;
26152 const P18 = 1 << 18;
26154 const P19 = 1 << 19;
26156 const P20 = 1 << 20;
26158 const P21 = 1 << 21;
26160 const P22 = 1 << 22;
26162 const P23 = 1 << 23;
26164 const P24 = 1 << 24;
26166 const P25 = 1 << 25;
26168 const P26 = 1 << 26;
26170 const P27 = 1 << 27;
26172 const P28 = 1 << 28;
26174 const P29 = 1 << 29;
26176 const P30 = 1 << 30;
26178 }
26179}
26180
26181impl Pmswinc {
26182 pub const P_SHIFT: u32 = 0;
26184}
26185
26186bitflags! {
26187 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26189 #[repr(transparent)]
26190 pub struct Pmuserenr: u32 {
26191 const EN = 1 << 0;
26193 const SW = 1 << 1;
26195 const CR = 1 << 2;
26197 const ER = 1 << 3;
26199 const TID = 1 << 6;
26201 }
26202}
26203
26204impl Pmuserenr {
26205 pub const EN_SHIFT: u32 = 0;
26207 pub const SW_SHIFT: u32 = 1;
26209 pub const CR_SHIFT: u32 = 2;
26211 pub const ER_SHIFT: u32 = 3;
26213 pub const TID_SHIFT: u32 = 6;
26215}
26216
26217bitflags! {
26218 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26220 #[repr(transparent)]
26221 pub struct Pmxevtyper: u32 {
26222 }
26223}
26224
26225impl Pmxevtyper {
26226 pub const ETR_SHIFT: u32 = 0;
26228 pub const ETR_MASK: u32 = 0b11111111111111111111111111111111;
26230
26231 pub const fn etr(self) -> u32 {
26233 ((self.bits() >> Self::ETR_SHIFT) & 0b11111111111111111111111111111111) as u32
26234 }
26235
26236 pub const fn set_etr(&mut self, value: u32) {
26238 let offset = Self::ETR_SHIFT;
26239 assert!(value & (Self::ETR_MASK as u32) == value);
26240 *self = Self::from_bits_retain(
26241 (self.bits() & !(Self::ETR_MASK << offset)) | ((value as u32) << offset),
26242 );
26243 }
26244
26245 pub const fn with_etr(mut self, value: u32) -> Self {
26247 self.set_etr(value);
26248 self
26249 }
26250}
26251
26252bitflags! {
26253 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26255 #[repr(transparent)]
26256 pub struct Prrr: u32 {
26257 const DS0 = 1 << 16;
26259 const DS1 = 1 << 17;
26261 const NS0 = 1 << 18;
26263 const NS1 = 1 << 19;
26265 const NOS0 = 1 << 24;
26267 const NOS1 = 1 << 25;
26269 const NOS2 = 1 << 26;
26271 const NOS3 = 1 << 27;
26273 const NOS4 = 1 << 28;
26275 const NOS5 = 1 << 29;
26277 const NOS6 = 1 << 30;
26279 const NOS7 = 1 << 31;
26281 }
26282}
26283
26284impl Prrr {
26285 pub const TR_SHIFT: u32 = 0;
26287 pub const TR_MASK: u32 = 0b11;
26289 pub const DS0_SHIFT: u32 = 16;
26291 pub const DS1_SHIFT: u32 = 17;
26293 pub const NS0_SHIFT: u32 = 18;
26295 pub const NS1_SHIFT: u32 = 19;
26297 pub const NOS_SHIFT: u32 = 24;
26299
26300 pub const fn tr(self, n: u32) -> u8 {
26302 assert!(n < 8);
26303 ((self.bits() >> (Self::TR_SHIFT + (n - 0) * 2)) & 0b11) as u8
26304 }
26305
26306 pub const fn set_tr(&mut self, n: u32, value: u8) {
26308 assert!(n < 8);
26309 let offset = Self::TR_SHIFT + (n - 0) * 2;
26310 assert!(value & (Self::TR_MASK as u8) == value);
26311 *self = Self::from_bits_retain(
26312 (self.bits() & !(Self::TR_MASK << offset)) | ((value as u32) << offset),
26313 );
26314 }
26315
26316 pub const fn with_tr(mut self, n: u32, value: u8) -> Self {
26318 self.set_tr(n, value);
26319 self
26320 }
26321}
26322
26323#[cfg(feature = "el1")]
26324bitflags! {
26325 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26327 #[repr(transparent)]
26328 pub struct RgsrEl1: u64 {
26329 }
26330}
26331
26332#[cfg(feature = "el1")]
26333impl RgsrEl1 {
26334 pub const TAG_SHIFT: u32 = 0;
26336 pub const TAG_MASK: u64 = 0b1111;
26338 pub const SEED_SHIFT: u32 = 8;
26340 pub const SEED_MASK: u64 = 0b1111111111111111;
26342
26343 pub const fn tag(self) -> u8 {
26345 ((self.bits() >> Self::TAG_SHIFT) & 0b1111) as u8
26346 }
26347
26348 pub const fn set_tag(&mut self, value: u8) {
26350 let offset = Self::TAG_SHIFT;
26351 assert!(value & (Self::TAG_MASK as u8) == value);
26352 *self = Self::from_bits_retain(
26353 (self.bits() & !(Self::TAG_MASK << offset)) | ((value as u64) << offset),
26354 );
26355 }
26356
26357 pub const fn with_tag(mut self, value: u8) -> Self {
26359 self.set_tag(value);
26360 self
26361 }
26362
26363 pub const fn seed(self) -> u16 {
26365 ((self.bits() >> Self::SEED_SHIFT) & 0b1111111111111111) as u16
26366 }
26367
26368 pub const fn set_seed(&mut self, value: u16) {
26370 let offset = Self::SEED_SHIFT;
26371 assert!(value & (Self::SEED_MASK as u16) == value);
26372 *self = Self::from_bits_retain(
26373 (self.bits() & !(Self::SEED_MASK << offset)) | ((value as u64) << offset),
26374 );
26375 }
26376
26377 pub const fn with_seed(mut self, value: u16) -> Self {
26379 self.set_seed(value);
26380 self
26381 }
26382}
26383
26384bitflags! {
26385 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26387 #[repr(transparent)]
26388 pub struct Rmr: u32 {
26389 const AA64 = 1 << 0;
26391 const RR = 1 << 1;
26393 }
26394}
26395
26396impl Rmr {
26397 pub const AA64_SHIFT: u32 = 0;
26399 pub const RR_SHIFT: u32 = 1;
26401}
26402
26403bitflags! {
26404 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26406 #[repr(transparent)]
26407 pub struct Rvbar: u32 {
26408 const RES1 = 0b1;
26410 }
26411}
26412
26413impl Rvbar {
26414 pub const RESETADDRESS_SHIFT: u32 = 1;
26416 pub const RESETADDRESS_MASK: u32 = 0b1111111111111111111111111111111;
26418
26419 pub const fn resetaddress(self) -> u32 {
26421 ((self.bits() >> Self::RESETADDRESS_SHIFT) & 0b1111111111111111111111111111111) as u32
26422 }
26423
26424 pub const fn set_resetaddress(&mut self, value: u32) {
26426 let offset = Self::RESETADDRESS_SHIFT;
26427 assert!(value & (Self::RESETADDRESS_MASK as u32) == value);
26428 *self = Self::from_bits_retain(
26429 (self.bits() & !(Self::RESETADDRESS_MASK << offset)) | ((value as u32) << offset),
26430 );
26431 }
26432
26433 pub const fn with_resetaddress(mut self, value: u32) -> Self {
26435 self.set_resetaddress(value);
26436 self
26437 }
26438}
26439
26440bitflags! {
26441 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26443 #[repr(transparent)]
26444 pub struct Scr: u32 {
26445 const NS = 1 << 0;
26447 const IRQ = 1 << 1;
26449 const FIQ = 1 << 2;
26451 const EA = 1 << 3;
26453 const FW = 1 << 4;
26455 const AW = 1 << 5;
26457 const NET = 1 << 6;
26459 const SCD = 1 << 7;
26461 const HCE = 1 << 8;
26463 const SIF = 1 << 9;
26465 const TWI = 1 << 12;
26467 const TWE = 1 << 13;
26469 const TERR = 1 << 15;
26471 }
26472}
26473
26474impl Scr {
26475 pub const NS_SHIFT: u32 = 0;
26477 pub const IRQ_SHIFT: u32 = 1;
26479 pub const FIQ_SHIFT: u32 = 2;
26481 pub const EA_SHIFT: u32 = 3;
26483 pub const FW_SHIFT: u32 = 4;
26485 pub const AW_SHIFT: u32 = 5;
26487 pub const NET_SHIFT: u32 = 6;
26489 pub const SCD_SHIFT: u32 = 7;
26491 pub const HCE_SHIFT: u32 = 8;
26493 pub const SIF_SHIFT: u32 = 9;
26495 pub const TWI_SHIFT: u32 = 12;
26497 pub const TWE_SHIFT: u32 = 13;
26499 pub const TERR_SHIFT: u32 = 15;
26501}
26502
26503#[cfg(feature = "el3")]
26504bitflags! {
26505 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26507 #[repr(transparent)]
26508 pub struct ScrEl3: u64 {
26509 const RES1 = 0b110000;
26511 const NS = 1 << 0;
26513 const IRQ = 1 << 1;
26515 const FIQ = 1 << 2;
26517 const EA = 1 << 3;
26519 const SMD = 1 << 7;
26521 const HCE = 1 << 8;
26523 const SIF = 1 << 9;
26525 const RW = 1 << 10;
26527 const ST = 1 << 11;
26529 const TWI = 1 << 12;
26531 const TWE = 1 << 13;
26533 const TLOR = 1 << 14;
26535 const TERR = 1 << 15;
26537 const APK = 1 << 16;
26539 const API = 1 << 17;
26541 const EEL2 = 1 << 18;
26543 const EASE = 1 << 19;
26545 const NMEA = 1 << 20;
26547 const FIEN = 1 << 21;
26549 const TID3 = 1 << 22;
26551 const TID5 = 1 << 23;
26553 const POE2EN = 1 << 24;
26555 const ENSCXT = 1 << 25;
26557 const ATA = 1 << 26;
26559 const FGTEN = 1 << 27;
26561 const ECVEN = 1 << 28;
26563 const TWEDEN = 1 << 29;
26565 const AMVOFFEN = 1 << 35;
26567 const ENAS0 = 1 << 36;
26569 const ADEN = 1 << 37;
26571 const HXEN = 1 << 38;
26573 const GCSEN = 1 << 39;
26575 const TRNDR = 1 << 40;
26577 const ENTP2 = 1 << 41;
26579 const RCWMASKEN = 1 << 42;
26581 const TCR2EN = 1 << 43;
26583 const SCTLR2EN = 1 << 44;
26585 const PIEN = 1 << 45;
26587 const AIEN = 1 << 46;
26589 const D128EN = 1 << 47;
26591 const GPF = 1 << 48;
26593 const MECEN = 1 << 49;
26595 const ENFPM = 1 << 50;
26597 const TMEA = 1 << 51;
26599 const TWERR = 1 << 52;
26601 const PFAREN = 1 << 53;
26603 const SRMASKEN = 1 << 54;
26605 const ENIDCP128 = 1 << 55;
26607 const VTLBIDEN = 1 << 56;
26609 const DSE = 1 << 57;
26611 const ENDSE = 1 << 58;
26613 const FGTEN2 = 1 << 59;
26615 const HDBSSEN = 1 << 60;
26617 const HACDBSEN = 1 << 61;
26619 const NSE = 1 << 62;
26621 const TPLIMEN = 1 << 63;
26623 }
26624}
26625
26626#[cfg(feature = "el3")]
26627impl ScrEl3 {
26628 pub const NS_SHIFT: u32 = 0;
26630 pub const IRQ_SHIFT: u32 = 1;
26632 pub const FIQ_SHIFT: u32 = 2;
26634 pub const EA_SHIFT: u32 = 3;
26636 pub const SMD_SHIFT: u32 = 7;
26638 pub const HCE_SHIFT: u32 = 8;
26640 pub const SIF_SHIFT: u32 = 9;
26642 pub const RW_SHIFT: u32 = 10;
26644 pub const ST_SHIFT: u32 = 11;
26646 pub const TWI_SHIFT: u32 = 12;
26648 pub const TWE_SHIFT: u32 = 13;
26650 pub const TLOR_SHIFT: u32 = 14;
26652 pub const TERR_SHIFT: u32 = 15;
26654 pub const APK_SHIFT: u32 = 16;
26656 pub const API_SHIFT: u32 = 17;
26658 pub const EEL2_SHIFT: u32 = 18;
26660 pub const EASE_SHIFT: u32 = 19;
26662 pub const NMEA_SHIFT: u32 = 20;
26664 pub const FIEN_SHIFT: u32 = 21;
26666 pub const TID3_SHIFT: u32 = 22;
26668 pub const TID5_SHIFT: u32 = 23;
26670 pub const POE2EN_SHIFT: u32 = 24;
26672 pub const ENSCXT_SHIFT: u32 = 25;
26674 pub const ATA_SHIFT: u32 = 26;
26676 pub const FGTEN_SHIFT: u32 = 27;
26678 pub const ECVEN_SHIFT: u32 = 28;
26680 pub const TWEDEN_SHIFT: u32 = 29;
26682 pub const TWEDEL_SHIFT: u32 = 30;
26684 pub const TWEDEL_MASK: u64 = 0b1111;
26686 pub const AMVOFFEN_SHIFT: u32 = 35;
26688 pub const ENAS0_SHIFT: u32 = 36;
26690 pub const ADEN_SHIFT: u32 = 37;
26692 pub const HXEN_SHIFT: u32 = 38;
26694 pub const GCSEN_SHIFT: u32 = 39;
26696 pub const TRNDR_SHIFT: u32 = 40;
26698 pub const ENTP2_SHIFT: u32 = 41;
26700 pub const RCWMASKEN_SHIFT: u32 = 42;
26702 pub const TCR2EN_SHIFT: u32 = 43;
26704 pub const SCTLR2EN_SHIFT: u32 = 44;
26706 pub const PIEN_SHIFT: u32 = 45;
26708 pub const AIEN_SHIFT: u32 = 46;
26710 pub const D128EN_SHIFT: u32 = 47;
26712 pub const GPF_SHIFT: u32 = 48;
26714 pub const MECEN_SHIFT: u32 = 49;
26716 pub const ENFPM_SHIFT: u32 = 50;
26718 pub const TMEA_SHIFT: u32 = 51;
26720 pub const TWERR_SHIFT: u32 = 52;
26722 pub const PFAREN_SHIFT: u32 = 53;
26724 pub const SRMASKEN_SHIFT: u32 = 54;
26726 pub const ENIDCP128_SHIFT: u32 = 55;
26728 pub const VTLBIDEN_SHIFT: u32 = 56;
26730 pub const DSE_SHIFT: u32 = 57;
26732 pub const ENDSE_SHIFT: u32 = 58;
26734 pub const FGTEN2_SHIFT: u32 = 59;
26736 pub const HDBSSEN_SHIFT: u32 = 60;
26738 pub const HACDBSEN_SHIFT: u32 = 61;
26740 pub const NSE_SHIFT: u32 = 62;
26742 pub const TPLIMEN_SHIFT: u32 = 63;
26744
26745 pub const fn twedel(self) -> u8 {
26747 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
26748 }
26749
26750 pub const fn set_twedel(&mut self, value: u8) {
26752 let offset = Self::TWEDEL_SHIFT;
26753 assert!(value & (Self::TWEDEL_MASK as u8) == value);
26754 *self = Self::from_bits_retain(
26755 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
26756 );
26757 }
26758
26759 pub const fn with_twedel(mut self, value: u8) -> Self {
26761 self.set_twedel(value);
26762 self
26763 }
26764}
26765
26766bitflags! {
26767 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26769 #[repr(transparent)]
26770 pub struct Sctlr: u32 {
26771 const RES1 = 0b10000000000100000000000;
26773 const M = 1 << 0;
26775 const A = 1 << 1;
26777 const C = 1 << 2;
26779 const NTLSMD = 1 << 3;
26781 const LSMAOE = 1 << 4;
26783 const CP15BEN = 1 << 5;
26785 const UNK = 1 << 6;
26787 const ITD = 1 << 7;
26789 const SED = 1 << 8;
26791 const ENRCTX = 1 << 10;
26793 const I = 1 << 12;
26795 const V = 1 << 13;
26797 const NTWI = 1 << 16;
26799 const NTWE = 1 << 18;
26801 const WXN = 1 << 19;
26803 const UWXN = 1 << 20;
26805 const SPAN = 1 << 23;
26807 const EE = 1 << 25;
26809 const TRE = 1 << 28;
26811 const AFE = 1 << 29;
26813 const TE = 1 << 30;
26815 const DSSBS = 1 << 31;
26817 }
26818}
26819
26820impl Sctlr {
26821 pub const M_SHIFT: u32 = 0;
26823 pub const A_SHIFT: u32 = 1;
26825 pub const C_SHIFT: u32 = 2;
26827 pub const NTLSMD_SHIFT: u32 = 3;
26829 pub const LSMAOE_SHIFT: u32 = 4;
26831 pub const CP15BEN_SHIFT: u32 = 5;
26833 pub const UNK_SHIFT: u32 = 6;
26835 pub const ITD_SHIFT: u32 = 7;
26837 pub const SED_SHIFT: u32 = 8;
26839 pub const ENRCTX_SHIFT: u32 = 10;
26841 pub const I_SHIFT: u32 = 12;
26843 pub const V_SHIFT: u32 = 13;
26845 pub const NTWI_SHIFT: u32 = 16;
26847 pub const NTWE_SHIFT: u32 = 18;
26849 pub const WXN_SHIFT: u32 = 19;
26851 pub const UWXN_SHIFT: u32 = 20;
26853 pub const SPAN_SHIFT: u32 = 23;
26855 pub const EE_SHIFT: u32 = 25;
26857 pub const TRE_SHIFT: u32 = 28;
26859 pub const AFE_SHIFT: u32 = 29;
26861 pub const TE_SHIFT: u32 = 30;
26863 pub const DSSBS_SHIFT: u32 = 31;
26865}
26866
26867#[cfg(feature = "el3")]
26868bitflags! {
26869 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26871 #[repr(transparent)]
26872 pub struct Sctlr2El3: u64 {
26873 const EMEC = 1 << 1;
26875 const ENADERR = 1 << 3;
26877 const ENANERR = 1 << 4;
26879 const ENPACM = 1 << 7;
26881 const CPTA = 1 << 9;
26883 const CPTM = 1 << 11;
26885 const DTZ = 1 << 14;
26887 const TEIS = 1 << 15;
26889 const TEOS = 1 << 16;
26891 const VT = 1 << 17;
26893 const BTD = 1 << 24;
26895 }
26896}
26897
26898#[cfg(feature = "el3")]
26899impl Sctlr2El3 {
26900 pub const EMEC_SHIFT: u32 = 1;
26902 pub const ENADERR_SHIFT: u32 = 3;
26904 pub const ENANERR_SHIFT: u32 = 4;
26906 pub const ENPACM_SHIFT: u32 = 7;
26908 pub const CPTA_SHIFT: u32 = 9;
26910 pub const CPTM_SHIFT: u32 = 11;
26912 pub const DTZ_SHIFT: u32 = 14;
26914 pub const TEIS_SHIFT: u32 = 15;
26916 pub const TEOS_SHIFT: u32 = 16;
26918 pub const VT_SHIFT: u32 = 17;
26920 pub const BTD_SHIFT: u32 = 24;
26922}
26923
26924#[cfg(feature = "el1")]
26925bitflags! {
26926 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
26928 #[repr(transparent)]
26929 pub struct SctlrEl1: u64 {
26930 const M = 1 << 0;
26932 const A = 1 << 1;
26934 const C = 1 << 2;
26936 const SA = 1 << 3;
26938 const SA0 = 1 << 4;
26940 const CP15BEN = 1 << 5;
26942 const NAA = 1 << 6;
26944 const ITD = 1 << 7;
26946 const SED = 1 << 8;
26948 const UMA = 1 << 9;
26950 const ENRCTX = 1 << 10;
26952 const EOS = 1 << 11;
26954 const I = 1 << 12;
26956 const ENDB = 1 << 13;
26958 const DZE = 1 << 14;
26960 const UCT = 1 << 15;
26962 const NTWI = 1 << 16;
26964 const NTWE = 1 << 18;
26966 const WXN = 1 << 19;
26968 const TSCXT = 1 << 20;
26970 const IESB = 1 << 21;
26972 const EIS = 1 << 22;
26974 const SPAN = 1 << 23;
26976 const UCI = 1 << 26;
26978 const ENDA = 1 << 27;
26980 const NTLSMD = 1 << 28;
26982 const LSMAOE = 1 << 29;
26984 const ENIB = 1 << 30;
26986 const ENIA = 1 << 31;
26988 const CMOW = 1 << 32;
26990 const MSCEN = 1 << 33;
26992 const ENFPM = 1 << 34;
26994 const BT0 = 1 << 35;
26996 const BT1 = 1 << 36;
26998 const ITFSB = 1 << 37;
27000 const ATA0 = 1 << 42;
27002 const ATA = 1 << 43;
27004 const DSSBS = 1 << 44;
27006 const TWEDEN = 1 << 45;
27008 const ENASR = 1 << 54;
27010 const ENAS0 = 1 << 55;
27012 const ENALS = 1 << 56;
27014 const EPAN = 1 << 57;
27016 const TCSO0 = 1 << 58;
27018 const TCSO = 1 << 59;
27020 const ENTP2 = 1 << 60;
27022 const NMI = 1 << 61;
27024 const SPINTMASK = 1 << 62;
27026 const TIDCP = 1 << 63;
27028 }
27029}
27030
27031#[cfg(feature = "el1")]
27032impl SctlrEl1 {
27033 pub const M_SHIFT: u32 = 0;
27035 pub const A_SHIFT: u32 = 1;
27037 pub const C_SHIFT: u32 = 2;
27039 pub const SA_SHIFT: u32 = 3;
27041 pub const SA0_SHIFT: u32 = 4;
27043 pub const CP15BEN_SHIFT: u32 = 5;
27045 pub const NAA_SHIFT: u32 = 6;
27047 pub const ITD_SHIFT: u32 = 7;
27049 pub const SED_SHIFT: u32 = 8;
27051 pub const UMA_SHIFT: u32 = 9;
27053 pub const ENRCTX_SHIFT: u32 = 10;
27055 pub const EOS_SHIFT: u32 = 11;
27057 pub const I_SHIFT: u32 = 12;
27059 pub const ENDB_SHIFT: u32 = 13;
27061 pub const DZE_SHIFT: u32 = 14;
27063 pub const UCT_SHIFT: u32 = 15;
27065 pub const NTWI_SHIFT: u32 = 16;
27067 pub const NTWE_SHIFT: u32 = 18;
27069 pub const WXN_SHIFT: u32 = 19;
27071 pub const TSCXT_SHIFT: u32 = 20;
27073 pub const IESB_SHIFT: u32 = 21;
27075 pub const EIS_SHIFT: u32 = 22;
27077 pub const SPAN_SHIFT: u32 = 23;
27079 pub const UCI_SHIFT: u32 = 26;
27081 pub const ENDA_SHIFT: u32 = 27;
27083 pub const NTLSMD_SHIFT: u32 = 28;
27085 pub const LSMAOE_SHIFT: u32 = 29;
27087 pub const ENIB_SHIFT: u32 = 30;
27089 pub const ENIA_SHIFT: u32 = 31;
27091 pub const CMOW_SHIFT: u32 = 32;
27093 pub const MSCEN_SHIFT: u32 = 33;
27095 pub const ENFPM_SHIFT: u32 = 34;
27097 pub const BT0_SHIFT: u32 = 35;
27099 pub const BT1_SHIFT: u32 = 36;
27101 pub const ITFSB_SHIFT: u32 = 37;
27103 pub const TCF0_SHIFT: u32 = 38;
27105 pub const TCF0_MASK: u64 = 0b11;
27107 pub const TCF_SHIFT: u32 = 40;
27109 pub const TCF_MASK: u64 = 0b11;
27111 pub const ATA0_SHIFT: u32 = 42;
27113 pub const ATA_SHIFT: u32 = 43;
27115 pub const DSSBS_SHIFT: u32 = 44;
27117 pub const TWEDEN_SHIFT: u32 = 45;
27119 pub const TWEDEL_SHIFT: u32 = 46;
27121 pub const TWEDEL_MASK: u64 = 0b1111;
27123 pub const ENASR_SHIFT: u32 = 54;
27125 pub const ENAS0_SHIFT: u32 = 55;
27127 pub const ENALS_SHIFT: u32 = 56;
27129 pub const EPAN_SHIFT: u32 = 57;
27131 pub const TCSO0_SHIFT: u32 = 58;
27133 pub const TCSO_SHIFT: u32 = 59;
27135 pub const ENTP2_SHIFT: u32 = 60;
27137 pub const NMI_SHIFT: u32 = 61;
27139 pub const SPINTMASK_SHIFT: u32 = 62;
27141 pub const TIDCP_SHIFT: u32 = 63;
27143
27144 pub const fn tcf0(self) -> u8 {
27146 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
27147 }
27148
27149 pub const fn set_tcf0(&mut self, value: u8) {
27151 let offset = Self::TCF0_SHIFT;
27152 assert!(value & (Self::TCF0_MASK as u8) == value);
27153 *self = Self::from_bits_retain(
27154 (self.bits() & !(Self::TCF0_MASK << offset)) | ((value as u64) << offset),
27155 );
27156 }
27157
27158 pub const fn with_tcf0(mut self, value: u8) -> Self {
27160 self.set_tcf0(value);
27161 self
27162 }
27163
27164 pub const fn tcf(self) -> u8 {
27166 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
27167 }
27168
27169 pub const fn set_tcf(&mut self, value: u8) {
27171 let offset = Self::TCF_SHIFT;
27172 assert!(value & (Self::TCF_MASK as u8) == value);
27173 *self = Self::from_bits_retain(
27174 (self.bits() & !(Self::TCF_MASK << offset)) | ((value as u64) << offset),
27175 );
27176 }
27177
27178 pub const fn with_tcf(mut self, value: u8) -> Self {
27180 self.set_tcf(value);
27181 self
27182 }
27183
27184 pub const fn twedel(self) -> u8 {
27186 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
27187 }
27188
27189 pub const fn set_twedel(&mut self, value: u8) {
27191 let offset = Self::TWEDEL_SHIFT;
27192 assert!(value & (Self::TWEDEL_MASK as u8) == value);
27193 *self = Self::from_bits_retain(
27194 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
27195 );
27196 }
27197
27198 pub const fn with_twedel(mut self, value: u8) -> Self {
27200 self.set_twedel(value);
27201 self
27202 }
27203}
27204
27205#[cfg(feature = "el2")]
27206bitflags! {
27207 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27209 #[repr(transparent)]
27210 pub struct SctlrEl2: u64 {
27211 const M = 1 << 0;
27213 const A = 1 << 1;
27215 const C = 1 << 2;
27217 const SA = 1 << 3;
27219 const SA0 = 1 << 4;
27221 const CP15BEN = 1 << 5;
27223 const NAA = 1 << 6;
27225 const SED = 1 << 8;
27227 const UMA = 1 << 9;
27229 const ENRCTX = 1 << 10;
27231 const EOS = 1 << 11;
27233 const I = 1 << 12;
27235 const ENDB = 1 << 13;
27237 const DZE = 1 << 14;
27239 const UCT = 1 << 15;
27241 const NTWI = 1 << 16;
27243 const NTWE = 1 << 18;
27245 const WXN = 1 << 19;
27247 const IESB = 1 << 21;
27249 const EIS = 1 << 22;
27251 const SPAN = 1 << 23;
27253 const UCI = 1 << 26;
27255 const ENDA = 1 << 27;
27257 const NTLSMD = 1 << 28;
27259 const LSMAOE = 1 << 29;
27261 const ENIB = 1 << 30;
27263 const ENIA = 1 << 31;
27265 const CMOW = 1 << 32;
27267 const MSCEN = 1 << 33;
27269 const ENFPM = 1 << 34;
27271 const BT0 = 1 << 35;
27273 const BT = 1 << 36;
27275 const ITFSB = 1 << 37;
27277 const ATA0 = 1 << 42;
27279 const ATA = 1 << 43;
27281 const DSSBS = 1 << 44;
27283 const TWEDEN = 1 << 45;
27285 const ENASR = 1 << 54;
27287 const ENAS0 = 1 << 55;
27289 const ENALS = 1 << 56;
27291 const EPAN = 1 << 57;
27293 const TCSO0 = 1 << 58;
27295 const TCSO = 1 << 59;
27297 const ENTP2 = 1 << 60;
27299 const NMI = 1 << 61;
27301 const SPINTMASK = 1 << 62;
27303 const TIDCP = 1 << 63;
27305 }
27306}
27307
27308#[cfg(feature = "el2")]
27309impl SctlrEl2 {
27310 pub const M_SHIFT: u32 = 0;
27312 pub const A_SHIFT: u32 = 1;
27314 pub const C_SHIFT: u32 = 2;
27316 pub const SA_SHIFT: u32 = 3;
27318 pub const SA0_SHIFT: u32 = 4;
27320 pub const CP15BEN_SHIFT: u32 = 5;
27322 pub const NAA_SHIFT: u32 = 6;
27324 pub const SED_SHIFT: u32 = 8;
27326 pub const UMA_SHIFT: u32 = 9;
27328 pub const ENRCTX_SHIFT: u32 = 10;
27330 pub const EOS_SHIFT: u32 = 11;
27332 pub const I_SHIFT: u32 = 12;
27334 pub const ENDB_SHIFT: u32 = 13;
27336 pub const DZE_SHIFT: u32 = 14;
27338 pub const UCT_SHIFT: u32 = 15;
27340 pub const NTWI_SHIFT: u32 = 16;
27342 pub const NTWE_SHIFT: u32 = 18;
27344 pub const WXN_SHIFT: u32 = 19;
27346 pub const IESB_SHIFT: u32 = 21;
27348 pub const EIS_SHIFT: u32 = 22;
27350 pub const SPAN_SHIFT: u32 = 23;
27352 pub const UCI_SHIFT: u32 = 26;
27354 pub const ENDA_SHIFT: u32 = 27;
27356 pub const NTLSMD_SHIFT: u32 = 28;
27358 pub const LSMAOE_SHIFT: u32 = 29;
27360 pub const ENIB_SHIFT: u32 = 30;
27362 pub const ENIA_SHIFT: u32 = 31;
27364 pub const CMOW_SHIFT: u32 = 32;
27366 pub const MSCEN_SHIFT: u32 = 33;
27368 pub const ENFPM_SHIFT: u32 = 34;
27370 pub const BT0_SHIFT: u32 = 35;
27372 pub const BT_SHIFT: u32 = 36;
27374 pub const ITFSB_SHIFT: u32 = 37;
27376 pub const TCF0_SHIFT: u32 = 38;
27378 pub const TCF0_MASK: u64 = 0b11;
27380 pub const TCF_SHIFT: u32 = 40;
27382 pub const TCF_MASK: u64 = 0b11;
27384 pub const ATA0_SHIFT: u32 = 42;
27386 pub const ATA_SHIFT: u32 = 43;
27388 pub const DSSBS_SHIFT: u32 = 44;
27390 pub const TWEDEN_SHIFT: u32 = 45;
27392 pub const TWEDEL_SHIFT: u32 = 46;
27394 pub const TWEDEL_MASK: u64 = 0b1111;
27396 pub const ENASR_SHIFT: u32 = 54;
27398 pub const ENAS0_SHIFT: u32 = 55;
27400 pub const ENALS_SHIFT: u32 = 56;
27402 pub const EPAN_SHIFT: u32 = 57;
27404 pub const TCSO0_SHIFT: u32 = 58;
27406 pub const TCSO_SHIFT: u32 = 59;
27408 pub const ENTP2_SHIFT: u32 = 60;
27410 pub const NMI_SHIFT: u32 = 61;
27412 pub const SPINTMASK_SHIFT: u32 = 62;
27414 pub const TIDCP_SHIFT: u32 = 63;
27416
27417 pub const fn tcf0(self) -> u8 {
27419 ((self.bits() >> Self::TCF0_SHIFT) & 0b11) as u8
27420 }
27421
27422 pub const fn set_tcf0(&mut self, value: u8) {
27424 let offset = Self::TCF0_SHIFT;
27425 assert!(value & (Self::TCF0_MASK as u8) == value);
27426 *self = Self::from_bits_retain(
27427 (self.bits() & !(Self::TCF0_MASK << offset)) | ((value as u64) << offset),
27428 );
27429 }
27430
27431 pub const fn with_tcf0(mut self, value: u8) -> Self {
27433 self.set_tcf0(value);
27434 self
27435 }
27436
27437 pub const fn tcf(self) -> u8 {
27439 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
27440 }
27441
27442 pub const fn set_tcf(&mut self, value: u8) {
27444 let offset = Self::TCF_SHIFT;
27445 assert!(value & (Self::TCF_MASK as u8) == value);
27446 *self = Self::from_bits_retain(
27447 (self.bits() & !(Self::TCF_MASK << offset)) | ((value as u64) << offset),
27448 );
27449 }
27450
27451 pub const fn with_tcf(mut self, value: u8) -> Self {
27453 self.set_tcf(value);
27454 self
27455 }
27456
27457 pub const fn twedel(self) -> u8 {
27459 ((self.bits() >> Self::TWEDEL_SHIFT) & 0b1111) as u8
27460 }
27461
27462 pub const fn set_twedel(&mut self, value: u8) {
27464 let offset = Self::TWEDEL_SHIFT;
27465 assert!(value & (Self::TWEDEL_MASK as u8) == value);
27466 *self = Self::from_bits_retain(
27467 (self.bits() & !(Self::TWEDEL_MASK << offset)) | ((value as u64) << offset),
27468 );
27469 }
27470
27471 pub const fn with_twedel(mut self, value: u8) -> Self {
27473 self.set_twedel(value);
27474 self
27475 }
27476}
27477
27478#[cfg(feature = "el3")]
27479bitflags! {
27480 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27482 #[repr(transparent)]
27483 pub struct SctlrEl3: u64 {
27484 const RES1 = 0b110000100001010000000000110000;
27486 const M = 1 << 0;
27488 const A = 1 << 1;
27490 const C = 1 << 2;
27492 const SA = 1 << 3;
27494 const NAA = 1 << 6;
27496 const EOS = 1 << 11;
27498 const I = 1 << 12;
27500 const ENDB = 1 << 13;
27502 const WXN = 1 << 19;
27504 const IESB = 1 << 21;
27506 const EIS = 1 << 22;
27508 const ENDA = 1 << 27;
27510 const ENIB = 1 << 30;
27512 const ENIA = 1 << 31;
27514 const BT = 1 << 36;
27516 const ITFSB = 1 << 37;
27518 const ATA = 1 << 43;
27520 const DSSBS = 1 << 44;
27522 const TCSO = 1 << 59;
27524 const NMI = 1 << 61;
27526 const SPINTMASK = 1 << 62;
27528 }
27529}
27530
27531#[cfg(feature = "el3")]
27532impl SctlrEl3 {
27533 pub const M_SHIFT: u32 = 0;
27535 pub const A_SHIFT: u32 = 1;
27537 pub const C_SHIFT: u32 = 2;
27539 pub const SA_SHIFT: u32 = 3;
27541 pub const NAA_SHIFT: u32 = 6;
27543 pub const EOS_SHIFT: u32 = 11;
27545 pub const I_SHIFT: u32 = 12;
27547 pub const ENDB_SHIFT: u32 = 13;
27549 pub const WXN_SHIFT: u32 = 19;
27551 pub const IESB_SHIFT: u32 = 21;
27553 pub const EIS_SHIFT: u32 = 22;
27555 pub const ENDA_SHIFT: u32 = 27;
27557 pub const ENIB_SHIFT: u32 = 30;
27559 pub const ENIA_SHIFT: u32 = 31;
27561 pub const BT_SHIFT: u32 = 36;
27563 pub const ITFSB_SHIFT: u32 = 37;
27565 pub const TCF_SHIFT: u32 = 40;
27567 pub const TCF_MASK: u64 = 0b11;
27569 pub const ATA_SHIFT: u32 = 43;
27571 pub const DSSBS_SHIFT: u32 = 44;
27573 pub const TCSO_SHIFT: u32 = 59;
27575 pub const NMI_SHIFT: u32 = 61;
27577 pub const SPINTMASK_SHIFT: u32 = 62;
27579
27580 pub const fn tcf(self) -> u8 {
27582 ((self.bits() >> Self::TCF_SHIFT) & 0b11) as u8
27583 }
27584
27585 pub const fn set_tcf(&mut self, value: u8) {
27587 let offset = Self::TCF_SHIFT;
27588 assert!(value & (Self::TCF_MASK as u8) == value);
27589 *self = Self::from_bits_retain(
27590 (self.bits() & !(Self::TCF_MASK << offset)) | ((value as u64) << offset),
27591 );
27592 }
27593
27594 pub const fn with_tcf(mut self, value: u8) -> Self {
27596 self.set_tcf(value);
27597 self
27598 }
27599}
27600
27601bitflags! {
27602 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27604 #[repr(transparent)]
27605 pub struct Sdcr: u32 {
27606 const SPME = 1 << 17;
27608 const STE = 1 << 18;
27610 const TTRF = 1 << 19;
27612 const EDAD = 1 << 20;
27614 const EPMAD = 1 << 21;
27616 const SCCD = 1 << 23;
27618 const TDCC = 1 << 27;
27620 const MTPME = 1 << 28;
27622 }
27623}
27624
27625impl Sdcr {
27626 pub const SPD_SHIFT: u32 = 14;
27628 pub const SPD_MASK: u32 = 0b11;
27630 pub const SPME_SHIFT: u32 = 17;
27632 pub const STE_SHIFT: u32 = 18;
27634 pub const TTRF_SHIFT: u32 = 19;
27636 pub const EDAD_SHIFT: u32 = 20;
27638 pub const EPMAD_SHIFT: u32 = 21;
27640 pub const SCCD_SHIFT: u32 = 23;
27642 pub const TDCC_SHIFT: u32 = 27;
27644 pub const MTPME_SHIFT: u32 = 28;
27646
27647 pub const fn spd(self) -> u8 {
27649 ((self.bits() >> Self::SPD_SHIFT) & 0b11) as u8
27650 }
27651
27652 pub const fn set_spd(&mut self, value: u8) {
27654 let offset = Self::SPD_SHIFT;
27655 assert!(value & (Self::SPD_MASK as u8) == value);
27656 *self = Self::from_bits_retain(
27657 (self.bits() & !(Self::SPD_MASK << offset)) | ((value as u32) << offset),
27658 );
27659 }
27660
27661 pub const fn with_spd(mut self, value: u8) -> Self {
27663 self.set_spd(value);
27664 self
27665 }
27666}
27667
27668bitflags! {
27669 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27671 #[repr(transparent)]
27672 pub struct Sder: u32 {
27673 const SUIDEN = 1 << 0;
27675 const SUNIDEN = 1 << 1;
27677 }
27678}
27679
27680impl Sder {
27681 pub const SUIDEN_SHIFT: u32 = 0;
27683 pub const SUNIDEN_SHIFT: u32 = 1;
27685}
27686
27687#[cfg(feature = "el3")]
27688bitflags! {
27689 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27691 #[repr(transparent)]
27692 pub struct SmcrEl3: u64 {
27693 const EZT0 = 1 << 30;
27695 const FA64 = 1 << 31;
27697 }
27698}
27699
27700#[cfg(feature = "el3")]
27701impl SmcrEl3 {
27702 pub const LEN_SHIFT: u32 = 0;
27704 pub const LEN_MASK: u64 = 0b1111;
27706 pub const EZT0_SHIFT: u32 = 30;
27708 pub const FA64_SHIFT: u32 = 31;
27710
27711 pub const fn len(self) -> u8 {
27713 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
27714 }
27715
27716 pub const fn set_len(&mut self, value: u8) {
27718 let offset = Self::LEN_SHIFT;
27719 assert!(value & (Self::LEN_MASK as u8) == value);
27720 *self = Self::from_bits_retain(
27721 (self.bits() & !(Self::LEN_MASK << offset)) | ((value as u64) << offset),
27722 );
27723 }
27724
27725 pub const fn with_len(mut self, value: u8) -> Self {
27727 self.set_len(value);
27728 self
27729 }
27730}
27731
27732#[cfg(feature = "el1")]
27733bitflags! {
27734 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27736 #[repr(transparent)]
27737 pub struct SpsrEl1: u64 {
27738 const M_4 = 1 << 4;
27740 const T = 1 << 5;
27742 const F = 1 << 6;
27744 const I = 1 << 7;
27746 const A = 1 << 8;
27748 const D = 1 << 9;
27750 const E = 1 << 9;
27752 const ALLINT = 1 << 13;
27754 const BTYPE2 = 1 << 14;
27756 const IL = 1 << 20;
27758 const SS = 1 << 21;
27760 const PAN = 1 << 22;
27762 const UAO = 1 << 23;
27764 const DIT = 1 << 24;
27766 const TCO = 1 << 25;
27768 const Q = 1 << 27;
27770 const V = 1 << 28;
27772 const C = 1 << 29;
27774 const Z = 1 << 30;
27776 const N = 1 << 31;
27778 const PM = 1 << 32;
27780 const PPEND = 1 << 33;
27782 const EXLOCK = 1 << 34;
27784 const PACM = 1 << 35;
27786 const UINJ = 1 << 36;
27788 }
27789}
27790
27791#[cfg(feature = "el1")]
27792impl SpsrEl1 {
27793 pub const M_3_0_SHIFT: u32 = 0;
27795 pub const M_3_0_MASK: u64 = 0b1111;
27797 pub const M_4_SHIFT: u32 = 4;
27799 pub const T_SHIFT: u32 = 5;
27801 pub const F_SHIFT: u32 = 6;
27803 pub const I_SHIFT: u32 = 7;
27805 pub const A_SHIFT: u32 = 8;
27807 pub const D_SHIFT: u32 = 9;
27809 pub const E_SHIFT: u32 = 9;
27811 pub const BTYPE_SHIFT: u32 = 10;
27813 pub const BTYPE_MASK: u64 = 0b11;
27815 pub const ALLINT_SHIFT: u32 = 13;
27817 pub const BTYPE2_SHIFT: u32 = 14;
27819 pub const GE_SHIFT: u32 = 16;
27821 pub const GE_MASK: u64 = 0b1111;
27823 pub const IL_SHIFT: u32 = 20;
27825 pub const SS_SHIFT: u32 = 21;
27827 pub const PAN_SHIFT: u32 = 22;
27829 pub const UAO_SHIFT: u32 = 23;
27831 pub const DIT_SHIFT: u32 = 24;
27833 pub const TCO_SHIFT: u32 = 25;
27835 pub const Q_SHIFT: u32 = 27;
27837 pub const V_SHIFT: u32 = 28;
27839 pub const C_SHIFT: u32 = 29;
27841 pub const Z_SHIFT: u32 = 30;
27843 pub const N_SHIFT: u32 = 31;
27845 pub const PM_SHIFT: u32 = 32;
27847 pub const PPEND_SHIFT: u32 = 33;
27849 pub const EXLOCK_SHIFT: u32 = 34;
27851 pub const PACM_SHIFT: u32 = 35;
27853 pub const UINJ_SHIFT: u32 = 36;
27855
27856 pub const fn m_3_0(self) -> u8 {
27858 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
27859 }
27860
27861 pub const fn set_m_3_0(&mut self, value: u8) {
27863 let offset = Self::M_3_0_SHIFT;
27864 assert!(value & (Self::M_3_0_MASK as u8) == value);
27865 *self = Self::from_bits_retain(
27866 (self.bits() & !(Self::M_3_0_MASK << offset)) | ((value as u64) << offset),
27867 );
27868 }
27869
27870 pub const fn with_m_3_0(mut self, value: u8) -> Self {
27872 self.set_m_3_0(value);
27873 self
27874 }
27875
27876 pub const fn btype(self) -> u8 {
27878 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
27879 }
27880
27881 pub const fn set_btype(&mut self, value: u8) {
27883 let offset = Self::BTYPE_SHIFT;
27884 assert!(value & (Self::BTYPE_MASK as u8) == value);
27885 *self = Self::from_bits_retain(
27886 (self.bits() & !(Self::BTYPE_MASK << offset)) | ((value as u64) << offset),
27887 );
27888 }
27889
27890 pub const fn with_btype(mut self, value: u8) -> Self {
27892 self.set_btype(value);
27893 self
27894 }
27895
27896 pub const fn ge(self) -> u8 {
27898 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
27899 }
27900
27901 pub const fn set_ge(&mut self, value: u8) {
27903 let offset = Self::GE_SHIFT;
27904 assert!(value & (Self::GE_MASK as u8) == value);
27905 *self = Self::from_bits_retain(
27906 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u64) << offset),
27907 );
27908 }
27909
27910 pub const fn with_ge(mut self, value: u8) -> Self {
27912 self.set_ge(value);
27913 self
27914 }
27915}
27916
27917#[cfg(feature = "el2")]
27918bitflags! {
27919 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
27921 #[repr(transparent)]
27922 pub struct SpsrEl2: u64 {
27923 const M_4 = 1 << 4;
27925 const T = 1 << 5;
27927 const F = 1 << 6;
27929 const I = 1 << 7;
27931 const A = 1 << 8;
27933 const D = 1 << 9;
27935 const E = 1 << 9;
27937 const ALLINT = 1 << 13;
27939 const BTYPE2 = 1 << 14;
27941 const IL = 1 << 20;
27943 const SS = 1 << 21;
27945 const PAN = 1 << 22;
27947 const UAO = 1 << 23;
27949 const DIT = 1 << 24;
27951 const TCO = 1 << 25;
27953 const Q = 1 << 27;
27955 const V = 1 << 28;
27957 const C = 1 << 29;
27959 const Z = 1 << 30;
27961 const N = 1 << 31;
27963 const PM = 1 << 32;
27965 const PPEND = 1 << 33;
27967 const EXLOCK = 1 << 34;
27969 const PACM = 1 << 35;
27971 const UINJ = 1 << 36;
27973 }
27974}
27975
27976#[cfg(feature = "el2")]
27977impl SpsrEl2 {
27978 pub const M_3_0_SHIFT: u32 = 0;
27980 pub const M_3_0_MASK: u64 = 0b1111;
27982 pub const M_4_SHIFT: u32 = 4;
27984 pub const T_SHIFT: u32 = 5;
27986 pub const F_SHIFT: u32 = 6;
27988 pub const I_SHIFT: u32 = 7;
27990 pub const A_SHIFT: u32 = 8;
27992 pub const D_SHIFT: u32 = 9;
27994 pub const E_SHIFT: u32 = 9;
27996 pub const BTYPE_SHIFT: u32 = 10;
27998 pub const BTYPE_MASK: u64 = 0b11;
28000 pub const ALLINT_SHIFT: u32 = 13;
28002 pub const BTYPE2_SHIFT: u32 = 14;
28004 pub const GE_SHIFT: u32 = 16;
28006 pub const GE_MASK: u64 = 0b1111;
28008 pub const IL_SHIFT: u32 = 20;
28010 pub const SS_SHIFT: u32 = 21;
28012 pub const PAN_SHIFT: u32 = 22;
28014 pub const UAO_SHIFT: u32 = 23;
28016 pub const DIT_SHIFT: u32 = 24;
28018 pub const TCO_SHIFT: u32 = 25;
28020 pub const Q_SHIFT: u32 = 27;
28022 pub const V_SHIFT: u32 = 28;
28024 pub const C_SHIFT: u32 = 29;
28026 pub const Z_SHIFT: u32 = 30;
28028 pub const N_SHIFT: u32 = 31;
28030 pub const PM_SHIFT: u32 = 32;
28032 pub const PPEND_SHIFT: u32 = 33;
28034 pub const EXLOCK_SHIFT: u32 = 34;
28036 pub const PACM_SHIFT: u32 = 35;
28038 pub const UINJ_SHIFT: u32 = 36;
28040
28041 pub const fn m_3_0(self) -> u8 {
28043 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
28044 }
28045
28046 pub const fn set_m_3_0(&mut self, value: u8) {
28048 let offset = Self::M_3_0_SHIFT;
28049 assert!(value & (Self::M_3_0_MASK as u8) == value);
28050 *self = Self::from_bits_retain(
28051 (self.bits() & !(Self::M_3_0_MASK << offset)) | ((value as u64) << offset),
28052 );
28053 }
28054
28055 pub const fn with_m_3_0(mut self, value: u8) -> Self {
28057 self.set_m_3_0(value);
28058 self
28059 }
28060
28061 pub const fn btype(self) -> u8 {
28063 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
28064 }
28065
28066 pub const fn set_btype(&mut self, value: u8) {
28068 let offset = Self::BTYPE_SHIFT;
28069 assert!(value & (Self::BTYPE_MASK as u8) == value);
28070 *self = Self::from_bits_retain(
28071 (self.bits() & !(Self::BTYPE_MASK << offset)) | ((value as u64) << offset),
28072 );
28073 }
28074
28075 pub const fn with_btype(mut self, value: u8) -> Self {
28077 self.set_btype(value);
28078 self
28079 }
28080
28081 pub const fn ge(self) -> u8 {
28083 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
28084 }
28085
28086 pub const fn set_ge(&mut self, value: u8) {
28088 let offset = Self::GE_SHIFT;
28089 assert!(value & (Self::GE_MASK as u8) == value);
28090 *self = Self::from_bits_retain(
28091 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u64) << offset),
28092 );
28093 }
28094
28095 pub const fn with_ge(mut self, value: u8) -> Self {
28097 self.set_ge(value);
28098 self
28099 }
28100}
28101
28102#[cfg(feature = "el3")]
28103bitflags! {
28104 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28106 #[repr(transparent)]
28107 pub struct SpsrEl3: u64 {
28108 const M_4 = 1 << 4;
28110 const T = 1 << 5;
28112 const F = 1 << 6;
28114 const I = 1 << 7;
28116 const A = 1 << 8;
28118 const D = 1 << 9;
28120 const E = 1 << 9;
28122 const ALLINT = 1 << 13;
28124 const BTYPE2 = 1 << 14;
28126 const IL = 1 << 20;
28128 const SS = 1 << 21;
28130 const PAN = 1 << 22;
28132 const UAO = 1 << 23;
28134 const DIT = 1 << 24;
28136 const TCO = 1 << 25;
28138 const Q = 1 << 27;
28140 const V = 1 << 28;
28142 const C = 1 << 29;
28144 const Z = 1 << 30;
28146 const N = 1 << 31;
28148 const PM = 1 << 32;
28150 const PPEND = 1 << 33;
28152 const EXLOCK = 1 << 34;
28154 const PACM = 1 << 35;
28156 const UINJ = 1 << 36;
28158 }
28159}
28160
28161#[cfg(feature = "el3")]
28162impl SpsrEl3 {
28163 pub const M_3_0_SHIFT: u32 = 0;
28165 pub const M_3_0_MASK: u64 = 0b1111;
28167 pub const M_4_SHIFT: u32 = 4;
28169 pub const T_SHIFT: u32 = 5;
28171 pub const F_SHIFT: u32 = 6;
28173 pub const I_SHIFT: u32 = 7;
28175 pub const A_SHIFT: u32 = 8;
28177 pub const D_SHIFT: u32 = 9;
28179 pub const E_SHIFT: u32 = 9;
28181 pub const BTYPE_SHIFT: u32 = 10;
28183 pub const BTYPE_MASK: u64 = 0b11;
28185 pub const ALLINT_SHIFT: u32 = 13;
28187 pub const BTYPE2_SHIFT: u32 = 14;
28189 pub const GE_SHIFT: u32 = 16;
28191 pub const GE_MASK: u64 = 0b1111;
28193 pub const IL_SHIFT: u32 = 20;
28195 pub const SS_SHIFT: u32 = 21;
28197 pub const PAN_SHIFT: u32 = 22;
28199 pub const UAO_SHIFT: u32 = 23;
28201 pub const DIT_SHIFT: u32 = 24;
28203 pub const TCO_SHIFT: u32 = 25;
28205 pub const Q_SHIFT: u32 = 27;
28207 pub const V_SHIFT: u32 = 28;
28209 pub const C_SHIFT: u32 = 29;
28211 pub const Z_SHIFT: u32 = 30;
28213 pub const N_SHIFT: u32 = 31;
28215 pub const PM_SHIFT: u32 = 32;
28217 pub const PPEND_SHIFT: u32 = 33;
28219 pub const EXLOCK_SHIFT: u32 = 34;
28221 pub const PACM_SHIFT: u32 = 35;
28223 pub const UINJ_SHIFT: u32 = 36;
28225
28226 pub const fn m_3_0(self) -> u8 {
28228 ((self.bits() >> Self::M_3_0_SHIFT) & 0b1111) as u8
28229 }
28230
28231 pub const fn set_m_3_0(&mut self, value: u8) {
28233 let offset = Self::M_3_0_SHIFT;
28234 assert!(value & (Self::M_3_0_MASK as u8) == value);
28235 *self = Self::from_bits_retain(
28236 (self.bits() & !(Self::M_3_0_MASK << offset)) | ((value as u64) << offset),
28237 );
28238 }
28239
28240 pub const fn with_m_3_0(mut self, value: u8) -> Self {
28242 self.set_m_3_0(value);
28243 self
28244 }
28245
28246 pub const fn btype(self) -> u8 {
28248 ((self.bits() >> Self::BTYPE_SHIFT) & 0b11) as u8
28249 }
28250
28251 pub const fn set_btype(&mut self, value: u8) {
28253 let offset = Self::BTYPE_SHIFT;
28254 assert!(value & (Self::BTYPE_MASK as u8) == value);
28255 *self = Self::from_bits_retain(
28256 (self.bits() & !(Self::BTYPE_MASK << offset)) | ((value as u64) << offset),
28257 );
28258 }
28259
28260 pub const fn with_btype(mut self, value: u8) -> Self {
28262 self.set_btype(value);
28263 self
28264 }
28265
28266 pub const fn ge(self) -> u8 {
28268 ((self.bits() >> Self::GE_SHIFT) & 0b1111) as u8
28269 }
28270
28271 pub const fn set_ge(&mut self, value: u8) {
28273 let offset = Self::GE_SHIFT;
28274 assert!(value & (Self::GE_MASK as u8) == value);
28275 *self = Self::from_bits_retain(
28276 (self.bits() & !(Self::GE_MASK << offset)) | ((value as u64) << offset),
28277 );
28278 }
28279
28280 pub const fn with_ge(mut self, value: u8) -> Self {
28282 self.set_ge(value);
28283 self
28284 }
28285}
28286
28287#[cfg(feature = "el1")]
28288bitflags! {
28289 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28291 #[repr(transparent)]
28292 pub struct SpEl1: u64 {
28293 }
28294}
28295
28296#[cfg(feature = "el1")]
28297impl SpEl1 {
28298 pub const STACKPOINTER_SHIFT: u32 = 0;
28300 pub const STACKPOINTER_MASK: u64 =
28302 0b1111111111111111111111111111111111111111111111111111111111111111;
28303
28304 pub const fn stackpointer(self) -> u64 {
28306 ((self.bits() >> Self::STACKPOINTER_SHIFT)
28307 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
28308 }
28309
28310 pub const fn set_stackpointer(&mut self, value: u64) {
28312 let offset = Self::STACKPOINTER_SHIFT;
28313 assert!(value & (Self::STACKPOINTER_MASK as u64) == value);
28314 *self = Self::from_bits_retain(
28315 (self.bits() & !(Self::STACKPOINTER_MASK << offset)) | ((value as u64) << offset),
28316 );
28317 }
28318
28319 pub const fn with_stackpointer(mut self, value: u64) -> Self {
28321 self.set_stackpointer(value);
28322 self
28323 }
28324}
28325
28326#[cfg(feature = "el2")]
28327bitflags! {
28328 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28330 #[repr(transparent)]
28331 pub struct SpEl2: u64 {
28332 }
28333}
28334
28335#[cfg(feature = "el2")]
28336impl SpEl2 {
28337 pub const STACKPOINTER_SHIFT: u32 = 0;
28339 pub const STACKPOINTER_MASK: u64 =
28341 0b1111111111111111111111111111111111111111111111111111111111111111;
28342
28343 pub const fn stackpointer(self) -> u64 {
28345 ((self.bits() >> Self::STACKPOINTER_SHIFT)
28346 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
28347 }
28348
28349 pub const fn set_stackpointer(&mut self, value: u64) {
28351 let offset = Self::STACKPOINTER_SHIFT;
28352 assert!(value & (Self::STACKPOINTER_MASK as u64) == value);
28353 *self = Self::from_bits_retain(
28354 (self.bits() & !(Self::STACKPOINTER_MASK << offset)) | ((value as u64) << offset),
28355 );
28356 }
28357
28358 pub const fn with_stackpointer(mut self, value: u64) -> Self {
28360 self.set_stackpointer(value);
28361 self
28362 }
28363}
28364
28365bitflags! {
28366 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28368 #[repr(transparent)]
28369 pub struct Svcr: u64 {
28370 const SM = 1 << 0;
28372 const ZA = 1 << 1;
28374 }
28375}
28376
28377impl Svcr {
28378 pub const SM_SHIFT: u32 = 0;
28380 pub const ZA_SHIFT: u32 = 1;
28382}
28383
28384#[cfg(feature = "el1")]
28385bitflags! {
28386 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28388 #[repr(transparent)]
28389 pub struct Tcr2El1: u64 {
28390 const PNCH = 1 << 0;
28392 const PIE = 1 << 1;
28394 const E0POE = 1 << 2;
28396 const POE = 1 << 3;
28398 const AIE = 1 << 4;
28400 const D128 = 1 << 5;
28402 const PTTWI = 1 << 10;
28404 const HAFT = 1 << 11;
28406 const DISCH0 = 1 << 14;
28408 const DISCH1 = 1 << 15;
28410 const A2 = 1 << 16;
28412 const FNG0 = 1 << 17;
28414 const FNG1 = 1 << 18;
28416 const POE2F = 1 << 19;
28418 const FNGNA0 = 1 << 20;
28420 const FNGNA1 = 1 << 21;
28422 const TVAD0 = 1 << 35;
28424 const TVAD1 = 1 << 36;
28426 }
28427}
28428
28429#[cfg(feature = "el1")]
28430impl Tcr2El1 {
28431 pub const PNCH_SHIFT: u32 = 0;
28433 pub const PIE_SHIFT: u32 = 1;
28435 pub const E0POE_SHIFT: u32 = 2;
28437 pub const POE_SHIFT: u32 = 3;
28439 pub const AIE_SHIFT: u32 = 4;
28441 pub const D128_SHIFT: u32 = 5;
28443 pub const PTTWI_SHIFT: u32 = 10;
28445 pub const HAFT_SHIFT: u32 = 11;
28447 pub const DISCH0_SHIFT: u32 = 14;
28449 pub const DISCH1_SHIFT: u32 = 15;
28451 pub const A2_SHIFT: u32 = 16;
28453 pub const FNG0_SHIFT: u32 = 17;
28455 pub const FNG1_SHIFT: u32 = 18;
28457 pub const POE2F_SHIFT: u32 = 19;
28459 pub const FNGNA0_SHIFT: u32 = 20;
28461 pub const FNGNA1_SHIFT: u32 = 21;
28463 pub const POIW_SHIFT: u32 = 22;
28465 pub const POIW_MASK: u64 = 0b111;
28467 pub const VTB0_SHIFT: u32 = 25;
28469 pub const VTB0_MASK: u64 = 0b11111;
28471 pub const VTB1_SHIFT: u32 = 30;
28473 pub const VTB1_MASK: u64 = 0b11111;
28475 pub const TVAD0_SHIFT: u32 = 35;
28477 pub const TVAD1_SHIFT: u32 = 36;
28479
28480 pub const fn poiw(self) -> u8 {
28482 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
28483 }
28484
28485 pub const fn set_poiw(&mut self, value: u8) {
28487 let offset = Self::POIW_SHIFT;
28488 assert!(value & (Self::POIW_MASK as u8) == value);
28489 *self = Self::from_bits_retain(
28490 (self.bits() & !(Self::POIW_MASK << offset)) | ((value as u64) << offset),
28491 );
28492 }
28493
28494 pub const fn with_poiw(mut self, value: u8) -> Self {
28496 self.set_poiw(value);
28497 self
28498 }
28499
28500 pub const fn vtb0(self) -> u8 {
28502 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
28503 }
28504
28505 pub const fn set_vtb0(&mut self, value: u8) {
28507 let offset = Self::VTB0_SHIFT;
28508 assert!(value & (Self::VTB0_MASK as u8) == value);
28509 *self = Self::from_bits_retain(
28510 (self.bits() & !(Self::VTB0_MASK << offset)) | ((value as u64) << offset),
28511 );
28512 }
28513
28514 pub const fn with_vtb0(mut self, value: u8) -> Self {
28516 self.set_vtb0(value);
28517 self
28518 }
28519
28520 pub const fn vtb1(self) -> u8 {
28522 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
28523 }
28524
28525 pub const fn set_vtb1(&mut self, value: u8) {
28527 let offset = Self::VTB1_SHIFT;
28528 assert!(value & (Self::VTB1_MASK as u8) == value);
28529 *self = Self::from_bits_retain(
28530 (self.bits() & !(Self::VTB1_MASK << offset)) | ((value as u64) << offset),
28531 );
28532 }
28533
28534 pub const fn with_vtb1(mut self, value: u8) -> Self {
28536 self.set_vtb1(value);
28537 self
28538 }
28539}
28540
28541#[cfg(feature = "el2")]
28542bitflags! {
28543 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28545 #[repr(transparent)]
28546 pub struct Tcr2El2: u64 {
28547 const PNCH = 1 << 0;
28549 const PIE = 1 << 1;
28551 const E0POE = 1 << 2;
28553 const POE = 1 << 3;
28555 const AIE = 1 << 4;
28557 const D128 = 1 << 5;
28559 const PTTWI = 1 << 10;
28561 const HAFT = 1 << 11;
28563 const AMEC0 = 1 << 12;
28565 const AMEC1 = 1 << 13;
28567 const DISCH0 = 1 << 14;
28569 const DISCH1 = 1 << 15;
28571 const A2 = 1 << 16;
28573 const FNG0 = 1 << 17;
28575 const FNG1 = 1 << 18;
28577 const POE2F = 1 << 19;
28579 const TVAD0 = 1 << 35;
28581 const TVAD1 = 1 << 36;
28583 }
28584}
28585
28586#[cfg(feature = "el2")]
28587impl Tcr2El2 {
28588 pub const PNCH_SHIFT: u32 = 0;
28590 pub const PIE_SHIFT: u32 = 1;
28592 pub const E0POE_SHIFT: u32 = 2;
28594 pub const POE_SHIFT: u32 = 3;
28596 pub const AIE_SHIFT: u32 = 4;
28598 pub const D128_SHIFT: u32 = 5;
28600 pub const PTTWI_SHIFT: u32 = 10;
28602 pub const HAFT_SHIFT: u32 = 11;
28604 pub const AMEC0_SHIFT: u32 = 12;
28606 pub const AMEC1_SHIFT: u32 = 13;
28608 pub const DISCH0_SHIFT: u32 = 14;
28610 pub const DISCH1_SHIFT: u32 = 15;
28612 pub const A2_SHIFT: u32 = 16;
28614 pub const FNG0_SHIFT: u32 = 17;
28616 pub const FNG1_SHIFT: u32 = 18;
28618 pub const POE2F_SHIFT: u32 = 19;
28620 pub const POIW_SHIFT: u32 = 22;
28622 pub const POIW_MASK: u64 = 0b111;
28624 pub const VTB0_SHIFT: u32 = 25;
28626 pub const VTB0_MASK: u64 = 0b11111;
28628 pub const VTB1_SHIFT: u32 = 30;
28630 pub const VTB1_MASK: u64 = 0b11111;
28632 pub const TVAD0_SHIFT: u32 = 35;
28634 pub const TVAD1_SHIFT: u32 = 36;
28636
28637 pub const fn poiw(self) -> u8 {
28639 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
28640 }
28641
28642 pub const fn set_poiw(&mut self, value: u8) {
28644 let offset = Self::POIW_SHIFT;
28645 assert!(value & (Self::POIW_MASK as u8) == value);
28646 *self = Self::from_bits_retain(
28647 (self.bits() & !(Self::POIW_MASK << offset)) | ((value as u64) << offset),
28648 );
28649 }
28650
28651 pub const fn with_poiw(mut self, value: u8) -> Self {
28653 self.set_poiw(value);
28654 self
28655 }
28656
28657 pub const fn vtb0(self) -> u8 {
28659 ((self.bits() >> Self::VTB0_SHIFT) & 0b11111) as u8
28660 }
28661
28662 pub const fn set_vtb0(&mut self, value: u8) {
28664 let offset = Self::VTB0_SHIFT;
28665 assert!(value & (Self::VTB0_MASK as u8) == value);
28666 *self = Self::from_bits_retain(
28667 (self.bits() & !(Self::VTB0_MASK << offset)) | ((value as u64) << offset),
28668 );
28669 }
28670
28671 pub const fn with_vtb0(mut self, value: u8) -> Self {
28673 self.set_vtb0(value);
28674 self
28675 }
28676
28677 pub const fn vtb1(self) -> u8 {
28679 ((self.bits() >> Self::VTB1_SHIFT) & 0b11111) as u8
28680 }
28681
28682 pub const fn set_vtb1(&mut self, value: u8) {
28684 let offset = Self::VTB1_SHIFT;
28685 assert!(value & (Self::VTB1_MASK as u8) == value);
28686 *self = Self::from_bits_retain(
28687 (self.bits() & !(Self::VTB1_MASK << offset)) | ((value as u64) << offset),
28688 );
28689 }
28690
28691 pub const fn with_vtb1(mut self, value: u8) -> Self {
28693 self.set_vtb1(value);
28694 self
28695 }
28696}
28697
28698#[cfg(feature = "el1")]
28699bitflags! {
28700 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
28702 #[repr(transparent)]
28703 pub struct TcrEl1: u64 {
28704 const EPD0 = 1 << 7;
28706 const A1 = 1 << 22;
28708 const EPD1 = 1 << 23;
28710 const AS = 1 << 36;
28712 const TBI0 = 1 << 37;
28714 const TBI1 = 1 << 38;
28716 const HA = 1 << 39;
28718 const HD = 1 << 40;
28720 const HPD0 = 1 << 41;
28722 const HPD1 = 1 << 42;
28724 const HWU059 = 1 << 43;
28726 const HWU060 = 1 << 44;
28728 const HWU061 = 1 << 45;
28730 const HWU062 = 1 << 46;
28732 const HWU159 = 1 << 47;
28734 const HWU160 = 1 << 48;
28736 const HWU161 = 1 << 49;
28738 const HWU162 = 1 << 50;
28740 const TBID0 = 1 << 51;
28742 const TBID1 = 1 << 52;
28744 const NFD0 = 1 << 53;
28746 const NFD1 = 1 << 54;
28748 const E0PD0 = 1 << 55;
28750 const E0PD1 = 1 << 56;
28752 const TCMA0 = 1 << 57;
28754 const TCMA1 = 1 << 58;
28756 const DS = 1 << 59;
28758 const MTX0 = 1 << 60;
28760 const MTX1 = 1 << 61;
28762 }
28763}
28764
28765#[cfg(feature = "el1")]
28766impl TcrEl1 {
28767 pub const T0SZ_SHIFT: u32 = 0;
28769 pub const T0SZ_MASK: u64 = 0b111111;
28771 pub const EPD0_SHIFT: u32 = 7;
28773 pub const IRGN0_SHIFT: u32 = 8;
28775 pub const IRGN0_MASK: u64 = 0b11;
28777 pub const ORGN0_SHIFT: u32 = 10;
28779 pub const ORGN0_MASK: u64 = 0b11;
28781 pub const SH0_SHIFT: u32 = 12;
28783 pub const SH0_MASK: u64 = 0b11;
28785 pub const TG0_SHIFT: u32 = 14;
28787 pub const TG0_MASK: u64 = 0b11;
28789 pub const T1SZ_SHIFT: u32 = 16;
28791 pub const T1SZ_MASK: u64 = 0b111111;
28793 pub const A1_SHIFT: u32 = 22;
28795 pub const EPD1_SHIFT: u32 = 23;
28797 pub const IRGN1_SHIFT: u32 = 24;
28799 pub const IRGN1_MASK: u64 = 0b11;
28801 pub const ORGN1_SHIFT: u32 = 26;
28803 pub const ORGN1_MASK: u64 = 0b11;
28805 pub const SH1_SHIFT: u32 = 28;
28807 pub const SH1_MASK: u64 = 0b11;
28809 pub const TG1_SHIFT: u32 = 30;
28811 pub const TG1_MASK: u64 = 0b11;
28813 pub const IPS_SHIFT: u32 = 32;
28815 pub const IPS_MASK: u64 = 0b111;
28817 pub const AS_SHIFT: u32 = 36;
28819 pub const TBI0_SHIFT: u32 = 37;
28821 pub const TBI1_SHIFT: u32 = 38;
28823 pub const HA_SHIFT: u32 = 39;
28825 pub const HD_SHIFT: u32 = 40;
28827 pub const HPD0_SHIFT: u32 = 41;
28829 pub const HPD1_SHIFT: u32 = 42;
28831 pub const HWU059_SHIFT: u32 = 43;
28833 pub const HWU060_SHIFT: u32 = 44;
28835 pub const HWU061_SHIFT: u32 = 45;
28837 pub const HWU062_SHIFT: u32 = 46;
28839 pub const HWU159_SHIFT: u32 = 47;
28841 pub const HWU160_SHIFT: u32 = 48;
28843 pub const HWU161_SHIFT: u32 = 49;
28845 pub const HWU162_SHIFT: u32 = 50;
28847 pub const TBID0_SHIFT: u32 = 51;
28849 pub const TBID1_SHIFT: u32 = 52;
28851 pub const NFD0_SHIFT: u32 = 53;
28853 pub const NFD1_SHIFT: u32 = 54;
28855 pub const E0PD0_SHIFT: u32 = 55;
28857 pub const E0PD1_SHIFT: u32 = 56;
28859 pub const TCMA0_SHIFT: u32 = 57;
28861 pub const TCMA1_SHIFT: u32 = 58;
28863 pub const DS_SHIFT: u32 = 59;
28865 pub const MTX0_SHIFT: u32 = 60;
28867 pub const MTX1_SHIFT: u32 = 61;
28869
28870 pub const fn t0sz(self) -> u8 {
28872 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
28873 }
28874
28875 pub const fn set_t0sz(&mut self, value: u8) {
28877 let offset = Self::T0SZ_SHIFT;
28878 assert!(value & (Self::T0SZ_MASK as u8) == value);
28879 *self = Self::from_bits_retain(
28880 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
28881 );
28882 }
28883
28884 pub const fn with_t0sz(mut self, value: u8) -> Self {
28886 self.set_t0sz(value);
28887 self
28888 }
28889
28890 pub const fn irgn0(self) -> u8 {
28892 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
28893 }
28894
28895 pub const fn set_irgn0(&mut self, value: u8) {
28897 let offset = Self::IRGN0_SHIFT;
28898 assert!(value & (Self::IRGN0_MASK as u8) == value);
28899 *self = Self::from_bits_retain(
28900 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
28901 );
28902 }
28903
28904 pub const fn with_irgn0(mut self, value: u8) -> Self {
28906 self.set_irgn0(value);
28907 self
28908 }
28909
28910 pub const fn orgn0(self) -> u8 {
28912 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
28913 }
28914
28915 pub const fn set_orgn0(&mut self, value: u8) {
28917 let offset = Self::ORGN0_SHIFT;
28918 assert!(value & (Self::ORGN0_MASK as u8) == value);
28919 *self = Self::from_bits_retain(
28920 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
28921 );
28922 }
28923
28924 pub const fn with_orgn0(mut self, value: u8) -> Self {
28926 self.set_orgn0(value);
28927 self
28928 }
28929
28930 pub const fn sh0(self) -> u8 {
28932 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
28933 }
28934
28935 pub const fn set_sh0(&mut self, value: u8) {
28937 let offset = Self::SH0_SHIFT;
28938 assert!(value & (Self::SH0_MASK as u8) == value);
28939 *self = Self::from_bits_retain(
28940 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
28941 );
28942 }
28943
28944 pub const fn with_sh0(mut self, value: u8) -> Self {
28946 self.set_sh0(value);
28947 self
28948 }
28949
28950 pub const fn tg0(self) -> u8 {
28952 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
28953 }
28954
28955 pub const fn set_tg0(&mut self, value: u8) {
28957 let offset = Self::TG0_SHIFT;
28958 assert!(value & (Self::TG0_MASK as u8) == value);
28959 *self = Self::from_bits_retain(
28960 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
28961 );
28962 }
28963
28964 pub const fn with_tg0(mut self, value: u8) -> Self {
28966 self.set_tg0(value);
28967 self
28968 }
28969
28970 pub const fn t1sz(self) -> u8 {
28972 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
28973 }
28974
28975 pub const fn set_t1sz(&mut self, value: u8) {
28977 let offset = Self::T1SZ_SHIFT;
28978 assert!(value & (Self::T1SZ_MASK as u8) == value);
28979 *self = Self::from_bits_retain(
28980 (self.bits() & !(Self::T1SZ_MASK << offset)) | ((value as u64) << offset),
28981 );
28982 }
28983
28984 pub const fn with_t1sz(mut self, value: u8) -> Self {
28986 self.set_t1sz(value);
28987 self
28988 }
28989
28990 pub const fn irgn1(self) -> u8 {
28992 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
28993 }
28994
28995 pub const fn set_irgn1(&mut self, value: u8) {
28997 let offset = Self::IRGN1_SHIFT;
28998 assert!(value & (Self::IRGN1_MASK as u8) == value);
28999 *self = Self::from_bits_retain(
29000 (self.bits() & !(Self::IRGN1_MASK << offset)) | ((value as u64) << offset),
29001 );
29002 }
29003
29004 pub const fn with_irgn1(mut self, value: u8) -> Self {
29006 self.set_irgn1(value);
29007 self
29008 }
29009
29010 pub const fn orgn1(self) -> u8 {
29012 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
29013 }
29014
29015 pub const fn set_orgn1(&mut self, value: u8) {
29017 let offset = Self::ORGN1_SHIFT;
29018 assert!(value & (Self::ORGN1_MASK as u8) == value);
29019 *self = Self::from_bits_retain(
29020 (self.bits() & !(Self::ORGN1_MASK << offset)) | ((value as u64) << offset),
29021 );
29022 }
29023
29024 pub const fn with_orgn1(mut self, value: u8) -> Self {
29026 self.set_orgn1(value);
29027 self
29028 }
29029
29030 pub const fn sh1(self) -> u8 {
29032 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
29033 }
29034
29035 pub const fn set_sh1(&mut self, value: u8) {
29037 let offset = Self::SH1_SHIFT;
29038 assert!(value & (Self::SH1_MASK as u8) == value);
29039 *self = Self::from_bits_retain(
29040 (self.bits() & !(Self::SH1_MASK << offset)) | ((value as u64) << offset),
29041 );
29042 }
29043
29044 pub const fn with_sh1(mut self, value: u8) -> Self {
29046 self.set_sh1(value);
29047 self
29048 }
29049
29050 pub const fn tg1(self) -> u8 {
29052 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
29053 }
29054
29055 pub const fn set_tg1(&mut self, value: u8) {
29057 let offset = Self::TG1_SHIFT;
29058 assert!(value & (Self::TG1_MASK as u8) == value);
29059 *self = Self::from_bits_retain(
29060 (self.bits() & !(Self::TG1_MASK << offset)) | ((value as u64) << offset),
29061 );
29062 }
29063
29064 pub const fn with_tg1(mut self, value: u8) -> Self {
29066 self.set_tg1(value);
29067 self
29068 }
29069
29070 pub const fn ips(self) -> u8 {
29072 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
29073 }
29074
29075 pub const fn set_ips(&mut self, value: u8) {
29077 let offset = Self::IPS_SHIFT;
29078 assert!(value & (Self::IPS_MASK as u8) == value);
29079 *self = Self::from_bits_retain(
29080 (self.bits() & !(Self::IPS_MASK << offset)) | ((value as u64) << offset),
29081 );
29082 }
29083
29084 pub const fn with_ips(mut self, value: u8) -> Self {
29086 self.set_ips(value);
29087 self
29088 }
29089}
29090
29091#[cfg(feature = "el2")]
29092bitflags! {
29093 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29095 #[repr(transparent)]
29096 pub struct TcrEl2: u64 {
29097 const RES1 = 0b10000000100000000000000000000000;
29099 const EPD0 = 1 << 7;
29101 const TBI = 1 << 20;
29103 const A1 = 1 << 22;
29105 const EPD1 = 1 << 23;
29107 const HPD = 1 << 24;
29109 const HWU59 = 1 << 25;
29111 const HWU60 = 1 << 26;
29113 const HWU61 = 1 << 27;
29115 const HWU62 = 1 << 28;
29117 const TBID = 1 << 29;
29119 const TCMA = 1 << 30;
29121 const MTX = 1 << 33;
29123 const AS = 1 << 36;
29125 const TBI0 = 1 << 37;
29127 const TBI1 = 1 << 38;
29129 const HPD0 = 1 << 41;
29131 const HPD1 = 1 << 42;
29133 const HWU059 = 1 << 43;
29135 const HWU060 = 1 << 44;
29137 const HWU061 = 1 << 45;
29139 const HWU062 = 1 << 46;
29141 const HWU159 = 1 << 47;
29143 const HWU160 = 1 << 48;
29145 const HWU161 = 1 << 49;
29147 const HWU162 = 1 << 50;
29149 const TBID0 = 1 << 51;
29151 const TBID1 = 1 << 52;
29153 const NFD0 = 1 << 53;
29155 const TVAD = 1 << 53;
29157 const NFD1 = 1 << 54;
29159 const E0PD0 = 1 << 55;
29161 const E0PD1 = 1 << 56;
29163 const TCMA0 = 1 << 57;
29165 const TCMA1 = 1 << 58;
29167 const MTX0 = 1 << 60;
29169 const MTX1 = 1 << 61;
29171 }
29172}
29173
29174#[cfg(feature = "el2")]
29175impl TcrEl2 {
29176 pub const T0SZ_SHIFT: u32 = 0;
29178 pub const T0SZ_MASK: u64 = 0b111111;
29180 pub const EPD0_SHIFT: u32 = 7;
29182 pub const IRGN0_SHIFT: u32 = 8;
29184 pub const IRGN0_MASK: u64 = 0b11;
29186 pub const ORGN0_SHIFT: u32 = 10;
29188 pub const ORGN0_MASK: u64 = 0b11;
29190 pub const SH0_SHIFT: u32 = 12;
29192 pub const SH0_MASK: u64 = 0b11;
29194 pub const TG0_SHIFT: u32 = 14;
29196 pub const TG0_MASK: u64 = 0b11;
29198 pub const PS_SHIFT: u32 = 16;
29200 pub const PS_MASK: u64 = 0b111;
29202 pub const T1SZ_SHIFT: u32 = 16;
29204 pub const T1SZ_MASK: u64 = 0b111111;
29206 pub const TBI_SHIFT: u32 = 20;
29208 pub const A1_SHIFT: u32 = 22;
29210 pub const EPD1_SHIFT: u32 = 23;
29212 pub const HPD_SHIFT: u32 = 24;
29214 pub const IRGN1_SHIFT: u32 = 24;
29216 pub const IRGN1_MASK: u64 = 0b11;
29218 pub const HWU59_SHIFT: u32 = 25;
29220 pub const HWU60_SHIFT: u32 = 26;
29222 pub const ORGN1_SHIFT: u32 = 26;
29224 pub const ORGN1_MASK: u64 = 0b11;
29226 pub const HWU61_SHIFT: u32 = 27;
29228 pub const HWU62_SHIFT: u32 = 28;
29230 pub const SH1_SHIFT: u32 = 28;
29232 pub const SH1_MASK: u64 = 0b11;
29234 pub const TBID_SHIFT: u32 = 29;
29236 pub const TCMA_SHIFT: u32 = 30;
29238 pub const TG1_SHIFT: u32 = 30;
29240 pub const TG1_MASK: u64 = 0b11;
29242 pub const IPS_SHIFT: u32 = 32;
29244 pub const IPS_MASK: u64 = 0b111;
29246 pub const MTX_SHIFT: u32 = 33;
29248 pub const AS_SHIFT: u32 = 36;
29250 pub const TBI0_SHIFT: u32 = 37;
29252 pub const TBI1_SHIFT: u32 = 38;
29254 pub const HPD0_SHIFT: u32 = 41;
29256 pub const HPD1_SHIFT: u32 = 42;
29258 pub const HWU059_SHIFT: u32 = 43;
29260 pub const HWU060_SHIFT: u32 = 44;
29262 pub const HWU061_SHIFT: u32 = 45;
29264 pub const HWU062_SHIFT: u32 = 46;
29266 pub const HWU159_SHIFT: u32 = 47;
29268 pub const HWU160_SHIFT: u32 = 48;
29270 pub const VTB_SHIFT: u32 = 48;
29272 pub const VTB_MASK: u64 = 0b11111;
29274 pub const HWU161_SHIFT: u32 = 49;
29276 pub const HWU162_SHIFT: u32 = 50;
29278 pub const TBID0_SHIFT: u32 = 51;
29280 pub const TBID1_SHIFT: u32 = 52;
29282 pub const NFD0_SHIFT: u32 = 53;
29284 pub const TVAD_SHIFT: u32 = 53;
29286 pub const NFD1_SHIFT: u32 = 54;
29288 pub const E0PD0_SHIFT: u32 = 55;
29290 pub const E0PD1_SHIFT: u32 = 56;
29292 pub const TCMA0_SHIFT: u32 = 57;
29294 pub const TCMA1_SHIFT: u32 = 58;
29296 pub const MTX0_SHIFT: u32 = 60;
29298 pub const MTX1_SHIFT: u32 = 61;
29300
29301 pub const fn t0sz(self) -> u8 {
29303 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
29304 }
29305
29306 pub const fn set_t0sz(&mut self, value: u8) {
29308 let offset = Self::T0SZ_SHIFT;
29309 assert!(value & (Self::T0SZ_MASK as u8) == value);
29310 *self = Self::from_bits_retain(
29311 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
29312 );
29313 }
29314
29315 pub const fn with_t0sz(mut self, value: u8) -> Self {
29317 self.set_t0sz(value);
29318 self
29319 }
29320
29321 pub const fn irgn0(self) -> u8 {
29323 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
29324 }
29325
29326 pub const fn set_irgn0(&mut self, value: u8) {
29328 let offset = Self::IRGN0_SHIFT;
29329 assert!(value & (Self::IRGN0_MASK as u8) == value);
29330 *self = Self::from_bits_retain(
29331 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
29332 );
29333 }
29334
29335 pub const fn with_irgn0(mut self, value: u8) -> Self {
29337 self.set_irgn0(value);
29338 self
29339 }
29340
29341 pub const fn orgn0(self) -> u8 {
29343 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
29344 }
29345
29346 pub const fn set_orgn0(&mut self, value: u8) {
29348 let offset = Self::ORGN0_SHIFT;
29349 assert!(value & (Self::ORGN0_MASK as u8) == value);
29350 *self = Self::from_bits_retain(
29351 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
29352 );
29353 }
29354
29355 pub const fn with_orgn0(mut self, value: u8) -> Self {
29357 self.set_orgn0(value);
29358 self
29359 }
29360
29361 pub const fn sh0(self) -> u8 {
29363 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
29364 }
29365
29366 pub const fn set_sh0(&mut self, value: u8) {
29368 let offset = Self::SH0_SHIFT;
29369 assert!(value & (Self::SH0_MASK as u8) == value);
29370 *self = Self::from_bits_retain(
29371 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
29372 );
29373 }
29374
29375 pub const fn with_sh0(mut self, value: u8) -> Self {
29377 self.set_sh0(value);
29378 self
29379 }
29380
29381 pub const fn tg0(self) -> u8 {
29383 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
29384 }
29385
29386 pub const fn set_tg0(&mut self, value: u8) {
29388 let offset = Self::TG0_SHIFT;
29389 assert!(value & (Self::TG0_MASK as u8) == value);
29390 *self = Self::from_bits_retain(
29391 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
29392 );
29393 }
29394
29395 pub const fn with_tg0(mut self, value: u8) -> Self {
29397 self.set_tg0(value);
29398 self
29399 }
29400
29401 pub const fn ps(self) -> u8 {
29403 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
29404 }
29405
29406 pub const fn set_ps(&mut self, value: u8) {
29408 let offset = Self::PS_SHIFT;
29409 assert!(value & (Self::PS_MASK as u8) == value);
29410 *self = Self::from_bits_retain(
29411 (self.bits() & !(Self::PS_MASK << offset)) | ((value as u64) << offset),
29412 );
29413 }
29414
29415 pub const fn with_ps(mut self, value: u8) -> Self {
29417 self.set_ps(value);
29418 self
29419 }
29420
29421 pub const fn t1sz(self) -> u8 {
29423 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111111) as u8
29424 }
29425
29426 pub const fn set_t1sz(&mut self, value: u8) {
29428 let offset = Self::T1SZ_SHIFT;
29429 assert!(value & (Self::T1SZ_MASK as u8) == value);
29430 *self = Self::from_bits_retain(
29431 (self.bits() & !(Self::T1SZ_MASK << offset)) | ((value as u64) << offset),
29432 );
29433 }
29434
29435 pub const fn with_t1sz(mut self, value: u8) -> Self {
29437 self.set_t1sz(value);
29438 self
29439 }
29440
29441 pub const fn irgn1(self) -> u8 {
29443 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
29444 }
29445
29446 pub const fn set_irgn1(&mut self, value: u8) {
29448 let offset = Self::IRGN1_SHIFT;
29449 assert!(value & (Self::IRGN1_MASK as u8) == value);
29450 *self = Self::from_bits_retain(
29451 (self.bits() & !(Self::IRGN1_MASK << offset)) | ((value as u64) << offset),
29452 );
29453 }
29454
29455 pub const fn with_irgn1(mut self, value: u8) -> Self {
29457 self.set_irgn1(value);
29458 self
29459 }
29460
29461 pub const fn orgn1(self) -> u8 {
29463 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
29464 }
29465
29466 pub const fn set_orgn1(&mut self, value: u8) {
29468 let offset = Self::ORGN1_SHIFT;
29469 assert!(value & (Self::ORGN1_MASK as u8) == value);
29470 *self = Self::from_bits_retain(
29471 (self.bits() & !(Self::ORGN1_MASK << offset)) | ((value as u64) << offset),
29472 );
29473 }
29474
29475 pub const fn with_orgn1(mut self, value: u8) -> Self {
29477 self.set_orgn1(value);
29478 self
29479 }
29480
29481 pub const fn sh1(self) -> u8 {
29483 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
29484 }
29485
29486 pub const fn set_sh1(&mut self, value: u8) {
29488 let offset = Self::SH1_SHIFT;
29489 assert!(value & (Self::SH1_MASK as u8) == value);
29490 *self = Self::from_bits_retain(
29491 (self.bits() & !(Self::SH1_MASK << offset)) | ((value as u64) << offset),
29492 );
29493 }
29494
29495 pub const fn with_sh1(mut self, value: u8) -> Self {
29497 self.set_sh1(value);
29498 self
29499 }
29500
29501 pub const fn tg1(self) -> u8 {
29503 ((self.bits() >> Self::TG1_SHIFT) & 0b11) as u8
29504 }
29505
29506 pub const fn set_tg1(&mut self, value: u8) {
29508 let offset = Self::TG1_SHIFT;
29509 assert!(value & (Self::TG1_MASK as u8) == value);
29510 *self = Self::from_bits_retain(
29511 (self.bits() & !(Self::TG1_MASK << offset)) | ((value as u64) << offset),
29512 );
29513 }
29514
29515 pub const fn with_tg1(mut self, value: u8) -> Self {
29517 self.set_tg1(value);
29518 self
29519 }
29520
29521 pub const fn ips(self) -> u8 {
29523 ((self.bits() >> Self::IPS_SHIFT) & 0b111) as u8
29524 }
29525
29526 pub const fn set_ips(&mut self, value: u8) {
29528 let offset = Self::IPS_SHIFT;
29529 assert!(value & (Self::IPS_MASK as u8) == value);
29530 *self = Self::from_bits_retain(
29531 (self.bits() & !(Self::IPS_MASK << offset)) | ((value as u64) << offset),
29532 );
29533 }
29534
29535 pub const fn with_ips(mut self, value: u8) -> Self {
29537 self.set_ips(value);
29538 self
29539 }
29540
29541 pub const fn vtb(self) -> u8 {
29543 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
29544 }
29545
29546 pub const fn set_vtb(&mut self, value: u8) {
29548 let offset = Self::VTB_SHIFT;
29549 assert!(value & (Self::VTB_MASK as u8) == value);
29550 *self = Self::from_bits_retain(
29551 (self.bits() & !(Self::VTB_MASK << offset)) | ((value as u64) << offset),
29552 );
29553 }
29554
29555 pub const fn with_vtb(mut self, value: u8) -> Self {
29557 self.set_vtb(value);
29558 self
29559 }
29560}
29561
29562#[cfg(feature = "el3")]
29563bitflags! {
29564 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29566 #[repr(transparent)]
29567 pub struct TcrEl3: u64 {
29568 const RES1 = 0b10000000100000000000000000000000;
29570 const TBI = 1 << 20;
29572 const HA = 1 << 21;
29574 const HD = 1 << 22;
29576 const HPD = 1 << 24;
29578 const HWU59 = 1 << 25;
29580 const HWU60 = 1 << 26;
29582 const HWU61 = 1 << 27;
29584 const HWU62 = 1 << 28;
29586 const TBID = 1 << 29;
29588 const TCMA = 1 << 30;
29590 const DS = 1 << 32;
29592 const MTX = 1 << 33;
29594 const PNCH = 1 << 34;
29596 const PIE = 1 << 35;
29598 const POE = 1 << 36;
29600 const AIE = 1 << 37;
29602 const D128 = 1 << 38;
29604 const PTTWI = 1 << 41;
29606 const HAFT = 1 << 42;
29608 const DISCH0 = 1 << 43;
29610 const POE2F = 1 << 44;
29612 const TVAD = 1 << 53;
29614 }
29615}
29616
29617#[cfg(feature = "el3")]
29618impl TcrEl3 {
29619 pub const T0SZ_SHIFT: u32 = 0;
29621 pub const T0SZ_MASK: u64 = 0b111111;
29623 pub const IRGN0_SHIFT: u32 = 8;
29625 pub const IRGN0_MASK: u64 = 0b11;
29627 pub const ORGN0_SHIFT: u32 = 10;
29629 pub const ORGN0_MASK: u64 = 0b11;
29631 pub const SH0_SHIFT: u32 = 12;
29633 pub const SH0_MASK: u64 = 0b11;
29635 pub const TG0_SHIFT: u32 = 14;
29637 pub const TG0_MASK: u64 = 0b11;
29639 pub const PS_SHIFT: u32 = 16;
29641 pub const PS_MASK: u64 = 0b111;
29643 pub const TBI_SHIFT: u32 = 20;
29645 pub const HA_SHIFT: u32 = 21;
29647 pub const HD_SHIFT: u32 = 22;
29649 pub const HPD_SHIFT: u32 = 24;
29651 pub const HWU59_SHIFT: u32 = 25;
29653 pub const HWU60_SHIFT: u32 = 26;
29655 pub const HWU61_SHIFT: u32 = 27;
29657 pub const HWU62_SHIFT: u32 = 28;
29659 pub const TBID_SHIFT: u32 = 29;
29661 pub const TCMA_SHIFT: u32 = 30;
29663 pub const DS_SHIFT: u32 = 32;
29665 pub const MTX_SHIFT: u32 = 33;
29667 pub const PNCH_SHIFT: u32 = 34;
29669 pub const PIE_SHIFT: u32 = 35;
29671 pub const POE_SHIFT: u32 = 36;
29673 pub const AIE_SHIFT: u32 = 37;
29675 pub const D128_SHIFT: u32 = 38;
29677 pub const PTTWI_SHIFT: u32 = 41;
29679 pub const HAFT_SHIFT: u32 = 42;
29681 pub const DISCH0_SHIFT: u32 = 43;
29683 pub const POE2F_SHIFT: u32 = 44;
29685 pub const POIW_SHIFT: u32 = 45;
29687 pub const POIW_MASK: u64 = 0b111;
29689 pub const VTB_SHIFT: u32 = 48;
29691 pub const VTB_MASK: u64 = 0b11111;
29693 pub const TVAD_SHIFT: u32 = 53;
29695
29696 pub const fn t0sz(self) -> u8 {
29698 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
29699 }
29700
29701 pub const fn set_t0sz(&mut self, value: u8) {
29703 let offset = Self::T0SZ_SHIFT;
29704 assert!(value & (Self::T0SZ_MASK as u8) == value);
29705 *self = Self::from_bits_retain(
29706 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
29707 );
29708 }
29709
29710 pub const fn with_t0sz(mut self, value: u8) -> Self {
29712 self.set_t0sz(value);
29713 self
29714 }
29715
29716 pub const fn irgn0(self) -> u8 {
29718 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
29719 }
29720
29721 pub const fn set_irgn0(&mut self, value: u8) {
29723 let offset = Self::IRGN0_SHIFT;
29724 assert!(value & (Self::IRGN0_MASK as u8) == value);
29725 *self = Self::from_bits_retain(
29726 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
29727 );
29728 }
29729
29730 pub const fn with_irgn0(mut self, value: u8) -> Self {
29732 self.set_irgn0(value);
29733 self
29734 }
29735
29736 pub const fn orgn0(self) -> u8 {
29738 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
29739 }
29740
29741 pub const fn set_orgn0(&mut self, value: u8) {
29743 let offset = Self::ORGN0_SHIFT;
29744 assert!(value & (Self::ORGN0_MASK as u8) == value);
29745 *self = Self::from_bits_retain(
29746 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
29747 );
29748 }
29749
29750 pub const fn with_orgn0(mut self, value: u8) -> Self {
29752 self.set_orgn0(value);
29753 self
29754 }
29755
29756 pub const fn sh0(self) -> u8 {
29758 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
29759 }
29760
29761 pub const fn set_sh0(&mut self, value: u8) {
29763 let offset = Self::SH0_SHIFT;
29764 assert!(value & (Self::SH0_MASK as u8) == value);
29765 *self = Self::from_bits_retain(
29766 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
29767 );
29768 }
29769
29770 pub const fn with_sh0(mut self, value: u8) -> Self {
29772 self.set_sh0(value);
29773 self
29774 }
29775
29776 pub const fn tg0(self) -> u8 {
29778 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
29779 }
29780
29781 pub const fn set_tg0(&mut self, value: u8) {
29783 let offset = Self::TG0_SHIFT;
29784 assert!(value & (Self::TG0_MASK as u8) == value);
29785 *self = Self::from_bits_retain(
29786 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
29787 );
29788 }
29789
29790 pub const fn with_tg0(mut self, value: u8) -> Self {
29792 self.set_tg0(value);
29793 self
29794 }
29795
29796 pub const fn ps(self) -> u8 {
29798 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
29799 }
29800
29801 pub const fn set_ps(&mut self, value: u8) {
29803 let offset = Self::PS_SHIFT;
29804 assert!(value & (Self::PS_MASK as u8) == value);
29805 *self = Self::from_bits_retain(
29806 (self.bits() & !(Self::PS_MASK << offset)) | ((value as u64) << offset),
29807 );
29808 }
29809
29810 pub const fn with_ps(mut self, value: u8) -> Self {
29812 self.set_ps(value);
29813 self
29814 }
29815
29816 pub const fn poiw(self) -> u8 {
29818 ((self.bits() >> Self::POIW_SHIFT) & 0b111) as u8
29819 }
29820
29821 pub const fn set_poiw(&mut self, value: u8) {
29823 let offset = Self::POIW_SHIFT;
29824 assert!(value & (Self::POIW_MASK as u8) == value);
29825 *self = Self::from_bits_retain(
29826 (self.bits() & !(Self::POIW_MASK << offset)) | ((value as u64) << offset),
29827 );
29828 }
29829
29830 pub const fn with_poiw(mut self, value: u8) -> Self {
29832 self.set_poiw(value);
29833 self
29834 }
29835
29836 pub const fn vtb(self) -> u8 {
29838 ((self.bits() >> Self::VTB_SHIFT) & 0b11111) as u8
29839 }
29840
29841 pub const fn set_vtb(&mut self, value: u8) {
29843 let offset = Self::VTB_SHIFT;
29844 assert!(value & (Self::VTB_MASK as u8) == value);
29845 *self = Self::from_bits_retain(
29846 (self.bits() & !(Self::VTB_MASK << offset)) | ((value as u64) << offset),
29847 );
29848 }
29849
29850 pub const fn with_vtb(mut self, value: u8) -> Self {
29852 self.set_vtb(value);
29853 self
29854 }
29855}
29856
29857#[cfg(feature = "el1")]
29858bitflags! {
29859 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29861 #[repr(transparent)]
29862 pub struct Tfsre0El1: u64 {
29863 const TF0 = 1 << 0;
29865 const TF1 = 1 << 1;
29867 }
29868}
29869
29870#[cfg(feature = "el1")]
29871impl Tfsre0El1 {
29872 pub const TF0_SHIFT: u32 = 0;
29874 pub const TF1_SHIFT: u32 = 1;
29876}
29877
29878#[cfg(feature = "el1")]
29879bitflags! {
29880 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29882 #[repr(transparent)]
29883 pub struct TfsrEl1: u64 {
29884 const TF0 = 1 << 0;
29886 const TF1 = 1 << 1;
29888 }
29889}
29890
29891#[cfg(feature = "el1")]
29892impl TfsrEl1 {
29893 pub const TF0_SHIFT: u32 = 0;
29895 pub const TF1_SHIFT: u32 = 1;
29897}
29898
29899#[cfg(feature = "el2")]
29900bitflags! {
29901 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29903 #[repr(transparent)]
29904 pub struct TfsrEl2: u64 {
29905 const TF0 = 1 << 0;
29907 const TF1 = 1 << 1;
29909 }
29910}
29911
29912#[cfg(feature = "el2")]
29913impl TfsrEl2 {
29914 pub const TF0_SHIFT: u32 = 0;
29916 pub const TF1_SHIFT: u32 = 1;
29918}
29919
29920bitflags! {
29921 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29923 #[repr(transparent)]
29924 pub struct Tlbtr: u32 {
29925 const NU = 1 << 0;
29927 }
29928}
29929
29930impl Tlbtr {
29931 pub const NU_SHIFT: u32 = 0;
29933}
29934
29935bitflags! {
29936 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29938 #[repr(transparent)]
29939 pub struct Tpidrprw: u32 {
29940 }
29941}
29942
29943impl Tpidrprw {
29944 pub const TID_SHIFT: u32 = 0;
29946 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
29948
29949 pub const fn tid(self) -> u32 {
29951 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
29952 }
29953
29954 pub const fn set_tid(&mut self, value: u32) {
29956 let offset = Self::TID_SHIFT;
29957 assert!(value & (Self::TID_MASK as u32) == value);
29958 *self = Self::from_bits_retain(
29959 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
29960 );
29961 }
29962
29963 pub const fn with_tid(mut self, value: u32) -> Self {
29965 self.set_tid(value);
29966 self
29967 }
29968}
29969
29970bitflags! {
29971 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
29973 #[repr(transparent)]
29974 pub struct TpidrroEl0: u64 {
29975 }
29976}
29977
29978impl TpidrroEl0 {
29979 pub const THREADID_SHIFT: u32 = 0;
29981 pub const THREADID_MASK: u64 =
29983 0b1111111111111111111111111111111111111111111111111111111111111111;
29984
29985 pub const fn threadid(self) -> u64 {
29987 ((self.bits() >> Self::THREADID_SHIFT)
29988 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
29989 }
29990
29991 pub const fn set_threadid(&mut self, value: u64) {
29993 let offset = Self::THREADID_SHIFT;
29994 assert!(value & (Self::THREADID_MASK as u64) == value);
29995 *self = Self::from_bits_retain(
29996 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
29997 );
29998 }
29999
30000 pub const fn with_threadid(mut self, value: u64) -> Self {
30002 self.set_threadid(value);
30003 self
30004 }
30005}
30006
30007bitflags! {
30008 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30010 #[repr(transparent)]
30011 pub struct Tpidruro: u32 {
30012 }
30013}
30014
30015impl Tpidruro {
30016 pub const TID_SHIFT: u32 = 0;
30018 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
30020
30021 pub const fn tid(self) -> u32 {
30023 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
30024 }
30025
30026 pub const fn set_tid(&mut self, value: u32) {
30028 let offset = Self::TID_SHIFT;
30029 assert!(value & (Self::TID_MASK as u32) == value);
30030 *self = Self::from_bits_retain(
30031 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
30032 );
30033 }
30034
30035 pub const fn with_tid(mut self, value: u32) -> Self {
30037 self.set_tid(value);
30038 self
30039 }
30040}
30041
30042bitflags! {
30043 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30045 #[repr(transparent)]
30046 pub struct Tpidrurw: u32 {
30047 }
30048}
30049
30050impl Tpidrurw {
30051 pub const TID_SHIFT: u32 = 0;
30053 pub const TID_MASK: u32 = 0b11111111111111111111111111111111;
30055
30056 pub const fn tid(self) -> u32 {
30058 ((self.bits() >> Self::TID_SHIFT) & 0b11111111111111111111111111111111) as u32
30059 }
30060
30061 pub const fn set_tid(&mut self, value: u32) {
30063 let offset = Self::TID_SHIFT;
30064 assert!(value & (Self::TID_MASK as u32) == value);
30065 *self = Self::from_bits_retain(
30066 (self.bits() & !(Self::TID_MASK << offset)) | ((value as u32) << offset),
30067 );
30068 }
30069
30070 pub const fn with_tid(mut self, value: u32) -> Self {
30072 self.set_tid(value);
30073 self
30074 }
30075}
30076
30077bitflags! {
30078 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30080 #[repr(transparent)]
30081 pub struct TpidrEl0: u64 {
30082 }
30083}
30084
30085impl TpidrEl0 {
30086 pub const THREADID_SHIFT: u32 = 0;
30088 pub const THREADID_MASK: u64 =
30090 0b1111111111111111111111111111111111111111111111111111111111111111;
30091
30092 pub const fn threadid(self) -> u64 {
30094 ((self.bits() >> Self::THREADID_SHIFT)
30095 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
30096 }
30097
30098 pub const fn set_threadid(&mut self, value: u64) {
30100 let offset = Self::THREADID_SHIFT;
30101 assert!(value & (Self::THREADID_MASK as u64) == value);
30102 *self = Self::from_bits_retain(
30103 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
30104 );
30105 }
30106
30107 pub const fn with_threadid(mut self, value: u64) -> Self {
30109 self.set_threadid(value);
30110 self
30111 }
30112}
30113
30114#[cfg(feature = "el1")]
30115bitflags! {
30116 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30118 #[repr(transparent)]
30119 pub struct TpidrEl1: u64 {
30120 }
30121}
30122
30123#[cfg(feature = "el1")]
30124impl TpidrEl1 {
30125 pub const THREADID_SHIFT: u32 = 0;
30127 pub const THREADID_MASK: u64 =
30129 0b1111111111111111111111111111111111111111111111111111111111111111;
30130
30131 pub const fn threadid(self) -> u64 {
30133 ((self.bits() >> Self::THREADID_SHIFT)
30134 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
30135 }
30136
30137 pub const fn set_threadid(&mut self, value: u64) {
30139 let offset = Self::THREADID_SHIFT;
30140 assert!(value & (Self::THREADID_MASK as u64) == value);
30141 *self = Self::from_bits_retain(
30142 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
30143 );
30144 }
30145
30146 pub const fn with_threadid(mut self, value: u64) -> Self {
30148 self.set_threadid(value);
30149 self
30150 }
30151}
30152
30153#[cfg(feature = "el2")]
30154bitflags! {
30155 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30157 #[repr(transparent)]
30158 pub struct TpidrEl2: u64 {
30159 }
30160}
30161
30162#[cfg(feature = "el2")]
30163impl TpidrEl2 {
30164 pub const THREADID_SHIFT: u32 = 0;
30166 pub const THREADID_MASK: u64 =
30168 0b1111111111111111111111111111111111111111111111111111111111111111;
30169
30170 pub const fn threadid(self) -> u64 {
30172 ((self.bits() >> Self::THREADID_SHIFT)
30173 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
30174 }
30175
30176 pub const fn set_threadid(&mut self, value: u64) {
30178 let offset = Self::THREADID_SHIFT;
30179 assert!(value & (Self::THREADID_MASK as u64) == value);
30180 *self = Self::from_bits_retain(
30181 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
30182 );
30183 }
30184
30185 pub const fn with_threadid(mut self, value: u64) -> Self {
30187 self.set_threadid(value);
30188 self
30189 }
30190}
30191
30192#[cfg(feature = "el3")]
30193bitflags! {
30194 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30196 #[repr(transparent)]
30197 pub struct TpidrEl3: u64 {
30198 }
30199}
30200
30201#[cfg(feature = "el3")]
30202impl TpidrEl3 {
30203 pub const THREADID_SHIFT: u32 = 0;
30205 pub const THREADID_MASK: u64 =
30207 0b1111111111111111111111111111111111111111111111111111111111111111;
30208
30209 pub const fn threadid(self) -> u64 {
30211 ((self.bits() >> Self::THREADID_SHIFT)
30212 & 0b1111111111111111111111111111111111111111111111111111111111111111) as u64
30213 }
30214
30215 pub const fn set_threadid(&mut self, value: u64) {
30217 let offset = Self::THREADID_SHIFT;
30218 assert!(value & (Self::THREADID_MASK as u64) == value);
30219 *self = Self::from_bits_retain(
30220 (self.bits() & !(Self::THREADID_MASK << offset)) | ((value as u64) << offset),
30221 );
30222 }
30223
30224 pub const fn with_threadid(mut self, value: u64) -> Self {
30226 self.set_threadid(value);
30227 self
30228 }
30229}
30230
30231bitflags! {
30232 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30234 #[repr(transparent)]
30235 pub struct Trfcr: u32 {
30236 const E0TRE = 1 << 0;
30238 const E1TRE = 1 << 1;
30240 }
30241}
30242
30243impl Trfcr {
30244 pub const E0TRE_SHIFT: u32 = 0;
30246 pub const E1TRE_SHIFT: u32 = 1;
30248 pub const TS_SHIFT: u32 = 5;
30250 pub const TS_MASK: u32 = 0b11;
30252
30253 pub const fn ts(self) -> u8 {
30255 ((self.bits() >> Self::TS_SHIFT) & 0b11) as u8
30256 }
30257
30258 pub const fn set_ts(&mut self, value: u8) {
30260 let offset = Self::TS_SHIFT;
30261 assert!(value & (Self::TS_MASK as u8) == value);
30262 *self = Self::from_bits_retain(
30263 (self.bits() & !(Self::TS_MASK << offset)) | ((value as u32) << offset),
30264 );
30265 }
30266
30267 pub const fn with_ts(mut self, value: u8) -> Self {
30269 self.set_ts(value);
30270 self
30271 }
30272}
30273
30274bitflags! {
30275 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30277 #[repr(transparent)]
30278 pub struct Ttbcr: u32 {
30279 const PD0 = 1 << 4;
30281 const PD1 = 1 << 5;
30283 const T2E = 1 << 6;
30285 const EPD0 = 1 << 7;
30287 const A1 = 1 << 22;
30289 const EPD1 = 1 << 23;
30291 const EAE = 1 << 31;
30293 }
30294}
30295
30296impl Ttbcr {
30297 pub const N_SHIFT: u32 = 0;
30299 pub const N_MASK: u32 = 0b111;
30301 pub const T0SZ_SHIFT: u32 = 0;
30303 pub const T0SZ_MASK: u32 = 0b111;
30305 pub const PD0_SHIFT: u32 = 4;
30307 pub const PD1_SHIFT: u32 = 5;
30309 pub const T2E_SHIFT: u32 = 6;
30311 pub const EPD0_SHIFT: u32 = 7;
30313 pub const IRGN0_SHIFT: u32 = 8;
30315 pub const IRGN0_MASK: u32 = 0b11;
30317 pub const ORGN0_SHIFT: u32 = 10;
30319 pub const ORGN0_MASK: u32 = 0b11;
30321 pub const SH0_SHIFT: u32 = 12;
30323 pub const SH0_MASK: u32 = 0b11;
30325 pub const T1SZ_SHIFT: u32 = 16;
30327 pub const T1SZ_MASK: u32 = 0b111;
30329 pub const A1_SHIFT: u32 = 22;
30331 pub const EPD1_SHIFT: u32 = 23;
30333 pub const IRGN1_SHIFT: u32 = 24;
30335 pub const IRGN1_MASK: u32 = 0b11;
30337 pub const ORGN1_SHIFT: u32 = 26;
30339 pub const ORGN1_MASK: u32 = 0b11;
30341 pub const SH1_SHIFT: u32 = 28;
30343 pub const SH1_MASK: u32 = 0b11;
30345 pub const EAE_SHIFT: u32 = 31;
30347
30348 pub const fn n(self) -> u8 {
30350 ((self.bits() >> Self::N_SHIFT) & 0b111) as u8
30351 }
30352
30353 pub const fn set_n(&mut self, value: u8) {
30355 let offset = Self::N_SHIFT;
30356 assert!(value & (Self::N_MASK as u8) == value);
30357 *self = Self::from_bits_retain(
30358 (self.bits() & !(Self::N_MASK << offset)) | ((value as u32) << offset),
30359 );
30360 }
30361
30362 pub const fn with_n(mut self, value: u8) -> Self {
30364 self.set_n(value);
30365 self
30366 }
30367
30368 pub const fn t0sz(self) -> u8 {
30370 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111) as u8
30371 }
30372
30373 pub const fn set_t0sz(&mut self, value: u8) {
30375 let offset = Self::T0SZ_SHIFT;
30376 assert!(value & (Self::T0SZ_MASK as u8) == value);
30377 *self = Self::from_bits_retain(
30378 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u32) << offset),
30379 );
30380 }
30381
30382 pub const fn with_t0sz(mut self, value: u8) -> Self {
30384 self.set_t0sz(value);
30385 self
30386 }
30387
30388 pub const fn irgn0(self) -> u8 {
30390 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
30391 }
30392
30393 pub const fn set_irgn0(&mut self, value: u8) {
30395 let offset = Self::IRGN0_SHIFT;
30396 assert!(value & (Self::IRGN0_MASK as u8) == value);
30397 *self = Self::from_bits_retain(
30398 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u32) << offset),
30399 );
30400 }
30401
30402 pub const fn with_irgn0(mut self, value: u8) -> Self {
30404 self.set_irgn0(value);
30405 self
30406 }
30407
30408 pub const fn orgn0(self) -> u8 {
30410 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
30411 }
30412
30413 pub const fn set_orgn0(&mut self, value: u8) {
30415 let offset = Self::ORGN0_SHIFT;
30416 assert!(value & (Self::ORGN0_MASK as u8) == value);
30417 *self = Self::from_bits_retain(
30418 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u32) << offset),
30419 );
30420 }
30421
30422 pub const fn with_orgn0(mut self, value: u8) -> Self {
30424 self.set_orgn0(value);
30425 self
30426 }
30427
30428 pub const fn sh0(self) -> u8 {
30430 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
30431 }
30432
30433 pub const fn set_sh0(&mut self, value: u8) {
30435 let offset = Self::SH0_SHIFT;
30436 assert!(value & (Self::SH0_MASK as u8) == value);
30437 *self = Self::from_bits_retain(
30438 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u32) << offset),
30439 );
30440 }
30441
30442 pub const fn with_sh0(mut self, value: u8) -> Self {
30444 self.set_sh0(value);
30445 self
30446 }
30447
30448 pub const fn t1sz(self) -> u8 {
30450 ((self.bits() >> Self::T1SZ_SHIFT) & 0b111) as u8
30451 }
30452
30453 pub const fn set_t1sz(&mut self, value: u8) {
30455 let offset = Self::T1SZ_SHIFT;
30456 assert!(value & (Self::T1SZ_MASK as u8) == value);
30457 *self = Self::from_bits_retain(
30458 (self.bits() & !(Self::T1SZ_MASK << offset)) | ((value as u32) << offset),
30459 );
30460 }
30461
30462 pub const fn with_t1sz(mut self, value: u8) -> Self {
30464 self.set_t1sz(value);
30465 self
30466 }
30467
30468 pub const fn irgn1(self) -> u8 {
30470 ((self.bits() >> Self::IRGN1_SHIFT) & 0b11) as u8
30471 }
30472
30473 pub const fn set_irgn1(&mut self, value: u8) {
30475 let offset = Self::IRGN1_SHIFT;
30476 assert!(value & (Self::IRGN1_MASK as u8) == value);
30477 *self = Self::from_bits_retain(
30478 (self.bits() & !(Self::IRGN1_MASK << offset)) | ((value as u32) << offset),
30479 );
30480 }
30481
30482 pub const fn with_irgn1(mut self, value: u8) -> Self {
30484 self.set_irgn1(value);
30485 self
30486 }
30487
30488 pub const fn orgn1(self) -> u8 {
30490 ((self.bits() >> Self::ORGN1_SHIFT) & 0b11) as u8
30491 }
30492
30493 pub const fn set_orgn1(&mut self, value: u8) {
30495 let offset = Self::ORGN1_SHIFT;
30496 assert!(value & (Self::ORGN1_MASK as u8) == value);
30497 *self = Self::from_bits_retain(
30498 (self.bits() & !(Self::ORGN1_MASK << offset)) | ((value as u32) << offset),
30499 );
30500 }
30501
30502 pub const fn with_orgn1(mut self, value: u8) -> Self {
30504 self.set_orgn1(value);
30505 self
30506 }
30507
30508 pub const fn sh1(self) -> u8 {
30510 ((self.bits() >> Self::SH1_SHIFT) & 0b11) as u8
30511 }
30512
30513 pub const fn set_sh1(&mut self, value: u8) {
30515 let offset = Self::SH1_SHIFT;
30516 assert!(value & (Self::SH1_MASK as u8) == value);
30517 *self = Self::from_bits_retain(
30518 (self.bits() & !(Self::SH1_MASK << offset)) | ((value as u32) << offset),
30519 );
30520 }
30521
30522 pub const fn with_sh1(mut self, value: u8) -> Self {
30524 self.set_sh1(value);
30525 self
30526 }
30527}
30528
30529bitflags! {
30530 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30532 #[repr(transparent)]
30533 pub struct Ttbcr2: u32 {
30534 const HPD0 = 1 << 9;
30536 const HPD1 = 1 << 10;
30538 const HWU059 = 1 << 11;
30540 const HWU060 = 1 << 12;
30542 const HWU061 = 1 << 13;
30544 const HWU062 = 1 << 14;
30546 const HWU159 = 1 << 15;
30548 const HWU160 = 1 << 16;
30550 const HWU161 = 1 << 17;
30552 const HWU162 = 1 << 18;
30554 }
30555}
30556
30557impl Ttbcr2 {
30558 pub const HPD0_SHIFT: u32 = 9;
30560 pub const HPD1_SHIFT: u32 = 10;
30562 pub const HWU059_SHIFT: u32 = 11;
30564 pub const HWU060_SHIFT: u32 = 12;
30566 pub const HWU061_SHIFT: u32 = 13;
30568 pub const HWU062_SHIFT: u32 = 14;
30570 pub const HWU159_SHIFT: u32 = 15;
30572 pub const HWU160_SHIFT: u32 = 16;
30574 pub const HWU161_SHIFT: u32 = 17;
30576 pub const HWU162_SHIFT: u32 = 18;
30578}
30579
30580bitflags! {
30581 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30583 #[repr(transparent)]
30584 pub struct Ttbr0: u64 {
30585 const CNP = 1 << 0;
30587 const S = 1 << 1;
30589 const IMP = 1 << 2;
30591 const NOS = 1 << 5;
30593 }
30594}
30595
30596impl Ttbr0 {
30597 pub const CNP_SHIFT: u32 = 0;
30599 pub const BADDR_SHIFT: u32 = 1;
30601 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
30603 pub const S_SHIFT: u32 = 1;
30605 pub const IMP_SHIFT: u32 = 2;
30607 pub const RGN_SHIFT: u32 = 3;
30609 pub const RGN_MASK: u64 = 0b11;
30611 pub const NOS_SHIFT: u32 = 5;
30613 pub const TTB0_SHIFT: u32 = 7;
30615 pub const TTB0_MASK: u64 = 0b1111111111111111111111111;
30617 pub const ASID_SHIFT: u32 = 48;
30619 pub const ASID_MASK: u64 = 0b11111111;
30621
30622 pub const fn baddr(self) -> u64 {
30624 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
30625 as u64
30626 }
30627
30628 pub const fn set_baddr(&mut self, value: u64) {
30630 let offset = Self::BADDR_SHIFT;
30631 assert!(value & (Self::BADDR_MASK as u64) == value);
30632 *self = Self::from_bits_retain(
30633 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
30634 );
30635 }
30636
30637 pub const fn with_baddr(mut self, value: u64) -> Self {
30639 self.set_baddr(value);
30640 self
30641 }
30642
30643 pub const fn rgn(self) -> u8 {
30645 ((self.bits() >> Self::RGN_SHIFT) & 0b11) as u8
30646 }
30647
30648 pub const fn set_rgn(&mut self, value: u8) {
30650 let offset = Self::RGN_SHIFT;
30651 assert!(value & (Self::RGN_MASK as u8) == value);
30652 *self = Self::from_bits_retain(
30653 (self.bits() & !(Self::RGN_MASK << offset)) | ((value as u64) << offset),
30654 );
30655 }
30656
30657 pub const fn with_rgn(mut self, value: u8) -> Self {
30659 self.set_rgn(value);
30660 self
30661 }
30662
30663 pub const fn ttb0(self) -> u32 {
30665 ((self.bits() >> Self::TTB0_SHIFT) & 0b1111111111111111111111111) as u32
30666 }
30667
30668 pub const fn set_ttb0(&mut self, value: u32) {
30670 let offset = Self::TTB0_SHIFT;
30671 assert!(value & (Self::TTB0_MASK as u32) == value);
30672 *self = Self::from_bits_retain(
30673 (self.bits() & !(Self::TTB0_MASK << offset)) | ((value as u64) << offset),
30674 );
30675 }
30676
30677 pub const fn with_ttb0(mut self, value: u32) -> Self {
30679 self.set_ttb0(value);
30680 self
30681 }
30682
30683 pub const fn asid(self) -> u8 {
30685 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
30686 }
30687
30688 pub const fn set_asid(&mut self, value: u8) {
30690 let offset = Self::ASID_SHIFT;
30691 assert!(value & (Self::ASID_MASK as u8) == value);
30692 *self = Self::from_bits_retain(
30693 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
30694 );
30695 }
30696
30697 pub const fn with_asid(mut self, value: u8) -> Self {
30699 self.set_asid(value);
30700 self
30701 }
30702}
30703
30704#[cfg(feature = "el1")]
30705bitflags! {
30706 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30708 #[repr(transparent)]
30709 pub struct Ttbr0El1: u64 {
30710 const CNP = 1 << 0;
30712 }
30713}
30714
30715#[cfg(feature = "el1")]
30716impl Ttbr0El1 {
30717 pub const CNP_SHIFT: u32 = 0;
30719 pub const BADDR_47_1_SHIFT: u32 = 1;
30721 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
30723 pub const SKL_SHIFT: u32 = 1;
30725 pub const SKL_MASK: u64 = 0b11;
30727 pub const ASID_SHIFT: u32 = 48;
30729 pub const ASID_MASK: u64 = 0b1111111111111111;
30731
30732 pub const fn baddr_47_1(self) -> u64 {
30734 ((self.bits() >> Self::BADDR_47_1_SHIFT)
30735 & 0b11111111111111111111111111111111111111111111111) as u64
30736 }
30737
30738 pub const fn set_baddr_47_1(&mut self, value: u64) {
30740 let offset = Self::BADDR_47_1_SHIFT;
30741 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
30742 *self = Self::from_bits_retain(
30743 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
30744 );
30745 }
30746
30747 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
30749 self.set_baddr_47_1(value);
30750 self
30751 }
30752
30753 pub const fn skl(self) -> u8 {
30755 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
30756 }
30757
30758 pub const fn set_skl(&mut self, value: u8) {
30760 let offset = Self::SKL_SHIFT;
30761 assert!(value & (Self::SKL_MASK as u8) == value);
30762 *self = Self::from_bits_retain(
30763 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
30764 );
30765 }
30766
30767 pub const fn with_skl(mut self, value: u8) -> Self {
30769 self.set_skl(value);
30770 self
30771 }
30772
30773 pub const fn asid(self) -> u16 {
30775 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
30776 }
30777
30778 pub const fn set_asid(&mut self, value: u16) {
30780 let offset = Self::ASID_SHIFT;
30781 assert!(value & (Self::ASID_MASK as u16) == value);
30782 *self = Self::from_bits_retain(
30783 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
30784 );
30785 }
30786
30787 pub const fn with_asid(mut self, value: u16) -> Self {
30789 self.set_asid(value);
30790 self
30791 }
30792}
30793
30794#[cfg(feature = "el2")]
30795bitflags! {
30796 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30798 #[repr(transparent)]
30799 pub struct Ttbr0El2: u64 {
30800 const CNP = 1 << 0;
30802 }
30803}
30804
30805#[cfg(feature = "el2")]
30806impl Ttbr0El2 {
30807 pub const CNP_SHIFT: u32 = 0;
30809 pub const BADDR_47_1_SHIFT: u32 = 1;
30811 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
30813 pub const SKL_SHIFT: u32 = 1;
30815 pub const SKL_MASK: u64 = 0b11;
30817 pub const ASID_SHIFT: u32 = 48;
30819 pub const ASID_MASK: u64 = 0b1111111111111111;
30821
30822 pub const fn baddr_47_1(self) -> u64 {
30824 ((self.bits() >> Self::BADDR_47_1_SHIFT)
30825 & 0b11111111111111111111111111111111111111111111111) as u64
30826 }
30827
30828 pub const fn set_baddr_47_1(&mut self, value: u64) {
30830 let offset = Self::BADDR_47_1_SHIFT;
30831 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
30832 *self = Self::from_bits_retain(
30833 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
30834 );
30835 }
30836
30837 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
30839 self.set_baddr_47_1(value);
30840 self
30841 }
30842
30843 pub const fn skl(self) -> u8 {
30845 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
30846 }
30847
30848 pub const fn set_skl(&mut self, value: u8) {
30850 let offset = Self::SKL_SHIFT;
30851 assert!(value & (Self::SKL_MASK as u8) == value);
30852 *self = Self::from_bits_retain(
30853 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
30854 );
30855 }
30856
30857 pub const fn with_skl(mut self, value: u8) -> Self {
30859 self.set_skl(value);
30860 self
30861 }
30862
30863 pub const fn asid(self) -> u16 {
30865 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
30866 }
30867
30868 pub const fn set_asid(&mut self, value: u16) {
30870 let offset = Self::ASID_SHIFT;
30871 assert!(value & (Self::ASID_MASK as u16) == value);
30872 *self = Self::from_bits_retain(
30873 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
30874 );
30875 }
30876
30877 pub const fn with_asid(mut self, value: u16) -> Self {
30879 self.set_asid(value);
30880 self
30881 }
30882}
30883
30884#[cfg(feature = "el3")]
30885bitflags! {
30886 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30888 #[repr(transparent)]
30889 pub struct Ttbr0El3: u64 {
30890 const CNP = 1 << 0;
30892 }
30893}
30894
30895#[cfg(feature = "el3")]
30896impl Ttbr0El3 {
30897 pub const CNP_SHIFT: u32 = 0;
30899 pub const SKL_SHIFT: u32 = 1;
30901 pub const SKL_MASK: u64 = 0b11;
30903
30904 pub const fn skl(self) -> u8 {
30906 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
30907 }
30908
30909 pub const fn set_skl(&mut self, value: u8) {
30911 let offset = Self::SKL_SHIFT;
30912 assert!(value & (Self::SKL_MASK as u8) == value);
30913 *self = Self::from_bits_retain(
30914 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
30915 );
30916 }
30917
30918 pub const fn with_skl(mut self, value: u8) -> Self {
30920 self.set_skl(value);
30921 self
30922 }
30923}
30924
30925bitflags! {
30926 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
30928 #[repr(transparent)]
30929 pub struct Ttbr1: u64 {
30930 const CNP = 1 << 0;
30932 const S = 1 << 1;
30934 const IMP = 1 << 2;
30936 const NOS = 1 << 5;
30938 }
30939}
30940
30941impl Ttbr1 {
30942 pub const CNP_SHIFT: u32 = 0;
30944 pub const BADDR_SHIFT: u32 = 1;
30946 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
30948 pub const S_SHIFT: u32 = 1;
30950 pub const IMP_SHIFT: u32 = 2;
30952 pub const RGN_SHIFT: u32 = 3;
30954 pub const RGN_MASK: u64 = 0b11;
30956 pub const NOS_SHIFT: u32 = 5;
30958 pub const TTB1_SHIFT: u32 = 7;
30960 pub const TTB1_MASK: u64 = 0b1111111111111111111111111;
30962 pub const ASID_SHIFT: u32 = 48;
30964 pub const ASID_MASK: u64 = 0b11111111;
30966
30967 pub const fn baddr(self) -> u64 {
30969 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
30970 as u64
30971 }
30972
30973 pub const fn set_baddr(&mut self, value: u64) {
30975 let offset = Self::BADDR_SHIFT;
30976 assert!(value & (Self::BADDR_MASK as u64) == value);
30977 *self = Self::from_bits_retain(
30978 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
30979 );
30980 }
30981
30982 pub const fn with_baddr(mut self, value: u64) -> Self {
30984 self.set_baddr(value);
30985 self
30986 }
30987
30988 pub const fn rgn(self) -> u8 {
30990 ((self.bits() >> Self::RGN_SHIFT) & 0b11) as u8
30991 }
30992
30993 pub const fn set_rgn(&mut self, value: u8) {
30995 let offset = Self::RGN_SHIFT;
30996 assert!(value & (Self::RGN_MASK as u8) == value);
30997 *self = Self::from_bits_retain(
30998 (self.bits() & !(Self::RGN_MASK << offset)) | ((value as u64) << offset),
30999 );
31000 }
31001
31002 pub const fn with_rgn(mut self, value: u8) -> Self {
31004 self.set_rgn(value);
31005 self
31006 }
31007
31008 pub const fn ttb1(self) -> u32 {
31010 ((self.bits() >> Self::TTB1_SHIFT) & 0b1111111111111111111111111) as u32
31011 }
31012
31013 pub const fn set_ttb1(&mut self, value: u32) {
31015 let offset = Self::TTB1_SHIFT;
31016 assert!(value & (Self::TTB1_MASK as u32) == value);
31017 *self = Self::from_bits_retain(
31018 (self.bits() & !(Self::TTB1_MASK << offset)) | ((value as u64) << offset),
31019 );
31020 }
31021
31022 pub const fn with_ttb1(mut self, value: u32) -> Self {
31024 self.set_ttb1(value);
31025 self
31026 }
31027
31028 pub const fn asid(self) -> u8 {
31030 ((self.bits() >> Self::ASID_SHIFT) & 0b11111111) as u8
31031 }
31032
31033 pub const fn set_asid(&mut self, value: u8) {
31035 let offset = Self::ASID_SHIFT;
31036 assert!(value & (Self::ASID_MASK as u8) == value);
31037 *self = Self::from_bits_retain(
31038 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
31039 );
31040 }
31041
31042 pub const fn with_asid(mut self, value: u8) -> Self {
31044 self.set_asid(value);
31045 self
31046 }
31047}
31048
31049#[cfg(feature = "el1")]
31050bitflags! {
31051 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31053 #[repr(transparent)]
31054 pub struct Ttbr1El1: u64 {
31055 const CNP = 1 << 0;
31057 }
31058}
31059
31060#[cfg(feature = "el1")]
31061impl Ttbr1El1 {
31062 pub const CNP_SHIFT: u32 = 0;
31064 pub const BADDR_47_1_SHIFT: u32 = 1;
31066 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
31068 pub const SKL_SHIFT: u32 = 1;
31070 pub const SKL_MASK: u64 = 0b11;
31072 pub const ASID_SHIFT: u32 = 48;
31074 pub const ASID_MASK: u64 = 0b1111111111111111;
31076
31077 pub const fn baddr_47_1(self) -> u64 {
31079 ((self.bits() >> Self::BADDR_47_1_SHIFT)
31080 & 0b11111111111111111111111111111111111111111111111) as u64
31081 }
31082
31083 pub const fn set_baddr_47_1(&mut self, value: u64) {
31085 let offset = Self::BADDR_47_1_SHIFT;
31086 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
31087 *self = Self::from_bits_retain(
31088 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
31089 );
31090 }
31091
31092 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
31094 self.set_baddr_47_1(value);
31095 self
31096 }
31097
31098 pub const fn skl(self) -> u8 {
31100 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
31101 }
31102
31103 pub const fn set_skl(&mut self, value: u8) {
31105 let offset = Self::SKL_SHIFT;
31106 assert!(value & (Self::SKL_MASK as u8) == value);
31107 *self = Self::from_bits_retain(
31108 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
31109 );
31110 }
31111
31112 pub const fn with_skl(mut self, value: u8) -> Self {
31114 self.set_skl(value);
31115 self
31116 }
31117
31118 pub const fn asid(self) -> u16 {
31120 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
31121 }
31122
31123 pub const fn set_asid(&mut self, value: u16) {
31125 let offset = Self::ASID_SHIFT;
31126 assert!(value & (Self::ASID_MASK as u16) == value);
31127 *self = Self::from_bits_retain(
31128 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
31129 );
31130 }
31131
31132 pub const fn with_asid(mut self, value: u16) -> Self {
31134 self.set_asid(value);
31135 self
31136 }
31137}
31138
31139#[cfg(feature = "el2")]
31140bitflags! {
31141 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31143 #[repr(transparent)]
31144 pub struct Ttbr1El2: u64 {
31145 const CNP = 1 << 0;
31147 }
31148}
31149
31150#[cfg(feature = "el2")]
31151impl Ttbr1El2 {
31152 pub const CNP_SHIFT: u32 = 0;
31154 pub const BADDR_47_1_SHIFT: u32 = 1;
31156 pub const BADDR_47_1_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
31158 pub const SKL_SHIFT: u32 = 1;
31160 pub const SKL_MASK: u64 = 0b11;
31162 pub const ASID_SHIFT: u32 = 48;
31164 pub const ASID_MASK: u64 = 0b1111111111111111;
31166
31167 pub const fn baddr_47_1(self) -> u64 {
31169 ((self.bits() >> Self::BADDR_47_1_SHIFT)
31170 & 0b11111111111111111111111111111111111111111111111) as u64
31171 }
31172
31173 pub const fn set_baddr_47_1(&mut self, value: u64) {
31175 let offset = Self::BADDR_47_1_SHIFT;
31176 assert!(value & (Self::BADDR_47_1_MASK as u64) == value);
31177 *self = Self::from_bits_retain(
31178 (self.bits() & !(Self::BADDR_47_1_MASK << offset)) | ((value as u64) << offset),
31179 );
31180 }
31181
31182 pub const fn with_baddr_47_1(mut self, value: u64) -> Self {
31184 self.set_baddr_47_1(value);
31185 self
31186 }
31187
31188 pub const fn skl(self) -> u8 {
31190 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
31191 }
31192
31193 pub const fn set_skl(&mut self, value: u8) {
31195 let offset = Self::SKL_SHIFT;
31196 assert!(value & (Self::SKL_MASK as u8) == value);
31197 *self = Self::from_bits_retain(
31198 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
31199 );
31200 }
31201
31202 pub const fn with_skl(mut self, value: u8) -> Self {
31204 self.set_skl(value);
31205 self
31206 }
31207
31208 pub const fn asid(self) -> u16 {
31210 ((self.bits() >> Self::ASID_SHIFT) & 0b1111111111111111) as u16
31211 }
31212
31213 pub const fn set_asid(&mut self, value: u16) {
31215 let offset = Self::ASID_SHIFT;
31216 assert!(value & (Self::ASID_MASK as u16) == value);
31217 *self = Self::from_bits_retain(
31218 (self.bits() & !(Self::ASID_MASK << offset)) | ((value as u64) << offset),
31219 );
31220 }
31221
31222 pub const fn with_asid(mut self, value: u16) -> Self {
31224 self.set_asid(value);
31225 self
31226 }
31227}
31228
31229bitflags! {
31230 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31232 #[repr(transparent)]
31233 pub struct Vbar: u32 {
31234 }
31235}
31236
31237impl Vbar {
31238 pub const VBA_SHIFT: u32 = 5;
31240 pub const VBA_MASK: u32 = 0b111111111111111111111111111;
31242
31243 pub const fn vba(self) -> u32 {
31245 ((self.bits() >> Self::VBA_SHIFT) & 0b111111111111111111111111111) as u32
31246 }
31247
31248 pub const fn set_vba(&mut self, value: u32) {
31250 let offset = Self::VBA_SHIFT;
31251 assert!(value & (Self::VBA_MASK as u32) == value);
31252 *self = Self::from_bits_retain(
31253 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u32) << offset),
31254 );
31255 }
31256
31257 pub const fn with_vba(mut self, value: u32) -> Self {
31259 self.set_vba(value);
31260 self
31261 }
31262}
31263
31264#[cfg(feature = "el1")]
31265bitflags! {
31266 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31268 #[repr(transparent)]
31269 pub struct VbarEl1: u64 {
31270 const UT = 1 << 0;
31272 }
31273}
31274
31275#[cfg(feature = "el1")]
31276impl VbarEl1 {
31277 pub const UT_SHIFT: u32 = 0;
31279 pub const VBA_SHIFT: u32 = 11;
31281 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
31283
31284 pub const fn vba(self) -> u64 {
31286 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
31287 as u64
31288 }
31289
31290 pub const fn set_vba(&mut self, value: u64) {
31292 let offset = Self::VBA_SHIFT;
31293 assert!(value & (Self::VBA_MASK as u64) == value);
31294 *self = Self::from_bits_retain(
31295 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u64) << offset),
31296 );
31297 }
31298
31299 pub const fn with_vba(mut self, value: u64) -> Self {
31301 self.set_vba(value);
31302 self
31303 }
31304}
31305
31306#[cfg(feature = "el2")]
31307bitflags! {
31308 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31310 #[repr(transparent)]
31311 pub struct VbarEl2: u64 {
31312 const UT = 1 << 0;
31314 }
31315}
31316
31317#[cfg(feature = "el2")]
31318impl VbarEl2 {
31319 pub const UT_SHIFT: u32 = 0;
31321 pub const VBA_SHIFT: u32 = 11;
31323 pub const VBA_MASK: u64 = 0b11111111111111111111111111111111111111111111111111111;
31325
31326 pub const fn vba(self) -> u64 {
31328 ((self.bits() >> Self::VBA_SHIFT) & 0b11111111111111111111111111111111111111111111111111111)
31329 as u64
31330 }
31331
31332 pub const fn set_vba(&mut self, value: u64) {
31334 let offset = Self::VBA_SHIFT;
31335 assert!(value & (Self::VBA_MASK as u64) == value);
31336 *self = Self::from_bits_retain(
31337 (self.bits() & !(Self::VBA_MASK << offset)) | ((value as u64) << offset),
31338 );
31339 }
31340
31341 pub const fn with_vba(mut self, value: u64) -> Self {
31343 self.set_vba(value);
31344 self
31345 }
31346}
31347
31348bitflags! {
31349 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31351 #[repr(transparent)]
31352 pub struct Vdfsr: u32 {
31353 const EXT = 1 << 12;
31355 }
31356}
31357
31358impl Vdfsr {
31359 pub const EXT_SHIFT: u32 = 12;
31361 pub const AET_SHIFT: u32 = 14;
31363 pub const AET_MASK: u32 = 0b11;
31365
31366 pub const fn aet(self) -> u8 {
31368 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
31369 }
31370
31371 pub const fn set_aet(&mut self, value: u8) {
31373 let offset = Self::AET_SHIFT;
31374 assert!(value & (Self::AET_MASK as u8) == value);
31375 *self = Self::from_bits_retain(
31376 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u32) << offset),
31377 );
31378 }
31379
31380 pub const fn with_aet(mut self, value: u8) -> Self {
31382 self.set_aet(value);
31383 self
31384 }
31385}
31386
31387bitflags! {
31388 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31390 #[repr(transparent)]
31391 pub struct Vdisr: u32 {
31392 const LPAE = 1 << 9;
31394 const EXT = 1 << 12;
31396 const A = 1 << 31;
31398 }
31399}
31400
31401impl Vdisr {
31402 pub const STATUS_SHIFT: u32 = 0;
31404 pub const STATUS_MASK: u32 = 0b111111;
31406 pub const LPAE_SHIFT: u32 = 9;
31408 pub const EXT_SHIFT: u32 = 12;
31410 pub const AET_SHIFT: u32 = 14;
31412 pub const AET_MASK: u32 = 0b11;
31414 pub const A_SHIFT: u32 = 31;
31416
31417 pub const fn status(self) -> u8 {
31419 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
31420 }
31421
31422 pub const fn set_status(&mut self, value: u8) {
31424 let offset = Self::STATUS_SHIFT;
31425 assert!(value & (Self::STATUS_MASK as u8) == value);
31426 *self = Self::from_bits_retain(
31427 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u32) << offset),
31428 );
31429 }
31430
31431 pub const fn with_status(mut self, value: u8) -> Self {
31433 self.set_status(value);
31434 self
31435 }
31436
31437 pub const fn aet(self) -> u8 {
31439 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
31440 }
31441
31442 pub const fn set_aet(&mut self, value: u8) {
31444 let offset = Self::AET_SHIFT;
31445 assert!(value & (Self::AET_MASK as u8) == value);
31446 *self = Self::from_bits_retain(
31447 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u32) << offset),
31448 );
31449 }
31450
31451 pub const fn with_aet(mut self, value: u8) -> Self {
31453 self.set_aet(value);
31454 self
31455 }
31456}
31457
31458#[cfg(feature = "el2")]
31459bitflags! {
31460 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31462 #[repr(transparent)]
31463 pub struct VdisrEl2: u64 {
31464 const LPAE = 1 << 9;
31466 const EXT = 1 << 12;
31468 const IDS = 1 << 24;
31470 const A = 1 << 31;
31472 }
31473}
31474
31475#[cfg(feature = "el2")]
31476impl VdisrEl2 {
31477 pub const ISS_SHIFT: u32 = 0;
31479 pub const ISS_MASK: u64 = 0b111111111111111111111111;
31481 pub const STATUS_SHIFT: u32 = 0;
31483 pub const STATUS_MASK: u64 = 0b111111;
31485 pub const LPAE_SHIFT: u32 = 9;
31487 pub const EXT_SHIFT: u32 = 12;
31489 pub const AET_SHIFT: u32 = 14;
31491 pub const AET_MASK: u64 = 0b11;
31493 pub const IDS_SHIFT: u32 = 24;
31495 pub const A_SHIFT: u32 = 31;
31497
31498 pub const fn iss(self) -> u32 {
31500 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
31501 }
31502
31503 pub const fn set_iss(&mut self, value: u32) {
31505 let offset = Self::ISS_SHIFT;
31506 assert!(value & (Self::ISS_MASK as u32) == value);
31507 *self = Self::from_bits_retain(
31508 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
31509 );
31510 }
31511
31512 pub const fn with_iss(mut self, value: u32) -> Self {
31514 self.set_iss(value);
31515 self
31516 }
31517
31518 pub const fn status(self) -> u8 {
31520 ((self.bits() >> Self::STATUS_SHIFT) & 0b111111) as u8
31521 }
31522
31523 pub const fn set_status(&mut self, value: u8) {
31525 let offset = Self::STATUS_SHIFT;
31526 assert!(value & (Self::STATUS_MASK as u8) == value);
31527 *self = Self::from_bits_retain(
31528 (self.bits() & !(Self::STATUS_MASK << offset)) | ((value as u64) << offset),
31529 );
31530 }
31531
31532 pub const fn with_status(mut self, value: u8) -> Self {
31534 self.set_status(value);
31535 self
31536 }
31537
31538 pub const fn aet(self) -> u8 {
31540 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
31541 }
31542
31543 pub const fn set_aet(&mut self, value: u8) {
31545 let offset = Self::AET_SHIFT;
31546 assert!(value & (Self::AET_MASK as u8) == value);
31547 *self = Self::from_bits_retain(
31548 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u64) << offset),
31549 );
31550 }
31551
31552 pub const fn with_aet(mut self, value: u8) -> Self {
31554 self.set_aet(value);
31555 self
31556 }
31557}
31558
31559bitflags! {
31560 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31562 #[repr(transparent)]
31563 pub struct Vmpidr: u32 {
31564 const MT = 1 << 24;
31566 const U = 1 << 30;
31568 const M = 1 << 31;
31570 }
31571}
31572
31573impl Vmpidr {
31574 pub const AFF0_SHIFT: u32 = 0;
31576 pub const AFF0_MASK: u32 = 0b11111111;
31578 pub const AFF1_SHIFT: u32 = 8;
31580 pub const AFF1_MASK: u32 = 0b11111111;
31582 pub const AFF2_SHIFT: u32 = 16;
31584 pub const AFF2_MASK: u32 = 0b11111111;
31586 pub const MT_SHIFT: u32 = 24;
31588 pub const U_SHIFT: u32 = 30;
31590 pub const M_SHIFT: u32 = 31;
31592
31593 pub const fn aff0(self) -> u8 {
31595 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
31596 }
31597
31598 pub const fn set_aff0(&mut self, value: u8) {
31600 let offset = Self::AFF0_SHIFT;
31601 assert!(value & (Self::AFF0_MASK as u8) == value);
31602 *self = Self::from_bits_retain(
31603 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u32) << offset),
31604 );
31605 }
31606
31607 pub const fn with_aff0(mut self, value: u8) -> Self {
31609 self.set_aff0(value);
31610 self
31611 }
31612
31613 pub const fn aff1(self) -> u8 {
31615 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
31616 }
31617
31618 pub const fn set_aff1(&mut self, value: u8) {
31620 let offset = Self::AFF1_SHIFT;
31621 assert!(value & (Self::AFF1_MASK as u8) == value);
31622 *self = Self::from_bits_retain(
31623 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u32) << offset),
31624 );
31625 }
31626
31627 pub const fn with_aff1(mut self, value: u8) -> Self {
31629 self.set_aff1(value);
31630 self
31631 }
31632
31633 pub const fn aff2(self) -> u8 {
31635 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
31636 }
31637
31638 pub const fn set_aff2(&mut self, value: u8) {
31640 let offset = Self::AFF2_SHIFT;
31641 assert!(value & (Self::AFF2_MASK as u8) == value);
31642 *self = Self::from_bits_retain(
31643 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u32) << offset),
31644 );
31645 }
31646
31647 pub const fn with_aff2(mut self, value: u8) -> Self {
31649 self.set_aff2(value);
31650 self
31651 }
31652}
31653
31654#[cfg(feature = "el2")]
31655bitflags! {
31656 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31658 #[repr(transparent)]
31659 pub struct VmpidrEl2: u64 {
31660 const RES1 = 0b10000000000000000000000000000000;
31662 const MT = 1 << 24;
31664 const U = 1 << 30;
31666 }
31667}
31668
31669#[cfg(feature = "el2")]
31670impl VmpidrEl2 {
31671 pub const AFF0_SHIFT: u32 = 0;
31673 pub const AFF0_MASK: u64 = 0b11111111;
31675 pub const AFF1_SHIFT: u32 = 8;
31677 pub const AFF1_MASK: u64 = 0b11111111;
31679 pub const AFF2_SHIFT: u32 = 16;
31681 pub const AFF2_MASK: u64 = 0b11111111;
31683 pub const MT_SHIFT: u32 = 24;
31685 pub const U_SHIFT: u32 = 30;
31687 pub const AFF3_SHIFT: u32 = 32;
31689 pub const AFF3_MASK: u64 = 0b11111111;
31691
31692 pub const fn aff0(self) -> u8 {
31694 ((self.bits() >> Self::AFF0_SHIFT) & 0b11111111) as u8
31695 }
31696
31697 pub const fn set_aff0(&mut self, value: u8) {
31699 let offset = Self::AFF0_SHIFT;
31700 assert!(value & (Self::AFF0_MASK as u8) == value);
31701 *self = Self::from_bits_retain(
31702 (self.bits() & !(Self::AFF0_MASK << offset)) | ((value as u64) << offset),
31703 );
31704 }
31705
31706 pub const fn with_aff0(mut self, value: u8) -> Self {
31708 self.set_aff0(value);
31709 self
31710 }
31711
31712 pub const fn aff1(self) -> u8 {
31714 ((self.bits() >> Self::AFF1_SHIFT) & 0b11111111) as u8
31715 }
31716
31717 pub const fn set_aff1(&mut self, value: u8) {
31719 let offset = Self::AFF1_SHIFT;
31720 assert!(value & (Self::AFF1_MASK as u8) == value);
31721 *self = Self::from_bits_retain(
31722 (self.bits() & !(Self::AFF1_MASK << offset)) | ((value as u64) << offset),
31723 );
31724 }
31725
31726 pub const fn with_aff1(mut self, value: u8) -> Self {
31728 self.set_aff1(value);
31729 self
31730 }
31731
31732 pub const fn aff2(self) -> u8 {
31734 ((self.bits() >> Self::AFF2_SHIFT) & 0b11111111) as u8
31735 }
31736
31737 pub const fn set_aff2(&mut self, value: u8) {
31739 let offset = Self::AFF2_SHIFT;
31740 assert!(value & (Self::AFF2_MASK as u8) == value);
31741 *self = Self::from_bits_retain(
31742 (self.bits() & !(Self::AFF2_MASK << offset)) | ((value as u64) << offset),
31743 );
31744 }
31745
31746 pub const fn with_aff2(mut self, value: u8) -> Self {
31748 self.set_aff2(value);
31749 self
31750 }
31751
31752 pub const fn aff3(self) -> u8 {
31754 ((self.bits() >> Self::AFF3_SHIFT) & 0b11111111) as u8
31755 }
31756
31757 pub const fn set_aff3(&mut self, value: u8) {
31759 let offset = Self::AFF3_SHIFT;
31760 assert!(value & (Self::AFF3_MASK as u8) == value);
31761 *self = Self::from_bits_retain(
31762 (self.bits() & !(Self::AFF3_MASK << offset)) | ((value as u64) << offset),
31763 );
31764 }
31765
31766 pub const fn with_aff3(mut self, value: u8) -> Self {
31768 self.set_aff3(value);
31769 self
31770 }
31771}
31772
31773bitflags! {
31774 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31776 #[repr(transparent)]
31777 pub struct Vpidr: u32 {
31778 }
31779}
31780
31781impl Vpidr {
31782 pub const REVISION_SHIFT: u32 = 0;
31784 pub const REVISION_MASK: u32 = 0b1111;
31786 pub const PARTNUM_SHIFT: u32 = 4;
31788 pub const PARTNUM_MASK: u32 = 0b111111111111;
31790 pub const ARCHITECTURE_SHIFT: u32 = 16;
31792 pub const ARCHITECTURE_MASK: u32 = 0b1111;
31794 pub const VARIANT_SHIFT: u32 = 20;
31796 pub const VARIANT_MASK: u32 = 0b1111;
31798 pub const IMPLEMENTER_SHIFT: u32 = 24;
31800 pub const IMPLEMENTER_MASK: u32 = 0b11111111;
31802
31803 pub const fn revision(self) -> u8 {
31805 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
31806 }
31807
31808 pub const fn set_revision(&mut self, value: u8) {
31810 let offset = Self::REVISION_SHIFT;
31811 assert!(value & (Self::REVISION_MASK as u8) == value);
31812 *self = Self::from_bits_retain(
31813 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u32) << offset),
31814 );
31815 }
31816
31817 pub const fn with_revision(mut self, value: u8) -> Self {
31819 self.set_revision(value);
31820 self
31821 }
31822
31823 pub const fn partnum(self) -> u16 {
31825 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
31826 }
31827
31828 pub const fn set_partnum(&mut self, value: u16) {
31830 let offset = Self::PARTNUM_SHIFT;
31831 assert!(value & (Self::PARTNUM_MASK as u16) == value);
31832 *self = Self::from_bits_retain(
31833 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u32) << offset),
31834 );
31835 }
31836
31837 pub const fn with_partnum(mut self, value: u16) -> Self {
31839 self.set_partnum(value);
31840 self
31841 }
31842
31843 pub const fn architecture(self) -> u8 {
31845 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
31846 }
31847
31848 pub const fn set_architecture(&mut self, value: u8) {
31850 let offset = Self::ARCHITECTURE_SHIFT;
31851 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
31852 *self = Self::from_bits_retain(
31853 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u32) << offset),
31854 );
31855 }
31856
31857 pub const fn with_architecture(mut self, value: u8) -> Self {
31859 self.set_architecture(value);
31860 self
31861 }
31862
31863 pub const fn variant(self) -> u8 {
31865 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
31866 }
31867
31868 pub const fn set_variant(&mut self, value: u8) {
31870 let offset = Self::VARIANT_SHIFT;
31871 assert!(value & (Self::VARIANT_MASK as u8) == value);
31872 *self = Self::from_bits_retain(
31873 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u32) << offset),
31874 );
31875 }
31876
31877 pub const fn with_variant(mut self, value: u8) -> Self {
31879 self.set_variant(value);
31880 self
31881 }
31882
31883 pub const fn implementer(self) -> u8 {
31885 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
31886 }
31887
31888 pub const fn set_implementer(&mut self, value: u8) {
31890 let offset = Self::IMPLEMENTER_SHIFT;
31891 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
31892 *self = Self::from_bits_retain(
31893 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u32) << offset),
31894 );
31895 }
31896
31897 pub const fn with_implementer(mut self, value: u8) -> Self {
31899 self.set_implementer(value);
31900 self
31901 }
31902}
31903
31904#[cfg(feature = "el2")]
31905bitflags! {
31906 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31908 #[repr(transparent)]
31909 pub struct VpidrEl2: u64 {
31910 }
31911}
31912
31913#[cfg(feature = "el2")]
31914impl VpidrEl2 {
31915 pub const REVISION_SHIFT: u32 = 0;
31917 pub const REVISION_MASK: u64 = 0b1111;
31919 pub const PARTNUM_SHIFT: u32 = 4;
31921 pub const PARTNUM_MASK: u64 = 0b111111111111;
31923 pub const ARCHITECTURE_SHIFT: u32 = 16;
31925 pub const ARCHITECTURE_MASK: u64 = 0b1111;
31927 pub const VARIANT_SHIFT: u32 = 20;
31929 pub const VARIANT_MASK: u64 = 0b1111;
31931 pub const IMPLEMENTER_SHIFT: u32 = 24;
31933 pub const IMPLEMENTER_MASK: u64 = 0b11111111;
31935
31936 pub const fn revision(self) -> u8 {
31938 ((self.bits() >> Self::REVISION_SHIFT) & 0b1111) as u8
31939 }
31940
31941 pub const fn set_revision(&mut self, value: u8) {
31943 let offset = Self::REVISION_SHIFT;
31944 assert!(value & (Self::REVISION_MASK as u8) == value);
31945 *self = Self::from_bits_retain(
31946 (self.bits() & !(Self::REVISION_MASK << offset)) | ((value as u64) << offset),
31947 );
31948 }
31949
31950 pub const fn with_revision(mut self, value: u8) -> Self {
31952 self.set_revision(value);
31953 self
31954 }
31955
31956 pub const fn partnum(self) -> u16 {
31958 ((self.bits() >> Self::PARTNUM_SHIFT) & 0b111111111111) as u16
31959 }
31960
31961 pub const fn set_partnum(&mut self, value: u16) {
31963 let offset = Self::PARTNUM_SHIFT;
31964 assert!(value & (Self::PARTNUM_MASK as u16) == value);
31965 *self = Self::from_bits_retain(
31966 (self.bits() & !(Self::PARTNUM_MASK << offset)) | ((value as u64) << offset),
31967 );
31968 }
31969
31970 pub const fn with_partnum(mut self, value: u16) -> Self {
31972 self.set_partnum(value);
31973 self
31974 }
31975
31976 pub const fn architecture(self) -> u8 {
31978 ((self.bits() >> Self::ARCHITECTURE_SHIFT) & 0b1111) as u8
31979 }
31980
31981 pub const fn set_architecture(&mut self, value: u8) {
31983 let offset = Self::ARCHITECTURE_SHIFT;
31984 assert!(value & (Self::ARCHITECTURE_MASK as u8) == value);
31985 *self = Self::from_bits_retain(
31986 (self.bits() & !(Self::ARCHITECTURE_MASK << offset)) | ((value as u64) << offset),
31987 );
31988 }
31989
31990 pub const fn with_architecture(mut self, value: u8) -> Self {
31992 self.set_architecture(value);
31993 self
31994 }
31995
31996 pub const fn variant(self) -> u8 {
31998 ((self.bits() >> Self::VARIANT_SHIFT) & 0b1111) as u8
31999 }
32000
32001 pub const fn set_variant(&mut self, value: u8) {
32003 let offset = Self::VARIANT_SHIFT;
32004 assert!(value & (Self::VARIANT_MASK as u8) == value);
32005 *self = Self::from_bits_retain(
32006 (self.bits() & !(Self::VARIANT_MASK << offset)) | ((value as u64) << offset),
32007 );
32008 }
32009
32010 pub const fn with_variant(mut self, value: u8) -> Self {
32012 self.set_variant(value);
32013 self
32014 }
32015
32016 pub const fn implementer(self) -> u8 {
32018 ((self.bits() >> Self::IMPLEMENTER_SHIFT) & 0b11111111) as u8
32019 }
32020
32021 pub const fn set_implementer(&mut self, value: u8) {
32023 let offset = Self::IMPLEMENTER_SHIFT;
32024 assert!(value & (Self::IMPLEMENTER_MASK as u8) == value);
32025 *self = Self::from_bits_retain(
32026 (self.bits() & !(Self::IMPLEMENTER_MASK << offset)) | ((value as u64) << offset),
32027 );
32028 }
32029
32030 pub const fn with_implementer(mut self, value: u8) -> Self {
32032 self.set_implementer(value);
32033 self
32034 }
32035}
32036
32037#[cfg(feature = "el2")]
32038bitflags! {
32039 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
32041 #[repr(transparent)]
32042 pub struct VsesrEl2: u64 {
32043 const EXT = 1 << 12;
32045 const IDS = 1 << 24;
32047 }
32048}
32049
32050#[cfg(feature = "el2")]
32051impl VsesrEl2 {
32052 pub const ISS_SHIFT: u32 = 0;
32054 pub const ISS_MASK: u64 = 0b111111111111111111111111;
32056 pub const EXT_SHIFT: u32 = 12;
32058 pub const AET_SHIFT: u32 = 14;
32060 pub const AET_MASK: u64 = 0b11;
32062 pub const IDS_SHIFT: u32 = 24;
32064
32065 pub const fn iss(self) -> u32 {
32067 ((self.bits() >> Self::ISS_SHIFT) & 0b111111111111111111111111) as u32
32068 }
32069
32070 pub const fn set_iss(&mut self, value: u32) {
32072 let offset = Self::ISS_SHIFT;
32073 assert!(value & (Self::ISS_MASK as u32) == value);
32074 *self = Self::from_bits_retain(
32075 (self.bits() & !(Self::ISS_MASK << offset)) | ((value as u64) << offset),
32076 );
32077 }
32078
32079 pub const fn with_iss(mut self, value: u32) -> Self {
32081 self.set_iss(value);
32082 self
32083 }
32084
32085 pub const fn aet(self) -> u8 {
32087 ((self.bits() >> Self::AET_SHIFT) & 0b11) as u8
32088 }
32089
32090 pub const fn set_aet(&mut self, value: u8) {
32092 let offset = Self::AET_SHIFT;
32093 assert!(value & (Self::AET_MASK as u8) == value);
32094 *self = Self::from_bits_retain(
32095 (self.bits() & !(Self::AET_MASK << offset)) | ((value as u64) << offset),
32096 );
32097 }
32098
32099 pub const fn with_aet(mut self, value: u8) -> Self {
32101 self.set_aet(value);
32102 self
32103 }
32104}
32105
32106bitflags! {
32107 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
32109 #[repr(transparent)]
32110 pub struct Vtcr: u32 {
32111 const RES1 = 0b10000000000000000000000000000000;
32113 const S = 1 << 4;
32115 const HWU59 = 1 << 25;
32117 const HWU60 = 1 << 26;
32119 const HWU61 = 1 << 27;
32121 const HWU62 = 1 << 28;
32123 }
32124}
32125
32126impl Vtcr {
32127 pub const T0SZ_SHIFT: u32 = 0;
32129 pub const T0SZ_MASK: u32 = 0b1111;
32131 pub const S_SHIFT: u32 = 4;
32133 pub const SL0_SHIFT: u32 = 6;
32135 pub const SL0_MASK: u32 = 0b11;
32137 pub const IRGN0_SHIFT: u32 = 8;
32139 pub const IRGN0_MASK: u32 = 0b11;
32141 pub const ORGN0_SHIFT: u32 = 10;
32143 pub const ORGN0_MASK: u32 = 0b11;
32145 pub const SH0_SHIFT: u32 = 12;
32147 pub const SH0_MASK: u32 = 0b11;
32149 pub const HWU59_SHIFT: u32 = 25;
32151 pub const HWU60_SHIFT: u32 = 26;
32153 pub const HWU61_SHIFT: u32 = 27;
32155 pub const HWU62_SHIFT: u32 = 28;
32157
32158 pub const fn t0sz(self) -> u8 {
32160 ((self.bits() >> Self::T0SZ_SHIFT) & 0b1111) as u8
32161 }
32162
32163 pub const fn set_t0sz(&mut self, value: u8) {
32165 let offset = Self::T0SZ_SHIFT;
32166 assert!(value & (Self::T0SZ_MASK as u8) == value);
32167 *self = Self::from_bits_retain(
32168 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u32) << offset),
32169 );
32170 }
32171
32172 pub const fn with_t0sz(mut self, value: u8) -> Self {
32174 self.set_t0sz(value);
32175 self
32176 }
32177
32178 pub const fn sl0(self) -> u8 {
32180 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
32181 }
32182
32183 pub const fn set_sl0(&mut self, value: u8) {
32185 let offset = Self::SL0_SHIFT;
32186 assert!(value & (Self::SL0_MASK as u8) == value);
32187 *self = Self::from_bits_retain(
32188 (self.bits() & !(Self::SL0_MASK << offset)) | ((value as u32) << offset),
32189 );
32190 }
32191
32192 pub const fn with_sl0(mut self, value: u8) -> Self {
32194 self.set_sl0(value);
32195 self
32196 }
32197
32198 pub const fn irgn0(self) -> u8 {
32200 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
32201 }
32202
32203 pub const fn set_irgn0(&mut self, value: u8) {
32205 let offset = Self::IRGN0_SHIFT;
32206 assert!(value & (Self::IRGN0_MASK as u8) == value);
32207 *self = Self::from_bits_retain(
32208 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u32) << offset),
32209 );
32210 }
32211
32212 pub const fn with_irgn0(mut self, value: u8) -> Self {
32214 self.set_irgn0(value);
32215 self
32216 }
32217
32218 pub const fn orgn0(self) -> u8 {
32220 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
32221 }
32222
32223 pub const fn set_orgn0(&mut self, value: u8) {
32225 let offset = Self::ORGN0_SHIFT;
32226 assert!(value & (Self::ORGN0_MASK as u8) == value);
32227 *self = Self::from_bits_retain(
32228 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u32) << offset),
32229 );
32230 }
32231
32232 pub const fn with_orgn0(mut self, value: u8) -> Self {
32234 self.set_orgn0(value);
32235 self
32236 }
32237
32238 pub const fn sh0(self) -> u8 {
32240 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
32241 }
32242
32243 pub const fn set_sh0(&mut self, value: u8) {
32245 let offset = Self::SH0_SHIFT;
32246 assert!(value & (Self::SH0_MASK as u8) == value);
32247 *self = Self::from_bits_retain(
32248 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u32) << offset),
32249 );
32250 }
32251
32252 pub const fn with_sh0(mut self, value: u8) -> Self {
32254 self.set_sh0(value);
32255 self
32256 }
32257}
32258
32259#[cfg(feature = "el2")]
32260bitflags! {
32261 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
32263 #[repr(transparent)]
32264 pub struct VtcrEl2: u64 {
32265 const RES1 = 0b10000000000000000000000000000000;
32267 const VS = 1 << 19;
32269 const HA = 1 << 21;
32271 const HD = 1 << 22;
32273 const HWU59 = 1 << 25;
32275 const HWU60 = 1 << 26;
32277 const HWU61 = 1 << 27;
32279 const HWU62 = 1 << 28;
32281 const NSW = 1 << 29;
32283 const NSA = 1 << 30;
32285 const DS = 1 << 32;
32287 const SL2 = 1 << 33;
32289 const ASSUREDONLY = 1 << 34;
32291 const TL1 = 1 << 35;
32293 const S2PIE = 1 << 36;
32295 const S2POE = 1 << 37;
32297 const D128 = 1 << 38;
32299 const GCSH = 1 << 40;
32301 const TL0 = 1 << 41;
32303 const HAFT = 1 << 44;
32305 const HDBSS = 1 << 45;
32307 }
32308}
32309
32310#[cfg(feature = "el2")]
32311impl VtcrEl2 {
32312 pub const T0SZ_SHIFT: u32 = 0;
32314 pub const T0SZ_MASK: u64 = 0b111111;
32316 pub const SL0_SHIFT: u32 = 6;
32318 pub const SL0_MASK: u64 = 0b11;
32320 pub const IRGN0_SHIFT: u32 = 8;
32322 pub const IRGN0_MASK: u64 = 0b11;
32324 pub const ORGN0_SHIFT: u32 = 10;
32326 pub const ORGN0_MASK: u64 = 0b11;
32328 pub const SH0_SHIFT: u32 = 12;
32330 pub const SH0_MASK: u64 = 0b11;
32332 pub const TG0_SHIFT: u32 = 14;
32334 pub const TG0_MASK: u64 = 0b11;
32336 pub const PS_SHIFT: u32 = 16;
32338 pub const PS_MASK: u64 = 0b111;
32340 pub const VS_SHIFT: u32 = 19;
32342 pub const HA_SHIFT: u32 = 21;
32344 pub const HD_SHIFT: u32 = 22;
32346 pub const HWU59_SHIFT: u32 = 25;
32348 pub const HWU60_SHIFT: u32 = 26;
32350 pub const HWU61_SHIFT: u32 = 27;
32352 pub const HWU62_SHIFT: u32 = 28;
32354 pub const NSW_SHIFT: u32 = 29;
32356 pub const NSA_SHIFT: u32 = 30;
32358 pub const DS_SHIFT: u32 = 32;
32360 pub const SL2_SHIFT: u32 = 33;
32362 pub const ASSUREDONLY_SHIFT: u32 = 34;
32364 pub const TL1_SHIFT: u32 = 35;
32366 pub const S2PIE_SHIFT: u32 = 36;
32368 pub const S2POE_SHIFT: u32 = 37;
32370 pub const D128_SHIFT: u32 = 38;
32372 pub const GCSH_SHIFT: u32 = 40;
32374 pub const TL0_SHIFT: u32 = 41;
32376 pub const HAFT_SHIFT: u32 = 44;
32378 pub const HDBSS_SHIFT: u32 = 45;
32380
32381 pub const fn t0sz(self) -> u8 {
32383 ((self.bits() >> Self::T0SZ_SHIFT) & 0b111111) as u8
32384 }
32385
32386 pub const fn set_t0sz(&mut self, value: u8) {
32388 let offset = Self::T0SZ_SHIFT;
32389 assert!(value & (Self::T0SZ_MASK as u8) == value);
32390 *self = Self::from_bits_retain(
32391 (self.bits() & !(Self::T0SZ_MASK << offset)) | ((value as u64) << offset),
32392 );
32393 }
32394
32395 pub const fn with_t0sz(mut self, value: u8) -> Self {
32397 self.set_t0sz(value);
32398 self
32399 }
32400
32401 pub const fn sl0(self) -> u8 {
32403 ((self.bits() >> Self::SL0_SHIFT) & 0b11) as u8
32404 }
32405
32406 pub const fn set_sl0(&mut self, value: u8) {
32408 let offset = Self::SL0_SHIFT;
32409 assert!(value & (Self::SL0_MASK as u8) == value);
32410 *self = Self::from_bits_retain(
32411 (self.bits() & !(Self::SL0_MASK << offset)) | ((value as u64) << offset),
32412 );
32413 }
32414
32415 pub const fn with_sl0(mut self, value: u8) -> Self {
32417 self.set_sl0(value);
32418 self
32419 }
32420
32421 pub const fn irgn0(self) -> u8 {
32423 ((self.bits() >> Self::IRGN0_SHIFT) & 0b11) as u8
32424 }
32425
32426 pub const fn set_irgn0(&mut self, value: u8) {
32428 let offset = Self::IRGN0_SHIFT;
32429 assert!(value & (Self::IRGN0_MASK as u8) == value);
32430 *self = Self::from_bits_retain(
32431 (self.bits() & !(Self::IRGN0_MASK << offset)) | ((value as u64) << offset),
32432 );
32433 }
32434
32435 pub const fn with_irgn0(mut self, value: u8) -> Self {
32437 self.set_irgn0(value);
32438 self
32439 }
32440
32441 pub const fn orgn0(self) -> u8 {
32443 ((self.bits() >> Self::ORGN0_SHIFT) & 0b11) as u8
32444 }
32445
32446 pub const fn set_orgn0(&mut self, value: u8) {
32448 let offset = Self::ORGN0_SHIFT;
32449 assert!(value & (Self::ORGN0_MASK as u8) == value);
32450 *self = Self::from_bits_retain(
32451 (self.bits() & !(Self::ORGN0_MASK << offset)) | ((value as u64) << offset),
32452 );
32453 }
32454
32455 pub const fn with_orgn0(mut self, value: u8) -> Self {
32457 self.set_orgn0(value);
32458 self
32459 }
32460
32461 pub const fn sh0(self) -> u8 {
32463 ((self.bits() >> Self::SH0_SHIFT) & 0b11) as u8
32464 }
32465
32466 pub const fn set_sh0(&mut self, value: u8) {
32468 let offset = Self::SH0_SHIFT;
32469 assert!(value & (Self::SH0_MASK as u8) == value);
32470 *self = Self::from_bits_retain(
32471 (self.bits() & !(Self::SH0_MASK << offset)) | ((value as u64) << offset),
32472 );
32473 }
32474
32475 pub const fn with_sh0(mut self, value: u8) -> Self {
32477 self.set_sh0(value);
32478 self
32479 }
32480
32481 pub const fn tg0(self) -> u8 {
32483 ((self.bits() >> Self::TG0_SHIFT) & 0b11) as u8
32484 }
32485
32486 pub const fn set_tg0(&mut self, value: u8) {
32488 let offset = Self::TG0_SHIFT;
32489 assert!(value & (Self::TG0_MASK as u8) == value);
32490 *self = Self::from_bits_retain(
32491 (self.bits() & !(Self::TG0_MASK << offset)) | ((value as u64) << offset),
32492 );
32493 }
32494
32495 pub const fn with_tg0(mut self, value: u8) -> Self {
32497 self.set_tg0(value);
32498 self
32499 }
32500
32501 pub const fn ps(self) -> u8 {
32503 ((self.bits() >> Self::PS_SHIFT) & 0b111) as u8
32504 }
32505
32506 pub const fn set_ps(&mut self, value: u8) {
32508 let offset = Self::PS_SHIFT;
32509 assert!(value & (Self::PS_MASK as u8) == value);
32510 *self = Self::from_bits_retain(
32511 (self.bits() & !(Self::PS_MASK << offset)) | ((value as u64) << offset),
32512 );
32513 }
32514
32515 pub const fn with_ps(mut self, value: u8) -> Self {
32517 self.set_ps(value);
32518 self
32519 }
32520}
32521
32522bitflags! {
32523 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
32525 #[repr(transparent)]
32526 pub struct Vttbr: u64 {
32527 const CNP = 1 << 0;
32529 }
32530}
32531
32532impl Vttbr {
32533 pub const CNP_SHIFT: u32 = 0;
32535 pub const BADDR_SHIFT: u32 = 1;
32537 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
32539 pub const VMID_SHIFT: u32 = 48;
32541 pub const VMID_MASK: u64 = 0b11111111;
32543
32544 pub const fn baddr(self) -> u64 {
32546 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
32547 as u64
32548 }
32549
32550 pub const fn set_baddr(&mut self, value: u64) {
32552 let offset = Self::BADDR_SHIFT;
32553 assert!(value & (Self::BADDR_MASK as u64) == value);
32554 *self = Self::from_bits_retain(
32555 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
32556 );
32557 }
32558
32559 pub const fn with_baddr(mut self, value: u64) -> Self {
32561 self.set_baddr(value);
32562 self
32563 }
32564
32565 pub const fn vmid(self) -> u8 {
32567 ((self.bits() >> Self::VMID_SHIFT) & 0b11111111) as u8
32568 }
32569
32570 pub const fn set_vmid(&mut self, value: u8) {
32572 let offset = Self::VMID_SHIFT;
32573 assert!(value & (Self::VMID_MASK as u8) == value);
32574 *self = Self::from_bits_retain(
32575 (self.bits() & !(Self::VMID_MASK << offset)) | ((value as u64) << offset),
32576 );
32577 }
32578
32579 pub const fn with_vmid(mut self, value: u8) -> Self {
32581 self.set_vmid(value);
32582 self
32583 }
32584}
32585
32586#[cfg(feature = "el2")]
32587bitflags! {
32588 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
32590 #[repr(transparent)]
32591 pub struct VttbrEl2: u64 {
32592 const CNP = 1 << 0;
32594 }
32595}
32596
32597#[cfg(feature = "el2")]
32598impl VttbrEl2 {
32599 pub const CNP_SHIFT: u32 = 0;
32601 pub const BADDR_SHIFT: u32 = 1;
32603 pub const BADDR_MASK: u64 = 0b11111111111111111111111111111111111111111111111;
32605 pub const SKL_SHIFT: u32 = 1;
32607 pub const SKL_MASK: u64 = 0b11;
32609 pub const VMID_SHIFT: u32 = 48;
32611 pub const VMID_MASK: u64 = 0b1111111111111111;
32613
32614 pub const fn baddr(self) -> u64 {
32616 ((self.bits() >> Self::BADDR_SHIFT) & 0b11111111111111111111111111111111111111111111111)
32617 as u64
32618 }
32619
32620 pub const fn set_baddr(&mut self, value: u64) {
32622 let offset = Self::BADDR_SHIFT;
32623 assert!(value & (Self::BADDR_MASK as u64) == value);
32624 *self = Self::from_bits_retain(
32625 (self.bits() & !(Self::BADDR_MASK << offset)) | ((value as u64) << offset),
32626 );
32627 }
32628
32629 pub const fn with_baddr(mut self, value: u64) -> Self {
32631 self.set_baddr(value);
32632 self
32633 }
32634
32635 pub const fn skl(self) -> u8 {
32637 ((self.bits() >> Self::SKL_SHIFT) & 0b11) as u8
32638 }
32639
32640 pub const fn set_skl(&mut self, value: u8) {
32642 let offset = Self::SKL_SHIFT;
32643 assert!(value & (Self::SKL_MASK as u8) == value);
32644 *self = Self::from_bits_retain(
32645 (self.bits() & !(Self::SKL_MASK << offset)) | ((value as u64) << offset),
32646 );
32647 }
32648
32649 pub const fn with_skl(mut self, value: u8) -> Self {
32651 self.set_skl(value);
32652 self
32653 }
32654
32655 pub const fn vmid(self) -> u16 {
32657 ((self.bits() >> Self::VMID_SHIFT) & 0b1111111111111111) as u16
32658 }
32659
32660 pub const fn set_vmid(&mut self, value: u16) {
32662 let offset = Self::VMID_SHIFT;
32663 assert!(value & (Self::VMID_MASK as u16) == value);
32664 *self = Self::from_bits_retain(
32665 (self.bits() & !(Self::VMID_MASK << offset)) | ((value as u64) << offset),
32666 );
32667 }
32668
32669 pub const fn with_vmid(mut self, value: u16) -> Self {
32671 self.set_vmid(value);
32672 self
32673 }
32674}
32675
32676#[cfg(feature = "el3")]
32677bitflags! {
32678 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
32680 #[repr(transparent)]
32681 pub struct ZcrEl3: u64 {
32682 }
32683}
32684
32685#[cfg(feature = "el3")]
32686impl ZcrEl3 {
32687 pub const LEN_SHIFT: u32 = 0;
32689 pub const LEN_MASK: u64 = 0b1111;
32691
32692 pub const fn len(self) -> u8 {
32694 ((self.bits() >> Self::LEN_SHIFT) & 0b1111) as u8
32695 }
32696
32697 pub const fn set_len(&mut self, value: u8) {
32699 let offset = Self::LEN_SHIFT;
32700 assert!(value & (Self::LEN_MASK as u8) == value);
32701 *self = Self::from_bits_retain(
32702 (self.bits() & !(Self::LEN_MASK << offset)) | ((value as u64) << offset),
32703 );
32704 }
32705
32706 pub const fn with_len(mut self, value: u8) -> Self {
32708 self.set_len(value);
32709 self
32710 }
32711}
32712
32713#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32714read_write_sysreg!(actlr: (p15, 0, c0, c1, 1), u32, safe_read, fake::SYSREGS);
32715#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32716read_write_sysreg!(actlr2: (p15, 0, c0, c1, 3), u32, safe_read, fake::SYSREGS);
32717#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32718read_write_sysreg!(actlr_el1, u64, safe_read, fake::SYSREGS);
32719#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32720read_write_sysreg!(actlr_el2, u64, safe_read, fake::SYSREGS);
32721#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32722read_write_sysreg!(adfsr: (p15, 0, c1, c5, 0), u32, safe_read, fake::SYSREGS);
32723#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32724read_write_sysreg!(afsr0_el1, u64, safe_read, fake::SYSREGS);
32725#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32726read_write_sysreg!(afsr0_el2, u64, safe_read, fake::SYSREGS);
32727#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32728read_write_sysreg!(afsr1_el1, u64, safe_read, fake::SYSREGS);
32729#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32730read_write_sysreg!(afsr1_el2, u64, safe_read, fake::SYSREGS);
32731#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32732read_sysreg!(aidr: (p15, 1, c0, c0, 7), u32, safe, fake::SYSREGS);
32733#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32734read_write_sysreg!(aifsr: (p15, 0, c1, c5, 1), u32, safe_read, fake::SYSREGS);
32735#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32736read_write_sysreg!(amair0: (p15, 0, c3, c10, 0), u32, safe_read, fake::SYSREGS);
32737#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32738read_write_sysreg!(amair1: (p15, 0, c3, c10, 1), u32, safe_read, fake::SYSREGS);
32739#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32740read_write_sysreg!(amair_el1, u64, safe_read, fake::SYSREGS);
32741#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32742read_write_sysreg!(amair_el2, u64, safe_read, fake::SYSREGS);
32743#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32744read_sysreg!(amcfgr: (p15, 0, c2, c13, 1), u32: Amcfgr, safe, fake::SYSREGS);
32745#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32746read_sysreg!(amcfgr_el0: s3_3_c13_c2_1, u64: AmcfgrEl0, safe, fake::SYSREGS);
32747#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32748read_sysreg!(amcgcr: (p15, 0, c2, c13, 2), u32: Amcgcr, safe, fake::SYSREGS);
32749#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32750read_sysreg!(amcgcr_el0: s3_3_c13_c2_2, u64: AmcgcrEl0, safe, fake::SYSREGS);
32751#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32752read_write_sysreg!(amcntenclr0: (p15, 0, c2, c13, 4), u32: Amcntenclr0, safe_read, safe_write, fake::SYSREGS);
32753#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32754read_write_sysreg!(amcntenclr0_el0: s3_3_c13_c2_4, u64: Amcntenclr0El0, safe_read, safe_write, fake::SYSREGS);
32755#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32756read_write_sysreg!(amcntenclr1: (p15, 0, c3, c13, 0), u32: Amcntenclr1, safe_read, safe_write, fake::SYSREGS);
32757#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32758read_write_sysreg!(amcntenclr1_el0: s3_3_c13_c3_0, u64: Amcntenclr1El0, safe_read, safe_write, fake::SYSREGS);
32759#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32760read_write_sysreg!(amcntenset0: (p15, 0, c2, c13, 5), u32: Amcntenset0, safe_read, safe_write, fake::SYSREGS);
32761#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32762read_write_sysreg!(amcntenset0_el0: s3_3_c13_c2_5, u64: Amcntenset0El0, safe_read, safe_write, fake::SYSREGS);
32763#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32764read_write_sysreg!(amcntenset1: (p15, 0, c3, c13, 1), u32: Amcntenset1, safe_read, safe_write, fake::SYSREGS);
32765#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32766read_write_sysreg!(amcntenset1_el0: s3_3_c13_c3_1, u64: Amcntenset1El0, safe_read, safe_write, fake::SYSREGS);
32767#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32768read_write_sysreg!(amcr: (p15, 0, c2, c13, 0), u32: Amcr, safe_read, safe_write, fake::SYSREGS);
32769#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32770read_write_sysreg!(amcr_el0: s3_3_c13_c2_0, u64: AmcrEl0, safe_read, safe_write, fake::SYSREGS);
32771#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32772read_write_sysreg!(amevcntr00: (p15, 0, c0), u64: Amevcntr00, safe_read, safe_write, fake::SYSREGS);
32773#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32774read_write_sysreg!(amevcntr00_el0: s3_3_c13_c4_0, u64: Amevcntr00El0, safe_read, safe_write, fake::SYSREGS);
32775#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32776read_write_sysreg!(amevcntr01: (p15, 1, c0), u64: Amevcntr01, safe_read, safe_write, fake::SYSREGS);
32777#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32778read_write_sysreg!(amevcntr01_el0: s3_3_c13_c4_1, u64: Amevcntr01El0, safe_read, safe_write, fake::SYSREGS);
32779#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32780read_write_sysreg!(amevcntr02: (p15, 2, c0), u64: Amevcntr02, safe_read, safe_write, fake::SYSREGS);
32781#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32782read_write_sysreg!(amevcntr02_el0: s3_3_c13_c4_2, u64: Amevcntr02El0, safe_read, safe_write, fake::SYSREGS);
32783#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32784read_write_sysreg!(amevcntr03: (p15, 3, c0), u64: Amevcntr03, safe_read, safe_write, fake::SYSREGS);
32785#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32786read_write_sysreg!(amevcntr03_el0: s3_3_c13_c4_3, u64: Amevcntr03El0, safe_read, safe_write, fake::SYSREGS);
32787#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32788read_write_sysreg!(amevcntr10_el0: s3_3_c13_c12_0, u64: Amevcntr10El0, safe_read, safe_write, fake::SYSREGS);
32789#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32790read_write_sysreg!(amevcntr110_el0: s3_3_c13_c13_2, u64: Amevcntr110El0, safe_read, safe_write, fake::SYSREGS);
32791#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32792read_write_sysreg!(amevcntr111_el0: s3_3_c13_c13_3, u64: Amevcntr111El0, safe_read, safe_write, fake::SYSREGS);
32793#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32794read_write_sysreg!(amevcntr112_el0: s3_3_c13_c13_4, u64: Amevcntr112El0, safe_read, safe_write, fake::SYSREGS);
32795#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32796read_write_sysreg!(amevcntr113_el0: s3_3_c13_c13_5, u64: Amevcntr113El0, safe_read, safe_write, fake::SYSREGS);
32797#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32798read_write_sysreg!(amevcntr114_el0: s3_3_c13_c13_6, u64: Amevcntr114El0, safe_read, safe_write, fake::SYSREGS);
32799#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32800read_write_sysreg!(amevcntr115_el0: s3_3_c13_c13_7, u64: Amevcntr115El0, safe_read, safe_write, fake::SYSREGS);
32801#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32802read_write_sysreg!(amevcntr11_el0: s3_3_c13_c12_1, u64: Amevcntr11El0, safe_read, safe_write, fake::SYSREGS);
32803#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32804read_write_sysreg!(amevcntr12_el0: s3_3_c13_c12_2, u64: Amevcntr12El0, safe_read, safe_write, fake::SYSREGS);
32805#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32806read_write_sysreg!(amevcntr13_el0: s3_3_c13_c12_3, u64: Amevcntr13El0, safe_read, safe_write, fake::SYSREGS);
32807#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32808read_write_sysreg!(amevcntr14_el0: s3_3_c13_c12_4, u64: Amevcntr14El0, safe_read, safe_write, fake::SYSREGS);
32809#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32810read_write_sysreg!(amevcntr15_el0: s3_3_c13_c12_5, u64: Amevcntr15El0, safe_read, safe_write, fake::SYSREGS);
32811#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32812read_write_sysreg!(amevcntr16_el0: s3_3_c13_c12_6, u64: Amevcntr16El0, safe_read, safe_write, fake::SYSREGS);
32813#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32814read_write_sysreg!(amevcntr17_el0: s3_3_c13_c12_7, u64: Amevcntr17El0, safe_read, safe_write, fake::SYSREGS);
32815#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32816read_write_sysreg!(amevcntr18_el0: s3_3_c13_c13_0, u64: Amevcntr18El0, safe_read, safe_write, fake::SYSREGS);
32817#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32818read_write_sysreg!(amevcntr19_el0: s3_3_c13_c13_1, u64: Amevcntr19El0, safe_read, safe_write, fake::SYSREGS);
32819#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32820read_write_sysreg!(amuserenr: (p15, 0, c2, c13, 3), u32: Amuserenr, safe_read, safe_write, fake::SYSREGS);
32821#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32822read_write_sysreg!(amuserenr_el0: s3_3_c13_c2_3, u64: AmuserenrEl0, safe_read, safe_write, fake::SYSREGS);
32823#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32824read_write_sysreg!(apiakeyhi_el1: s3_0_c2_c1_1, u64: ApiakeyhiEl1, safe_read, fake::SYSREGS);
32825#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32826read_write_sysreg!(apiakeylo_el1: s3_0_c2_c1_0, u64: ApiakeyloEl1, safe_read, fake::SYSREGS);
32827#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32828read_sysreg!(ccsidr: (p15, 1, c0, c0, 0), u32: Ccsidr, safe, fake::SYSREGS);
32829#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32830read_sysreg!(ccsidr2: (p15, 1, c0, c0, 2), u32: Ccsidr2, safe, fake::SYSREGS);
32831#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32832read_sysreg!(ccsidr_el1, u64: CcsidrEl1, safe, fake::SYSREGS);
32833#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32834read_sysreg!(clidr: (p15, 1, c0, c0, 1), u32: Clidr, safe, fake::SYSREGS);
32835#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32836read_sysreg!(clidr_el1, u64: ClidrEl1, safe, fake::SYSREGS);
32837#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32838read_write_sysreg!(cntfrq: (p15, 0, c0, c14, 0), u32: Cntfrq, safe_read, fake::SYSREGS);
32839#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32840read_write_sysreg!(cntfrq_el0, u64: CntfrqEl0, safe_read, safe_write, fake::SYSREGS);
32841#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32842read_write_sysreg!(cnthctl: (p15, 4, c1, c14, 0), u32: Cnthctl, safe_read, fake::SYSREGS);
32843#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32844read_write_sysreg!(cnthctl_el2, u64: CnthctlEl2, safe_read, safe_write, fake::SYSREGS);
32845#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32846read_write_sysreg!(cnthps_ctl: (p15, 0, c2, c14, 1), u32: CnthpsCtl, safe_read, fake::SYSREGS);
32847#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32848read_write_sysreg!(cnthps_ctl_el2: s3_4_c14_c5_1, u64: CnthpsCtlEl2, safe_read, safe_write, fake::SYSREGS);
32849#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32850read_write_sysreg!(cnthps_cval: (p15, 2, c14), u64: CnthpsCval, safe_read, fake::SYSREGS);
32851#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32852read_write_sysreg!(cnthps_cval_el2: s3_4_c14_c5_2, u64: CnthpsCvalEl2, safe_read, safe_write, fake::SYSREGS);
32853#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32854read_write_sysreg!(cnthps_tval: (p15, 0, c2, c14, 0), u32: CnthpsTval, safe_read, fake::SYSREGS);
32855#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32856read_write_sysreg!(cnthps_tval_el2: s3_4_c14_c5_0, u64: CnthpsTvalEl2, safe_read, safe_write, fake::SYSREGS);
32857#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32858read_write_sysreg!(cnthp_ctl: (p15, 0, c2, c14, 1), u32: CnthpCtl, safe_read, fake::SYSREGS);
32859#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32860read_write_sysreg!(cnthp_ctl_el2: s3_4_c14_c2_1, u64: CnthpCtlEl2, safe_read, safe_write, fake::SYSREGS);
32861#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32862read_write_sysreg!(cnthp_cval: (p15, 2, c14), u64: CnthpCval, safe_read, fake::SYSREGS);
32863#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32864read_write_sysreg!(cnthp_cval_el2: s3_4_c14_c2_2, u64: CnthpCvalEl2, safe_read, safe_write, fake::SYSREGS);
32865#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32866read_write_sysreg!(cnthp_tval: (p15, 0, c2, c14, 0), u32: CnthpTval, safe_read, fake::SYSREGS);
32867#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32868read_write_sysreg!(cnthp_tval_el2: s3_4_c14_c2_0, u64: CnthpTvalEl2, safe_read, safe_write, fake::SYSREGS);
32869#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32870read_write_sysreg!(cnthvs_ctl: (p15, 0, c3, c14, 1), u32: CnthvsCtl, safe_read, fake::SYSREGS);
32871#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32872read_write_sysreg!(cnthvs_ctl_el2: s3_4_c14_c4_1, u64: CnthvsCtlEl2, safe_read, safe_write, fake::SYSREGS);
32873#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32874read_write_sysreg!(cnthvs_cval: (p15, 3, c14), u64: CnthvsCval, safe_read, fake::SYSREGS);
32875#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32876read_write_sysreg!(cnthvs_cval_el2: s3_4_c14_c4_2, u64: CnthvsCvalEl2, safe_read, safe_write, fake::SYSREGS);
32877#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32878read_write_sysreg!(cnthvs_tval: (p15, 0, c3, c14, 0), u32: CnthvsTval, safe_read, fake::SYSREGS);
32879#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32880read_write_sysreg!(cnthvs_tval_el2: s3_4_c14_c4_0, u64: CnthvsTvalEl2, safe_read, safe_write, fake::SYSREGS);
32881#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32882read_write_sysreg!(cnthv_ctl: (p15, 0, c3, c14, 1), u32: CnthvCtl, safe_read, fake::SYSREGS);
32883#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32884read_write_sysreg!(cnthv_ctl_el2: s3_4_c14_c3_1, u64: CnthvCtlEl2, safe_read, safe_write, fake::SYSREGS);
32885#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32886read_write_sysreg!(cnthv_cval: (p15, 3, c14), u64: CnthvCval, safe_read, fake::SYSREGS);
32887#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32888read_write_sysreg!(cnthv_cval_el2: s3_4_c14_c3_2, u64: CnthvCvalEl2, safe_read, safe_write, fake::SYSREGS);
32889#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32890read_write_sysreg!(cnthv_tval: (p15, 0, c3, c14, 0), u32: CnthvTval, safe_read, fake::SYSREGS);
32891#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32892read_write_sysreg!(cnthv_tval_el2: s3_4_c14_c3_0, u64: CnthvTvalEl2, safe_read, safe_write, fake::SYSREGS);
32893#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32894read_write_sysreg!(cntkctl: (p15, 0, c1, c14, 0), u32: Cntkctl, safe_read, fake::SYSREGS);
32895#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32896read_write_sysreg!(cntkctl_el1, u64: CntkctlEl1, safe_read, safe_write, fake::SYSREGS);
32897#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32898read_sysreg!(cntpct: (p15, 0, c14), u64: Cntpct, safe, fake::SYSREGS);
32899#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32900read_sysreg!(cntpctss: (p15, 8, c14), u64: Cntpctss, safe, fake::SYSREGS);
32901#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32902read_sysreg!(cntpctss_el0: s3_3_c14_c0_5, u64: CntpctssEl0, safe, fake::SYSREGS);
32903#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32904read_sysreg!(cntpct_el0, u64: CntpctEl0, safe, fake::SYSREGS);
32905#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32906read_write_sysreg!(cntpoff_el2: s3_4_c14_c0_6, u64: CntpoffEl2, safe_read, safe_write, fake::SYSREGS);
32907#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32908read_write_sysreg!(cntps_ctl_el1, u64: CntpsCtlEl1, safe_read, safe_write, fake::SYSREGS);
32909#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32910read_write_sysreg!(cntps_cval_el1, u64: CntpsCvalEl1, safe_read, safe_write, fake::SYSREGS);
32911#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32912read_write_sysreg!(cntps_tval_el1, u64: CntpsTvalEl1, safe_read, safe_write, fake::SYSREGS);
32913#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32914read_write_sysreg!(cntp_ctl: (p15, 0, c2, c14, 1), u32: CntpCtl, safe_read, fake::SYSREGS);
32915#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32916read_write_sysreg!(cntp_ctl_el0, u64: CntpCtlEl0, safe_read, safe_write, fake::SYSREGS);
32917#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32918read_write_sysreg!(cntp_cval: (p15, 2, c14), u64: CntpCval, safe_read, fake::SYSREGS);
32919#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32920read_write_sysreg!(cntp_cval_el0, u64: CntpCvalEl0, safe_read, safe_write, fake::SYSREGS);
32921#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32922read_write_sysreg!(cntp_tval: (p15, 0, c2, c14, 0), u32: CntpTval, safe_read, fake::SYSREGS);
32923#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32924read_write_sysreg!(cntp_tval_el0, u64: CntpTvalEl0, safe_read, safe_write, fake::SYSREGS);
32925#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32926read_sysreg!(cntvct: (p15, 1, c14), u64: Cntvct, safe, fake::SYSREGS);
32927#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32928read_sysreg!(cntvctss: (p15, 9, c14), u64: Cntvctss, safe, fake::SYSREGS);
32929#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32930read_sysreg!(cntvctss_el0: s3_3_c14_c0_6, u64: CntvctssEl0, safe, fake::SYSREGS);
32931#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32932read_sysreg!(cntvct_el0, u64: CntvctEl0, safe, fake::SYSREGS);
32933#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32934read_write_sysreg!(cntvoff: (p15, 4, c14), u64: Cntvoff, safe_read, fake::SYSREGS);
32935#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32936read_write_sysreg!(cntvoff_el2, u64: CntvoffEl2, safe_read, safe_write, fake::SYSREGS);
32937#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32938read_write_sysreg!(cntv_ctl: (p15, 0, c3, c14, 1), u32: CntvCtl, safe_read, fake::SYSREGS);
32939#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32940read_write_sysreg!(cntv_ctl_el0, u64: CntvCtlEl0, safe_read, safe_write, fake::SYSREGS);
32941#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32942read_write_sysreg!(cntv_cval: (p15, 3, c14), u64: CntvCval, safe_read, fake::SYSREGS);
32943#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32944read_write_sysreg!(cntv_cval_el0, u64: CntvCvalEl0, safe_read, safe_write, fake::SYSREGS);
32945#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32946read_write_sysreg!(cntv_tval: (p15, 0, c3, c14, 0), u32: CntvTval, safe_read, fake::SYSREGS);
32947#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32948read_write_sysreg!(cntv_tval_el0, u64: CntvTvalEl0, safe_read, safe_write, fake::SYSREGS);
32949#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32950read_write_sysreg!(contextidr: (p15, 0, c0, c13, 1), u32: Contextidr, safe_read, fake::SYSREGS);
32951#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32952read_write_sysreg!(contextidr_el1, u64: ContextidrEl1, safe_read, safe_write, fake::SYSREGS);
32953#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32954read_write_sysreg!(contextidr_el2: s3_4_c13_c0_1, u64: ContextidrEl2, safe_read, safe_write, fake::SYSREGS);
32955#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32956read_write_sysreg!(cpacr: (p15, 0, c0, c1, 2), u32: Cpacr, safe_read, fake::SYSREGS);
32957#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32958read_write_sysreg!(cpacr_el1, u64: CpacrEl1, safe_read, fake::SYSREGS);
32959#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
32960read_write_sysreg!(cptr_el2, u64: CptrEl2, safe_read, fake::SYSREGS);
32961#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
32962read_write_sysreg!(cptr_el3, u64: CptrEl3, safe_read, fake::SYSREGS);
32963#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32964read_write_sysreg!(csselr: (p15, 2, c0, c0, 0), u32: Csselr, safe_read, fake::SYSREGS);
32965#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
32966read_write_sysreg!(csselr_el1, u64: CsselrEl1, safe_read, safe_write, fake::SYSREGS);
32967#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32968read_sysreg!(ctr: (p15, 0, c0, c0, 1), u32: Ctr, safe, fake::SYSREGS);
32969#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32970read_sysreg!(ctr_el0, u64: CtrEl0, safe, fake::SYSREGS);
32971#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
32972read_sysreg!(currentel, u64: Currentel, safe, fake::SYSREGS);
32973#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32974read_write_sysreg!(dacr: (p15, 0, c0, c3, 0), u32: Dacr, safe_read, fake::SYSREGS);
32975#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32976read_sysreg!(dbgauthstatus: (p14, 0, c14, c7, 6), u32: Dbgauthstatus, safe, fake::SYSREGS);
32977#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32978read_write_sysreg!(dbgclaimclr: (p14, 0, c9, c7, 6), u32: Dbgclaimclr, safe_read, fake::SYSREGS);
32979#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32980read_write_sysreg!(dbgclaimset: (p14, 0, c8, c7, 6), u32: Dbgclaimset, safe_read, fake::SYSREGS);
32981#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32982read_write_sysreg!(dbgdccint: (p14, 0, c2, c0, 0), u32: Dbgdccint, safe_read, fake::SYSREGS);
32983#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32984read_sysreg!(dbgdevid: (p14, 0, c2, c7, 7), u32: Dbgdevid, safe, fake::SYSREGS);
32985#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32986read_sysreg!(dbgdevid1: (p14, 0, c1, c7, 7), u32: Dbgdevid1, safe, fake::SYSREGS);
32987#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32988read_sysreg!(dbgdevid2: (p14, 0, c0, c7, 7), u32, safe, fake::SYSREGS);
32989#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32990read_sysreg!(dbgdidr: (p14, 0, c0, c0, 0), u32: Dbgdidr, safe, fake::SYSREGS);
32991#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32992read_sysreg!(dbgdrar: (p14, 0, c1), u64: Dbgdrar, safe, fake::SYSREGS);
32993#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32994read_sysreg!(dbgdsar: (p14, 0, c2), u64, safe, fake::SYSREGS);
32995#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32996read_write_sysreg!(dbgdscrext: (p14, 0, c2, c0, 2), u32: Dbgdscrext, safe_read, fake::SYSREGS);
32997#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
32998read_sysreg!(dbgdscrint: (p14, 0, c1, c0, 0), u32: Dbgdscrint, safe, fake::SYSREGS);
32999#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33000read_write_sysreg!(dbgdtrrxext: (p14, 0, c0, c0, 2), u32: Dbgdtrrxext, safe_read, fake::SYSREGS);
33001#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33002read_sysreg!(dbgdtrrxint: (p14, 0, c5, c0, 0), u32: Dbgdtrrxint, safe, fake::SYSREGS);
33003#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33004read_write_sysreg!(dbgdtrtxext: (p14, 0, c3, c0, 2), u32: Dbgdtrtxext, safe_read, fake::SYSREGS);
33005#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33006write_sysreg!(dbgdtrtxint: (p14, 0, c5, c0, 0), u32: Dbgdtrtxint, fake::SYSREGS);
33007#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33008read_write_sysreg!(dbgosdlr: (p14, 0, c3, c1, 4), u32: Dbgosdlr, safe_read, fake::SYSREGS);
33009#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33010read_write_sysreg!(dbgoseccr: (p14, 0, c6, c0, 2), u32: Dbgoseccr, safe_read, fake::SYSREGS);
33011#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33012write_sysreg!(dbgoslar: (p14, 0, c0, c1, 4), u32: Dbgoslar, fake::SYSREGS);
33013#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33014read_sysreg!(dbgoslsr: (p14, 0, c1, c1, 4), u32: Dbgoslsr, safe, fake::SYSREGS);
33015#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33016read_write_sysreg!(dbgprcr: (p14, 0, c4, c1, 4), u32: Dbgprcr, safe_read, fake::SYSREGS);
33017#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33018read_write_sysreg!(dbgvcr: (p14, 0, c7, c0, 0), u32: Dbgvcr, safe_read, fake::SYSREGS);
33019#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33020read_write_sysreg!(dbgwfar: (p14, 0, c6, c0, 0), u32, safe_read, fake::SYSREGS);
33021#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33022read_write_sysreg!(dfar: (p15, 0, c0, c6, 0), u32: Dfar, safe_read, fake::SYSREGS);
33023#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33024read_write_sysreg!(dfsr: (p15, 0, c0, c5, 0), u32: Dfsr, safe_read, fake::SYSREGS);
33025#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33026read_write_sysreg!(disr: (p15, 0, c1, c12, 1), u32: Disr, safe_read, fake::SYSREGS);
33027#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33028read_write_sysreg!(disr_el1: s3_0_c12_c1_1, u64: DisrEl1, safe_read, safe_write, fake::SYSREGS);
33029#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
33030read_write_sysreg!(dit: s3_3_c4_c2_5, u64: Dit, safe_read, safe_write, fake::SYSREGS);
33031#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33032read_write_sysreg!(dlr: (p15, 3, c5, c4, 1), u32: Dlr, safe_read, fake::SYSREGS);
33033#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33034read_write_sysreg!(dspsr: (p15, 3, c5, c4, 0), u32: Dspsr, safe_read, fake::SYSREGS);
33035#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33036read_write_sysreg!(dspsr2: (p15, 3, c5, c4, 2), u32: Dspsr2, safe_read, fake::SYSREGS);
33037#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33038read_write_sysreg!(elr_el1, u64: ElrEl1, safe_read, fake::SYSREGS);
33039#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33040read_write_sysreg!(elr_el2, u64: ElrEl2, safe_read, fake::SYSREGS);
33041#[cfg(all(any(test, feature = "fakes", target_arch = "arm"), feature = "el2"))]
33042read_write_sysreg!(elr_hyp, u32: ElrHyp, safe_read, fake::SYSREGS);
33043#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33044read_sysreg!(erridr: (p15, 0, c3, c5, 0), u32: Erridr, safe, fake::SYSREGS);
33045#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33046read_write_sysreg!(errselr: (p15, 0, c3, c5, 1), u32: Errselr, safe_read, fake::SYSREGS);
33047#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33048read_write_sysreg!(erxaddr: (p15, 0, c4, c5, 3), u32: Erxaddr, safe_read, fake::SYSREGS);
33049#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33050read_write_sysreg!(erxaddr2: (p15, 0, c4, c5, 7), u32: Erxaddr2, safe_read, fake::SYSREGS);
33051#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33052read_write_sysreg!(erxctlr: (p15, 0, c4, c5, 1), u32: Erxctlr, safe_read, fake::SYSREGS);
33053#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33054read_write_sysreg!(erxctlr2: (p15, 0, c4, c5, 5), u32: Erxctlr2, safe_read, fake::SYSREGS);
33055#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33056read_sysreg!(erxfr: (p15, 0, c4, c5, 0), u32: Erxfr, safe, fake::SYSREGS);
33057#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33058read_sysreg!(erxfr2: (p15, 0, c4, c5, 4), u32: Erxfr2, safe, fake::SYSREGS);
33059#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33060read_write_sysreg!(erxmisc0: (p15, 0, c5, c5, 0), u32: Erxmisc0, safe_read, fake::SYSREGS);
33061#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33062read_write_sysreg!(erxmisc1: (p15, 0, c5, c5, 1), u32: Erxmisc1, safe_read, fake::SYSREGS);
33063#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33064read_write_sysreg!(erxmisc2: (p15, 0, c5, c5, 4), u32: Erxmisc2, safe_read, fake::SYSREGS);
33065#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33066read_write_sysreg!(erxmisc3: (p15, 0, c5, c5, 5), u32: Erxmisc3, safe_read, fake::SYSREGS);
33067#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33068read_write_sysreg!(erxmisc4: (p15, 0, c5, c5, 2), u32: Erxmisc4, safe_read, fake::SYSREGS);
33069#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33070read_write_sysreg!(erxmisc5: (p15, 0, c5, c5, 3), u32: Erxmisc5, safe_read, fake::SYSREGS);
33071#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33072read_write_sysreg!(erxmisc6: (p15, 0, c5, c5, 6), u32: Erxmisc6, safe_read, fake::SYSREGS);
33073#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33074read_write_sysreg!(erxmisc7: (p15, 0, c5, c5, 7), u32: Erxmisc7, safe_read, fake::SYSREGS);
33075#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33076read_write_sysreg!(erxstatus: (p15, 0, c4, c5, 2), u32: Erxstatus, safe_read, fake::SYSREGS);
33077#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33078read_write_sysreg!(esr_el1, u64: EsrEl1, safe_read, safe_write, fake::SYSREGS);
33079#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33080read_write_sysreg!(esr_el2, u64: EsrEl2, safe_read, safe_write, fake::SYSREGS);
33081#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33082read_write_sysreg!(esr_el3, u64: EsrEl3, safe_read, safe_write, fake::SYSREGS);
33083#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33084read_write_sysreg!(far_el1, u64: FarEl1, safe_read, fake::SYSREGS);
33085#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33086read_write_sysreg!(far_el2, u64: FarEl2, safe_read, fake::SYSREGS);
33087#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33088read_write_sysreg!(fcseidr: (p15, 0, c0, c13, 0), u32, safe_read, fake::SYSREGS);
33089#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33090read_write_sysreg!(gcr_el1: s3_0_c1_c0_6, u64: GcrEl1, safe_read, fake::SYSREGS);
33091#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33092read_write_sysreg!(gcscr_el1: s3_0_c2_c5_0, u64: GcscrEl1, safe_read, fake::SYSREGS);
33093#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33094read_write_sysreg!(gcscr_el2: s3_4_c2_c5_0, u64: GcscrEl2, safe_read, fake::SYSREGS);
33095#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33096read_write_sysreg!(gpccr_el3: s3_6_c2_c1_6, u64: GpccrEl3, safe_read, fake::SYSREGS);
33097#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33098read_write_sysreg!(gptbr_el3: s3_6_c2_c1_4, u64: GptbrEl3, safe_read, fake::SYSREGS);
33099#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33100read_write_sysreg!(hacr: (p15, 4, c1, c1, 7), u32, safe_read, fake::SYSREGS);
33101#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33102read_write_sysreg!(hacr_el2, u64, safe_read, fake::SYSREGS);
33103#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33104read_write_sysreg!(hactlr: (p15, 4, c0, c1, 1), u32, safe_read, fake::SYSREGS);
33105#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33106read_write_sysreg!(hactlr2: (p15, 4, c0, c1, 3), u32, safe_read, fake::SYSREGS);
33107#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33108read_write_sysreg!(hadfsr: (p15, 4, c1, c5, 0), u32, safe_read, fake::SYSREGS);
33109#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33110read_write_sysreg!(hafgrtr_el2: s3_4_c3_c1_6, u64: HafgrtrEl2, safe_read, fake::SYSREGS);
33111#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33112read_write_sysreg!(haifsr: (p15, 4, c1, c5, 1), u32, safe_read, fake::SYSREGS);
33113#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33114read_write_sysreg!(hamair0: (p15, 4, c3, c10, 0), u32, safe_read, fake::SYSREGS);
33115#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33116read_write_sysreg!(hamair1: (p15, 4, c3, c10, 1), u32, safe_read, fake::SYSREGS);
33117#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33118read_write_sysreg!(hcptr: (p15, 4, c1, c1, 2), u32: Hcptr, safe_read, fake::SYSREGS);
33119#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33120read_write_sysreg!(hcr: (p15, 4, c1, c1, 0), u32: Hcr, safe_read, fake::SYSREGS);
33121#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33122read_write_sysreg!(hcr2: (p15, 4, c1, c1, 4), u32: Hcr2, safe_read, fake::SYSREGS);
33123#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33124read_write_sysreg!(hcrx_el2: s3_4_c1_c2_2, u64: HcrxEl2, safe_read, fake::SYSREGS);
33125#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33126read_write_sysreg!(hcr_el2, u64: HcrEl2, safe_read, fake::SYSREGS);
33127#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33128read_write_sysreg!(hdcr: (p15, 4, c1, c1, 1), u32: Hdcr, safe_read, fake::SYSREGS);
33129#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33130read_write_sysreg!(hdfar: (p15, 4, c0, c6, 0), u32: Hdfar, safe_read, fake::SYSREGS);
33131#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33132read_write_sysreg!(hdfgrtr2_el2: s3_4_c3_c1_0, u64: Hdfgrtr2El2, safe_read, fake::SYSREGS);
33133#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33134read_write_sysreg!(hdfgrtr_el2: s3_4_c3_c1_4, u64: HdfgrtrEl2, safe_read, fake::SYSREGS);
33135#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33136read_write_sysreg!(hdfgwtr2_el2: s3_4_c3_c1_1, u64: Hdfgwtr2El2, safe_read, fake::SYSREGS);
33137#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33138read_write_sysreg!(hdfgwtr_el2: s3_4_c3_c1_5, u64: HdfgwtrEl2, safe_read, fake::SYSREGS);
33139#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33140read_write_sysreg!(hfgitr2_el2: s3_4_c3_c1_7, u64: Hfgitr2El2, safe_read, fake::SYSREGS);
33141#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33142read_write_sysreg!(hfgitr_el2: s3_4_c1_c1_6, u64: HfgitrEl2, safe_read, fake::SYSREGS);
33143#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33144read_write_sysreg!(hfgrtr2_el2: s3_4_c3_c1_2, u64: Hfgrtr2El2, safe_read, fake::SYSREGS);
33145#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33146read_write_sysreg!(hfgrtr_el2: s3_4_c1_c1_4, u64: HfgrtrEl2, safe_read, fake::SYSREGS);
33147#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33148read_write_sysreg!(hfgwtr2_el2: s3_4_c3_c1_3, u64: Hfgwtr2El2, safe_read, fake::SYSREGS);
33149#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33150read_write_sysreg!(hfgwtr_el2: s3_4_c1_c1_5, u64: HfgwtrEl2, safe_read, fake::SYSREGS);
33151#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33152read_write_sysreg!(hifar: (p15, 4, c0, c6, 2), u32: Hifar, safe_read, fake::SYSREGS);
33153#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33154read_write_sysreg!(hmair0: (p15, 4, c2, c10, 0), u32: Hmair0, safe_read, fake::SYSREGS);
33155#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33156read_write_sysreg!(hmair1: (p15, 4, c2, c10, 1), u32: Hmair1, safe_read, fake::SYSREGS);
33157#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33158read_write_sysreg!(hpfar: (p15, 4, c0, c6, 4), u32: Hpfar, safe_read, fake::SYSREGS);
33159#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33160read_write_sysreg!(hpfar_el2, u64: HpfarEl2, safe_read, fake::SYSREGS);
33161#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33162read_write_sysreg!(hrmr: (p15, 4, c0, c12, 2), u32: Hrmr, safe_read, fake::SYSREGS);
33163#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33164read_write_sysreg!(hsctlr: (p15, 4, c0, c1, 0), u32: Hsctlr, safe_read, fake::SYSREGS);
33165#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33166read_write_sysreg!(hsr: (p15, 4, c2, c5, 0), u32: Hsr, safe_read, fake::SYSREGS);
33167#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33168read_write_sysreg!(hstr: (p15, 4, c1, c1, 3), u32, safe_read, fake::SYSREGS);
33169#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33170read_write_sysreg!(hstr_el2, u64, safe_read, safe_write, fake::SYSREGS);
33171#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33172read_write_sysreg!(htcr: (p15, 4, c0, c2, 2), u32: Htcr, safe_read, fake::SYSREGS);
33173#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33174read_write_sysreg!(htpidr: (p15, 4, c0, c13, 2), u32: Htpidr, safe_read, fake::SYSREGS);
33175#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33176read_write_sysreg!(htrfcr: (p15, 4, c2, c1, 1), u32: Htrfcr, safe_read, fake::SYSREGS);
33177#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33178read_write_sysreg!(httbr: (p15, 4, c2), u64: Httbr, safe_read, fake::SYSREGS);
33179#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33180read_write_sysreg!(hvbar: (p15, 4, c0, c12, 0), u32: Hvbar, safe_read, fake::SYSREGS);
33181#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33182read_write_sysreg!(icc_ap0r0_el1: s3_0_c12_c8_4, u64, safe_read, fake::SYSREGS);
33183#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33184read_write_sysreg!(icc_ap0r1_el1: s3_0_c12_c8_5, u64, safe_read, fake::SYSREGS);
33185#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33186read_write_sysreg!(icc_ap0r2_el1: s3_0_c12_c8_6, u64, safe_read, fake::SYSREGS);
33187#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33188read_write_sysreg!(icc_ap0r3_el1: s3_0_c12_c8_7, u64, safe_read, fake::SYSREGS);
33189#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33190read_write_sysreg!(icc_ap1r0_el1: s3_0_c12_c9_0, u64: IccAp1r0El1, safe_read, fake::SYSREGS);
33191#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33192read_write_sysreg!(icc_ap1r1_el1: s3_0_c12_c9_1, u64, safe_read, fake::SYSREGS);
33193#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33194read_write_sysreg!(icc_ap1r2_el1: s3_0_c12_c9_2, u64, safe_read, fake::SYSREGS);
33195#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33196read_write_sysreg!(icc_ap1r3_el1: s3_0_c12_c9_3, u64, safe_read, fake::SYSREGS);
33197#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33198write_sysreg!(icc_asgi1r: (p15, 1, c12), u64: IccAsgi1r, safe, fake::SYSREGS);
33199#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33200write_sysreg!(icc_asgi1r_el1: s3_0_c12_c11_6, u64: IccAsgi1rEl1, safe, fake::SYSREGS);
33201#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33202read_write_sysreg!(icc_bpr0: (p15, 0, c8, c12, 3), u32: IccBpr0, safe_read, safe_write, fake::SYSREGS);
33203#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33204read_write_sysreg!(icc_bpr0_el1: s3_0_c12_c8_3, u64: IccBpr0El1, safe_read, safe_write, fake::SYSREGS);
33205#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33206read_write_sysreg!(icc_bpr1: (p15, 0, c12, c12, 3), u32: IccBpr1, safe_read, safe_write, fake::SYSREGS);
33207#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33208read_write_sysreg!(icc_bpr1_el1: s3_0_c12_c12_3, u64: IccBpr1El1, safe_read, safe_write, fake::SYSREGS);
33209#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33210read_write_sysreg!(icc_ctlr: (p15, 0, c12, c12, 4), u32: IccCtlr, safe_read, safe_write, fake::SYSREGS);
33211#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33212read_write_sysreg!(icc_ctlr_el1: s3_0_c12_c12_4, u64: IccCtlrEl1, safe_read, safe_write, fake::SYSREGS);
33213#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33214read_write_sysreg!(icc_ctlr_el3: s3_6_c12_c12_4, u64: IccCtlrEl3, safe_read, safe_write, fake::SYSREGS);
33215#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33216write_sysreg!(icc_dir: (p15, 0, c11, c12, 1), u32: IccDir, safe, fake::SYSREGS);
33217#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33218write_sysreg!(icc_dir_el1: s3_0_c12_c11_1, u64: IccDirEl1, safe, fake::SYSREGS);
33219#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33220write_sysreg!(icc_eoir0: (p15, 0, c8, c12, 1), u32: IccEoir0, safe, fake::SYSREGS);
33221#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33222write_sysreg!(icc_eoir0_el1: s3_0_c12_c8_1, u64: IccEoir0El1, safe, fake::SYSREGS);
33223#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33224write_sysreg!(icc_eoir1: (p15, 0, c12, c12, 1), u32: IccEoir1, safe, fake::SYSREGS);
33225#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33226write_sysreg!(icc_eoir1_el1: s3_0_c12_c12_1, u64: IccEoir1El1, safe, fake::SYSREGS);
33227#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33228read_sysreg!(icc_hppir0: (p15, 0, c8, c12, 2), u32: IccHppir0, safe, fake::SYSREGS);
33229#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33230read_sysreg!(icc_hppir0_el1: s3_0_c12_c8_2, u64: IccHppir0El1, safe, fake::SYSREGS);
33231#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33232read_sysreg!(icc_hppir1: (p15, 0, c12, c12, 2), u32: IccHppir1, safe, fake::SYSREGS);
33233#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33234read_sysreg!(icc_hppir1_el1: s3_0_c12_c12_2, u64: IccHppir1El1, safe, fake::SYSREGS);
33235#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33236read_write_sysreg!(icc_hsre: (p15, 4, c9, c12, 5), u32: IccHsre, safe_read, fake::SYSREGS);
33237#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33238read_sysreg!(icc_iar0: (p15, 0, c8, c12, 0), u32: IccIar0, safe, fake::SYSREGS);
33239#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33240read_sysreg!(icc_iar0_el1: s3_0_c12_c8_0, u64: IccIar0El1, safe, fake::SYSREGS);
33241#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33242read_sysreg!(icc_iar1: (p15, 0, c12, c12, 0), u32: IccIar1, safe, fake::SYSREGS);
33243#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33244read_sysreg!(icc_iar1_el1: s3_0_c12_c12_0, u64: IccIar1El1, safe, fake::SYSREGS);
33245#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33246read_write_sysreg!(icc_igrpen0: (p15, 0, c12, c12, 6), u32: IccIgrpen0, safe_read, safe_write, fake::SYSREGS);
33247#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33248read_write_sysreg!(icc_igrpen0_el1: s3_0_c12_c12_6, u64: IccIgrpen0El1, safe_read, safe_write, fake::SYSREGS);
33249#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33250read_write_sysreg!(icc_igrpen1: (p15, 0, c12, c12, 7), u32: IccIgrpen1, safe_read, safe_write, fake::SYSREGS);
33251#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33252read_write_sysreg!(icc_igrpen1_el1: s3_0_c12_c12_7, u64: IccIgrpen1El1, safe_read, safe_write, fake::SYSREGS);
33253#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33254read_write_sysreg!(icc_igrpen1_el3: s3_6_c12_c12_7, u64: IccIgrpen1El3, safe_read, safe_write, fake::SYSREGS);
33255#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33256read_write_sysreg!(icc_mctlr: (p15, 6, c12, c12, 4), u32: IccMctlr, safe_read, safe_write, fake::SYSREGS);
33257#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33258read_write_sysreg!(icc_mgrpen1: (p15, 6, c12, c12, 7), u32: IccMgrpen1, safe_read, safe_write, fake::SYSREGS);
33259#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33260read_write_sysreg!(icc_msre: (p15, 6, c12, c12, 5), u32: IccMsre, safe_read, fake::SYSREGS);
33261#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33262read_sysreg!(icc_nmiar1_el1: s3_0_c12_c9_5, u64: IccNmiar1El1, safe, fake::SYSREGS);
33263#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33264read_write_sysreg!(icc_pmr: (p15, 0, c6, c4, 0), u32: IccPmr, safe_read, safe_write, fake::SYSREGS);
33265#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33266read_write_sysreg!(icc_pmr_el1: s3_0_c4_c6_0, u64: IccPmrEl1, safe_read, safe_write, fake::SYSREGS);
33267#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33268read_sysreg!(icc_rpr: (p15, 0, c11, c12, 3), u32: IccRpr, safe, fake::SYSREGS);
33269#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33270read_sysreg!(icc_rpr_el1: s3_0_c12_c11_3, u64: IccRprEl1, safe, fake::SYSREGS);
33271#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33272write_sysreg!(icc_sgi0r: (p15, 2, c12), u64: IccSgi0r, safe, fake::SYSREGS);
33273#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33274write_sysreg!(icc_sgi0r_el1: s3_0_c12_c11_7, u64: IccSgi0rEl1, safe, fake::SYSREGS);
33275#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33276write_sysreg!(icc_sgi1r: (p15, 0, c12), u64: IccSgi1r, safe, fake::SYSREGS);
33277#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33278write_sysreg!(icc_sgi1r_el1: s3_0_c12_c11_5, u64: IccSgi1rEl1, safe, fake::SYSREGS);
33279#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33280read_write_sysreg!(icc_sre: (p15, 0, c12, c12, 5), u32: IccSre, safe_read, fake::SYSREGS);
33281#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33282read_write_sysreg!(icc_sre_el1: s3_0_c12_c12_5, u64: IccSreEl1, safe_read, fake::SYSREGS);
33283#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33284read_write_sysreg!(icc_sre_el2: s3_4_c12_c9_5, u64: IccSreEl2, safe_read, fake::SYSREGS);
33285#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33286read_write_sysreg! {
33287 icc_sre_el3: s3_6_c12_c12_5, u64: IccSreEl3, safe_read, fake::SYSREGS
33291}
33292#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33293read_write_sysreg!(ich_hcr_el2: s3_4_c12_c11_0, u64: IchHcrEl2, safe_read, fake::SYSREGS);
33294#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33295read_write_sysreg!(ich_vmcr_el2: s3_4_c12_c11_7, u64: IchVmcrEl2, safe_read, safe_write, fake::SYSREGS);
33296#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33297read_sysreg!(id_aa64dfr0_el1, u64: IdAa64dfr0El1, safe, fake::SYSREGS);
33298#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33299read_sysreg!(id_aa64dfr1_el1, u64: IdAa64dfr1El1, safe, fake::SYSREGS);
33300#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33301read_sysreg!(id_aa64isar1_el1, u64: IdAa64isar1El1, safe, fake::SYSREGS);
33302#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33303read_sysreg!(id_aa64isar2_el1, u64: IdAa64isar2El1, safe, fake::SYSREGS);
33304#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33305read_sysreg!(id_aa64mmfr0_el1, u64: IdAa64mmfr0El1, safe, fake::SYSREGS);
33306#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33307read_sysreg!(id_aa64mmfr1_el1, u64: IdAa64mmfr1El1, safe, fake::SYSREGS);
33308#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33309read_sysreg!(id_aa64mmfr2_el1, u64: IdAa64mmfr2El1, safe, fake::SYSREGS);
33310#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33311read_sysreg!(id_aa64mmfr3_el1, u64: IdAa64mmfr3El1, safe, fake::SYSREGS);
33312#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33313read_sysreg!(id_aa64pfr0_el1, u64: IdAa64pfr0El1, safe, fake::SYSREGS);
33314#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33315read_sysreg!(id_aa64pfr1_el1, u64: IdAa64pfr1El1, safe, fake::SYSREGS);
33316#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33317read_sysreg!(id_aa64smfr0_el1: s3_0_c0_c4_5, u64: IdAa64smfr0El1, safe, fake::SYSREGS);
33318#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33319read_sysreg!(id_afr0: (p15, 0, c1, c0, 3), u32, safe, fake::SYSREGS);
33320#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33321read_sysreg!(id_dfr0: (p15, 0, c1, c0, 2), u32: IdDfr0, safe, fake::SYSREGS);
33322#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33323read_sysreg!(id_dfr1: (p15, 0, c3, c0, 5), u32: IdDfr1, safe, fake::SYSREGS);
33324#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33325read_sysreg!(id_isar0: (p15, 0, c2, c0, 0), u32: IdIsar0, safe, fake::SYSREGS);
33326#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33327read_sysreg!(id_isar1: (p15, 0, c2, c0, 1), u32: IdIsar1, safe, fake::SYSREGS);
33328#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33329read_sysreg!(id_isar2: (p15, 0, c2, c0, 2), u32: IdIsar2, safe, fake::SYSREGS);
33330#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33331read_sysreg!(id_isar3: (p15, 0, c2, c0, 3), u32: IdIsar3, safe, fake::SYSREGS);
33332#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33333read_sysreg!(id_isar4: (p15, 0, c2, c0, 4), u32: IdIsar4, safe, fake::SYSREGS);
33334#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33335read_sysreg!(id_isar5: (p15, 0, c2, c0, 5), u32: IdIsar5, safe, fake::SYSREGS);
33336#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33337read_sysreg!(id_isar6: (p15, 0, c2, c0, 7), u32: IdIsar6, safe, fake::SYSREGS);
33338#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33339read_sysreg!(id_mmfr0: (p15, 0, c1, c0, 4), u32: IdMmfr0, safe, fake::SYSREGS);
33340#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33341read_sysreg!(id_mmfr1: (p15, 0, c1, c0, 5), u32: IdMmfr1, safe, fake::SYSREGS);
33342#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33343read_sysreg!(id_mmfr2: (p15, 0, c1, c0, 6), u32: IdMmfr2, safe, fake::SYSREGS);
33344#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33345read_sysreg!(id_mmfr3: (p15, 0, c1, c0, 7), u32: IdMmfr3, safe, fake::SYSREGS);
33346#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33347read_sysreg!(id_mmfr4: (p15, 0, c2, c0, 6), u32: IdMmfr4, safe, fake::SYSREGS);
33348#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33349read_sysreg!(id_mmfr5: (p15, 0, c3, c0, 6), u32: IdMmfr5, safe, fake::SYSREGS);
33350#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33351read_sysreg!(id_pfr0: (p15, 0, c1, c0, 0), u32: IdPfr0, safe, fake::SYSREGS);
33352#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33353read_sysreg!(id_pfr1: (p15, 0, c1, c0, 1), u32: IdPfr1, safe, fake::SYSREGS);
33354#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33355read_sysreg!(id_pfr2: (p15, 0, c3, c0, 4), u32: IdPfr2, safe, fake::SYSREGS);
33356#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33357read_write_sysreg!(ifar: (p15, 0, c0, c6, 2), u32: Ifar, safe_read, fake::SYSREGS);
33358#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33359read_write_sysreg!(ifsr: (p15, 0, c0, c5, 1), u32: Ifsr, safe_read, fake::SYSREGS);
33360#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33361read_sysreg!(isr: (p15, 0, c1, c12, 0), u32: Isr, safe, fake::SYSREGS);
33362#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33363read_sysreg!(isr_el1, u64: IsrEl1, safe, fake::SYSREGS);
33364#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33365read_sysreg!(jidr: (p14, 7, c0, c0, 0), u32, safe, fake::SYSREGS);
33366#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33367read_write_sysreg!(jmcr: (p14, 7, c0, c2, 0), u32, safe_read, fake::SYSREGS);
33368#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33369read_write_sysreg!(joscr: (p14, 7, c0, c1, 0), u32, safe_read, fake::SYSREGS);
33370#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33371read_write_sysreg!(mair0: (p15, 0, c2, c10, 0), u32: Mair0, safe_read, fake::SYSREGS);
33372#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33373read_write_sysreg!(mair1: (p15, 0, c2, c10, 1), u32: Mair1, safe_read, fake::SYSREGS);
33374#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33375read_write_sysreg!(mair_el1, u64: MairEl1, safe_read, fake::SYSREGS);
33376#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33377read_write_sysreg!(mair_el2, u64: MairEl2, safe_read, fake::SYSREGS);
33378#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33379read_write_sysreg! {
33380 mair_el3, u64: MairEl3, safe_read, fake::SYSREGS
33384}
33385#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33386read_write_sysreg!(mdccint_el1, u64: MdccintEl1, safe_read, safe_write, fake::SYSREGS);
33387#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33388read_write_sysreg!(mdcr_el2, u64: MdcrEl2, safe_read, safe_write, fake::SYSREGS);
33389#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33390read_write_sysreg!(mdcr_el3, u64: MdcrEl3, safe_read, safe_write, fake::SYSREGS);
33391#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33392read_write_sysreg!(mdscr_el1, u64: MdscrEl1, safe_read, safe_write, fake::SYSREGS);
33393#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33394read_sysreg!(midr: (p15, 0, c0, c0, 0), u32: Midr, safe, fake::SYSREGS);
33395#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33396read_sysreg!(midr_el1, u64: MidrEl1, safe, fake::SYSREGS);
33397#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33398read_write_sysreg!(mpam2_el2: s3_4_c10_c5_0, u64: Mpam2El2, safe_read, fake::SYSREGS);
33399#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33400read_write_sysreg!(mpam3_el3: s3_6_c10_c5_0, u64: Mpam3El3, safe_read, fake::SYSREGS);
33401#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33402read_write_sysreg!(mpamhcr_el2: s3_4_c10_c4_0, u64: MpamhcrEl2, safe_read, fake::SYSREGS);
33403#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33404read_sysreg!(mpamidr_el1: s3_0_c10_c4_4, u64: MpamidrEl1, safe, fake::SYSREGS);
33405#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33406read_write_sysreg!(mpamvpm0_el2: s3_4_c10_c6_0, u64: Mpamvpm0El2, safe_read, fake::SYSREGS);
33407#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33408read_write_sysreg!(mpamvpm1_el2: s3_4_c10_c6_1, u64: Mpamvpm1El2, safe_read, fake::SYSREGS);
33409#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33410read_write_sysreg!(mpamvpm2_el2: s3_4_c10_c6_2, u64: Mpamvpm2El2, safe_read, fake::SYSREGS);
33411#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33412read_write_sysreg!(mpamvpm3_el2: s3_4_c10_c6_3, u64: Mpamvpm3El2, safe_read, fake::SYSREGS);
33413#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33414read_write_sysreg!(mpamvpm4_el2: s3_4_c10_c6_4, u64: Mpamvpm4El2, safe_read, fake::SYSREGS);
33415#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33416read_write_sysreg!(mpamvpm5_el2: s3_4_c10_c6_5, u64: Mpamvpm5El2, safe_read, fake::SYSREGS);
33417#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33418read_write_sysreg!(mpamvpm6_el2: s3_4_c10_c6_6, u64: Mpamvpm6El2, safe_read, fake::SYSREGS);
33419#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33420read_write_sysreg!(mpamvpm7_el2: s3_4_c10_c6_7, u64: Mpamvpm7El2, safe_read, fake::SYSREGS);
33421#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33422read_write_sysreg!(mpamvpmv_el2: s3_4_c10_c4_1, u64: MpamvpmvEl2, safe_read, fake::SYSREGS);
33423#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33424read_sysreg!(mpidr: (p15, 0, c0, c0, 5), u32: Mpidr, safe, fake::SYSREGS);
33425#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33426read_sysreg!(mpidr_el1, u64: MpidrEl1, safe, fake::SYSREGS);
33427#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33428read_write_sysreg!(mvbar: (p15, 0, c0, c12, 1), u32: Mvbar, safe_read, fake::SYSREGS);
33429#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33430read_write_sysreg!(nmrr: (p15, 0, c2, c10, 1), u32: Nmrr, safe_read, fake::SYSREGS);
33431#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33432read_write_sysreg!(nsacr: (p15, 0, c1, c1, 2), u32: Nsacr, safe_read, fake::SYSREGS);
33433#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33434read_write_sysreg!(par: (p15, 0, c7), u64: Par, safe_read, fake::SYSREGS);
33435#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33436read_write_sysreg!(par_el1, u64: ParEl1, safe_read, fake::SYSREGS);
33437#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33438read_write_sysreg!(pmccfiltr: (p15, 0, c15, c14, 7), u32: Pmccfiltr, safe_read, fake::SYSREGS);
33439#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33440read_write_sysreg!(pmccntr: (p15, 0, c9), u64: Pmccntr, safe_read, fake::SYSREGS);
33441#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33442read_sysreg!(pmceid0: (p15, 0, c12, c9, 6), u32: Pmceid0, safe, fake::SYSREGS);
33443#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33444read_sysreg!(pmceid1: (p15, 0, c12, c9, 7), u32: Pmceid1, safe, fake::SYSREGS);
33445#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33446read_sysreg!(pmceid2: (p15, 0, c14, c9, 4), u32: Pmceid2, safe, fake::SYSREGS);
33447#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33448read_sysreg!(pmceid3: (p15, 0, c14, c9, 5), u32: Pmceid3, safe, fake::SYSREGS);
33449#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33450read_write_sysreg!(pmcntenclr: (p15, 0, c12, c9, 2), u32: Pmcntenclr, safe_read, fake::SYSREGS);
33451#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33452read_write_sysreg!(pmcntenset: (p15, 0, c12, c9, 1), u32: Pmcntenset, safe_read, fake::SYSREGS);
33453#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33454read_write_sysreg!(pmcr: (p15, 0, c12, c9, 0), u32: Pmcr, safe_read, fake::SYSREGS);
33455#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
33456read_write_sysreg!(pmcr_el0: s3_3_c9_c12_0, u64: PmcrEl0, safe_read, safe_write, fake::SYSREGS);
33457#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33458read_write_sysreg!(pmintenclr: (p15, 0, c14, c9, 2), u32: Pmintenclr, safe_read, fake::SYSREGS);
33459#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33460read_write_sysreg!(pmintenset: (p15, 0, c14, c9, 1), u32: Pmintenset, safe_read, fake::SYSREGS);
33461#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33462read_sysreg!(pmmir: (p15, 0, c14, c9, 6), u32: Pmmir, safe, fake::SYSREGS);
33463#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33464read_write_sysreg!(pmovsr: (p15, 0, c12, c9, 3), u32: Pmovsr, safe_read, fake::SYSREGS);
33465#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33466read_write_sysreg!(pmovsset: (p15, 0, c14, c9, 3), u32: Pmovsset, safe_read, fake::SYSREGS);
33467#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33468read_write_sysreg!(pmselr: (p15, 0, c12, c9, 5), u32: Pmselr, safe_read, fake::SYSREGS);
33469#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33470write_sysreg!(pmswinc: (p15, 0, c12, c9, 4), u32: Pmswinc, fake::SYSREGS);
33471#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33472read_write_sysreg!(pmuserenr: (p15, 0, c14, c9, 0), u32: Pmuserenr, safe_read, fake::SYSREGS);
33473#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33474read_write_sysreg!(pmxevtyper: (p15, 0, c13, c9, 1), u32: Pmxevtyper, safe_read, fake::SYSREGS);
33475#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33476read_write_sysreg!(prrr: (p15, 0, c2, c10, 0), u32: Prrr, safe_read, fake::SYSREGS);
33477#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33478read_sysreg!(revidr: (p15, 0, c0, c0, 6), u32, safe, fake::SYSREGS);
33479#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33480read_write_sysreg!(rgsr_el1: s3_0_c1_c0_5, u64: RgsrEl1, safe_read, safe_write, fake::SYSREGS);
33481#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33482read_write_sysreg!(rmr: (p15, 0, c0, c12, 2), u32: Rmr, safe_read, fake::SYSREGS);
33483#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33484read_sysreg!(rvbar: (p15, 0, c0, c12, 1), u32: Rvbar, safe, fake::SYSREGS);
33485#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33486read_write_sysreg!(scr: (p15, 0, c1, c1, 0), u32: Scr, safe_read, fake::SYSREGS);
33487#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33488read_write_sysreg!(scr_el3, u64: ScrEl3, safe_read, fake::SYSREGS);
33489#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33490read_write_sysreg!(sctlr: (p15, 0, c0, c1, 0), u32: Sctlr, safe_read, fake::SYSREGS);
33491#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33492read_write_sysreg!(sctlr2_el3: s3_6_c1_c0_3, u64: Sctlr2El3, safe_read, fake::SYSREGS);
33493#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33494read_write_sysreg!(sctlr_el1, u64: SctlrEl1, safe_read, fake::SYSREGS);
33495#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33496read_write_sysreg!(sctlr_el2, u64: SctlrEl2, safe_read, fake::SYSREGS);
33497#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33498read_write_sysreg! {
33499 sctlr_el3, u64: SctlrEl3, safe_read, fake::SYSREGS
33503}
33504#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33505read_write_sysreg!(sdcr: (p15, 0, c3, c1, 1), u32: Sdcr, safe_read, fake::SYSREGS);
33506#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33507read_write_sysreg!(sder: (p15, 0, c1, c1, 1), u32: Sder, safe_read, fake::SYSREGS);
33508#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33509read_write_sysreg!(smcr_el3: s3_6_c1_c2_6, u64: SmcrEl3, safe_read, fake::SYSREGS);
33510#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33511read_write_sysreg!(spsr_el1, u64: SpsrEl1, safe_read, fake::SYSREGS);
33512#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33513read_write_sysreg!(spsr_el2, u64: SpsrEl2, safe_read, fake::SYSREGS);
33514#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33515read_write_sysreg!(spsr_el3, u64: SpsrEl3, safe_read, fake::SYSREGS);
33516#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33517read_write_sysreg!(sp_el1, u64: SpEl1, safe_read, fake::SYSREGS);
33518#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33519read_write_sysreg!(sp_el2, u64: SpEl2, safe_read, fake::SYSREGS);
33520#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
33521read_write_sysreg!(svcr: s3_3_c4_c2_2, u64: Svcr, safe_read, fake::SYSREGS);
33522#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33523read_sysreg!(tcmtr: (p15, 0, c0, c0, 2), u32, safe, fake::SYSREGS);
33524#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33525read_write_sysreg!(tcr2_el1: s3_0_c2_c0_3, u64: Tcr2El1, safe_read, fake::SYSREGS);
33526#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33527read_write_sysreg!(tcr2_el2: s3_4_c2_c0_3, u64: Tcr2El2, safe_read, fake::SYSREGS);
33528#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33529read_write_sysreg!(tcr_el1, u64: TcrEl1, safe_read, fake::SYSREGS);
33530#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33531read_write_sysreg!(tcr_el2, u64: TcrEl2, safe_read, fake::SYSREGS);
33532#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33533read_write_sysreg! {
33534 tcr_el3, u64: TcrEl3, safe_read, fake::SYSREGS
33538}
33539#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33540read_write_sysreg!(tfsre0_el1: s3_0_c5_c6_1, u64: Tfsre0El1, safe_read, safe_write, fake::SYSREGS);
33541#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33542read_write_sysreg!(tfsr_el1: s3_0_c5_c6_0, u64: TfsrEl1, safe_read, safe_write, fake::SYSREGS);
33543#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33544read_write_sysreg!(tfsr_el2: s3_4_c5_c6_0, u64: TfsrEl2, safe_read, safe_write, fake::SYSREGS);
33545#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33546read_sysreg!(tlbtr: (p15, 0, c0, c0, 3), u32: Tlbtr, safe, fake::SYSREGS);
33547#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33548read_write_sysreg!(tpidrprw: (p15, 0, c0, c13, 4), u32: Tpidrprw, safe_read, fake::SYSREGS);
33549#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
33550read_write_sysreg!(tpidrro_el0, u64: TpidrroEl0, safe_read, fake::SYSREGS);
33551#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33552read_write_sysreg!(tpidruro: (p15, 0, c0, c13, 3), u32: Tpidruro, safe_read, fake::SYSREGS);
33553#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33554read_write_sysreg!(tpidrurw: (p15, 0, c0, c13, 2), u32: Tpidrurw, safe_read, fake::SYSREGS);
33555#[cfg(any(test, feature = "fakes", target_arch = "aarch64"))]
33556read_write_sysreg!(tpidr_el0, u64: TpidrEl0, safe_read, fake::SYSREGS);
33557#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33558read_write_sysreg!(tpidr_el1, u64: TpidrEl1, safe_read, fake::SYSREGS);
33559#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33560read_write_sysreg!(tpidr_el2, u64: TpidrEl2, safe_read, fake::SYSREGS);
33561#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33562read_write_sysreg!(tpidr_el3, u64: TpidrEl3, safe_read, fake::SYSREGS);
33563#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33564read_write_sysreg!(trfcr: (p15, 0, c2, c1, 1), u32: Trfcr, safe_read, fake::SYSREGS);
33565#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33566read_write_sysreg!(ttbcr: (p15, 0, c0, c2, 2), u32: Ttbcr, safe_read, fake::SYSREGS);
33567#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33568read_write_sysreg!(ttbcr2: (p15, 0, c0, c2, 3), u32: Ttbcr2, safe_read, fake::SYSREGS);
33569#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33570read_write_sysreg!(ttbr0: (p15, 0, c2), u64: Ttbr0, safe_read, fake::SYSREGS);
33571#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33572read_write_sysreg! {
33573 ttbr0_el1, u64: Ttbr0El1, safe_read, fake::SYSREGS
33577}
33578#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33579read_write_sysreg! {
33580 ttbr0_el2, u64: Ttbr0El2, safe_read, fake::SYSREGS
33584}
33585#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33586read_write_sysreg! {
33587 ttbr0_el3, u64: Ttbr0El3, safe_read, fake::SYSREGS
33591}
33592#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33593read_write_sysreg!(ttbr1: (p15, 1, c2), u64: Ttbr1, safe_read, fake::SYSREGS);
33594#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33595read_write_sysreg! {
33596 ttbr1_el1, u64: Ttbr1El1, safe_read, fake::SYSREGS
33600}
33601#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33602read_write_sysreg! {
33603 ttbr1_el2: s3_4_c2_c0_1, u64: Ttbr1El2, safe_read, fake::SYSREGS
33607}
33608#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33609read_write_sysreg!(vbar: (p15, 0, c0, c12, 0), u32: Vbar, safe_read, fake::SYSREGS);
33610#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el1"))]
33611read_write_sysreg! {
33612 vbar_el1, u64: VbarEl1, safe_read, fake::SYSREGS
33616}
33617#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33618read_write_sysreg! {
33619 vbar_el2, u64: VbarEl2, safe_read, fake::SYSREGS
33623}
33624#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33625read_write_sysreg!(vdfsr: (p15, 4, c2, c5, 3), u32: Vdfsr, safe_read, fake::SYSREGS);
33626#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33627read_write_sysreg!(vdisr: (p15, 0, c1, c12, 1), u32: Vdisr, safe_read, fake::SYSREGS);
33628#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33629read_write_sysreg!(vdisr_el2: s3_4_c12_c1_1, u64: VdisrEl2, safe_read, safe_write, fake::SYSREGS);
33630#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33631read_write_sysreg!(vmpidr: (p15, 0, c0, c0, 5), u32: Vmpidr, safe_read, fake::SYSREGS);
33632#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33633read_write_sysreg!(vmpidr_el2, u64: VmpidrEl2, safe_read, safe_write, fake::SYSREGS);
33634#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33635read_write_sysreg!(vpidr: (p15, 0, c0, c0, 0), u32: Vpidr, safe_read, fake::SYSREGS);
33636#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33637read_write_sysreg!(vpidr_el2, u64: VpidrEl2, safe_read, safe_write, fake::SYSREGS);
33638#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33639read_write_sysreg!(vsesr_el2: s3_4_c5_c2_3, u64: VsesrEl2, safe_read, safe_write, fake::SYSREGS);
33640#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33641read_write_sysreg!(vtcr: (p15, 4, c1, c2, 2), u32: Vtcr, safe_read, fake::SYSREGS);
33642#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33643read_write_sysreg!(vtcr_el2, u64: VtcrEl2, safe_read, fake::SYSREGS);
33644#[cfg(any(test, feature = "fakes", target_arch = "arm"))]
33645read_write_sysreg!(vttbr: (p15, 6, c2), u64: Vttbr, safe_read, fake::SYSREGS);
33646#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el2"))]
33647read_write_sysreg! {
33648 vttbr_el2, u64: VttbrEl2, safe_read, fake::SYSREGS
33652}
33653#[cfg(all(any(test, feature = "fakes", target_arch = "aarch64"), feature = "el3"))]
33654read_write_sysreg!(zcr_el3: s3_6_c1_c2_0, u64: ZcrEl3, safe_read, fake::SYSREGS);