Module Name: src Committed By: riastradh Date: Tue Mar 4 20:45:17 UTC 2014
Modified Files: src/sys/conf [riastradh-drm2]: files majors src/sys/dev/pci [riastradh-drm2]: files.pci src/sys/external/bsd/drm2/dist/include/drm [riastradh-drm2]: drmP.h src/sys/external/bsd/drm2/drm [riastradh-drm2]: drm_drv.c drm_fops.c drm_module.c drm_vm.c src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: i915_module.c src/sys/external/bsd/drm2/include/drm [riastradh-drm2]: drm_os_netbsd.h src/sys/external/bsd/drm2/linux [riastradh-drm2]: linux_work.c src/sys/external/bsd/drm2/pci [riastradh-drm2]: drm_pci_module.c Added Files: src/sys/external/bsd/drm2/drm [riastradh-drm2]: files.drmkms src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: files.i915drmkms src/sys/external/bsd/drm2/linux [riastradh-drm2]: files.drmkms_linux linux_module.c src/sys/external/bsd/drm2/pci [riastradh-drm2]: files.drmkms_pci src/sys/modules/drmkms [riastradh-drm2]: Makefile Makefile.inc drmkms.ioconf src/sys/modules/drmkms_linux [riastradh-drm2]: Makefile src/sys/modules/drmkms_pci [riastradh-drm2]: Makefile src/sys/modules/i915drmkms [riastradh-drm2]: Makefile i915drmkms.ioconf Removed Files: src/sys/external/bsd/drm2/conf [riastradh-drm2]: files.drm2 Log Message: Rework drm2 configuration and modularization. - Split drm2.kmod into drmkms_linux, drmkms, drmkms_pci. - Split up drmkms-related files.* similarly. - Make drm_agp_* routines hooks that the drmkms_pci module installs. - Reuse drm device major 180 for (old) drm and drmkms. Now old drm and new drmkms can coexist happily in the same tree, with or without PCI, and require no changes to userland. To generate a diff of this commit: cvs rdiff -u -r1.1077.2.3 -r1.1077.2.4 src/sys/conf/files cvs rdiff -u -r1.66.6.1 -r1.66.6.2 src/sys/conf/majors cvs rdiff -u -r1.364.6.2 -r1.364.6.3 src/sys/dev/pci/files.pci cvs rdiff -u -r1.1.2.7 -r0 src/sys/external/bsd/drm2/conf/files.drm2 cvs rdiff -u -r1.1.1.1.2.56 -r1.1.1.1.2.57 \ src/sys/external/bsd/drm2/dist/include/drm/drmP.h cvs rdiff -u -r1.1.2.35 -r1.1.2.36 src/sys/external/bsd/drm2/drm/drm_drv.c cvs rdiff -u -r1.1.2.8 -r1.1.2.9 src/sys/external/bsd/drm2/drm/drm_fops.c cvs rdiff -u -r1.1.2.9 -r1.1.2.10 src/sys/external/bsd/drm2/drm/drm_module.c cvs rdiff -u -r1.1.2.5 -r1.1.2.6 src/sys/external/bsd/drm2/drm/drm_vm.c cvs rdiff -u -r0 -r1.1.2.1 src/sys/external/bsd/drm2/drm/files.drmkms cvs rdiff -u -r0 -r1.1.2.1 src/sys/external/bsd/drm2/i915drm/files.i915drmkms cvs rdiff -u -r1.1.2.8 -r1.1.2.9 \ src/sys/external/bsd/drm2/i915drm/i915_module.c cvs rdiff -u -r1.1.2.6 -r1.1.2.7 \ src/sys/external/bsd/drm2/include/drm/drm_os_netbsd.h cvs rdiff -u -r0 -r1.1.2.1 src/sys/external/bsd/drm2/linux/files.drmkms_linux \ src/sys/external/bsd/drm2/linux/linux_module.c cvs rdiff -u -r1.1.2.9 -r1.1.2.10 \ src/sys/external/bsd/drm2/linux/linux_work.c cvs rdiff -u -r1.1.2.1 -r1.1.2.2 \ src/sys/external/bsd/drm2/pci/drm_pci_module.c cvs rdiff -u -r0 -r1.1.2.1 src/sys/external/bsd/drm2/pci/files.drmkms_pci cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/drmkms/Makefile \ src/sys/modules/drmkms/Makefile.inc src/sys/modules/drmkms/drmkms.ioconf cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/drmkms_linux/Makefile cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/drmkms_pci/Makefile cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/i915drmkms/Makefile \ src/sys/modules/i915drmkms/i915drmkms.ioconf Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/conf/files diff -u src/sys/conf/files:1.1077.2.3 src/sys/conf/files:1.1077.2.4 --- src/sys/conf/files:1.1077.2.3 Wed Jan 29 19:47:38 2014 +++ src/sys/conf/files Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -# $NetBSD: files,v 1.1077.2.3 2014/01/29 19:47:38 riastradh Exp $ +# $NetBSD: files,v 1.1077.2.4 2014/03/04 20:45:16 riastradh Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 version 20100430 @@ -1093,11 +1093,13 @@ device smsh: arp, ether, ifnet, mii file dev/ic/lan9118.c smsh # DRM - Direct Rendering Infrastructure: dev/drm -# This is the old DRM; new DRM is in dev/pci/files.pci (XXX for now). define drm {} include "external/bsd/drm/conf/files.drm" include "dev/drm/files.drm" +# DRM/KMS - Newer direct rendering manager with kernel mode-switching +include "external/bsd/drm2/drm/files.drmkms" + # Definitions for wscons # device attributes: display, display with emulator, keyboard, and mouse Index: src/sys/conf/majors diff -u src/sys/conf/majors:1.66.6.1 src/sys/conf/majors:1.66.6.2 --- src/sys/conf/majors:1.66.6.1 Wed Jan 29 19:47:54 2014 +++ src/sys/conf/majors Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -# $NetBSD: majors,v 1.66.6.1 2014/01/29 19:47:54 riastradh Exp $ +# $NetBSD: majors,v 1.66.6.2 2014/03/04 20:45:16 riastradh Exp $ # # Device majors for Machine-Independent drivers. # @@ -29,7 +29,7 @@ device-major amr char 176 amr device-major lockstat char 177 lockstat single device-major putter char 178 putter device-major srt char 179 srt -device-major drm char 180 drmbase +device-major drm char 180 drmbase | drmkms device-major bio char 181 bio single device-major altmem char 182 block 182 altmem device-major twa char 187 twa @@ -54,4 +54,3 @@ device-major mfi char 205 mfi device-major seeprom char 206 seeprom device-major dtrace char 207 dtrace device-major spiflash char 208 block 208 spiflash -device-major drmkms char 209 drmkms Index: src/sys/dev/pci/files.pci diff -u src/sys/dev/pci/files.pci:1.364.6.2 src/sys/dev/pci/files.pci:1.364.6.3 --- src/sys/dev/pci/files.pci:1.364.6.2 Wed Jan 29 19:47:38 2014 +++ src/sys/dev/pci/files.pci Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -# $NetBSD: files.pci,v 1.364.6.2 2014/01/29 19:47:38 riastradh Exp $ +# $NetBSD: files.pci,v 1.364.6.3 2014/03/04 20:45:16 riastradh Exp $ # # Config file and device description for machine-independent PCI code. # Included by ports that need it. Requires that the SCSI files be @@ -1130,6 +1130,5 @@ device tdvfb: wsemuldisplaydev, rasops16 attach tdvfb at pci file dev/pci/tdvfb.c tdvfb -# DRMKMS, DRM2 with kernel mode-switching, PCI-only for now. -define drmkms -include "external/bsd/drm2/conf/files.drm2" +# PCI graphics devices with DRM/KMS +include "external/bsd/drm2/pci/files.drmkms_pci" Index: src/sys/external/bsd/drm2/dist/include/drm/drmP.h diff -u src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.56 src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.57 --- src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.56 Wed Jan 22 16:40:44 2014 +++ src/sys/external/bsd/drm2/dist/include/drm/drmP.h Tue Mar 4 20:45:16 2014 @@ -1706,6 +1706,25 @@ extern int drm_agp_bind(struct drm_devic extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); +#ifdef __NetBSD__ +struct drm_agp_hooks { + drm_ioctl_t *agph_acquire_ioctl; + drm_ioctl_t *agph_release_ioctl; + drm_ioctl_t *agph_enable_ioctl; + drm_ioctl_t *agph_info_ioctl; + drm_ioctl_t *agph_alloc_ioctl; + drm_ioctl_t *agph_free_ioctl; + drm_ioctl_t *agph_bind_ioctl; + drm_ioctl_t *agph_unbind_ioctl; + int (*agph_release)(struct drm_device *); +}; + +extern int drm_agp_release_hook(struct drm_device *); + +extern int drm_agp_register(const struct drm_agp_hooks *); +extern void drm_agp_deregister(const struct drm_agp_hooks *); +#endif + /* Stub support (drm_stub.h) */ extern int drm_setmaster_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); @@ -2154,5 +2173,9 @@ drm_io_mapping_create_wc(struct drm_devi #endif /* defined(__NetBSD__) */ +#ifdef __NetBSD__ +extern const struct cdevsw drm_cdevsw; +#endif + #endif /* __KERNEL__ */ #endif Index: src/sys/external/bsd/drm2/drm/drm_drv.c diff -u src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.35 src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.36 --- src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.35 Wed Jan 29 19:47:38 2014 +++ src/sys/external/bsd/drm2/drm/drm_drv.c Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_drv.c,v 1.1.2.35 2014/01/29 19:47:38 riastradh Exp $ */ +/* $NetBSD: drm_drv.c,v 1.1.2.36 2014/03/04 20:45:16 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.1.2.35 2014/01/29 19:47:38 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.1.2.36 2014/03/04 20:45:16 riastradh Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -125,6 +125,25 @@ struct mutex drm_global_mutex; .cmd_drv = 0, \ } +/* XXX Kludge for AGP. */ +static drm_ioctl_t drm_agp_acquire_hook_ioctl; +static drm_ioctl_t drm_agp_release_hook_ioctl; +static drm_ioctl_t drm_agp_enable_hook_ioctl; +static drm_ioctl_t drm_agp_info_hook_ioctl; +static drm_ioctl_t drm_agp_alloc_hook_ioctl; +static drm_ioctl_t drm_agp_free_hook_ioctl; +static drm_ioctl_t drm_agp_bind_hook_ioctl; +static drm_ioctl_t drm_agp_unbind_hook_ioctl; + +#define drm_agp_acquire_ioctl drm_agp_acquire_hook_ioctl +#define drm_agp_release_ioctl drm_agp_release_hook_ioctl +#define drm_agp_enable_ioctl drm_agp_enable_hook_ioctl +#define drm_agp_info_ioctl drm_agp_info_hook_ioctl +#define drm_agp_alloc_ioctl drm_agp_alloc_hook_ioctl +#define drm_agp_free_ioctl drm_agp_free_hook_ioctl +#define drm_agp_bind_ioctl drm_agp_bind_hook_ioctl +#define drm_agp_unbind_ioctl drm_agp_unbind_hook_ioctl + /* Table copied verbatim from dist/drm/drm_drv.c. */ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, DRM_UNLOCKED), @@ -240,7 +259,7 @@ static const struct drm_ioctl_desc drm_i #endif }; -const struct cdevsw drmkms_cdevsw = { +const struct cdevsw drm_cdevsw = { .d_open = drm_open, .d_close = noclose, .d_read = noread, @@ -315,7 +334,7 @@ drm_attach(device_t parent, device_t sel sc->sc_minor[i].index = (i * 64) + device_unit(self); sc->sc_minor[i].type = drm_minor_types[i]; sc->sc_minor[i].device = - makedev(cdevsw_lookup_major(&drmkms_cdevsw), + makedev(cdevsw_lookup_major(&drm_cdevsw), sc->sc_minor[i].index); sc->sc_minor[i].kdev = self; sc->sc_minor[i].dev = dev; @@ -407,9 +426,10 @@ drm_detach(device_t self, int flags) static int drm_init(void) { + extern int linux_suppress_init; int error; - linux_mutex_init(&drm_global_mutex); + KASSERT(!linux_suppress_init); error = linux_kmap_init(); if (error) { @@ -425,6 +445,9 @@ drm_init(void) goto fail1; } + linux_suppress_init = 1; + linux_mutex_init(&drm_global_mutex); + return 0; fail1: linux_kmap_fini(); @@ -984,3 +1007,67 @@ map: vm_prot = ((ISSET(prot, PROT_READ)? args->dnm_addr = (void *)vaddr; return 0; } + +static const struct drm_agp_hooks *volatile drm_current_agp_hooks; + +int +drm_agp_register(const struct drm_agp_hooks *hooks) +{ + + membar_producer(); + if (atomic_cas_ptr(&drm_current_agp_hooks, NULL, __UNCONST(hooks)) + != NULL) + return EBUSY; + + return 0; +} + +void +drm_agp_deregister(const struct drm_agp_hooks *hooks) +{ + + if (atomic_cas_ptr(&drm_current_agp_hooks, __UNCONST(hooks), NULL) + != hooks) + panic("%s: wrong hooks: %p != %p", __func__, + hooks, drm_current_agp_hooks); +} + +int +drm_agp_release_hook(struct drm_device *dev) +{ + const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; + + if (hooks == NULL) { + if ((dev != NULL) && + (dev->control != NULL) && + (dev->control->kdev != NULL)) + panic("drm_agp_release(%s): no agp loaded", + device_xname(dev->control->kdev)); + else + panic("drm_agp_release(drm_device %p): no agp loaded", + dev); + } + membar_consumer(); + return (*hooks->agph_release)(dev); +} + +#define DEFINE_AGP_HOOK_IOCTL(NAME, HOOK) \ +static int \ +NAME(struct drm_device *dev, void *data, struct drm_file *file) \ +{ \ + const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; \ + \ + if (hooks == NULL) \ + return -ENODEV; \ + membar_consumer(); \ + return (*hooks->HOOK)(dev, data, file); \ +} + +DEFINE_AGP_HOOK_IOCTL(drm_agp_acquire_hook_ioctl, agph_acquire_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_release_hook_ioctl, agph_release_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_enable_hook_ioctl, agph_enable_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_info_hook_ioctl, agph_info_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_alloc_hook_ioctl, agph_alloc_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_free_hook_ioctl, agph_free_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_bind_hook_ioctl, agph_bind_ioctl) +DEFINE_AGP_HOOK_IOCTL(drm_agp_unbind_hook_ioctl, agph_unbind_ioctl) Index: src/sys/external/bsd/drm2/drm/drm_fops.c diff -u src/sys/external/bsd/drm2/drm/drm_fops.c:1.1.2.8 src/sys/external/bsd/drm2/drm/drm_fops.c:1.1.2.9 --- src/sys/external/bsd/drm2/drm/drm_fops.c:1.1.2.8 Wed Jan 15 21:25:29 2014 +++ src/sys/external/bsd/drm2/drm/drm_fops.c Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_fops.c,v 1.1.2.8 2014/01/15 21:25:29 riastradh Exp $ */ +/* $NetBSD: drm_fops.c,v 1.1.2.9 2014/03/04 20:45:16 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_fops.c,v 1.1.2.8 2014/01/15 21:25:29 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_fops.c,v 1.1.2.9 2014/03/04 20:45:16 riastradh Exp $"); #include <drm/drmP.h> @@ -402,7 +402,7 @@ drm_lastclose_agp(struct drm_device *dev INIT_LIST_HEAD(&dev->agp->memory); /* XXX seems kludgey */ if (dev->agp->acquired) - drm_agp_release(dev); + (void)drm_agp_release_hook(dev); dev->agp->acquired = 0; dev->agp->enabled = 0; Index: src/sys/external/bsd/drm2/drm/drm_module.c diff -u src/sys/external/bsd/drm2/drm/drm_module.c:1.1.2.9 src/sys/external/bsd/drm2/drm/drm_module.c:1.1.2.10 --- src/sys/external/bsd/drm2/drm/drm_module.c:1.1.2.9 Wed Jan 29 19:47:38 2014 +++ src/sys/external/bsd/drm2/drm/drm_module.c Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_module.c,v 1.1.2.9 2014/01/29 19:47:38 riastradh Exp $ */ +/* $NetBSD: drm_module.c,v 1.1.2.10 2014/03/04 20:45:16 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,32 +30,29 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.1.2.9 2014/01/29 19:47:38 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.1.2.10 2014/03/04 20:45:16 riastradh Exp $"); #include <sys/types.h> #include <sys/device.h> #include <sys/module.h> #include <sys/systm.h> -#include <linux/highmem.h> -#include <linux/mutex.h> -#include <linux/workqueue.h> - #include <drm/drmP.h> /* - * XXX I2C stuff should be moved to a separate drmkms_edid module. - * - * XXX PCI stuff should be moved to a separate drmkms_pci module. - * - * XXX Other Linux stuff should be moved to a linux compatibility - * module on which this one depends. + * XXX I2C stuff should be moved to a separate drmkms_i2c module. */ -MODULE(MODULE_CLASS_DRIVER, drmkms, "iic,pci"); +MODULE(MODULE_CLASS_DRIVER, drmkms, "iic,drmkms_linux"); #ifdef _MODULE #include "ioconf.c" -extern const struct cdevsw drmkms_cdevsw; /* XXX */ +#endif + +#ifndef _MODULE +/* + * XXX Mega-kludge. See drm_init in drm_drv.c for details. + */ +extern int linux_suppress_init; #endif static int @@ -68,52 +65,40 @@ drmkms_modcmd(modcmd_t cmd, void *arg __ switch (cmd) { case MODULE_CMD_INIT: -#ifdef _MODULE +#ifndef _MODULE + if (!linux_suppress_init) +#endif linux_mutex_init(&drm_global_mutex); - error = linux_kmap_init(); - if (error) { - aprint_error("drmkms: unable to initialize linux kmap:" - " %d", error); - goto init_fail0; - } - error = linux_workqueue_init(); - if (error) { - aprint_error("drmkms: unable to initialize workqueues:" - " %d", error); - goto init_fail1; - } +#ifdef _MODULE error = config_init_component(cfdriver_ioconf_drmkms, cfattach_ioconf_drmkms, cfdata_ioconf_drmkms); if (error) { aprint_error("drmkms: unable to init component: %d\n", error); - goto init_fail2; + goto init_fail0; } error = devsw_attach("drm", NULL, &bmajor, - &drmkms_cdevsw, &cmajor); + &drm_cdevsw, &cmajor); if (error) { aprint_error("drmkms: unable to attach devsw: %d\n", error); - goto init_fail3; + goto init_fail1; } #endif return 0; #ifdef _MODULE -#if 0 -init_fail4: (void)devsw_detach(NULL, &drmkms_cdevsw); -#endif -init_fail3: (void)config_fini_component(cfdriver_ioconf_drmkms, +init_fail2: __unused + (void)devsw_detach(NULL, &drm_cdevsw); +init_fail1: (void)config_fini_component(cfdriver_ioconf_drmkms, cfattach_ioconf_drmkms, cfdata_ioconf_drmkms); -init_fail2: linux_workqueue_fini(); -init_fail1: linux_kmap_fini(); init_fail0: linux_mutex_destroy(&drm_global_mutex); return error; #endif /* _MODULE */ case MODULE_CMD_FINI: #ifdef _MODULE - error = devsw_detach(NULL, &drmkms_cdevsw); + error = devsw_detach(NULL, &drm_cdevsw); if (error) return error; error = config_fini_component(cfdriver_ioconf_drmkms, @@ -121,10 +106,8 @@ init_fail0: linux_mutex_destroy(&drm_glo if (error) /* XXX Now what? Reattach the devsw? */ return error; - linux_workqueue_fini(); - linux_kmap_fini(); - linux_mutex_destroy(&drm_global_mutex); #endif + linux_mutex_destroy(&drm_global_mutex); return 0; default: Index: src/sys/external/bsd/drm2/drm/drm_vm.c diff -u src/sys/external/bsd/drm2/drm/drm_vm.c:1.1.2.5 src/sys/external/bsd/drm2/drm/drm_vm.c:1.1.2.6 --- src/sys/external/bsd/drm2/drm/drm_vm.c:1.1.2.5 Wed Jan 29 19:47:38 2014 +++ src/sys/external/bsd/drm2/drm/drm_vm.c Tue Mar 4 20:45:16 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_vm.c,v 1.1.2.5 2014/01/29 19:47:38 riastradh Exp $ */ +/* $NetBSD: drm_vm.c,v 1.1.2.6 2014/03/04 20:45:16 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_vm.c,v 1.1.2.5 2014/01/29 19:47:38 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_vm.c,v 1.1.2.6 2014/03/04 20:45:16 riastradh Exp $"); #include <sys/types.h> #include <sys/conf.h> @@ -45,13 +45,11 @@ static paddr_t drm_mmap_dma_paddr(struct static paddr_t drm_mmap_map_paddr(struct drm_device *, struct drm_local_map *, off_t, int); -extern struct cdevsw drmkms_cdevsw; /* XXX */ - int drm_mmap_object(struct drm_device *dev, off_t offset, size_t size, int prot, struct uvm_object **uobjp) { - dev_t devno = cdevsw_lookup_major(&drmkms_cdevsw); + dev_t devno = cdevsw_lookup_major(&drm_cdevsw); struct uvm_object *uobj; uobj = udv_attach(&devno, prot, offset, size); Index: src/sys/external/bsd/drm2/i915drm/i915_module.c diff -u src/sys/external/bsd/drm2/i915drm/i915_module.c:1.1.2.8 src/sys/external/bsd/drm2/i915drm/i915_module.c:1.1.2.9 --- src/sys/external/bsd/drm2/i915drm/i915_module.c:1.1.2.8 Wed Jan 29 19:47:38 2014 +++ src/sys/external/bsd/drm2/i915drm/i915_module.c Tue Mar 4 20:45:17 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_module.c,v 1.1.2.8 2014/01/29 19:47:38 riastradh Exp $ */ +/* $NetBSD: i915_module.c,v 1.1.2.9 2014/03/04 20:45:17 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i915_module.c,v 1.1.2.8 2014/01/29 19:47:38 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i915_module.c,v 1.1.2.9 2014/03/04 20:45:17 riastradh Exp $"); #include <sys/types.h> #include <sys/module.h> @@ -40,7 +40,7 @@ __KERNEL_RCSID(0, "$NetBSD: i915_module. #include "i915_drv.h" -MODULE(MODULE_CLASS_DRIVER, i915drmkms, "drmkms"); /* XXX drmkms_pci, drmkms_edid */ +MODULE(MODULE_CLASS_DRIVER, i915drmkms, "drmkms,drmkms_pci"); /* XXX drmkms_i2c */ #ifdef _MODULE #include "ioconf.c" Index: src/sys/external/bsd/drm2/include/drm/drm_os_netbsd.h diff -u src/sys/external/bsd/drm2/include/drm/drm_os_netbsd.h:1.1.2.6 src/sys/external/bsd/drm2/include/drm/drm_os_netbsd.h:1.1.2.7 --- src/sys/external/bsd/drm2/include/drm/drm_os_netbsd.h:1.1.2.6 Wed Jul 24 02:06:38 2013 +++ src/sys/external/bsd/drm2/include/drm/drm_os_netbsd.h Tue Mar 4 20:45:17 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_os_netbsd.h,v 1.1.2.6 2013/07/24 02:06:38 riastradh Exp $ */ +/* $NetBSD: drm_os_netbsd.h,v 1.1.2.7 2014/03/04 20:45:17 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #define _DRM_DRM_OS_NETBSD_H_ #if defined(_KERNEL_OPT) -#include "opt_drm.h" +#include "opt_drmkms.h" #endif #include <drm/drm_agp_netbsd.h> Index: src/sys/external/bsd/drm2/linux/linux_work.c diff -u src/sys/external/bsd/drm2/linux/linux_work.c:1.1.2.9 src/sys/external/bsd/drm2/linux/linux_work.c:1.1.2.10 --- src/sys/external/bsd/drm2/linux/linux_work.c:1.1.2.9 Wed Jan 22 14:58:20 2014 +++ src/sys/external/bsd/drm2/linux/linux_work.c Tue Mar 4 20:45:17 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_work.c,v 1.1.2.9 2014/01/22 14:58:20 riastradh Exp $ */ +/* $NetBSD: linux_work.c,v 1.1.2.10 2014/03/04 20:45:17 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.1.2.9 2014/01/22 14:58:20 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.1.2.10 2014/03/04 20:45:17 riastradh Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -49,6 +49,13 @@ __KERNEL_RCSID(0, "$NetBSD: linux_work.c #include <linux/workqueue.h> +/* XXX Kludge until we sync with HEAD. */ +#if DIAGNOSTIC +#define __diagused +#else +#define __diagused __unused +#endif + struct workqueue_struct { struct workqueue *wq_workqueue; @@ -69,7 +76,7 @@ struct workqueue_struct { static void linux_work_lock_init(struct work_struct *); static void linux_work_lock(struct work_struct *); static void linux_work_unlock(struct work_struct *); -static bool linux_work_locked(struct work_struct *); +static bool linux_work_locked(struct work_struct *) __diagused; static void linux_wq_barrier(struct work_struct *); @@ -285,7 +292,7 @@ linux_work_unlock(struct work_struct *wo __cpu_simple_unlock(&work->w_lock); } -static bool +static bool __diagused linux_work_locked(struct work_struct *work) { return __SIMPLELOCK_LOCKED_P(&work->w_lock); Index: src/sys/external/bsd/drm2/pci/drm_pci_module.c diff -u src/sys/external/bsd/drm2/pci/drm_pci_module.c:1.1.2.1 src/sys/external/bsd/drm2/pci/drm_pci_module.c:1.1.2.2 --- src/sys/external/bsd/drm2/pci/drm_pci_module.c:1.1.2.1 Wed Jul 24 02:44:20 2013 +++ src/sys/external/bsd/drm2/pci/drm_pci_module.c Tue Mar 4 20:45:17 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_pci_module.c,v 1.1.2.1 2013/07/24 02:44:20 riastradh Exp $ */ +/* $NetBSD: drm_pci_module.c,v 1.1.2.2 2014/03/04 20:45:17 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,22 +30,40 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_pci_module.c,v 1.1.2.1 2013/07/24 02:44:20 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_pci_module.c,v 1.1.2.2 2014/03/04 20:45:17 riastradh Exp $"); #include <sys/module.h> -MODULE(MODULE_CLASS_MISC, drm2pci, "drm2,pci"); +#include <drm/drmP.h> + +MODULE(MODULE_CLASS_MISC, drmkms_pci, "drmkms,pci"); + +const struct drm_agp_hooks drmkms_pci_agp_hooks = { + .agph_acquire_ioctl = &drm_agp_acquire_ioctl, + .agph_release_ioctl = &drm_agp_release_ioctl, + .agph_enable_ioctl = &drm_agp_enable_ioctl, + .agph_info_ioctl = &drm_agp_info_ioctl, + .agph_alloc_ioctl = &drm_agp_alloc_ioctl, + .agph_free_ioctl = &drm_agp_free_ioctl, + .agph_bind_ioctl = &drm_agp_bind_ioctl, + .agph_unbind_ioctl = &drm_agp_unbind_ioctl, + .agph_release = &drm_agp_release, +}; static int -drm2pci_modcmd(modcmd_t cmd, void *arg __unused) +drmkms_pci_modcmd(modcmd_t cmd, void *arg __unused) { + int error; + switch (cmd) { case MODULE_CMD_INIT: - /* XXX Install pci/agp hooks. */ + error = drm_agp_register(&drmkms_pci_agp_hooks); + if (error) + return error; return 0; case MODULE_CMD_FINI: - /* XXX Uninstall pci/agp hooks. */ + drm_agp_deregister(&drmkms_pci_agp_hooks); return 0; default: Added files: Index: src/sys/external/bsd/drm2/drm/files.drmkms diff -u /dev/null src/sys/external/bsd/drm2/drm/files.drmkms:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/external/bsd/drm2/drm/files.drmkms Tue Mar 4 20:45:16 2014 @@ -0,0 +1,62 @@ +# $NetBSD: files.drmkms,v 1.1.2.1 2014/03/04 20:45:16 riastradh Exp $ + +define drmkmsbus { } + +include "external/bsd/drm2/linux/files.drmkms_linux" + +# i2c code is not separated out, but it is marked so that it could be +# if we wanted. Not clear that this provides as much advantage as +# separating out PCI code, which will be necessary for, e.g., PCIless +# ARM SoC graphics drivers. +define drmkms_i2c + +define drmkms +device drmkms: drmkms_linux, drmkms_i2c +attach drmkms at drmkmsbus + +defflag opt_drmkms.h DRMKMS_DEBUG +makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/include" +makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/uapi" +makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/include" + +makeoptions drmkms "CWARNFLAGS.drm_crtc.c"+="-Wno-shadow" +makeoptions drmkms "CWARNFLAGS.drm_edid.c"+="-Wno-shadow" + +# XXX Should probably be in a header file. opt_drmkms.h? +makeoptions drmkms CPPFLAGS+="-D__KERNEL__" + +file external/bsd/drm2/dist/drm/drm_auth.c drmkms +file external/bsd/drm2/dist/drm/drm_buffer.c drmkms +file external/bsd/drm2/dist/drm/drm_bufs.c drmkms +file external/bsd/drm2/drm/drm_cache.c drmkms +file external/bsd/drm2/dist/drm/drm_context.c drmkms +file external/bsd/drm2/dist/drm/drm_crtc.c drmkms +file external/bsd/drm2/dist/drm/drm_crtc_helper.c drmkms +file external/bsd/drm2/dist/drm/drm_dma.c drmkms +file external/bsd/drm2/dist/drm/drm_dp_helper.c drmkms_i2c +file external/bsd/drm2/drm/drm_drv.c drmkms +file external/bsd/drm2/dist/drm/drm_edid.c drmkms_i2c +#file external/bsd/drm2/dist/drm/drm_encoder_slave.c drmkms_i2c +file external/bsd/drm2/dist/drm/drm_fb_helper.c drmkms +file external/bsd/drm2/drm/drm_fops.c drmkms +file external/bsd/drm2/dist/drm/drm_gem.c drmkms +file external/bsd/drm2/dist/drm/drm_global.c drmkms +file external/bsd/drm2/dist/drm/drm_hashtab.c drmkms +#file external/bsd/drm2/dist/drm/drm_info.c drmkms +#file external/bsd/drm2/dist/drm/drm_ioc32.c drmkms +file external/bsd/drm2/dist/drm/drm_ioctl.c drmkms +file external/bsd/drm2/dist/drm/drm_irq.c drmkms +file external/bsd/drm2/drm/drm_lock.c drmkms +file external/bsd/drm2/drm/drm_memory.c drmkms +file external/bsd/drm2/dist/drm/drm_mm.c drmkms +file external/bsd/drm2/dist/drm/drm_modes.c drmkms +#file external/bsd/drm2/dist/drm/drm_platform.c drmkms +#file external/bsd/drm2/dist/drm/drm_prime.c drmkms +#file external/bsd/drm2/dist/drm/drm_proc.c drmkms +file external/bsd/drm2/drm/drm_scatter.c drmkms +file external/bsd/drm2/dist/drm/drm_stub.c drmkms +file external/bsd/drm2/drm/drm_vm.c drmkms + +file external/bsd/drm2/drm/drm_gem_vm.c drmkms +file external/bsd/drm2/drm/drm_module.c drmkms +file external/bsd/drm2/drm/drm_sysfs.c drmkms Index: src/sys/external/bsd/drm2/i915drm/files.i915drmkms diff -u /dev/null src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms Tue Mar 4 20:45:17 2014 @@ -0,0 +1,60 @@ +# $NetBSD: files.i915drmkms,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +device i915drmkms: drmkms, drmkmsbus, drmkms_pci, genfb, wsemuldisplaydev +attach i915drmkms at pci + +makeoptions i915drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/drm/i915" + +makeoptions i915drmkms "CWARNFLAGS.intel_panel.c"+="-Wno-shadow" +makeoptions i915drmkms "CWARNFLAGS.intel_pm.c"+="-Wno-shadow" + +# XXX x86 kludge. +makeoptions i915drmkms CPPFLAGS+="-DCONFIG_MTRR" +makeoptions i915drmkms CPPFLAGS+="-DCONFIG_X86" +makeoptions i915drmkms CPPFLAGS+="-DMTRR" + +file external/bsd/drm2/dist/drm/i915/dvo_ch7017.c i915drmkms +file external/bsd/drm2/dist/drm/i915/dvo_ch7xxx.c i915drmkms +file external/bsd/drm2/dist/drm/i915/dvo_ivch.c i915drmkms +file external/bsd/drm2/dist/drm/i915/dvo_ns2501.c i915drmkms +file external/bsd/drm2/dist/drm/i915/dvo_sil164.c i915drmkms +file external/bsd/drm2/dist/drm/i915/dvo_tfp410.c i915drmkms +#file external/bsd/drm2/dist/drm/i915/i915_debugfs.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_dma.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_drv.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem_context.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem_debug.c i915drmkms +#file external/bsd/drm2/dist/drm/i915/i915_gem_dmabuf.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem_evict.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem_execbuffer.c i915drmkms +file external/bsd/drm2/i915drm/i915_gem_gtt.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_gem_tiling.c i915drmkms +#file external/bsd/drm2/dist/drm/i915/i915_ioc32.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_irq.c i915drmkms +file external/bsd/drm2/dist/drm/i915/i915_suspend.c i915drmkms +file external/bsd/drm2/i915drm/i915_sysfs.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_bios.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_crt.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_ddi.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_display.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_dp.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_dvo.c i915drmkms +file external/bsd/drm2/i915drm/intel_fb.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_hdmi.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_i2c.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_lvds.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_modes.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_opregion.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_overlay.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_panel.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_pm.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_sdvo.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_sprite.c i915drmkms +file external/bsd/drm2/dist/drm/i915/intel_tv.c i915drmkms + +file external/bsd/drm2/i915drm/i915_module.c i915drmkms +file external/bsd/drm2/i915drm/i915_pci.c i915drmkms +file external/bsd/drm2/i915drm/intel_gtt.c i915drmkms Index: src/sys/external/bsd/drm2/linux/files.drmkms_linux diff -u /dev/null src/sys/external/bsd/drm2/linux/files.drmkms_linux:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/external/bsd/drm2/linux/files.drmkms_linux Tue Mar 4 20:45:17 2014 @@ -0,0 +1,13 @@ +# $NetBSD: files.drmkms_linux,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +define drmkms_linux + +makeoptions drmkms_linux CPPFLAGS+="-I$S/external/bsd/drm2/include" + +file external/bsd/drm2/linux/linux_gfp.c drmkms_linux +file external/bsd/drm2/linux/linux_kmap.c drmkms_linux +file external/bsd/drm2/linux/linux_i2c.c drmkms_linux +file external/bsd/drm2/linux/linux_idr.c drmkms_linux +file external/bsd/drm2/linux/linux_list_sort.c drmkms_linux +file external/bsd/drm2/linux/linux_module.c drmkms_linux +file external/bsd/drm2/linux/linux_work.c drmkms_linux Index: src/sys/external/bsd/drm2/linux/linux_module.c diff -u /dev/null src/sys/external/bsd/drm2/linux/linux_module.c:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/external/bsd/drm2/linux/linux_module.c Tue Mar 4 20:45:17 2014 @@ -0,0 +1,88 @@ +/* $NetBSD: linux_module.c,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ */ + +/*- + * Copyright (c) 2014 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Taylor R. Campbell. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: linux_module.c,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $"); + +#include <sys/module.h> + +#include <linux/highmem.h> +#include <linux/mutex.h> +#include <linux/workqueue.h> + +MODULE(MODULE_CLASS_MISC, drmkms_linux, NULL); + +#ifndef _MODULE +/* + * XXX Mega-kludge. See drm_init in drm_drv.c for details. + */ +int linux_suppress_init = 0; +#endif + +static int +drmkms_linux_modcmd(modcmd_t cmd, void *arg __unused) +{ + int error; + + switch (cmd) { + case MODULE_CMD_INIT: +#ifndef _MODULE + if (linux_suppress_init) + return 0; +#endif + error = linux_kmap_init(); + if (error) { + aprint_error("drmkms_linux:" + " unable to initialize linux kmap: %d", + error); + goto init_fail0; + } + error = linux_workqueue_init(); + if (error) { + aprint_error("drmkms_linux:" + " unable to initialize workqueues: %d", + error); + goto init_fail1; + } + return 0; + +init_fail1: linux_kmap_fini(); +init_fail0: return error; + + case MODULE_CMD_FINI: + linux_workqueue_fini(); + linux_kmap_fini(); + return 0; + + default: + return ENOTTY; + } +} Index: src/sys/external/bsd/drm2/pci/files.drmkms_pci diff -u /dev/null src/sys/external/bsd/drm2/pci/files.drmkms_pci:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/external/bsd/drm2/pci/files.drmkms_pci Tue Mar 4 20:45:17 2014 @@ -0,0 +1,13 @@ +# $NetBSD: files.drmkms_pci,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +define drmkms_pci: drmkms + +#file external/bsd/drm2/dist/drm/ati_pcigart.c drmkms_pci +file external/bsd/drm2/dist/drm/drm_agpsupport.c drmkms_pci +file external/bsd/drm2/pci/drm_pci.c drmkms_pci +file external/bsd/drm2/pci/drm_pci_module.c drmkms_pci + +include "external/bsd/drm2/i915drm/files.i915drmkms" +#include "external/bsd/drm2/radeon/files.radeondrmkms" +#include "external/bsd/drm2/nouveau/files.nouveaudrmkms" +#... Index: src/sys/modules/drmkms/Makefile diff -u /dev/null src/sys/modules/drmkms/Makefile:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/drmkms/Makefile Tue Mar 4 20:45:17 2014 @@ -0,0 +1,57 @@ +# $NetBSD: Makefile,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +.include "../Makefile.inc" +.include "Makefile.inc" + +.PATH: ${S}/external/bsd/drm2/drm +.PATH: ${S}/external/bsd/drm2/pci +.PATH: ${S}/external/bsd/drm2/dist/drm + +KMOD= drmkms +IOCONF= drmkms.ioconf + +# Upstream source files. +#SRCS+= ati_pcigart.c # Moved to drmkms_pci module. +#SRCS+= drm_agpsupport.c # Moved to drmkms_pci module. +SRCS+= drm_auth.c +SRCS+= drm_buffer.c +SRCS+= drm_bufs.c +SRCS+= drm_cache.c +SRCS+= drm_context.c +SRCS+= drm_crtc.c +SRCS+= drm_crtc_helper.c +SRCS+= drm_dma.c +SRCS+= drm_dp_helper.c +SRCS+= drm_drv.c +SRCS+= drm_edid.c +#SRCS+= drm_encoder_slave.c # XXX Rewrite for i2c. +SRCS+= drm_fb_helper.c # XXX Rewrite for wsconsole. +SRCS+= drm_fops.c +SRCS+= drm_gem.c +SRCS+= drm_global.c +SRCS+= drm_hashtab.c +#SRCS+= drm_info.c # XXX Rewrite for sysctl or something. +#SRCS+= drm_ioc32.c +SRCS+= drm_ioctl.c +SRCS+= drm_irq.c +SRCS+= drm_lock.c +SRCS+= drm_memory.c +SRCS+= drm_mm.c +SRCS+= drm_modes.c +#SRCS+= drm_pci.c # Moved to drmkms_pci module. +#SRCS+= drm_platform.c # XXX Rewrite per platform. +#SRCS+= drm_prime.c # XXX Revisit later. +#SRCS+= drm_proc.c # XXX Rewrite for sysctl. +SRCS+= drm_scatter.c +SRCS+= drm_stub.c +SRCS+= drm_vm.c + +# NetBSD additions. +SRCS+= drm_gem_vm.c +SRCS+= drm_module.c +SRCS+= drm_sysfs.c + +COPTS.drm_crtc.c+= -Wno-shadow +COPTS.drm_edid.c+= -Wno-shadow + +.include <bsd.kmodule.mk> Index: src/sys/modules/drmkms/Makefile.inc diff -u /dev/null src/sys/modules/drmkms/Makefile.inc:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/drmkms/Makefile.inc Tue Mar 4 20:45:17 2014 @@ -0,0 +1,20 @@ +# $NetBSD: Makefile.inc,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +# Common makefile cruft for drm2 code. + +# XXX All the -D crap needs to go in a header file instead so changing +# it correctly triggers rebuilds. + +CPPFLAGS+= -I${S}/external/bsd/drm2/include +CPPFLAGS+= -I${S}/external/bsd/drm2/dist/uapi +CPPFLAGS+= -I${S}/external/bsd/drm2/dist/include +CPPFLAGS+= -D__KERNEL__ + +# XXX Is this the right place to set this? +CPPFLAGS+= -DDIAGNOSTIC + +.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" +CPPFLAGS+= -DCONFIG_MTRR +CPPFLAGS+= -DCONFIG_X86 +CPPFLAGS+= -DMTRR +.endif Index: src/sys/modules/drmkms/drmkms.ioconf diff -u /dev/null src/sys/modules/drmkms/drmkms.ioconf:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/drmkms/drmkms.ioconf Tue Mar 4 20:45:17 2014 @@ -0,0 +1,9 @@ +# $NetBSD: drmkms.ioconf,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +ioconf drmkms + +include "conf/files" + +pseudo-root drmkmsbus* + +drmkms* at drmkmsbus? Index: src/sys/modules/drmkms_linux/Makefile diff -u /dev/null src/sys/modules/drmkms_linux/Makefile:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/drmkms_linux/Makefile Tue Mar 4 20:45:17 2014 @@ -0,0 +1,22 @@ +# $NetBSD: Makefile,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +.include "../Makefile.inc" + +.PATH: ${S}/external/bsd/drm2/linux + +CPPFLAGS+= -I${S}/external/bsd/drm2/include + +# XXX Kludge! +CPPFLAGS+= -DDIAGNOSTIC + +KMOD= drmkms_linux + +SRCS+= linux_gfp.c +SRCS+= linux_kmap.c +SRCS+= linux_i2c.c +SRCS+= linux_idr.c +SRCS+= linux_list_sort.c +SRCS+= linux_module.c +SRCS+= linux_work.c + +.include <bsd.kmodule.mk> Index: src/sys/modules/drmkms_pci/Makefile diff -u /dev/null src/sys/modules/drmkms_pci/Makefile:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/drmkms_pci/Makefile Tue Mar 4 20:45:17 2014 @@ -0,0 +1,16 @@ +# $NetBSD: Makefile,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +.include "../Makefile.inc" +.include "../drmkms/Makefile.inc" + +.PATH: ${S}/external/bsd/drm2/pci +.PATH: ${S}/external/bsd/drm2/dist/drm + +KMOD= drmkms_pci + +#SRCS+= ati_pcigart.c # XXX Restore for ATI support. +SRCS+= drm_agpsupport.c +SRCS+= drm_pci.c +SRCS+= drm_pci_module.c + +.include <bsd.kmodule.mk> Index: src/sys/modules/i915drmkms/Makefile diff -u /dev/null src/sys/modules/i915drmkms/Makefile:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/i915drmkms/Makefile Tue Mar 4 20:45:17 2014 @@ -0,0 +1,63 @@ +# $NetBSD: Makefile,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +.include "../Makefile.inc" +.include "../drmkms/Makefile.inc" + +CPPFLAGS+= -I${S}/external/bsd/drm2/dist/drm/i915 + +.PATH: ${S}/external/bsd/drm2/i915drm +.PATH: ${S}/external/bsd/drm2/dist/drm/i915 + +KMOD= i915drmkms +IOCONF= i915drmkms.ioconf + +SRCS+= dvo_ch7017.c +SRCS+= dvo_ch7xxx.c +SRCS+= dvo_ivch.c +SRCS+= dvo_ns2501.c +SRCS+= dvo_sil164.c +SRCS+= dvo_tfp410.c +#SRCS+= i915_debugfs.c # XXX No debugfs in NetBSD. +SRCS+= i915_dma.c +SRCS+= i915_drv.c +SRCS+= i915_gem.c +SRCS+= i915_gem_context.c +SRCS+= i915_gem_debug.c +#SRCS+= i915_gem_dmabuf.c +SRCS+= i915_gem_evict.c +SRCS+= i915_gem_execbuffer.c +SRCS+= i915_gem_gtt.c +SRCS+= i915_gem_stolen.c +SRCS+= i915_gem_tiling.c +#SRCS+= i915_ioc32.c +SRCS+= i915_irq.c +SRCS+= i915_suspend.c +SRCS+= i915_sysfs.c # XXX No sysfs in NetBSD. +SRCS+= intel_bios.c +SRCS+= intel_crt.c +SRCS+= intel_ddi.c +SRCS+= intel_display.c +SRCS+= intel_dp.c +SRCS+= intel_dvo.c +SRCS+= intel_fb.c # XXX Rewrite for wscons. +SRCS+= intel_hdmi.c +SRCS+= intel_i2c.c +SRCS+= intel_lvds.c +SRCS+= intel_modes.c +SRCS+= intel_opregion.c +SRCS+= intel_overlay.c +SRCS+= intel_panel.c +SRCS+= intel_pm.c +SRCS+= intel_ringbuffer.c +SRCS+= intel_sdvo.c +SRCS+= intel_sprite.c +SRCS+= intel_tv.c + +SRCS+= i915_module.c +SRCS+= i915_pci.c +SRCS+= intel_gtt.c + +COPTS.intel_panel.c+= -Wno-shadow +COPTS.intel_pm.c+= -Wno-shadow + +.include <bsd.kmodule.mk> Index: src/sys/modules/i915drmkms/i915drmkms.ioconf diff -u /dev/null src/sys/modules/i915drmkms/i915drmkms.ioconf:1.1.2.1 --- /dev/null Tue Mar 4 20:45:17 2014 +++ src/sys/modules/i915drmkms/i915drmkms.ioconf Tue Mar 4 20:45:17 2014 @@ -0,0 +1,10 @@ +# $NetBSD: i915drmkms.ioconf,v 1.1.2.1 2014/03/04 20:45:17 riastradh Exp $ + +ioconf i915drmkms + +include "conf/files" +include "dev/pci/files.pci" + +pseudo-root pci* + +i915drmkms* at pci? dev ? function ?