Commit 716454f0 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.121pre1

parent 519cb0c6
......@@ -14,7 +14,7 @@
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
......@@ -291,7 +291,7 @@ POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
......@@ -317,7 +317,8 @@ the "copyright" line and a pointer to where the full notice is found.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
......
......@@ -61,7 +61,7 @@ S: San Jose, California 95129
S: USA
N: Andrea Arcangeli
E: arcangeli@mbox.queen.it
E: andrea@e-mind.com
W: http://e-mind.com/~andrea/
P: 1024/CB4660B9 CC A0 71 81 F4 A0 63 AC C0 4B 81 1D 8C 15 C8 E5
D: Parport hacker
......@@ -129,6 +129,12 @@ S: 633 South 550 East
S: Provo, Utah 84606
S: USA
N: Paul Barton-Davis
E: pbd@op.net
D: Driver for WaveFront soundcards (Turtle Beach Maui, Tropez, Tropez+)
D: Various bugfixes and changes to sound drivers
S: USA
M: Krzysztof G. Baranowski
E: kgb@manjak.knm.org.pl
P: 1024/FA6F16D1 96 D1 1A CF 5F CA 69 EC F9 4F 36 1F 6D 60 7B DA
......@@ -158,7 +164,7 @@ S: Germany
N: Donald Becker
E: becker@cesdis.gsfc.nasa.gov
D: General low-level networking hacker
D: Most of the Ethernet drivers
D: Most of the ethercard drivers
D: Original author of the NFS server
S: USRA Center of Excellence in Space Data and Information Sciences
S: Code 930.5, Goddard Space Flight Center
......@@ -248,6 +254,15 @@ S: 5000 Forbes Avenue
S: Pittsburgh, Pennsylvania 15213
S: USA
N: Derrick J. Brashear
E: shadow@dementia.org
W: http://www.dementia.org/~shadow
P: 512/71EC9367 C5 29 0F BC 83 51 B9 F0 BC 05 89 A0 4F 1F 30 05
D: Author of Sparc CS4231 audio driver, random Sparc work
S: 403 Gilmore Avenue
S: Trafford, Pennsylvania 15085
S: USA
N: Andries Brouwer
E: aeb@cwi.nl
D: random Linux hacker
......@@ -711,8 +726,8 @@ N: Richard Henderson
E: rth@cygnus.com
E: richard@gnu.org
D: Alpha/ELF, gcc, binutils, and glibc
S: 5450 Mayme #25
S: San Jose, California 95129
S: 50 E. Middlefield #10
S: Mountain View, California 94043
S: USA
N: Sebastian Hetze
......@@ -1073,9 +1088,10 @@ S: Canada K2H 6S3
N: Jamie Lokier
E: jamie@imbolc.ucc.ie
D: Reboot-through-BIOS for broken 486 motherboards
S: 26 Oatlands Road
S: 11 Goodson Walk
S: Marston
S: Oxford
S: OX2 0ET
S: OX3 0HX
S: United Kingdom
N: Warner Losh
......@@ -1712,6 +1728,13 @@ S: 1050 Woodduck Avenue
S: Santa Clara, California 95051
S: USA
N: Stefan Traby
E: stefan@quant-x.com
D: Minor Alpha kernel hacks
S: Mitterlasznitzstr. 13
S: 8302 Nestelbach
S: Austria
N: Jeff Tranter
E: Jeff_Tranter@Mitel.COM
D: Enhancements to Joystick driver
......
This diff is collapsed.
......@@ -471,7 +471,7 @@ M: tim@cyberelk.demon.co.uk
P: David Campbell
M: campbell@torque.net
P: Andrea Arcangeli
M: arcangeli@mbox.queen.it
M: andrea@e-mind.com
L: linux-parport@torque.net
L: pnp-list@redhat.com
W: http://www.cyberelk.demon.co.uk/parport.html
......
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 120
SUBLEVEL = 121
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
......
......@@ -10,7 +10,7 @@
NM := nm -B
LINKFLAGS = -static -T arch/alpha/vmlinux.lds -N
LINKFLAGS = -static -T arch/alpha/vmlinux.lds #-N -relax
CFLAGS := $(CFLAGS) -pipe -mno-fp-regs -ffixed-8
# Determine if we can use the BWX instructions with GAS.
......@@ -79,6 +79,7 @@ srmboot:
@$(MAKEBOOT) srmboot
archclean:
@$(MAKE) -C arch/$(ARCH)/kernel clean
@$(MAKEBOOT) clean
archmrproper:
......
......@@ -8,17 +8,7 @@
# Copyright (C) 1994 by Linus Torvalds
#
ifdef CONFIG_CROSSCOMPILE
# enable this for linking under OSF/1:
LINKFLAGS = -non_shared -T 0x20000000 -N
else
elf=$(shell if $(LD) --help | grep elf64alpha >/dev/null; then echo yes; fi)
ifeq ($(elf),yes)
LINKFLAGS = -static -Ttext 0x20000000 -N
else
LINKFLAGS = -static -T bootloader.lds -N
endif
endif
LINKFLAGS = -static -T bootloader.lds #-N -relax
.S.s:
$(CC) -D__ASSEMBLY__ -traditional -E -o $*.o $<
......@@ -56,7 +46,7 @@ bootdevice:
@test "$(BOOTDEV)" != "" || (echo You must specify BOOTDEV ; exit -1)
vmlinux.gz: vmlinux
gzip -fv vmlinux
gzip -fv9 vmlinux
#
# A raw binary without header. Used by raw boot.
......@@ -69,18 +59,10 @@ ksize.h: $(OBJSTRIP) vmlinux.nh
echo "#define KERNEL_SIZE `$(OBJSTRIP) -p vmlinux.nh /dev/null`" > $@
vmlinux.nh: $(VMLINUX) $(OBJSTRIP)
ifeq ($(elf),yes)
cp $(VMLINUX) vmlinux.stripped
strip vmlinux.stripped # work around ELF binutils bug...
$(OBJSTRIP) -v vmlinux.stripped vmlinux.nh
rm -f vmlinux.stripped
else
$(OBJSTRIP) -v $(VMLINUX) vmlinux.nh
endif
vmlinux: $(TOPDIR)/vmlinux
cp $(TOPDIR)/vmlinux vmlinux
strip vmlinux
strip -o vmlinux $(VMLINUX)
tools/lxboot: $(OBJSTRIP) bootloader
$(OBJSTRIP) -p bootloader tools/lxboot
......@@ -98,21 +80,14 @@ tools/mkbb: tools/mkbb.c
$(HOSTCC) tools/mkbb.c -o tools/mkbb
bootloader: $(OBJECTS)
$(LD) $(LINKFLAGS) \
$(OBJECTS) \
$(LIBS) \
-o bootloader && strip bootloader || \
(rm -f bootloader && exit 1)
$(LD) $(LINKFLAGS) $(OBJECTS) $(LIBS) -o bootloader
bootpheader: $(BPOBJECTS)
$(LD) $(LINKFLAGS) \
$(BPOBJECTS) \
$(LIBS) \
-o bootpheader && strip bootpheader || \
(rm -f bootpheader && exit 1)
$(LD) $(LINKFLAGS) $(BPOBJECTS) $(LIBS) -o bootpheader
clean:
rm -f $(TARGETS) bootloader bootimage vmlinux.nh \
tools/mkbb tools/bootlx tools/lxboot ksize.h
rm -f $(TARGETS) bootloader bootimage bootpfile bootpheader
rm -f tools/mkbb tools/bootlx tools/lxboot tools/bootph
rm -f vmlinux.nh ksize.h
dep:
OUTPUT_FORMAT("ecoff-littlealpha")
OUTPUT_FORMAT("elf64-alpha")
ENTRY(__start)
SECTIONS
{
.text 0x20000000: {
_ftext = . ;
__istart = . ;
eprol = .;
*(.text)
__fstart = . ;
_etext = .;
}
.rdata : {
*(.rdata)
}
.pdata : {
_fpdata = .;
*(.pdata)
}
.data : {
_fdata = .;
*(.data)
CONSTRUCTORS
}
.xdata : {
*(.xdata)
}
_gp = ALIGN (16) + 0x8000;
.lit8 : {
*(.lit8)
}
.lita : {
*(.lita)
}
.sdata : {
*(.sdata)
}
_EDATA = .;
_FBSS = .;
.sbss : {
*(.sbss)
*(.scommon)
. = ALIGN(16);
}
.bss : {
*(.bss)
*(COMMON)
}
_end = .;
. = 0x20000000;
.text : { *(.text) }
_etext = .;
PROVIDE (etext = .);
.rodata : { *(.rodata) }
.data : { *(.data) CONSTRUCTORS }
.got : { *(.got) }
.sdata : { *(.sdata) }
_edata = .;
PROVIDE (edata = .);
.sbss : { *(.sbss) *(.scommon) }
.bss : { *(.bss) *(COMMON) }
_end = . ;
PROVIDE (end = .);
.mdebug 0 : { *(.mdebug) }
.note 0 : { *(.note) }
.comment 0 : { *(.comment) }
}
......@@ -27,12 +27,27 @@ extern unsigned long switch_to_osf_pal(unsigned long nr,
struct pcb_struct * pcb_va, struct pcb_struct * pcb_pa,
unsigned long vptb, unsigned long *kstk);
extern long dispatch(long code, ...);
static void
puts(const char *str, int len)
{
long written;
while (len > 0) {
written = dispatch(CCB_PUTS, 0, str, len);
if (written < 0)
break;
len -= (unsigned int) written;
str += (unsigned int) written;
}
}
int printk(const char * fmt, ...)
{
va_list args;
int i, j, written, remaining, num_nl;
int i, j, remaining, num_nl;
static char buf[1024];
char * str;
va_start(args, fmt);
i = vsprintf(buf, fmt, args);
......@@ -54,12 +69,7 @@ int printk(const char * fmt, ...)
}
}
str = buf;
do {
written = puts(str, remaining);
remaining -= written;
str += written;
} while (remaining > 0);
puts(buf, remaining);
return i;
}
......
......@@ -5,14 +5,14 @@
#
# Code maturity level options
#
# CONFIG_EXPERIMENTAL is not set
CONFIG_EXPERIMENTAL=y
#
# Loadable module support
#
CONFIG_MODULES=y
# CONFIG_MODVERSIONS is not set
# CONFIG_KMOD is not set
CONFIG_MODVERSIONS=y
CONFIG_KMOD=y
#
# General setup
......@@ -53,6 +53,7 @@ CONFIG_SYSCTL=y
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_BINFMT_JAVA is not set
CONFIG_BINFMT_EM86=y
# CONFIG_PARPORT is not set
......@@ -65,20 +66,37 @@ CONFIG_BINFMT_EM86=y
# Block devices
#
CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_IDE is not set
CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_ONLY is not set
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=y
# CONFIG_BLK_DEV_IDESCSI is not set
CONFIG_BLK_DEV_CMD640=y
CONFIG_BLK_DEV_CMD640_ENHANCED=y
# CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y
CONFIG_BLK_DEV_OPTI621=y
CONFIG_BLK_DEV_TRM290=y
CONFIG_BLK_DEV_NS87415=y
CONFIG_BLK_DEV_CMD646=y
# CONFIG_IDE_CHIPSETS is not set
#
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
CONFIG_PARIDE_PARPORT=y
# CONFIG_PARIDE is not set
......@@ -87,34 +105,61 @@ CONFIG_PARIDE_PARPORT=y
#
# Networking options
#
# CONFIG_PACKET is not set
CONFIG_PACKET=y
# CONFIG_NETLINK is not set
# CONFIG_FIREWALL is not set
# CONFIG_NET_ALIAS is not set
CONFIG_FIREWALL=y
CONFIG_NET_ALIAS=y
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
CONFIG_IP_FIREWALL=y
CONFIG_IP_TRANSPARENT_PROXY=y
CONFIG_IP_ALWAYS_DEFRAG=y
CONFIG_IP_MASQUERADE=y
#
# Protocol-specific masquerading support will be built as modules.
#
CONFIG_IP_MASQUERADE_ICMP=y
#
# Protocol-specific masquerading support will be built as modules.
#
# CONFIG_IP_MASQUERADE_IPAUTOFW is not set
# CONFIG_IP_MASQUERADE_IPPORTFW is not set
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_ALIAS is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y
CONFIG_SYN_COOKIES=y
#
# (it is safe to leave these untouched)
#
# CONFIG_INET_RARP is not set
CONFIG_INET_RARP=y
CONFIG_IP_NOSR=y
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
# CONFIG_LLC is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
# CONFIG_CPU_IS_SLOW is not set
# CONFIG_NET_SCHED is not set
#
# SCSI support
......@@ -125,9 +170,9 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_BLK_DEV_SR_VENDOR=y
# CONFIG_CHR_DEV_SG is not set
#
......@@ -144,11 +189,15 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
CONFIG_SCSI_AIC7XXX=y
# CONFIG_OVERRIDE_CMDS is not set
# CONFIG_AIC7XXX_PROC_STATS is not set
CONFIG_AIC7XXX_RESET_DELAY=5
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_BUSLOGIC is not set
CONFIG_SCSI_BUSLOGIC=y
# CONFIG_SCSI_OMIT_FLASHPOINT is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set
......@@ -158,7 +207,13 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
CONFIG_SCSI_NCR53C8XX=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=20
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
......@@ -170,40 +225,50 @@ CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
# CONFIG_SCSI_DEBUG is not set
#
# Network device support
#
CONFIG_NETDEVICES=y
# CONFIG_ARCNET is not set
CONFIG_DUMMY=m
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
CONFIG_NET_ETHERNET=y
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_RTL8139 is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_EISA=y
# CONFIG_PCNET32 is not set
# CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
CONFIG_DE4X5=y
# CONFIG_DEC_ELCP is not set
# CONFIG_DE4X5 is not set
CONFIG_DEC_ELCP=y
# CONFIG_DGRS is not set
# CONFIG_EEXPRESS_PRO100 is not set
# CONFIG_LNE390 is not set
# CONFIG_NE2K_PCI is not set
# CONFIG_TLAN is not set
# CONFIG_ES3210 is not set
CONFIG_EPIC100=y
# CONFIG_ZNET is not set
# CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set
# CONFIG_DLCI is not set
# CONFIG_PPP is not set
CONFIG_PPP=y
#
# CCP compressors for PPP are only built as modules.
#
# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
# CONFIG_TR is not set
# CONFIG_WAN_DRIVERS is not set
# CONFIG_LAPBETHER is not set
# CONFIG_X25_ASY is not set
# CONFIG_SHAPER is not set
#
# Amateur Radio support
......@@ -226,7 +291,7 @@ CONFIG_DE4X5=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
......@@ -259,14 +324,14 @@ CONFIG_PSMOUSE=y
# CONFIG_MINIX_FS is not set
CONFIG_EXT2_FS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
CONFIG_JOLIET=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
# CONFIG_NFSD is not set
CONFIG_NFSD=m
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_CODA_FS is not set
......@@ -277,25 +342,100 @@ CONFIG_LOCKD=y
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS_FS=m
# CONFIG_UFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_ADFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_MAC_PARTITION is not set
# CONFIG_NLS is not set
CONFIG_NLS=y
#
# Native Language Support
#
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_KOI8_R is not set
#
# Console drivers
#
CONFIG_VGA_CONSOLE=y
# CONFIG_FB is not set
CONFIG_FB=y
CONFIG_PCI_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_VGA is not set
CONFIG_FB_TGA=y
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
CONFIG_FBCON_CFB8=y
CONFIG_FBCON_CFB32=y
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
# CONFIG_FBCON_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
#
# Sound
#
# CONFIG_SOUND is not set
CONFIG_SOUND=m
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
# CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_OSS=m
# CONFIG_SOUND_PAS is not set
CONFIG_SOUND_SB=m
# CONFIG_SOUND_ADLIB is not set
# CONFIG_SOUND_GUS is not set
# CONFIG_SOUND_MPU401 is not set
# CONFIG_SOUND_PSS is not set
CONFIG_SOUND_MSS=m
# CONFIG_SOUND_SSCAPE is not set
# CONFIG_SOUND_TRIX is not set
# CONFIG_SOUND_MAD16 is not set
# CONFIG_SOUND_WAVEFRONT is not set
# CONFIG_SOUND_CS4232 is not set
# CONFIG_SOUND_MAUI is not set
# CONFIG_SOUND_SGALAXY is not set
# CONFIG_SOUND_OPL3SA1 is not set
CONFIG_SOUND_SOFTOSS=m
CONFIG_SOUND_YM3812=m
# CONFIG_SOUND_VMIDI is not set
# CONFIG_SOUND_UART6850 is not set
#
# Additional low level sound drivers
#
# CONFIG_LOWLEVEL_SOUND is not set
#
# Kernel hacking
#
# CONFIG_EARLY_SERIAL_CONSOLE is not set
CONFIG_MATHEMU=y
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_MAGIC_SYSRQ=y
......@@ -8,9 +8,9 @@
# Note 2! The CFLAGS definitions are now in the main makefile...
.S.s:
$(CPP) -D__ASSEMBLY__ $(AFLAGS) -traditional $< -o $*.s
$(CC) -D__ASSEMBLY__ $(AFLAGS) -E -o $*.s $<
.S.o:
$(CC) -D__ASSEMBLY__ $(AFLAGS) -traditional -c $< -o $*.o
$(CC) -D__ASSEMBLY__ $(AFLAGS) -c -o $*.o $<
all: kernel.o head.o
......@@ -117,4 +117,13 @@ endif
all: kernel.o head.o
asm_offsets: check_asm
./check_asm > $(TOPDIR)/include/asm-alpha/asm_offsets.h
check_asm: check_asm.c
gcc -o $@ $< -I$(TOPDIR)/include -D__KERNEL__ -ffixed-8
clean::
rm -f check_asm
include $(TOPDIR)/Rules.make
This diff is collapsed.
......@@ -153,3 +153,9 @@ extern int common_swizzle(struct pci_dev *dev, int *pinp);
if (slot >= min_idsel && slot <= max_idsel && pin < irqs_per_slot) \
_ctl_ = irq_tab[slot - min_idsel][pin]; \
_ctl_; })
/* The hose list. */
extern struct linux_hose_info *hose_head, **hose_tail;
extern int hose_count;
extern int pci_probe_enabled;
#include <linux/config.h>
#include <linux/types.h>
#include <linux/stddef.h>
#include <linux/sched.h>
#include <asm/io.h>
int main()
{
printf("#ifndef __ASM_OFFSETS_H__\n#define __ASM_OFFSETS_H__\n");
printf("#define TASK_STATE %ld\n",
(long)offsetof(struct task_struct, state));
printf("#define TASK_FLAGS %ld\n",
(long)offsetof(struct task_struct, flags));
printf("#define TASK_SIGPENDING %ld\n",
(long)offsetof(struct task_struct, sigpending));
printf("#define TASK_ADDR_LIMIT %ld\n",
(long)offsetof(struct task_struct, addr_limit));
printf("#define TASK_EXEC_DOMAIN %ld\n",
(long)offsetof(struct task_struct, exec_domain));
printf("#define TASK_NEED_RESCHED %ld\n",
(long)offsetof(struct task_struct, need_resched));
printf("#define TASK_SIZE %ld\n", sizeof(struct task_struct));
printf("#define STACK_SIZE %ld\n", sizeof(union task_union));
printf("#define HAE_CACHE %ld\n",
(long)offsetof(struct alpha_machine_vector, hae_cache));
printf("#define HAE_REG %ld\n",
(long)offsetof(struct alpha_machine_vector, hae_register));
printf("#endif /* __ASM_OFFSETS_H__ */\n");
return 0;
}
......@@ -130,8 +130,7 @@ conf_read(unsigned long addr, unsigned char type1)
unsigned int stat0, value;
unsigned int haxr2 = 0;
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
DBG(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1));
......@@ -201,7 +200,7 @@ conf_read(unsigned long addr, unsigned char type1)
*(vuip)APECS_IOC_HAXR2 = haxr2 & ~1;
mb();
}
restore_flags(flags);
__restore_flags(flags);
return value;
}
......@@ -213,8 +212,8 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
unsigned int stat0;
unsigned int haxr2 = 0;
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
/* Reset status register to avoid losing errors. */
stat0 = *(vuip)APECS_IOC_DCSR;
......@@ -270,18 +269,17 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
*(vuip)APECS_IOC_HAXR2 = haxr2 & ~1;
mb();
}
restore_flags(flags);
__restore_flags(flags);
}
int
apecs_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
apecs_hose_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value,
struct linux_hose_info *hose)
{
unsigned long addr = APECS_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xff;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -293,16 +291,13 @@ apecs_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
}
int
apecs_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
apecs_hose_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value,
struct linux_hose_info *hose)
{
unsigned long addr = APECS_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffff;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -313,15 +308,13 @@ apecs_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
}
int
apecs_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
apecs_hose_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value,
struct linux_hose_info *hose)
{
unsigned long addr = APECS_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffffffff;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -331,7 +324,8 @@ apecs_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
}
int
apecs_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
apecs_hose_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value,
struct linux_hose_info *hose)
{
unsigned long addr = APECS_CONF;
unsigned long pci_addr;
......@@ -346,7 +340,8 @@ apecs_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
}
int
apecs_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
apecs_hose_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value,
struct linux_hose_info *hose)
{
unsigned long addr = APECS_CONF;
unsigned long pci_addr;
......@@ -361,7 +356,8 @@ apecs_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
}
int
apecs_pcibios_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value)
apecs_hose_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value,
struct linux_hose_info *hose)
{
unsigned long addr = APECS_CONF;
unsigned long pci_addr;
......
......@@ -30,8 +30,6 @@
* handle the system transaction. Another involves timing. Ho hum.
*/
extern asmlinkage void wrmces(unsigned long mces);
/*
* Machine check reasons. Defined according to PALcode sources
* (osf.h and platform.h).
......@@ -155,8 +153,7 @@ conf_read(unsigned long addr, unsigned char type1)
value = 0xffffffffU;
mb();
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
DBGC(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1));
......@@ -224,7 +221,7 @@ conf_read(unsigned long addr, unsigned char type1)
DBGC(("conf_read(): finished\n"));
restore_flags(flags);
__restore_flags(flags);
return value;
}
......@@ -235,8 +232,7 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
unsigned int stat0;
unsigned int cia_cfg = 0;
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
/* Reset status register to avoid losing errors. */
stat0 = *(vuip)CIA_IOC_CIA_ERR;
......@@ -295,18 +291,17 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
}
DBGC(("conf_write(): finished\n"));
restore_flags(flags);
__restore_flags(flags);
}
int
cia_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
cia_hose_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value,
struct linux_hose_info *hose)
{
unsigned long addr = CIA_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xff;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -316,16 +311,13 @@ cia_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
}
int
cia_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
cia_hose_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value,
struct linux_hose_info *hose)
{
unsigned long addr = CIA_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffff;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -335,15 +327,13 @@ cia_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
}
int
cia_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
cia_hose_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value,
struct linux_hose_info *hose)
{
unsigned long addr = CIA_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffffffff;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -353,7 +343,8 @@ cia_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
}
int
cia_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
cia_hose_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value,
struct linux_hose_info *hose)
{
unsigned long addr = CIA_CONF;
unsigned long pci_addr;
......@@ -368,14 +359,13 @@ cia_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
}
int
cia_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
cia_hose_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value,
struct linux_hose_info *hose)
{
unsigned long addr = CIA_CONF;
unsigned long pci_addr;
unsigned char type1;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -385,14 +375,13 @@ cia_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
}
int
cia_pcibios_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value)
cia_hose_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value,
struct linux_hose_info *hose)
{
unsigned long addr = CIA_CONF;
unsigned long pci_addr;
unsigned char type1;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......
......@@ -128,8 +128,7 @@ conf_read(unsigned long addr)
unsigned long flags, code, stat0;
unsigned int value;
save_flags(flags);
cli();
__save_and_cli(flags);
/* Reset status register to avoid loosing errors. */
stat0 = *(vulp)LCA_IOC_STAT0;
......@@ -157,7 +156,7 @@ conf_read(unsigned long addr)
value = 0xffffffff;
}
restore_flags(flags);
__restore_flags(flags);
return value;
}
......@@ -166,8 +165,7 @@ conf_write(unsigned long addr, unsigned int value)
{
unsigned long flags, code, stat0;
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
/* Reset status register to avoid loosing errors. */
stat0 = *(vulp)LCA_IOC_STAT0;
......@@ -193,17 +191,16 @@ conf_write(unsigned long addr, unsigned int value)
/* Reset machine check. */
wrmces(0x7);
}
restore_flags(flags);
__restore_flags(flags);
}
int
lca_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
lca_hose_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value,
struct linux_hose_info *hose)
{
unsigned long addr = LCA_CONF;
unsigned long pci_addr;
*value = 0xff;
if (mk_conf_addr(bus, device_fn, where, &pci_addr))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -213,15 +210,12 @@ lca_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
}
int
lca_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
lca_hose_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value,
struct linux_hose_info *hose)
{
unsigned long addr = LCA_CONF;
unsigned long pci_addr;
*value = 0xffff;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -231,14 +225,12 @@ lca_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
}
int
lca_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
lca_hose_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value,
struct linux_hose_info *hose)
{
unsigned long addr = LCA_CONF;
unsigned long pci_addr;
*value = 0xffffffff;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -248,7 +240,8 @@ lca_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
}
int
lca_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
lca_hose_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value,
struct linux_hose_info *hose)
{
unsigned long addr = LCA_CONF;
unsigned long pci_addr;
......@@ -262,13 +255,12 @@ lca_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
}
int
lca_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
lca_hose_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value,
struct linux_hose_info *hose)
{
unsigned long addr = LCA_CONF;
unsigned long pci_addr;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -278,13 +270,12 @@ lca_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
}
int
lca_pcibios_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value)
lca_hose_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value,
struct linux_hose_info *hose)
{
unsigned long addr = LCA_CONF;
unsigned long pci_addr;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr))
return PCIBIOS_DEVICE_NOT_FOUND;
......
This diff is collapsed.
......@@ -27,22 +27,22 @@
One plausible explanation is that the I/O controller does not properly
handle the system transaction. Another involves timing. Ho hum. */
extern asmlinkage void wrmces(unsigned long mces);
/*
* BIOS32-style PCI interface:
*/
#ifdef DEBUG
# define DBG(args) printk args
#define DEBUG_CONFIG 0
#define DEBUG_MCHECK 0
#if DEBUG_CONFIG
# define DBG_CNF(args) printk args
#else
# define DBG(args)
# define DBG_CNF(args)
#endif
#define DEBUG_MCHECK
#ifdef DEBUG_MCHECK
#if DEBUG_MCHECK
# define DBG_MCK(args) printk args
#define DEBUG_MCHECK_DUMP
# define DEBUG_MCHECK_DUMP
#else
# define DBG_MCK(args)
#endif
......@@ -101,9 +101,9 @@ mk_conf_addr(u8 bus, u8 device_fn, u8 where, unsigned long *pci_addr,
{
unsigned long addr;
DBG(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x,"
" pci_addr=0x%p, type1=0x%p)\n",
bus, device_fn, where, pci_addr, type1));
DBG_CNF(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x,"
" pci_addr=0x%p, type1=0x%p)\n",
bus, device_fn, where, pci_addr, type1));
if (bus == 0) {
int device;
......@@ -112,8 +112,8 @@ mk_conf_addr(u8 bus, u8 device_fn, u8 where, unsigned long *pci_addr,
/* Type 0 configuration cycle. */
#if NOT_NOW
if (device > 20) {
DBG(("mk_conf_addr: device (%d) > 20, returning -1\n",
device));
DBG_CNF(("mk_conf_addr: device (%d) > 20, return -1\n",
device));
return -1;
}
#endif
......@@ -125,7 +125,7 @@ mk_conf_addr(u8 bus, u8 device_fn, u8 where, unsigned long *pci_addr,
addr = (bus << 16) | (device_fn << 8) | (where);
}
*pci_addr = addr;
DBG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
DBG_CNF(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
return 0;
}
......@@ -136,22 +136,19 @@ conf_read(unsigned long addr, unsigned char type1)
unsigned int stat0, value, temp;
unsigned int pyxis_cfg = 0;
save_and_cli(flags); /* avoid getting hit by machine check */
DBG(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1));
__save_and_cli(flags); /* avoid getting hit by machine check */
/* Reset status register to avoid losing errors. */
stat0 = *(vuip)PYXIS_ERR;
*(vuip)PYXIS_ERR = stat0; mb();
temp = *(vuip)PYXIS_ERR; /* re-read to force write */
DBG(("conf_read: PYXIS ERR was 0x%x\n", stat0));
DBG_CNF(("conf_read: PYXIS ERR was 0x%x\n", stat0));
/* If Type1 access, must set PYXIS CFG. */
if (type1) {
pyxis_cfg = *(vuip)PYXIS_CFG;
*(vuip)PYXIS_CFG = pyxis_cfg | 1; mb();
temp = *(vuip)PYXIS_CFG; /* re-read to force write */
DBG(("conf_read: TYPE1 access\n"));
}
mb();
......@@ -179,9 +176,10 @@ conf_read(unsigned long addr, unsigned char type1)
temp = *(vuip)PYXIS_CFG; /* re-read to force write */
}
DBG(("conf_read(): finished\n"));
DBG_CNF(("conf_read(addr=0x%lx, type1=%d) = %#x\n",
addr, type1, value));
restore_flags(flags);
__restore_flags(flags);
return value;
}
......@@ -192,24 +190,27 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
unsigned int stat0, temp;
unsigned int pyxis_cfg = 0;
save_and_cli(flags); /* avoid getting hit by machine check */
DBG_CNF(("conf_write(addr=%#lx, value=%#x, type1=%d)\n",
addr, value, type1));
__save_and_cli(flags); /* avoid getting hit by machine check */
/* Reset status register to avoid losing errors. */
stat0 = *(vuip)PYXIS_ERR;
*(vuip)PYXIS_ERR = stat0; mb();
temp = *(vuip)PYXIS_ERR; /* re-read to force write */
DBG(("conf_write: PYXIS ERR was 0x%x\n", stat0));
/* If Type1 access, must set PYXIS CFG. */
if (type1) {
pyxis_cfg = *(vuip)PYXIS_CFG;
*(vuip)PYXIS_CFG = pyxis_cfg | 1; mb();
temp = *(vuip)PYXIS_CFG; /* re-read to force write */
DBG(("conf_read: TYPE1 access\n"));
}
mb();
draina();
PYXIS_mcheck_expected = 1;
PYXIS_mcheck_taken = 0;
mb();
/* Access configuration space. */
......@@ -226,18 +227,17 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
temp = *(vuip)PYXIS_CFG; /* re-read to force write */
}
DBG(("conf_write(): finished\n"));
restore_flags(flags);
__restore_flags(flags);
}
int
pyxis_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
pyxis_hose_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value,
struct linux_hose_info *hose)
{
unsigned long addr = PYXIS_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xff;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -247,15 +247,13 @@ pyxis_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
}
int
pyxis_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
pyxis_hose_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value,
struct linux_hose_info *hose)
{
unsigned long addr = PYXIS_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffff;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -265,15 +263,13 @@ pyxis_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
}
int
pyxis_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
pyxis_hose_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value,
struct linux_hose_info *hose)
{
unsigned long addr = PYXIS_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffffffff;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -283,7 +279,8 @@ pyxis_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
}
int
pyxis_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
pyxis_hose_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value,
struct linux_hose_info *hose)
{
unsigned long addr = PYXIS_CONF;
unsigned long pci_addr;
......@@ -298,14 +295,13 @@ pyxis_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
}
int
pyxis_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
pyxis_hose_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value,
struct linux_hose_info *hose)
{
unsigned long addr = PYXIS_CONF;
unsigned long pci_addr;
unsigned char type1;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -315,14 +311,13 @@ pyxis_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
}
int
pyxis_pcibios_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value)
pyxis_hose_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value,
struct linux_hose_info *hose)
{
unsigned long addr = PYXIS_CONF;
unsigned long pci_addr;
unsigned char type1;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -555,7 +550,7 @@ static int
pyxis_pci_clr_err(void)
{
PYXIS_jd = *(vuip)PYXIS_ERR;
DBG(("PYXIS_pci_clr_err: PYXIS ERR after read 0x%x\n", PYXIS_jd));
DBG_MCK(("PYXIS_pci_clr_err: PYXIS ERR after read 0x%x\n", PYXIS_jd));
*(vuip)PYXIS_ERR = 0x0180; mb();
PYXIS_jd = *(vuip)PYXIS_ERR; /* re-read to force write */
return 0;
......@@ -583,17 +578,6 @@ pyxis_machine_check(unsigned long vector, unsigned long la_ptr,
PYXIS_mcheck_expected, mchk_sysdata->epic_dcsr,
mchk_sysdata->epic_pear));
#endif
#ifdef DEBUG_MCHECK_DUMP
{
unsigned long *ptr;
int i;
ptr = (unsigned long *)la_ptr;
for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
}
}
#endif /* DEBUG_MCHECK_DUMP */
/*
* Check if machine check is due to a badaddr() and if so,
......@@ -602,7 +586,7 @@ pyxis_machine_check(unsigned long vector, unsigned long la_ptr,
mb();
mb(); /* magic */
if (PYXIS_mcheck_expected) {
DBG(("PYXIS machine check expected\n"));
DBG_MCK(("PYXIS machine check expected\n"));
PYXIS_mcheck_expected = 0;
PYXIS_mcheck_taken = 1;
mb();
......@@ -612,7 +596,6 @@ pyxis_machine_check(unsigned long vector, unsigned long la_ptr,
wrmces(0x7);
mb();
}
#if 1
else {
printk("PYXIS machine check NOT expected\n") ;
DBG_MCK(("pyxis_machine_check: vector=0x%lx la_ptr=0x%lx\n",
......@@ -629,6 +612,17 @@ pyxis_machine_check(unsigned long vector, unsigned long la_ptr,
pyxis_pci_clr_err();
wrmces(0x7);
mb();
}
#ifdef DEBUG_MCHECK_DUMP
{
unsigned long *ptr = (unsigned long *)la_ptr;;
long n = mchk_header->size / (2*sizeof(long));
do
printk(" +%lx %lx %lx\n", i*sizeof(long),
ptr[i], ptr[i+1]);
while (--i);
}
#endif
}
}
......@@ -148,8 +148,7 @@ conf_read(unsigned long addr, unsigned char type1)
cpu = smp_processor_id();
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
DBG(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1));
......@@ -195,7 +194,7 @@ conf_read(unsigned long addr, unsigned char type1)
}
DBG(("conf_read(): finished\n"));
restore_flags(flags);
__restore_flags(flags);
return value;
}
......@@ -208,8 +207,7 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
cpu = smp_processor_id();
save_flags(flags); /* avoid getting hit by machine check */
cli();
__save_and_cli(flags); /* avoid getting hit by machine check */
#if 0
/* Reset status register to avoid losing errors. */
......@@ -246,18 +244,17 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
mb();
}
DBG(("conf_write(): finished\n"));
restore_flags(flags);
__restore_flags(flags);
}
int
t2_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
t2_hose_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value,
struct linux_hose_info *hose)
{
unsigned long addr = T2_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xff;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -267,15 +264,13 @@ t2_pcibios_read_config_byte (u8 bus, u8 device_fn, u8 where, u8 *value)
}
int
t2_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
t2_hose_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value,
struct linux_hose_info *hose)
{
unsigned long addr = T2_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffff;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -285,15 +280,13 @@ t2_pcibios_read_config_word (u8 bus, u8 device_fn, u8 where, u16 *value)
}
int
t2_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
t2_hose_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value,
struct linux_hose_info *hose)
{
unsigned long addr = T2_CONF;
unsigned long pci_addr;
unsigned char type1;
*value = 0xffffffff;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -303,7 +296,8 @@ t2_pcibios_read_config_dword (u8 bus, u8 device_fn, u8 where, u32 *value)
}
int
t2_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
t2_hose_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value,
struct linux_hose_info *hose)
{
unsigned long addr = T2_CONF;
unsigned long pci_addr;
......@@ -318,14 +312,13 @@ t2_pcibios_write_config_byte (u8 bus, u8 device_fn, u8 where, u8 value)
}
int
t2_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
t2_hose_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value,
struct linux_hose_info *hose)
{
unsigned long addr = T2_CONF;
unsigned long pci_addr;
unsigned char type1;
if (where & 0x1)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......@@ -335,14 +328,13 @@ t2_pcibios_write_config_word (u8 bus, u8 device_fn, u8 where, u16 value)
}
int
t2_pcibios_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value)
t2_hose_write_config_dword (u8 bus, u8 device_fn, u8 where, u32 value,
struct linux_hose_info *hose)
{
unsigned long addr = T2_CONF;
unsigned long pci_addr;
unsigned char type1;
if (where & 0x3)
return PCIBIOS_BAD_REGISTER_NUMBER;
if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1))
return PCIBIOS_DEVICE_NOT_FOUND;
......
This diff is collapsed.
......@@ -51,56 +51,7 @@
* JRP - Save regs 16-18 in a special area of the stack, so that
* the palcode-provided values are available to the signal handler.
*/
#if defined(CONFIG_ALPHA_TSUNAMI)
/* TSUNAMI has no HAE register to save/restore */
#define SAVE_ALL \
subq $30,184,$30; \
stq $0,0($30); \
stq $1,8($30); \
stq $2,16($30); \
stq $3,24($30); \
stq $4,32($30); \
stq $5,40($30); \
stq $6,48($30); \
stq $7,56($30); \
stq $8,64($30); \
stq $19,72($30); \
stq $20,80($30); \
stq $21,88($30); \
stq $22,96($30); \
stq $23,104($30); \
stq $24,112($30); \
stq $25,120($30); \
stq $26,128($30); \
stq $27,136($30); \
stq $28,144($30); \
stq $16,160($30); \
stq $17,168($30); \
stq $18,176($30)
#define RESTORE_ALL \
ldq $0,0($30); \
ldq $1,8($30); \
ldq $2,16($30); \
ldq $3,24($30); \
ldq $4,32($30); \
ldq $5,40($30); \
ldq $6,48($30); \
ldq $7,56($30); \
ldq $8,64($30); \
ldq $19,72($30); \
ldq $20,80($30); \
ldq $21,88($30); \
ldq $22,96($30); \
ldq $23,104($30); \
ldq $24,112($30); \
ldq $25,120($30); \
ldq $26,128($30); \
ldq $27,136($30); \
ldq $28,144($30); \
addq $30,184,$30
#else /* TSUNAMI */
#define SAVE_ALL \
subq $30,184,$30; \
stq $0,0($30); \
......@@ -166,8 +117,6 @@
ldq $28,144($30); \
addq $30,184,$30
#endif /* TSUNAMI */
.text
.set noat
#if defined(__linux__) && !defined(__ELF__)
......@@ -181,8 +130,8 @@ entInt:
SAVE_ALL
lda $8,0x3fff
bic $30,$8,$8
jsr $26,do_entInt
br $31,ret_from_sys_call
lda $26,ret_from_sys_call
jsr $31,do_entInt
.end entInt
.align 3
......@@ -224,11 +173,8 @@ entArith:
SAVE_ALL
lda $8,0x3fff
bic $30,$8,$8
/* How much of a win is this clockwise? We are, after all, messing
up the call/return prefetch stack. -- rth */
lda $27,do_entArith
lda $26,ret_from_sys_call
jsr $31,($27),do_entArith
jsr $31,do_entArith
.end entArith
.align 3
......@@ -238,9 +184,8 @@ entIF:
SAVE_ALL
lda $8,0x3fff
bic $30,$8,$8
lda $27,do_entIF
lda $26,ret_from_sys_call
jsr $31,($27),do_entIF
jsr $31,do_entIF
.end entIF
/*
......@@ -373,7 +318,7 @@ do_switch_stack:
stt $f29,296($30)
stt $f30,304($30)
stt $f0,312($30) # save fpcr in slot of $f31
ldt $f0,64($30) # don't let "do_switch_stack" change any fp state.
ldt $f0,64($30) # dont let "do_switch_stack" change fp state.
ret $31,($1),1
.end do_switch_stack
......@@ -744,8 +689,8 @@ signal_return:
.ent ret_from_smpfork
ret_from_smpfork:
.set at
mb /* Make the changed data visible before the freed lock. */
stq $31,scheduler_lock
mb /* ?????????????????? */
br ret_from_sys_call
.set noat
.end ret_from_smpfork
......@@ -834,7 +779,7 @@ sys_call_table:
.quad sys_lseek
.quad sys_getxpid /* 20 */
.quad osf_mount
.quad osf_umount
.quad sys_umount
.quad sys_setuid
.quad sys_getxuid
.quad alpha_ni_syscall /* 25 */
......
This diff is collapsed.
......@@ -8,15 +8,15 @@
* with the IRQ handling routines in irq.c.
*/
/* FIXME FIXME FIXME FIXME FIXME */
/* We need to figure out why these fail on the DP264 & SX164. Otherwise
we'd just do this in init_IRQ(). */
#define STANDARD_INIT_IRQ_PROLOG \
outb(0, DMA1_RESET_REG); \
outb(0, DMA2_RESET_REG); \
outb(0, DMA1_MASK_REG); \
outb(0, DMA2_MASK_REG); \
outb(0, DMA1_CLR_MASK_REG); \
outb(0, DMA2_CLR_MASK_REG)
outb(0, DMA2_CLR_MASK_REG); \
outb(DMA_MODE_CASCADE, DMA2_MODE_REG)
extern unsigned long alpha_irq_mask;
......
......@@ -28,7 +28,7 @@
#define CAT(x,y) CAT1(x,y)
#define DO_DEFAULT_RTC \
rtc_port: 0x70, rtc_addr: 0x80
rtc_port: 0x70, rtc_addr: 0x80, rtc_bcd: 0
#define DO_EV4_MMU \
max_asn: EV4_MAX_ASN, \
......@@ -47,7 +47,7 @@
mv_flush_tlb_current_page: ev5_flush_tlb_current_page
#define DO_EV6_MMU \
max_asn: EV5_MAX_ASN, \
max_asn: EV6_MAX_ASN, \
mmu_context_mask: 0xfffffffffful, \
mv_get_mmu_context: ev5_get_mmu_context, \
mv_flush_tlb_current: ev5_flush_tlb_current, \
......@@ -75,12 +75,12 @@
#define IO(UP,low1,low2) \
IO_LITE(UP,low1,low2), \
pci_read_config_byte: CAT(low2,_pcibios_read_config_byte), \
pci_read_config_word: CAT(low2,_pcibios_read_config_word), \
pci_read_config_dword: CAT(low2,_pcibios_read_config_dword), \
pci_write_config_byte: CAT(low2,_pcibios_write_config_byte), \
pci_write_config_word: CAT(low2,_pcibios_write_config_word), \
pci_write_config_dword: CAT(low2,_pcibios_write_config_dword), \
hose_read_config_byte: CAT(low2,_hose_read_config_byte), \
hose_read_config_word: CAT(low2,_hose_read_config_word), \
hose_read_config_dword: CAT(low2,_hose_read_config_dword), \
hose_write_config_byte: CAT(low2,_hose_write_config_byte), \
hose_write_config_word: CAT(low2,_hose_write_config_word), \
hose_write_config_dword: CAT(low2,_hose_write_config_dword), \
dma_win_base: CAT(UP,_DMA_WIN_BASE_DEFAULT), \
dma_win_size: CAT(UP,_DMA_WIN_SIZE_DEFAULT)
......
......@@ -47,7 +47,6 @@ extern struct file_operations *get_chrfops(unsigned int);
extern kdev_t get_unnamed_dev(void);
extern void put_unnamed_dev(kdev_t);
extern asmlinkage int sys_umount(char *, int);
extern asmlinkage int sys_swapon(const char *specialfile, int swap_flags);
extern asmlinkage unsigned long sys_brk(unsigned long);
......@@ -537,16 +536,6 @@ asmlinkage int osf_mount(unsigned long typenr, char *path, int flag, void *data)
return retval;
}
asmlinkage int osf_umount(char *path, int flag)
{
int ret;
lock_kernel();
ret = sys_umount(path,flag);
unlock_kernel();
return ret;
}
asmlinkage int osf_utsname(char *name)
{
int error;
......
......@@ -75,58 +75,34 @@ sys_sethae(unsigned long hae, unsigned long a1, unsigned long a2,
return 0;
}
#ifdef __SMP__
/* This is being executed in task 0 'user space'. */
#define resched_needed() 1
int
cpu_idle(void *unused)
static void __attribute__((noreturn))
do_cpu_idle(void)
{
extern volatile int smp_commenced;
current->priority = -100;
/* An endless idle loop with no priority at all. */
current->priority = 0;
while (1) {
check_pgt_cache();
run_task_queue(&tq_scheduler);
/* endless idle loop with no priority at all */
current->counter = -100;
if (!smp_commenced || resched_needed()) {
schedule();
}
current->counter = 0;
schedule();
}
}
asmlinkage int
sys_idle(void)
#ifdef __SMP__
void
cpu_idle(void *unused)
{
if(current->pid != 0)
return -EPERM;
cpu_idle(NULL);
return 0;
do_cpu_idle();
}
#else /* __SMP__ */
#endif
asmlinkage int
sys_idle(void)
{
int ret = -EPERM;
lock_kernel();
if (current->pid != 0)
goto out;
/* endless idle loop with no priority at all */
current->counter = -100;
for (;;) {
check_pgt_cache();
schedule();
}
ret = 0;
out:
unlock_kernel();
return ret;
if (current->pid == 0)
do_cpu_idle();
return -EPERM;
}
#endif /* __SMP__ */
void
generic_kill_arch (int mode, char *restart_cmd)
......@@ -154,7 +130,7 @@ generic_kill_arch (int mode, char *restart_cmd)
cpup->ipc_buffer[0] = 0;
} else {
flags |= 0x00030000UL; /* "warm bootstrap" */
strncpy(cpup->ipc_buffer, restart_cmd,
strncpy((char *)cpup->ipc_buffer, restart_cmd,
sizeof(cpup->ipc_buffer));
}
}
......
......@@ -6,13 +6,21 @@
#define vuip volatile unsigned int *
#define vulp volatile unsigned long *
struct linux_hose_info;
/* core_apecs.c */
extern int apecs_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int apecs_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int apecs_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int apecs_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int apecs_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int apecs_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int apecs_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int apecs_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int apecs_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int apecs_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int apecs_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int apecs_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void apecs_init_arch(unsigned long *, unsigned long *);
extern volatile unsigned int apecs_mcheck_expected;
......@@ -21,43 +29,66 @@ extern int apecs_pci_clr_err(void);
extern void apecs_machine_check(u64, u64, struct pt_regs *);
/* core_cia.c */
extern int cia_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int cia_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int cia_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int cia_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int cia_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int cia_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int cia_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int cia_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int cia_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int cia_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int cia_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int cia_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void cia_init_arch(unsigned long *, unsigned long *);
extern void cia_machine_check(u64, u64, struct pt_regs *);
/* core_lca.c */
extern int lca_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int lca_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int lca_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int lca_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int lca_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int lca_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int lca_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int lca_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int lca_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int lca_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int lca_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int lca_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void lca_init_arch(unsigned long *, unsigned long *);
extern void lca_machine_check(u64, u64, struct pt_regs *);
/* core_mcpcia.c */
extern int mcpcia_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int mcpcia_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int mcpcia_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int mcpcia_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int mcpcia_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int mcpcia_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int mcpcia_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int mcpcia_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int mcpcia_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int mcpcia_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int mcpcia_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int mcpcia_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void mcpcia_init_arch(unsigned long *, unsigned long *);
extern void mcpcia_machine_check(u64, u64, struct pt_regs *);
extern void mcpcia_pci_fixup(void);
/* core_pyxis.c */
extern int pyxis_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int pyxis_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int pyxis_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int pyxis_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int pyxis_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int pyxis_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int pyxis_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int pyxis_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int pyxis_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int pyxis_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int pyxis_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int pyxis_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void pyxis_enable_errors (void);
extern int pyxis_srm_window_setup (void);
extern void pyxis_native_window_setup(void);
......@@ -66,22 +97,34 @@ extern void pyxis_init_arch(unsigned long *, unsigned long *);
extern void pyxis_machine_check(u64, u64, struct pt_regs *);
/* core_t2.c */
extern int t2_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int t2_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int t2_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int t2_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int t2_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int t2_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int t2_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int t2_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int t2_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int t2_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int t2_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int t2_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void t2_init_arch(unsigned long *, unsigned long *);
extern void t2_machine_check(u64, u64, struct pt_regs *);
/* core_tsunami.c */
extern int tsunami_pcibios_read_config_byte (u8, u8, u8, u8 *value);
extern int tsunami_pcibios_read_config_word (u8, u8, u8, u16 *value);
extern int tsunami_pcibios_read_config_dword (u8, u8, u8, u32 *value);
extern int tsunami_pcibios_write_config_byte (u8, u8, u8, u8 value);
extern int tsunami_pcibios_write_config_word (u8, u8, u8, u16 value);
extern int tsunami_pcibios_write_config_dword (u8, u8, u8, u32 value);
extern int tsunami_hose_read_config_byte (u8, u8, u8, u8 *value,
struct linux_hose_info *hose);
extern int tsunami_hose_read_config_word (u8, u8, u8, u16 *value,
struct linux_hose_info *hose);
extern int tsunami_hose_read_config_dword (u8, u8, u8, u32 *value,
struct linux_hose_info *hose);
extern int tsunami_hose_write_config_byte (u8, u8, u8, u8 value,
struct linux_hose_info *hose);
extern int tsunami_hose_write_config_word (u8, u8, u8, u16 value,
struct linux_hose_info *hose);
extern int tsunami_hose_write_config_dword (u8, u8, u8, u32 value,
struct linux_hose_info *hose);
extern void tsunami_init_arch(unsigned long *, unsigned long *);
extern void tsunami_machine_check(u64, u64, struct pt_regs *);
......@@ -92,14 +135,14 @@ extern unsigned long srm_hae;
/* smp.c */
extern void setup_smp(void);
extern char *smp_info(void);
extern int smp_info(char *buffer);
extern void handle_ipi(struct pt_regs *);
/* bios32.c */
extern void reset_for_srm(void);
/* time.c */
extern void timer_interrupt(struct pt_regs * regs);
extern void timer_interrupt(int irq, void *dev, struct pt_regs * regs);
/* smc37c93x.c */
extern void SMC93x_Init(void);
......@@ -118,6 +161,7 @@ extern unsigned long alpha_read_fp_reg (unsigned long reg);
extern void wrmces(unsigned long mces);
extern void cserve_ena(unsigned long);
extern void cserve_dis(unsigned long);
extern void __start_cpu(unsigned long);
/* entry.S */
extern void entArith(void);
......@@ -129,3 +173,4 @@ extern void entUna(void);
/* process.c */
void generic_kill_arch (int mode, char *reboot_cmd);
void cpu_idle(void *) __attribute__((noreturn));
......@@ -20,7 +20,6 @@
#include <linux/tty.h>
#include <linux/delay.h>
#include <linux/config.h> /* CONFIG_ALPHA_LCA etc */
#include <linux/ioport.h>
#include <linux/mc146818rtc.h>
#include <linux/console.h>
#include <linux/errno.h>
......@@ -30,6 +29,9 @@
#ifdef CONFIG_RTC
#include <linux/timex.h>
#endif
#ifdef CONFIG_BLK_DEV_INITRD
#include <linux/blk.h>
#endif
#include <asm/uaccess.h>
#include <asm/pgtable.h>
......@@ -73,11 +75,12 @@ static void get_sysnames(long, long, char **, char **);
#define PARAM ZERO_PAGE
#define COMMAND_LINE ((char*)(PARAM + 0x0000))
#define COMMAND_LINE_SIZE 256
#define INITRD_START (*(unsigned long *) (PARAM+0x100))
#define INITRD_SIZE (*(unsigned long *) (PARAM+0x108))
static char command_line[COMMAND_LINE_SIZE];
char saved_command_line[COMMAND_LINE_SIZE];
/*
* The format of "screen_info" is strange, and due to early
* i386-setup code. This is just enough to make the console
......@@ -93,68 +96,6 @@ struct screen_info screen_info = {
orig_video_points: 16
};
/*
* Initialize Programmable Interval Timers with standard values. Some
* drivers depend on them being initialized (e.g., joystick driver).
*/
/* It is (normally) only counter 1 that presents config problems, so
provide this support function to do the rest of the job. */
void inline
init_pit_rest(void)
{
#if 0
/* Leave refresh timer alone---nobody should depend on a
particular value anyway. */
outb(0x54, 0x43); /* counter 1: refresh timer */
outb(0x18, 0x41);
#endif
outb(0xb6, 0x43); /* counter 2: speaker */
outb(0x31, 0x42);
outb(0x13, 0x42);
if ((CMOS_READ(RTC_FREQ_SELECT) & 0x3f) != 0x26) {
printk("Setting RTC_FREQ to 1024 Hz\n");
CMOS_WRITE(0x26, RTC_FREQ_SELECT);
}
}
#ifdef CONFIG_RTC
static inline void
rtc_init_pit (void)
{
/* Setup interval timer if /dev/rtc is being used */
outb(0x34, 0x43); /* binary, mode 2, LSB/MSB, ch 0 */
outb(LATCH & 0xff, 0x40); /* LSB */
outb(LATCH >> 8, 0x40); /* MSB */
request_region(0x40, 0x20, "timer"); /* reserve pit */
init_pit_rest();
}
#endif
void
generic_init_pit (void)
{
outb(0x36, 0x43); /* counter 0: system timer */
outb(0x00, 0x40);
outb(0x00, 0x40);
request_region(RTC_PORT(0), 0x10, "timer"); /* reserve rtc */
init_pit_rest();
}
/* This probably isn't Right, but it is what the old code did. */
#if defined(CONFIG_RTC)
# define init_pit rtc_init_pit
#else
# define init_pit alpha_mv.init_pit
#endif
/*
* Declare all of the machine vectors.
*/
......@@ -278,6 +219,11 @@ setup_arch(char **cmdline_p, unsigned long * memory_start_p,
}
#endif
printk("Booting on %s%s%s using machine vector %s\n",
type_name, (*var_name ? " variation " : ""),
var_name, alpha_mv.vector_name);
printk("Command line: %s\n", command_line);
/*
* Sync with the HAE
*/
......@@ -293,17 +239,27 @@ setup_arch(char **cmdline_p, unsigned long * memory_start_p,
*memory_end_p = find_end_memory();
*memory_start_p = (unsigned long) _end;
#ifdef CONFIG_BLK_DEV_INITRD
initrd_start = INITRD_START;
if (initrd_start) {
initrd_end = initrd_start+INITRD_SIZE;
printk("Initial ramdisk at: 0x%p (%lu bytes)\n",
(void *) initrd_start, INITRD_SIZE);
if (initrd_end > *memory_end_p) {
printk("initrd extends beyond end of memory "
"(0x%08lx > 0x%08lx)\ndisabling initrd\n",
initrd_end, memory_end_p);
initrd_start = initrd_end = 0;
}
}
#endif
/* Initialize the machine. Usually has to do with setting up
DMA windows and the like. */
if (alpha_mv.init_arch)
alpha_mv.init_arch(memory_start_p, memory_end_p);
/* Initialize the timers. */
init_pit();
/* Default root filesystem to sda2. */
ROOT_DEV = to_kdev_t(0x0802);
/*
* Give us a default console. TGA users will see nothing until
* chr_dev_init is called, rather late in the boot sequence.
......@@ -317,11 +273,8 @@ setup_arch(char **cmdline_p, unsigned long * memory_start_p,
#endif
#endif
/* Delayed so that we've initialized the machine first. */
printk("Booting on %s%s%s using machine vector %s\n",
type_name, (*var_name ? " variation " : ""),
var_name, alpha_mv.vector_name);
printk("Command line: %s\n", command_line);
/* Default root filesystem to sda2. */
ROOT_DEV = to_kdev_t(0x0802);
/*
* Check ASN in HWRPB for validity, report if bad.
......
......@@ -13,7 +13,9 @@
#include <asm/io.h>
#include <asm/segment.h>
#if 0
#define SMC_DEBUG 0
#if SMC_DEBUG
# define DBG_DEVS(args) printk args
#else
# define DBG_DEVS(args)
......@@ -75,8 +77,6 @@
#define PARP_BASE 0x3bc
#define PARP_INTERRUPT 7
#define SMC_DEBUG 0
static unsigned long __init SMCConfigState(unsigned long baseAddr)
{
unsigned char devId;
......@@ -241,12 +241,17 @@ int __init SMC93x_Init(void)
SMCReportDeviceStatus(SMCUltraBase);
#endif
SMCEnableDevice(SMCUltraBase, SER1, COM1_BASE, COM1_INTERRUPT);
DBG_DEVS(("SMC FDC37C93X: SER1 done\n"));
SMCEnableDevice(SMCUltraBase, SER2, COM2_BASE, COM2_INTERRUPT);
DBG_DEVS(("SMC FDC37C93X: SER2 done\n"));
SMCEnableDevice(SMCUltraBase, PARP, PARP_BASE, PARP_INTERRUPT);
DBG_DEVS(("SMC FDC37C93X: PARP done\n"));
/* On PC164, IDE on the SMC is not enabled;
CMD646 (PCI) on MB */
SMCEnableKYBD(SMCUltraBase);
DBG_DEVS(("SMC FDC37C93X: KYB done\n"));
SMCEnableFDC(SMCUltraBase);
DBG_DEVS(("SMC FDC37C93X: FDC done\n"));
#if SMC_DEBUG
SMCReportDeviceStatus(SMCUltraBase);
#endif
......@@ -254,9 +259,7 @@ int __init SMC93x_Init(void)
return 1;
}
else {
#if SMC_DEBUG
printk("No SMC FDC37C93X Ultra I/O Controller found\n");
#endif
DBG_DEVS(("No SMC FDC37C93X Ultra I/O Controller found\n"));
return 0;
}
}
/*
* linux/arch/alpha/kernel/smp.c
*/
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/kernel_stat.h>
......@@ -30,10 +34,8 @@ struct ipi_msg_flush_tb_struct ipi_msg_flush_tb;
struct cpuinfo_alpha cpu_data[NR_CPUS];
/* Processor holding kernel spinlock */
klock_info_t klock_info = { KLOCK_CLEAR, 0 };
spinlock_t ticker_lock = SPIN_LOCK_UNLOCKED;
spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED;
unsigned int boot_cpu_id = 0;
static int smp_activated = 0;
......@@ -63,11 +65,8 @@ volatile int smp_processors_ready = 0;
volatile int cpu_number_map[NR_CPUS];
volatile int cpu_logical_map[NR_CPUS];
extern int cpu_idle(void *unused);
extern void calibrate_delay(void);
extern struct hwrpb_struct *hwrpb;
extern struct thread_struct * original_pcb_ptr;
extern void __start_cpu(unsigned long);
static void smp_setup_percpu_timer(void);
static void secondary_cpu_start(int, struct task_struct *);
......@@ -170,7 +169,7 @@ asmlinkage int start_secondary(void *unused)
printk("start_secondary: commencing CPU %d current %p\n",
hard_smp_processor_id(), current);
#endif
return cpu_idle(NULL);
cpu_idle(NULL);
}
/*
......@@ -198,7 +197,6 @@ void smp_boot_cpus(void)
cpu_number_map[boot_cpu_id] = 0;
cpu_logical_map[0] = boot_cpu_id;
current->processor = boot_cpu_id; /* ??? */
klock_info.akp = boot_cpu_id;
smp_store_cpu_info(boot_cpu_id);
#ifdef NOT_YET
......@@ -739,9 +737,8 @@ send_ipi_message(long to_whom, enum ipi_message_type operation)
int smp_info(char *buffer)
{
return sprintf(buffer, "CPUs probed %d active %d map 0x%x AKP %d\n",
smp_num_probed, smp_num_cpus, cpu_present_map,
klock_info.akp);
return sprintf(buffer, "CPUs probed %d active %d map 0x%x\n",
smp_num_probed, smp_num_cpus, cpu_present_map);
}
/* wrapper for call from panic() */
......@@ -766,12 +763,6 @@ flush_tlb_all(void)
unsigned int to_whom = cpu_present_map ^ (1 << smp_processor_id());
int timeout = 10000;
#if 1
if (!kernel_lock_held()) {
printk("flush_tlb_all: kernel_flag %d (cpu %d akp %d)!\n",
klock_info.kernel_flag, smp_processor_id(), klock_info.akp);
}
#endif
ipi_msg_flush_tb.flush_tb_mask = to_whom;
send_ipi_message(to_whom, TLB_ALL);
tbia();
......@@ -794,12 +785,6 @@ flush_tlb_mm(struct mm_struct *mm)
unsigned int to_whom = cpu_present_map ^ (1 << smp_processor_id());
int timeout = 10000;
#if 1
if (!kernel_lock_held()) {
printk("flush_tlb_mm: kernel_flag %d (cpu %d akp %d)!\n",
klock_info.kernel_flag, smp_processor_id(), klock_info.akp);
}
#endif
ipi_msg_flush_tb.p.flush_mm = mm;
ipi_msg_flush_tb.flush_tb_mask = to_whom;
send_ipi_message(to_whom, TLB_MM);
......@@ -829,12 +814,6 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
struct mm_struct * mm = vma->vm_mm;
int timeout = 10000;
#if 1
if (!kernel_lock_held()) {
printk("flush_tlb_page: kernel_flag %d (cpu %d akp %d)!\n",
klock_info.kernel_flag, cpu, klock_info.akp);
}
#endif
ipi_msg_flush_tb.p.flush_vma = vma;
ipi_msg_flush_tb.flush_addr = addr;
ipi_msg_flush_tb.flush_tb_mask = to_whom;
......@@ -847,9 +826,9 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
while (ipi_msg_flush_tb.flush_tb_mask) {
if (--timeout < 0) {
printk("flush_tlb_page: STUCK on CPU %d [0x%x,0x%lx,%d,%d]\n",
printk("flush_tlb_page: STUCK on CPU %d [0x%x,0x%lx,%d]\n",
cpu, ipi_msg_flush_tb.flush_tb_mask, addr,
klock_info.akp, global_irq_holder);
global_irq_holder);
ipi_msg_flush_tb.flush_tb_mask = 0;
break;
}
......@@ -866,20 +845,10 @@ flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end)
#else
unsigned int to_whom;
int timeout;
unsigned long where;
__asm__("mov $26, %0" : "=r" (where));
timeout = 10000;
to_whom = cpu_present_map ^ (1 << smp_processor_id());
#if 1
if (!kernel_lock_held()) {
printk("flush_tlb_range: kernel_flag %d (cpu %d akp %d) @ 0x%lx\n",
klock_info.kernel_flag, smp_processor_id(), klock_info.akp,
where);
}
#endif
ipi_msg_flush_tb.p.flush_mm = mm;
ipi_msg_flush_tb.flush_tb_mask = to_whom;
send_ipi_message(to_whom, TLB_MM);
......@@ -896,68 +865,17 @@ flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end)
ipi_msg_flush_tb.flush_tb_mask = 0;
break;
}
udelay(100);
; /* Wait for all clear from other CPUs. */
udelay(100); /* Wait for all clear from other CPUs. */
}
#endif
}
#ifdef DEBUG_KERNEL_LOCK
void ___lock_kernel(klock_info_t *klip, int cpu, long ipl)
{
long regx;
int stuck_lock;
unsigned long inline_pc;
__asm__("mov $26, %0" : "=r" (inline_pc));
try_again:
stuck_lock = 1<<26;
__asm__ __volatile__(
"1: ldl_l %1,%0;"
" blbs %1,6f;"
" or %1,1,%1;"
" stl_c %1,%0;"
" beq %1,6f;"
"4: mb\n"
".section .text2,\"ax\"\n"
"6: mov %5,$16;"
" call_pal %4;"
"7: ldl %1,%0;"
" blt %2,4b # debug\n"
" subl %2,1,%2 # debug\n"
" blbs %1,7b;"
" bis $31,7,$16;"
" call_pal %4;"
" br 1b\n"
".previous"
: "=m,=m" (__dummy_lock(klip)), "=&r,=&r" (regx),
"=&r,=&r" (stuck_lock)
: "0,0" (__dummy_lock(klip)), "i,i" (PAL_swpipl),
"i,r" (ipl), "2,2" (stuck_lock)
: "$0", "$1", "$16", "$22", "$23", "$24", "$25", "memory");
if (stuck_lock < 0) {
printk("___kernel_lock stuck at %lx(%d) held %lx(%d)\n",
inline_pc, cpu, klip->pc, klip->cpu);
goto try_again;
} else {
klip->pc = inline_pc;
klip->cpu = cpu;
}
}
#endif
#ifdef DEBUG_SPINLOCK
#if DEBUG_SPINLOCK
void spin_lock(spinlock_t * lock)
{
long tmp;
long stuck;
unsigned long inline_pc;
__asm__("mov $26, %0" : "=r" (inline_pc));
void *inline_pc = __builtin_return_address(0);
try_again:
......@@ -987,30 +905,22 @@ void spin_lock(spinlock_t * lock)
: "2" (stuck));
if (stuck < 0) {
printk("spinlock stuck at %lx (cur=%lx, own=%lx)\n",
inline_pc,
#if 0
lock->previous, lock->task
#else
(unsigned long) current, lock->task
#endif
);
printk("spinlock stuck at %p (cur=%p, own=%p, prev=%p)\n",
inline_pc, current, lock->task, lock->previous);
goto try_again;
} else {
lock->previous = (unsigned long) inline_pc;
lock->task = (unsigned long) current;
lock->previous = inline_pc;
lock->task = current;
}
}
#endif /* DEBUG_SPINLOCK */
#ifdef DEBUG_RWLOCK
#if DEBUG_RWLOCK
void write_lock(rwlock_t * lock)
{
long regx, regy;
int stuck_lock, stuck_reader;
unsigned long inline_pc;
__asm__("mov $26, %0" : "=r" (inline_pc));
void *inline_pc = __builtin_return_address(0);
try_again:
......@@ -1018,24 +928,24 @@ void write_lock(rwlock_t * lock)
stuck_reader = 1<<26;
__asm__ __volatile__(
"1: ldl_l %1,%0;"
" blbs %1,6f;"
" or %1,1,%2;"
" stl_c %2,%0;"
" beq %2,6f;"
" blt %1,8f;"
"1: ldl_l %1,%0\n"
" blbs %1,6f\n"
" or %1,1,%2\n"
" stl_c %2,%0\n"
" beq %2,6f\n"
" blt %1,8f\n"
"4: mb\n"
".section .text2,\"ax\"\n"
"6: ldl %1,%0;"
"6: ldl %1,%0\n"
" blt %3,4b # debug\n"
" subl %3,1,%3 # debug\n"
" blbs %1,6b;"
" br 1b;"
"8: ldl %1,%0;"
" blbs %1,6b\n"
" br 1b\n"
"8: ldl %1,%0\n"
" blt %4,4b # debug\n"
" subl %4,1,%4 # debug\n"
" blt %1,8b;"
"9: br 4b\n"
" blt %1,8b\n"
" br 4b\n"
".previous"
: "=m" (__dummy_lock(lock)), "=&r" (regx), "=&r" (regy)
, "=&r" (stuck_lock), "=&r" (stuck_reader)
......@@ -1044,22 +954,20 @@ void write_lock(rwlock_t * lock)
);
if (stuck_lock < 0) {
printk("write_lock stuck at %lx\n", inline_pc);
printk("write_lock stuck at %p\n", inline_pc);
goto try_again;
}
if (stuck_reader < 0) {
printk("write_lock stuck on readers at %lx\n", inline_pc);
printk("write_lock stuck on readers at %p\n", inline_pc);
goto try_again;
}
}
void _read_lock(rwlock_t * lock)
void read_lock(rwlock_t * lock)
{
long regx;
int stuck_lock;
unsigned long inline_pc;
__asm__("mov $26, %0" : "=r" (inline_pc));
void *inline_pc = __builtin_return_address(0);
try_again:
......@@ -1084,7 +992,7 @@ void _read_lock(rwlock_t * lock)
);
if (stuck_lock < 0) {
printk("_read_lock stuck at %lx\n", inline_pc);
printk("read_lock stuck at %p\n", inline_pc);
goto try_again;
}
}
......
......@@ -75,9 +75,6 @@ alcor_device_interrupt(unsigned long vector, struct pt_regs *regs)
{
unsigned long pld;
unsigned int i;
unsigned long flags;
save_and_cli(flags);
/* Read the interrupt summary register of the GRU */
pld = (*(vuip)GRU_INT_REQ) & GRU_INT_REQ_BITS;
......@@ -95,7 +92,6 @@ alcor_device_interrupt(unsigned long vector, struct pt_regs *regs)
handle_irq(16 + i, 16 + i, regs);
}
}
restore_flags(flags);
}
static void
......
......@@ -72,9 +72,6 @@ cabriolet_device_interrupt(unsigned long v, struct pt_regs *r)
{
unsigned long pld;
unsigned int i;
unsigned long flags;
save_and_cli(flags);
/* Read the interrupt summary registers */
pld = inb(0x804) | (inb(0x805) << 8) | (inb(0x806) << 16);
......@@ -92,7 +89,6 @@ cabriolet_device_interrupt(unsigned long v, struct pt_regs *r)
handle_irq(16 + i, 16 + i, r);
}
}
restore_flags(flags);
}
static void
......
This diff is collapsed.
......@@ -52,9 +52,6 @@ eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs)
{
unsigned long pld;
unsigned int i;
unsigned long flags;
save_and_cli(flags);
/* Read the interrupt summary registers */
pld = inb(0x26) | (inb(0x27) << 8);
......@@ -72,12 +69,28 @@ eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs)
handle_irq(16 + i, 16 + i, regs);
}
}
restore_flags(flags);
}
static void __init
eb64p_init_irq(void)
{
#ifdef CONFIG_ALPHA_GENERIC
/*
* CABRIO SRM may not set variation correctly, so here we test
* the high word of the interrupt summary register for the RAZ
* bits, and hope that a true EB64+ would read all ones...
*/
if (inw(0x806) != 0xffff) {
extern struct alpha_machine_vector cabriolet_mv;
#if 1
printk("eb64p_init_irq: resetting for CABRIO\n");
#endif
alpha_mv = cabriolet_mv;
alpha_mv.init_irq();
return;
}
#endif /* GENERIC */
STANDARD_INIT_IRQ_PROLOG;
outb(alpha_irq_mask >> 16, 0x26);
......
......@@ -76,9 +76,7 @@ static void
jensen_device_interrupt(unsigned long vector, struct pt_regs * regs)
{
int irq, ack;
unsigned long flags;
__save_and_cli(flags);
ack = irq = (vector - 0x800) >> 4;
switch (vector) {
......@@ -102,7 +100,6 @@ jensen_device_interrupt(unsigned long vector, struct pt_regs * regs)
}
handle_irq(irq, ack, regs);
__restore_flags(flags);
}
static void
......@@ -131,6 +128,7 @@ struct alpha_machine_vector jensen_mv __initmv = {
BUS(jensen),
machine_check: jensen_machine_check,
max_dma_address: ALPHA_MAX_DMA_ADDRESS,
rtc_port: 0x170, rtc_addr: 0, rtc_bcd: 1,
nr_irqs: 16,
irq_probe_mask: _PROBE_MASK(16),
......
......@@ -52,9 +52,6 @@ miata_device_interrupt(unsigned long vector, struct pt_regs *regs)
{
unsigned long pld, tmp;
unsigned int i;
unsigned long flags;
save_and_cli(flags);
/* Read the interrupt summary register of PYXIS */
pld = *(vulp)PYXIS_INT_REQ;
......@@ -85,16 +82,13 @@ miata_device_interrupt(unsigned long vector, struct pt_regs *regs)
*(vulp)PYXIS_INT_REQ = 1UL << i; mb();
tmp = *(vulp)PYXIS_INT_REQ;
}
restore_flags(flags);
}
static void
miata_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
{
int irq, ack;
unsigned long flags;
__save_and_cli(flags);
ack = irq = (vector - 0x800) >> 4;
/*
......@@ -115,7 +109,6 @@ miata_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
ack = irq = irq + 8;
handle_irq(irq, ack, regs);
__restore_flags(flags);
}
static void __init
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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