diff options
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/config.in | 5 | ||||
-rw-r--r-- | arch/sparc/defconfig | 29 | ||||
-rw-r--r-- | arch/sparc/kernel/entry.S | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/pcic.c | 89 | ||||
-rw-r--r-- | arch/sparc/kernel/semaphore.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/signal.c | 5 | ||||
-rw-r--r-- | arch/sparc/kernel/sparc_ksyms.c | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sunos.c | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/time.c | 29 |
9 files changed, 57 insertions, 111 deletions
diff --git a/arch/sparc/config.in b/arch/sparc/config.in index dbe1d1fb2..cb27cf77b 100644 --- a/arch/sparc/config.in +++ b/arch/sparc/config.in @@ -1,4 +1,4 @@ -# $Id: config.in,v 1.106 2000/11/17 04:27:52 davem Exp $ +# $Id: config.in,v 1.107 2001/01/06 00:46:44 davem Exp $ # For a description of the syntax of this configuration file, # see Documentation/kbuild/config-language.txt. # @@ -29,6 +29,9 @@ define_bool CONFIG_VT_CONSOLE y bool 'Symmetric multi-processing support (does not work on sun4/sun4c)' CONFIG_SMP +# Identify this as a Sparc32 build +define_bool CONFIG_SPARC32 y + # Global things across all Sun machines. define_bool CONFIG_ISA n define_bool CONFIG_EISA n diff --git a/arch/sparc/defconfig b/arch/sparc/defconfig index 19c9feba0..20c0782e7 100644 --- a/arch/sparc/defconfig +++ b/arch/sparc/defconfig @@ -22,7 +22,10 @@ CONFIG_KMOD=y CONFIG_VT=y CONFIG_VT_CONSOLE=y # CONFIG_SMP is not set +CONFIG_SPARC32=y # CONFIG_ISA is not set +# CONFIG_EISA is not set +# CONFIG_MCA is not set # CONFIG_PCMCIA is not set CONFIG_SBUS=y CONFIG_SBUSCHAR=y @@ -64,6 +67,7 @@ CONFIG_PROM_CONSOLE=y # CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_CYBER2000 is not set CONFIG_FB_SBUS=y CONFIG_FB_CGSIX=y CONFIG_FB_BWTWO=y @@ -111,10 +115,18 @@ CONFIG_SUN_AURORA=m CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_NBD=m -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set +# CONFIG_LVM_PROC_FS is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y @@ -132,10 +144,8 @@ CONFIG_INET=y # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_PNP 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_INET_ECN is not set # CONFIG_SYN_COOKIES is not set CONFIG_IPV6=m @@ -148,7 +158,6 @@ CONFIG_IPV6=m # CONFIG_IPX=m # CONFIG_IPX_INTERN is not set -# CONFIG_SPX is not set CONFIG_ATALK=m CONFIG_DECNET=m CONFIG_DECNET_SIOCGIFCONF=y @@ -157,6 +166,7 @@ CONFIG_DECNET_SIOCGIFCONF=y # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -228,6 +238,7 @@ CONFIG_SCSI_FCAL=m CONFIG_NETDEVICES=y CONFIG_DUMMY=m CONFIG_BONDING=m +# CONFIG_TUN is not set CONFIG_PPP=m CONFIG_PPP_ASYNC=m CONFIG_PPP_SYNC_TTY=m @@ -302,6 +313,7 @@ CONFIG_NFSD=m CONFIG_SUNRPC=y CONFIG_LOCKD=y CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set # CONFIG_NCPFS_IOCTL_LOCKING is not set @@ -309,8 +321,6 @@ CONFIG_SMB_FS=m # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -320,6 +330,7 @@ CONFIG_SMB_FS=m # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y CONFIG_SUN_PARTITION=y +CONFIG_SMB_NLS=y CONFIG_NLS=y # diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index 70bbda891..47fcf6226 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S @@ -1,4 +1,4 @@ -/* $Id: entry.S,v 1.168 2001/01/01 01:46:15 davem Exp $ +/* $Id: entry.S,v 1.169 2001/01/25 21:47:20 davem Exp $ * arch/sparc/kernel/entry.S: Sparc trap low-level entry points. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -999,6 +999,7 @@ C_LABEL(invalid_segment_patch1): ld [%l4 + 0x18], %l3 inc %l3 ! sun4c_kernel_ring.num_entries++ + st %l3, [%l4 + 0x18] b 4f ld [%l6 + 0x08], %l5 diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c index c9ba85b27..9bc82a518 100644 --- a/arch/sparc/kernel/pcic.c +++ b/arch/sparc/kernel/pcic.c @@ -1,4 +1,4 @@ -/* $Id: pcic.c,v 1.20 2000/12/05 00:56:36 anton Exp $ +/* $Id: pcic.c,v 1.21 2001/01/18 00:23:00 davem Exp $ * pcic.c: Sparc/PCI controller support * * Copyright (C) 1998 V. Roganov and G. Raiko @@ -898,93 +898,6 @@ void pcic_nmi(unsigned int pend, struct pt_regs *regs) regs->npc += 4; } -/* - * XXX Gleb wrote me that he needs this for X server (only). - * Since we successfuly use XF86_FBDev, we do not need these anymore. - * - * Following code added to handle extra PCI-related system calls - */ -asmlinkage int sys_pciconfig_read(unsigned long bus, - unsigned long dfn, - unsigned long off, - unsigned long len, - unsigned char *buf) -{ - unsigned char ubyte; - unsigned short ushort; - unsigned int uint; - int err = 0; - - if(!suser()) - return -EPERM; - - switch(len) { - case 1: - pcibios_read_config_byte(bus, dfn, off, &ubyte); - put_user(ubyte, (unsigned char *)buf); - break; - case 2: - pcibios_read_config_word(bus, dfn, off, &ushort); - put_user(ushort, (unsigned short *)buf); - break; - case 4: - pcibios_read_config_dword(bus, dfn, off, &uint); - put_user(uint, (unsigned int *)buf); - break; - - default: - err = -EINVAL; - break; - }; - - return err; -} - -asmlinkage int sys_pciconfig_write(unsigned long bus, - unsigned long dfn, - unsigned long off, - unsigned long len, - unsigned char *buf) -{ - unsigned char ubyte; - unsigned short ushort; - unsigned int uint; - int err = 0; - - if(!suser()) - return -EPERM; - - switch(len) { - case 1: - err = get_user(ubyte, (unsigned char *)buf); - if(err) - break; - pcibios_write_config_byte(bus, dfn, off, ubyte); - break; - - case 2: - err = get_user(ushort, (unsigned short *)buf); - if(err) - break; - pcibios_write_config_byte(bus, dfn, off, ushort); - break; - - case 4: - err = get_user(uint, (unsigned int *)buf); - if(err) - break; - pcibios_write_config_byte(bus, dfn, off, uint); - break; - - default: - err = -EINVAL; - break; - - }; - - return err; -} - static inline unsigned long get_irqmask(int irq_nr) { return 1 << irq_nr; diff --git a/arch/sparc/kernel/semaphore.c b/arch/sparc/kernel/semaphore.c index c949717b4..259a0a71b 100644 --- a/arch/sparc/kernel/semaphore.c +++ b/arch/sparc/kernel/semaphore.c @@ -1,4 +1,4 @@ -/* $Id: semaphore.c,v 1.5 2000/12/29 10:35:05 anton Exp $ */ +/* $Id: semaphore.c,v 1.6 2001/01/05 04:40:07 davem Exp $ */ /* sparc32 semaphore implementation, based on i386 version */ diff --git a/arch/sparc/kernel/signal.c b/arch/sparc/kernel/signal.c index 6ac8c4b00..957ddc17c 100644 --- a/arch/sparc/kernel/signal.c +++ b/arch/sparc/kernel/signal.c @@ -1,4 +1,4 @@ -/* $Id: signal.c,v 1.107 2000/09/05 21:44:54 davem Exp $ +/* $Id: signal.c,v 1.108 2001/01/24 21:05:12 davem Exp $ * linux/arch/sparc/kernel/signal.c * * Copyright (C) 1991, 1992 Linus Torvalds @@ -28,9 +28,6 @@ #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) -asmlinkage int sys_wait4(pid_t pid, unsigned long *stat_addr, - int options, unsigned long *ru); - extern void fpsave(unsigned long *fpregs, unsigned long *fsr, void *fpqueue, unsigned long *fpqdepth); extern void fpload(unsigned long *fpregs, unsigned long *fsr); diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c index d9883654e..235d4b96e 100644 --- a/arch/sparc/kernel/sparc_ksyms.c +++ b/arch/sparc/kernel/sparc_ksyms.c @@ -1,4 +1,4 @@ -/* $Id: sparc_ksyms.c,v 1.105 2000/12/11 05:24:25 anton Exp $ +/* $Id: sparc_ksyms.c,v 1.106 2001/01/11 15:07:09 davem Exp $ * arch/sparc/kernel/ksyms.c: Sparc specific ksyms support. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -154,6 +154,7 @@ EXPORT_SYMBOL(__cpu_logical_map); #endif EXPORT_SYMBOL(udelay); +EXPORT_SYMBOL(mostek_lock); EXPORT_SYMBOL(mstk48t02_regs); #if CONFIG_SUN_AUXIO EXPORT_SYMBOL(auxio_register); diff --git a/arch/sparc/kernel/sys_sunos.c b/arch/sparc/kernel/sys_sunos.c index ac252f55a..24ae3829d 100644 --- a/arch/sparc/kernel/sys_sunos.c +++ b/arch/sparc/kernel/sys_sunos.c @@ -1,4 +1,4 @@ -/* $Id: sys_sunos.c,v 1.130 2000/08/12 13:25:41 davem Exp $ +/* $Id: sys_sunos.c,v 1.131 2001/01/24 21:05:12 davem Exp $ * sys_sunos.c: SunOS specific syscall compatibility support. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -834,7 +834,6 @@ asmlinkage int sunos_setpgrp(pid_t pid, pid_t pgid) } /* So stupid... */ -extern asmlinkage int sys_wait4(pid_t, unsigned int *, int, struct rusage *); asmlinkage int sunos_wait4(pid_t pid, unsigned int *stat_addr, int options, struct rusage *ru) { int ret; diff --git a/arch/sparc/kernel/time.c b/arch/sparc/kernel/time.c index 980981592..37113ef38 100644 --- a/arch/sparc/kernel/time.c +++ b/arch/sparc/kernel/time.c @@ -1,4 +1,4 @@ -/* $Id: time.c,v 1.57 2000/09/16 07:33:45 davem Exp $ +/* $Id: time.c,v 1.58 2001/01/11 15:07:09 davem Exp $ * linux/arch/sparc/kernel/time.c * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -44,6 +44,7 @@ extern rwlock_t xtime_lock; enum sparc_clock_type sp_clock_typ; +spinlock_t mostek_lock = SPIN_LOCK_UNLOCKED; unsigned long mstk48t02_regs = 0UL; static struct mostek48t08 *mstk48t08_regs = 0; static int set_rtc_mmss(unsigned long); @@ -158,12 +159,16 @@ static void __init kick_start_clock(void) prom_printf("CLOCK: Clock was stopped. Kick start "); + spin_lock_irq(&mostek_lock); + /* Turn on the kick start bit to start the oscillator. */ regs->creg |= MSTK_CREG_WRITE; regs->sec &= ~MSTK_STOP; regs->hour |= MSTK_KICK_START; regs->creg &= ~MSTK_CREG_WRITE; + spin_unlock_irq(&mostek_lock); + /* Delay to allow the clock oscillator to start. */ sec = MSTK_REG_SEC(regs); for (i = 0; i < 3; i++) { @@ -175,6 +180,8 @@ static void __init kick_start_clock(void) } prom_printf("\n"); + spin_lock_irq(&mostek_lock); + /* Turn off kick start and set a "valid" time and date. */ regs->creg |= MSTK_CREG_WRITE; regs->hour &= ~MSTK_KICK_START; @@ -187,12 +194,17 @@ static void __init kick_start_clock(void) MSTK_SET_REG_YEAR(regs,1996 - MSTK_YEAR_ZERO); regs->creg &= ~MSTK_CREG_WRITE; + spin_unlock_irq(&mostek_lock); + /* Ensure the kick start bit is off. If it isn't, turn it off. */ while (regs->hour & MSTK_KICK_START) { prom_printf("CLOCK: Kick start still on!\n"); + + spin_lock_irq(&mostek_lock); regs->creg |= MSTK_CREG_WRITE; regs->hour &= ~MSTK_KICK_START; regs->creg &= ~MSTK_CREG_WRITE; + spin_unlock_irq(&mostek_lock); } prom_printf("CLOCK: Kick start procedure successful.\n"); @@ -204,10 +216,12 @@ static __inline__ int has_low_battery(void) struct mostek48t02 *regs = (struct mostek48t02 *)mstk48t02_regs; unsigned char data1, data2; + spin_lock_irq(&mostek_lock); data1 = regs->eeprom[0]; /* Read some data. */ regs->eeprom[0] = ~data1; /* Write back the complement. */ data2 = regs->eeprom[0]; /* Read back the complement. */ regs->eeprom[0] = data1; /* Restore the original value. */ + spin_unlock_irq(&mostek_lock); return (data1 == data2); /* Was the write blocked? */ } @@ -376,6 +390,7 @@ void __init sbus_time_init(void) prom_printf("Something wrong, clock regs not mapped yet.\n"); prom_halt(); } + spin_lock_irq(&mostek_lock); mregs->creg |= MSTK_CREG_READ; sec = MSTK_REG_SEC(mregs); min = MSTK_REG_MIN(mregs); @@ -386,6 +401,7 @@ void __init sbus_time_init(void) xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_usec = 0; mregs->creg &= ~MSTK_CREG_READ; + spin_unlock_irq(&mostek_lock); #ifdef CONFIG_SUN4 } else if(idprom->id_machtype == (SM_SUN4 | SM_4_260) ) { /* initialise the intersil on sun4 */ @@ -520,6 +536,7 @@ static int set_rtc_mmss(unsigned long nowtime) { int real_seconds, real_minutes, mostek_minutes; struct mostek48t02 *regs = (struct mostek48t02 *)mstk48t02_regs; + unsigned long flags; #ifdef CONFIG_SUN4 struct intersil *iregs = intersil_clock; int temp; @@ -557,6 +574,8 @@ static int set_rtc_mmss(unsigned long nowtime) } #endif } + + spin_lock_irqsave(&mostek_lock, flags); /* Read the current RTC minutes. */ regs->creg |= MSTK_CREG_READ; mostek_minutes = MSTK_REG_MIN(regs); @@ -579,8 +598,10 @@ static int set_rtc_mmss(unsigned long nowtime) MSTK_SET_REG_SEC(regs,real_seconds); MSTK_SET_REG_MIN(regs,real_minutes); regs->creg &= ~MSTK_CREG_WRITE; - } else + spin_unlock_irqrestore(&mostek_lock, flags); + return 0; + } else { + spin_unlock_irqrestore(&mostek_lock, flags); return -1; - - return 0; + } } |