x11/nvidia-driver: Remove port
Desktop-focused software not aligned with server objectives
This commit is contained in:
@@ -9246,6 +9246,7 @@ x11/mate-terminal
|
||||
x11/menu-cache
|
||||
x11/metalock
|
||||
x11/mlterm
|
||||
x11/nvidia-driver
|
||||
x11/nvidia-driver-304
|
||||
x11/nvidia-driver-340
|
||||
x11/nvidia-driver-390
|
||||
|
||||
@@ -118,7 +118,6 @@
|
||||
SUBDIR += nezd
|
||||
SUBDIR += nfy
|
||||
SUBDIR += numlockx
|
||||
SUBDIR += nvidia-driver
|
||||
SUBDIR += nvidia-xconfig
|
||||
SUBDIR += nxcomp
|
||||
SUBDIR += p5-Clipboard
|
||||
|
||||
@@ -1,426 +0,0 @@
|
||||
# For those wondering why this port is not under `x11-drivers' category,
|
||||
# have a look at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=121930.
|
||||
#
|
||||
# Starting with version 1.0-7667, NVidia has dropped support for numerous
|
||||
# "legacy" GPUs. Consult NVidia README (the Appendix) to find out whether
|
||||
# you need to use legacy driver version and install one of corresponding
|
||||
# slave ports instead (`x11/nvidia-driver-470', `x11/nvidia-driver-390',
|
||||
# `x11/nvidia-driver-340', or `x11/nvidia-driver-304').
|
||||
#
|
||||
# To simplify testing of new feature branches and beta driver versions,
|
||||
# the port aims to support building against arbitrary DISTVERSION, i.e.
|
||||
# ``make DISTVERSION=xxx.yy.zz -DNO_CHECKSUM'' should typically work.
|
||||
|
||||
PORTNAME?= nvidia-driver
|
||||
DISTVERSION?= ${NVIDIA_DISTVERSION}
|
||||
# Always try to set PORTREVISION as it can be overridden by the slave ports
|
||||
PORTREVISION?= 0
|
||||
CATEGORIES= x11
|
||||
MASTER_SITES= NVIDIA/XFree86/FreeBSD-${ARCH_SUFX}/${DISTVERSION}
|
||||
DISTNAME= NVIDIA-FreeBSD-${ARCH_SUFX}-${DISTVERSION}
|
||||
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
|
||||
|
||||
MAINTAINER?= x11@FreeBSD.org
|
||||
COMMENT?= NVidia graphics card binary drivers for hardware OpenGL rendering
|
||||
WWW= https://www.nvidia.com/object/unix.html
|
||||
|
||||
LICENSE_FILE= ${WRKSRC}/doc/license.txt
|
||||
.include "${.CURDIR}/../nvidia-driver/Makefile.version"
|
||||
.include "${.CURDIR}/../nvidia-driver/Makefile.common"
|
||||
|
||||
# the package provides lib32 versions of the libraries, which then depends
|
||||
# themselves in non existing lib32 libraries, so we don't want the package
|
||||
# to end up depending on non existing libraries
|
||||
NO_SHLIB_REQUIRES_GLOB=*:32
|
||||
|
||||
# Choose proper distinfo file using PKGNAMESUFFIX for slave ports.
|
||||
# Kept for switching to centralized distinfo with suffixes.
|
||||
.ifdef PKGNAMESUFFIX
|
||||
DISTINFO_FILE= ${.CURDIR}/distinfo
|
||||
.endif
|
||||
|
||||
# Pull GNU sed(1) for "binary" patching of obj/libglvnd/libEGL.so.1 and
|
||||
# obj/libEGL_nvidia.so.0 (see below)
|
||||
.if ${NVVERSION} >= 410.057
|
||||
PATCH_DEPENDS= gsed:textproc/gsed
|
||||
BUILD_DEPENDS= pkg-config:devel/pkgconf
|
||||
LIB_DEPENDS= libOpenGL.so:graphics/libglvnd
|
||||
.endif
|
||||
.if ${NVVERSION} >= 415.013
|
||||
LIB_DEPENDS+= libnvidia-egl-wayland.so:graphics/egl-wayland
|
||||
.endif
|
||||
|
||||
USES= kmod uidfix xorg
|
||||
.if ${NVVERSION} >= 470.04201
|
||||
USES+= tar:xz
|
||||
.endif
|
||||
USE_XORG= x11 xorg-server xext
|
||||
USE_LDCONFIG= yes
|
||||
|
||||
PIE_UNSAFE= yes
|
||||
|
||||
EGL_JSON_PATH= ${PREFIX}/share/egl/egl_external_platform.d
|
||||
GLVND_JSON_PATH= ${PREFIX}/share/glvnd/egl_vendor.d
|
||||
VKICD_PATH= ${PREFIX}/share/vulkan/icd.d
|
||||
VKLAYERS_PATH= ${PREFIX}/share/vulkan/implicit_layer.d
|
||||
MAKE_ENV= DEBUG_FLAGS=${DEBUG_FLAGS} \
|
||||
EGL_GLVND_JSON_PATH=${STAGEDIR}${GLVND_JSON_PATH} \
|
||||
VKICD_PATH=${STAGEDIR}${VKICD_PATH} \
|
||||
VKLAYERS_PATH=${STAGEDIR}${VKLAYERS_PATH}
|
||||
.if ${NVVERSION} < 495.02905
|
||||
MAKE_ENV+= EGL_WAYLAND_JSON_PATH=${STAGEDIR}${EGL_JSON_PATH}
|
||||
.else
|
||||
MAKE_ENV+= EGL_EXTERNAL_PLATFORM_JSON_PATH=${STAGEDIR}${EGL_JSON_PATH}
|
||||
.endif
|
||||
SUB_FILES= pkg-message
|
||||
.if !defined(LIBGLDIR)
|
||||
SUB_FILES+= nvidia.conf
|
||||
.endif
|
||||
SUB_PATCHES= extra-patch-src-Makefile \
|
||||
extra-patch-src-nv-freebsd.h
|
||||
.if ${NVVERSION} < 510.03901
|
||||
SUB_PATCHES+= extra-patch-src-nvidia_dev.c \
|
||||
extra-patch-src-nvidia_pci.c
|
||||
.endif
|
||||
.if ${NVVERSION} < 470.25602 || ${NVVERSION} >= 480.00000 && ${NVVERSION} < 530.03002
|
||||
SUB_PATCHES+= extra-patch-src-nvidia_subr.c
|
||||
.endif
|
||||
|
||||
# Temporarily disable GSP firmware as it is known to cause
|
||||
# issues with suspend/resume
|
||||
.if ${NVVERSION} >= 565.00000
|
||||
SUB_PATCHES+= extra-gsp-patch-src-common-inc-nv_firmware_registry.h
|
||||
.endif
|
||||
|
||||
DOCSDIR= ${PREFIX}/share/doc/NVIDIA_GLX-1.0
|
||||
MODULESDIR= lib/xorg/modules
|
||||
EXTENSIONSDIR= ${MODULESDIR}/extensions/.nvidia
|
||||
PORTDOCS= *
|
||||
|
||||
.if ${NVVERSION} >= 331.013
|
||||
SUB_LIST+= NVGL=""
|
||||
.else
|
||||
SUB_LIST+= NVGL="\# "
|
||||
.endif
|
||||
|
||||
.if ${NVVERSION} < 355.006
|
||||
NVSRC= .
|
||||
.else
|
||||
NVSRC= nvidia
|
||||
.endif
|
||||
|
||||
.if ${NVVERSION} < 358.009
|
||||
SUB_LIST+= KLDNAME=nvidia
|
||||
.else
|
||||
SUB_LIST+= KLDNAME=nvidia-modeset
|
||||
.endif
|
||||
|
||||
.if ${NVVERSION} >= 530.03002 && ${NVVERSION} < 545.00
|
||||
SUB_PATCHES += extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
|
||||
.endif
|
||||
.if ${NVVERSION} < 460.039
|
||||
. if ${NVVERSION} >= 358.009
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
|
||||
. endif
|
||||
SUB_PATCHES+= extra-patch-src-nvidia_ctl.c \
|
||||
extra-patch-src-nvidia_linux.c
|
||||
.elif ${NVVERSION} < 510.03901
|
||||
EXTRA_PATCHES+= ${FILESDIR}/460-patch-src-nvidia-nvidia_ctl.c \
|
||||
${FILESDIR}/460-patch-src-nvidia-nvidia_linux.c \
|
||||
${FILESDIR}/460-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
|
||||
.endif
|
||||
.if ${NVVERSION} < 470.04201
|
||||
SUB_PATCHES+= extra-patch-src-nv-misc.h
|
||||
.endif
|
||||
|
||||
OPTIONS_DEFINE= ACPI_PM LINUX WBINVD DOCS
|
||||
OPTIONS_DEFINE_i386= PAE
|
||||
OPTIONS_DEFAULT= ACPI_PM LINUX
|
||||
|
||||
ACPI_PM_DESC= ACPI Power Management support
|
||||
LINUX_DESC= Linux compatibility support
|
||||
PAE_DESC= Physical Address Extensions support
|
||||
WBINVD_DESC= Flush CPU caches directly with WBINVD
|
||||
|
||||
.if ${NVVERSION} < 310.014
|
||||
OPTIONS_DEFINE+= FREEBSD_AGP
|
||||
FREEBSD_AGP_DESC= Use FreeBSD AGP GART driver
|
||||
.endif
|
||||
|
||||
PLIST_SUB+= MODULESDIR=${MODULESDIR}
|
||||
.if ${NVVERSION} < 410.057
|
||||
PLIST_SUB+= EXTENSIONSDIR=${EXTENSIONSDIR}
|
||||
.else
|
||||
PLIST_SUB+= EXTENSIONSDIR="@comment "
|
||||
.endif
|
||||
|
||||
# Not part of the pkg-plist because DISTVERSION is not on PLIST_SUB
|
||||
.if ${NVVERSION} >= 515.04304
|
||||
PLIST_FILES+= lib/libnvidia-wayland-client.so.${DISTVERSION}
|
||||
.endif
|
||||
|
||||
CONFLICTS_INSTALL+= nvidia-driver nvidia-driver-*
|
||||
.if ${PORTNAME} != nvidia-secondary-driver
|
||||
CONFLICTS_INSTALL+= nvidia-secondary-driver
|
||||
.endif
|
||||
|
||||
.include <bsd.port.pre.mk>
|
||||
|
||||
pre-patch:
|
||||
.for p in ${SUB_PATCHES}
|
||||
@${SED} 's/%%NVSRC%%/${NVSRC}/g' ${PATCHDIR}/${p}.in > ${WRKDIR}/${p}
|
||||
.endfor
|
||||
.for p in ${SUB_PATCHES}
|
||||
EXTRA_PATCHES+= ${WRKDIR}/${p}
|
||||
.endfor
|
||||
|
||||
post-patch: .SILENT
|
||||
.if ${NVVERSION} >= 390
|
||||
${REINPLACE_CMD} -e 's|/man/man1|/share/man/man1|' ${WRKSRC}/nvml/man/Makefile
|
||||
.endif
|
||||
# We should support -CURRENT: kill the check (first #if __FreeBSD_version)
|
||||
linenum=$$(${SED} -ne '/^#if __FreeBSD_version/ { = ; q ; }' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h) ; ${REINPLACE_CMD} \
|
||||
-e "$$linenum,+2d" ${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
# Adjust Linux headers #include's after FreeBSD src r246085
|
||||
${REINPLACE_CMD} -E '/#include "machine\/\.\.\/linux(32)?\/linux.h"/ \
|
||||
{ x ; s/.*/#include "machine\/..\/..\/compat\/linux\/linux_ioctl.h"/ ; H ; x ; }' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_linux.c
|
||||
# Fix bogus memset() call
|
||||
${REINPLACE_CMD} -e '/memset/s/sizeof(ci/sizeof(*ci/' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_subr.c
|
||||
# Chase `sys/capability.h' rename to `sys/capsicum.h' in FreeBSD src r263232
|
||||
${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
.if ${NVVERSION} >= 358.009
|
||||
${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \
|
||||
${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
.endif
|
||||
# KPI of kmem_alloc_contig(),kmem_free() changed in FreeBSD src r338143,r338318
|
||||
.if ${NVVERSION} < 530.03002
|
||||
${REINPLACE_CMD} \
|
||||
-e 's/kmem_alloc_contig(kmem_arena, /kmem_alloc_contig(/' \
|
||||
-e 's/kmem_free(kmem_arena, /kmem_free(/' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_subr.c
|
||||
.endif
|
||||
# Pull the right header after FreeBSD src r347984
|
||||
.if ${NVVERSION} >= 358.009
|
||||
${REINPLACE_CMD} -e '/^#include/s:lock\.h:mutex.h:' \
|
||||
${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
.endif
|
||||
# After src df38ada2931f, `sys/module.h' must be included after `sys/param.h'
|
||||
.if ${NVVERSION} >= 358.009
|
||||
@${REINPLACE_CMD} -e '/^#include <sys\/param\.h>/d; \
|
||||
/^#include <sys\/module\.h>/ { x; \
|
||||
s:^:#include <sys/param.h>:; G; }' \
|
||||
${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
.endif
|
||||
# Disable installation of Linux libraries (provided by the corresponding
|
||||
# `x11/linux-nvidia-libs' port or its slaves)
|
||||
${REINPLACE_CMD} -e 's/exists(\/.*/& \&\& 0/' \
|
||||
${WRKSRC}/lib/Makefile
|
||||
# Do not install VDPAU libraries which are provided by `multimedia/libvdpau'
|
||||
# port for a while now
|
||||
${REINPLACE_CMD} -e '/libvdpau[[:blank:]_][^n]/d ; \
|
||||
s/name libvdpau/&_nvidia/' ${WRKSRC}/lib/Makefile
|
||||
# Do not build any binaries (native nvidia-settings and nvidia-xconfig are
|
||||
# provided by their corresponding ports) and manual pages
|
||||
${REINPLACE_CMD} -E 's/(extension).*/\1/' ${WRKSRC}/x11/Makefile
|
||||
${REINPLACE_CMD} -e '/bin/d ; /man/d' ${WRKSRC}/x11/Makefile
|
||||
# Also do not install libnvidia-gtk* libraries which are for nvidia-settings
|
||||
.if ${NVVERSION} >= 346.016
|
||||
${REINPLACE_CMD} -e '/libnvidia-gtk/d' ${WRKSRC}/lib/Makefile
|
||||
.endif
|
||||
# Adjust installation path of a conflicting file (shared between
|
||||
# nvidia-driver and xorg-server) to ease package manager work
|
||||
.if ${NVVERSION} < 410.057
|
||||
${REINPLACE_CMD} -e '/LIBDIR/s:xorg/modules/extensions:&/.nvidia:' \
|
||||
${WRKSRC}/x11/extension/Makefile
|
||||
.endif
|
||||
# Do not execute afterinstall target (prevent automatic module registration
|
||||
# and "smart" installation of conflicting files heuristics)
|
||||
${REINPLACE_CMD} -e 's/afterinstall/&_dontexecute/' ${WRKSRC}/Makefile
|
||||
${REINPLACE_CMD} -e 's/beforeinstall/&_dontexecute/' \
|
||||
${WRKSRC}/lib/Makefile ${WRKSRC}/src/${NVSRC}/Makefile
|
||||
# /usr/share/nvidia path is hardcoded in libGL and nvidia-settings, but we
|
||||
# won't adhere to this stupidity and install nvidia-application-profiles-*
|
||||
# files as part of documentation
|
||||
.if ${NVVERSION} >= 410.057
|
||||
${REINPLACE_CMD} -e 's,/usr/share/nvidia,$${DESTDIR}${DOCSDIR},' \
|
||||
${WRKSRC}/lib/libGLX_nvidia/Makefile ${WRKSRC}/doc/Makefile
|
||||
${REINPLACE_CMD} -e '/AUXLINK_LINK/s,\$${DESTDIR},,' \
|
||||
${WRKSRC}/lib/libGLX_nvidia/Makefile
|
||||
prefix="${PREFIX}" ; padding=$$(($${#prefix}+3)) ; \
|
||||
gsed ${REINPLACE_ARGS} -E "s,/etc/glvnd/egl_vendor\.d.{$$padding},${GLVND_JSON_PATH}\x00," \
|
||||
${WRKSRC}/obj/libglvnd/libEGL.so.1
|
||||
.elif ${NVVERSION} >= 334.016
|
||||
${REINPLACE_CMD} -e 's,/usr/share/nvidia,$${DESTDIR}${DOCSDIR},' \
|
||||
${WRKSRC}/lib/libGL/Makefile ${WRKSRC}/doc/Makefile
|
||||
.endif
|
||||
.if ${NVVERSION} >= 415.013
|
||||
prefix="${PREFIX}" ; padding=$$(($${#prefix}+3)) ; \
|
||||
gsed ${REINPLACE_ARGS} -E "s,/etc/egl/egl_external_platform\.d.{$$padding},${EGL_JSON_PATH}\x00," \
|
||||
${WRKSRC}/obj/libEGL_nvidia.so.0
|
||||
.endif
|
||||
# Unbreak the build against -Werror,-Wunused-but-set-variable CFLAGS
|
||||
.if ${NVVERSION} < 450.51
|
||||
${REINPLACE_CMD} -e '/void nvidia_dev_dtor/,+8s,.*status.*,,' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_dev.c
|
||||
.endif
|
||||
# Move symlinks under PREFIX
|
||||
.if ${NVVERSION} >= 525.08902
|
||||
${REINPLACE_CMD} -e '/ln/s/$${LOCALBASE}\/lib/../' \
|
||||
-e '/LIBDIR/!s/$${LOCALBASE}/$${DESTDIR}$${PREFIX}/' \
|
||||
${WRKSRC}/lib/libnvidia-allocator/Makefile
|
||||
.endif
|
||||
# After src 2a99dd30dfaa, DRIVER_MODULE should not include nvidia_devclass
|
||||
.if ${OSVERSION} >= 1400058
|
||||
${REINPLACE_CMD} -e '/^DRIVER_MODULE/s/, nvidia_devclass//' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_pci.c
|
||||
.endif
|
||||
# Catch up with pmap_unmapdev() and kmem_*() changes in 14-CURRENT
|
||||
.if ${OSVERSION} >= 1400070 && (${NVVERSION} < 470.25602 || ${NVVERSION} >= 480.00000 && ${NVVERSION} < 530.03002)
|
||||
${REINPLACE_CMD} -e '/pmap_unmapdev/s,(vm_offset_t),,' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_os.c
|
||||
${REINPLACE_CMD} -e '/vm_offset_t virtual_address/s,vm_offset_t ,char *,' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
${REINPLACE_CMD} -e '/vm_offset_t address;/s,vm_offset_t ,void *,' \
|
||||
${WRKSRC}/src/${NVSRC}/nvidia_subr.c
|
||||
.endif
|
||||
# Fix a K&R prototype
|
||||
.if ${NVVERSION:R} >= 390
|
||||
${REINPLACE_CMD} -e '/nvlink_allocLock/s,(),(void),' \
|
||||
${WRKSRC}/src/${NVSRC}/nvlink_freebsd.c
|
||||
.endif
|
||||
# Finally, process OPTIONS
|
||||
.if ${PORT_OPTIONS:MFREEBSD_AGP}
|
||||
${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_OS_AGP)/define \1/' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
.endif
|
||||
.if ${PORT_OPTIONS:MACPI_PM}
|
||||
${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_ACPI_PM)/define \1/' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
.endif
|
||||
.if ! ${PORT_OPTIONS:MLINUX}
|
||||
${REINPLACE_CMD} -E 's/define (NV_SUPPORT_LINUX_COMPAT)/undef \1/' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
. if ${NVVERSION} >= 358.009
|
||||
${REINPLACE_CMD} -E 's/define (NVKMS_SUPPORT_LINUX_COMPAT)/undef \1/' \
|
||||
${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
. endif
|
||||
.endif
|
||||
.if ${PORT_OPTIONS:MPAE}
|
||||
${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_PAE)/define \1/' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
.endif
|
||||
.if ${PORT_OPTIONS:MWBINVD}
|
||||
${REINPLACE_CMD} -E 's/undef (NV_USE_WBINVD)/define \1/' \
|
||||
${WRKSRC}/src/${NVSRC}/nv-freebsd.h
|
||||
.endif
|
||||
# Conditionally install documentation (but you generally want it)
|
||||
.if ! ${PORT_OPTIONS:MDOCS}
|
||||
${REINPLACE_CMD} -E 's/(x11).*/\1/ ; /doc/d' ${WRKSRC}/Makefile
|
||||
.endif
|
||||
|
||||
pre-install:
|
||||
@${MKDIR} ${STAGEDIR}${PREFIX}/${MODULESDIR}/drivers \
|
||||
${STAGEDIR}${PREFIX}/${MODULESDIR}/extensions
|
||||
|
||||
post-install: .SILENT
|
||||
${INSTALL_SCRIPT} ${WRKSRC}/obj/nvidia-bug-report.sh \
|
||||
${STAGEDIR}${PREFIX}/bin
|
||||
# pkg-plist is already overbloated, so use these hacks instead of PLIST_SUB's
|
||||
.if ${NVVERSION:R} < 460
|
||||
${REINPLACE_CMD} -e '/libnvidia-glvkspirv\.so/d ; \
|
||||
/nvidia_icd\.json/d ; /nvidia_layers\.json/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} >= 304.128 && ${NVVERSION} < 310.019 || ${NVVERSION} >= 361.016
|
||||
${REINPLACE_CMD} -E '/libvdpau(_trace)?\.so/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} >= 310.019
|
||||
${REINPLACE_CMD} -e '/libXvMCNVIDIA/d' ${TMPPLIST}
|
||||
.else # some applications need this symlink (see PR ports/72877)
|
||||
${LN} -sf libXvMCNVIDIA.so.1 \
|
||||
${STAGEDIR}${PREFIX}/lib/libXvMCNVIDIA_dynamic.so.1
|
||||
.endif
|
||||
.if ${NVVERSION} < 331.013 || ${ARCH} == amd64 && ${NVVERSION} < 334.016
|
||||
${REINPLACE_CMD} -E '/lib(nvidia-)?(EGL|eglcore|GLESv|glsi)/d' \
|
||||
${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 352.009
|
||||
${REINPLACE_CMD} -E '/(lib)?nvidia-(debugdump|smi|ml)/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 358.009
|
||||
${REINPLACE_CMD} -e '/nvidia-modeset\.ko/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 410.057
|
||||
${REINPLACE_CMD} -E '/lib(EGL|GLESv[12].*)_nvidia/d ; \
|
||||
/lib(GLX|GLdispatch|OpenGL)/d ; \
|
||||
/extensions\/libglxserver_nvidia\.so/d ; \
|
||||
/10_nvidia\.json/d' ${TMPPLIST}
|
||||
.else
|
||||
${REINPLACE_CMD} -e '/extensions\/\.nvidia\/libglx/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 415.013
|
||||
${REINPLACE_CMD} -e '/libnvidia-egl-wayland\.so/d ; \
|
||||
/10_nvidia_wayland\.json/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 440.036
|
||||
${REINPLACE_CMD} -e '/lib32\//d' ${TMPPLIST}
|
||||
.elif ${NVVERSION} < 465.01901
|
||||
${REINPLACE_CMD} -e '/lib32\/libnvidia-glvkspirv\.so/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 470.074 || ${NVVERSION} >= 545.000
|
||||
${REINPLACE_CMD} -e '/libnvidia-vulkan-producer\.so/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 495.02905
|
||||
${REINPLACE_CMD} -e '/libnvidia-egl-gbm\.so/d ; \
|
||||
/15_nvidia_gbm\.json/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 525.08902
|
||||
${REINPLACE_CMD} -e '/libnvidia-allocator\.so/d ; \
|
||||
/nvidia-drm_gbm\.so/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 545.000
|
||||
${REINPLACE_CMD} -e '/libnvidia-gpucomp\.so/d' ${TMPPLIST}
|
||||
.endif
|
||||
.if ${NVVERSION} < 560.02803
|
||||
${REINPLACE_CMD} -e '/nvidia_gsp_ga10x_fw\.ko/d' ${TMPPLIST}
|
||||
${REINPLACE_CMD} -e '/nvidia_gsp_tu10x_fw\.ko/d' ${TMPPLIST}
|
||||
.endif
|
||||
|
||||
.if ${NVVERSION} < 410.057
|
||||
# Rename some libraries and install a libmap file to resolve conflict with
|
||||
# Mesa libraries.
|
||||
${LN} -sf libGL-NVIDIA.so.1 \
|
||||
${STAGEDIR}${PREFIX}/lib/libGL-NVIDIA.so
|
||||
${MV} -f ${STAGEDIR}${PREFIX}/lib/libGL.so.1 \
|
||||
${STAGEDIR}${PREFIX}/lib/libGL-NVIDIA.so.1
|
||||
${RM} ${STAGEDIR}${PREFIX}/lib/libGL.so
|
||||
. if ${NVVERSION} >= 331.013
|
||||
${LN} -sf libEGL-NVIDIA.so.1 \
|
||||
${STAGEDIR}${PREFIX}/lib/libEGL-NVIDIA.so
|
||||
${MV} -f ${STAGEDIR}${PREFIX}/lib/libEGL.so.1 \
|
||||
${STAGEDIR}${PREFIX}/lib/libEGL-NVIDIA.so.1
|
||||
${RM} ${STAGEDIR}${PREFIX}/lib/libEGL.so
|
||||
${RM} ${STAGEDIR}${PREFIX}/lib/libGLESv1_CM.so
|
||||
${RM} ${STAGEDIR}${PREFIX}/lib/libGLESv1_CM.so.1
|
||||
${LN} -sf libGLESv2-NVIDIA.so.2 \
|
||||
${STAGEDIR}${PREFIX}/lib/libGLESv2-NVIDIA.so
|
||||
${MV} -f ${STAGEDIR}${PREFIX}/lib/libGLESv2.so.2 \
|
||||
${STAGEDIR}${PREFIX}/lib/libGLESv2-NVIDIA.so.2
|
||||
${RM} ${STAGEDIR}${PREFIX}/lib/libGLESv2.so
|
||||
. endif
|
||||
@${MKDIR} ${STAGEDIR}${PREFIX}/etc/libmap.d/
|
||||
${INSTALL_DATA} ${WRKDIR}/nvidia.conf \
|
||||
${STAGEDIR}${PREFIX}/etc/libmap.d/
|
||||
.else
|
||||
${REINPLACE_CMD} -E '/-NVIDIA/d ; \
|
||||
/lib(Open)?E?GLX?(ESv[12](_CM)?|dispatch)?\.so/d' \
|
||||
${TMPPLIST}
|
||||
# Override mesa.conf if GLX_EXT_libglvnd is missing
|
||||
@${ECHO_CMD} "libGLX_indirect.so.0 libGLX_nvidia.so.0" \
|
||||
>${STAGEDIR}${PREFIX}/etc/libmap.d/nvidia.conf
|
||||
.endif
|
||||
|
||||
.include <bsd.port.post.mk>
|
||||
@@ -1,28 +0,0 @@
|
||||
# LICENSE_FILE is set in the consumer ports because its location varies
|
||||
LICENSE= NVIDIA
|
||||
LICENSE_NAME= License For Customer Use of NVIDIA Software
|
||||
LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
|
||||
|
||||
.if ${DISTVERSION:R} > 390
|
||||
ONLY_FOR_ARCHS= amd64
|
||||
.else
|
||||
ONLY_FOR_ARCHS= i386 amd64
|
||||
.endif
|
||||
|
||||
ARCH_SUFX= x86${ARCH:S/i386//:S/amd/_/}
|
||||
|
||||
# NVVERSION is float since r372065 (integer values become less readable
|
||||
# after minor version could occupy three digits)
|
||||
.if ${DISTVERSION:C/[0-9]+//g} == ".." # major.minor.update
|
||||
. if ${DISTVERSION:C/[0-9]+\.([0-9]+)\.[0-9]+/\1/} < 100
|
||||
NVVERSION= ${DISTVERSION:S/./.0/:R}${DISTVERSION:E} # allow minor > 99
|
||||
. else
|
||||
NVVERSION= ${DISTVERSION:R}${DISTVERSION:E}
|
||||
. endif
|
||||
.else # major.minor
|
||||
. if ${DISTVERSION:E} < 100
|
||||
NVVERSION= ${DISTVERSION:S/./.0/} # allow minor > 99
|
||||
. else
|
||||
NVVERSION= ${DISTVERSION}
|
||||
. endif
|
||||
.endif
|
||||
@@ -1,4 +0,0 @@
|
||||
# NVIDIA Distversion
|
||||
#
|
||||
# This will be included from x11/nvidia-driver and the nvidia-drm port
|
||||
NVIDIA_DISTVERSION?= 570.144
|
||||
@@ -1,3 +0,0 @@
|
||||
TIMESTAMP = 1745330770
|
||||
SHA256 (NVIDIA-FreeBSD-x86_64-570.144.tar.xz) = 7912c9f101b29fec10c434b1389b1403489fa3008fae67d1b76ef3d9f4b5388f
|
||||
SIZE (NVIDIA-FreeBSD-x86_64-570.144.tar.xz) = 260506500
|
||||
@@ -1,72 +0,0 @@
|
||||
--- src/nvidia/nvidia_ctl.c.orig 2021-01-21 21:50:34 UTC
|
||||
+++ src/nvidia/nvidia_ctl.c
|
||||
@@ -13,6 +13,12 @@
|
||||
#include "nv.h"
|
||||
#include "nv-freebsd.h"
|
||||
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT /* (COMPAT_LINUX || COMPAT_LINUX32) */
|
||||
+#include <compat/linux/linux_util.h>
|
||||
+
|
||||
+const char nvidia_driver_name[] = "nvidia";
|
||||
+#endif
|
||||
+
|
||||
static d_open_t nvidia_ctl_open;
|
||||
static void nvidia_ctl_dtor(void *arg);
|
||||
static d_ioctl_t nvidia_ctl_ioctl;
|
||||
@@ -138,6 +144,18 @@ static int nvidia_ctl_poll(
|
||||
|
||||
int nvidia_ctl_attach(void)
|
||||
{
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ struct linux_device_handler nvidia_ctl_linux_handler = {
|
||||
+ .bsd_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .linux_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .bsd_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_major = NV_MAJOR_DEVICE_NUMBER,
|
||||
+ .linux_minor = 255,
|
||||
+ .linux_char_device = 1
|
||||
+ };
|
||||
+#endif
|
||||
+
|
||||
if (nvidia_count == 0) {
|
||||
nvidia_ctl_cdev = make_dev(&nvidia_ctl_cdevsw,
|
||||
CDEV_CTL_MINOR,
|
||||
@@ -145,6 +163,10 @@ int nvidia_ctl_attach(void)
|
||||
"%s", nvidia_ctl_cdevsw.d_name);
|
||||
if (nvidia_ctl_cdev == NULL)
|
||||
return ENOMEM;
|
||||
+
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ (void)linux_device_register_handler(&nvidia_ctl_linux_handler);
|
||||
+#endif
|
||||
}
|
||||
|
||||
nvidia_count++;
|
||||
@@ -153,10 +175,25 @@ int nvidia_ctl_attach(void)
|
||||
|
||||
int nvidia_ctl_detach(void)
|
||||
{
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ struct linux_device_handler nvidia_ctl_linux_handler = {
|
||||
+ .bsd_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .linux_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .bsd_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_major = NV_MAJOR_DEVICE_NUMBER,
|
||||
+ .linux_minor = 255,
|
||||
+ .linux_char_device = 1
|
||||
+ };
|
||||
+#endif
|
||||
nvidia_count--;
|
||||
|
||||
- if (nvidia_count == 0)
|
||||
+ if (nvidia_count == 0) {
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ (void)linux_device_unregister_handler(&nvidia_ctl_linux_handler);
|
||||
+#endif
|
||||
destroy_dev(nvidia_ctl_cdev);
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
--- src/nvidia/nvidia_linux.c.orig 2021-01-21 21:50:34 UTC
|
||||
+++ src/nvidia/nvidia_linux.c
|
||||
@@ -35,21 +35,16 @@ int linux_ioctl_nvidia(
|
||||
struct linux_ioctl_args *args
|
||||
)
|
||||
{
|
||||
- struct file *fp;
|
||||
- int error;
|
||||
- cap_rights_t rights;
|
||||
- u_long cmd;
|
||||
+ static const uint32_t dir[4] = { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT };
|
||||
|
||||
- error = fget(td, args->fd, cap_rights_init(&rights, CAP_IOCTL), &fp);
|
||||
- if (error != 0)
|
||||
- return error;
|
||||
-
|
||||
- cmd = args->cmd;
|
||||
-
|
||||
- error = fo_ioctl(fp, cmd, (caddr_t)args->arg, td->td_ucred, td);
|
||||
- fdrop(fp, td);
|
||||
-
|
||||
- return error;
|
||||
+ if ((args->cmd & (1<<29)) != 0) {
|
||||
+ /* FreeBSD has only 13 bits to encode the size. */
|
||||
+ printf("nvidia: pid %d (%s): ioctl cmd=0x%x size too large\n",
|
||||
+ (int)td->td_proc->p_pid, td->td_proc->p_comm, args->cmd);
|
||||
+ return (EINVAL);
|
||||
+ }
|
||||
+ args->cmd = (args->cmd & ~IOC_DIRMASK) | dir[args->cmd >> 30];
|
||||
+ return (sys_ioctl(td, (struct ioctl_args *)args));
|
||||
}
|
||||
|
||||
struct linux_ioctl_handler nvidia_handler = {
|
||||
@@ -1,189 +0,0 @@
|
||||
--- src/nvidia-modeset/nvidia-modeset-freebsd.c.orig 2024-03-11 15:49:45 UTC
|
||||
+++ src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <sys/file.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/stack.h>
|
||||
+#include <sys/sysproto.h>
|
||||
|
||||
#include "nvkms-ioctl.h"
|
||||
#include "nvidia-modeset-os-interface.h"
|
||||
@@ -52,6 +53,7 @@
|
||||
#include "machine/../linux32/linux32_proto.h"
|
||||
#endif
|
||||
#include <compat/linux/linux_ioctl.h>
|
||||
+ #include <compat/linux/linux_util.h>
|
||||
#endif
|
||||
|
||||
|
||||
@@ -280,7 +282,12 @@ struct nvkms_ref_ptr* nvkms_alloc_ref_ptr(void *ptr)
|
||||
|
||||
struct nvkms_ref_ptr* nvkms_alloc_ref_ptr(void *ptr)
|
||||
{
|
||||
- struct nvkms_ref_ptr *ref_ptr = nvkms_alloc(sizeof(*ref_ptr), NV_FALSE);
|
||||
+ /*
|
||||
+ * Initialize memory to avoid spurious "lock re-initialization" errors.
|
||||
+ * A little more detail can be found in the PR 201340 starting around
|
||||
+ * comment #50.
|
||||
+ */
|
||||
+ struct nvkms_ref_ptr *ref_ptr = nvkms_alloc(sizeof(*ref_ptr), NV_TRUE);
|
||||
if (ref_ptr) {
|
||||
mtx_init(&ref_ptr->lock, "nvkms-ref-ptr-lock", NULL, MTX_SPIN);
|
||||
// The ref_ptr owner counts as a reference on the ref_ptr itself.
|
||||
@@ -371,7 +378,7 @@ static struct {
|
||||
* Global list with pending timers, any change requires acquiring lock
|
||||
*/
|
||||
static struct {
|
||||
- struct sx lock;
|
||||
+ struct mtx lock;
|
||||
LIST_HEAD(nvkms_timers_head, nvkms_timer_t) list;
|
||||
} nvkms_timers;
|
||||
|
||||
@@ -384,9 +391,9 @@ static void nvkms_taskqueue_callback(void *arg, int pe
|
||||
* We can delete this timer from pending timers list - it's being
|
||||
* processed now.
|
||||
*/
|
||||
- sx_xlock(&nvkms_timers.lock);
|
||||
+ mtx_lock_spin(&nvkms_timers.lock);
|
||||
LIST_REMOVE(timer, timers_list);
|
||||
- sx_xunlock(&nvkms_timers.lock);
|
||||
+ mtx_unlock_spin(&nvkms_timers.lock);
|
||||
|
||||
/*
|
||||
* After taskqueue_callback we want to be sure that callout_callback
|
||||
@@ -454,7 +461,7 @@ nvkms_init_timer(struct nvkms_timer_t *timer, nvkms_ti
|
||||
* run in parallel with this, it could race against nvkms_init_timer()
|
||||
* and free the timer before its initialization is complete.
|
||||
*/
|
||||
- sx_xlock(&nvkms_timers.lock);
|
||||
+ mtx_lock_spin(&nvkms_timers.lock);
|
||||
LIST_INSERT_HEAD(&nvkms_timers.list, timer, timers_list);
|
||||
|
||||
if (usec == 0) {
|
||||
@@ -468,7 +475,7 @@ nvkms_init_timer(struct nvkms_timer_t *timer, nvkms_ti
|
||||
NVKMS_USECS_TO_TICKS(usec),
|
||||
nvkms_callout_callback, (void *) timer);
|
||||
}
|
||||
- sx_xunlock(&nvkms_timers.lock);
|
||||
+ mtx_unlock_spin(&nvkms_timers.lock);
|
||||
}
|
||||
|
||||
nvkms_timer_handle_t*
|
||||
@@ -916,29 +923,31 @@ static int nvkms_poll(
|
||||
*************************************************************************/
|
||||
|
||||
#if defined(NVKMS_SUPPORT_LINUX_COMPAT)
|
||||
+static struct linux_device_handler nvkms_linux_device_handler = {
|
||||
+ .bsd_driver_name = "nvidia-modeset",
|
||||
+ .linux_driver_name = "nvidia-modeset",
|
||||
+ .bsd_device_name = "nvidia-modeset",
|
||||
+ .linux_device_name = "nvidia-modeset",
|
||||
+ .linux_major = 195,
|
||||
+ .linux_minor = 254,
|
||||
+ .linux_char_device = 1
|
||||
+};
|
||||
|
||||
static int nvkms_linux_ioctl_function(
|
||||
struct thread *td,
|
||||
struct linux_ioctl_args *args
|
||||
)
|
||||
{
|
||||
- struct file *fp;
|
||||
- int status;
|
||||
- u_long cmd;
|
||||
+ static const uint32_t dir[4] = { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT };
|
||||
|
||||
- cap_rights_t rights;
|
||||
- status = fget(td, args->fd, cap_rights_init(&rights, CAP_IOCTL), &fp);
|
||||
-
|
||||
- if (status != 0) {
|
||||
- return status;
|
||||
+ if ((args->cmd & (1<<29)) != 0) {
|
||||
+ /* FreeBSD has only 13 bits to encode the size. */
|
||||
+ printf("nvidia: pid %d (%s): ioctl cmd=0x%x size too large\n",
|
||||
+ (int)td->td_proc->p_pid, td->td_proc->p_comm, args->cmd);
|
||||
+ return (EINVAL);
|
||||
}
|
||||
-
|
||||
- cmd = args->cmd;
|
||||
-
|
||||
- status = fo_ioctl(fp, cmd, (caddr_t)args->arg, td->td_ucred, td);
|
||||
- fdrop(fp, td);
|
||||
-
|
||||
- return status;
|
||||
+ args->cmd = (args->cmd & ~IOC_DIRMASK) | dir[args->cmd >> 30];
|
||||
+ return (sys_ioctl(td, (struct ioctl_args *)args));
|
||||
}
|
||||
|
||||
#define NVKMS_LINUX_IOCTL_MIN _IOC(0, NVKMS_IOCTL_MAGIC, NVKMS_IOCTL_CMD, 0)
|
||||
@@ -954,6 +963,7 @@ static void nvkms_linux_compat_load(void)
|
||||
static void nvkms_linux_compat_load(void)
|
||||
{
|
||||
#if defined(NVKMS_SUPPORT_LINUX_COMPAT)
|
||||
+ linux_device_register_handler(&nvkms_linux_device_handler);
|
||||
linux_ioctl_register_handler(&nvkms_linux_ioctl_handler);
|
||||
#endif
|
||||
}
|
||||
@@ -962,6 +972,7 @@ static void nvkms_linux_compat_unload(void)
|
||||
{
|
||||
#if defined(NVKMS_SUPPORT_LINUX_COMPAT)
|
||||
linux_ioctl_unregister_handler(&nvkms_linux_ioctl_handler);
|
||||
+ linux_device_unregister_handler(&nvkms_linux_device_handler);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1011,7 +1022,7 @@ nvidia_modeset_loader(struct module *m, int what, void
|
||||
nvkms_module.is_unloading = NV_FALSE;
|
||||
|
||||
LIST_INIT(&nvkms_timers.list);
|
||||
- sx_init(&nvkms_timers.lock, "nvidia-modeset timer lock");
|
||||
+ mtx_init(&nvkms_timers.lock, "nvidia-modeset timer lock", NULL, MTX_SPIN);
|
||||
|
||||
nvkms_dev = make_dev(&nvkms_cdevsw,
|
||||
NVKMS_CDEV_MINOR,
|
||||
@@ -1020,7 +1031,7 @@ nvidia_modeset_loader(struct module *m, int what, void
|
||||
|
||||
if (nvkms_dev == NULL) {
|
||||
sx_destroy(&nvkms_module.lock);
|
||||
- sx_destroy(&nvkms_timers.lock);
|
||||
+ mtx_destroy(&nvkms_timers.lock);
|
||||
sx_destroy(&nvkms_lock);
|
||||
|
||||
nvkms_free_rm();
|
||||
@@ -1089,7 +1100,7 @@ nvidia_modeset_loader(struct module *m, int what, void
|
||||
* nvkms_taskqueue_callback() doesn't get called after the
|
||||
* module is unloaded.
|
||||
*/
|
||||
- sx_xlock(&nvkms_timers.lock);
|
||||
+ mtx_lock_spin(&nvkms_timers.lock);
|
||||
|
||||
LIST_FOREACH_SAFE(timer, &nvkms_timers.list, timers_list, tmp) {
|
||||
if (timer->callout_created) {
|
||||
@@ -1111,7 +1122,7 @@ nvidia_modeset_loader(struct module *m, int what, void
|
||||
}
|
||||
}
|
||||
|
||||
- sx_xunlock(&nvkms_timers.lock);
|
||||
+ mtx_unlock_spin(&nvkms_timers.lock);
|
||||
|
||||
taskqueue_run(taskqueue_nvkms);
|
||||
|
||||
@@ -1119,7 +1130,7 @@ nvidia_modeset_loader(struct module *m, int what, void
|
||||
nvkms_dev = NULL;
|
||||
|
||||
sx_destroy(&nvkms_module.lock);
|
||||
- sx_destroy(&nvkms_timers.lock);
|
||||
+ mtx_destroy(&nvkms_timers.lock);
|
||||
sx_destroy(&nvkms_lock);
|
||||
|
||||
nvkms_free_rm();
|
||||
@@ -1151,4 +1162,9 @@ MODULE_DEPEND(nvidia_modeset, /* module
|
||||
MODULE_DEPEND(nvidia_modeset, /* module name */
|
||||
linux, /* prerequisite module */
|
||||
1, 1, 1); /* vmin, vpref, vmax */
|
||||
+#if defined(NVCPU_X86_64)
|
||||
+MODULE_DEPEND(nvidia_modeset, /* module name */
|
||||
+ linux_common, /* prerequisite module */
|
||||
+ 1, 1, 1); /* vmin, vpref, vmax */
|
||||
+#endif
|
||||
#endif
|
||||
@@ -1,11 +0,0 @@
|
||||
--- src/common/inc/nv-firmware-registry.h.orig
|
||||
+++ src/common/inc/nv-firmware-registry.h
|
||||
@@ -62,7 +62,7 @@
|
||||
#define NV_REG_ENABLE_GPU_FIRMWARE_POLICY_MASK 0x000000F0
|
||||
#define NV_REG_ENABLE_GPU_FIRMWARE_POLICY_ALLOW_FALLBACK 0x00000010
|
||||
|
||||
-#define NV_REG_ENABLE_GPU_FIRMWARE_DEFAULT_VALUE 0x00000012
|
||||
+#define NV_REG_ENABLE_GPU_FIRMWARE_DEFAULT_VALUE 0x00000000
|
||||
|
||||
//
|
||||
// Registry key that when enabled, will send GPU firmware logs
|
||||
@@ -1,18 +0,0 @@
|
||||
--- src/%%NVSRC%%/Makefile.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/Makefile
|
||||
@@ -30,6 +30,15 @@ NOOBJ= true
|
||||
stdarg.h:
|
||||
@ln -s machine/stdarg.h stdarg.h
|
||||
|
||||
+SRCS+= opt_global.h
|
||||
+.if ${MACHINE_ARCH} == "i386" && !defined(KERNBUILDDIR)
|
||||
+PAE!= sed -n '/define NV_SUPPORT_PAE/p' nv-freebsd.h
|
||||
+.if !empty(PAE)
|
||||
+opt_global.h:
|
||||
+ echo "#define PAE 1" > ${.TARGET}
|
||||
+.endif
|
||||
+.endif
|
||||
+
|
||||
*.c: stdarg.h
|
||||
|
||||
beforeinstall: ${KMOD}.ko
|
||||
@@ -1,14 +0,0 @@
|
||||
--- src/%%NVSRC%%/nv-freebsd.h.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/nv-freebsd.h
|
||||
@@ -157,6 +157,11 @@ MALLOC_DECLARE(M_NVIDIA);
|
||||
#define NV_SUPPORT_ACPI_PM
|
||||
|
||||
/*
|
||||
+ * Enable/Disable support for PAE on i386.
|
||||
+ */
|
||||
+#undef NV_SUPPORT_PAE
|
||||
+
|
||||
+/*
|
||||
* Enable/Disable heavy-weight cache-flush logic. By default, the driver
|
||||
* relies on the kernel to perform cache flushes using optimized
|
||||
* routines.
|
||||
@@ -1,11 +0,0 @@
|
||||
--- src/%%NVSRC%%/nv-misc.h.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/nv-misc.h
|
||||
@@ -11,6 +11,8 @@
|
||||
#ifndef _NV_MISC_H_
|
||||
#define _NV_MISC_H_
|
||||
|
||||
+#include "opt_global.h"
|
||||
+
|
||||
#include "nvtypes.h"
|
||||
#include "rmretval.h"
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
--- src/%%NVSRC%%/nvidia_ctl.c.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/nvidia_ctl.c
|
||||
@@ -13,6 +13,12 @@
|
||||
#include "nv.h"
|
||||
#include "nv-freebsd.h"
|
||||
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT /* (COMPAT_LINUX || COMPAT_LINUX32) */
|
||||
+#include <compat/linux/linux_util.h>
|
||||
+
|
||||
+const char nvidia_driver_name[] = "nvidia";
|
||||
+#endif
|
||||
+
|
||||
static d_open_t nvidia_ctl_open;
|
||||
static void nvidia_ctl_dtor(void *arg);
|
||||
static d_ioctl_t nvidia_ctl_ioctl;
|
||||
@@ -65,13 +71,12 @@ static int nvidia_ctl_open(
|
||||
|
||||
void nvidia_ctl_dtor(void *arg)
|
||||
{
|
||||
- int status;
|
||||
struct nvidia_filep *filep = arg;
|
||||
struct nvidia_event *et;
|
||||
nv_state_t *nv = filep->nv;
|
||||
|
||||
nv_lock_api(nv);
|
||||
- status = nvidia_close_ctl(nv, filep);
|
||||
+ nvidia_close_ctl(nv, filep);
|
||||
nv_unlock_api(nv);
|
||||
|
||||
while ((et = STAILQ_FIRST(&filep->event_queue))) {
|
||||
@@ -138,6 +144,18 @@ static int nvidia_ctl_poll(
|
||||
|
||||
int nvidia_ctl_attach(void)
|
||||
{
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ struct linux_device_handler nvidia_ctl_linux_handler = {
|
||||
+ .bsd_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .linux_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .bsd_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_major = NV_MAJOR_DEVICE_NUMBER,
|
||||
+ .linux_minor = 255,
|
||||
+ .linux_char_device = 1
|
||||
+ };
|
||||
+#endif
|
||||
+
|
||||
if (nvidia_count == 0) {
|
||||
nvidia_ctl_cdev = make_dev(&nvidia_ctl_cdevsw,
|
||||
CDEV_CTL_MINOR,
|
||||
@@ -145,6 +163,10 @@ int nvidia_ctl_attach(void)
|
||||
"%s", nvidia_ctl_cdevsw.d_name);
|
||||
if (nvidia_ctl_cdev == NULL)
|
||||
return ENOMEM;
|
||||
+
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ (void)linux_device_register_handler(&nvidia_ctl_linux_handler);
|
||||
+#endif
|
||||
}
|
||||
|
||||
nvidia_count++;
|
||||
@@ -153,13 +175,25 @@ int nvidia_ctl_attach(void)
|
||||
|
||||
int nvidia_ctl_detach(void)
|
||||
{
|
||||
- struct nvidia_softc *sc;
|
||||
-
|
||||
- sc = &nvidia_ctl_sc;
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ struct linux_device_handler nvidia_ctl_linux_handler = {
|
||||
+ .bsd_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .linux_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .bsd_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_device_name = __DECONST(char *, nvidia_ctl_cdevsw.d_name),
|
||||
+ .linux_major = NV_MAJOR_DEVICE_NUMBER,
|
||||
+ .linux_minor = 255,
|
||||
+ .linux_char_device = 1
|
||||
+ };
|
||||
+#endif
|
||||
nvidia_count--;
|
||||
|
||||
- if (nvidia_count == 0)
|
||||
+ if (nvidia_count == 0) {
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ (void)linux_device_unregister_handler(&nvidia_ctl_linux_handler);
|
||||
+#endif
|
||||
destroy_dev(nvidia_ctl_cdev);
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
--- src/%%NVSRC%%/nvidia_dev.c.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/nvidia_dev.c
|
||||
@@ -13,6 +13,12 @@
|
||||
#include "nv.h"
|
||||
#include "nv-freebsd.h"
|
||||
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT /* (COMPAT_LINUX || COMPAT_LINUX32) */
|
||||
+#include <compat/linux/linux_util.h>
|
||||
+
|
||||
+extern const char nvidia_driver_name[];
|
||||
+#endif
|
||||
+
|
||||
static d_open_t nvidia_dev_open;
|
||||
static void nvidia_dev_dtor(void *arg);
|
||||
static d_ioctl_t nvidia_dev_ioctl;
|
||||
@@ -162,6 +168,18 @@ static int nvidia_dev_mmap_single(
|
||||
|
||||
int nvidia_dev_attach(struct nvidia_softc *sc)
|
||||
{
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ struct linux_device_handler nvidia_dev_linux_handler = {
|
||||
+ .bsd_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .linux_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .bsd_device_name = NULL,
|
||||
+ .linux_device_name = NULL,
|
||||
+ .linux_major = NV_MAJOR_DEVICE_NUMBER,
|
||||
+ .linux_minor = device_get_unit(sc->dev),
|
||||
+ .linux_char_device = 1
|
||||
+ };
|
||||
+#endif
|
||||
+
|
||||
sc->cdev = make_dev(&nvidia_dev_cdevsw,
|
||||
device_get_unit(sc->dev),
|
||||
UID_ROOT, GID_WHEEL, 0666,
|
||||
@@ -172,11 +190,31 @@ int nvidia_dev_attach(struct nvidia_softc *sc)
|
||||
|
||||
sc->cdev->si_drv1 = sc;
|
||||
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ nvidia_dev_linux_handler.bsd_device_name = sc->cdev->si_name;
|
||||
+ nvidia_dev_linux_handler.linux_device_name = sc->cdev->si_name;
|
||||
+ (void)linux_device_register_handler(&nvidia_dev_linux_handler);
|
||||
+#endif
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nvidia_dev_detach(struct nvidia_softc *sc)
|
||||
{
|
||||
+#ifdef NV_SUPPORT_LINUX_COMPAT
|
||||
+ struct linux_device_handler nvidia_dev_linux_handler = {
|
||||
+ .bsd_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .linux_driver_name = __DECONST(char *, nvidia_driver_name),
|
||||
+ .bsd_device_name = sc->cdev->si_name,
|
||||
+ .linux_device_name = sc->cdev->si_name,
|
||||
+ .linux_major = NV_MAJOR_DEVICE_NUMBER,
|
||||
+ .linux_minor = device_get_unit(sc->dev),
|
||||
+ .linux_char_device = 1
|
||||
+ };
|
||||
+
|
||||
+ (void)linux_device_unregister_handler(&nvidia_dev_linux_handler);
|
||||
+#endif
|
||||
+
|
||||
destroy_dev(sc->cdev);
|
||||
return 0;
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
--- src/%%NVSRC%%/nvidia_linux.c.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/nvidia_linux.c
|
||||
@@ -35,23 +35,16 @@ int linux_ioctl_nvidia(
|
||||
struct linux_ioctl_args *args
|
||||
)
|
||||
{
|
||||
- struct file *fp;
|
||||
- int error;
|
||||
-#if __FreeBSD_version >= 1000053
|
||||
- cap_rights_t rights;
|
||||
-#endif
|
||||
- u_long cmd;
|
||||
+ static const uint32_t dir[4] = { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT };
|
||||
|
||||
- error = fget(td, args->fd, cap_rights_init(&rights, CAP_IOCTL), &fp);
|
||||
- if (error != 0)
|
||||
- return error;
|
||||
-
|
||||
- cmd = args->cmd;
|
||||
-
|
||||
- error = fo_ioctl(fp, cmd, (caddr_t)args->arg, td->td_ucred, td);
|
||||
- fdrop(fp, td);
|
||||
-
|
||||
- return error;
|
||||
+ if ((args->cmd & (1<<29)) != 0) {
|
||||
+ /* FreeBSD has only 13 bits to encode the size. */
|
||||
+ printf("nvidia: pid %d (%s): ioctl cmd=0x%x size too large\n",
|
||||
+ (int)td->td_proc->p_pid, td->td_proc->p_comm, args->cmd);
|
||||
+ return (EINVAL);
|
||||
+ }
|
||||
+ args->cmd = (args->cmd & ~IOC_DIRMASK) | dir[args->cmd >> 30];
|
||||
+ return (sys_ioctl(td, (struct ioctl_args *)args));
|
||||
}
|
||||
|
||||
struct linux_ioctl_handler nvidia_handler = {
|
||||
@@ -1,10 +0,0 @@
|
||||
--- src/%%NVSRC%%/nvidia_pci.c.orig 2017-09-14 20:46:30 UTC
|
||||
+++ src/%%NVSRC%%/nvidia_pci.c
|
||||
@@ -405,4 +405,7 @@ MODULE_DEPEND(nvidia, agp, 1, 1, 1);
|
||||
|
||||
#ifdef NV_SUPPORT_LINUX_COMPAT /* (COMPAT_LINUX || COMPAT_LINUX32) */
|
||||
MODULE_DEPEND(nvidia, linux, 1, 1, 1);
|
||||
+#if defined(NVCPU_X86_64)
|
||||
+MODULE_DEPEND(nvidia, linux_common, 1, 1, 1);
|
||||
+#endif
|
||||
#endif
|
||||
@@ -1,12 +0,0 @@
|
||||
--- src/%%NVSRC%%/nvidia_subr.c.orig 2022-03-16 11:18:11 UTC
|
||||
+++ src/%%NVSRC%%/nvidia_subr.c
|
||||
@@ -727,6 +727,9 @@ int nvidia_modevent(
|
||||
* time.
|
||||
*/
|
||||
sc = &nvidia_ctl_sc;
|
||||
+#if __FreeBSD_version >= 1400058
|
||||
+ nvidia_devclass = devclass_create("nvidia");
|
||||
+#endif
|
||||
|
||||
nvidia_stack_t_zone = uma_zcreate("nvidia_stack_t", sizeof(nvidia_stack_t),
|
||||
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
|
||||
@@ -1,109 +0,0 @@
|
||||
--- src/nvidia-modeset/nvidia-modeset-freebsd.c.orig 2018-08-21 23:09:28 UTC
|
||||
+++ src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <sys/poll.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/proc.h>
|
||||
+#include <sys/sysproto.h>
|
||||
|
||||
#include "nvkms-ioctl.h"
|
||||
#include "nvidia-modeset-os-interface.h"
|
||||
@@ -48,6 +49,7 @@
|
||||
#include "machine/../linux32/linux32_proto.h"
|
||||
#endif
|
||||
#include <compat/linux/linux_ioctl.h>
|
||||
+ #include <compat/linux/linux_util.h>
|
||||
#endif
|
||||
|
||||
|
||||
@@ -252,7 +254,12 @@ struct nvkms_ref_ptr {
|
||||
|
||||
struct nvkms_ref_ptr* NVKMS_API_CALL nvkms_alloc_ref_ptr(void *ptr)
|
||||
{
|
||||
- struct nvkms_ref_ptr *ref_ptr = nvkms_alloc(sizeof(*ref_ptr), NV_FALSE);
|
||||
+ /*
|
||||
+ * Initialize memory to avoid spurious "lock re-initialization" errors.
|
||||
+ * A little more detail can be found in the PR 201340 starting around
|
||||
+ * comment #50.
|
||||
+ */
|
||||
+ struct nvkms_ref_ptr *ref_ptr = nvkms_alloc(sizeof(*ref_ptr), NV_TRUE);
|
||||
if (ref_ptr) {
|
||||
mtx_init(&ref_ptr->lock, "nvkms-ref-ptr-lock", NULL, MTX_SPIN);
|
||||
// The ref_ptr owner counts as a reference on the ref_ptr itself.
|
||||
@@ -867,33 +869,31 @@ static int nvkms_poll(
|
||||
*************************************************************************/
|
||||
|
||||
#if defined(NVKMS_SUPPORT_LINUX_COMPAT)
|
||||
+static struct linux_device_handler nvkms_linux_device_handler = {
|
||||
+ .bsd_driver_name = "nvidia-modeset",
|
||||
+ .linux_driver_name = "nvidia-modeset",
|
||||
+ .bsd_device_name = "nvidia-modeset",
|
||||
+ .linux_device_name = "nvidia-modeset",
|
||||
+ .linux_major = 195,
|
||||
+ .linux_minor = 254,
|
||||
+ .linux_char_device = 1
|
||||
+};
|
||||
|
||||
static int nvkms_linux_ioctl_function(
|
||||
struct thread *td,
|
||||
struct linux_ioctl_args *args
|
||||
)
|
||||
{
|
||||
- struct file *fp;
|
||||
- int status;
|
||||
- u_long cmd;
|
||||
+ static const uint32_t dir[4] = { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT };
|
||||
|
||||
-#if NV_FGET_HAS_CAP_RIGHTS_T_ARG
|
||||
- cap_rights_t rights;
|
||||
- status = fget(td, args->fd, cap_rights_init(&rights, CAP_IOCTL), &fp);
|
||||
-#else
|
||||
- status = fget(td, args->fd, &fp);
|
||||
-#endif
|
||||
-
|
||||
- if (status != 0) {
|
||||
- return status;
|
||||
+ if ((args->cmd & (1<<29)) != 0) {
|
||||
+ /* FreeBSD has only 13 bits to encode the size. */
|
||||
+ printf("nvidia: pid %d (%s): ioctl cmd=0x%x size too large\n",
|
||||
+ (int)td->td_proc->p_pid, td->td_proc->p_comm, args->cmd);
|
||||
+ return (EINVAL);
|
||||
}
|
||||
-
|
||||
- cmd = args->cmd;
|
||||
-
|
||||
- status = fo_ioctl(fp, cmd, (caddr_t)args->arg, td->td_ucred, td);
|
||||
- fdrop(fp, td);
|
||||
-
|
||||
- return status;
|
||||
+ args->cmd = (args->cmd & ~IOC_DIRMASK) | dir[args->cmd >> 30];
|
||||
+ return (sys_ioctl(td, (struct ioctl_args *)args));
|
||||
}
|
||||
|
||||
#define NVKMS_LINUX_IOCTL_MIN _IOC(0, NVKMS_IOCTL_MAGIC, NVKMS_IOCTL_CMD, 0)
|
||||
@@ -909,6 +909,7 @@ static struct linux_ioctl_handler nvkms_linux_ioctl_ha
|
||||
static void nvkms_linux_compat_load(void)
|
||||
{
|
||||
#if defined(NVKMS_SUPPORT_LINUX_COMPAT)
|
||||
+ linux_device_register_handler(&nvkms_linux_device_handler);
|
||||
linux_ioctl_register_handler(&nvkms_linux_ioctl_handler);
|
||||
#endif
|
||||
}
|
||||
@@ -917,6 +918,7 @@ static void nvkms_linux_compat_unload(void)
|
||||
{
|
||||
#if defined(NVKMS_SUPPORT_LINUX_COMPAT)
|
||||
linux_ioctl_unregister_handler(&nvkms_linux_ioctl_handler);
|
||||
+ linux_device_unregister_handler(&nvkms_linux_device_handler);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1100,4 +1102,9 @@ MODULE_DEPEND(nvidia_modeset, /* module
|
||||
MODULE_DEPEND(nvidia_modeset, /* module name */
|
||||
linux, /* prerequisite module */
|
||||
1, 1, 1); /* vmin, vpref, vmax */
|
||||
+#if defined(NVCPU_X86_64)
|
||||
+MODULE_DEPEND(nvidia_modeset, /* module name */
|
||||
+ linux_common, /* prerequisite module */
|
||||
+ 1, 1, 1); /* vmin, vpref, vmax */
|
||||
+#endif
|
||||
#endif
|
||||
@@ -1,131 +0,0 @@
|
||||
--- src/nvidia-modeset/nvidia-modeset-freebsd.c.orig 2023-03-28 22:14:28 UTC
|
||||
+++ src/nvidia-modeset/nvidia-modeset-freebsd.c
|
||||
@@ -368,6 +368,7 @@ struct nvkms_timer_t {
|
||||
NvBool cancel;
|
||||
NvBool complete;
|
||||
NvBool isRefPtr;
|
||||
+ NvBool needsNvkmsLock;
|
||||
NvBool callout_created;
|
||||
nvkms_timer_proc_t *proc;
|
||||
void *dataPtr;
|
||||
@@ -406,7 +407,14 @@ static void nvkms_taskqueue_callback(void *arg, int pe
|
||||
callout_drain(&timer->callout);
|
||||
}
|
||||
|
||||
- sx_xlock(&nvkms_lock);
|
||||
+ /*
|
||||
+ * Only lock if this timer requests it. DRM's callback nv_drm_event_callback
|
||||
+ * will not need this, since it may reenter nvkms through the kapi and lock
|
||||
+ * nvkms_lock then.
|
||||
+ */
|
||||
+ if (timer->needsNvkmsLock) {
|
||||
+ sx_xlock(&nvkms_lock);
|
||||
+ }
|
||||
|
||||
if (timer->isRefPtr) {
|
||||
// If the object this timer refers to was destroyed, treat the timer as
|
||||
@@ -424,11 +432,13 @@ static void nvkms_taskqueue_callback(void *arg, int pe
|
||||
timer->complete = NV_TRUE;
|
||||
}
|
||||
|
||||
+ if (timer->needsNvkmsLock) {
|
||||
+ sx_xunlock(&nvkms_lock);
|
||||
+ }
|
||||
+
|
||||
if (timer->cancel || timer->isRefPtr) {
|
||||
nvkms_free(timer, sizeof(*timer));
|
||||
}
|
||||
-
|
||||
- sx_xunlock(&nvkms_lock);
|
||||
}
|
||||
|
||||
static void nvkms_callout_callback(void *arg)
|
||||
@@ -441,11 +451,13 @@ nvkms_init_timer(struct nvkms_timer_t *timer, nvkms_ti
|
||||
|
||||
static void
|
||||
nvkms_init_timer(struct nvkms_timer_t *timer, nvkms_timer_proc_t *proc,
|
||||
- void *dataPtr, NvU32 dataU32, NvBool isRefPtr, NvU64 usec)
|
||||
+ void *dataPtr, NvU32 dataU32, NvBool isRefPtr, NvU64 usec,
|
||||
+ NvBool needsNvkmsLock)
|
||||
{
|
||||
timer->cancel = NV_FALSE;
|
||||
timer->complete = NV_FALSE;
|
||||
timer->isRefPtr = isRefPtr;
|
||||
+ timer->needsNvkmsLock = needsNvkmsLock;
|
||||
|
||||
timer->proc = proc;
|
||||
timer->dataPtr = dataPtr;
|
||||
@@ -479,19 +491,27 @@ nvkms_init_timer(struct nvkms_timer_t *timer, nvkms_ti
|
||||
mtx_unlock_spin(&nvkms_timers.lock);
|
||||
}
|
||||
|
||||
-nvkms_timer_handle_t*
|
||||
-nvkms_alloc_timer(nvkms_timer_proc_t *proc,
|
||||
- void *dataPtr, NvU32 dataU32,
|
||||
- NvU64 usec)
|
||||
+static nvkms_timer_handle_t*
|
||||
+nvkms_alloc_timer_locked(nvkms_timer_proc_t *proc,
|
||||
+ void *dataPtr, NvU32 dataU32,
|
||||
+ NvU64 usec, NvBool needsNvkmsLock)
|
||||
{
|
||||
// nvkms_alloc_timer cannot be called from an interrupt context.
|
||||
struct nvkms_timer_t *timer = nvkms_alloc(sizeof(*timer), NV_TRUE);
|
||||
if (timer) {
|
||||
- nvkms_init_timer(timer, proc, dataPtr, dataU32, NV_FALSE, usec);
|
||||
+ nvkms_init_timer(timer, proc, dataPtr, dataU32, NV_FALSE, usec, needsNvkmsLock);
|
||||
}
|
||||
return timer;
|
||||
}
|
||||
|
||||
+nvkms_timer_handle_t*
|
||||
+nvkms_alloc_timer(nvkms_timer_proc_t *proc,
|
||||
+ void *dataPtr, NvU32 dataU32,
|
||||
+ NvU64 usec)
|
||||
+{
|
||||
+ return nvkms_alloc_timer_locked(proc, dataPtr, dataU32, usec, NV_TRUE);
|
||||
+}
|
||||
+
|
||||
NvBool
|
||||
nvkms_alloc_timer_with_ref_ptr(nvkms_timer_proc_t *proc,
|
||||
struct nvkms_ref_ptr *ref_ptr,
|
||||
@@ -506,7 +526,7 @@ nvkms_alloc_timer_with_ref_ptr(nvkms_timer_proc_t *pro
|
||||
// Reference the ref_ptr to make sure that it doesn't get freed before
|
||||
// the timer fires.
|
||||
nvkms_inc_ref(ref_ptr);
|
||||
- nvkms_init_timer(timer, proc, ref_ptr, dataU32, NV_TRUE, usec);
|
||||
+ nvkms_init_timer(timer, proc, ref_ptr, dataU32, NV_TRUE, usec, NV_TRUE);
|
||||
}
|
||||
|
||||
return timer != NULL;
|
||||
@@ -570,10 +590,11 @@ nvkms_event_queue_changed(nvkms_per_open_handle_t *pOp
|
||||
break;
|
||||
case NVKMS_CLIENT_KERNEL_SPACE:
|
||||
if (!popen->kernel.task) {
|
||||
- popen->kernel.task = nvkms_alloc_timer(nvkms_kapi_task_callback,
|
||||
- popen,
|
||||
- 0, /* dataU32 */
|
||||
- 0 /* callout delay */);
|
||||
+ popen->kernel.task = nvkms_alloc_timer_locked(nvkms_kapi_task_callback,
|
||||
+ popen,
|
||||
+ 0, /* dataU32 */
|
||||
+ 0, /* callout delay */
|
||||
+ NV_FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -828,10 +849,11 @@ static struct nvkms_per_open *nvkms_open_common(enum N
|
||||
case NVKMS_CLIENT_KERNEL_SPACE:
|
||||
/* enqueue our new task */
|
||||
popen->kernel.device = device;
|
||||
- popen->kernel.task = nvkms_alloc_timer(nvkms_kapi_task_callback,
|
||||
- popen,
|
||||
- 0, /* dataU32 */
|
||||
- 0 /* callout delay */);
|
||||
+ popen->kernel.task = nvkms_alloc_timer_locked(nvkms_kapi_task_callback,
|
||||
+ popen,
|
||||
+ 0, /* dataU32 */
|
||||
+ 0, /* callout delay */
|
||||
+ NV_FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- x11/driver/Makefile.orig 2013-08-16 10:53:30.000000000 +0200
|
||||
+++ x11/driver/Makefile 2014-01-27 18:25:14.000000000 +0100
|
||||
@@ -5,7 +5,7 @@
|
||||
.endif
|
||||
|
||||
DRIVERS= nvidia_drv.o nvidia_drv.so
|
||||
-.if exists(${LOCALBASE}/lib/xorg/modules/drivers)
|
||||
+.if exists(${DESTDIR}${LOCALBASE}/lib/xorg/modules/drivers)
|
||||
DRIVERDIR= ${LOCALBASE}/lib/xorg/modules/drivers
|
||||
.else
|
||||
DRIVERDIR= ${LOCALBASE}/lib/modules/drivers
|
||||
@@ -1,16 +0,0 @@
|
||||
# libmap.conf file for nvidia provide libraries
|
||||
|
||||
libGL.so libGL-NVIDIA.so
|
||||
libGL.so.1 libGL-NVIDIA.so.1
|
||||
|
||||
%%PREFIX%%/lib/xorg/modules/extensions/libglx.so %%PREFIX%%/lib/xorg/modules/extensions/.nvidia/libglx.so
|
||||
|
||||
%%NVGL%%libEGL.so libEGL-NVIDIA.so
|
||||
%%NVGL%%libEGL.so.1 libEGL-NVIDIA.so.1
|
||||
|
||||
%%NVGL%%libGLESv1_CM.so libGLESv1_CM_nvidia.so
|
||||
%%NVGL%%libGLESv1_CM.so.1 libGLESv1_CM_nvidia.so.1
|
||||
|
||||
%%NVGL%%libGLESv2.so libGLESv2-NVIDIA.so
|
||||
%%NVGL%%libGLESv2.so.2 libGLESv2-NVIDIA.so.2
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
--- mk/nvidia.lib.mk.orig 2013-08-16 10:53:30.000000000 +0200
|
||||
+++ mk/nvidia.lib.mk 2014-01-27 16:55:39.000000000 +0100
|
||||
@@ -46,8 +46,8 @@
|
||||
.endif
|
||||
.endif
|
||||
.if defined(AUXLINK_TGT)
|
||||
- @rm -f ${AUXLINK_LINK}
|
||||
- @ln -fs ${AUXLINK_TGT} ${AUXLINK_LINK}
|
||||
+ @rm -f ${DESTDIR}${AUXLINK_LINK}
|
||||
+ @ln -fs ${AUXLINK_TGT} ${DESTDIR}${AUXLINK_LINK}
|
||||
.endif
|
||||
.if defined(STATICLIB_NAME)
|
||||
@rm -f ${DESTDIR}${LIBDIR}/${STATICLIB_NAME}
|
||||
@@ -1,47 +0,0 @@
|
||||
[
|
||||
{ type: install
|
||||
message: <<EOM
|
||||
To use these drivers, make sure that you have loaded the NVidia kernel
|
||||
module, by running
|
||||
|
||||
# kldload %%KLDNAME%%
|
||||
|
||||
on the command line, or by putting ``%%KLDNAME%%'' on the ``kld_list''
|
||||
variable in /etc/rc.conf, either manually or by running
|
||||
|
||||
# sysrc kld_list+=%%KLDNAME%%
|
||||
|
||||
If you build this port with FreeBSD AGP GART driver, make sure you have
|
||||
agp.ko kernel module installed and loaded, since nvidia.ko will depend
|
||||
on it, or have your kernel compiled with "device agp". Otherwise, the
|
||||
NVidia kernel module will not load. Also, please set correct value for
|
||||
``Option "NvAGP"'' in ``Device'' section of your X11 configuration file.
|
||||
|
||||
When building with Linux compatibility support, make sure that linux.ko
|
||||
module is available as well (or have it compiled in kernel). It can be
|
||||
loaded via /boot/loader.conf, or later in the boot process if you add
|
||||
|
||||
linux_enable="YES"
|
||||
|
||||
to your /etc/rc.conf.
|
||||
|
||||
If X.org cannot start and reports
|
||||
|
||||
(EE) NVIDIA(0): Failed to obtain a shared memory identifier.
|
||||
|
||||
in /var/log/Xorg.0.log while actually you have ``options SYSVSHM''
|
||||
enabled in kernel, the sysctl ``kern.ipc.shmall'' should be increased.
|
||||
|
||||
Because in certain 570 versions GSP firmware is known to cause issues
|
||||
with suspend/resume, thus, disabled by default for now.
|
||||
On the other hand, some GPUs are known NOT to work without GSP
|
||||
firmware support.
|
||||
To enable GSP firmware add hw.nvidia.registry.EnableGpuFirmware=1
|
||||
to your loader.conf.
|
||||
|
||||
https://download.nvidia.com/XFree86/FreeBSD-x86_64/560.31.02/README/gsp.html
|
||||
|
||||
See %%DOCSDIR%%/README for more information.
|
||||
EOM
|
||||
}
|
||||
]
|
||||
@@ -1,2 +0,0 @@
|
||||
These are the official NVidia binary drivers for hardware OpenGL rendering
|
||||
in X11, using the GLX extensions.
|
||||
@@ -1,106 +0,0 @@
|
||||
bin/nvidia-bug-report.sh
|
||||
bin/nvidia-debugdump
|
||||
bin/nvidia-smi
|
||||
etc/libmap.d/nvidia.conf
|
||||
lib/libEGL-NVIDIA.so
|
||||
lib/libEGL-NVIDIA.so.1
|
||||
lib/libEGL_nvidia.so
|
||||
lib/libEGL_nvidia.so.0
|
||||
lib/libGL-NVIDIA.so
|
||||
lib/libGL-NVIDIA.so.1
|
||||
lib/libGLESv1_CM_nvidia.so
|
||||
lib/libGLESv1_CM_nvidia.so.1
|
||||
lib/libGLESv2-NVIDIA.so
|
||||
lib/libGLESv2-NVIDIA.so.2
|
||||
lib/libGLESv2_nvidia.so
|
||||
lib/libGLESv2_nvidia.so.2
|
||||
@comment lib/libGLX_indirect.so.0
|
||||
lib/libGLX_nvidia.so
|
||||
lib/libGLX_nvidia.so.0
|
||||
lib/libGLdispatch.so
|
||||
lib/libGLdispatch.so.0
|
||||
lib/libOpenGL.so
|
||||
lib/libOpenGL.so.0
|
||||
lib/libXvMCNVIDIA.a
|
||||
lib/libXvMCNVIDIA.so
|
||||
lib/libXvMCNVIDIA.so.1
|
||||
lib/libXvMCNVIDIA_dynamic.so.1
|
||||
lib/libnvidia-cfg.so
|
||||
lib/libnvidia-cfg.so.1
|
||||
lib/libnvidia-egl-gbm.so
|
||||
lib/libnvidia-egl-gbm.so.1
|
||||
@comment lib/libnvidia-egl-wayland.so
|
||||
@comment lib/libnvidia-egl-wayland.so.1
|
||||
lib/libnvidia-allocator.so
|
||||
lib/libnvidia-allocator.so.1
|
||||
lib/gbm/nvidia-drm_gbm.so
|
||||
lib/libnvidia-eglcore.so
|
||||
lib/libnvidia-eglcore.so.1
|
||||
lib/libnvidia-glcore.so
|
||||
lib/libnvidia-glcore.so.1
|
||||
lib/libnvidia-glsi.so
|
||||
lib/libnvidia-glsi.so.1
|
||||
lib/libnvidia-glvkspirv.so
|
||||
lib/libnvidia-glvkspirv.so.1
|
||||
lib/libnvidia-gpucomp.so
|
||||
lib/libnvidia-gpucomp.so.1
|
||||
lib/libnvidia-ml.so
|
||||
lib/libnvidia-ml.so.1
|
||||
lib/libnvidia-tls.so
|
||||
lib/libnvidia-tls.so.1
|
||||
lib/libnvidia-vulkan-producer.so
|
||||
lib/libnvidia-vulkan-producer.so.1
|
||||
lib/libvdpau_nvidia.so
|
||||
lib/vdpau/libvdpau_nvidia.so.1
|
||||
lib32/libEGL.so
|
||||
lib32/libEGL.so.1
|
||||
lib32/libEGL_nvidia.so
|
||||
lib32/libEGL_nvidia.so.0
|
||||
lib32/libGL.so
|
||||
lib32/libGL.so.1
|
||||
lib32/libGLESv1_CM.so
|
||||
lib32/libGLESv1_CM.so.1
|
||||
lib32/libGLESv1_CM_nvidia.so
|
||||
lib32/libGLESv1_CM_nvidia.so.1
|
||||
lib32/libGLESv2.so
|
||||
lib32/libGLESv2.so.2
|
||||
lib32/libGLESv2_nvidia.so
|
||||
lib32/libGLESv2_nvidia.so.2
|
||||
lib32/libGLX.so
|
||||
lib32/libGLX.so.0
|
||||
lib32/libGLX_nvidia.so
|
||||
lib32/libGLX_nvidia.so.0
|
||||
lib32/libGLdispatch.so
|
||||
lib32/libGLdispatch.so.0
|
||||
lib32/libOpenGL.so
|
||||
lib32/libOpenGL.so.0
|
||||
lib32/libnvidia-cfg.so
|
||||
lib32/libnvidia-cfg.so.1
|
||||
lib32/libnvidia-eglcore.so
|
||||
lib32/libnvidia-eglcore.so.1
|
||||
lib32/libnvidia-glcore.so
|
||||
lib32/libnvidia-glcore.so.1
|
||||
lib32/libnvidia-glsi.so
|
||||
lib32/libnvidia-glsi.so.1
|
||||
lib32/libnvidia-glvkspirv.so
|
||||
lib32/libnvidia-glvkspirv.so.1
|
||||
lib32/libnvidia-gpucomp.so
|
||||
lib32/libnvidia-gpucomp.so.1
|
||||
lib32/libnvidia-tls.so
|
||||
lib32/libnvidia-tls.so.1
|
||||
lib32/vdpau/libvdpau_nvidia.so.1
|
||||
@comment share/egl/egl_external_platform.d/10_nvidia_wayland.json
|
||||
share/egl/egl_external_platform.d/15_nvidia_gbm.json
|
||||
share/glvnd/egl_vendor.d/10_nvidia.json
|
||||
share/man/man1/nvidia-smi.1.gz
|
||||
share/vulkan/icd.d/nvidia_icd.json
|
||||
share/vulkan/implicit_layer.d/nvidia_layers.json
|
||||
%%MODULESDIR%%/drivers/nvidia_drv.so
|
||||
%%EXTENSIONSDIR%%/libglx.so
|
||||
%%EXTENSIONSDIR%%/libglx.so.1
|
||||
%%MODULESDIR%%/extensions/libglxserver_nvidia.so
|
||||
%%MODULESDIR%%/extensions/libglxserver_nvidia.so.1
|
||||
/%%KMODDIR%%/nvidia.ko
|
||||
/%%KMODDIR%%/nvidia-modeset.ko
|
||||
/%%KMODDIR%%/nvidia_gsp_ga10x_fw.ko
|
||||
/%%KMODDIR%%/nvidia_gsp_tu10x_fw.ko
|
||||
Reference in New Issue
Block a user