From 4c35e88997762033971490e18864206bcde40e79 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Tue, 19 Mar 2024 17:05:59 +0100 Subject: [PATCH 1/2] Use latest event queue interface everywhere. --- Cargo.lock | 415 +++++++++++++++------------------- audio/ac97d/Cargo.toml | 6 +- audio/ac97d/src/main.rs | 213 ++++++++--------- audio/ihdad/Cargo.toml | 10 +- audio/ihdad/src/main.rs | 213 ++++++++--------- audio/pcspkrd/Cargo.toml | 2 +- audio/sb16d/Cargo.toml | 8 +- audio/sb16d/src/main.rs | 169 +++++--------- graphics/bgad/Cargo.toml | 4 +- graphics/fbcond/Cargo.toml | 2 +- net/alxd/Cargo.toml | 4 +- net/alxd/src/main.rs | 159 ++++++------- net/driver-network/Cargo.toml | 1 - net/e1000d/Cargo.toml | 8 +- net/e1000d/src/main.rs | 65 +++--- net/ixgbed/Cargo.toml | 6 +- net/ixgbed/src/main.rs | 65 +++--- net/rtl8139d/Cargo.toml | 6 +- net/rtl8139d/src/main.rs | 67 +++--- net/rtl8168d/Cargo.toml | 6 +- net/rtl8168d/src/main.rs | 67 +++--- pcid/Cargo.toml | 2 +- ps2d/Cargo.toml | 2 +- storage/lived/Cargo.toml | 2 +- storage/usbscsid/Cargo.toml | 2 +- usbhidd/Cargo.toml | 6 +- usbhidd/src/report_desc.rs | 1 + vboxd/Cargo.toml | 6 +- vboxd/src/main.rs | 40 ++-- virtio-core/Cargo.toml | 4 +- virtio-core/src/transport.rs | 23 +- 31 files changed, 678 insertions(+), 906 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c5879c1d3..7286e2c967 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,7 +13,7 @@ dependencies = [ "pcid", "redox-daemon", "redox-log", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", "spin", ] @@ -59,11 +59,11 @@ dependencies = [ name = "alxd" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "libredox 0.1.3", "redox-daemon", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", ] @@ -86,7 +86,7 @@ dependencies = [ "aml", "rustc-hash", "serde", - "toml 0.7.7", + "toml 0.7.8", ] [[package]] @@ -115,9 +115,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "arrayvec" @@ -157,7 +157,7 @@ dependencies = [ "fdt 0.1.5", "libredox 0.1.3", "redox-daemon", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", ] [[package]] @@ -168,7 +168,7 @@ dependencies = [ "orbclient", "pcid", "redox-daemon", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", ] [[package]] @@ -194,9 +194,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitvec" @@ -212,24 +212,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.0.83" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -255,9 +252,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.30" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" dependencies = [ "android-tzdata", "iana-time-zone", @@ -292,9 +289,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "crc" @@ -307,9 +304,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crossbeam-channel" @@ -323,12 +320,11 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.8" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils 0.8.16", + "crossbeam-utils 0.8.19", ] [[package]] @@ -344,12 +340,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "driver-block" @@ -364,7 +357,6 @@ name = "driver-network" version = "0.1.0" dependencies = [ "libredox 0.1.3", - "redox_event 0.1.0", "redox_syscall 0.5.1", ] @@ -372,13 +364,13 @@ dependencies = [ name = "e1000d" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "driver-network", "libredox 0.1.3", "pcid", "redox-daemon", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", ] @@ -397,7 +389,7 @@ dependencies = [ "orbclient", "ransid", "redox-daemon", - "redox_event 0.2.1", + "redox_event", "redox_syscall 0.5.1", ] @@ -429,9 +421,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -444,9 +436,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -454,15 +446,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -471,38 +463,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.53", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -518,9 +510,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if 1.0.0", "libc", @@ -533,7 +525,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8283e7331b8c93b9756e0cfdbcfb90312852f953c6faf9bf741e684cc3b6ad69" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "crc", "log", "uuid", @@ -541,9 +533,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -565,16 +557,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -604,23 +596,23 @@ dependencies = [ name = "ihdad" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "libredox 0.1.3", "log", "pcid", "redox-daemon", "redox-log", - "redox_event 0.1.0", - "redox_syscall 0.4.1", + "redox_event", + "redox_syscall 0.5.1", "spin", ] [[package]] name = "indexmap" -version = "2.0.0" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", "hashbrown", @@ -651,29 +643,29 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "ixgbed" version = "1.0.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "driver-network", "libredox 0.1.3", "pcid", "redox-daemon", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -692,11 +684,11 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libredox" -version = "0.0.1" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "libc", "redox_syscall 0.4.1", ] @@ -707,7 +699,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "libc", "redox_syscall 0.5.1", ] @@ -719,15 +711,15 @@ dependencies = [ "anyhow", "libredox 0.1.3", "redox-daemon", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", "slab", ] [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -735,9 +727,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "maybe-uninit" @@ -747,9 +739,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.6.3" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "num-derive" @@ -764,9 +756,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -794,22 +786,22 @@ dependencies = [ "redox-daemon", "redox-log", "redox_syscall 0.5.1", - "smallvec 1.11.0", + "smallvec 1.13.1", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "orbclient" -version = "0.3.46" -source = "git+https://gitlab.redox-os.org/redox-os/orbclient.git#b24be0556b79bf7c78e2fbd76d5d97c9b1262251" +version = "0.3.47" +source = "git+https://gitlab.redox-os.org/redox-os/orbclient.git#8de2b5ac9ff71811cde41e3085fe6722a823a7e2" dependencies = [ "libc", - "redox_syscall 0.3.5", + "libredox 0.0.2", "sdl2", "sdl2-sys", ] @@ -866,7 +858,7 @@ dependencies = [ "instant", "libc", "redox_syscall 0.2.16", - "smallvec 1.11.0", + "smallvec 1.13.1", "winapi", ] @@ -915,12 +907,12 @@ checksum = "7f0b59668fe80c5afe998f0c0bf93322bf2cd66cafeeb80581f291716f3467f2" [[package]] name = "pci_types" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831e5bebf010674bc2e8070b892948120d4c453c71f37387e1ffea5636620dbe" +checksum = "ebac2b2ee11791f721a51184b632a916b3044f2ee7b2374e7fdcfdf3eaf29c79" dependencies = [ "bit_field", - "bitflags 2.4.2", + "bitflags 2.5.0", ] [[package]] @@ -940,7 +932,7 @@ dependencies = [ "pci_types", "plain", "redox-log", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", "serde", "serde_json", "structopt", @@ -954,7 +946,7 @@ version = "0.1.0" dependencies = [ "libredox 0.1.3", "redox-daemon", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", ] [[package]] @@ -1001,9 +993,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -1016,14 +1008,14 @@ dependencies = [ "libredox 0.1.3", "orbclient", "redox-daemon", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1092,42 +1084,23 @@ dependencies = [ [[package]] name = "redox-log" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf6d33a003a5c0b94ec11f10c7c797303f236592964ddb1bfb93e1b438a1557" +checksum = "dbd7c67eb2d8e610a74a8f1e67eecd3042f87b1aebfa620de4b40257265a54f2" dependencies = [ "chrono", "log", - "smallvec 1.11.0", + "smallvec 1.13.1", "termion", ] -[[package]] -name = "redox_event" -version = "0.1.0" -source = "git+https://gitlab.redox-os.org/redox-os/event.git#3f9ca18968d2c2d0f9ea819983d666f8b24eacf1" -dependencies = [ - "redox_syscall 0.4.1", -] - -[[package]] -name = "redox_event" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475e252d7add4825405d2248d530d33e22364ac5477eab816b56efbeec1e2712" -dependencies = [ - "bitflags 2.4.2", - "libredox 0.0.1", - "redox_syscall 0.4.1", -] - [[package]] name = "redox_event" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69609faa5d5992247a4ef379917bb3e39be281405d6a0ccd4f942429400b956f" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "libredox 0.1.3", ] @@ -1140,15 +1113,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -1164,23 +1128,20 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", ] [[package]] name = "redox_termios" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f" -dependencies = [ - "redox_syscall 0.2.16", -] +checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb" [[package]] name = "rtl8139d" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "driver-network", "libredox 0.1.3", @@ -1188,7 +1149,7 @@ dependencies = [ "pcid", "redox-daemon", "redox-log", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", ] @@ -1196,7 +1157,7 @@ dependencies = [ name = "rtl8168d" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "driver-network", "libredox 0.1.3", @@ -1204,7 +1165,7 @@ dependencies = [ "pcid", "redox-daemon", "redox-log", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", ] @@ -1216,22 +1177,22 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "sb16d" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "common", "libredox 0.1.3", "log", "redox-daemon", "redox-log", - "redox_event 0.1.0", - "redox_syscall 0.4.1", + "redox_event", + "redox_syscall 0.5.1", "spin", ] @@ -1286,29 +1247,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.188" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.53", ] [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", @@ -1317,9 +1278,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -1344,9 +1305,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" dependencies = [ "serde", ] @@ -1425,9 +1386,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.31" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -1442,13 +1403,13 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "termion" -version = "1.5.6" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" +checksum = "c4648c7def6f2043b2568617b9f9b75eae88ca185dbc1f1fda30e95a85d49d7d" dependencies = [ "libc", + "libredox 0.0.2", "numtoa", - "redox_syscall 0.2.16", "redox_termios", ] @@ -1463,22 +1424,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.53", ] [[package]] @@ -1492,9 +1453,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0a3ab2091e52d7299a39d098e200114a972df0a7724add02a273aa9aada592" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", "serde_spanned", @@ -1504,9 +1465,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -1526,21 +1487,21 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "usbctl" @@ -1554,11 +1515,11 @@ dependencies = [ name = "usbhidd" version = "0.1.0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "log", "orbclient", "redox-log", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", "ux", "xhcid", ] @@ -1571,7 +1532,7 @@ dependencies = [ "libredox 0.1.3", "plain", "redox-daemon", - "redox_syscall 0.4.1", + "redox_syscall 0.5.1", "thiserror", "xhcid", ] @@ -1584,9 +1545,9 @@ checksum = "8772a4ccbb4e89959023bc5b7cb8623a795caa7092d99f3aa9501b9484d4557d" [[package]] name = "uuid" -version = "1.4.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "getrandom", ] @@ -1606,7 +1567,7 @@ dependencies = [ "orbclient", "pcid", "redox-daemon", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", ] @@ -1666,7 +1627,7 @@ dependencies = [ name = "virtio-core" version = "0.1.0" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "common", "crossbeam-queue", "futures", @@ -1674,7 +1635,7 @@ dependencies = [ "log", "pcid", "redox-log", - "redox_event 0.1.0", + "redox_event", "redox_syscall 0.5.1", "static_assertions", "thiserror", @@ -1733,9 +1694,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -1743,24 +1704,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.53", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1768,22 +1729,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.53", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "winapi" @@ -1808,19 +1769,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -1833,51 +1794,51 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winnow" -version = "0.5.15" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -1907,11 +1868,11 @@ dependencies = [ "plain", "redox-daemon", "redox-log", - "redox_event 0.4.1", + "redox_event", "redox_syscall 0.5.1", "serde", "serde_json", - "smallvec 1.11.0", + "smallvec 1.13.1", "thiserror", "toml 0.5.11", ] diff --git a/audio/ac97d/Cargo.toml b/audio/ac97d/Cargo.toml index 50b781cfca..da7d2f14c5 100644 --- a/audio/ac97d/Cargo.toml +++ b/audio/ac97d/Cargo.toml @@ -6,12 +6,12 @@ edition = "2018" [dependencies] bitflags = "1" common = { path = "../../common" } +libredox = "0.1.3" log = "0.4" redox-daemon = "0.1" -redox-log = "0.1" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +redox-log = "0.1.2" +redox_event = "0.4.1" redox_syscall = "0.5" spin = "0.9" pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/audio/ac97d/src/main.rs b/audio/ac97d/src/main.rs index 8649e671d6..322f86e56a 100644 --- a/audio/ac97d/src/main.rs +++ b/audio/ac97d/src/main.rs @@ -12,7 +12,7 @@ use std::cell::RefCell; use std::sync::Arc; use std::usize; -use event::EventQueue; +use event::{user_data, EventQueue}; use libredox::flag; use pcid_interface::{PciBar, PcidServerHandle}; use redox_log::{OutputBuilder, RedoxLogger}; @@ -24,10 +24,10 @@ fn setup_logging() -> Option<&'static RedoxLogger> { let mut logger = RedoxLogger::new() .with_output( OutputBuilder::stderr() - .with_filter(log::LevelFilter::Info) // limit global output to important info - .with_ansi_escape_codes() - .flush_on_newline(true) - .build() + .with_filter(log::LevelFilter::Info) // limit global output to important info + .with_ansi_escape_codes() + .flush_on_newline(true) + .build() ); #[cfg(target_os = "redox")] @@ -35,8 +35,8 @@ fn setup_logging() -> Option<&'static RedoxLogger> { Ok(b) => logger = logger.with_output( // TODO: Add a configuration file for this b.with_filter(log::LevelFilter::Info) - .flush_on_newline(true) - .build() + .flush_on_newline(true) + .build() ), Err(error) => eprintln!("ac97d: failed to create ac97.log: {}", error), } @@ -45,9 +45,9 @@ fn setup_logging() -> Option<&'static RedoxLogger> { match OutputBuilder::in_redox_logging_scheme("audio", "pcie", "ac97.ansi.log") { Ok(b) => logger = logger.with_output( b.with_filter(log::LevelFilter::Info) - .with_ansi_escape_codes() - .flush_on_newline(true) - .build() + .with_ansi_escape_codes() + .flush_on_newline(true) + .build() ), Err(error) => eprintln!("ac97d: failed to create ac97.ansi.log: {}", error), } @@ -65,145 +65,110 @@ fn setup_logging() -> Option<&'static RedoxLogger> { } fn main() { - let mut pcid_handle = + let mut pcid_handle = PcidServerHandle::connect_default().expect("ac97d: failed to setup channel to pcid"); let pci_config = pcid_handle .fetch_config() .expect("ac97d: failed to fetch config"); - let mut name = pci_config.func.name(); - name.push_str("_ac97"); + let mut name = pci_config.func.name(); + name.push_str("_ac97"); - let bar0 = pci_config.func.bars[0].expect_port(); - let bar1 = pci_config.func.bars[1].expect_port(); + let bar0 = pci_config.func.bars[0].expect_port(); + let bar1 = pci_config.func.bars[1].expect_port(); - let irq = pci_config.func.legacy_interrupt_line.expect("ac97d: no legacy interrupts supported"); + let irq = pci_config.func.legacy_interrupt_line.expect("ac97d: no legacy interrupts supported"); - println!(" + ac97 {}", pci_config.func.display()); + println!(" + ac97 {}", pci_config.func.display()); - // Daemonize + // Daemonize redox_daemon::Daemon::new(move |daemon| { - let _logger_ref = setup_logging(); + let _logger_ref = setup_logging(); common::acquire_port_io_rights().expect("ac97d: failed to set I/O privilege level to Ring 3"); - let mut irq_file = irq.irq_handle("ac97d"); + let mut irq_file = irq.irq_handle("ac97d"); - let device = Arc::new(RefCell::new(unsafe { device::Ac97::new(bar0, bar1).expect("ac97d: failed to allocate device") })); - let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("ac97d: failed to create hda scheme"); - let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); + let mut device = unsafe { device::Ac97::new(bar0, bar1).expect("ac97d: failed to allocate device") }; + let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("ac97d: failed to create hda scheme"); + let mut socket = unsafe { File::from_raw_fd(socket_fd as RawFd) }; + + user_data! { + enum Source { + Irq, + Scheme, + } + } + + let mut event_queue = EventQueue::::new().expect("ac97d: Could not create event queue."); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + event_queue.subscribe(socket_fd, Source::Scheme, event::EventFlags::READ).unwrap(); daemon.ready().expect("ac97d: failed to signal readiness"); - let mut event_queue = EventQueue::::new().expect("ac97d: Could not create event queue."); - libredox::call::setrens(0, 0).expect("ac97d: failed to enter null namespace"); - let todo = Arc::new(RefCell::new(Vec::::new())); + let mut todo = Vec::::new(); - let todo_irq = todo.clone(); - let device_irq = device.clone(); - let socket_irq = socket.clone(); + 'events: for event in event_queue.map(|e| e.expect("ac97d: failed to get next event")) { + match event.user_data { + Source::Irq => { + let mut irq = [0; 8]; + irq_file.read(&mut irq).unwrap(); - event_queue.add(irq_file.as_raw_fd(), move |_event| -> Result> { - let mut irq = [0; 8]; - irq_file.read(&mut irq)?; + if device.irq() { + irq_file.write(&mut irq).unwrap(); - if device_irq.borrow_mut().irq() { - irq_file.write(&mut irq)?; + let mut i = 0; + while i < todo.len() { + if let Some(a) = device.handle(&mut todo[i]) { + let mut packet = todo.remove(i); + packet.a = a; + socket.write(&packet).unwrap(); + } else { + i += 1; + } + } - let mut todo = todo_irq.borrow_mut(); - let mut i = 0; - while i < todo.len() { - if let Some(a) = device_irq.borrow_mut().handle(&mut todo[i]) { - let mut packet = todo.remove(i); - packet.a = a; - socket_irq.borrow_mut().write(&packet)?; - } else { - i += 1; - } - } + /* + let next_read = device_irq.next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ + } + } + Source::Scheme => { + loop { + let mut packet = Packet::default(); + match socket.read(&mut packet) { + Ok(0) => break 'events, + Ok(_) => (), + Err(err) => if err.kind() == ErrorKind::WouldBlock { + break; + } else { + panic!("ac97d: failed to read socket: {err}"); + } + } - /* - let next_read = device_irq.next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - */ - } - Ok(None) - }).expect("ac97d: failed to catch events on IRQ file"); - let socket_fd = socket.borrow().as_raw_fd(); - let socket_packet = socket.clone(); - event_queue.add(socket_fd, move |_event| -> Result> { - loop { - let mut packet = Packet::default(); - match socket_packet.borrow_mut().read(&mut packet) { - Ok(0) => return Ok(Some(0)), - Ok(_) => (), - Err(err) => if err.kind() == ErrorKind::WouldBlock { - break; - } else { - return Err(err); - } - } + if let Some(a) = device.handle(&mut packet) { + packet.a = a; + socket.write(&packet).unwrap(); + } else { + todo.push(packet); + } + } - if let Some(a) = device.borrow_mut().handle(&mut packet) { - packet.a = a; - socket_packet.borrow_mut().write(&packet)?; - } else { - todo.borrow_mut().push(packet); - } - } - - /* - let next_read = device.borrow().next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - */ - - Ok(None) - }).expect("ac97d: failed to catch events on IRQ file"); - - for event_count in event_queue.trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }).expect("ac97d: failed to trigger events") { - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("ac97d: failed to write event"); - } - - loop { - { - //device_loop.borrow_mut().handle_interrupts(); - } - let event_count = event_queue.run().expect("ac97d: failed to handle events"); - if event_count == 0 { - //TODO: Handle todo - break; - } - - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("ac97d: failed to write event"); - } + /* + let next_read = device.borrow().next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ + } + } + } std::process::exit(0); - }).expect("ac97d: failed to daemonize"); + }).expect("ac97d: failed to daemonize"); } diff --git a/audio/ihdad/Cargo.toml b/audio/ihdad/Cargo.toml index 736e98d31e..c356f48056 100644 --- a/audio/ihdad/Cargo.toml +++ b/audio/ihdad/Cargo.toml @@ -4,14 +4,14 @@ version = "0.1.0" edition = "2018" [dependencies] -bitflags = "1" +bitflags = "2" +libredox = "0.1.3" log = "0.4" redox-daemon = "0.1" -redox-log = "0.1" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.4" +redox-log = "0.1.2" +redox_event = "0.4.1" +redox_syscall = "0.5" spin = "0.9" common = { path = "../../common" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/audio/ihdad/src/main.rs b/audio/ihdad/src/main.rs index bb29a49007..2e5c83a3fe 100755 --- a/audio/ihdad/src/main.rs +++ b/audio/ihdad/src/main.rs @@ -15,7 +15,7 @@ use syscall::{Packet, SchemeBlockMut, EventFlags}; use std::cell::RefCell; use std::sync::Arc; -use event::EventQueue; +use event::{user_data, EventQueue}; use pcid_interface::{MsiSetFeatureInfo, PcidServerHandle, PciFeature, PciFeatureInfo, SetFeatureInfo}; #[cfg(target_arch = "x86_64")] use pcid_interface::irq_helpers::allocate_single_interrupt_vector_for_msi; @@ -25,20 +25,20 @@ use redox_log::{OutputBuilder, RedoxLogger}; pub mod hda; /* - VEND:PROD - Virtualbox 8086:2668 - QEMU ICH9 8086:293E - 82801H ICH8 8086:284B -*/ + VEND:PROD + Virtualbox 8086:2668 + QEMU ICH9 8086:293E + 82801H ICH8 8086:284B + */ fn setup_logging() -> Option<&'static RedoxLogger> { let mut logger = RedoxLogger::new() .with_output( OutputBuilder::stderr() - .with_filter(log::LevelFilter::Debug) // limit global output to important info - .with_ansi_escape_codes() - .flush_on_newline(true) - .build() + .with_filter(log::LevelFilter::Debug) // limit global output to important info + .with_ansi_escape_codes() + .flush_on_newline(true) + .build() ); #[cfg(target_os = "redox")] @@ -46,8 +46,8 @@ fn setup_logging() -> Option<&'static RedoxLogger> { Ok(b) => logger = logger.with_output( // TODO: Add a configuration file for this b.with_filter(log::LevelFilter::Info) - .flush_on_newline(true) - .build() + .flush_on_newline(true) + .build() ), Err(error) => eprintln!("ihdad: failed to create ihda.log: {}", error), } @@ -56,9 +56,9 @@ fn setup_logging() -> Option<&'static RedoxLogger> { match OutputBuilder::in_redox_logging_scheme("audio", "pcie", "ihda.ansi.log") { Ok(b) => logger = logger.with_output( b.with_filter(log::LevelFilter::Info) - .with_ansi_escape_codes() - .flush_on_newline(true) - .build() + .with_ansi_escape_codes() + .flush_on_newline(true) + .build() ), Err(error) => eprintln!("ihdad: failed to create ihda.ansi.log: {}", error), } @@ -153,133 +153,100 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { log::info!(" + IHDA {}", pci_config.func.display()); - let address = unsafe { bar.physmap_mem("ihdad") } as usize; + let address = unsafe { bar.physmap_mem("ihdad") } as usize; //TODO: MSI-X let mut irq_file = get_int_method(&mut pcid_handle); - { - let vend_prod: u32 = ((pci_config.func.full_device_id.vendor_id as u32) << 16) + { + let vend_prod: u32 = ((pci_config.func.full_device_id.vendor_id as u32) << 16) | (pci_config.func.full_device_id.device_id as u32); - let device = Arc::new(RefCell::new(unsafe { hda::IntelHDA::new(address, vend_prod).expect("ihdad: failed to allocate device") })); - let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("ihdad: failed to create hda scheme"); - let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); - daemon.ready().expect("ihdad: failed to signal readiness"); + user_data! { + enum Source { + Irq, + Scheme, + } + } - let mut event_queue = EventQueue::::new().expect("ihdad: Could not create event queue."); + let mut event_queue = EventQueue::::new().expect("ihdad: Could not create event queue."); + let mut device = unsafe { hda::IntelHDA::new(address, vend_prod).expect("ihdad: failed to allocate device") }; + let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("ihdad: failed to create hda scheme"); + let mut socket = unsafe { File::from_raw_fd(socket_fd as RawFd) }; + + event_queue.subscribe(socket_fd, Source::Scheme, event::EventFlags::READ).unwrap(); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + + daemon.ready().expect("ihdad: failed to signal readiness"); libredox::call::setrens(0, 0).expect("ihdad: failed to enter null namespace"); - let todo = Arc::new(RefCell::new(Vec::::new())); + let mut todo = Vec::::new(); - let todo_irq = todo.clone(); - let device_irq = device.clone(); - let socket_irq = socket.clone(); - event_queue.add(irq_file.as_raw_fd(), move |_event| -> Result> { - let mut irq = [0; 8]; - irq_file.read(&mut irq)?; + 'events: for event in event_queue.map(|e| e.expect("failed to get next event")) { + match event.user_data { + Source::Irq => { + let mut irq = [0; 8]; + irq_file.read(&mut irq).unwrap(); - if device_irq.borrow_mut().irq() { - irq_file.write(&mut irq)?; + if device.irq() { + irq_file.write(&mut irq).unwrap(); - let mut todo = todo_irq.borrow_mut(); - let mut i = 0; - while i < todo.len() { - if let Some(a) = device_irq.borrow_mut().handle(&mut todo[i]) { - let mut packet = todo.remove(i); - packet.a = a; - socket_irq.borrow_mut().write(&packet)?; - } else { - i += 1; - } - } + let mut i = 0; + while i < todo.len() { + if let Some(a) = device.handle(&mut todo[i]) { + let mut packet = todo.remove(i); + packet.a = a; + socket.write(&packet).unwrap(); + } else { + i += 1; + } + } - /* - let next_read = device_irq.next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - */ - } - Ok(None) - }).expect("ihdad: failed to catch events on IRQ file"); - let socket_fd = socket.borrow().as_raw_fd(); - let socket_packet = socket.clone(); - event_queue.add(socket_fd, move |_event| -> Result> { - loop { - let mut packet = Packet::default(); - match socket_packet.borrow_mut().read(&mut packet) { - Ok(0) => return Ok(Some(0)), - Ok(_) => (), - Err(err) => if err.kind() == ErrorKind::WouldBlock { - break; - } else { - return Err(err); - } - } + /* + let next_read = device_irq.next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ + } + } + Source::Scheme => { + loop { + let mut packet = Packet::default(); + match socket.read(&mut packet) { + Ok(0) => break 'events, + Ok(_) => (), + Err(err) => if err.kind() == ErrorKind::WouldBlock { + break; + } else { + panic!("ihdad: failed to read from socket: {err}"); + } + } - if let Some(a) = device.borrow_mut().handle(&mut packet) { - packet.a = a; - socket_packet.borrow_mut().write(&packet)?; - } else { - todo.borrow_mut().push(packet); - } - } + if let Some(a) = device.handle(&mut packet) { + packet.a = a; + socket.write(&packet).unwrap(); + } else { + todo.push(packet); + } + } - /* - let next_read = device.borrow().next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - */ + /* + let next_read = device.borrow().next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ + } + } + } - Ok(None) - }).expect("ihdad: failed to catch events on IRQ file"); - - for event_count in event_queue.trigger_all(event::Event { - fd: 0, - flags: EventFlags::empty(), - }).expect("ihdad: failed to trigger events") { - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("ihdad: failed to write event"); - } - - loop { - { - //device_loop.borrow_mut().handle_interrupts(); - } - let event_count = event_queue.run().expect("ihdad: failed to handle events"); - if event_count == 0 { - //TODO: Handle todo - break; - } - - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("ihdad: failed to write event"); - } - } - - std::process::exit(0); + std::process::exit(0); + } } fn main() { - // Daemonize + // Daemonize redox_daemon::Daemon::new(daemon).expect("ihdad: failed to daemonize"); } diff --git a/audio/pcspkrd/Cargo.toml b/audio/pcspkrd/Cargo.toml index 72bae14204..2ff4476a9a 100644 --- a/audio/pcspkrd/Cargo.toml +++ b/audio/pcspkrd/Cargo.toml @@ -5,6 +5,6 @@ authors = ["Tibor Nagy "] edition = "2018" [dependencies] -redox_syscall = "0.4" +redox_syscall = "0.5" redox-daemon = "0.1" libredox = "0.1.3" diff --git a/audio/sb16d/Cargo.toml b/audio/sb16d/Cargo.toml index eb5a92a6e8..89e816451d 100644 --- a/audio/sb16d/Cargo.toml +++ b/audio/sb16d/Cargo.toml @@ -4,12 +4,12 @@ version = "0.1.0" edition = "2018" [dependencies] -bitflags = "1" +bitflags = "2" common = { path = "../../common" } libredox = "0.1.3" log = "0.4" redox-daemon = "0.1" -redox-log = "0.1" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.4" +redox-log = "0.1.2" +redox_event = "0.4.1" +redox_syscall = "0.5" spin = "0.9" diff --git a/audio/sb16d/src/main.rs b/audio/sb16d/src/main.rs index 814ed2066d..c6e1d1571a 100644 --- a/audio/sb16d/src/main.rs +++ b/audio/sb16d/src/main.rs @@ -1,20 +1,16 @@ //#![deny(warnings)] -extern crate bitflags; -extern crate spin; -extern crate syscall; -extern crate event; - use std::{env, usize}; use std::fs::File; use std::io::{ErrorKind, Read, Write, Result}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; -use libredox::flag; +use libredox::errno::{EAGAIN, EWOULDBLOCK}; +use libredox::{flag, Fd}; use syscall::{Packet, SchemeBlockMut, EventFlags}; use std::cell::RefCell; use std::sync::Arc; -use event::EventQueue; +use event::{user_data, EventQueue}; use redox_log::{OutputBuilder, RedoxLogger}; pub mod device; @@ -77,127 +73,82 @@ fn main() { common::acquire_port_io_rights().expect("sb16d: failed to acquire port IO rights"); - let device = Arc::new(RefCell::new(unsafe { device::Sb16::new(addr).expect("sb16d: failed to allocate device") })); - let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("sb16d: failed to create hda scheme"); - let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); + let mut device = unsafe { device::Sb16::new(addr).expect("sb16d: failed to allocate device") }; + let socket = Fd::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("sb16d: failed to create hda scheme"); //TODO: error on multiple IRQs? - let mut irq_file = match device.borrow().irqs.first() { - Some(irq) => File::open(format!("irq:{}", irq)).expect("sb16d: failed to open IRQ file"), + let mut irq_file = match device.irqs.first() { + Some(irq) => Fd::open(&format!("irq:{}", irq), flag::O_RDWR, 0).expect("sb16d: failed to open IRQ file"), None => panic!("sb16d: no IRQs found"), }; + user_data! { + enum Source { + Irq, + Scheme, + } + } + + let mut event_queue = EventQueue::::new().expect("sb16d: Could not create event queue."); + event_queue.subscribe(irq_file.raw(), Source::Irq, event::EventFlags::READ).unwrap(); + event_queue.subscribe(socket.raw(), Source::Scheme, event::EventFlags::READ).unwrap(); daemon.ready().expect("sb16d: failed to signal readiness"); - let mut event_queue = EventQueue::::new().expect("sb16d: Could not create event queue."); - libredox::call::setrens(0, 0).expect("sb16d: failed to enter null namespace"); - let todo = Arc::new(RefCell::new(Vec::::new())); + let mut todo = Vec::::new(); - let todo_irq = todo.clone(); - let device_irq = device.clone(); - let socket_irq = socket.clone(); + 'events: for event_res in event_queue { + let event = event_res.expect("sb16d: failed to get next event"); + match event.user_data { + Source::Irq => { + let mut irq = [0; 8]; + irq_file.read(&mut irq).unwrap(); - // TODO: Use new event queue API + if device.irq() { + irq_file.write(&mut irq).unwrap(); - event_queue.add(irq_file.as_raw_fd(), move |_event| -> Result> { - let mut irq = [0; 8]; - irq_file.read(&mut irq)?; + let mut i = 0; + while i < todo.len() { + if let Some(a) = device.handle(&mut todo[i]) { + let mut packet = todo.remove(i); + packet.a = a; + socket.write(&packet).expect("sb16d: failed to write to socket"); + } else { + i += 1; + } + } - if device_irq.borrow_mut().irq() { - irq_file.write(&mut irq)?; - - let mut todo = todo_irq.borrow_mut(); - let mut i = 0; - while i < todo.len() { - if let Some(a) = device_irq.borrow_mut().handle(&mut todo[i]) { - let mut packet = todo.remove(i); - packet.a = a; - socket_irq.borrow_mut().write(&packet)?; - } else { - i += 1; + /* + let next_read = device_irq.next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ } } + Source::Scheme => { + loop { + let mut packet = Packet::default(); + match socket.read(&mut packet) { + Ok(0) => break 'events, + Ok(_) => (), + Err(err) => if err.errno() == EWOULDBLOCK || err.errno() == EAGAIN { + break; + } else { + panic!("sb16d: failed to read from scheme socket"); + } + } - /* - let next_read = device_irq.next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - */ - } - Ok(None) - }).expect("sb16d: failed to catch events on IRQ file"); - let socket_fd = socket.borrow().as_raw_fd(); - let socket_packet = socket.clone(); - event_queue.add(socket_fd, move |_event| -> Result> { - loop { - let mut packet = Packet::default(); - match socket_packet.borrow_mut().read(&mut packet) { - Ok(0) => return Ok(Some(0)), - Ok(_) => (), - Err(err) => if err.kind() == ErrorKind::WouldBlock { - break; - } else { - return Err(err); + if let Some(a) = device.handle(&mut packet) { + packet.a = a; + socket.write(&packet).expect("sb16d: failed to write to scheme socket"); + } else { + todo.push(packet); + } } } - - if let Some(a) = device.borrow_mut().handle(&mut packet) { - packet.a = a; - socket_packet.borrow_mut().write(&packet)?; - } else { - todo.borrow_mut().push(packet); - } } - - /* - let next_read = device.borrow().next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - */ - - Ok(None) - }).expect("sb16d: failed to catch events on IRQ file"); - - for event_count in event_queue.trigger_all(event::Event { - fd: 0, - flags: EventFlags::empty(), - }).expect("sb16d: failed to trigger events") { - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("sb16d: failed to write event"); - } - - loop { - { - //device_loop.borrow_mut().handle_interrupts(); - } - let event_count = event_queue.run().expect("sb16d: failed to handle events"); - if event_count == 0 { - //TODO: Handle todo - break; - } - - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("sb16d: failed to write event"); } std::process::exit(0); diff --git a/graphics/bgad/Cargo.toml b/graphics/bgad/Cargo.toml index 0c439fd17a..76dc78b582 100644 --- a/graphics/bgad/Cargo.toml +++ b/graphics/bgad/Cargo.toml @@ -4,9 +4,9 @@ version = "0.1.0" edition = "2018" [dependencies] -orbclient = "0.3.27" +orbclient = "0.3.47" redox-daemon = "0.1" -redox_syscall = "0.4" +redox_syscall = "0.5" pcid = { path = "../../pcid" } libredox = "0.1.3" diff --git a/graphics/fbcond/Cargo.toml b/graphics/fbcond/Cargo.toml index 0e466e15cb..42e155eaac 100644 --- a/graphics/fbcond/Cargo.toml +++ b/graphics/fbcond/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] orbclient = "0.3.27" ransid = "0.4" -redox_event = "0.2" +redox_event = "0.4" redox_syscall = "0.5" redox-daemon = "0.1" diff --git a/net/alxd/Cargo.toml b/net/alxd/Cargo.toml index 5d20a58d5b..af09892e0b 100644 --- a/net/alxd/Cargo.toml +++ b/net/alxd/Cargo.toml @@ -4,8 +4,8 @@ version = "0.1.0" edition = "2018" [dependencies] -bitflags = "1" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +bitflags = "2" +redox_event = "0.4.1" redox_syscall = "0.5" redox-daemon = "0.1" diff --git a/net/alxd/src/main.rs b/net/alxd/src/main.rs index 8ff8e18c52..2ffce2e201 100644 --- a/net/alxd/src/main.rs +++ b/net/alxd/src/main.rs @@ -6,16 +6,15 @@ extern crate event; extern crate syscall; -use std::cell::RefCell; -use std::env; +use std::{env, iter}; use std::fs::File; -use std::io::{Read, Write, Result}; -use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; -use std::sync::Arc; +use std::io::{Read, Write}; +use std::os::fd::AsRawFd; +use std::os::unix::io::{FromRawFd, RawFd}; -use event::EventQueue; +use event::{user_data, EventQueue}; use libredox::flag; -use syscall::{EventFlags, Packet, SchemeMut}; +use syscall::{Packet, SchemeMut}; use syscall::error::EWOULDBLOCK; pub mod device; @@ -37,7 +36,7 @@ fn main() { // Daemonize redox_daemon::Daemon::new(move |daemon| { let socket_fd = libredox::call::open(":network", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("alxd: failed to create network scheme"); - let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); + let mut socket = unsafe { File::from_raw_fd(socket_fd as RawFd) }; daemon.ready().expect("alxd: failed to signal readiness"); @@ -45,100 +44,78 @@ fn main() { let address = unsafe { common::physmap(bar, 128*1024, common::Prot::RW, common::MemoryType::Uncacheable).expect("alxd: failed to map address") as usize }; { - let device = Arc::new(RefCell::new(unsafe { device::Alx::new(address).expect("alxd: failed to allocate device") })); + let mut device = unsafe { device::Alx::new(address).expect("alxd: failed to allocate device") }; - let mut event_queue = EventQueue::::new().expect("alxd: failed to create event queue"); + user_data! { + enum Source { + Irq, + Scheme, + } + } + + let event_queue = EventQueue::::new().expect("alxd: failed to create event queue"); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + event_queue.subscribe(socket_fd, Source::Scheme, event::EventFlags::READ).unwrap(); libredox::call::setrens(0, 0).expect("alxd: failed to enter null namespace"); - let todo = Arc::new(RefCell::new(Vec::::new())); + let mut todo = Vec::::new(); - let device_irq = device.clone(); - let socket_irq = socket.clone(); - let todo_irq = todo.clone(); - event_queue.add(irq_file.as_raw_fd(), move |_event| -> Result> { - let mut irq = [0; 8]; - irq_file.read(&mut irq)?; - if unsafe { device_irq.borrow_mut().intr_legacy() } { - irq_file.write(&mut irq)?; + for event in iter::once(Source::Scheme).chain(event_queue.map(|e| e.expect("alxd: failed to get next event").user_data)) { + match event { + Source::Irq => { + let mut irq = [0; 8]; + irq_file.read(&mut irq).unwrap(); + if unsafe { device.intr_legacy() } { + irq_file.write(&mut irq).unwrap(); - let mut todo = todo_irq.borrow_mut(); - let mut i = 0; - while i < todo.len() { - let a = todo[i].a; - device_irq.borrow_mut().handle(&mut todo[i]); - if todo[i].a == (-EWOULDBLOCK) as usize { - todo[i].a = a; - i += 1; - } else { - socket_irq.borrow_mut().write(&mut todo[i])?; - todo.remove(i); + let mut i = 0; + while i < todo.len() { + let a = todo[i].a; + device.handle(&mut todo[i]); + if todo[i].a == (-EWOULDBLOCK) as usize { + todo[i].a = a; + i += 1; + } else { + socket.write(&mut todo[i]).expect("alxd: failed to write to socket"); + todo.remove(i); + } + } + + /* TODO: Currently a no-op + let next_read = device.next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ } } + Source::Scheme => { + loop { + let mut packet = Packet::default(); + if socket.read(&mut packet).expect("alxd: failed read from socket") == 0 { + break; + } - let next_read = device_irq.borrow().next_read(); - if next_read > 0 { - return Ok(Some(next_read)); + let a = packet.a; + device.handle(&mut packet); + if packet.a == (-EWOULDBLOCK) as usize { + packet.a = a; + todo.push(packet); + } else { + socket.write(&mut packet).expect("alxd: failed to write to socket"); + } + } + + // TODO + /* + let next_read = device.next_read(); + if next_read > 0 { + return Ok(Some(next_read)); + } + */ } } - Ok(None) - }).expect("alxd: failed to catch events on IRQ file"); - - let socket_packet = socket.clone(); - event_queue.add(socket_fd as RawFd, move |_event| -> Result> { - loop { - let mut packet = Packet::default(); - if socket_packet.borrow_mut().read(&mut packet)? == 0 { - break; - } - - let a = packet.a; - device.borrow_mut().handle(&mut packet); - if packet.a == (-EWOULDBLOCK) as usize { - packet.a = a; - todo.borrow_mut().push(packet); - } else { - socket_packet.borrow_mut().write(&mut packet)?; - } - } - - let next_read = device.borrow().next_read(); - if next_read > 0 { - return Ok(Some(next_read)); - } - - Ok(None) - }).expect("alxd: failed to catch events on IRQ file"); - - for event_count in event_queue.trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }).expect("alxd: failed to trigger events") { - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("alxd: failed to write event"); - } - - loop { - let event_count = event_queue.run().expect("alxd: failed to handle events"); - - socket.borrow_mut().write(&Packet { - id: 0, - pid: 0, - uid: 0, - gid: 0, - a: syscall::number::SYS_FEVENT, - b: 0, - c: syscall::flag::EVENT_READ.bits(), - d: event_count - }).expect("alxd: failed to write event"); } } std::process::exit(0); diff --git a/net/driver-network/Cargo.toml b/net/driver-network/Cargo.toml index 965bbcf23c..bfec9b86d1 100644 --- a/net/driver-network/Cargo.toml +++ b/net/driver-network/Cargo.toml @@ -5,5 +5,4 @@ edition = "2021" [dependencies] libredox = "0.1.3" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } redox_syscall = "0.5" diff --git a/net/e1000d/Cargo.toml b/net/e1000d/Cargo.toml index bc6c347647..3066ac6c16 100644 --- a/net/e1000d/Cargo.toml +++ b/net/e1000d/Cargo.toml @@ -4,12 +4,12 @@ version = "0.1.0" edition = "2018" [dependencies] -bitflags = "1" -redox-daemon = "0.1" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +bitflags = "2" +redox-daemon = "0.1.2" +libredox = "0.1.3" +redox_event = "0.4.1" redox_syscall = "0.5" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/e1000d/src/main.rs b/net/e1000d/src/main.rs index 8c532f3c68..b5480587bc 100644 --- a/net/e1000d/src/main.rs +++ b/net/e1000d/src/main.rs @@ -5,7 +5,7 @@ use std::os::unix::io::AsRawFd; use std::rc::Rc; use driver_network::NetworkScheme; -use event::EventQueue; +use event::{user_data, EventQueue}; use pcid_interface::PcidServerHandle; use syscall::EventFlags; @@ -38,10 +38,22 @@ fn main() { let device = unsafe { device::Intel8254x::new(address).expect("e1000d: failed to allocate device") }; - let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}")))); + let mut scheme = NetworkScheme::new(device, format!("network.{name}")); + + user_data! { + enum Source { + Irq, + Scheme, + } + } let mut event_queue = - EventQueue::::new().expect("e1000d: failed to create event queue"); + EventQueue::::new().expect("e1000d: failed to create event queue"); + + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ) + .expect("e1000d: failed to subscribe to IRQ fd"); + event_queue.subscribe(scheme.event_handle() as usize, Source::Scheme, event::EventFlags::READ) + .expect("e1000d: failed to subscribe to scheme fd"); libredox::call::setrens(0, 0).expect("e1000d: failed to enter null namespace"); @@ -49,42 +61,23 @@ fn main() { .ready() .expect("e1000d: failed to mark daemon as ready"); - let scheme_irq = scheme.clone(); - event_queue - .add( - irq_file.as_raw_fd(), - move |_event| -> Result> { + scheme.tick().unwrap(); + + for event in event_queue.map(|e| e.expect("e1000d: failed to get event")) { + match event.user_data { + Source::Irq => { let mut irq = [0; 8]; - irq_file.read(&mut irq)?; - if unsafe { scheme_irq.borrow().adapter().irq() } { - irq_file.write(&mut irq)?; + irq_file.read(&mut irq).unwrap(); + if unsafe { scheme.adapter().irq() } { + irq_file.write(&mut irq).unwrap(); - return scheme_irq.borrow_mut().tick().map(|()| None); + scheme.tick().expect("e1000d: failed to handle IRQ") } - Ok(None) - }, - ) - .expect("e1000d: failed to catch events on IRQ file"); - - let scheme_packet = scheme.clone(); - event_queue - .add( - scheme.borrow().event_handle(), - move |_event| -> Result> { - scheme_packet.borrow_mut().tick().map(|()| None) - }, - ) - .expect("e1000d: failed to catch events on scheme file"); - - event_queue - .trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }) - .expect("e1000d: failed to trigger events"); - - #[allow(unreachable_code)] - match event_queue.run().expect("e1000d: failed to handle events") {} + } + Source::Scheme => scheme.tick().expect("e1000d: failed to handle scheme op"), + } + } + unreachable!() }) .expect("e1000d: failed to create daemon"); } diff --git a/net/ixgbed/Cargo.toml b/net/ixgbed/Cargo.toml index 38ee7a7477..cce0badf9f 100644 --- a/net/ixgbed/Cargo.toml +++ b/net/ixgbed/Cargo.toml @@ -4,12 +4,12 @@ version = "1.0.0" edition = "2021" [dependencies] -bitflags = "1.0" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +bitflags = "2" +libredox = "0.1.3" +redox_event = "0.4.1" redox_syscall = "0.5" redox-daemon = "0.1" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/ixgbed/src/main.rs b/net/ixgbed/src/main.rs index 7c6aefbb27..716253324a 100644 --- a/net/ixgbed/src/main.rs +++ b/net/ixgbed/src/main.rs @@ -5,7 +5,7 @@ use std::os::unix::io::AsRawFd; use std::rc::Rc; use driver_network::NetworkScheme; -use event::EventQueue; +use event::{user_data, EventQueue}; use pcid_interface::PcidServerHandle; use syscall::EventFlags; @@ -50,10 +50,18 @@ fn main() { let device = device::Intel8259x::new(address, IXGBE_MMIO_SIZE) .expect("ixgbed: failed to allocate device"); - let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}")))); + let mut scheme = NetworkScheme::new(device, format!("network.{name}")); - let mut event_queue = - EventQueue::::new().expect("ixgbed: failed to create event queue"); + user_data! { + enum Source { + Irq, + Scheme, + } + } + + let mut event_queue = EventQueue::::new().expect("ixgbed: Could not create event queue."); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + event_queue.subscribe(scheme.event_handle() as usize, Source::Scheme, event::EventFlags::READ).unwrap(); libredox::call::setrens(0, 0).expect("ixgbed: failed to enter null namespace"); @@ -61,42 +69,25 @@ fn main() { .ready() .expect("ixgbed: failed to mark daemon as ready"); - let scheme_irq = scheme.clone(); - event_queue - .add( - irq_file.as_raw_fd(), - move |_event| -> Result> { + scheme.tick().unwrap(); + + for event in event_queue.map(|e| e.expect("ixgbed: failed to get next event")) { + match event.user_data { + Source::Irq => { let mut irq = [0; 8]; - irq_file.read(&mut irq)?; - if scheme_irq.borrow().adapter().irq() { - irq_file.write(&mut irq)?; + irq_file.read(&mut irq).unwrap(); + if scheme.adapter().irq() { + irq_file.write(&mut irq).unwrap(); - return scheme_irq.borrow_mut().tick().map(|()| None); + scheme.tick().unwrap(); } - Ok(None) - }, - ) - .expect("ixgbed: failed to catch events on IRQ file"); - - let scheme_packet = scheme.clone(); - event_queue - .add( - scheme.borrow().event_handle(), - move |_event| -> Result> { - scheme_packet.borrow_mut().tick().map(|()| None) - }, - ) - .expect("ixgbed: failed to catch events on scheme file"); - - event_queue - .trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }) - .expect("ixgbed: failed to trigger events"); - - #[allow(unreachable_code)] - match event_queue.run().expect("ixgbed: failed to handle events") {} + } + Source::Scheme => { + scheme.tick().unwrap(); + } + } + } + unreachable!() }) .expect("ixgbed: failed to create daemon"); } diff --git a/net/rtl8139d/Cargo.toml b/net/rtl8139d/Cargo.toml index ef23f408db..432b562cb9 100644 --- a/net/rtl8139d/Cargo.toml +++ b/net/rtl8139d/Cargo.toml @@ -4,9 +4,10 @@ version = "0.1.0" edition = "2018" [dependencies] -bitflags = "1" +bitflags = "2" +libredox = "0.1.3" log = "0.4" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +redox_event = "0.4.1" redox_syscall = "0.5" redox-daemon = "0.1" redox-log = "0.1" @@ -14,4 +15,3 @@ redox-log = "0.1" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/rtl8139d/src/main.rs b/net/rtl8139d/src/main.rs index 66ca3b533e..113b395e2c 100644 --- a/net/rtl8139d/src/main.rs +++ b/net/rtl8139d/src/main.rs @@ -9,7 +9,7 @@ use std::ptr::NonNull; use std::rc::Rc; use driver_network::NetworkScheme; -use event::EventQueue; +use event::{user_data, EventQueue}; #[cfg(target_arch = "x86_64")] use pcid_interface::irq_helpers::allocate_single_interrupt_vector_for_msi; use pcid_interface::irq_helpers::read_bsp_apic_id; @@ -237,10 +237,18 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let device = unsafe { device::Rtl8139::new(address).expect("rtl8139d: failed to allocate device") }; - let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}")))); + let mut scheme = NetworkScheme::new(device, format!("network.{name}")); - let mut event_queue = - EventQueue::::new().expect("rtl8139d: failed to create event queue"); + user_data! { + enum Source { + Irq, + Scheme, + } + } + + let mut event_queue = EventQueue::::new().expect("rtl8139d: Could not create event queue."); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + event_queue.subscribe(scheme.event_handle() as usize, Source::Scheme, event::EventFlags::READ).unwrap(); libredox::call::setrens(0, 0).expect("rtl8139d: failed to enter null namespace"); @@ -248,45 +256,26 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { .ready() .expect("rtl8139d: failed to mark daemon as ready"); - let scheme_irq = scheme.clone(); - event_queue - .add( - irq_file.as_raw_fd(), - move |_event| -> Result> { + scheme.tick().unwrap(); + + for event in event_queue.map(|e| e.expect("rtl8139d: failed to get next event")) { + match event.user_data { + Source::Irq => { let mut irq = [0; 8]; - irq_file.read(&mut irq)?; + irq_file.read(&mut irq).unwrap(); //TODO: This may be causing spurious interrupts - if unsafe { scheme_irq.borrow_mut().adapter_mut().irq() } { - irq_file.write(&mut irq)?; + if unsafe { scheme.adapter_mut().irq() } { + irq_file.write(&mut irq).unwrap(); - return scheme_irq.borrow_mut().tick().map(|()| None); + scheme.tick().unwrap(); } - Ok(None) - }, - ) - .expect("rtl8139d: failed to catch events on IRQ file"); - - let scheme_packet = scheme.clone(); - event_queue - .add( - scheme.borrow().event_handle(), - move |_event| -> Result> { - scheme_packet.borrow_mut().tick().map(|()| None) - }, - ) - .expect("rtl8139d: failed to catch events on scheme file"); - - event_queue - .trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }) - .expect("rtl8139d: failed to trigger events"); - - #[allow(unreachable_code)] - match event_queue - .run() - .expect("rtl8139d: failed to handle events") {} + } + Source::Scheme => { + scheme.tick().unwrap(); + } + } + } + unreachable!() } fn main() { diff --git a/net/rtl8168d/Cargo.toml b/net/rtl8168d/Cargo.toml index 2010b02b47..54a91855dd 100644 --- a/net/rtl8168d/Cargo.toml +++ b/net/rtl8168d/Cargo.toml @@ -4,9 +4,10 @@ version = "0.1.0" edition = "2018" [dependencies] -bitflags = "1" +bitflags = "2" +libredox = "0.1.3" log = "0.4" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +redox_event = "0.4.1" redox_syscall = "0.5" redox-daemon = "0.1" redox-log = "0.1" @@ -14,4 +15,3 @@ redox-log = "0.1" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/rtl8168d/src/main.rs b/net/rtl8168d/src/main.rs index e38501b3ec..7127effb52 100644 --- a/net/rtl8168d/src/main.rs +++ b/net/rtl8168d/src/main.rs @@ -7,7 +7,7 @@ use std::ptr::NonNull; use std::rc::Rc; use driver_network::NetworkScheme; -use event::EventQueue; +use event::{user_data, EventQueue}; use pcid_interface::{MsiSetFeatureInfo, PcidServerHandle, PciFeature, PciFeatureInfo, SetFeatureInfo, SubdriverArguments}; #[cfg(target_arch = "x86_64")] use pcid_interface::irq_helpers::allocate_single_interrupt_vector_for_msi; @@ -232,10 +232,18 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let device = unsafe { device::Rtl8168::new(address).expect("rtl8168d: failed to allocate device") }; - let scheme = Rc::new(RefCell::new(NetworkScheme::new(device, format!("network.{name}")))); + let mut scheme = NetworkScheme::new(device, format!("network.{name}")); - let mut event_queue = - EventQueue::::new().expect("rtl8168d: failed to create event queue"); + user_data! { + enum Source { + Irq, + Scheme, + } + } + + let mut event_queue = EventQueue::::new().expect("rtl8168d: Could not create event queue."); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + event_queue.subscribe(scheme.event_handle() as usize, Source::Scheme, event::EventFlags::READ).unwrap(); libredox::call::setrens(0, 0).expect("rtl8168d: failed to enter null namespace"); @@ -243,45 +251,26 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { .ready() .expect("rtl8168d: failed to mark daemon as ready"); - let scheme_irq = scheme.clone(); - event_queue - .add( - irq_file.as_raw_fd(), - move |_event| -> Result> { + scheme.tick().unwrap(); + + for event in event_queue.map(|e| e.expect("rtl8168d: failed to get next event")) { + match event.user_data { + Source::Irq => { let mut irq = [0; 8]; - irq_file.read(&mut irq)?; + irq_file.read(&mut irq).unwrap(); //TODO: This may be causing spurious interrupts - if unsafe { scheme_irq.borrow_mut().adapter_mut().irq() } { - irq_file.write(&mut irq)?; + if unsafe { scheme.adapter_mut().irq() } { + irq_file.write(&mut irq).unwrap(); - return scheme_irq.borrow_mut().tick().map(|()| None); + scheme.tick().unwrap(); } - Ok(None) - }, - ) - .expect("rtl8168d: failed to catch events on IRQ file"); - - let scheme_packet = scheme.clone(); - event_queue - .add( - scheme.borrow().event_handle(), - move |_event| -> Result> { - scheme_packet.borrow_mut().tick().map(|()| None) - }, - ) - .expect("rtl8168d: failed to catch events on scheme file"); - - event_queue - .trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }) - .expect("rtl8168d: failed to trigger events"); - - #[allow(unreachable_code)] - match event_queue - .run() - .expect("rtl8168d: failed to handle events") {} + } + Source::Scheme => { + scheme.tick().unwrap(); + } + } + } + unreachable!() } fn main() { diff --git a/pcid/Cargo.toml b/pcid/Cargo.toml index 487b79029d..17d8061c36 100644 --- a/pcid/Cargo.toml +++ b/pcid/Cargo.toml @@ -23,7 +23,7 @@ paw = "1.0" pci_types = "0.6.1" plain = "0.2" redox-log = "0.1" -redox_syscall = "0.4" +redox_syscall = "0.5" serde = { version = "1", features = ["derive"] } serde_json = "1" structopt = { version = "0.3", default-features = false, features = [ "paw" ] } diff --git a/ps2d/Cargo.toml b/ps2d/Cargo.toml index 90f5875711..fb629ea72a 100644 --- a/ps2d/Cargo.toml +++ b/ps2d/Cargo.toml @@ -6,6 +6,6 @@ edition = "2018" [dependencies] bitflags = "1" orbclient = "0.3.27" -redox_syscall = "0.4" +redox_syscall = "0.5" redox-daemon = "0.1" libredox = "0.1.3" diff --git a/storage/lived/Cargo.toml b/storage/lived/Cargo.toml index 339708856e..d5fcdb91b6 100644 --- a/storage/lived/Cargo.toml +++ b/storage/lived/Cargo.toml @@ -11,5 +11,5 @@ license = "MIT" anyhow = "1" libredox = "0.1.3" redox-daemon = "0.1" -redox_syscall = "0.4" +redox_syscall = "0.5" slab = "0.4" diff --git a/storage/usbscsid/Cargo.toml b/storage/usbscsid/Cargo.toml index d3ca3455ee..8b38f8617f 100644 --- a/storage/usbscsid/Cargo.toml +++ b/storage/usbscsid/Cargo.toml @@ -12,6 +12,6 @@ base64 = "0.11" # Only for debugging libredox = "0.1.3" plain = "0.2" redox-daemon = "0.1" -redox_syscall = "0.4" +redox_syscall = "0.5" thiserror = "1" xhcid = { path = "../../xhcid" } diff --git a/usbhidd/Cargo.toml b/usbhidd/Cargo.toml index 8c51c019cd..b1cd4f0e9f 100644 --- a/usbhidd/Cargo.toml +++ b/usbhidd/Cargo.toml @@ -8,10 +8,10 @@ license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bitflags = "1.2" +bitflags = "2" log = "0.4" -orbclient = "0.3.27" +orbclient = "0.3.47" redox-log = "0.1" -redox_syscall = "0.4" +redox_syscall = "0.5" ux = "0.1" xhcid = { path = "../xhcid" } diff --git a/usbhidd/src/report_desc.rs b/usbhidd/src/report_desc.rs index b33927e13e..2835ba225c 100644 --- a/usbhidd/src/report_desc.rs +++ b/usbhidd/src/report_desc.rs @@ -9,6 +9,7 @@ enum Protocol { }*/ bitflags! { + #[derive(Clone, Copy, Debug)] pub struct MainItemFlags: u32 { const CONSTANT = 1 << 0; const VARIABLE = 1 << 1; diff --git a/vboxd/Cargo.toml b/vboxd/Cargo.toml index ff25884242..5c595e5ea1 100644 --- a/vboxd/Cargo.toml +++ b/vboxd/Cargo.toml @@ -4,11 +4,11 @@ version = "0.1.0" edition = "2018" [dependencies] -orbclient = "0.3.27" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +libredox = "0.1.3" +orbclient = "0.3.47" +redox_event = "0.4.1" redox_syscall = "0.5" redox-daemon = "0.1" common = { path = "../common" } pcid = { path = "../pcid" } -libredox = "0.1.3" diff --git a/vboxd/src/main.rs b/vboxd/src/main.rs index 39b0c3efaf..f7269be46f 100644 --- a/vboxd/src/main.rs +++ b/vboxd/src/main.rs @@ -1,10 +1,6 @@ //#![deny(warnings)] -extern crate event; -extern crate orbclient; -extern crate syscall; - -use event::EventQueue; +use event::{user_data, EventQueue}; use std::mem; use std::os::unix::io::AsRawFd; use std::fs::File; @@ -203,8 +199,6 @@ fn main() { // Daemonize redox_daemon::Daemon::new(move |daemon| { - daemon.ready().expect("failed to signal readiness"); - common::acquire_port_io_rights().expect("vboxd: failed to get I/O permission"); let mut width = 0; @@ -242,7 +236,16 @@ fn main() { vmmdev.guest_events.write(VBOX_EVENT_DISPLAY | VBOX_EVENT_MOUSE); - let mut event_queue = EventQueue::<()>::new().expect("vboxd: failed to create event queue"); + user_data! { + enum Source { + Irq, + } + } + + let event_queue = EventQueue::::new().expect("vboxd: Could not create event queue."); + event_queue.subscribe(irq_file.as_raw_fd() as usize, Source::Irq, event::EventFlags::READ).unwrap(); + + daemon.ready().expect("failed to signal readiness"); libredox::call::setrens(0, 0).expect("vboxd: failed to enter null namespace"); @@ -250,13 +253,14 @@ fn main() { let get_mouse = VboxGetMouse::new().expect("vboxd: failed to map GetMouse"); let display_change = VboxDisplayChange::new().expect("vboxd: failed to map DisplayChange"); let ack_events = VboxAckEvents::new().expect("vboxd: failed to map AckEvents"); - event_queue.add(irq_file.as_raw_fd(), move |_event| -> Result> { + + for Source::Irq in event_queue.map(|e| e.expect("vboxd: failed to get next event").user_data) { let mut irq = [0; 8]; - if irq_file.read(&mut irq)? >= irq.len() { + if irq_file.read(&mut irq).unwrap() >= irq.len() { let host_events = vmmdev.host_events.read(); if host_events != 0 { port.write(ack_events.physical() as u32); - irq_file.write(&irq)?; + irq_file.write(&irq).unwrap(); if host_events & VBOX_EVENT_DISPLAY == VBOX_EVENT_DISPLAY { port.write(display_change.physical() as u32); @@ -269,8 +273,8 @@ fn main() { println!("Display {}, {}", width, height); bga.set_size(width as u16, height as u16); let _ = display.write(&orbclient::ResizeEvent { - width: width, - height: height, + width, + height, }.to_event()); } } @@ -289,15 +293,7 @@ fn main() { } } } - Ok(None) - }).expect("vboxd: failed to poll irq"); - - event_queue.trigger_all(event::Event { - fd: 0, - flags: Default::default(), - }).expect("vboxd: failed to trigger events"); - - event_queue.run().expect("vboxd: failed to run event loop"); + } } std::process::exit(0); diff --git a/virtio-core/Cargo.toml b/virtio-core/Cargo.toml index 379821c233..6568a5cc10 100644 --- a/virtio-core/Cargo.toml +++ b/virtio-core/Cargo.toml @@ -8,14 +8,14 @@ authors = ["Anhad Singh "] static_assertions = "1.1.0" bitflags = "2.3.2" redox_syscall = "0.5" +libredox = "0.1.3" log = "0.4" thiserror = "1.0.40" futures = { version = "0.3.28", features = ["executor"] } crossbeam-queue = "0.3.8" redox-log = "0.1" -redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +redox_event = "0.4.1" common = { path = "../common" } pcid = { path = "../pcid" } -libredox = "0.1.3" diff --git a/virtio-core/src/transport.rs b/virtio-core/src/transport.rs index 133c5e53c4..14150cb279 100644 --- a/virtio-core/src/transport.rs +++ b/virtio-core/src/transport.rs @@ -2,7 +2,7 @@ use crate::spec::*; use crate::utils::align; use common::dma::Dma; -use event::EventQueue; +use event::{EventQueue, RawEventQueue}; use core::mem::size_of; use core::sync::atomic::{AtomicU16, Ordering}; @@ -67,22 +67,15 @@ pub fn spawn_irq_thread(irq_handle: &File, queue: &Arc>) { let queue_copy = queue.clone(); std::thread::spawn(move || { - let mut event_queue = EventQueue::::new().unwrap(); + let mut event_queue = RawEventQueue::new().unwrap(); - event_queue - .add(irq_fd, move |_| -> Result, std::io::Error> { - // Wake up the tasks waiting on the queue. - for (_, task) in queue_copy.waker.lock().unwrap().iter() { - task.wake_by_ref(); - } + event_queue.subscribe(irq_fd as usize, 0, event::EventFlags::READ).unwrap(); - // Wake up the tasks waiting on the queue. - Ok(None) - }) - .unwrap(); - - loop { - event_queue.run().unwrap(); + for event in event_queue.map(Result::unwrap) { + // Wake up the tasks waiting on the queue. + for (_, task) in queue_copy.waker.lock().unwrap().iter() { + task.wake_by_ref(); + } } }); } From e97ba747898764aa55c32d9575930fe801b5f016 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Sat, 23 Mar 2024 12:06:45 +0100 Subject: [PATCH 2/2] Reimplement all event_queue.trigger behavior. --- audio/ac97d/Cargo.toml | 2 +- audio/ac97d/src/main.rs | 5 +++-- audio/ihdad/Cargo.toml | 2 +- audio/ihdad/src/main.rs | 6 ++++-- audio/sb16d/Cargo.toml | 2 +- audio/sb16d/src/device.rs | 8 ++++---- audio/sb16d/src/main.rs | 18 +++++++----------- vboxd/src/main.rs | 4 ++-- 8 files changed, 23 insertions(+), 24 deletions(-) diff --git a/audio/ac97d/Cargo.toml b/audio/ac97d/Cargo.toml index da7d2f14c5..143a127079 100644 --- a/audio/ac97d/Cargo.toml +++ b/audio/ac97d/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ac97d" version = "0.1.0" -edition = "2018" +edition = "2021" [dependencies] bitflags = "1" diff --git a/audio/ac97d/src/main.rs b/audio/ac97d/src/main.rs index 322f86e56a..bbc6143b46 100644 --- a/audio/ac97d/src/main.rs +++ b/audio/ac97d/src/main.rs @@ -110,8 +110,9 @@ fn main() { let mut todo = Vec::::new(); - 'events: for event in event_queue.map(|e| e.expect("ac97d: failed to get next event")) { - match event.user_data { + let all = [Source::Irq, Source::Scheme]; + 'events: for event in all.into_iter().chain(event_queue.map(|e| e.expect("ac97d: failed to get next event").user_data)) { + match event { Source::Irq => { let mut irq = [0; 8]; irq_file.read(&mut irq).unwrap(); diff --git a/audio/ihdad/Cargo.toml b/audio/ihdad/Cargo.toml index c356f48056..c431a9cb2e 100644 --- a/audio/ihdad/Cargo.toml +++ b/audio/ihdad/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ihdad" version = "0.1.0" -edition = "2018" +edition = "2021" [dependencies] bitflags = "2" diff --git a/audio/ihdad/src/main.rs b/audio/ihdad/src/main.rs index 2e5c83a3fe..bab7c5b6df 100755 --- a/audio/ihdad/src/main.rs +++ b/audio/ihdad/src/main.rs @@ -183,8 +183,10 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let mut todo = Vec::::new(); - 'events: for event in event_queue.map(|e| e.expect("failed to get next event")) { - match event.user_data { + let all = [Source::Irq, Source::Scheme]; + + 'events: for event in all.into_iter().chain(event_queue.map(|e| e.expect("failed to get next event").user_data)) { + match event { Source::Irq => { let mut irq = [0; 8]; irq_file.read(&mut irq).unwrap(); diff --git a/audio/sb16d/Cargo.toml b/audio/sb16d/Cargo.toml index 89e816451d..84a7357bec 100644 --- a/audio/sb16d/Cargo.toml +++ b/audio/sb16d/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "sb16d" version = "0.1.0" -edition = "2018" +edition = "2021" [dependencies] bitflags = "2" diff --git a/audio/sb16d/src/device.rs b/audio/sb16d/src/device.rs index 101d6e329b..ea0530d78f 100644 --- a/audio/sb16d/src/device.rs +++ b/audio/sb16d/src/device.rs @@ -1,11 +1,11 @@ #![allow(dead_code)] -use std::{mem, thread, time}; +use std::{thread, time}; use std::collections::BTreeMap; use std::sync::atomic::{AtomicUsize, Ordering}; -use syscall::error::{Error, EACCES, EBADF, Result, EINVAL, ENODEV, ENOENT}; -use syscall::io::{Mmio, Pio, Io, ReadOnly, WriteOnly}; +use syscall::error::{Error, EACCES, EBADF, Result, ENODEV}; +use syscall::io::{Pio, Io, ReadOnly, WriteOnly}; use syscall::scheme::SchemeBlockMut; use spin::Mutex; @@ -191,7 +191,7 @@ impl SchemeBlockMut for Sb16 { } } - fn write(&mut self, id: usize, buf: &[u8]) -> Result> { + fn write(&mut self, _id: usize, _buf: &[u8]) -> Result> { //TODO Err(Error::new(EBADF)) } diff --git a/audio/sb16d/src/main.rs b/audio/sb16d/src/main.rs index c6e1d1571a..e01125ce4e 100644 --- a/audio/sb16d/src/main.rs +++ b/audio/sb16d/src/main.rs @@ -1,14 +1,9 @@ //#![deny(warnings)] use std::{env, usize}; -use std::fs::File; -use std::io::{ErrorKind, Read, Write, Result}; -use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use libredox::errno::{EAGAIN, EWOULDBLOCK}; use libredox::{flag, Fd}; -use syscall::{Packet, SchemeBlockMut, EventFlags}; -use std::cell::RefCell; -use std::sync::Arc; +use syscall::{Packet, SchemeBlockMut}; use event::{user_data, EventQueue}; use redox_log::{OutputBuilder, RedoxLogger}; @@ -77,7 +72,7 @@ fn main() { let socket = Fd::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("sb16d: failed to create hda scheme"); //TODO: error on multiple IRQs? - let mut irq_file = match device.irqs.first() { + let irq_file = match device.irqs.first() { Some(irq) => Fd::open(&format!("irq:{}", irq), flag::O_RDWR, 0).expect("sb16d: failed to open IRQ file"), None => panic!("sb16d: no IRQs found"), }; @@ -88,7 +83,7 @@ fn main() { } } - let mut event_queue = EventQueue::::new().expect("sb16d: Could not create event queue."); + let event_queue = EventQueue::::new().expect("sb16d: Could not create event queue."); event_queue.subscribe(irq_file.raw(), Source::Irq, event::EventFlags::READ).unwrap(); event_queue.subscribe(socket.raw(), Source::Scheme, event::EventFlags::READ).unwrap(); @@ -98,9 +93,10 @@ fn main() { let mut todo = Vec::::new(); - 'events: for event_res in event_queue { - let event = event_res.expect("sb16d: failed to get next event"); - match event.user_data { + let all = [Source::Irq, Source::Scheme]; + + 'events: for event in all.into_iter().chain(event_queue.map(|e| e.expect("sb16d: failed to get next event").user_data)) { + match event { Source::Irq => { let mut irq = [0; 8]; irq_file.read(&mut irq).unwrap(); diff --git a/vboxd/src/main.rs b/vboxd/src/main.rs index f7269be46f..b24ddb0dcf 100644 --- a/vboxd/src/main.rs +++ b/vboxd/src/main.rs @@ -1,7 +1,7 @@ //#![deny(warnings)] use event::{user_data, EventQueue}; -use std::mem; +use std::{iter, mem}; use std::os::unix::io::AsRawFd; use std::fs::File; use std::io::{Result, Read, Write}; @@ -254,7 +254,7 @@ fn main() { let display_change = VboxDisplayChange::new().expect("vboxd: failed to map DisplayChange"); let ack_events = VboxAckEvents::new().expect("vboxd: failed to map AckEvents"); - for Source::Irq in event_queue.map(|e| e.expect("vboxd: failed to get next event").user_data) { + for Source::Irq in iter::once(Source::Irq).chain(event_queue.map(|e| e.expect("vboxd: failed to get next event").user_data)) { let mut irq = [0; 8]; if irq_file.read(&mut irq).unwrap() >= irq.len() { let host_events = vmmdev.host_events.read();