);
+}
+
+/// Polyfill for default use cases.
+
+#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
+pub trait FrameAllocator {
+ fn alloc(&mut self) -> Option;
+}
+#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
+pub trait FrameDeallocator {
+ fn dealloc(&mut self, frame: Frame);
+}
+
+#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
+impl ())
+ .field("flags", &self.0.flags())
+ .finish()
+ }
+}
+
+impl PageTableEntryX64 {
+ pub fn debug_sv39<'a>(&'a self) -> PageTableEntryX64Printer<'a, PhysAddrSv39> {
+ PageTableEntryX64Printer(self, PhantomData)
+ }
+ pub fn debug_sv48<'a>(&'a self) -> PageTableEntryX64Printer<'a, PhysAddrSv48> {
+ PageTableEntryX64Printer(self, PhantomData)
+ }
+}
+
+impl Debug for PageTableEntryX64 {
+ fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+ self.debug_sv48().fmt(f)
+ }
+}
+
+pub const RV64_ENTRY_COUNT: usize = 1 << 9;
+pub const RV32_ENTRY_COUNT: usize = 1 << 10;
+#[cfg(riscv64)]
+pub const ENTRY_COUNT: usize = RV64_ENTRY_COUNT;
+#[cfg(riscv32)]
+pub const ENTRY_COUNT: usize = RV32_ENTRY_COUNT;
+#[cfg(riscv64)]
+pub type PageTableEntry = PageTableEntryX64;
+#[cfg(riscv32)]
+pub type PageTableEntry = PageTableEntryX32;
+#[cfg(riscv64)]
+pub type Entries = Entries64;
+#[cfg(riscv32)]
+pub type Entries = Entries32;
+#[cfg(not(any(riscv32, riscv64)))]
+pub const ENTRY_COUNT: usize = 1 << 0;
+#[cfg(not(any(riscv32, riscv64)))]
+pub type Entries = Entries64;
+
+pub type PageTableX32 = PageTableWith