Commit e945e849 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  sparc: video drivers: add facility level
  sparc: tcx.c make tcx_init and tcx_exit static
  sparc: ffb.c make ffb_init and ffb_exit static
  sparc: cg14.c make cg14_init and cg15_exit static
  sparc: bw2.c fix bw2_exit
  sparc64: Fix accidental syscall restart on child return from clone/fork/vfork.
  sparc64: Clean up handling of pt_regs trap type encoding.
  sparc: Remove old style signal frame support.
  sparc64: Kill bogus RT_ALIGNEDSZ macro from signal.c
  sparc: sunzilog.c remove unused argument
  sparc: fix drivers/video/tcx.c warning
  sparc64: Kill unused local ISA bus layer.
  input: Rewrite sparcspkr device probing.
  sparc64: Do not ignore 'pmu' device ranges.
  sparc64: Kill ISA_FLOPPY_WORKS code.
  sparc64: Kill CONFIG_SPARC32_COMPAT
  sparc64: Cleanups and corrections for arch/sparc64/Kconfig
  sparc64: Fix wedged irq regression.
parents 77a50df2 194f1a68
...@@ -357,8 +357,6 @@ void flush_thread(void) ...@@ -357,8 +357,6 @@ void flush_thread(void)
{ {
current_thread_info()->w_saved = 0; current_thread_info()->w_saved = 0;
/* No new signal delivery by default */
current->thread.new_signal = 0;
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
if(last_task_used_math == current) { if(last_task_used_math == current) {
#else #else
......
This diff is collapsed.
/* $Id: sys_sparc.c,v 1.70 2001/04/14 01:12:02 davem Exp $ /* linux/arch/sparc/kernel/sys_sparc.c
* linux/arch/sparc/kernel/sys_sparc.c
* *
* This file contains various random system calls that * This file contains various random system calls that
* have a non-standard calling sequence on the Linux/sparc * have a non-standard calling sequence on the Linux/sparc
...@@ -395,10 +394,8 @@ sparc_sigaction (int sig, const struct old_sigaction __user *act, ...@@ -395,10 +394,8 @@ sparc_sigaction (int sig, const struct old_sigaction __user *act,
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;
if (sig < 0) { WARN_ON_ONCE(sig >= 0);
current->thread.new_signal = 1; sig = -sig;
sig = -sig;
}
if (act) { if (act) {
unsigned long mask; unsigned long mask;
...@@ -446,11 +443,6 @@ sys_rt_sigaction(int sig, ...@@ -446,11 +443,6 @@ sys_rt_sigaction(int sig,
if (sigsetsize != sizeof(sigset_t)) if (sigsetsize != sizeof(sigset_t))
return -EINVAL; return -EINVAL;
/* All tasks which use RT signals (effectively) use
* new style signals.
*/
current->thread.new_signal = 1;
if (act) { if (act) {
new_ka.ka_restorer = restorer; new_ka.ka_restorer = restorer;
if (copy_from_user(&new_ka.sa, act, sizeof(*act))) if (copy_from_user(&new_ka.sa, act, sizeof(*act)))
......
# $Id: config.in,v 1.158 2002/01/24 22:14:44 davem Exp $ # sparc64 configuration
# For a description of the syntax of this configuration file, mainmenu "Linux Kernel Configuration for 64-bit SPARC"
# see the Configure script.
#
mainmenu "Linux/UltraSPARC Kernel Configuration"
config SPARC config SPARC
bool bool
...@@ -17,12 +13,6 @@ config SPARC64 ...@@ -17,12 +13,6 @@ config SPARC64
default y default y
select HAVE_IDE select HAVE_IDE
select HAVE_LMB select HAVE_LMB
help
SPARC is a family of RISC microprocessors designed and marketed by
Sun Microsystems, incorporated. This port covers the newer 64-bit
UltraSPARC. The UltraLinux project maintains both the SPARC32 and
SPARC64 ports; its web page is available at
<http://www.ultralinux.org/>.
config GENERIC_TIME config GENERIC_TIME
bool bool
...@@ -97,7 +87,7 @@ config SPARC64_PAGE_SIZE_8KB ...@@ -97,7 +87,7 @@ config SPARC64_PAGE_SIZE_8KB
help help
This lets you select the page size of the kernel. This lets you select the page size of the kernel.
8KB and 64KB work quite well, since Sparc ELF sections 8KB and 64KB work quite well, since SPARC ELF sections
provide for up to 64KB alignment. provide for up to 64KB alignment.
Therefore, 512KB and 4MB are for expert hackers only. Therefore, 512KB and 4MB are for expert hackers only.
...@@ -138,7 +128,7 @@ config HOTPLUG_CPU ...@@ -138,7 +128,7 @@ config HOTPLUG_CPU
bool "Support for hot-pluggable CPUs" bool "Support for hot-pluggable CPUs"
depends on SMP depends on SMP
select HOTPLUG select HOTPLUG
---help--- help
Say Y here to experiment with turning CPUs off and on. CPUs Say Y here to experiment with turning CPUs off and on. CPUs
can be controlled through /sys/devices/system/cpu/cpu#. can be controlled through /sys/devices/system/cpu/cpu#.
Say N if you want to disable CPU hotplug. Say N if you want to disable CPU hotplug.
...@@ -155,23 +145,16 @@ source "kernel/time/Kconfig" ...@@ -155,23 +145,16 @@ source "kernel/time/Kconfig"
config SMP config SMP
bool "Symmetric multi-processing support" bool "Symmetric multi-processing support"
---help--- help
This enables support for systems with more than one CPU. If you have This enables support for systems with more than one CPU. If you have
a system with only one CPU, say N. If you have a system with more than a system with only one CPU, say N. If you have a system with more than
one CPU, say Y. one CPU, say Y.
If you say N here, the kernel will run on single and multiprocessor If you say N here, the kernel will run on single and multiprocessor
machines, but will use only one CPU of a multiprocessor machine. If machines, but will use only one CPU of a multiprocessor machine. If
you say Y here, the kernel will run on many, but not all, you say Y here, the kernel will run on single-processor machines.
singleprocessor machines. On a singleprocessor machine, the kernel On a single-processor machine, the kernel will run faster if you say
will run faster if you say N here. N here.
People using multiprocessor machines who say Y here should also say
Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
Management" code will be disabled if you say Y here.
See also <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO
available at <http://www.tldp.org/docs.html#howto>.
If you don't know what to do here, say N. If you don't know what to do here, say N.
...@@ -284,50 +267,19 @@ source "mm/Kconfig" ...@@ -284,50 +267,19 @@ source "mm/Kconfig"
config ISA config ISA
bool bool
help
Find out whether you have ISA slots on your motherboard. ISA is the
name of a bus system, i.e. the way the CPU talks to the other stuff
inside your box. Other bus systems are PCI, EISA, MicroChannel
(MCA) or VESA. ISA is an older system, now being displaced by PCI;
newer boards don't support it. If you have ISA, say Y, otherwise N.
config ISAPNP config ISAPNP
bool bool
help
Say Y here if you would like support for ISA Plug and Play devices.
Some information is in <file:Documentation/isapnp.txt>.
To compile this driver as a module, choose M here: the
module will be called isapnp.
If unsure, say Y.
config EISA config EISA
bool bool
---help---
The Extended Industry Standard Architecture (EISA) bus was
developed as an open alternative to the IBM MicroChannel bus.
The EISA bus provided some of the features of the IBM MicroChannel
bus while maintaining backward compatibility with cards made for
the older ISA bus. The EISA bus saw limited use between 1988 and
1995 when it was made obsolete by the PCI bus.
Say Y here if you are building a kernel for an EISA-based machine.
Otherwise, say N.
config MCA config MCA
bool bool
help
MicroChannel Architecture is found in some IBM PS/2 machines and
laptops. It is a bus system similar to PCI or ISA. See
<file:Documentation/mca.txt> (and especially the web page given
there) before attempting to build an MCA bus kernel.
config PCMCIA config PCMCIA
tristate tristate
---help--- help
Say Y here if you want to attach PCMCIA- or PC-cards to your Linux Say Y here if you want to attach PCMCIA- or PC-cards to your Linux
computer. These are credit-card size devices such as network cards, computer. These are credit-card size devices such as network cards,
modems or hard drives often used with laptops computers. There are modems or hard drives often used with laptops computers. There are
...@@ -369,10 +321,10 @@ config PCI ...@@ -369,10 +321,10 @@ config PCI
bool "PCI support" bool "PCI support"
select ARCH_SUPPORTS_MSI select ARCH_SUPPORTS_MSI
help help
Find out whether you have a PCI motherboard. PCI is the name of a Find out whether your system includes a PCI bus. PCI is the name of
bus system, i.e. the way the CPU talks to the other stuff inside a bus system, i.e. the way the CPU talks to the other stuff inside
your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or your box. If you say Y here, the kernel will include drivers and
VESA. If you have PCI, say Y, otherwise N. infrastructure code to support PCI bus devices.
config PCI_DOMAINS config PCI_DOMAINS
def_bool PCI def_bool PCI
...@@ -396,15 +348,8 @@ menu "Executable file formats" ...@@ -396,15 +348,8 @@ menu "Executable file formats"
source "fs/Kconfig.binfmt" source "fs/Kconfig.binfmt"
config SPARC32_COMPAT
bool "Kernel support for Linux/Sparc 32bit binary compatibility"
help
This allows you to run 32-bit binaries on your Ultra.
Everybody wants this; say Y.
config COMPAT config COMPAT
bool bool
depends on SPARC32_COMPAT
default y default y
select COMPAT_BINFMT_ELF select COMPAT_BINFMT_ELF
...@@ -421,8 +366,8 @@ config SCHED_SMT ...@@ -421,8 +366,8 @@ config SCHED_SMT
default y default y
help help
SMT scheduler support improves the CPU scheduler's decision making SMT scheduler support improves the CPU scheduler's decision making
when dealing with UltraSPARC cpus at a cost of slightly increased when dealing with SPARC cpus at a cost of slightly increased overhead
overhead in some places. If unsure say N here. in some places. If unsure say N here.
config SCHED_MC config SCHED_MC
bool "Multi-core scheduler support" bool "Multi-core scheduler support"
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.25-numa # Linux kernel version: 2.6.25
# Wed Apr 23 04:49:08 2008 # Sat Apr 26 03:11:06 2008
# #
CONFIG_SPARC=y CONFIG_SPARC=y
CONFIG_SPARC64=y CONFIG_SPARC64=y
...@@ -152,7 +152,9 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y ...@@ -152,7 +152,9 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_HUGETLB_PAGE_SIZE_4MB=y CONFIG_HUGETLB_PAGE_SIZE_4MB=y
# CONFIG_HUGETLB_PAGE_SIZE_512K is not set # CONFIG_HUGETLB_PAGE_SIZE_512K is not set
# CONFIG_HUGETLB_PAGE_SIZE_64K is not set # CONFIG_HUGETLB_PAGE_SIZE_64K is not set
# CONFIG_NUMA is not set CONFIG_NUMA=y
CONFIG_NODES_SHIFT=4
CONFIG_NODES_SPAN_OTHER_NODES=y
CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_ARCH_POPULATES_NODE_MAP=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y
...@@ -162,12 +164,14 @@ CONFIG_SELECT_MEMORY_MODEL=y ...@@ -162,12 +164,14 @@ CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set # CONFIG_DISCONTIGMEM_MANUAL is not set
CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y CONFIG_SPARSEMEM=y
CONFIG_NEED_MULTIPLE_NODES=y
CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_HAVE_MEMORY_PRESENT=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MIGRATION=y
CONFIG_RESOURCES_64BIT=y CONFIG_RESOURCES_64BIT=y
CONFIG_ZONE_DMA_FLAG=0 CONFIG_ZONE_DMA_FLAG=0
CONFIG_NR_QUICK=1 CONFIG_NR_QUICK=1
...@@ -191,7 +195,6 @@ CONFIG_SUN_OPENPROMFS=m ...@@ -191,7 +195,6 @@ CONFIG_SUN_OPENPROMFS=m
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
CONFIG_SPARC32_COMPAT=y
CONFIG_COMPAT=y CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y CONFIG_SYSVIPC_COMPAT=y
CONFIG_SCHED_SMT=y CONFIG_SCHED_SMT=y
...@@ -746,13 +749,7 @@ CONFIG_DEVPORT=y ...@@ -746,13 +749,7 @@ CONFIG_DEVPORT=y
CONFIG_I2C=y CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set # CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
#
CONFIG_I2C_ALGOBIT=y CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set
# #
# I2C Hardware Bus support # I2C Hardware Bus support
...@@ -780,6 +777,7 @@ CONFIG_I2C_ALGOBIT=y ...@@ -780,6 +777,7 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_VIA is not set # CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set # CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_VOODOO3 is not set # CONFIG_I2C_VOODOO3 is not set
# CONFIG_I2C_PCA_PLATFORM is not set
# #
# Miscellaneous I2C Chip support # Miscellaneous I2C Chip support
...@@ -1026,6 +1024,7 @@ CONFIG_SND_ALI5451=m ...@@ -1026,6 +1024,7 @@ CONFIG_SND_ALI5451=m
# CONFIG_SND_AU8810 is not set # CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set # CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set # CONFIG_SND_AU8830 is not set
# CONFIG_SND_AW2 is not set
# CONFIG_SND_AZT3328 is not set # CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set # CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set # CONFIG_SND_CA0106 is not set
...@@ -1096,10 +1095,6 @@ CONFIG_SND_SUN_CS4231=m ...@@ -1096,10 +1095,6 @@ CONFIG_SND_SUN_CS4231=m
# #
# CONFIG_SND_SOC is not set # CONFIG_SND_SOC is not set
#
# SoC Audio support for SuperH
#
# #
# ALSA SoC audio for Freescale SOCs # ALSA SoC audio for Freescale SOCs
# #
......
...@@ -15,17 +15,17 @@ obj-y := process.o setup.o cpu.o idprom.o \ ...@@ -15,17 +15,17 @@ obj-y := process.o setup.o cpu.o idprom.o \
visemul.o prom.o of_device.o hvapi.o sstate.o mdesc.o visemul.o prom.o of_device.o hvapi.o sstate.o mdesc.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_PCI) += ebus.o isa.o pci_common.o \ obj-$(CONFIG_PCI) += ebus.o pci_common.o \
pci_psycho.o pci_sabre.o pci_schizo.o \ pci_psycho.o pci_sabre.o pci_schizo.o \
pci_sun4v.o pci_sun4v_asm.o pci_fire.o pci_sun4v.o pci_sun4v_asm.o pci_fire.o
obj-$(CONFIG_PCI_MSI) += pci_msi.o obj-$(CONFIG_PCI_MSI) += pci_msi.o
obj-$(CONFIG_SMP) += smp.o trampoline.o hvtramp.o obj-$(CONFIG_SMP) += smp.o trampoline.o hvtramp.o
obj-$(CONFIG_SPARC32_COMPAT) += sys32.o sys_sparc32.o signal32.o obj-$(CONFIG_COMPAT) += sys32.o sys_sparc32.o signal32.o
obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_MODULES) += module.o
obj-$(CONFIG_US3_FREQ) += us3_cpufreq.o obj-$(CONFIG_US3_FREQ) += us3_cpufreq.o
obj-$(CONFIG_US2E_FREQ) += us2e_cpufreq.o obj-$(CONFIG_US2E_FREQ) += us2e_cpufreq.o
obj-$(CONFIG_KPROBES) += kprobes.o obj-$(CONFIG_KPROBES) += kprobes.o
obj-$(CONFIG_SUN_LDOMS) += ldc.o vio.o viohs.o ds.o obj-$(CONFIG_SUN_LDOMS) += ldc.o vio.o viohs.o ds.o
obj-$(CONFIG_AUDIT) += audit.o obj-$(CONFIG_AUDIT) += audit.o
obj-$(CONFIG_AUDIT)$(CONFIG_SPARC32_COMPAT) += compat_audit.o obj-$(CONFIG_AUDIT)$(CONFIG_COMPAT) += compat_audit.o
obj-y += $(obj-yy) obj-y += $(obj-yy)
...@@ -30,7 +30,7 @@ static unsigned signal_class[] = { ...@@ -30,7 +30,7 @@ static unsigned signal_class[] = {
int audit_classify_arch(int arch) int audit_classify_arch(int arch)
{ {
#ifdef CONFIG_SPARC32_COMPAT #ifdef CONFIG_COMPAT
if (arch == AUDIT_ARCH_SPARC) if (arch == AUDIT_ARCH_SPARC)
return 1; return 1;
#endif #endif
...@@ -39,7 +39,7 @@ int audit_classify_arch(int arch) ...@@ -39,7 +39,7 @@ int audit_classify_arch(int arch)
int audit_classify_syscall(int abi, unsigned syscall) int audit_classify_syscall(int abi, unsigned syscall)
{ {
#ifdef CONFIG_SPARC32_COMPAT #ifdef CONFIG_COMPAT
extern int sparc32_classify_syscall(unsigned); extern int sparc32_classify_syscall(unsigned);
if (abi == AUDIT_ARCH_SPARC) if (abi == AUDIT_ARCH_SPARC)
return sparc32_classify_syscall(syscall); return sparc32_classify_syscall(syscall);
...@@ -60,7 +60,7 @@ int audit_classify_syscall(int abi, unsigned syscall) ...@@ -60,7 +60,7 @@ int audit_classify_syscall(int abi, unsigned syscall)
static int __init audit_classes_init(void) static int __init audit_classes_init(void)
{ {
#ifdef CONFIG_SPARC32_COMPAT #ifdef CONFIG_COMPAT
extern __u32 sparc32_dir_class[]; extern __u32 sparc32_dir_class[];
extern __u32 sparc32_write_class[]; extern __u32 sparc32_write_class[];
extern __u32 sparc32_read_class[]; extern __u32 sparc32_read_class[];
......
/* irq.c: UltraSparc IRQ handling/init/registry. /* irq.c: UltraSparc IRQ handling/init/registry.
* *
* Copyright (C) 1997, 2007 David S. Miller (davem@davemloft.net) * Copyright (C) 1997, 2007, 2008 David S. Miller (davem@davemloft.net)
* Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be)
* Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz) * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
*/ */
...@@ -308,6 +308,7 @@ static void sun4u_irq_enable(unsigned int virt_irq) ...@@ -308,6 +308,7 @@ static void sun4u_irq_enable(unsigned int virt_irq)
IMAP_AID_SAFARI | IMAP_NID_SAFARI); IMAP_AID_SAFARI | IMAP_NID_SAFARI);
val |= tid | IMAP_VALID; val |= tid | IMAP_VALID;
upa_writeq(val, imap); upa_writeq(val, imap);
upa_writeq(ICLR_IDLE, data->iclr);
} }
} }
......
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <asm/oplib.h>
#include <asm/prom.h>
#include <asm/of_device.h>
#include <asm/isa.h>
struct sparc_isa_bridge *isa_chain;
static void __init fatal_err(const char *reason)
{
prom_printf("ISA: fatal error, %s.\n", reason);
}
static void __init report_dev(struct sparc_isa_device *isa_dev, int child)
{
if (child)
printk(" (%s)", isa_dev->prom_node->name);
else
printk(" [%s", isa_dev->prom_node->name);
}
static void __init isa_dev_get_resource(struct sparc_isa_device *isa_dev)
{
struct of_device *op = of_find_device_by_node(isa_dev->prom_node);
memcpy(&isa_dev->resource, &op->resource[0], sizeof(struct resource));
}
static void __init isa_dev_get_irq(struct sparc_isa_device *isa_dev)
{
struct of_device *op = of_find_device_by_node(isa_dev->prom_node);
if (!op || !op->num_irqs) {
isa_dev->irq = PCI_IRQ_NONE;
} else {
isa_dev->irq = op->irqs[0];
}
}
static void __init isa_fill_children(struct sparc_isa_device *parent_isa_dev)
{
struct device_node *dp = parent_isa_dev->prom_node->child;
if (!dp)
return;
printk(" ->");
while (dp) {
struct sparc_isa_device *isa_dev;
isa_dev = kzalloc(sizeof(*isa_dev), GFP_KERNEL);
if (!isa_dev) {
fatal_err("cannot allocate child isa_dev");
prom_halt();
}
/* Link it in to parent. */
isa_dev->next = parent_isa_dev->child;
parent_isa_dev->child = isa_dev;
isa_dev->bus = parent_isa_dev->bus;
isa_dev->prom_node = dp;
isa_dev_get_resource(isa_dev);
isa_dev_get_irq(isa_dev);
report_dev(isa_dev, 1);
dp = dp->sibling;
}
}
static void __init isa_fill_devices(struct sparc_isa_bridge *isa_br)
{
struct device_node *dp = isa_br->prom_node->child;
while (dp) {
struct sparc_isa_device *isa_dev;
struct dev_archdata *sd;
isa_dev = kzalloc(sizeof(*isa_dev), GFP_KERNEL);
if (!isa_dev) {
printk(KERN_DEBUG "ISA: cannot allocate isa_dev");
return;
}
sd = &isa_dev->ofdev.dev.archdata;
sd->prom_node = dp;
sd->op = &isa_dev->ofdev;
sd->iommu = isa_br->ofdev.dev.parent->archdata.iommu;
sd->stc = isa_br->ofdev.dev.parent->archdata.stc;
sd->numa_node = isa_br->ofdev.dev.parent->archdata.numa_node;
isa_dev->ofdev.node = dp;
isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev;
isa_dev->ofdev.dev.bus = &isa_bus_type;
sprintf(isa_dev->ofdev.dev.bus_id, "isa[%08x]", dp->node);
/* Register with core */
if (of_device_register(&isa_dev->ofdev) != 0) {
printk(KERN_DEBUG "isa: device registration error for %s!\n",
dp->path_component_name);
kfree(isa_dev);
goto next_sibling;
}
/* Link it in. */
isa_dev->next = NULL;
if (isa_br->devices == NULL) {
isa_br->devices = isa_dev;
} else {
struct sparc_isa_device *tmp = isa_br->devices;
while (tmp->next)
tmp = tmp->next;
tmp->next = isa_dev;
}
isa_dev->bus = isa_br;
isa_dev->prom_node = dp;
isa_dev_get_resource(isa_dev);
isa_dev_get_irq(isa_dev);
report_dev(isa_dev, 0);
isa_fill_children(isa_dev);
printk("]");
next_sibling:
dp = dp->sibling;
}
}
void __init isa_init(void)
{
struct pci_dev *pdev;
unsigned short vendor, device;
int index = 0;
vendor = PCI_VENDOR_ID_AL;
device = PCI_DEVICE_ID_AL_M1533;
pdev = NULL;
while ((pdev = pci_get_device(vendor, device, pdev)) != NULL) {
struct sparc_isa_bridge *isa_br;
struct device_node *dp;
dp = pci_device_to_OF_node(pdev);
isa_br = kzalloc(sizeof(*isa_br), GFP_KERNEL);
if (!isa_br) {
printk(KERN_DEBUG "isa: cannot allocate sparc_isa_bridge");
pci_dev_put(pdev);
return;
}
isa_br->ofdev.node = dp;
isa_br->ofdev.dev.parent = &pdev->dev;
isa_br->ofdev.dev.bus = &isa_bus_type;
sprintf(isa_br->ofdev.dev.bus_id, "isa%d", index);
/* Register with core */
if (of_device_register(&isa_br->ofdev) != 0) {
printk(KERN_DEBUG "isa: device registration error for %s!\n",
dp->path_component_name);
kfree(isa_br);
pci_dev_put(pdev);
return;
}
/* Link it in. */
isa_br->next = isa_chain;
isa_chain = isa_br;
isa_br->self = pdev;
isa_br->index = index++;
isa_br->prom_node = dp;
printk("isa%d:", isa_br->index);
isa_fill_devices(isa_br);
printk("\n");
}
}
...@@ -412,12 +412,6 @@ static int __init build_one_resource(struct device_node *parent, ...@@ -412,12 +412,6 @@ static int __init build_one_resource(struct device_node *parent,
static int __init use_1to1_mapping(struct device_node *pp) static int __init use_1to1_mapping(struct device_node *pp)
{ {
/* If this is on the PMU bus, don't try to translate it even
* if a ranges property exists.
*/
if (!strcmp(pp->name, "pmu"))
return 1;
/* If we have a ranges property in the parent, use it. */ /* If we have a ranges property in the parent, use it. */
if (of_find_property(pp, "ranges", NULL) != NULL) if (of_find_property(pp, "ranges", NULL) != NULL)
return 0; return 0;
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/ebus.h> #include <asm/ebus.h>
#include <asm/isa.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/apb.h> #include <asm/apb.h>
...@@ -885,7 +884,6 @@ static int __init pcibios_init(void) ...@@ -885,7 +884,6 @@ static int __init pcibios_init(void)
pci_scan_each_controller_bus(); pci_scan_each_controller_bus();
isa_init();
ebus_init(); ebus_init();
power_init(); power_init();
......
/* $Id: process.c,v 1.131 2002/02/09 19:49:30 davem Exp $ /* arch/sparc64/kernel/process.c
* arch/sparc64/kernel/process.c
* *
* Copyright (C) 1995, 1996 David S. Miller (davem@caip.rutgers.edu) * Copyright (C) 1995, 1996 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be) * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be)
...@@ -368,9 +367,6 @@ void flush_thread(void) ...@@ -368,9 +367,6 @@ void flush_thread(void)
if (get_thread_current_ds() != ASI_AIUS) if (get_thread_current_ds() != ASI_AIUS)
set_fs(USER_DS); set_fs(USER_DS);
/* Init new signal delivery disposition. */
clear_thread_flag(TIF_NEWSIGNALS);
} }
/* It's a bit more tricky when 64-bit tasks are involved... */ /* It's a bit more tricky when 64-bit tasks are involved... */
...@@ -595,6 +591,12 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, ...@@ -595,6 +591,12 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
if (clone_flags & CLONE_SETTLS) if (clone_flags & CLONE_SETTLS)
t->kregs->u_regs[UREG_G7] = regs->u_regs[UREG_I3]; t->kregs->u_regs[UREG_G7] = regs->u_regs[UREG_I3];
/* We do not want to accidently trigger system call restart
* handling in the new thread. Therefore, clear out the trap
* type, which will make pt_regs_regs_is_syscall() return false.
*/
pt_regs_clear_trap_type(t->kregs);
return 0; return 0;
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*/ */
#ifdef CONFIG_SPARC32_COMPAT #ifdef CONFIG_COMPAT
#include <linux/compat.h> /* for compat_old_sigset_t */ #include <linux/compat.h> /* for compat_old_sigset_t */
#endif #endif
#include <linux/sched.h> #include <linux/sched.h>
...@@ -236,9 +236,6 @@ struct rt_signal_frame { ...@@ -236,9 +236,6 @@ struct rt_signal_frame {
__siginfo_fpu_t fpu_state; __siginfo_fpu_t fpu_state;
}; };
/* Align macros */
#define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame) + 7) & (~7)))
static long _sigpause_common(old_sigset_t set) static long _sigpause_common(old_sigset_t set)
{ {
set &= _BLOCKABLE; set &= _BLOCKABLE;
...@@ -400,7 +397,7 @@ setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, ...@@ -400,7 +397,7 @@ setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
synchronize_user_stack(); synchronize_user_stack();
save_and_clear_fpu(); save_and_clear_fpu();
sigframe_size = RT_ALIGNEDSZ; sigframe_size = sizeof(struct rt_signal_frame);
if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) if (!(current_thread_info()->fpsaved[0] & FPRS_FEF))
sigframe_size -= sizeof(__siginfo_fpu_t); sigframe_size -= sizeof(__siginfo_fpu_t);
...@@ -516,11 +513,10 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) ...@@ -516,11 +513,10 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
struct k_sigaction ka; struct k_sigaction ka;
sigset_t *oldset; sigset_t *oldset;
siginfo_t info; siginfo_t info;
int signr, tt; int signr;
tt = regs->magic & 0x1ff; if (pt_regs_is_syscall(regs)) {
if (tt == 0x110 || tt == 0x111 || tt == 0x16d) { pt_regs_clear_trap_type(regs);
regs->magic &= ~0x1ff;
cookie.restart_syscall = 1; cookie.restart_syscall = 1;
} else } else
cookie.restart_syscall = 0; cookie.restart_syscall = 0;
...@@ -531,7 +527,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) ...@@ -531,7 +527,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
else else
oldset = &current->blocked; oldset = &current->blocked;
#ifdef CONFIG_SPARC32_COMPAT #ifdef CONFIG_COMPAT
if (test_thread_flag(TIF_32BIT)) { if (test_thread_flag(TIF_32BIT)) {
extern void do_signal32(sigset_t *, struct pt_regs *, extern void do_signal32(sigset_t *, struct pt_regs *,
struct signal_deliver_cookie *); struct signal_deliver_cookie *);
......
This diff is collapsed.
...@@ -49,7 +49,6 @@ ...@@ -49,7 +49,6 @@
#endif #endif
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
#include <asm/ebus.h> #include <asm/ebus.h>
#include <asm/isa.h>
#endif #endif
#include <asm/ns87303.h> #include <asm/ns87303.h>
#include <asm/timer.h> #include <asm/timer.h>
...@@ -187,7 +186,6 @@ EXPORT_SYMBOL(insw); ...@@ -187,7 +186,6 @@ EXPORT_SYMBOL(insw);
EXPORT_SYMBOL(insl); EXPORT_SYMBOL(insl);
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
EXPORT_SYMBOL(ebus_chain); EXPORT_SYMBOL(ebus_chain);
EXPORT_SYMBOL(isa_chain);
EXPORT_SYMBOL(pci_alloc_consistent); EXPORT_SYMBOL(pci_alloc_consistent);
EXPORT_SYMBOL(pci_free_consistent); EXPORT_SYMBOL(pci_free_consistent);
EXPORT_SYMBOL(pci_map_single); EXPORT_SYMBOL(pci_map_single);
......
...@@ -554,10 +554,8 @@ asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act ...@@ -554,10 +554,8 @@ asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;
if (sig < 0) { WARN_ON_ONCE(sig >= 0);
set_thread_flag(TIF_NEWSIGNALS); sig = -sig;
sig = -sig;
}
if (act) { if (act) {
compat_old_sigset_t mask; compat_old_sigset_t mask;
...@@ -601,11 +599,6 @@ asmlinkage long compat_sys_rt_sigaction(int sig, ...@@ -601,11 +599,6 @@ asmlinkage long compat_sys_rt_sigaction(int sig,
if (sigsetsize != sizeof(compat_sigset_t)) if (sigsetsize != sizeof(compat_sigset_t))
return -EINVAL; return -EINVAL;
/* All tasks which use RT signals (effectively) use
* new style signals.
*/
set_thread_flag(TIF_NEWSIGNALS);
if (act) { if (act) {
u32 u_handler, u_restorer; u32 u_handler, u_restorer;
......
This diff is collapsed.
...@@ -1231,7 +1231,7 @@ static inline struct console *SUNZILOG_CONSOLE(void) ...@@ -1231,7 +1231,7 @@ static inline struct console *SUNZILOG_CONSOLE(void)
#define SUNZILOG_CONSOLE() (NULL) #define SUNZILOG_CONSOLE() (NULL)
#endif #endif
static void __devinit sunzilog_init_kbdms(struct uart_sunzilog_port *up, int channel) static void __devinit sunzilog_init_kbdms(struct uart_sunzilog_port *up)
{ {
int baud, brg; int baud, brg;
...@@ -1305,7 +1305,7 @@ static void __devinit sunzilog_init_hw(struct uart_sunzilog_port *up) ...@@ -1305,7 +1305,7 @@ static void __devinit sunzilog_init_hw(struct uart_sunzilog_port *up)
up->curregs[R7] = 0x7E; /* SDLC Flag */ up->curregs[R7] = 0x7E; /* SDLC Flag */
up->curregs[R9] = NV; up->curregs[R9] = NV;
up->curregs[R7p] = 0x00; up->curregs[R7p] = 0x00;
sunzilog_init_kbdms(up, up->port.line); sunzilog_init_kbdms(up);
/* Only enable interrupts if an ISR handler available */ /* Only enable interrupts if an ISR handler available */
if (up->flags & SUNZILOG_FLAG_ISR_HANDLER) if (up->flags & SUNZILOG_FLAG_ISR_HANDLER)
up->curregs[R9] |= MIE; up->curregs[R9] |= MIE;
......
...@@ -339,7 +339,7 @@ static int __devinit bw2_probe(struct of_device *op, const struct of_device_id * ...@@ -339,7 +339,7 @@ static int __devinit bw2_probe(struct of_device *op, const struct of_device_id *
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: bwtwo at %lx:%lx\n", printk(KERN_INFO "%s: bwtwo at %lx:%lx\n",
dp->full_name, par->which_io, par->physbase); dp->full_name, par->which_io, par->physbase);
return 0; return 0;
...@@ -399,10 +399,9 @@ static int __init bw2_init(void) ...@@ -399,10 +399,9 @@ static int __init bw2_init(void)
static void __exit bw2_exit(void) static void __exit bw2_exit(void)
{ {
return of_unregister_driver(&bw2_driver); of_unregister_driver(&bw2_driver);
} }
module_init(bw2_init); module_init(bw2_init);
module_exit(bw2_exit); module_exit(bw2_exit);
......
...@@ -556,7 +556,7 @@ static int __devinit cg14_probe(struct of_device *op, const struct of_device_id ...@@ -556,7 +556,7 @@ static int __devinit cg14_probe(struct of_device *op, const struct of_device_id
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: cgfourteen at %lx:%lx, %dMB\n", printk(KERN_INFO "%s: cgfourteen at %lx:%lx, %dMB\n",
dp->full_name, dp->full_name,
par->iospace, par->physbase, par->iospace, par->physbase,
par->ramsize >> 20); par->ramsize >> 20);
...@@ -605,7 +605,7 @@ static struct of_platform_driver cg14_driver = { ...@@ -605,7 +605,7 @@ static struct of_platform_driver cg14_driver = {
.remove = __devexit_p(cg14_remove), .remove = __devexit_p(cg14_remove),
}; };
int __init cg14_init(void) static int __init cg14_init(void)
{ {
if (fb_get_options("cg14fb", NULL)) if (fb_get_options("cg14fb", NULL))
return -ENODEV; return -ENODEV;
...@@ -613,7 +613,7 @@ int __init cg14_init(void) ...@@ -613,7 +613,7 @@ int __init cg14_init(void)
return of_register_driver(&cg14_driver, &of_bus_type); return of_register_driver(&cg14_driver, &of_bus_type);
} }
void __exit cg14_exit(void) static void __exit cg14_exit(void)
{ {
of_unregister_driver(&cg14_driver); of_unregister_driver(&cg14_driver);
} }
......
...@@ -419,7 +419,7 @@ static int __devinit cg3_probe(struct of_device *op, ...@@ -419,7 +419,7 @@ static int __devinit cg3_probe(struct of_device *op,
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: cg3 at %lx:%lx\n", printk(KERN_INFO "%s: cg3 at %lx:%lx\n",
dp->full_name, par->which_io, par->physbase); dp->full_name, par->which_io, par->physbase);
return 0; return 0;
......
...@@ -781,7 +781,7 @@ static int __devinit cg6_probe(struct of_device *op, ...@@ -781,7 +781,7 @@ static int __devinit cg6_probe(struct of_device *op,
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: CGsix [%s] at %lx:%lx\n", printk(KERN_INFO "%s: CGsix [%s] at %lx:%lx\n",
dp->full_name, info->fix.id, dp->full_name, info->fix.id,
par->which_io, par->physbase); par->which_io, par->physbase);
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
static int ffb_setcolreg(unsigned, unsigned, unsigned, unsigned, static int ffb_setcolreg(unsigned, unsigned, unsigned, unsigned,
unsigned, struct fb_info *); unsigned, struct fb_info *);
static int ffb_blank(int, struct fb_info *); static int ffb_blank(int, struct fb_info *);
static void ffb_init_fix(struct fb_info *);
static void ffb_imageblit(struct fb_info *, const struct fb_image *); static void ffb_imageblit(struct fb_info *, const struct fb_image *);
static void ffb_fillrect(struct fb_info *, const struct fb_fillrect *); static void ffb_fillrect(struct fb_info *, const struct fb_fillrect *);
...@@ -1001,7 +1000,7 @@ static int __devinit ffb_probe(struct of_device *op, ...@@ -1001,7 +1000,7 @@ static int __devinit ffb_probe(struct of_device *op,
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: %s at %016lx, type %d, " printk(KERN_INFO "%s: %s at %016lx, type %d, "
"DAC pnum[%x] rev[%d] manuf_rev[%d]\n", "DAC pnum[%x] rev[%d] manuf_rev[%d]\n",
dp->full_name, dp->full_name,
((par->flags & FFB_FLAG_AFB) ? "AFB" : "FFB"), ((par->flags & FFB_FLAG_AFB) ? "AFB" : "FFB"),
...@@ -1062,7 +1061,7 @@ static struct of_platform_driver ffb_driver = { ...@@ -1062,7 +1061,7 @@ static struct of_platform_driver ffb_driver = {
.remove = __devexit_p(ffb_remove), .remove = __devexit_p(ffb_remove),
}; };
int __init ffb_init(void) static int __init ffb_init(void)
{ {
if (fb_get_options("ffb", NULL)) if (fb_get_options("ffb", NULL))
return -ENODEV; return -ENODEV;
...@@ -1070,7 +1069,7 @@ int __init ffb_init(void) ...@@ -1070,7 +1069,7 @@ int __init ffb_init(void)
return of_register_driver(&ffb_driver, &of_bus_type); return of_register_driver(&ffb_driver, &of_bus_type);
} }
void __exit ffb_exit(void) static void __exit ffb_exit(void)
{ {
of_unregister_driver(&ffb_driver); of_unregister_driver(&ffb_driver);
} }
......
...@@ -614,7 +614,7 @@ static int __devinit leo_probe(struct of_device *op, const struct of_device_id * ...@@ -614,7 +614,7 @@ static int __devinit leo_probe(struct of_device *op, const struct of_device_id *
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: leo at %lx:%lx\n", printk(KERN_INFO "%s: leo at %lx:%lx\n",
dp->full_name, dp->full_name,
par->which_io, par->physbase); par->which_io, par->physbase);
......
...@@ -310,7 +310,7 @@ static int __devinit p9100_probe(struct of_device *op, const struct of_device_id ...@@ -310,7 +310,7 @@ static int __devinit p9100_probe(struct of_device *op, const struct of_device_id
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: p9100 at %lx:%lx\n", printk(KERN_INFO "%s: p9100 at %lx:%lx\n",
dp->full_name, dp->full_name,
par->which_io, par->physbase); par->which_io, par->physbase);
......
...@@ -419,7 +419,7 @@ static int __devinit tcx_init_one(struct of_device *op) ...@@ -419,7 +419,7 @@ static int __devinit tcx_init_one(struct of_device *op)
par->mmap_map[6].size = SBUS_MMAP_EMPTY; par->mmap_map[6].size = SBUS_MMAP_EMPTY;
} }
par->physbase = 0; par->physbase = op->resource[0].start;
par->which_io = op->resource[0].flags & IORESOURCE_BITS; par->which_io = op->resource[0].flags & IORESOURCE_BITS;
for (i = 0; i < TCX_MMAP_ENTRIES; i++) { for (i = 0; i < TCX_MMAP_ENTRIES; i++) {
...@@ -470,10 +470,10 @@ static int __devinit tcx_init_one(struct of_device *op) ...@@ -470,10 +470,10 @@ static int __devinit tcx_init_one(struct of_device *op)
dev_set_drvdata(&op->dev, info); dev_set_drvdata(&op->dev, info);
printk("%s: TCX at %lx:%lx, %s\n", printk(KERN_INFO "%s: TCX at %lx:%lx, %s\n",
dp->full_name, dp->full_name,
par->which_io, par->which_io,
op->resource[0].start, par->physbase,
par->lowdepth ? "8-bit only" : "24-bit depth"); par->lowdepth ? "8-bit only" : "24-bit depth");
return 0; return 0;
...@@ -527,7 +527,7 @@ static struct of_platform_driver tcx_driver = { ...@@ -527,7 +527,7 @@ static struct of_platform_driver tcx_driver = {
.remove = __devexit_p(tcx_remove), .remove = __devexit_p(tcx_remove),
}; };
int __init tcx_init(void) static int __init tcx_init(void)
{ {
if (fb_get_options("tcxfb", NULL)) if (fb_get_options("tcxfb", NULL))
return -ENODEV; return -ENODEV;
...@@ -535,7 +535,7 @@ int __init tcx_init(void) ...@@ -535,7 +535,7 @@ int __init tcx_init(void)
return of_register_driver(&tcx_driver, &of_bus_type); return of_register_driver(&tcx_driver, &of_bus_type);
} }
void __exit tcx_exit(void) static void __exit tcx_exit(void)
{ {
of_unregister_driver(&tcx_driver); of_unregister_driver(&tcx_driver);
} }
......
/* $Id: processor.h,v 1.83 2001/10/08 09:32:13 davem Exp $ /* include/asm-sparc/processor.h
* include/asm-sparc/processor.h
* *
* Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu) * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
*/ */
...@@ -65,7 +64,6 @@ struct thread_struct { ...@@ -65,7 +64,6 @@ struct thread_struct {
struct fpq fpqueue[16]; struct fpq fpqueue[16];
unsigned long flags; unsigned long flags;
mm_segment_t current_ds; mm_segment_t current_ds;
int new_signal;
}; };
#define SPARC_FLAG_KTHREAD 0x1 /* task is a kernel thread */ #define SPARC_FLAG_KTHREAD 0x1 /* task is a kernel thread */
......
...@@ -293,7 +293,6 @@ static int sun_fd_eject(int drive) ...@@ -293,7 +293,6 @@ static int sun_fd_eject(int drive)
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
#include <asm/ebus.h> #include <asm/ebus.h>
#include <asm/isa.h>
#include <asm/ns87303.h> #include <asm/ns87303.h>
static struct ebus_dma_info sun_pci_fd_ebus_dma; static struct ebus_dma_info sun_pci_fd_ebus_dma;
...@@ -558,82 +557,6 @@ static int __init ebus_fdthree_p(struct linux_ebus_device *edev) ...@@ -558,82 +557,6 @@ static int __init ebus_fdthree_p(struct linux_ebus_device *edev)
} }
#endif #endif
#ifdef CONFIG_PCI
#undef ISA_FLOPPY_WORKS
#ifdef ISA_FLOPPY_WORKS
static unsigned long __init isa_floppy_init(void)
{
struct sparc_isa_bridge *isa_br;
struct sparc_isa_device *isa_dev = NULL;
for_each_isa(isa_br) {
for_each_isadev(isa_dev, isa_br) {
if (!strcmp(isa_dev->prom_node->name, "dma")) {
struct sparc_isa_device *child =
isa_dev->child;
while (child) {
if (!strcmp(child->prom_node->name,
"floppy")) {
isa_dev = child;
goto isa_done;
}
child = child->next;
}
}
}
}
isa_done:
if (!isa_dev)
return 0;
/* We could use DMA on devices behind the ISA bridge, but...
*
* There is a slight problem. Normally on x86 kit the x86 processor
* delays I/O port instructions when the ISA bus "dma in progress"
* signal is active. Well, sparc64 systems do not monitor this
* signal thus we would need to block all I/O port accesses in software
* when a dma transfer is active for some device.
*/
sun_fdc = (struct sun_flpy_controller *)isa_dev->resource.start;
FLOPPY_IRQ = isa_dev->irq;
sun_fdops.fd_inb = sun_pci_fd_inb;
sun_fdops.fd_outb = sun_pci_fd_outb;
can_use_virtual_dma = use_virtual_dma = 1;
sun_fdops.fd_enable_dma = sun_fd_enable_dma;
sun_fdops.fd_disable_dma = sun_fd_disable_dma;
sun_fdops.fd_set_dma_mode = sun_fd_set_dma_mode;
sun_fdops.fd_set_dma_addr = sun_fd_set_dma_addr;
sun_fdops.fd_set_dma_count = sun_fd_set_dma_count;
sun_fdops.get_dma_residue = sun_get_dma_residue;
sun_fdops.fd_request_irq = sun_fd_request_irq;
sun_fdops.fd_free_irq = sun_fd_free_irq;
/* Floppy eject is manual. Actually, could determine this
* via presence of 'manual' property in OBP node.
*/
sun_fdops.fd_eject = sun_pci_fd_eject;
fdc_status = (unsigned long) &sun_fdc->status_82077;
allowed_drive_mask = 0;
sun_floppy_types[0] = 0;
sun_floppy_types[1] = 4;
sun_pci_broken_drive = 1;
sun_fdops.fd_outb = sun_pci_fd_broken_outb;
return sun_floppy_types[0];
}
#endif /* ISA_FLOPPY_WORKS */
#endif
static unsigned long __init sun_floppy_init(void) static unsigned long __init sun_floppy_init(void)
{ {
char state[128]; char state[128];
...@@ -667,13 +590,8 @@ static unsigned long __init sun_floppy_init(void) ...@@ -667,13 +590,8 @@ static unsigned long __init sun_floppy_init(void)
} }
} }
ebus_done: ebus_done:
if (!edev) { if (!edev)
#ifdef ISA_FLOPPY_WORKS
return isa_floppy_init();
#else
return 0; return 0;
#endif
}
state_prop = of_get_property(edev->prom_node, "status", NULL); state_prop = of_get_property(edev->prom_node, "status", NULL);
if (state_prop && !strncmp(state_prop, "disabled", 8)) if (state_prop && !strncmp(state_prop, "disabled", 8))
......
/* $Id: isa.h,v 1.1 2001/05/11 04:31:55 davem Exp $
* isa.h: Sparc64 layer for PCI to ISA bridge devices.
*
* Copyright (C) 2001 David S. Miller (davem@redhat.com)
*/
#ifndef __SPARC64_ISA_H
#define __SPARC64_ISA_H
#include <asm/oplib.h>
#include <asm/prom.h>
#include <asm/of_device.h>
struct sparc_isa_bridge;
struct sparc_isa_device {
struct of_device ofdev;
struct sparc_isa_device *next;
struct sparc_isa_device *child;
struct sparc_isa_bridge *bus;
struct device_node *prom_node;
struct resource resource;
unsigned int irq;
};
#define to_isa_device(d) container_of(d, struct sparc_isa_device, ofdev.dev)
struct sparc_isa_bridge {
struct of_device ofdev;
struct sparc_isa_bridge *next;
struct sparc_isa_device *devices;
struct pci_dev *self;
int index;
struct device_node *prom_node;
};
#define to_isa_bridge(d) container_of(d, struct sparc_isa_bridge, ofdev.dev)
extern struct sparc_isa_bridge *isa_chain;
extern void isa_init(void);
#define for_each_isa(bus) \
for((bus) = isa_chain; (bus); (bus) = (bus)->next)
#define for_each_isadev(dev, bus) \
for((dev) = (bus)->devices; (dev); (dev) = (dev)->next)
#endif /* !(__SPARC64_ISA_H) */
/* $Id: ptrace.h,v 1.14 2002/02/09 19:49:32 davem Exp $ */
#ifndef _SPARC64_PTRACE_H #ifndef _SPARC64_PTRACE_H
#define _SPARC64_PTRACE_H #define _SPARC64_PTRACE_H
...@@ -8,10 +7,15 @@ ...@@ -8,10 +7,15 @@
* stack during a system call and basically all traps. * stack during a system call and basically all traps.
*/ */
/* This magic value must have the low 9 bits clear,
* as that is where we encode the %tt value, see below.
*/
#define PT_REGS_MAGIC 0x57ac6c00 #define PT_REGS_MAGIC 0x57ac6c00
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <linux/types.h>
struct pt_regs { struct pt_regs {
unsigned long u_regs[16]; /* globals and ins */ unsigned long u_regs[16]; /* globals and ins */
unsigned long tstate; unsigned long tstate;
...@@ -33,6 +37,23 @@ struct pt_regs { ...@@ -33,6 +37,23 @@ struct pt_regs {
unsigned int magic; unsigned int magic;
}; };
static inline int pt_regs_trap_type(struct pt_regs *regs)
{
return regs->magic & 0x1ff;
}
static inline int pt_regs_clear_trap_type(struct pt_regs *regs)
{
return regs->magic &= ~0x1ff;
}
static inline bool pt_regs_is_syscall(struct pt_regs *regs)
{
int tt = pt_regs_trap_type(regs);
return (tt == 0x110 || tt == 0x111 || tt == 0x16d);
}
struct pt_regs32 { struct pt_regs32 {
unsigned int psr; unsigned int psr;
unsigned int pc; unsigned int pc;
......
/* $Id: thread_info.h,v 1.1 2002/02/10 00:00:58 davem Exp $ /* thread_info.h: sparc64 low-level thread information
* thread_info.h: sparc64 low-level thread information
* *
* Copyright (C) 2002 David S. Miller (davem@redhat.com) * Copyright (C) 2002 David S. Miller (davem@redhat.com)
*/ */
...@@ -223,7 +222,7 @@ register struct thread_info *current_thread_info_reg asm("g6"); ...@@ -223,7 +222,7 @@ register struct thread_info *current_thread_info_reg asm("g6");
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */
#define TIF_PERFCTR 4 /* performance counters active */ #define TIF_PERFCTR 4 /* performance counters active */
#define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */ #define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */
#define TIF_NEWSIGNALS 6 /* wants new-style signals */ /* flag bit 6 is available */
#define TIF_32BIT 7 /* 32-bit binary */ #define TIF_32BIT 7 /* 32-bit binary */
/* flag bit 8 is available */ /* flag bit 8 is available */
#define TIF_SECCOMP 9 /* secure computing */ #define TIF_SECCOMP 9 /* secure computing */
...@@ -242,7 +241,6 @@ register struct thread_info *current_thread_info_reg asm("g6"); ...@@ -242,7 +241,6 @@ register struct thread_info *current_thread_info_reg asm("g6");
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_PERFCTR (1<<TIF_PERFCTR) #define _TIF_PERFCTR (1<<TIF_PERFCTR)
#define _TIF_UNALIGNED (1<<TIF_UNALIGNED) #define _TIF_UNALIGNED (1<<TIF_UNALIGNED)
#define _TIF_NEWSIGNALS (1<<TIF_NEWSIGNALS)
#define _TIF_32BIT (1<<TIF_32BIT) #define _TIF_32BIT (1<<TIF_32BIT)
#define _TIF_SECCOMP (1<<TIF_SECCOMP) #define _TIF_SECCOMP (1<<TIF_SECCOMP)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
......
...@@ -517,7 +517,7 @@ menuconfig EMBEDDED ...@@ -517,7 +517,7 @@ menuconfig EMBEDDED
config UID16 config UID16
bool "Enable 16-bit UID system calls" if EMBEDDED bool "Enable 16-bit UID system calls" if EMBEDDED
depends on ARM || BLACKFIN || CRIS || FRV || H8300 || X86_32 || M68K || (S390 && !64BIT) || SUPERH || SPARC32 || (SPARC64 && SPARC32_COMPAT) || UML || (X86_64 && IA32_EMULATION) depends on ARM || BLACKFIN || CRIS || FRV || H8300 || X86_32 || M68K || (S390 && !64BIT) || SUPERH || SPARC32 || (SPARC64 && COMPAT) || UML || (X86_64 && IA32_EMULATION)
default y default y
help help
This enables the legacy 16-bit UID syscall wrappers. This enables the legacy 16-bit UID syscall wrappers.
......
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