Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 10:38:23 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm: drm_prime.c
        src/sys/external/bsd/drm2/dist/include/drm: drm_gem.h drm_prime.h
        src/sys/external/bsd/drm2/include/linux: dma-buf.h

Log Message:
Fix up drm_prime.c.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/drm2/dist/drm/drm_prime.c
cvs rdiff -u -r1.11 -r1.12 \
    src/sys/external/bsd/drm2/dist/include/drm/drm_gem.h
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/include/drm/drm_prime.h
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/include/linux/dma-buf.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/drm_prime.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_prime.c:1.13 src/sys/external/bsd/drm2/dist/drm/drm_prime.c:1.14
--- src/sys/external/bsd/drm2/dist/drm/drm_prime.c:1.13	Sun Dec 19 01:56:58 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_prime.c	Sun Dec 19 10:38:22 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_prime.c,v 1.13 2021/12/19 01:56:58 riastradh Exp $	*/
+/*	$NetBSD: drm_prime.c,v 1.14 2021/12/19 10:38:22 riastradh Exp $	*/
 
 /*
  * Copyright © 2012 Red Hat
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_prime.c,v 1.13 2021/12/19 01:56:58 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_prime.c,v 1.14 2021/12/19 10:38:22 riastradh Exp $");
 
 #include <linux/export.h>
 #include <linux/dma-buf.h>
@@ -46,6 +46,8 @@ __KERNEL_RCSID(0, "$NetBSD: drm_prime.c,
 
 #ifdef __NetBSD__
 
+#include <sys/file.h>
+
 #include <drm/bus_dma_hacks.h>
 
 #include <linux/nbsd-namespace.h>
@@ -471,7 +473,9 @@ struct dma_buf *drm_gem_dmabuf_export(st
 
 	drm_dev_get(dev);
 	drm_gem_object_get(obj);
+#ifndef __NetBSD__		/* XXX dmabuf share */
 	dma_buf->file->f_mapping = obj->dev->anon_inode->i_mapping;
+#endif
 
 	return dma_buf;
 }
@@ -848,12 +852,14 @@ struct sg_table *drm_gem_map_dma_buf(str
 	else
 		sgt = obj->dev->driver->gem_prime_get_sg_table(obj);
 
+#ifndef __NetBSD__		/* We map/unmap elsewhere.  */
 	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
 			      DMA_ATTR_SKIP_CPU_SYNC)) {
 		sg_free_table(sgt);
 		kfree(sgt);
 		sgt = ERR_PTR(-ENOMEM);
 	}
+#endif
 
 	return sgt;
 }
@@ -874,8 +880,10 @@ void drm_gem_unmap_dma_buf(struct dma_bu
 	if (!sgt)
 		return;
 
+#ifndef __NetBSD__		/* We map/unmap elsewhere.  */
 	dma_unmap_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
 			   DMA_ATTR_SKIP_CPU_SYNC);
+#endif
 	sg_free_table(sgt);
 	kfree(sgt);
 }
@@ -931,20 +939,37 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
  *
  * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
  */
+#ifdef __NetBSD__
+int drm_gem_prime_mmap(struct drm_gem_object *obj, off_t *offp, size_t size,
+    int prot, int *flagsp, int *advicep, struct uvm_object **uobjp,
+    int *maxprotp)
+#else
 int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
+#endif
 {
 	struct drm_file *priv;
 	struct file *fil;
 	int ret;
 
 	/* Add the fake offset */
+#ifdef __NetBSD__
+	*offp += drm_vma_node_start(&obj->vma_node);
+#else
 	vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);
+#endif
 
 	if (obj->funcs && obj->funcs->mmap) {
+#ifdef __NetBSD__
+		ret = obj->funcs->mmap(obj, offp, size, prot, flagsp, advicep,
+		    uobjp, maxprotp);
+#else
 		ret = obj->funcs->mmap(obj, vma);
+#endif
 		if (ret)
 			return ret;
+#ifndef __NetBSD__
 		vma->vm_private_data = obj;
+#endif
 		drm_gem_object_get(obj);
 		return 0;
 	}
