diff --git a/Cargo.lock b/Cargo.lock index a8b4871c2d..f35f73333b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,7 +29,6 @@ dependencies = [ "cpp_demangle", "gimli", "rustc-demangle", - "rustc-std-workspace-alloc", ] [[package]] @@ -121,9 +120,9 @@ dependencies = [ [[package]] name = "arm-gic-driver" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f251a1a74133f802b55eaf5e340107b0024457aa9b2ac3c72074501bfa8509a5" +checksum = "ad71090ed958939b87f6c99e0acd3c476b3a0dbd54f2e2d9aa1ca1f40dc4417e" dependencies = [ "aarch64-cpu 10.0.0", "bitflags 2.10.0", @@ -177,7 +176,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -211,9 +210,9 @@ dependencies = [ [[package]] name = "axbacktrace" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac82d77c48f98335e4f9b546ef69356d429ee7e9933560bb55696f498a1a26dc" +checksum = "bf9566516f5d799b2f791a6ec5af57eec87d17624346f7c876fa006b922c99e6" dependencies = [ "addr2line", "cfg-if", @@ -249,13 +248,13 @@ dependencies = [ "axconfig-gen", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "axcpu" version = "0.3.0" -source = "git+https://github.com/arceos-org/axcpu.git?tag=dev-v03#1dc46de5d5a0b6befba9fa25a560386e5d9e19c6" +source = "git+https://github.com/arceos-org/axcpu.git?tag=dev-v03#72ef3859952b7340bae261c9a50c32705e602017" dependencies = [ "aarch64-cpu 10.0.0", "axbacktrace", @@ -268,7 +267,7 @@ dependencies = [ "page_table_entry", "page_table_multiarch 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)", "percpu", - "riscv", + "riscv 0.14.0", "static_assertions", "tock-registers 0.9.0", "x86", @@ -317,6 +316,8 @@ dependencies = [ "axhal", "cfg-if", "crate_interface", + "gpt_disk_io", + "jh7110-vf2-13b-pac", "log", "smallvec", ] @@ -324,12 +325,12 @@ dependencies = [ [[package]] name = "axdriver_base" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" [[package]] name = "axdriver_block" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "axdriver_base", "bcm2835-sdhci", @@ -340,7 +341,7 @@ dependencies = [ [[package]] name = "axdriver_display" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "axdriver_base", ] @@ -348,7 +349,7 @@ dependencies = [ [[package]] name = "axdriver_input" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "axdriver_base", "strum", @@ -357,9 +358,10 @@ dependencies = [ [[package]] name = "axdriver_net" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "axdriver_base", + "dwmac-rs", "fxmac_rs", "ixgbe-driver", "log", @@ -369,7 +371,7 @@ dependencies = [ [[package]] name = "axdriver_pci" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "virtio-drivers", ] @@ -377,7 +379,7 @@ dependencies = [ [[package]] name = "axdriver_virtio" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "axdriver_base", "axdriver_block", @@ -392,7 +394,7 @@ dependencies = [ [[package]] name = "axdriver_vsock" version = "0.1.2" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=dev-v01#498df4ecde85b8acc2553d93102ad32d76339110" +source = "git+https://github.com/elliott10/axdriver_crates.git?branch=tag-dev-v01#aebe7050be713d96296611f306ac6b41be7dc788" dependencies = [ "axdriver_base", "log", @@ -519,9 +521,10 @@ dependencies = [ [[package]] name = "axio" -version = "0.2.0" -source = "git+https://github.com/arceos-org/axio.git?tag=dev-v02#6436b97626df5d7e743070c46683bad9c648843c" +version = "0.2.1" +source = "git+https://github.com/arceos-org/axio.git?tag=dev-v02#a743d65491ca3f482a997ad317d48f4785a8982b" dependencies = [ + "autocfg", "axerrno 0.2.2", ] @@ -602,7 +605,7 @@ dependencies = [ [[package]] name = "axplat" version = "0.3.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "axplat-macros", "bitflags 2.10.0", @@ -617,7 +620,7 @@ dependencies = [ [[package]] name = "axplat-aarch64-peripherals" version = "0.3.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "aarch64-cpu 10.0.0", "arm-gic-driver", @@ -636,7 +639,7 @@ dependencies = [ [[package]] name = "axplat-aarch64-qemu-virt" version = "0.3.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "axconfig-macros", "axcpu", @@ -649,7 +652,7 @@ dependencies = [ [[package]] name = "axplat-loongarch64-qemu-virt" version = "0.3.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "axconfig-macros", "axcpu", @@ -666,17 +669,17 @@ dependencies = [ [[package]] name = "axplat-macros" version = "0.1.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "axplat-riscv64-qemu-virt" version = "0.3.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "axconfig-macros", "axcpu", @@ -684,7 +687,7 @@ dependencies = [ "kspin", "lazyinit", "log", - "riscv", + "riscv 0.14.0", "riscv_goldfish", "riscv_plic", "sbi-rt", @@ -694,7 +697,7 @@ dependencies = [ [[package]] name = "axplat-x86-pc" version = "0.3.0" -source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#72b148262f4f58a3a6c64c23d0f377e6469b662a" +source = "git+https://github.com/arceos-org/axplat_crates.git?tag=dev-v03#0df0713b1c20eafaeebdc6b0e194b2985e857949" dependencies = [ "axconfig-macros", "axcpu", @@ -752,9 +755,9 @@ dependencies = [ [[package]] name = "axsched" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44de469da35f912194e4104cc2f51bff63d6c184b65b6ebf8e90e2cd162b7f3c" +checksum = "cad6b7b0b8d9ad1d52a834d8b7721114413da8cf3430af928b1c8651f911287a" dependencies = [ "linked_list_r4l", ] @@ -830,7 +833,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -853,7 +856,7 @@ checksum = "d3ca019570363e800b05ad4fd890734f28ac7b72f563ad8a35079efb793616f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -891,9 +894,29 @@ checksum = "a7913f22349ffcfc6ca0ca9a656ec26cfbba538ed49c31a273dff2c5d1ea83d9" [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] [[package]] name = "byteorder" @@ -903,9 +926,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.2.47" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ "find-msvc-tools", "shlex", @@ -950,9 +973,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -960,9 +983,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -979,14 +1002,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "colorchoice" @@ -1059,9 +1082,24 @@ checksum = "70272a03a2cef15589bac05d3d15c023752f5f8f2da8be977d983a9d9e6250fb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "critical-section" version = "1.2.0" @@ -1138,7 +1176,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1150,12 +1188,31 @@ dependencies = [ "thiserror", ] +[[package]] +name = "dwmac-rs" +version = "0.2.0" +source = "git+https://github.com/elliott10/dwmac-rs.git?rev=58239e16#58239e161b308d8db54441962c932a7211ec6381" +dependencies = [ + "bitflags 2.10.0", + "log", +] + [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + [[package]] name = "embedded-hal" version = "1.0.0" @@ -1171,7 +1228,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1231,7 +1288,7 @@ checksum = "ba8f5038f5845165d06fe1453fe4130ad546d3314818bbda57e208e7b0cffe08" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1245,9 +1302,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" [[package]] name = "fnv" @@ -1281,7 +1338,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1340,6 +1397,28 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gpt_disk_io" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb194b955ba40423510e4342a077df49c70a599cf692cd0e30a86a32d8a9c7b1" +dependencies = [ + "bytemuck", + "gpt_disk_types", +] + +[[package]] +name = "gpt_disk_types" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3972298dc4cef533492b66bdd75747133618917f44885a11dc8abd24c4e3f1f0" +dependencies = [ + "bytemuck", + "crc", + "ucs2", + "uguid", +] + [[package]] name = "handler_table" version = "0.1.2" @@ -1457,9 +1536,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -1528,11 +1607,22 @@ dependencies = [ "volatile 0.3.0", ] +[[package]] +name = "jh7110-vf2-13b-pac" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad21241cb329a32889a94d375a66de3594ff54d7e4afd06bcee376bba8744ed" +dependencies = [ + "critical-section", + "riscv 0.10.1", + "vcell", +] + [[package]] name = "jiff" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" dependencies = [ "jiff-static", "log", @@ -1543,20 +1633,20 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -1564,9 +1654,9 @@ dependencies = [ [[package]] name = "kernel_guard" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307e6be468f3d6b6d895e191f63c11602e4e76575ecca68325d8c8dbebe2870e" +checksum = "d10c55bedf6789bc3748e0d8756ee639df1ae25144fd3525ed311044bd9a739f" dependencies = [ "cfg-if", "crate_interface", @@ -1599,9 +1689,9 @@ checksum = "17f03abfebdaaf0fad16790237a0348baf84886d3ade460db13bae59e614a180" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" @@ -1615,9 +1705,9 @@ dependencies = [ [[package]] name = "linked_list_r4l" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c6e48d7df84e6414be8e53976ead35ba4d47a4ba561eaad5d1e2b1447b4c0a" +checksum = "1730c4ce817dc3edb092739ca5c109fe551018e5ea5a8361a8ddaa13d79ac8ed" [[package]] name = "linkme" @@ -1636,7 +1726,7 @@ checksum = "e5cec0ec4228b4853bb129c84dbf093a27e6c7a20526da046defc334a1b017f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1672,9 +1762,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" dependencies = [ "hashbrown 0.16.1", ] @@ -1740,6 +1830,21 @@ dependencies = [ "paste", ] +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + [[package]] name = "nom" version = "7.1.3" @@ -1792,7 +1897,7 @@ dependencies = [ "log", "memory_addr", "page_table_entry", - "riscv", + "riscv 0.14.0", "x86", ] @@ -1807,7 +1912,7 @@ dependencies = [ "log", "memory_addr", "page_table_entry", - "riscv", + "riscv 0.14.0", "x86", ] @@ -1819,9 +1924,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percpu" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e56c0c558952222967b592899f98765b48590e7bd7403bfd7075f73afc6ed6" +checksum = "54ca06381bdd16a5397e23cf61d347b539c765e2c20b2ecc5cb36df88695c1f7" dependencies = [ "cfg-if", "kernel_guard", @@ -1832,13 +1937,14 @@ dependencies = [ [[package]] name = "percpu_macros" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9f4cc54a2e471ff72f1499461ba381ad4eae9cbd60d29c258545b995e406e0" +checksum = "a933d46113c0171aee86623311a9367f2ec3a86dab0a96aba1d5bc627473617e" dependencies = [ + "cfg-if", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1855,9 +1961,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "portable-atomic-util" @@ -1875,7 +1981,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1897,23 +2003,23 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -1981,6 +2087,17 @@ dependencies = [ "portable-atomic-util", ] +[[package]] +name = "riscv" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa3145d2fae3778b1e31ec2e827b228bdc6abd9b74bb5705ba46dcb82069bc4f" +dependencies = [ + "bit_field", + "critical-section", + "embedded-hal 0.2.7", +] + [[package]] name = "riscv" version = "0.14.0" @@ -1988,7 +2105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f1671c79a01a149fe000af2429ce9ccc8e58cdecda72672355d50e5536b363c" dependencies = [ "critical-section", - "embedded-hal", + "embedded-hal 1.0.0", "paste", "riscv-macros", "riscv-pac", @@ -2002,7 +2119,7 @@ checksum = "e8c4aa1ea1af6dcc83a61be12e8189f9b293c3ba5a487778a4cd89fb060fdbbc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2020,7 +2137,8 @@ checksum = "07aac72f95e774476db82916d79f2d303191310393830573c1ab5c821b21660a" [[package]] name = "riscv_plic" version = "0.2.0" -source = "git+https://github.com/arceos-org/riscv_plic.git?tag=dev-v02#e2643d2cd44b862b9d505d7caf8938ddad33e205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e701d1c6ea06c35a19cb80d213fab87d264798f9bac0aed2730c0e86d297394a" dependencies = [ "tock-registers 0.10.1", ] @@ -2049,12 +2167,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustc-std-workspace-alloc" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d441c3b2ebf55cebf796bfdc265d67fa09db17b7bb6bd4be75c509e1e8fec3" - [[package]] name = "rustc_version" version = "0.4.1" @@ -2087,12 +2199,12 @@ checksum = "e6e36312fb5ddc10d08ecdc65187402baba4ac34585cb9d1b78522ae2358d890" [[package]] name = "scope-local" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "231e441739fbe668e91acf8440a0b1ac83c73faec7a6d984190ee25354c2ec9a" +checksum = "4a7d5ed5013e6436fcd78f2bcd3892a6286ef9ce6c9b61504d4c4a08d6a40eab" dependencies = [ "percpu", - "spin 0.9.8", + "spin 0.10.0", ] [[package]] @@ -2124,7 +2236,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2251,7 +2363,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2280,9 +2392,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -2306,7 +2418,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2362,6 +2474,24 @@ dependencies = [ "x86", ] +[[package]] +name = "ucs2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79298e11f316400c57ec268f3c2c29ac3c4d4777687955cd3d4f3a35ce7eba" +dependencies = [ + "bit_field", +] + +[[package]] +name = "uguid" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8352f8c05e47892e7eaf13b34abd76a7f4aeaf817b716e88789381927f199c" +dependencies = [ + "bytemuck", +] + [[package]] name = "unicode-ident" version = "1.0.22" @@ -2380,6 +2510,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + [[package]] name = "virtio-drivers" version = "0.7.4" @@ -2391,6 +2527,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "volatile" version = "0.2.7" @@ -2426,7 +2568,7 @@ checksum = "65c67ce935f3b4329e473ecaff7bab444fcdc3d1d19f8bae61fabfa90b84f93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2440,9 +2582,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -2453,9 +2595,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2463,22 +2605,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -2510,7 +2652,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2521,7 +2663,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2559,9 +2701,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -2637,5 +2779,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] diff --git a/api/axfeat/Cargo.toml b/api/axfeat/Cargo.toml index bdcf419588..258a2d29b4 100644 --- a/api/axfeat/Cargo.toml +++ b/api/axfeat/Cargo.toml @@ -76,6 +76,7 @@ driver-ramdisk = ["axdriver/ramdisk"] driver-sdmmc = ["axdriver/sdmmc"] driver-ixgbe = ["axdriver/ixgbe"] driver-fxmac = ["axdriver/fxmac"] # fxmac ethernet driver for PhytiumPi +driver-dwmac = ["axdriver/dwmac"] # dwmac ethernet driver for StarFive VisionFive 2 driver-bcm2835-sdhci = ["axdriver/bcm2835-sdhci"] # Logging diff --git a/modules/axdriver/Cargo.toml b/modules/axdriver/Cargo.toml index 351231a129..3c23e4d31c 100644 --- a/modules/axdriver/Cargo.toml +++ b/modules/axdriver/Cargo.toml @@ -17,6 +17,7 @@ dyn = [] bus-mmio = [] bus-pci = ["dep:axdriver_pci", "dep:axhal", "dep:axconfig"] block = ["axdriver_block"] +gpt = ["dep:gpt_disk_io"] display = ["axdriver_display"] input = ["axdriver_input"] net = ["axdriver_net"] @@ -33,9 +34,10 @@ virtio-net = ["net", "virtio", "axdriver_virtio/net"] virtio-socket = ["vsock", "virtio", "axdriver_virtio/socket"] bcm2835-sdhci = ["block", "axdriver_block/bcm2835-sdhci"] ramdisk = ["block", "axdriver_block/ramdisk", "dep:axhal", "dep:axconfig"] -sdmmc = ["block", "axdriver_block/sdmmc", "dep:axhal", "dep:axconfig"] +sdmmc = ["block", "gpt", "axdriver_block/sdmmc", "dep:axhal", "dep:axconfig"] ixgbe = ["net", "axdriver_net/ixgbe", "dep:axalloc", "dep:axhal", "dep:axdma"] fxmac = ["net", "axdriver_net/fxmac", "dep:axalloc", "dep:axhal", "dep:axdma"] +dwmac = ["net", "axdriver_net/dwmac", "dep:axalloc", "dep:axhal", "dep:jh7110-vf2-13b-pac"] # more devices example: e1000 = ["net", "axdriver_net/e1000"] [dependencies] @@ -44,16 +46,18 @@ axconfig = { workspace = true, optional = true } axdma = { workspace = true, optional = true } axhal = { workspace = true, optional = true } -axdriver_base = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01" } -axdriver_block = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } -axdriver_display = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } -axdriver_input = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } -axdriver_net = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } -axdriver_pci = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } -axdriver_vsock = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } -axdriver_virtio = { version = "0.1", git = "https://github.com/arceos-org/axdriver_crates.git", tag = "dev-v01", optional = true } +axdriver_base = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01" } +axdriver_block = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +axdriver_display = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +axdriver_input = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +axdriver_net = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +axdriver_pci = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +axdriver_vsock = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +axdriver_virtio = { version = "0.1", git = "https://github.com/elliott10/axdriver_crates.git", branch = "tag-dev-v01", optional = true } +gpt_disk_io = { version = "0.16.2", optional = true } cfg-if = { workspace = true } crate_interface = { workspace = true } log = { workspace = true } smallvec = { version = "1.15.1", features = ["const_generics", "union"] } +jh7110-vf2-13b-pac = { version = "0.2.0", optional = true } diff --git a/modules/axdriver/build.rs b/modules/axdriver/build.rs index 6c7f3d896d..bcb78a579d 100644 --- a/modules/axdriver/build.rs +++ b/modules/axdriver/build.rs @@ -1,4 +1,4 @@ -const NET_DEV_FEATURES: &[&str] = &["fxmac", "ixgbe", "virtio-net"]; +const NET_DEV_FEATURES: &[&str] = &["dwmac", "fxmac", "ixgbe", "virtio-net"]; const BLOCK_DEV_FEATURES: &[&str] = &["ramdisk", "bcm2835-sdhci", "sdmmc", "virtio-blk"]; const DISPLAY_DEV_FEATURES: &[&str] = &["virtio-gpu"]; const INPUT_DEV_FEATURES: &[&str] = &["virtio-input"]; diff --git a/modules/axdriver/src/bus/mmio.rs b/modules/axdriver/src/bus/mmio.rs index ea25a928b4..a92a4f7772 100644 --- a/modules/axdriver/src/bus/mmio.rs +++ b/modules/axdriver/src/bus/mmio.rs @@ -19,5 +19,29 @@ impl AllDevices { } }); } + + // Probe regular MMIO devices + #[cfg(feature = "dwmac")] + for reg in axconfig::devices::MMIO_RANGES { + if reg.0 != axconfig::devices::ETHERNET0_PADDR + && reg.0 != axconfig::devices::ETHERNET1_PADDR + { + continue; + } + debug!("Probing MMIO device @ {:#x}", reg.0); + + for_each_drivers!(type Driver, { + if let Some(dev) = Driver::probe_mmio(reg.0, reg.1) { + info!( + "registered a new {:?} device at [PA:{:#x}, PA:{:#x}): {:?}", + dev.device_type(), + reg.0, reg.0 + reg.1, + dev.device_name(), + ); + self.add_device(dev); + continue; // skip to the next device + } + }); + } } } diff --git a/modules/axdriver/src/drivers.rs b/modules/axdriver/src/drivers.rs index e722a5e451..ca0a389e18 100644 --- a/modules/axdriver/src/drivers.rs +++ b/modules/axdriver/src/drivers.rs @@ -84,18 +84,22 @@ cfg_if::cfg_if! { cfg_if::cfg_if! { if #[cfg(block_dev = "sdmmc")] { use axhal::mem::phys_to_virt; + use axdriver_block::sdmmc::SdMmcDriver; + use super::gpt::GptPartitionDev; - pub struct SdMmcDriver; - register_block_driver!(SdMmcDriver, axdriver_block::sdmmc::SdMmcDriver); + pub struct SdMmcBlock; + register_block_driver!(SdMmcBlock, GptPartitionDev); - impl DriverProbe for SdMmcDriver { + impl DriverProbe for SdMmcBlock { fn probe_global() -> Option { + let root = axconfig::devices::ROOT_PARTITION_NAME.parse().unwrap(); + info!("Probe SD MMC ROOT Part: {:?} @ {:#x}", root, axconfig::devices::SDMMC_PADDR); let sdmmc = unsafe { - axdriver_block::sdmmc::SdMmcDriver::new( + SdMmcDriver::new( phys_to_virt(axconfig::devices::SDMMC_PADDR.into()).into(), ) }; - Some(AxDeviceEnum::from_block(sdmmc)) + GptPartitionDev::new(sdmmc, |part| part.name == root).ok().map(AxDeviceEnum::from_block) } } } @@ -208,3 +212,40 @@ cfg_if::cfg_if! { } } } + +cfg_if::cfg_if! { + if #[cfg(net_dev = "dwmac")] { + use crate::dwmac::DwmacHalImpl; + use core::ptr::NonNull; + + pub struct DwmacDriver; + register_net_driver!(DwmacDriver, axdriver_net::dwmac::DwmacNic); + + impl DriverProbe for DwmacDriver { + #[cfg(bus = "mmio")] + fn probe_mmio(mmio_base: usize, mmio_size: usize) -> Option { + // Try both GMAC0 and GMAC1 for tutorial + if mmio_base == axconfig::devices::ETHERNET1_PADDR { + let gmac_name = "GMAC1"; + info!("DWMAC tutorial device found at {:#x} ({})", mmio_base, gmac_name); + + let base_ptr = unsafe { core::ptr::NonNull::new_unchecked(axhal::mem::phys_to_virt(mmio_base.into()).as_mut_ptr()) }; + + // Initialize the DWMAC device (clock verification is now informational only) + match axdriver_net::dwmac::DwmacNic::::init(base_ptr, mmio_size) { + Ok(device) => { + info!("✅ DWMAC tutorial device ({}) initialized successfully!", gmac_name); + Some(AxDeviceEnum::Net(device)) + } + Err(e) => { + error!("❌ DWMAC tutorial device ({}) initialization failed: {}", gmac_name, e); + None + } + } + } else { + None + } + } + } + } +} diff --git a/modules/axdriver/src/dwmac.rs b/modules/axdriver/src/dwmac.rs new file mode 100644 index 0000000000..99fc225de2 --- /dev/null +++ b/modules/axdriver/src/dwmac.rs @@ -0,0 +1,527 @@ +//! Simple DWMAC HAL Implementation for Tutorial +//! +//! This provides a basic hardware abstraction layer implementation +//! for the DWMAC driver tutorial using JH7110 PAC for type-safe register +//! access. + +// use axdma::{BusAddr, DMAInfo, alloc_coherent, dealloc_coherent}; +use core::{ + ops::Add, + ptr::NonNull, + sync::atomic::{AtomicBool, Ordering}, +}; + +use axalloc::{UsageKind, global_allocator}; +use axdriver_net::dwmac::{DwmacHal, PhysAddr as DwmacPhysAddr}; +use axhal::mem::{PAGE_SIZE_4K, PhysAddr, phys_to_virt, virt_to_phys}; +use jh7110_vf2_13b_pac as pac; + +/// Simple HAL implementation for DWMAC +pub struct DwmacHalImpl; + +static INITIALIZED: AtomicBool = AtomicBool::new(false); + +fn mb() { + unsafe { core::arch::asm!("fence iorw, iorw") }; +} + +impl DwmacHal for DwmacHalImpl { + fn cache_flush_range(start: NonNull, end: NonNull) { + const CCACHE_BASE: usize = 0x0201_0000; + const FLUSH64_OFFSET: usize = 0x200; + const LINE_SIZE: usize = 64; + + let mut addr = start.as_ptr() as usize & !(LINE_SIZE - 1); + + let flush_addr = phys_to_virt(CCACHE_BASE.into()) + .add(FLUSH64_OFFSET) + .as_mut_ptr() as *mut u32; + let end_addr = end.as_ptr() as usize; + mb(); + while addr < end_addr { + unsafe { + core::ptr::write_volatile(flush_addr, addr as u32); + addr += LINE_SIZE; + } + } + } + + fn dma_alloc(size: usize, _align: usize) -> (DwmacPhysAddr, NonNull) { + const PAGE_SIZE: usize = 4096; + let alloc_pages = (size + (PAGE_SIZE - 1)) / PAGE_SIZE; + let Ok(vaddr) = global_allocator().alloc_pages(alloc_pages, PAGE_SIZE_4K, UsageKind::Dma) + else { + error!("failed to alloc pages"); + return (0, NonNull::dangling()); + }; + let paddr = virt_to_phys((vaddr).into()); + debug!("alloc pages @ vaddr={:#x}, paddr={:#x}", vaddr, paddr); + + // Return bus address for hardware and CPU virtual address + (paddr.as_usize(), unsafe { + NonNull::new_unchecked(vaddr as *mut u8) + }) + } + + unsafe fn dma_dealloc( + _paddr: DwmacPhysAddr, + vaddr: NonNull, + size: usize, + _align: usize, + ) -> i32 { + const PAGE_SIZE: usize = 4096; + let pages = (size + (PAGE_SIZE - 1)) / PAGE_SIZE; + global_allocator().dealloc_pages(vaddr.as_ptr() as *mut _ as usize, pages, UsageKind::Dma); + + 0 + } + + unsafe fn mmio_phys_to_virt(paddr: DwmacPhysAddr, _size: usize) -> NonNull { + NonNull::new(phys_to_virt(paddr.into()).as_mut_ptr()).unwrap() + } + + unsafe fn mmio_virt_to_phys(vaddr: NonNull, _size: usize) -> DwmacPhysAddr { + virt_to_phys((vaddr.as_ptr() as usize).into()).as_usize() + } + + fn wait_until(duration: core::time::Duration) -> Result<(), &'static str> { + axhal::time::busy_wait(duration); + Ok(()) + } + + fn configure_platform() -> Result<(), &'static str> { + log::info!("🔧 StarFive platform configuration (tutorial + PAC verification mode)"); + + if INITIALIZED + .compare_exchange(false, true, Ordering::SeqCst, Ordering::SeqCst) + .is_err() + { + log::info!("🔧 Platform already initialized"); + return Ok(()); + } + + Self::set_clocks_uboot(); + + Self::print_clocks(); + + // Just do a quick status check without changing anything + Self::print_preserved_status(); + + log::info!("✅ Platform configuration preserved - ready for DWMAC operation"); + log::info!("💡 TIP: U-Boot has already initialized everything - just trust it!"); + + Ok(()) + } +} + +impl DwmacHalImpl { + fn check_diff(name: &str, readback: u32, expected: u32) { + if readback != expected { + log::warn!( + "🔧 Clock {} is not set correctly: {:#x} != {:#x}", + name, + readback, + expected + ); + } else { + log::debug!("🔧 Clock {} is set correctly: {:#x}", name, readback); + } + } + + fn set_clocks_uboot() { + // Use PAC for available registers + let aoncrg: &pac::aoncrg::RegisterBlock = unsafe { + &*(::mmio_phys_to_virt(pac::AONCRG::ptr() as usize, 0x1000).as_ptr() + as *const pac::aoncrg::RegisterBlock) + }; + + let syscrg: &pac::syscrg::RegisterBlock = unsafe { + &*(::mmio_phys_to_virt(pac::SYSCRG::ptr() as usize, 0x1000).as_ptr() + as *const pac::syscrg::RegisterBlock) + }; + + // gmac0 clocks + unsafe { + // clk_enable(clk=00000000ff742940 name=gmac0_rmii_rtx) + // clk_enable(clk=00000000ff724390 name=gmac0-rmii-refin-clock) + // clk_mux_set_parent: set clock gmac0_tx to parent gmac0_rmii_rtx + // (reg=0x0000000017000014, val=0x01000000) md 0x81000000 + aoncrg.clk_gmac5_axi64_tx().write(|w| w.bits(0x81000000)); + Self::check_diff( + "GMAC5 AXI64 TX", + aoncrg.clk_gmac5_axi64_tx().read().bits(), + 0x81000000, + ); + // clk_enable(clk=00000000ff745340 name=clock-controller@17000000) + // clk_enable(clk=00000000ff72a540 name=stg_axiahb) + // clk_gate_endisable: enabling clock gmac0_axi (reg=0x000000001700000c, bit=31, + // set=1) md 0x80000000 + aoncrg.clk_axi_gmac5().write(|w| w.clk_icg().set_bit()); + Self::check_diff( + "GMAC5 AXI", + aoncrg.clk_axi_gmac5().read().bits(), + 0x80000000, + ); + // clk_enable(clk=00000000ff745368 name=clock-controller@17000000) + // clk_enable(clk=00000000ff72a540 name=stg_axiahb) + // clk_gate_endisable: enabling clock gmac0_ahb (reg=0x0000000017000008, bit=31, + // set=1) md 0x80000000 + aoncrg.clk_ahb_gmac5().write(|w| w.clk_icg().set_bit()); + Self::check_diff( + "GMAC5 AHB", + aoncrg.clk_ahb_gmac5().read().bits(), + 0x80000000, + ); + // clk_enable(clk=00000000ff745390 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72bf40 name=gmac_src) + // clk_enable(clk=00000000ff7295c0 name=pll0_out) + // clk_gate_endisable: enabling clock gmac0_ptp (reg=0x00000000130201b4, bit=31, + // set=1) md 0x8000000a + // syscrg.clk_gmac0_ptp().write(|w| w.clk_icg().set_bit()); + syscrg.clk_gmac0_ptp().write(|w| w.bits(0x8000000a)); + Self::check_diff( + "GMAC0 PTP", + syscrg.clk_gmac0_ptp().read().bits(), + 0x8000000a, + ); + // clk_enable(clk=00000000ff7453b8 name=clock-controller@17000000) + // clk_enable(clk=00000000ff742bc0 name=gmac0_tx) + // clk_enable(clk=00000000ff742940 name=gmac0_rmii_rtx) + // clk_gate_endisable: enabling clock gmac0_tx (reg=0x0000000017000014, bit=31, + // set=1) md 0x81000000 + aoncrg.clk_gmac5_axi64_tx().write(|w| w.bits(0x81000000)); + Self::check_diff( + "GMAC5 AXI64 TX", + aoncrg.clk_gmac5_axi64_tx().read().bits(), + 0x81000000, + ); + // clk_gate_endisable: enabling clock gmac0_tx_inv (reg=0x0000000017000018, + // bit=30, set=1) md 0x40000000 + aoncrg.clk_gmac5_axi64_txi().write(|w| w.bits(1 << 30)); + Self::check_diff( + "GMAC5 AXI64 TXI", + aoncrg.clk_gmac5_axi64_txi().read().bits(), + 0x40000000, + ); + // clk_enable(clk=00000000ff7453e0 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72cdc0 name=gmac0_gtxclk) + // clk_enable(clk=00000000ff7295c0 name=pll0_out) + // clk_gate_endisable: enabling clock gmac0_gtxclk (reg=0x00000000130201b0, + // bit=31, set=1) md 0x80000008 + // syscrg.clk_gmac0_gtx().write(|w| w.clk_icg().set_bit()); + syscrg.clk_gmac0_gtx().write(|w| w.bits(0x80000008)); + Self::check_diff( + "GMAC0 GTX", + syscrg.clk_gmac0_gtx().read().bits(), + 0x80000008, + ); + // clk_gate_endisable: enabling clock gmac0_gtxc (reg=0x00000000130201bc, + // bit=31, set=1) md 0x80000020 + // syscrg.clk_gmac0_gtxclk().write(|w| w.bits(1 << 31)); + syscrg.clk_gmac0_gtxclk().write(|w| w.bits(0x80000020)); + Self::check_diff( + "GMAC0 GTXCLK", + syscrg.clk_gmac0_gtxclk().read().bits(), + 0x80000020, + ); + } + + // gmac1 clocks + unsafe { + // clk_get_by_name_nodev(node=00000000ff71d794, name=gtx, clk=00000000ff7456e0) + // clk_request(dev=00000000ff725cf0, clk=00000000ff7456e0) + // clk_enable(clk=00000000ff747b40 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72a540 name=stg_axiahb) + // syscrg.clk_stg_axiahb().write(|w| w.clk_icg().set_bit()); + // clk_gate_endisable: enabling clock gmac1_axi (reg=0x0000000013020188, bit=31, + // set=1) md 0x80000000 + syscrg + .clk_gmac5_axi64_axi() + .write(|w| w.clk_icg().set_bit()); + Self::check_diff( + "GMAC5 AXI64 AXI", + syscrg.clk_gmac5_axi64_axi().read().bits(), + 0x80000000, + ); + // clk_enable(clk=00000000ff747b68 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72a680 name=ahb0) + // clk_gate_endisable: enabling clock gmac1_ahb (reg=0x0000000013020184, bit=31, + // set=1) md 0x80000000 + syscrg + .clk_gmac5_axi64_ahb() + .write(|w| w.clk_icg().set_bit()); + Self::check_diff( + "GMAC5 AXI64 AHB", + syscrg.clk_gmac5_axi64_ahb().read().bits(), + 0x80000000, + ); + // clk_enable(clk=00000000ff747b90 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72bf40 name=gmac_src) + // clk_gate_endisable: enabling clock gmac1_ptp (reg=0x0000000013020198, bit=31, + // set=1) md 0x8000000a + syscrg + .clk_gmac5_axi64_ptp() + // .write(|w| w.clk_icg().set_bit()); + .write(|w| w.bits(0x8000000a)); + Self::check_diff( + "GMAC5 AXI64 PTP", + syscrg.clk_gmac5_axi64_ptp().read().bits(), + 0x8000000a, + ); + // clk_enable(clk=00000000ff747bb8 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72c9c0 name=gmac1_tx) + // clk_enable(clk=00000000ff72c300 name=gmac1_rmii_rtx) + // md 0x00000002 + // xiao + syscrg.clk_gmac1_rmii_rtx().write(|w| w.bits(2)); + + Self::check_diff( + "GMAC1 RMII RTX", + syscrg.clk_gmac1_rmii_rtx().read().bits(), + 0x00000002, + ); + // clk_gate_endisable: enabling clock gmac1_tx (reg=0x00000000130201a4, bit=31, + // set=1) md 0x81000000 + // syscrg.clk_gmac5_axi64_tx().write(|w| w.clk_icg().set_bit()); + syscrg.clk_gmac5_axi64_tx().write(|w| w.bits(0x81000000)); + Self::check_diff( + "GMAC5 AXI64 TX", + syscrg.clk_gmac5_axi64_tx().read().bits(), + 0x81000000, + ); + // clk_gate_endisable: enabling clock gmac1_tx_inv (reg=0x00000000130201a8, + // bit=30, set=1) md 0x40000000 + syscrg.clk_gmac5_axi64_txi().write(|w| w.bits(1 << 30)); + Self::check_diff( + "GMAC5 AXI64 TXI", + syscrg.clk_gmac5_axi64_txi().read().bits(), + 0x40000000, + ); + // clk_enable(clk=00000000ff747be0 name=clock-controller@13020000) + // clk_enable(clk=00000000ff72c080 name=gmac1_gtxclk) + // clk_enable(clk=00000000ff7295c0 name=pll0_out) + // clk_gate_endisable: enabling clock gmac1_gtxc (reg=0x00000000130201ac, + // bit=31, set=1) md 0x80000020 + // syscrg.clk_gmac1_gtxclk().write(|w| w.bits(1 << 31)); + syscrg.clk_gmac1_gtxclk().write(|w| w.bits(0x80000020)); + Self::check_diff( + "GMAC1 GTXCLK", + syscrg.clk_gmac1_gtxclk().read().bits(), + 0x80000020, + ); + // clk_set_defaults(ethernet-phy@1) + // clk_set_default_parents: could not read assigned-clock-parents + // for 00000000ff728410 + } + + // reset + unsafe { + aoncrg.soft_rst_addr_sel().write(|w| w.bits(0xe1)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + aoncrg.soft_rst_addr_sel().write(|w| w.bits(0xe3)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + // jh7110_reset_trigger: deasserting reset 0 (reg=0x17000038, value=0xe2) + // jh7110_reset_trigger: deasserting reset 1 (reg=0x17000038, value=0xe0) + aoncrg.soft_rst_addr_sel().write(|w| w.bits(0xe2)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + aoncrg.soft_rst_addr_sel().write(|w| w.bits(0xe0)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + + syscrg.soft_rst_addr_sel_2().write(|w| w.bits(0xffe5efc4)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + syscrg.soft_rst_addr_sel_2().write(|w| w.bits(0xffe5efcc)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + // jh7110_reset_trigger: deasserting reset 66 (reg=0x13020300, value=0xffe5efc8) + // jh7110_reset_trigger: deasserting reset 67 (reg=0x13020300, value=0xffe5efc0) + syscrg.soft_rst_addr_sel_2().write(|w| w.bits(0xffe5efc8)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + syscrg.soft_rst_addr_sel_2().write(|w| w.bits(0xffe5efc0)); + let _ = DwmacHalImpl::wait_until(core::time::Duration::from_millis(100)); + } + } + + #[allow(dead_code)] + fn write_reg(paddr: PhysAddr, val: u32) { + unsafe { + let vaddr = ::mmio_phys_to_virt(paddr.into(), 0x1000); + core::ptr::write_volatile(vaddr.as_ptr() as *mut u32, val); + } + } + + /// Print status without modifying any registers + fn print_preserved_status() { + log::info!(" 📊 Current hardware status (read-only, preserved from U-Boot):"); + + // Use PAC for available registers + let aoncrg: &pac::aoncrg::RegisterBlock = unsafe { + &*(::mmio_phys_to_virt(pac::AONCRG::ptr() as usize, 0x1000).as_ptr() + as *const pac::aoncrg::RegisterBlock) + }; + + let syscrg: &pac::syscrg::RegisterBlock = unsafe { + &*(::mmio_phys_to_virt(pac::SYSCRG::ptr() as usize, 0x1000).as_ptr() + as *const pac::syscrg::RegisterBlock) + }; + + { + syscrg.clk_tim_apb().write(|w| w.clk_icg().set_bit()); + syscrg.clk_tim_0().write(|w| w.clk_icg().set_bit()); + syscrg.clk_tim_1().write(|w| w.clk_icg().set_bit()); + syscrg.clk_tim_2().write(|w| w.clk_icg().set_bit()); + syscrg.clk_tim_3().write(|w| w.clk_icg().set_bit()); + } + + { + // Read-only status check - don't interpret disabled as bad + log::info!(" 🔍 Clock register readings (may not reflect actual hardware state):"); + + let gmac5_axi64_axi_enabled = syscrg.clk_gmac5_axi64_axi().read().clk_icg().bit(); + let gmac5_axi64_ptp_enabled = syscrg.clk_gmac5_axi64_ptp().read().clk_icg().bit(); + let gmac0_gtx_enabled = syscrg.clk_gmac0_gtx().read().clk_icg().bit(); + + log::info!( + " GMAC5 AXI64 AXI: {} (register view)", + if gmac5_axi64_axi_enabled { + "✅ enabled" + } else { + "❓ disabled in register" + } + ); + log::info!( + " GMAC5 AXI64 PTP: {} (register view)", + if gmac5_axi64_ptp_enabled { + "✅ enabled" + } else { + "❓ disabled in register" + } + ); + log::info!( + " GMAC0 GTX: {} (register view)", + if gmac0_gtx_enabled { + "✅ enabled" + } else { + "❓ disabled in register" + } + ); + + log::info!(" 💡 Note: Clock registers may show 'disabled' even when hardware works"); + log::info!( + " 💡 U-Boot may use different initialization sequence than Linux drivers expect" + ); + log::info!(" 💡 The real test is whether networking actually works!"); + + log::info!( + " 🔧 Reset status - Soft reset selector 2: {:#x} (preserved)", + syscrg.soft_rst_addr_sel_2().read().bits() + ); + + log::info!( + " 🔧 Reset status - AON reset selector: {:#x} (preserved)", + aoncrg.soft_rst_addr_sel().read().bits() + ); + + log::info!( + " 🔧 Clock config - GMAC1 GTX: {:#x} (preserved)", + syscrg.clk_gmac1_gtx().read().clk_divcfg().bits() + ); + + log::info!( + " 🔧 Clock config - GMAC1 RMII RTX: {:#x} (preserved)", + syscrg.clk_gmac1_rmii_rtx().read().clk_divcfg().bits() + ); + + log::info!( + " 🔧 Clock config - GMAC1 GTX: {:#x} (preserved)", + syscrg.clk_gmac1_gtx().read().clk_divcfg().bits() + ); + + log::info!( + " 🔧 Clock config - CPU Root: {:#x} (preserved)", + syscrg.clk_cpu_root().read().bits() + ); + log::info!( + " 🔧 Clock config - CPU Core: {:#x} (preserved)", + syscrg.clk_cpu_core().read().bits() + ); + log::info!( + " 🔧 Clock config - CPU Bus: {:#x} (preserved)", + syscrg.clk_cpu_bus().read().bits() + ); + } + } + + fn print_clocks() { + // Use PAC for available registers + let aoncrg: &pac::aoncrg::RegisterBlock = unsafe { + &*(::mmio_phys_to_virt(pac::AONCRG::ptr() as usize, 0x1000).as_ptr() + as *const pac::aoncrg::RegisterBlock) + }; + + let syscrg: &pac::syscrg::RegisterBlock = unsafe { + &*(::mmio_phys_to_virt(pac::SYSCRG::ptr() as usize, 0x1000).as_ptr() + as *const pac::syscrg::RegisterBlock) + }; + + if syscrg.clk_gmac5_axi64_axi().read().clk_icg().bit() { + log::debug!("🔧 GMAC5 AXI64 clock is enabled"); + } else { + log::debug!("🔧 GMAC5 AXI64 clock is disabled"); + } + + if syscrg.clk_gmac5_axi64_ptp().read().clk_icg().bit() { + log::debug!("🔧 GMAC5 AXI64 PTP clock is enabled"); + } else { + log::debug!("🔧 GMAC5 AXI64 PTP clock is disabled"); + } + + if syscrg.clk_gmac5_axi64_tx().read().clk_icg().bit() { + log::debug!("🔧 GMAC5 AXI64 TX clock is enabled"); + } else { + log::debug!("🔧 GMAC5 AXI64 TX clock is disabled"); + } + + if syscrg.clk_gmac0_gtx().read().clk_icg().bit() { + log::debug!("🔧 GMAC0 GTX clock is enabled"); + } else { + log::debug!("🔧 GMAC0 GTX clock is disabled"); + } + + if syscrg.clk_gmac0_ptp().read().clk_icg().bit() { + log::debug!("🔧 GMAC0 PTP clock is enabled"); + } else { + log::debug!("🔧 GMAC0 PTP clock is disabled"); + } + + if aoncrg.clk_axi_gmac5().read().clk_icg().bit() { + log::debug!("🔧 GMAC5 AXI clock is enabled"); + } else { + log::debug!("🔧 GMAC5 AXI clock is disabled"); + } + + if aoncrg.clk_gmac5_axi64_tx().read().bits() & 0x8000_0000 != 0 { + log::debug!("🔧 GMAC5 AXI64 TX clock is enabled"); + } else { + log::debug!("🔧 GMAC5 AXI64 TX clock is disabled"); + } + + log::debug!( + "🔧 Soft reset address selector 2: {:#x}", + syscrg.soft_rst_addr_sel_2().read().bits() + ); + + log::debug!( + "🔧 Soft reset address selector: {:#x}", + aoncrg.soft_rst_addr_sel().read().bits() + ); + + log::debug!( + "🔧 GMAC1 GTX clock: {:#x}", + syscrg.clk_gmac1_gtx().read().clk_divcfg().bits() + ); + + log::debug!( + "🔧 GMAC1 RMII RTX clock: {:#x}", + syscrg.clk_gmac1_rmii_rtx().read().clk_divcfg().bits() + ); + } +} diff --git a/modules/axdriver/src/gpt.rs b/modules/axdriver/src/gpt.rs new file mode 100644 index 0000000000..f8eef37103 --- /dev/null +++ b/modules/axdriver/src/gpt.rs @@ -0,0 +1,141 @@ +use alloc::vec; + +use axdriver_base::{BaseDriverOps, DevError, DevResult, DeviceType}; +use gpt_disk_io::{ + BlockIo, Disk, DiskError, + gpt_disk_types::{BlockSize, GptPartitionEntry, Lba, LbaRangeInclusive}, +}; +use log::{debug, info}; + +use super::prelude::*; + +struct BlockDriverAdapter<'a, T>(&'a mut T); + +impl BlockIo for BlockDriverAdapter<'_, T> { + type Error = DevError; + + fn block_size(&self) -> BlockSize { + BlockSize::from_usize(self.0.block_size()).unwrap() + } + + fn num_blocks(&mut self) -> Result { + Ok(self.0.num_blocks()) + } + + fn read_blocks(&mut self, start_lba: Lba, dst: &mut [u8]) -> Result<(), Self::Error> { + self.block_size().assert_valid_block_buffer(dst); + for (i, chunk) in dst.chunks_exact_mut(self.0.block_size()).enumerate() { + self.0.read_block(start_lba.to_u64() + i as u64, chunk)?; + } + Ok(()) + } + + fn write_blocks(&mut self, start_lba: Lba, src: &[u8]) -> Result<(), Self::Error> { + self.block_size().assert_valid_block_buffer(src); + for (i, chunk) in src.chunks_exact(self.0.block_size()).enumerate() { + self.0.write_block(start_lba.to_u64() + i as u64, chunk)?; + } + Ok(()) + } + + fn flush(&mut self) -> Result<(), Self::Error> { + self.0.flush() + } +} + +fn map_disk_error(err: DiskError) -> DevError { + match err { + DiskError::BufferTooSmall => DevError::InvalidParam, + DiskError::Overflow => DevError::BadState, + DiskError::BlockSizeSmallerThanPartitionEntry => DevError::InvalidParam, + DiskError::Io(e) => e, + } +} + +/// A GPT partition. +pub struct GptPartitionDev { + inner: T, + range: LbaRangeInclusive, +} + +impl GptPartitionDev { + /// Creates a new GPT partition device from the given block storage device + /// driver. + /// + /// Will use the first partition that matches the given selection criteria. + pub fn new(mut inner: T, mut predicate: F) -> DevResult + where + F: FnMut(&GptPartitionEntry) -> bool, + { + let mut block_buf = vec![0u8; 512]; + + let block_io = BlockDriverAdapter(&mut inner); + let mut disk = Disk::new(block_io).map_err(map_disk_error)?; + + let primary_header = disk + .read_primary_gpt_header(&mut block_buf) + .map_err(map_disk_error)?; + debug!("{}", primary_header); + assert!(primary_header.is_signature_valid()); + + let mut range = None; + let layout = primary_header.get_partition_entry_array_layout().unwrap(); + for entry in disk + .gpt_partition_entry_array_iter(layout, &mut block_buf) + .map_err(map_disk_error)? + { + let entry = entry.map_err(map_disk_error)?; + if entry.is_used() { + debug!("{}", entry); + if predicate(&entry) { + info!("Selected partition: {}", entry.name); + range = entry.lba_range(); + break; + } + } + } + drop(disk); + let range = range.ok_or(DevError::Io)?; + Ok(Self { inner, range }) + } +} + +impl BaseDriverOps for GptPartitionDev { + fn device_name(&self) -> &str { + self.inner.device_name() + } + + fn device_type(&self) -> DeviceType { + DeviceType::Block + } +} + +impl BlockDriverOps for GptPartitionDev { + fn num_blocks(&self) -> u64 { + self.range.num_blocks() + } + + fn block_size(&self) -> usize { + self.inner.block_size() + } + + fn read_block(&mut self, block_id: u64, buf: &mut [u8]) -> DevResult { + if block_id > (self.range.end().to_u64() - self.range.start().to_u64()) { + return Err(DevError::InvalidParam); + } + self.inner + .read_block(self.range.start().to_u64() + block_id, buf) + } + + fn write_block(&mut self, block_id: u64, buf: &[u8]) -> DevResult { + if block_id > (self.range.end().to_u64() - self.range.start().to_u64()) { + return Err(DevError::InvalidParam); + } + self.inner + .write_block(self.range.start().to_u64() + block_id, buf) + } + + fn flush(&mut self) -> DevResult { + self.inner.flush() + } +} diff --git a/modules/axdriver/src/lib.rs b/modules/axdriver/src/lib.rs index 398b17cc73..df3a141125 100644 --- a/modules/axdriver/src/lib.rs +++ b/modules/axdriver/src/lib.rs @@ -77,9 +77,15 @@ mod structs; #[cfg(feature = "virtio")] mod virtio; +#[cfg(feature = "dwmac")] +mod dwmac; + #[cfg(feature = "ixgbe")] mod ixgbe; +#[cfg(feature = "gpt")] +mod gpt; + pub mod prelude; #[allow(unused_imports)] diff --git a/modules/axdriver/src/macros.rs b/modules/axdriver/src/macros.rs index 65b487f78f..d6cee8ce2c 100644 --- a/modules/axdriver/src/macros.rs +++ b/modules/axdriver/src/macros.rs @@ -82,7 +82,7 @@ macro_rules! for_each_drivers { } #[cfg(block_dev = "sdmmc")] { - type $drv_type = crate::drivers::SdMmcDriver; + type $drv_type = crate::drivers::SdMmcBlock; $code } #[cfg(block_dev = "bcm2835-sdhci")] @@ -100,5 +100,10 @@ macro_rules! for_each_drivers { type $drv_type = crate::drivers::FXmacDriver; $code } + #[cfg(net_dev = "dwmac")] + { + type $drv_type = crate::drivers::DwmacDriver; + $code + } }}; }