From 69eac31e05a0989133d6c9f80d4cdfb8a2870ace Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Mon, 5 Jul 2021 23:59:42 +0200 Subject: [PATCH] Switch to tock-registers: Sources for tutorial 15 --- .../Cargo.lock | 25 ++++++------------- .../Cargo.toml | 10 ++++---- .../src/_arch/aarch64/cpu/boot.rs | 3 ++- .../src/_arch/aarch64/cpu/smp.rs | 3 ++- .../src/_arch/aarch64/exception.rs | 7 ++++-- .../_arch/aarch64/exception/asynchronous.rs | 13 +++++----- .../src/_arch/aarch64/memory/mmu.rs | 3 ++- .../aarch64/memory/mmu/translation_table.rs | 10 +++++--- .../src/_arch/aarch64/time.rs | 3 ++- .../src/bsp/device_driver/arm/gicv2/gicc.rs | 6 ++++- .../src/bsp/device_driver/arm/gicv2/gicd.rs | 6 ++++- .../src/bsp/device_driver/bcm/bcm2xxx_gpio.rs | 6 ++++- .../peripheral_ic.rs | 6 ++++- .../device_driver/bcm/bcm2xxx_pl011_uart.rs | 7 +++++- .../src/lib.rs | 2 +- 15 files changed, 67 insertions(+), 43 deletions(-) diff --git a/15_virtual_mem_part3_precomputed_tables/Cargo.lock b/15_virtual_mem_part3_precomputed_tables/Cargo.lock index cc404144..d91bc03d 100644 --- a/15_virtual_mem_part3_precomputed_tables/Cargo.lock +++ b/15_virtual_mem_part3_precomputed_tables/Cargo.lock @@ -4,11 +4,11 @@ version = 3 [[package]] name = "cortex-a" -version = "5.1.6" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecefc30975eb87afc5a810d4b2305c0ec29e607ea97e51b2ecd80766e9268d28" +checksum = "d25a057b35117d030453cd322f7adbdd331e886bc5bde46cdae656952c4feba6" dependencies = [ - "register", + "tock-registers", ] [[package]] @@ -17,9 +17,9 @@ version = "0.15.0" dependencies = [ "cortex-a", "qemu-exit", - "register", "test-macros", "test-types", + "tock-registers", ] [[package]] @@ -33,9 +33,9 @@ dependencies = [ [[package]] name = "qemu-exit" -version = "1.0.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702abe3c3255be20a4d67bda326c4117081a49a57afaf752de4845091bc6b476" +checksum = "e179da212ad772061d4120ad2a86a019f929362a477582d8c8014dbf7509cd83" [[package]] name = "quote" @@ -46,15 +46,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "register" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a247de29ab7cc8f5006cfe775c4a81c704f9914c5e2a79696862e643135433" -dependencies = [ - "tock-registers", -] - [[package]] name = "syn" version = "1.0.68" @@ -82,9 +73,9 @@ version = "0.1.0" [[package]] name = "tock-registers" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" +checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-xid" diff --git a/15_virtual_mem_part3_precomputed_tables/Cargo.toml b/15_virtual_mem_part3_precomputed_tables/Cargo.toml index 4449da65..8ce927a2 100644 --- a/15_virtual_mem_part3_precomputed_tables/Cargo.toml +++ b/15_virtual_mem_part3_precomputed_tables/Cargo.toml @@ -9,8 +9,8 @@ lto = true [features] default = [] -bsp_rpi3 = ["register"] -bsp_rpi4 = ["register"] +bsp_rpi3 = ["tock-registers"] +bsp_rpi4 = ["tock-registers"] test_build = ["qemu-exit"] ##-------------------------------------------------------------------------------------------------- @@ -21,12 +21,12 @@ test_build = ["qemu-exit"] test-types = { path = "test-types" } # Optional dependencies -register = { version = "1.x.x", features = ["no_std_unit_tests"], optional = true } -qemu-exit = { version = "1.x.x", optional = true } +tock-registers = { version = "0.7.x", default-features = false, features = ["register_types"], optional = true } +qemu-exit = { version = "2.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "5.x.x" } +cortex-a = { version = "6.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/boot.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/boot.rs index f275c792..d22b6187 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/boot.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/boot.rs @@ -13,7 +13,8 @@ use crate::{cpu, memory, memory::Address}; use core::intrinsics::unlikely; -use cortex_a::{asm, regs::*}; +use cortex_a::{asm, registers::*}; +use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. global_asm!(include_str!("boot.s")); diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/smp.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/smp.rs index b9fdd0f7..0ea9b876 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/smp.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,8 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::regs::*; +use cortex_a::registers::*; +use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception.rs index 4a2c8de9..1aac6545 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception.rs @@ -17,8 +17,11 @@ use crate::{ memory::Address, }; use core::{cell::UnsafeCell, fmt}; -use cortex_a::{barrier, regs::*}; -use register::InMemoryRegister; +use cortex_a::{asm::barrier, registers::*}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + registers::InMemoryRegister, +}; // Assembly counterpart to this file. global_asm!(include_str!("exception.s")); diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception/asynchronous.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception/asynchronous.rs index a4b1a548..4e79cc8a 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception/asynchronous.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/exception/asynchronous.rs @@ -11,7 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous -use cortex_a::regs::*; +use cortex_a::registers::*; +use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- // Private Definitions @@ -22,7 +23,7 @@ mod daif_bits { } trait DaifField { - fn daif_field() -> register::Field; + fn daif_field() -> tock_registers::fields::Field; } struct Debug; @@ -35,25 +36,25 @@ struct FIQ; //-------------------------------------------------------------------------------------------------- impl DaifField for Debug { - fn daif_field() -> register::Field { + fn daif_field() -> tock_registers::fields::Field { DAIF::D } } impl DaifField for SError { - fn daif_field() -> register::Field { + fn daif_field() -> tock_registers::fields::Field { DAIF::A } } impl DaifField for IRQ { - fn daif_field() -> register::Field { + fn daif_field() -> tock_registers::fields::Field { DAIF::I } } impl DaifField for FIQ { - fn daif_field() -> register::Field { + fn daif_field() -> tock_registers::fields::Field { DAIF::F } } diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu.rs index 49e6630e..86b5337c 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu.rs @@ -18,7 +18,8 @@ use crate::{ memory::{mmu::TranslationGranule, Address, Physical, Virtual}, }; use core::intrinsics::unlikely; -use cortex_a::{barrier, regs::*}; +use cortex_a::{asm::barrier, registers::*}; +use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- // Private Definitions diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs index 6b7227b3..d4fa1f39 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -24,7 +24,11 @@ use crate::{ }, }; use core::convert::{self, TryInto}; -use register::{register_bitfields, InMemoryRegister}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + register_bitfields, + registers::InMemoryRegister, +}; //-------------------------------------------------------------------------------------------------- // Private Definitions @@ -180,7 +184,7 @@ impl TableDescriptor { /// Convert the kernel's generic memory attributes to HW-specific attributes of the MMU. impl convert::From - for register::FieldValue + for tock_registers::fields::FieldValue { fn from(attribute_fields: AttributeFields) -> Self { // Memory attributes. @@ -399,7 +403,7 @@ impl memory::mmu::translation_table::interface::Transla return Err("Virtual page is already mapped"); } - *page_descriptor = PageDescriptor::from_output_addr(phys_page.as_ptr(), &attr); + *page_descriptor = PageDescriptor::from_output_addr(phys_page.as_ptr(), attr); } Ok(()) diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/time.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/time.rs index 63017305..7a7647ef 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/time.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/time.rs @@ -13,7 +13,8 @@ use crate::{time, warn}; use core::time::Duration; -use cortex_a::{barrier, regs::*}; +use cortex_a::{asm::barrier, registers::*}; +use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- // Private Definitions diff --git a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicc.rs b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicc.rs index a1279f95..abfadb0c 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicc.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicc.rs @@ -7,7 +7,11 @@ use crate::{ bsp::device_driver::common::MMIODerefWrapper, exception, synchronization::InitStateLock, }; -use register::{mmio::*, register_bitfields, register_structs}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + register_bitfields, register_structs, + registers::ReadWrite, +}; //-------------------------------------------------------------------------------------------------- // Private Definitions diff --git a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicd.rs b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicd.rs index 5f56e54a..ae7861c9 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicd.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/arm/gicv2/gicd.rs @@ -12,7 +12,11 @@ use crate::{ state, synchronization, synchronization::{IRQSafeNullLock, InitStateLock}, }; -use register::{mmio::*, register_bitfields, register_structs}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + register_bitfields, register_structs, + registers::{ReadOnly, ReadWrite}, +}; //-------------------------------------------------------------------------------------------------- // Private Definitions diff --git a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs index e444812b..9bdc73f8 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs @@ -9,7 +9,11 @@ use crate::{ synchronization::IRQSafeNullLock, }; use core::sync::atomic::{AtomicUsize, Ordering}; -use register::{mmio::*, register_bitfields, register_structs}; +use tock_registers::{ + interfaces::{ReadWriteable, Writeable}, + register_bitfields, register_structs, + registers::ReadWrite, +}; //-------------------------------------------------------------------------------------------------- // Private Definitions diff --git a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_interrupt_controller/peripheral_ic.rs b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_interrupt_controller/peripheral_ic.rs index abc3af71..5934e6dd 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_interrupt_controller/peripheral_ic.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_interrupt_controller/peripheral_ic.rs @@ -10,7 +10,11 @@ use crate::{ driver, exception, memory, synchronization, synchronization::{IRQSafeNullLock, InitStateLock}, }; -use register::{mmio::*, register_structs}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + register_structs, + registers::{ReadOnly, WriteOnly}, +}; //-------------------------------------------------------------------------------------------------- // Private Definitions diff --git a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs index 3adb9137..13664712 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs @@ -17,7 +17,11 @@ use core::{ fmt, sync::atomic::{AtomicUsize, Ordering}, }; -use register::{mmio::*, register_bitfields, register_structs}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + register_bitfields, register_structs, + registers::{ReadOnly, ReadWrite, WriteOnly}, +}; //-------------------------------------------------------------------------------------------------- // Private Definitions @@ -84,6 +88,7 @@ register_bitfields! { LCR_H [ /// Word length. These bits indicate the number of data bits transmitted or received in a /// frame. + #[allow(clippy::enum_variant_names)] WLEN OFFSET(5) NUMBITS(2) [ FiveBit = 0b00, SixBit = 0b01, diff --git a/15_virtual_mem_part3_precomputed_tables/src/lib.rs b/15_virtual_mem_part3_precomputed_tables/src/lib.rs index 1b2cb367..8a029738 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/lib.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/lib.rs @@ -110,8 +110,8 @@ #![allow(incomplete_features)] #![feature(asm)] #![feature(const_evaluatable_checked)] -#![feature(const_fn)] #![feature(const_fn_fn_ptr_basics)] +#![feature(const_fn_trait_bound)] #![feature(const_generics)] #![feature(const_panic)] #![feature(core_intrinsics)]