Two VirtIO block and two VirtIO GPU implementations (adapter + driver)
shared 90% of their protocol logic. Extracted the common code into
hw-virtio, parameterized by MmioAccess trait.
New crate: hw-virtio (no_std, zero deps)
- mmio.rs: MmioAccess trait, DirectMmio, init_legacy_device(), scan
- queue.rs: VirtioQueue with descriptor chain submit + poll
- block.rs: block read protocol (3-descriptor chain)
- gpu.rs: GPU commands (create_2d, attach_backing, set_scanout,
transfer_to_host, resource_flush)
Adapter thin wrappers (identity-mapped, statics for DMA):
- virtio_blk.rs: 220 → 53 lines
- virtio_gpu.rs: 165 → 37 lines
Driver thin wrappers (mapped VAs, phys-info for DMA):
- drivers/block/virtio: 139 → 70 lines
- drivers/framebuffer/virtio: 146 → 95 lines
Also deleted input-server/input_device.rs (1-line re-export,
superseded by port-input-device).
121 lines
4.2 KiB
TOML
121 lines
4.2 KiB
TOML
[workspace]
|
|
members = [
|
|
"crates/adapter-riscv",
|
|
"crates/apps/hello",
|
|
"crates/apps/echo",
|
|
"crates/apps/snake",
|
|
"crates/domain",
|
|
"crates/elf",
|
|
"crates/init",
|
|
"crates/kernel",
|
|
"crates/platform",
|
|
"crates/server-framework",
|
|
"crates/servers/accessibility-server",
|
|
"crates/servers/alarm-server",
|
|
"crates/servers/audio-capture-server",
|
|
"crates/servers/audio-playback-server",
|
|
"crates/servers/bluetooth-server",
|
|
"crates/servers/calendar-server",
|
|
"crates/servers/camera-server",
|
|
"crates/servers/clipboard-server",
|
|
"crates/servers/contacts-server",
|
|
"crates/servers/display-server",
|
|
"crates/servers/gatekeeper",
|
|
"crates/servers/gps-server",
|
|
"crates/servers/input-server",
|
|
"crates/servers/log-server",
|
|
"crates/servers/keychain-server",
|
|
"crates/servers/media-index-server",
|
|
"crates/servers/network-server",
|
|
"crates/servers/notification-server",
|
|
"crates/servers/package-manager",
|
|
"crates/servers/permission-manager",
|
|
"crates/servers/power-server",
|
|
"crates/servers/print-server",
|
|
"crates/servers/session-server",
|
|
"crates/servers/storage-server",
|
|
"crates/servers/sync-server",
|
|
"crates/servers/telephony-server",
|
|
"crates/servers/usb-server",
|
|
"crates/servers/user-manager",
|
|
"crates/types",
|
|
"crates/userspace",
|
|
"crates/userspace-rt",
|
|
"crates/ports/framebuffer",
|
|
"crates/ports/block-device",
|
|
"crates/ports/input-device",
|
|
"crates/drivers/framebuffer/virtio",
|
|
"crates/drivers/framebuffer/mock",
|
|
"crates/drivers/block/virtio",
|
|
"crates/bins/display-qemu",
|
|
"crates/bins/storage-qemu",
|
|
"crates/hw-virtio",
|
|
]
|
|
resolver = "2"
|
|
|
|
|
|
[workspace.dependencies]
|
|
# kernel
|
|
types = { path = "crates/types" }
|
|
domain = { path = "crates/domain" }
|
|
elf = { path = "crates/elf" }
|
|
platform = { path = "crates/platform" }
|
|
kernel = { path = "crates/kernel" }
|
|
server-framework = { path = "crates/server-framework" }
|
|
userspace = { path = "crates/userspace" }
|
|
userspace-rt = { path = "crates/userspace-rt" }
|
|
|
|
# servers
|
|
accessibility-server = { path = "crates/servers/accessibility-server" }
|
|
alarm-server = { path = "crates/servers/alarm-server" }
|
|
audio-capture-server = { path = "crates/servers/audio-capture-server" }
|
|
audio-playback-server = { path = "crates/servers/audio-playback-server" }
|
|
bluetooth-server = { path = "crates/servers/bluetooth-server" }
|
|
calendar-server = { path = "crates/servers/calendar-server" }
|
|
camera-server = { path = "crates/servers/camera-server" }
|
|
clipboard-server = { path = "crates/servers/clipboard-server" }
|
|
contacts-server = { path = "crates/servers/contacts-server" }
|
|
display-server = { path = "crates/servers/display-server" }
|
|
gatekeeper = { path = "crates/servers/gatekeeper" }
|
|
gps-server = { path = "crates/servers/gps-server" }
|
|
input-server = { path = "crates/servers/input-server" }
|
|
keychain-server = { path = "crates/servers/keychain-server" }
|
|
media-index-server = { path = "crates/servers/media-index-server" }
|
|
network-server = { path = "crates/servers/network-server" }
|
|
notification-server = { path = "crates/servers/notification-server" }
|
|
package-manager = { path = "crates/servers/package-manager" }
|
|
permission-manager = { path = "crates/servers/permission-manager" }
|
|
power-server = { path = "crates/servers/power-server" }
|
|
print-server = { path = "crates/servers/print-server" }
|
|
storage-server = { path = "crates/servers/storage-server" }
|
|
sync-server = { path = "crates/servers/sync-server" }
|
|
telephony-server = { path = "crates/servers/telephony-server" }
|
|
usb-server = { path = "crates/servers/usb-server" }
|
|
user-manager = { path = "crates/servers/user-manager" }
|
|
|
|
# hw
|
|
hw-virtio = { path = "crates/hw-virtio" }
|
|
|
|
# ports
|
|
port-framebuffer = { path = "crates/ports/framebuffer" }
|
|
port-block-device = { path = "crates/ports/block-device" }
|
|
port-input-device = { path = "crates/ports/input-device" }
|
|
|
|
# drivers
|
|
driver-framebuffer-virtio = { path = "crates/drivers/framebuffer/virtio" }
|
|
driver-framebuffer-mock = { path = "crates/drivers/framebuffer/mock" }
|
|
driver-block-virtio = { path = "crates/drivers/block/virtio" }
|
|
|
|
# apps
|
|
snake = { path = "crates/apps/snake" }
|
|
|
|
|
|
[profile.release]
|
|
strip = true
|
|
lto = true
|
|
opt-level = "z"
|
|
panic = "abort"
|
|
|
|
[profile.dev]
|
|
panic = "abort"
|