diff --git a/04_zero_overhead_abstraction/Cargo.lock b/04_zero_overhead_abstraction/Cargo.lock index 8ce45336..b8ad8ed3 100644 --- a/04_zero_overhead_abstraction/Cargo.lock +++ b/04_zero_overhead_abstraction/Cargo.lock @@ -2,17 +2,17 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -23,19 +23,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/04_zero_overhead_abstraction/Cargo.toml b/04_zero_overhead_abstraction/Cargo.toml index fbdd786b..e091d173 100644 --- a/04_zero_overhead_abstraction/Cargo.toml +++ b/04_zero_overhead_abstraction/Cargo.toml @@ -17,4 +17,4 @@ bsp_rpi4 = ["cortex-a"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } diff --git a/04_zero_overhead_abstraction/README.md b/04_zero_overhead_abstraction/README.md index 541c3eba..079c4981 100644 --- a/04_zero_overhead_abstraction/README.md +++ b/04_zero_overhead_abstraction/README.md @@ -26,7 +26,7 @@ diff -uNr 03_hacky_hello_world/Cargo.toml 04_zero_overhead_abstraction/Cargo.tom r0 = "0.2.*" + +# Optional dependencies -+cortex-a = { version = "2.*", optional = true } ++cortex-a = { version = "2.8.x", optional = true } diff -uNr 03_hacky_hello_world/src/arch/aarch64/start.S 04_zero_overhead_abstraction/src/arch/aarch64/start.S --- 03_hacky_hello_world/src/arch/aarch64/start.S diff --git a/04_zero_overhead_abstraction/kernel b/04_zero_overhead_abstraction/kernel index d7385d48..b08c294d 100755 Binary files a/04_zero_overhead_abstraction/kernel and b/04_zero_overhead_abstraction/kernel differ diff --git a/04_zero_overhead_abstraction/kernel8.img b/04_zero_overhead_abstraction/kernel8.img index 60f5c5e4..fea7da78 100755 Binary files a/04_zero_overhead_abstraction/kernel8.img and b/04_zero_overhead_abstraction/kernel8.img differ diff --git a/05_safe_globals/Cargo.lock b/05_safe_globals/Cargo.lock index 8ce45336..b8ad8ed3 100644 --- a/05_safe_globals/Cargo.lock +++ b/05_safe_globals/Cargo.lock @@ -2,17 +2,17 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -23,19 +23,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/05_safe_globals/Cargo.toml b/05_safe_globals/Cargo.toml index fbdd786b..e091d173 100644 --- a/05_safe_globals/Cargo.toml +++ b/05_safe_globals/Cargo.toml @@ -17,4 +17,4 @@ bsp_rpi4 = ["cortex-a"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } diff --git a/05_safe_globals/kernel b/05_safe_globals/kernel index 4304d46e..f72faf2b 100755 Binary files a/05_safe_globals/kernel and b/05_safe_globals/kernel differ diff --git a/05_safe_globals/kernel8.img b/05_safe_globals/kernel8.img index 817b1495..1dc7c953 100755 Binary files a/05_safe_globals/kernel8.img and b/05_safe_globals/kernel8.img differ diff --git a/06_drivers_gpio_uart/Cargo.lock b/06_drivers_gpio_uart/Cargo.lock index ce4a9f78..d214801d 100644 --- a/06_drivers_gpio_uart/Cargo.lock +++ b/06_drivers_gpio_uart/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/06_drivers_gpio_uart/Cargo.toml b/06_drivers_gpio_uart/Cargo.toml index cf0f0636..111fe74b 100644 --- a/06_drivers_gpio_uart/Cargo.toml +++ b/06_drivers_gpio_uart/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/06_drivers_gpio_uart/README.md b/06_drivers_gpio_uart/README.md index e779d737..6ffbab76 100644 --- a/06_drivers_gpio_uart/README.md +++ b/06_drivers_gpio_uart/README.md @@ -99,8 +99,8 @@ diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml r0 = "0.2.*" # Optional dependencies - cortex-a = { version = "2.*", optional = true } -+register = { version = "0.3.*", optional = true } + cortex-a = { version = "2.8.x", optional = true } ++register = { version = "0.4.x", optional = true } diff -uNr 05_safe_globals/src/arch/aarch64.rs 06_drivers_gpio_uart/src/arch/aarch64.rs --- 05_safe_globals/src/arch/aarch64.rs @@ -125,7 +125,7 @@ diff -uNr 05_safe_globals/src/arch/aarch64.rs 06_drivers_gpio_uart/src/arch/aarc diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_gpio.rs 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_gpio.rs --- 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_gpio.rs -@@ -0,0 +1,157 @@ +@@ -0,0 +1,145 @@ +// SPDX-License-Identifier: MIT +// +// Copyright (c) 2018-2019 Andre Richter @@ -134,7 +134,7 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_gpio.rs 06_drivers_gpio_uar + +use crate::{arch, arch::sync::NullLock, interface}; +use core::ops; -+use register::{mmio::ReadWrite, register_bitfields}; ++use register::{mmio::ReadWrite, register_bitfields, register_structs}; + +// GPIO registers. +// @@ -177,33 +177,21 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_gpio.rs 06_drivers_gpio_uar + ] +} + -+#[allow(non_snake_case)] -+#[repr(C)] -+pub struct RegisterBlock { -+ pub GPFSEL0: ReadWrite, // 0x00 -+ pub GPFSEL1: ReadWrite, // 0x04 -+ pub GPFSEL2: ReadWrite, // 0x08 -+ pub GPFSEL3: ReadWrite, // 0x0C -+ pub GPFSEL4: ReadWrite, // 0x10 -+ pub GPFSEL5: ReadWrite, // 0x14 -+ __reserved_0: u32, // 0x18 -+ GPSET0: ReadWrite, // 0x1C -+ GPSET1: ReadWrite, // 0x20 -+ __reserved_1: u32, // -+ GPCLR0: ReadWrite, // 0x28 -+ __reserved_2: [u32; 2], // -+ GPLEV0: ReadWrite, // 0x34 -+ GPLEV1: ReadWrite, // 0x38 -+ __reserved_3: u32, // -+ GPEDS0: ReadWrite, // 0x40 -+ GPEDS1: ReadWrite, // 0x44 -+ __reserved_4: [u32; 7], // -+ GPHEN0: ReadWrite, // 0x64 -+ GPHEN1: ReadWrite, // 0x68 -+ __reserved_5: [u32; 10], // -+ pub GPPUD: ReadWrite, // 0x94 -+ pub GPPUDCLK0: ReadWrite, // 0x98 -+ pub GPPUDCLK1: ReadWrite, // 0x9C ++register_structs! { ++ #[allow(non_snake_case)] ++ RegisterBlock { ++ (0x00 => GPFSEL0: ReadWrite), ++ (0x04 => GPFSEL1: ReadWrite), ++ (0x08 => GPFSEL2: ReadWrite), ++ (0x0C => GPFSEL3: ReadWrite), ++ (0x10 => GPFSEL4: ReadWrite), ++ (0x14 => GPFSEL5: ReadWrite), ++ (0x18 => _reserved1), ++ (0x94 => GPPUD: ReadWrite), ++ (0x98 => GPPUDCLK0: ReadWrite), ++ (0x9C => GPPUDCLK1: ReadWrite), ++ (0xA0 => @END), ++ } +} + +/// The driver's private data. @@ -287,7 +275,7 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_gpio.rs 06_drivers_gpio_uar diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs --- 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs -@@ -0,0 +1,313 @@ +@@ -0,0 +1,315 @@ +// SPDX-License-Identifier: MIT +// +// Copyright (c) 2018-2019 Andre Richter @@ -296,7 +284,7 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gp + +use crate::{arch, arch::sync::NullLock, interface}; +use core::{fmt, ops}; -+use register::{mmio::*, register_bitfields}; ++use register::{mmio::*, register_bitfields, register_structs}; + +// PL011 UART registers. +// @@ -399,19 +387,21 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gp + ] +} + -+#[allow(non_snake_case)] -+#[repr(C)] -+pub struct RegisterBlock { -+ DR: ReadWrite, // 0x00 -+ __reserved_0: [u32; 5], // 0x04 -+ FR: ReadOnly, // 0x18 -+ __reserved_1: [u32; 2], // 0x1c -+ IBRD: WriteOnly, // 0x24 -+ FBRD: WriteOnly, // 0x28 -+ LCRH: WriteOnly, // 0x2C -+ CR: WriteOnly, // 0x30 -+ __reserved_2: [u32; 4], // 0x34 -+ ICR: WriteOnly, // 0x44 ++register_structs! { ++ #[allow(non_snake_case)] ++ RegisterBlock { ++ (0x00 => DR: ReadWrite), ++ (0x04 => _reserved1), ++ (0x18 => FR: ReadOnly), ++ (0x1c => _reserved2), ++ (0x24 => IBRD: WriteOnly), ++ (0x28 => FBRD: WriteOnly), ++ (0x2c => LCRH: WriteOnly), ++ (0x30 => CR: WriteOnly), ++ (0x34 => _reserved3), ++ (0x44 => ICR: WriteOnly), ++ (0x48 => @END), ++ } +} + +/// The driver's mutex protected part. diff --git a/06_drivers_gpio_uart/kernel b/06_drivers_gpio_uart/kernel index 968f61f7..6731a81e 100755 Binary files a/06_drivers_gpio_uart/kernel and b/06_drivers_gpio_uart/kernel differ diff --git a/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_gpio.rs index a9ceda61..bc66bbcc 100644 --- a/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -49,33 +49,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index 0e3c202a..812eb73c 100644 --- a/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part. diff --git a/07_uart_chainloader/Cargo.lock b/07_uart_chainloader/Cargo.lock index ce4a9f78..d214801d 100644 --- a/07_uart_chainloader/Cargo.lock +++ b/07_uart_chainloader/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/07_uart_chainloader/Cargo.toml b/07_uart_chainloader/Cargo.toml index cf0f0636..111fe74b 100644 --- a/07_uart_chainloader/Cargo.toml +++ b/07_uart_chainloader/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/07_uart_chainloader/README.md b/07_uart_chainloader/README.md index 2cca69d4..a291976b 100644 --- a/07_uart_chainloader/README.md +++ b/07_uart_chainloader/README.md @@ -162,7 +162,7 @@ diff -uNr 06_drivers_gpio_uart/src/arch/aarch64.rs 07_uart_chainloader/src/arch/ diff -uNr 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs --- 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs -@@ -277,6 +277,18 @@ +@@ -279,6 +279,18 @@ let mut r = &self.inner; r.lock(|inner| fmt::Write::write_fmt(inner, args)) } @@ -181,7 +181,7 @@ diff -uNr 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 07_uart_ } impl interface::console::Read for PL011Uart { -@@ -293,14 +305,19 @@ +@@ -295,14 +307,19 @@ } // Read one character. diff --git a/07_uart_chainloader/kernel b/07_uart_chainloader/kernel index 4e57cd28..185f5303 100755 Binary files a/07_uart_chainloader/kernel and b/07_uart_chainloader/kernel differ diff --git a/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_gpio.rs index a9ceda61..bc66bbcc 100644 --- a/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -49,33 +49,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index 3f3dfaae..27e6deca 100644 --- a/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part. diff --git a/08_timestamps/Cargo.lock b/08_timestamps/Cargo.lock index ce4a9f78..d214801d 100644 --- a/08_timestamps/Cargo.lock +++ b/08_timestamps/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/08_timestamps/Cargo.toml b/08_timestamps/Cargo.toml index cf0f0636..111fe74b 100644 --- a/08_timestamps/Cargo.toml +++ b/08_timestamps/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/08_timestamps/README.md b/08_timestamps/README.md index 08dc5f81..27b84193 100644 --- a/08_timestamps/README.md +++ b/08_timestamps/README.md @@ -239,7 +239,7 @@ diff -uNr 07_uart_chainloader/src/arch/aarch64.rs 08_timestamps/src/arch/aarch64 diff -uNr 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs --- 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ 08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs -@@ -305,7 +305,14 @@ +@@ -307,7 +307,14 @@ } // Read one character. diff --git a/08_timestamps/kernel b/08_timestamps/kernel index 8f87a370..e310920d 100755 Binary files a/08_timestamps/kernel and b/08_timestamps/kernel differ diff --git a/08_timestamps/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/08_timestamps/src/bsp/driver/bcm/bcm2xxx_gpio.rs index a9ceda61..bc66bbcc 100644 --- a/08_timestamps/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/08_timestamps/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -49,33 +49,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index a0c0d593..35417674 100644 --- a/08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part. diff --git a/09_hw_debug_JTAG/Cargo.lock b/09_hw_debug_JTAG/Cargo.lock index ce4a9f78..d214801d 100644 --- a/09_hw_debug_JTAG/Cargo.lock +++ b/09_hw_debug_JTAG/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/09_hw_debug_JTAG/Cargo.toml b/09_hw_debug_JTAG/Cargo.toml index cf0f0636..111fe74b 100644 --- a/09_hw_debug_JTAG/Cargo.toml +++ b/09_hw_debug_JTAG/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/09_hw_debug_JTAG/kernel b/09_hw_debug_JTAG/kernel index 8f87a370..e310920d 100755 Binary files a/09_hw_debug_JTAG/kernel and b/09_hw_debug_JTAG/kernel differ diff --git a/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_gpio.rs index a9ceda61..bc66bbcc 100644 --- a/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -49,33 +49,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index a0c0d593..35417674 100644 --- a/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/09_hw_debug_JTAG/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part. diff --git a/10_privilege_level/Cargo.lock b/10_privilege_level/Cargo.lock index ce4a9f78..d214801d 100644 --- a/10_privilege_level/Cargo.lock +++ b/10_privilege_level/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/10_privilege_level/Cargo.toml b/10_privilege_level/Cargo.toml index cf0f0636..111fe74b 100644 --- a/10_privilege_level/Cargo.toml +++ b/10_privilege_level/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/10_privilege_level/kernel b/10_privilege_level/kernel index 54a7ced7..8a6625d8 100755 Binary files a/10_privilege_level/kernel and b/10_privilege_level/kernel differ diff --git a/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_gpio.rs index a9ceda61..bc66bbcc 100644 --- a/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -49,33 +49,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index a0c0d593..35417674 100644 --- a/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/10_privilege_level/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part. diff --git a/11_virtual_memory/Cargo.lock b/11_virtual_memory/Cargo.lock index ce4a9f78..d214801d 100644 --- a/11_virtual_memory/Cargo.lock +++ b/11_virtual_memory/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/11_virtual_memory/Cargo.toml b/11_virtual_memory/Cargo.toml index cf0f0636..111fe74b 100644 --- a/11_virtual_memory/Cargo.toml +++ b/11_virtual_memory/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/11_virtual_memory/kernel b/11_virtual_memory/kernel index a9a29379..6335375d 100755 Binary files a/11_virtual_memory/kernel and b/11_virtual_memory/kernel differ diff --git a/11_virtual_memory/kernel8.img b/11_virtual_memory/kernel8.img index cc876c59..66e9f4fe 100755 Binary files a/11_virtual_memory/kernel8.img and b/11_virtual_memory/kernel8.img differ diff --git a/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_gpio.rs index a9ceda61..bc66bbcc 100644 --- a/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -49,33 +49,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index a0c0d593..35417674 100644 --- a/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/11_virtual_memory/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part. diff --git a/X1_JTAG_boot/Cargo.lock b/X1_JTAG_boot/Cargo.lock index ce4a9f78..d214801d 100644 --- a/X1_JTAG_boot/Cargo.lock +++ b/X1_JTAG_boot/Cargo.lock @@ -2,19 +2,19 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kernel" version = "0.1.0" dependencies = [ - "cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -24,19 +24,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "register" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tock-registers" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum cortex-a 2.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "407097a93c797547dd02da52c2afd45294173438675998d951056154f341c942" +"checksum cortex-a 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7ba44745549e86ee77de685cb4b675301ee3aac10dee37307f02adcbbef9b4" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" -"checksum register 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "469bb5ddde81d67fb8bba4e14d77689b8166cfd077abe7530591cefe29d05823" -"checksum tock-registers 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c758f5195a2e0df9d9fecf6f506506b2766ff74cf64db1e995c87e2761a5c3e2" +"checksum register 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274b546ad3fae94f529e36b1745b74a7b2f23dd34542260f721be1320761e7fc" +"checksum tock-registers 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50af9c49c55cfb4437dd78c1fada3be5d088cbe1bea641db8171283503606a70" diff --git a/X1_JTAG_boot/Cargo.toml b/X1_JTAG_boot/Cargo.toml index cf0f0636..111fe74b 100644 --- a/X1_JTAG_boot/Cargo.toml +++ b/X1_JTAG_boot/Cargo.toml @@ -17,5 +17,5 @@ bsp_rpi4 = ["cortex-a", "register"] r0 = "0.2.*" # Optional dependencies -cortex-a = { version = "2.*", optional = true } -register = { version = "0.3.*", optional = true } +cortex-a = { version = "2.8.x", optional = true } +register = { version = "0.4.x", optional = true } diff --git a/X1_JTAG_boot/Makefile b/X1_JTAG_boot/Makefile index 0595ebb7..82355dcb 100644 --- a/X1_JTAG_boot/Makefile +++ b/X1_JTAG_boot/Makefile @@ -59,8 +59,7 @@ DOCKER_EXEC_RASPBOOT_DEV = /dev/ttyUSB0 all: clean $(OUTPUT) $(CARGO_OUTPUT): $(SOURCES) - # RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" - $(XRUSTC_CMD) + RUSTFLAGS="$(RUSTFLAGS)" $(XRUSTC_CMD) $(OUTPUT): $(CARGO_OUTPUT) cp $< . diff --git a/X1_JTAG_boot/jtag_boot_rpi3.img b/X1_JTAG_boot/jtag_boot_rpi3.img index a112e6bb..a66e8d9f 100755 Binary files a/X1_JTAG_boot/jtag_boot_rpi3.img and b/X1_JTAG_boot/jtag_boot_rpi3.img differ diff --git a/X1_JTAG_boot/jtag_boot_rpi4.img b/X1_JTAG_boot/jtag_boot_rpi4.img index 9f1a1176..bdcebc12 100755 Binary files a/X1_JTAG_boot/jtag_boot_rpi4.img and b/X1_JTAG_boot/jtag_boot_rpi4.img differ diff --git a/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_gpio.rs b/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_gpio.rs index f6ef27b8..376a1318 100644 --- a/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_gpio.rs +++ b/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_gpio.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::ops; -use register::{mmio::ReadWrite, register_bitfields}; +use register::{mmio::ReadWrite, register_bitfields, register_structs}; // GPIO registers. // @@ -129,33 +129,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - pub GPFSEL0: ReadWrite, // 0x00 - pub GPFSEL1: ReadWrite, // 0x04 - pub GPFSEL2: ReadWrite, // 0x08 - pub GPFSEL3: ReadWrite, // 0x0C - pub GPFSEL4: ReadWrite, // 0x10 - pub GPFSEL5: ReadWrite, // 0x14 - __reserved_0: u32, // 0x18 - GPSET0: ReadWrite, // 0x1C - GPSET1: ReadWrite, // 0x20 - __reserved_1: u32, // - GPCLR0: ReadWrite, // 0x28 - __reserved_2: [u32; 2], // - GPLEV0: ReadWrite, // 0x34 - GPLEV1: ReadWrite, // 0x38 - __reserved_3: u32, // - GPEDS0: ReadWrite, // 0x40 - GPEDS1: ReadWrite, // 0x44 - __reserved_4: [u32; 7], // - GPHEN0: ReadWrite, // 0x64 - GPHEN1: ReadWrite, // 0x68 - __reserved_5: [u32; 10], // - pub GPPUD: ReadWrite, // 0x94 - pub GPPUDCLK0: ReadWrite, // 0x98 - pub GPPUDCLK1: ReadWrite, // 0x9C +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => GPFSEL0: ReadWrite), + (0x04 => GPFSEL1: ReadWrite), + (0x08 => GPFSEL2: ReadWrite), + (0x0C => GPFSEL3: ReadWrite), + (0x10 => GPFSEL4: ReadWrite), + (0x14 => GPFSEL5: ReadWrite), + (0x18 => _reserved1), + (0x94 => GPPUD: ReadWrite), + (0x98 => GPPUDCLK0: ReadWrite), + (0x9C => GPPUDCLK1: ReadWrite), + (0xA0 => @END), + } } /// The driver's private data. diff --git a/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs b/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs index 78303c49..7647492d 100644 --- a/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs +++ b/X1_JTAG_boot/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs @@ -6,7 +6,7 @@ use crate::{arch, arch::sync::NullLock, interface}; use core::{fmt, ops}; -use register::{mmio::*, register_bitfields}; +use register::{mmio::*, register_bitfields, register_structs}; // PL011 UART registers. // @@ -109,19 +109,21 @@ register_bitfields! { ] } -#[allow(non_snake_case)] -#[repr(C)] -pub struct RegisterBlock { - DR: ReadWrite, // 0x00 - __reserved_0: [u32; 5], // 0x04 - FR: ReadOnly, // 0x18 - __reserved_1: [u32; 2], // 0x1c - IBRD: WriteOnly, // 0x24 - FBRD: WriteOnly, // 0x28 - LCRH: WriteOnly, // 0x2C - CR: WriteOnly, // 0x30 - __reserved_2: [u32; 4], // 0x34 - ICR: WriteOnly, // 0x44 +register_structs! { + #[allow(non_snake_case)] + RegisterBlock { + (0x00 => DR: ReadWrite), + (0x04 => _reserved1), + (0x18 => FR: ReadOnly), + (0x1c => _reserved2), + (0x24 => IBRD: WriteOnly), + (0x28 => FBRD: WriteOnly), + (0x2c => LCRH: WriteOnly), + (0x30 => CR: WriteOnly), + (0x34 => _reserved3), + (0x44 => ICR: WriteOnly), + (0x48 => @END), + } } /// The driver's mutex protected part.