let Genode =
env:DHALL_GENODE
? https://git.sr.ht/~ehmry/dhall-genode/blob/master/package.dhall sha256:62d5c59808ca94a903497469be41f17d0022a44b3049f156ae2ea30b3a0499c3
let drivers =
Genode.Init::{
, services =
[ Genode.ServiceRoute.child "Framebuffer" "dynamic"
, Genode.ServiceRoute.child "Block" "dynamic"
, Genode.ServiceRoute.child "Usb" "usb_drv"
, Genode.ServiceRoute.child "Platform" "platform_drv"
, Genode.ServiceRoute.child "Input" "input_filter"
]
, children =
toMap
{ report_rom =
Genode.Init.Start::{
, binary = "report_rom"
, resources = { caps = 96, ram = Genode.units.MiB 2 }
, provides = [ "ROM", "Report" ]
, config =
Some
( Genode.Prelude.XML.text
''
''
)
}
, rom_reporter =
Genode.Init.Start::{
, binary = "rom_reporter"
, resources = { caps = 96, ram = Genode.units.MiB 1 }
, config =
Some
( Genode.Prelude.XML.text
''
''
)
, routes =
let routeRomToReportRom =
Genode.ServiceRoute.childLabel "ROM" "report_rom"
let routeReportToParent =
λ(label : Text)
→ Genode.ServiceRoute.parentLabel
"Report"
(Some label)
(Some label)
in [ routeRomToReportRom (Some "acpi") (None Text)
, routeRomToReportRom (Some "pci_devices") (None Text)
, routeRomToReportRom (Some "usb_devices") (None Text)
, routeReportToParent "acpi"
, routeReportToParent "pci_devices"
, routeReportToParent "usb_devices"
]
}
, acpi_drv =
Genode.Init.Start::{
, binary = "acpi_drv"
, resources = { caps = 350, ram = Genode.units.MiB 4 }
, routes =
[ Genode.ServiceRoute.parent "IO_MEM"
, Genode.ServiceRoute.childLabel "Report" "report_rom" (Some "acpi") (None Text)
, Genode.ServiceRoute.parentLabel
"Report"
(Some "smbios_table")
(Some "smbios_table")
]
}
, platform_drv =
Genode.Init.Start::{
, binary = "platform_drv"
, resources = { caps = 400, ram = Genode.units.MiB 4 }
, constrainPhys = True
, provides = [ "Acpi", "Platform" ]
, routes =
[ Genode.ServiceRoute.parent "IRQ"
, Genode.ServiceRoute.parent "IO_MEM"
, Genode.ServiceRoute.parent "IO_PORT"
, Genode.ServiceRoute.parent "Timer"
, Genode.ServiceRoute.parentLabel
"ROM"
(Some "system")
(Some "system")
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "acpi")
(None Text)
, Genode.ServiceRoute.childLabel
"Report"
"report_rom"
(Some "pci")
(None Text)
]
, config =
Some
( Genode.Prelude.XML.text
''
''
)
}
, usb_drv =
Genode.Init.Start::{
, binary = "usb_drv"
, resources = { caps = 200, ram = Genode.units.MiB 16 }
, provides = [ "Input", "Usb" ]
, routes =
[ Genode.ServiceRoute.child "Platform" "platform_drv"
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "config")
(None Text)
, Genode.ServiceRoute.childLabel
"Report"
"report_rom"
(Some "devices")
(None Text)
, Genode.ServiceRoute.parentLabel
"Report"
(Some "config")
(Some "usb_active_config")
, Genode.ServiceRoute.parent "Timer"
]
}
, ps2_drv =
Genode.Init.Start::{
, binary = "ps2_drv"
, provides = [ "Input" ]
, routes =
[ Genode.ServiceRoute.child "Platform" "platform_drv"
, Genode.ServiceRoute.parent "Timer"
]
}
, input_filter =
Genode.Init.Start::{
, binary = "input_filter"
, resources = { caps = 90, ram = Genode.units.MiB 2 }
, provides = [ "Input" ]
, routes =
[ Genode.ServiceRoute.parent "Timer"
, Genode.ServiceRoute.parentLabel
"ROM"
(Some "config")
(Some "input_filter.config")
, Genode.ServiceRoute.childLabel
"Input"
"ps2_drv"
(Some "ps2")
(None Text)
, Genode.ServiceRoute.childLabel
"Input"
"usb_drv"
(Some "usb")
(None Text)
]
}
, driver_manager =
Genode.Init.Start::{
, binary = "driver_manager"
, routes =
[ Genode.ServiceRoute.childLabel
"Report"
"report_rom"
(Some "init.config")
(None Text)
, Genode.ServiceRoute.childLabel
"Report"
"report_rom"
(Some "usb_drv.config")
(None Text)
, Genode.ServiceRoute.parentLabel
"Report"
(Some "block_devices")
(Some "block_devices")
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "usb_devices")
(None Text)
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "pci_devices")
(None Text)
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "ahci_ports")
(None Text)
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "nvme_ns")
(None Text)
, Genode.ServiceRoute.parentLabel
"ROM"
(Some "usb_policy")
(Some "usb_policy")
]
}
, dynamic =
Genode.Init.Start::{
, binary = "init"
, resources = { caps = 1400, ram = Genode.units.MiB 64 }
, provides = [ "Framebuffer", "Block" ]
, routes =
[ Genode.ServiceRoute.child "Platform" "platform_drv"
, Genode.ServiceRoute.childLabel
"Report"
"report_rom"
(Some "ahci_ports")
(None Text)
, Genode.ServiceRoute.childLabel
"Report"
"report_rom"
(Some "nvme_ns")
(None Text)
, Genode.ServiceRoute.child "Usb" "usb_drv"
, Genode.ServiceRoute.childLabel
"ROM"
"report_rom"
(Some "config")
(None Text)
, Genode.ServiceRoute.parent "Report"
, Genode.ServiceRoute.parent "IO_MEM"
, Genode.ServiceRoute.parent "IO_PORT"
, Genode.ServiceRoute.parent "Timer"
]
}
}
}
in { arch =
let Arch = < x86_32 | x86_64 > in Arch.x86_64
, config =
Genode.Init::{
, children =
toMap
{ timer =
Genode.Init.Start::{
, binary = "nova_timer_drv"
, resources = { caps = 96, ram = Genode.units.MiB 1 }
, provides = [ "Timer" ]
}
, report_rom =
Genode.Init.Start::{
, binary = "report_rom"
, resources = { caps = 96, ram = Genode.units.MiB 1 }
, provides = [ "ROM", "Report" ]
, config =
Some (Genode.Prelude.XML.text "")
}
, drivers =
let subinit = Genode.Init.toStart drivers
in subinit
⫽ { provides =
[ "Input"
, "Framebuffer"
, "Block"
, "Usb"
, "Platform"
]
, routes =
[ Genode.ServiceRoute.parent "IO_MEM"
, Genode.ServiceRoute.parent "IO_PORT"
, Genode.ServiceRoute.parent "IRQ"
, Genode.ServiceRoute.parentLabel
"ROM"
(Some "config")
(Some "drivers.config")
, Genode.ServiceRoute.child "Timer" "timer"
, Genode.ServiceRoute.child "Report" "report_rom"
]
}
, nitpicker =
Genode.Init.Start::{
, binary = "nitpicker"
, resources = { caps = 1000, ram = Genode.units.MiB 6 }
, provides = [ "Nitpicker" ]
, routes =
[ Genode.ServiceRoute.childLabel
"ROM"
"nit_focus"
(Some "focus")
(Some "focus")
, Genode.ServiceRoute.child "Report" "report_rom"
, Genode.ServiceRoute.child "Framebuffer" "drivers"
, Genode.ServiceRoute.child "Input" "drivers"
, Genode.ServiceRoute.child "Timer" "timer"
]
, config =
Some
( Genode.Prelude.XML.text
''
''
)
}
, nit_focus =
Genode.Init.Start::{
, binary = "rom_filter"
, provides = [ "ROM" ]
, config =
Some
( Genode.Prelude.XML.text
''
''
)
}
, oberon =
Genode.Init.Start::{
, binary = "retro_frontend"
, resources = { caps = 256, ram = Genode.units.MiB 32 }
, routes =
[ Genode.ServiceRoute.child "Nitpicker" "nitpicker"
, Genode.ServiceRoute.child "Timer" "timer"
, Genode.ServiceRoute.parentLabel
"ROM"
(Some "")
(Some "retro_frontend")
]
, config =
Some
( Genode.Prelude.XML.text
''
''
)
}
}
}
, rom =
let manifest = env:MANIFEST
let emptyXML = λ(name : Text) → { mapKey = name, mapValue = "" }
in Genode.Boot.toRomPaths
[ manifest.base-nova.lib.ld-nova ⫽ { mapKey = "ld.lib.so" }
, manifest.base-nova.bin.nova_timer_drv
, manifest.os.bin.acpi_drv
, manifest.os.bin.ahci_drv
, manifest.os.bin.init
, manifest.os.bin.input_filter
, manifest.os.bin.log_core
, manifest.os.bin.nitpicker
, manifest.os.bin.platform_drv
, manifest.os.bin.ps2_drv
, manifest.os.bin.report_rom
, manifest.os.bin.rom_filter
, manifest.os.bin.rom_reporter
, manifest.os.bin.vfs
, manifest.os.lib.vfs
, manifest.driver_manager.bin.driver_manager
, manifest.usb_drv.bin.usb_drv
, manifest.boot_fb_drv.bin.fb_boot_drv
, manifest.intel_fb_drv.bin.intel_fb_drv
, manifest.vesa_drv.bin.vesa_fb_drv
]
# Genode.Boot.toRomTexts
[ emptyXML "capslock"
, emptyXML "numlock"
, emptyXML "usb.config"
, emptyXML "usb_policy"
, { mapKey = "fb_drv.config"
, mapValue =
''
''}
, { mapKey = "input_filter.config"
, mapValue =
''
''
}
]
}