@@ -958,13 +983,22 @@ int drm_gem_prime_mmap(struct drm_gem_ob
 
 	/* Used by drm_gem_mmap() to lookup the GEM object */
 	priv->minor = obj->dev->primary;
+#ifdef __NetBSD__
+	fil->f_data = priv;
+#else
 	fil->private_data = priv;
+#endif
 
 	ret = drm_vma_node_allow(&obj->vma_node, priv);
 	if (ret)
 		goto out;
 
+#ifdef __NetBSD__
+	ret = obj->dev->driver->mmap_object(obj->dev, *offp, size, prot, uobjp,
+	    offp, fil);
+#else
 	ret = obj->dev->driver->fops->mmap(fil, vma);
+#endif
 
 	drm_vma_node_revoke(&obj->vma_node, priv);
 out:
@@ -1180,7 +1214,6 @@ struct drm_gem_object *drm_gem_prime_imp
 EXPORT_SYMBOL(drm_gem_prime_import);
 
 #ifdef __NetBSD__
-/**
 
 struct sg_table *
 drm_prime_bus_dmamem_to_sg(bus_dma_tag_t dmat, const bus_dma_segment_t *segs,

Index: src/sys/external/bsd/drm2/dist/include/drm/drm_gem.h
diff -u src/sys/external/bsd/drm2/dist/include/drm/drm_gem.h:1.11 src/sys/external/bsd/drm2/dist/include/drm/drm_gem.h:1.12
--- src/sys/external/bsd/drm2/dist/include/drm/drm_gem.h:1.11	Sun Dec 19 09:56:03 2021
+++ src/sys/external/bsd/drm2/dist/include/drm/drm_gem.h	Sun Dec 19 10:38:23 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_gem.h,v 1.11 2021/12/19 09:56:03 riastradh Exp $	*/
+/*	$NetBSD: drm_gem.h,v 1.12 2021/12/19 10:38:23 riastradh Exp $	*/
 
 #ifndef __DRM_GEM_H__
 #define __DRM_GEM_H__
@@ -173,8 +173,8 @@ struct drm_gem_object_funcs {
 	 * used, the @mmap callback must set vma->vm_ops instead.
 	 */
 #ifdef __NetBSD__
-	int (*mmap)(struct drm_device *, off_t, size_t, int, struct uvm_object **,
-	    voff_t *, struct file *);
+	int (*mmap)(struct drm_gem_object *, off_t *, size_t, int,
+	    int *, int *, struct uvm_object **, int *);
 #else
 	int (*mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma);
 #endif

Index: src/sys/external/bsd/drm2/dist/include/drm/drm_prime.h
diff -u src/sys/external/bsd/drm2/dist/include/drm/drm_prime.h:1.4 src/sys/external/bsd/drm2/dist/include/drm/drm_prime.h:1.5
--- src/sys/external/bsd/drm2/dist/include/drm/drm_prime.h:1.4	Sun Dec 19 01:59:03 2021
+++ src/sys/external/bsd/drm2/dist/include/drm/drm_prime.h	Sun Dec 19 10:38:23 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_prime.h,v 1.4 2021/12/19 01:59:03 riastradh Exp $	*/
+/*	$NetBSD: drm_prime.h,v 1.5 2021/12/19 10:38:23 riastradh Exp $	*/
 
 /*
  * Copyright © 2012 Red Hat
@@ -88,7 +88,7 @@ void *drm_gem_dmabuf_vmap(struct dma_buf
 void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
 
 #ifdef __NetBSD__
-int gem_prime_mmap(struct drm_gem_object *, off_t *, size_t, int, int *,
+int drm_gem_prime_mmap(struct drm_gem_object *, off_t *, size_t, int, int *,
     int *, struct uvm_object **, int *);
 int drm_gem_dmabuf_mmap(struct dma_buf *, off_t *, size_t, int, int *,
     int *, struct uvm_object **, int *);

Index: src/sys/external/bsd/drm2/include/linux/dma-buf.h
diff -u src/sys/external/bsd/drm2/include/linux/dma-buf.h:1.9 src/sys/external/bsd/drm2/include/linux/dma-buf.h:1.10
--- src/sys/external/bsd/drm2/include/linux/dma-buf.h:1.9	Sun Dec 19 10:36:47 2021
+++ src/sys/external/bsd/drm2/include/linux/dma-buf.h	Sun Dec 19 10:38:23 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: dma-buf.h,v 1.9 2021/12/19 10:36:47 riastradh Exp $	*/
+/*	$NetBSD: dma-buf.h,v 1.10 2021/12/19 10:38:23 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -58,6 +58,7 @@ enum dma_data_direction {
 };
 
 struct dma_buf_ops {
+	bool	cache_sgt_mapping;
 	int	(*attach)(struct dma_buf *, struct dma_buf_attachment *);
 	void	(*detach)(struct dma_buf *, struct dma_buf_attachment *);
 	struct sg_table *

Reply via email to