1{
2 lib,
3 stdenv,
4 fetchzip,
5 kmod,
6 kernel,
7}:
8
9let
10 modDestDir = "$(out)/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm";
11
12in
13stdenv.mkDerivation (finalAttrs: {
14 pname = "yt6801";
15 version = "1.0.30-20250430";
16
17 src =
18 let
19 version-split = lib.strings.splitString "-" finalAttrs.version;
20 versionName = builtins.elemAt version-split 0;
21 uploadDate = builtins.elemAt version-split 1;
22 in
23 fetchzip {
24 stripRoot = false;
25 url = "https://www.motor-comm.com/Public/Uploads/uploadfile/files/${uploadDate}/yt6801-linux-driver-${versionName}.zip";
26 sha256 = "sha256-6HeU3bbTaKOCy3X+nMpC9/bBc+0c4Ip5TdG+LGUGTKk=";
27 };
28
29 nativeBuildInputs = kernel.moduleBuildDependencies ++ [ kmod ];
30
31 patches =
32 lib.optionals (lib.versionAtLeast kernel.version "6.15") [
33 ./kernel_6.15_fix.patch
34 ]
35 ++ lib.optionals (lib.versionAtLeast kernel.version "6.16") [
36 ./kernel_6_16_fix.patch
37 ];
38
39 postPatch = ''
40 substituteInPlace src/Makefile \
41 --replace-fail "sudo ls -l" "ls -l" \
42 --replace-fail 'depmod $(shell uname -r)' "" \
43 --replace-fail 'modprobe $(KFILE)' ""
44 '';
45
46 makeFlags = [
47 "KERNELRELEASE=${kernel.modDirVersion}"
48 "KSRC_BASE="
49 "KSRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
50 "KDST=kernel/drivers/net/ethernet/motorcomm"
51 "INSTALL_MOD_PATH=${placeholder "out"}"
52 "ko_dir=${modDestDir}"
53 "ko_full=${modDestDir}/yt6801.ko.xz"
54 ];
55
56 meta = {
57 homepage = "https://www.motor-comm.com/product/ethernet-control-chip";
58 description = "YT6801 Gigabit PCIe Ethernet controller chip";
59 license = lib.licenses.gpl2Plus;
60 maintainers = with lib.maintainers; [ indexyz ];
61 platforms = lib.platforms.linux;
62 sourceProvenance = with lib.sourceTypes; [ fromSource ];
63 };
64})