From e2cc31f3c14e982a72ba92145a91a5ab1d63b43e Mon Sep 17 00:00:00 2001 From: Hyper-KVM Date: Thu, 2 Apr 2020 17:09:45 -0400 Subject: [PATCH] New package: nvidia-vulkan-440.66.08 --- common/shlibs | 7 + srcpkgs/nvidia-dkms-vulkan | 1 + srcpkgs/nvidia-gtklibs-vulkan | 1 + srcpkgs/nvidia-libs-32bit-vulkan | 1 + srcpkgs/nvidia-libs-vulkan | 1 + srcpkgs/nvidia-opencl-vulkan | 1 + srcpkgs/nvidia-vulkan/files/dkms.conf | 19 + srcpkgs/nvidia-vulkan/files/linux5.6.patch | 504 ++++++++++++++++++ .../files/nvidia-drm-outputclass.conf | 18 + .../nvidia-vulkan/nvidia-dkms-vulkan.INSTALL | 13 + .../nvidia-vulkan/nvidia-dkms-vulkan.REMOVE | 9 + srcpkgs/nvidia-vulkan/template | 275 ++++++++++ srcpkgs/nvidia-vulkan/update | 2 + 13 files changed, 852 insertions(+) create mode 120000 srcpkgs/nvidia-dkms-vulkan create mode 120000 srcpkgs/nvidia-gtklibs-vulkan create mode 120000 srcpkgs/nvidia-libs-32bit-vulkan create mode 120000 srcpkgs/nvidia-libs-vulkan create mode 120000 srcpkgs/nvidia-opencl-vulkan create mode 100644 srcpkgs/nvidia-vulkan/files/dkms.conf create mode 100644 srcpkgs/nvidia-vulkan/files/linux5.6.patch create mode 100644 srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf create mode 100644 srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL create mode 100644 srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE create mode 100644 srcpkgs/nvidia-vulkan/template create mode 100644 srcpkgs/nvidia-vulkan/update diff --git a/common/shlibs b/common/shlibs index dbb31233ee0..37936dc2dc1 100644 --- a/common/shlibs +++ b/common/shlibs @@ -150,6 +150,13 @@ libnvidia-glsi.so.346.72 nvidia-libs-346.72_1 ignore libnvidia-glsi.so.340.107 nvidia340-libs-340.107_7 ignore libnvidia-fatbinaryloader.so.390.132 nvidia390-libs-390.132_1 ignore libnvidia-fatbinaryloader.so.430.40 nvidia-libs-430.40_1 ignore +libnvidia-ml.so.1 nvidia-libs-vulkan-440.66.08_1 ignore +libnvidia-tls.so.346.47 nvidia-libs-vulkan-440.66.08_1 ignore +libnvidia-glcore.so.346.47 nvidia-libs-vulkan-440.66.08_1 ignore +libnvidia-gtk2.so.346.47 nvidia-gtklibs-vulkan-440.66.08_1 ignore +libnvidia-gtk3.so.346.47 nvidia-gtklibs-vulkan-440.66.08_1 ignore +libnvidia-glsi.so.346.72 nvidia-libs-vulkan-440.66.08_1 ignore +libnvidia-fatbinaryloader.so.430.40 nvidia-libs-vulkan-440.66.08_1 ignore libglapi.so.0 libglapi-7.11_1 libgbm.so.1 libgbm-9.0_1 libOpenGL.so.0 libglvnd-1.3.0_1 diff --git a/srcpkgs/nvidia-dkms-vulkan b/srcpkgs/nvidia-dkms-vulkan new file mode 120000 index 00000000000..ec3ca44c3a6 --- /dev/null +++ b/srcpkgs/nvidia-dkms-vulkan @@ -0,0 +1 @@ +nvidia-vulkan \ No newline at end of file diff --git a/srcpkgs/nvidia-gtklibs-vulkan b/srcpkgs/nvidia-gtklibs-vulkan new file mode 120000 index 00000000000..ec3ca44c3a6 --- /dev/null +++ b/srcpkgs/nvidia-gtklibs-vulkan @@ -0,0 +1 @@ +nvidia-vulkan \ No newline at end of file diff --git a/srcpkgs/nvidia-libs-32bit-vulkan b/srcpkgs/nvidia-libs-32bit-vulkan new file mode 120000 index 00000000000..ec3ca44c3a6 --- /dev/null +++ b/srcpkgs/nvidia-libs-32bit-vulkan @@ -0,0 +1 @@ +nvidia-vulkan \ No newline at end of file diff --git a/srcpkgs/nvidia-libs-vulkan b/srcpkgs/nvidia-libs-vulkan new file mode 120000 index 00000000000..ec3ca44c3a6 --- /dev/null +++ b/srcpkgs/nvidia-libs-vulkan @@ -0,0 +1 @@ +nvidia-vulkan \ No newline at end of file diff --git a/srcpkgs/nvidia-opencl-vulkan b/srcpkgs/nvidia-opencl-vulkan new file mode 120000 index 00000000000..ec3ca44c3a6 --- /dev/null +++ b/srcpkgs/nvidia-opencl-vulkan @@ -0,0 +1 @@ +nvidia-vulkan \ No newline at end of file diff --git a/srcpkgs/nvidia-vulkan/files/dkms.conf b/srcpkgs/nvidia-vulkan/files/dkms.conf new file mode 100644 index 00000000000..bbd9f6ae194 --- /dev/null +++ b/srcpkgs/nvidia-vulkan/files/dkms.conf @@ -0,0 +1,19 @@ +PACKAGE_NAME="nvidia-dev" +PACKAGE_VERSION="__PKGVER" +AUTOINSTALL="yes" + +# By default, DKMS will add KERNELRELEASE to the make command line; however, +# this will cause the kernel module build to infer that it was invoked via +# Kbuild directly instead of DKMS. The dkms(8) manual page recommends quoting +# the 'make' command name to suppress this behavior. +MAKE[0]="'make' __MAKEJOBS NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=${kernelver} modules" + +# The list of kernel modules was generated by nvidia-installer at runtime. +BUILT_MODULE_NAME[0]="nvidia" +DEST_MODULE_LOCATION[0]="/kernel/drivers/video" +BUILT_MODULE_NAME[1]="nvidia-uvm" +DEST_MODULE_LOCATION[1]="/kernel/drivers/video" +BUILT_MODULE_NAME[2]="nvidia-modeset" +DEST_MODULE_LOCATION[2]="/kernel/drivers/video" +BUILT_MODULE_NAME[3]="nvidia-drm" +DEST_MODULE_LOCATION[3]="/kernel/drivers/video" diff --git a/srcpkgs/nvidia-vulkan/files/linux5.6.patch b/srcpkgs/nvidia-vulkan/files/linux5.6.patch new file mode 100644 index 00000000000..6b0764a3ee1 --- /dev/null +++ b/srcpkgs/nvidia-vulkan/files/linux5.6.patch @@ -0,0 +1,504 @@ +diff --git a/kernel/common/inc/nv-procfs.h b/kernel/common/inc/nv-procfs.h +index 8b53f86..4c5aceb 100644 +--- a/kernel/common/inc/nv-procfs.h ++++ b/kernel/common/inc/nv-procfs.h +@@ -28,6 +28,18 @@ + + #define IS_EXERCISE_ERROR_FORWARDING_ENABLED() (EXERCISE_ERROR_FORWARDING) + ++#if defined(NV_HAVE_PROC_OPS) ++#define NV_CREATE_PROC_FILE(filename,parent,__name,__data) \ ++ ({ \ ++ struct proc_dir_entry *__entry; \ ++ int mode = (S_IFREG | S_IRUGO); \ ++ const struct proc_ops *fops = &nv_procfs_##__name##_fops; \ ++ if (fops->proc_write != 0) \ ++ mode |= S_IWUSR; \ ++ __entry = proc_create_data(filename, mode, parent, fops, __data);\ ++ __entry; \ ++ }) ++#else + #define NV_CREATE_PROC_FILE(filename,parent,__name,__data) \ + ({ \ + struct proc_dir_entry *__entry; \ +@@ -38,6 +50,7 @@ + __entry = proc_create_data(filename, mode, parent, fops, __data);\ + __entry; \ + }) ++#endif + + /* + * proc_mkdir_mode exists in Linux 2.6.9, but isn't exported until Linux 3.0. +@@ -77,6 +90,44 @@ + remove_proc_entry(entry->name, entry->parent); + #endif + ++#if defined(NV_HAVE_PROC_OPS) ++#define NV_DEFINE_SINGLE_PROCFS_FILE(name, open_callback, close_callback) \ ++ static int nv_procfs_open_##name( \ ++ struct inode *inode, \ ++ struct file *filep \ ++ ) \ ++ { \ ++ int ret; \ ++ ret = single_open(filep, nv_procfs_read_##name, \ ++ NV_PDE_DATA(inode)); \ ++ if (ret < 0) \ ++ { \ ++ return ret; \ ++ } \ ++ ret = open_callback(); \ ++ if (ret < 0) \ ++ { \ ++ single_release(inode, filep); \ ++ } \ ++ return ret; \ ++ } \ ++ \ ++ static int nv_procfs_release_##name( \ ++ struct inode *inode, \ ++ struct file *filep \ ++ ) \ ++ { \ ++ close_callback(); \ ++ return singe_release(inode, filep); \ ++ } \ ++ \ ++ static const struct proc_ops nv_procfs_##name##_fops = { \ ++ .proc_open = nv_procfs_open_##name, \ ++ .proc_read = seq_read, \ ++ .proc_lseek = seq_lseek, \ ++ .proc_release = nv_procfs_release_##name, \ ++ }; ++#else + #define NV_DEFINE_SINGLE_PROCFS_FILE(name, open_callback, close_callback) \ + static int nv_procfs_open_##name( \ + struct inode *inode, \ +@@ -114,6 +165,7 @@ + .llseek = seq_lseek, \ + .release = nv_procfs_release_##name, \ + }; ++#endif + + #endif /* CONFIG_PROC_FS */ + +diff --git a/kernel/common/inc/nv-time.h b/kernel/common/inc/nv-time.h +index 968b873..f03c7b0 100644 +--- a/kernel/common/inc/nv-time.h ++++ b/kernel/common/inc/nv-time.h +@@ -27,7 +27,12 @@ + + #include + +-static inline void nv_gettimeofday(struct timeval *tv) ++struct nv_timeval { ++ __kernel_long_t tv_sec; ++ __kernel_suseconds_t tv_usec; ++}; ++ ++static inline void nv_gettimeofday(struct nv_timeval *tv) + { + #ifdef NV_DO_GETTIMEOFDAY_PRESENT + do_gettimeofday(tv); +@@ -36,7 +41,7 @@ static inline void nv_gettimeofday(struct timeval *tv) + + ktime_get_real_ts64(&now); + +- *tv = (struct timeval) { ++ *tv = (struct nv_timeval) { + .tv_sec = now.tv_sec, + .tv_usec = now.tv_nsec/1000, + }; +diff --git a/kernel/conftest.sh b/kernel/conftest.sh +index 57d85a4..4eb703f 100755 +--- a/kernel/conftest.sh ++++ b/kernel/conftest.sh +@@ -806,6 +806,46 @@ compile_test() { + compile_check_conftest "$CODE" "NV_FILE_OPERATIONS_HAS_IOCTL" "" "types" + ;; + ++ proc_ops) ++ CODE=" ++ #include ++ int conftest_proc_ops(void) { ++ return offsetof(struct proc_ops, proc_open); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_HAVE_PROC_OPS" "" "types" ++ ;; ++ ++ ktime_get_raw_ts64) ++ # ++ # Determine if the ktime_get_raw_ts64() function is present. ++ # ++ CODE=" ++ #include ++ int conftest_ktime_get_raw_ts64(void) { ++ struct timespec64 ts = {0}; ++ ++ ktime_get_raw_ts64(&ts64); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_KTIME_GET_RAW_TS64_PRESENT" "" "functions" ++ ;; ++ ++ ktime_get_real_ts64) ++ # ++ # Determine if the ktime_get_real_ts64() function is present. ++ # ++ CODE=" ++ #include ++ int conftest_ktime_get_raw_ts64(void) { ++ struct timespec64 ts = {0}; ++ ++ ktime_get_real_ts64(&ts64); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_KTIME_GET_REAL_TS64_PRESENT" "" "functions" ++ ;; ++ + sg_alloc_table) + # + # sg_alloc_table_from_pages added by commit efc42bc98058 +diff --git a/kernel/nvidia-modeset/nvidia-modeset-linux.c b/kernel/nvidia-modeset/nvidia-modeset-linux.c +index 0ca2c7d..8902143 100644 +--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c ++++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c +@@ -266,7 +266,7 @@ void NVKMS_API_CALL nvkms_usleep(NvU64 usec) + + NvU64 NVKMS_API_CALL nvkms_get_usec(void) + { +- struct timeval tv; ++ struct nv_timeval tv; + + nv_gettimeofday(&tv); + +diff --git a/kernel/nvidia-uvm/uvm_linux.h b/kernel/nvidia-uvm/uvm_linux.h +index 30a9dea..1a20eff 100644 +--- a/kernel/nvidia-uvm/uvm_linux.h ++++ b/kernel/nvidia-uvm/uvm_linux.h +@@ -301,7 +301,16 @@ static inline uint64_t NV_DIV64(uint64_t dividend, uint64_t divisor, uint64_t *r + } + #endif + +-#if defined(CLOCK_MONOTONIC_RAW) ++#if defined(NV_KTIME_GET_RAW_TS64_PRESENT) ++static inline NvU64 NV_GETTIME(void) ++{ ++ struct timespec64 ts; ++ ++ ktime_get_raw_ts64(&ts); ++ ++ return (ts.tv_sec * 1000000000ULL + ts.tv_nsec); ++} ++#elif defined(CLOCK_MONOTONIC_RAW) + /* Return a nanosecond-precise value */ + static inline NvU64 NV_GETTIME(void) + { +@@ -317,7 +326,7 @@ static inline NvU64 NV_GETTIME(void) + * available non-GPL symbols. */ + static inline NvU64 NV_GETTIME(void) + { +- struct timeval tv = {0}; ++ struct nv_timeval tv = {0}; + + nv_gettimeofday(&tv); + +diff --git a/kernel/nvidia/linux_nvswitch.c b/kernel/nvidia/linux_nvswitch.c +index 1d2c1bc..0a0b4e8 100644 +--- a/kernel/nvidia/linux_nvswitch.c ++++ b/kernel/nvidia/linux_nvswitch.c +@@ -1578,10 +1578,17 @@ nvswitch_os_get_platform_time + void + ) + { ++#if defined(NV_KTIME_GET_REAL_TS64_PRESENT) ++ struct timespec64 ts64; ++ ++ ktime_get_real_ts64(&ts64); ++ return ((NvU64)(ts64.tv_sec * NSEC_PER_SEC) + ts64.tv_nsec); ++#else + struct timespec ts; + + getnstimeofday(&ts); + return ((NvU64) timespec_to_ns(&ts)); ++#endif + } + + void +diff --git a/kernel/nvidia/nv-procfs.c b/kernel/nvidia/nv-procfs.c +index 064d727..a7308d3 100644 +--- a/kernel/nvidia/nv-procfs.c ++++ b/kernel/nvidia/nv-procfs.c +@@ -452,6 +452,15 @@ done: + return ((status < 0) ? status : (int)count); + } + ++#if defined(NV_HAVE_PROC_OPS) ++static struct proc_ops nv_procfs_registry_fops = { ++ .proc_open = nv_procfs_open_registry, ++ .proc_read = seq_read, ++ .proc_write = nv_procfs_write_file, ++ .proc_lseek = seq_lseek, ++ .proc_release = nv_procfs_close_registry, ++}; ++#else + static struct file_operations nv_procfs_registry_fops = { + .owner = THIS_MODULE, + .open = nv_procfs_open_registry, +@@ -460,6 +469,7 @@ static struct file_operations nv_procfs_registry_fops = { + .llseek = seq_lseek, + .release = nv_procfs_close_registry, + }; ++#endif + + #if defined(CONFIG_PM) + static int +@@ -531,6 +541,15 @@ nv_procfs_open_suspend_depth( + return single_open(file, nv_procfs_show_suspend_depth, NULL); + } + ++#if defined(NV_HAVE_PROC_OPS) ++static struct proc_ops nv_procfs_suspend_depth_fops = { ++ .proc_open = nv_procfs_open_suspend_depth, ++ .proc_read = seq_read, ++ .proc_write = nv_procfs_write_suspend_depth, ++ .proc_lseek = seq_lseek, ++ .proc_release = single_release ++}; ++#else + static struct file_operations nv_procfs_suspend_depth_fops = { + .owner = THIS_MODULE, + .open = nv_procfs_open_suspend_depth, +@@ -539,6 +558,7 @@ static struct file_operations nv_procfs_suspend_depth_fops = { + .llseek = seq_lseek, + .release = single_release + }; ++#endif + + static int + nv_procfs_show_suspend( +@@ -613,6 +633,15 @@ nv_procfs_open_suspend( + return single_open(file, nv_procfs_show_suspend, NULL); + } + ++#if defined(NV_HAVE_PROC_OPS) ++static struct proc_ops nv_procfs_suspend_fops = { ++ .proc_open = nv_procfs_open_suspend, ++ .proc_read = seq_read, ++ .proc_write = nv_procfs_write_suspend, ++ .proc_lseek = seq_lseek, ++ .proc_release = single_release ++}; ++#else + static struct file_operations nv_procfs_suspend_fops = { + .owner = THIS_MODULE, + .open = nv_procfs_open_suspend, +@@ -622,6 +651,7 @@ static struct file_operations nv_procfs_suspend_fops = { + .release = single_release + }; + #endif ++#endif + + /* + * Forwards error to nv_log_error which exposes data to vendor callback +@@ -724,12 +754,20 @@ done: + return status; + } + ++#if defined(NV_HAVE_PROC_OPS) ++static struct proc_ops nv_procfs_exercise_error_forwarding_fops = { ++ .proc_open = nv_procfs_open_exercise_error_forwarding, ++ .proc_write = nv_procfs_write_file, ++ .proc_release = nv_procfs_close_exercise_error_forwarding, ++}; ++#else + static struct file_operations nv_procfs_exercise_error_forwarding_fops = { + .owner = THIS_MODULE, + .open = nv_procfs_open_exercise_error_forwarding, + .write = nv_procfs_write_file, + .release = nv_procfs_close_exercise_error_forwarding, + }; ++#endif + + static int + nv_procfs_read_unbind_lock( +@@ -851,6 +889,15 @@ done: + return rc; + } + ++#if defined(NV_HAVE_PROC_OPS) ++static struct proc_ops nv_procfs_unbind_lock_fops = { ++ .proc_open = nv_procfs_open_unbind_lock, ++ .proc_read = seq_read, ++ .proc_write = nv_procfs_write_file, ++ .proc_lseek = seq_lseek, ++ .proc_release = nv_procfs_close_unbind_lock, ++}; ++#else + static struct file_operations nv_procfs_unbind_lock_fops = { + .owner = THIS_MODULE, + .open = nv_procfs_open_unbind_lock, +@@ -859,6 +906,7 @@ static struct file_operations nv_procfs_unbind_lock_fops = { + .llseek = seq_lseek, + .release = nv_procfs_close_unbind_lock, + }; ++#endif + + static const char* + numa_status_describe(nv_numa_status_t state) +@@ -1187,6 +1235,22 @@ done: + return retval; + } + ++#if defined(NV_HAVE_PROC_OPS) ++static const struct proc_ops nv_procfs_numa_status_fops = { ++ .proc_open = nv_procfs_open_numa_status, ++ .proc_read = seq_read, ++ .proc_write = nv_procfs_write_file, ++ .proc_lseek = seq_lseek, ++ .proc_release = nv_procfs_close_numa_status, ++}; ++ ++static const struct proc_ops nv_procfs_offline_pages_fops = { ++ .proc_open = nv_procfs_open_offline_pages, ++ .proc_read = seq_read, ++ .proc_lseek = seq_lseek, ++ .proc_release = nv_procfs_close_offline_pages, ++}; ++#else + static const struct file_operations nv_procfs_numa_status_fops = { + .owner = THIS_MODULE, + .open = nv_procfs_open_numa_status, +@@ -1203,6 +1267,7 @@ static const struct file_operations nv_procfs_offline_pages_fops = { + .llseek = seq_lseek, + .release = nv_procfs_close_offline_pages, + }; ++#endif + + static int + nv_procfs_read_text_file( +diff --git a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild +index 5ec3e65..339a757 100644 +--- a/kernel/nvidia/nvidia.Kbuild ++++ b/kernel/nvidia/nvidia.Kbuild +@@ -150,6 +150,9 @@ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_swiotlb_dma_ops + NV_CONFTEST_TYPE_COMPILE_TESTS += acpi_op_remove + NV_CONFTEST_TYPE_COMPILE_TESTS += outer_flush_all + NV_CONFTEST_TYPE_COMPILE_TESTS += file_operations ++NV_CONFTEST_TYPE_COMPILE_TESTS += proc_ops ++NV_CONFTEST_TYPE_COMPILE_TESTS += ktime_get_raw_ts64 ++NV_CONFTEST_TYPE_COMPILE_TESTS += ktime_get_real_ts64 + NV_CONFTEST_TYPE_COMPILE_TESTS += file_inode + NV_CONFTEST_TYPE_COMPILE_TESTS += kuid_t + NV_CONFTEST_TYPE_COMPILE_TESTS += dma_ops +diff --git a/kernel/nvidia/nvlink_linux.c b/kernel/nvidia/nvlink_linux.c +index c84b36a..54fe244 100644 +--- a/kernel/nvidia/nvlink_linux.c ++++ b/kernel/nvidia/nvlink_linux.c +@@ -513,8 +513,8 @@ int NVLINK_API_CALL nvlink_memcmp(const void *s1, const void *s2, NvLength size) + + static NvBool nv_timer_less_than + ( +- const struct timeval *a, +- const struct timeval *b ++ const struct nv_timeval *a, ++ const struct nv_timeval *b + ) + { + return (a->tv_sec == b->tv_sec) ? (a->tv_usec < b->tv_usec) +@@ -523,9 +523,9 @@ static NvBool nv_timer_less_than + + static void nv_timeradd + ( +- const struct timeval *a, +- const struct timeval *b, +- struct timeval *result ++ const struct nv_timeval *a, ++ const struct nv_timeval *b, ++ struct nv_timeval *result + ) + { + result->tv_sec = a->tv_sec + b->tv_sec; +@@ -539,9 +539,9 @@ static void nv_timeradd + + static void nv_timersub + ( +- const struct timeval *a, +- const struct timeval *b, +- struct timeval *result ++ const struct nv_timeval *a, ++ const struct nv_timeval *b, ++ struct nv_timeval *result + ) + { + result->tv_sec = a->tv_sec - b->tv_sec; +@@ -561,7 +561,7 @@ void NVLINK_API_CALL nvlink_sleep(unsigned int ms) + unsigned long us; + unsigned long jiffies; + unsigned long mdelay_safe_msec; +- struct timeval tm_end, tm_aux; ++ struct nv_timeval tm_end, tm_aux; + + nv_gettimeofday(&tm_aux); + +diff --git a/kernel/nvidia/os-interface.c b/kernel/nvidia/os-interface.c +index 07f1b77..239be58 100644 +--- a/kernel/nvidia/os-interface.c ++++ b/kernel/nvidia/os-interface.c +@@ -463,7 +463,7 @@ NV_STATUS NV_API_CALL os_get_current_time( + NvU32 *useconds + ) + { +- struct timeval tm; ++ struct nv_timeval tm; + + nv_gettimeofday(&tm); + +@@ -477,9 +477,15 @@ NV_STATUS NV_API_CALL os_get_current_time( + + void NV_API_CALL os_get_current_tick(NvU64 *nseconds) + { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) ++ struct timespec64 ts; ++ ++ jiffies_to_timespec64(jiffies, &ts); ++#else + struct timespec ts; + + jiffies_to_timespec(jiffies, &ts); ++#endif + + *nseconds = ((NvU64)ts.tv_sec * NSEC_PER_SEC + (NvU64)ts.tv_nsec); + } +@@ -549,7 +555,7 @@ NV_STATUS NV_API_CALL os_delay_us(NvU32 MicroSeconds) + unsigned long usec; + + #ifdef NV_CHECK_DELAY_ACCURACY +- struct timeval tm1, tm2; ++ struct nv_timeval tm1, tm2; + + nv_gettimeofday(&tm1); + #endif +@@ -589,9 +595,9 @@ NV_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + unsigned long MicroSeconds; + unsigned long jiffies; + unsigned long mdelay_safe_msec; +- struct timeval tm_end, tm_aux; ++ struct nv_timeval tm_end, tm_aux; + #ifdef NV_CHECK_DELAY_ACCURACY +- struct timeval tm_start; ++ struct nv_timeval tm_start; + #endif + + nv_gettimeofday(&tm_aux); +@@ -1954,7 +1960,7 @@ static NV_STATUS NV_API_CALL _os_ipmi_receive_resp + { + struct ipmi_recv_msg *rx_msg; + int err_no; +- struct timeval tv; ++ struct nv_timeval tv; + NvU64 start_time; + + nv_gettimeofday(&tv); + diff --git a/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf b/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf new file mode 100644 index 00000000000..65e3fd38622 --- /dev/null +++ b/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf @@ -0,0 +1,18 @@ +Section "ServerLayout" + Identifier "layout" + Option "AllowNVIDIAGPUScreens" +EndSection + +Section "OutputClass" + Identifier "intel" + MatchDriver "i915" + Driver "modesetting" +EndSection + +Section "OutputClass" + Identifier "nvidia" + MatchDriver "nvidia-drm" + Driver "nvidia" + Option "AllowEmptyInitialConfiguration" + ModulePath "/usr/lib/nvidia/xorg" +EndSection diff --git a/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL new file mode 100644 index 00000000000..943fc6e77f0 --- /dev/null +++ b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL @@ -0,0 +1,13 @@ +case "${ACTION}" in +post) + if [ "${ARCH}" = "x86_64" ]; then + # Regenerate initramfs. + echo "Regenerating initramfs, please wait..." + dracut -f -q --regenerate-all + else + echo "Nvidia has dropped support for 32-bit kernels.\n" + echo "Please consider installing the nvidia390 package as an alternative.\n" + echo "This package is now only useful if you're using a x86_64 kernel.\n" + fi + ;; +esac diff --git a/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE new file mode 100644 index 00000000000..c10a4035d6a --- /dev/null +++ b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE @@ -0,0 +1,9 @@ +# Regenerate initramfs. +case ${ACTION} in +purge) + if [ "${ARCH}" = "x86_64" ]; then + echo "Regenerating initramfs, please wait..." + dracut -f -q --regenerate-all + fi + ;; +esac diff --git a/srcpkgs/nvidia-vulkan/template b/srcpkgs/nvidia-vulkan/template new file mode 100644 index 00000000000..04e6044030b --- /dev/null +++ b/srcpkgs/nvidia-vulkan/template @@ -0,0 +1,275 @@ +# Template file for 'nvidia-vulkan' + +_desc="NVIDIA drivers for linux (Vulkan developer branch)" + +pkgname=nvidia-vulkan +version=440.66.08 +revision=1 +maintainer="Hyper-KVM " +license="custom:NVIDIA Proprietary" +homepage="https://www.nvidia.com" + +archs="x86_64" +nopie=yes +create_wrksrc=yes +short_desc="${_desc} - Libraries and Utilities" +hostmakedepends="tar" +conflicts="xserver-abi-video>24_1" + +_pkg="NVIDIA-Linux-x86_64-${version}" +distfiles="https://developer.nvidia.com/vulkan-beta-${version//.}-linux>${_pkg}.run" +checksum=af23e041f358a27f3fc531a9f4db591311cf8a074865b6992bb1763f29a1e478 +subpackages="nvidia-gtklibs-vulkan nvidia-dkms-vulkan nvidia-opencl-vulkan nvidia-libs-vulkan nvidia-libs-32bit-vulkan" +depends="nvidia-libs-vulkan-${version}_${revision} nvidia-gtklibs-vulkan-${version}_${revision} nvidia-dkms-vulkan-${version}_${revision}" + +_install_libs() { + local libdir=$1 + + # GLX client libs + # Required for GLVND option + vinstall libGLX_nvidia.so.${version} 755 ${libdir} + ln -sf libGLX_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLX_nvidia.so.0 + ln -sf libGLX_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLX_indirect.so.0 + + # OpenGL core library + vinstall libnvidia-glcore.so.${version} 755 ${libdir} + vinstall libnvidia-eglcore.so.${version} 755 ${libdir} + vinstall libnvidia-glsi.so.${version} 755 ${libdir} + + # Vulkan core library + vinstall libnvidia-glvkspirv.so.${version} 755 ${libdir} + + vinstall libEGL_nvidia.so.${version} 755 ${libdir} + ln -sf libEGL_nvidia.so.${version} ${DESTDIR}/${libdir}/libEGL_nvidia.so.0 + + vinstall libGLESv1_CM_nvidia.so.${version} 755 ${libdir} + ln -sf libGLESv1_CM_nvidia.so.${version} \ + ${DESTDIR}/${libdir}/libGLESv1_CM_nvidia.so.1 + + vinstall libGLESv2_nvidia.so.${version} 755 ${libdir} + ln -sf libGLESv2_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLESv2_nvidia.so.2 + + # Thread Local Storage + vinstall libnvidia-tls.so.${version} 755 ${libdir} + + # VDPAU + vinstall libvdpau_nvidia.so.${version} 755 ${libdir}/vdpau + ln -sf libvdpau_nvidia.so.${version} \ + ${DESTDIR}/${libdir}/vdpau/libvdpau_nvidia.so.1 + + vinstall libnvidia-ml.so.${version} 755 ${libdir} + ln -sf libnvidia-ml.so.${version} ${DESTDIR}/${libdir}/libnvidia-ml.so + ln -sf libnvidia-ml.so.${version} ${DESTDIR}/${libdir}/libnvidia-ml.so.1 + + vinstall libnvidia-encode.so.${version} 755 ${libdir} + ln -sf libnvidia-encode.so.${version} ${DESTDIR}/${libdir}/libnvidia-encode.so + ln -sf libnvidia-encode.so.${version} ${DESTDIR}/${libdir}/libnvidia-encode.so.1 + + vinstall libnvidia-ifr.so.${version} 755 ${libdir} + ln -sf libnvidia-ifr.so.${version} ${DESTDIR}/${libdir}/libnvidia-ifr.so + ln -sf libnvidia-ifr.so.${version} ${DESTDIR}/${libdir}/libnvidia-ifr.so.1 + + vinstall libnvidia-fbc.so.${version} 755 ${libdir} + ln -sf libnvidia-fbc.so.${version} ${DESTDIR}/${libdir}/libnvidia-fbc.so + ln -sf libnvidia-fbc.so.${version} ${DESTDIR}/${libdir}/libnvidia-fbc.so.1 + + vinstall libnvidia-fatbinaryloader.so.${version} 755 ${libdir} + ln -sf libnvidia-fatbinaryloader.so.${version} \ + ${DESTDIR}/${libdir}/libnvidia-fatbinaryloader.so.1 + ln -sf libnvidia-fatbinaryloader.so.1 \ + ${DESTDIR}/${libdir}/libnvidia-fatbinaryloader.so + + # CUDA + vinstall libcuda.so.${version} 755 ${libdir} + ln -sf libcuda.so.${version} ${DESTDIR}/${libdir}/libcuda.so + ln -sf libcuda.so.${version} ${DESTDIR}/${libdir}/libcuda.so.1 + + vinstall libnvcuvid.so.${version} 755 ${libdir} + ln -sf libnvcuvid.so.${version} ${DESTDIR}/${libdir}/libnvcuvid.so + ln -sf libnvcuvid.so.${version} ${DESTDIR}/${libdir}/libnvcuvid.so.1 + + vinstall libnvidia-opticalflow.so.${version} 755 ${libdir} + ln -sf libnvidia-opticalflow.so.${version} \ + ${DESTDIR}/${libdir}/libnvidia-opticalflow.so + ln -sf libnvidia-opticalflow.so.${version} \ + ${DESTDIR}/${libdir}/libnvidia-opticalflow.so.1 + + vinstall libnvidia-ptxjitcompiler.so.${version} 755 ${libdir} + ln -sf libnvidia-ptxjitcompiler.so.${version} \ + ${DESTDIR}/${libdir}/libnvidia-ptxjitcompiler.so.1 + ln -sf libnvidia-ptxjitcompiler.so.1 \ + ${DESTDIR}/${libdir}/libnvidia-ptxjitcompiler.so + + # helper libs for approved partners' GRID remote apps + vinstall libnvidia-ifr.so.${version} 755 usr/lib + vinstall libnvidia-fbc.so.${version} 755 usr/lib +} + +do_extract() { + install -m755 ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_pkg}.run ${wrksrc} + cd ${wrksrc} + ./${_pkg}.run --extract-only + rm -f ${_pkg}.run +} + +do_patch() { + cd ${_pkg} + patch -p1 < ${FILESDIR}/linux5.6.patch +} + +do_install() { + cd ${_pkg} + + # X driver + vinstall nvidia_drv.so 755 usr/lib/xorg/modules/drivers + + # GLX extension module for X + vinstall libglxserver_nvidia.so.${version} 755 usr/lib/nvidia/xorg + ln -sf libglxserver_nvidia.so.${version} \ + ${DESTDIR}/usr/lib/nvidia/xorg/libglxserver_nvidia.so + ln -sf libglxserver_nvidia.so.${version} \ + ${DESTDIR}/usr/lib/nvidia/xorg/libglxserver_nvidia.so.1 + + vinstall libnvidia-egl-wayland.so.1.1.4 755 usr/lib + ln -sf libnvidia-egl-wayland.so.1.1.4 \ + ${DESTDIR}/usr/lib/libnvidia-egl-wayland.so.1 + + vinstall 10_nvidia.json 755 usr/share/glvnd/egl_vendor.d + vinstall 10_nvidia_wayland.json \ + 755 usr/share/egl/egl_external_platform.d + + vinstall libnvidia-cfg.so.${version} 755 usr/lib + ln -sf libnvidia-cfg.so.${version} ${DESTDIR}/usr/lib/libnvidia-cfg.so + ln -sf libnvidia-cfg.so.${version} ${DESTDIR}/usr/lib/libnvidia-cfg.so.1 + + vbin nvidia-cuda-mps-control + vbin nvidia-cuda-mps-server + gzip -d nvidia-cuda-mps-control.1.gz + vman nvidia-cuda-mps-control.1 + + # nvidia-xconfig + vbin nvidia-xconfig + gzip -d nvidia-xconfig.1.gz + vman nvidia-xconfig.1 + + # nvidia-settings + vbin nvidia-settings + gzip -d nvidia-settings.1.gz + vman nvidia-settings.1 + vinstall nvidia-settings.desktop 644 usr/share/applications + vinstall nvidia-settings.png 644 usr/share/pixmaps + sed -e 's:__UTILS_PATH__:/usr/bin:' \ + -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' \ + -i ${DESTDIR}/usr/share/applications/nvidia-settings.desktop + + vinstall libnvidia-gtk3.so.${version} 755 usr/lib + vinstall libnvidia-gtk2.so.${version} 755 usr/lib + + # application profiles (needed by nvidia-settings) + vinstall nvidia-application-profiles-${version}-key-documentation \ + 644 usr/share/nvidia + vinstall nvidia-application-profiles-${version}-rc 644 usr/share/nvidia + + # nvidia-bug-report + vbin nvidia-bug-report.sh nvidia-bug-report + vbin nvidia-debugdump + + # nvidia-smi + vbin nvidia-smi + gzip -d nvidia-smi.1.gz + vman nvidia-smi.1 + + # nvidia-modprobe + vinstall nvidia-modprobe 4755 usr/bin + gzip -d nvidia-modprobe.1.gz + vman nvidia-modprobe.1 + + # opencl pkg + vinstall nvidia.icd 644 etc/OpenCL/vendors + + vinstall libnvidia-compiler.so.${version} 755 usr/lib + + vinstall libnvidia-opencl.so.${version} 755 usr/lib + ln -sf libnvidia-opencl.so.${version} \ + ${DESTDIR}/usr/lib/libnvidia-opencl.so + ln -sf libnvidia-opencl.so.${version} \ + ${DESTDIR}/usr/lib/libnvidia-opencl.so.1 + + # vulkan icd + vinstall nvidia_icd.json 644 usr/share/vulkan/icd.d + + # vulkan real-time ray tracing extensions + vinstall libnvidia-rtcore.so.${version} 755 usr/lib + vinstall libnvidia-cbl.so.${version} 755 usr/lib + + # optix ray racing engine + vinstall libnvoptix.so.${version} 755 usr/lib + + # dkms pkg + vmkdir usr/src/nvidia-${version} + vcopy "kernel/*" usr/src/nvidia-${version} + vcopy ${FILESDIR}/dkms.conf usr/src/nvidia-${version} + sed -e "s/__PKGVER/${version}/g" \ + -e 's/__MAKEJOBS/-j$(nproc)/g' \ + -i ${DESTDIR}/usr/src/nvidia-${version}/dkms.conf + + vmkdir /usr/share/X11/xorg.conf.d/ + vinstall ${FILESDIR}/nvidia-drm-outputclass.conf 644 \ + /usr/share/X11/xorg.conf.d 10-nvidia-drm-outputclass.conf + + # Blacklist nouveau + vmkdir usr/lib/modprobe.d + echo "blacklist nouveau" > ${DESTDIR}/usr/lib/modprobe.d/nvidia.conf + chmod 644 ${DESTDIR}/usr/lib/modprobe.d/nvidia.conf + + # License and documentation + vlicense LICENSE + vdoc README.txt README + vdoc NVIDIA_Changelog + + # Libraries (64bit) + _install_libs usr/lib + cd 32 + # Libraries (32bit) + _install_libs usr/lib32 +} + +nvidia-gtklibs-vulkan_package() { + short_desc="${_desc} - GTK+ libraries" + pkg_install() { + vmove "usr/lib/lib*gtk*.so*" + } +} +nvidia-libs-32bit-vulkan_package() { + short_desc="${_desc} - common libraries (32bit)" + # manually set 32bit depends for libglvnd + depends="glibc-32bit>=0 libX11-32bit>=0 libXext-32bit>=0 libglvnd-32bit>=0" + pkg_install() { + vmove usr/lib32 + } +} +nvidia-libs-vulkan_package() { + short_desc="${_desc} - common libraries" + depends="libglvnd" + pkg_install() { + vmove usr/lib + } +} +nvidia-dkms-vulkan_package() { + short_desc="${_desc} - DKMS kernel module" + dkms_modules="nvidia ${version}" + depends="dkms" + pkg_install() { + vmove usr/src + vmove usr/lib/modprobe.d + } +} +nvidia-opencl-vulkan_package() { + short_desc="${_desc} - OpenCL implementation" + depends="libOpenCL" + pkg_install() { + vmove "usr/lib/libnvidia-compiler*" + vmove "usr/lib/libnvidia-opencl*" + vmove etc/OpenCL + } +} diff --git a/srcpkgs/nvidia-vulkan/update b/srcpkgs/nvidia-vulkan/update new file mode 100644 index 00000000000..d33b1d9a141 --- /dev/null +++ b/srcpkgs/nvidia-vulkan/update @@ -0,0 +1,2 @@ +site="http://www.nvidia.com/object/unix.html" +pattern='Branch Version.+>\K[\d.]+(?=)'