diff options
Diffstat (limited to 'nixos/modules/tasks/scsi-link-power-management.nix')
-rw-r--r-- | nixos/modules/tasks/scsi-link-power-management.nix | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/nixos/modules/tasks/scsi-link-power-management.nix b/nixos/modules/tasks/scsi-link-power-management.nix new file mode 100644 index 00000000000..a9d987780ee --- /dev/null +++ b/nixos/modules/tasks/scsi-link-power-management.nix @@ -0,0 +1,54 @@ +{ config, lib, ... }: + +with lib; + +let + + cfg = config.powerManagement.scsiLinkPolicy; + + kernel = config.boot.kernelPackages.kernel; + + allowedValues = [ + "min_power" + "max_performance" + "medium_power" + "med_power_with_dipm" + ]; + +in + +{ + ###### interface + + options = { + + powerManagement.scsiLinkPolicy = mkOption { + default = null; + type = types.nullOr (types.enum allowedValues); + description = '' + SCSI link power management policy. The kernel default is + "max_performance". + </para><para> + "med_power_with_dipm" is supported by kernel versions + 4.15 and newer. + ''; + }; + + }; + + + ###### implementation + + config = mkIf (cfg != null) { + + assertions = singleton { + assertion = (cfg == "med_power_with_dipm") -> versionAtLeast kernel.version "4.15"; + message = "med_power_with_dipm is not supported for kernels older than 4.15"; + }; + + services.udev.extraRules = '' + SUBSYSTEM=="scsi_host", ACTION=="add", KERNEL=="host*", ATTR{link_power_management_policy}="${cfg}" + ''; + }; + +} |