Clean up BSD MTRR handling. The NetBSD code is untested, but it's my best
authorEric Anholt <anholt@freebsd.org>
Mon, 20 Oct 2003 00:55:56 +0000 (00:55 +0000)
committerEric Anholt <anholt@freebsd.org>
Mon, 20 Oct 2003 00:55:56 +0000 (00:55 +0000)
    shot.

12 files changed:
bsd-core/drmP.h
bsd-core/drm_bufs.c
bsd-core/drm_drv.c
bsd-core/drm_memory.c
bsd-core/drm_os_freebsd.h
bsd-core/drm_os_netbsd.h
bsd/drmP.h
bsd/drm_bufs.h
bsd/drm_drv.h
bsd/drm_memory.h
bsd/drm_os_freebsd.h
bsd/drm_os_netbsd.h

index 6791537..b2e045e 100644 (file)
@@ -403,6 +403,8 @@ extern void      *DRM(realloc)(void *oldpt, size_t oldsize, size_t size,
 extern void         DRM(free)(void *pt, size_t size, int area);
 extern void         *DRM(ioremap)(drm_device_t *dev, drm_local_map_t *map);
 extern void         DRM(ioremapfree)(drm_local_map_t *map);
+extern int      DRM(mtrr_add)(unsigned long offset, size_t size, int flags);
+extern int      DRM(mtrr_del)(unsigned long offset, size_t size, int flags);
 
 #if __REALLY_HAVE_AGP
 extern agp_memory    *DRM(alloc_agp)(int pages, u32 type);
index cdd2359..0dc923d 100644 (file)
@@ -115,25 +115,12 @@ int DRM(addmap)( DRM_IOCTL_ARGS )
 #if __REALLY_HAVE_MTRR
                if ( map->type == _DRM_FRAME_BUFFER ||
                     (map->flags & _DRM_WRITE_COMBINING) ) {
-#ifdef __FreeBSD__
-                       int retcode = 0, act;
-                       struct mem_range_desc mrdesc;
-                       mrdesc.mr_base = map->offset;
-                       mrdesc.mr_len = map->size;
-                       mrdesc.mr_flags = MDF_WRITECOMBINE;
-                       act = MEMRANGE_SET_UPDATE;
-                       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
-                       retcode = mem_range_attr_set(&mrdesc, &act);
-                       map->mtrr=1;
-#elif defined __NetBSD__
-                       struct mtrr mtrrmap;
-                       int one = 1;
-                       mtrrmap.base = map->offset;
-                       mtrrmap.len = map->size;
-                       mtrrmap.type = MTRR_TYPE_WC;
-                       mtrrmap.flags = MTRR_VALID;
-                       map->mtrr = mtrr_set( &mtrrmap, &one, p, MTRR_GETSET_KERNEL );
-#endif
+                       int mtrr;
+                            
+                       mtrr = DRM(mtrr_add)(map->offset, map->size,
+                            DRM_MTRR_WC);
+                       if (mtrr == 0)
+                               map->mtrr = 1;
                }
 #endif /* __REALLY_HAVE_MTRR */
                DRM_IOREMAP(map, dev);
@@ -235,29 +222,11 @@ int DRM(rmmap)( DRM_IOCTL_ARGS )
        case _DRM_FRAME_BUFFER:
 #if __REALLY_HAVE_MTRR
                if (map->mtrr >= 0) {
-                       int retcode;
-#ifdef __FreeBSD__
-                       int act;
-                       struct mem_range_desc mrdesc;
-                       mrdesc.mr_base = map->offset;
-                       mrdesc.mr_len = map->size;
-                       mrdesc.mr_flags = MDF_WRITECOMBINE;
-                       act = MEMRANGE_SET_REMOVE;
-                       bcopy(DRIVER_NAME, &mrdesc.mr_owner,
-                           strlen(DRIVER_NAME));
-                       retcode = mem_range_attr_set(&mrdesc, &act);
-#elif defined __NetBSD__
-                       struct mtrr mtrrmap;
-                       int one = 1;
-                       mtrrmap.base = map->offset;
-                       mtrrmap.len = map->size;
-                       mtrrmap.type = 0;
-                       mtrrmap.flags = 0;
-                       mtrrmap.owner = p->p_pid;
-                       retcode = mtrr_set(&mtrrmap, &one, p,
-                           MTRR_GETSET_KERNEL);
-                       DRM_DEBUG("mtrr_del = %d\n", retcode);
-#endif
+                       int __unused mtrr;
+                       
+                       mtrr = DRM(mtrr_del)(map->offset, map->size,
+                           DRM_MTRR_WC);
+                       DRM_DEBUG("mtrr_del = %d\n", mtrr);
                }
 #endif
                DRM(ioremapfree)(map);
index 731f31d..269f422 100644 (file)
@@ -565,28 +565,11 @@ static int DRM(takedown)( drm_device_t *dev )
                        case _DRM_FRAME_BUFFER:
 #if __REALLY_HAVE_MTRR
                                if ( map->mtrr >= 0 ) {
-                                       int retcode;
-#ifdef __FreeBSD__
-                                       int act;
-                                       struct mem_range_desc mrdesc;
-                                       mrdesc.mr_base = map->offset;
-                                       mrdesc.mr_len = map->size;
-                                       mrdesc.mr_flags = MDF_WRITECOMBINE;
-                                       act = MEMRANGE_SET_REMOVE;
-                                       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
-                                       retcode = mem_range_attr_set(&mrdesc, &act);
-                                       map->mtrr=1;
-#elif defined __NetBSD__
-                                       struct mtrr mtrrmap;
-                                       int one = 1;
-                                       mtrrmap.base = map->offset;
-                                       mtrrmap.len = map->size;
-                                       mtrrmap.type = MTRR_TYPE_WC;
-                                       mtrrmap.flags = 0;
-                                       retcode = mtrr_set( &mtrrmap, &one, 
-                                               DRM_CURPROC, MTRR_GETSET_KERNEL);
-#endif
-                                       DRM_DEBUG( "mtrr_del=%d\n", retcode );
+                                       int __unused mtrr;
+
+                                       mtrr = DRM(mtrr_del)(map->offset,
+                                           map->size, DRM_MTRR_WC);
+                                       DRM_DEBUG("mtrr_del=%d\n", mtrr);
                                }
 #endif
                                DRM(ioremapfree)( map );
@@ -680,25 +663,12 @@ static int DRM(init)( device_t nbdev )
 #endif /* __MUST_HAVE_AGP */
 #if __REALLY_HAVE_MTRR
        if (dev->agp) {
-#ifdef __FreeBSD__
-               int retcode = 0, act;
-               struct mem_range_desc mrdesc;
-               mrdesc.mr_base = dev->agp->info.ai_aperture_base;
-               mrdesc.mr_len = dev->agp->info.ai_aperture_size;
-               mrdesc.mr_flags = MDF_WRITECOMBINE;
-               act = MEMRANGE_SET_UPDATE;
-               bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
-               retcode = mem_range_attr_set(&mrdesc, &act);
-               dev->agp->agp_mtrr=1;
-#elif defined __NetBSD__
-               struct mtrr mtrrmap;
-               int one = 1;
-               mtrrmap.base = dev->agp->info.ai_aperture_base;
-               mtrrmap.len = dev->agp->info.ai_aperture_size;
-               mtrrmap.type = MTRR_TYPE_WC;
-               mtrrmap.flags = MTRR_VALID;
-               dev->agp->agp_mtrr = mtrr_set( &mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
-#endif /* __NetBSD__ */
+               int retcode;
+               
+               retcode = DRM(mtrr_add)(dev->agp->info.ai_aperture_base,
+                   dev->agp->info.ai_aperture_size, DRM_MTRR_WC);
+               if (retcode == 0)
+                       dev->agp->agp_mtrr=1;
        }
 #endif /* __REALLY_HAVE_MTRR */
 #endif /* __REALLY_HAVE_AGP */
@@ -742,12 +712,6 @@ error:
  */
 static void DRM(cleanup)(drm_device_t *dev)
 {
-#ifdef __NetBSD__
-#if __REALLY_HAVE_MTRR
-       struct mtrr mtrrmap;
-       int one = 1;
-#endif /* __REALLY_HAVE_MTRR */
-#endif /* __NetBSD__ */
 
        DRM_DEBUG( "\n" );
 
@@ -761,13 +725,11 @@ static void DRM(cleanup)(drm_device_t *dev)
 
 #if __REALLY_HAVE_AGP && __REALLY_HAVE_MTRR
        if ( dev->agp && dev->agp->agp_mtrr >= 0) {
-#if defined(__NetBSD__)
-               mtrrmap.base = dev->agp->info.ai_aperture_base;
-               mtrrmap.len = dev->agp->info.ai_aperture_size;
-               mtrrmap.type = 0;
-               mtrrmap.flags = 0;
-               mtrr_set( &mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
-#endif
+               int __unused mtrr;
+
+               mtrr = DRM(mtrr_del)(dev->agp->info.ai_aperture_base,
+                   dev->agp->info.ai_aperture_size, DRM_MTRR_WC);
+               DRM_DEBUG("mtrr_del=%d\n", mtrr);
        }
 #endif
 
index dc0d375..a50e6c4 100644 (file)
@@ -124,5 +124,62 @@ int DRM(unbind_agp)(agp_memory *handle)
 {
        return DRM(agp_unbind_memory)(handle);
 }
+
+#ifdef __FreeBSD__
+int
+DRM(mtrr_add)(unsigned long offset, size_t size, int flags)
+{
+       int act;
+       struct mem_range_desc mrdesc;
+
+       mrdesc.mr_base = offset;
+       mrdesc.mr_len = size;
+       mrdesc.mr_flags = flags;
+       act = MEMRANGE_SET_UPDATE;
+       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
+       return mem_range_attr_set(&mrdesc, &act);
+}
+
+int
+DRM(mtrr_del)(unsigned long offset, size_t size, int flags)
+{
+       int act;
+       struct mem_range_desc mrdesc;
+
+       mrdesc.mr_base = offset;
+       mrdesc.mr_len = size;
+       mrdesc.mr_flags = flags;
+       act = MEMRANGE_SET_REMOVE;
+       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
+       return mem_range_attr_set(&mrdesc, &act);
+}
+#elif defined(__NetBSD__)
+int
+DRM(mtrr_add)(unsigned long offset, size_t size, int flags)
+{
+       struct mtrr mtrrmap;
+       int one = 1;
+
+       mtrrmap.base = offset;
+       mtrrmap.len = size;
+       mtrrmap.type = flags;
+       mtrrmap.flags = MTRR_VALID;
+       return mtrr_set(&mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
+}
+
+int
+DRM(mtrr_del)(unsigned long offset, size_t size, int flags)
+{
+       struct mtrr mtrrmap;
+       int one = 1;
+
+       mtrrmap.base = offset;
+       mtrrmap.len = size;
+       mtrrmap.type = flags;
+       mtrrmap.flags = 0;
+       return mtrr_set(&mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
+}
+#endif
+
 #endif /* __REALLY_HAVE_AGP */
 #endif /* DEBUG_MEMORY */
index 320db34..33bdcd2 100644 (file)
@@ -171,6 +171,8 @@ typedef void                        irqreturn_t;
 #define DRM_AGP_FIND_DEVICE()  agp_find_device()
 #define DRM_ERR(v)             v
 
+#define DRM_MTRR_WC    MDF_WRITECOMBINE
+
 #define LOCK_TEST_WITH_RETURN(dev, filp)                               \
 do {                                                                   \
        if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) ||              \
index 7653b05..1554d24 100644 (file)
@@ -136,6 +136,8 @@ extern const int DRM(M_DRM) = M_DEVBUF;
 #define DRM_WRITE8(map, offset, val)   bus_space_write_1( (map)->iot, (map)->ioh, (offset), (val) )
 #define DRM_WRITE32(map, offset, val)  bus_space_write_4( (map)->iot, (map)->ioh, (offset), (val) )
 
+#define DRM_MTRR_WC    MTRR_TYPE_WC
+
 #define DRM_AGP_FIND_DEVICE()  agp_find_device(0)
 
 #define LOCK_TEST_WITH_RETURN(dev, filp)                               \
index 6791537..b2e045e 100644 (file)
@@ -403,6 +403,8 @@ extern void      *DRM(realloc)(void *oldpt, size_t oldsize, size_t size,
 extern void         DRM(free)(void *pt, size_t size, int area);
 extern void         *DRM(ioremap)(drm_device_t *dev, drm_local_map_t *map);
 extern void         DRM(ioremapfree)(drm_local_map_t *map);
+extern int      DRM(mtrr_add)(unsigned long offset, size_t size, int flags);
+extern int      DRM(mtrr_del)(unsigned long offset, size_t size, int flags);
 
 #if __REALLY_HAVE_AGP
 extern agp_memory    *DRM(alloc_agp)(int pages, u32 type);
index cdd2359..0dc923d 100644 (file)
@@ -115,25 +115,12 @@ int DRM(addmap)( DRM_IOCTL_ARGS )
 #if __REALLY_HAVE_MTRR
                if ( map->type == _DRM_FRAME_BUFFER ||
                     (map->flags & _DRM_WRITE_COMBINING) ) {
-#ifdef __FreeBSD__
-                       int retcode = 0, act;
-                       struct mem_range_desc mrdesc;
-                       mrdesc.mr_base = map->offset;
-                       mrdesc.mr_len = map->size;
-                       mrdesc.mr_flags = MDF_WRITECOMBINE;
-                       act = MEMRANGE_SET_UPDATE;
-                       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
-                       retcode = mem_range_attr_set(&mrdesc, &act);
-                       map->mtrr=1;
-#elif defined __NetBSD__
-                       struct mtrr mtrrmap;
-                       int one = 1;
-                       mtrrmap.base = map->offset;
-                       mtrrmap.len = map->size;
-                       mtrrmap.type = MTRR_TYPE_WC;
-                       mtrrmap.flags = MTRR_VALID;
-                       map->mtrr = mtrr_set( &mtrrmap, &one, p, MTRR_GETSET_KERNEL );
-#endif
+                       int mtrr;
+                            
+                       mtrr = DRM(mtrr_add)(map->offset, map->size,
+                            DRM_MTRR_WC);
+                       if (mtrr == 0)
+                               map->mtrr = 1;
                }
 #endif /* __REALLY_HAVE_MTRR */
                DRM_IOREMAP(map, dev);
@@ -235,29 +222,11 @@ int DRM(rmmap)( DRM_IOCTL_ARGS )
        case _DRM_FRAME_BUFFER:
 #if __REALLY_HAVE_MTRR
                if (map->mtrr >= 0) {
-                       int retcode;
-#ifdef __FreeBSD__
-                       int act;
-                       struct mem_range_desc mrdesc;
-                       mrdesc.mr_base = map->offset;
-                       mrdesc.mr_len = map->size;
-                       mrdesc.mr_flags = MDF_WRITECOMBINE;
-                       act = MEMRANGE_SET_REMOVE;
-                       bcopy(DRIVER_NAME, &mrdesc.mr_owner,
-                           strlen(DRIVER_NAME));
-                       retcode = mem_range_attr_set(&mrdesc, &act);
-#elif defined __NetBSD__
-                       struct mtrr mtrrmap;
-                       int one = 1;
-                       mtrrmap.base = map->offset;
-                       mtrrmap.len = map->size;
-                       mtrrmap.type = 0;
-                       mtrrmap.flags = 0;
-                       mtrrmap.owner = p->p_pid;
-                       retcode = mtrr_set(&mtrrmap, &one, p,
-                           MTRR_GETSET_KERNEL);
-                       DRM_DEBUG("mtrr_del = %d\n", retcode);
-#endif
+                       int __unused mtrr;
+                       
+                       mtrr = DRM(mtrr_del)(map->offset, map->size,
+                           DRM_MTRR_WC);
+                       DRM_DEBUG("mtrr_del = %d\n", mtrr);
                }
 #endif
                DRM(ioremapfree)(map);
index 731f31d..269f422 100644 (file)
@@ -565,28 +565,11 @@ static int DRM(takedown)( drm_device_t *dev )
                        case _DRM_FRAME_BUFFER:
 #if __REALLY_HAVE_MTRR
                                if ( map->mtrr >= 0 ) {
-                                       int retcode;
-#ifdef __FreeBSD__
-                                       int act;
-                                       struct mem_range_desc mrdesc;
-                                       mrdesc.mr_base = map->offset;
-                                       mrdesc.mr_len = map->size;
-                                       mrdesc.mr_flags = MDF_WRITECOMBINE;
-                                       act = MEMRANGE_SET_REMOVE;
-                                       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
-                                       retcode = mem_range_attr_set(&mrdesc, &act);
-                                       map->mtrr=1;
-#elif defined __NetBSD__
-                                       struct mtrr mtrrmap;
-                                       int one = 1;
-                                       mtrrmap.base = map->offset;
-                                       mtrrmap.len = map->size;
-                                       mtrrmap.type = MTRR_TYPE_WC;
-                                       mtrrmap.flags = 0;
-                                       retcode = mtrr_set( &mtrrmap, &one, 
-                                               DRM_CURPROC, MTRR_GETSET_KERNEL);
-#endif
-                                       DRM_DEBUG( "mtrr_del=%d\n", retcode );
+                                       int __unused mtrr;
+
+                                       mtrr = DRM(mtrr_del)(map->offset,
+                                           map->size, DRM_MTRR_WC);
+                                       DRM_DEBUG("mtrr_del=%d\n", mtrr);
                                }
 #endif
                                DRM(ioremapfree)( map );
@@ -680,25 +663,12 @@ static int DRM(init)( device_t nbdev )
 #endif /* __MUST_HAVE_AGP */
 #if __REALLY_HAVE_MTRR
        if (dev->agp) {
-#ifdef __FreeBSD__
-               int retcode = 0, act;
-               struct mem_range_desc mrdesc;
-               mrdesc.mr_base = dev->agp->info.ai_aperture_base;
-               mrdesc.mr_len = dev->agp->info.ai_aperture_size;
-               mrdesc.mr_flags = MDF_WRITECOMBINE;
-               act = MEMRANGE_SET_UPDATE;
-               bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
-               retcode = mem_range_attr_set(&mrdesc, &act);
-               dev->agp->agp_mtrr=1;
-#elif defined __NetBSD__
-               struct mtrr mtrrmap;
-               int one = 1;
-               mtrrmap.base = dev->agp->info.ai_aperture_base;
-               mtrrmap.len = dev->agp->info.ai_aperture_size;
-               mtrrmap.type = MTRR_TYPE_WC;
-               mtrrmap.flags = MTRR_VALID;
-               dev->agp->agp_mtrr = mtrr_set( &mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
-#endif /* __NetBSD__ */
+               int retcode;
+               
+               retcode = DRM(mtrr_add)(dev->agp->info.ai_aperture_base,
+                   dev->agp->info.ai_aperture_size, DRM_MTRR_WC);
+               if (retcode == 0)
+                       dev->agp->agp_mtrr=1;
        }
 #endif /* __REALLY_HAVE_MTRR */
 #endif /* __REALLY_HAVE_AGP */
@@ -742,12 +712,6 @@ error:
  */
 static void DRM(cleanup)(drm_device_t *dev)
 {
-#ifdef __NetBSD__
-#if __REALLY_HAVE_MTRR
-       struct mtrr mtrrmap;
-       int one = 1;
-#endif /* __REALLY_HAVE_MTRR */
-#endif /* __NetBSD__ */
 
        DRM_DEBUG( "\n" );
 
@@ -761,13 +725,11 @@ static void DRM(cleanup)(drm_device_t *dev)
 
 #if __REALLY_HAVE_AGP && __REALLY_HAVE_MTRR
        if ( dev->agp && dev->agp->agp_mtrr >= 0) {
-#if defined(__NetBSD__)
-               mtrrmap.base = dev->agp->info.ai_aperture_base;
-               mtrrmap.len = dev->agp->info.ai_aperture_size;
-               mtrrmap.type = 0;
-               mtrrmap.flags = 0;
-               mtrr_set( &mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
-#endif
+               int __unused mtrr;
+
+               mtrr = DRM(mtrr_del)(dev->agp->info.ai_aperture_base,
+                   dev->agp->info.ai_aperture_size, DRM_MTRR_WC);
+               DRM_DEBUG("mtrr_del=%d\n", mtrr);
        }
 #endif
 
index dc0d375..a50e6c4 100644 (file)
@@ -124,5 +124,62 @@ int DRM(unbind_agp)(agp_memory *handle)
 {
        return DRM(agp_unbind_memory)(handle);
 }
+
+#ifdef __FreeBSD__
+int
+DRM(mtrr_add)(unsigned long offset, size_t size, int flags)
+{
+       int act;
+       struct mem_range_desc mrdesc;
+
+       mrdesc.mr_base = offset;
+       mrdesc.mr_len = size;
+       mrdesc.mr_flags = flags;
+       act = MEMRANGE_SET_UPDATE;
+       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
+       return mem_range_attr_set(&mrdesc, &act);
+}
+
+int
+DRM(mtrr_del)(unsigned long offset, size_t size, int flags)
+{
+       int act;
+       struct mem_range_desc mrdesc;
+
+       mrdesc.mr_base = offset;
+       mrdesc.mr_len = size;
+       mrdesc.mr_flags = flags;
+       act = MEMRANGE_SET_REMOVE;
+       bcopy(DRIVER_NAME, &mrdesc.mr_owner, strlen(DRIVER_NAME));
+       return mem_range_attr_set(&mrdesc, &act);
+}
+#elif defined(__NetBSD__)
+int
+DRM(mtrr_add)(unsigned long offset, size_t size, int flags)
+{
+       struct mtrr mtrrmap;
+       int one = 1;
+
+       mtrrmap.base = offset;
+       mtrrmap.len = size;
+       mtrrmap.type = flags;
+       mtrrmap.flags = MTRR_VALID;
+       return mtrr_set(&mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
+}
+
+int
+DRM(mtrr_del)(unsigned long offset, size_t size, int flags)
+{
+       struct mtrr mtrrmap;
+       int one = 1;
+
+       mtrrmap.base = offset;
+       mtrrmap.len = size;
+       mtrrmap.type = flags;
+       mtrrmap.flags = 0;
+       return mtrr_set(&mtrrmap, &one, NULL, MTRR_GETSET_KERNEL);
+}
+#endif
+
 #endif /* __REALLY_HAVE_AGP */
 #endif /* DEBUG_MEMORY */
index 320db34..33bdcd2 100644 (file)
@@ -171,6 +171,8 @@ typedef void                        irqreturn_t;
 #define DRM_AGP_FIND_DEVICE()  agp_find_device()
 #define DRM_ERR(v)             v
 
+#define DRM_MTRR_WC    MDF_WRITECOMBINE
+
 #define LOCK_TEST_WITH_RETURN(dev, filp)                               \
 do {                                                                   \
        if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) ||              \
index 7653b05..1554d24 100644 (file)
@@ -136,6 +136,8 @@ extern const int DRM(M_DRM) = M_DEVBUF;
 #define DRM_WRITE8(map, offset, val)   bus_space_write_1( (map)->iot, (map)->ioh, (offset), (val) )
 #define DRM_WRITE32(map, offset, val)  bus_space_write_4( (map)->iot, (map)->ioh, (offset), (val) )
 
+#define DRM_MTRR_WC    MTRR_TYPE_WC
+
 #define DRM_AGP_FIND_DEVICE()  agp_find_device(0)
 
 #define LOCK_TEST_WITH_RETURN(dev, filp)                               \