diff --git a/Cargo.lock b/Cargo.lock index 58740eac28..9387e39945 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,7 +11,7 @@ dependencies = [ "redox-daemon", "redox-log", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "spin", ] @@ -28,11 +28,10 @@ dependencies = [ "plain", "redox-daemon", "redox-log", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "rustc-hash", "serde_json", "thiserror", - "toml 0.7.3", ] [[package]] @@ -46,7 +45,7 @@ dependencies = [ "partitionlib", "redox-daemon", "redox-log", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -57,13 +56,13 @@ dependencies = [ "netutils", "redox-daemon", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] name = "aml" version = "0.16.3" -source = "git+https://github.com/rw-vanc/acpi.git?branch=cumulative#ac37b03f974ca58f3c024a058224ffd5b77fed31" +source = "git+https://github.com/rw-vanc/acpi.git?branch=cumulative#e4eb93891367e73d3633804002aa050edfbacb6e" dependencies = [ "bit_field", "bitvec", @@ -82,6 +81,15 @@ dependencies = [ "toml 0.7.3", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -149,7 +157,7 @@ version = "0.1.0" dependencies = [ "orbclient", "redox-daemon", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -163,9 +171,9 @@ dependencies = [ [[package]] name = "bit_field" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] name = "bitflags" @@ -197,9 +205,9 @@ checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byteorder" @@ -215,9 +223,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -243,14 +251,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "time", + "wasm-bindgen", "winapi 0.3.9", ] @@ -280,13 +290,29 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.48" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" dependencies = [ "cc", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + [[package]] name = "crc" version = "1.8.1" @@ -308,12 +334,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.11", + "crossbeam-utils 0.8.15", ] [[package]] @@ -329,12 +355,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if 1.0.0", - "once_cell", ] [[package]] @@ -343,6 +368,50 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" +[[package]] +name = "cxx" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.11", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.11", +] + [[package]] name = "e1000d" version = "0.1.0" @@ -351,7 +420,7 @@ dependencies = [ "netutils", "redox-daemon", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -389,9 +458,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -404,9 +473,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -414,15 +483,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -431,38 +500,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -511,6 +580,30 @@ dependencies = [ "libc", ] +[[package]] +name = "iana-time-zone" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + [[package]] name = "ided" version = "0.1.0" @@ -521,7 +614,7 @@ dependencies = [ "pcid", "redox-daemon", "redox-log", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -545,7 +638,7 @@ dependencies = [ "redox-daemon", "redox-log", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "spin", ] @@ -579,9 +672,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "ixgbed" @@ -591,14 +684,14 @@ dependencies = [ "netutils", "redox-daemon", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] name = "js-sys" -version = "0.3.59" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -627,9 +720,18 @@ checksum = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] [[package]] name = "linked-hash-map" @@ -639,9 +741,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg 1.1.0", "scopeguard", @@ -658,9 +760,9 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "maybe-uninit" @@ -717,7 +819,7 @@ dependencies = [ [[package]] name = "netutils" version = "0.1.0" -source = "git+https://gitlab.redox-os.org/redox-os/netutils.git?branch=redox-unix#34d1ec9c2e9f7904b57547ca16d4c3145c109880" +source = "git+https://gitlab.redox-os.org/redox-os/netutils.git?branch=redox-unix#105ed1ea43413a91152b289fbe76e7efc996e933" dependencies = [ "arg_parser", "extra", @@ -757,7 +859,7 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -799,21 +901,22 @@ dependencies = [ "pcid", "redox-daemon", "redox-log", - "redox_syscall 0.3.4", - "smallvec 1.9.0", + "redox_syscall 0.3.5", + "smallvec 1.10.0", ] [[package]] name = "once_cell" -version = "1.13.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "orbclient" -version = "0.3.32" -source = "git+https://gitlab.redox-os.org/redox-os/orbclient.git#192dc30edbad43ee8c5348411b162600d43dfaf9" +version = "0.3.43" +source = "git+https://gitlab.redox-os.org/redox-os/orbclient.git#f5f5d5cc761b61a9ee15a68b086c4967857ba805" dependencies = [ + "cfg-if 1.0.0", "libc", "raw-window-handle 0.3.4", "redox_syscall 0.2.16", @@ -850,7 +953,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -867,15 +970,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if 1.0.0", "instant", "libc", "redox_syscall 0.2.16", - "smallvec 1.9.0", + "smallvec 1.10.0", "winapi 0.3.9", ] @@ -907,7 +1010,7 @@ checksum = "0f35583365be5d148e959284f42526841917b7bfa09e2d1a7ad5dde2cf0eaa39" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -918,13 +1021,12 @@ checksum = "7f0b59668fe80c5afe998f0c0bf93322bf2cd66cafeeb80581f291716f3467f2" [[package]] name = "pbr" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff5751d87f7c00ae6403eb1fcbba229b9c76c9a30de8c1cf87182177b168cea2" +checksum = "ed5827dfa0d69b6c92493d6c38e633bbaa5937c153d0d7c28bf12313f8c6d514" dependencies = [ - "crossbeam-channel 0.5.6", + "crossbeam-channel 0.5.7", "libc", - "time", "winapi 0.3.9", ] @@ -940,13 +1042,13 @@ dependencies = [ "paw", "plain", "redox-log", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "serde", "serde_json", - "smallvec 1.9.0", + "smallvec 1.10.0", "structopt", "thiserror", - "toml 0.5.9", + "toml 0.5.11", ] [[package]] @@ -954,7 +1056,7 @@ name = "pcspkrd" version = "0.1.0" dependencies = [ "redox-daemon", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -990,7 +1092,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", "version_check", ] @@ -1021,7 +1123,7 @@ dependencies = [ "bitflags", "orbclient", "redox-daemon", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -1160,9 +1262,9 @@ dependencies = [ [[package]] name = "ransid" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22b9af151b0590163dfa64e1c92c0831377d61942df4c19820c704390ebc3045" +checksum = "86e40bb0bbe3ec5efa241ed57fad611b2c1642f1c60550f647201acee2494553" dependencies = [ "log", "vte", @@ -1214,7 +1316,7 @@ checksum = "cbf6d33a003a5c0b94ec11f10c7c797303f236592964ddb1bfb93e1b438a1557" dependencies = [ "chrono", "log", - "smallvec 1.9.0", + "smallvec 1.10.0", "termion", ] @@ -1223,7 +1325,7 @@ name = "redox_event" version = "0.1.0" source = "git+https://gitlab.redox-os.org/redox-os/event.git#f7db3d25ca5e282c12ded12bf6c720087b570132" dependencies = [ - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -1237,9 +1339,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb02a9aee8e8c7ad8d86890f1e16b49e0bbbffc9961ff3788c31d57c98bcbf03" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] @@ -1264,7 +1366,7 @@ dependencies = [ "redox-daemon", "redox-log", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -1286,9 +1388,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "sb16d" @@ -1299,7 +1401,7 @@ dependencies = [ "redox-daemon", "redox-log", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "spin", ] @@ -1309,6 +1411,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + [[package]] name = "scroll" version = "0.10.2" @@ -1326,7 +1434,7 @@ checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1356,22 +1464,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.158" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.158" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.11", ] [[package]] @@ -1396,9 +1504,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg 1.1.0", ] @@ -1414,27 +1522,27 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" dependencies = [ "serde", ] [[package]] name = "spin" -version = "0.9.4" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +checksum = "c0959fd6f767df20b231736396e4f602171e00d95205676286e79d4a4eb67bef" dependencies = [ "lock_api", ] [[package]] name = "spinning_top" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75adad84ee84b521fb2cca2d4fd0f1dab1d8d026bda3c5bea4ca63b5f9f9293c" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" dependencies = [ "lock_api", ] @@ -1491,14 +1599,14 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -1507,9 +1615,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40" +checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" dependencies = [ "proc-macro2", "quote", @@ -1522,6 +1630,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + [[package]] name = "termion" version = "1.5.6" @@ -1545,29 +1662,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.11", ] [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi", @@ -1585,15 +1702,15 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -1634,36 +1751,36 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.2" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "url" @@ -1692,7 +1809,7 @@ dependencies = [ "log", "orbclient", "redox-log", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "ux", "xhcid", ] @@ -1704,7 +1821,7 @@ dependencies = [ "base64", "plain", "redox-daemon", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "thiserror", "xhcid", ] @@ -1726,9 +1843,9 @@ dependencies = [ [[package]] name = "ux" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efdcf885b33bb81bc9336e66cebc10d503288449466c0e43e51250ddc93a3d8" +checksum = "2cb3ff47e36907a6267572c1e398ff32ef78ac5131de8aa272e53846592c207e" [[package]] name = "vboxd" @@ -1737,7 +1854,7 @@ dependencies = [ "orbclient", "redox-daemon", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", ] [[package]] @@ -1748,9 +1865,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version-compare" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "version_check" @@ -1765,7 +1882,7 @@ dependencies = [ "orbclient", "ransid", "redox-daemon", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "rusttype", ] @@ -1786,9 +1903,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.82" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -1796,24 +1913,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.82" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.82" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1821,28 +1938,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.82" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.82" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "web-sys" -version = "0.3.59" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -1876,12 +1993,87 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "winnow" version = "0.4.1" @@ -1925,10 +2117,10 @@ dependencies = [ "redox-daemon", "redox-log", "redox_event", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "serde", "serde_json", - "smallvec 1.9.0", + "smallvec 1.10.0", "thiserror", - "toml 0.5.9", + "toml 0.5.11", ] diff --git a/acpid/Cargo.toml b/acpid/Cargo.toml index 3e052af591..f093a1e284 100644 --- a/acpid/Cargo.toml +++ b/acpid/Cargo.toml @@ -18,6 +18,5 @@ redox-log = "0.1.1" redox_syscall = "0.3" rustc-hash = "1.1.0" thiserror = "1" -toml = "0.7" serde_json = "1.0.94" amlserde = { path = "../amlserde" } \ No newline at end of file diff --git a/acpid/src/acpi.rs b/acpid/src/acpi.rs index c33dc33fb0..5b72fb1d26 100644 --- a/acpid/src/acpi.rs +++ b/acpid/src/acpi.rs @@ -1,10 +1,9 @@ -use amlserde::{AmlHandleLookup, AmlSerde}; use rustc_hash::FxHashMap; use std::convert::{TryFrom, TryInto}; +use std::fmt::Write; use std::ops::Deref; use std::sync::Arc; use std::{fmt, mem}; -use std::fmt::Write; use syscall::flag::PhysmapFlags; @@ -14,8 +13,9 @@ use syscall::io::{Io, Pio}; use parking_lot::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use thiserror::Error; -use aml::{AmlContext, AmlError, AmlHandle, AmlName, AmlValue}; -use amlserde::pretty_name; +use aml::{AmlContext, AmlError, AmlHandle, AmlName}; +use amlserde::aml_serde_name::aml_to_symbol; +use amlserde::{AmlHandleLookup, AmlSerde}; pub mod dmar; use self::dmar::Dmar; @@ -54,8 +54,7 @@ impl SdtHeader { } } pub fn length(&self) -> usize { - self - .length + self.length .try_into() .expect("expected usize to be at least 32 bits") } @@ -120,9 +119,7 @@ impl Deref for PhysmapGuard { type Target = [u8]; fn deref(&self) -> &Self::Target { - unsafe { - std::slice::from_raw_parts(self.virt as *const u8, self.size) - } + unsafe { std::slice::from_raw_parts(self.virt as *const u8, self.size) } } } impl Drop for PhysmapGuard { @@ -247,8 +244,107 @@ pub struct Ssdt(Sdt); pub struct AmlSymbols { aml_context: AmlContext, // k = name, v = description - symbols_cache: FxHashMap, - pub symbols_str: String, + cache: FxHashMap, + list: String, +} + +impl AmlSymbols { + pub fn new() -> Self { + Self { + aml_context: AmlContext::new(Box::new(AmlPhysMemHandler), aml::DebugVerbosity::None), + cache: FxHashMap::default(), + list: "".to_string(), + } + } + + pub fn mut_aml_context(&mut self) -> &mut AmlContext { + &mut self.aml_context + } + + pub fn symbols_str(&self) -> &String { + &self.list + } + + pub fn symbols_cache(&self) -> &FxHashMap { + &self.cache + } + + pub fn parse_table(&mut self, aml: &[u8]) -> Result<(), AmlError> { + self.aml_context.parse_table(aml) + } + + pub fn lookup(&self, symbol: &str) -> Option { + if let Some(description) = self.cache.get(symbol) { + log::trace!("Found symbol in cache, {}, {}", symbol, description); + return Some(description.to_owned()); + } + None + } + + pub fn build_cache(&mut self) { + let mut symbol_list: Vec<(AmlName, String, AmlHandle)> = Vec::with_capacity(5000); + + if self + .aml_context + .namespace + .traverse(|level_aml_name, level| { + for (child_seg, handle) in level.values.iter() { + if let Ok(aml_name) = + AmlName::from_name_seg(child_seg.to_owned()).resolve(level_aml_name) + { + let name = aml_to_symbol(&aml_name); + symbol_list.push((aml_name, name, handle.to_owned())); + } else { + log::error!( + "AmlName resolve failed, {:?}:{:?}", + level_aml_name, + child_seg + ); + } + } + Ok(true) + }) + .is_err() + { + log::error!("Namespace traverse failed"); + return; + } + + let mut symbols_str = String::with_capacity(symbol_list.len() * 10); + let mut handle_lookup = AmlHandleLookup::new(); + + for (aml_name, name, handle) in &symbol_list { + let _ = writeln!(symbols_str, "{}", &name); + handle_lookup.insert(handle.to_owned(), aml_name.to_owned()); + } + + symbols_str.shrink_to_fit(); + + let mut symbol_cache: FxHashMap = FxHashMap::default(); + + for (aml_name, name, handle) in &symbol_list { + // create an empty entry, in case something goes wrong with serialization + symbol_cache.insert(name.to_owned(), "".to_owned()); + if let Some(ser_value) = AmlSerde::from_aml( + &mut self.aml_context, + &handle_lookup, + &aml_to_symbol(aml_name), + aml_name, + handle, + ) { + if let Ok(ser_string) = serde_json::to_string_pretty(&ser_value) { + // replace the empty entry + symbol_cache.insert(name.to_owned(), ser_string); + } + } + } + + // Cache the new list + log::trace!("Updating symbols list"); + + self.list = symbols_str; + self.cache = symbol_cache; + } } pub struct AcpiContext { @@ -286,14 +382,7 @@ impl AcpiContext { fadt: None, // Temporary values - aml_symbols: RwLock::new(AmlSymbols { - aml_context: AmlContext::new( - Box::new(AmlPhysMemHandler), - aml::DebugVerbosity::None, - ), - symbols_cache: FxHashMap::default(), - symbols_str: "".to_string(), - }), + aml_symbols: RwLock::new(AmlSymbols::new()), next_ctx: RwLock::new(0), @@ -307,17 +396,16 @@ impl AcpiContext { Fadt::init(&mut this); //TODO (hangs on real hardware): Dmar::init(&this); - this.aml_symbols.write().aml_context = AcpiContext::build_aml_context(&this); + AcpiContext::build_aml_context(&this); this } - fn build_aml_context(acpi: &AcpiContext) -> AmlContext { - let mut aml_context = - AmlContext::new(Box::new(AmlPhysMemHandler), aml::DebugVerbosity::None); + fn build_aml_context(acpi: &AcpiContext) { + let mut aml_symbols = acpi.aml_symbols.write(); if let Some(dsdt) = acpi.dsdt() { - match aml_context.parse_table(dsdt.aml()) { + match aml_symbols.parse_table(dsdt.aml()) { Ok(_) => log::trace!("Parsed DSDT"), Err(e) => { log::error!("DSDT: {:?}", e); @@ -328,14 +416,13 @@ impl AcpiContext { } for ssdt in acpi.ssdts() { - match aml_context.parse_table(ssdt.aml()) { + match aml_symbols.parse_table(ssdt.aml()) { Ok(_) => log::trace!("Parsed SSDT"), Err(e) => { log::error!("SSDT: {:?}", e); } } } - aml_context } pub fn dsdt(&self) -> Option<&Dsdt> { @@ -402,18 +489,16 @@ impl AcpiContext { pub fn aml_lookup(&self, symbol: &str) -> Option { if let Ok(aml_symbols) = self.aml_symbols() { - if let Some(description) = aml_symbols.symbols_cache.get(symbol) { - log::trace!("Found symbol in cache, {}, {}", symbol, description); - return Some(description.to_owned()); - } + aml_symbols.lookup(symbol) + } else { + None } - None } pub fn aml_symbols(&self) -> Result, AmlError> { // return the cached value if it exists let symbols = self.aml_symbols.read(); - if !symbols.symbols_cache.is_empty() { + if !symbols.symbols_cache().is_empty() { return Ok(symbols); } // free the read lock @@ -422,57 +507,9 @@ impl AcpiContext { // List has not been initialized, we have to build it log::trace!("Creating symbols list"); - let mut symbol_list: Vec<(AmlName, String, AmlHandle)> = Vec::with_capacity(5000); - let mut aml_symbols = self.aml_symbols.write(); - aml_symbols - .aml_context - .namespace - .traverse(|level_aml_name, level| { - for (child_seg, handle) in level.values.iter() { - if let Ok(aml_name) = - AmlName::from_name_seg(child_seg.to_owned()).resolve(level_aml_name) - { - let name = pretty_name(&aml_name); - symbol_list.push((aml_name, name, handle.to_owned())); - } else { - log::error!( - "AmlName resolve failed, {:?}:{:?}", - level_aml_name, - child_seg - ); - } - } - Ok(true) - })?; - - let mut symbols_str = String::with_capacity(symbol_list.len() * 10); - let mut handle_lookup = AmlHandleLookup::new(); - - for (_aml_name, name, handle) in &symbol_list { - let _ = writeln!(symbols_str, "{}", &name); - handle_lookup.insert(handle.to_owned(), name.to_owned()); - } - - symbols_str.shrink_to_fit(); - - let mut symbol_cache: FxHashMap = FxHashMap::default(); - - for (_aml_name, name, handle) in &symbol_list { - if let Some(ser_value) = AmlSerde::from_aml(&aml_symbols.aml_context, &handle_lookup, handle) { - if let Ok(ser_string) = serde_json::to_string_pretty(&ser_value) { - symbol_cache.insert(name.to_owned(), ser_string); - } - } - } - - - // Cache the new list - log::trace!("Updating symbols list"); - - aml_symbols.symbols_str = symbols_str; - aml_symbols.symbols_cache = symbol_cache; + aml_symbols.build_cache(); // return the cached value Ok(RwLockWriteGuard::downgrade(aml_symbols)) @@ -481,8 +518,8 @@ impl AcpiContext { /// Discard any cached symbols list. To be called if the AML namespace changes. pub fn aml_symbols_reset(&self) { let mut aml_symbols = self.aml_symbols.write(); - aml_symbols.symbols_cache = FxHashMap::default(); - aml_symbols.symbols_str = "".to_string(); + aml_symbols.cache = FxHashMap::default(); + aml_symbols.list = "".to_string(); } /// Set Power State diff --git a/acpid/src/scheme.rs b/acpid/src/scheme.rs index 99151814f1..a4d598fbc5 100644 --- a/acpid/src/scheme.rs +++ b/acpid/src/scheme.rs @@ -45,7 +45,7 @@ impl HandleKind<'_> { Self::TopLevel => TOPLEVEL_CONTENTS.len(), Self::Tables => acpi_ctx.tables().len().checked_mul(TABLE_DENTRY_LENGTH).unwrap_or(usize::max_value()), Self::Table(signature) => acpi_ctx.sdt_from_signature(signature).ok_or(Error::new(EBADFD))?.length(), - Self::Symbols(aml_symbols) => aml_symbols.symbols_str.len(), + Self::Symbols(aml_symbols) => aml_symbols.symbols_str().len(), Self::Symbol(description) => description.len(), }) } @@ -287,7 +287,7 @@ impl SchemeMut for AcpiScheme<'_> { } HandleKind::Symbols(aml_symbols) => { - let symbols = &aml_symbols.symbols_str; + let symbols = aml_symbols.symbols_str(); let offset = std::cmp::min(symbols.len(), handle.offset); let src_buf = &symbols.as_bytes()[offset..]; diff --git a/amlserde/src/lib.rs b/amlserde/src/lib.rs index 51417c776f..ae76fee781 100644 --- a/amlserde/src/lib.rs +++ b/amlserde/src/lib.rs @@ -1,7 +1,5 @@ -use aml::{ - value::{FieldAccessType, FieldUpdateRule, RegionSpace}, - AmlContext, AmlHandle, AmlName, AmlValue, -}; +use aml::value::{FieldAccessType, FieldUpdateRule, RegionSpace}; +use aml::{AmlContext, AmlHandle, AmlName, AmlValue}; use rustc_hash::FxHashMap; use serde::{Deserialize, Serialize}; @@ -75,9 +73,9 @@ pub enum AmlSerdeRegionSpace { #[derive(Debug, Serialize, Deserialize)] pub struct AmlSerdeFieldFlags { - access_type: AmlSerdeFieldAccessType, - lock_rule: bool, - update_rule: AmlSerdeFieldUpdateRule, + pub access_type: AmlSerdeFieldAccessType, + pub lock_rule: bool, + pub update_rule: AmlSerdeFieldUpdateRule, } #[derive(Debug, Serialize, Deserialize)] @@ -106,16 +104,12 @@ impl AmlSerde { } pub fn from_aml( - aml_context: &AmlContext, + aml_context: &mut AmlContext, aml_lookup: &AmlHandleLookup, + name: &String, + aml_name: &AmlName, handle: &AmlHandle, ) -> Option { - let name = if let Some((name, _handle)) = aml_lookup.get(handle) { - name.to_owned() - } else { - return None; - }; - let aml_value = if let Ok(aml_value) = aml_context.namespace.get(handle.clone()) { aml_value } else { @@ -128,7 +122,10 @@ impl AmlSerde { return None; }; - Some(AmlSerde { name, value }) + Some(AmlSerde { + name: aml_name.to_string(), + value, + }) } } @@ -167,7 +164,7 @@ impl AmlSerdeValue { offset: offset.to_owned(), length: length.to_owned(), parent_device: if let Some(parent) = parent_device { - Some(pretty_name(parent)) + Some(parent.to_string()) } else { None }, @@ -180,7 +177,7 @@ impl AmlSerdeValue { length, } => AmlSerdeValue::Field { region: if let Some((region, _handle)) = aml_lookup.get(region) { - region.to_owned() + region.to_string() } else { return None; }, @@ -254,8 +251,42 @@ impl AmlSerdeValue { } } +pub mod aml_serde_name { + use aml::AmlName; + + /// Add a leading backslash to make the name a valid + /// namespace reference + pub fn to_aml_format(pretty_name: &String) -> String { + format!("\\{}", pretty_name) + } + + /// convert a string from AML namespace style to + /// acpi symbol style + pub fn to_symbol(aml_style_name: &String) -> String { + let mut name = aml_style_name.to_owned(); + + // remove leading slash + name = name.trim_start_matches("\\").to_owned(); + // remove unnecessary underscores + while let Some(index) = name.find("_.") { + name.remove(index); + } + while name.len() > 0 && &name[name.len() - 1..] == "_" { + name.pop(); + } + name.shrink_to_fit(); + name + } + + /// Convert to string and remove + /// trailing underscores from each name segment + pub fn aml_to_symbol(aml_name: &AmlName) -> String { + to_symbol(&aml_name.as_string()) + } +} + pub struct AmlHandleLookup { - map: FxHashMap, + map: FxHashMap, } impl AmlHandleLookup { @@ -269,27 +300,12 @@ impl AmlHandleLookup { format!("{:?}", handle) } - pub fn insert(&mut self, handle: AmlHandle, name: String) { - self.map.insert(self.handle_to_key(&handle), (name, handle)); + pub fn insert(&mut self, handle: AmlHandle, aml_name: AmlName) { + self.map + .insert(self.handle_to_key(&handle), (aml_name, handle)); } - pub fn get(&self, handle: &AmlHandle) -> Option<&(String, AmlHandle)> { + pub fn get(&self, handle: &AmlHandle) -> Option<&(AmlName, AmlHandle)> { self.map.get(&self.handle_to_key(handle)) } } - -/// Remove trailing underscores from each name segment -pub fn pretty_name(aml_name: &AmlName) -> String { - let mut name = aml_name.as_string(); - // remove leading slash - name = name.trim_start_matches("\\").to_owned(); - // remove unnecessary underscores - while let Some(index) = name.find("_.") { - name.remove(index); - } - while name.len() > 0 && &name[name.len() - 1..] == "_" { - name.pop(); - } - name.shrink_to_fit(); - name -}