--- src/sys/dev/drm/Attic/drm_vm.h 2004/02/13 01:23:57 1.3 +++ src/sys/dev/drm/Attic/drm_vm.h 2006/07/28 02:17:36 1.4 @@ -6,12 +6,18 @@ #if defined(__FreeBSD__) && __FreeBSD_version >= 500102 static int DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, vm_paddr_t *paddr, int prot) -#elif defined(__DragonFly__) || defined(__FreeBSD__) +#elif defined(__DragonFly__) +static int DRM(dma_mmap)(struct dev_mmap_args *ap) +#elif defined(__FreeBSD__) static int DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, int prot) #elif defined(__NetBSD__) static paddr_t DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, int prot) #endif { +#ifdef __DragonFly__ + dev_t kdev = ap->a_head.a_dev; + vm_offset_t offset = ap->a_offset; +#endif DRM_DEVICE; drm_device_dma_t *dma = dev->dma; unsigned long physical; @@ -24,7 +30,10 @@ static paddr_t DRM(dma_mmap)(dev_t kdev, physical = dma->pagelist[page]; DRM_DEBUG("0x%08lx (page %lu) => 0x%08lx\n", (long)offset, page, physical); -#if defined(__FreeBSD__) && __FreeBSD_version >= 500102 +#if defined(__DragonFly__) + ap->a_result = physical; + return 0; +#elif defined(__FreeBSD__) && __FreeBSD_version >= 500102 *paddr = physical; return 0; #else @@ -35,12 +44,13 @@ static paddr_t DRM(dma_mmap)(dev_t kdev, #if defined(__FreeBSD__) && __FreeBSD_version >= 500102 int DRM(mmap)(dev_t kdev, vm_offset_t offset, vm_paddr_t *paddr, int prot) -#elif defined(__DragonFly__) || defined(__FreeBSD__) -int DRM(mmap)(dev_t kdev, vm_offset_t offset, int prot) +#elif defined(__DragonFly__) +int DRM(mmap)(struct dev_mmap_args *ap) #elif defined(__NetBSD__) paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot) #endif { + dev_t kdev = ap->a_head.a_dev; DRM_DEVICE; drm_local_map_t *map = NULL; drm_map_list_entry_t *listentry=NULL; @@ -56,12 +66,14 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offs return DRM_ERR(EACCES); if (dev->dma - && offset >= 0 - && offset < ptoa(dev->dma->page_count)) + && ap->a_offset >= 0 + && ap->a_offset < ptoa(dev->dma->page_count)) #if defined(__FreeBSD__) && __FreeBSD_version >= 500102 return DRM(dma_mmap)(kdev, offset, paddr, prot); +#elif defined(__DragonFly__) + return DRM(dma_mmap)(ap); #else - return DRM(dma_mmap)(kdev, offset, prot); + return DRM(dma_mmap)(kdev, ap->a_offset, ap->a_nprot); #endif /* A sequential search of a linked list is @@ -74,17 +86,17 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offs TAILQ_FOREACH(listentry, dev->maplist, link) { map = listentry->map; /* DRM_DEBUG("considering 0x%x..0x%x\n", map->offset, map->offset + map->size - 1);*/ - if (offset >= map->offset - && offset < map->offset + map->size) break; + if (ap->a_offset >= map->offset + && ap->a_offset < map->offset + map->size) break; } if (!listentry) { DRM_DEBUG("can't find map\n"); - return -1; + return EINVAL; } if (((map->flags&_DRM_RESTRICTED) && DRM_SUSER(DRM_CURPROC))) { DRM_DEBUG("restricted map\n"); - return -1; + return EINVAL; } switch (map->type) { @@ -92,24 +104,30 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offs case _DRM_REGISTERS: case _DRM_AGP: #if defined(__FreeBSD__) && __FreeBSD_version >= 500102 - *paddr = offset; + *paddr = ap->a_offset; + return 0; +#elif defined(__DragonFly__) + ap->a_result = atop(ap->a_offset); return 0; #else - return atop(offset); + return atop(ap->a_offset); #endif case _DRM_SCATTER_GATHER: case _DRM_SHM: #if defined(__FreeBSD__) && __FreeBSD_version >= 500102 - *paddr = vtophys(offset); + *paddr = vtophys(ap->a_offset); + return 0; +#elif defined(__DragonFly__) + ap->a_result = vtophys(ap->a_offset); return 0; #else - return atop(vtophys(offset)); + return atop(vtophys(ap->a_offset)); #endif default: - return -1; /* This should never happen. */ + return EINVAL; /* This should never happen. */ } DRM_DEBUG("bailing out\n"); - return -1; + return EINVAL; }