diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-05-07 02:55:41 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-05-07 02:55:41 +0000 |
commit | dcec8a13bf565e47942a1751a9cec21bec5648fe (patch) | |
tree | 548b69625b18cc2e88c3e68d0923be546c9ebb03 /arch/mips | |
parent | 2e0f55e79c49509b7ff70ff1a10e1e9e90a3dfd4 (diff) |
o Merge with Linux 2.1.99.
o Fix ancient bug in the ELF loader making ldd crash.
o Fix ancient bug in the keyboard code for SGI, SNI and Jazz.
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/config.in | 11 | ||||
-rw-r--r-- | arch/mips/defconfig | 2 | ||||
-rw-r--r-- | arch/mips/jazz/hw-access.c | 16 | ||||
-rw-r--r-- | arch/mips/kernel/irixelf.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/irq.c | 10 | ||||
-rw-r--r-- | arch/mips/kernel/pci.c | 53 | ||||
-rw-r--r-- | arch/mips/kernel/syscalls.h | 7 | ||||
-rw-r--r-- | arch/mips/lib/csum_partial_copy.S | 11 | ||||
-rw-r--r-- | arch/mips/lib/ide-std.c | 4 | ||||
-rw-r--r-- | arch/mips/sgi/kernel/indy_int.c | 10 | ||||
-rw-r--r-- | arch/mips/sgi/kernel/setup.c | 17 | ||||
-rw-r--r-- | arch/mips/sni/hw-access.c | 17 | ||||
-rw-r--r-- | arch/mips/sni/pci.c | 3 |
13 files changed, 82 insertions, 83 deletions
diff --git a/arch/mips/config.in b/arch/mips/config.in index 171170f3b..02a256200 100644 --- a/arch/mips/config.in +++ b/arch/mips/config.in @@ -183,17 +183,6 @@ if [ "$CONFIG_SGI" != "y" ]; then endmenu fi -# Conditionally compile in the Uniform CD-ROM driver -if [ "$CONFIG_BLK_DEV_IDECD" = "y" -o "$CONFIG_BLK_DEV_SR" = "y" -o "$CONFIG_SBPCD" = "y" -o "$CONFIG_MCD" = "y" -o "$CONFIG_CM206" = "y" -o "$CONFIG_CDU31A" = "y" ]; then - define_bool CONFIG_CDROM y -else - if [ "$CONFIG_BLK_DEV_IDECD" = "m" -o "$CONFIG_BLK_DEV_SR" = "m" -o "$CONFIG_SBPCD" = "m" -o "$CONFIG_MCD" = "m" -o "$CONFIG_CM206" = "m" -o "$CONFIG_CDU31A" = "m" ]; then - define_bool CONFIG_CDROM m - else - define_bool CONFIG_CDROM n - fi -fi - source fs/Config.in source fs/nls/Config.in diff --git a/arch/mips/defconfig b/arch/mips/defconfig index 8f4d81b1f..d7d10aa89 100644 --- a/arch/mips/defconfig +++ b/arch/mips/defconfig @@ -214,6 +214,7 @@ CONFIG_PCNET32=y # AX.25 network device drivers # # CONFIG_MKISS is not set +# CONFIG_6PACK is not set # CONFIG_BPQETHER is not set # CONFIG_DMASCC is not set # CONFIG_SCC is not set @@ -231,7 +232,6 @@ CONFIG_PCNET32=y # CD-ROM drivers (not for SCSI or IDE/ATAPI drives) # # CONFIG_CD_NO_IDESCSI is not set -CONFIG_CDROM=y # # Filesystems diff --git a/arch/mips/jazz/hw-access.c b/arch/mips/jazz/hw-access.c index c9c423a66..4d2caf21b 100644 --- a/arch/mips/jazz/hw-access.c +++ b/arch/mips/jazz/hw-access.c @@ -1,4 +1,4 @@ -/* +/* $Id: hw-access.c,v 1.7 1998/05/06 02:46:43 ralf Exp $ * Low-level hardware access stuff for Jazz family machines. * * This file is subject to the terms and conditions of the GNU General Public @@ -6,8 +6,6 @@ * for more details. * * Copyright (C) 1995, 1996, 1997 by Ralf Baechle - * - * $Id: hw-access.c,v 1.6 1998/03/04 08:29:09 ralf Exp $ */ #include <linux/delay.h> #include <linux/init.h> @@ -154,6 +152,8 @@ struct feature jazz_feature = { static volatile keyboard_hardware *jazz_kh = (keyboard_hardware *) JAZZ_KEYBOARD_ADDRESS; +#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */ + static unsigned char jazz_read_input(void) { return jazz_kh->data; @@ -161,11 +161,21 @@ static unsigned char jazz_read_input(void) static void jazz_write_output(unsigned char val) { + int status; + + do { + status = jazz_kh->command; + } while (status & KBD_STAT_IBF); jazz_kh->data = val; } static void jazz_write_command(unsigned char val) { + int status; + + do { + status = jazz_kh->command; + } while (status & KBD_STAT_IBF); jazz_kh->command = val; } diff --git a/arch/mips/kernel/irixelf.c b/arch/mips/kernel/irixelf.c index 619aaabaa..cf2ab9fca 100644 --- a/arch/mips/kernel/irixelf.c +++ b/arch/mips/kernel/irixelf.c @@ -725,6 +725,7 @@ static inline int do_load_irix_binary(struct linux_binprm * bprm, current->mm->end_data = 0; current->mm->end_code = 0; current->mm->mmap = NULL; + current->flags &= ~PF_FORKNOEXEC; elf_entry = (unsigned int) elf_ex.e_entry; /* Do this so that we can load the interpreter, if need be. We will @@ -775,8 +776,7 @@ static inline int do_load_irix_binary(struct linux_binprm * bprm, if (current->binfmt && current->binfmt->module) __MOD_INC_USE_COUNT(current->binfmt->module); - current->suid = current->euid = current->fsuid = bprm->e_uid; - current->sgid = current->egid = current->fsgid = bprm->e_gid; + compute_creds(bprm); current->flags &= ~PF_FORKNOEXEC; bprm->p = (unsigned long) create_irix_tables((char *)bprm->p, bprm->argc, bprm->envc, diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index 728af4cc9..9dcca6184 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c @@ -4,7 +4,7 @@ * Copyright (C) 1992 Linus Torvalds * Copyright (C) 1994, 1995, 1996, 1997 Ralf Baechle * - * $Id: irq.c,v 1.8 1998/03/17 22:07:35 ralf Exp $ + * $Id: irq.c,v 1.9 1998/03/22 23:27:12 ralf Exp $ */ #include <linux/errno.h> #include <linux/init.h> @@ -310,7 +310,15 @@ int probe_irq_off (unsigned long irqs) return i; } +int (*irq_cannonicalize)(int irq); + +static int 8259a_irq_cannonicalize(int irq) +{ + return ((irq == 2) ? 9 : irq); +} + __initfunc(void init_IRQ(void)) { + irq_cannonicalize = 8259a_irq_cannonicalize; irq_setup(); } diff --git a/arch/mips/kernel/pci.c b/arch/mips/kernel/pci.c index 6f7374fd2..71a57b73e 100644 --- a/arch/mips/kernel/pci.c +++ b/arch/mips/kernel/pci.c @@ -5,7 +5,6 @@ * * MIPS implementation of PCI BIOS services for PCI support. */ -#include <linux/bios32.h> #include <linux/config.h> #include <linux/init.h> #include <linux/kernel.h> @@ -36,53 +35,6 @@ int pcibios_present (void) } /* - * Given the vendor and device ids, find the n'th instance of that device - * in the system. - */ -int pcibios_find_device (unsigned short vendor, unsigned short device_id, - unsigned short index, unsigned char *bus, - unsigned char *devfn) -{ - unsigned int curr = 0; - struct pci_dev *dev; - - for (dev = pci_devices; dev; dev = dev->next) { - if (dev->vendor == vendor && dev->device == device_id) { - if (curr == index) { - *devfn = dev->devfn; - *bus = dev->bus->number; - return PCIBIOS_SUCCESSFUL; - } - ++curr; - } - } - return PCIBIOS_DEVICE_NOT_FOUND; -} - -/* - * Given the class, find the n'th instance of that device - * in the system. - */ -int pcibios_find_class (unsigned int class_code, unsigned short index, - unsigned char *bus, unsigned char *devfn) -{ - unsigned int curr = 0; - struct pci_dev *dev; - - for (dev = pci_devices; dev; dev = dev->next) { - if (dev->class == class_code) { - if (curr == index) { - *devfn = dev->devfn; - *bus = dev->bus->number; - return PCIBIOS_SUCCESSFUL; - } - ++curr; - } - } - return PCIBIOS_DEVICE_NOT_FOUND; -} - -/* * The functions below are machine specific and must be reimplented for * each PCI chipset configuration. We just run the hook to the machine * specific implementation. @@ -129,4 +81,9 @@ int pcibios_write_config_dword (unsigned char bus, unsigned char dev_fn, return pci_ops->pcibios_write_config_dword(bus, dev_fn, where, val); } +__initfunc(char *pcibios_setup(char *str)) +{ + return str; +} + #endif /* defined(CONFIG_PCI) */ diff --git a/arch/mips/kernel/syscalls.h b/arch/mips/kernel/syscalls.h index 33bec5be8..3a5c55540 100644 --- a/arch/mips/kernel/syscalls.h +++ b/arch/mips/kernel/syscalls.h @@ -7,7 +7,7 @@ * * Copyright (C) 1995, 1996 by Ralf Baechle * - * $Id: syscalls.h,v 1.10 1997/12/16 05:34:38 ralf Exp $ + * $Id: syscalls.h,v 1.11 1998/03/17 22:07:37 ralf Exp $ */ /* @@ -34,7 +34,7 @@ SYS(sys_chdir, 1) SYS(sys_time, 1) SYS(sys_mknod, 3) SYS(sys_chmod, 2) /* 4015 */ -SYS(sys_chown, 3) +SYS(sys_lchown, 3) SYS(sys_ni_syscall, 0) SYS(sys_stat, 2) SYS(sys_lseek, 3) @@ -220,4 +220,5 @@ SYS(sys_rt_sigqueueinfo, 3) SYS(sys_rt_sigsuspend, 2) SYS(sys_pread, 4) /* 4200 */ SYS(sys_pwrite, 4) -SYS(sys_lchown, 3) +SYS(sys_chown, 3) +SYS(sys_getcwd, 2) diff --git a/arch/mips/lib/csum_partial_copy.S b/arch/mips/lib/csum_partial_copy.S index 62ee35395..d5b281574 100644 --- a/arch/mips/lib/csum_partial_copy.S +++ b/arch/mips/lib/csum_partial_copy.S @@ -1,13 +1,13 @@ -/* +/* $Id: csum_partial_copy.S,v 1.5 1998/05/06 02:43:34 ralf Exp $ + * + * Unified implementation of csum_copy_partial, csum_copy_partial_from_user + * and csum_copy_partial_nocheck. + * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1998 Ralf Baechle - * - * $Id: csum_partial_copy.S,v 1.3 1998/05/01 06:54:07 ralf Exp $ - * - * Unified implementation of csum_copy_partial and csum_copy_partial_from_user. */ #include <asm/asm.h> #include <asm/offset.h> @@ -179,6 +179,7 @@ small_csumcpy: .align 5 LEAF(csum_partial_copy_from_user) addu t5, src, a2 # end address for fixup +EXPORT(csum_partial_copy_nocheck) EXPORT(csum_partial_copy) move sum, zero # clear computed sum move t7, zero # clear odd flag diff --git a/arch/mips/lib/ide-std.c b/arch/mips/lib/ide-std.c index 47b103c03..e6bf4dc5f 100644 --- a/arch/mips/lib/ide-std.c +++ b/arch/mips/lib/ide-std.c @@ -20,6 +20,8 @@ static int std_ide_default_irq(ide_ioreg_t base) case 0x170: return 15; case 0x1e8: return 11; case 0x168: return 10; + case 0x1e0: return 8; + case 0x160: return 12; default: return 0; } @@ -32,6 +34,8 @@ static ide_ioreg_t std_ide_default_io_base(int index) case 1: return 0x170; case 2: return 0x1e8; case 3: return 0x168; + case 4: return 0x1e0; + case 5: return 0x160; default: return 0; } diff --git a/arch/mips/sgi/kernel/indy_int.c b/arch/mips/sgi/kernel/indy_int.c index 950744328..65340f786 100644 --- a/arch/mips/sgi/kernel/indy_int.c +++ b/arch/mips/sgi/kernel/indy_int.c @@ -4,7 +4,7 @@ * * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) * - * $Id: indy_int.c,v 1.6 1998/03/17 22:07:41 ralf Exp $ + * $Id: indy_int.c,v 1.7 1998/04/05 11:23:58 ralf Exp $ */ #include <linux/config.h> #include <linux/init.h> @@ -417,8 +417,16 @@ void free_irq(unsigned int irq, void *dev_id) printk("Trying to free free IRQ%d\n",irq); } +int (*irq_cannonicalize)(int irq); + +static int indy_irq_cannonicalize(int irq) +{ + return irq; /* Sane hardware, sane code ... */ +} + __initfunc(void init_IRQ(void)) { + irq_cannonicalize = indy_irq_cannonicalize; irq_setup(); } diff --git a/arch/mips/sgi/kernel/setup.c b/arch/mips/sgi/kernel/setup.c index 6b2c1846e..5107edb6f 100644 --- a/arch/mips/sgi/kernel/setup.c +++ b/arch/mips/sgi/kernel/setup.c @@ -1,9 +1,8 @@ -/* +/* $Id: setup.c,v 1.8 1998/05/06 02:46:46 ralf Exp $ + * * setup.c: SGI specific setup, including init of the feature struct. * * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) - * - * $Id: setup.c,v 1.7 1998/03/04 08:47:27 ralf Exp $ */ #include <linux/init.h> #include <linux/kernel.h> @@ -31,6 +30,8 @@ struct feature sgi_feature = { static volatile struct hpc_keyb *sgi_kh = (struct hpc_keyb *) (KSEG1 + 0x1fbd9800 + 64); +#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */ + static unsigned char sgi_read_input(void) { return sgi_kh->data; @@ -38,11 +39,21 @@ static unsigned char sgi_read_input(void) static void sgi_write_output(unsigned char val) { + int status; + + do { + status = sgi_kh->command; + } while (status & KBD_STAT_IBF); sgi_kh->data = val; } static void sgi_write_command(unsigned char val) { + int status; + + do { + status = sgi_kh->command; + } while (status & KBD_STAT_IBF); sgi_kh->command = val; } diff --git a/arch/mips/sni/hw-access.c b/arch/mips/sni/hw-access.c index 744518971..b32e7dcce 100644 --- a/arch/mips/sni/hw-access.c +++ b/arch/mips/sni/hw-access.c @@ -1,4 +1,5 @@ -/* +/* $Id: hw-access.c,v 1.5 1998/05/06 02:46:46 ralf Exp $ + * * Low-level hardware access stuff for SNI RM200 PCI * * This file is subject to the terms and conditions of the GNU General Public @@ -6,8 +7,6 @@ * for more details. * * Copyright (C) 1996, 1997, 1998 by Ralf Baechle - * - * $Id: hw-access.c,v 1.3 1997/12/01 17:57:39 ralf Exp $ */ #include <linux/delay.h> #include <linux/init.h> @@ -163,6 +162,8 @@ struct feature sni_rm200_pci_feature = { rtc_write_data }; +#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */ + static unsigned char sni_read_input(void) { return inb(KBD_DATA_REG); @@ -170,11 +171,21 @@ static unsigned char sni_read_input(void) static void sni_write_output(unsigned char val) { + int status; + + do { + status = inb(KBD_CNTL_REG); + } while (status & KBD_STAT_IBF); outb(val, KBD_DATA_REG); } static void sni_write_command(unsigned char val) { + int status; + + do { + status = inb(KBD_CNTL_REG); + } while (status & KBD_STAT_IBF); outb(val, KBD_CNTL_REG); } diff --git a/arch/mips/sni/pci.c b/arch/mips/sni/pci.c index e2255b127..0e497450a 100644 --- a/arch/mips/sni/pci.c +++ b/arch/mips/sni/pci.c @@ -5,10 +5,9 @@ * * SNI specific PCI support for RM200/RM300. * - * $Id: pci.c,v 1.3 1998/03/04 08:47:29 ralf Exp $ + * $Id: pci.c,v 1.5 1998/05/04 01:15:23 ralf Exp $ */ #include <linux/config.h> -#include <linux/bios32.h> #include <linux/pci.h> #include <linux/types.h> #include <asm/byteorder.h> |