summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
Diffstat (limited to 'linux')
-rw-r--r--linux/Makefile.kernel43
-rw-r--r--linux/Makefile.linux493
-rw-r--r--linux/picker.c30
3 files changed, 285 insertions, 281 deletions
diff --git a/linux/Makefile.kernel b/linux/Makefile.kernel
index 7e659dfd..5f79e430 100644
--- a/linux/Makefile.kernel
+++ b/linux/Makefile.kernel
@@ -1,19 +1,41 @@
#
# Makefile for the drm device driver. This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
-
-O_TARGET := drm.o
-list-multi := gamma.o tdfx.o r128.o mga.o i810.o i830.o radeon.o ffb.o
+#
+# Based on David Woodhouse's mtd build.
+#
+# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.17 2003/04/12 17:18:17 dawes Exp $
+#
gamma-objs := gamma_drv.o gamma_dma.o
tdfx-objs := tdfx_drv.o
-r128-objs := r128_drv.o r128_cce.o r128_irq.o r128_state.o
-mga-objs := mga_drv.o mga_dma.o mga_irq.o mga_state.o mga_warp.o
+r128-objs := r128_drv.o r128_cce.o r128_state.o r128_irq.o
+mga-objs := mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o
i810-objs := i810_drv.o i810_dma.o
i830-objs := i830_drv.o i830_dma.o i830_irq.o
-radeon-objs := radeon_drv.o radeon_cp.o radeon_irq.o radeon_mem.o radeon_state.o
+radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o
+sis-objs := sis_drv.o sis_ds.o sis_mm.o
ffb-objs := ffb_drv.o ffb_context.o
+# Kernel version checks
+
+BELOW25 := $(shell if [ $(PATCHLEVEL) -lt 5 ]; then echo y; fi)
+
+# There were major build changes starting with 2.5.52
+ifneq ($(BELOW25),y)
+BELOW2552 := $(shell if [ $(SUBLEVEL) -lt 52 ]; then echo y; fi)
+else
+BELOW2552 := y
+endif
+
+ifeq ($(BELOW25),y)
+O_TARGET := drm.o
+list-multi := gamma.o tdfx.o r128.o mga.o i810.o i830.o ffb.o radeon.o
+obj-m :=
+obj-n :=
+obj- :=
+endif
+
obj-$(CONFIG_DRM_GAMMA) += gamma.o
obj-$(CONFIG_DRM_TDFX) += tdfx.o
obj-$(CONFIG_DRM_R128) += r128.o
@@ -21,10 +43,14 @@ obj-$(CONFIG_DRM_RADEON)+= radeon.o
obj-$(CONFIG_DRM_MGA) += mga.o
obj-$(CONFIG_DRM_I810) += i810.o
obj-$(CONFIG_DRM_I830) += i830.o
+obj-$(CONFIG_DRM_SIS) += sis.o
obj-$(CONFIG_DRM_FFB) += ffb.o
+ifeq ($(BELOW2552),y)
include $(TOPDIR)/Rules.make
+endif
+ifeq ($(BELOW25),y)
gamma.o: $(gamma-objs) $(lib)
$(LD) -r -o $@ $(gamma-objs) $(lib)
@@ -46,5 +72,10 @@ r128.o: $(r128-objs) $(lib)
radeon.o: $(radeon-objs) $(lib)
$(LD) -r -o $@ $(radeon-objs) $(lib)
+sis.o: $(sis-objs) $(lib)
+ $(LD) -r -o $@ $(sis-objs) $(lib)
+
ffb.o: $(ffb-objs) $(lib)
$(LD) -r -o $@ $(ffb-objs) $(lib)
+endif
+
diff --git a/linux/Makefile.linux b/linux/Makefile.linux
index 63bec30d..1957f5c2 100644
--- a/linux/Makefile.linux
+++ b/linux/Makefile.linux
@@ -1,313 +1,316 @@
# Makefile -- For the Direct Rendering Manager module (drm)
-# Created: Mon Jan 4 09:26:53 1999 by faith@precisioninsight.com
#
-# Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
-# Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
-# All rights reserved.
+# Based on David Woodhouse's mtd build.
#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
+# Modified to handle the DRM requirements and builds on a wider range of
+# platforms in a flexible way by David Dawes. It's not clear, however,
+# that this approach is simpler than the old one.
#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
+# The purpose of this Makefile.linux file is to handle setting up everything
+# needed for an out-of-kernel source build. Makefile.kernel contains
+# everything required for in-kernel source builds. It is included into
+# this file, so none of that should be duplicated here.
#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
+# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.linux,v 1.34 2003/04/16 15:42:19 dawes Exp $
#
+
#
-# ***** NOTE NOTE NOTE NOTE NOTE *****
-# To override the automatic Linux source tree determination, pass the
-# pathname for the kernel that you want to compile on the command line,
-# like this:
-# make TREE=/usr/my-kernel-tree/include
+# By default, the build is done against the running linux kernel source.
+# To build against a different kernel source tree, set LINUXDIR:
+#
+# make -f Makefile.linux LINUXDIR=/path/to/kernel/source
+
+#
+# To build only some modules, either set DRM_MODULES to the list of modules,
+# or specify the modules as targets:
+#
+# make -f Makefile.linux r128.o radeon.o
+#
+# or:
+#
+# make -f Makefile.linux DRM_MODULES="r128 radeon"
#
SHELL=/bin/sh
.SUFFIXES:
-# *** Setup
+ifndef LINUXDIR
+RUNNING_REL := $(shell uname -r)
-# **** End of SMP/MODVERSIONS detection
+LINUXDIR := /lib/modules/$(RUNNING_REL)/build
+endif
-MODS = gamma.o tdfx.o r128.o radeon.o
-LIBS =
+MACHINE := $(shell uname -m)
-DRMTEMPLATES = drm_auth.h drm_bufs.h drm_context.h drm_dma.h drm_drawable.h \
- drm_drv.h drm_fops.h drm_init.h drm_ioctl.h drm_lists.h \
- drm_lock.h drm_memory.h drm_proc.h drm_stub.h drm_vm.h
-DRMSHARED = drm_sarea.h
-DRMHEADERS = drm.h drmP.h $(DRMSHARED)
+# Modules for all architectures
+MODULE_LIST := gamma.o tdfx.o r128.o radeon.o mga.o #sis.o
-GAMMAOBJS = gamma_drv.o gamma_dma.o
-GAMMAHEADERS = gamma_drv.h $(DRMHEADERS) $(DRMTEMPLATES)
+# Modules only for ix86 architectures
+ifneq (,$(findstring 86,$(MACHINE)))
+MODULE_LIST += i830.o i810.o
+endif
-TDFXOBJS = tdfx_drv.o
-TDFXHEADERS = tdfx.h $(DRMHEADERS) $(DRMTEMPLATES)
+# Add ffb.o for sparc??
-R128OBJS = r128_drv.o r128_cce.o r128_state.o r128_irq.o
-R128HEADERS = r128.h r128_drv.h r128_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
-R128SHARED = r128.h r128_drv.h r128_drm.h r128_cce.c r128_state.c r128_irq.c
+DRM_MODULES ?= $(MODULE_LIST)
-RADEONOBJS = radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o \
- radeon_irq.o
-RADEONHEADERS = radeon.h radeon_drv.h radeon_drm.h $(DRMHEADERS) \
+# These definitions are for handling dependencies in the out of kernel build.
+
+DRMTEMPLATES = drm_auth.h drm_bufs.h drm_context.h drm_dma.h drm_drawable.h \
+ drm_drv.h drm_fops.h drm_init.h drm_ioctl.h drm_lists.h \
+ drm_lock.h drm_memory.h drm_proc.h drm_stub.h drm_vm.h
+
+DRMSHARED = drm_sarea.h
+DRMHEADERS = drm.h drmP.h $(DRMSHARED)
+
+GAMMAHEADERS = gamma_drv.h $(DRMHEADERS) $(DRMTEMPLATES)
+TDFXHEADERS = tdfx.h $(DRMHEADERS) $(DRMTEMPLATES)
+R128HEADERS = r128.h r128_drv.h r128_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
+R128SHARED = r128.h r128_drv.h r128_drm.h r128_cce.c r128_state.c r128_irq.c
+RADEONHEADERS = radeon.h radeon_drv.h radeon_drm.h $(DRMHEADERS) \
+ $(DRMTEMPLATES)
+RADEONSHARED = radeon.h radeon_drv.h radeon_drm.h radeon_cp.c radeon_irq.c \
+ radeon_mem.c radeon_state.c
+MGAHEADERS = mga.h mga_drv.h mga_drm.h mga_ucode.h $(DRMHEADERS) \
$(DRMTEMPLATES)
-RADEONSHARED = radeon.h radeon_drv.h radeon_drm.h radeon_cp.c radeon_irq.c \
- radeon_mem.c radeon_state.c
-
-INC = /usr/include
-
-CFLAGS = -O2 $(WARNINGS)
-WARNINGS = -Wall -Wwrite-strings -Wpointer-arith -Wcast-align \
- -Wstrict-prototypes -Wnested-externs \
- -Wpointer-arith
-# -Wshadow -Winline -- make output too noisy
-MODCFLAGS = $(CFLAGS) -D__KERNEL__ -DMODULE -fomit-frame-pointer -fno-strict-aliasing
-PRGCFLAGS = $(CFLAGS) -g -ansi -pedantic -DPOSIX_C_SOURCE=199309L \
- -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE \
- -I../../../../../../include -I../../../../../../../../include \
- -I../../../../../../../../programs/Xserver/hw/xfree86/common \
- -I. -I../../.. -I../../../../../../../../lib/X11
-PRGLIBS =
-
-# **** Start of SMP/MODVERSIONS detection
-
-# First, locate correct tree for this kernel version. If we find a
-# matching tree, we assume that we can rely on that tree's autoconf.h.
-# This may not be correct, but it is the best assumption we can make.
-
-VERSION := $(shell uname -r)
-# For Red Hat...
-RHVERS := $(shell uname -r)custom
-
-A := /lib/modules/$(VERSION)/build/include
-B := /usr/src/linux-$(VERSION)/include
-C := /usr/src/linux/include
-D := /usr/include
-
-V := $(shell gcc -E -nostdinc -I$A picker.c 2>/dev/null \
- | grep -s 'RELEASE = ' | cut -d' ' -f3)
-ifeq ($(V),"$(VERSION)")
-TREE := $A
-else
-ifeq ($(V),"$(RHVERS)")
- TREE := $A
-else
- V := $(shell gcc -E -nostdinc -I$B picker.c 2>/dev/null \
- | grep -s 'RELEASE = ' | cut -d' ' -f3)
-ifeq ($(V),"$(VERSION)")
- TREE := $B
-else
-ifeq ($(V),"$(RHVERS)")
- TREE := $B
-else
- V := $(shell gcc -E -nostdinc -I$C picker.c 2>/dev/null \
- | grep -s 'RELEASE = ' | cut -d' ' -f3)
-ifeq ($(V),"$(VERSION)")
- TREE := $C
-else
- V := $(shell gcc -E -nostdinc -I$D picker.c 2>/dev/null \
- | grep -s 'RELEASE = ' | cut -d' ' -f3)
-ifeq ($(V),"$(VERSION)")
- TREE := $D
-else
- TREE := 0
-endif
+MGASHARED = mga.h mga_dma.c mga_drm.h mga_drv.h mga_irq.c mga_state.c \
+ mga_ucode.h mga_warp.c
+I810HEADERS = i810.h i810_drv.h i810_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
+I830HEADERS = i830.h i830_drv.h i830_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
+SISHEADERS= sis_drv.h sis_drm.h $(DRMHEADERS)
+
+SHAREDSRC = $(DRMSHARED) $(MGASHARED) $(R128SHARED) $(RADEONSHARED)
+
+CLEANFILES = *.o *.ko $(PROGS) .depend .*.flags .*.d .*.cmd
+
+# VERSION is not defined from the initial invocation. It is defined when
+# this Makefile is invoked from the kernel's root Makefile.
+
+ifndef VERSION
+
+ifdef RUNNING_REL
+
+# SuSE has the version.h and autoconf.h headers for the current kernel
+# in /boot as /boot/vmlinuz.version.h and /boot/vmlinuz.autoconf.h.
+# Check these first to see if they match the running kernel.
+
+BOOTVERSION_PREFIX = /boot/vmlinuz.
+
+V := $(shell if [ -f $(BOOTVERSION_PREFIX)version.h ]; then \
+ grep UTS_RELEASE $(BOOTVERSION_PREFIX)version.h | \
+ cut -d' ' -f3; fi)
+
+ifeq ($(V),"$(RUNNING_REL)")
+HEADERFROMBOOT := 1
+GETCONFIG := MAKEFILES=$(shell pwd)/.config
+HAVECONFIG := y
endif
+
+# On Red Hat we need to check if there is a .config file in the kernel
+# source directory. If there isn't, we need to check if there's a
+# matching file in the configs subdirectory.
+
+ifneq ($(HAVECONFIG),y)
+HAVECONFIG := $(shell if [ -e $(LINUXDIR)/.config ]; then echo y; fi)
endif
+
+ifneq ($(HAVECONFIG),y)
+REL_BASE := $(shell echo $(RUNNING_REL) | sed 's/-.*//')
+REL_TYPE := $(shell echo $(RUNNING_REL) | sed 's/[0-9.-]//g')
+ifeq ($(REL_TYPE),)
+RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE).config
+else
+RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE)-$(REL_TYPE).config
endif
+HAVECONFIG := $(shell if [ -e $(LINUXDIR)/$(RHCONFIG) ]; then echo y; fi)
+ifneq ($(HAVECONFIG),y)
+RHCONFIG :=
endif
endif
-ifeq ($(TREE),0)
-all:; @echo Error: Could not locate kernel tree in $A $B $C $D
-else
-SMP := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
- | grep -s 'SMP = ' | cut -d' ' -f3)
-MODULES := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
- | grep -s 'MODULES = ' | cut -d' ' -f3)
-MODVERSIONS := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
- | grep -s 'MODVERSIONS = ' | cut -d' ' -f3)
-AGP := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
- | grep -s 'AGP = ' | cut -d' ' -f3)
-MACHINE := $(shell echo `uname -m`)
-# Red Hat's kernels have 4 args to do_munmap()
-DOMUNMAP := $(shell grep do_munmap $(TREE)/linux/mm.h | grep -c acct)
-# Red Hat 9 kernel has 5 args to remap_page_range()
-RPR := $(shell grep remap_page_range $(TREE)/linux/mm.h | grep -c vma)
-ifeq ($(AGP),0)
-AGP := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
- | grep -s 'AGP_MODULE = ' | cut -d' ' -f3)
+ifneq ($(HAVECONFIG),y)
+$(error Cannot find a kernel config file)
endif
-ifeq ($(DOMUNMAP),1)
-MODCFLAGS += -DDO_MUNMAP_4_ARGS
-endif
-ifeq ($(RPR),1)
-MODCFLAGS += -DREMAP_PAGE_RANGE_5_ARGS
endif
-ifeq ($(AGP),1)
-MODCFLAGS += -DCONFIG_AGP -DCONFIG_AGP_MODULE
-DRMTEMPLATES += drm_agpsupport.h
-MODS += mga.o
-ifeq ($(MACHINE),i386)
-MODS += i810.o
-MODS += i830.o
-endif
-ifeq ($(MACHINE),i686)
-MODS += i810.o
-MODS += i830.o
+
+CLEANCONFIG := $(shell if cmp -s $(LINUXDIR)/.config .config; then echo y; fi)
+ifeq ($(CLEANCONFIG),y)
+CLEANFILES += $(LINUXDIR)/.config .config $(LINUXDIR)/tmp_include_depends
endif
-MGAOBJS = mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o
-MGAHEADERS = mga.h mga_drv.h mga_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
-MGASHARED = mga.h mga_dma.c mga_drm.h mga_drv.h mga_state.c \
- mga_ucode.h mga_warp.c
+# The Makefile renaming hack is required because the standard kernel build,
+# especially 2.5.52 and later, explicitly references the Makefile by the
+# name "Makefile". For builds prior to 2.5.52, the name GNUmakefile could
+# have been used.
-I810OBJS = i810_drv.o i810_dma.o
-I810HEADERS = i810.h i810_drv.h i810_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
+all: modules
-I830OBJS = i830_drv.o i830_dma.o i830_irq.o
-I830HEADERS = i830.h i830_drv.h i830_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
+modules: includes
+ @if test -f Makefile && cmp -s Makefile Makefile.linux; then : ; \
+ else \
+ if [ -e Makefile ]; then \
+ (set -x; mv -f Makefile Makefile._xx_); fi; \
+ (set -x; ln -s Makefile.linux Makefile); fi
+ make -C $(LINUXDIR) $(GETCONFIG) SUBDIRS=`pwd` DRMSRCDIR=`pwd` modules
+ @if cmp -s Makefile Makefile.linux; then \
+ (set -x; rm -f Makefile); \
+ if [ -e Makefile._xx_ ]; then \
+ (set -x; mv -f Makefile._xx_ Makefile); fi; fi
-endif
+ifeq ($(HEADERFROMBOOT),1)
-ifeq ($(MACHINE),alpha)
-MODCFLAGS+= -ffixed-8 -mno-fp-regs -mcpu=ev56 -Wa,-mev6
-endif
-ifeq ($(MACHINE),x86_64)
-MODCFLAGS+= -mcmodel=kernel
-endif
+BOOTHEADERS = version.h autoconf.h
+BOOTCONFIG = .config
+CLEANFILES += $(BOOTHEADERS) $(BOOTCONFIG)
-MODS += sis.o
+includes:: $(BOOTHEADERS) $(BOOTCONFIG)
-SISOBJS= sis_drv.o sis_mm.o sis_ds.o
-SISHEADERS= sis_drv.h sis_drm.h $(DRMHEADERS)
-MODCFLAGS += -DCONFIG_DRM_SIS
+version.h: $(BOOTVERSION_PREFIX)version.h
+ rm -f $@
+ ln -s $< $@
-all::;@echo === KERNEL HEADERS IN $(TREE)
-all::;@echo === SMP=${SMP} MODULES=${MODULES} MODVERSIONS=${MODVERSIONS} AGP=${AGP}
-all::;@echo === Compiling for machine $(MACHINE)
-all::;@echo === WARNING
-all::;@echo === WARNING Use 2.4.x kernels ONLY !
-all::;@echo === WARNING
+autoconf.h: $(BOOTVERSION_PREFIX)autoconf.h
+ rm -f $@
+ ln -s $< $@
-ifeq ($(MODULES),0)
-all::;@echo
-all::;@echo "*** Kernel modules must be configured. Build aborted."
-all::;@echo
-else
-all:: $(LIBS) $(MODS) $(PROGS)
+.config: $(BOOTVERSION_PREFIX)config
+ rm -f $@
+ ln -s $< $@
endif
-endif
+# This prepares an unused Red Hat kernel tree for the build.
+ifneq ($(RHCONFIG),)
+includes:: $(LINUXDIR)/.config $(LINUXDIR)/tmp_include_depends .config
-# **** End of SMP/MODVERSIONS detection
+$(LINUXDIR)/.config: $(LINUXDIR)/$(RHCONFIG)
+ rm -f $@
+ ln -s $< $@
-# **** Handle SMP/MODVERSIONS
-ifeq ($(SMP),1)
-MODCFLAGS += -D__SMP__
-endif
-ifeq ($(MODVERSIONS),1)
-MODCFLAGS += -DMODVERSIONS -include $(TREE)/linux/modversions.h
+.config: $(LINUXDIR)/$(RHCONFIG)
+ rm -f $@
+ ln -s $< $@
+
+$(LINUXDIR)/tmp_include_depends:
+ echo all: > $@
endif
-# **** End of configuration
+# Make sure that the shared source files are linked into this directory.
-# Link in shared headers if needed
-SHAREDSRC = $(DRMSHARED) $(MGASHARED) $(R128SHARED) $(RADEONSHARED)
-SHAREDDIR = ../../../shared/drm/kernel
+SHAREDDIR := ../../../shared/drm/kernel
+
+HASSHARED := $(shell if [ -d $(SHAREDDIR) ]; then echo y; fi)
+
+ifeq ($(HASSHARED),y)
+includes:: $(SHAREDSRC)
$(SHAREDSRC):
- @if [ ! -r $@ ]; then (rm -f $@; set -x; ln -s $(SHAREDDIR)/$@ .); fi
+ @if [ -r $(SHAREDDIR)/$@ ]; then \
+ (rm -f $@; set -x; ln -s $(SHAREDDIR)/$@ $@); fi
+
+CLEANFILES += $(SHAREDSRC)
+endif
+includes:: linux
-dristat: dristat.c
- $(CC) $(PRGCFLAGS) $< -o $@
+linux:
+ rm -f linux
+ ln -s . linux
-DRIsetup: DRIsetup.c
- $(CC) $(PRGCFLAGS) $< -o $@ -L/usr/X11R6/lib -lGL -lm ../../../../parser/libxf86config.a ../libdrm.a
+clean cleandir:
+ rm -f $(CLEANFILES)
-gamma_drv.o: gamma_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-gamma.o: $(GAMMAOBJS)
- $(LD) -r $^ -o $@
+$(MODULE_LIST)::
+ make -f Makefile.linux DRM_MODULES=$@ modules
-tdfx_drv.o: tdfx_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-tdfx.o: $(TDFXOBJS) $(LIBS)
- $(LD) -r $^ -o $@
+else
+
+# Check for kernel versions that we don't support.
-sis.o: $(SISOBJS) $(LIBS)
- $(LD) -r $^ -o $@
+BELOW24 := $(shell if [ $(VERSION) -lt 2 -o $(PATCHLEVEL) -lt 4 ]; then \
+ echo y; fi)
-r128_drv.o: r128_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-r128.o: $(R128OBJS) $(LIBS)
- $(LD) -r $^ -o $@
+ifeq ($(BELOW24),y)
+$(error Only 2.4.x and later kernels are supported \
+ ($(VERSION).$(PATCHLEVEL).$(SUBLEVEL)))
+endif
-radeon_drv.o: radeon_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-radeon.o: $(RADEONOBJS) $(LIBS)
- $(LD) -r $^ -o $@
+# This needs to go before all other include paths.
+CC += -I$(DRMSRCDIR)
-ifeq ($(AGP),1)
-mga_drv.o: mga_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-mga.o: $(MGAOBJS)
- $(LD) -r $^ -o $@
+# Check for Red Hat's 4-argument do_munmap().
+DOMUNMAP := $(shell grep do_munmap $(LINUXDIR)/include/linux/mm.h | \
+ grep -c acct)
+# Check for 5-argument remap_page_range() in RH9 kernel, and 2.5.x kernels
+RPR := $(shell grep remap_page_range $(LINUXDIR)/include/linux/mm.h | \
+ grep -c vma)
-i810_drv.o: i810_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-i810.o: $(I810OBJS) $(LIBS)
- $(LD) -r $^ -o $@
+ifneq ($(DOMUNMAP),0)
+EXTRA_CFLAGS += -DDO_MUNMAP_4_ARGS
+endif
-i830_drv.o: i830_drv.c
- $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
-i830.o: $(I830OBJS) $(LIBS)
- $(LD) -r $^ -o $@
+ifneq ($(RPR),0)
+EXTRA_CFLAGS += -DREMAP_PAGE_RANGE_5_ARGS
+endif
+# Start with all modules turned off.
+CONFIG_DRM_GAMMA := n
+CONFIG_DRM_TDFX := n
+CONFIG_DRM_MGA := n
+CONFIG_DRM_I810 := n
+CONFIG_DRM_R128 := n
+CONFIG_DRM_RADEON := n
+CONFIG_DRM_I830 := n
+CONFIG_DRM_SIS := n
+CONFIG_DRM_FFB := n
+
+# Enable module builds for the modules requested/supported.
+
+ifneq (,$(findstring gamma,$(DRM_MODULES)))
+CONFIG_DRM_GAMMA := m
+endif
+ifneq (,$(findstring tdfx,$(DRM_MODULES)))
+CONFIG_DRM_TDFX := m
endif
-.PHONY: ChangeLog
-ChangeLog:
- @rm -f Changelog
- @rcs2log -i 2 -r -l \
- | sed 's,@.*light,,' \
- | sed 's,/cvsroot/.*/drm/kernel/,,g' \
- > ChangeLog
-
-
-# .o files are used for modules
-%.o: %.c
- $(CC) $(MODCFLAGS) -I$(TREE) -c $< -o $@
-
-$(GAMMAOBJS): $(GAMMAHEADERS)
-$(TDFXOBJS): $(TDFXHEADERS)
-$(R128OBJS): $(R128HEADERS)
-$(RADEONOBJS): $(RADEONHEADERS)
-ifeq ($(AGP),1)
-$(MGAOBJS): $(MGAHEADERS)
-$(I810OBJS): $(I810HEADERS)
-$(I830OBJS): $(I830HEADERS)
+# These require AGP support
+
+ifdef CONFIG_AGP
+ifneq (,$(findstring mga,$(DRM_MODULES)))
+CONFIG_DRM_MGA := m
+endif
+ifneq (,$(findstring i810,$(DRM_MODULES)))
+CONFIG_DRM_I810 := m
endif
+ifneq (,$(findstring r128,$(DRM_MODULES)))
+CONFIG_DRM_R128 := m
+endif
+ifneq (,$(findstring radeon,$(DRM_MODULES)))
+CONFIG_DRM_RADEON := m
+endif
+ifneq (,$(findstring i830,$(DRM_MODULES)))
+CONFIG_DRM_I830 := m
+endif
+ifneq (,$(findstring sis,$(DRM_MODULES)))
+CONFIG_DRM_SIS := m
+endif
+endif
+
+include $(DRMSRCDIR)/Makefile.kernel
-clean cleandir::
- rm -f *.o *.a *~ core
- @for i in $(SHAREDSRC); do \
- if [ -L $$i ]; then (set -x; rm -f $$i); fi; \
- done
+# Depencencies
+$(gamma-objs): $(GAMMAHEADERS)
+$(tdfx-objs): $(TDFXHEADERS)
+$(r128-objs): $(R128HEADERS)
+$(mga-objs): $(MGAHEADERS)
+$(i810-objs): $(I810HEADERS)
+$(i830-objs): $(I830HEADERS)
+$(radeon-objs): $(RADEONHEADERS)
+$(sis-objs): $(SISHEADERS)
+$(ffb-objs): $(FFBHEADERS)
+
+endif
diff --git a/linux/picker.c b/linux/picker.c
deleted file mode 100644
index 6c228dfc..00000000
--- a/linux/picker.c
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#include <linux/config.h>
-#include <linux/version.h>
-
-#ifndef CONFIG_SMP
-#define CONFIG_SMP 0
-#endif
-
-#ifndef CONFIG_MODULES
-#define CONFIG_MODULES 0
-#endif
-
-#ifndef CONFIG_MODVERSIONS
-#define CONFIG_MODVERSIONS 0
-#endif
-
-#ifndef CONFIG_AGP_MODULE
-#define CONFIG_AGP_MODULE 0
-#endif
-
-#ifndef CONFIG_AGP
-#define CONFIG_AGP 0
-#endif
-
-SMP = CONFIG_SMP
-MODULES = CONFIG_MODULES
-MODVERSIONS = CONFIG_MODVERSIONS
-AGP = CONFIG_AGP
-AGP_MODULE = CONFIG_AGP_MODULE
-RELEASE = UTS_RELEASE