Commit a69c5745 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.99pre3-4

parent 33fad918
...@@ -2051,6 +2051,14 @@ S: Gaildorfer Str. 27 ...@@ -2051,6 +2051,14 @@ S: Gaildorfer Str. 27
S: 7000 Stuttgart 50 S: 7000 Stuttgart 50
S: Germany S: Germany
N: Christoph Rohland
E: hans-christoph.rohland@sap.com
E: ch.rohland@gmx.net
D: shm fs, SYSV semaphores, af_unix
S: Neue Heimat Str. 8
S: D-68789 St.Leon-Rot
S: Germany
N: Stephen Rothwell N: Stephen Rothwell
E: sfr@linuxcare.com E: sfr@linuxcare.com
W: http://linuxcare.com.au/sfr W: http://linuxcare.com.au/sfr
......
This diff is collapsed.
...@@ -28,7 +28,9 @@ kernel-api.sgml: kernel-api.tmpl ...@@ -28,7 +28,9 @@ kernel-api.sgml: kernel-api.tmpl
$(TOPDIR)/drivers/char/misc.c \ $(TOPDIR)/drivers/char/misc.c \
$(TOPDIR)/drivers/char/videodev.c \ $(TOPDIR)/drivers/char/videodev.c \
$(TOPDIR)/drivers/net/net_init.c \ $(TOPDIR)/drivers/net/net_init.c \
$(TOPDIR)/drivers/net/8390.c \
$(TOPDIR)/drivers/char/serial.c \ $(TOPDIR)/drivers/char/serial.c \
$(TOPDIR)/drivers/pci/pci.c \
$(TOPDIR)/drivers/sound/sound_core.c \ $(TOPDIR)/drivers/sound/sound_core.c \
$(TOPDIR)/drivers/sound/sound_firmware.c \ $(TOPDIR)/drivers/sound/sound_firmware.c \
$(TOPDIR)/drivers/net/wan/syncppp.c \ $(TOPDIR)/drivers/net/wan/syncppp.c \
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
<chapter id="netdev"> <chapter id="netdev">
<title>Network devices</title> <title>Network devices</title>
!Idrivers/net/net_init.c !Idrivers/net/net_init.c
!Edrivers/net/8390.c
</chapter> </chapter>
<chapter id="snddev"> <chapter id="snddev">
...@@ -94,4 +95,9 @@ ...@@ -94,4 +95,9 @@
!Edrivers/net/wan/z85230.c !Edrivers/net/wan/z85230.c
</chapter> </chapter>
<chapter id="pcilib">
<title>PCI Support Library</title>
!Edrivers/pci/pci.c
</chapter>
</book> </book>
This diff is collapsed.
...@@ -142,7 +142,16 @@ tulip_core.c - Driver core (a.k.a. where "everything else" goes) ...@@ -142,7 +142,16 @@ tulip_core.c - Driver core (a.k.a. where "everything else" goes)
Version history Version history
=============== ===============
0.9.4.1: 0.9.4.2 (March 21, 2000):
* Fix 21041 CSR7, CSR13/14/15 handling
* Merge some PCI ids from tulip 0.91x
* Merge some HAS_xxx flags and flag settings from tulip 0.91x
* asm/io.h fix (submitted by many) and cleanup
* s/HAS_NWAY143/HAS_NWAY/
* Cleanup 21041 mode reporting
* Small code cleanups
0.9.4.1 (March 18, 2000):
* Finish PCI DMA conversion (davem) * Finish PCI DMA conversion (davem)
* Do not netif_start_queue() at end of tulip_tx_timeout() (kuznet) * Do not netif_start_queue() at end of tulip_tx_timeout() (kuznet)
* PCI DMA fix (kuznet) * PCI DMA fix (kuznet)
......
...@@ -90,6 +90,9 @@ endif ...@@ -90,6 +90,9 @@ endif
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
AFLAGS := $(CPPFLAGS) AFLAGS := $(CPPFLAGS)
# use '-fno-strict-aliasing', but only if the compiler can take it
CFLAGS += $(shell if $(CC) -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-fno-strict-aliasing"; fi)
export CPPFLAGS CFLAGS AFLAGS export CPPFLAGS CFLAGS AFLAGS
# #
...@@ -181,11 +184,8 @@ include arch/$(ARCH)/Makefile ...@@ -181,11 +184,8 @@ include arch/$(ARCH)/Makefile
export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS
# use '-fno-strict-aliasing', but only if the compiler can take it
CFLAGS += $(shell if $(CC) -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-fno-strict-aliasing"; fi)
.S.s: .S.s:
$(CC) -D__ASSEMBLY__ $(AFLAGS) -traditional -E -o $*.s $< $(CPP) -D__ASSEMBLY__ $(AFLAGS) -traditional -o $*.s $<
.S.o: .S.o:
$(CC) -D__ASSEMBLY__ $(AFLAGS) -traditional -c -o $*.o $< $(CC) -D__ASSEMBLY__ $(AFLAGS) -traditional -c -o $*.o $<
...@@ -398,7 +398,7 @@ mrproper: clean archmrproper ...@@ -398,7 +398,7 @@ mrproper: clean archmrproper
rm -f .hdepend scripts/mkdep scripts/split-include scripts/docproc rm -f .hdepend scripts/mkdep scripts/split-include scripts/docproc
rm -f $(TOPDIR)/include/linux/modversions.h rm -f $(TOPDIR)/include/linux/modversions.h
rm -rf $(TOPDIR)/include/linux/modules rm -rf $(TOPDIR)/include/linux/modules
rm -f Documentation/DocBook/*.sgml make clean TOPDIR=$(TOPDIR) -C Documentation/DocBook
distclean: mrproper distclean: mrproper
rm -f core `find . \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ rm -f core `find . \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
......
...@@ -244,7 +244,7 @@ $(TOPDIR)/include/linux/modversions.h: ...@@ -244,7 +244,7 @@ $(TOPDIR)/include/linux/modversions.h:
endif # CONFIG_MODVERSIONS endif # CONFIG_MODVERSIONS
ifneq "$(strip $(SYMTAB_OBJS))" "" ifneq "$(strip $(SYMTAB_OBJS))" ""
$(SYMTAB_OBJS): $(TOPDIR)/include/linux/modversions.h $(SYMTAB_OBJS:.o=.c) $(SYMTAB_OBJS): $(SYMTAB_OBJS:.o=.c) $(TOPDIR)/include/linux/modversions.h
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -DEXPORT_SYMTAB -c $(@:.o=.c) $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -DEXPORT_SYMTAB -c $(@:.o=.c)
@ ( \ @ ( \
echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -DEXPORT_SYMTAB)),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS) $$(CFLAGS_$@) -DEXPORT_SYMTAB)))' ; \ echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -DEXPORT_SYMTAB)),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS) $$(CFLAGS_$@) -DEXPORT_SYMTAB)))' ; \
......
...@@ -376,9 +376,13 @@ apecs_init_arch(void) ...@@ -376,9 +376,13 @@ apecs_init_arch(void)
pci_isa_hose = hose = alloc_pci_controler(); pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource; hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource; hose->mem_space = &iomem_resource;
hose->config_space = APECS_CONF;
hose->index = 0; hose->index = 0;
hose->sparse_mem_base = APECS_SPARSE_MEM - IDENT_ADDR;
hose->dense_mem_base = APECS_DENSE_MEM - IDENT_ADDR;
hose->sparse_io_base = APECS_IO - IDENT_ADDR;
hose->dense_io_base = 0;
/* /*
* Set up the PCI to main memory translation windows. * Set up the PCI to main memory translation windows.
* *
......
...@@ -529,7 +529,7 @@ verify_tb_operation(void) ...@@ -529,7 +529,7 @@ verify_tb_operation(void)
/* Fifth, verify that a previously invalid PTE entry gets /* Fifth, verify that a previously invalid PTE entry gets
filled from the page table. */ filled from the page table. */
data0 = 0xabcdef123; data0 = 0xabcdef12;
page[0] = data0; page[0] = data0;
arena->ptes[5] = pte0; arena->ptes[5] = pte0;
mcheck_expected(0) = 1; mcheck_expected(0) = 1;
...@@ -640,7 +640,6 @@ do_init_arch(int is_pyxis) ...@@ -640,7 +640,6 @@ do_init_arch(int is_pyxis)
pci_isa_hose = hose = alloc_pci_controler(); pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource; hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource; hose->mem_space = &iomem_resource;
hose->config_space = CIA_CONF;
hose->index = 0; hose->index = 0;
if (! is_pyxis) { if (! is_pyxis) {
...@@ -654,6 +653,16 @@ do_init_arch(int is_pyxis) ...@@ -654,6 +653,16 @@ do_init_arch(int is_pyxis)
if (request_resource(&iomem_resource, hae_mem) < 0) if (request_resource(&iomem_resource, hae_mem) < 0)
printk(KERN_ERR "Failed to request HAE_MEM\n"); printk(KERN_ERR "Failed to request HAE_MEM\n");
hose->sparse_mem_base = CIA_SPARSE_MEM - IDENT_ADDR;
hose->dense_mem_base = CIA_DENSE_MEM - IDENT_ADDR;
hose->sparse_io_base = CIA_IO - IDENT_ADDR;
hose->dense_io_base = 0;
} else {
hose->sparse_mem_base = 0;
hose->dense_mem_base = CIA_BW_MEM - IDENT_ADDR;
hose->sparse_io_base = 0;
hose->dense_io_base = CIA_BW_IO - IDENT_ADDR;
} }
/* /*
......
...@@ -346,12 +346,22 @@ irongate_init_arch(void) ...@@ -346,12 +346,22 @@ irongate_init_arch(void)
* Create our single hose. * Create our single hose.
*/ */
hose = alloc_pci_controler(); pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource; hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource; hose->mem_space = &iomem_resource;
hose->config_space = IRONGATE_CONF;
hose->index = 0; hose->index = 0;
/* This is for userland consumption. For some reason, the 40-bit
PIO bias that we use in the kernel through KSEG didn't work for
the page table based user mappings. So make sure we get the
43-bit PIO bias. */
hose->sparse_mem_base = 0;
hose->sparse_io_base = 0;
hose->dense_mem_base
= (IRONGATE_MEM & 0xffffffffff) | 0x80000000000;
hose->dense_io_base
= (IRONGATE_IO & 0xffffffffff) | 0x80000000000;
hose->sg_isa = hose->sg_pci = NULL; hose->sg_isa = hose->sg_pci = NULL;
__direct_map_base = 0; __direct_map_base = 0;
__direct_map_size = 0xffffffff; __direct_map_size = 0xffffffff;
......
...@@ -298,9 +298,13 @@ lca_init_arch(void) ...@@ -298,9 +298,13 @@ lca_init_arch(void)
pci_isa_hose = hose = alloc_pci_controler(); pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource; hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource; hose->mem_space = &iomem_resource;
hose->config_space = LCA_CONF;
hose->index = 0; hose->index = 0;
hose->sparse_mem_base = LCA_SPARSE_MEM - IDENT_ADDR;
hose->dense_mem_base = LCA_DENSE_MEM - IDENT_ADDR;
hose->sparse_io_base = LCA_IO - IDENT_ADDR;
hose->dense_io_base = 0;
/* /*
* Set up the PCI to main memory translation windows. * Set up the PCI to main memory translation windows.
* *
......
...@@ -189,7 +189,7 @@ mk_conf_addr(struct pci_dev *dev, int where, struct pci_controler *hose, ...@@ -189,7 +189,7 @@ mk_conf_addr(struct pci_dev *dev, int where, struct pci_controler *hose,
bus = 0; bus = 0;
addr = (bus << 16) | (devfn << 8) | (where); addr = (bus << 16) | (devfn << 8) | (where);
addr <<= 5; /* swizzle for SPARSE */ addr <<= 5; /* swizzle for SPARSE */
addr |= hose->config_space; addr |= hose->config_space_base;
*pci_addr = addr; *pci_addr = addr;
DBG_CFG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr)); DBG_CFG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
...@@ -337,13 +337,19 @@ mcpcia_new_hose(int h) ...@@ -337,13 +337,19 @@ mcpcia_new_hose(int h)
int mid = MCPCIA_HOSE2MID(h); int mid = MCPCIA_HOSE2MID(h);
hose = alloc_pci_controler(); hose = alloc_pci_controler();
if (h == 0)
pci_isa_hose = hose;
io = alloc_resource(); io = alloc_resource();
mem = alloc_resource(); mem = alloc_resource();
hae_mem = alloc_resource(); hae_mem = alloc_resource();
hose->io_space = io; hose->io_space = io;
hose->mem_space = hae_mem; hose->mem_space = hae_mem;
hose->config_space = MCPCIA_CONF(mid); hose->sparse_mem_base = MCPCIA_SPARSE(mid) - IDENT_ADDR;
hose->dense_mem_base = MCPCIA_DENSE(mid) - IDENT_ADDR;
hose->sparse_io_base = MCPCIA_IO(mid) - IDENT_ADDR;
hose->dense_io_base = 0;
hose->config_space_base = MCPCIA_CONF(mid);
hose->index = h; hose->index = h;
io->start = MCPCIA_IO(mid) - MCPCIA_IO_BIAS; io->start = MCPCIA_IO(mid) - MCPCIA_IO_BIAS;
......
...@@ -192,12 +192,16 @@ polaris_init_arch(void) ...@@ -192,12 +192,16 @@ polaris_init_arch(void)
* Create our single hose. * Create our single hose.
*/ */
hose = alloc_pci_controler(); pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource; hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource; hose->mem_space = &iomem_resource;
hose->config_space = POLARIS_DENSE_CONFIG_BASE;
hose->index = 0; hose->index = 0;
hose->sparse_mem_base = 0;
hose->dense_mem_base = POLARIS_DENSE_MEM_BASE - IDENT_ADDR;
hose->sparse_io_base = 0;
hose->dense_io_base = POLARIS_DENSE_IO_BASE - IDENT_ADDR;
hose->sg_isa = hose->sg_pci = NULL; hose->sg_isa = hose->sg_pci = NULL;
/* The I/O window is fixed at 2G @ 2G. */ /* The I/O window is fixed at 2G @ 2G. */
......
...@@ -384,12 +384,16 @@ t2_init_arch(void) ...@@ -384,12 +384,16 @@ t2_init_arch(void)
* Create our single hose. * Create our single hose.
*/ */
hose = alloc_pci_controler(); pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource; hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource; hose->mem_space = &iomem_resource;
hose->config_space = T2_CONF;
hose->index = 0; hose->index = 0;
hose->sparse_mem_base = T2_SPARSE_MEM - IDENT_ADDR;
hose->dense_mem_base = T2_DENSE_MEM - IDENT_ADDR;
hose->sparse_io_base = T2_IO - IDENT_ADDR;
hose->dense_io_base = 0;
hose->sg_isa = hose->sg_pci = NULL; hose->sg_isa = hose->sg_pci = NULL;
__direct_map_base = 0x40000000; __direct_map_base = 0x40000000;
__direct_map_size = 0x40000000; __direct_map_size = 0x40000000;
......
...@@ -104,7 +104,7 @@ mk_conf_addr(struct pci_dev *dev, int where, unsigned long *pci_addr, ...@@ -104,7 +104,7 @@ mk_conf_addr(struct pci_dev *dev, int where, unsigned long *pci_addr,
*type1 = (bus != 0); *type1 = (bus != 0);
addr = (bus << 16) | (device_fn << 8) | where; addr = (bus << 16) | (device_fn << 8) | where;
addr |= hose->config_space; addr |= hose->config_space_base;
*pci_addr = addr; *pci_addr = addr;
DBG_CFG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr)); DBG_CFG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
...@@ -291,7 +291,18 @@ tsunami_init_one_pchip(tsunami_pchip *pchip, int index) ...@@ -291,7 +291,18 @@ tsunami_init_one_pchip(tsunami_pchip *pchip, int index)
hose->io_space = alloc_resource(); hose->io_space = alloc_resource();
hose->mem_space = alloc_resource(); hose->mem_space = alloc_resource();
hose->config_space = TSUNAMI_CONF(index); /* This is for userland consumption. For some reason, the 40-bit
PIO bias that we use in the kernel through KSEG didn't work for
the page table based user mappings. So make sure we get the
43-bit PIO bias. */
hose->sparse_mem_base = 0;
hose->sparse_io_base = 0;
hose->dense_mem_base
= (TSUNAMI_MEM(index) & 0xffffffffff) | 0x80000000000;
hose->dense_io_base
= (TSUNAMI_IO(index) & 0xffffffffff) | 0x80000000000;
hose->config_space_base = TSUNAMI_CONF(index);
hose->index = index; hose->index = index;
hose->io_space->start = TSUNAMI_IO(index) - TSUNAMI_IO_BIAS; hose->io_space->start = TSUNAMI_IO(index) - TSUNAMI_IO_BIAS;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#define SIGCHLD 20 #define SIGCHLD 20
#define NR_SYSCALLS 376 #define NR_SYSCALLS 377
/* /*
* These offsets must match with alpha_mv in <asm/machvec.h>. * These offsets must match with alpha_mv in <asm/machvec.h>.
...@@ -1156,3 +1156,4 @@ sys_call_table: ...@@ -1156,3 +1156,4 @@ sys_call_table:
.quad sys_ni_syscall /* sys_dipc */ .quad sys_ni_syscall /* sys_dipc */
.quad sys_pivot_root .quad sys_pivot_root
.quad sys_mincore /* 375 */ .quad sys_mincore /* 375 */
.quad sys_pciconfig_iobase
...@@ -811,21 +811,8 @@ asmlinkage unsigned long osf_getsysinfo(unsigned long op, void *buffer, ...@@ -811,21 +811,8 @@ asmlinkage unsigned long osf_getsysinfo(unsigned long op, void *buffer,
/* Return current software fp control & status bits. */ /* Return current software fp control & status bits. */
/* Note that DU doesn't verify available space here. */ /* Note that DU doesn't verify available space here. */
/* EV6 implements most of the bits in hardware. If
UNDZ is not set, UNFD is maintained in software. */
if (implver() == IMPLVER_EV6) {
unsigned long fpcr = rdfpcr();
w = ieee_fpcr_to_swcr(fpcr);
if (!(fpcr & FPCR_UNDZ)) {
w &= ~IEEE_TRAP_ENABLE_UNF;
w |= (current->thread.flags
& IEEE_TRAP_ENABLE_UNF);
}
} else {
/* Otherwise we are forced to do everything in sw. */
w = current->thread.flags & IEEE_SW_MASK; w = current->thread.flags & IEEE_SW_MASK;
} w = swcr_update_status(w, rdfpcr());
if (put_user(w, (unsigned long *) buffer)) if (put_user(w, (unsigned long *) buffer))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -876,7 +863,7 @@ asmlinkage unsigned long osf_setsysinfo(unsigned long op, void *buffer, ...@@ -876,7 +863,7 @@ asmlinkage unsigned long osf_setsysinfo(unsigned long op, void *buffer,
{ {
switch (op) { switch (op) {
case SSI_IEEE_FP_CONTROL: { case SSI_IEEE_FP_CONTROL: {
unsigned long swcr, fpcr, undz; unsigned long swcr, fpcr;
/* /*
* Alpha Architecture Handbook 4.7.7.3: * Alpha Architecture Handbook 4.7.7.3:
...@@ -891,14 +878,18 @@ asmlinkage unsigned long osf_setsysinfo(unsigned long op, void *buffer, ...@@ -891,14 +878,18 @@ asmlinkage unsigned long osf_setsysinfo(unsigned long op, void *buffer,
current->thread.flags &= ~IEEE_SW_MASK; current->thread.flags &= ~IEEE_SW_MASK;
current->thread.flags |= swcr & IEEE_SW_MASK; current->thread.flags |= swcr & IEEE_SW_MASK;
/* Update the real fpcr. Keep UNFD off if not UNDZ. */ /* Update the real fpcr. */
fpcr = rdfpcr(); fpcr = rdfpcr();
undz = (fpcr & FPCR_UNDZ); fpcr &= FPCR_DYN_MASK;
fpcr &= ~(FPCR_MASK | FPCR_DYN_MASK | FPCR_UNDZ);
fpcr |= ieee_swcr_to_fpcr(swcr); fpcr |= ieee_swcr_to_fpcr(swcr);
fpcr &= ~(undz << 1);
wrfpcr(fpcr); wrfpcr(fpcr);
/* If any exceptions are now unmasked, send a signal. */
if (((swcr & IEEE_STATUS_MASK)
>> IEEE_STATUS_TO_EXCSUM_SHIFT) & swcr) {
send_sig(SIGFPE, current, 1);
}
return 0; return 0;
} }
......
...@@ -377,3 +377,39 @@ alloc_resource(void) ...@@ -377,3 +377,39 @@ alloc_resource(void)
return res; return res;
} }
/* Provide information on locations of various I/O regions in physical
memory. Do this on a per-card basis so that we choose the right hose. */
asmlinkage long
sys_pciconfig_iobase(long which, unsigned long bus, unsigned long dfn)
{
struct pci_controler *hose;
struct pci_dev *dev;
/* Special hook for ISA access. */
if (bus == 0 && dfn == 0) {
hose = pci_isa_hose;
} else {
dev = pci_find_slot(bus, dfn);
if (!dev)
return -ENODEV;
hose = dev->sysdata;
}
switch (which) {
case IOBASE_HOSE:
return hose->index;
case IOBASE_SPARSE_MEM:
return hose->sparse_mem_base;
case IOBASE_DENSE_MEM:
return hose->dense_mem_base;
case IOBASE_SPARSE_IO:
return hose->sparse_io_base;
case IOBASE_DENSE_IO:
return hose->dense_io_base;
}
return -EOPNOTSUPP;
}
...@@ -251,12 +251,9 @@ void ...@@ -251,12 +251,9 @@ void
flush_thread(void) flush_thread(void)
{ {
/* Arrange for each exec'ed process to start off with a clean slate /* Arrange for each exec'ed process to start off with a clean slate
with respect to the FPU. This is all exceptions disabled. Note with respect to the FPU. This is all exceptions disabled. */
that EV6 defines UNFD valid only with UNDZ, which we don't want
for IEEE conformance -- so that disabled bit remains in software. */
current->thread.flags &= ~IEEE_SW_MASK; current->thread.flags &= ~IEEE_SW_MASK;
wrfpcr(FPCR_DYN_NORMAL | FPCR_INVD | FPCR_DZED | FPCR_OVFD | FPCR_INED); wrfpcr(FPCR_DYN_NORMAL | ieee_swcr_to_fpcr(0));
} }
void void
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/fpu.h>
#include "proto.h" #include "proto.h"
...@@ -113,18 +114,30 @@ get_reg_addr(struct task_struct * task, unsigned long regno) ...@@ -113,18 +114,30 @@ get_reg_addr(struct task_struct * task, unsigned long regno)
/* /*
* Get contents of register REGNO in task TASK. * Get contents of register REGNO in task TASK.
*/ */
static inline long static long
get_reg(struct task_struct * task, unsigned long regno) get_reg(struct task_struct * task, unsigned long regno)
{ {
/* Special hack for fpcr -- combine hardware and software bits. */
if (regno == 63) {
unsigned long fpcr = *get_reg_addr(task, regno);
unsigned long swcr = task->thread.flags & IEEE_SW_MASK;
swcr = swcr_update_status(swcr, fpcr);
return fpcr | swcr;
}
return *get_reg_addr(task, regno); return *get_reg_addr(task, regno);
} }
/* /*
* Write contents of register REGNO in task TASK. * Write contents of register REGNO in task TASK.
*/ */
static inline int static int
put_reg(struct task_struct *task, unsigned long regno, long data) put_reg(struct task_struct *task, unsigned long regno, long data)
{ {
if (regno == 63) {
task->thread.flags = ((task->thread.flags & ~IEEE_SW_MASK)
| (data & IEEE_SW_MASK));
data = (data & FPCR_DYN_MASK) | ieee_swcr_to_fpcr(data);
}
*get_reg_addr(task, regno) = data; *get_reg_addr(task, regno) = data;
return 0; return 0;
} }
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "proto.h" #include "proto.h"
#include "irq_impl.h" #include "irq_impl.h"
#include "pci_impl.h"
#include "machvec_impl.h" #include "machvec_impl.h"
...@@ -123,6 +124,22 @@ jensen_init_irq(void) ...@@ -123,6 +124,22 @@ jensen_init_irq(void)
static void __init static void __init
jensen_init_arch(void) jensen_init_arch(void)
{ {
struct pci_controler *hose;
/* Create a hose so that we can report i/o base addresses to
userland. */
pci_isa_hose = hose = alloc_pci_controler();
hose->io_space = &ioport_resource;
hose->mem_space = &iomem_resource;
hose->index = 0;
hose->sparse_mem_base = EISA_MEM - IDENT_ADDR;
hose->dense_mem_base = 0;
hose->sparse_io_base = EISA_IO - IDENT_ADDR;
hose->dense_io_base = 0;
hose->sg_isa = hose->sg_pci = NULL;
__direct_map_base = 0; __direct_map_base = 0;
__direct_map_size = 0xffffffff; __direct_map_size = 0xffffffff;
} }
......
...@@ -160,8 +160,7 @@ alpha_fp_emul (unsigned long pc) ...@@ -160,8 +160,7 @@ alpha_fp_emul (unsigned long pc)
FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DR); FP_DECL_D(DA); FP_DECL_D(DB); FP_DECL_D(DR);
unsigned long fa, fb, fc, func, mode, src; unsigned long fa, fb, fc, func, mode, src;
unsigned long fpcw = current->thread.flags; unsigned long res, va, vb, vc, swcr, fpcr;
unsigned long res, va, vb, vc, fpcr;
__u32 insn; __u32 insn;
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
...@@ -175,6 +174,7 @@ alpha_fp_emul (unsigned long pc) ...@@ -175,6 +174,7 @@ alpha_fp_emul (unsigned long pc)
mode = (insn >> 11) & 0x3; mode = (insn >> 11) & 0x3;
fpcr = rdfpcr(); fpcr = rdfpcr();
swcr = swcr_update_status(current->thread.flags, fpcr);
if (mode == 3) { if (mode == 3) {
/* Dynamic -- get rounding mode from fpcr. */ /* Dynamic -- get rounding mode from fpcr. */
...@@ -231,9 +231,14 @@ alpha_fp_emul (unsigned long pc) ...@@ -231,9 +231,14 @@ alpha_fp_emul (unsigned long pc)
} }
FP_CMP_D(res, DA, DB, 3); FP_CMP_D(res, DA, DB, 3);
vc = 0x4000000000000000; vc = 0x4000000000000000;
/* CMPTEQ, CMPTUN don't trap on QNaN, while CMPTLT and CMPTLE do */ /* CMPTEQ, CMPTUN don't trap on QNaN,
if (res == 3 && ((func & 3) >= 2 || FP_ISSIGNAN_D(DA) || FP_ISSIGNAN_D(DB))) while CMPTLT and CMPTLE do */
if (res == 3
&& ((func & 3) >= 2
|| FP_ISSIGNAN_D(DA)
|| FP_ISSIGNAN_D(DB))) {
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
}
switch (func) { switch (func) {
case FOP_FNC_CMPxUN: if (res != 3) vc = 0; break; case FOP_FNC_CMPxUN: if (res != 3) vc = 0; break;
case FOP_FNC_CMPxEQ: if (res) vc = 0; break; case FOP_FNC_CMPxEQ: if (res) vc = 0; break;
...@@ -285,9 +290,11 @@ alpha_fp_emul (unsigned long pc) ...@@ -285,9 +290,11 @@ alpha_fp_emul (unsigned long pc)
} }
case FOP_FNC_CVTxQ: case FOP_FNC_CVTxQ:
if (DB_c == FP_CLS_NAN && (_FP_FRAC_HIGH_RAW_D(DB) & _FP_QNANBIT_D)) if (DB_c == FP_CLS_NAN
vc = 0; /* AAHB Table B-2 sais QNaN should not trigger INV */ && (_FP_FRAC_HIGH_RAW_D(DB) & _FP_QNANBIT_D)) {
else /* AAHB Table B-2 says QNaN should not trigger INV */
vc = 0;
} else
FP_TO_INT_ROUND_D(vc, DB, 64, 2); FP_TO_INT_ROUND_D(vc, DB, 64, 2);
goto done_d; goto done_d;
} }
...@@ -321,11 +328,15 @@ alpha_fp_emul (unsigned long pc) ...@@ -321,11 +328,15 @@ alpha_fp_emul (unsigned long pc)
pack_s: pack_s:
FP_PACK_SP(&vc, SR); FP_PACK_SP(&vc, SR);
if ((_fex & FP_EX_UNDERFLOW) && (swcr & IEEE_MAP_UMZ))
vc = 0;
alpha_write_fp_reg_s(fc, vc); alpha_write_fp_reg_s(fc, vc);
goto done; goto done;
pack_d: pack_d:
FP_PACK_DP(&vc, DR); FP_PACK_DP(&vc, DR);
if ((_fex & FP_EX_UNDERFLOW) && (swcr & IEEE_MAP_UMZ))
vc = 0;
done_d: done_d:
alpha_write_fp_reg(fc, vc); alpha_write_fp_reg(fc, vc);
goto done; goto done;
...@@ -345,16 +356,16 @@ alpha_fp_emul (unsigned long pc) ...@@ -345,16 +356,16 @@ alpha_fp_emul (unsigned long pc)
done: done:
if (_fex) { if (_fex) {
/* Record exceptions in software control word. */ /* Record exceptions in software control word. */
current->thread.flags swcr |= (_fex << IEEE_STATUS_TO_EXCSUM_SHIFT);
= fpcw |= (_fex << IEEE_STATUS_TO_EXCSUM_SHIFT); current->thread.flags |= (_fex << IEEE_STATUS_TO_EXCSUM_SHIFT);
/* Update hardware control register */ /* Update hardware control register. */
fpcr &= (~FPCR_MASK | FPCR_DYN_MASK); fpcr &= (~FPCR_MASK | FPCR_DYN_MASK);
fpcr |= ieee_swcr_to_fpcr(fpcw); fpcr |= ieee_swcr_to_fpcr(swcr);
wrfpcr(fpcr); wrfpcr(fpcr);
/* Do we generate a signal? */ /* Do we generate a signal? */
if (_fex & fpcw & IEEE_TRAP_ENABLE_MASK) { if (_fex & swcr & IEEE_TRAP_ENABLE_MASK) {
MOD_DEC_USE_COUNT; MOD_DEC_USE_COUNT;
return 0; return 0;
} }
...@@ -378,7 +389,7 @@ long ...@@ -378,7 +389,7 @@ long
alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask) alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask)
{ {
unsigned long trigger_pc = regs->pc - 4; unsigned long trigger_pc = regs->pc - 4;
unsigned long insn, opcode, rc; unsigned long insn, opcode, rc, no_signal = 0;
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
...@@ -402,15 +413,13 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask) ...@@ -402,15 +413,13 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask)
case OPC_PAL: case OPC_PAL:
case OPC_JSR: case OPC_JSR:
case 0x30 ... 0x3f: /* branches */ case 0x30 ... 0x3f: /* branches */
MOD_DEC_USE_COUNT; goto egress;
return 0;
case OPC_MISC: case OPC_MISC:
switch (insn & 0xffff) { switch (insn & 0xffff) {
case MISC_TRAPB: case MISC_TRAPB:
case MISC_EXCB: case MISC_EXCB:
MOD_DEC_USE_COUNT; goto egress;
return 0;
default: default:
break; break;
...@@ -432,16 +441,15 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask) ...@@ -432,16 +441,15 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask)
break; break;
} }
if (!write_mask) { if (!write_mask) {
if (alpha_fp_emul(trigger_pc)) { /* Re-execute insns in the trap-shadow. */
/* re-execute insns in trap-shadow: */
regs->pc = trigger_pc + 4; regs->pc = trigger_pc + 4;
MOD_DEC_USE_COUNT; no_signal = alpha_fp_emul(trigger_pc);
return 1; goto egress;
}
break;
} }
trigger_pc -= 4; trigger_pc -= 4;
} }
egress:
MOD_DEC_USE_COUNT; MOD_DEC_USE_COUNT;
return 0; return no_signal;
} }
...@@ -324,6 +324,7 @@ CONFIG_NET_ETHERNET=y ...@@ -324,6 +324,7 @@ CONFIG_NET_ETHERNET=y
# CONFIG_NET_ISA is not set # CONFIG_NET_ISA is not set
CONFIG_NET_PCI=y CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set # CONFIG_PCNET32 is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_APRICOT is not set # CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set # CONFIG_CS89x0 is not set
# CONFIG_DE4X5 is not set # CONFIG_DE4X5 is not set
...@@ -375,6 +376,7 @@ CONFIG_PCMCIA_PCNET=y ...@@ -375,6 +376,7 @@ CONFIG_PCMCIA_PCNET=y
# CONFIG_PCMCIA_XIRC2PS is not set # CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_ARCNET_COM20020_CS is not set # CONFIG_ARCNET_COM20020_CS is not set
# CONFIG_PCMCIA_3C575 is not set # CONFIG_PCMCIA_3C575 is not set
# CONFIG_PCMCIA_XIRTULIP is not set
CONFIG_NET_PCMCIA_RADIO=y CONFIG_NET_PCMCIA_RADIO=y
CONFIG_PCMCIA_RAYCS=y CONFIG_PCMCIA_RAYCS=y
# CONFIG_PCMCIA_NETWAVE is not set # CONFIG_PCMCIA_NETWAVE is not set
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/autoconf.h>
#include <asm/bcache.h> #include <asm/bcache.h>
#include <asm/sgi/sgimc.h> #include <asm/sgi/sgimc.h>
......
# #
# Automatically generated by make menuconfig: don't edit # Automatically generated make config: don't edit
# #
# CONFIG_UID16 is not set # CONFIG_UID16 is not set
...@@ -33,6 +33,7 @@ CONFIG_KMOD=y ...@@ -33,6 +33,7 @@ CONFIG_KMOD=y
# #
# General setup # General setup
# #
# CONFIG_PCI is not set
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_NET=y CONFIG_NET=y
...@@ -56,7 +57,6 @@ CONFIG_FB_COMPAT_XPMAC=y ...@@ -56,7 +57,6 @@ CONFIG_FB_COMPAT_XPMAC=y
CONFIG_PMAC_PBOOK=y CONFIG_PMAC_PBOOK=y
CONFIG_MAC_FLOPPY=y CONFIG_MAC_FLOPPY=y
CONFIG_MAC_SERIAL=y CONFIG_MAC_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set
CONFIG_ADB=y CONFIG_ADB=y
CONFIG_ADB_CUDA=y CONFIG_ADB_CUDA=y
CONFIG_ADB_MACIO=y CONFIG_ADB_MACIO=y
...@@ -73,49 +73,23 @@ CONFIG_BOOTX_TEXT=y ...@@ -73,49 +73,23 @@ CONFIG_BOOTX_TEXT=y
# Plug and Play configuration # Plug and Play configuration
# #
# CONFIG_PNP is not set # CONFIG_PNP is not set
# CONFIG_ISAPNP is not set
# #
# Block devices # Block devices
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_IDE=y # CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set
# CONFIG_BLK_DEV_IDECS is not set
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=y
CONFIG_BLK_DEV_IDESCSI=y
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_IDEDMA_PCI is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_AEC6210 is not set
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_SL82C105=y
CONFIG_BLK_DEV_IDE_PMAC=y
CONFIG_BLK_DEV_IDEDMA_PMAC=y
CONFIG_IDEDMA_PMAC_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y
# CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
#
# Additional Block Devices
#
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_PARIDE is not set
CONFIG_BLK_DEV_IDE_MODES=y
# CONFIG_BLK_DEV_HD is not set
# #
# Networking options # Networking options
...@@ -138,10 +112,18 @@ CONFIG_IP_MULTICAST=y ...@@ -138,10 +112,18 @@ CONFIG_IP_MULTICAST=y
# CONFIG_IP_MROUTE is not set # CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y CONFIG_IP_ALIAS=y
CONFIG_SYN_COOKIES=y CONFIG_SYN_COOKIES=y
#
# (it is safe to leave these untouched)
#
CONFIG_SKB_LARGE=y CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set # CONFIG_KHTTPD is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
#
#
#
# CONFIG_IPX is not set # CONFIG_IPX is not set
CONFIG_ATALK=m CONFIG_ATALK=m
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
...@@ -159,18 +141,72 @@ CONFIG_ATALK=m ...@@ -159,18 +141,72 @@ CONFIG_ATALK=m
# #
# CONFIG_NET_SCHED is not set # CONFIG_NET_SCHED is not set
#
# ATA/IDE/MFM/RLL support
#
CONFIG_IDE=y
#
# IDE, ATA and ATAPI Block devices
#
CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_IDE is not set
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
CONFIG_BLK_DEV_IDESCSI=y
#
# IDE chipset support/bugfixes
#
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_IDEDMA_PCI is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_IDEDMA is not set
CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
# CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_SL82C105 is not set
CONFIG_BLK_DEV_IDE_PMAC=y
CONFIG_BLK_DEV_IDEDMA_PMAC=y
CONFIG_IDEDMA_PMAC_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDE_CHIPSETS is not set
CONFIG_IDEDMA_AUTO=y
CONFIG_BLK_DEV_IDE_MODES=y
# #
# SCSI support # SCSI support
# #
CONFIG_SCSI=y CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40 CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
CONFIG_ST_EXTRA_DEVS=2
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_SR_EXTRA_DEVS=2 CONFIG_SR_EXTRA_DEVS=2
CONFIG_CHR_DEV_SG=y CONFIG_CHR_DEV_SG=y
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_DEBUG_QUEUES is not set # CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_CONSTANTS=y
...@@ -254,9 +290,7 @@ CONFIG_NETDEVICES=y ...@@ -254,9 +290,7 @@ CONFIG_NETDEVICES=y
# #
# Appletalk devices # Appletalk devices
# #
# CONFIG_LTPC is not set # CONFIG_APPLETALK is not set
# CONFIG_COPS is not set
# CONFIG_IPDDP is not set
# CONFIG_DUMMY is not set # CONFIG_DUMMY is not set
# CONFIG_BONDING is not set # CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
...@@ -449,17 +483,28 @@ CONFIG_NVRAM=y ...@@ -449,17 +483,28 @@ CONFIG_NVRAM=y
# #
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
# CONFIG_DRM is not set # CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_AGP is not set # CONFIG_AGP is not set
# #
# USB support # USB support
# #
CONFIG_USB=y CONFIG_USB=y
#
# USB Controllers
#
# CONFIG_USB_UHCI is not set # CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set # CONFIG_USB_UHCI_ALT is not set
CONFIG_USB_OHCI=y CONFIG_USB_OHCI=y
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not set # CONFIG_USB_DEVICEFS is not set
#
# USB Devices
#
# CONFIG_USB_PRINTER is not set # CONFIG_USB_PRINTER is not set
# CONFIG_USB_SCANNER is not set # CONFIG_USB_SCANNER is not set
# CONFIG_USB_AUDIO is not set # CONFIG_USB_AUDIO is not set
...@@ -470,11 +515,15 @@ CONFIG_USB_OHCI=y ...@@ -470,11 +515,15 @@ CONFIG_USB_OHCI=y
# CONFIG_USB_OV511 is not set # CONFIG_USB_OV511 is not set
# CONFIG_USB_DC2XX is not set # CONFIG_USB_DC2XX is not set
# CONFIG_USB_STORAGE is not set # CONFIG_USB_STORAGE is not set
# CONFIG_USB_USS720 is not set
# CONFIG_USB_DABUSB is not set # CONFIG_USB_DABUSB is not set
# CONFIG_USB_PLUSB is not set # CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set # CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RIO500 is not set # CONFIG_USB_RIO500 is not set
# CONFIG_USB_DSBR is not set
#
# USB HID
#
# CONFIG_USB_HID is not set # CONFIG_USB_HID is not set
CONFIG_USB_KBD=y CONFIG_USB_KBD=y
CONFIG_USB_MOUSE=y CONFIG_USB_MOUSE=y
...@@ -510,7 +559,6 @@ CONFIG_ISO9660_FS=y ...@@ -510,7 +559,6 @@ CONFIG_ISO9660_FS=y
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
...@@ -524,7 +572,6 @@ CONFIG_EXT2_FS=y ...@@ -524,7 +572,6 @@ CONFIG_EXT2_FS=y
# #
# CONFIG_CODA_FS is not set # CONFIG_CODA_FS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
# CONFIG_ROOT_NFS is not set
CONFIG_NFSD=y CONFIG_NFSD=y
# CONFIG_NFSD_V3 is not set # CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y CONFIG_SUNRPC=y
...@@ -596,8 +643,12 @@ CONFIG_DMASOUND=y ...@@ -596,8 +643,12 @@ CONFIG_DMASOUND=y
# CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_OSS=y CONFIG_SOUND_OSS=y
# CONFIG_SOUND_TRACEINIT is not set
# CONFIG_SOUND_DMAP is not set
# CONFIG_SOUND_AD1816 is not set # CONFIG_SOUND_AD1816 is not set
# CONFIG_SOUND_SGALAXY is not set # CONFIG_SOUND_SGALAXY is not set
# CONFIG_SOUND_ADLIB is not set
# CONFIG_SOUND_ACI_MIXER is not set
CONFIG_SOUND_CS4232=m CONFIG_SOUND_CS4232=m
# CONFIG_SOUND_SSCAPE is not set # CONFIG_SOUND_SSCAPE is not set
# CONFIG_SOUND_GUS is not set # CONFIG_SOUND_GUS is not set
...@@ -608,11 +659,10 @@ CONFIG_SOUND_CS4232=m ...@@ -608,11 +659,10 @@ CONFIG_SOUND_CS4232=m
# CONFIG_SOUND_NM256 is not set # CONFIG_SOUND_NM256 is not set
# CONFIG_SOUND_MAD16 is not set # CONFIG_SOUND_MAD16 is not set
# CONFIG_SOUND_PAS is not set # CONFIG_SOUND_PAS is not set
# CONFIG_PAS_JOYSTICK is not set
# CONFIG_SOUND_PSS is not set # CONFIG_SOUND_PSS is not set
# CONFIG_PSS_HAVE_BOOT is not set
# CONFIG_SOUND_SOFTOSS is not set # CONFIG_SOUND_SOFTOSS is not set
# CONFIG_SOUND_SB is not set # CONFIG_SOUND_SB is not set
# CONFIG_SOUND_AWE32_SYNTH is not set
# CONFIG_SOUND_WAVEFRONT is not set # CONFIG_SOUND_WAVEFRONT is not set
# CONFIG_SOUND_MAUI is not set # CONFIG_SOUND_MAUI is not set
# CONFIG_SOUND_VIA82CXXX is not set # CONFIG_SOUND_VIA82CXXX is not set
...@@ -620,11 +670,7 @@ CONFIG_SOUND_CS4232=m ...@@ -620,11 +670,7 @@ CONFIG_SOUND_CS4232=m
# CONFIG_SOUND_OPL3SA1 is not set # CONFIG_SOUND_OPL3SA1 is not set
# CONFIG_SOUND_OPL3SA2 is not set # CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_UART6850 is not set # CONFIG_SOUND_UART6850 is not set
# CONFIG_SOUND_AEDSP16 is not set
#
# Additional low level sound drivers
#
# CONFIG_LOWLEVEL_SOUND is not set
# #
# Kernel hacking # Kernel hacking
......
# #
# Automatically generated by make menuconfig: don't edit # Automatically generated make config: don't edit
# #
# CONFIG_UID16 is not set # CONFIG_UID16 is not set
...@@ -33,6 +33,7 @@ CONFIG_KMOD=y ...@@ -33,6 +33,7 @@ CONFIG_KMOD=y
# #
# General setup # General setup
# #
# CONFIG_PCI is not set
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_NET=y CONFIG_NET=y
...@@ -56,7 +57,6 @@ CONFIG_FB_COMPAT_XPMAC=y ...@@ -56,7 +57,6 @@ CONFIG_FB_COMPAT_XPMAC=y
CONFIG_PMAC_PBOOK=y CONFIG_PMAC_PBOOK=y
CONFIG_MAC_FLOPPY=y CONFIG_MAC_FLOPPY=y
CONFIG_MAC_SERIAL=y CONFIG_MAC_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set
CONFIG_ADB=y CONFIG_ADB=y
CONFIG_ADB_CUDA=y CONFIG_ADB_CUDA=y
CONFIG_ADB_MACIO=y CONFIG_ADB_MACIO=y
...@@ -73,21 +73,23 @@ CONFIG_BOOTX_TEXT=y ...@@ -73,21 +73,23 @@ CONFIG_BOOTX_TEXT=y
# Plug and Play configuration # Plug and Play configuration
# #
# CONFIG_PNP is not set # CONFIG_PNP is not set
# CONFIG_ISAPNP is not set
# #
# Block devices # Block devices
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
#
# Additional Block Devices
#
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_PARIDE is not set
# #
# Networking options # Networking options
...@@ -110,10 +112,18 @@ CONFIG_IP_MULTICAST=y ...@@ -110,10 +112,18 @@ CONFIG_IP_MULTICAST=y
# CONFIG_IP_MROUTE is not set # CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y CONFIG_IP_ALIAS=y
CONFIG_SYN_COOKIES=y CONFIG_SYN_COOKIES=y
#
# (it is safe to leave these untouched)
#
CONFIG_SKB_LARGE=y CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set # CONFIG_KHTTPD is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
#
#
#
# CONFIG_IPX is not set # CONFIG_IPX is not set
CONFIG_ATALK=m CONFIG_ATALK=m
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
...@@ -135,48 +145,68 @@ CONFIG_ATALK=m ...@@ -135,48 +145,68 @@ CONFIG_ATALK=m
# ATA/IDE/MFM/RLL support # ATA/IDE/MFM/RLL support
# #
CONFIG_IDE=y CONFIG_IDE=y
#
# IDE, ATA and ATAPI Block devices
#
CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD_IDE is not set
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=y CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_IDEDISK_MULTI_MODE is not set
# CONFIG_BLK_DEV_IDECS is not set
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=y # CONFIG_BLK_DEV_IDEFLOPPY is not set
CONFIG_BLK_DEV_IDESCSI=y CONFIG_BLK_DEV_IDESCSI=y
#
# IDE chipset support/bugfixes
#
# CONFIG_BLK_DEV_CMD640 is not set # CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_RZ1000 is not set # CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEPCI=y CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set # CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_IDEDMA_PCI is not set # CONFIG_BLK_DEV_IDEDMA_PCI is not set
# CONFIG_BLK_DEV_OFFBOARD is not set # CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_AEC6210 is not set # CONFIG_BLK_DEV_IDEDMA is not set
# CONFIG_BLK_DEV_CMD64X is not set CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
# CONFIG_BLK_DEV_CS5530 is not set # CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set # CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_SL82C105=y # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_SL82C105 is not set
CONFIG_BLK_DEV_IDE_PMAC=y CONFIG_BLK_DEV_IDE_PMAC=y
CONFIG_BLK_DEV_IDEDMA_PMAC=y CONFIG_BLK_DEV_IDEDMA_PMAC=y
CONFIG_IDEDMA_PMAC_AUTO=y CONFIG_IDEDMA_PMAC_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
CONFIG_IDEDMA_AUTO=y
CONFIG_BLK_DEV_IDE_MODES=y CONFIG_BLK_DEV_IDE_MODES=y
# CONFIG_BLK_DEV_HD is not set
# #
# SCSI support # SCSI support
# #
CONFIG_SCSI=y CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40 CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
CONFIG_ST_EXTRA_DEVS=2
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_SR_EXTRA_DEVS=2 CONFIG_SR_EXTRA_DEVS=2
CONFIG_CHR_DEV_SG=y CONFIG_CHR_DEV_SG=y
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_DEBUG_QUEUES is not set # CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_CONSTANTS=y
...@@ -260,9 +290,7 @@ CONFIG_NETDEVICES=y ...@@ -260,9 +290,7 @@ CONFIG_NETDEVICES=y
# #
# Appletalk devices # Appletalk devices
# #
# CONFIG_LTPC is not set # CONFIG_APPLETALK is not set
# CONFIG_COPS is not set
# CONFIG_IPDDP is not set
# CONFIG_DUMMY is not set # CONFIG_DUMMY is not set
# CONFIG_BONDING is not set # CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
...@@ -455,17 +483,28 @@ CONFIG_NVRAM=y ...@@ -455,17 +483,28 @@ CONFIG_NVRAM=y
# #
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
# CONFIG_DRM is not set # CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_AGP is not set # CONFIG_AGP is not set
# #
# USB support # USB support
# #
CONFIG_USB=y CONFIG_USB=y
#
# USB Controllers
#
# CONFIG_USB_UHCI is not set # CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set # CONFIG_USB_UHCI_ALT is not set
CONFIG_USB_OHCI=y CONFIG_USB_OHCI=y
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not set # CONFIG_USB_DEVICEFS is not set
#
# USB Devices
#
# CONFIG_USB_PRINTER is not set # CONFIG_USB_PRINTER is not set
# CONFIG_USB_SCANNER is not set # CONFIG_USB_SCANNER is not set
# CONFIG_USB_AUDIO is not set # CONFIG_USB_AUDIO is not set
...@@ -476,11 +515,15 @@ CONFIG_USB_OHCI=y ...@@ -476,11 +515,15 @@ CONFIG_USB_OHCI=y
# CONFIG_USB_OV511 is not set # CONFIG_USB_OV511 is not set
# CONFIG_USB_DC2XX is not set # CONFIG_USB_DC2XX is not set
# CONFIG_USB_STORAGE is not set # CONFIG_USB_STORAGE is not set
# CONFIG_USB_USS720 is not set
# CONFIG_USB_DABUSB is not set # CONFIG_USB_DABUSB is not set
# CONFIG_USB_PLUSB is not set # CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set # CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RIO500 is not set # CONFIG_USB_RIO500 is not set
# CONFIG_USB_DSBR is not set
#
# USB HID
#
# CONFIG_USB_HID is not set # CONFIG_USB_HID is not set
CONFIG_USB_KBD=y CONFIG_USB_KBD=y
CONFIG_USB_MOUSE=y CONFIG_USB_MOUSE=y
...@@ -516,7 +559,6 @@ CONFIG_ISO9660_FS=y ...@@ -516,7 +559,6 @@ CONFIG_ISO9660_FS=y
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
...@@ -530,7 +572,6 @@ CONFIG_EXT2_FS=y ...@@ -530,7 +572,6 @@ CONFIG_EXT2_FS=y
# #
# CONFIG_CODA_FS is not set # CONFIG_CODA_FS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
# CONFIG_ROOT_NFS is not set
CONFIG_NFSD=y CONFIG_NFSD=y
# CONFIG_NFSD_V3 is not set # CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y CONFIG_SUNRPC=y
...@@ -602,8 +643,12 @@ CONFIG_DMASOUND=y ...@@ -602,8 +643,12 @@ CONFIG_DMASOUND=y
# CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_OSS=y CONFIG_SOUND_OSS=y
# CONFIG_SOUND_TRACEINIT is not set
# CONFIG_SOUND_DMAP is not set
# CONFIG_SOUND_AD1816 is not set # CONFIG_SOUND_AD1816 is not set
# CONFIG_SOUND_SGALAXY is not set # CONFIG_SOUND_SGALAXY is not set
# CONFIG_SOUND_ADLIB is not set
# CONFIG_SOUND_ACI_MIXER is not set
CONFIG_SOUND_CS4232=m CONFIG_SOUND_CS4232=m
# CONFIG_SOUND_SSCAPE is not set # CONFIG_SOUND_SSCAPE is not set
# CONFIG_SOUND_GUS is not set # CONFIG_SOUND_GUS is not set
...@@ -614,11 +659,10 @@ CONFIG_SOUND_CS4232=m ...@@ -614,11 +659,10 @@ CONFIG_SOUND_CS4232=m
# CONFIG_SOUND_NM256 is not set # CONFIG_SOUND_NM256 is not set
# CONFIG_SOUND_MAD16 is not set # CONFIG_SOUND_MAD16 is not set
# CONFIG_SOUND_PAS is not set # CONFIG_SOUND_PAS is not set
# CONFIG_PAS_JOYSTICK is not set
# CONFIG_SOUND_PSS is not set # CONFIG_SOUND_PSS is not set
# CONFIG_PSS_HAVE_BOOT is not set
# CONFIG_SOUND_SOFTOSS is not set # CONFIG_SOUND_SOFTOSS is not set
# CONFIG_SOUND_SB is not set # CONFIG_SOUND_SB is not set
# CONFIG_SOUND_AWE32_SYNTH is not set
# CONFIG_SOUND_WAVEFRONT is not set # CONFIG_SOUND_WAVEFRONT is not set
# CONFIG_SOUND_MAUI is not set # CONFIG_SOUND_MAUI is not set
# CONFIG_SOUND_VIA82CXXX is not set # CONFIG_SOUND_VIA82CXXX is not set
...@@ -626,11 +670,7 @@ CONFIG_SOUND_CS4232=m ...@@ -626,11 +670,7 @@ CONFIG_SOUND_CS4232=m
# CONFIG_SOUND_OPL3SA1 is not set # CONFIG_SOUND_OPL3SA1 is not set
# CONFIG_SOUND_OPL3SA2 is not set # CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_UART6850 is not set # CONFIG_SOUND_UART6850 is not set
# CONFIG_SOUND_AEDSP16 is not set
#
# Additional low level sound drivers
#
# CONFIG_LOWLEVEL_SOUND is not set
# #
# Kernel hacking # Kernel hacking
......
...@@ -190,7 +190,7 @@ static int lo_send(struct loop_device *lo, char *data, int len, loff_t pos, ...@@ -190,7 +190,7 @@ static int lo_send(struct loop_device *lo, char *data, int len, loff_t pos,
page = grab_cache_page(mapping, index); page = grab_cache_page(mapping, index);
if (!page) if (!page)
goto fail; goto fail;
if (aops->prepare_write(page, offset, offset+size)) if (aops->prepare_write(file, page, offset, offset+size))
goto unlock; goto unlock;
kaddr = (char*)page_address(page); kaddr = (char*)page_address(page);
if ((lo->transfer)(lo, WRITE, kaddr+offset, data, size, IV)) if ((lo->transfer)(lo, WRITE, kaddr+offset, data, size, IV))
......
...@@ -336,6 +336,9 @@ int pi_init(PIA *pi, int autoprobe, int port, int mode, ...@@ -336,6 +336,9 @@ int pi_init(PIA *pi, int autoprobe, int port, int mode,
s = protocol; e = s+1; s = protocol; e = s+1;
if (!protocols[0])
request_module ("paride_protocol");
if (autoprobe) { if (autoprobe) {
s = 0; s = 0;
e = MAX_PROTOS; e = MAX_PROTOS;
......
...@@ -37,8 +37,10 @@ ...@@ -37,8 +37,10 @@
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/spinlock.h>
static int acq_is_open=0; static int acq_is_open=0;
static spinlock_t acq_lock;
/* /*
* You must set these - there is no sane way to probe for this board. * You must set these - there is no sane way to probe for this board.
...@@ -117,8 +119,12 @@ static int acq_open(struct inode *inode, struct file *file) ...@@ -117,8 +119,12 @@ static int acq_open(struct inode *inode, struct file *file)
switch(MINOR(inode->i_rdev)) switch(MINOR(inode->i_rdev))
{ {
case WATCHDOG_MINOR: case WATCHDOG_MINOR:
spin_lock(&acq_lock);
if(acq_is_open) if(acq_is_open)
{
spin_unlock(&acq_lock);
return -EBUSY; return -EBUSY;
}
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
/* /*
* Activate * Activate
...@@ -126,6 +132,7 @@ static int acq_open(struct inode *inode, struct file *file) ...@@ -126,6 +132,7 @@ static int acq_open(struct inode *inode, struct file *file)
acq_is_open=1; acq_is_open=1;
inb_p(WDT_START); inb_p(WDT_START);
spin_unlock(&acq_lock);
return 0; return 0;
default: default:
return -ENODEV; return -ENODEV;
...@@ -136,10 +143,12 @@ static int acq_close(struct inode *inode, struct file *file) ...@@ -136,10 +143,12 @@ static int acq_close(struct inode *inode, struct file *file)
{ {
if(MINOR(inode->i_rdev)==WATCHDOG_MINOR) if(MINOR(inode->i_rdev)==WATCHDOG_MINOR)
{ {
spin_lock(&acq_lock);
#ifndef CONFIG_WATCHDOG_NOWAYOUT #ifndef CONFIG_WATCHDOG_NOWAYOUT
inb_p(WDT_STOP); inb_p(WDT_STOP);
#endif #endif
acq_is_open=0; acq_is_open=0;
spin_unlock(&acq_lock);
} }
MOD_DEC_USE_COUNT; MOD_DEC_USE_COUNT;
return 0; return 0;
...@@ -211,6 +220,7 @@ int __init acq_init(void) ...@@ -211,6 +220,7 @@ int __init acq_init(void)
{ {
printk("WDT driver for Acquire single board computer initialising.\n"); printk("WDT driver for Acquire single board computer initialising.\n");
spin_lock_init(acq_lock);
misc_register(&acq_miscdev); misc_register(&acq_miscdev);
request_region(WDT_STOP, 1, "Acquire WDT"); request_region(WDT_STOP, 1, "Acquire WDT");
request_region(WDT_START, 1, "Acquire WDT"); request_region(WDT_START, 1, "Acquire WDT");
......
...@@ -162,6 +162,10 @@ static int release_mouse(struct inode * inode, struct file * file) ...@@ -162,6 +162,10 @@ static int release_mouse(struct inode * inode, struct file * file)
static int open_mouse(struct inode * inode, struct file * file) static int open_mouse(struct inode * inode, struct file * file)
{ {
/* Lock module first - request_irq might sleep */
MOD_INC_USE_COUNT;
/* /*
* use VBL to poll mouse deltas * use VBL to poll mouse deltas
*/ */
...@@ -169,10 +173,10 @@ static int open_mouse(struct inode * inode, struct file * file) ...@@ -169,10 +173,10 @@ static int open_mouse(struct inode * inode, struct file * file)
if(request_irq(IRQ_AMIGA_VERTB, mouse_interrupt, 0, if(request_irq(IRQ_AMIGA_VERTB, mouse_interrupt, 0,
"Amiga mouse", mouse_interrupt)) { "Amiga mouse", mouse_interrupt)) {
printk(KERN_INFO "Installing Amiga mouse failed.\n"); printk(KERN_INFO "Installing Amiga mouse failed.\n");
MOD_DEC_USE_COUNT;
return -EIO; return -EIO;
} }
MOD_INC_USE_COUNT;
#if AMIGA_OLD_INT #if AMIGA_OLD_INT
AMI_MSE_INT_ON(); AMI_MSE_INT_ON();
#endif #endif
......
This diff is collapsed.
...@@ -92,10 +92,14 @@ static int release_mouse(struct inode * inode, struct file * file) ...@@ -92,10 +92,14 @@ static int release_mouse(struct inode * inode, struct file * file)
static int open_mouse(struct inode * inode, struct file * file) static int open_mouse(struct inode * inode, struct file * file)
{ {
/* Lock module as request_irq may sleep */
MOD_INC_USE_COUNT;
if (request_irq(ATIXL_MOUSE_IRQ, mouse_interrupt, 0, "ATIXL mouse", NULL)) if (request_irq(ATIXL_MOUSE_IRQ, mouse_interrupt, 0, "ATIXL mouse", NULL))
{
MOD_DEC_USE_COUNT;
return -EBUSY; return -EBUSY;
}
ATIXL_MSE_INT_ON(); /* Interrupts are really enabled here */ ATIXL_MSE_INT_ON(); /* Interrupts are really enabled here */
MOD_INC_USE_COUNT;
return 0; return 0;
} }
...@@ -107,7 +111,13 @@ static int __init atixl_busmouse_init(void) ...@@ -107,7 +111,13 @@ static int __init atixl_busmouse_init(void)
{ {
unsigned char a,b,c; unsigned char a,b,c;
if (check_region(ATIXL_MSE_DATA_PORT, 3)) /*
* We must request the resource and claim it atomically
* nowdays. We can throw it away on error. Otherwise we
* may race another module load of the same I/O
*/
if (request_region(ATIXL_MSE_DATA_PORT, 3))
return -EIO; return -EIO;
a = inb( ATIXL_MSE_SIGNATURE_PORT ); /* Get signature */ a = inb( ATIXL_MSE_SIGNATURE_PORT ); /* Get signature */
...@@ -116,16 +126,20 @@ static int __init atixl_busmouse_init(void) ...@@ -116,16 +126,20 @@ static int __init atixl_busmouse_init(void)
if (( a != b ) && ( a == c )) if (( a != b ) && ( a == c ))
printk(KERN_INFO "\nATI Inport "); printk(KERN_INFO "\nATI Inport ");
else else
{
free_region(ATIXL_MSE_DATA_PORT,3);
return -EIO; return -EIO;
}
outb(0x80, ATIXL_MSE_CONTROL_PORT); /* Reset the Inport device */ outb(0x80, ATIXL_MSE_CONTROL_PORT); /* Reset the Inport device */
outb(0x07, ATIXL_MSE_CONTROL_PORT); /* Select Internal Register 7 */ outb(0x07, ATIXL_MSE_CONTROL_PORT); /* Select Internal Register 7 */
outb(0x0a, ATIXL_MSE_DATA_PORT); /* Data Interrupts 8+, 1=30hz, 2=50hz, 3=100hz, 4=200hz rate */ outb(0x0a, ATIXL_MSE_DATA_PORT); /* Data Interrupts 8+, 1=30hz, 2=50hz, 3=100hz, 4=200hz rate */
request_region(ATIXL_MSE_DATA_PORT, 3, "atixl");
msedev = register_busmouse(&atixlmouse); msedev = register_busmouse(&atixlmouse);
if (msedev < 0) if (msedev < 0)
{
printk("Bus mouse initialisation error.\n"); printk("Bus mouse initialisation error.\n");
free_region(ATIXL_MSE_DATA_PORT,3); /* Was missing */
}
else else
printk("Bus mouse detected and installed.\n"); printk("Bus mouse detected and installed.\n");
return msedev < 0 ? msedev : 0; return msedev < 0 ? msedev : 0;
......
This diff is collapsed.
...@@ -2278,9 +2278,6 @@ void __init tty_init(void) ...@@ -2278,9 +2278,6 @@ void __init tty_init(void)
#ifdef CONFIG_ESPSERIAL /* init ESP before rs, so rs doesn't see the port */ #ifdef CONFIG_ESPSERIAL /* init ESP before rs, so rs doesn't see the port */
espserial_init(); espserial_init();
#endif #endif
#ifdef CONFIG_SERIAL
rs_init();
#endif
#if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC) #if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
vme_scc_init(); vme_scc_init();
#endif #endif
......
...@@ -159,10 +159,6 @@ static int wdt_status(void) ...@@ -159,10 +159,6 @@ static int wdt_status(void)
* Handle an interrupt from the board. These are raised when the status * Handle an interrupt from the board. These are raised when the status
* map changes in what the board considers an interesting way. That means * map changes in what the board considers an interesting way. That means
* a failure condition occuring. * a failure condition occuring.
*
* FIXME: We need to pass a dev_id as the PCI card can share irqs
* although its arguably a _very_ dumb idea to share watchdog
* irq lines
*/ */
void wdt_interrupt(int irq, void *dev_id, struct pt_regs *regs) void wdt_interrupt(int irq, void *dev_id, struct pt_regs *regs)
...@@ -494,7 +490,7 @@ void cleanup_module(void) ...@@ -494,7 +490,7 @@ void cleanup_module(void)
int __init wdt_init(void) int __init wdt_init(void)
{ {
printk(KERN_INFO "WDT500/501-P driver 0.07 at %X (Interrupt %d)\n", io,irq); printk(KERN_INFO "WDT500/501-P driver 0.07 at %X (Interrupt %d)\n", io,irq);
if(request_irq(irq, wdt_interrupt, SA_INTERRUPT, "wdt501p", NULL)) if(request_irq(irq, wdt_interrupt, SA_INTERRUPT, "wdt501p", &wdt_miscdev))
{ {
printk(KERN_ERR "IRQ %d is not free.\n", irq); printk(KERN_ERR "IRQ %d is not free.\n", irq);
return -EIO; return -EIO;
......
...@@ -581,7 +581,7 @@ int i2c_pcf_del_bus(struct i2c_adapter *adap) ...@@ -581,7 +581,7 @@ int i2c_pcf_del_bus(struct i2c_adapter *adap)
return 0; return 0;
} }
static int __init i2c_algo_pcf_init (void) int __init i2c_algo_pcf_init (void)
{ {
printk("i2c-algo-pcf.o: i2c pcf8584 algorithm module\n"); printk("i2c-algo-pcf.o: i2c pcf8584 algorithm module\n");
return 0; return 0;
......
...@@ -107,16 +107,16 @@ static __inline__ char * find_udma_mode (byte cycle_time) ...@@ -107,16 +107,16 @@ static __inline__ char * find_udma_mode (byte cycle_time)
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
static int sis_get_info(char *, char **, off_t, int); static int __init sis_get_info(char *, char **, off_t, int);
extern int (*sis_display_info)(char *, char **, off_t, int); /* ide-proc.c */ extern int (*sis_display_info)(char *, char **, off_t, int); /* ide-proc.c */
struct pci_dev *bmide_dev; struct pci_dev *bmide_dev;
static char *cable_type[] = { static char *cable_type[] __initdata = {
"80 pins", "80 pins",
"40 pins" "40 pins"
}; };
static char *recovery_time [] ={ static char *recovery_time [] __initdata ={
"12 PCICLK", "1 PCICLK", "12 PCICLK", "1 PCICLK",
"2 PCICLK", "3 PCICLK", "2 PCICLK", "3 PCICLK",
"4 PCICLK", "5 PCICLCK", "4 PCICLK", "5 PCICLCK",
...@@ -127,21 +127,21 @@ static char *recovery_time [] ={ ...@@ -127,21 +127,21 @@ static char *recovery_time [] ={
"15 PCICLK", "15 PCICLK" "15 PCICLK", "15 PCICLK"
}; };
static char *cycle_time [] = { static char * cycle_time [] __initdata = {
"Undefined", "2 CLCK", "Undefined", "2 CLCK",
"3 CLK", "4 CLK", "3 CLK", "4 CLK",
"5 CLK", "6 CLK", "5 CLK", "6 CLK",
"7 CLK", "8 CLK" "7 CLK", "8 CLK"
}; };
static char *active_time [] = { static char * active_time [] __initdata = {
"8 PCICLK", "1 PCICLCK", "8 PCICLK", "1 PCICLCK",
"2 PCICLK", "2 PCICLK", "2 PCICLK", "2 PCICLK",
"4 PCICLK", "5 PCICLK", "4 PCICLK", "5 PCICLK",
"6 PCICLK", "12 PCICLK" "6 PCICLK", "12 PCICLK"
}; };
static int sis_get_info (char *buffer, char **addr, off_t offset, int count) static int __init sis_get_info (char *buffer, char **addr, off_t offset, int count)
{ {
int rc; int rc;
char *p = buffer; char *p = buffer;
......
...@@ -310,9 +310,11 @@ int el3_probe(struct net_device *dev) ...@@ -310,9 +310,11 @@ int el3_probe(struct net_device *dev)
with "nopnp=1" before, does not harm if not. */ with "nopnp=1" before, does not harm if not. */
idev->deactivate(idev); idev->deactivate(idev);
idev->activate(idev); idev->activate(idev);
if (!idev->resource[0].start || check_region(idev->resource[0].start,16)) if (!idev->resource[0].start || check_region(idev->resource[0].start, EL3_IO_EXTENT))
continue; continue;
ioaddr = idev->resource[0].start; ioaddr = idev->resource[0].start;
if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509 PnP"))
return -EBUSY;
irq = idev->irq_resource[0].start; irq = idev->irq_resource[0].start;
if (el3_debug > 3) if (el3_debug > 3)
printk ("ISAPnP reports %s at i/o 0x%x, irq %d\n", printk ("ISAPnP reports %s at i/o 0x%x, irq %d\n",
......
...@@ -490,7 +490,7 @@ static int corkscrew_scan(struct net_device *dev) ...@@ -490,7 +490,7 @@ static int corkscrew_scan(struct net_device *dev)
if (inw(ioaddr + Wn0EepromData) != 0x6d50) if (inw(ioaddr + Wn0EepromData) != 0x6d50)
continue; continue;
} }
printk(KERN_INFO "3c515 Resource configuraiton register %#4.4x, DCR %4.4x.\n", printk(KERN_INFO "3c515 Resource configuration register %#4.4x, DCR %4.4x.\n",
inl(ioaddr + 0x2002), inw(ioaddr + 0x2000)); inl(ioaddr + 0x2002), inw(ioaddr + 0x2000));
/* irq = inw(ioaddr + 0x2002) & 15; */ /* Use the irq from isapnp */ /* irq = inw(ioaddr + 0x2002) & 15; */ /* Use the irq from isapnp */
corkscrew_isapnp_phys_addr[pnp_cards] = ioaddr; corkscrew_isapnp_phys_addr[pnp_cards] = ioaddr;
...@@ -533,7 +533,7 @@ static int corkscrew_scan(struct net_device *dev) ...@@ -533,7 +533,7 @@ static int corkscrew_scan(struct net_device *dev)
if (inw(ioaddr + Wn0EepromData) != 0x6d50) if (inw(ioaddr + Wn0EepromData) != 0x6d50)
continue; continue;
} }
printk(KERN_INFO "3c515 Resource configuraiton register %#4.4x, DCR %4.4x.\n", printk(KERN_INFO "3c515 Resource configuration register %#4.4x, DCR %4.4x.\n",
inl(ioaddr + 0x2002), inw(ioaddr + 0x2000)); inl(ioaddr + 0x2002), inw(ioaddr + 0x2000));
irq = inw(ioaddr + 0x2002) & 15; irq = inw(ioaddr + 0x2002) & 15;
corkscrew_found_device(dev, ioaddr, irq, CORKSCREW_ID, dev corkscrew_found_device(dev, ioaddr, irq, CORKSCREW_ID, dev
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
*/ */
static char *version =
"3c59x.c:v0.99H+lk1.0 Feb 9, 2000 The Linux Kernel Team http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html\n";
/* "Knobs" that adjust features and parameters. */ /* "Knobs" that adjust features and parameters. */
/* Set the copy breakpoint for the copy-only-tiny-frames scheme. /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
...@@ -85,6 +83,9 @@ static int rx_nocopy = 0, rx_copy = 0, queued_packet = 0, rx_csumhits; ...@@ -85,6 +83,9 @@ static int rx_nocopy = 0, rx_copy = 0, queued_packet = 0, rx_csumhits;
#define PCI_SUPPORT_VER2 #define PCI_SUPPORT_VER2
#define DEV_FREE_SKB(skb) dev_kfree_skb(skb); #define DEV_FREE_SKB(skb) dev_kfree_skb(skb);
static char *version __initdata =
"3c59x.c:v0.99H+lk1.0 Feb 9, 2000 The Linux Kernel Team http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html\n";
MODULE_AUTHOR("Donald Becker <becker@cesdis.gsfc.nasa.gov>"); MODULE_AUTHOR("Donald Becker <becker@cesdis.gsfc.nasa.gov>");
MODULE_DESCRIPTION("3Com 3c590/3c900 series Vortex/Boomerang driver"); MODULE_DESCRIPTION("3Com 3c590/3c900 series Vortex/Boomerang driver");
MODULE_PARM(debug, "i"); MODULE_PARM(debug, "i");
......
This diff is collapsed.
...@@ -164,7 +164,9 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then ...@@ -164,7 +164,9 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
fi fi
bool ' Pocket and portable adapters' CONFIG_NET_POCKET bool ' Pocket and portable adapters' CONFIG_NET_POCKET
if [ "$CONFIG_NET_POCKET" = "y" ]; then if [ "$CONFIG_NET_POCKET" = "y" ]; then
if [ "$CONFIG_X86" = "y" ]; then
tristate ' AT-LAN-TEC/RealTek pocket adapter support' CONFIG_ATP tristate ' AT-LAN-TEC/RealTek pocket adapter support' CONFIG_ATP
fi
tristate ' D-Link DE600 pocket adapter support' CONFIG_DE600 tristate ' D-Link DE600 pocket adapter support' CONFIG_DE600
tristate ' D-Link DE620 pocket adapter support' CONFIG_DE620 tristate ' D-Link DE620 pocket adapter support' CONFIG_DE620
fi fi
......
This diff is collapsed.
This diff is collapsed.
...@@ -1947,9 +1947,13 @@ static int nsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -1947,9 +1947,13 @@ static int nsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
switch (cmd) { switch (cmd) {
case SIOCSBANDWIDTH: /* Set bandwidth */ case SIOCSBANDWIDTH: /* Set bandwidth */
if (!capable(CAP_NET_ADMIN))
return -EPERM;
nsc_ircc_change_speed(self, irq->ifr_baudrate); nsc_ircc_change_speed(self, irq->ifr_baudrate);
break; break;
case SIOCSMEDIABUSY: /* Set media busy */ case SIOCSMEDIABUSY: /* Set media busy */
if (!capable(CAP_NET_ADMIN))
return -EPERM;
irda_device_set_media_busy(self->netdev, TRUE); irda_device_set_media_busy(self->netdev, TRUE);
break; break;
case SIOCGRECEIVING: /* Check if we are receiving right now */ case SIOCGRECEIVING: /* Check if we are receiving right now */
......
This diff is collapsed.
...@@ -1332,9 +1332,13 @@ static int w83977af_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -1332,9 +1332,13 @@ static int w83977af_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
switch (cmd) { switch (cmd) {
case SIOCSBANDWIDTH: /* Set bandwidth */ case SIOCSBANDWIDTH: /* Set bandwidth */
if (!capable(CAP_NET_ADMIN))
return -EPERM;
w83977af_change_speed(self, irq->ifr_baudrate); w83977af_change_speed(self, irq->ifr_baudrate);
break; break;
case SIOCSMEDIABUSY: /* Set media busy */ case SIOCSMEDIABUSY: /* Set media busy */
if (!capable(CAP_NET_ADMIN))
return -EPERM;
irda_device_set_media_busy(self->netdev, TRUE); irda_device_set_media_busy(self->netdev, TRUE);
break; break;
case SIOCGRECEIVING: /* Check if we are receiving right now */ case SIOCGRECEIVING: /* Check if we are receiving right now */
......
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