summaryrefslogtreecommitdiff
path: root/sys/external
diff options
context:
space:
mode:
authormrg <mrg@NetBSD.org>2009-03-30 01:42:20 +0000
committermrg <mrg@NetBSD.org>2009-03-30 01:42:20 +0000
commitdb9cd6b98cd09ef2c68a0e33e4f245bbb565b7e2 (patch)
tree438723598fd26b3d5c53f97512f553cdf1fce9dd /sys/external
parent4d27c3c2b10561a083cc65c6f816c79055cbef37 (diff)
- apply from sys/dev:
revision 1.33 date: 2009/03/29 17:00:50; author: mrg; state: Exp; lines: +12 -4 add a comment explaining DRM_NETBSD_ADDR2HANDLE/DRM_NETBSD_HANDLE2ADDR: * This hack strips the top bit from amd64 addresses, which avoid * udv_attach() returning NULL for "negative" offset. * A better hack would be to encode the offset of some kernel data * structure.. add a new DRM_HANDLE_NEEDS_MASK macro to check whether the above need to be applied for various mapping types (_DRM_SHM and _DRM_SCATTER_GATHER.) also: - use IPL_VM for now - use a lot of bus_space - struct drm_device now has a pointer to the device_t
Diffstat (limited to 'sys/external')
-rw-r--r--sys/external/bsd/drm/dist/bsd-core/drmP.h35
1 files changed, 27 insertions, 8 deletions
diff --git a/sys/external/bsd/drm/dist/bsd-core/drmP.h b/sys/external/bsd/drm/dist/bsd-core/drmP.h
index 82cd2d19335..4f9fa2f280b 100644
--- a/sys/external/bsd/drm/dist/bsd-core/drmP.h
+++ b/sys/external/bsd/drm/dist/bsd-core/drmP.h
@@ -108,7 +108,6 @@ typedef struct drm_file drm_file_t;
#include <sys/select.h>
#include <sys/device.h>
#include <sys/resourcevar.h>
-#include <sys/lkm.h>
#include <sys/agpio.h>
#include <sys/ttycom.h>
#include <sys/mman.h>
@@ -246,7 +245,7 @@ MALLOC_DECLARE(M_DRM);
#define DRM_CDEVPROC_REAL(l) (l)->l_proc
#define DRM_IOCTL_DATA void *
#define DRM_SPINTYPE kmutex_t
-#define DRM_SPININIT(l,name) mutex_init(l, MUTEX_DEFAULT, IPL_NONE)
+#define DRM_SPININIT(l,name) mutex_init(l, MUTEX_DEFAULT, /*IPL_NONE*/ IPL_VM)
#define DRM_SPINUNINIT(l) mutex_destroy(l)
#define DRM_SPINLOCK(l) mutex_enter(l)
#define DRM_SPINUNLOCK(u) mutex_exit(u)
@@ -329,11 +328,13 @@ extern drm_device_t *drm_units[];
#define DRM_MTRR_WC MTRR_TYPE_WC
#define jiffies hardclock_ticks
#ifdef __x86_64__
-#define DRM_NETBSD_ADDR2HANDLE(v) ((vaddr_t)(v) - vm_map_min(kernel_map))
-#define DRM_NETBSD_HANDLE2ADDR(u) ((vaddr_t)(u) + vm_map_min(kernel_map))
+#define DRM_NETBSD_ADDR2HANDLE(addr) ((addr) & 0x7fffffffffffffff)
+#define DRM_NETBSD_HANDLE2ADDR(handle) ((handle) | 0x8000000000000000)
+#define DRM_HANDLE_NEEDS_MASK(type) ((type) == _DRM_SHM || (type) == _DRM_SCATTER_GATHER)
#else
#define DRM_NETBSD_ADDR2HANDLE(addr) (addr)
#define DRM_NETBSD_HANDLE2ADDR(handle) (handle)
+#define DRM_HANDLE_NEEDS_MASK(type) 0
#endif
#elif defined(__OpenBSD__)
#define DRM_SUSER(p) (suser(p->p_ucred, &p->p_acflag) == 0)
@@ -402,6 +403,7 @@ typedef u_int8_t u8;
"lock; addl $0,0(%%rsp)" : : : "memory");
#endif
+#ifdef __FreeBSD__
#define DRM_READ8(map, offset) \
*(volatile u_int8_t *) (((unsigned long)(map)->handle) + (offset))
#define DRM_READ16(map, offset) \
@@ -415,15 +417,30 @@ typedef u_int8_t u8;
#define DRM_WRITE32(map, offset, val) \
*(volatile u_int32_t *)(((unsigned long)(map)->handle) + (offset)) = val
-#ifdef __FreeBSD__
#define DRM_VERIFYAREA_READ( uaddr, size ) \
(!useracc(__DECONST(caddr_t, uaddr), size, VM_PROT_READ))
-#else
+
+#else /* __FreeBSD__ */
+
typedef vaddr_t vm_offset_t;
+
+#define DRM_READ8(map, offset) \
+ bus_space_read_1( (map)->bst, (map)->bsh, (offset))
+#define DRM_READ16(map, offset) \
+ bus_space_read_2( (map)->bst, (map)->bsh, (offset))
+#define DRM_READ32(map, offset) \
+ bus_space_read_4( (map)->bst, (map)->bsh, (offset))
+#define DRM_WRITE8(map, offset, val) \
+ bus_space_write_1((map)->bst, (map)->bsh, (offset), (val))
+#define DRM_WRITE16(map, offset, val) \
+ bus_space_write_2((map)->bst, (map)->bsh, (offset), (val))
+#define DRM_WRITE32(map, offset, val) \
+ bus_space_write_4((map)->bst, (map)->bsh, (offset), (val))
+
#define DRM_VERIFYAREA_READ( uaddr, size ) \
(!uvm_map_checkprot(&(curproc->p_vmspace->vm_map), \
(vaddr_t)uaddr, (vaddr_t)uaddr+size, UVM_PROT_READ))
-#endif
+#endif /* !__FreeBSD__ */
#define DRM_COPY_TO_USER(user, kern, size) \
copyout(kern, user, size)
@@ -826,7 +843,9 @@ typedef struct {
* DRM device functions structure
*/
struct drm_device {
-#if defined(__NetBSD__) || defined(__OpenBSD__)
+#if defined(__NetBSD__)
+ struct device *device;
+#elif defined(__OpenBSD__)
struct device device; /* softc is an extension of struct device */
#endif