? drm_internal.h ? size Index: drmP.h =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drmP.h,v retrieving revision 1.28 diff -u -b -r1.28 drmP.h --- drmP.h 9 Jun 2008 06:49:55 -0000 1.28 +++ drmP.h 17 Jun 2008 20:48:44 -0000 @@ -59,6 +59,7 @@ #include #include #include +#include #include #ifdef __FreeBSD__ #include @@ -136,6 +137,7 @@ #include "drm.h" #include "drm_linux_list.h" #include "drm_atomic.h" +#include "drm_netbsd.h" #if defined(__FreeBSD__) || defined(__NetBSD__) #if defined(_KERNEL_OPT) @@ -238,13 +240,17 @@ #define DRM_STRUCTPROC struct proc #define DRM_STRUCTCDEVPROC struct lwp #define DRM_SPINTYPE kmutex_t -#define DRM_SPININIT(l,name) mutex_init(l, MUTEX_DEFAULT, IPL_VM) +#define DRM_SPININIT(l,name) mutex_init(l, MUTEX_DEFAULT, IPL_NONE) #define DRM_SPINUNINIT(l) mutex_destroy(l) #define DRM_SPINLOCK(l) mutex_enter(l) #define DRM_SPINUNLOCK(u) mutex_exit(u) -#define DRM_SPINLOCK_ASSERT(l) mutex_owned(l) -#define DRM_LOCK() DRM_SPINLOCK(&dev->dev_lock) -#define DRM_UNLOCK() DRM_SPINUNLOCK(&dev->dev_lock) +#ifdef LOCKDEBUG +#define DRM_SPINLOCK_ASSERT(l) KASSERT(mutex_owned(l)) +#else +#define DRM_SPINLOCK_ASSERT(l) do {} while (0) +#endif +#define DRM_LOCK() mutex_enter(&dev->dev_lock) +#define DRM_UNLOCK() mutex_exit(&dev->dev_lock) #define DRM_CURRENTPID curproc->p_pid #define DRM_SYSCTL_HANDLER_ARGS (SYSCTLFN_ARGS) #else @@ -515,11 +521,11 @@ #define DRM_WAIT_ON( ret, queue, timeout, condition ) \ for ( ret = 0 ; !ret && !(condition) ; ) { \ DRM_UNLOCK(); \ - mutex_enter(&dev->irq_lock); \ + mutex_spin_enter(&dev->irq_lock); \ if (!(condition)) \ ret = mtsleep(&(queue), PZERO | PCATCH, \ "drmwtq", (timeout), &dev->irq_lock); \ - mutex_exit(&dev->irq_lock); \ + mutex_spin_exit(&dev->irq_lock); \ DRM_LOCK(); \ } #else @@ -614,13 +620,10 @@ typedef struct drm_dma_handle { void *vaddr; bus_addr_t busaddr; - bus_dma_tag_t dmat; - bus_dmamap_t map; - bus_dma_segment_t segs[1]; + size_t size; - void *addr; + struct drm_dmamem *mem; } drm_dma_handle_t; -#define DRM_PCI_DMAADDR(p) ((p)->map->dm_segs[0].ds_addr) typedef struct drm_buf_entry { int buf_size; @@ -702,7 +705,11 @@ void *virtual; int pages; dma_addr_t *busaddr; - drm_dma_handle_t *dmah; /* Handle to PCI memory for ATI PCIGART table */ +/* + * Handle to PCI memory for GART table + */ + drm_dma_handle_t *dmah; + struct drm_dmamem *mem; } drm_sg_mem_t; typedef TAILQ_HEAD(drm_map_list, drm_local_map) drm_map_list_t; @@ -726,6 +733,8 @@ #ifdef __NetBSD__ int *cnt; bus_size_t mapsize; + u_long cookie; /* mmap cookie */ + struct drm_dmamem *mem; #endif TAILQ_ENTRY(drm_local_map) link; } drm_local_map_t; @@ -934,6 +943,10 @@ void *dev_private; unsigned int agp_buffer_token; drm_local_map_t *agp_buffer_map; + +#if defined(__NetBSD__) + struct extent *ex; /* Extent map for mmap cookies */ +#endif }; extern int drm_debug_flag; @@ -979,8 +992,14 @@ #endif /* __NetBSD__ || __OpenBSD__ */ /* Memory management support (drm_memory.c) */ -void drm_mem_init(void); -void drm_mem_uninit(void); + +/* + * XXX The drm_mem_init/uninit functions originally took void arguments. + * However, these are sensible places to create/destroy the mmap cookie + * extent map, and so they now take a pointer to the "drm device". + */ +void drm_mem_init(struct drm_device *); +void drm_mem_uninit(struct drm_device *); void *drm_alloc(size_t size, int area); void *drm_calloc(size_t nmemb, size_t size, int area); void *drm_realloc(void *oldpt, size_t oldsize, size_t size, @@ -1154,9 +1173,12 @@ { drm_local_map_t *map; + /* NOTE: this code must be remain in harmony with related code + * in drm_mmap(), drm_addmap_ioctl(), and/or drm_rmmap(). + */ DRM_SPINLOCK_ASSERT(&dev->dev_lock); TAILQ_FOREACH(map, &dev->maplist, link) { - if (map->offset == offset) + if (map->cookie == offset) return map; } return NULL; Index: drm_auth.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_auth.c,v retrieving revision 1.4 diff -u -b -r1.4 drm_auth.c --- drm_auth.c 11 Dec 2007 11:17:31 -0000 1.4 +++ drm_auth.c 17 Jun 2008 20:48:44 -0000 @@ -79,7 +79,6 @@ entry->priv = priv; entry->next = NULL; - DRM_LOCK(); if (dev->magiclist[hash].tail) { dev->magiclist[hash].tail->next = entry; dev->magiclist[hash].tail = entry; @@ -87,7 +86,6 @@ dev->magiclist[hash].head = entry; dev->magiclist[hash].tail = entry; } - DRM_UNLOCK(); return 0; } Index: drm_bufs.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_bufs.c,v retrieving revision 1.7 diff -u -b -r1.7 drm_bufs.c --- drm_bufs.c 4 May 2008 20:09:32 -0000 1.7 +++ drm_bufs.c 17 Jun 2008 20:48:45 -0000 @@ -139,8 +139,10 @@ * initialization necessary. */ map = malloc(sizeof(*map), M_DRM, M_ZERO | M_NOWAIT); - if ( !map ) + if ( !map ) { + DRM_LOCK(); return DRM_ERR(ENOMEM); + } map->offset = offset; map->size = size; @@ -148,6 +150,20 @@ map->flags = flags; map->cnt = NULL; /* cnt, mapsize added for NetBSD port */ map->mapsize = 0; + map->cookie = 0; + + /* XXX We're not managing any actual address space here; we simply + * need to assign unique and sane cookies as to not offend + * the device pager. + */ + extent_alloc(dev->ex, map->size, PAGE_SIZE, 0, EX_FAST|EX_WAITOK, + &map->cookie); + if (map->cookie == 0) { + DRM_DEBUG("could not allocate entry for mmap cookie in extent map!\n"); + free(map, M_DRM); + DRM_LOCK(); + return DRM_ERR(ENOMEM); + } switch ( map->type ) { case _DRM_REGISTERS: @@ -162,20 +178,22 @@ #endif break; case _DRM_SHM: - map->handle = malloc(map->size, M_DRM, M_NOWAIT); + map->mem = drm_dmamem_pgalloc(dev, btop(map->size)); DRM_DEBUG( "%lu %d %p\n", map->size, drm_order(map->size), map->handle ); - if ( !map->handle ) { + if ( map->mem == NULL ) { free(map, M_DRM); + DRM_LOCK(); return DRM_ERR(ENOMEM); } - map->offset = (unsigned long)map->handle; + map->handle = map->mem->dd_kva; + map->offset = map->mem->dd_dmam->dm_segs[0].ds_addr; if ( map->flags & _DRM_CONTAINS_LOCK ) { /* Prevent a 2nd X Server from creating a 2nd lock */ DRM_LOCK(); if (dev->lock.hw_lock != NULL) { DRM_UNLOCK(); - free(map->handle, M_DRM); + drm_dmamem_free(map->mem); free(map, M_DRM); return DRM_ERR(EBUSY); } @@ -197,15 +215,18 @@ } if (!valid) { free(map, M_DRM); + DRM_LOCK(); return DRM_ERR(EACCES); }*/ break; case _DRM_SCATTER_GATHER: if (!dev->sg) { free(map, M_DRM); + DRM_LOCK(); return DRM_ERR(EINVAL); } map->offset = map->offset + dev->sg->handle; + map->mem = dev->sg->mem; break; case _DRM_CONSISTENT: /* Unfortunately, we don't get any alignment specification from @@ -220,14 +241,17 @@ map->dmah = drm_pci_alloc(dev, map->size, align, 0xfffffffful); if (map->dmah == NULL) { free(map, M_DRM); + DRM_LOCK(); return DRM_ERR(ENOMEM); } map->handle = map->dmah->vaddr; map->offset = map->dmah->busaddr; + map->mem = map->dmah->mem; break; default: DRM_ERROR("Bad map type %d\n", map->type); free(map, M_DRM); + DRM_LOCK(); return DRM_ERR(EINVAL); } @@ -274,8 +298,11 @@ request.mtrr = map->mtrr; request.handle = map->handle; + /* NOTE: ensure this code harmonizes with drm_core_findmap(), + * drm_mmap(), and/or drm_rmmap(). + */ if (request.type != _DRM_SHM) { - request.handle = (void *)request.offset; + request.handle = (void *)map->cookie; } else { request.handle = (void *)DRM_NETBSD_ADDR2HANDLE((uintptr_t)map->handle); } @@ -304,7 +331,7 @@ #endif break; case _DRM_SHM: - free(map->handle, M_DRM); + drm_dmamem_free(map->mem); break; case _DRM_AGP: case _DRM_SCATTER_GATHER: @@ -314,6 +341,8 @@ break; } + extent_free(dev->ex, map->cookie, map->size, EX_WAITOK); + TAILQ_REMOVE(&dev->maplist, map, link); free(map, M_DRM); } @@ -771,7 +800,6 @@ { int order, ret; - DRM_SPINLOCK(&dev->dma_lock); if (request->count < 0 || request->count > 4096) return DRM_ERR(EINVAL); @@ -780,6 +808,8 @@ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER) return DRM_ERR(EINVAL); + DRM_SPINLOCK(&dev->dma_lock); + /* No more allocations after first buffer-using ioctl. */ if (dev->buf_use != 0) { DRM_SPINUNLOCK(&dev->dma_lock); @@ -802,7 +832,6 @@ { int order, ret; - DRM_SPINLOCK(&dev->dma_lock); if (!DRM_SUSER(DRM_CURPROC)) return DRM_ERR(EACCES); @@ -814,6 +843,8 @@ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER) return DRM_ERR(EINVAL); + DRM_SPINLOCK(&dev->dma_lock); + /* No more allocations after first buffer-using ioctl. */ if (dev->buf_use != 0) { DRM_SPINUNLOCK(&dev->dma_lock); @@ -836,7 +867,6 @@ { int order, ret; - DRM_SPINLOCK(&dev->dma_lock); if (!DRM_SUSER(DRM_CURPROC)) return DRM_ERR(EACCES); @@ -848,6 +878,8 @@ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER) return DRM_ERR(EINVAL); + DRM_SPINLOCK(&dev->dma_lock); + /* No more allocations after first buffer-using ioctl. */ if (dev->buf_use != 0) { DRM_SPINUNLOCK(&dev->dma_lock); @@ -1052,8 +1084,9 @@ retcode = EINVAL; goto done; } + /* XXX using cookie, not actual offset here */ size = round_page(map->size); - foff = map->offset; + foff = map->cookie; } else { size = round_page(dma->byte_count), foff = 0; Index: drm_drv.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_drv.c,v retrieving revision 1.16 diff -u -b -r1.16 drm_drv.c --- drm_drv.c 30 May 2008 11:26:21 -0000 1.16 +++ drm_drv.c 17 Jun 2008 20:48:45 -0000 @@ -451,7 +451,7 @@ TAILQ_INIT(&dev->maplist); - drm_mem_init(); + drm_mem_init(dev); drm_sysctl_init(dev); TAILQ_INIT(&dev->files); @@ -552,7 +552,7 @@ if (dev->driver.unload != NULL) dev->driver.unload(dev); - drm_mem_uninit(); + drm_mem_uninit(dev); DRM_SPINUNINIT(&dev->dev_lock); } Index: drm_irq.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_irq.c,v retrieving revision 1.12 diff -u -b -r1.12 drm_irq.c --- drm_irq.c 19 May 2008 00:17:39 -0000 1.12 +++ drm_irq.c 17 Jun 2008 20:48:45 -0000 @@ -68,9 +68,9 @@ irqreturn_t ret; drm_device_t *dev = (drm_device_t *)arg; - DRM_SPINLOCK(&dev->irq_lock); + mutex_spin_enter(&dev->irq_lock); ret = dev->driver.irq_handler(arg); - DRM_SPINUNLOCK(&dev->irq_lock); + mutex_spin_exit(&dev->irq_lock); return ret; } @@ -94,7 +94,7 @@ dev->context_flag = 0; - DRM_SPININIT(&dev->irq_lock, "DRM IRQ lock"); + mutex_init(&dev->irq_lock, MUTEX_SPIN, IPL_VM); /* Before installing handler */ @@ -124,7 +124,7 @@ err: DRM_LOCK(); dev->irq_enabled = 0; - DRM_SPINUNINIT(&dev->irq_lock); + mutex_destroy(&dev->irq_lock); DRM_UNLOCK(); return retcode; } @@ -141,7 +141,7 @@ dev->driver.irq_uninstall(dev); pci_intr_disestablish(dev->pa.pa_pc, dev->irqh); - DRM_SPINUNINIT(&dev->irq_lock); + mutex_destroy(&dev->irq_lock); return 0; } @@ -209,9 +209,9 @@ vblwait.reply.sequence = atomic_read(&dev->vbl_received); - DRM_SPINLOCK(&dev->irq_lock); + mutex_spin_enter(&dev->irq_lock); TAILQ_INSERT_HEAD(&dev->vbl_sig_list, vbl_sig, link); - DRM_SPINUNLOCK(&dev->irq_lock); + mutex_spin_exit(&dev->irq_lock); ret = 0; #endif ret = EINVAL; Index: drm_memory.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_memory.c,v retrieving revision 1.12 diff -u -b -r1.12 drm_memory.c --- drm_memory.c 19 May 2008 21:05:37 -0000 1.12 +++ drm_memory.c 17 Jun 2008 20:48:45 -0000 @@ -58,20 +58,23 @@ MALLOC_DEFINE(M_DRM, "drm", "DRM Data Structures"); #endif -void drm_mem_init(void) +void drm_mem_init(struct drm_device *dev) { -/* - malloc_type_attach(M_DRM); -*/ + + dev->ex = extent_create("drm", 0x00000000, 0x40000000, + M_DRM, NULL, 0, EX_NOWAIT); + if (dev->ex == NULL) + DRM_DEBUG("could not create extent map!\n"); } -void drm_mem_uninit(void) +void drm_mem_uninit(struct drm_device *dev) { + extent_destroy(dev->ex); } void *drm_alloc(size_t size, int area) { - return malloc(size, M_DRM, M_NOWAIT); + return malloc(1 * size, M_DRM, M_NOWAIT); } void *drm_calloc(size_t nmemb, size_t size, int area) Index: drm_pci.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_pci.c,v retrieving revision 1.10 diff -u -b -r1.10 drm_pci.c --- drm_pci.c 6 May 2008 01:45:47 -0000 1.10 +++ drm_pci.c 17 Jun 2008 20:48:45 -0000 @@ -35,55 +35,22 @@ drm_pci_alloc(drm_device_t *dev, size_t size, size_t align, dma_addr_t maxaddr) { drm_dma_handle_t *h; - int error, nsegs; - - - /* Need power-of-two alignment, so fail the allocation if it isn't. */ - if ((align & (align - 1)) != 0) { - DRM_ERROR("drm_pci_alloc with non-power-of-two alignment %d\n", - (int)align); - return NULL; - } h = malloc(sizeof(drm_dma_handle_t), M_DRM, M_ZERO | M_NOWAIT); if (h == NULL) return NULL; - if ((error = bus_dmamem_alloc(dev->pa.pa_dmat, size, align, 0, - h->segs, 1, &nsegs, BUS_DMA_NOWAIT)) != 0) { - printf("drm: Unable to allocate DMA, error %d\n", error); - goto fail; - } - if ((error = bus_dmamem_map(dev->pa.pa_dmat, h->segs, nsegs, size, - &h->addr, BUS_DMA_NOWAIT | BUS_DMA_COHERENT)) != 0) { - printf("drm: Unable to map DMA, error %d\n", error); - goto free; - } - if ((error = bus_dmamap_create(dev->pa.pa_dmat, size, 1, size, 0, - BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &h->map)) != 0) { - printf("drm: Unable to create DMA map, error %d\n", error); - goto unmap; - } - if ((error = bus_dmamap_load(dev->pa.pa_dmat, h->map, h->addr, size, - NULL, BUS_DMA_NOWAIT)) != 0) { - printf("drm: Unable to load DMA map, error %d\n", error); - goto destroy; - } - h->busaddr = DRM_PCI_DMAADDR(h); - h->vaddr = h->addr; - h->size = size; - - return h; -destroy: - bus_dmamap_destroy(dev->pa.pa_dmat, h->map); -unmap: - bus_dmamem_unmap(dev->pa.pa_dmat, h->addr, size); -free: - bus_dmamem_free(dev->pa.pa_dmat, h->segs, 1); -fail: + h->mem = drm_dmamem_pgalloc(dev, round_page(btop(size))); + if (h->mem == NULL) { free(h, M_DRM); return NULL; + } + + h->busaddr = DRM_DMAMEM_BUSADDR(h->mem); + h->vaddr = DRM_DMAMEM_KERNADDR(h->mem); + + return h; } @@ -96,10 +63,7 @@ { if (h == NULL) return; - bus_dmamap_unload(dev->pa.pa_dmat, h->map); - bus_dmamap_destroy(dev->pa.pa_dmat, h->map); - bus_dmamem_unmap(dev->pa.pa_dmat, h->addr, h->size); - bus_dmamem_free(dev->pa.pa_dmat, h->segs, 1); + drm_dmamem_free(h->mem); free(h, M_DRM); } Index: drm_scatter.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_scatter.c,v retrieving revision 1.4 diff -u -b -r1.4 drm_scatter.c --- drm_scatter.c 15 Dec 2007 00:39:26 -0000 1.4 +++ drm_scatter.c 17 Jun 2008 20:48:45 -0000 @@ -41,23 +41,27 @@ #define DEBUG_SCATTER 0 -void drm_sg_cleanup(drm_sg_mem_t *entry) +void +drm_sg_cleanup(drm_sg_mem_t *entry) { - free((void *)entry->handle, M_DRM); + if (entry) { + if (entry->mem) + drm_dmamem_free(entry->mem); + if (entry->busaddr) free(entry->busaddr, M_DRM); free(entry, M_DRM); } +} -int drm_sg_alloc(DRM_IOCTL_ARGS) +int +drm_sg_alloc(DRM_IOCTL_ARGS) { DRM_DEVICE; - drm_scatter_gather_t request; drm_sg_mem_t *entry; + drm_scatter_gather_t request; unsigned long pages; int i; - DRM_DEBUG( "%s\n", __func__ ); - if ( dev->sg ) return EINVAL; @@ -80,17 +84,23 @@ return ENOMEM; } - entry->handle = (long)malloc(pages << PAGE_SHIFT, M_DRM, - M_WAITOK | M_ZERO); - if (entry->handle == 0) { + if ((entry->mem = drm_dmamem_pgalloc(dev, pages)) == NULL) { drm_sg_cleanup(entry); return ENOMEM; } - for (i = 0; i < pages; i++) { - entry->busaddr[i] = vtophys(entry->handle + i * PAGE_SIZE); + entry->handle = (unsigned long)entry->mem->dd_kva; + + if (pages != entry->mem->dd_dmam->dm_nsegs) { + DRM_DEBUG("pages (%ld) != nsegs (%i)\n", pages, + entry->mem->dd_dmam->dm_nsegs); + drm_sg_cleanup(entry); + return ENOMEM; } + for (i = 0; i < pages; i++) + entry->busaddr[i] = entry->mem->dd_dmam->dm_segs[i].ds_addr; + DRM_DEBUG( "sg alloc handle = %08lx\n", entry->handle ); entry->virtual = (void *)entry->handle; @@ -112,20 +122,21 @@ return 0; } -int drm_sg_free(DRM_IOCTL_ARGS) +int +drm_sg_free(DRM_IOCTL_ARGS) { DRM_DEVICE; drm_scatter_gather_t request; drm_sg_mem_t *entry; - DRM_COPY_FROM_USER_IOCTL( request, (drm_scatter_gather_t *)data, - sizeof(request) ); - DRM_LOCK(); entry = dev->sg; dev->sg = NULL; DRM_UNLOCK(); + DRM_COPY_FROM_USER_IOCTL( request, (drm_scatter_gather_t *)data, + sizeof(request) ); + if ( !entry || entry->handle != request.handle ) return EINVAL; Index: drm_vm.c =================================================================== RCS file: /cvsroot/src/sys/dev/drm/drm_vm.c,v retrieving revision 1.10 diff -u -b -r1.10 drm_vm.c --- drm_vm.c 4 May 2008 21:43:01 -0000 1.10 +++ drm_vm.c 17 Jun 2008 20:48:45 -0000 @@ -86,13 +86,20 @@ roffset = DRM_NETBSD_HANDLE2ADDR(offset); TAILQ_FOREACH(map, &dev->maplist, link) { if (map->type == _DRM_SHM) { - if (roffset >= (uintptr_t)map->handle && roffset < (uintptr_t)map->handle + map->size) + if ((roffset >= (uintptr_t)map->handle) && + (roffset < (uintptr_t)map->handle + map->size)) { + DRM_DEBUG("found _DRM_SHM map for offset (%lx)\n", roffset); break; + } } else { - if (offset >= map->offset && offset < map->offset + map->size) + if ((offset >= map->cookie) && + (offset < map->cookie + map->size)) { + DRM_DEBUG("found cookie (%lx) for offset (%lx)", map->cookie, offset); + offset -= map->cookie; break; } } + } if (map == NULL) { DRM_UNLOCK(); @@ -111,16 +118,22 @@ case _DRM_FRAME_BUFFER: case _DRM_REGISTERS: case _DRM_AGP: - phys = offset; + phys = offset + map->offset; break; + /* All _DRM_CONSISTENT and _DRM_SHM mappings have a 0 offset */ case _DRM_CONSISTENT: - phys = vtophys((paddr_t)map->handle + (offset - map->offset)); + return bus_dmamem_mmap(dev->pa.pa_dmat, map->dmah->mem->dd_segs, + map->dmah->mem->dd_nsegs, 0, prot, BUS_DMA_NOWAIT| + BUS_DMA_NOCACHE); + case _DRM_SHM: + return bus_dmamem_mmap(dev->pa.pa_dmat, map->mem->dd_segs, + map->mem->dd_nsegs, 0, prot, BUS_DMA_NOWAIT); break; case _DRM_SCATTER_GATHER: - phys = vtophys(offset); - break; - case _DRM_SHM: - phys = vtophys(DRM_NETBSD_HANDLE2ADDR(offset)); + return bus_dmamem_mmap(dev->pa.pa_dmat, + dev->sg->mem->dd_segs, dev->sg->mem->dd_nsegs, + map->offset - dev->sg->handle + offset, prot, + BUS_DMA_NOWAIT|BUS_DMA_NOCACHE); break; default: DRM_ERROR("bad map type %d\n", type); @@ -133,4 +146,3 @@ return atop(phys); #endif } - Index: files.drm =================================================================== RCS file: /cvsroot/src/sys/dev/drm/files.drm,v retrieving revision 1.2 diff -u -b -r1.2 files.drm --- files.drm 28 Mar 2007 11:29:37 -0000 1.2 +++ files.drm 17 Jun 2008 20:48:45 -0000 @@ -15,6 +15,7 @@ file dev/drm/drm_irq.c drmbase file dev/drm/drm_lock.c drmbase file dev/drm/drm_memory.c drmbase +file dev/drm/drm_netbsd.c drmbase file dev/drm/drm_pci.c drmbase file dev/drm/drm_scatter.c drmbase file dev/drm/drm_sysctl.c drmbase