nixos: use usb_block_drv for USB storage
This commit is contained in:
parent
263dd198c7
commit
858a0124b0
|
@ -36,8 +36,17 @@ with lib;
|
||||||
|
|
||||||
hardware.genode = {
|
hardware.genode = {
|
||||||
|
|
||||||
usb.enable = lib.mkEnableOption "USB driver";
|
usb = {
|
||||||
usb.storage.enable = lib.mkEnableOption "USB mass storage driver";
|
|
||||||
|
enable = lib.mkEnableOption "USB driver";
|
||||||
|
storage.enable = lib.mkEnableOption "USB mass storage driver";
|
||||||
|
|
||||||
|
ehciSupport = lib.mkEnableOption "EHCI support" // { default = true; };
|
||||||
|
ohciSupport = lib.mkEnableOption "OHCI support" // { default = true; };
|
||||||
|
uhciSupport = lib.mkEnableOption "UHCI support" // { default = false; };
|
||||||
|
xhciSupport = lib.mkEnableOption "XHCI support" // { default = true; };
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
framebuffer = {
|
framebuffer = {
|
||||||
enable = lib.mkEnableOption "framebuffer driver";
|
enable = lib.mkEnableOption "framebuffer driver";
|
||||||
|
@ -305,7 +314,10 @@ with lib;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
genode.core.children.usb_drv = mkIf config.hardware.genode.usb.enable {
|
genode.core.children.usb_drv = let
|
||||||
|
cfg = config.hardware.genode.usb;
|
||||||
|
toYesNo = b: if b then "yes" else "no";
|
||||||
|
in mkIf cfg.enable {
|
||||||
inputs = [ pkgs.genodePackages.usb_drv ];
|
inputs = [ pkgs.genodePackages.usb_drv ];
|
||||||
configFile = builtins.toFile "usb_drv.dhall" ''
|
configFile = builtins.toFile "usb_drv.dhall" ''
|
||||||
let Genode = env:DHALL_GENODE
|
let Genode = env:DHALL_GENODE
|
||||||
|
@ -314,36 +326,74 @@ with lib;
|
||||||
|
|
||||||
let Init = Genode.Init
|
let Init = Genode.Init
|
||||||
|
|
||||||
let storageEnable = ${
|
|
||||||
if config.hardware.genode.usb.storage.enable then "True" else "False"
|
|
||||||
}
|
|
||||||
|
|
||||||
in Init.Child.flat
|
in Init.Child.flat
|
||||||
Init.Child.Attributes::{
|
Init.Child.Attributes::{
|
||||||
, binary = "usb_drv"
|
, binary = "usb_drv"
|
||||||
, resources = Init.Resources::{ caps = 256, ram = Genode.units.MiB 12 }
|
, resources = Init.Resources::{ caps = 256, ram = Genode.units.MiB 12 }
|
||||||
|
, romReports = let local = "devices" in [ { local, route = local } ]
|
||||||
, routes = [ Init.ServiceRoute.parent "IO_MEM" ]
|
, routes = [ Init.ServiceRoute.parent "IO_MEM" ]
|
||||||
, config = Init.Config::{
|
, config =
|
||||||
, attributes = toMap { uhci = "yes", ehci = "yes", xhci = "yes" }
|
let storagePolicy =
|
||||||
, content =
|
Init.Config.Policy::{
|
||||||
if storageEnable
|
, service = "Usb"
|
||||||
then [ XML.leaf
|
, label = Init.LabelSelector.prefix "usb_block_drv"
|
||||||
{ name = "storage", attributes = XML.emptyAttributes }
|
, attributes = toMap { class = "8" }
|
||||||
]
|
, diag = Some True
|
||||||
else [] : List XML.Type
|
}
|
||||||
, policies =
|
|
||||||
if storageEnable
|
in Init.Config::{
|
||||||
then [ Init.Config.Policy::{
|
, attributes = toMap
|
||||||
, service = "Block"
|
{ ehci = "${toYesNo cfg.ehciSupport}"
|
||||||
, label = Init.LabelSelector.prefix "part_block"
|
, ohci = "${toYesNo cfg.ohciSupport}"
|
||||||
|
, uhci = "${toYesNo cfg.uhciSupport}"
|
||||||
|
, xhci = "${toYesNo cfg.xhciSupport}"
|
||||||
|
}
|
||||||
|
, content =
|
||||||
|
[ XML.element
|
||||||
|
{ name = "raw"
|
||||||
|
, attributes = XML.emptyAttributes
|
||||||
|
, content =
|
||||||
|
[ XML.leaf
|
||||||
|
{ name = "report"
|
||||||
|
, attributes = toMap { devices = "yes" }
|
||||||
|
}
|
||||||
|
, Init.Config.Policy.toXML storagePolicy
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
else [] : List Init.Config.Policy.Type
|
, policies = [ storagePolicy ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
genode.core.children.usb_block_drv =
|
||||||
|
mkIf config.hardware.genode.usb.storage.enable {
|
||||||
|
inputs = [ pkgs.genodePackages.usb_block_drv ];
|
||||||
|
configFile = builtins.toFile "usb_block_drv.dhall" ''
|
||||||
|
let Genode = env:DHALL_GENODE
|
||||||
|
|
||||||
|
let XML = Genode.Prelude.XML
|
||||||
|
|
||||||
|
let Init = Genode.Init
|
||||||
|
|
||||||
|
in Init.Child.flat
|
||||||
|
Init.Child.Attributes::{
|
||||||
|
, binary = "usb_block_drv"
|
||||||
|
, resources = Init.Resources::{ caps = 256, ram = Genode.units.MiB 4 }
|
||||||
|
, config = Init.Config::{
|
||||||
|
, attributes = toMap { writeable = "yes" }
|
||||||
|
, policies =
|
||||||
|
[ Init.Config.Policy::{
|
||||||
|
, service = "Block"
|
||||||
|
, label = Init.LabelSelector.prefix "part_block"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
genode.core.children.fb_drv =
|
genode.core.children.fb_drv =
|
||||||
mkIf config.hardware.genode.framebuffer.enable {
|
mkIf config.hardware.genode.framebuffer.enable {
|
||||||
inputs = with pkgs.genodePackages;
|
inputs = with pkgs.genodePackages;
|
||||||
|
|
Loading…
Reference in New Issue