2
0
Fork 0

nixos: use usb_block_drv for USB storage

This commit is contained in:
Ehmry - 2020-12-19 15:23:35 +01:00
parent 263dd198c7
commit 858a0124b0
1 changed files with 73 additions and 23 deletions

View File

@ -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;