Commit 37055f70 authored by Andy Grover's avatar Andy Grover

Merge groveronline.com:/root/bk/linux-2.5

into groveronline.com:/root/bk/linux-acpi
parents 71377918 e4d188bb
...@@ -7,9 +7,8 @@ config ALPHA ...@@ -7,9 +7,8 @@ config ALPHA
default y default y
help help
The Alpha is a 64-bit general-purpose processor designed and The Alpha is a 64-bit general-purpose processor designed and
marketed by the Digital Equipment Corporation of blessed memory, now marketed by the Digital Equipment Corporation of blessed memory,
Compaq. Alpha Linux dates from 1995-1996 and was the first non-x86 now Hewlett-Packard. The Alpha Linux project has a home page at
port. The Alpha Linux project has a home page at
<http://www.alphalinux.org/>. <http://www.alphalinux.org/>.
config MMU config MMU
...@@ -42,9 +41,6 @@ menu "System setup" ...@@ -42,9 +41,6 @@ menu "System setup"
choice choice
prompt "Alpha system type" prompt "Alpha system type"
default ALPHA_GENERIC default ALPHA_GENERIC
config ALPHA_GENERIC
bool "Generic"
---help--- ---help---
This is the system type of your hardware. A "generic" kernel will This is the system type of your hardware. A "generic" kernel will
run on any supported Alpha system. However, if you configure a run on any supported Alpha system. However, if you configure a
...@@ -84,6 +80,11 @@ config ALPHA_GENERIC ...@@ -84,6 +80,11 @@ config ALPHA_GENERIC
If you don't know what to do, choose "generic". If you don't know what to do, choose "generic".
config ALPHA_GENERIC
bool "Generic"
help
A generic kernel will run on all supported Alpha hardware.
config ALPHA_ALCOR config ALPHA_ALCOR
bool "Alcor/Alpha-XLT" bool "Alcor/Alpha-XLT"
help help
......
...@@ -10,13 +10,17 @@ ...@@ -10,13 +10,17 @@
NM := $(NM) -B NM := $(NM) -B
LDFLAGS_vmlinux = -static -N #-relax LDFLAGS_vmlinux := -static -N #-relax
CFLAGS := $(CFLAGS) -pipe -mno-fp-regs -ffixed-8
LDFLAGS_BLOB := --format binary --oformat elf64-alpha LDFLAGS_BLOB := --format binary --oformat elf64-alpha
cflags-y := -pipe -mno-fp-regs -ffixed-8
# Determine if we can use the BWX instructions with GAS. # Determine if we can use the BWX instructions with GAS.
old_gas := $(shell if $(AS) --version 2>&1 | grep 'version 2.7' > /dev/null; then echo y; else echo n; fi) old_gas := $(shell if $(AS) --version 2>&1 | grep 'version 2.7' > /dev/null; then echo y; else echo n; fi)
ifeq ($(old_gas),y)
$(error The assembler '$(AS)' does not support the BWX instruction)
endif
# Determine if GCC understands the -mcpu= option. # Determine if GCC understands the -mcpu= option.
have_mcpu := $(shell if $(CC) -mcpu=ev5 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) have_mcpu := $(shell if $(CC) -mcpu=ev5 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi)
...@@ -27,68 +31,64 @@ have_mcpu_ev6 := $(shell if $(CC) -mcpu=ev6 -S -o /dev/null -xc /dev/null > /dev ...@@ -27,68 +31,64 @@ have_mcpu_ev6 := $(shell if $(CC) -mcpu=ev6 -S -o /dev/null -xc /dev/null > /dev
have_mcpu_ev67 := $(shell if $(CC) -mcpu=ev67 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) have_mcpu_ev67 := $(shell if $(CC) -mcpu=ev67 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi)
have_msmall_data := $(shell if $(CC) -msmall-data -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) have_msmall_data := $(shell if $(CC) -msmall-data -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi)
ifeq ($(have_msmall_data),y)
CFLAGS := $(CFLAGS) -msmall-data cflags-$(have_msmall_data) += -msmall-data
endif
# Turn on the proper cpu optimizations. # Turn on the proper cpu optimizations.
ifeq ($(have_mcpu),y) ifeq ($(have_mcpu),y)
mcpu_done := n
# If GENERIC, make sure to turn off any instruction set extensions that # If GENERIC, make sure to turn off any instruction set extensions that
# the host compiler might have on by default. Given that EV4 and EV5 # the host compiler might have on by default. Given that EV4 and EV5
# have the same instruction set, prefer EV5 because an EV5 schedule is # have the same instruction set, prefer EV5 because an EV5 schedule is
# more likely to keep an EV4 processor busy than vice-versa. # more likely to keep an EV4 processor busy than vice-versa.
mcpu_done := n
ifeq ($(CONFIG_ALPHA_GENERIC),y) ifeq ($(CONFIG_ALPHA_GENERIC),y)
CFLAGS := $(CFLAGS) -mcpu=ev5 mcpu := ev5
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_SX164)$(have_mcpu_pca56),nyy) ifeq ($(mcpu_done)$(CONFIG_ALPHA_SX164)$(have_mcpu_pca56),nyy)
CFLAGS := $(CFLAGS) -mcpu=pca56 mcpu := pca56
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_POLARIS)$(have_mcpu_pca56),nyy) ifeq ($(mcpu_done)$(CONFIG_ALPHA_POLARIS)$(have_mcpu_pca56),nyy)
CFLAGS := $(CFLAGS) -mcpu=pca56 mcpu := pca56
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV4),ny) ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV4),ny)
CFLAGS := $(CFLAGS) -mcpu=ev4 mcpu := ev4
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV56),ny) ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV56),ny)
CFLAGS := $(CFLAGS) -mcpu=ev56 mcpu := ev56
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV5),ny) ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV5),ny)
CFLAGS := $(CFLAGS) -mcpu=ev5 mcpu := ev5
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV67)$(have_mcpu_ev67),nyy) ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV67)$(have_mcpu_ev67),nyy)
CFLAGS := $(CFLAGS) -mcpu=ev67 mcpu := ev67
mcpu_done := y mcpu_done := y
endif endif
ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV6),ny) ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV6),ny)
ifeq ($(have_mcpu_ev6),y) ifeq ($(have_mcpu_ev6),y)
CFLAGS := $(CFLAGS) -mcpu=ev6 mcpu := ev6
else else
ifeq ($(have_mcpu_pca56),y) ifeq ($(have_mcpu_pca56),y)
CFLAGS := $(CFLAGS) -mcpu=pca56 mcpu := pca56
else else
CFLAGS := $(CFLAGS) -mcpu=ev56 mcpu=ev56
endif endif
endif endif
mcpu_done := y mcpu_done := y
endif endif
cflags-$(mcpu_done) += -mcpu=$(mcpu)
endif endif
# For TSUNAMI, we must have the assembler not emulate our instructions. # For TSUNAMI, we must have the assembler not emulate our instructions.
# The same is true for IRONGATE, POLARIS, PYXIS. # The same is true for IRONGATE, POLARIS, PYXIS.
# BWX is most important, but we don't really want any emulation ever. # BWX is most important, but we don't really want any emulation ever.
CFLAGS += $(cflags-y) -Wa,-mev6
ifeq ($(old_gas),y)
# How do we do #error in make?
CFLAGS := --error-please-upgrade-your-assembler
endif
CFLAGS := $(CFLAGS) -Wa,-mev6
HEAD := arch/alpha/kernel/head.o HEAD := arch/alpha/kernel/head.o
...@@ -96,37 +96,16 @@ core-y += arch/alpha/kernel/ arch/alpha/mm/ ...@@ -96,37 +96,16 @@ core-y += arch/alpha/kernel/ arch/alpha/mm/
core-$(CONFIG_MATHEMU) += arch/alpha/math-emu/ core-$(CONFIG_MATHEMU) += arch/alpha/math-emu/
libs-y += arch/alpha/lib/ libs-y += arch/alpha/lib/
export libs-y boot := arch/alpha/boot
MAKEBOOT = $(MAKE) -C arch/alpha/boot
rawboot: vmlinux #Default target when executing make with no arguments
@$(MAKEBOOT) rawboot all boot: $(boot)/vmlinux.gz
boot: vmlinux $(boot)/vmlinux.gz: vmlinux
@$(MAKEBOOT) $(Q)$(MAKE) -f scripts/Makefile.build obj=$(boot) $@
# bootimage bootpfile: vmlinux
# My boot writes directly to a specific disk partition, I doubt most $(Q)$(MAKE) -f scripts/Makefile.build obj=$(boot) $(boot)/$@
# people will want to do that without changes..
#
msb my-special-boot: vmlinux
@$(MAKEBOOT) msb
bootimage: vmlinux
@$(MAKEBOOT) bootimage
srmboot: vmlinux
@$(MAKEBOOT) srmboot
archclean:
@$(MAKEBOOT) clean
archmrproper:
rm -f include/asm-alpha/asm_offsets.h
bootpfile: vmlinux
@$(MAKEBOOT) bootpfile
prepare: include/asm-$(ARCH)/asm_offsets.h prepare: include/asm-$(ARCH)/asm_offsets.h
...@@ -134,12 +113,19 @@ prepare: include/asm-$(ARCH)/asm_offsets.h ...@@ -134,12 +113,19 @@ prepare: include/asm-$(ARCH)/asm_offsets.h
arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \ arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
include/config/MARKER include/config/MARKER
include/asm-$(ARCH)/asm_offsets.h.tmp: arch/$(ARCH)/kernel/asm-offsets.s include/asm-$(ARCH)/asm_offsets.h: arch/$(ARCH)/kernel/asm-offsets.s
@$(generate-asm-offsets.h) < $< > $@
include/asm-$(ARCH)/asm_offsets.h: include/asm-$(ARCH)/asm_offsets.h.tmp
@echo -n ' Generating $@' @echo -n ' Generating $@'
@$(generate-asm-offsets.h) < $< > $@.tmp
@$(update-if-changed) @$(update-if-changed)
archclean:
$(Q)$(MAKE) -f scripts/Makefile.clean obj=$(boot)
CLEAN_FILES += include/asm-$(ARCH)/offset.h.tmp \ CLEAN_FILES += include/asm-$(ARCH)/offset.h.tmp \
include/asm-$(ARCH)/offset.h include/asm-$(ARCH)/offset.h
define archhelp
echo '* boot - Compressed kernel image (arch/alpha/boot/vmlinux.gz)'
echo ' bootimage - SRM bootable image (arch/alpha/boot/bootimage)'
echo ' bootpfile - BOOTP bootable image (arch/alpha/boot/bootpfile)'
endef
...@@ -8,58 +8,35 @@ ...@@ -8,58 +8,35 @@
# Copyright (C) 1994 by Linus Torvalds # Copyright (C) 1994 by Linus Torvalds
# #
LINKFLAGS = -static -T bootloader.lds -uvsprintf #-N -relax host-progs := tools/mkbb tools/objstrip
EXTRA_TARGETS := vmlinux.gz vmlinux \
CFLAGS := $(CFLAGS) -I$(TOPDIR)/include vmlinux.nh tools/lxboot tools/bootlx tools/bootph \
bootloader bootpheader
.S.s: OBJSTRIP := $(obj)/tools/objstrip
$(CPP) $(AFLAGS) -traditional -o $*.o $<
.S.o: # SRM bootable image. Copy to offset 512 of a partition.
$(CC) $(AFLAGS) -traditional -c -o $*.o $< $(obj)/bootimage: $(addprefix $(obj)/tools/,mkbb lxboot bootlx) $(obj)/vmlinux.nh
( cat $(obj)/tools/lxboot $(obj)/tools/bootlx $(obj)/vmlinux.nh ) > $@
OBJECTS = head.o main.o $(obj)/tools/mkbb $@ $(obj)/tools/lxboot
BPOBJECTS = head.o bootp.o @echo ' Bootimage $@ is ready'
TARGETS = vmlinux.gz tools/objstrip # also needed by aboot & milo
VMLINUX = $(TOPDIR)/vmlinux # BOOTP bootable image. Define INITRD during make to append initrd image.
OBJSTRIP = tools/objstrip $(obj)/bootpfile: $(obj)/tools/bootph $(obj)/vmlinux.nh
LIBS := $(addprefix $(TOPDIR)/,$(libs-y)) cat $(obj)/tools/bootph $(obj)/vmlinux.nh > $@
all: $(TARGETS)
@echo Ready to install kernel in $(shell pwd)/vmlinux.gz
# normally no need to build these:
rawboot: vmlinux.nh tools/lxboot tools/bootlx
msb: tools/lxboot tools/bootlx vmlinux.nh
( cat tools/lxboot tools/bootlx vmlinux.nh ) > /dev/rz0a
disklabel -rw rz0 'linux' tools/lxboot tools/bootlx
bootimage: tools/mkbb tools/lxboot tools/bootlx vmlinux.nh
( cat tools/lxboot tools/bootlx vmlinux.nh ) > bootimage
tools/mkbb bootimage tools/lxboot
bootpfile: tools/bootph vmlinux.nh
cat tools/bootph vmlinux.nh > bootpfile
ifdef INITRD ifdef INITRD
cat $(INITRD) >> bootpfile cat $(INITRD) >> $@
endif endif
srmboot: bootdevice bootimage # Compressed kernel image
dd if=bootimage of=$(BOOTDEV) bs=512 seek=1 skip=1 $(obj)/vmlinux.gz: $(obj)/vmlinux FORCE
tools/mkbb $(BOOTDEV) tools/lxboot $(call if_changed,gzip)
@echo ' Kernel $@ is ready'
bootdevice:
@test "$(BOOTDEV)" != "" || (echo You must specify BOOTDEV ; exit -1)
vmlinux.gz: vmlinux $(obj)/main.o: $(obj)/ksize.h
gzip -fv9 vmlinux $(obj)/bootp.o: $(obj)/ksize.h
main.o: ksize.h $(obj)/ksize.h: $(obj)/vmlinux.nh FORCE
echo "#define KERNEL_SIZE `ls -l $(obj)/vmlinux.nh | awk '{print $$5}'`" > $@T
bootp.o: ksize.h
ksize.h: vmlinux.nh FORCE
echo "#define KERNEL_SIZE `ls -l vmlinux.nh | awk '{print $$5}'`" > $@T
ifdef INITRD ifdef INITRD
[ -f $(INITRD) ] || exit 1 [ -f $(INITRD) ] || exit 1
echo "#define INITRD_IMAGE_SIZE `ls -l $(INITRD) | awk '{print $$5}'`" >> $@T echo "#define INITRD_IMAGE_SIZE `ls -l $(INITRD) | awk '{print $$5}'`" >> $@T
...@@ -67,36 +44,36 @@ endif ...@@ -67,36 +44,36 @@ endif
cmp -s $@T $@ || mv -f $@T $@ cmp -s $@T $@ || mv -f $@T $@
rm -f $@T rm -f $@T
vmlinux.nh: $(VMLINUX) $(OBJSTRIP) quiet_cmd_strip = STRIP $@
$(OBJSTRIP) -v $(VMLINUX) vmlinux.nh cmd_strip = $(STRIP) -o $@ $<
$(obj)/vmlinux: vmlinux FORCE
vmlinux: $(TOPDIR)/vmlinux $(call if_changed,strip)
$(STRIP) -o vmlinux $(VMLINUX)
tools/lxboot: $(OBJSTRIP) bootloader quiet_cmd_objstrip = OBJSTRIP $@
$(OBJSTRIP) -p bootloader tools/lxboot cmd_objstrip = $(OBJSTRIP) $(OSFLAGS_$(@F)) $< $@
tools/bootlx: bootloader $(OBJSTRIP) OSFLAGS_vmlinux.nh := -v
$(OBJSTRIP) -vb bootloader tools/bootlx OSFLAGS_lxboot := -p
OSFLAGS_bootlx := -vb
OSFLAGS_bootph := -vb
tools/bootph: bootpheader $(OBJSTRIP) $(obj)/vmlinux.nh: vmlinux $(OBJSTRIP) FORCE
$(OBJSTRIP) -vb bootpheader tools/bootph $(call if_changed,objstrip)
$(OBJSTRIP): $(OBJSTRIP).c $(obj)/tools/lxboot: $(obj)/bootloader $(OBJSTRIP) FORCE
$(HOSTCC) $(HOSTCFLAGS) $< -o $@ $(call if_changed,objstrip)
tools/mkbb: tools/mkbb.c $(obj)/tools/bootlx: $(obj)/bootloader $(OBJSTRIP) FORCE
$(HOSTCC) tools/mkbb.c -o tools/mkbb $(call if_changed,objstrip)
bootloader: $(OBJECTS) $(obj)/tools/bootph: $(obj)/bootpheader $(OBJSTRIP) FORCE
$(LD) $(LINKFLAGS) $(OBJECTS) $(LIBS) -o bootloader $(call if_changed,objstrip)
bootpheader: $(BPOBJECTS) LDFLAGS_bootloader := -static -uvsprintf -T #-N -relax
$(LD) $(LINKFLAGS) $(BPOBJECTS) $(LIBS) -o bootpheader LDFLAGS_bootpheader := -static -uvsprintf -T #-N -relax
clean: $(obj)/bootloader: $(obj)/bootloader.lds $(obj)/head.o $(obj)/main.o FORCE
rm -f $(TARGETS) bootloader bootimage bootpfile bootpheader $(call if_changed,ld)
rm -f tools/mkbb tools/bootlx tools/lxboot tools/bootph
rm -f vmlinux.nh ksize.h
FORCE: $(obj)/bootpheader: $(obj)/bootloader.lds $(obj)/head.o $(obj)/bootp.o FORCE
$(call if_changed,ld)
...@@ -12,83 +12,77 @@ obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \ ...@@ -12,83 +12,77 @@ obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \
irq_alpha.o signal.o setup.o ptrace.o time.o semaphore.o \ irq_alpha.o signal.o setup.o ptrace.o time.o semaphore.o \
alpha_ksyms.o systbls.o err_common.o alpha_ksyms.o systbls.o err_common.o
# obj-$(CONFIG_VGA_HOSE) += console.o
# FIXME!
# These should be made conditional on the stuff that needs them!
#
obj-y += irq_i8259.o irq_srm.o \
es1888.o smc37c669.o smc37c93x.o ns87312.o
ifdef CONFIG_VGA_HOSE
obj-y += console.o
endif
obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_PCI) += pci.o pci_iommu.o obj-$(CONFIG_PCI) += pci.o pci_iommu.o
obj-$(CONFIG_SRM_ENV) += srm_env.o obj-$(CONFIG_SRM_ENV) += srm_env.o
ifdef CONFIG_ALPHA_GENERIC ifdef CONFIG_ALPHA_GENERIC
obj-y += core_apecs.o core_cia.o core_irongate.o core_lca.o core_mcpcia.o \ obj-y += core_apecs.o core_cia.o core_irongate.o core_lca.o \
core_polaris.o core_t2.o core_tsunami.o core_titan.o \ core_mcpcia.o core_polaris.o core_t2.o core_tsunami.o \
sys_alcor.o sys_cabriolet.o sys_dp264.o sys_eb64p.o sys_eiger.o \ core_titan.o core_wildfire.o
obj-y += sys_alcor.o sys_cabriolet.o sys_dp264.o sys_eb64p.o sys_eiger.o \
sys_jensen.o sys_miata.o sys_mikasa.o sys_nautilus.o sys_titan.o \ sys_jensen.o sys_miata.o sys_mikasa.o sys_nautilus.o sys_titan.o \
sys_noritake.o sys_rawhide.o sys_ruffian.o sys_rx164.o \ sys_noritake.o sys_rawhide.o sys_ruffian.o sys_rx164.o \
sys_sable.o sys_sio.o sys_sx164.o sys_takara.o \ sys_sable.o sys_sio.o sys_sx164.o sys_takara.o \
sys_wildfire.o core_wildfire.o irq_pyxis.o sys_wildfire.o
obj-y += irq_pyxis.o irq_i8259.o irq_srm.o
obj-y += es1888.o smc37c669.o smc37c93x.o ns87312.o
else else
# Core logic support # Core logic support
obj-$(CONFIG_ALPHA_APECS) += core_apecs.o obj-$(CONFIG_ALPHA_APECS) += core_apecs.o
obj-$(CONFIG_ALPHA_CIA) += core_cia.o obj-$(CONFIG_ALPHA_CIA) += core_cia.o
obj-$(CONFIG_ALPHA_IRONGATE) += core_irongate.o obj-$(CONFIG_ALPHA_IRONGATE) += core_irongate.o
obj-$(CONFIG_ALPHA_LCA) += core_lca.o obj-$(CONFIG_ALPHA_LCA) += core_lca.o
obj-$(CONFIG_ALPHA_MCPCIA) += core_mcpcia.o obj-$(CONFIG_ALPHA_MCPCIA) += core_mcpcia.o
obj-$(CONFIG_ALPHA_POLARIS) += core_polaris.o
obj-$(CONFIG_ALPHA_T2) += core_t2.o obj-$(CONFIG_ALPHA_T2) += core_t2.o
obj-$(CONFIG_ALPHA_TSUNAMI) += core_tsunami.o obj-$(CONFIG_ALPHA_TSUNAMI) += core_tsunami.o
obj-$(CONFIG_ALPHA_TITAN) += core_titan.o obj-$(CONFIG_ALPHA_TITAN) += core_titan.o
obj-$(CONFIG_ALPHA_POLARIS) += core_polaris.o
obj-$(CONFIG_ALPHA_WILDFIRE) += core_wildfire.o obj-$(CONFIG_ALPHA_WILDFIRE) += core_wildfire.o
# Board support # Board support
ifneq ($(CONFIG_ALPHA_ALCOR)$(CONFIG_ALPHA_XLT),) obj-$(CONFIG_ALPHA_ALCOR) += sys_alcor.o irq_i8259.o irq_srm.o
obj-y += sys_alcor.o obj-$(CONFIG_ALPHA_CABRIOLET) += sys_cabriolet.o irq_i8259.o irq_srm.o \
endif ns87312.o
ifneq ($(CONFIG_ALPHA_CABRIOLET)$(CONFIG_ALPHA_EB164)$(CONFIG_ALPHA_EB66P)$(CONFIG_ALPHA_LX164)$(CONFIG_ALPHA_PC164),) obj-$(CONFIG_ALPHA_EB164) += sys_cabriolet.o irq_i8259.o irq_srm.o \
obj-y += sys_cabriolet.o ns87312.o
endif obj-$(CONFIG_ALPHA_EB66P) += sys_cabriolet.o irq_i8259.o irq_srm.o \
ns87312.o
obj-$(CONFIG_ALPHA_DP264) += sys_dp264.o obj-$(CONFIG_ALPHA_LX164) += sys_cabriolet.o irq_i8259.o irq_srm.o \
obj-$(CONFIG_ALPHA_SHARK) += sys_dp264.o smc37c93x.o
obj-$(CONFIG_ALPHA_TITAN) += sys_titan.o obj-$(CONFIG_ALPHA_PC164) += sys_cabriolet.o irq_i8259.o irq_srm.o \
smc37c93x.o
ifneq ($(CONFIG_ALPHA_EB64P)$(CONFIG_ALPHA_EB66),) obj-$(CONFIG_ALPHA_DP264) += sys_dp264.o irq_i8259.o es1888.o smc37c669.o
obj-y += sys_eb64p.o obj-$(CONFIG_ALPHA_SHARK) += sys_dp264.o irq_i8259.o es1888.o smc37c669.o
endif obj-$(CONFIG_ALPHA_TITAN) += sys_titan.o irq_i8259.o smc37c669.o
obj-$(CONFIG_ALPHA_EB64P) += sys_eb64p.o irq_i8259.o
obj-$(CONFIG_ALPHA_EIGER) += sys_eiger.o obj-$(CONFIG_ALPHA_EB66) += sys_eb64p.o irq_i8259.o
obj-$(CONFIG_ALPHA_JENSEN) += sys_jensen.o pci-noop.o obj-$(CONFIG_ALPHA_EIGER) += sys_eiger.o irq_i8259.o
obj-$(CONFIG_ALPHA_MIATA) += sys_miata.o obj-$(CONFIG_ALPHA_JENSEN) += sys_jensen.o pci-noop.o irq_i8259.o
obj-$(CONFIG_ALPHA_MIKASA) += sys_mikasa.o obj-$(CONFIG_ALPHA_MIATA) += sys_miata.o irq_pyxis.o irq_i8259.o \
obj-$(CONFIG_ALPHA_NAUTILUS) += sys_nautilus.o es1888.o smc37c669.o
obj-$(CONFIG_ALPHA_NORITAKE) += sys_noritake.o obj-$(CONFIG_ALPHA_MIKASA) += sys_mikasa.o irq_i8259.o irq_srm.o
obj-$(CONFIG_ALPHA_RAWHIDE) += sys_rawhide.o obj-$(CONFIG_ALPHA_NAUTILUS) += sys_nautilus.o irq_i8259.o irq_srm.o
obj-$(CONFIG_ALPHA_RUFFIAN) += sys_ruffian.o obj-$(CONFIG_ALPHA_NORITAKE) += sys_noritake.o irq_i8259.o
obj-$(CONFIG_ALPHA_RX164) += sys_rx164.o obj-$(CONFIG_ALPHA_RAWHIDE) += sys_rawhide.o irq_i8259.o
obj-$(CONFIG_ALPHA_RUFFIAN) += sys_ruffian.o irq_pyxis.o irq_i8259.o
obj-$(CONFIG_ALPHA_RX164) += sys_rx164.o irq_i8259.o
obj-$(CONFIG_ALPHA_SABLE) += sys_sable.o obj-$(CONFIG_ALPHA_SABLE) += sys_sable.o
obj-$(CONFIG_ALPHA_BOOK1) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o
ifneq ($(CONFIG_ALPHA_BOOK1)$(CONFIG_ALPHA_AVANTI)$(CONFIG_ALPHA_NONAME)$(CONFIG_ALPHA_P2K)$(CONFIG_ALPHA_XL),) obj-$(CONFIG_ALPHA_AVANTI) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o
obj-y += sys_sio.o obj-$(CONFIG_ALPHA_NONAME) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o
endif obj-$(CONFIG_ALPHA_P2K) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o
obj-$(CONFIG_ALPHA_XL) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o
obj-$(CONFIG_ALPHA_SX164) += sys_sx164.o obj-$(CONFIG_ALPHA_SX164) += sys_sx164.o irq_pyxis.o irq_i8259.o \
obj-$(CONFIG_ALPHA_TAKARA) += sys_takara.o irq_srm.o smc37c669.o
obj-$(CONFIG_ALPHA_WILDFIRE) += sys_wildfire.o obj-$(CONFIG_ALPHA_TAKARA) += sys_takara.o irq_i8259.o ns87312.o
obj-$(CONFIG_ALPHA_WILDFIRE) += sys_wildfire.o irq_i8259.o
ifneq ($(CONFIG_ALPHA_MIATA)$(CONFIG_ALPHA_RUFFIAN)$(CONFIG_ALPHA_SX164),)
obj-y += irq_pyxis.o
endif
endif # GENERIC endif # GENERIC
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/vga.h>
#define __KERNEL_SYSCALLS__ #define __KERNEL_SYSCALLS__
#include <asm/unistd.h> #include <asm/unistd.h>
...@@ -90,6 +91,7 @@ EXPORT_SYMBOL(___raw_writeq); ...@@ -90,6 +91,7 @@ EXPORT_SYMBOL(___raw_writeq);
EXPORT_SYMBOL(_memcpy_fromio); EXPORT_SYMBOL(_memcpy_fromio);
EXPORT_SYMBOL(_memcpy_toio); EXPORT_SYMBOL(_memcpy_toio);
EXPORT_SYMBOL(_memset_c_io); EXPORT_SYMBOL(_memset_c_io);
EXPORT_SYMBOL(scr_memcpyw);
EXPORT_SYMBOL(insb); EXPORT_SYMBOL(insb);
EXPORT_SYMBOL(insw); EXPORT_SYMBOL(insw);
EXPORT_SYMBOL(insl); EXPORT_SYMBOL(insl);
......
...@@ -130,11 +130,11 @@ init_i8259a_irqs(void) ...@@ -130,11 +130,11 @@ init_i8259a_irqs(void)
# define IACK_SC TITAN_IACK_SC # define IACK_SC TITAN_IACK_SC
#elif defined(CONFIG_ALPHA_TSUNAMI) #elif defined(CONFIG_ALPHA_TSUNAMI)
# define IACK_SC TSUNAMI_IACK_SC # define IACK_SC TSUNAMI_IACK_SC
#elif defined(CONFIG_ALPHA_POLARIS)
# define IACK_SC POLARIS_IACK_SC
#elif defined(CONFIG_ALPHA_IRONGATE) #elif defined(CONFIG_ALPHA_IRONGATE)
# define IACK_SC IRONGATE_IACK_SC # define IACK_SC IRONGATE_IACK_SC
#endif #endif
/* Note that CONFIG_ALPHA_POLARIS is intentionally left out here, since
sys_rx164 wants to use isa_no_iack_sc_device_interrupt for some reason. */
#if defined(IACK_SC) #if defined(IACK_SC)
void void
......
...@@ -245,7 +245,6 @@ alcor_kill_arch(int mode) ...@@ -245,7 +245,6 @@ alcor_kill_arch(int mode)
* The System Vectors * The System Vectors
*/ */
#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_ALCOR)
struct alpha_machine_vector alcor_mv __initmv = { struct alpha_machine_vector alcor_mv __initmv = {
.vector_name = "Alcor", .vector_name = "Alcor",
DO_EV5_MMU, DO_EV5_MMU,
...@@ -273,9 +272,7 @@ struct alpha_machine_vector alcor_mv __initmv = { ...@@ -273,9 +272,7 @@ struct alpha_machine_vector alcor_mv __initmv = {
}} }}
}; };
ALIAS_MV(alcor) ALIAS_MV(alcor)
#endif
#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_XLT)
struct alpha_machine_vector xlt_mv __initmv = { struct alpha_machine_vector xlt_mv __initmv = {
.vector_name = "XLT", .vector_name = "XLT",
DO_EV5_MMU, DO_EV5_MMU,
...@@ -302,5 +299,6 @@ struct alpha_machine_vector xlt_mv __initmv = { ...@@ -302,5 +299,6 @@ struct alpha_machine_vector xlt_mv __initmv = {
.gru_int_req_bits = XLT_GRU_INT_REQ_BITS .gru_int_req_bits = XLT_GRU_INT_REQ_BITS
}} }}
}; };
ALIAS_MV(xlt)
#endif /* No alpha_mv alias for XLT, since we compile it in unconditionally
with ALCOR; setup_arch knows how to cope. */
...@@ -7,58 +7,53 @@ L_TARGET := lib.a ...@@ -7,58 +7,53 @@ L_TARGET := lib.a
# Many of these routines have implementations tuned for ev6. # Many of these routines have implementations tuned for ev6.
# Choose them iff we're targeting ev6 specifically. # Choose them iff we're targeting ev6 specifically.
ev6 := ev6-$(CONFIG_ALPHA_EV6) := ev6-
ifeq ($(CONFIG_ALPHA_EV6),y)
ev6 := ev6-
endif
# Several make use of the cttz instruction introduced in ev67. # Several make use of the cttz instruction introduced in ev67.
ev67 := ev67-$(CONFIG_ALPHA_EV67) := ev67-
ifeq ($(CONFIG_ALPHA_EV67),y)
ev67 := ev67-
endif
obj-y = __divqu.o __remqu.o __divlu.o __remlu.o \ obj-y = __divqu.o __remqu.o __divlu.o __remlu.o \
udelay.o \ udelay.o \
$(ev6)memset.o \ $(ev6-y)memset.o \
$(ev6)memcpy.o \ $(ev6-y)memcpy.o \
memmove.o \ memmove.o \
io.o \ io.o \
checksum.o \ checksum.o \
csum_partial_copy.o \ csum_partial_copy.o \
$(ev67)strlen.o \ $(ev67-y)strlen.o \
$(ev67)strcat.o \ $(ev67-y)strcat.o \
strcpy.o \ strcpy.o \
$(ev67)strncat.o \ $(ev67-y)strncat.o \
strncpy.o \ strncpy.o \
$(ev6)stxcpy.o \ $(ev6-y)stxcpy.o \
$(ev6)stxncpy.o \ $(ev6-y)stxncpy.o \
$(ev67)strchr.o \ $(ev67-y)strchr.o \
$(ev67)strrchr.o \ $(ev67-y)strrchr.o \
$(ev6)memchr.o \ $(ev6-y)memchr.o \
$(ev6)copy_user.o \ $(ev6-y)copy_user.o \
$(ev6)clear_user.o \ $(ev6-y)clear_user.o \
$(ev6)strncpy_from_user.o \ $(ev6-y)strncpy_from_user.o \
$(ev67)strlen_user.o \ $(ev67-y)strlen_user.o \
$(ev6)csum_ipv6_magic.o \ $(ev6-y)csum_ipv6_magic.o \
$(ev6)clear_page.o \ $(ev6-y)clear_page.o \
$(ev6)copy_page.o \ $(ev6-y)copy_page.o \
strcasecmp.o \ strcasecmp.o \
fpreg.o \ fpreg.o \
callback_srm.o srm_puts.o srm_printk.o callback_srm.o srm_puts.o srm_printk.o
obj-$(CONFIG_SMP) += dec_and_lock.o obj-$(CONFIG_SMP) += dec_and_lock.o
$(obj)/__divqu.o: $(obj)/$(ev6)divide.S # The division routines are built from single source, with different defines.
$(CC) $(AFLAGS) -DDIV -c -o $(obj)/__divqu.o $(obj)/$(ev6)divide.S AFLAGS___divqu.o = -DDIV
AFLAGS___remqu.o = -DREM
$(obj)/__remqu.o: $(obj)/$(ev6)divide.S AFLAGS___divlu.o = -DDIV -DINTSIZE
$(CC) $(AFLAGS) -DREM -c -o $(obj)/__remqu.o $(obj)/$(ev6)divide.S AFLAGS___remlu.o = -DREM -DINTSIZE
$(obj)/__divlu.o: $(obj)/$(ev6)divide.S $(obj)/__divqu.o: $(obj)/$(ev6-y)divide.S
$(CC) $(AFLAGS) -DDIV -DINTSIZE \ $(cmd_as_o_S)
-c -o $(obj)/__divlu.o $(obj)/$(ev6)divide.S $(obj)/__remqu.o: $(obj)/$(ev6-y)divide.S
$(cmd_as_o_S)
$(obj)/__remlu.o: $(obj)/$(ev6)divide.S $(obj)/__divlu.o: $(obj)/$(ev6-y)divide.S
$(CC) $(AFLAGS) -DREM -DINTSIZE \ $(cmd_as_o_S)
-c -o $(obj)/__remlu.o $(obj)/$(ev6)divide.S $(obj)/__remlu.o: $(obj)/$(ev6-y)divide.S
$(cmd_as_o_S)
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
# Makefile for the FPU instruction emulation. # Makefile for the FPU instruction emulation.
# #
CFLAGS += -I. -I$(TOPDIR)/include/math-emu -w CFLAGS += -Iinclude/math-emu -w
obj-$(CONFIG_MATHEMU) += math.o qrnnd.o obj-$(CONFIG_MATHEMU) += math.o qrnnd.o
...@@ -61,6 +61,16 @@ config AGP_VIA ...@@ -61,6 +61,16 @@ config AGP_VIA
You should say Y here if you use XFree86 3.3.6 or 4.x and want to You should say Y here if you use XFree86 3.3.6 or 4.x and want to
use GLX or DRI. If unsure, say N. use GLX or DRI. If unsure, say N.
config AGP_VIA_KT400
tristate "VIA KT400 chipset support"
depends on AGP3
help
This option gives you AGP support for the GLX component of the
XFree86 4.x on VIA KT400 AGP 3.0 chipsets.
You should say Y here if you use XFree86 3.3.6 or 4.x and want to
use GLX or DRI. If unsure, say N.
config AGP_AMD config AGP_AMD
tristate "AMD Irongate, 761, and 762 support" tristate "AMD Irongate, 761, and 762 support"
depends on AGP depends on AGP
......
...@@ -12,6 +12,7 @@ obj-$(CONFIG_AGP) += agpgart.o ...@@ -12,6 +12,7 @@ obj-$(CONFIG_AGP) += agpgart.o
obj-$(CONFIG_AGP_INTEL) += intel-agp.o obj-$(CONFIG_AGP_INTEL) += intel-agp.o
obj-$(CONFIG_AGP_VIA) += via-agp.o obj-$(CONFIG_AGP_VIA) += via-agp.o
obj-$(CONFIG_AGP_VIA_KT400) += via-kt400.o
obj-$(CONFIG_AGP_AMD) += amd-k7-agp.o obj-$(CONFIG_AGP_AMD) += amd-k7-agp.o
obj-$(CONFIG_AGP_SIS) += sis-agp.o obj-$(CONFIG_AGP_SIS) += sis-agp.o
obj-$(CONFIG_AGP_ALI) += ali-agp.o obj-$(CONFIG_AGP_ALI) += ali-agp.o
......
/* /*
* AGPGART module version 0.99 * AGPGART module
* Copyright (C) 2002 Dave Jones
* Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Jeff Hartmann
* Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Precision Insight, Inc.
* Copyright (C) 1999 Xi Graphics, Inc. * Copyright (C) 1999 Xi Graphics, Inc.
...@@ -46,6 +47,7 @@ void agp_generic_destroy_page(void *addr); ...@@ -46,6 +47,7 @@ void agp_generic_destroy_page(void *addr);
int agp_generic_suspend(void); int agp_generic_suspend(void);
void agp_generic_resume(void); void agp_generic_resume(void);
void agp_free_key(int key); void agp_free_key(int key);
int agp_num_entries(void);
#define PFX "agpgart: " #define PFX "agpgart: "
...@@ -292,6 +294,9 @@ struct agp_bridge_data { ...@@ -292,6 +294,9 @@ struct agp_bridge_data {
#define VIA_ATTBASE 0x88 #define VIA_ATTBASE 0x88
/* VIA KT400 */ /* VIA KT400 */
#define VIA_AGP3_GARTCTRL 0x90
#define VIA_AGP3_APSIZE 0x94
#define VIA_AGP3_ATTBASE 0x98
#define VIA_AGPSEL 0xfd #define VIA_AGPSEL 0xfd
/* SiS registers */ /* SiS registers */
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
#include <linux/agp_backend.h> #include <linux/agp_backend.h>
#include "agp.h" #include "agp.h"
extern int agp_memory_reserved;
static u_int64_t pci_read64 (struct pci_dev *dev, int reg) static u_int64_t pci_read64 (struct pci_dev *dev, int reg)
{ {
union { union {
...@@ -48,16 +46,11 @@ static void pci_write64 (struct pci_dev *dev, int reg, u64 value) ...@@ -48,16 +46,11 @@ static void pci_write64 (struct pci_dev *dev, int reg, u64 value)
static int x86_64_insert_memory(agp_memory * mem, off_t pg_start, int type) static int x86_64_insert_memory(agp_memory * mem, off_t pg_start, int type)
{ {
int i, j, num_entries; int i, j, num_entries;
void *temp;
long tmp; long tmp;
u32 pte; u32 pte;
u64 addr; u64 addr;
temp = agp_bridge.current_size; num_entries = agp_num_entries();
num_entries = A_SIZE_32(temp)->num_entries;
num_entries -= agp_memory_reserved>>PAGE_SHIFT;
if (type != 0 || mem->type != 0) if (type != 0 || mem->type != 0)
return -EINVAL; return -EINVAL;
......
/* /*
* AGPGART module version 1.0 * AGPGART driver backend routines.
* Copyright (C) 2002 Dave Jones. * Copyright (C) 2002 Dave Jones.
* Copyright (C) 1999 Jeff Hartmann. * Copyright (C) 1999 Jeff Hartmann.
* Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Precision Insight, Inc.
......
/* /*
* AGPGART module frontend version 0.99 * AGPGART driver frontend
* Copyright (C) 2002 Dave Jones
* Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Jeff Hartmann
* Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Precision Insight, Inc.
* Copyright (C) 1999 Xi Graphics, Inc. * Copyright (C) 1999 Xi Graphics, Inc.
......
/*
* Generic routines for AGP 3.0 compliant bridges.
*/
#include <linux/list.h> #include <linux/list.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/agp_backend.h> #include <linux/agp_backend.h>
...@@ -393,8 +397,7 @@ static int agp_3_0_node_enable(u32 mode, u32 minor) ...@@ -393,8 +397,7 @@ static int agp_3_0_node_enable(u32 mode, u32 minor)
if(mcapndx == 0) { if(mcapndx == 0) {
printk(KERN_ERR PFX "woah! Non-AGP device " printk(KERN_ERR PFX "woah! Non-AGP device "
"found on the secondary bus of an AGP 3.0 " "found on the secondary bus of an AGP 3.0 bridge!\n");
"bridge!\n");
ret = -ENODEV; ret = -ENODEV;
goto free_and_exit; goto free_and_exit;
} }
...@@ -442,9 +445,8 @@ static int agp_3_0_node_enable(u32 mode, u32 minor) ...@@ -442,9 +445,8 @@ static int agp_3_0_node_enable(u32 mode, u32 minor)
rate = 0x2; rate = 0x2;
break; break;
default: default:
printk(KERN_ERR PFX "woah! Bogus AGP rate " printk(KERN_ERR PFX "woah! Bogus AGP rate (%d) "
"value found advertised behind an AGP 3.0 " "value found advertised behind an AGP 3.0 bridge!\n", rate);
"bridge!\n");
ret = -ENODEV; ret = -ENODEV;
goto free_and_exit; goto free_and_exit;
} }
...@@ -455,12 +457,10 @@ static int agp_3_0_node_enable(u32 mode, u32 minor) ...@@ -455,12 +457,10 @@ static int agp_3_0_node_enable(u32 mode, u32 minor)
* whether isochronous transfers are supported. * whether isochronous transfers are supported.
*/ */
if(isoch != 0) { if(isoch != 0) {
if((ret = agp_3_0_isochronous_node_enable(dev_list, if((ret = agp_3_0_isochronous_node_enable(dev_list, ndevs)) != 0)
ndevs)) != 0)
goto free_and_exit; goto free_and_exit;
} else { } else {
if((ret = agp_3_0_nonisochronous_node_enable(dev_list, if((ret = agp_3_0_nonisochronous_node_enable(dev_list,ndevs)) != 0)
ndevs)) != 0)
goto free_and_exit; goto free_and_exit;
} }
...@@ -534,8 +534,7 @@ int agp_generic_agp_3_0_enable(u32 mode) ...@@ -534,8 +534,7 @@ int agp_generic_agp_3_0_enable(u32 mode)
major = (ncapid >> 20) & 0xf; major = (ncapid >> 20) & 0xf;
minor = (ncapid >> 16) & 0xf; minor = (ncapid >> 16) & 0xf;
printk(KERN_INFO PFX "Found an AGP %d.%d compliant device.\n", printk(KERN_INFO PFX "Found an AGP %d.%d compliant device.\n",major, minor);
major, minor);
if(major >= 3) { if(major >= 3) {
pci_read_config_dword(agp_bridge.dev, agp_bridge.capndx + 0x4, &agp_3_0); pci_read_config_dword(agp_bridge.dev, agp_bridge.capndx + 0x4, &agp_3_0);
......
/* /*
* AGPGART module version 1.0 * AGPGART driver.
* Copyright (C) 2002 Dave Jones. * Copyright (C) 2002 Dave Jones.
* Copyright (C) 1999 Jeff Hartmann. * Copyright (C) 1999 Jeff Hartmann.
* Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Precision Insight, Inc.
...@@ -203,6 +203,40 @@ static int agp_return_size(void) ...@@ -203,6 +203,40 @@ static int agp_return_size(void)
return current_size; return current_size;
} }
int agp_num_entries(void)
{
int num_entries;
void *temp;
temp = agp_bridge.current_size;
switch (agp_bridge.size_type) {
case U8_APER_SIZE:
num_entries = A_SIZE_8(temp)->num_entries;
break;
case U16_APER_SIZE:
num_entries = A_SIZE_16(temp)->num_entries;
break;
case U32_APER_SIZE:
num_entries = A_SIZE_32(temp)->num_entries;
break;
case LVL2_APER_SIZE:
num_entries = A_SIZE_LVL2(temp)->num_entries;
break;
case FIXED_APER_SIZE:
num_entries = A_SIZE_FIX(temp)->num_entries;
break;
default:
num_entries = 0;
break;
}
num_entries -= agp_memory_reserved>>PAGE_SHIFT;
if (num_entries<0)
num_entries = 0;
return num_entries;
}
/* Routine to copy over information structure */ /* Routine to copy over information structure */
int agp_copy_info(agp_kern_info * info) int agp_copy_info(agp_kern_info * info)
...@@ -713,3 +747,5 @@ EXPORT_SYMBOL(agp_generic_alloc_by_type); ...@@ -713,3 +747,5 @@ EXPORT_SYMBOL(agp_generic_alloc_by_type);
EXPORT_SYMBOL(agp_generic_free_by_type); EXPORT_SYMBOL(agp_generic_free_by_type);
EXPORT_SYMBOL(global_cache_flush); EXPORT_SYMBOL(global_cache_flush);
EXPORT_SYMBOL_GPL(agp_num_entries);
...@@ -1467,7 +1467,9 @@ static struct __initdata pci_driver agp_intel_pci_driver = { ...@@ -1467,7 +1467,9 @@ static struct __initdata pci_driver agp_intel_pci_driver = {
.probe = agp_intel_probe, .probe = agp_intel_probe,
}; };
static int __init agp_intel_init(void) /* intel_agp_init() must not be declared static for explicit
early initialization to work (ie i810fb) */
int __init agp_intel_init(void)
{ {
int ret_val; int ret_val;
static int agp_initialised=0; static int agp_initialised=0;
......
...@@ -124,65 +124,23 @@ static int __init via_generic_setup (struct pci_dev *pdev) ...@@ -124,65 +124,23 @@ static int __init via_generic_setup (struct pci_dev *pdev)
return 0; return 0;
} }
#ifdef CONFIG_AGP3
/* /*
* The KT400 does magick to put the AGP bridge compliant with the same * The KT400 does magick to put the AGP bridge compliant with the same
* standards version as the graphics card. If we haven't fallen into * standards version as the graphics card. If we haven't fallen into
* 2.0 compatability mode, we run the normal 3.0 code, and fall back * 2.0 compatability mode, we abort, as this gets picked up by
* if something nasty happens. * via-agp3.o
*/ */
static void __init via_kt400_enable(u32 mode)
{
if ((agp_generic_agp_3_0_enable(mode))==FALSE)
/* Something weird happened, fall back to 2.0 */
agp_generic_agp_enable(mode);
}
#endif
static int __init via_kt400_setup(struct pci_dev *pdev) static int __init via_kt400_setup(struct pci_dev *pdev)
{ {
u8 reg; u8 reg;
agp_bridge.masks = via_generic_masks;
agp_bridge.num_of_masks = 1;
agp_bridge.aperture_sizes = (void *) via_generic_sizes;
agp_bridge.size_type = U8_APER_SIZE;
agp_bridge.num_aperture_sizes = 7;
agp_bridge.dev_private_data = NULL;
agp_bridge.needs_scratch_page = FALSE;
agp_bridge.configure = via_configure;
agp_bridge.fetch_size = via_fetch_size;
agp_bridge.cleanup = via_cleanup;
agp_bridge.tlb_flush = via_tlbflush;
agp_bridge.mask_memory = via_mask_memory;
agp_bridge.cache_flush = global_cache_flush;
agp_bridge.create_gatt_table = agp_generic_create_gatt_table;
agp_bridge.free_gatt_table = agp_generic_free_gatt_table;
agp_bridge.insert_memory = agp_generic_insert_memory;
agp_bridge.remove_memory = agp_generic_remove_memory;
agp_bridge.alloc_by_type = agp_generic_alloc_by_type;
agp_bridge.free_by_type = agp_generic_free_by_type;
agp_bridge.agp_alloc_page = agp_generic_alloc_page;
agp_bridge.agp_destroy_page = agp_generic_destroy_page;
agp_bridge.suspend = agp_generic_suspend;
agp_bridge.resume = agp_generic_resume;
agp_bridge.cant_use_aperture = 0;
pci_read_config_byte(pdev, VIA_AGPSEL, &reg); pci_read_config_byte(pdev, VIA_AGPSEL, &reg);
/* Check AGP 2.0 compatability mode. */
if ((reg & (1<<1))==1) { if ((reg & (1<<1))==1) {
/* AGP 2.0 compatability mode. */ via_generic_setup(pdev);
agp_bridge.agp_enable = agp_generic_agp_enable;
} else {
#ifdef CONFIG_AGP3
/* AGP 3.0 mode */
agp_bridge.agp_enable = via_kt400_enable;
#else
printk ("AGP: VIA KT400 in AGP3.0 mode support not compiled in.\n");
return -ENODEV;
#endif
}
return 0; return 0;
}
return -ENODEV;
} }
static struct agp_device_ids via_agp_device_ids[] __initdata = static struct agp_device_ids via_agp_device_ids[] __initdata =
...@@ -244,6 +202,11 @@ static struct agp_device_ids via_agp_device_ids[] __initdata = ...@@ -244,6 +202,11 @@ static struct agp_device_ids via_agp_device_ids[] __initdata =
.chipset = VIA_VT8605, .chipset = VIA_VT8605,
.chipset_name = "Apollo ProSavage PM133" .chipset_name = "Apollo ProSavage PM133"
}, },
{
.device_id = PCI_DEVICE_ID_VIA_8235_0,
.chipset = VIA_P4X400,
.chipset_name = "P4X400"
},
{ }, /* dummy final entry, always present */ { }, /* dummy final entry, always present */
}; };
......
/*
* VIA KT400 AGPGART routines.
*
* The KT400 does magick to put the AGP bridge compliant with the same
* standards version as the graphics card. If we haven't fallen into
* 2.0 compatability mode, we run this code. Otherwise, we run the
* code in via-agp.c
*/
#include <linux/types.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/agp_backend.h>
#include "agp.h"
static int via_fetch_size(void)
{
int i;
u8 temp;
struct aper_size_info_16 *values;
values = A_SIZE_16(agp_bridge.aperture_sizes);
pci_read_config_byte(agp_bridge.dev, VIA_AGP3_APSIZE, &temp);
for (i = 0; i < agp_bridge.num_aperture_sizes; i++) {
if (temp == values[i].size_value) {
agp_bridge.previous_size =
agp_bridge.current_size = (void *) (values + i);
agp_bridge.aperture_size_idx = i;
return values[i].size;
}
}
return 0;
}
static int via_configure(void)
{
u32 temp;
struct aper_size_info_16 *current_size;
current_size = A_SIZE_16(agp_bridge.current_size);
/* address to map too */
pci_read_config_dword(agp_bridge.dev, VIA_APBASE, &temp);
agp_bridge.gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);
/* attbase - aperture GATT base */
pci_write_config_dword(agp_bridge.dev, VIA_AGP3_ATTBASE,
agp_bridge.gatt_bus_addr & 0xfffff000);
return 0;
}
static void via_cleanup(void)
{
struct aper_size_info_16 *previous_size;
previous_size = A_SIZE_16(agp_bridge.previous_size);
pci_write_config_byte(agp_bridge.dev, VIA_APSIZE, previous_size->size_value);
}
static void via_tlbflush(agp_memory * mem)
{
u32 temp;
pci_read_config_dword(agp_bridge.dev, VIA_AGP3_GARTCTRL, &temp);
pci_write_config_dword(agp_bridge.dev, VIA_AGP3_GARTCTRL, temp & ~(1<<7));
pci_write_config_dword(agp_bridge.dev, VIA_AGP3_GARTCTRL, temp);
}
static unsigned long via_mask_memory(unsigned long addr, int type)
{
/* Memory type is ignored */
return addr | agp_bridge.masks[0].mask;
}
static struct aper_size_info_16 via_generic_sizes[11] =
{
{ 4, 1024, 0, 1<<11|1<<10|1<<9|1<<8|1<<5|1<<4|1<<3|1<<2|1<<1|1<<0 },
{ 8, 2048, 1, 1<<11|1<<10|1<<9|1<<8|1<<5|1<<4|1<<3|1<<2|1<<1},
{ 16, 4096, 2, 1<<11|1<<10|1<<9|1<<8|1<<5|1<<4|1<<3|1<<2},
{ 32, 8192, 3, 1<<11|1<<10|1<<9|1<<8|1<<5|1<<4|1<<3},
{ 64, 16384, 4, 1<<11|1<<10|1<<9|1<<8|1<<5|1<<4},
{ 128, 32768, 5, 1<<11|1<<10|1<<9|1<<8|1<<5},
{ 256, 65536, 6, 1<<11|1<<10|1<<9|1<<8},
{ 512, 131072, 7, 1<<11|1<<10|1<<9},
{ 1024, 262144, 8, 1<<11|1<<10},
{ 2048, 524288, 9, 1<<11} /* 2GB <- Max supported */
};
static struct gatt_mask via_generic_masks[] =
{
{.mask = 0x00000000, .type = 0}
};
static void __init via_kt400_enable(u32 mode)
{
if ((agp_generic_agp_3_0_enable(mode))==FALSE)
printk (KERN_INFO PFX "agp_generic_agp_3_0_enable() failed\n");
}
static int __init agp_via_probe (struct pci_dev *dev, const struct pci_device_id *ent)
{
u8 reg;
u8 cap_ptr = 0;
cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP);
if (cap_ptr == 0)
return -ENODEV;
pci_read_config_byte(dev, VIA_AGPSEL, &reg);
/* Check if we are in AGP 2.0 compatability mode, if so it
* will be picked up by via-agp.o */
if ((reg & (1<<1))==1)
return -ENODEV;
printk (KERN_INFO PFX "Detected VIA KT400 AGP3 chipset\n");
agp_bridge.dev = dev;
agp_bridge.type = VIA_APOLLO_KT400_3;
agp_bridge.capndx = cap_ptr;
agp_bridge.masks = via_generic_masks;
agp_bridge.num_of_masks = 1;
agp_bridge.aperture_sizes = (void *) via_generic_sizes;
agp_bridge.size_type = U8_APER_SIZE;
agp_bridge.num_aperture_sizes = 7;
agp_bridge.dev_private_data = NULL;
agp_bridge.needs_scratch_page = FALSE;
agp_bridge.agp_enable = via_kt400_enable;
agp_bridge.configure = via_configure;
agp_bridge.fetch_size = via_fetch_size;
agp_bridge.cleanup = via_cleanup;
agp_bridge.tlb_flush = via_tlbflush;
agp_bridge.mask_memory = via_mask_memory;
agp_bridge.cache_flush = global_cache_flush;
agp_bridge.create_gatt_table = agp_generic_create_gatt_table;
agp_bridge.free_gatt_table = agp_generic_free_gatt_table;
agp_bridge.insert_memory = agp_generic_insert_memory;
agp_bridge.remove_memory = agp_generic_remove_memory;
agp_bridge.alloc_by_type = agp_generic_alloc_by_type;
agp_bridge.free_by_type = agp_generic_free_by_type;
agp_bridge.agp_alloc_page = agp_generic_alloc_page;
agp_bridge.agp_destroy_page = agp_generic_destroy_page;
agp_bridge.suspend = agp_generic_suspend;
agp_bridge.resume = agp_generic_resume;
agp_bridge.cant_use_aperture = 0;
/* Fill in the mode register */
pci_read_config_dword(agp_bridge.dev, agp_bridge.capndx+4, &agp_bridge.mode);
agp_register_driver(dev);
return 0;
}
static struct pci_device_id agp_via_pci_table[] __initdata = {
{
.class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_VIA,
.device = PCI_DEVICE_ID_VIA_8377_0,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
},
{ }
};
MODULE_DEVICE_TABLE(pci, agp_via_pci_table);
static struct __initdata pci_driver agp_via_pci_driver = {
.name = "agpgart-via",
.id_table = agp_via_pci_table,
.probe = agp_via_probe,
};
static int __init agp_via_init(void)
{
int ret_val;
ret_val = pci_module_init(&agp_via_pci_driver);
if (ret_val)
agp_bridge.type = NOT_SUPPORTED;
return ret_val;
}
static void __exit agp_via_cleanup(void)
{
agp_unregister_driver();
pci_unregister_driver(&agp_via_pci_driver);
}
module_init(agp_via_init);
module_exit(agp_via_cleanup);
MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>");
MODULE_LICENSE("GPL and additional rights");
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
# define NR_IRQS 32 # define NR_IRQS 32
#elif defined(CONFIG_ALPHA_ALCOR) || \ #elif defined(CONFIG_ALPHA_ALCOR) || \
defined(CONFIG_ALPHA_XLT) || \
defined(CONFIG_ALPHA_MIATA) || \ defined(CONFIG_ALPHA_MIATA) || \
defined(CONFIG_ALPHA_RUFFIAN) || \ defined(CONFIG_ALPHA_RUFFIAN) || \
defined(CONFIG_ALPHA_RX164) || \ defined(CONFIG_ALPHA_RX164) || \
......
...@@ -60,8 +60,10 @@ enum chipset_type { ...@@ -60,8 +60,10 @@ enum chipset_type {
VIA_APOLLO_KX133, VIA_APOLLO_KX133,
VIA_APOLLO_KT133, VIA_APOLLO_KT133,
VIA_APOLLO_KT400, VIA_APOLLO_KT400,
VIA_APOLLO_KT400_3,
VIA_APOLLO_PRO_266, VIA_APOLLO_PRO_266,
VIA_VT8605, VIA_VT8605,
VIA_P4X400,
SIS_GENERIC, SIS_GENERIC,
AMD_GENERIC, AMD_GENERIC,
AMD_IRONGATE, AMD_IRONGATE,
......
...@@ -9,9 +9,11 @@ ...@@ -9,9 +9,11 @@
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/param.h> /* for HZ */
#include <asm/compat.h> #include <asm/compat.h>
#define compat_jiffies_to_clock_t(x) ((x) / (HZ / COMPAT_USER_HZ)) #define compat_jiffies_to_clock_t(x) \
(((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
struct compat_utimbuf { struct compat_utimbuf {
compat_time_t actime; compat_time_t actime;
......
...@@ -1092,6 +1092,7 @@ ...@@ -1092,6 +1092,7 @@
#define PCI_DEVICE_ID_VIA_8233C_0 0x3109 #define PCI_DEVICE_ID_VIA_8233C_0 0x3109
#define PCI_DEVICE_ID_VIA_8361 0x3112 #define PCI_DEVICE_ID_VIA_8361 0x3112
#define PCI_DEVICE_ID_VIA_8233A 0x3147 #define PCI_DEVICE_ID_VIA_8233A 0x3147
#define PCI_DEVICE_ID_VIA_8235_0 0x3168
#define PCI_DEVICE_ID_VIA_8235 0x3177 #define PCI_DEVICE_ID_VIA_8235 0x3177
#define PCI_DEVICE_ID_VIA_8377_0 0x3189 #define PCI_DEVICE_ID_VIA_8377_0 0x3189
#define PCI_DEVICE_ID_VIA_86C100A 0x6100 #define PCI_DEVICE_ID_VIA_86C100A 0x6100
......
...@@ -880,7 +880,7 @@ static long get_offset(unsigned long *size, Elf_Shdr *sechdr) ...@@ -880,7 +880,7 @@ static long get_offset(unsigned long *size, Elf_Shdr *sechdr)
/* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld /* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld
might -- code, read-only data, read-write data, small data. Tally might -- code, read-only data, read-write data, small data. Tally
sizes, and place the offsets into sh_link fields: high bit means it sizes, and place the offsets into sh_entsize fields: high bit means it
belongs in init. */ belongs in init. */
static void layout_sections(struct module *mod, static void layout_sections(struct module *mod,
const Elf_Ehdr *hdr, const Elf_Ehdr *hdr,
...@@ -896,7 +896,7 @@ static void layout_sections(struct module *mod, ...@@ -896,7 +896,7 @@ static void layout_sections(struct module *mod,
unsigned int m, i; unsigned int m, i;
for (i = 0; i < hdr->e_shnum; i++) for (i = 0; i < hdr->e_shnum; i++)
sechdrs[i].sh_link = ~0UL; sechdrs[i].sh_entsize = ~0UL;
DEBUGP("Core section allocation order:\n"); DEBUGP("Core section allocation order:\n");
for (m = 0; m < ARRAY_SIZE(masks); ++m) { for (m = 0; m < ARRAY_SIZE(masks); ++m) {
...@@ -905,10 +905,10 @@ static void layout_sections(struct module *mod, ...@@ -905,10 +905,10 @@ static void layout_sections(struct module *mod,
if ((s->sh_flags & masks[m][0]) != masks[m][0] if ((s->sh_flags & masks[m][0]) != masks[m][0]
|| (s->sh_flags & masks[m][1]) || (s->sh_flags & masks[m][1])
|| s->sh_link != ~0UL || s->sh_entsize != ~0UL
|| strstr(secstrings + s->sh_name, ".init")) || strstr(secstrings + s->sh_name, ".init"))
continue; continue;
s->sh_link = get_offset(&mod->core_size, s); s->sh_entsize = get_offset(&mod->core_size, s);
DEBUGP("\t%s\n", name); DEBUGP("\t%s\n", name);
} }
} }
...@@ -920,10 +920,10 @@ static void layout_sections(struct module *mod, ...@@ -920,10 +920,10 @@ static void layout_sections(struct module *mod,
if ((s->sh_flags & masks[m][0]) != masks[m][0] if ((s->sh_flags & masks[m][0]) != masks[m][0]
|| (s->sh_flags & masks[m][1]) || (s->sh_flags & masks[m][1])
|| s->sh_link != ~0UL || s->sh_entsize != ~0UL
|| !strstr(secstrings + s->sh_name, ".init")) || !strstr(secstrings + s->sh_name, ".init"))
continue; continue;
s->sh_link = (get_offset(&mod->init_size, s) s->sh_entsize = (get_offset(&mod->init_size, s)
| INIT_OFFSET_MASK); | INIT_OFFSET_MASK);
DEBUGP("\t%s\n", name); DEBUGP("\t%s\n", name);
} }
...@@ -1066,7 +1066,7 @@ static struct module *load_module(void *umod, ...@@ -1066,7 +1066,7 @@ static struct module *load_module(void *umod,
if (err < 0) if (err < 0)
goto free_mod; goto free_mod;
/* Determine total sizes, and put offsets in sh_link. For now /* Determine total sizes, and put offsets in sh_entsize. For now
this is done generically; there doesn't appear to be any this is done generically; there doesn't appear to be any
special cases for the architectures. */ special cases for the architectures. */
layout_sections(mod, hdr, sechdrs, secstrings); layout_sections(mod, hdr, sechdrs, secstrings);
...@@ -1095,11 +1095,11 @@ static struct module *load_module(void *umod, ...@@ -1095,11 +1095,11 @@ static struct module *load_module(void *umod,
if (!(sechdrs[i].sh_flags & SHF_ALLOC)) if (!(sechdrs[i].sh_flags & SHF_ALLOC))
continue; continue;
if (sechdrs[i].sh_link & INIT_OFFSET_MASK) if (sechdrs[i].sh_entsize & INIT_OFFSET_MASK)
dest = mod->module_init dest = mod->module_init
+ (sechdrs[i].sh_link & ~INIT_OFFSET_MASK); + (sechdrs[i].sh_entsize & ~INIT_OFFSET_MASK);
else else
dest = mod->module_core + sechdrs[i].sh_link; dest = mod->module_core + sechdrs[i].sh_entsize;
if (sechdrs[i].sh_type != SHT_NOBITS) if (sechdrs[i].sh_type != SHT_NOBITS)
memcpy(dest, (void *)sechdrs[i].sh_addr, memcpy(dest, (void *)sechdrs[i].sh_addr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment