diff --git a/ch6/implementors/core/clone/trait.Clone.js b/ch6/implementors/core/clone/trait.Clone.js index 78f78fe1..d504dd14 100644 --- a/ch6/implementors/core/clone/trait.Clone.js +++ b/ch6/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Clone for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Clone for InitError","synthetic":false,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Clone for SDCardCSD","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Clone for SDCardCID","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Clone for SDCardInfo","synthetic":false,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Clone for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Clone for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Clone for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Clone for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Clone for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T: Clone> Clone for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl Clone for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Clone for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Clone for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Clone for PageTableEntry","synthetic":false,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Clone for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; +implementors["os"] = [{"text":"impl Clone for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Clone for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Clone for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Clone for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Clone for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T: Clone> Clone for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl Clone for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Clone for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Clone for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Clone for PageTableEntry","synthetic":false,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Clone for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/cmp/trait.Eq.js b/ch6/implementors/core/cmp/trait.Eq.js index 207410b1..bd967e82 100644 --- a/ch6/implementors/core/cmp/trait.Eq.js +++ b/ch6/implementors/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Eq for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Eq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Eq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Eq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Eq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Eq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Eq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Eq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; +implementors["os"] = [{"text":"impl Eq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Eq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Eq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Eq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Eq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Eq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Eq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/cmp/trait.PartialEq.js b/ch6/implementors/core/cmp/trait.PartialEq.js index 7bf2c8fd..52398051 100644 --- a/ch6/implementors/core/cmp/trait.PartialEq.js +++ b/ch6/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl PartialEq<CMD> for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl PartialEq<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl PartialEq<PhysAddr> for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl PartialEq<VirtAddr> for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl PartialEq<PhysPageNum> for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl PartialEq<VirtPageNum> for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl PartialEq<MapType> for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl PartialEq<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl PartialEq<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl PartialEq<TaskStatus> for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; +implementors["os"] = [{"text":"impl PartialEq<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl PartialEq<PhysAddr> for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl PartialEq<VirtAddr> for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl PartialEq<PhysPageNum> for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl PartialEq<VirtPageNum> for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl PartialEq<MapType> for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl PartialEq<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl PartialEq<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl PartialEq<TaskStatus> for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/fmt/trait.Debug.js b/ch6/implementors/core/fmt/trait.Debug.js index 595621c0..c3b0ee3f 100644 --- a/ch6/implementors/core/fmt/trait.Debug.js +++ b/ch6/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Debug for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Debug for InitError","synthetic":false,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Debug for SDCardCSD","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Debug for SDCardCID","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Debug for SDCardInfo","synthetic":false,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Debug for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Debug for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Debug for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Debug for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Debug for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Debug for FrameTracker","synthetic":false,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Debug for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Debug for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Debug for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Debug for TrapContext","synthetic":false,"types":["os::trap::context::TrapContext"]}]; +implementors["os"] = [{"text":"impl Debug for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Debug for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Debug for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Debug for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Debug for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Debug for FrameTracker","synthetic":false,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Debug for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Debug for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Debug for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Debug for TrapContext","synthetic":false,"types":["os::trap::context::TrapContext"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.Copy.js b/ch6/implementors/core/marker/trait.Copy.js index 9d743550..d8c6edd7 100644 --- a/ch6/implementors/core/marker/trait.Copy.js +++ b/ch6/implementors/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Copy for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Copy for InitError","synthetic":false,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Copy for SDCardCSD","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Copy for SDCardCID","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Copy for SDCardInfo","synthetic":false,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Copy for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Copy for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Copy for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Copy for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Copy for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T: Copy> Copy for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl Copy for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Copy for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Copy for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Copy for PageTableEntry","synthetic":false,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Copy for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; +implementors["os"] = [{"text":"impl Copy for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Copy for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Copy for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Copy for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Copy for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T: Copy> Copy for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl Copy for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Copy for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Copy for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Copy for PageTableEntry","synthetic":false,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Copy for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.Freeze.js b/ch6/implementors/core/marker/trait.Freeze.js index 5dc3f63c..12f157ea 100644 --- a/ch6/implementors/core/marker/trait.Freeze.js +++ b/ch6/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Freeze for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Freeze for SDCard<SPI> where
    SPI: Freeze
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Freeze for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Freeze for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Freeze for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Freeze for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Freeze for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Freeze for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl !Freeze for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl !Freeze for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Freeze for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Freeze for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Freeze for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !Freeze for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Freeze for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Freeze for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Freeze for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Freeze for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Freeze for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Freeze for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Freeze for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Freeze for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Freeze for SimpleRange<T> where
    T: Freeze
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Freeze for SimpleRangeIterator<T> where
    T: Freeze
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Freeze for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Freeze for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Freeze for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Freeze for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Freeze for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Freeze for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Freeze for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Freeze for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Freeze for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Freeze for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Freeze for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Freeze for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Freeze for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> !Freeze for UPSafeCell<T>","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Freeze for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Freeze for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Freeze for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Freeze for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Freeze for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Freeze for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Freeze for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Freeze for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Freeze for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !Freeze for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Freeze for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Freeze for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Freeze for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Freeze for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; +implementors["os"] = [{"text":"impl Freeze for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl !Freeze for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Freeze for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Freeze for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Freeze for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !Freeze for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Freeze for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Freeze for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Freeze for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Freeze for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Freeze for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Freeze for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Freeze for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Freeze for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Freeze for SimpleRange<T> where
    T: Freeze
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Freeze for SimpleRangeIterator<T> where
    T: Freeze
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Freeze for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Freeze for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Freeze for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Freeze for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Freeze for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Freeze for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Freeze for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Freeze for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Freeze for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Freeze for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Freeze for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Freeze for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Freeze for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> !Freeze for UPSafeCell<T>","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Freeze for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Freeze for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Freeze for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Freeze for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Freeze for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Freeze for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Freeze for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Freeze for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Freeze for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !Freeze for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Freeze for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Freeze for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Freeze for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Freeze for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.Send.js b/ch6/implementors/core/marker/trait.Send.js index a5519dc0..fabe09a6 100644 --- a/ch6/implementors/core/marker/trait.Send.js +++ b/ch6/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Send for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Send for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Send for SDCard<SPI> where
    SPI: Send
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Send for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Send for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Send for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Send for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Send for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Send for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Send for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl Send for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Send for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Send for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Send for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Send for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Send for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Send for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Send for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Send for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Send for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Send for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Send for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Send for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Send for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Send for SimpleRange<T> where
    T: Send
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Send for SimpleRangeIterator<T> where
    T: Send
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Send for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Send for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Send for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Send for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Send for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Send for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Send for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Send for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Send for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Send for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Send for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Send for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Send for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> Send for UPSafeCell<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Send for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Send for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Send for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Send for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Send for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Send for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Send for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Send for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Send for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Send for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Send for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Send for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Send for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Send for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; +implementors["os"] = [{"text":"impl Send for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Send for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Send for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Send for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Send for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Send for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Send for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Send for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Send for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Send for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Send for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Send for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Send for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Send for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Send for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Send for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Send for SimpleRange<T> where
    T: Send
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Send for SimpleRangeIterator<T> where
    T: Send
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Send for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Send for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Send for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Send for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Send for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Send for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Send for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Send for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Send for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Send for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Send for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Send for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Send for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> Send for UPSafeCell<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Send for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Send for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Send for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Send for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Send for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Send for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Send for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Send for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Send for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Send for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Send for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Send for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Send for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Send for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.StructuralEq.js b/ch6/implementors/core/marker/trait.StructuralEq.js index 9cccc2f8..c9525b1a 100644 --- a/ch6/implementors/core/marker/trait.StructuralEq.js +++ b/ch6/implementors/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl StructuralEq for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl StructuralEq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl StructuralEq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl StructuralEq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl StructuralEq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl StructuralEq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl StructuralEq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl StructuralEq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; +implementors["os"] = [{"text":"impl StructuralEq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl StructuralEq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl StructuralEq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl StructuralEq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl StructuralEq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl StructuralEq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl StructuralEq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.StructuralPartialEq.js b/ch6/implementors/core/marker/trait.StructuralPartialEq.js index 912918b1..cdd2441a 100644 --- a/ch6/implementors/core/marker/trait.StructuralPartialEq.js +++ b/ch6/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl StructuralPartialEq for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl StructuralPartialEq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl StructuralPartialEq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl StructuralPartialEq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl StructuralPartialEq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl StructuralPartialEq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl StructuralPartialEq for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl StructuralPartialEq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl StructuralPartialEq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl StructuralPartialEq for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; +implementors["os"] = [{"text":"impl StructuralPartialEq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl StructuralPartialEq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl StructuralPartialEq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl StructuralPartialEq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl StructuralPartialEq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl StructuralPartialEq for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl StructuralPartialEq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl StructuralPartialEq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl StructuralPartialEq for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.Sync.js b/ch6/implementors/core/marker/trait.Sync.js index 4defee1c..c0879eb2 100644 --- a/ch6/implementors/core/marker/trait.Sync.js +++ b/ch6/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Sync for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Sync for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Sync for SDCard<SPI> where
    SPI: Sync
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Sync for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Sync for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Sync for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Sync for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Sync for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Sync for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Sync for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl Sync for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Sync for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Sync for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Sync for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Sync for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Sync for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Sync for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Sync for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Sync for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Sync for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Sync for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Sync for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Sync for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Sync for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Sync for SimpleRange<T> where
    T: Sync
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Sync for SimpleRangeIterator<T> where
    T: Sync
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Sync for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Sync for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Sync for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Sync for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Sync for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Sync for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Sync for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Sync for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Sync for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Sync for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Sync for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Sync for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Sync for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl Sync for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Sync for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Sync for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Sync for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Sync for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Sync for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Sync for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Sync for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Sync for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Sync for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Sync for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Sync for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Sync for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Sync for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl<T> Sync for UPSafeCell<T>","synthetic":false,"types":["os::sync::up::UPSafeCell"]}]; +implementors["os"] = [{"text":"impl Sync for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Sync for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Sync for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Sync for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Sync for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Sync for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Sync for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Sync for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Sync for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Sync for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Sync for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Sync for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Sync for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Sync for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Sync for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Sync for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Sync for SimpleRange<T> where
    T: Sync
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Sync for SimpleRangeIterator<T> where
    T: Sync
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Sync for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Sync for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Sync for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Sync for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Sync for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Sync for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Sync for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Sync for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Sync for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Sync for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Sync for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Sync for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Sync for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl Sync for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Sync for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Sync for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Sync for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Sync for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Sync for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Sync for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Sync for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Sync for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Sync for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Sync for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Sync for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Sync for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Sync for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl<T> Sync for UPSafeCell<T>","synthetic":false,"types":["os::sync::up::UPSafeCell"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/marker/trait.Unpin.js b/ch6/implementors/core/marker/trait.Unpin.js index c97b9215..ff1268e4 100644 --- a/ch6/implementors/core/marker/trait.Unpin.js +++ b/ch6/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Unpin for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Unpin for SDCard<SPI> where
    SPI: Unpin
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Unpin for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Unpin for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Unpin for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Unpin for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Unpin for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Unpin for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Unpin for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl Unpin for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Unpin for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Unpin for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Unpin for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Unpin for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Unpin for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Unpin for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Unpin for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Unpin for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Unpin for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Unpin for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Unpin for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Unpin for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Unpin for SimpleRange<T> where
    T: Unpin
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Unpin for SimpleRangeIterator<T> where
    T: Unpin
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Unpin for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Unpin for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Unpin for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Unpin for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Unpin for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Unpin for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Unpin for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Unpin for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Unpin for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Unpin for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Unpin for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Unpin for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Unpin for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> Unpin for UPSafeCell<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Unpin for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Unpin for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Unpin for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Unpin for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Unpin for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Unpin for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Unpin for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Unpin for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Unpin for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Unpin for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Unpin for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Unpin for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Unpin for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Unpin for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; +implementors["os"] = [{"text":"impl Unpin for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Unpin for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Unpin for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Unpin for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl Unpin for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Unpin for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Unpin for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Unpin for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Unpin for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Unpin for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Unpin for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Unpin for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Unpin for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Unpin for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Unpin for SimpleRange<T> where
    T: Unpin
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Unpin for SimpleRangeIterator<T> where
    T: Unpin
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Unpin for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Unpin for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Unpin for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Unpin for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Unpin for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Unpin for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Unpin for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Unpin for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Unpin for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Unpin for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Unpin for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Unpin for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Unpin for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> Unpin for UPSafeCell<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Unpin for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Unpin for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Unpin for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Unpin for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Unpin for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Unpin for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Unpin for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Unpin for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Unpin for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Unpin for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Unpin for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Unpin for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Unpin for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Unpin for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/ops/deref/trait.Deref.js b/ch6/implementors/core/ops/deref/trait.Deref.js index 6ae1942f..1f36bfa0 100644 --- a/ch6/implementors/core/ops/deref/trait.Deref.js +++ b/ch6/implementors/core/ops/deref/trait.Deref.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Deref for PERIPHERALS","synthetic":false,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Deref for QUEUE_FRAMES","synthetic":false,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Deref for BLOCK_DEVICE","synthetic":false,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Deref for ROOT_INODE","synthetic":false,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Deref for FRAME_ALLOCATOR","synthetic":false,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Deref for KERNEL_SPACE","synthetic":false,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Deref for TASK_MANAGER","synthetic":false,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Deref for PID_ALLOCATOR","synthetic":false,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Deref for PROCESSOR","synthetic":false,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Deref for INITPROC","synthetic":false,"types":["os::task::INITPROC"]}]; +implementors["os"] = [{"text":"impl Deref for QUEUE_FRAMES","synthetic":false,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Deref for BLOCK_DEVICE","synthetic":false,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Deref for ROOT_INODE","synthetic":false,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Deref for FRAME_ALLOCATOR","synthetic":false,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Deref for KERNEL_SPACE","synthetic":false,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Deref for TASK_MANAGER","synthetic":false,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Deref for PID_ALLOCATOR","synthetic":false,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Deref for PROCESSOR","synthetic":false,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Deref for INITPROC","synthetic":false,"types":["os::task::INITPROC"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/ch6/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 67b9ed34..4e1be069 100644 --- a/ch6/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/ch6/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl RefUnwindSafe for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> RefUnwindSafe for SDCard<SPI> where
    SPI: RefUnwindSafe
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl RefUnwindSafe for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl RefUnwindSafe for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl RefUnwindSafe for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl RefUnwindSafe for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl RefUnwindSafe for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl RefUnwindSafe for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl !RefUnwindSafe for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl !RefUnwindSafe for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl RefUnwindSafe for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl RefUnwindSafe for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl RefUnwindSafe for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !RefUnwindSafe for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl !RefUnwindSafe for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl RefUnwindSafe for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl RefUnwindSafe for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl RefUnwindSafe for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl RefUnwindSafe for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl RefUnwindSafe for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl RefUnwindSafe for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl RefUnwindSafe for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> RefUnwindSafe for SimpleRange<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> RefUnwindSafe for SimpleRangeIterator<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl RefUnwindSafe for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl RefUnwindSafe for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl RefUnwindSafe for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl RefUnwindSafe for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl RefUnwindSafe for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl RefUnwindSafe for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl RefUnwindSafe for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl RefUnwindSafe for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl RefUnwindSafe for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl RefUnwindSafe for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl RefUnwindSafe for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl RefUnwindSafe for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl RefUnwindSafe for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> !RefUnwindSafe for UPSafeCell<T>","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl RefUnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl !RefUnwindSafe for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl RefUnwindSafe for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl RefUnwindSafe for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl RefUnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl RefUnwindSafe for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl RefUnwindSafe for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl !RefUnwindSafe for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl RefUnwindSafe for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !RefUnwindSafe for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl !RefUnwindSafe for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl RefUnwindSafe for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl RefUnwindSafe for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl RefUnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; +implementors["os"] = [{"text":"impl RefUnwindSafe for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl !RefUnwindSafe for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl RefUnwindSafe for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl RefUnwindSafe for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl RefUnwindSafe for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !RefUnwindSafe for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl !RefUnwindSafe for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl RefUnwindSafe for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl RefUnwindSafe for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl RefUnwindSafe for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl RefUnwindSafe for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl RefUnwindSafe for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl RefUnwindSafe for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl RefUnwindSafe for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> RefUnwindSafe for SimpleRange<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> RefUnwindSafe for SimpleRangeIterator<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl RefUnwindSafe for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl RefUnwindSafe for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl RefUnwindSafe for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl RefUnwindSafe for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl RefUnwindSafe for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl RefUnwindSafe for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl RefUnwindSafe for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl RefUnwindSafe for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl RefUnwindSafe for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl RefUnwindSafe for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl RefUnwindSafe for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl RefUnwindSafe for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl RefUnwindSafe for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> !RefUnwindSafe for UPSafeCell<T>","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl RefUnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl !RefUnwindSafe for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl RefUnwindSafe for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl RefUnwindSafe for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl RefUnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl RefUnwindSafe for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl RefUnwindSafe for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl !RefUnwindSafe for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl RefUnwindSafe for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !RefUnwindSafe for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl !RefUnwindSafe for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl RefUnwindSafe for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl RefUnwindSafe for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl RefUnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/ch6/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 6b587ced..3415f247 100644 --- a/ch6/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/ch6/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl UnwindSafe for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> UnwindSafe for SDCard<SPI> where
    SPI: UnwindSafe
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl UnwindSafe for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl UnwindSafe for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl UnwindSafe for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl UnwindSafe for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl UnwindSafe for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl UnwindSafe for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl UnwindSafe for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl !UnwindSafe for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl UnwindSafe for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl UnwindSafe for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl UnwindSafe for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !UnwindSafe for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl !UnwindSafe for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl UnwindSafe for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl UnwindSafe for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl UnwindSafe for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl UnwindSafe for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl UnwindSafe for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl UnwindSafe for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl UnwindSafe for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> UnwindSafe for SimpleRange<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> UnwindSafe for SimpleRangeIterator<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl UnwindSafe for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl UnwindSafe for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl UnwindSafe for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl UnwindSafe for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl UnwindSafe for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl UnwindSafe for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl UnwindSafe for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl UnwindSafe for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl UnwindSafe for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl UnwindSafe for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl UnwindSafe for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl !UnwindSafe for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl !UnwindSafe for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> UnwindSafe for UPSafeCell<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl UnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl !UnwindSafe for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl UnwindSafe for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl UnwindSafe for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl UnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl UnwindSafe for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl UnwindSafe for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl !UnwindSafe for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl UnwindSafe for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !UnwindSafe for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl !UnwindSafe for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl UnwindSafe for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl UnwindSafe for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl UnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; +implementors["os"] = [{"text":"impl UnwindSafe for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl !UnwindSafe for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl UnwindSafe for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl UnwindSafe for VirtioHal","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtioHal"]},{"text":"impl UnwindSafe for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !UnwindSafe for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl !UnwindSafe for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl UnwindSafe for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl UnwindSafe for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl UnwindSafe for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl UnwindSafe for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl UnwindSafe for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl UnwindSafe for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl UnwindSafe for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> UnwindSafe for SimpleRange<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> UnwindSafe for SimpleRangeIterator<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl UnwindSafe for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl UnwindSafe for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl UnwindSafe for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl UnwindSafe for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl UnwindSafe for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl UnwindSafe for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl UnwindSafe for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl UnwindSafe for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl UnwindSafe for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl UnwindSafe for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl UnwindSafe for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl !UnwindSafe for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl !UnwindSafe for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> UnwindSafe for UPSafeCell<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl UnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl !UnwindSafe for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl UnwindSafe for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl UnwindSafe for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl UnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl UnwindSafe for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl UnwindSafe for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl !UnwindSafe for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl UnwindSafe for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !UnwindSafe for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl !UnwindSafe for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl UnwindSafe for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl UnwindSafe for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl UnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/easy_fs/block_dev/trait.BlockDevice.js b/ch6/implementors/easy_fs/block_dev/trait.BlockDevice.js index 1a85f316..41803dde 100644 --- a/ch6/implementors/easy_fs/block_dev/trait.BlockDevice.js +++ b/ch6/implementors/easy_fs/block_dev/trait.BlockDevice.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl BlockDevice for SDCardWrapper","synthetic":false,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl BlockDevice for VirtIOBlock","synthetic":false,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]}]; +implementors["os"] = [{"text":"impl BlockDevice for VirtIOBlock","synthetic":false,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/implementors/lazy_static/trait.LazyStatic.js b/ch6/implementors/lazy_static/trait.LazyStatic.js index 29c0f64a..b52b8698 100644 --- a/ch6/implementors/lazy_static/trait.LazyStatic.js +++ b/ch6/implementors/lazy_static/trait.LazyStatic.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl LazyStatic for PERIPHERALS","synthetic":false,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl LazyStatic for QUEUE_FRAMES","synthetic":false,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl LazyStatic for BLOCK_DEVICE","synthetic":false,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl LazyStatic for ROOT_INODE","synthetic":false,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl LazyStatic for FRAME_ALLOCATOR","synthetic":false,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl LazyStatic for KERNEL_SPACE","synthetic":false,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl LazyStatic for TASK_MANAGER","synthetic":false,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl LazyStatic for PID_ALLOCATOR","synthetic":false,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl LazyStatic for PROCESSOR","synthetic":false,"types":["os::task::processor::PROCESSOR"]},{"text":"impl LazyStatic for INITPROC","synthetic":false,"types":["os::task::INITPROC"]}]; +implementors["os"] = [{"text":"impl LazyStatic for QUEUE_FRAMES","synthetic":false,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl LazyStatic for BLOCK_DEVICE","synthetic":false,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl LazyStatic for ROOT_INODE","synthetic":false,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl LazyStatic for FRAME_ALLOCATOR","synthetic":false,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl LazyStatic for KERNEL_SPACE","synthetic":false,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl LazyStatic for TASK_MANAGER","synthetic":false,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl LazyStatic for PID_ALLOCATOR","synthetic":false,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl LazyStatic for PROCESSOR","synthetic":false,"types":["os::task::processor::PROCESSOR"]},{"text":"impl LazyStatic for INITPROC","synthetic":false,"types":["os::task::INITPROC"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6/os/all.html b/ch6/os/all.html index c997ed0a..ac912d2b 100644 --- a/ch6/os/all.html +++ b/ch6/os/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Typedefs

Statics

Constants

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Typedefs

Statics

Constants

\ No newline at end of file diff --git a/ch6/os/drivers/block/fn.block_device_test.html b/ch6/os/drivers/block/fn.block_device_test.html index 1497f7c4..36801f89 100644 --- a/ch6/os/drivers/block/fn.block_device_test.html +++ b/ch6/os/drivers/block/fn.block_device_test.html @@ -1 +1 @@ -block_device_test in os::drivers::block - Rust
pub fn block_device_test()
\ No newline at end of file +block_device_test in os::drivers::block - Rust
pub fn block_device_test()
\ No newline at end of file diff --git a/ch6/os/drivers/block/index.html b/ch6/os/drivers/block/index.html index 5e3671a6..3b2d5f19 100644 --- a/ch6/os/drivers/block/index.html +++ b/ch6/os/drivers/block/index.html @@ -1 +1 @@ -os::drivers::block - Rust

Module os::drivers::block

source · []

Re-exports

pub use sdcard::SDCardWrapper;
pub use virtio_blk::VirtIOBlock;

Modules

sdcard ðŸ”’
virtio_blk ðŸ”’

Structs

Functions

\ No newline at end of file +os::drivers::block - Rust

Module os::drivers::block

source · []

Re-exports

pub use virtio_blk::VirtIOBlock;

Modules

virtio_blk ðŸ”’

Structs

Functions

\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SD_CS.html b/ch6/os/drivers/block/sdcard/constant.SD_CS.html deleted file mode 100644 index 630ef4ea..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SD_CS.html +++ /dev/null @@ -1,3 +0,0 @@ -SD_CS in os::drivers::block::sdcard - Rust
const SD_CS: u32 = 3;
Expand description

CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything -in the FPIOA

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html b/ch6/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html deleted file mode 100644 index c721ece7..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html +++ /dev/null @@ -1,2 +0,0 @@ -SD_CS_GPIONUM in os::drivers::block::sdcard - Rust
const SD_CS_GPIONUM: u8 = 7;
Expand description

GPIOHS GPIO number to use for controlling the SD card CS pin

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html b/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html deleted file mode 100644 index 395b71ef..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html +++ /dev/null @@ -1,2 +0,0 @@ -SD_START_DATA_MULTIPLE_BLOCK_READ in os::drivers::block::sdcard - Rust
pub const SD_START_DATA_MULTIPLE_BLOCK_READ: u8 = 0xFE;
Expand description

Data token start byte, Start Multiple Block Read

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html b/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html deleted file mode 100644 index 8c5f7673..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html +++ /dev/null @@ -1,2 +0,0 @@ -SD_START_DATA_MULTIPLE_BLOCK_WRITE in os::drivers::block::sdcard - Rust
pub const SD_START_DATA_MULTIPLE_BLOCK_WRITE: u8 = 0xFC;
Expand description

Data token start byte, Start Multiple Block Write

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html b/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html deleted file mode 100644 index d306e60a..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html +++ /dev/null @@ -1,2 +0,0 @@ -SD_START_DATA_SINGLE_BLOCK_READ in os::drivers::block::sdcard - Rust
pub const SD_START_DATA_SINGLE_BLOCK_READ: u8 = 0xFE;
Expand description

Data token start byte, Start Single Block Read

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html b/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html deleted file mode 100644 index 656c2bef..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html +++ /dev/null @@ -1,2 +0,0 @@ -SD_START_DATA_SINGLE_BLOCK_WRITE in os::drivers::block::sdcard - Rust
pub const SD_START_DATA_SINGLE_BLOCK_WRITE: u8 = 0xFE;
Expand description

Data token start byte, Start Single Block Write

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/constant.SEC_LEN.html b/ch6/os/drivers/block/sdcard/constant.SEC_LEN.html deleted file mode 100644 index d028f416..00000000 --- a/ch6/os/drivers/block/sdcard/constant.SEC_LEN.html +++ /dev/null @@ -1 +0,0 @@ -SEC_LEN in os::drivers::block::sdcard - Rust
pub const SEC_LEN: usize = 512;
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/enum.CMD.html b/ch6/os/drivers/block/sdcard/enum.CMD.html deleted file mode 100644 index 4e8ea068..00000000 --- a/ch6/os/drivers/block/sdcard/enum.CMD.html +++ /dev/null @@ -1,54 +0,0 @@ -CMD in os::drivers::block::sdcard - Rust
#[repr(u8)]
-pub enum CMD {
-
Show 15 variants CMD0, - CMD8, - CMD9, - CMD10, - CMD12, - CMD16, - CMD17, - CMD18, - ACMD23, - CMD24, - CMD25, - ACMD41, - CMD55, - CMD58, - CMD59, -
}
Expand description

SD commands

-

Variants

CMD0

Software reset

-

CMD8

Check voltage range (SDC V2)

-

CMD9

Read CSD register

-

CMD10

Read CID register

-

CMD12

Stop to read data

-

CMD16

Change R/W block size

-

CMD17

Read block

-

CMD18

Read multiple blocks

-

ACMD23

Number of blocks to erase (SDC)

-

CMD24

Write a block

-

CMD25

Write multiple blocks

-

ACMD41

Initiate initialization process (SDC)

-

CMD55

Leading command for ACMD*

-

CMD58

Read OCR

-

CMD59

Enable/disable CRC check

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/enum.InitError.html b/ch6/os/drivers/block/sdcard/enum.InitError.html deleted file mode 100644 index 7d1b2051..00000000 --- a/ch6/os/drivers/block/sdcard/enum.InitError.html +++ /dev/null @@ -1,22 +0,0 @@ -InitError in os::drivers::block::sdcard - Rust
pub enum InitError {
-    CMDFailed(CMDu8),
-    CardCapacityStatusNotSet([u8; 4]),
-    CannotGetCardInfo,
-}

Variants

CMDFailed(CMDu8)

CardCapacityStatusNotSet([u8; 4])

CannotGetCardInfo

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/fn.init_sdcard.html b/ch6/os/drivers/block/sdcard/fn.init_sdcard.html deleted file mode 100644 index 784f50eb..00000000 --- a/ch6/os/drivers/block/sdcard/fn.init_sdcard.html +++ /dev/null @@ -1 +0,0 @@ -init_sdcard in os::drivers::block::sdcard - Rust
fn init_sdcard() -> SDCard<SPIImpl<SPI0>>
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/fn.io_init.html b/ch6/os/drivers/block/sdcard/fn.io_init.html deleted file mode 100644 index 4968ff1c..00000000 --- a/ch6/os/drivers/block/sdcard/fn.io_init.html +++ /dev/null @@ -1,2 +0,0 @@ -io_init in os::drivers::block::sdcard - Rust
fn io_init()
Expand description

Connect pins to internal functions

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/index.html b/ch6/os/drivers/block/sdcard/index.html deleted file mode 100644 index 78785559..00000000 --- a/ch6/os/drivers/block/sdcard/index.html +++ /dev/null @@ -1,13 +0,0 @@ -os::drivers::block::sdcard - Rust

Structs

PERIPHERALS ðŸ”’

Card Identification Data: CID Register

-

Card Specific Data: CSD Register

-

Card information

-

Enums

SD commands

-

Constants

SD_CS ðŸ”’

CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything -in the FPIOA

-
SD_CS_GPIONUM ðŸ”’

GPIOHS GPIO number to use for controlling the SD card CS pin

-

Data token start byte, Start Multiple Block Read

-

Data token start byte, Start Multiple Block Write

-

Data token start byte, Start Single Block Read

-

Data token start byte, Start Single Block Write

-

Functions

init_sdcard ðŸ”’
io_init ðŸ”’

Connect pins to internal functions

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/sidebar-items.js b/ch6/os/drivers/block/sdcard/sidebar-items.js deleted file mode 100644 index f21a8a43..00000000 --- a/ch6/os/drivers/block/sdcard/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":[["SD_CS","CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything in the FPIOA "],["SD_CS_GPIONUM","GPIOHS GPIO number to use for controlling the SD card CS pin "],["SD_START_DATA_MULTIPLE_BLOCK_READ","Data token start byte, Start Multiple Block Read "],["SD_START_DATA_MULTIPLE_BLOCK_WRITE","Data token start byte, Start Multiple Block Write "],["SD_START_DATA_SINGLE_BLOCK_READ","Data token start byte, Start Single Block Read "],["SD_START_DATA_SINGLE_BLOCK_WRITE","Data token start byte, Start Single Block Write "],["SEC_LEN",""]],"enum":[["CMD","SD commands "],["InitError",""]],"fn":[["init_sdcard",""],["io_init","Connect pins to internal functions "]],"struct":[["PERIPHERALS",""],["SDCard",""],["SDCardCID","Card Identification Data: CID Register"],["SDCardCSD","Card Specific Data: CSD Register"],["SDCardInfo","Card information"],["SDCardWrapper",""]]}; \ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/struct.PERIPHERALS.html b/ch6/os/drivers/block/sdcard/struct.PERIPHERALS.html deleted file mode 100644 index 1d3f6140..00000000 --- a/ch6/os/drivers/block/sdcard/struct.PERIPHERALS.html +++ /dev/null @@ -1,17 +0,0 @@ -PERIPHERALS in os::drivers::block::sdcard - Rust
struct PERIPHERALS {
-    __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPSafeCell<Peripherals>>

Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

-

Trait Implementations

The resulting type after dereferencing.

-

Dereferences the value.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/struct.SDCard.html b/ch6/os/drivers/block/sdcard/struct.SDCard.html deleted file mode 100644 index 6f3198af..00000000 --- a/ch6/os/drivers/block/sdcard/struct.SDCard.html +++ /dev/null @@ -1,16 +0,0 @@ -SDCard in os::drivers::block::sdcard - Rust
pub struct SDCard<SPI> {
-    spi: SPI,
-    spi_cs: u32,
-    cs_gpionum: u8,
-}

Fields

spi: SPIspi_cs: u32cs_gpionum: u8

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/struct.SDCardCID.html b/ch6/os/drivers/block/sdcard/struct.SDCardCID.html deleted file mode 100644 index 51510797..00000000 --- a/ch6/os/drivers/block/sdcard/struct.SDCardCID.html +++ /dev/null @@ -1,30 +0,0 @@ -SDCardCID in os::drivers::block::sdcard - Rust
pub struct SDCardCID {
-    pub ManufacturerID: u8,
-    pub OEM_AppliID: u16,
-    pub ProdName1: u32,
-    pub ProdName2: u8,
-    pub ProdRev: u8,
-    pub ProdSN: u32,
-    pub Reserved1: u8,
-    pub ManufactDate: u16,
-    pub CID_CRC: u8,
-    pub Reserved2: u8,
-}
Expand description

Card Identification Data: CID Register

-

Fields

ManufacturerID: u8OEM_AppliID: u16ProdName1: u32ProdName2: u8ProdRev: u8ProdSN: u32Reserved1: u8ManufactDate: u16CID_CRC: u8Reserved2: u8

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/struct.SDCardCSD.html b/ch6/os/drivers/block/sdcard/struct.SDCardCSD.html deleted file mode 100644 index 70413a52..00000000 --- a/ch6/os/drivers/block/sdcard/struct.SDCardCSD.html +++ /dev/null @@ -1,52 +0,0 @@ -SDCardCSD in os::drivers::block::sdcard - Rust
pub struct SDCardCSD {
Show 32 fields - pub CSDStruct: u8, - pub SysSpecVersion: u8, - pub Reserved1: u8, - pub TAAC: u8, - pub NSAC: u8, - pub MaxBusClkFrec: u8, - pub CardComdClasses: u16, - pub RdBlockLen: u8, - pub PartBlockRead: u8, - pub WrBlockMisalign: u8, - pub RdBlockMisalign: u8, - pub DSRImpl: u8, - pub Reserved2: u8, - pub DeviceSize: u32, - pub EraseGrSize: u8, - pub EraseGrMul: u8, - pub WrProtectGrSize: u8, - pub WrProtectGrEnable: u8, - pub ManDeflECC: u8, - pub WrSpeedFact: u8, - pub MaxWrBlockLen: u8, - pub WriteBlockPaPartial: u8, - pub Reserved3: u8, - pub ContentProtectAppli: u8, - pub FileFormatGroup: u8, - pub CopyFlag: u8, - pub PermWrProtect: u8, - pub TempWrProtect: u8, - pub FileFormat: u8, - pub ECC: u8, - pub CSD_CRC: u8, - pub Reserved4: u8, -
}
Expand description

Card Specific Data: CSD Register

-

Fields

CSDStruct: u8SysSpecVersion: u8Reserved1: u8TAAC: u8NSAC: u8MaxBusClkFrec: u8CardComdClasses: u16RdBlockLen: u8PartBlockRead: u8WrBlockMisalign: u8RdBlockMisalign: u8DSRImpl: u8Reserved2: u8DeviceSize: u32EraseGrSize: u8EraseGrMul: u8WrProtectGrSize: u8WrProtectGrEnable: u8ManDeflECC: u8WrSpeedFact: u8MaxWrBlockLen: u8WriteBlockPaPartial: u8Reserved3: u8ContentProtectAppli: u8FileFormatGroup: u8CopyFlag: u8PermWrProtect: u8TempWrProtect: u8FileFormat: u8ECC: u8CSD_CRC: u8Reserved4: u8

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/struct.SDCardInfo.html b/ch6/os/drivers/block/sdcard/struct.SDCardInfo.html deleted file mode 100644 index 8e506d36..00000000 --- a/ch6/os/drivers/block/sdcard/struct.SDCardInfo.html +++ /dev/null @@ -1,24 +0,0 @@ -SDCardInfo in os::drivers::block::sdcard - Rust
pub struct SDCardInfo {
-    pub SD_csd: SDCardCSD,
-    pub SD_cid: SDCardCID,
-    pub CardCapacity: u64,
-    pub CardBlockSize: u64,
-}
Expand description

Card information

-

Fields

SD_csd: SDCardCSDSD_cid: SDCardCIDCardCapacity: u64CardBlockSize: u64

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sdcard/struct.SDCardWrapper.html b/ch6/os/drivers/block/sdcard/struct.SDCardWrapper.html deleted file mode 100644 index 517f5598..00000000 --- a/ch6/os/drivers/block/sdcard/struct.SDCardWrapper.html +++ /dev/null @@ -1,14 +0,0 @@ -SDCardWrapper in os::drivers::block::sdcard - Rust
pub struct SDCardWrapper(UPSafeCell<SDCard<SPIImpl<SPI0>>>);

Tuple Fields

0: UPSafeCell<SDCard<SPIImpl<SPI0>>>

Implementations

Trait Implementations

Read data form block to buffer

-

Write data from buffer to block

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
\ No newline at end of file diff --git a/ch6/os/drivers/block/sidebar-items.js b/ch6/os/drivers/block/sidebar-items.js index fcd6f51f..f3e2f375 100644 --- a/ch6/os/drivers/block/sidebar-items.js +++ b/ch6/os/drivers/block/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"fn":[["block_device_test",""]],"mod":[["sdcard",""],["virtio_blk",""]],"struct":[["BLOCK_DEVICE",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":[["block_device_test",""]],"mod":[["virtio_blk",""]],"struct":[["BLOCK_DEVICE",""]]}; \ No newline at end of file diff --git a/ch6/os/drivers/block/struct.BLOCK_DEVICE.html b/ch6/os/drivers/block/struct.BLOCK_DEVICE.html index aeb98dde..a566451b 100644 --- a/ch6/os/drivers/block/struct.BLOCK_DEVICE.html +++ b/ch6/os/drivers/block/struct.BLOCK_DEVICE.html @@ -1,8 +1,8 @@ -BLOCK_DEVICE in os::drivers::block - Rust
pub struct BLOCK_DEVICE {
+BLOCK_DEVICE in os::drivers::block - Rust
pub struct BLOCK_DEVICE {
     __private_field: (),
-}

Fields

__private_field: ()

Trait Implementations

The resulting type after dereferencing.

-

Dereferences the value.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+}

Fields

__private_field: ()

Trait Implementations

The resulting type after dereferencing.

+

Dereferences the value.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

diff --git a/ch6/search-index.js b/ch6/search-index.js index 4528081c..7431abd4 100644 --- a/ch6/search-index.js +++ b/ch6/search-index.js @@ -1,5 +1,5 @@ var searchIndex = JSON.parse('{\ -"os":{"doc":"The main module and entrypoint","t":[0,5,0,0,0,0,0,0,14,14,5,0,0,0,0,0,0,6,17,17,17,17,17,17,17,8,17,3,17,12,11,11,10,11,5,10,11,10,11,11,11,11,11,11,11,2,17,17,2,2,17,17,17,17,17,3,11,11,11,11,5,11,11,11,11,2,2,0,3,2,2,12,5,11,11,11,11,11,0,11,11,11,0,12,13,13,12,4,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,11,11,13,12,12,13,12,12,12,12,12,12,12,12,12,12,11,4,12,12,12,12,12,12,12,3,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,17,17,17,17,17,17,12,12,17,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,3,17,3,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,3,3,3,3,12,12,0,5,5,10,10,12,0,10,12,10,18,3,3,3,18,18,3,18,18,12,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,5,11,11,11,12,5,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,12,12,12,12,3,3,3,3,3,3,3,3,8,3,3,3,3,12,0,12,12,12,12,12,12,12,5,0,5,12,0,5,5,0,0,12,12,5,12,10,5,5,5,5,12,12,12,12,17,17,3,3,3,3,8,17,6,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,8,6,3,3,12,10,11,11,11,11,11,11,11,12,10,11,11,11,12,11,5,5,5,11,11,11,11,5,11,11,11,10,11,11,12,12,11,11,11,11,11,11,11,11,11,7,7,5,5,5,13,13,3,3,3,4,3,18,18,18,18,12,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,11,12,11,11,11,11,11,12,11,11,11,5,11,11,5,5,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,18,18,18,3,3,3,18,18,3,3,18,18,18,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,5,5,5,5,5,3,12,0,3,11,11,11,11,12,11,11,11,11,11,17,17,17,17,17,17,17,17,17,17,17,0,0,5,5,5,5,5,5,5,5,5,5,5,5,12,17,3,3,3,3,3,3,3,12,5,5,11,11,0,12,12,5,5,5,11,5,5,11,12,11,0,0,12,5,0,12,12,12,5,12,5,12,5,0,5,0,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,3,3,12,11,5,11,11,11,11,11,11,5,11,11,11,11,11,12,11,11,11,11,11,11,12,3,3,3,3,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,5,11,12,11,11,11,11,11,11,11,11,11,11,11,11,3,3,12,11,11,11,11,11,12,5,5,5,11,11,11,11,12,11,11,11,5,5,11,5,11,11,11,11,11,11,5,13,13,3,3,4,13,11,12,11,11,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,12,12,11,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,17,17,5,5,5,3,0,5,5,12,12,12,5,5,12,5,5,12,5,12,3,11,11,11,11,11,11,12,12,12,11,12,12,11,11,11,12],"n":["board","clear_bss","config","console","drivers","fs","lang_items","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","BlockDeviceImpl","CLOCK_FREQ","EXIT_FAILURE","EXIT_FAILURE_FLAG","EXIT_RESET","EXIT_SUCCESS","MEMORY_END","MMIO","QEMUExit","QEMU_EXIT_HANDLE","RISCV64","VIRT_TEST","addr","borrow","borrow_mut","exit","exit","exit_code_encode","exit_failure","exit_failure","exit_success","exit_success","from","into","new","try_from","try_into","type_id","CLOCK_FREQ","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","MMIO","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE","Stdout","borrow","borrow_mut","from","into","print","try_from","try_into","type_id","write_str","BLOCK_DEVICE","BLOCK_DEVICE","block","BLOCK_DEVICE","SDCardWrapper","VirtIOBlock","__private_field","block_device_test","borrow","borrow_mut","deref","from","into","sdcard","try_from","try_into","type_id","virtio_blk","0","ACMD23","ACMD41","CID_CRC","CMD","CMD0","CMD10","CMD12","CMD16","CMD17","CMD18","CMD24","CMD25","CMD55","CMD58","CMD59","CMD8","CMD9","CMDFailed","CSDStruct","CSD_CRC","CS_HIGH","CS_LOW","CannotGetCardInfo","CardBlockSize","CardCapacity","CardCapacityStatusNotSet","CardComdClasses","ContentProtectAppli","CopyFlag","DSRImpl","DeviceSize","ECC","EraseGrMul","EraseGrSize","FileFormat","FileFormatGroup","HIGH_SPEED_ENABLE","InitError","ManDeflECC","ManufactDate","ManufacturerID","MaxBusClkFrec","MaxWrBlockLen","NSAC","OEM_AppliID","PERIPHERALS","PartBlockRead","PermWrProtect","ProdName1","ProdName2","ProdRev","ProdSN","RdBlockLen","RdBlockMisalign","Reserved1","Reserved1","Reserved2","Reserved2","Reserved3","Reserved4","SDCard","SDCardCID","SDCardCSD","SDCardInfo","SDCardWrapper","SD_CS","SD_CS_GPIONUM","SD_START_DATA_MULTIPLE_BLOCK_READ","SD_START_DATA_MULTIPLE_BLOCK_WRITE","SD_START_DATA_SINGLE_BLOCK_READ","SD_START_DATA_SINGLE_BLOCK_WRITE","SD_cid","SD_csd","SEC_LEN","SysSpecVersion","TAAC","TempWrProtect","WrBlockMisalign","WrProtectGrEnable","WrProtectGrSize","WrSpeedFact","WriteBlockPaPartial","__private_field","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cs_gpionum","deref","end_cmd","eq","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_cardinfo","get_cidregister","get_csdregister","get_dataresponse","get_response","init","init_sdcard","into","into","into","into","into","into","into","into","io_init","lowlevel_init","new","new","read_block","read_data","read_sector","send_cmd","spi","spi_cs","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","write_block","write_data","write_sector","0","0","1","0","QUEUE_FRAMES","VIRTIO0","VirtIOBlock","VirtioHal","__private_field","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","dma_alloc","dma_dealloc","from","from","from","into","into","into","new","phys_to_virt","read_block","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","virt_to_phys","write_block","File","OSInode","OpenFlags","Stdin","Stdout","bits","inner","inode","list_apps","open_file","read","readable","readable","stdio","writable","writable","write","CREATE","OSInode","OSInodeInner","OpenFlags","RDONLY","RDWR","ROOT_INODE","TRUNC","WRONLY","__private_field","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cmp","complement","contains","deref","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","inner","inode","insert","intersection","intersects","into","into","into","into","is_all","is_empty","list_apps","ne","new","not","offset","open_file","partial_cmp","read","read_all","read_write","readable","readable","remove","set","sub","sub_assign","symmetric_difference","to_owned","toggle","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","union","writable","writable","write","Stdin","Stdout","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","read","read","readable","readable","try_from","try_from","try_into","try_into","type_id","type_id","writable","writable","write","write","panic","0","0","0","0","FrameTracker","KERNEL_SPACE","MapPermission","MemorySet","PageTable","PageTableEntry","PhysAddr","PhysPageNum","StepByOne","UserBuffer","UserBufferIterator","VirtAddr","VirtPageNum","__private_field","address","areas","bits","bits","buffers","buffers","current_buffer","current_idx","frame_alloc","frame_allocator","frame_dealloc","frames","heap_allocator","init","kernel_token","memory_set","page_table","page_table","ppn","remap_test","root_ppn","step","translated_byte_buffer","translated_ref","translated_refmut","translated_str","0","0","0","0","PA_WIDTH_SV39","PPN_WIDTH_SV39","PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","StepByOne","VA_WIDTH_SV39","VPNRange","VPN_WIDTH_SV39","VirtAddr","VirtPageNum","aligned","aligned","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","ceil","ceil","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","current","end","eq","eq","eq","eq","floor","floor","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_bytes_array","get_end","get_mut","get_mut","get_pte_array","get_ref","get_start","indexes","into","into","into","into","into","into","into_iter","into_iter","l","ne","ne","ne","ne","new","new","next","page_offset","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","r","step","step","step","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","FRAME_ALLOCATOR","FrameAllocator","FrameAllocatorImpl","FrameTracker","StackFrameAllocator","__private_field","alloc","alloc","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","current","dealloc","dealloc","deref","drop","end","fmt","frame_alloc","frame_allocator_test","frame_dealloc","from","from","from","init","init_frame_allocator","into","into","into","new","new","new","ppn","recycled","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","HEAP_ALLOCATOR","HEAP_SPACE","handle_alloc_error","heap_test","init_heap","Framed","Identical","KERNEL_SPACE","MapArea","MapPermission","MapType","MemorySet","R","U","W","X","__private_field","activate","all","areas","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","complement","contains","copy_data","data_frames","deref","difference","ebss","edata","ekernel","empty","eq","eq","erodata","etext","extend","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_another","from_bits","from_bits_truncate","from_bits_unchecked","from_elf","from_existed_user","from_iter","hash","insert","insert_framed_area","intersection","intersects","into","into","into","into","into","is_all","is_empty","kernel_token","map","map_one","map_perm","map_trampoline","map_type","ne","new","new_bare","new_kernel","not","page_table","partial_cmp","push","recycle_data_pages","remap_test","remove","remove_area_with_start_vpn","sbss_with_stack","sdata","set","srodata","stext","strampoline","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","union","unmap","unmap_one","vpn_range","A","D","G","PTEFlags","PageTable","PageTableEntry","R","U","UserBuffer","UserBufferIterator","V","W","X","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buffers","buffers","clone","clone","clone_into","clone_into","cmp","complement","contains","current_buffer","current_idx","difference","empty","empty","eq","executable","extend","find_pte","find_pte_create","flags","fmt","fmt","fmt","fmt","fmt","frames","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_token","hash","insert","intersection","intersects","into","into","into","into","into","into_iter","into_iter","is_all","is_empty","is_valid","len","map","ne","new","new","new","next","not","partial_cmp","ppn","readable","remove","root_ppn","set","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","translate_va","translated_byte_buffer","translated_ref","translated_refmut","translated_str","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","union","unmap","writable","SBI_CLEAR_IPI","SBI_CONSOLE_GETCHAR","SBI_CONSOLE_PUTCHAR","SBI_REMOTE_FENCE_I","SBI_REMOTE_SFENCE_VMA","SBI_REMOTE_SFENCE_VMA_ASID","SBI_SEND_IPI","SBI_SET_TIMER","SBI_SHUTDOWN","console_getchar","console_putchar","sbi_call","set_timer","shutdown","UPSafeCell","inner","up","UPSafeCell","borrow","borrow_mut","exclusive_access","from","inner","into","new","try_from","try_into","type_id","SYSCALL_CLOSE","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GET_TIME","SYSCALL_OPEN","SYSCALL_READ","SYSCALL_WAITPID","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","syscall","sys_close","sys_open","sys_read","sys_write","sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_waitpid","sys_yield","0","IDLE_PID","INITPROC","KernelStack","PidAllocator","PidHandle","Processor","TaskContext","TaskManager","__private_field","add_initproc","add_task","borrow","borrow_mut","context","current","current","current_task","current_trap_cx","current_user_token","deref","exit_current_and_run_next","fetch_task","from","idle_task_cx","into","manager","pid","pid","pid_alloc","processor","ra","ready_queue","recycled","run_tasks","s","schedule","sp","suspend_current_and_run_next","switch","take_current_task","task","try_from","try_into","type_id","TaskContext","borrow","borrow_mut","from","goto_trap_return","into","ra","s","sp","try_from","try_into","type_id","zero_init","TASK_MANAGER","TaskManager","__private_field","add","add_task","borrow","borrow","borrow_mut","borrow_mut","deref","fetch","fetch_task","from","from","into","into","new","ready_queue","try_from","try_from","try_into","try_into","type_id","type_id","0","KernelStack","PID_ALLOCATOR","PidAllocator","PidHandle","__private_field","alloc","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","current","dealloc","deref","drop","drop","from","from","from","from","get_top","into","into","into","into","kernel_stack_position","new","new","pid","pid_alloc","push_on_top","recycled","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","PROCESSOR","Processor","__private_field","borrow","borrow","borrow_mut","borrow_mut","current","current","current_task","current_trap_cx","current_user_token","deref","from","from","get_idle_task_cx_ptr","idle_task_cx","into","into","new","run_tasks","schedule","take_current","take_current_task","try_from","try_from","try_into","try_into","type_id","type_id","__switch","Ready","Running","TaskControlBlock","TaskControlBlockInner","TaskStatus","Zombie","alloc_fd","base_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","children","clone","clone_into","eq","exec","exit_code","fd_table","fork","from","from","from","get_status","get_trap_cx","get_user_token","getpid","inner","inner_exclusive_access","into","into","into","is_zombie","kernel_stack","memory_set","new","parent","pid","task_cx","task_status","to_owned","trap_cx_ppn","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","MSEC_PER_SEC","TICKS_PER_SEC","get_time","get_time_ms","set_next_trigger","TrapContext","context","enable_timer_interrupt","init","kernel_satp","kernel_sp","sepc","set_kernel_trap_entry","set_user_trap_entry","sstatus","trap_from_kernel","trap_handler","trap_handler","trap_return","x","TrapContext","app_init_context","borrow","borrow_mut","fmt","from","into","kernel_satp","kernel_sp","sepc","set_sp","sstatus","trap_handler","try_from","try_into","type_id","x"],"q":["os","","","","","","","","","","","","","","","","","os::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::config","","","","","","","","","","os::console","","","","","","","","","","os::drivers","","","os::drivers::block","","","","","","","","","","","","","","","os::drivers::block::sdcard","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::drivers::block::sdcard::InitError","","","os::drivers::block::virtio_blk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs","","","","","","","","","","","","","","","","","os::fs::inode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::stdio","","","","","","","","","","","","","","","","","","","","","","","","os::lang_items","os::mm","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::address","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::frame_allocator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::heap_allocator","","","","","os::mm::memory_set","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::page_table","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::sbi","","","","","","","","","","","","","","os::sync","","","os::sync::up","","","","","","","","","","","os::syscall","","","","","","","","","","","","","","os::syscall::fs","","","","os::syscall::process","","","","","","","os::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::context","","","","","","","","","","","","","os::task::manager","","","","","","","","","","","","","","","","","","","","","","","","os::task::pid","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::processor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::switch","os::task::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::timer","","","","","os::trap","","","","","","","","","","","","","","","os::trap::context","","","","","","","","","","","","","","","",""],"d":["","clear BSS segment","Constants used in rCore","SBI console driver, for text output","","File system in os","The panic handler","Memory management implementation","print string macro","println string macro","the rust entry-point of os","SBI call wrappers","Synchronization and interior mutability primitives","Implementation of syscalls","Task management implementation","RISC-V timer-related functionality","Trap handling functionality","","","","","","","","","","","RISCV64 configuration","","Address of the sifive_test mapped device.","","","Exit with specified return code.","Exit qemu with specified exit code.","Encode the exit code using EXIT_FAILURE_FLAG.","Exit QEMU using EXIT_FAILURE, aka 1.","","Exit QEMU using EXIT_SUCCESS, aka 0, if possible.","","Returns the argument unchanged.","Calls U::from(self).","Create an instance.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","Number of blocks to erase (SDC) ","Initiate initialization process (SDC) ","","SD commands ","Software reset ","Read CID register ","Stop to read data ","Change R/W block size ","Read block ","Read multiple blocks ","Write a block ","Write multiple blocks ","Leading command for ACMD* ","Read OCR ","Enable/disable CRC check ","Check voltage range (SDC V2) ","Read CSD register ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Card Identification Data: CID Register","Card Specific Data: CSD Register","Card information","","CS value passed to SPI controller, this is a dummy value …","GPIOHS GPIO number to use for controlling the SD card CS …","Data token start byte, Start Multiple Block Read ","Data token start byte, Start Multiple Block Write ","Data token start byte, Start Single Block Read ","Data token start byte, Start Single Block Write ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Connect pins to internal functions ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","File trait","A wrapper around a filesystem inode to implement File …","Open file flags","Standard input","Standard output","","","Arc<Inode> -> OSInodeInner: In order to open files …","List all files in the filesystems","Open file with flags","Read file to UserBuffer","If readable","","Stdin & Stdout","If writable","","Write UserBuffer to file","Allow create","A wrapper around a filesystem inode to implement File …","The OS inode inner in ‘UPSafeCell’","Open file flags","Read only","Read & Write","","Clear file and return an empty one","Write only","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","List all files in the filesystems","","Construct an OS inode from a inode","Returns the complement of this set of flags.","","Open file with flags","","","Read all data inside a inode into vector","Do not check validity for simplicity Return (readable, …","","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","Toggles the specified flags in-place.","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","Standard input","Standard output","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","manage a frame which has the same lifecycle as the tracker","a memory set instance through lazy_static! managing kernel …","map permission corresponding to that in pte: R W X U","memory set structure, controls virtual-memory space","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","Definitions","phiscal page number","Add value by one","Array of u8 slice that user communicate with os","Iterator of UserBuffer","virtual address","virtual page number","","Implementation of physical and virtual address and page …","","","PTE","U8 vec","","","","allocate a frame","Implementation of FrameAllocator which controls all the …","deallocate a frame","","The global allocator","initiate heap allocator, frame allocator and kernel space","Get kernelspace root ppn","Implementation of MapArea and MemorySet.","Implementation of PageTableEntry and PageTable.","","","Check PageTable running correctly","","Add value by one","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","Definitions","phiscal page number","a simple range structure for type T","iterator for the simple range structure","Add value by one","","a simple range structure for virtual page number","","virtual address","virtual page number","Check page aligned","Check page aligned","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","","","","","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Get u8 array on PhysPageNum","","Get mutable reference to PhysAddr value","Get Get mutable reference to PhysAddr value on PhysPageNum","Get PageTableEntry on PhysPageNum","Get reference to PhysAddr value","","Return VPN 3 level index","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","Get page offset","Get page offset","","","","","","Add value by one","","","","","","","","","","","","","","","","","","","","","","","","","","frame allocator instance through lazy_static!","","","manage a frame which has the same lifecycle as the tracker","an implementation for frame allocator","","","","","","","","","","","","","","","","","allocate a frame","a simple test for frame allocator","deallocate a frame","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","initiate the frame allocator using ekernel and MEMORY_END","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Create an empty FrameTracker","","","","","","","","","","","","","heap allocator instance","heap space ([u8; KERNEL_HEAP_SIZE])","panic when heap allocation error occurs","","initiate heap allocator","","","a memory set instance through lazy_static! managing kernel …","map area structure, controls a contiguous piece of virtual …","map permission corresponding to that in pte: R W X U","map type for memory set: identical or framed","memory set structure, controls virtual-memory space","Readable","Accessible in U mode","Writable","Excutable","","Refresh TLB with sfence.vma","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","data: start-aligned but maybe with shorter length assume …","","","Returns the difference between the flags in self and other.","","","","Returns an empty set of flags.","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Include sections in elf and trampoline and TrapContext and …","Clone a same MemorySet","","","Inserts the specified flags in-place.","Assume that no conflicts.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Get kernelspace root ppn","","","","Mention that trampoline is not collected by areas.","","","","Create an empty MemorySet","Without kernel stacks.","Returns the complement of this set of flags.","","","","Remove all MapArea","Check PageTable running correctly","Removes the specified flags in-place.","Remove MapArea that starts with start_vpn","","","Inserts or removes the specified flags depending on the …","","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","Get pagetable root_ppn","Translate throuth pagetable","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","","","Array of u8 slice that user communicate with os","Iterator of UserBuffer","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","PTE","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","U8 vec","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","Return an empty PTE","","Check PTE executable","","Find phsical address by virtual address","Find phsical address by virtual address, create a frame if …","Return 10bit flag","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","Temporarily used to get arguments from user space.","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Check PTE valid","Length of UserBuffer","Create a mapping form vpn to ppn","","Create an empty PageTable","Create a UserBuffer by parameter","Create a PTE from ppn","","Returns the complement of this set of flags.","","Return 44bit ppn","Check PTE readable","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","Get root ppn","Translate VirtPageNum to PageTableEntry","Translate VirtAddr to PhysAddr","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Delete a mapping form vpn","Check PTE writable","","","","","","","","","","use sbi call to getchar from console (qemu uart handler)","use sbi call to putchar in console (qemu uart handler)","general sbi call","use sbi call to set timer","use sbi call to shutdown the kernel","Wrap a static data structure inside it so that we are able …","inner data","Uniprocessor interior mutability primitives","Wrap a static data structure inside it so that we are able …","","","Exclusive access inner data in UPSafeCell. Panic if the …","Returns the argument unchanged.","inner data","Calls U::from(self).","User is responsible to guarantee that inner struct is only …","","","","","","","","","","","","","","","File and filesystem-related syscalls","","handle syscall exception with syscall_id and other …","","","","","","","","","","If there is not a child process whose pid is same as …","","","pid of usertests app in make run TEST=1","Globle process that init user shell","Kernelstack for app","Pid Allocator struct","Bind pid lifetime to PidHandle","Processor management structure","task context structure containing some registers","A array of TaskControlBlock that is thread-safe","","Add init process to the manager","Interface offered to add task","","","Implementation of TaskContext","","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Exit the current ‘Running’ task and run the next task …","Interface offered to pop the first task","Returns the argument unchanged.","The basic control flow of each core, helping to select and …","Calls U::from(self).","Implementation of TaskManager","Implementation of PidAllocator","","Allocate a pid from PID_ALLOCATOR","Implementation of Processor and Intersection of control …","return address ( e.g. __restore ) of __switch ASM function","","","The main part of process execution and scheduling Loop …","s0-11 register, callee saved","Return to idle control flow for new scheduling","kernel stack pointer of app","Suspend the current ‘Running’ task and run the next …","Wrap switch.S as a function","Take the current task,leaving a None in its place","Implementation of TaskControlBlock","","","","task context structure containing some registers","","","Returns the argument unchanged.","set Task Context{__restore ASM funciton: trap_return, sp: …","Calls U::from(self).","return address ( e.g. __restore ) of __switch ASM function","s0-11 register, callee saved","kernel stack pointer of app","","","","init task context","","A array of TaskControlBlock that is thread-safe","","Add a task to TaskManager","Interface offered to add task","","","","","","Remove the first task and return it,or None if TaskManager …","Interface offered to pop the first task","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Creat an empty TaskManager","","","","","","","","","Kernelstack for app","","Pid Allocator struct","Bind pid lifetime to PidHandle","","Allocate a pid","","","","","","","","","","Recycle a pid","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the value on the top of kernelstack","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Return (bottom, top) of a kernel stack in kernel space.","Create an empty PidAllocator","Create a kernelstack from pid","","Allocate a pid from PID_ALLOCATOR","Push a value on top of kernelstack","","","","","","","","","","","","","","","Processor management structure","","","","","","Get current task in cloning semanteme","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Returns the argument unchanged.","Returns the argument unchanged.","Get mutable reference to idle_task_cx","The basic control flow of each core, helping to select and …","Calls U::from(self).","Calls U::from(self).","Create an empty Processor","The main part of process execution and scheduling Loop …","Return to idle control flow for new scheduling","Get current task in moving semanteme","Take the current task,leaving a None in its place","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","get current time","get current time in microseconds","set the next timer interrupt","trap context structure containing sstatus, sepc and …","Implementation of TrapContext","enable timer interrupt in sie CSR","initialize CSR stvec as the entry of __alltraps","Addr of Page Table","kernel stack","CSR sepc","","","CSR sstatus ","Unimplement: traps/interrupts/exceptions from kernel mode …","handle an interrupt, exception, or system call from user …","Addr of trap_handler function","set the new addr of __restore asm function in TRAMPOLINE …","general regs[0..31]","trap context structure containing sstatus, sepc and …","init app context","","","","Returns the argument unchanged.","Calls U::from(self).","Addr of Page Table","kernel stack","CSR sepc","set stack pointer to x_2 reg (sp)","CSR sstatus ","Addr of trap_handler function","","","","general regs[0..31]"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,81,3,0,81,3,81,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,0,8,8,8,8,0,0,0,0,0,0,11,0,11,11,11,11,11,0,11,11,11,0,27,15,15,18,0,15,15,15,15,15,15,15,15,15,15,15,15,15,16,17,17,14,14,16,19,19,16,17,17,17,17,17,17,17,17,17,17,14,0,17,18,18,17,17,17,18,0,17,17,18,18,18,18,17,17,17,18,17,18,17,17,0,0,0,0,0,0,0,0,0,0,0,19,19,0,17,17,17,17,17,17,17,17,20,14,27,15,16,17,18,19,20,14,27,15,16,17,18,19,20,15,16,17,18,19,15,16,17,18,19,14,20,14,15,15,16,17,18,19,14,27,15,16,17,18,19,20,14,14,14,14,14,14,0,14,27,15,16,17,18,19,20,0,14,14,27,27,14,14,14,14,14,15,16,17,18,19,14,27,15,16,17,18,19,20,14,27,15,16,17,18,19,20,14,27,15,16,17,18,19,20,27,14,14,82,83,82,31,0,0,0,0,29,31,84,29,31,84,29,29,84,84,31,84,29,31,84,29,31,84,31,31,84,29,31,84,29,31,84,29,84,31,0,0,0,0,0,32,33,0,0,0,85,85,33,0,85,33,85,32,0,0,0,32,32,0,32,32,37,32,32,32,32,32,32,32,32,32,33,86,37,32,33,86,37,32,32,32,32,32,32,37,32,32,32,32,32,32,32,32,32,33,86,37,32,32,32,32,32,32,33,86,32,32,32,33,86,37,32,32,32,0,32,33,32,86,0,32,33,33,32,33,33,32,32,32,32,32,32,32,33,86,37,32,33,86,37,32,33,86,37,32,32,33,33,33,0,0,41,42,41,42,41,42,41,42,41,42,41,42,41,42,41,42,41,42,41,42,41,42,0,47,48,45,49,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,56,57,62,35,64,64,64,0,0,0,60,0,0,0,0,0,56,44,0,60,87,0,0,0,0,47,48,45,49,0,0,0,0,0,0,0,0,0,0,0,0,47,48,52,47,48,45,49,51,52,47,48,45,49,51,47,48,47,48,45,49,51,47,48,45,49,51,47,48,45,49,52,52,47,48,45,49,47,48,47,48,45,49,52,47,47,47,48,48,48,45,45,45,49,49,49,51,45,51,47,45,45,47,51,49,52,47,48,45,49,51,52,51,51,47,48,45,49,52,51,52,47,48,47,48,45,49,51,87,45,49,47,48,45,49,51,52,47,48,45,49,51,52,47,48,45,49,51,52,47,48,45,49,51,0,0,0,0,0,54,88,53,44,53,54,44,53,54,53,88,53,54,44,53,44,0,0,0,44,53,54,53,0,44,53,54,88,44,53,44,53,44,53,54,44,53,54,44,53,54,0,0,0,0,0,58,58,0,0,0,0,0,57,57,57,57,61,56,57,56,57,57,57,57,57,57,57,57,56,59,61,58,57,56,59,61,58,57,58,57,58,57,57,57,57,59,59,61,57,0,0,0,57,58,57,0,0,57,58,57,57,57,57,57,56,59,61,58,57,59,57,57,57,56,56,57,57,57,56,57,57,56,59,61,58,57,57,57,0,59,59,59,56,59,57,59,56,56,57,56,57,56,56,0,57,56,0,0,57,0,0,0,57,57,57,58,57,57,56,56,56,59,61,58,57,56,59,61,58,57,56,59,61,58,57,57,59,59,59,63,63,63,0,0,0,63,63,0,0,63,63,63,63,63,63,63,63,63,63,62,63,63,60,35,64,63,62,60,35,64,63,62,35,64,63,62,63,62,63,63,63,64,64,63,63,62,63,62,63,60,60,62,63,63,63,63,63,60,60,35,64,63,62,63,63,63,63,60,63,63,63,63,60,35,64,63,62,35,64,63,63,62,35,60,63,60,35,62,64,63,63,62,62,63,60,63,63,63,63,63,62,63,60,60,60,0,0,0,0,60,35,64,63,62,60,35,64,63,62,60,35,64,63,62,63,60,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,21,21,21,21,21,21,21,21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,0,0,0,0,69,0,0,69,69,0,74,77,0,0,0,69,0,0,69,77,69,0,0,76,0,0,71,72,74,0,71,0,71,0,0,0,0,69,69,69,0,71,71,71,71,71,71,71,71,71,71,71,71,0,0,73,72,0,72,73,72,73,73,72,0,72,73,72,73,72,72,72,73,72,73,72,73,70,0,0,0,0,75,74,74,70,76,75,74,70,76,75,74,74,75,70,76,74,70,76,75,76,74,70,76,75,0,74,76,76,0,76,74,74,70,76,75,74,70,76,75,74,70,76,75,0,0,78,77,78,77,78,77,77,0,0,0,78,77,78,77,77,77,78,77,0,0,77,0,77,78,77,78,77,78,0,80,80,0,0,0,80,79,79,67,79,80,67,79,80,79,80,80,80,67,79,79,67,67,79,80,79,79,79,67,67,67,67,79,80,79,67,79,67,79,67,79,79,80,79,67,79,80,67,79,80,67,79,80,0,0,0,0,0,0,0,0,0,68,68,68,0,0,68,0,0,68,0,68,0,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68],"f":[0,[[]],0,0,0,0,0,0,0,0,[[],1],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[2,1],[[3,2],1],[2,2],[[],1],[3,1],[[],1],[3,1],[[]],[[]],[4,3],[[],5],[[],5],[[],6],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[7],[[],5],[[],5],[[],6],[[8,9],10],0,0,0,0,0,0,0,[[]],[[]],[[]],[11,12],[[]],[[]],0,[[],5],[[],5],[[],6],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[14,[13]]]],[[[14,[13]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[14,[13]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[15,15],[16,16],[17,17],[18,18],[19,19],[[]],[[]],[[]],[[]],[[]],0,[20,21],[[[14,[13]]]],[[15,15],22],[[15,23],10],[[16,23],10],[[17,23],10],[[18,23],10],[[19,23],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[14,[13]]],[[5,[19]]]],[[[14,[13]]],[[5,[18]]]],[[[14,[13]]],[[5,[17]]]],[[[14,[13]]],24],[[[14,[13]]],24],[[[14,[13]]],[[5,[19,16]]]],[[],[[14,[[26,[25]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[14,[13]]]],[[13,2,24],[[14,[13]]]],[[],27],[[27,28]],[[[14,[13]]]],[[[14,[13]],2],5],[[[14,[13]],15,2,24]],0,0,[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[27,28]],[[[14,[13]]]],[[[14,[13]],2],5],0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[29,21],[28,28],[[28,28],30],[[]],[[]],[[]],[[]],[[]],[[]],[[],31],[28,28],[[31,28]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[28,28],[[31,28]],0,0,0,0,0,0,0,0,[[]],[[9,32],[[34,[[12,[33]]]]]],[35,28],[[],22],0,0,[[],22],0,[35,28],0,0,0,0,0,0,0,0,0,0,[[],32],[[32,32],32],[[32,32]],[[32,32],32],[[32,32]],[32,2],0,[[32,32],32],[[32,32]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[32,32],[[]],[[32,32],36],[32,32],[[32,32],22],[37,12],[[32,32],32],[[],32],[[32,32],22],[[32,38]],[[32,23],10],[[32,23],10],[[32,23],10],[[32,23],10],[[32,23],10],[[]],[[]],[[]],[[]],[2,[[34,[32]]]],[2,32],[2,32],[38,32],[32],0,0,[[32,32]],[[32,32],32],[[32,32],22],[[]],[[]],[[]],[[]],[32,22],[32,22],[[]],[[32,32],22],[[22,22,[12,[39]]],33],[32,32],0,[[9,32],[[34,[[12,[33]]]]]],[[32,32],[[34,[36]]]],[[33,35],28],[33,[[40,[24]]]],[32],[33,22],0,[[32,32]],[[32,32,22]],[[32,32],32],[[32,32]],[[32,32],32],[[]],[[32,32]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[32,32],32],[33,22],0,[[33,35],28],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[41,35],28],[[42,35],28],[41,22],[42,22],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[41,22],[42,22],[[41,35],28],[[42,35],28],[43,1],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],[[34,[44]]]],0,[45],0,0,[[]],[[],28],0,0,0,0,[[]],0,[[]],[[28,24,28],40],[28],[28],[[28,24],46],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[47,22],[48,22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[47,45],[48,49],[47,47],[48,48],[45,45],[49,49],[[[51,[50]]],[[51,[50]]]],[[]],[[]],[[]],[[]],[[]],[[47,47],36],[[48,48],36],[[45,45],36],[[49,49],36],0,0,[[47,47],22],[[48,48],22],[[45,45],22],[[49,49],22],[47,45],[48,49],[[47,23],10],[[48,23],10],[[45,23],10],[[49,23],10],[[]],[[]],[28,47],[45,47],[28,48],[[]],[49,48],[[]],[28,45],[47,45],[[]],[48,49],[28,49],[[]],[45],[51],[47],[45],[45],[47],[51],[49],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[51],0,[[47,47],22],[[48,48],22],[[45,45],22],[[49,49],22],[[],52],[[],51],[52,34],[47,28],[48,28],[[47,47],[[34,[36]]]],[[48,48],[[34,[36]]]],[[45,45],[[34,[36]]]],[[49,49],[[34,[36]]]],0,[[]],[45],[49],[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],0,0,0,0,0,0,[[],[[34,[45]]]],[53,[[34,[45]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,[45],[[53,45]],[54,21],[44],0,[[44,23],10],[[],[[34,[44]]]],[[]],[45],[[]],[[]],[[]],[[53,45,45]],[[]],[[]],[[]],[[]],[[]],[45,44],[[],53],0,0,[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],0,0,[55,1],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,[56],[[],57],0,[[57,57],57],[[57,57]],[[57,57],57],[[57,57]],[57,24],0,[[57,57],57],[[57,57]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[58,58],[57,57],[[]],[[]],[[57,57],36],[57,57],[[57,57],22],[[59,60]],0,[61,12],[[57,57],57],0,0,0,[[],57],[[58,58],22],[[57,57],22],0,0,[[57,38]],[[58,23],10],[[57,23],10],[[57,23],10],[[57,23],10],[[57,23],10],[[57,23],10],[[]],[[]],[[]],[[]],[[]],[59,59],[24,[[34,[57]]]],[24,57],[24,57],[[]],[56,56],[38,57],[57],[[57,57]],[[56,48,48,57]],[[57,57],57],[[57,57],22],[[]],[[]],[[]],[[]],[[]],[57,22],[57,22],[[],28],[[59,60]],[[59,60,49]],0,[56],0,[[57,57],22],[[48,48,58,57],59],[[],56],[[],56],[57,57],0,[[57,57],[[34,[36]]]],[[56,59,34]],[56],[[]],[[57,57]],[[56,49]],0,0,[[57,57,22]],0,0,0,[[57,57],57],[[57,57]],[[57,57],57],[[]],[[]],[[57,57]],[56,28],[[56,49],[[34,[62]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[57,57],57],[[59,60]],[[59,60,49]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],63],[[63,63],63],[[63,63]],[[63,63],63],[[63,63]],[63,24],0,0,[[63,63],63],[[63,63]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[63,63],[62,62],[[]],[[]],[[63,63],36],[63,63],[[63,63],22],0,0,[[63,63],63],[[],63],[[],62],[[63,63],22],[62,22],[[63,38]],[[60,49],[[34,[62]]]],[[60,49],[[34,[62]]]],[62,63],[[63,23],10],[[63,23],10],[[63,23],10],[[63,23],10],[[63,23],10],0,[[]],[[]],[[]],[[]],[[]],[24,[[34,[63]]]],[24,63],[24,63],[38,63],[28,60],[63],[[63,63]],[[63,63],63],[[63,63],22],[[]],[[]],[[]],[[]],[[]],[35],[[]],[63,22],[63,22],[62,22],[35,28],[[60,49,45,63]],[[63,63],22],[[],60],[40,35],[[45,63],62],[64,34],[63,63],[[63,63],[[34,[36]]]],[62,45],[62,22],[[63,63]],0,[[63,63,22]],[[63,63],63],[[63,63]],[[63,63],63],[[]],[[]],[[63,63]],[60,28],[[60,49],[[34,[62]]]],[[60,48],[[34,[47]]]],[[28,24,28],40],[28],[28],[[28,24],46],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[63,63],63],[[60,49]],[62,22],0,0,0,0,0,0,0,0,0,[[],28],[28],[[28,28,28,28],28],[28],[[],1],0,0,0,0,[[]],[[]],[21,65],[[]],0,[[]],[[],21],[[],5],[[],5],[[],6],0,0,0,0,0,0,0,0,0,0,0,0,0,[28,66],[28,66],[[24,2],66],[[28,24,28],66],[[28,24,28],66],[24,66],[30,1],[[],66],[[],66],[[],66],[[66,30],66],[[],66],0,0,0,0,0,0,0,0,0,0,[[]],[[[12,[67]]]],[[]],[[]],0,0,0,[[],[[34,[[12,[67]]]]]],[[],68],[[],28],[69,12],[30],[[],[[34,[[12,[67]]]]]],[[]],0,[[]],0,0,0,[[],70],0,0,0,0,[[]],0,[71],0,[[]],0,[[],[[34,[[12,[67]]]]]],0,[[],5],[[],5],[[],6],0,[[]],[[]],[[]],[28,71],[[]],0,0,0,[[],5],[[],5],[[],6],[[],71],0,0,0,[[72,[12,[67]]]],[[[12,[67]]]],[[]],[[]],[[]],[[]],[73,21],[72,[[34,[[12,[67]]]]]],[[],[[34,[[12,[67]]]]]],[[]],[[]],[[]],[[]],[[],72],0,[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],0,0,0,0,0,0,[74,70],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[74,28]],[75,21],[70],[76],[[]],[[]],[[]],[[]],[76,28],[[]],[[]],[[]],[[]],[28],[[],74],[70,76],0,[[],70],[76],0,[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],0,0,0,[[]],[[]],[[]],[[]],[77,[[34,[[12,[67]]]]]],0,[[],[[34,[[12,[67]]]]]],[[],68],[[],28],[78,21],[[]],[[]],[77,71],0,[[]],[[]],[[],77],[[]],[71],[77,[[34,[[12,[67]]]]]],[[],[[34,[[12,[67]]]]]],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],0,0,0,0,0,0,0,[79,28],0,[[]],[[]],[[]],[[]],[[]],[[]],0,[80,80],[[]],[[80,80],22],[67],0,0,[12,[[12,[67]]]],[[]],[[]],[[]],[79,80],[79,68],[79,28],[67,28],0,[67,[[65,[79]]]],[[]],[[]],[[]],[79,22],0,0,[[],67],0,0,0,0,[[]],0,[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],0,0,[[],28],[[],28],[[]],0,0,[[]],[[]],0,0,0,[[]],[[]],0,[[],1],[[],1],0,[[],1],0,0,[[28,28,28,28,28],68],[[]],[[]],[[68,23],10],[[]],[[]],0,0,0,[[68,28]],0,0,[[],5],[[],5],[[],6],0],"p":[[15,"never"],[15,"u32"],[3,"RISCV64"],[15,"u64"],[4,"Result"],[3,"TypeId"],[3,"Arguments"],[3,"Stdout"],[15,"str"],[6,"Result"],[3,"BLOCK_DEVICE"],[3,"Arc"],[8,"SPI"],[3,"SDCard"],[4,"CMD"],[4,"InitError"],[3,"SDCardCSD"],[3,"SDCardCID"],[3,"SDCardInfo"],[3,"PERIPHERALS"],[3,"UPSafeCell"],[15,"bool"],[3,"Formatter"],[15,"u8"],[3,"SPI0"],[3,"SPIImpl"],[3,"SDCardWrapper"],[15,"usize"],[3,"QUEUE_FRAMES"],[15,"i32"],[3,"VirtIOBlock"],[3,"OpenFlags"],[3,"OSInode"],[4,"Option"],[3,"UserBuffer"],[4,"Ordering"],[3,"ROOT_INODE"],[8,"IntoIterator"],[3,"Inode"],[3,"Vec"],[3,"Stdin"],[3,"Stdout"],[3,"PanicInfo"],[3,"FrameTracker"],[3,"PhysPageNum"],[3,"String"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"VirtPageNum"],[8,"Clone"],[3,"SimpleRange"],[3,"SimpleRangeIterator"],[3,"StackFrameAllocator"],[3,"FRAME_ALLOCATOR"],[3,"Layout"],[3,"MemorySet"],[3,"MapPermission"],[4,"MapType"],[3,"MapArea"],[3,"PageTable"],[3,"KERNEL_SPACE"],[3,"PageTableEntry"],[3,"PTEFlags"],[3,"UserBufferIterator"],[3,"RefMut"],[15,"isize"],[3,"TaskControlBlock"],[3,"TrapContext"],[3,"INITPROC"],[3,"PidHandle"],[3,"TaskContext"],[3,"TaskManager"],[3,"TASK_MANAGER"],[3,"PidAllocator"],[3,"PID_ALLOCATOR"],[3,"KernelStack"],[3,"Processor"],[3,"PROCESSOR"],[3,"TaskControlBlockInner"],[4,"TaskStatus"],[8,"QEMUExit"],[13,"CMDFailed"],[13,"CardCapacityStatusNotSet"],[3,"VirtioHal"],[8,"File"],[3,"OSInodeInner"],[8,"StepByOne"],[8,"FrameAllocator"]]}\ +"os":{"doc":"The main module and entrypoint","t":[0,5,0,0,0,0,0,0,14,14,5,0,0,0,0,0,0,6,17,17,17,17,17,17,17,8,17,3,17,12,11,11,10,11,5,10,11,10,11,11,11,11,11,11,11,2,17,17,2,2,17,17,17,17,17,3,11,11,11,11,5,11,11,11,11,2,2,0,3,2,12,5,11,11,11,11,11,11,11,11,0,12,3,17,3,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,3,3,3,3,12,12,0,5,5,10,10,12,0,10,12,10,18,3,3,3,18,18,3,18,18,12,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,5,11,11,11,12,5,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,12,12,12,12,3,3,3,3,3,3,3,3,8,3,3,3,3,12,0,12,12,12,12,12,12,12,5,0,5,12,0,5,5,0,0,12,12,5,12,10,5,5,5,5,12,12,12,12,17,17,3,3,3,3,8,17,6,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,8,6,3,3,12,10,11,11,11,11,11,11,11,12,10,11,11,11,12,11,5,5,5,11,11,11,11,5,11,11,11,10,11,11,12,12,11,11,11,11,11,11,11,11,11,7,7,5,5,5,13,13,3,3,3,4,3,18,18,18,18,12,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,11,12,11,11,11,11,11,12,11,11,11,5,11,11,5,5,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,18,18,18,3,3,3,18,18,3,3,18,18,18,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,5,5,5,5,5,3,12,0,3,11,11,11,11,12,11,11,11,11,11,17,17,17,17,17,17,17,17,17,17,17,0,0,5,5,5,5,5,5,5,5,5,5,5,5,12,17,3,3,3,3,3,3,3,12,5,5,11,11,0,12,12,5,5,5,11,5,5,11,12,11,0,0,12,5,0,12,12,12,5,12,5,12,5,0,5,0,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,3,3,12,11,5,11,11,11,11,11,11,5,11,11,11,11,11,12,11,11,11,11,11,11,12,3,3,3,3,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,5,11,12,11,11,11,11,11,11,11,11,11,11,11,11,3,3,12,11,11,11,11,11,12,5,5,5,11,11,11,11,12,11,11,11,5,5,11,5,11,11,11,11,11,11,5,13,13,3,3,4,13,11,12,11,11,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,12,12,11,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,17,17,5,5,5,3,0,5,5,12,12,12,5,5,12,5,5,12,5,12,3,11,11,11,11,11,11,12,12,12,11,12,12,11,11,11,12],"n":["board","clear_bss","config","console","drivers","fs","lang_items","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","BlockDeviceImpl","CLOCK_FREQ","EXIT_FAILURE","EXIT_FAILURE_FLAG","EXIT_RESET","EXIT_SUCCESS","MEMORY_END","MMIO","QEMUExit","QEMU_EXIT_HANDLE","RISCV64","VIRT_TEST","addr","borrow","borrow_mut","exit","exit","exit_code_encode","exit_failure","exit_failure","exit_success","exit_success","from","into","new","try_from","try_into","type_id","CLOCK_FREQ","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","MMIO","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE","Stdout","borrow","borrow_mut","from","into","print","try_from","try_into","type_id","write_str","BLOCK_DEVICE","BLOCK_DEVICE","block","BLOCK_DEVICE","VirtIOBlock","__private_field","block_device_test","borrow","borrow_mut","deref","from","into","try_from","try_into","type_id","virtio_blk","0","QUEUE_FRAMES","VIRTIO0","VirtIOBlock","VirtioHal","__private_field","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","dma_alloc","dma_dealloc","from","from","from","into","into","into","new","phys_to_virt","read_block","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","virt_to_phys","write_block","File","OSInode","OpenFlags","Stdin","Stdout","bits","inner","inode","list_apps","open_file","read","readable","readable","stdio","writable","writable","write","CREATE","OSInode","OSInodeInner","OpenFlags","RDONLY","RDWR","ROOT_INODE","TRUNC","WRONLY","__private_field","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cmp","complement","contains","deref","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","inner","inode","insert","intersection","intersects","into","into","into","into","is_all","is_empty","list_apps","ne","new","not","offset","open_file","partial_cmp","read","read_all","read_write","readable","readable","remove","set","sub","sub_assign","symmetric_difference","to_owned","toggle","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","union","writable","writable","write","Stdin","Stdout","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","read","read","readable","readable","try_from","try_from","try_into","try_into","type_id","type_id","writable","writable","write","write","panic","0","0","0","0","FrameTracker","KERNEL_SPACE","MapPermission","MemorySet","PageTable","PageTableEntry","PhysAddr","PhysPageNum","StepByOne","UserBuffer","UserBufferIterator","VirtAddr","VirtPageNum","__private_field","address","areas","bits","bits","buffers","buffers","current_buffer","current_idx","frame_alloc","frame_allocator","frame_dealloc","frames","heap_allocator","init","kernel_token","memory_set","page_table","page_table","ppn","remap_test","root_ppn","step","translated_byte_buffer","translated_ref","translated_refmut","translated_str","0","0","0","0","PA_WIDTH_SV39","PPN_WIDTH_SV39","PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","StepByOne","VA_WIDTH_SV39","VPNRange","VPN_WIDTH_SV39","VirtAddr","VirtPageNum","aligned","aligned","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","ceil","ceil","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","current","end","eq","eq","eq","eq","floor","floor","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_bytes_array","get_end","get_mut","get_mut","get_pte_array","get_ref","get_start","indexes","into","into","into","into","into","into","into_iter","into_iter","l","ne","ne","ne","ne","new","new","next","page_offset","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","r","step","step","step","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","FRAME_ALLOCATOR","FrameAllocator","FrameAllocatorImpl","FrameTracker","StackFrameAllocator","__private_field","alloc","alloc","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","current","dealloc","dealloc","deref","drop","end","fmt","frame_alloc","frame_allocator_test","frame_dealloc","from","from","from","init","init_frame_allocator","into","into","into","new","new","new","ppn","recycled","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","HEAP_ALLOCATOR","HEAP_SPACE","handle_alloc_error","heap_test","init_heap","Framed","Identical","KERNEL_SPACE","MapArea","MapPermission","MapType","MemorySet","R","U","W","X","__private_field","activate","all","areas","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","complement","contains","copy_data","data_frames","deref","difference","ebss","edata","ekernel","empty","eq","eq","erodata","etext","extend","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_another","from_bits","from_bits_truncate","from_bits_unchecked","from_elf","from_existed_user","from_iter","hash","insert","insert_framed_area","intersection","intersects","into","into","into","into","into","is_all","is_empty","kernel_token","map","map_one","map_perm","map_trampoline","map_type","ne","new","new_bare","new_kernel","not","page_table","partial_cmp","push","recycle_data_pages","remap_test","remove","remove_area_with_start_vpn","sbss_with_stack","sdata","set","srodata","stext","strampoline","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","union","unmap","unmap_one","vpn_range","A","D","G","PTEFlags","PageTable","PageTableEntry","R","U","UserBuffer","UserBufferIterator","V","W","X","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buffers","buffers","clone","clone","clone_into","clone_into","cmp","complement","contains","current_buffer","current_idx","difference","empty","empty","eq","executable","extend","find_pte","find_pte_create","flags","fmt","fmt","fmt","fmt","fmt","frames","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_token","hash","insert","intersection","intersects","into","into","into","into","into","into_iter","into_iter","is_all","is_empty","is_valid","len","map","ne","new","new","new","next","not","partial_cmp","ppn","readable","remove","root_ppn","set","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","translate_va","translated_byte_buffer","translated_ref","translated_refmut","translated_str","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","union","unmap","writable","SBI_CLEAR_IPI","SBI_CONSOLE_GETCHAR","SBI_CONSOLE_PUTCHAR","SBI_REMOTE_FENCE_I","SBI_REMOTE_SFENCE_VMA","SBI_REMOTE_SFENCE_VMA_ASID","SBI_SEND_IPI","SBI_SET_TIMER","SBI_SHUTDOWN","console_getchar","console_putchar","sbi_call","set_timer","shutdown","UPSafeCell","inner","up","UPSafeCell","borrow","borrow_mut","exclusive_access","from","inner","into","new","try_from","try_into","type_id","SYSCALL_CLOSE","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GET_TIME","SYSCALL_OPEN","SYSCALL_READ","SYSCALL_WAITPID","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","syscall","sys_close","sys_open","sys_read","sys_write","sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_waitpid","sys_yield","0","IDLE_PID","INITPROC","KernelStack","PidAllocator","PidHandle","Processor","TaskContext","TaskManager","__private_field","add_initproc","add_task","borrow","borrow_mut","context","current","current","current_task","current_trap_cx","current_user_token","deref","exit_current_and_run_next","fetch_task","from","idle_task_cx","into","manager","pid","pid","pid_alloc","processor","ra","ready_queue","recycled","run_tasks","s","schedule","sp","suspend_current_and_run_next","switch","take_current_task","task","try_from","try_into","type_id","TaskContext","borrow","borrow_mut","from","goto_trap_return","into","ra","s","sp","try_from","try_into","type_id","zero_init","TASK_MANAGER","TaskManager","__private_field","add","add_task","borrow","borrow","borrow_mut","borrow_mut","deref","fetch","fetch_task","from","from","into","into","new","ready_queue","try_from","try_from","try_into","try_into","type_id","type_id","0","KernelStack","PID_ALLOCATOR","PidAllocator","PidHandle","__private_field","alloc","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","current","dealloc","deref","drop","drop","from","from","from","from","get_top","into","into","into","into","kernel_stack_position","new","new","pid","pid_alloc","push_on_top","recycled","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","PROCESSOR","Processor","__private_field","borrow","borrow","borrow_mut","borrow_mut","current","current","current_task","current_trap_cx","current_user_token","deref","from","from","get_idle_task_cx_ptr","idle_task_cx","into","into","new","run_tasks","schedule","take_current","take_current_task","try_from","try_from","try_into","try_into","type_id","type_id","__switch","Ready","Running","TaskControlBlock","TaskControlBlockInner","TaskStatus","Zombie","alloc_fd","base_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","children","clone","clone_into","eq","exec","exit_code","fd_table","fork","from","from","from","get_status","get_trap_cx","get_user_token","getpid","inner","inner_exclusive_access","into","into","into","is_zombie","kernel_stack","memory_set","new","parent","pid","task_cx","task_status","to_owned","trap_cx_ppn","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","MSEC_PER_SEC","TICKS_PER_SEC","get_time","get_time_ms","set_next_trigger","TrapContext","context","enable_timer_interrupt","init","kernel_satp","kernel_sp","sepc","set_kernel_trap_entry","set_user_trap_entry","sstatus","trap_from_kernel","trap_handler","trap_handler","trap_return","x","TrapContext","app_init_context","borrow","borrow_mut","fmt","from","into","kernel_satp","kernel_sp","sepc","set_sp","sstatus","trap_handler","try_from","try_into","type_id","x"],"q":["os","","","","","","","","","","","","","","","","","os::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::config","","","","","","","","","","os::console","","","","","","","","","","os::drivers","","","os::drivers::block","","","","","","","","","","","","","os::drivers::block::virtio_blk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs","","","","","","","","","","","","","","","","","os::fs::inode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::stdio","","","","","","","","","","","","","","","","","","","","","","","","os::lang_items","os::mm","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::address","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::frame_allocator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::heap_allocator","","","","","os::mm::memory_set","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::page_table","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::sbi","","","","","","","","","","","","","","os::sync","","","os::sync::up","","","","","","","","","","","os::syscall","","","","","","","","","","","","","","os::syscall::fs","","","","os::syscall::process","","","","","","","os::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::context","","","","","","","","","","","","","os::task::manager","","","","","","","","","","","","","","","","","","","","","","","","os::task::pid","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::processor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::switch","os::task::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::timer","","","","","os::trap","","","","","","","","","","","","","","","os::trap::context","","","","","","","","","","","","","","","",""],"d":["","clear BSS segment","Constants used in rCore","SBI console driver, for text output","","File system in os","The panic handler","Memory management implementation","print string macro","println string macro","the rust entry-point of os","SBI call wrappers","Synchronization and interior mutability primitives","Implementation of syscalls","Task management implementation","RISC-V timer-related functionality","Trap handling functionality","","","","","","","","","","","RISCV64 configuration","","Address of the sifive_test mapped device.","","","Exit with specified return code.","Exit qemu with specified exit code.","Encode the exit code using EXIT_FAILURE_FLAG.","Exit QEMU using EXIT_FAILURE, aka 1.","","Exit QEMU using EXIT_SUCCESS, aka 0, if possible.","","Returns the argument unchanged.","Calls U::from(self).","Create an instance.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","File trait","A wrapper around a filesystem inode to implement File …","Open file flags","Standard input","Standard output","","","Arc<Inode> -> OSInodeInner: In order to open files …","List all files in the filesystems","Open file with flags","Read file to UserBuffer","If readable","","Stdin & Stdout","If writable","","Write UserBuffer to file","Allow create","A wrapper around a filesystem inode to implement File …","The OS inode inner in ‘UPSafeCell’","Open file flags","Read only","Read & Write","","Clear file and return an empty one","Write only","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","List all files in the filesystems","","Construct an OS inode from a inode","Returns the complement of this set of flags.","","Open file with flags","","","Read all data inside a inode into vector","Do not check validity for simplicity Return (readable, …","","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","Toggles the specified flags in-place.","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","Standard input","Standard output","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","manage a frame which has the same lifecycle as the tracker","a memory set instance through lazy_static! managing kernel …","map permission corresponding to that in pte: R W X U","memory set structure, controls virtual-memory space","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","Definitions","phiscal page number","Add value by one","Array of u8 slice that user communicate with os","Iterator of UserBuffer","virtual address","virtual page number","","Implementation of physical and virtual address and page …","","","PTE","U8 vec","","","","allocate a frame","Implementation of FrameAllocator which controls all the …","deallocate a frame","","The global allocator","initiate heap allocator, frame allocator and kernel space","Get kernelspace root ppn","Implementation of MapArea and MemorySet.","Implementation of PageTableEntry and PageTable.","","","Check PageTable running correctly","","Add value by one","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","Definitions","phiscal page number","a simple range structure for type T","iterator for the simple range structure","Add value by one","","a simple range structure for virtual page number","","virtual address","virtual page number","Check page aligned","Check page aligned","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","","","","","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Get u8 array on PhysPageNum","","Get mutable reference to PhysAddr value","Get Get mutable reference to PhysAddr value on PhysPageNum","Get PageTableEntry on PhysPageNum","Get reference to PhysAddr value","","Return VPN 3 level index","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","Get page offset","Get page offset","","","","","","Add value by one","","","","","","","","","","","","","","","","","","","","","","","","","","frame allocator instance through lazy_static!","","","manage a frame which has the same lifecycle as the tracker","an implementation for frame allocator","","","","","","","","","","","","","","","","","allocate a frame","a simple test for frame allocator","deallocate a frame","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","initiate the frame allocator using ekernel and MEMORY_END","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Create an empty FrameTracker","","","","","","","","","","","","","heap allocator instance","heap space ([u8; KERNEL_HEAP_SIZE])","panic when heap allocation error occurs","","initiate heap allocator","","","a memory set instance through lazy_static! managing kernel …","map area structure, controls a contiguous piece of virtual …","map permission corresponding to that in pte: R W X U","map type for memory set: identical or framed","memory set structure, controls virtual-memory space","Readable","Accessible in U mode","Writable","Excutable","","Refresh TLB with sfence.vma","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","data: start-aligned but maybe with shorter length assume …","","","Returns the difference between the flags in self and other.","","","","Returns an empty set of flags.","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Include sections in elf and trampoline and TrapContext and …","Clone a same MemorySet","","","Inserts the specified flags in-place.","Assume that no conflicts.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Get kernelspace root ppn","","","","Mention that trampoline is not collected by areas.","","","","Create an empty MemorySet","Without kernel stacks.","Returns the complement of this set of flags.","","","","Remove all MapArea","Check PageTable running correctly","Removes the specified flags in-place.","Remove MapArea that starts with start_vpn","","","Inserts or removes the specified flags depending on the …","","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","Get pagetable root_ppn","Translate throuth pagetable","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","","","Array of u8 slice that user communicate with os","Iterator of UserBuffer","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","PTE","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","U8 vec","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","Return an empty PTE","","Check PTE executable","","Find phsical address by virtual address","Find phsical address by virtual address, create a frame if …","Return 10bit flag","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","Temporarily used to get arguments from user space.","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Check PTE valid","Length of UserBuffer","Create a mapping form vpn to ppn","","Create an empty PageTable","Create a UserBuffer by parameter","Create a PTE from ppn","","Returns the complement of this set of flags.","","Return 44bit ppn","Check PTE readable","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","Get root ppn","Translate VirtPageNum to PageTableEntry","Translate VirtAddr to PhysAddr","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Delete a mapping form vpn","Check PTE writable","","","","","","","","","","use sbi call to getchar from console (qemu uart handler)","use sbi call to putchar in console (qemu uart handler)","general sbi call","use sbi call to set timer","use sbi call to shutdown the kernel","Wrap a static data structure inside it so that we are able …","inner data","Uniprocessor interior mutability primitives","Wrap a static data structure inside it so that we are able …","","","Exclusive access inner data in UPSafeCell. Panic if the …","Returns the argument unchanged.","inner data","Calls U::from(self).","User is responsible to guarantee that inner struct is only …","","","","","","","","","","","","","","","File and filesystem-related syscalls","","handle syscall exception with syscall_id and other …","","","","","","","","","","If there is not a child process whose pid is same as …","","","pid of usertests app in make run TEST=1","Globle process that init user shell","Kernelstack for app","Pid Allocator struct","Bind pid lifetime to PidHandle","Processor management structure","task context structure containing some registers","A array of TaskControlBlock that is thread-safe","","Add init process to the manager","Interface offered to add task","","","Implementation of TaskContext","","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Exit the current ‘Running’ task and run the next task …","Interface offered to pop the first task","Returns the argument unchanged.","The basic control flow of each core, helping to select and …","Calls U::from(self).","Implementation of TaskManager","Implementation of PidAllocator","","Allocate a pid from PID_ALLOCATOR","Implementation of Processor and Intersection of control …","return address ( e.g. __restore ) of __switch ASM function","","","The main part of process execution and scheduling Loop …","s0-11 register, callee saved","Return to idle control flow for new scheduling","kernel stack pointer of app","Suspend the current ‘Running’ task and run the next …","Wrap switch.S as a function","Take the current task,leaving a None in its place","Implementation of TaskControlBlock","","","","task context structure containing some registers","","","Returns the argument unchanged.","set Task Context{__restore ASM funciton: trap_return, sp: …","Calls U::from(self).","return address ( e.g. __restore ) of __switch ASM function","s0-11 register, callee saved","kernel stack pointer of app","","","","init task context","","A array of TaskControlBlock that is thread-safe","","Add a task to TaskManager","Interface offered to add task","","","","","","Remove the first task and return it,or None if TaskManager …","Interface offered to pop the first task","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Creat an empty TaskManager","","","","","","","","","Kernelstack for app","","Pid Allocator struct","Bind pid lifetime to PidHandle","","Allocate a pid","","","","","","","","","","Recycle a pid","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the value on the top of kernelstack","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Return (bottom, top) of a kernel stack in kernel space.","Create an empty PidAllocator","Create a kernelstack from pid","","Allocate a pid from PID_ALLOCATOR","Push a value on top of kernelstack","","","","","","","","","","","","","","","Processor management structure","","","","","","Get current task in cloning semanteme","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Returns the argument unchanged.","Returns the argument unchanged.","Get mutable reference to idle_task_cx","The basic control flow of each core, helping to select and …","Calls U::from(self).","Calls U::from(self).","Create an empty Processor","The main part of process execution and scheduling Loop …","Return to idle control flow for new scheduling","Get current task in moving semanteme","Take the current task,leaving a None in its place","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","get current time","get current time in microseconds","set the next timer interrupt","trap context structure containing sstatus, sepc and …","Implementation of TrapContext","enable timer interrupt in sie CSR","initialize CSR stvec as the entry of __alltraps","Addr of Page Table","kernel stack","CSR sepc","","","CSR sstatus ","Unimplement: traps/interrupts/exceptions from kernel mode …","handle an interrupt, exception, or system call from user …","Addr of trap_handler function","set the new addr of __restore asm function in TRAMPOLINE …","general regs[0..31]","trap context structure containing sstatus, sepc and …","init app context","","","","Returns the argument unchanged.","Calls U::from(self).","Addr of Page Table","kernel stack","CSR sepc","set stack pointer to x_2 reg (sp)","CSR sstatus ","Addr of trap_handler function","","","","general regs[0..31]"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,70,3,0,70,3,70,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,0,8,8,8,8,0,0,0,0,0,11,0,11,11,11,11,11,11,11,11,0,17,0,0,0,0,13,17,71,13,17,71,13,13,71,71,17,71,13,17,71,13,17,71,17,17,71,13,17,71,13,17,71,13,71,17,0,0,0,0,0,18,19,0,0,0,72,72,19,0,72,19,72,18,0,0,0,18,18,0,18,18,24,18,18,18,18,18,18,18,18,18,19,73,24,18,19,73,24,18,18,18,18,18,18,24,18,18,18,18,18,18,18,18,18,19,73,24,18,18,18,18,18,18,19,73,18,18,18,19,73,24,18,18,18,0,18,19,18,73,0,18,19,19,18,19,19,18,18,18,18,18,18,18,19,73,24,18,19,73,24,18,19,73,24,18,18,19,19,19,0,0,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,0,36,37,34,38,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,45,46,51,21,53,53,53,0,0,0,49,0,0,0,0,0,45,33,0,49,74,0,0,0,0,36,37,34,38,0,0,0,0,0,0,0,0,0,0,0,0,36,37,41,36,37,34,38,40,41,36,37,34,38,40,36,37,36,37,34,38,40,36,37,34,38,40,36,37,34,38,41,41,36,37,34,38,36,37,36,37,34,38,41,36,36,36,37,37,37,34,34,34,38,38,38,40,34,40,36,34,34,36,40,38,41,36,37,34,38,40,41,40,40,36,37,34,38,41,40,41,36,37,36,37,34,38,40,74,34,38,36,37,34,38,40,41,36,37,34,38,40,41,36,37,34,38,40,41,36,37,34,38,40,0,0,0,0,0,43,75,42,33,42,43,33,42,43,42,75,42,43,33,42,33,0,0,0,33,42,43,42,0,33,42,43,75,33,42,33,42,33,42,43,33,42,43,33,42,43,0,0,0,0,0,47,47,0,0,0,0,0,46,46,46,46,50,45,46,45,46,46,46,46,46,46,46,46,45,48,50,47,46,45,48,50,47,46,47,46,47,46,46,46,46,48,48,50,46,0,0,0,46,47,46,0,0,46,47,46,46,46,46,46,45,48,50,47,46,48,46,46,46,45,45,46,46,46,45,46,46,45,48,50,47,46,46,46,0,48,48,48,45,48,46,48,45,45,46,45,46,45,45,0,46,45,0,0,46,0,0,0,46,46,46,47,46,46,45,45,45,48,50,47,46,45,48,50,47,46,45,48,50,47,46,46,48,48,48,52,52,52,0,0,0,52,52,0,0,52,52,52,52,52,52,52,52,52,52,51,52,52,49,21,53,52,51,49,21,53,52,51,21,53,52,51,52,51,52,52,52,53,53,52,52,51,52,51,52,49,49,51,52,52,52,52,52,49,49,21,53,52,51,52,52,52,52,49,52,52,52,52,49,21,53,52,51,21,53,52,52,51,21,49,52,49,21,51,53,52,52,51,51,52,49,52,52,52,52,52,51,52,49,49,49,0,0,0,0,49,21,53,52,51,49,21,53,52,51,49,21,53,52,51,52,49,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,58,0,0,58,58,0,63,66,0,0,0,58,0,0,58,66,58,0,0,65,0,0,60,61,63,0,60,0,60,0,0,0,0,58,58,58,0,60,60,60,60,60,60,60,60,60,60,60,60,0,0,62,61,0,61,62,61,62,62,61,0,61,62,61,62,61,61,61,62,61,62,61,62,59,0,0,0,0,64,63,63,59,65,64,63,59,65,64,63,63,64,59,65,63,59,65,64,65,63,59,65,64,0,63,65,65,0,65,63,63,59,65,64,63,59,65,64,63,59,65,64,0,0,67,66,67,66,67,66,66,0,0,0,67,66,67,66,66,66,67,66,0,0,66,0,66,67,66,67,66,67,0,69,69,0,0,0,69,68,68,56,68,69,56,68,69,68,69,69,69,56,68,68,56,56,68,69,68,68,68,56,56,56,56,68,69,68,56,68,56,68,56,68,68,69,68,56,68,69,56,68,69,56,68,69,0,0,0,0,0,0,0,0,0,57,57,57,0,0,57,0,0,57,0,57,0,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57],"f":[0,[[]],0,0,0,0,0,0,0,0,[[],1],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[2,1],[[3,2],1],[2,2],[[],1],[3,1],[[],1],[3,1],[[]],[[]],[4,3],[[],5],[[],5],[[],6],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[7],[[],5],[[],5],[[],6],[[8,9],10],0,0,0,0,0,0,[[]],[[]],[[]],[11,12],[[]],[[]],[[],5],[[],5],[[],6],0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[13,14],[15,15],[[15,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[],17],[15,15],[[17,15]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[15,15],[[17,15]],0,0,0,0,0,0,0,0,[[]],[[9,18],[[20,[[12,[19]]]]]],[21,15],[[],22],0,0,[[],22],0,[21,15],0,0,0,0,0,0,0,0,0,0,[[],18],[[18,18],18],[[18,18]],[[18,18],18],[[18,18]],[18,2],0,[[18,18],18],[[18,18]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18,18],[[]],[[18,18],23],[18,18],[[18,18],22],[24,12],[[18,18],18],[[],18],[[18,18],22],[[18,25]],[[18,26],10],[[18,26],10],[[18,26],10],[[18,26],10],[[18,26],10],[[]],[[]],[[]],[[]],[2,[[20,[18]]]],[2,18],[2,18],[25,18],[18],0,0,[[18,18]],[[18,18],18],[[18,18],22],[[]],[[]],[[]],[[]],[18,22],[18,22],[[]],[[18,18],22],[[22,22,[12,[27]]],19],[18,18],0,[[9,18],[[20,[[12,[19]]]]]],[[18,18],[[20,[23]]]],[[19,21],15],[19,[[29,[28]]]],[18],[19,22],0,[[18,18]],[[18,18,22]],[[18,18],18],[[18,18]],[[18,18],18],[[]],[[18,18]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[18,18],18],[19,22],0,[[19,21],15],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[30,21],15],[[31,21],15],[30,22],[31,22],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[30,22],[31,22],[[30,21],15],[[31,21],15],[32,1],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],[[20,[33]]]],0,[34],0,0,[[]],[[],15],0,0,0,0,[[]],0,[[]],[[15,28,15],29],[15],[15],[[15,28],35],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[36,22],[37,22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[36,34],[37,38],[36,36],[37,37],[34,34],[38,38],[[[40,[39]]],[[40,[39]]]],[[]],[[]],[[]],[[]],[[]],[[36,36],23],[[37,37],23],[[34,34],23],[[38,38],23],0,0,[[36,36],22],[[37,37],22],[[34,34],22],[[38,38],22],[36,34],[37,38],[[36,26],10],[[37,26],10],[[34,26],10],[[38,26],10],[[]],[34,36],[[]],[15,36],[38,37],[15,37],[[]],[36,34],[15,34],[[]],[37,38],[15,38],[[]],[[]],[34],[40],[36],[34],[34],[36],[40],[38],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[40],0,[[36,36],22],[[37,37],22],[[34,34],22],[[38,38],22],[[],41],[[],40],[41,20],[36,15],[37,15],[[36,36],[[20,[23]]]],[[37,37],[[20,[23]]]],[[34,34],[[20,[23]]]],[[38,38],[[20,[23]]]],0,[[]],[34],[38],[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],0,0,0,0,0,0,[[],[[20,[34]]]],[42,[[20,[34]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,[34],[[42,34]],[43,14],[33],0,[[33,26],10],[[],[[20,[33]]]],[[]],[34],[[]],[[]],[[]],[[42,34,34]],[[]],[[]],[[]],[[]],[[]],[34,33],[[],42],0,0,[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],0,0,[44,1],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,[45],[[],46],0,[[46,46],46],[[46,46]],[[46,46],46],[[46,46]],[46,28],0,[[46,46],46],[[46,46]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[47,47],[46,46],[[]],[[]],[[46,46],23],[46,46],[[46,46],22],[[48,49]],0,[50,12],[[46,46],46],0,0,0,[[],46],[[47,47],22],[[46,46],22],0,0,[[46,25]],[[47,26],10],[[46,26],10],[[46,26],10],[[46,26],10],[[46,26],10],[[46,26],10],[[]],[[]],[[]],[[]],[[]],[48,48],[28,[[20,[46]]]],[28,46],[28,46],[[]],[45,45],[25,46],[46],[[46,46]],[[45,37,37,46]],[[46,46],46],[[46,46],22],[[]],[[]],[[]],[[]],[[]],[46,22],[46,22],[[],15],[[48,49]],[[48,49,38]],0,[45],0,[[46,46],22],[[37,37,47,46],48],[[],45],[[],45],[46,46],0,[[46,46],[[20,[23]]]],[[45,48,20]],[45],[[]],[[46,46]],[[45,38]],0,0,[[46,46,22]],0,0,0,[[46,46],46],[[46,46]],[[46,46],46],[[]],[[]],[[46,46]],[45,15],[[45,38],[[20,[51]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[46,46],46],[[48,49]],[[48,49,38]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],52],[[52,52],52],[[52,52]],[[52,52],52],[[52,52]],[52,28],0,0,[[52,52],52],[[52,52]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[52,52],[51,51],[[]],[[]],[[52,52],23],[52,52],[[52,52],22],0,0,[[52,52],52],[[],52],[[],51],[[52,52],22],[51,22],[[52,25]],[[49,38],[[20,[51]]]],[[49,38],[[20,[51]]]],[51,52],[[52,26],10],[[52,26],10],[[52,26],10],[[52,26],10],[[52,26],10],0,[[]],[[]],[[]],[[]],[[]],[28,[[20,[52]]]],[28,52],[28,52],[25,52],[15,49],[52],[[52,52]],[[52,52],52],[[52,52],22],[[]],[[]],[[]],[[]],[[]],[21],[[]],[52,22],[52,22],[51,22],[21,15],[[49,38,34,52]],[[52,52],22],[[],49],[29,21],[[34,52],51],[53,20],[52,52],[[52,52],[[20,[23]]]],[51,34],[51,22],[[52,52]],0,[[52,52,22]],[[52,52],52],[[52,52]],[[52,52],52],[[]],[[]],[[52,52]],[49,15],[[49,38],[[20,[51]]]],[[49,37],[[20,[36]]]],[[15,28,15],29],[15],[15],[[15,28],35],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[52,52],52],[[49,38]],[51,22],0,0,0,0,0,0,0,0,0,[[],15],[15],[[15,15,15,15],15],[15],[[],1],0,0,0,0,[[]],[[]],[14,54],[[]],0,[[]],[[],14],[[],5],[[],5],[[],6],0,0,0,0,0,0,0,0,0,0,0,0,0,[15,55],[15,55],[[28,2],55],[[15,28,15],55],[[15,28,15],55],[28,55],[16,1],[[],55],[[],55],[[],55],[[55,16],55],[[],55],0,0,0,0,0,0,0,0,0,0,[[]],[[[12,[56]]]],[[]],[[]],0,0,0,[[],[[20,[[12,[56]]]]]],[[],57],[[],15],[58,12],[16],[[],[[20,[[12,[56]]]]]],[[]],0,[[]],0,0,0,[[],59],0,0,0,0,[[]],0,[60],0,[[]],0,[[],[[20,[[12,[56]]]]]],0,[[],5],[[],5],[[],6],0,[[]],[[]],[[]],[15,60],[[]],0,0,0,[[],5],[[],5],[[],6],[[],60],0,0,0,[[61,[12,[56]]]],[[[12,[56]]]],[[]],[[]],[[]],[[]],[62,14],[61,[[20,[[12,[56]]]]]],[[],[[20,[[12,[56]]]]]],[[]],[[]],[[]],[[]],[[],61],0,[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],0,0,0,0,0,0,[63,59],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[63,15]],[64,14],[59],[65],[[]],[[]],[[]],[[]],[65,15],[[]],[[]],[[]],[[]],[15],[[],63],[59,65],0,[[],59],[65],0,[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],0,0,0,[[]],[[]],[[]],[[]],[66,[[20,[[12,[56]]]]]],0,[[],[[20,[[12,[56]]]]]],[[],57],[[],15],[67,14],[[]],[[]],[66,60],0,[[]],[[]],[[],66],[[]],[60],[66,[[20,[[12,[56]]]]]],[[],[[20,[[12,[56]]]]]],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],0,0,0,0,0,0,0,[68,15],0,[[]],[[]],[[]],[[]],[[]],[[]],0,[69,69],[[]],[[69,69],22],[56],0,0,[12,[[12,[56]]]],[[]],[[]],[[]],[68,69],[68,57],[68,15],[56,15],0,[56,[[54,[68]]]],[[]],[[]],[[]],[68,22],0,0,[[],56],0,0,0,0,[[]],0,[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],0,0,[[],15],[[],15],[[]],0,0,[[]],[[]],0,0,0,[[]],[[]],0,[[],1],[[],1],0,[[],1],0,0,[[15,15,15,15,15],57],[[]],[[]],[[57,26],10],[[]],[[]],0,0,0,[[57,15]],0,0,[[],5],[[],5],[[],6],0],"p":[[15,"never"],[15,"u32"],[3,"RISCV64"],[15,"u64"],[4,"Result"],[3,"TypeId"],[3,"Arguments"],[3,"Stdout"],[15,"str"],[6,"Result"],[3,"BLOCK_DEVICE"],[3,"Arc"],[3,"QUEUE_FRAMES"],[3,"UPSafeCell"],[15,"usize"],[15,"i32"],[3,"VirtIOBlock"],[3,"OpenFlags"],[3,"OSInode"],[4,"Option"],[3,"UserBuffer"],[15,"bool"],[4,"Ordering"],[3,"ROOT_INODE"],[8,"IntoIterator"],[3,"Formatter"],[3,"Inode"],[15,"u8"],[3,"Vec"],[3,"Stdin"],[3,"Stdout"],[3,"PanicInfo"],[3,"FrameTracker"],[3,"PhysPageNum"],[3,"String"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"VirtPageNum"],[8,"Clone"],[3,"SimpleRange"],[3,"SimpleRangeIterator"],[3,"StackFrameAllocator"],[3,"FRAME_ALLOCATOR"],[3,"Layout"],[3,"MemorySet"],[3,"MapPermission"],[4,"MapType"],[3,"MapArea"],[3,"PageTable"],[3,"KERNEL_SPACE"],[3,"PageTableEntry"],[3,"PTEFlags"],[3,"UserBufferIterator"],[3,"RefMut"],[15,"isize"],[3,"TaskControlBlock"],[3,"TrapContext"],[3,"INITPROC"],[3,"PidHandle"],[3,"TaskContext"],[3,"TaskManager"],[3,"TASK_MANAGER"],[3,"PidAllocator"],[3,"PID_ALLOCATOR"],[3,"KernelStack"],[3,"Processor"],[3,"PROCESSOR"],[3,"TaskControlBlockInner"],[4,"TaskStatus"],[8,"QEMUExit"],[3,"VirtioHal"],[8,"File"],[3,"OSInodeInner"],[8,"StepByOne"],[8,"FrameAllocator"]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/ch6/source-files.js b/ch6/source-files.js index 24301c55..40ec5fbb 100644 --- a/ch6/source-files.js +++ b/ch6/source-files.js @@ -1,4 +1,4 @@ var sourcesIndex = JSON.parse('{\ -"os":["",[["boards",[],["qemu.rs"]],["drivers",[["block",[],["mod.rs","sdcard.rs","virtio_blk.rs"]]],["mod.rs"]],["fs",[],["inode.rs","mod.rs","stdio.rs"]],["mm",[],["address.rs","frame_allocator.rs","heap_allocator.rs","memory_set.rs","mod.rs","page_table.rs"]],["sync",[],["mod.rs","up.rs"]],["syscall",[],["fs.rs","mod.rs","process.rs"]],["task",[],["context.rs","manager.rs","mod.rs","pid.rs","processor.rs","switch.rs","task.rs"]],["trap",[],["context.rs","mod.rs"]]],["config.rs","console.rs","lang_items.rs","main.rs","sbi.rs","timer.rs"]]\ +"os":["",[["boards",[],["qemu.rs"]],["drivers",[["block",[],["mod.rs","virtio_blk.rs"]]],["mod.rs"]],["fs",[],["inode.rs","mod.rs","stdio.rs"]],["mm",[],["address.rs","frame_allocator.rs","heap_allocator.rs","memory_set.rs","mod.rs","page_table.rs"]],["sync",[],["mod.rs","up.rs"]],["syscall",[],["fs.rs","mod.rs","process.rs"]],["task",[],["context.rs","manager.rs","mod.rs","pid.rs","processor.rs","switch.rs","task.rs"]],["trap",[],["context.rs","mod.rs"]]],["config.rs","console.rs","lang_items.rs","main.rs","sbi.rs","timer.rs"]]\ }'); createSourceSidebar(); diff --git a/ch6/src/os/drivers/block/mod.rs.html b/ch6/src/os/drivers/block/mod.rs.html index 0e56373a..064b9795 100644 --- a/ch6/src/os/drivers/block/mod.rs.html +++ b/ch6/src/os/drivers/block/mod.rs.html @@ -26,12 +26,8 @@ 26 27 28 -29 -30 -
mod sdcard;
-mod virtio_blk;
+
mod virtio_blk;
 
-pub use sdcard::SDCardWrapper;
 pub use virtio_blk::VirtIOBlock;
 
 use crate::board::BlockDeviceImpl;
diff --git a/ch6/src/os/drivers/block/sdcard.rs.html b/ch6/src/os/drivers/block/sdcard.rs.html
deleted file mode 100644
index 36bd1e9c..00000000
--- a/ch6/src/os/drivers/block/sdcard.rs.html
+++ /dev/null
@@ -1,1530 +0,0 @@
-sdcard.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-
#![allow(non_snake_case)]
-#![allow(non_camel_case_types)]
-#![allow(unused)]
-
-use super::BlockDevice;
-use crate::sync::UPSafeCell;
-use core::convert::TryInto;
-use k210_hal::prelude::*;
-use k210_pac::{Peripherals, SPI0};
-use k210_soc::{
-    fpioa::{self, io},
-    //dmac::{dma_channel, DMAC, DMACExt},
-    gpio,
-    gpiohs,
-    sleep::usleep,
-    spi::{aitm, frame_format, tmod, work_mode, SPIExt, SPIImpl, SPI},
-    sysctl,
-};
-use lazy_static::*;
-
-pub struct SDCard<SPI> {
-    spi: SPI,
-    spi_cs: u32,
-    cs_gpionum: u8,
-    //dmac: &'a DMAC,
-    //channel: dma_channel,
-}
-
-/*
- * Start Data tokens:
- *         Tokens (necessary because at nop/idle (and CS active) only 0xff is
- *         on the data/command line)
- */
-/** Data token start byte, Start Single Block Read */
-pub const SD_START_DATA_SINGLE_BLOCK_READ: u8 = 0xFE;
-/** Data token start byte, Start Multiple Block Read */
-pub const SD_START_DATA_MULTIPLE_BLOCK_READ: u8 = 0xFE;
-/** Data token start byte, Start Single Block Write */
-pub const SD_START_DATA_SINGLE_BLOCK_WRITE: u8 = 0xFE;
-/** Data token start byte, Start Multiple Block Write */
-pub const SD_START_DATA_MULTIPLE_BLOCK_WRITE: u8 = 0xFC;
-
-pub const SEC_LEN: usize = 512;
-
-/** SD commands */
-#[repr(u8)]
-#[derive(Debug, PartialEq, Eq, Copy, Clone)]
-#[allow(unused)]
-pub enum CMD {
-    /** Software reset */
-    CMD0 = 0,
-    /** Check voltage range (SDC V2) */
-    CMD8 = 8,
-    /** Read CSD register */
-    CMD9 = 9,
-    /** Read CID register */
-    CMD10 = 10,
-    /** Stop to read data */
-    CMD12 = 12,
-    /** Change R/W block size */
-    CMD16 = 16,
-    /** Read block */
-    CMD17 = 17,
-    /** Read multiple blocks */
-    CMD18 = 18,
-    /** Number of blocks to erase (SDC) */
-    ACMD23 = 23,
-    /** Write a block */
-    CMD24 = 24,
-    /** Write multiple blocks */
-    CMD25 = 25,
-    /** Initiate initialization process (SDC) */
-    ACMD41 = 41,
-    /** Leading command for ACMD* */
-    CMD55 = 55,
-    /** Read OCR */
-    CMD58 = 58,
-    /** Enable/disable CRC check */
-    CMD59 = 59,
-}
-
-#[allow(unused)]
-#[derive(Debug, Copy, Clone)]
-pub enum InitError {
-    CMDFailed(CMD, u8),
-    CardCapacityStatusNotSet([u8; 4]),
-    CannotGetCardInfo,
-}
-
-/**
- * Card Specific Data: CSD Register
- */
-#[derive(Debug, Copy, Clone)]
-pub struct SDCardCSD {
-    pub CSDStruct: u8,        /* CSD structure */
-    pub SysSpecVersion: u8,   /* System specification version */
-    pub Reserved1: u8,        /* Reserved */
-    pub TAAC: u8,             /* Data read access-time 1 */
-    pub NSAC: u8,             /* Data read access-time 2 in CLK cycles */
-    pub MaxBusClkFrec: u8,    /* Max. bus clock frequency */
-    pub CardComdClasses: u16, /* Card command classes */
-    pub RdBlockLen: u8,       /* Max. read data block length */
-    pub PartBlockRead: u8,    /* Partial blocks for read allowed */
-    pub WrBlockMisalign: u8,  /* Write block misalignment */
-    pub RdBlockMisalign: u8,  /* Read block misalignment */
-    pub DSRImpl: u8,          /* DSR implemented */
-    pub Reserved2: u8,        /* Reserved */
-    pub DeviceSize: u32,      /* Device Size */
-    //MaxRdCurrentVDDMin: u8,   /* Max. read current @ VDD min */
-    //MaxRdCurrentVDDMax: u8,   /* Max. read current @ VDD max */
-    //MaxWrCurrentVDDMin: u8,   /* Max. write current @ VDD min */
-    //MaxWrCurrentVDDMax: u8,   /* Max. write current @ VDD max */
-    //DeviceSizeMul: u8,        /* Device size multiplier */
-    pub EraseGrSize: u8,         /* Erase group size */
-    pub EraseGrMul: u8,          /* Erase group size multiplier */
-    pub WrProtectGrSize: u8,     /* Write protect group size */
-    pub WrProtectGrEnable: u8,   /* Write protect group enable */
-    pub ManDeflECC: u8,          /* Manufacturer default ECC */
-    pub WrSpeedFact: u8,         /* Write speed factor */
-    pub MaxWrBlockLen: u8,       /* Max. write data block length */
-    pub WriteBlockPaPartial: u8, /* Partial blocks for write allowed */
-    pub Reserved3: u8,           /* Reserded */
-    pub ContentProtectAppli: u8, /* Content protection application */
-    pub FileFormatGroup: u8,     /* File format group */
-    pub CopyFlag: u8,            /* Copy flag (OTP) */
-    pub PermWrProtect: u8,       /* Permanent write protection */
-    pub TempWrProtect: u8,       /* Temporary write protection */
-    pub FileFormat: u8,          /* File Format */
-    pub ECC: u8,                 /* ECC code */
-    pub CSD_CRC: u8,             /* CSD CRC */
-    pub Reserved4: u8,           /* always 1*/
-}
-
-/**
- * Card Identification Data: CID Register
- */
-#[derive(Debug, Copy, Clone)]
-pub struct SDCardCID {
-    pub ManufacturerID: u8, /* ManufacturerID */
-    pub OEM_AppliID: u16,   /* OEM/Application ID */
-    pub ProdName1: u32,     /* Product Name part1 */
-    pub ProdName2: u8,      /* Product Name part2*/
-    pub ProdRev: u8,        /* Product Revision */
-    pub ProdSN: u32,        /* Product Serial Number */
-    pub Reserved1: u8,      /* Reserved1 */
-    pub ManufactDate: u16,  /* Manufacturing Date */
-    pub CID_CRC: u8,        /* CID CRC */
-    pub Reserved2: u8,      /* always 1 */
-}
-
-/**
- * Card information
- */
-#[derive(Debug, Copy, Clone)]
-pub struct SDCardInfo {
-    pub SD_csd: SDCardCSD,
-    pub SD_cid: SDCardCID,
-    pub CardCapacity: u64,  /* Card Capacity */
-    pub CardBlockSize: u64, /* Card Block Size */
-}
-
-impl</*'a,*/ X: SPI> SDCard</*'a,*/ X> {
-    pub fn new(
-        spi: X,
-        spi_cs: u32,
-        cs_gpionum: u8, /*, dmac: &'a DMAC, channel: dma_channel*/
-    ) -> Self {
-        Self {
-            spi,
-            spi_cs,
-            cs_gpionum,
-            /*
-            dmac,
-            channel,
-             */
-        }
-    }
-
-    fn CS_HIGH(&self) {
-        gpiohs::set_pin(self.cs_gpionum, true);
-    }
-
-    fn CS_LOW(&self) {
-        gpiohs::set_pin(self.cs_gpionum, false);
-    }
-
-    fn HIGH_SPEED_ENABLE(&self) {
-        self.spi.set_clk_rate(10000000);
-    }
-
-    fn lowlevel_init(&self) {
-        gpiohs::set_direction(self.cs_gpionum, gpio::direction::OUTPUT);
-        self.spi.set_clk_rate(200000);
-    }
-
-    fn write_data(&self, data: &[u8]) {
-        self.spi.configure(
-            work_mode::MODE0,
-            frame_format::STANDARD,
-            8, /* data bits */
-            0, /* endian */
-            0, /*instruction length*/
-            0, /*address length*/
-            0, /*wait cycles*/
-            aitm::STANDARD,
-            tmod::TRANS,
-        );
-        self.spi.send_data(self.spi_cs, data);
-    }
-
-    /*
-    fn write_data_dma(&self, data: &[u32]) {
-        self.spi.configure(
-            work_mode::MODE0,
-            frame_format::STANDARD,
-            8, /* data bits */
-            0, /* endian */
-            0, /*instruction length*/
-            0, /*address length*/
-            0, /*wait cycles*/
-            aitm::STANDARD,
-            tmod::TRANS,
-        );
-        self.spi
-            .send_data_dma(self.dmac, self.channel, self.spi_cs, data);
-    }
-     */
-
-    fn read_data(&self, data: &mut [u8]) {
-        self.spi.configure(
-            work_mode::MODE0,
-            frame_format::STANDARD,
-            8, /* data bits */
-            0, /* endian */
-            0, /*instruction length*/
-            0, /*address length*/
-            0, /*wait cycles*/
-            aitm::STANDARD,
-            tmod::RECV,
-        );
-        self.spi.recv_data(self.spi_cs, data);
-    }
-
-    /*
-    fn read_data_dma(&self, data: &mut [u32]) {
-        self.spi.configure(
-            work_mode::MODE0,
-            frame_format::STANDARD,
-            8, /* data bits */
-            0, /* endian */
-            0, /*instruction length*/
-            0, /*address length*/
-            0, /*wait cycles*/
-            aitm::STANDARD,
-            tmod::RECV,
-        );
-        self.spi
-            .recv_data_dma(self.dmac, self.channel, self.spi_cs, data);
-    }
-     */
-
-    /*
-     * Send 5 bytes command to the SD card.
-     * @param  cmd: The user expected command to send to SD card.
-     * @param  arg: The command argument.
-     * @param  crc: The CRC.
-     * @retval None
-     */
-    fn send_cmd(&self, cmd: CMD, arg: u32, crc: u8) {
-        /* SD chip select low */
-        self.CS_LOW();
-        /* Send the Cmd bytes */
-        self.write_data(&[
-            /* Construct byte 1 */
-            ((cmd as u8) | 0x40),
-            /* Construct byte 2 */
-            (arg >> 24) as u8,
-            /* Construct byte 3 */
-            ((arg >> 16) & 0xff) as u8,
-            /* Construct byte 4 */
-            ((arg >> 8) & 0xff) as u8,
-            /* Construct byte 5 */
-            (arg & 0xff) as u8,
-            /* Construct CRC: byte 6 */
-            crc,
-        ]);
-    }
-
-    /* Send end-command sequence to SD card */
-    fn end_cmd(&self) {
-        /* SD chip select high */
-        self.CS_HIGH();
-        /* Send the cmd byte */
-        self.write_data(&[0xff]);
-    }
-
-    /*
-     * Returns the SD response.
-     * @param  None
-     * @retval The SD Response:
-     *         - 0xFF: Sequence failed
-     *         - 0: Sequence succeed
-     */
-    fn get_response(&self) -> u8 {
-        let result = &mut [0u8];
-        let mut timeout = 0x0FFF;
-        /* Check if response is got or a timeout is happen */
-        while timeout != 0 {
-            self.read_data(result);
-            /* Right response got */
-            if result[0] != 0xFF {
-                return result[0];
-            }
-            timeout -= 1;
-        }
-        /* After time out */
-        0xFF
-    }
-
-    /*
-     * Get SD card data response.
-     * @param  None
-     * @retval The SD status: Read data response xxx0<status>1
-     *         - status 010: Data accecpted
-     *         - status 101: Data rejected due to a crc error
-     *         - status 110: Data rejected due to a Write error.
-     *         - status 111: Data rejected due to other error.
-     */
-    fn get_dataresponse(&self) -> u8 {
-        let response = &mut [0u8];
-        /* Read resonse */
-        self.read_data(response);
-        /* Mask unused bits */
-        response[0] &= 0x1F;
-        if response[0] != 0x05 {
-            return 0xFF;
-        }
-        /* Wait null data */
-        self.read_data(response);
-        while response[0] == 0 {
-            self.read_data(response);
-        }
-        /* Return response */
-        0
-    }
-
-    /*
-     * Read the CSD card register
-     *         Reading the contents of the CSD register in SPI mode is a simple
-     *         read-block transaction.
-     * @param  SD_csd: pointer on an SCD register structure
-     * @retval The SD Response:
-     *         - `Err()`: Sequence failed
-     *         - `Ok(info)`: Sequence succeed
-     */
-    fn get_csdregister(&self) -> Result<SDCardCSD, ()> {
-        let mut csd_tab = [0u8; 18];
-        /* Send CMD9 (CSD register) */
-        self.send_cmd(CMD::CMD9, 0, 0);
-        /* Wait for response in the R1 format (0x00 is no errors) */
-        if self.get_response() != 0x00 {
-            self.end_cmd();
-            return Err(());
-        }
-        if self.get_response() != SD_START_DATA_SINGLE_BLOCK_READ {
-            self.end_cmd();
-            return Err(());
-        }
-        /* Store CSD register value on csd_tab */
-        /* Get CRC bytes (not really needed by us, but required by SD) */
-        self.read_data(&mut csd_tab);
-        self.end_cmd();
-        /* see also: https://cdn-shop.adafruit.com/datasheets/TS16GUSDHC6.pdf */
-        Ok(SDCardCSD {
-            /* Byte 0 */
-            CSDStruct: (csd_tab[0] & 0xC0) >> 6,
-            SysSpecVersion: (csd_tab[0] & 0x3C) >> 2,
-            Reserved1: csd_tab[0] & 0x03,
-            /* Byte 1 */
-            TAAC: csd_tab[1],
-            /* Byte 2 */
-            NSAC: csd_tab[2],
-            /* Byte 3 */
-            MaxBusClkFrec: csd_tab[3],
-            /* Byte 4, 5 */
-            CardComdClasses: (u16::from(csd_tab[4]) << 4) | ((u16::from(csd_tab[5]) & 0xF0) >> 4),
-            /* Byte 5 */
-            RdBlockLen: csd_tab[5] & 0x0F,
-            /* Byte 6 */
-            PartBlockRead: (csd_tab[6] & 0x80) >> 7,
-            WrBlockMisalign: (csd_tab[6] & 0x40) >> 6,
-            RdBlockMisalign: (csd_tab[6] & 0x20) >> 5,
-            DSRImpl: (csd_tab[6] & 0x10) >> 4,
-            Reserved2: 0,
-            // DeviceSize: (csd_tab[6] & 0x03) << 10,
-            /* Byte 7, 8, 9 */
-            DeviceSize: ((u32::from(csd_tab[7]) & 0x3F) << 16)
-                | (u32::from(csd_tab[8]) << 8)
-                | u32::from(csd_tab[9]),
-            /* Byte 10 */
-            EraseGrSize: (csd_tab[10] & 0x40) >> 6,
-            /* Byte 10, 11 */
-            EraseGrMul: ((csd_tab[10] & 0x3F) << 1) | ((csd_tab[11] & 0x80) >> 7),
-            /* Byte 11 */
-            WrProtectGrSize: (csd_tab[11] & 0x7F),
-            /* Byte 12 */
-            WrProtectGrEnable: (csd_tab[12] & 0x80) >> 7,
-            ManDeflECC: (csd_tab[12] & 0x60) >> 5,
-            WrSpeedFact: (csd_tab[12] & 0x1C) >> 2,
-            /* Byte 12,13 */
-            MaxWrBlockLen: ((csd_tab[12] & 0x03) << 2) | ((csd_tab[13] & 0xC0) >> 6),
-            /* Byte 13 */
-            WriteBlockPaPartial: (csd_tab[13] & 0x20) >> 5,
-            Reserved3: 0,
-            ContentProtectAppli: (csd_tab[13] & 0x01),
-            /* Byte 14 */
-            FileFormatGroup: (csd_tab[14] & 0x80) >> 7,
-            CopyFlag: (csd_tab[14] & 0x40) >> 6,
-            PermWrProtect: (csd_tab[14] & 0x20) >> 5,
-            TempWrProtect: (csd_tab[14] & 0x10) >> 4,
-            FileFormat: (csd_tab[14] & 0x0C) >> 2,
-            ECC: (csd_tab[14] & 0x03),
-            /* Byte 15 */
-            CSD_CRC: (csd_tab[15] & 0xFE) >> 1,
-            Reserved4: 1,
-            /* Return the reponse */
-        })
-    }
-
-    /*
-     * Read the CID card register.
-     *         Reading the contents of the CID register in SPI mode is a simple
-     *         read-block transaction.
-     * @param  SD_cid: pointer on an CID register structure
-     * @retval The SD Response:
-     *         - `Err()`: Sequence failed
-     *         - `Ok(info)`: Sequence succeed
-     */
-    fn get_cidregister(&self) -> Result<SDCardCID, ()> {
-        let mut cid_tab = [0u8; 18];
-        /* Send CMD10 (CID register) */
-        self.send_cmd(CMD::CMD10, 0, 0);
-        /* Wait for response in the R1 format (0x00 is no errors) */
-        if self.get_response() != 0x00 {
-            self.end_cmd();
-            return Err(());
-        }
-        if self.get_response() != SD_START_DATA_SINGLE_BLOCK_READ {
-            self.end_cmd();
-            return Err(());
-        }
-        /* Store CID register value on cid_tab */
-        /* Get CRC bytes (not really needed by us, but required by SD) */
-        self.read_data(&mut cid_tab);
-        self.end_cmd();
-        Ok(SDCardCID {
-            /* Byte 0 */
-            ManufacturerID: cid_tab[0],
-            /* Byte 1, 2 */
-            OEM_AppliID: (u16::from(cid_tab[1]) << 8) | u16::from(cid_tab[2]),
-            /* Byte 3, 4, 5, 6 */
-            ProdName1: (u32::from(cid_tab[3]) << 24)
-                | (u32::from(cid_tab[4]) << 16)
-                | (u32::from(cid_tab[5]) << 8)
-                | u32::from(cid_tab[6]),
-            /* Byte 7 */
-            ProdName2: cid_tab[7],
-            /* Byte 8 */
-            ProdRev: cid_tab[8],
-            /* Byte 9, 10, 11, 12 */
-            ProdSN: (u32::from(cid_tab[9]) << 24)
-                | (u32::from(cid_tab[10]) << 16)
-                | (u32::from(cid_tab[11]) << 8)
-                | u32::from(cid_tab[12]),
-            /* Byte 13, 14 */
-            Reserved1: (cid_tab[13] & 0xF0) >> 4,
-            ManufactDate: ((u16::from(cid_tab[13]) & 0x0F) << 8) | u16::from(cid_tab[14]),
-            /* Byte 15 */
-            CID_CRC: (cid_tab[15] & 0xFE) >> 1,
-            Reserved2: 1,
-        })
-    }
-
-    /*
-     * Returns information about specific card.
-     * @param  cardinfo: pointer to a SD_CardInfo structure that contains all SD
-     *         card information.
-     * @retval The SD Response:
-     *         - `Err(())`: Sequence failed
-     *         - `Ok(info)`: Sequence succeed
-     */
-    fn get_cardinfo(&self) -> Result<SDCardInfo, ()> {
-        let mut info = SDCardInfo {
-            SD_csd: self.get_csdregister()?,
-            SD_cid: self.get_cidregister()?,
-            CardCapacity: 0,
-            CardBlockSize: 0,
-        };
-        info.CardBlockSize = 1 << u64::from(info.SD_csd.RdBlockLen);
-        info.CardCapacity = (u64::from(info.SD_csd.DeviceSize) + 1) * 1024 * info.CardBlockSize;
-
-        Ok(info)
-    }
-
-    /*
-     * Initializes the SD/SD communication in SPI mode.
-     * @param  None
-     * @retval The SD Response info if succeeeded, otherwise Err
-     */
-    pub fn init(&self) -> Result<SDCardInfo, InitError> {
-        /* Initialize SD_SPI */
-        self.lowlevel_init();
-        /* SD chip select high */
-        self.CS_HIGH();
-        /* NOTE: this reset doesn't always seem to work if the SD access was broken off in the
-         * middle of an operation: CMDFailed(CMD0, 127). */
-
-        /* Send dummy byte 0xFF, 10 times with CS high */
-        /* Rise CS and MOSI for 80 clocks cycles */
-        /* Send dummy byte 0xFF */
-        self.write_data(&[0xff; 10]);
-        /*------------Put SD in SPI mode--------------*/
-        /* SD initialized and set to SPI mode properly */
-
-        /* Send software reset */
-        self.send_cmd(CMD::CMD0, 0, 0x95);
-        let result = self.get_response();
-        self.end_cmd();
-        if result != 0x01 {
-            return Err(InitError::CMDFailed(CMD::CMD0, result));
-        }
-
-        /* Check voltage range */
-        self.send_cmd(CMD::CMD8, 0x01AA, 0x87);
-        /* 0x01 or 0x05 */
-        let result = self.get_response();
-        let mut frame = [0u8; 4];
-        self.read_data(&mut frame);
-        self.end_cmd();
-        if result != 0x01 {
-            return Err(InitError::CMDFailed(CMD::CMD8, result));
-        }
-        let mut index = 255;
-        while index != 0 {
-            /* <ACMD> */
-            self.send_cmd(CMD::CMD55, 0, 0);
-            let result = self.get_response();
-            self.end_cmd();
-            if result != 0x01 {
-                return Err(InitError::CMDFailed(CMD::CMD55, result));
-            }
-            /* Initiate SDC initialization process */
-            self.send_cmd(CMD::ACMD41, 0x40000000, 0);
-            let result = self.get_response();
-            self.end_cmd();
-            if result == 0x00 {
-                break;
-            }
-            index -= 1;
-        }
-        if index == 0 {
-            return Err(InitError::CMDFailed(CMD::ACMD41, result));
-        }
-        index = 255;
-        let mut frame = [0u8; 4];
-        while index != 0 {
-            /* Read OCR */
-            self.send_cmd(CMD::CMD58, 0, 1);
-            let result = self.get_response();
-            self.read_data(&mut frame);
-            self.end_cmd();
-            if result == 0 {
-                break;
-            }
-            index -= 1;
-        }
-        if index == 0 {
-            return Err(InitError::CMDFailed(CMD::CMD58, result));
-        }
-        if (frame[0] & 0x40) == 0 {
-            return Err(InitError::CardCapacityStatusNotSet(frame));
-        }
-        self.HIGH_SPEED_ENABLE();
-        self.get_cardinfo()
-            .map_err(|_| InitError::CannotGetCardInfo)
-    }
-
-    /*
-     * Reads a block of data from the SD.
-     * @param  data_buf: slice that receives the data read from the SD.
-     * @param  sector: SD's internal address to read from.
-     * @retval The SD Response:
-     *         - `Err(())`: Sequence failed
-     *         - `Ok(())`: Sequence succeed
-     */
-    pub fn read_sector(&self, data_buf: &mut [u8], sector: u32) -> Result<(), ()> {
-        assert!(data_buf.len() >= SEC_LEN && (data_buf.len() % SEC_LEN) == 0);
-        /* Send CMD17 to read one block, or CMD18 for multiple */
-        let flag = if data_buf.len() == SEC_LEN {
-            self.send_cmd(CMD::CMD17, sector, 0);
-            false
-        } else {
-            self.send_cmd(CMD::CMD18, sector, 0);
-            true
-        };
-        /* Check if the SD acknowledged the read block command: R1 response (0x00: no errors) */
-        if self.get_response() != 0x00 {
-            self.end_cmd();
-            return Err(());
-        }
-        let mut error = false;
-        //let mut dma_chunk = [0u32; SEC_LEN];
-        let mut tmp_chunk = [0u8; SEC_LEN];
-        for chunk in data_buf.chunks_mut(SEC_LEN) {
-            if self.get_response() != SD_START_DATA_SINGLE_BLOCK_READ {
-                error = true;
-                break;
-            }
-            /* Read the SD block data : read NumByteToRead data */
-            //self.read_data_dma(&mut dma_chunk);
-            self.read_data(&mut tmp_chunk);
-            /* Place the data received as u32 units from DMA into the u8 target buffer */
-            for (a, b) in chunk.iter_mut().zip(/*dma_chunk*/ tmp_chunk.iter()) {
-                //*a = (b & 0xff) as u8;
-                *a = *b;
-            }
-            /* Get CRC bytes (not really needed by us, but required by SD) */
-            let mut frame = [0u8; 2];
-            self.read_data(&mut frame);
-        }
-        self.end_cmd();
-        if flag {
-            self.send_cmd(CMD::CMD12, 0, 0);
-            self.get_response();
-            self.end_cmd();
-            self.end_cmd();
-        }
-        /* It is an error if not everything requested was read */
-        if error {
-            Err(())
-        } else {
-            Ok(())
-        }
-    }
-
-    /*
-     * Writes a block to the SD
-     * @param  data_buf: slice containing the data to be written to the SD.
-     * @param  sector: address to write on.
-     * @retval The SD Response:
-     *         - `Err(())`: Sequence failed
-     *         - `Ok(())`: Sequence succeed
-     */
-    pub fn write_sector(&self, data_buf: &[u8], sector: u32) -> Result<(), ()> {
-        assert!(data_buf.len() >= SEC_LEN && (data_buf.len() % SEC_LEN) == 0);
-        let mut frame = [0xff, 0x00];
-        if data_buf.len() == SEC_LEN {
-            frame[1] = SD_START_DATA_SINGLE_BLOCK_WRITE;
-            self.send_cmd(CMD::CMD24, sector, 0);
-        } else {
-            frame[1] = SD_START_DATA_MULTIPLE_BLOCK_WRITE;
-            self.send_cmd(
-                CMD::ACMD23,
-                (data_buf.len() / SEC_LEN).try_into().unwrap(),
-                0,
-            );
-            self.get_response();
-            self.end_cmd();
-            self.send_cmd(CMD::CMD25, sector, 0);
-        }
-        /* Check if the SD acknowledged the write block command: R1 response (0x00: no errors) */
-        if self.get_response() != 0x00 {
-            self.end_cmd();
-            return Err(());
-        }
-        //let mut dma_chunk = [0u32; SEC_LEN];
-        let mut tmp_chunk = [0u8; SEC_LEN];
-        for chunk in data_buf.chunks(SEC_LEN) {
-            /* Send the data token to signify the start of the data */
-            self.write_data(&frame);
-            /* Write the block data to SD : write count data by block */
-            for (a, &b) in /*dma_chunk*/ tmp_chunk.iter_mut().zip(chunk.iter()) {
-                //*a = b.into();
-                *a = b;
-            }
-            //self.write_data_dma(&mut dma_chunk);
-            self.write_data(&tmp_chunk);
-            /* Put dummy CRC bytes */
-            self.write_data(&[0xff, 0xff]);
-            /* Read data response */
-            if self.get_dataresponse() != 0x00 {
-                self.end_cmd();
-                return Err(());
-            }
-        }
-        self.end_cmd();
-        self.end_cmd();
-        Ok(())
-    }
-}
-
-/** GPIOHS GPIO number to use for controlling the SD card CS pin */
-const SD_CS_GPIONUM: u8 = 7;
-/** CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything
- * in the FPIOA */
-const SD_CS: u32 = 3;
-
-/** Connect pins to internal functions */
-fn io_init() {
-    fpioa::set_function(io::SPI0_SCLK, fpioa::function::SPI0_SCLK);
-    fpioa::set_function(io::SPI0_MOSI, fpioa::function::SPI0_D0);
-    fpioa::set_function(io::SPI0_MISO, fpioa::function::SPI0_D1);
-    fpioa::set_function(io::SPI0_CS0, fpioa::function::gpiohs(SD_CS_GPIONUM));
-    fpioa::set_io_pull(io::SPI0_CS0, fpioa::pull::DOWN); // GPIO output=pull down
-}
-
-lazy_static! {
-    static ref PERIPHERALS: UPSafeCell<Peripherals> =
-        unsafe { UPSafeCell::new(Peripherals::take().unwrap()) };
-}
-
-fn init_sdcard() -> SDCard<SPIImpl<SPI0>> {
-    // wait previous output
-    usleep(100000);
-    let peripherals = unsafe { Peripherals::steal() };
-    sysctl::pll_set_freq(sysctl::pll::PLL0, 800_000_000).unwrap();
-    sysctl::pll_set_freq(sysctl::pll::PLL1, 300_000_000).unwrap();
-    sysctl::pll_set_freq(sysctl::pll::PLL2, 45_158_400).unwrap();
-    let clocks = k210_hal::clock::Clocks::new();
-    peripherals.UARTHS.configure(115_200.bps(), &clocks);
-    io_init();
-
-    let spi = peripherals.SPI0.constrain();
-    let sd = SDCard::new(spi, SD_CS, SD_CS_GPIONUM);
-    let info = sd.init().unwrap();
-    let num_sectors = info.CardCapacity / 512;
-    assert!(num_sectors > 0);
-
-    println!("init sdcard!");
-    sd
-}
-
-pub struct SDCardWrapper(UPSafeCell<SDCard<SPIImpl<SPI0>>>);
-
-impl SDCardWrapper {
-    pub fn new() -> Self {
-        unsafe { Self(UPSafeCell::new(init_sdcard())) }
-    }
-}
-
-impl BlockDevice for SDCardWrapper {
-    fn read_block(&self, block_id: usize, buf: &mut [u8]) {
-        self.0
-            .exclusive_access()
-            .read_sector(buf, block_id as u32)
-            .unwrap();
-    }
-    fn write_block(&self, block_id: usize, buf: &[u8]) {
-        self.0
-            .exclusive_access()
-            .write_sector(buf, block_id as u32)
-            .unwrap();
-    }
-}
-
-
\ No newline at end of file