diff --git a/Cargo.lock b/Cargo.lock index 8cdedf7..362830e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,26 @@ dependencies = [ "tock-registers", ] +[[package]] +name = "axerrno" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a88b1fa2ce97a6ff4ce31ba9fda3065730ca4d77a1ba50dec000fc04f1fb686" +dependencies = [ + "axerrno 0.2.0", + "log", +] + +[[package]] +name = "axerrno" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed18d8dcfeb189b152533416e073fcadcde658ad3a49f58d76fa47072d06be0" +dependencies = [ + "log", + "strum", +] + [[package]] name = "bit_field" version = "0.10.2" @@ -47,6 +67,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "log" version = "0.4.27" @@ -73,6 +99,7 @@ dependencies = [ name = "page_table_multiarch" version = "0.5.6" dependencies = [ + "axerrno 0.1.2", "bitmaps", "log", "memory_addr", @@ -88,6 +115,24 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rand" version = "0.9.1" @@ -136,12 +181,50 @@ version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "2.0.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tock-registers" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b9e2fdb3a1e862c0661768b7ed25390811df1947a8acbfbefe09b47078d93c4" +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + [[package]] name = "volatile" version = "0.4.6" diff --git a/page_table_multiarch/Cargo.toml b/page_table_multiarch/Cargo.toml index 6d47fd1..5950ae6 100644 --- a/page_table_multiarch/Cargo.toml +++ b/page_table_multiarch/Cargo.toml @@ -14,13 +14,15 @@ rust-version.workspace = true [features] default = [] +axerrno = ["dep:axerrno"] copy-from = ["dep:bitmaps"] [dependencies] +axerrno = { version = "0.1", optional = true } +bitmaps = { version = "3.2", default-features = false, optional = true } log = "0.4" memory_addr.workspace = true page_table_entry.workspace = true -bitmaps = { version = "3.2", default-features = false, optional = true } [target.'cfg(any(target_arch = "x86_64", doc))'.dependencies] x86 = "0.52" diff --git a/page_table_multiarch/src/lib.rs b/page_table_multiarch/src/lib.rs index 42f517f..e3063f0 100644 --- a/page_table_multiarch/src/lib.rs +++ b/page_table_multiarch/src/lib.rs @@ -34,6 +34,16 @@ pub enum PagingError { MappedToHugePage, } +#[cfg(feature = "axerrno")] +impl From for axerrno::AxError { + fn from(value: PagingError) -> Self { + match value { + PagingError::NoMemory => axerrno::AxError::NoMemory, + _ => axerrno::AxError::InvalidInput, + } + } +} + /// The specialized `Result` type for page table operations. pub type PagingResult = Result;