Module Name: src Committed By: riastradh Date: Wed Jan 29 19:47:38 UTC 2014
Modified Files: src/sys/conf [riastradh-drm2]: files src/sys/dev/pci [riastradh-drm2]: files.pci src/sys/dev/wsfb [riastradh-drm2]: files.wsfb src/sys/external/bsd/drm2/conf [riastradh-drm2]: files.drm2 src/sys/external/bsd/drm2/drm [riastradh-drm2]: drm_drv.c drm_module.c drm_vm.c src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: i915_module.c i915_pci.c src/sys/external/bsd/drm2/include/linux [riastradh-drm2]: kgdb.h src/sys/modules/drm2 [riastradh-drm2]: Makefile drm.ioconf src/sys/modules/i915drm2 [riastradh-drm2]: Makefile i915drm.ioconf Log Message: First draft of in-kernel drm2 attachment. The drm2 `drm' device is now called `drmkms' (likewise `i915drmkms', &c.) so that it can coexist with the old drm code to reduce diffs from HEAD. (Can't call a device `drm2'.) To generate a diff of this commit: cvs rdiff -u -r1.1077.2.2 -r1.1077.2.3 src/sys/conf/files cvs rdiff -u -r1.364.6.1 -r1.364.6.2 src/sys/dev/pci/files.pci cvs rdiff -u -r1.7 -r1.7.30.1 src/sys/dev/wsfb/files.wsfb cvs rdiff -u -r1.1.2.5 -r1.1.2.6 src/sys/external/bsd/drm2/conf/files.drm2 cvs rdiff -u -r1.1.2.34 -r1.1.2.35 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_module.c cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/sys/external/bsd/drm2/drm/drm_vm.c cvs rdiff -u -r1.1.2.7 -r1.1.2.8 \ src/sys/external/bsd/drm2/i915drm/i915_module.c cvs rdiff -u -r1.1.2.10 -r1.1.2.11 \ src/sys/external/bsd/drm2/i915drm/i915_pci.c cvs rdiff -u -r1.1.2.2 -r1.1.2.3 \ src/sys/external/bsd/drm2/include/linux/kgdb.h cvs rdiff -u -r1.1.2.43 -r1.1.2.44 src/sys/modules/drm2/Makefile cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/modules/drm2/drm.ioconf cvs rdiff -u -r1.1.2.11 -r1.1.2.12 src/sys/modules/i915drm2/Makefile cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/modules/i915drm2/i915drm.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.2 src/sys/conf/files:1.1077.2.3 --- src/sys/conf/files:1.1077.2.2 Sun Sep 8 15:33:06 2013 +++ src/sys/conf/files Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -# $NetBSD: files,v 1.1077.2.2 2013/09/08 15:33:06 riastradh Exp $ +# $NetBSD: files,v 1.1077.2.3 2014/01/29 19:47:38 riastradh Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 version 20100430 @@ -1093,9 +1093,11 @@ 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" +include "external/bsd/drm/conf/files.drm" +include "dev/drm/files.drm" + # Definitions for wscons # device attributes: display, display with emulator, keyboard, and mouse Index: src/sys/dev/pci/files.pci diff -u src/sys/dev/pci/files.pci:1.364.6.1 src/sys/dev/pci/files.pci:1.364.6.2 --- src/sys/dev/pci/files.pci:1.364.6.1 Tue Jul 23 21:07:35 2013 +++ src/sys/dev/pci/files.pci Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -# $NetBSD: files.pci,v 1.364.6.1 2013/07/23 21:07:35 riastradh Exp $ +# $NetBSD: files.pci,v 1.364.6.2 2014/01/29 19:47:38 riastradh Exp $ # # Config file and device description for machine-independent PCI code. # Included by ports that need it. Requires that the SCSI files be @@ -1129,3 +1129,7 @@ defflag opt_tdvfb.h TDVFB_CONSOLE device tdvfb: wsemuldisplaydev, rasops16, rasops32, vcons, videomode 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" Index: src/sys/dev/wsfb/files.wsfb diff -u src/sys/dev/wsfb/files.wsfb:1.7 src/sys/dev/wsfb/files.wsfb:1.7.30.1 --- src/sys/dev/wsfb/files.wsfb:1.7 Tue Aug 31 02:49:17 2010 +++ src/sys/dev/wsfb/files.wsfb Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -# $NetBSD: files.wsfb,v 1.7 2010/08/31 02:49:17 macallan Exp $ +# $NetBSD: files.wsfb,v 1.7.30.1 2014/01/29 19:47:38 riastradh Exp $ # # wsdisplay framebuffer drivers @@ -9,6 +9,7 @@ defflag opt_wsfb.h WSFB_FAKE_VGA_FB # al defflag opt_wsfb.h WSFB_ALLOW_OTHERS # allow to mmap() foreign ranges # a generic framebuffer console -device genfb: wsemuldisplaydev, rasops1, rasops2, rasops8, rasops15, rasops16, rasops24, rasops32, vcons, drm -file dev/wsfb/genfb.c genfb needs-flag +define genfbbase: rasops1, rasops2, rasops8, rasops15, rasops16, rasops24, rasops32, vcons +device genfb: genfbbase, wsemuldisplaydev, drm +file dev/wsfb/genfb.c genfbbase needs-flag defflag opt_genfb.h GENFB_DEBUG GENFB_SHADOWFB Index: src/sys/external/bsd/drm2/conf/files.drm2 diff -u src/sys/external/bsd/drm2/conf/files.drm2:1.1.2.5 src/sys/external/bsd/drm2/conf/files.drm2:1.1.2.6 --- src/sys/external/bsd/drm2/conf/files.drm2:1.1.2.5 Wed Jan 15 13:53:42 2014 +++ src/sys/external/bsd/drm2/conf/files.drm2 Wed Jan 29 19:47:38 2014 @@ -1,110 +1,121 @@ -# $NetBSD: files.drm2,v 1.1.2.5 2014/01/15 13:53:42 riastradh Exp $ +# $NetBSD: files.drm2,v 1.1.2.6 2014/01/29 19:47:38 riastradh Exp $ -define drm2base -define drm2pci -define drmbus { } - -device drm: drm2base, drmbus -attach drm at drmbus - -defflag opt_drm.h DRM_DEBUG -makeoptions drm2base CPPFLAGS+="-I$S/external/bsd/drm2/include" -makeoptions drm2base CPPFLAGS+="-I$S/external/bsd/drm2/dist/uapi" -makeoptions drm2base CPPFLAGS+="-I$S/external/bsd/drm2/dist/include" +define drmkmsbus { } -# XXX Should probably be in a header file. opt_drm.h? -makeoptions drm2base CPPFLAGS+="-D__KERNEL__" +device drmkms +attach drmkms at drmkmsbus -# XXX x86 kludge. -makeoptions drm2base CPPFLAGS+="-DCONFIG_MTRR" -makeoptions drm2base CPPFLAGS+="-DCONFIG_X86" -makeoptions drm2base CPPFLAGS+="-DMTRR" - -makeoptions i915drm CPPFLAGS+="-I$S/external/bsd/drm2/dist/drm/i915" - -device i915drm: drm2base, drm2pci, drmbus, wsemuldisplaydev -attach i915drm at pci - -#file external/bsd/drm2/dist/drm/ati_pcigart.c drm2base -file external/bsd/drm2/dist/drm/drm_agpsupport.c drm2base -file external/bsd/drm2/dist/drm/drm_auth.c drm2base -file external/bsd/drm2/dist/drm/drm_buffer.c drm2base -file external/bsd/drm2/dist/drm/drm_bufs.c drm2base -#file external/bsd/drm2/dist/drm/drm_cache.c drm2base -file external/bsd/drm2/dist/drm/drm_context.c drm2base -file external/bsd/drm2/dist/drm/drm_crtc.c drm2base -file external/bsd/drm2/dist/drm/drm_crtc_helper.c drm2base -file external/bsd/drm2/dist/drm/drm_dma.c drm2base -file external/bsd/drm2/dist/drm/drm_dp_helper.c drm2base -file external/bsd/drm2/drm/drm_drv.c drm2base -file external/bsd/drm2/dist/drm/drm_edid.c drm2base -#file external/bsd/drm2/dist/drm/drm_encoder_slave.c drm2base -#file external/bsd/drm2/dist/drm/drm_fb_helper.c drm2base -file external/bsd/drm2/dist/drm/drm_fops.c drm2base -file external/bsd/drm2/dist/drm/drm_gem.c drm2base -file external/bsd/drm2/dist/drm/drm_global.c drm2base -file external/bsd/drm2/dist/drm/drm_hashtab.c drm2base -#file external/bsd/drm2/dist/drm/drm_info.c drm2base -#file external/bsd/drm2/dist/drm/drm_ioc32.c drm2base -file external/bsd/drm2/dist/drm/drm_irq.c drm2base -file external/bsd/drm2/drm/drm_lock.c drm2base -file external/bsd/drm2/drm/drm_memory.c drm2base -file external/bsd/drm2/dist/drm/drm_mm.c drm2base -file external/bsd/drm2/dist/drm/drm_modes.c drm2base -file external/bsd/drm2/pci/drm_pci.c drm2base -#file external/bsd/drm2/dist/drm/drm_platform.c drm2base -#file external/bsd/drm2/dist/drm/drm_prime.c drm2base -#file external/bsd/drm2/dist/drm/drm_proc.c drm2base -file external/bsd/drm2/drm/drm_scatter.c drm2base -file external/bsd/drm2/dist/drm/drm_stub.c drm2base -file external/bsd/drm2/drm/drm_vm.c drm2base - -file external/bsd/drm2/drm/drm_gem_vm.c drm2base -file external/bsd/drm2/drm/drm_module.c drm2base -file external/bsd/drm2/drm/drm_sysfs.c drm2base - -file external/bsd/drm2/i915drm/i915_pci.c i915drm -file external/bsd/drm2/dist/drm/i915/dvo_ch7017.c i915drm -file external/bsd/drm2/dist/drm/i915/dvo_ch7xxx.c i915drm -file external/bsd/drm2/dist/drm/i915/dvo_ivch.c i915drm -file external/bsd/drm2/dist/drm/i915/dvo_ns2501.c i915drm -file external/bsd/drm2/dist/drm/i915/dvo_sili164.c i915drm -file external/bsd/drm2/dist/drm/i915/dvo_tfp410.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_debugfs.c i915drm -file external/bsd/drm2/dist/drm/i915/i915_dma.c i915drm -file external/bsd/drm2/dist/drm/i915/i915_drv.c i915drm -file external/bsd/drm2/drm/i915drm/i915_gem.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_context.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_debug.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_dmabuf.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_evict.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_execbuffer.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_gem_tiling.c i915drm -#file external/bsd/drm2/dist/drm/i915/i915_ioc32.c i915drm -file external/bsd/drm2/i915drm/i915_irq.c i915drm -file external/bsd/drm2/dist/drm/i915/i915_suspend.c i915drm -file external/bsd/drm2/i915drm/i915_sysfs.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_bios.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_crt.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_ddi.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_display.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_dp.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_dvo.c i915drm -file external/bsd/drm2/i915drm/intel_fb.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_hdmi.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_i2c.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_lvds.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_modes.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_opregion.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_overlay.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_panel.c i915drm -file external/bsd/drm2/i915drm/intel_pm.c i915drm -file external/bsd/drm2/i915drm/intel_ringbuffer.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_sdvo.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_sprite.c i915drm -file external/bsd/drm2/dist/drm/i915/intel_tv.c i915drm +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.intel_panel.c"+="-Wno-shadow" +makeoptions drmkms "CWARNFLAGS.intel_pm.c"+="-Wno-shadow" +makeoptions drmkms "CWARNFLAGS.drm_crtc.c"+="-Wno-shadow" +makeoptions drmkms "CWARNFLAGS.drm_edid.c"+="-Wno-shadow" -file external/bsd/drm2/i915drm/i915_module.c i915drm -file external/bsd/drm2/i915drm/i915_pci.c i915drm +# XXX Should probably be in a header file. opt_drmkms.h? +makeoptions drmkms CPPFLAGS+="-D__KERNEL__" + +# XXX x86 kludge. +makeoptions drmkms CPPFLAGS+="-DCONFIG_MTRR" +makeoptions drmkms CPPFLAGS+="-DCONFIG_X86" +makeoptions drmkms CPPFLAGS+="-DMTRR" + +file external/bsd/drm2/linux/linux_gfp.c drmkms +file external/bsd/drm2/linux/linux_kmap.c drmkms +file external/bsd/drm2/linux/linux_i2c.c drmkms +file external/bsd/drm2/linux/linux_idr.c drmkms +file external/bsd/drm2/linux/linux_list_sort.c drmkms +file external/bsd/drm2/linux/linux_work.c drmkms + +#file external/bsd/drm2/dist/drm/ati_pcigart.c drmkms +file external/bsd/drm2/dist/drm/drm_agpsupport.c drmkms +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 +file external/bsd/drm2/drm/drm_drv.c drmkms +file external/bsd/drm2/dist/drm/drm_edid.c drmkms +#file external/bsd/drm2/dist/drm/drm_encoder_slave.c drmkms +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/pci/drm_pci.c drmkms # XXX pci +#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 + +device i915drmkms: drmkms, drmkmsbus, genfbbase, wsemuldisplaydev +attach i915drmkms at pci + +makeoptions i915drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/drm/i915" + +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/drm/drm_drv.c diff -u src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.34 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.34 Wed Jan 22 16:40:53 2014 +++ src/sys/external/bsd/drm2/drm/drm_drv.c Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_drv.c,v 1.1.2.34 2014/01/22 16:40:53 riastradh Exp $ */ +/* $NetBSD: drm_drv.c,v 1.1.2.35 2014/01/29 19:47:38 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.34 2014/01/22 16:40:53 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.1.2.35 2014/01/29 19:47:38 riastradh Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -40,6 +40,10 @@ __KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v #include <sys/filedesc.h> #include <sys/ioccom.h> #include <sys/kauth.h> +#ifndef _MODULE +/* XXX Mega-kludge because modules are broken. */ +#include <sys/once.h> +#endif #include <sys/poll.h> #include <sys/select.h> @@ -47,6 +51,8 @@ __KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v #include <drm/drmP.h> +#include "ioconf.h" + static int drm_minor_types[] = { DRM_MINOR_LEGACY, DRM_MINOR_CONTROL, @@ -80,6 +86,12 @@ static int drm_match(device_t, cfdata_t, static void drm_attach(device_t, device_t, void *); static int drm_detach(device_t, int); +#ifndef _MODULE +/* XXX Mega-kludge because modules are broken. */ +static int drm_init(void); +static ONCE_DECL(drm_init_once); +#endif + static void drm_undo_fill_in_dev(struct drm_device *); static struct drm_softc *drm_dev_softc(dev_t); @@ -228,7 +240,7 @@ static const struct drm_ioctl_desc drm_i #endif }; -const struct cdevsw drm_cdevsw = { +const struct cdevsw drmkms_cdevsw = { .d_open = drm_open, .d_close = noclose, .d_read = noread, @@ -244,9 +256,6 @@ const struct cdevsw drm_cdevsw = { .d_flag = D_NEGOFFSAFE, }; -/* XXX Does this get declared automatically by config? */ -extern struct cfdriver drm_cd; - static const struct fileops drm_fileops = { .fo_read = drm_read, .fo_write = fbadop_write, @@ -259,7 +268,7 @@ static const struct fileops drm_fileops .fo_restart = fnullop_restart, }; -CFATTACH_DECL_NEW(drm, sizeof(struct drm_softc), +CFATTACH_DECL_NEW(drmkms, sizeof(struct drm_softc), drm_match, drm_attach, drm_detach, NULL); static int @@ -267,6 +276,12 @@ drm_match(device_t parent __unused, cfda void *aux __unused) { +#ifndef _MODULE + /* XXX Mega-kludge because modules are broken. */ + if (RUN_ONCE(&drm_init_once, &drm_init) != 0) + return 0; +#endif + return 1; } @@ -300,7 +315,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(&drm_cdevsw), + makedev(cdevsw_lookup_major(&drmkms_cdevsw), sc->sc_minor[i].index); sc->sc_minor[i].kdev = self; sc->sc_minor[i].dev = dev; @@ -382,6 +397,42 @@ drm_detach(device_t self, int flags) return 0; } +#ifndef _MODULE +/* + * drm_init is a mega-kludge that exists because modules are broken: + * builtin modules do not get initialized until long after configure + * runs, so there's no way for MODULE_CMD_INIT to prepare data + * structures that configure needs. + */ +static int +drm_init(void) +{ + int error; + + linux_mutex_init(&drm_global_mutex); + + error = linux_kmap_init(); + if (error) { + aprint_error("drmkms: unable to initialize linux kmap:" + " %d", error); + goto fail0; + } + + error = linux_workqueue_init(); + if (error) { + aprint_error("drmkms: unable to initialize workqueues:" + " %d", error); + goto fail1; + } + + return 0; + +fail1: linux_kmap_fini(); +fail0: linux_mutex_destroy(&drm_global_mutex); + return error; +} +#endif + static void drm_undo_fill_in_dev(struct drm_device *dev) { @@ -425,7 +476,7 @@ drm_undo_fill_in_dev(struct drm_device * static struct drm_softc * drm_dev_softc(dev_t d) { - return device_lookup_private(&drm_cd, (minor(d) % 64)); + return device_lookup_private(&drmkms_cd, (minor(d) % 64)); } static struct drm_minor * @@ -831,7 +882,7 @@ drm_config_found(device_t parent, struct daa.daa_flags = flags; dev->driver = driver; - if (config_found_ia(parent, "drmbus", &daa, NULL) == NULL) { + if (config_found_ia(parent, "drmkmsbus", &daa, NULL) == NULL) { aprint_error_dev(parent, "unable to attach drm\n"); return; } Index: src/sys/external/bsd/drm2/drm/drm_module.c diff -u src/sys/external/bsd/drm2/drm/drm_module.c:1.1.2.8 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.8 Wed Jan 15 13:54:03 2014 +++ src/sys/external/bsd/drm2/drm/drm_module.c Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_module.c,v 1.1.2.8 2014/01/15 13:54:03 riastradh Exp $ */ +/* $NetBSD: drm_module.c,v 1.1.2.9 2014/01/29 19:47:38 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.1.2.8 2014/01/15 13:54:03 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.1.2.9 2014/01/29 19:47:38 riastradh Exp $"); #include <sys/types.h> #include <sys/device.h> @@ -44,23 +44,22 @@ __KERNEL_RCSID(0, "$NetBSD: drm_module.c #include <drm/drmP.h> /* - * XXX I2C stuff should be moved to a separate drm2edid module. + * XXX I2C stuff should be moved to a separate drmkms_edid module. * - * XXX PCI stuff should be moved to a separate drm2pci 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. */ -MODULE(MODULE_CLASS_MISC, drm2, "iic,pci"); +MODULE(MODULE_CLASS_DRIVER, drmkms, "iic,pci"); #ifdef _MODULE #include "ioconf.c" +extern const struct cdevsw drmkms_cdevsw; /* XXX */ #endif -extern const struct cdevsw drm_cdevsw; /* XXX Put this in a header file? */ - static int -drm2_modcmd(modcmd_t cmd, void *arg __unused) +drmkms_modcmd(modcmd_t cmd, void *arg __unused) { #ifdef _MODULE devmajor_t bmajor = NODEVMAJOR, cmajor = NODEVMAJOR; @@ -69,31 +68,31 @@ drm2_modcmd(modcmd_t cmd, void *arg __un switch (cmd) { case MODULE_CMD_INIT: +#ifdef _MODULE linux_mutex_init(&drm_global_mutex); error = linux_kmap_init(); if (error) { - aprint_error("drm: unable to initialize linux kmap:" + aprint_error("drmkms: unable to initialize linux kmap:" " %d", error); goto init_fail0; } error = linux_workqueue_init(); if (error) { - aprint_error("drm: unable to initialize workqueues:" + aprint_error("drmkms: unable to initialize workqueues:" " %d", error); goto init_fail1; } -#ifdef _MODULE - error = config_init_component(cfdriver_ioconf_drm, - cfattach_ioconf_drm, cfdata_ioconf_drm); + error = config_init_component(cfdriver_ioconf_drmkms, + cfattach_ioconf_drmkms, cfdata_ioconf_drmkms); if (error) { - aprint_error("drm: unable to init component: %d\n", + aprint_error("drmkms: unable to init component: %d\n", error); goto init_fail2; } error = devsw_attach("drm", NULL, &bmajor, - &drm_cdevsw, &cmajor); + &drmkms_cdevsw, &cmajor); if (error) { - aprint_error("drm: unable to attach devsw: %d\n", + aprint_error("drmkms: unable to attach devsw: %d\n", error); goto init_fail3; } @@ -102,30 +101,30 @@ drm2_modcmd(modcmd_t cmd, void *arg __un #ifdef _MODULE #if 0 -init_fail4: (void)devsw_detach(NULL, &drm_cdevsw); +init_fail4: (void)devsw_detach(NULL, &drmkms_cdevsw); #endif -init_fail3: (void)config_fini_component(cfdriver_ioconf_drm, - cfattach_ioconf_drm, cfdata_ioconf_drm); +init_fail3: (void)config_fini_component(cfdriver_ioconf_drmkms, + cfattach_ioconf_drmkms, cfdata_ioconf_drmkms); init_fail2: linux_workqueue_fini(); -#endif /* _MODULE */ 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, &drm_cdevsw); + error = devsw_detach(NULL, &drmkms_cdevsw); if (error) return error; - error = config_fini_component(cfdriver_ioconf_drm, - cfattach_ioconf_drm, cfdata_ioconf_drm); + error = config_fini_component(cfdriver_ioconf_drmkms, + cfattach_ioconf_drmkms, cfdata_ioconf_drmkms); if (error) /* XXX Now what? Reattach the devsw? */ return error; -#endif linux_workqueue_fini(); linux_kmap_fini(); linux_mutex_destroy(&drm_global_mutex); +#endif 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.4 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.4 Wed Jan 22 16:40:44 2014 +++ src/sys/external/bsd/drm2/drm/drm_vm.c Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_vm.c,v 1.1.2.4 2014/01/22 16:40:44 riastradh Exp $ */ +/* $NetBSD: drm_vm.c,v 1.1.2.5 2014/01/29 19:47:38 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.4 2014/01/22 16:40:44 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_vm.c,v 1.1.2.5 2014/01/29 19:47:38 riastradh Exp $"); #include <sys/types.h> #include <sys/conf.h> @@ -45,13 +45,13 @@ 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 drm_cdevsw; /* XXX */ +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(&drm_cdevsw); + dev_t devno = cdevsw_lookup_major(&drmkms_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.7 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.7 Wed Jul 24 03:57:33 2013 +++ src/sys/external/bsd/drm2/i915drm/i915_module.c Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_module.c,v 1.1.2.7 2013/07/24 03:57:33 riastradh Exp $ */ +/* $NetBSD: i915_module.c,v 1.1.2.8 2014/01/29 19:47:38 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.7 2013/07/24 03:57:33 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i915_module.c,v 1.1.2.8 2014/01/29 19:47:38 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, i915drm2, "drm2"); /* XXX drm2pci, drm2edid */ +MODULE(MODULE_CLASS_DRIVER, i915drmkms, "drmkms"); /* XXX drmkms_pci, drmkms_edid */ #ifdef _MODULE #include "ioconf.c" @@ -50,30 +50,28 @@ MODULE(MODULE_CLASS_DRIVER, i915drm2, "d extern struct drm_driver *const i915_drm_driver; static int -i915drm2_modcmd(modcmd_t cmd, void *arg __unused) +i915drmkms_modcmd(modcmd_t cmd, void *arg __unused) { -#ifdef _MODULE int error; -#endif switch (cmd) { case MODULE_CMD_INIT: -#ifdef _MODULE /* XXX Kludge it up... Must happen before attachment. */ i915_drm_driver->num_ioctls = i915_max_ioctl; i915_drm_driver->driver_features |= DRIVER_MODESET; error = drm_pci_init(i915_drm_driver, NULL); if (error) { - aprint_error("i915drm: failed to init pci: %d\n", + aprint_error("i915drmkms: failed to init pci: %d\n", error); return error; } - error = config_init_component(cfdriver_ioconf_i915drm, - cfattach_ioconf_i915drm, cfdata_ioconf_i915drm); +#ifdef _MODULE + error = config_init_component(cfdriver_ioconf_i915drmkms, + cfattach_ioconf_i915drmkms, cfdata_ioconf_i915drmkms); if (error) { - aprint_error("i915drm: failed to init component: %d\n", - error); + aprint_error("i915drmkms: failed to init component" + ": %d\n", error); drm_pci_exit(i915_drm_driver, NULL); return error; } @@ -82,15 +80,15 @@ i915drm2_modcmd(modcmd_t cmd, void *arg case MODULE_CMD_FINI: #ifdef _MODULE - error = config_fini_component(cfdriver_ioconf_i915drm, - cfattach_ioconf_i915drm, cfdata_ioconf_i915drm); + error = config_fini_component(cfdriver_ioconf_i915drmkms, + cfattach_ioconf_i915drmkms, cfdata_ioconf_i915drmkms); if (error) { - aprint_error("i915drm: failed to fini component: %d\n", - error); + aprint_error("i915drmkms: failed to fini component" + ": %d\n", error); return error; } - drm_pci_exit(i915_drm_driver, NULL); #endif + drm_pci_exit(i915_drm_driver, NULL); return 0; default: Index: src/sys/external/bsd/drm2/i915drm/i915_pci.c diff -u src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.1.2.10 src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.1.2.11 --- src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.1.2.10 Wed Jan 29 19:47:09 2014 +++ src/sys/external/bsd/drm2/i915drm/i915_pci.c Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_pci.c,v 1.1.2.10 2014/01/29 19:47:09 riastradh Exp $ */ +/* $NetBSD: i915_pci.c,v 1.1.2.11 2014/01/29 19:47:38 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,9 +30,13 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.1.2.10 2014/01/29 19:47:09 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.1.2.11 2014/01/29 19:47:38 riastradh Exp $"); #include <sys/types.h> +#ifndef _MODULE +/* XXX Mega-kludge because modules are broken. */ +#include <sys/once.h> +#endif #include <sys/systm.h> #include <dev/pci/pciio.h> @@ -60,6 +64,12 @@ static int i915drm_match(device_t, cfdat static void i915drm_attach(device_t, device_t, void *); static int i915drm_detach(device_t, int); +#ifndef _MODULE +/* XXX Mega-kludge because modules are broken. */ +static int i915drm_init(void); +static ONCE_DECL(i915drm_init_once); +#endif + static void i915drm_attach_framebuffer(device_t); static int i915drm_detach_framebuffer(device_t, int); @@ -73,7 +83,7 @@ static int i915drm_genfb_ioctl(void *, v int, struct lwp *); static paddr_t i915drm_genfb_mmap(void *, void *, off_t, int); -CFATTACH_DECL_NEW(i915drm, sizeof(struct i915drm_softc), +CFATTACH_DECL_NEW(i915drmkms, sizeof(struct i915drm_softc), i915drm_match, i915drm_attach, i915drm_detach, NULL); /* XXX Kludge to get these from i915_drv.c. */ @@ -123,6 +133,12 @@ i915drm_match(device_t parent, cfdata_t { const struct pci_attach_args *const pa = aux; +#ifndef _MODULE + /* XXX Mega-kludge because modules are broken. */ + if (RUN_ONCE(&i915drm_init_once, &i915drm_init) != 0) + return 0; +#endif + return (i915drm_pci_lookup(pa) != NULL); } @@ -186,6 +202,27 @@ i915drm_detach(device_t self, int flags) return 0; } +#ifndef _MODULE +/* XXX Mega-kludge because modules are broken. See drm_init for details. */ +static int +i915drm_init(void) +{ + int error; + + i915_drm_driver->num_ioctls = i915_max_ioctl; + i915_drm_driver->driver_features |= DRIVER_MODESET; + + error = drm_pci_init(i915_drm_driver, NULL); + if (error) { + aprint_error("i915drmkms: failed to init pci: %d\n", + error); + return error; + } + + return 0; +} +#endif + static struct drm_fb_helper_funcs i915drm_fb_helper_funcs = { .gamma_set = &intel_crtc_fb_gamma_set, .gamma_get = &intel_crtc_fb_gamma_get, Index: src/sys/external/bsd/drm2/include/linux/kgdb.h diff -u src/sys/external/bsd/drm2/include/linux/kgdb.h:1.1.2.2 src/sys/external/bsd/drm2/include/linux/kgdb.h:1.1.2.3 --- src/sys/external/bsd/drm2/include/linux/kgdb.h:1.1.2.2 Sun Sep 8 15:58:24 2013 +++ src/sys/external/bsd/drm2/include/linux/kgdb.h Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kgdb.h,v 1.1.2.2 2013/09/08 15:58:24 riastradh Exp $ */ +/* $NetBSD: kgdb.h,v 1.1.2.3 2014/01/29 19:47:38 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #ifndef _LINUX_KGDB_H_ #define _LINUX_KGDB_H_ -#if 0 /* XXX */ +#ifdef _KERNEL_OPT /* XXX */ #include "opt_ddb.h" #else #define DDB Index: src/sys/modules/drm2/Makefile diff -u src/sys/modules/drm2/Makefile:1.1.2.43 src/sys/modules/drm2/Makefile:1.1.2.44 --- src/sys/modules/drm2/Makefile:1.1.2.43 Mon Dec 30 04:50:12 2013 +++ src/sys/modules/drm2/Makefile Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1.2.43 2013/12/30 04:50:12 riastradh Exp $ +# $NetBSD: Makefile,v 1.1.2.44 2014/01/29 19:47:38 riastradh Exp $ .include "../Makefile.inc" .include "Makefile.inc" @@ -8,7 +8,7 @@ .PATH: ${S}/external/bsd/drm2/linux .PATH: ${S}/external/bsd/drm2/dist/drm -KMOD= drm2 +KMOD= drmkms IOCONF= drm.ioconf #SRCS+= ati_pcigart.c # XXX Restore for ATI support. Index: src/sys/modules/drm2/drm.ioconf diff -u src/sys/modules/drm2/drm.ioconf:1.1.2.1 src/sys/modules/drm2/drm.ioconf:1.1.2.2 --- src/sys/modules/drm2/drm.ioconf:1.1.2.1 Wed Jul 24 02:43:09 2013 +++ src/sys/modules/drm2/drm.ioconf Wed Jan 29 19:47:38 2014 @@ -1,10 +1,10 @@ -# $NetBSD: drm.ioconf,v 1.1.2.1 2013/07/24 02:43:09 riastradh Exp $ +# $NetBSD: drm.ioconf,v 1.1.2.2 2014/01/29 19:47:38 riastradh Exp $ -ioconf drm +ioconf drmkms include "conf/files" include "external/bsd/drm2/conf/files.drm2" -pseudo-root drmbus* +pseudo-root drmkmsbus* -drm* at drmbus? +drmkms* at drmkmsbus? Index: src/sys/modules/i915drm2/Makefile diff -u src/sys/modules/i915drm2/Makefile:1.1.2.11 src/sys/modules/i915drm2/Makefile:1.1.2.12 --- src/sys/modules/i915drm2/Makefile:1.1.2.11 Sun Sep 8 16:38:02 2013 +++ src/sys/modules/i915drm2/Makefile Wed Jan 29 19:47:38 2014 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1.2.11 2013/09/08 16:38:02 riastradh Exp $ +# $NetBSD: Makefile,v 1.1.2.12 2014/01/29 19:47:38 riastradh Exp $ .include "../Makefile.inc" .include "../drm2/Makefile.inc" @@ -8,7 +8,7 @@ CPPFLAGS+= -I${S}/external/bsd/drm2/dist .PATH: ${S}/external/bsd/drm2/i915drm .PATH: ${S}/external/bsd/drm2/dist/drm/i915 -KMOD= i915drm2 +KMOD= i915drmkms IOCONF= i915drm.ioconf SRCS+= dvo_ch7017.c @@ -47,8 +47,8 @@ SRCS+= intel_modes.c SRCS+= intel_opregion.c SRCS+= intel_overlay.c SRCS+= intel_panel.c -SRCS+= intel_pm.c # XXX overridden for now -SRCS+= intel_ringbuffer.c # XXX overridden for now +SRCS+= intel_pm.c +SRCS+= intel_ringbuffer.c SRCS+= intel_sdvo.c SRCS+= intel_sprite.c SRCS+= intel_tv.c Index: src/sys/modules/i915drm2/i915drm.ioconf diff -u src/sys/modules/i915drm2/i915drm.ioconf:1.1.2.1 src/sys/modules/i915drm2/i915drm.ioconf:1.1.2.2 --- src/sys/modules/i915drm2/i915drm.ioconf:1.1.2.1 Wed Jul 24 02:49:21 2013 +++ src/sys/modules/i915drm2/i915drm.ioconf Wed Jan 29 19:47:38 2014 @@ -1,6 +1,6 @@ -# $NetBSD: i915drm.ioconf,v 1.1.2.1 2013/07/24 02:49:21 riastradh Exp $ +# $NetBSD: i915drm.ioconf,v 1.1.2.2 2014/01/29 19:47:38 riastradh Exp $ -ioconf i915drm +ioconf i915drmkms include "conf/files" include "dev/pci/files.pci" @@ -8,4 +8,4 @@ include "external/bsd/drm2/conf/files.dr pseudo-root pci* -i915drm* at pci? dev ? function ? +i915drmkms* at pci? dev ? function ?