diff --git a/nixos-modules/hardware.nix b/nixos-modules/hardware.nix index 68e17c0..60573ac 100644 --- a/nixos-modules/hardware.nix +++ b/nixos-modules/hardware.nix @@ -36,6 +36,16 @@ with lib; hardware.genode = { + ahci.enable = lib.mkEnableOption "AHCI (SATA) block driver"; + + framebuffer = { + enable = lib.mkEnableOption "framebuffer driver"; + driver = mkOption { + type = types.enum [ "boot" "vesa" ]; + default = "vesa"; + }; + }; + usb = { enable = lib.mkEnableOption "USB driver"; @@ -48,14 +58,6 @@ with lib; }; - framebuffer = { - enable = lib.mkEnableOption "framebuffer driver"; - driver = mkOption { - type = types.enum [ "boot" "vesa" ]; - default = "vesa"; - }; - }; - }; }; @@ -115,7 +117,19 @@ with lib; ] } '') (builtins.attrNames config.networking.interfaces) - ++ lib.optional config.hardware.genode.framebuffer.enable + ++ lib.optional config.hardware.genode.ahci.enable + (builtins.toFile ("framebuffer.platform-policy.dhall") '' + let Genode = env:DHALL_GENODE + + in Genode.Init.Config.Policy::{ + , service = "Platform" + , label = Genode.Init.LabelSelector.prefix "ahci_drv" + , content = + [ Genode.Prelude.XML.leaf + { name = "pci", attributes = toMap { class = "AHCI" } } + ] + } + '') ++ lib.optional config.hardware.genode.framebuffer.enable (builtins.toFile ("framebuffer.platform-policy.dhall") '' let Genode = env:DHALL_GENODE @@ -280,6 +294,40 @@ with lib; in lib.filterAttrs (n: v: v != null) (nics // sockets); + genode.core.children.ahci_drv = { + inputs = [ pkgs.genodePackages.ahci_drv ]; + configFile = pkgs.writeText "ahci_drv.dhall" '' + let Genode = env:DHALL_GENODE + + let Init = Genode.Init + + in Init.Child.flat + Init.Child.Attributes::{ + , binary = "ahci_drv" + , resources = Init.Resources::{ + , caps = 400 + , ram = Genode.units.MiB 10 + , constrainPhys = True + } + , romReports = [ { local = "ports", route = "ahci_ports" } ] + , routes = + [ Init.ServiceRoute.parent "IRQ" + , Init.ServiceRoute.parent "IO_MEM" + , Init.ServiceRoute.parent "IO_PORT" + ] + , config = Init.Config::{ + , polices = + [ Init.Config.Policy::{ + , service = "Block" + , label = Init.LabelSelector.prefix "part_block" + , attributes = toMap { device = "0", writeable = "yes" } + } + ] + } + } + ''; + }; + genode.core.children.acpi_drv = { inputs = [ pkgs.genodePackages.acpi_drv ]; configFile = pkgs.writeText "acpi_drv.dhall" ''