$NetBSD: patch-ad,v 1.9 2006/05/31 02:31:56 tron Exp $

--- module/aperture.c.orig	2006-05-31 03:22:31.000000000 +0100
+++ module/aperture.c	2006-05-31 03:29:49.000000000 +0100
@@ -71,6 +71,14 @@
 /* open counter */
 static int xf86_open_count = 0;
 
+#if !defined(__NetBSD_Version__) || __NetBSD_Version__ < 399001400
+#define PROC
+#endif
+
+#if defined(__NetBSD_Version__) && __NetBSD_Version__ >= 399002000
+#include <sys/kauth.h>
+#endif
+
 /* mem range descriptors */
 struct mem_range_softc mem_range_softc;
 
@@ -78,16 +86,28 @@
  * Open the device
  */
 int
-xf86open(dev, oflags, devtype, p)
-	dev_t dev;
-	int oflags;
-	int devtype;
-	struct proc *p;
+xf86open(dev_t dev, int oflags, int devtype, 
+#ifdef PROC
+    struct proc *p)
 {
+#else
+    struct lwp *l)
+{
+	struct proc *p = l->l_proc;
+#endif
 
+#if !defined(__NetBSD_Version__) || __NetBSD_Version__ < 399002000
 	if (suser(p->p_ucred, &p->p_acflag) != 0) {
 		return(EPERM);
 	}
+#else
+	int error;
+
+	error = kauth_authorize_generic(p->p_cred, KAUTH_GENERIC_ISSUSER,
+	    &p->p_acflag);
+	if (error != 0)
+	    return error;
+#endif
 	/* authorize only one simultaneous open() */
 	if (xf86_open_count > 0) {
 		return(EPERM);
@@ -101,11 +121,13 @@
  * Close the device
  */
 int
-xf86close(dev, cflags, devtype, p)
-	dev_t dev;
-	int cflags;
-	int devtype;
-	struct proc *p;
+xf86close(dev_t dev, int cflags, int devtype,
+#ifdef PROC
+    struct proc *p
+#else
+    struct lwp *l
+#endif
+)
 {
 	xf86_open_count--;
 	return(0);
@@ -117,19 +139,22 @@
  * allow only section in the vga framebuffer and above main memory 
  * to be mapped
  */
+/*
+ * Technically, the change to the kernel mmap interface happened
+ * during 1.5A, but after the interface changed, the kernel version
+ * was inexplicably not bumped.  Starting with 1.5B _and_ with the
+ * 1.5-branch releases, the change to the kernel mmap interface
+ * appears.
+ */
 #if !defined(__NetBSD_Version__) || \
-    (defined(__NetBSD_Version__) && (__NetBSD_Version__ < 105000000))
+    (defined(__NetBSD_Version__) && \
+     ((__NetBSD_Version__ < 105000000) || \
+      (__NetBSD_Version__ >= 105010000) && (__NetBSD_Version__ < 105020000)))
 int
-xf86mmap(dev, offset, length)
-	dev_t dev;
-	int offset;
-	int length;
+xf86mmap(dev_t dev, int offset, int length)
 #else
 paddr_t
-xf86mmap(dev, offset, length)
-	dev_t dev;
-	off_t offset;
-	int length;
+xf86mmap(dev_t dev, off_t offset, int length)
 #endif /* __NetBSD_Version__ */
 {
 
@@ -144,19 +169,24 @@
 		     && (unsigned)offset <= HOLE16M_END)
 #endif
 		     )) {
+#if __NetBSD_Version__ >= 106160000
+		return x86_btop(offset);
+#else
 		return i386_btop(offset);
+#endif
 	} else {
 		return(-1);
 	}
 }
        
 int
-xf86ioctl(dev, cmd, data, flags, p)
-	dev_t dev;
-	u_long cmd;
-	caddr_t data;
-	int flags;
-	struct proc *p;
+xf86ioctl(dev_t dev, u_long cmd, caddr_t data, int flags,
+#ifdef PROC
+	struct proc *p
+#else
+	struct lwp *l
+#endif
+)
 {
 	int nd, error = 0;
 	struct mem_range_op *mo = (struct mem_range_op *)data;
@@ -212,9 +242,7 @@
  * memory range attributes.
  */
 int
-mem_range_attr_get(mrd, arg)
-	struct mem_range_desc *mrd;
-	int *arg;
+mem_range_attr_get(struct mem_range_desc *mrd, int *arg)
 {
 	/* can we handle this? */
 	if (mem_range_softc.mr_op == NULL)
@@ -229,9 +257,7 @@
 }
 
 int
-mem_range_attr_set(mrd, arg)
-	struct mem_range_desc *mrd;
-	int *arg;
+mem_range_attr_set(struct mem_range_desc *mrd, int *arg)
 {
 	/* can we handle this? */
 	if (mem_range_softc.mr_op == NULL)
