at 23.11-pre 1.1 kB view raw
1{ config, lib, ... }: 2 3with lib; 4 5let 6 7 cfg = config.powerManagement.scsiLinkPolicy; 8 9 kernel = config.boot.kernelPackages.kernel; 10 11 allowedValues = [ 12 "min_power" 13 "max_performance" 14 "medium_power" 15 "med_power_with_dipm" 16 ]; 17 18in 19 20{ 21 ###### interface 22 23 options = { 24 25 powerManagement.scsiLinkPolicy = mkOption { 26 default = null; 27 type = types.nullOr (types.enum allowedValues); 28 description = lib.mdDoc '' 29 SCSI link power management policy. The kernel default is 30 "max_performance". 31 32 "med_power_with_dipm" is supported by kernel versions 33 4.15 and newer. 34 ''; 35 }; 36 37 }; 38 39 40 ###### implementation 41 42 config = mkIf (cfg != null) { 43 44 assertions = singleton { 45 assertion = (cfg == "med_power_with_dipm") -> versionAtLeast kernel.version "4.15"; 46 message = "med_power_with_dipm is not supported for kernels older than 4.15"; 47 }; 48 49 services.udev.extraRules = '' 50 SUBSYSTEM=="scsi_host", ACTION=="add", KERNEL=="host*", ATTR{link_power_management_policy}="${cfg}" 51 ''; 52 }; 53 54}