diff --git a/Makefile b/Makefile index 8281112..5ed3acc 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ evdi-y := evdi_drv.o evdi_modeset.o evdi_connector.o evdi_encoder.o evdi_main.o evdi-$(CONFIG_COMPAT) += evdi_ioc32.o obj-$(CONFIG_DRM_EVDI) := evdi.o -else +endif # kbuild against specified or current kernel ifeq ($(KVER),) @@ -51,7 +51,7 @@ ifeq ($(KDIR),) KDIR := /lib/modules/$(KVER)/build endif -default: module +all: module module: $(MAKE) -C $(KDIR) M=$$PWD @@ -59,7 +59,4 @@ module: clean: rm -rf *.o *.ko .tmp* .*.*.cmd Module.symvers evdi.mod.c modules.order - -endif # ifneq ($(KERNELRELEASE),) - endif # ifneq ($(DKMS_BUILD),) diff --git a/dkms.conf b/dkms.conf index 817231d..ebd568e 100644 --- a/dkms.conf +++ b/dkms.conf @@ -7,11 +7,13 @@ # PACKAGE_NAME="evdi" -PACKAGE_VERSION=1.0.0 +PACKAGE_VERSION=5.2.14 AUTOINSTALL=yes -MAKE[0]="make all INCLUDEDIR=/lib/modules/$kernelver/build/include KVERSION=$kernelver DKMS_BUILD=1" +#MAKE[0]="make all INCLUDEDIR=/lib/modules/$kernelver/build/include KVERSION=$kernelver DKMS_BUILD=1" +MAKE[0]="make all INCLUDEDIR=/lib/modules/$kernelver/build/include KVER=$kernelver" DEST_MODULE_LOCATION[0]="/kernel/drivers/gpu/drm/evdi" BUILT_MODULE_NAME[0]="evdi" -CLEAN="make clean KERNELRELEASE=$kernelver DKMS_BUILD=1" +#CLEAN="make clean KERNELRELEASE=$kernelver DKMS_BUILD=1" +CLEAN="make clean KERNELRELEASE=$kernelver" diff --git a/evdi_drv.c b/evdi_drv.c index e59d0a1..c4fd33e 100644 --- a/evdi_drv.c +++ b/evdi_drv.c @@ -18,6 +18,10 @@ #include "evdi_params.h" #include "evdi_debug.h" +#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE +# define DRIVER_PRIME 0 +#endif + MODULE_AUTHOR("DisplayLink (UK) Ltd."); MODULE_DESCRIPTION("Extensible Virtual Display Interface"); MODULE_LICENSE("GPL"); diff --git a/evdi_drv.h b/evdi_drv.h index 0d67197..9433530 100644 --- a/evdi_drv.h +++ b/evdi_drv.h @@ -20,7 +20,17 @@ #include #include #include -#include +#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE +# include +# define evdi_reservation_object reservation_object +# define evdi_reservation_object_init reservation_object_init +# define evdi_reservation_object_fini reservation_object_fini +#else +# include +# define evdi_reservation_object dma_resv +# define evdi_reservation_object_init dma_resv_init +# define evdi_reservation_object_fini dma_resv_fini +#endif #include "evdi_debug.h" #define DRIVER_NAME "evdi" @@ -51,8 +61,8 @@ struct evdi_gem_object { struct page **pages; void *vmapping; struct sg_table *sg; - struct reservation_object *resv; - struct reservation_object _resv; + struct evdi_reservation_object *resv; + struct evdi_reservation_object _resv; }; #define to_evdi_bo(x) container_of(x, struct evdi_gem_object, base) @@ -112,8 +122,12 @@ uint32_t evdi_gem_object_handle_lookup(struct drm_file *filp, struct drm_gem_object *evdi_gem_prime_import(struct drm_device *dev, struct dma_buf *dma_buf); +#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE struct dma_buf *evdi_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags); +#else +struct dma_buf *evdi_gem_prime_export(struct drm_gem_object *obj, int flags); +#endif int evdi_gem_vmap(struct evdi_gem_object *obj); void evdi_gem_vunmap(struct evdi_gem_object *obj); diff --git a/evdi_gem.c b/evdi_gem.c index 2895d6c..0a0d336 100644 --- a/evdi_gem.c +++ b/evdi_gem.c @@ -61,7 +61,7 @@ struct evdi_gem_object *evdi_gem_alloc_object(struct drm_device *dev, return NULL; } - reservation_object_init(&obj->_resv); + evdi_reservation_object_init(&obj->_resv); obj->resv = &obj->_resv; return obj; @@ -255,7 +255,7 @@ void evdi_gem_free_object(struct drm_gem_object *gem_obj) if (gem_obj->dev->vma_offset_manager) drm_gem_free_mmap_offset(gem_obj); - reservation_object_fini(&obj->_resv); + evdi_reservation_object_fini(&obj->_resv); obj->resv = NULL; } @@ -569,8 +569,12 @@ struct drm_gem_object *evdi_gem_prime_import(struct drm_device *dev, return ERR_PTR(ret); } +#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE struct dma_buf *evdi_gem_prime_export(__maybe_unused struct drm_device *dev, struct drm_gem_object *obj, int flags) +#else +struct dma_buf *evdi_gem_prime_export(struct drm_gem_object *obj, int flags) +#endif { struct evdi_gem_object *evdi_obj = to_evdi_bo(obj); struct dma_buf_export_info exp_info = { @@ -582,7 +586,7 @@ struct dma_buf *evdi_gem_prime_export(__maybe_unused struct drm_device *dev, .priv = obj }; -#if KERNEL_VERSION(4, 9, 0) <= LINUX_VERSION_CODE +#if (KERNEL_VERSION(4, 9, 0) <= LINUX_VERSION_CODE) && (KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE) return drm_gem_dmabuf_export(dev, &exp_info); #else return dma_buf_export(&exp_info);