Commit a485bc0c authored by Patrick Mochel's avatar Patrick Mochel

Merge osdl.org:/home/mochel/src/kernel/linux-2.5-virgin

into osdl.org:/home/mochel/src/kernel/linux-2.5-core
parents e05d9d7b 1f4e775c
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
---------------------------------------- ----------------------------------------
Written by Geert Uytterhoeven <geert@linux-m68k.org> Written by Geert Uytterhoeven <geert@linux-m68k.org>
Last revised: February 27, 2000 Last revised: September 5, 2003
1. Introduction 1. Introduction
...@@ -75,7 +75,7 @@ they are CPU physical addresses as well. ...@@ -75,7 +75,7 @@ they are CPU physical addresses as well.
The treatment of these regions depends on the type of Zorro space: The treatment of these regions depends on the type of Zorro space:
- Zorro II address space is always mapped and does not have to be mapped - Zorro II address space is always mapped and does not have to be mapped
explicitly using ioremap(). explicitly using z_ioremap().
Conversion from bus/physical Zorro II addresses to kernel virtual addresses Conversion from bus/physical Zorro II addresses to kernel virtual addresses
and vice versa is done using: and vice versa is done using:
...@@ -83,22 +83,20 @@ The treatment of these regions depends on the type of Zorro space: ...@@ -83,22 +83,20 @@ The treatment of these regions depends on the type of Zorro space:
virt_addr = ZTWO_VADDR(bus_addr); virt_addr = ZTWO_VADDR(bus_addr);
bus_addr = ZTWO_PADDR(virt_addr); bus_addr = ZTWO_PADDR(virt_addr);
- Zorro III address space must be mapped explicitly using ioremap() first - Zorro III address space must be mapped explicitly using z_ioremap() first
before it can be accessed: before it can be accessed:
virt_addr = ioremap(bus_addr, size); virt_addr = z_ioremap(bus_addr, size);
... ...
iounmap(virt_addr); z_iounmap(virt_addr);
5. References 5. References
------------- -------------
linux/include/linux/zorro.h linux/include/linux/zorro.h
linux/include/linux/ioport.h linux/include/asm-{m68k,ppc}/zorro.h
linux/include/asm-m68k/io.h linux/include/linux/zorro_ids.h
linux/include/asm-m68k/amigahw.h
linux/include/asm-ppc/io.h
linux/drivers/zorro linux/drivers/zorro
/proc/bus/zorro /proc/bus/zorro
...@@ -624,7 +624,7 @@ DIGIBOARD PC/XE AND PC/XI DRIVER ...@@ -624,7 +624,7 @@ DIGIBOARD PC/XE AND PC/XI DRIVER
P: Christoph Lameter P: Christoph Lameter
M: christoph@lameter.com M: christoph@lameter.com
W: http://www.digi.com W: http://www.digi.com
L: digilnux@dgii.com L: digilnux@digi.com
S: Orphaned S: Orphaned
DIRECTORY NOTIFICATION DIRECTORY NOTIFICATION
......
...@@ -16,7 +16,7 @@ H8S is planning. ...@@ -16,7 +16,7 @@ H8S is planning.
3.H8MAX 3.H8MAX
Under development Under development
see http://www.strawbelly-linux.com (Japanese Only) see http://www.strawberry-linux.com (Japanese Only)
* Toolchain Version * Toolchain Version
gcc-3.1 or higher and patch gcc-3.1 or higher and patch
......
...@@ -1303,3 +1303,8 @@ config X86_TRAMPOLINE ...@@ -1303,3 +1303,8 @@ config X86_TRAMPOLINE
bool bool
depends on SMP || X86_VISWS depends on SMP || X86_VISWS
default y default y
config PC
bool
depends on X86 && !EMBEDDED
default y
...@@ -238,11 +238,8 @@ static void __init init_intel(struct cpuinfo_x86 *c) ...@@ -238,11 +238,8 @@ static void __init init_intel(struct cpuinfo_x86 *c)
} }
/* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it until model 3 mask 3 */ /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it until model 3 mask 3 */
if ( c->x86 == 6) { if ((c->x86<<8 | c->x86_model<<4 | c->x86_mask) < 0x633)
unsigned model_mask = (c->x86_model << 8) + c->x86_mask;
if (model_mask < 0x0303)
clear_bit(X86_FEATURE_SEP, c->x86_capability); clear_bit(X86_FEATURE_SEP, c->x86_capability);
}
/* Names for the Pentium II/Celeron processors /* Names for the Pentium II/Celeron processors
detectable only by also checking the cache size. detectable only by also checking the cache size.
......
...@@ -31,7 +31,7 @@ static void k7_machine_check(struct pt_regs * regs, long error_code) ...@@ -31,7 +31,7 @@ static void k7_machine_check(struct pt_regs * regs, long error_code)
printk (KERN_EMERG "CPU %d: Machine Check Exception: %08x%08x\n", printk (KERN_EMERG "CPU %d: Machine Check Exception: %08x%08x\n",
smp_processor_id(), mcgsth, mcgstl); smp_processor_id(), mcgsth, mcgstl);
for (i=0; i<nr_mce_banks; i++) { for (i=1; i<nr_mce_banks; i++) {
rdmsr (MSR_IA32_MC0_STATUS+i*4,low, high); rdmsr (MSR_IA32_MC0_STATUS+i*4,low, high);
if (high&(1<<31)) { if (high&(1<<31)) {
if (high & (1<<29)) if (high & (1<<29))
...@@ -81,6 +81,9 @@ void __init amd_mcheck_init(struct cpuinfo_x86 *c) ...@@ -81,6 +81,9 @@ void __init amd_mcheck_init(struct cpuinfo_x86 *c)
wrmsr (MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff); wrmsr (MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff);
nr_mce_banks = l & 0xff; nr_mce_banks = l & 0xff;
/* Clear status for MC index 0 separately, we don't touch CTL,
* as some Athlons cause spurious MCEs when its enabled. */
wrmsr (MSR_IA32_MC0_STATUS, 0x0, 0x0);
for (i=1; i<nr_mce_banks; i++) { for (i=1; i<nr_mce_banks; i++) {
wrmsr (MSR_IA32_MC0_CTL+4*i, 0xffffffff, 0xffffffff); wrmsr (MSR_IA32_MC0_CTL+4*i, 0xffffffff, 0xffffffff);
wrmsr (MSR_IA32_MC0_STATUS+4*i, 0x0, 0x0); wrmsr (MSR_IA32_MC0_STATUS+4*i, 0x0, 0x0);
......
...@@ -937,6 +937,7 @@ int cpu_sibling_map[NR_CPUS] __cacheline_aligned; ...@@ -937,6 +937,7 @@ int cpu_sibling_map[NR_CPUS] __cacheline_aligned;
static void __init smp_boot_cpus(unsigned int max_cpus) static void __init smp_boot_cpus(unsigned int max_cpus)
{ {
int apicid, cpu, bit, kicked; int apicid, cpu, bit, kicked;
unsigned long bogosum = 0;
/* /*
* Setup boot CPU information * Setup boot CPU information
...@@ -1048,26 +1049,25 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -1048,26 +1049,25 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
/* /*
* Allow the user to impress friends. * Allow the user to impress friends.
*/ */
Dprintk("Before bogomips.\n"); Dprintk("Before bogomips.\n");
if (!cpucount) {
printk(KERN_ERR "Error: only one processor found.\n");
} else {
unsigned long bogosum = 0;
for (cpu = 0; cpu < NR_CPUS; cpu++) for (cpu = 0; cpu < NR_CPUS; cpu++)
if (cpu_isset(cpu, cpu_callout_map)) if (cpu_isset(cpu, cpu_callout_map))
bogosum += cpu_data[cpu].loops_per_jiffy; bogosum += cpu_data[cpu].loops_per_jiffy;
printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n", printk(KERN_INFO
"Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
cpucount+1, cpucount+1,
bogosum/(500000/HZ), bogosum/(500000/HZ),
(bogosum/(5000/HZ))%100); (bogosum/(5000/HZ))%100);
Dprintk("Before bogocount - setting activated=1.\n"); Dprintk("Before bogocount - setting activated=1.\n");
}
if (smp_b_stepping) if (smp_b_stepping)
printk(KERN_WARNING "WARNING: SMP operation may be unreliable with B stepping processors.\n"); printk(KERN_WARNING "WARNING: SMP operation may be unreliable with B stepping processors.\n");
/* Don't taint if we are running SMP kernel on a single non-MP approved Athlon */ /*
* Don't taint if we are running SMP kernel on a single non-MP
* approved Athlon
*/
if (tainted & TAINT_UNSAFE_SMP) { if (tainted & TAINT_UNSAFE_SMP) {
if (cpucount) if (cpucount)
printk (KERN_INFO "WARNING: This combination of AMD processors is not suitable for SMP.\n"); printk (KERN_INFO "WARNING: This combination of AMD processors is not suitable for SMP.\n");
......
...@@ -87,7 +87,7 @@ config ATARI ...@@ -87,7 +87,7 @@ config ATARI
config HADES config HADES
bool "Hades support" bool "Hades support"
depends on ATARI depends on ATARI && BROKEN
help help
This option enables support for the Hades Atari clone. If you plan This option enables support for the Hades Atari clone. If you plan
to use this kernel on a Hades, say Y here; otherwise say N. to use this kernel on a Hades, say Y here; otherwise say N.
...@@ -361,7 +361,7 @@ config AMIGA_PCMCIA ...@@ -361,7 +361,7 @@ config AMIGA_PCMCIA
config STRAM_SWAP config STRAM_SWAP
bool "Support for ST-RAM as swap space" bool "Support for ST-RAM as swap space"
depends on ATARI depends on ATARI && BROKEN
---help--- ---help---
Some Atari 68k macines (including the 520STF and 1020STE) divide Some Atari 68k macines (including the 520STF and 1020STE) divide
their addressible memory into ST and TT sections. The TT section their addressible memory into ST and TT sections. The TT section
...@@ -961,7 +961,7 @@ config MVME147_SCC ...@@ -961,7 +961,7 @@ config MVME147_SCC
config SERIAL167 config SERIAL167
bool "CD2401 support for MVME166/7 serial ports" bool "CD2401 support for MVME166/7 serial ports"
depends on MVME16x depends on MVME16x && BROKEN
help help
This is the driver for the serial ports on the Motorola MVME166, This is the driver for the serial ports on the Motorola MVME166,
167, and 172 boards. Everyone using one of these boards should say 167, and 172 boards. Everyone using one of these boards should say
......
...@@ -76,6 +76,8 @@ core-$(CONFIG_M68040) += arch/m68k/fpsp040/ ...@@ -76,6 +76,8 @@ core-$(CONFIG_M68040) += arch/m68k/fpsp040/
core-$(CONFIG_M68060) += arch/m68k/ifpsp060/ core-$(CONFIG_M68060) += arch/m68k/ifpsp060/
core-$(CONFIG_M68KFPU_EMU) += arch/m68k/math-emu/ core-$(CONFIG_M68KFPU_EMU) += arch/m68k/math-emu/
all: zImage
lilo: vmlinux lilo: vmlinux
if [ -f $(INSTALL_PATH)/vmlinux ]; then mv -f $(INSTALL_PATH)/vmlinux $(INSTALL_PATH)/vmlinux.old; fi if [ -f $(INSTALL_PATH)/vmlinux ]; then mv -f $(INSTALL_PATH)/vmlinux $(INSTALL_PATH)/vmlinux.old; fi
if [ -f $(INSTALL_PATH)/System.map ]; then mv -f $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi if [ -f $(INSTALL_PATH)/System.map ]; then mv -f $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/shm.h> #include <linux/shm.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/blkdev.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/machdep.h> #include <asm/machdep.h>
......
...@@ -171,3 +171,12 @@ int do_settimeofday(struct timespec *tv) ...@@ -171,3 +171,12 @@ int do_settimeofday(struct timespec *tv)
write_sequnlock_irq(&xtime_lock); write_sequnlock_irq(&xtime_lock);
return 0; return 0;
} }
/*
* Scheduler clock - returns current time in ns units.
*/
unsigned long long sched_clock(void)
{
return (unsigned long long)jiffies*(1000000000/HZ);
}
...@@ -200,7 +200,9 @@ void q40_free_irq(unsigned int irq, void *dev_id) ...@@ -200,7 +200,9 @@ void q40_free_irq(unsigned int irq, void *dev_id)
irqreturn_t q40_process_int (int level, struct pt_regs *fp) irqreturn_t q40_process_int (int level, struct pt_regs *fp)
{ {
printk("unexpected interrupt %x\n",level); printk("unexpected interrupt vec=%x, pc=%lx, d0=%lx, d0_orig=%lx, d1=%lx, d2=%lx\n",
level, fp->pc, fp->d0, fp->orig_d0, fp->d1, fp->d2);
printk("\tIIRQ_REG = %x, EIRQ_REG = %x\n",master_inb(IIRQ_REG),master_inb(EIRQ_REG));
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -378,7 +380,7 @@ irqreturn_t q40_irq2_handler (int vec, void *devname, struct pt_regs *fp) ...@@ -378,7 +380,7 @@ irqreturn_t q40_irq2_handler (int vec, void *devname, struct pt_regs *fp)
/*printk("reenabling irq %d\n",irq); */ /*printk("reenabling irq %d\n",irq); */
#endif #endif
} }
// used to do 'goto repeat;' her, this delayed bh processing too long // used to do 'goto repeat;' here, this delayed bh processing too long
return IRQ_HANDLED; return IRQ_HANDLED;
} }
} }
...@@ -387,6 +389,7 @@ irqreturn_t q40_irq2_handler (int vec, void *devname, struct pt_regs *fp) ...@@ -387,6 +389,7 @@ irqreturn_t q40_irq2_handler (int vec, void *devname, struct pt_regs *fp)
} }
iirq: iirq:
mir=master_inb(IIRQ_REG); mir=master_inb(IIRQ_REG);
/* should test whether keyboard irq is really enabled, doing it in defhand */
if (mir&Q40_IRQ_KEYB_MASK) { if (mir&Q40_IRQ_KEYB_MASK) {
irq_tab[Q40_IRQ_KEYBOARD].count++; irq_tab[Q40_IRQ_KEYBOARD].count++;
irq_tab[Q40_IRQ_KEYBOARD].handler(Q40_IRQ_KEYBOARD,irq_tab[Q40_IRQ_KEYBOARD].dev_id,fp); irq_tab[Q40_IRQ_KEYBOARD].handler(Q40_IRQ_KEYBOARD,irq_tab[Q40_IRQ_KEYBOARD].dev_id,fp);
...@@ -413,7 +416,9 @@ int show_q40_interrupts (struct seq_file *p, void *v) ...@@ -413,7 +416,9 @@ int show_q40_interrupts (struct seq_file *p, void *v)
static irqreturn_t q40_defhand (int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t q40_defhand (int irq, void *dev_id, struct pt_regs *fp)
{ {
printk ("Unknown q40 interrupt 0x%02x\n", irq); if (irq!=Q40_IRQ_KEYBOARD)
printk ("Unknown q40 interrupt %d\n", irq);
else master_outb(-1,KEYBOARD_UNLOCK_REG);
return IRQ_NONE; return IRQ_NONE;
} }
static irqreturn_t sys_default_handler(int lev, void *dev_id, struct pt_regs *regs) static irqreturn_t sys_default_handler(int lev, void *dev_id, struct pt_regs *regs)
......
...@@ -129,7 +129,7 @@ void __init sun3_bootmem_alloc(unsigned long memory_start, unsigned long memory_ ...@@ -129,7 +129,7 @@ void __init sun3_bootmem_alloc(unsigned long memory_start, unsigned long memory_
high_memory = (void *)memory_end; high_memory = (void *)memory_end;
availmem = memory_start; availmem = memory_start;
availmem += init_bootmem(start_page, num_pages); availmem += init_bootmem_node(NODE_DATA(0), start_page, 0, num_pages);
availmem = (availmem + (PAGE_SIZE-1)) & PAGE_MASK; availmem = (availmem + (PAGE_SIZE-1)) & PAGE_MASK;
free_bootmem(__pa(availmem), memory_end - (availmem)); free_bootmem(__pa(availmem), memory_end - (availmem));
......
...@@ -35,7 +35,7 @@ config BLK_DEV_FD98 ...@@ -35,7 +35,7 @@ config BLK_DEV_FD98
config BLK_DEV_SWIM_IOP config BLK_DEV_SWIM_IOP
bool "Macintosh IIfx/Quadra 900/Quadra 950 floppy support (EXPERIMENTAL)" bool "Macintosh IIfx/Quadra 900/Quadra 950 floppy support (EXPERIMENTAL)"
depends on MAC && EXPERIMENTAL depends on MAC && EXPERIMENTAL && BROKEN
help help
Say Y here to support the SWIM (Super Woz Integrated Machine) IOP Say Y here to support the SWIM (Super Woz Integrated Machine) IOP
floppy controller on the Macintosh IIfx and Quadra 900/950. floppy controller on the Macintosh IIfx and Quadra 900/950.
...@@ -63,7 +63,7 @@ config AMIGA_Z2RAM ...@@ -63,7 +63,7 @@ config AMIGA_Z2RAM
config ATARI_ACSI config ATARI_ACSI
tristate "Atari ACSI support" tristate "Atari ACSI support"
depends on ATARI depends on ATARI && BROKEN
---help--- ---help---
This enables support for the Atari ACSI interface. The driver This enables support for the Atari ACSI interface. The driver
supports hard disks and CD-ROMs, which have 512-byte sectors, or can supports hard disks and CD-ROMs, which have 512-byte sectors, or can
......
...@@ -63,6 +63,7 @@ typedef void Scsi_Device; /* hack to avoid including scsi.h */ ...@@ -63,6 +63,7 @@ typedef void Scsi_Device; /* hack to avoid including scsi.h */
#include <linux/hdreg.h> /* for HDIO_GETGEO */ #include <linux/hdreg.h> /* for HDIO_GETGEO */
#include <linux/blkpg.h> #include <linux/blkpg.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/blkdev.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
...@@ -346,7 +347,7 @@ struct acsi_error { ...@@ -346,7 +347,7 @@ struct acsi_error {
static int acsicmd_dma( const char *cmd, char *buffer, int blocks, int static int acsicmd_dma( const char *cmd, char *buffer, int blocks, int
rwflag, int enable); rwflag, int enable);
static int acsi_reqsense( char *buffer, int targ, int lun); static int acsi_reqsense( char *buffer, int targ, int lun);
static void acsi_print_error(const unsigned char *errblk, int struct acsi_info_struct *aip); static void acsi_print_error(const unsigned char *errblk, struct acsi_info_struct *aip);
static irqreturn_t acsi_interrupt (int irq, void *data, struct pt_regs *fp); static irqreturn_t acsi_interrupt (int irq, void *data, struct pt_regs *fp);
static void unexpected_acsi_interrupt( void ); static void unexpected_acsi_interrupt( void );
static void bad_rw_intr( void ); static void bad_rw_intr( void );
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/cdrom.h> #include <linux/cdrom.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/bio.h> #include <linux/bio.h>
#include <linux/times.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <scsi/scsi.h> #include <scsi/scsi.h>
...@@ -140,40 +141,36 @@ static int sg_emulated_host(request_queue_t *q, int *p) ...@@ -140,40 +141,36 @@ static int sg_emulated_host(request_queue_t *q, int *p)
} }
static int sg_io(request_queue_t *q, struct block_device *bdev, static int sg_io(request_queue_t *q, struct block_device *bdev,
struct sg_io_hdr *uptr) struct sg_io_hdr *hdr)
{ {
unsigned long start_time; unsigned long start_time;
int reading, writing; int reading, writing;
struct sg_io_hdr hdr;
struct request *rq; struct request *rq;
struct bio *bio; struct bio *bio;
char sense[SCSI_SENSE_BUFFERSIZE]; char sense[SCSI_SENSE_BUFFERSIZE];
void *buffer; void *buffer;
if (copy_from_user(&hdr, uptr, sizeof(*uptr))) if (hdr->interface_id != 'S')
return -EFAULT;
if (hdr.interface_id != 'S')
return -EINVAL; return -EINVAL;
if (hdr.cmd_len > sizeof(rq->cmd)) if (hdr->cmd_len > sizeof(rq->cmd))
return -EINVAL; return -EINVAL;
/* /*
* we'll do that later * we'll do that later
*/ */
if (hdr.iovec_count) if (hdr->iovec_count)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (hdr.dxfer_len > (q->max_sectors << 9)) if (hdr->dxfer_len > (q->max_sectors << 9))
return -EIO; return -EIO;
reading = writing = 0; reading = writing = 0;
buffer = NULL; buffer = NULL;
bio = NULL; bio = NULL;
if (hdr.dxfer_len) { if (hdr->dxfer_len) {
unsigned int bytes = (hdr.dxfer_len + 511) & ~511; unsigned int bytes = (hdr->dxfer_len + 511) & ~511;
switch (hdr.dxfer_direction) { switch (hdr->dxfer_direction) {
default: default:
return -EINVAL; return -EINVAL;
case SG_DXFER_TO_FROM_DEV: case SG_DXFER_TO_FROM_DEV:
...@@ -191,8 +188,8 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -191,8 +188,8 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
* first try to map it into a bio. reading from device will * first try to map it into a bio. reading from device will
* be a write to vm. * be a write to vm.
*/ */
bio = bio_map_user(bdev, (unsigned long) hdr.dxferp, bio = bio_map_user(bdev, (unsigned long) hdr->dxferp,
hdr.dxfer_len, reading); hdr->dxfer_len, reading);
/* /*
* if bio setup failed, fall back to slow approach * if bio setup failed, fall back to slow approach
...@@ -203,11 +200,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -203,11 +200,11 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
return -ENOMEM; return -ENOMEM;
if (writing) { if (writing) {
if (copy_from_user(buffer, hdr.dxferp, if (copy_from_user(buffer, hdr->dxferp,
hdr.dxfer_len)) hdr->dxfer_len))
goto out_buffer; goto out_buffer;
} else } else
memset(buffer, 0, hdr.dxfer_len); memset(buffer, 0, hdr->dxfer_len);
} }
} }
...@@ -216,11 +213,10 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -216,11 +213,10 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
/* /*
* fill in request structure * fill in request structure
*/ */
rq->cmd_len = hdr.cmd_len; rq->cmd_len = hdr->cmd_len;
if (copy_from_user(rq->cmd, hdr.cmdp, hdr.cmd_len)) memcpy(rq->cmd, hdr->cmdp, hdr->cmd_len);
goto out_request; if (sizeof(rq->cmd) != hdr->cmd_len)
if (sizeof(rq->cmd) != hdr.cmd_len) memset(rq->cmd + hdr->cmd_len, 0, sizeof(rq->cmd) - hdr->cmd_len);
memset(rq->cmd + hdr.cmd_len, 0, sizeof(rq->cmd) - hdr.cmd_len);
memset(sense, 0, sizeof(sense)); memset(sense, 0, sizeof(sense));
rq->sense = sense; rq->sense = sense;
...@@ -234,9 +230,9 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -234,9 +230,9 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
blk_rq_bio_prep(q, rq, bio); blk_rq_bio_prep(q, rq, bio);
rq->data = buffer; rq->data = buffer;
rq->data_len = hdr.dxfer_len; rq->data_len = hdr->dxfer_len;
rq->timeout = (hdr.timeout * HZ) / 1000; rq->timeout = (hdr->timeout * HZ) / 1000;
if (!rq->timeout) if (!rq->timeout)
rq->timeout = q->sg_timeout; rq->timeout = q->sg_timeout;
if (!rq->timeout) if (!rq->timeout)
...@@ -254,33 +250,30 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -254,33 +250,30 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
bio_unmap_user(bio, reading); bio_unmap_user(bio, reading);
/* write to all output members */ /* write to all output members */
hdr.status = rq->errors; hdr->status = rq->errors;
hdr.masked_status = (hdr.status >> 1) & 0x1f; hdr->masked_status = (hdr->status >> 1) & 0x1f;
hdr.msg_status = 0; hdr->msg_status = 0;
hdr.host_status = 0; hdr->host_status = 0;
hdr.driver_status = 0; hdr->driver_status = 0;
hdr.info = 0; hdr->info = 0;
if (hdr.masked_status || hdr.host_status || hdr.driver_status) if (hdr->masked_status || hdr->host_status || hdr->driver_status)
hdr.info |= SG_INFO_CHECK; hdr->info |= SG_INFO_CHECK;
hdr.resid = rq->data_len; hdr->resid = rq->data_len;
hdr.duration = ((jiffies - start_time) * 1000) / HZ; hdr->duration = ((jiffies - start_time) * 1000) / HZ;
hdr.sb_len_wr = 0; hdr->sb_len_wr = 0;
if (rq->sense_len && hdr.sbp) { if (rq->sense_len && hdr->sbp) {
int len = min((unsigned int) hdr.mx_sb_len, rq->sense_len); int len = min((unsigned int) hdr->mx_sb_len, rq->sense_len);
if (!copy_to_user(hdr.sbp, rq->sense, len)) if (!copy_to_user(hdr->sbp, rq->sense, len))
hdr.sb_len_wr = len; hdr->sb_len_wr = len;
} }
blk_put_request(rq); blk_put_request(rq);
if (copy_to_user(uptr, &hdr, sizeof(*uptr)))
goto out_buffer;
if (buffer) { if (buffer) {
if (reading) if (reading)
if (copy_to_user(hdr.dxferp, buffer, hdr.dxfer_len)) if (copy_to_user(hdr->dxferp, buffer, hdr->dxfer_len))
goto out_buffer; goto out_buffer;
kfree(buffer); kfree(buffer);
...@@ -289,8 +282,6 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, ...@@ -289,8 +282,6 @@ static int sg_io(request_queue_t *q, struct block_device *bdev,
/* may not have succeeded, but output values written to control /* may not have succeeded, but output values written to control
* structure (struct sg_io_hdr). */ * structure (struct sg_io_hdr). */
return 0; return 0;
out_request:
blk_put_request(rq);
out_buffer: out_buffer:
kfree(buffer); kfree(buffer);
return -EFAULT; return -EFAULT;
...@@ -437,9 +428,71 @@ int scsi_cmd_ioctl(struct block_device *bdev, unsigned int cmd, unsigned long ar ...@@ -437,9 +428,71 @@ int scsi_cmd_ioctl(struct block_device *bdev, unsigned int cmd, unsigned long ar
case SG_EMULATED_HOST: case SG_EMULATED_HOST:
err = sg_emulated_host(q, (int *) arg); err = sg_emulated_host(q, (int *) arg);
break; break;
case SG_IO: case SG_IO: {
err = sg_io(q, bdev, (struct sg_io_hdr *) arg); struct sg_io_hdr hdr;
if (copy_from_user(&hdr, (struct sg_io_hdr *) arg, sizeof(hdr))) {
err = -EFAULT;
break;
}
err = sg_io(q, bdev, &hdr);
if (copy_to_user((struct sg_io_hdr *) arg, &hdr, sizeof(hdr)))
err = -EFAULT;
break;
}
case CDROM_SEND_PACKET: {
struct cdrom_generic_command cgc;
struct sg_io_hdr hdr;
if (copy_from_user(&cgc, (struct cdrom_generic_command *) arg, sizeof(cgc))) {
err = -EFAULT;
break;
}
cgc.timeout = clock_t_to_jiffies(cgc.timeout);
memset(&hdr, 0, sizeof(hdr));
hdr.interface_id = 'S';
hdr.cmd_len = sizeof(cgc.cmd);
hdr.dxfer_len = cgc.buflen;
err = 0;
switch (cgc.data_direction) {
case CGC_DATA_UNKNOWN:
hdr.dxfer_direction = SG_DXFER_UNKNOWN;
break;
case CGC_DATA_WRITE:
hdr.dxfer_direction = SG_DXFER_TO_DEV;
break;
case CGC_DATA_READ:
hdr.dxfer_direction = SG_DXFER_FROM_DEV;
break;
case CGC_DATA_NONE:
hdr.dxfer_direction = SG_DXFER_NONE;
break;
default:
err = -EINVAL;
}
if (err)
break; break;
hdr.dxferp = cgc.buffer;
hdr.sbp = (char *) cgc.sense;
if (hdr.sbp)
hdr.mx_sb_len = sizeof(struct request_sense);
hdr.timeout = cgc.timeout;
hdr.cmdp = cgc.cmd;
hdr.cmd_len = sizeof(cgc.cmd);
err = sg_io(q, bdev, &hdr);
if (hdr.status)
err = -EIO;
cgc.stat = err;
cgc.buflen = hdr.resid;
if (copy_to_user((struct cdrom_generic_command *) arg, &cgc, sizeof(cgc)))
err = -EFAULT;
break;
}
/* /*
* old junk scsi send command ioctl * old junk scsi send command ioctl
*/ */
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/fd.h> #include <linux/fd.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
#include <linux/blkdev.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/mac_iop.h> #include <asm/mac_iop.h>
......
...@@ -1856,57 +1856,6 @@ static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size) ...@@ -1856,57 +1856,6 @@ static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size)
return cdo->generic_packet(cdi, &cgc); return cdo->generic_packet(cdi, &cgc);
} }
static int cdrom_do_cmd(struct cdrom_device_info *cdi,
struct cdrom_generic_command *cgc)
{
struct request_sense *usense, sense;
unsigned char *ubuf;
int ret;
if (cgc->data_direction == CGC_DATA_UNKNOWN)
return -EINVAL;
if (cgc->buflen < 0 || cgc->buflen >= 131072)
return -EINVAL;
usense = cgc->sense;
cgc->sense = &sense;
if (usense && !access_ok(VERIFY_WRITE, usense, sizeof(*usense))) {
return -EFAULT;
}
ubuf = cgc->buffer;
if (cgc->data_direction == CGC_DATA_READ ||
cgc->data_direction == CGC_DATA_WRITE) {
cgc->buffer = kmalloc(cgc->buflen, GFP_KERNEL);
if (cgc->buffer == NULL)
return -ENOMEM;
}
if (cgc->data_direction == CGC_DATA_READ) {
if (!access_ok(VERIFY_READ, ubuf, cgc->buflen)) {
kfree(cgc->buffer);
return -EFAULT;
}
} else if (cgc->data_direction == CGC_DATA_WRITE) {
if (copy_from_user(cgc->buffer, ubuf, cgc->buflen)) {
kfree(cgc->buffer);
return -EFAULT;
}
}
ret = cdi->ops->generic_packet(cdi, cgc);
__copy_to_user(usense, cgc->sense, sizeof(*usense));
if (!ret && cgc->data_direction == CGC_DATA_READ)
__copy_to_user(ubuf, cgc->buffer, cgc->buflen);
if (cgc->data_direction == CGC_DATA_READ ||
cgc->data_direction == CGC_DATA_WRITE) {
kfree(cgc->buffer);
}
return ret;
}
static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
...@@ -2176,14 +2125,6 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, ...@@ -2176,14 +2125,6 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
return 0; return 0;
} }
case CDROM_SEND_PACKET: {
if (!CDROM_CAN(CDC_GENERIC_PACKET))
return -ENOSYS;
cdinfo(CD_DO_IOCTL, "entering CDROM_SEND_PACKET\n");
IOCTL_IN(arg, struct cdrom_generic_command, cgc);
cgc.timeout = clock_t_to_jiffies(cgc.timeout);
return cdrom_do_cmd(cdi, &cgc);
}
case CDROM_NEXT_WRITABLE: { case CDROM_NEXT_WRITABLE: {
long next = 0; long next = 0;
cdinfo(CD_DO_IOCTL, "entering CDROM_NEXT_WRITABLE\n"); cdinfo(CD_DO_IOCTL, "entering CDROM_NEXT_WRITABLE\n");
......
...@@ -348,7 +348,7 @@ int gs_real_chars_in_buffer(struct tty_struct *tty) ...@@ -348,7 +348,7 @@ int gs_real_chars_in_buffer(struct tty_struct *tty)
static int gs_wait_tx_flushed (void * ptr, int timeout) static int gs_wait_tx_flushed (void * ptr, int timeout)
{ {
struct gs_port *port = ptr; struct gs_port *port = ptr;
long end_jiffies; unsigned long end_jiffies;
int jiffies_to_transmit, charsleft = 0, rv = 0; int jiffies_to_transmit, charsleft = 0, rv = 0;
int rcib; int rcib;
......
...@@ -703,7 +703,7 @@ static int a2232_init_drivers(void) ...@@ -703,7 +703,7 @@ static int a2232_init_drivers(void)
a2232_driver->name = "ttyY"; a2232_driver->name = "ttyY";
a2232_driver->major = A2232_NORMAL_MAJOR; a2232_driver->major = A2232_NORMAL_MAJOR;
a2232_driver->type = TTY_DRIVER_TYPE_SERIAL; a2232_driver->type = TTY_DRIVER_TYPE_SERIAL;
a2232_driver->subtype = SERIAL_TTY_NORMAL; a2232_driver->subtype = SERIAL_TYPE_NORMAL;
a2232_driver->init_termios = tty_std_termios; a2232_driver->init_termios = tty_std_termios;
a2232_driver->init_termios.c_cflag = a2232_driver->init_termios.c_cflag =
B9600 | CS8 | CREAD | HUPCL | CLOCAL; B9600 | CS8 | CREAD | HUPCL | CLOCAL;
......
...@@ -285,7 +285,7 @@ config I2C_VELLEMAN ...@@ -285,7 +285,7 @@ config I2C_VELLEMAN
will be called i2c-velleman. will be called i2c-velleman.
config I2C_VIA config I2C_VIA
tristate "VIA 82C58B" tristate "VIA 82C586B"
depends on I2C_ALGOBIT && PCI && EXPERIMENTAL depends on I2C_ALGOBIT && PCI && EXPERIMENTAL
help help
......
...@@ -133,7 +133,7 @@ int i2c_detect(struct i2c_adapter *adapter, ...@@ -133,7 +133,7 @@ int i2c_detect(struct i2c_adapter *adapter,
i += 2) { i += 2) {
if (((adapter_id == address_data->probe[i]) || if (((adapter_id == address_data->probe[i]) ||
((address_data-> ((address_data->
probe[i] == ANY_I2C_BUS) & !is_isa)) probe[i] == ANY_I2C_BUS) && !is_isa))
&& (addr == address_data->probe[i + 1])) { && (addr == address_data->probe[i + 1])) {
dev_dbg(&adapter->dev, "found probe parameter for adapter %d, addr %04x\n", adapter_id, addr); dev_dbg(&adapter->dev, "found probe parameter for adapter %d, addr %04x\n", adapter_id, addr);
found = 1; found = 1;
...@@ -141,7 +141,7 @@ int i2c_detect(struct i2c_adapter *adapter, ...@@ -141,7 +141,7 @@ int i2c_detect(struct i2c_adapter *adapter,
} }
for (i = 0; !found && (address_data->probe_range[i] != I2C_CLIENT_END); i += 3) { for (i = 0; !found && (address_data->probe_range[i] != I2C_CLIENT_END); i += 3) {
if ( ((adapter_id == address_data->probe_range[i]) || if ( ((adapter_id == address_data->probe_range[i]) ||
((address_data->probe_range[i] == ANY_I2C_BUS) & !is_isa)) && ((address_data->probe_range[i] == ANY_I2C_BUS) && !is_isa)) &&
(addr >= address_data->probe_range[i + 1]) && (addr >= address_data->probe_range[i + 1]) &&
(addr <= address_data->probe_range[i + 2])) { (addr <= address_data->probe_range[i + 2])) {
found = 1; found = 1;
......
...@@ -12,10 +12,11 @@ config INPUT_KEYBOARD ...@@ -12,10 +12,11 @@ config INPUT_KEYBOARD
If unsure, say Y. If unsure, say Y.
config KEYBOARD_ATKBD config KEYBOARD_ATKBD
tristate "AT keyboard support" if EMBEDDED || !X86 tristate "AT keyboard support" if !PC
default y default y
depends on INPUT && INPUT_KEYBOARD depends on INPUT && INPUT_KEYBOARD
select SERIO_I8042 select SERIO
select SERIO_I8042 if PC
help help
Say Y here if you want to use a standard AT or PS/2 keyboard. Usually Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
you'll need this, unless you have a different type keyboard (USB, ADB you'll need this, unless you have a different type keyboard (USB, ADB
......
...@@ -15,7 +15,8 @@ config MOUSE_PS2 ...@@ -15,7 +15,8 @@ config MOUSE_PS2
tristate "PS/2 mouse" tristate "PS/2 mouse"
default y default y
depends on INPUT && INPUT_MOUSE depends on INPUT && INPUT_MOUSE
select SERIO_I8042 select SERIO
select SERIO_I8042 if PC
---help--- ---help---
Say Y here if you have a PS/2 mouse connected to your system. This Say Y here if you have a PS/2 mouse connected to your system. This
includes the standard 2 or 3-button PS/2 mouse, as well as PS/2 includes the standard 2 or 3-button PS/2 mouse, as well as PS/2
......
...@@ -332,7 +332,7 @@ config MAC8390 ...@@ -332,7 +332,7 @@ config MAC8390
config MAC89x0 config MAC89x0
tristate "Macintosh CS89x0 based ethernet cards" tristate "Macintosh CS89x0 based ethernet cards"
depends on NETDEVICES && MAC depends on NETDEVICES && MAC && BROKEN
---help--- ---help---
Support for CS89x0 chipset based Ethernet cards. If you have a Support for CS89x0 chipset based Ethernet cards. If you have a
Nubus or LC-PDS network (Ethernet) card of this type, say Y and Nubus or LC-PDS network (Ethernet) card of this type, say Y and
...@@ -405,7 +405,7 @@ config ATARILANCE ...@@ -405,7 +405,7 @@ config ATARILANCE
config ATARI_BIONET config ATARI_BIONET
tristate "BioNet-100 support" tristate "BioNet-100 support"
depends on NETDEVICES && ATARI && ATARI_ACSI!=n depends on NETDEVICES && ATARI && ATARI_ACSI!=n && BROKEN
help help
Say Y to include support for BioData's BioNet-100 Ethernet adapter Say Y to include support for BioData's BioNet-100 Ethernet adapter
for the ACSI port. The driver works (has to work...) with a polled for the ACSI port. The driver works (has to work...) with a polled
...@@ -413,7 +413,7 @@ config ATARI_BIONET ...@@ -413,7 +413,7 @@ config ATARI_BIONET
config ATARI_PAMSNET config ATARI_PAMSNET
tristate "PAMsNet support" tristate "PAMsNet support"
depends on NETDEVICES && ATARI && ATARI_ACSI!=n depends on NETDEVICES && ATARI && ATARI_ACSI!=n && BROKEN
help help
Say Y to include support for the PAMsNet Ethernet adapter for the Say Y to include support for the PAMsNet Ethernet adapter for the
ACSI port ("ACSI node"). The driver works (has to work...) with a ACSI port ("ACSI node"). The driver works (has to work...) with a
...@@ -808,7 +808,7 @@ config ULTRA32 ...@@ -808,7 +808,7 @@ config ULTRA32
config SMC9194 config SMC9194
tristate "SMC 9194 support" tristate "SMC 9194 support"
depends on NET_VENDOR_SMC && (ISA || MAC) depends on NET_VENDOR_SMC && (ISA || MAC && BROKEN)
select CRC32 select CRC32
---help--- ---help---
This is support for the SMC9xxx based Ethernet cards. Choose this This is support for the SMC9xxx based Ethernet cards. Choose this
......
...@@ -442,14 +442,14 @@ int __init mac8390_initdev(struct net_device * dev, struct nubus_dev * ndev, ...@@ -442,14 +442,14 @@ int __init mac8390_initdev(struct net_device * dev, struct nubus_dev * ndev,
ei_status.tx_start_page = CABLETRON_TX_START_PG; ei_status.tx_start_page = CABLETRON_TX_START_PG;
ei_status.rx_start_page = CABLETRON_RX_START_PG; ei_status.rx_start_page = CABLETRON_RX_START_PG;
ei_status.stop_page = CABLETRON_RX_STOP_PG; ei_status.stop_page = CABLETRON_RX_STOP_PG;
dev->rmem_start = dev->mem_start; ei_status.rmem_start = dev->mem_start;
dev->rmem_end = dev->mem_start + CABLETRON_RX_STOP_PG*256; ei_status.rmem_end = dev->mem_start + CABLETRON_RX_STOP_PG*256;
} else { } else {
ei_status.tx_start_page = WD_START_PG; ei_status.tx_start_page = WD_START_PG;
ei_status.rx_start_page = WD_START_PG + TX_PAGES; ei_status.rx_start_page = WD_START_PG + TX_PAGES;
ei_status.stop_page = (dev->mem_end - dev->mem_start)/256; ei_status.stop_page = (dev->mem_end - dev->mem_start)/256;
dev->rmem_start = dev->mem_start + TX_PAGES*256; ei_status.rmem_start = dev->mem_start + TX_PAGES*256;
dev->rmem_end = dev->mem_end; ei_status.rmem_end = dev->mem_end;
} }
/* Fill in model-specific information and functions */ /* Fill in model-specific information and functions */
...@@ -621,12 +621,12 @@ static void sane_block_input(struct net_device *dev, int count, ...@@ -621,12 +621,12 @@ static void sane_block_input(struct net_device *dev, int count,
unsigned long xfer_base = ring_offset - (WD_START_PG<<8); unsigned long xfer_base = ring_offset - (WD_START_PG<<8);
unsigned long xfer_start = xfer_base + dev->mem_start; unsigned long xfer_start = xfer_base + dev->mem_start;
if (xfer_start + count > dev->rmem_end) { if (xfer_start + count > ei_status.rmem_end) {
/* We must wrap the input move. */ /* We must wrap the input move. */
int semi_count = dev->rmem_end - xfer_start; int semi_count = ei_status.rmem_end - xfer_start;
memcpy_fromio(skb->data, (char *)dev->mem_start + xfer_base, semi_count); memcpy_fromio(skb->data, (char *)dev->mem_start + xfer_base, semi_count);
count -= semi_count; count -= semi_count;
memcpy_toio(skb->data + semi_count, (char *)dev->rmem_start, count); memcpy_toio(skb->data + semi_count, (char *)ei_status.rmem_start, count);
} else { } else {
memcpy_fromio(skb->data, (char *)dev->mem_start + xfer_base, count); memcpy_fromio(skb->data, (char *)dev->mem_start + xfer_base, count);
} }
...@@ -658,14 +658,15 @@ static void dayna_block_input(struct net_device *dev, int count, struct sk_buff ...@@ -658,14 +658,15 @@ static void dayna_block_input(struct net_device *dev, int count, struct sk_buff
/* Note the offset math is done in card memory space which is word /* Note the offset math is done in card memory space which is word
per long onto our space. */ per long onto our space. */
if (xfer_start + count > dev->rmem_end) if (xfer_start + count > ei_status.rmem_end)
{ {
/* We must wrap the input move. */ /* We must wrap the input move. */
int semi_count = dev->rmem_end - xfer_start; int semi_count = ei_status.rmem_end - xfer_start;
dayna_memcpy_fromcard(dev, skb->data, xfer_base, semi_count); dayna_memcpy_fromcard(dev, skb->data, xfer_base, semi_count);
count -= semi_count; count -= semi_count;
dayna_memcpy_fromcard(dev, skb->data + semi_count, dayna_memcpy_fromcard(dev, skb->data + semi_count,
dev->rmem_start - dev->mem_start, count); ei_status.rmem_start - dev->mem_start,
count);
} }
else else
{ {
...@@ -697,15 +698,15 @@ static void slow_sane_block_input(struct net_device *dev, int count, struct sk_b ...@@ -697,15 +698,15 @@ static void slow_sane_block_input(struct net_device *dev, int count, struct sk_b
unsigned long xfer_base = ring_offset - (WD_START_PG<<8); unsigned long xfer_base = ring_offset - (WD_START_PG<<8);
unsigned long xfer_start = xfer_base+dev->mem_start; unsigned long xfer_start = xfer_base+dev->mem_start;
if (xfer_start + count > dev->rmem_end) if (xfer_start + count > ei_status.rmem_end)
{ {
/* We must wrap the input move. */ /* We must wrap the input move. */
int semi_count = dev->rmem_end - xfer_start; int semi_count = ei_status.rmem_end - xfer_start;
word_memcpy_fromcard(skb->data, (char *)dev->mem_start + word_memcpy_fromcard(skb->data, (char *)dev->mem_start +
xfer_base, semi_count); xfer_base, semi_count);
count -= semi_count; count -= semi_count;
word_memcpy_fromcard(skb->data + semi_count, word_memcpy_fromcard(skb->data + semi_count,
(char *)dev->rmem_start, count); (char *)ei_status.rmem_start, count);
} }
else else
{ {
......
...@@ -1435,7 +1435,7 @@ config A3000_SCSI ...@@ -1435,7 +1435,7 @@ config A3000_SCSI
config A4000T_SCSI config A4000T_SCSI
bool "A4000T SCSI support (EXPERIMENTAL)" bool "A4000T SCSI support (EXPERIMENTAL)"
depends on AMIGA && SCSI && EXPERIMENTAL depends on AMIGA && SCSI && EXPERIMENTAL && BROKEN
help help
Support for the NCR53C710 SCSI controller on the Amiga 4000T. Support for the NCR53C710 SCSI controller on the Amiga 4000T.
...@@ -1503,7 +1503,7 @@ config FASTLANE_SCSI ...@@ -1503,7 +1503,7 @@ config FASTLANE_SCSI
config A4091_SCSI config A4091_SCSI
bool "A4091 SCSI support (EXPERIMENTAL)" bool "A4091 SCSI support (EXPERIMENTAL)"
depends on ZORRO && SCSI && EXPERIMENTAL depends on ZORRO && SCSI && EXPERIMENTAL && BROKEN
help help
Support for the NCR53C710 chip on the Amiga 4091 Z3 SCSI2 controller Support for the NCR53C710 chip on the Amiga 4091 Z3 SCSI2 controller
(1993). Very obscure -- the 4091 was part of an Amiga 4000 upgrade (1993). Very obscure -- the 4091 was part of an Amiga 4000 upgrade
...@@ -1511,7 +1511,7 @@ config A4091_SCSI ...@@ -1511,7 +1511,7 @@ config A4091_SCSI
config WARPENGINE_SCSI config WARPENGINE_SCSI
bool "WarpEngine SCSI support (EXPERIMENTAL)" bool "WarpEngine SCSI support (EXPERIMENTAL)"
depends on ZORRO && SCSI && EXPERIMENTAL depends on ZORRO && SCSI && EXPERIMENTAL && BROKEN
help help
Support for MacroSystem Development's WarpEngine Amiga SCSI-2 Support for MacroSystem Development's WarpEngine Amiga SCSI-2
controller. Info at controller. Info at
...@@ -1519,7 +1519,7 @@ config WARPENGINE_SCSI ...@@ -1519,7 +1519,7 @@ config WARPENGINE_SCSI
config BLZ603EPLUS_SCSI config BLZ603EPLUS_SCSI
bool "Blizzard PowerUP 603e+ SCSI (EXPERIMENTAL)" bool "Blizzard PowerUP 603e+ SCSI (EXPERIMENTAL)"
depends on ZORRO && SCSI && EXPERIMENTAL depends on ZORRO && SCSI && EXPERIMENTAL && BROKEN
help help
If you have an Amiga 1200 with a Phase5 Blizzard PowerUP 603e+ If you have an Amiga 1200 with a Phase5 Blizzard PowerUP 603e+
accelerator, say Y. Otherwise, say N. accelerator, say Y. Otherwise, say N.
...@@ -1535,7 +1535,7 @@ config OKTAGON_SCSI ...@@ -1535,7 +1535,7 @@ config OKTAGON_SCSI
config ATARI_SCSI config ATARI_SCSI
tristate "Atari native SCSI support" tristate "Atari native SCSI support"
depends on ATARI && SCSI depends on ATARI && SCSI && BROKEN
---help--- ---help---
If you have an Atari with built-in NCR5380 SCSI controller (TT, If you have an Atari with built-in NCR5380 SCSI controller (TT,
Falcon, ...) say Y to get it supported. Of course also, if you have Falcon, ...) say Y to get it supported. Of course also, if you have
...@@ -1604,7 +1604,7 @@ config MVME147_SCSI ...@@ -1604,7 +1604,7 @@ config MVME147_SCSI
config MVME16x_SCSI config MVME16x_SCSI
bool "NCR53C710 SCSI driver for MVME16x" bool "NCR53C710 SCSI driver for MVME16x"
depends on MVME16x && SCSI depends on MVME16x && SCSI && BROKEN
help help
The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710 The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710
SCSI controller chip. Almost everyone using one of these boards SCSI controller chip. Almost everyone using one of these boards
...@@ -1612,7 +1612,7 @@ config MVME16x_SCSI ...@@ -1612,7 +1612,7 @@ config MVME16x_SCSI
config BVME6000_SCSI config BVME6000_SCSI
bool "NCR53C710 SCSI driver for BVME6000" bool "NCR53C710 SCSI driver for BVME6000"
depends on BVME6000 && SCSI depends on BVME6000 && SCSI && BROKEN
help help
The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710 The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710
SCSI controller chip. Almost everyone using one of these boards SCSI controller chip. Almost everyone using one of these boards
......
...@@ -25,31 +25,20 @@ ...@@ -25,31 +25,20 @@
#define DMA(ptr) ((a2091_scsiregs *)((ptr)->base)) #define DMA(ptr) ((a2091_scsiregs *)((ptr)->base))
#define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) #define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))
static struct Scsi_Host *first_instance = NULL; static irqreturn_t a2091_intr (int irq, void *_instance, struct pt_regs *fp)
static Scsi_Host_Template *a2091_template;
static irqreturn_t a2091_intr (int irq, void *dummy, struct pt_regs *fp)
{ {
unsigned long flags; unsigned long flags;
unsigned int status; unsigned int status;
struct Scsi_Host *instance; struct Scsi_Host *instance = (struct Scsi_Host *)_instance;
int handled = 0;
for (instance = first_instance; instance &&
instance->hostt == a2091_template; instance = instance->next)
{
status = DMA(instance)->ISTR; status = DMA(instance)->ISTR;
if (!(status & (ISTR_INT_F|ISTR_INT_P))) if (!(status & (ISTR_INT_F|ISTR_INT_P)) || !(status & ISTR_INTS))
continue; return IRQ_NONE;
if (status & ISTR_INTS) {
spin_lock_irqsave(instance->host_lock, flags); spin_lock_irqsave(instance->host_lock, flags);
wd33c93_intr (instance); wd33c93_intr(instance);
spin_unlock_irqrestore(instance->host_lock, flags); spin_unlock_irqrestore(instance->host_lock, flags);
handled = 1; return IRQ_HANDLED;
}
}
return IRQ_RETVAL(handled);
} }
static int dma_setup (Scsi_Cmnd *cmd, int dir_in) static int dma_setup (Scsi_Cmnd *cmd, int dir_in)
...@@ -184,8 +173,6 @@ static void dma_stop (struct Scsi_Host *instance, Scsi_Cmnd *SCpnt, ...@@ -184,8 +173,6 @@ static void dma_stop (struct Scsi_Host *instance, Scsi_Cmnd *SCpnt,
} }
} }
static int num_a2091 = 0;
int __init a2091_detect(Scsi_Host_Template *tpnt) int __init a2091_detect(Scsi_Host_Template *tpnt)
{ {
static unsigned char called = 0; static unsigned char called = 0;
...@@ -193,6 +180,7 @@ int __init a2091_detect(Scsi_Host_Template *tpnt) ...@@ -193,6 +180,7 @@ int __init a2091_detect(Scsi_Host_Template *tpnt)
unsigned long address; unsigned long address;
struct zorro_dev *z = NULL; struct zorro_dev *z = NULL;
wd33c93_regs regs; wd33c93_regs regs;
int num_a2091 = 0;
if (!MACH_IS_AMIGA || called) if (!MACH_IS_AMIGA || called)
return 0; return 0;
...@@ -221,13 +209,10 @@ int __init a2091_detect(Scsi_Host_Template *tpnt) ...@@ -221,13 +209,10 @@ int __init a2091_detect(Scsi_Host_Template *tpnt)
regs.SASR = &(DMA(instance)->SASR); regs.SASR = &(DMA(instance)->SASR);
regs.SCMD = &(DMA(instance)->SCMD); regs.SCMD = &(DMA(instance)->SCMD);
wd33c93_init(instance, regs, dma_setup, dma_stop, WD33C93_FS_8_10); wd33c93_init(instance, regs, dma_setup, dma_stop, WD33C93_FS_8_10);
if (num_a2091++ == 0) {
first_instance = instance;
a2091_template = instance->hostt;
request_irq(IRQ_AMIGA_PORTS, a2091_intr, SA_SHIRQ, "A2091 SCSI", request_irq(IRQ_AMIGA_PORTS, a2091_intr, SA_SHIRQ, "A2091 SCSI",
a2091_intr); instance);
}
DMA(instance)->CNTR = CNTR_PDMD | CNTR_INTEN; DMA(instance)->CNTR = CNTR_PDMD | CNTR_INTEN;
num_a2091++;
} }
return num_a2091; return num_a2091;
...@@ -266,8 +251,7 @@ int a2091_release(struct Scsi_Host *instance) ...@@ -266,8 +251,7 @@ int a2091_release(struct Scsi_Host *instance)
#ifdef MODULE #ifdef MODULE
DMA(instance)->CNTR = 0; DMA(instance)->CNTR = 0;
release_mem_region(ZTWO_PADDR(instance->base), 256); release_mem_region(ZTWO_PADDR(instance->base), 256);
if (--num_a2091 == 0) free_irq(IRQ_AMIGA_PORTS, instance);
free_irq(IRQ_AMIGA_PORTS, a2091_intr);
wd33c93_release(); wd33c93_release();
#endif #endif
return 1; return 1;
......
...@@ -25,29 +25,20 @@ ...@@ -25,29 +25,20 @@
#define DMA(ptr) ((gvp11_scsiregs *)((ptr)->base)) #define DMA(ptr) ((gvp11_scsiregs *)((ptr)->base))
#define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) #define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))
static struct Scsi_Host *first_instance = NULL; static irqreturn_t gvp11_intr (int irq, void *_instance, struct pt_regs *fp)
static Scsi_Host_Template *gvp11_template;
static irqreturn_t gvp11_intr (int irq, void *dummy, struct pt_regs *fp)
{ {
unsigned long flags; unsigned long flags;
unsigned int status; unsigned int status;
struct Scsi_Host *instance; struct Scsi_Host *instance = (struct Scsi_Host *)_instance;
int handled = 0;
for (instance = first_instance; instance &&
instance->hostt == gvp11_template; instance = instance->next)
{
status = DMA(instance)->CNTR; status = DMA(instance)->CNTR;
if (!(status & GVP11_DMAC_INT_PENDING)) if (!(status & GVP11_DMAC_INT_PENDING))
continue; return IRQ_NONE;
spin_lock_irqsave(instance->host_lock, flags); spin_lock_irqsave(instance->host_lock, flags);
wd33c93_intr (instance); wd33c93_intr(instance);
spin_unlock_irqrestore(instance->host_lock, flags); spin_unlock_irqrestore(instance->host_lock, flags);
handled = 1; return IRQ_HANDLED;
}
return IRQ_RETVAL(handled);
} }
static int gvp11_xfer_mask = 0; static int gvp11_xfer_mask = 0;
...@@ -177,8 +168,6 @@ static void dma_stop (struct Scsi_Host *instance, Scsi_Cmnd *SCpnt, ...@@ -177,8 +168,6 @@ static void dma_stop (struct Scsi_Host *instance, Scsi_Cmnd *SCpnt,
} }
} }
static int num_gvp11 = 0;
#define CHECK_WD33C93 #define CHECK_WD33C93
int __init gvp11_detect(Scsi_Host_Template *tpnt) int __init gvp11_detect(Scsi_Host_Template *tpnt)
...@@ -190,6 +179,7 @@ int __init gvp11_detect(Scsi_Host_Template *tpnt) ...@@ -190,6 +179,7 @@ int __init gvp11_detect(Scsi_Host_Template *tpnt)
struct zorro_dev *z = NULL; struct zorro_dev *z = NULL;
unsigned int default_dma_xfer_mask; unsigned int default_dma_xfer_mask;
wd33c93_regs regs; wd33c93_regs regs;
int num_gvp11 = 0;
#ifdef CHECK_WD33C93 #ifdef CHECK_WD33C93
volatile unsigned char *sasr_3393, *scmd_3393; volatile unsigned char *sasr_3393, *scmd_3393;
unsigned char save_sasr; unsigned char save_sasr;
...@@ -339,13 +329,10 @@ int __init gvp11_detect(Scsi_Host_Template *tpnt) ...@@ -339,13 +329,10 @@ int __init gvp11_detect(Scsi_Host_Template *tpnt)
(epc & GVP_SCSICLKMASK) ? WD33C93_FS_8_10 (epc & GVP_SCSICLKMASK) ? WD33C93_FS_8_10
: WD33C93_FS_12_15); : WD33C93_FS_12_15);
if (num_gvp11++ == 0) { request_irq(IRQ_AMIGA_PORTS, gvp11_intr, SA_SHIRQ, "GVP11 SCSI",
first_instance = instance; instance);
gvp11_template = instance->hostt;
request_irq(IRQ_AMIGA_PORTS, gvp11_intr, SA_SHIRQ,
"GVP11 SCSI", gvp11_intr);
}
DMA(instance)->CNTR = GVP11_DMAC_INT_ENABLE; DMA(instance)->CNTR = GVP11_DMAC_INT_ENABLE;
num_gvp11++;
continue; continue;
release: release:
...@@ -391,8 +378,7 @@ int gvp11_release(struct Scsi_Host *instance) ...@@ -391,8 +378,7 @@ int gvp11_release(struct Scsi_Host *instance)
#ifdef MODULE #ifdef MODULE
DMA(instance)->CNTR = 0; DMA(instance)->CNTR = 0;
release_mem_region(ZTWO_PADDR(instance->base), 256); release_mem_region(ZTWO_PADDR(instance->base), 256);
if (--num_gvp11 == 0) free_irq(IRQ_AMIGA_PORTS, instance);
free_irq(IRQ_AMIGA_PORTS, gvp11_intr);
wd33c93_release(); wd33c93_release();
#endif #endif
return 1; return 1;
......
...@@ -586,7 +586,7 @@ mega_find_card(Scsi_Host_Template *host_template, u16 pci_vendor, ...@@ -586,7 +586,7 @@ mega_find_card(Scsi_Host_Template *host_template, u16 pci_vendor,
/* Set the Mode of addressing to 64 bit if we can */ /* Set the Mode of addressing to 64 bit if we can */
if((adapter->flag & BOARD_64BIT)&&(sizeof(dma_addr_t) == 8)) { if((adapter->flag & BOARD_64BIT)&&(sizeof(dma_addr_t) == 8)) {
pci_set_dma_mask(pdev, 0xffffffffffffffff); pci_set_dma_mask(pdev, 0xffffffffffffffffULL);
adapter->has_64bit_addr = 1; adapter->has_64bit_addr = 1;
} }
else { else {
......
...@@ -718,8 +718,8 @@ int isp2x00_detect(Scsi_Host_Template * tmpt) ...@@ -718,8 +718,8 @@ int isp2x00_detect(Scsi_Host_Template * tmpt)
continue; continue;
/* Try to configure DMA attributes. */ /* Try to configure DMA attributes. */
if (pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff) && if (pci_set_dma_mask(pdev, 0xffffffffffffffffULL) &&
pci_set_dma_mask(pdev, (u64) 0xffffffff)) pci_set_dma_mask(pdev, 0xffffffffULL))
continue; continue;
host = scsi_register(tmpt, sizeof(struct isp2x00_hostdata)); host = scsi_register(tmpt, sizeof(struct isp2x00_hostdata));
......
...@@ -308,7 +308,6 @@ int sun3scsi_detect(Scsi_Host_Template * tpnt) ...@@ -308,7 +308,6 @@ int sun3scsi_detect(Scsi_Host_Template * tpnt)
return 1; return 1;
} }
#ifdef MODULE
int sun3scsi_release (struct Scsi_Host *shpnt) int sun3scsi_release (struct Scsi_Host *shpnt)
{ {
if (shpnt->irq != SCSI_IRQ_NONE) if (shpnt->irq != SCSI_IRQ_NONE)
...@@ -318,7 +317,6 @@ int sun3scsi_release (struct Scsi_Host *shpnt) ...@@ -318,7 +317,6 @@ int sun3scsi_release (struct Scsi_Host *shpnt)
return 0; return 0;
} }
#endif
#ifdef RESET_BOOT #ifdef RESET_BOOT
/* /*
......
...@@ -52,11 +52,7 @@ static int sun3scsi_detect (Scsi_Host_Template *); ...@@ -52,11 +52,7 @@ static int sun3scsi_detect (Scsi_Host_Template *);
static const char *sun3scsi_info (struct Scsi_Host *); static const char *sun3scsi_info (struct Scsi_Host *);
static int sun3scsi_bus_reset(Scsi_Cmnd *); static int sun3scsi_bus_reset(Scsi_Cmnd *);
static int sun3scsi_queue_command (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); static int sun3scsi_queue_command (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
#ifdef MODULE
static int sun3scsi_release (struct Scsi_Host *); static int sun3scsi_release (struct Scsi_Host *);
#else
#define sun3scsi_release NULL
#endif
#ifndef CMD_PER_LUN #ifndef CMD_PER_LUN
#define CMD_PER_LUN 2 #define CMD_PER_LUN 2
......
...@@ -140,7 +140,7 @@ static struct Scsi_Host *default_instance; ...@@ -140,7 +140,7 @@ static struct Scsi_Host *default_instance;
static int sun3scsi_detect(Scsi_Host_Template * tpnt) static int sun3scsi_detect(Scsi_Host_Template * tpnt)
{ {
unsigned long ioaddr, irq; unsigned long ioaddr, irq = 0;
static int called = 0; static int called = 0;
struct Scsi_Host *instance; struct Scsi_Host *instance;
int i; int i;
...@@ -277,17 +277,15 @@ static int sun3scsi_detect(Scsi_Host_Template * tpnt) ...@@ -277,17 +277,15 @@ static int sun3scsi_detect(Scsi_Host_Template * tpnt)
return 1; return 1;
} }
#ifdef MODULE
int sun3scsi_release (struct Scsi_Host *shpnt) int sun3scsi_release (struct Scsi_Host *shpnt)
{ {
if (shpnt->irq != SCSI_IRQ_NONE) if (shpnt->irq != SCSI_IRQ_NONE)
free_irq (shpnt->irq, NULL); free_irq (shpnt->irq, NULL);
iounmap(sun3_scsi_regp); iounmap((void *)sun3_scsi_regp);
return 0; return 0;
} }
#endif
#ifdef RESET_BOOT #ifdef RESET_BOOT
/* /*
......
...@@ -188,19 +188,19 @@ config FB_AMIGA_AGA ...@@ -188,19 +188,19 @@ config FB_AMIGA_AGA
otherwise say N. otherwise say N.
config FB_CYBER config FB_CYBER
tristate "Amiga CyberVision support" tristate "Amiga CyberVision 64 support"
depends on FB && ZORRO depends on FB && ZORRO && BROKEN
help help
This enables support for the Cybervision 64 graphics card from This enables support for the Cybervision 64 graphics card from
Phase5. Please note that its use is not all that intuitive (i.e. if Phase5. Please note that its use is not all that intuitive (i.e. if
you have any questions, be sure to ask!). Say N unless you have a you have any questions, be sure to ask!). Say N unless you have a
Cybervision 64 or plan to get one before you next recompile the Cybervision 64 or plan to get one before you next recompile the
kernel. Please note that this driver DOES NOT support the kernel. Please note that this driver DOES NOT support the
Cybervision 64 3D card, as they use incompatible video chips. Cybervision 64/3D card, as they use incompatible video chips.
config FB_VIRGE config FB_VIRGE
bool "Amiga CyberVision3D support " bool "Amiga CyberVision 64/3D support "
depends on FB && ZORRO depends on FB && ZORRO && BROKEN
help help
This enables support for the Cybervision 64/3D graphics card from This enables support for the Cybervision 64/3D graphics card from
Phase5. Please note that its use is not all that intuitive (i.e. if Phase5. Please note that its use is not all that intuitive (i.e. if
...@@ -210,8 +210,8 @@ config FB_VIRGE ...@@ -210,8 +210,8 @@ config FB_VIRGE
Cybervision 64 card, as they use incompatible video chips. Cybervision 64 card, as they use incompatible video chips.
config FB_RETINAZ3 config FB_RETINAZ3
tristate "Amiga RetinaZ3 support" tristate "Amiga Retina Z3 support"
depends on FB && ZORRO depends on FB && ZORRO && BROKEN
help help
This enables support for the Retina Z3 graphics card. Say N unless This enables support for the Retina Z3 graphics card. Say N unless
you have a Retina Z3 or plan to get one before you next recompile you have a Retina Z3 or plan to get one before you next recompile
...@@ -226,7 +226,7 @@ config FB_FM2 ...@@ -226,7 +226,7 @@ config FB_FM2
config FB_ATARI config FB_ATARI
bool "Atari native chipset support" bool "Atari native chipset support"
depends on FB && ATARI depends on FB && ATARI && BROKEN
help help
This is the frame buffer device driver for the builtin graphics This is the frame buffer device driver for the builtin graphics
chipset found in Ataris. chipset found in Ataris.
...@@ -367,7 +367,7 @@ config BUS_I2C ...@@ -367,7 +367,7 @@ config BUS_I2C
config FB_SUN3 config FB_SUN3
bool "Sun3 framebuffer support" bool "Sun3 framebuffer support"
depends on FB && (SUN3 || SUN3X) depends on FB && (SUN3 || SUN3X) && BROKEN
config FB_BW2 config FB_BW2
bool "BWtwo support" bool "BWtwo support"
......
...@@ -1254,6 +1254,8 @@ menu "Network File Systems" ...@@ -1254,6 +1254,8 @@ menu "Network File Systems"
config NFS_FS config NFS_FS
tristate "NFS file system support" tristate "NFS file system support"
depends on INET depends on INET
select LOCKD
select SUNRPC
help help
If you are connected to some other (usually local) Unix computer If you are connected to some other (usually local) Unix computer
(using SLIP, PLIP, PPP or Ethernet) and want to mount files residing (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing
...@@ -1309,6 +1311,8 @@ config NFS_V4 ...@@ -1309,6 +1311,8 @@ config NFS_V4
config NFSD config NFSD
tristate "NFS server support" tristate "NFS server support"
depends on INET depends on INET
select LOCKD
select SUNRPC
help help
If you want your Linux box to act as an NFS *server*, so that other If you want your Linux box to act as an NFS *server*, so that other
computers on your local network which support NFS can access certain computers on your local network which support NFS can access certain
...@@ -1371,8 +1375,6 @@ config ROOT_NFS ...@@ -1371,8 +1375,6 @@ config ROOT_NFS
config LOCKD config LOCKD
tristate tristate
default m if NFS_FS!=y && NFSD!=y && (NFS_FS=m || NFSD=m)
default y if NFS_FS=y || NFSD=y
config LOCKD_V4 config LOCKD_V4
bool bool
...@@ -1385,8 +1387,6 @@ config EXPORTFS ...@@ -1385,8 +1387,6 @@ config EXPORTFS
config SUNRPC config SUNRPC
tristate tristate
default m if NFS_FS!=y && NFSD!=y && (NFS_FS=m || NFSD=m)
default y if NFS_FS=y || NFSD=y
config SUNRPC_GSS config SUNRPC_GSS
tristate "Provide RPCSEC_GSS authentication (EXPERIMENTAL)" tristate "Provide RPCSEC_GSS authentication (EXPERIMENTAL)"
...@@ -1565,6 +1565,7 @@ config AFS_FS ...@@ -1565,6 +1565,7 @@ config AFS_FS
# for fs/nls/Config.in # for fs/nls/Config.in
tristate "Andrew File System support (AFS) (Experimental)" tristate "Andrew File System support (AFS) (Experimental)"
depends on INET && EXPERIMENTAL depends on INET && EXPERIMENTAL
select RXRPC
help help
If you say Y here, you will get an experimental Andrew File System If you say Y here, you will get an experimental Andrew File System
driver. It currently only supports unsecured read-only AFS access. driver. It currently only supports unsecured read-only AFS access.
...@@ -1575,8 +1576,6 @@ config AFS_FS ...@@ -1575,8 +1576,6 @@ config AFS_FS
config RXRPC config RXRPC
tristate tristate
default m if AFS_FS=m
default y if AFS_FS=y
endmenu endmenu
......
...@@ -39,7 +39,7 @@ static int affs_grow_extcache(struct inode *inode, u32 lc_idx); ...@@ -39,7 +39,7 @@ static int affs_grow_extcache(struct inode *inode, u32 lc_idx);
static struct buffer_head *affs_alloc_extblock(struct inode *inode, struct buffer_head *bh, u32 ext); static struct buffer_head *affs_alloc_extblock(struct inode *inode, struct buffer_head *bh, u32 ext);
static inline struct buffer_head *affs_get_extblock(struct inode *inode, u32 ext); static inline struct buffer_head *affs_get_extblock(struct inode *inode, u32 ext);
static struct buffer_head *affs_get_extblock_slow(struct inode *inode, u32 ext); static struct buffer_head *affs_get_extblock_slow(struct inode *inode, u32 ext);
static ssize_t affs_file_write(struct file *filp, const char *buf, size_t count, loff_t *ppos); static ssize_t affs_file_write(struct file *filp, const char __user *buf, size_t count, loff_t *ppos);
static int affs_file_open(struct inode *inode, struct file *filp); static int affs_file_open(struct inode *inode, struct file *filp);
static int affs_file_release(struct inode *inode, struct file *filp); static int affs_file_release(struct inode *inode, struct file *filp);
...@@ -491,7 +491,8 @@ affs_getemptyblk_ino(struct inode *inode, int block) ...@@ -491,7 +491,8 @@ affs_getemptyblk_ino(struct inode *inode, int block)
} }
static ssize_t static ssize_t
affs_file_write(struct file *file, const char *buf, size_t count, loff_t *ppos) affs_file_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{ {
ssize_t retval; ssize_t retval;
......
...@@ -39,7 +39,7 @@ static struct inode *befs_alloc_inode(struct super_block *sb); ...@@ -39,7 +39,7 @@ static struct inode *befs_alloc_inode(struct super_block *sb);
static void befs_destroy_inode(struct inode *inode); static void befs_destroy_inode(struct inode *inode);
static int befs_init_inodecache(void); static int befs_init_inodecache(void);
static void befs_destroy_inodecache(void); static void befs_destroy_inodecache(void);
static int befs_readlink(struct dentry *, char *, int); static int befs_readlink(struct dentry *, char __user *, int);
static int befs_follow_link(struct dentry *, struct nameidata *nd); static int befs_follow_link(struct dentry *, struct nameidata *nd);
static int befs_utf2nls(struct super_block *sb, const char *in, int in_len, static int befs_utf2nls(struct super_block *sb, const char *in, int in_len,
char **out, int *out_len); char **out, int *out_len);
...@@ -494,7 +494,7 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd) ...@@ -494,7 +494,7 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd)
} }
static int static int
befs_readlink(struct dentry *dentry, char *buffer, int buflen) befs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{ {
struct super_block *sb = dentry->d_sb; struct super_block *sb = dentry->d_sb;
befs_inode_info *befs_ino = BEFS_I(dentry->d_inode); befs_inode_info *befs_ino = BEFS_I(dentry->d_inode);
......
...@@ -47,7 +47,7 @@ static int ext3_release_file (struct inode * inode, struct file * filp) ...@@ -47,7 +47,7 @@ static int ext3_release_file (struct inode * inode, struct file * filp)
* the caller didn't specify O_LARGEFILE. On 64bit systems we force * the caller didn't specify O_LARGEFILE. On 64bit systems we force
* on this flag in sys_open. * on this flag in sys_open.
*/ */
static int ext3_open_file (struct inode * inode, struct file * filp) static int ext3_open_file (struct inode *inode, struct file *filp)
{ {
if (!(filp->f_flags & O_LARGEFILE) && if (!(filp->f_flags & O_LARGEFILE) &&
inode->i_size > 0x7FFFFFFFLL) inode->i_size > 0x7FFFFFFFLL)
...@@ -56,7 +56,7 @@ static int ext3_open_file (struct inode * inode, struct file * filp) ...@@ -56,7 +56,7 @@ static int ext3_open_file (struct inode * inode, struct file * filp)
} }
static ssize_t static ssize_t
ext3_file_write(struct kiocb *iocb, const char *buf, size_t count, loff_t pos) ext3_file_write(struct kiocb *iocb, const char __user *buf, size_t count, loff_t pos)
{ {
struct file *file = iocb->ki_filp; struct file *file = iocb->ki_filp;
struct inode *inode = file->f_dentry->d_inode; struct inode *inode = file->f_dentry->d_inode;
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
#include <linux/ext3_fs.h> #include <linux/ext3_fs.h>
#include "xattr.h" #include "xattr.h"
static int ext3_readlink(struct dentry *dentry, char *buffer, int buflen) static int
ext3_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{ {
struct ext3_inode_info *ei = EXT3_I(dentry->d_inode); struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
return vfs_readlink(dentry, buffer, buflen, (char*)ei->i_data); return vfs_readlink(dentry, buffer, buflen, (char*)ei->i_data);
......
...@@ -663,7 +663,7 @@ int fat_dir_ioctl(struct inode * inode, struct file * filp, ...@@ -663,7 +663,7 @@ int fat_dir_ioctl(struct inode * inode, struct file * filp,
return -EINVAL; return -EINVAL;
} }
d1 = (struct dirent *)arg; d1 = (struct dirent __user *)arg;
if (!access_ok(VERIFY_WRITE, d1, sizeof(struct dirent[2]))) if (!access_ok(VERIFY_WRITE, d1, sizeof(struct dirent[2])))
return -EFAULT; return -EFAULT;
/* /*
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#include "vxfs_inode.h" #include "vxfs_inode.h"
static int vxfs_immed_readlink(struct dentry *, char *, int); static int vxfs_immed_readlink(struct dentry *, char __user *, int);
static int vxfs_immed_follow_link(struct dentry *, struct nameidata *); static int vxfs_immed_follow_link(struct dentry *, struct nameidata *);
static int vxfs_immed_readpage(struct file *, struct page *); static int vxfs_immed_readpage(struct file *, struct page *);
...@@ -77,7 +77,7 @@ struct address_space_operations vxfs_immed_aops = { ...@@ -77,7 +77,7 @@ struct address_space_operations vxfs_immed_aops = {
* Number of bytes successfully copied to userspace. * Number of bytes successfully copied to userspace.
*/ */
static int static int
vxfs_immed_readlink(struct dentry *dp, char *bp, int buflen) vxfs_immed_readlink(struct dentry *dp, char __user *bp, int buflen)
{ {
struct vxfs_inode_info *vip = VXFS_INO(dp->d_inode); struct vxfs_inode_info *vip = VXFS_INO(dp->d_inode);
......
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
/*================ Forward declarations ================*/ /*================ Forward declarations ================*/
static hfs_rwret_t hfs_file_read(struct file *, char *, hfs_rwarg_t, static hfs_rwret_t hfs_file_read(struct file *, char __user *, hfs_rwarg_t,
loff_t *);
static hfs_rwret_t hfs_file_write(struct file *, const char *, hfs_rwarg_t,
loff_t *); loff_t *);
static hfs_rwret_t hfs_file_write(struct file *, const char __user *,
hfs_rwarg_t, loff_t *);
static void hfs_file_truncate(struct inode *); static void hfs_file_truncate(struct inode *);
/*================ Global variables ================*/ /*================ Global variables ================*/
...@@ -139,7 +139,7 @@ int hfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_r ...@@ -139,7 +139,7 @@ int hfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_r
* user-space at the address 'buf'. Returns the number of bytes * user-space at the address 'buf'. Returns the number of bytes
* successfully transferred. This function checks the arguments, does * successfully transferred. This function checks the arguments, does
* some setup and then calls hfs_do_read() to do the actual transfer. */ * some setup and then calls hfs_do_read() to do the actual transfer. */
static hfs_rwret_t hfs_file_read(struct file * filp, char * buf, static hfs_rwret_t hfs_file_read(struct file *filp, char __user *buf,
hfs_rwarg_t count, loff_t *ppos) hfs_rwarg_t count, loff_t *ppos)
{ {
struct inode *inode = filp->f_dentry->d_inode; struct inode *inode = filp->f_dentry->d_inode;
...@@ -181,7 +181,7 @@ static hfs_rwret_t hfs_file_read(struct file * filp, char * buf, ...@@ -181,7 +181,7 @@ static hfs_rwret_t hfs_file_read(struct file * filp, char * buf,
* 'file->f_pos' from user-space at the address 'buf'. The return * 'file->f_pos' from user-space at the address 'buf'. The return
* value is the number of bytes actually transferred. * value is the number of bytes actually transferred.
*/ */
static hfs_rwret_t hfs_file_write(struct file * filp, const char * buf, static hfs_rwret_t hfs_file_write(struct file *filp, const char __user *buf,
hfs_rwarg_t count, loff_t *ppos) hfs_rwarg_t count, loff_t *ppos)
{ {
struct inode *inode = filp->f_dentry->d_inode; struct inode *inode = filp->f_dentry->d_inode;
...@@ -242,7 +242,7 @@ static void hfs_file_truncate(struct inode * inode) ...@@ -242,7 +242,7 @@ static void hfs_file_truncate(struct inode * inode)
* *
* Like copy_to_user() while translating CR->NL. * Like copy_to_user() while translating CR->NL.
*/ */
static inline void xlate_to_user(char *buf, const char *data, int count) static inline void xlate_to_user(char __user *buf, const char *data, int count)
{ {
char ch; char ch;
...@@ -257,7 +257,8 @@ static inline void xlate_to_user(char *buf, const char *data, int count) ...@@ -257,7 +257,8 @@ static inline void xlate_to_user(char *buf, const char *data, int count)
* *
* Like copy_from_user() while translating NL->CR; * Like copy_from_user() while translating NL->CR;
*/ */
static inline int xlate_from_user(char *data, const char *buf, int count) static inline
int xlate_from_user(char *data, const char __user *buf, int count)
{ {
int i; int i;
...@@ -290,8 +291,8 @@ static inline int xlate_from_user(char *data, const char *buf, int count) ...@@ -290,8 +291,8 @@ static inline int xlate_from_user(char *data, const char *buf, int count)
* This is based on Linus's minix_file_read(). * This is based on Linus's minix_file_read().
* It has been changed to take into account that HFS files have no holes. * It has been changed to take into account that HFS files have no holes.
*/ */
hfs_s32 hfs_do_read(struct inode *inode, struct hfs_fork * fork, hfs_u32 pos, hfs_s32 hfs_do_read(struct inode *inode, struct hfs_fork *fork, hfs_u32 pos,
char * buf, hfs_u32 count) char __user *buf, hfs_u32 count)
{ {
hfs_s32 size, chars, offset, block, blocks, read = 0; hfs_s32 size, chars, offset, block, blocks, read = 0;
int bhrequest, uptodate; int bhrequest, uptodate;
...@@ -436,8 +437,8 @@ hfs_s32 hfs_do_read(struct inode *inode, struct hfs_fork * fork, hfs_u32 pos, ...@@ -436,8 +437,8 @@ hfs_s32 hfs_do_read(struct inode *inode, struct hfs_fork * fork, hfs_u32 pos,
* *
* This is just a minor edit of Linus's minix_file_write(). * This is just a minor edit of Linus's minix_file_write().
*/ */
hfs_s32 hfs_do_write(struct inode *inode, struct hfs_fork * fork, hfs_u32 pos, hfs_s32 hfs_do_write(struct inode *inode, struct hfs_fork *fork, hfs_u32 pos,
const char * buf, hfs_u32 count) const char __user *buf, hfs_u32 count)
{ {
hfs_s32 written, c; hfs_s32 written, c;
struct buffer_head * bh; struct buffer_head * bh;
......
...@@ -29,9 +29,9 @@ ...@@ -29,9 +29,9 @@
/*================ Forward declarations ================*/ /*================ Forward declarations ================*/
static loff_t cap_info_llseek(struct file *, loff_t, static loff_t cap_info_llseek(struct file *, loff_t,
int); int);
static hfs_rwret_t cap_info_read(struct file *, char *, static hfs_rwret_t cap_info_read(struct file *, char __user *,
hfs_rwarg_t, loff_t *); hfs_rwarg_t, loff_t *);
static hfs_rwret_t cap_info_write(struct file *, const char *, static hfs_rwret_t cap_info_write(struct file *, const char __user *,
hfs_rwarg_t, loff_t *); hfs_rwarg_t, loff_t *);
/*================ Function-like macros ================*/ /*================ Function-like macros ================*/
...@@ -121,7 +121,7 @@ static loff_t cap_info_llseek(struct file *file, loff_t offset, int origin) ...@@ -121,7 +121,7 @@ static loff_t cap_info_llseek(struct file *file, loff_t offset, int origin)
* 'file->f_pos' to user-space at the address 'buf'. The return value * 'file->f_pos' to user-space at the address 'buf'. The return value
* is the number of bytes actually transferred. * is the number of bytes actually transferred.
*/ */
static hfs_rwret_t cap_info_read(struct file *filp, char *buf, static hfs_rwret_t cap_info_read(struct file *filp, char __user *buf,
hfs_rwarg_t count, loff_t *ppos) hfs_rwarg_t count, loff_t *ppos)
{ {
struct inode *inode = filp->f_dentry->d_inode; struct inode *inode = filp->f_dentry->d_inode;
...@@ -189,7 +189,7 @@ static hfs_rwret_t cap_info_read(struct file *filp, char *buf, ...@@ -189,7 +189,7 @@ static hfs_rwret_t cap_info_read(struct file *filp, char *buf,
* '*ppos' from user-space at the address 'buf'. * '*ppos' from user-space at the address 'buf'.
* The return value is the number of bytes actually transferred. * The return value is the number of bytes actually transferred.
*/ */
static hfs_rwret_t cap_info_write(struct file *filp, const char *buf, static hfs_rwret_t cap_info_write(struct file *filp, const char __user *buf,
hfs_rwarg_t count, loff_t *ppos) hfs_rwarg_t count, loff_t *ppos)
{ {
struct inode *inode = filp->f_dentry->d_inode; struct inode *inode = filp->f_dentry->d_inode;
......
...@@ -41,8 +41,9 @@ ...@@ -41,8 +41,9 @@
/*================ Forward declarations ================*/ /*================ Forward declarations ================*/
static loff_t hdr_llseek(struct file *, loff_t, int); static loff_t hdr_llseek(struct file *, loff_t, int);
static hfs_rwret_t hdr_read(struct file *, char *, hfs_rwarg_t, loff_t *); static hfs_rwret_t hdr_read(struct file *, char __user *,
static hfs_rwret_t hdr_write(struct file *, const char *, hfs_rwarg_t, loff_t *);
static hfs_rwret_t hdr_write(struct file *, const char __user *,
hfs_rwarg_t, loff_t *); hfs_rwarg_t, loff_t *);
/*================ Global variables ================*/ /*================ Global variables ================*/
...@@ -382,7 +383,7 @@ loff_t hdr_llseek(struct file *file, loff_t offset, int origin) ...@@ -382,7 +383,7 @@ loff_t hdr_llseek(struct file *file, loff_t offset, int origin)
* successfully transferred. * successfully transferred.
*/ */
/* XXX: what about the entry count changing on us? */ /* XXX: what about the entry count changing on us? */
static hfs_rwret_t hdr_read(struct file * filp, char * buf, static hfs_rwret_t hdr_read(struct file *filp, char __user *buf,
hfs_rwarg_t count, loff_t *ppos) hfs_rwarg_t count, loff_t *ppos)
{ {
struct inode *inode = filp->f_dentry->d_inode; struct inode *inode = filp->f_dentry->d_inode;
...@@ -633,7 +634,7 @@ static hfs_rwret_t hdr_read(struct file * filp, char * buf, ...@@ -633,7 +634,7 @@ static hfs_rwret_t hdr_read(struct file * filp, char * buf,
* '*ppos' from user-space at the address 'buf'. * '*ppos' from user-space at the address 'buf'.
* The return value is the number of bytes actually transferred. * The return value is the number of bytes actually transferred.
*/ */
static hfs_rwret_t hdr_write(struct file *filp, const char *buf, static hfs_rwret_t hdr_write(struct file *filp, const char __user *buf,
hfs_rwarg_t count, loff_t *ppos) hfs_rwarg_t count, loff_t *ppos)
{ {
struct inode *inode = filp->f_dentry->d_inode; struct inode *inode = filp->f_dentry->d_inode;
......
...@@ -124,7 +124,8 @@ struct address_space_operations hpfs_aops = { ...@@ -124,7 +124,8 @@ struct address_space_operations hpfs_aops = {
.bmap = _hpfs_bmap .bmap = _hpfs_bmap
}; };
ssize_t hpfs_file_write(struct file *file, const char *buf, size_t count, loff_t *ppos) ssize_t hpfs_file_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{ {
ssize_t retval; ssize_t retval;
......
...@@ -249,7 +249,7 @@ int hpfs_file_fsync(struct file *, struct dentry *, int); ...@@ -249,7 +249,7 @@ int hpfs_file_fsync(struct file *, struct dentry *, int);
secno hpfs_bmap(struct inode *, unsigned); secno hpfs_bmap(struct inode *, unsigned);
void hpfs_truncate(struct inode *); void hpfs_truncate(struct inode *);
int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create); int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create);
ssize_t hpfs_file_write(struct file *file, const char *buf, size_t count, loff_t *ppos); ssize_t hpfs_file_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos);
/* inode.c */ /* inode.c */
......
...@@ -1800,7 +1800,7 @@ int read_jbd_debug(char *page, char **start, off_t off, ...@@ -1800,7 +1800,7 @@ int read_jbd_debug(char *page, char **start, off_t off,
return ret; return ret;
} }
int write_jbd_debug(struct file *file, const char *buffer, int write_jbd_debug(struct file *file, const char __user *buffer,
unsigned long count, void *data) unsigned long count, void *data)
{ {
char buf[32]; char buf[32];
......
...@@ -81,7 +81,7 @@ static int loglevel_read(char *page, char **start, off_t off, ...@@ -81,7 +81,7 @@ static int loglevel_read(char *page, char **start, off_t off,
return len; return len;
} }
static int loglevel_write(struct file *file, const char *buffer, static int loglevel_write(struct file *file, const char __user *buffer,
unsigned long count, void *data) unsigned long count, void *data)
{ {
char c; char c;
......
...@@ -26,7 +26,7 @@ static int jfs_follow_link(struct dentry *dentry, struct nameidata *nd) ...@@ -26,7 +26,7 @@ static int jfs_follow_link(struct dentry *dentry, struct nameidata *nd)
return vfs_follow_link(nd, s); return vfs_follow_link(nd, s);
} }
static int jfs_readlink(struct dentry *dentry, char *buffer, int buflen) static int jfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{ {
char *s = JFS_IP(dentry->d_inode)->i_inline; char *s = JFS_IP(dentry->d_inode)->i_inline;
return vfs_readlink(dentry, buffer, buflen, s); return vfs_readlink(dentry, buffer, buflen, s);
......
...@@ -164,9 +164,10 @@ extern __inline__ int test_bit(int nr, const volatile unsigned long * vaddr) ...@@ -164,9 +164,10 @@ extern __inline__ int test_bit(int nr, const volatile unsigned long * vaddr)
return ((1UL << (nr & 31)) & (((const volatile unsigned long *) vaddr)[nr >> 5])) != 0; return ((1UL << (nr & 31)) & (((const volatile unsigned long *) vaddr)[nr >> 5])) != 0;
} }
extern __inline__ int find_first_zero_bit(unsigned long * vaddr, unsigned size) extern __inline__ int find_first_zero_bit(const unsigned long *vaddr,
unsigned size)
{ {
unsigned long *p = vaddr, *addr = vaddr; const unsigned long *p = vaddr, *addr = vaddr;
unsigned long allones = ~0UL; unsigned long allones = ~0UL;
int res; int res;
unsigned long num; unsigned long num;
...@@ -187,11 +188,11 @@ extern __inline__ int find_first_zero_bit(unsigned long * vaddr, unsigned size) ...@@ -187,11 +188,11 @@ extern __inline__ int find_first_zero_bit(unsigned long * vaddr, unsigned size)
return ((p - addr) << 5) + (res ^ 31); return ((p - addr) << 5) + (res ^ 31);
} }
extern __inline__ int find_next_zero_bit (unsigned long *vaddr, int size, extern __inline__ int find_next_zero_bit (const unsigned long *vaddr, int size,
int offset) int offset)
{ {
unsigned long *addr = vaddr; const unsigned long *addr = vaddr;
unsigned long *p = addr + (offset >> 5); const unsigned long *p = addr + (offset >> 5);
int set = 0, bit = offset & 31UL, res; int set = 0, bit = offset & 31UL, res;
if (offset >= size) if (offset >= size)
...@@ -263,7 +264,7 @@ static inline int fls(int x) ...@@ -263,7 +264,7 @@ static inline int fls(int x)
* unlikely to be set. It's guaranteed that at least one of the 140 * unlikely to be set. It's guaranteed that at least one of the 140
* bits is cleared. * bits is cleared.
*/ */
static inline int sched_find_first_bit(unsigned long *b) static inline int sched_find_first_bit(const unsigned long *b)
{ {
if (unlikely(b[0])) if (unlikely(b[0]))
return __ffs(b[0]); return __ffs(b[0]);
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* Written by Wout Klaren. * Written by Wout Klaren.
*/ */
#include <asm/scatterlist.h>
struct pci_ops; struct pci_ops;
/* /*
......
...@@ -42,4 +42,4 @@ extern inline void *z_remap_fullcache(unsigned long physaddr, ...@@ -42,4 +42,4 @@ extern inline void *z_remap_fullcache(unsigned long physaddr,
#define z_iounmap iounmap #define z_iounmap iounmap
#define z_ioremap z_remap_nocache_ser #define z_ioremap z_remap_nocache_ser
#endif /* _ASM_ZORRO_H */ #endif /* _ASM_M68K_ZORRO_H */
...@@ -27,4 +27,4 @@ extern void *__ioremap(unsigned long address, unsigned long size, ...@@ -27,4 +27,4 @@ extern void *__ioremap(unsigned long address, unsigned long size,
#define z_ioremap ioremap #define z_ioremap ioremap
#define z_iounmap iounmap #define z_iounmap iounmap
#endif /* _ASM_ZORRO_H */ #endif /* _ASM_PPC_ZORRO_H */
...@@ -267,9 +267,9 @@ extern void hfs_nat_drop_dentry(struct dentry *, const ino_t); ...@@ -267,9 +267,9 @@ extern void hfs_nat_drop_dentry(struct dentry *, const ino_t);
/* file.c */ /* file.c */
extern hfs_s32 hfs_do_read(struct inode *, struct hfs_fork *, hfs_u32, extern hfs_s32 hfs_do_read(struct inode *, struct hfs_fork *, hfs_u32,
char *, hfs_u32); char __user *, hfs_u32);
extern hfs_s32 hfs_do_write(struct inode *, struct hfs_fork *, hfs_u32, extern hfs_s32 hfs_do_write(struct inode *, struct hfs_fork *, hfs_u32,
const char *, hfs_u32); const char __user *, hfs_u32);
extern void hfs_file_fix_mode(struct hfs_cat_entry *entry); extern void hfs_file_fix_mode(struct hfs_cat_entry *entry);
extern struct inode_operations hfs_file_inode_operations; extern struct inode_operations hfs_file_inode_operations;
extern struct file_operations hfs_file_operations; extern struct file_operations hfs_file_operations;
......
...@@ -146,7 +146,7 @@ static void __init free_bootmem_core(bootmem_data_t *bdata, unsigned long addr, ...@@ -146,7 +146,7 @@ static void __init free_bootmem_core(bootmem_data_t *bdata, unsigned long addr,
* We 'merge' subsequent allocations to save space. We might 'lose' * We 'merge' subsequent allocations to save space. We might 'lose'
* some fraction of a page if allocations cannot be satisfied due to * some fraction of a page if allocations cannot be satisfied due to
* size constraints on boxes where there is physical RAM space * size constraints on boxes where there is physical RAM space
* fragmentation - in these cases * (mostly large memory boxes) this * fragmentation - in these cases (mostly large memory boxes) this
* is not a problem. * is not a problem.
* *
* On low memory boxes we get it right in 100% of the cases. * On low memory boxes we get it right in 100% of the cases.
......
...@@ -177,9 +177,12 @@ static int alloc_buffer(struct btaudio *bta) ...@@ -177,9 +177,12 @@ static int alloc_buffer(struct btaudio *bta)
bta->risc_size = PAGE_SIZE; bta->risc_size = PAGE_SIZE;
bta->risc_cpu = pci_alloc_consistent bta->risc_cpu = pci_alloc_consistent
(bta->pci, bta->risc_size, &bta->risc_dma); (bta->pci, bta->risc_size, &bta->risc_dma);
if (NULL == bta->risc_cpu) if (NULL == bta->risc_cpu) {
pci_free_consistent(bta->pci, bta->buf_size, bta->buf_cpu, bta->dma);
bta->buf_cpu = NULL;
return -ENOMEM; return -ENOMEM;
} }
}
return 0; return 0;
} }
......
# drivers/sound/dmasound/Config.in
config DMASOUND_ATARI config DMASOUND_ATARI
tristate "Atari DMA sound support" tristate "Atari DMA sound support"
depends on ATARI && SOUND depends on ATARI && SOUND
select DMASOUND
help help
If you want to use the internal audio of your Atari in Linux, answer If you want to use the internal audio of your Atari in Linux, answer
Y to this question. This will provide a Sun-like /dev/audio, Y to this question. This will provide a Sun-like /dev/audio,
...@@ -15,6 +15,7 @@ config DMASOUND_ATARI ...@@ -15,6 +15,7 @@ config DMASOUND_ATARI
config DMASOUND_PMAC config DMASOUND_PMAC
tristate "PowerMac DMA sound support" tristate "PowerMac DMA sound support"
depends on PPC_PMAC && SOUND && I2C depends on PPC_PMAC && SOUND && I2C
select DMASOUND
help help
If you want to use the internal audio of your PowerMac in Linux, If you want to use the internal audio of your PowerMac in Linux,
answer Y to this question. This will provide a Sun-like /dev/audio, answer Y to this question. This will provide a Sun-like /dev/audio,
...@@ -28,6 +29,7 @@ config DMASOUND_PMAC ...@@ -28,6 +29,7 @@ config DMASOUND_PMAC
config DMASOUND_PAULA config DMASOUND_PAULA
tristate "Amiga DMA sound support" tristate "Amiga DMA sound support"
depends on (AMIGA || APUS) && SOUND depends on (AMIGA || APUS) && SOUND
select DMASOUND
help help
If you want to use the internal audio of your Amiga in Linux, answer If you want to use the internal audio of your Amiga in Linux, answer
Y to this question. This will provide a Sun-like /dev/audio, Y to this question. This will provide a Sun-like /dev/audio,
...@@ -41,6 +43,7 @@ config DMASOUND_PAULA ...@@ -41,6 +43,7 @@ config DMASOUND_PAULA
config DMASOUND_Q40 config DMASOUND_Q40
tristate "Q40 sound support" tristate "Q40 sound support"
depends on Q40 && SOUND depends on Q40 && SOUND
select DMASOUND
help help
If you want to use the internal audio of your Q40 in Linux, answer If you want to use the internal audio of your Q40 in Linux, answer
Y to this question. This will provide a Sun-like /dev/audio, Y to this question. This will provide a Sun-like /dev/audio,
...@@ -53,13 +56,3 @@ config DMASOUND_Q40 ...@@ -53,13 +56,3 @@ config DMASOUND_Q40
config DMASOUND config DMASOUND
tristate tristate
depends on SOUND!=n
default m if DMASOUND_ATARI!=y && DMASOUND_AWACS!=y && DMASOUND_PAULA!=y && DMASOUND_Q40!=y && (DMASOUND_ATARI=m || DMASOUND_AWACS=m || DMASOUND_PAULA=m || DMASOUND_Q40=m)
default y if DMASOUND_ATARI=y || DMASOUND_AWACS=y || DMASOUND_PAULA=y || DMASOUND_Q40=y
help
Support built-in audio chips accessible by DMA on various machines
that have them. Note that this symbol does not affect the kernel
directly; rather, it controls whether configuration questions
enabling DMA sound drivers for various specific machine
architectures will be used.
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