#
# Drm device configuration
#
# This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
#
menuconfig DRM
	tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
	depends on (AGP || AGP=n) && PCI && !EMULATED_CMPXCHG && MMU
	select I2C
	select I2C_ALGOBIT
	help
	  Kernel-level support for the Direct Rendering Infrastructure (DRI)
	  introduced in XFree86 4.0. If you say Y here, you need to select
	  the module that's right for your graphics card from the list below.
	  These modules provide support for synchronization, security, and
	  DMA transfers. Please see <http://dri.sourceforge.net/> for more
	  details.  You should also select and configure AGP
	  (/dev/agpgart) support.

config DRM_TDFX
	tristate "3dfx Banshee/Voodoo3+"
	depends on DRM && PCI
	help
	  Choose this option if you have a 3dfx Banshee or Voodoo3 (or later),
	  graphics card.  If M is selected, the module will be called tdfx.

config DRM_R128
	tristate "ATI Rage 128"
	depends on DRM && PCI
	help
	  Choose this option if you have an ATI Rage 128 graphics card.  If M
	  is selected, the module will be called r128.  AGP support for
	  this card is strongly suggested (unless you have a PCI version).

config DRM_RADEON
	tristate "ATI Radeon"
	depends on DRM && PCI
	help
	  Choose this option if you have an ATI Radeon graphics card.  There
	  are both PCI and AGP versions.  You don't need to choose this to
	  run the Radeon in plain VGA mode.

	  If M is selected, the module will be called radeon.

config DRM_I810
	tristate "Intel I810"
	depends on DRM && AGP && AGP_INTEL
	help
	  Choose this option if you have an Intel I810 graphics card.  If M is
	  selected, the module will be called i810.  AGP support is required
	  for this driver to work.

choice
	prompt "Intel 830M, 845G, 852GM, 855GM, 865G"
	depends on DRM && AGP && AGP_INTEL
	optional

config DRM_I830
	tristate "i830 driver"
	help
	  Choose this option if you have a system that has Intel 830M, 845G,
	  852GM, 855GM or 865G integrated graphics.  If M is selected, the
	  module will be called i830.  AGP support is required for this driver
	  to work. This driver is used by the older X releases X.org 6.7 and
	  XFree86 4.3. If unsure, build this and i915 as modules and the X server
	  will load the correct one.

config DRM_I915
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select FB
	tristate "i915 driver"
	help
	  Choose this option if you have a system that has Intel 830M, 845G,
	  852GM, 855GM 865G or 915G integrated graphics.  If M is selected, the
	  module will be called i915.  AGP support is required for this driver
	  to work. This driver is used by the Intel driver in X.org 6.8 and
	  XFree86 4.4 and above. If unsure, build this and i830 as modules and
	  the X server will load the correct one.

config DRM_I915_KMS
	bool "Enable modesetting on intel by default"
	depends on DRM_I915
	help
	  Choose this option if you want kernel modesetting enabled by default,
	  and you have a new enough userspace to support this. Running old
	  userspaces with this enabled will cause pain.  Note that this causes
	  the driver to bind to PCI devices, which precludes loading things
	  like intelfb.

endchoice

config DRM_MGA
	tristate "Matrox g200/g400"
	depends on DRM
	help
	  Choose this option if you have a Matrox G200, G400 or G450 graphics
	  card.  If M is selected, the module will be called mga.  AGP
	  support is required for this driver to work.

config DRM_SIS
	tristate "SiS video cards"
	depends on DRM && AGP
	depends on FB_SIS || FB_SIS=n
	help
	  Choose this option if you have a SiS 630 or compatible video
          chipset. If M is selected the module will be called sis. AGP
          support is required for this driver to work.

config DRM_VIA
	tristate "Via unichrome video cards"
	depends on DRM
	help
	  Choose this option if you have a Via unichrome or compatible video
	  chipset. If M is selected the module will be called via.

config DRM_SAVAGE
	tristate "Savage video cards"
	depends on DRM
	help
	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
	  chipset. If M is selected the module will be called savage.
