65 lines
1.8 KiB
Nix
65 lines
1.8 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
with lib;
|
|
let
|
|
mkEnableOption' = text: default:
|
|
lib.mkEnableOption text // {
|
|
inherit default;
|
|
};
|
|
in {
|
|
|
|
options.hardware.genode.usb = {
|
|
enable = lib.mkEnableOption "USB driver";
|
|
|
|
host = {
|
|
package = lib.mkOption {
|
|
type = types.package;
|
|
default = pkgs.genodePackages.usb_host_drv;
|
|
description = "USB host driver package.";
|
|
};
|
|
biosHandoff = mkEnableOption' "perform the BIOS handoff procedure" true;
|
|
ehciSupport = mkEnableOption' "EHCI support" true;
|
|
ohciSupport = mkEnableOption' "OHCI support" true;
|
|
uhciSupport = mkEnableOption' "UHCI support" true;
|
|
xhciSupport = mkEnableOption' "XHCI support" true;
|
|
};
|
|
|
|
storage = {
|
|
enable = lib.mkEnableOption "USB mass storage driver";
|
|
package = lib.mkOption {
|
|
type = types.package;
|
|
default = pkgs.genodePackages.usb_block_drv;
|
|
description = "USB mass storage driver package.";
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
config = let cfg = config.hardware.genode.usb;
|
|
in {
|
|
|
|
hardware.genode.usb.enable = lib.mkDefault cfg.storage.enable;
|
|
|
|
hardware.genode.platform.policies = lib.optional cfg.enable
|
|
(builtins.toFile ("usb.platform-policy.dhall") ''
|
|
let Sigil = env:DHALL_SIGIL
|
|
|
|
in Sigil.Init.Config.Policy::{
|
|
, service = "Platform"
|
|
, label = Sigil.Init.LabelSelector.prefix "drivers -> usb"
|
|
, content =
|
|
[ Sigil.Prelude.XML.leaf
|
|
{ name = "pci", attributes = toMap { class = "USB" } }
|
|
]
|
|
}
|
|
'');
|
|
|
|
virtualisation.qemu.options = lib.optional cfg.enable
|
|
(lib.optional (pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64) "-usb"
|
|
++ lib.optional (pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64)
|
|
"-device usb-ehci,id=usb0");
|
|
|
|
};
|
|
|
|
}
|