sigil/nixos-modules/hardware/usb.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");
};
}