--- src/VBox/Additions/freebsd/drm/Makefile.orig 2014-11-21 10:16:41.000000000 -0500 +++ src/VBox/Additions/freebsd/drm/Makefile 2014-11-25 21:02:29.000000000 -0500 @@ -21,7 +21,7 @@ SRCS = \ vboxvideo_drm.c -SRCS += device_if.h bus_if.h pci_if.h opt_drm.h +SRCS += device_if.h bus_if.h pci_if.h opt_compat.h opt_drm.h opt_syscons.h .include --- src/VBox/Additions/freebsd/drm/Makefile.kmk.orig 2014-11-21 10:16:42.000000000 -0500 +++ src/VBox/Additions/freebsd/drm/Makefile.kmk 2014-11-25 21:01:27.000000000 -0500 @@ -58,15 +58,24 @@ $(PATH_STAGE)/gen-sys-hdrs/pci_if.h \ $(PATH_STAGE)/gen-sys-hdrs/bus_if.h \ $(PATH_STAGE)/gen-sys-hdrs/device_if.h \ - $(vboxvideo_drm_0_OUTDIR)/opt_drm.h + $(vboxvideo_drm_0_OUTDIR)/opt_compat.h \ + $(vboxvideo_drm_0_OUTDIR)/opt_drm.h \ + $(vboxvideo_drm_0_OUTDIR)/opt_syscons.h vboxvideo_drm_CLEAN.freebsd = $(vboxvideo_drm_DEPS) # -# Header for DRM not included by us. +# Headers for DRM not included by us. # +$$(vboxvideo_drm_0_OUTDIR)/opt_compat.h: + $(QUIET)$(MKDIR) -p $(vboxvideo_drm_0_OUTDIR) + $(QUIET)touch $(vboxvideo_drm_0_OUTDIR)/opt_compat.h + $$(vboxvideo_drm_0_OUTDIR)/opt_drm.h: $(QUIET)$(MKDIR) -p $(vboxvideo_drm_0_OUTDIR) $(QUIET)touch $(vboxvideo_drm_0_OUTDIR)/opt_drm.h -include $(FILE_KBUILD_SUB_FOOTER) +$$(vboxvideo_drm_0_OUTDIR)/opt_syscons.h: + $(QUIET)$(MKDIR) -p $(vboxvideo_drm_0_OUTDIR) + $(QUIET)touch $(vboxvideo_drm_0_OUTDIR)/opt_syscons.h +include $(FILE_KBUILD_SUB_FOOTER) --- src/VBox/Additions/freebsd/drm/vboxvideo_drm.c.orig 2014-11-21 10:16:42.000000000 -0500 +++ src/VBox/Additions/freebsd/drm/vboxvideo_drm.c 2014-11-25 21:56:22.000000000 -0500 @@ -54,8 +54,8 @@ #include __FBSDID("$FreeBSD$"); -#include "dev/drm/drmP.h" -#include "dev/drm/drm_pciids.h" +#include "dev/drm2/drmP.h" +#include "dev/drm2/drm_pciids.h" #define DRIVER_AUTHOR "Oracle Corporation" #define DRIVER_NAME "vboxvideo" @@ -74,32 +74,15 @@ vboxvideo_PCI_IDS }; -static void vboxvideo_configure(struct drm_device *dev) -{ -#if __FreeBSD_version >= 702000 - dev->driver->buf_priv_size = 1; /* No dev_priv */ - - dev->driver->max_ioctl = 0; - - dev->driver->name = DRIVER_NAME; - dev->driver->desc = DRIVER_DESC; - dev->driver->date = DRIVER_DATE; - dev->driver->major = DRIVER_MAJOR; - dev->driver->minor = DRIVER_MINOR; - dev->driver->patchlevel = DRIVER_PATCHLEVEL; -#else - dev->driver.buf_priv_size = 1; /* No dev_priv */ - - dev->driver.max_ioctl = 0; - - dev->driver.name = DRIVER_NAME; - dev->driver.desc = DRIVER_DESC; - dev->driver.date = DRIVER_DATE; - dev->driver.major = DRIVER_MAJOR; - dev->driver.minor = DRIVER_MINOR; - dev->driver.patchlevel = DRIVER_PATCHLEVEL; -#endif -} +static struct drm_driver_info kms_driver = { + .max_ioctl = 0, + .name = DRIVER_NAME, + .desc = DRIVER_DESC, + .date = DRIVER_DATE, + .major = DRIVER_MAJOR, + .minor = DRIVER_MINOR, + .patchlevel = DRIVER_PATCHLEVEL, +}; static int vboxvideo_probe(device_t kdev) @@ -112,52 +95,26 @@ { struct drm_device *dev = device_get_softc(kdev); -#if __FreeBSD_version >= 702000 - dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, - M_WAITOK | M_ZERO); -#else - bzero(&dev->driver, sizeof(struct drm_driver_info)); -#endif - - vboxvideo_configure(dev); - + dev->driver = &kms_driver; return drm_attach(kdev, vboxvideo_pciidlist); } -static int -vboxvideo_detach(device_t kdev) -{ - struct drm_device *dev = device_get_softc(kdev); - int ret; - - ret = drm_detach(kdev); - -#if __FreeBSD_version >= 702000 - free(dev->driver, DRM_MEM_DRIVER); -#endif - - return ret; -} - static device_method_t vboxvideo_methods[] = { /* Device interface */ DEVMETHOD(device_probe, vboxvideo_probe), DEVMETHOD(device_attach, vboxvideo_attach), - DEVMETHOD(device_detach, vboxvideo_detach), + DEVMETHOD(device_detach, drm_detach), - { 0, 0 } + DEVMETHOD_END }; static driver_t vboxvideo_driver = { - "drm", + "drmn", vboxvideo_methods, sizeof(struct drm_device) }; extern devclass_t drm_devclass; -#if __FreeBSD_version >= 700010 -DRIVER_MODULE(vboxvideo, vgapci, vboxvideo_driver, drm_devclass, 0, 0); -#else -DRIVER_MODULE(vboxvideo, pci, vboxvideo_driver, drm_devclass, 0, 0); -#endif -MODULE_DEPEND(vboxvideo, drm, 1, 1, 1); +DRIVER_MODULE_ORDERED(vboxvideo, vgapci, vboxvideo_driver, drm_devclass, + NULL, NULL, SI_ORDER_ANY); +MODULE_DEPEND(vboxvideo, drmn, 1, 1, 1);