Commit c2ef85f5 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.128pre1

parent 2470b27d
......@@ -1677,11 +1677,12 @@ S: Cliffwood, New Jersey 07721
S: USA
N: Henrik Storner
E: storner@osiris.ping.dk
E: storner@olicom.dk
W: http://eolicom.olicom.dk/~storner/
D: Configure script: tristate, bugfixes
E: storner@image.dk
W: http://www.image.dk/~storner/
W: http://www.sslug.dk/
D: Configure script: Invented tristate for module-configuration
D: vfat/msdos integration, kerneld docs, Linux promotion
D: Miscellaneous bug-fixes
S: Chr. Winthersvej 1 B, st.th.
S: DK-1860 Frederiksberg C
S: Denmark
......@@ -1911,6 +1912,11 @@ N: Juergen Weigert
E: jnweiger@immd4.informatik.uni-erlangen.de
D: The Linux Support Team Erlangen
N: David Weinehall
E: tao@acc.umu.se
D: NE/2-driver maintainer
D: Miscellaneous MCA-support
N: Matt Welsh
E: mdw@sunsite.unc.edu
D: Linux Documentation Project coordinator
......
This diff is collapsed.
......@@ -279,8 +279,8 @@ Slot 5: db 8f 1d 5e fd c0 00 00
Slot 6: ff ff ff ff ff ff ff ff
Slot 7: 42 60 ff 08 ff ff ff ff 3Com 3c523 Etherlink/MC
Slot 8: ff ff ff ff ff ff ff ff
Video: ff ff ff ff ff ff ff ff
SCSI: ff ff ff ff ff ff ff ff
Video : ff ff ff ff ff ff ff ff
SCSI : ff ff ff ff ff ff ff ff
/proc/mca/slot1:
Slot: 1
......
......@@ -15,6 +15,7 @@ system, it is advisable to read both documentation and source
before actually making adjustments.
Currently, these files are in /proc/sys/kernel:
- acct
- ctrl-alt-del
- dentry-state
- domainname
......@@ -36,6 +37,23 @@ Currently, these files are in /proc/sys/kernel:
==============================================================
acct:
highwater lowwater frequency
If BSD-style process accounting is enabled these values control
its behaviour. If free space on filesystem where the log lives
goes below <lowwater>% accounting suspends. If free space gets
above <highwater>% accounting resumes. <Frequency> determines
how often do we check the amount of free space (value is in
seconds). Default:
4 2 30
That is, suspend accounting if there left <= 2% free; resume it
if we got >=4%; consider information about amount of free space
valid for 30 seconds.
==============================================================
ctrl-alt-del:
When the value in this file is 0, ctrl-alt-del is trapped and
......
......@@ -20,6 +20,7 @@
5: Philips PAL tuner
6: Temic NTSC tuner
7: Temic PAL tuner
8: Temic 4036 FY5 NTSC tuner
The number corresponds to the number (-1) given at the GPIO port of the
Bt848 on Miro cards.
......@@ -34,7 +35,12 @@
4: Intel
5: Diamond
6: AVerMedia
7: Matrix Vision MV-Delta
8: Fly Video II
9: TurboTV
10: Newer Hauppage (Bt878)
11: Miro PCTV Pro
12: ADS Tech Channel Surfer TV (and maybe TV+FM)
- You may have to adjust BTTV_MAJOR to a different number depending on your
kernel version. The official number 81 does not work on some setups.
......
......@@ -204,7 +204,7 @@ M: hpa@zytor.com
L: linux-kernel@vger.rutgers.edu
S: Maintained
DIGI INTL. EPCA DRIVER:
DIGI INTL. EPCA DRIVER
P: Daniel Taylor
M: support@dgii.com
M: digilnux@dgii.com
......@@ -277,7 +277,7 @@ M: mike.mclagan@linux.org
L: linux-net@vger.rutgers.edu
S: Maintained
FTAPE/QIC-117:
FTAPE/QIC-117
P: Claus-Justus Heine
M: claus@momo.math.rwth-aachen.de
L: linux-tape@vger.rutgers.edu
......@@ -297,7 +297,7 @@ L: linux-scsi@vger.rutgers.edu
W: http://www.icp-vortex.com/
S: Supported
HAYES ESP SERIAL DRIVER:
HAYES ESP SERIAL DRIVER
P: Andrew J. Robinson
M: arobinso@nyx.net
L: linux-kernel@vger.rutgers.edu
......@@ -396,14 +396,14 @@ M: paulus@cs.anu.edu.au
L: linux-pmac@samba.anu.edu.au
S: Maintained
M68K:
M68K
P: Jes Sorensen
M: Jes.Sorensen@cern.ch
W: http://www.clark.net/pub/lawrencc/linux/index.html
L: linux-m68k@lists.linux-m68k.org
S: Maintained
M68K ON APPLE MACINTOSH:
M68K ON APPLE MACINTOSH
P: Alan Cox
M: Alan.Cox@linux.org
W: http://www.mac.linux-m68k.org/home.html
......@@ -416,19 +416,26 @@ M: philb@gnu.org
W: http://www.tazenda.demon.co.uk/phil/linux-hp
S: Maintained
MENUCONFIG:
MENUCONFIG
P: Michael Elizabeth Chastain
M: mec@shout.net
L: linux-kernel@vger.rutgers.edu
S: Maintained
MIPS:
MIPS
P: Ralf Baechle
M: ralf@gnu.ai.mit.edu
W: http://lena.fnet.fr/
L: linux-mips@fnet.fr
S: Maintained
MISCELLANEOUS MCA-SUPPORT
P: David Weinehall
M: mcalinux@acc.umu.se (project MCA-team)
M: tao@acc.umu.se (personal)
L: linux-kernel@vger.rutgers.edu
S: Maintained
MODULE SUPPORT [GENERAL], KERNELD
P: Richard Henderson
M: richard@gnu.ai.mit.edu
......@@ -446,7 +453,7 @@ P: Andrew Veliath
M: andrewtv@usa.net
S: Maintained
NCP FILESYSTEM:
NCP FILESYSTEM
P: Petr Vandrovec
M: vandrove@vc.cvut.cz
P: Volker Lendecke
......@@ -465,14 +472,14 @@ P: Pavel Machek
M: pavel@atrey.karlin.mff.cuni.cz
S: Maintained
NETWORKING [GENERAL]:
NETWORKING [GENERAL]
P: Networking Teak
M: netdev@nuclecu.unam.mx
L: linux-net@vger.rutgers.edu
W: http://www.uk.linux.org/NetNews.html (2.0 only)
S: Maintained
NETWORKING [IPv4/IPv6]:
NETWORKING [IPv4/IPv6]
P: David S. Miller
M: davem@caip.rutgers.edu
P: Eric Schenk
......@@ -565,7 +572,7 @@ M: frible@teaser.fr
L: linux-hams@vger.rutgers.edu
S: Maintained
RISCOM8 DRIVER:
RISCOM8 DRIVER
P: Dmitry Gorodchanin
M: pgmdsg@ibi.com
L: linux-kernel@vger.rutgers.edu
......@@ -587,7 +594,7 @@ M: Kai.Makisara@metla.fi
L: linux-scsi@vger.rutgers.edu
S: Maintained
SMB FILESYSTEM:
SMB FILESYSTEM
P: Volker Lendecke
M: lendecke@Math.Uni-Goettingen.de
L: samba@listproc.anu.edu.au
......@@ -642,7 +649,7 @@ M: cheshire@cs.stanford.edu
W: http://mosquitonet.Stanford.EDU/strip.html
S: Maintained
SVGA HANDLING:
SVGA HANDLING
P: Martin Mares
M: mj@atrey.karlin.mff.cuni.cz
L: linux-video@atrey.karlin.mff.cuni.cz
......@@ -661,7 +668,7 @@ S: Maintained
TOKEN-RING NETWORK DRIVER
P: Paul Norton
M: p.norton@computer.org
M: pnorton@ieee.org
L: linux-net@vger.rutgers.edu
L: linux-tr@emissary.aus-etc.com
S: Maintained
......@@ -737,6 +744,6 @@ W: http://qsl.net/dl1bke/
L: linux-hams@vger.rutgers.edu
S: Maintained
REST:
THE REST
P: Linus Torvalds
S: Buried alive in diapers
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 127
SUBLEVEL = 128
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
......
......@@ -589,7 +589,7 @@ __initfunc(void time_init(void))
* still perfectly ordered.
* Note that the TSC counter will be reset if APM suspends
* to disk; this won't break the kernel, though, 'cuz we're
* smart. See devices/char/apm_bios.c.
* smart. See arch/i386/kernel/apm.c.
*/
if (boot_cpu_data.x86_capability & X86_FEATURE_TSC) {
do_gettimeoffset = do_fast_gettimeoffset;
......
......@@ -21,6 +21,11 @@
#include <linux/init.h>
#include <linux/delay.h>
#ifdef CONFIG_MCA
#include <linux/mca.h>
#include <asm/processor.h>
#endif
#include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/io.h>
......@@ -295,6 +300,14 @@ static void io_check_error(unsigned char reason, struct pt_regs * regs)
static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
{
#ifdef CONFIG_MCA
/* Might actually be able to figure out what the guilty party
* is. */
if( MCA_bus ) {
mca_handle_nmi();
return;
}
#endif
printk("Uhhuh. NMI received for unknown reason %02x.\n", reason);
printk("Dazed and confused, but trying to continue\n");
printk("Do you have a strange power saving mode enabled?\n");
......
This diff is collapsed.
......@@ -266,7 +266,7 @@ fi
tristate 'Parallel printer support' CONFIG_M68K_PRINTER
if [ "$CONFIG_ZORRO" = "y" ]; then
dep_tristate 'Multiface Card III parallel support' CONFIG_MULTIFACE_III_LP $CONFIG_PRINTER
dep_tristate 'Multiface Card III parallel support' CONFIG_MULTIFACE_III_LP $CONFIG_M68K_PRINTER
fi
if [ "$CONFIG_AMIGA" = "y" ]; then
tristate 'Amiga mouse support' CONFIG_AMIGAMOUSE
......@@ -334,11 +334,6 @@ if [ "$CONFIG_WATCHDOG" != "n" ]; then
bool ' Disable watchdog shutdown on close' CONFIG_WATCHDOG_NOWAYOUT
bool ' Software Watchdog' CONFIG_SOFT_WATCHDOG
fi
if [ "$CONFIG_VME" = "y" ]; then
define_bool CONFIG_UMISC y
else
bool 'Support for user misc device modules' CONFIG_UMISC
fi
if [ "$CONFIG_ATARI" = "y" ]; then
bool 'Enhanced Real Time Clock Support' CONFIG_RTC
fi
......
......@@ -3,6 +3,6 @@
*/
#define TS_MAGICKEY 0x5a5a5a5a
#define TS_TSS 482
#define TS_ESP0 502
#define TS_FPU 506
#define TS_TSS 478
#define TS_ESP0 498
#define TS_FPU 502
......@@ -95,6 +95,9 @@ void machine_halt(void)
void machine_power_off(void)
{
#if defined(CONFIG_APM) && defined(CONFIG_APM_POWER_OFF)
apm_set_power_state(APM_STATE_OFF);
#endif
}
void show_regs(struct pt_regs * regs)
......
......@@ -450,10 +450,10 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
else
child->flags &= ~PF_TRACESYS;
child->exit_code = data;
wake_up_process(child);
/* make sure the single step bit is not set. */
tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16);
put_reg(child, PT_SR, tmp);
wake_up_process(child);
ret = 0;
goto out;
}
......@@ -469,11 +469,11 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
ret = 0;
if (child->state == TASK_ZOMBIE) /* already dead */
goto out;
wake_up_process(child);
child->exit_code = SIGKILL;
/* make sure the single step bit is not set. */
tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16);
put_reg(child, PT_SR, tmp);
wake_up_process(child);
goto out;
}
......@@ -487,9 +487,9 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
tmp = get_reg(child, PT_SR) | (TRACE_BITS << 16);
put_reg(child, PT_SR, tmp);
wake_up_process(child);
child->exit_code = data;
/* give it a chance to run. */
wake_up_process(child);
ret = 0;
goto out;
}
......@@ -502,7 +502,6 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
if ((unsigned long) data > _NSIG)
goto out;
child->flags &= ~(PF_PTRACED|PF_TRACESYS);
wake_up_process(child);
child->exit_code = data;
write_lock_irqsave(&tasklist_lock, flags);
REMOVE_LINKS(child);
......@@ -512,6 +511,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
/* make sure the single step bit is not set. */
tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16);
put_reg(child, PT_SR, tmp);
wake_up_process(child);
ret = 0;
goto out;
}
......
......@@ -1197,7 +1197,7 @@ static int irix_core_dump(long signr, struct pt_regs * regs)
#else
corefile[4] = '\0';
#endif
dentry = open_namei(corefile, O_CREAT | 2 | O_TRUNC, 0600);
dentry = open_namei(corefile, O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
if (IS_ERR(dentry)) {
inode = NULL;
goto end_coredump;
......
......@@ -106,7 +106,7 @@ do_aout32_core_dump(long signr, struct pt_regs * regs)
#else
corefile[4] = '\0';
#endif
dentry = open_namei(corefile,O_CREAT | 2 | O_TRUNC, 0600);
dentry = open_namei(corefile,O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
if (IS_ERR(dentry)) {
dentry = NULL;
goto end_coredump;
......
......@@ -1343,7 +1343,7 @@ static int acsi_mode_sense( int target, int lun, SENSE_DATA *sd )
if (acsi_wait_for_noIRQ( 20 ) &&
acsicmd_nodma( modesense_cmd, 0 ) &&
acsi_wait_for_IRQ( 3*HZ ) &&
acsi_getstatus() == 0);
acsi_getstatus() == 0)
break;
}
if (page == 4) {
......
......@@ -4183,6 +4183,9 @@ __initfunc(int floppy_init(void))
continue;
FDCS->rawcmd = 2;
if (user_reset_fdc(-1,FD_RESET_ALWAYS,0)){
/* free ioports reserved by floppy_grab_irq_and_dma() */
release_region(FDCS->address, 6);
release_region(FDCS->address+7, 1);
FDCS->address = -1;
FDCS->version = FDC_NONE;
continue;
......@@ -4190,6 +4193,9 @@ __initfunc(int floppy_init(void))
/* Try to determine the floppy controller type */
FDCS->version = get_fdc_version();
if (FDCS->version == FDC_NONE){
/* free ioports reserved by floppy_grab_irq_and_dma() */
release_region(FDCS->address, 6);
release_region(FDCS->address+7, 1);
FDCS->address = -1;
continue;
}
......@@ -4211,6 +4217,12 @@ __initfunc(int floppy_init(void))
if (have_no_fdc)
{
DPRINT("no floppy controllers found\n");
floppy_tq.routine = (void *)(void *) empty;
mark_bh(IMMEDIATE_BH);
schedule();
if (usage_count)
floppy_release_irq_and_dma();
blk_dev[MAJOR_NR].request_fn = NULL;
unregister_blkdev(MAJOR_NR,"fd");
}
return have_no_fdc;
......
......@@ -109,20 +109,16 @@ u_int dma_arb_level; /* DMA arbitration level */
static struct wait_queue *ps2esdi_int = NULL, *ps2esdi_wait_open = NULL;
int no_int_yet;
static int access_count[MAX_HD] =
{0,};
static char ps2esdi_valid[MAX_HD] =
{0,};
static int ps2esdi_sizes[MAX_HD << 6] =
{0,};
static int ps2esdi_blocksizes[MAX_HD << 6] =
{0,};
static int access_count[MAX_HD] = {0,};
static char ps2esdi_valid[MAX_HD] = {0,};
static int ps2esdi_sizes[MAX_HD << 6] = {0,};
static int ps2esdi_blocksizes[MAX_HD << 6] = {0,};
static int ps2esdi_drives = 0;
static struct hd_struct ps2esdi[MAX_HD << 6];
static u_short io_base;
static struct timer_list esdi_timer =
{NULL, NULL, 0, 0L, ps2esdi_reset_timer};
static struct timer_list esdi_timer = {NULL, NULL, 0, 0L, ps2esdi_reset_timer};
static int reset_status;
static int ps2esdi_slot = -1;
int tp720esdi = 0; /* Is it Integrated ESDI of ThinkPad-720? */
struct ps2esdi_i_struct {
......@@ -198,6 +194,51 @@ __initfunc(int ps2esdi_init(void))
} /* ps2esdi_init */
#ifdef MODULE
int cyl[2] = {-1,-1};
int head[2] = {-1, -1};
int sect[2] = {-1, -1};
MODULE_PARM(tp720esdi, "i");
MODULE_PARM(cyl, "i");
MODULE_PARM(head, "i");
MODULE_PARM(track, "i");
int init_module(void) {
int drive;
for(drive = 0; drive <= 1; drive++) {
struct ps2_esdi_i_struct *info = &ps2esdi_info[drive];
if (cyl[drive] != -1) {
info->cyl = info->lzone = cyl[drive];
info->wpcom = 0;
}
if (head[drive] != -1) {
info->head = head[drive];
info->ctl = (head[drive] > 8 ? 8 : 0);
}
if (sect[drive] != -1) info->sect = sect[drive];
}
return ps2esdi_init();
}
void
cleanup_module(void)
{
if(ps2esdi_slot)
{
mca_mark_as_unused(ps2esdi_slot);
mca_set_adapter_procfn(ps2esdi_slot, NULL, NULL);
}
release_region(io_base, 4);
free_dma(dma_arb_level);
free_irq(PS2ESDI_IRQ, NULL)
unregister_blkdev(MAJOR_NR, "ed");
}
#endif /* MODULE */
/* handles boot time command line parameters */
__initfunc(void tp720_setup(char *str, int *ints))
{
......@@ -289,6 +330,8 @@ __initfunc(static void ps2esdi_geninit(struct gendisk *ignored))
return;
}
ps2esdi_slot = slot;
mca_mark_as_used(slot);
mca_set_adapter_procfn(slot, (MCA_ProcFn) ps2esdi_getinfo, NULL);
/* Found the slot - read the POS register 2 to get the necessary
......@@ -383,6 +426,9 @@ __initfunc(static void ps2esdi_geninit(struct gendisk *ignored))
}
for (i = 0; i < (MAX_HD << 6); i++)
ps2esdi_blocksizes[i] = 1024;
request_dma(dma_arb_level, "ed");
request_region(io_base, 4, "ed");
blksize_size[MAJOR_NR] = ps2esdi_blocksizes;
} /* ps2esdi_geninit */
......@@ -511,7 +557,7 @@ static void reset_ctrl(void)
printk("%s: hard reset...\n", DEVICE_NAME);
outb_p(CTRL_HARD_RESET, ESDI_CONTROL);
expire = jiffies + 200;
while (jiffies < expire);
while (time_before(jiffies, expire));
outb_p(1, ESDI_CONTROL);
} /* hard reset */
......@@ -588,7 +634,7 @@ static int ps2esdi_out_cmd_blk(u_short * cmd_blk)
outb(CTRL_ENABLE_INTR, ESDI_CONTROL);
/* do not write to the controller, if it is busy */
for (i = jiffies + ESDI_STAT_TIMEOUT; (i > jiffies) && (inb(ESDI_STATUS) &
for (i = jiffies + ESDI_STAT_TIMEOUT; time_after(i, jiffies) && (inb(ESDI_STATUS) &
STATUS_BUSY););
#if 0
......@@ -611,7 +657,7 @@ static int ps2esdi_out_cmd_blk(u_short * cmd_blk)
for (i = (((*cmd_blk) >> 14) + 1) << 1; i; i--) {
status = inb(ESDI_STATUS);
for (j = jiffies + ESDI_STAT_TIMEOUT;
(j > jiffies) && (status & STATUS_BUSY) &&
time_after(j, jiffies) && (status & STATUS_BUSY) &&
(status & STATUS_CMD_INF); status = inb(ESDI_STATUS));
if ((status & (STATUS_BUSY | STATUS_CMD_INF)) == STATUS_BUSY) {
#if 0
......
......@@ -108,9 +108,7 @@ static XD_SIGNATURE xd_sigs[] __initdata = {
{ 0x0008,"[BXD06 (C) DTC 17-MAY-1985]",xd_dtc_init_controller,xd_dtc5150cx_init_drive," DTC 5150CX" }, /* Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl */
{ 0x000B,"CRD18A Not an IBM rom. (C) Copyright Data Technology Corp. 05/31/88",xd_dtc_init_controller,xd_dtc_init_drive," DTC 5150X" }, /* Todd Fries, tfries@umr.edu */
{ 0x000B,"CXD23A Not an IBM ROM (C)Copyright Data Technology Corp 12/03/88",xd_dtc_init_controller,xd_dtc_init_drive," DTC 5150X" }, /* Pat Mackinlay, pat@it.com.au */
{ 0x0008,"07/15/86 (C) Copyright 1986 Western Digital Corp",xd_wd_init_controller,xd_wd_init_drive," Western Dig. 1002AWX1" }, /* Ian Justman, citrus!ianj@csusac.ecs.csus.edu */
{ 0x0008,"07/15/86(C) Copyright 1986 Western Digital Corp.",xd_wd_init_controller,xd_wd_init_drive," Western Dig. 1002-27X" }, /* Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl */
{ 0x0008,"06/24/88 (C) Copyright 1988 Western Digital Corp",xd_wd_init_controller,xd_wd_init_drive," Western Dig. 1004A27X" }, /* Dave Thaler, thalerd@engin.umich.edu */
{ 0x0008,"06/24/88(C) Copyright 1988 Western Digital Corp.",xd_wd_init_controller,xd_wd_init_drive," Western Dig. WDXT-GEN2" }, /* Dan Newcombe, newcombe@aa.csc.peachnet.edu */
{ 0x0015,"SEAGATE ST11 BIOS REVISION",xd_seagate_init_controller,xd_seagate_init_drive," Seagate ST11M/R" }, /* Salvador Abreu, spa@fct.unl.pt */
{ 0x0010,"ST11R BIOS",xd_seagate_init_controller,xd_seagate_init_drive," Seagate ST11M/R" }, /* Risto Kankkunen, risto.kankkunen@cs.helsinki.fi */
......@@ -589,7 +587,7 @@ static inline u_char xd_waitport (u_short port,u_char flags,u_char mask,u_long t
int success;
xdc_busy = 1;
while ((success = ((inb(port) & mask) != flags)) && (jiffies < expiry)) {
while ((success = ((inb(port) & mask) != flags)) && time_before(jiffies, expiry)) {
xd_timer.expires = jiffies;
cli();
add_timer(&xd_timer);
......@@ -1169,7 +1167,7 @@ int init_module(void)
for (i = 4; i > 0; i--)
if(((xd[i] = xd[i-1]) >= 0) && !count)
count = i;
if((xd[0] = count));
if((xd[0] = count))
xd_setup(NULL, xd);
xd_geninit(&(struct gendisk) { 0,0,0,0,0,0,0,0,0,0,0 });
if (!xd_drives) {
......
......@@ -787,23 +787,13 @@ static void mcdx_delay(struct s_drive_stuff *stuff, long jifs)
* May be we could use a simple count loop w/ jumps to itself, but
* I wanna make this independent of cpu speed. [1 jiffy is 1/HZ] sec */
{
unsigned long tout = jiffies + jifs;
if (jifs < 0) return;
/* If loaded during kernel boot no *_sleep_on is
* allowed! */
if (current->pid == 0) {
while (jiffies < tout) {
schedule_timeout(0);
}
} else {
current->timeout = tout;
xtrace(SLEEP, "*** delay: sleepq\n");
interruptible_sleep_on(&stuff->sleepq);
xtrace(SLEEP, "delay awoken\n");
if (signal_pending(current)) {
xtrace(SLEEP, "got signal\n");
}
if (jifs < 0) return;
xtrace(SLEEP, "*** delay: sleepq\n");
interruptible_sleep_on_timeout(&stuff->sleepq, jifs);
xtrace(SLEEP, "delay awoken\n");
if (signal_pending(current)) {
xtrace(SLEEP, "got signal\n");
}
}
......
......@@ -403,7 +403,8 @@ static struct i2c_bus bttv_i2c_bus_template =
struct tvcard
{
int inputs;
int video_inputs;
int audio_inputs;
int tuner;
int svhs;
u32 gpiomask;
......@@ -415,30 +416,37 @@ struct tvcard
static struct tvcard tvcards[] =
{
/* default */
{ 3, 0, 2, 0, { 2, 3, 1, 1}, { 0, 0, 0, 0, 0}},
{ 3, 1, 0, 2, 0, { 2, 3, 1, 1}, { 0, 0, 0, 0, 0}},
/* MIRO */
{ 4, 0, 2,15, { 2, 3, 1, 1}, { 2, 0, 0, 0,10}},
{ 4, 1, 0, 2,15, { 2, 3, 1, 1}, { 2, 0, 0, 0,10}},
/* Hauppauge */
{ 3, 0, 2, 7, { 2, 3, 1, 1}, { 0, 1, 2, 3, 4}},
{ 3, 1, 0, 2, 7, { 2, 3, 1, 1}, { 0, 1, 2, 3, 4}},
/* STB */
{ 3, 0, 2, 7, { 2, 3, 1, 1}, { 4, 0, 2, 3, 1}},
{ 3, 1, 0, 2, 7, { 2, 3, 1, 1}, { 4, 0, 2, 3, 1}},
/* Intel??? */
{ 3, 0, 2, 7, { 2, 3, 1, 1}, { 0, 1, 2, 3, 4}},
{ 3, 1, 0, 2, 7, { 2, 3, 1, 1}, { 0, 1, 2, 3, 4}},
/* Diamond DTV2000 */
{ 3, 0, 2, 3, { 2, 3, 1, 1}, { 0, 1, 0, 1, 3}},
{ 3, 1, 0, 2, 3, { 2, 3, 1, 1}, { 0, 1, 0, 1, 3}},
/* AVerMedia TVPhone */
{ 3, 0, 3,15, { 2, 3, 1, 1}, {12, 0,11,11, 0}},
{ 3, 1, 0, 3,15, { 2, 3, 1, 1}, {12, 0,11,11, 0}},
/* Matrix Vision MV-Delta */
{ 5,-1, 3, 0, { 2, 3, 1, 0, 0}},
{ 5, 1, -1, 3, 0, { 2, 3, 1, 0, 0}},
/* Fly Video II */
{ 3, 0, 2, 0xc00, { 2, 3, 1, 1},
{ 3, 1, 0, 2, 0xc00, { 2, 3, 1, 1},
{0, 0xc00, 0x800, 0x400, 0xc00, 0}},
/* TurboTV */
{ 3, 0, 2, 3, { 2, 3, 1, 1}, { 1, 1, 2, 3, 0}},
{ 3, 1, 0, 2, 3, { 2, 3, 1, 1}, { 1, 1, 2, 3, 0}},
/* Newer Hauppauge (bt878) */
{ 3, 0, 2, 7, { 2, 0, 1, 1}, { 0, 1, 2, 3, 4}},
{ 3, 1, 0, 2, 7, { 2, 0, 1, 1}, { 0, 1, 2, 3, 4}},
/* MIRO PCTV pro */
{ 3, 0, 2, 65551, { 2, 3, 1, 1}, {1,65537, 0, 0,10}},
{ 3, 1, 0, 2, 65551, { 2, 3, 1, 1}, {1,65537, 0, 0,10}},
/* ADS Technologies Channel Surfer TV (and maybe TV+FM) */
{
3, 4, 0, 2, 0x0F,
{ 0x02, 0x03, 0x01, 0x01},
{ 0x0D, 0x0E, 0x0B, 0x07, 0x00, 0x00},
0x00
},
};
#define TVCARDS (sizeof(tvcards)/sizeof(tvcard))
......@@ -612,7 +620,7 @@ static void bt848_muxsel(struct bttv *btv, unsigned int input)
btand(~(3<<5), BT848_IFORM);
mdelay(10);
input %= tvcards[btv->type].inputs;
input %= tvcards[btv->type].video_inputs;
if (input==tvcards[btv->type].svhs)
{
btor(BT848_CONTROL_COMP, BT848_E_CONTROL);
......@@ -1304,7 +1312,7 @@ static void bttv_close(struct video_device *dev)
struct bttv *btv=(struct bttv *)dev;
btv->user--;
audio(btv, AUDIO_MUTE);
audio(btv, AUDIO_INTERN);
btv->cap&=~3;
bt848_set_risc_jmps(btv);
......@@ -1383,8 +1391,8 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
VID_TYPE_CLIPPING|
VID_TYPE_FRAMERAM|
VID_TYPE_SCALES;
b.channels = tvcards[btv->type].inputs;
b.audios = tvcards[btv->type].inputs;
b.channels = tvcards[btv->type].video_inputs;
b.audios = tvcards[btv->type].audio_inputs;
b.maxwidth = 768;
b.maxheight = 576;
b.minwidth = 32;
......@@ -1402,7 +1410,7 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
v.tuners=0;
v.type=VIDEO_TYPE_CAMERA;
v.norm = btv->win.norm;
if (v.channel>=tvcards[btv->type].inputs)
if (v.channel>=tvcards[btv->type].video_inputs)
return -EINVAL;
if(v.channel==tvcards[btv->type].tuner)
{
......@@ -1429,7 +1437,7 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
if(copy_from_user(&v, arg,sizeof(v)))
return -EFAULT;
if (v.channel>tvcards[btv->type].inputs)
if (v.channel>=tvcards[btv->type].video_inputs)
return -EINVAL;
bt848_muxsel(btv, v.channel);
if(v.norm!=VIDEO_MODE_PAL&&v.norm!=VIDEO_MODE_NTSC
......@@ -1710,7 +1718,10 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
if(v.flags&VIDEO_AUDIO_MUTE)
audio(btv, AUDIO_MUTE);
/* One audio source per tuner */
if(v.audio!=0)
/* if(v.audio!=0) */
/* Nope... I have three on my ADSTech TV card. The*/
/* ADSTech TV+FM prolly has 4 <rriggs@tesser.com> */
if(v.audio<0 || v.audio >= tvcards[btv->type].audio_inputs)
return -EINVAL;
bt848_muxsel(btv,v.audio);
if(!(v.flags&VIDEO_AUDIO_MUTE))
......@@ -2456,8 +2467,13 @@ static void idcard(int i)
printk("MATRIX-Vision\n");
strcat(btv->video_dev.name,"(MATRIX-Vision)");
break;
case BTTV_ADSTECH_TV:
printk("ADSTech Channel Surfer TV\n");
strcat(btv->video_dev.name,"(ADSTech Channel Surfer TV)");
btv->tuner_type=8;
break;
}
audio(btv, AUDIO_MUTE);
audio(btv, AUDIO_INTERN);
}
......
......@@ -186,6 +186,7 @@ struct bttv
#define BTTV_TURBOTV 0x09
#define BTTV_HAUPPAUGE878 0x0a
#define BTTV_MIROPRO 0x0b
#define BTTV_ADSTECH_TV 0x0c
#define AUDIO_TUNER 0x00
#define AUDIO_RADIO 0x01
......
......@@ -388,9 +388,10 @@ int fdc_interrupt_wait(unsigned int time)
struct wait_queue wait = {current, NULL};
sigset_t old_sigmask;
static int resetting = 0;
TRACE_FUN(ft_t_fdc_dma);
long timeout;
TRACE_FUN(ft_t_fdc_dma);
#if LINUX_VERSION_CODE >= KERNEL_VER(2,0,16)
if (waitqueue_active(&ftape_wait_intr)) {
TRACE_ABORT(-EIO, ft_t_err, "error: nested call");
......
......@@ -122,9 +122,8 @@ void *zft_kmalloc(size_t size)
void *new;
while ((new = kmalloc(size, GFP_KERNEL)) == NULL) {
current->timeout = HZ/10;
current->state = TASK_INTERRUPTIBLE;
schedule();
schedule_timeout(HZ/10);
}
memset(new, 0, size);
used_memory += size;
......
......@@ -77,7 +77,7 @@ extern __inline__ u8 mvv_read(u8 index)
return inb(data_port);
}
extern int i2c_stat(u8 slave)
static int pms_i2c_stat(u8 slave)
{
int counter;
int i;
......@@ -116,7 +116,7 @@ extern int i2c_stat(u8 slave)
return inb(data_port);
}
int i2c_write(u16 slave, u16 sub, u16 data)
static int pms_i2c_write(u16 slave, u16 sub, u16 data)
{
int skip=0;
int count;
......@@ -166,7 +166,7 @@ int i2c_write(u16 slave, u16 sub, u16 data)
return count;
}
int i2c_read(int slave, int sub)
static int pms_i2c_read(int slave, int sub)
{
int i=0;
for(i=0;i<i2c_count;i++)
......@@ -178,13 +178,13 @@ int i2c_read(int slave, int sub)
}
void i2c_andor(int slave, int sub, int and, int or)
static void pms_i2c_andor(int slave, int sub, int and, int or)
{
u8 tmp;
tmp=i2c_read(slave, sub);
tmp=pms_i2c_read(slave, sub);
tmp = (tmp&and)|or;
i2c_write(slave, sub, tmp);
pms_i2c_write(slave, sub, tmp);
}
/*
......@@ -202,13 +202,13 @@ static void pms_hue(short hue)
switch(decoder)
{
case MOTOROLA:
i2c_write(0x8A, 0x00, hue);
pms_i2c_write(0x8A, 0x00, hue);
break;
case PHILIPS2:
i2c_write(0x8A, 0x07, hue);
pms_i2c_write(0x8A, 0x07, hue);
break;
case PHILIPS1:
i2c_write(0x42, 0x07, hue);
pms_i2c_write(0x42, 0x07, hue);
break;
}
}
......@@ -218,10 +218,10 @@ static void pms_colour(short colour)
switch(decoder)
{
case MOTOROLA:
i2c_write(0x8A, 0x00, colour);
pms_i2c_write(0x8A, 0x00, colour);
break;
case PHILIPS1:
i2c_write(0x42, 012, colour);
pms_i2c_write(0x42, 012, colour);
break;
}
}
......@@ -232,10 +232,10 @@ static void pms_contrast(short contrast)
switch(decoder)
{
case MOTOROLA:
i2c_write(0x8A, 0x00, contrast);
pms_i2c_write(0x8A, 0x00, contrast);
break;
case PHILIPS1:
i2c_write(0x42, 0x13, contrast);
pms_i2c_write(0x42, 0x13, contrast);
break;
}
}
......@@ -245,12 +245,12 @@ static void pms_brightness(short brightness)
switch(decoder)
{
case MOTOROLA:
i2c_write(0x8A, 0x00, brightness);
i2c_write(0x8A, 0x00, brightness);
i2c_write(0x8A, 0x00, brightness);
pms_i2c_write(0x8A, 0x00, brightness);
pms_i2c_write(0x8A, 0x00, brightness);
pms_i2c_write(0x8A, 0x00, brightness);
break;
case PHILIPS1:
i2c_write(0x42, 0x19, brightness);
pms_i2c_write(0x42, 0x19, brightness);
break;
}
}
......@@ -271,20 +271,20 @@ static void pms_format(short format)
switch(format)
{
case 0: /* Auto */
i2c_andor(target, 0x0D, 0xFE,0x00);
i2c_andor(target, 0x0F, 0x3F,0x80);
pms_i2c_andor(target, 0x0D, 0xFE,0x00);
pms_i2c_andor(target, 0x0F, 0x3F,0x80);
break;
case 1: /* NTSC */
i2c_andor(target, 0x0D, 0xFE, 0x00);
i2c_andor(target, 0x0F, 0x3F, 0x40);
pms_i2c_andor(target, 0x0D, 0xFE, 0x00);
pms_i2c_andor(target, 0x0F, 0x3F, 0x40);
break;
case 2: /* PAL */
i2c_andor(target, 0x0D, 0xFE, 0x00);
i2c_andor(target, 0x0F, 0x3F, 0x00);
pms_i2c_andor(target, 0x0D, 0xFE, 0x00);
pms_i2c_andor(target, 0x0F, 0x3F, 0x00);
break;
case 3: /* SECAM */
i2c_andor(target, 0x0D, 0xFE, 0x01);
i2c_andor(target, 0x0F, 0x3F, 0x00);
pms_i2c_andor(target, 0x0D, 0xFE, 0x01);
pms_i2c_andor(target, 0x0F, 0x3F, 0x00);
break;
}
}
......@@ -302,12 +302,12 @@ static void pms_hstart(short start)
switch(decoder)
{
case PHILIPS1:
i2c_write(0x8A, 0x05, start);
i2c_write(0x8A, 0x18, start);
pms_i2c_write(0x8A, 0x05, start);
pms_i2c_write(0x8A, 0x18, start);
break;
case PHILIPS2:
i2c_write(0x42, 0x05, start);
i2c_write(0x42, 0x18, start);
pms_i2c_write(0x42, 0x05, start);
pms_i2c_write(0x42, 0x18, start);
break;
}
}
......@@ -319,94 +319,94 @@ static void pms_hstart(short start)
static void pms_bandpass(short pass)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x06, 0xCF, (pass&0x03)<<4);
pms_i2c_andor(0x8A, 0x06, 0xCF, (pass&0x03)<<4);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x06, 0xCF, (pass&0x03)<<4);
pms_i2c_andor(0x42, 0x06, 0xCF, (pass&0x03)<<4);
}
static void pms_antisnow(short snow)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x06, 0xF3, (snow&0x03)<<2);
pms_i2c_andor(0x8A, 0x06, 0xF3, (snow&0x03)<<2);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x06, 0xF3, (snow&0x03)<<2);
pms_i2c_andor(0x42, 0x06, 0xF3, (snow&0x03)<<2);
}
static void pms_sharpness(short sharp)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x06, 0xFC, sharp&0x03);
pms_i2c_andor(0x8A, 0x06, 0xFC, sharp&0x03);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x06, 0xFC, sharp&0x03);
pms_i2c_andor(0x42, 0x06, 0xFC, sharp&0x03);
}
static void pms_chromaagc(short agc)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x0C, 0x9F, (agc&0x03)<<5);
pms_i2c_andor(0x8A, 0x0C, 0x9F, (agc&0x03)<<5);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x0C, 0x9F, (agc&0x03)<<5);
pms_i2c_andor(0x42, 0x0C, 0x9F, (agc&0x03)<<5);
}
static void pms_vertnoise(short noise)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x10, 0xFC, noise&3);
pms_i2c_andor(0x8A, 0x10, 0xFC, noise&3);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x10, 0xFC, noise&3);
pms_i2c_andor(0x42, 0x10, 0xFC, noise&3);
}
static void pms_forcecolour(short colour)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x0C, 0x7F, (colour&1)<<7);
pms_i2c_andor(0x8A, 0x0C, 0x7F, (colour&1)<<7);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x0C, 0x7, (colour&1)<<7);
pms_i2c_andor(0x42, 0x0C, 0x7, (colour&1)<<7);
}
static void pms_antigamma(short gamma)
{
if(decoder==PHILIPS2)
i2c_andor(0xB8, 0x00, 0x7F, (gamma&1)<<7);
pms_i2c_andor(0xB8, 0x00, 0x7F, (gamma&1)<<7);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x20, 0x7, (gamma&1)<<7);
pms_i2c_andor(0x42, 0x20, 0x7, (gamma&1)<<7);
}
static void pms_prefilter(short filter)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x06, 0xBF, (filter&1)<<6);
pms_i2c_andor(0x8A, 0x06, 0xBF, (filter&1)<<6);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x06, 0xBF, (filter&1)<<6);
pms_i2c_andor(0x42, 0x06, 0xBF, (filter&1)<<6);
}
static void pms_hfilter(short filter)
{
if(decoder==PHILIPS2)
i2c_andor(0xB8, 0x04, 0x1F, (filter&7)<<5);
pms_i2c_andor(0xB8, 0x04, 0x1F, (filter&7)<<5);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x24, 0x1F, (filter&7)<<5);
pms_i2c_andor(0x42, 0x24, 0x1F, (filter&7)<<5);
}
static void pms_vfilter(short filter)
{
if(decoder==PHILIPS2)
i2c_andor(0xB8, 0x08, 0x9F, (filter&3)<<5);
pms_i2c_andor(0xB8, 0x08, 0x9F, (filter&3)<<5);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x28, 0x9F, (filter&3)<<5);
pms_i2c_andor(0x42, 0x28, 0x9F, (filter&3)<<5);
}
static void pms_killcolour(short colour)
{
if(decoder==PHILIPS2)
{
i2c_andor(0x8A, 0x08, 0x07, (colour&0x1F)<<3);
i2c_andor(0x8A, 0x09, 0x07, (colour&0x1F)<<3);
pms_i2c_andor(0x8A, 0x08, 0x07, (colour&0x1F)<<3);
pms_i2c_andor(0x8A, 0x09, 0x07, (colour&0x1F)<<3);
}
else if(decoder==PHILIPS1)
{
i2c_andor(0x42, 0x08, 0x07, (colour&0x1F)<<3);
i2c_andor(0x42, 0x09, 0x07, (colour&0x1F)<<3);
pms_i2c_andor(0x42, 0x08, 0x07, (colour&0x1F)<<3);
pms_i2c_andor(0x42, 0x09, 0x07, (colour&0x1F)<<3);
}
}
......@@ -414,11 +414,11 @@ static void pms_chromagain(short chroma)
{
if(decoder==PHILIPS2)
{
i2c_write(0x8A, 0x11, chroma);
pms_i2c_write(0x8A, 0x11, chroma);
}
else if(decoder==PHILIPS1)
{
i2c_write(0x42, 0x11, chroma);
pms_i2c_write(0x42, 0x11, chroma);
}
}
......@@ -444,9 +444,9 @@ static void pms_vstart(short start)
static void pms_secamcross(short cross)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A, 0x0F, 0xDF, (cross&1)<<5);
pms_i2c_andor(0x8A, 0x0F, 0xDF, (cross&1)<<5);
else if(decoder==PHILIPS1)
i2c_andor(0x42, 0x0F, 0xDF, (cross&1)<<5);
pms_i2c_andor(0x42, 0x0F, 0xDF, (cross&1)<<5);
}
......@@ -454,13 +454,13 @@ static void pms_swsense(short sense)
{
if(decoder==PHILIPS2)
{
i2c_write(0x8A, 0x0A, sense);
i2c_write(0x8A, 0x0B, sense);
pms_i2c_write(0x8A, 0x0A, sense);
pms_i2c_write(0x8A, 0x0B, sense);
}
else if(decoder==PHILIPS1)
{
i2c_write(0x42, 0x0A, sense);
i2c_write(0x42, 0x0B, sense);
pms_i2c_write(0x42, 0x0A, sense);
pms_i2c_write(0x42, 0x0B, sense);
}
}
......@@ -613,9 +613,9 @@ static void pms_resolution(short width, short height)
static void pms_vcrinput(short input)
{
if(decoder==PHILIPS2)
i2c_andor(0x8A,0x0D,0x7F,(input&1)<<7);
pms_i2c_andor(0x8A,0x0D,0x7F,(input&1)<<7);
else if(decoder==PHILIPS1)
i2c_andor(0x42,0x0D,0x7F,(input&1)<<7);
pms_i2c_andor(0x42,0x0D,0x7F,(input&1)<<7);
}
......@@ -954,13 +954,13 @@ static int init_mediavision(void)
id=mvv_read(3);
decst=i2c_stat(0x43);
decst=pms_i2c_stat(0x43);
if(decst!=-1)
idec=2;
else if(i2c_stat(0xb9)!=-1)
else if(pms_i2c_stat(0xb9)!=-1)
idec=3;
else if(i2c_stat(0x8b)!=-1)
else if(pms_i2c_stat(0x8b)!=-1)
idec=1;
else
idec=0;
......@@ -983,19 +983,19 @@ static int init_mediavision(void)
for(i=0;i<0x19;i++)
{
if(i2c_defs[i]==0xFF)
i2c_andor(0x8A, i, 0x07,0x00);
pms_i2c_andor(0x8A, i, 0x07,0x00);
else
i2c_write(0x8A, i, i2c_defs[i]);
pms_i2c_write(0x8A, i, i2c_defs[i]);
}
i2c_write(0xB8,0x00,0x12);
i2c_write(0xB8,0x04,0x00);
i2c_write(0xB8,0x07,0x00);
i2c_write(0xB8,0x08,0x00);
i2c_write(0xB8,0x09,0xFF);
i2c_write(0xB8,0x0A,0x00);
i2c_write(0xB8,0x0B,0x10);
i2c_write(0xB8,0x10,0x03);
pms_i2c_write(0xB8,0x00,0x12);
pms_i2c_write(0xB8,0x04,0x00);
pms_i2c_write(0xB8,0x07,0x00);
pms_i2c_write(0xB8,0x08,0x00);
pms_i2c_write(0xB8,0x09,0xFF);
pms_i2c_write(0xB8,0x0A,0x00);
pms_i2c_write(0xB8,0x0B,0x10);
pms_i2c_write(0xB8,0x10,0x03);
mvv_write(0x01, 0x00);
mvv_write(0x05, 0xA0);
......@@ -1037,7 +1037,7 @@ static void shutdown_mediavision(void)
#ifdef MODULE
int init_module(void)
#else
void init_pms_cards(void)
int init_pms_cards(struct video_init *v)
#endif
{
printk(KERN_INFO "Mediavision Pro Movie Studio driver 0.02\n");
......
......@@ -666,6 +666,15 @@ static long saa5249_read(struct video_device *v, char *buf, unsigned long l, int
return -EINVAL;
}
int init_saa_5249(struct video_init *v)
{
printk(KERN_INFO "SAA5249 driver (" IF_NAME " interface) for VideoText version %d.%d\n",
VTX_VER_MAJ, VTX_VER_MIN);
i2c_register_driver(&i2c_driver_videotext);
return 0;
}
static struct video_device saa_template=
{
IF_NAME,
......@@ -684,15 +693,15 @@ static struct video_device saa_template=
0
};
#ifdef MODULE
/*
* Routines for loadable modules
*/
int init_module(void)
{
printk(KERN_INFO "SAA5249 driver (" IF_NAME " interface) for VideoText version %d.%d\n",
VTX_VER_MAJ, VTX_VER_MIN);
i2c_register_driver(&i2c_driver_videotext);
init_saa_5249(NULL);
return 0;
}
......@@ -701,3 +710,5 @@ void cleanup_module(void)
{
i2c_unregister_driver(&i2c_driver_videotext);
}
#endif
......@@ -70,6 +70,8 @@ static struct tunertype tuners[] = {
16*157.25,16*463.25,0x02,0x04,0x01,0x8e,0xc2,732},
{"TEMIC PAL_I", TEMIC, PAL_I,
16*170.00,16*450.00,0xa0,0x90,0x30,0x8e,0xc2,623},
{"Temic 4036 FY5 NTSC", TEMIC, NTSC,
16*157.25,16*463.25,0xa0,0x90,0x30,0x8e,0xc2,732},
};
/* ---------------------------------------------------------------------- */
......
......@@ -30,6 +30,7 @@
#define TUNER_PHILIPS_PAL 5
#define TUNER_TEMIC_NTSC 6
#define TUNER_TEMIC_PAL_I 7
#define TUNER_TEMIC_4036FY5_NTSC 8
#define NOTUNER 0
#define PAL 1
......
......@@ -68,6 +68,9 @@ extern int fmi_init(struct video_init *);
#ifdef CONFIG_RADIO_MIROPCM20
extern int pcm20_init(struct video_init *);
#endif
#ifdef CONFIG_VIDEO_PMS
extern int init_pms_cards(struct video_init *);
#endif
static struct video_init video_init_list[]={
#ifdef CONFIG_VIDEO_BT848
......
This diff is collapsed.
This diff is collapsed.
......@@ -79,6 +79,8 @@ static int rx_nocopy = 0, rx_copy = 0, queued_packet = 0, rx_csumhits;
#include <linux/pci.h>
#include <linux/bios32.h>
#include <linux/timer.h>
#include <asm/byteorder.h>
#include <asm/irq.h> /* For NR_IRQS only. */
#include <asm/bitops.h>
#include <asm/io.h>
......@@ -332,10 +334,20 @@ enum Window3 { /* Window 3: MAC/config bits. */
union wn3_config {
int i;
struct w3_config_fields {
#if defined(__LITTLE_ENDIAN_BITFIELD)
unsigned int ram_size:3, ram_width:1, ram_speed:2, rom_size:2;
int pad8:8;
unsigned int ram_split:2, pad18:2, xcvr:4, autoselect:1;
int pad24:7;
#elif defined(__BIG_ENDIAN_BITFIELD)
unsigned int rom_size:2, ram_speed:2, ram_width:1, ram_size:3;
int pad8:8;
unsigned int xcvr:4, pad18:2, ram_split:2;
int pad24:7;
unsigned int autoselect:1;
#else
#error "Bitfield endianness not defined! Check your byteorder.h"
#endif
} u;
};
......
......@@ -56,6 +56,7 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
fi
fi
tristate '3c509/3c579 support' CONFIG_EL3
tristate '3c515 ISA Fast EtherLink' CONFIG_3C515
tristate '3c590/3c900 series (592/595/597) "Vortex/Boomerang" support' CONFIG_VORTEX
fi
bool 'AMD LANCE and PCnet (AT1500 and NE2100) support' CONFIG_LANCE
......@@ -84,7 +85,7 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
bool 'Other ISA cards' CONFIG_NET_ISA
if [ "$CONFIG_NET_ISA" = "y" ]; then
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'AT1700 support (EXPERIMENTAL)' CONFIG_AT1700
tristate 'AT1700/1720 support (EXPERIMENTAL)' CONFIG_AT1700
fi
tristate 'Cabletron E21xx support' CONFIG_E2100
tristate 'DEPCA, DE10x, DE200, DE201, DE202, DE422 support' CONFIG_DEPCA
......
......@@ -482,6 +482,14 @@ else
endif
endif
ifeq ($(CONFIG_3C515),y)
L_OBJS += 3c515.o
else
ifeq ($(CONFIG_3C515),m)
M_OBJS += 3c515.o
endif
endif
ifeq ($(CONFIG_VORTEX),y)
L_OBJS += 3c59x.o
else
......
......@@ -110,6 +110,7 @@ extern int epic100_probe(struct device *dev);
extern int rtl8139_probe(struct device *dev);
extern int hplance_probe(struct device *dev);
extern int via_rhine_probe(struct device *dev);
extern int tc515_probe(struct device *dev);
/* Gigabit Ethernet adapters */
extern int yellowfin_probe(struct device *dev);
......@@ -268,6 +269,9 @@ struct devprobe isa_probes[] __initdata = {
#ifdef CONFIG_HP100 /* ISA, EISA & PCI */
{hp100_probe, 0},
#endif
#ifdef CONFIG_3C515
{tc515_probe, 0},
#endif
#ifdef CONFIG_ULTRA
{ultra_probe, 0},
#endif
......
......@@ -97,7 +97,7 @@ __initfunc(int ariadne2_probe(struct device *dev))
return 0;
}
}
return ENODEV;
return -ENODEV;
}
__initfunc(static int ariadne2_init(struct device *dev, unsigned int key,
......@@ -131,7 +131,7 @@ __initfunc(static int ariadne2_init(struct device *dev, unsigned int key,
while ((readb(ioaddr + NE_EN0_ISR) & ENISR_RESET) == 0)
if (jiffies - reset_start_time > 2*HZ/100) {
printk(" not found (no reset ack).\n");
return ENODEV;
return -ENODEV;
}
writeb(0xff, ioaddr + NE_EN0_ISR); /* Ack all intr. */
......
This diff is collapsed.
......@@ -59,12 +59,13 @@
* Changes by Christopher Turcksin <wabbit@rtfc.demon.co.uk>
* + Now compiles ok as a module again.
*
* Changes by Paul Norton (p.norton@computer.org) :
* Changes by Paul Norton (pnorton@ieee.org) :
* + moved the header manipulation code in tr_tx and tr_rx to
* net/802/tr.c. (July 12 1997)
* + add retry and timeout on open if cable disconnected. (May 5 1998)
* + lifted 2000 byte mtu limit. now depends on shared-RAM size.
* May 25 1998)
* + can't allocate 2k recv buff at 8k shared-RAM. (20 October 1998)
*/
#ifdef PCMCIA
......@@ -93,8 +94,8 @@
/* version and credits */
static char *version =
"ibmtr.c: v1.3.57 8/ 7/94 Peter De Schrijver and Mark Swanson\n"
" v2.1.106 6/22/98 Paul Norton <p.norton@computer.org>\n";
"ibmtr.c: v1.3.57 8/ 7/94 Peter De Schrijver and Mark Swanson\n"
" v2.1.125 10/20/98 Paul Norton <pnorton@ieee.org>\n";
static char pcchannelid[] = {
0x05, 0x00, 0x04, 0x09,
......@@ -416,7 +417,7 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr))
timeout = jiffies + TR_SPIN_INTERVAL;
while(!readb(ti->mmio + ACA_OFFSET + ACA_RW + RRR_EVEN))
if (jiffies > timeout) {
if (time_after(jiffies, timeout)) {
DPRINTK("Hardware timeout during initialization.\n");
kfree_s(ti, sizeof(struct tok_info));
return -ENODEV;
......@@ -634,56 +635,56 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr))
switch (ti->mapped_ram_size) {
case 16 : /* 8KB shared RAM */
ti->dhb_size4mb = MIN(ti->dhb_size4mb, 2048);
ti->rbuf_len4 = 2048;
ti->rbuf_cnt4 = 1;
ti->rbuf_len4 = 1032;
ti->rbuf_cnt4 = 2;
ti->dhb_size16mb = MIN(ti->dhb_size16mb, 2048);
ti->rbuf_len16 = 2048;
ti->rbuf_cnt16 = 1;
ti->rbuf_len16 = 1032;
ti->rbuf_cnt16 = 2;
break;
case 32 : /* 16KB shared RAM */
ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464);
ti->rbuf_len4 = 512;
ti->rbuf_len4 = 520;
ti->rbuf_cnt4 = 9;
ti->dhb_size16mb = MIN(ti->dhb_size16mb, 4096);
ti->rbuf_len16 = 2048;
ti->rbuf_cnt16 = 2;
ti->rbuf_len16 = 1032; /* 1024 usable */
ti->rbuf_cnt16 = 4;
break;
case 64 : /* 32KB shared RAM */
ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464);
ti->rbuf_len4 = 2048;
ti->rbuf_cnt4 = 3;
ti->rbuf_len4 = 1032;
ti->rbuf_cnt4 = 6;
ti->dhb_size16mb = MIN(ti->dhb_size16mb, 10240);
ti->rbuf_len16 = 2048;
ti->rbuf_cnt16 = 5;
ti->rbuf_len16 = 1032;
ti->rbuf_cnt16 = 10;
break;
case 127 : /* 63KB shared RAM */
ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464);
ti->rbuf_len4 = 2048;
ti->rbuf_cnt4 = 3;
ti->rbuf_len4 = 1032;
ti->rbuf_cnt4 = 6;
ti->dhb_size16mb = MIN(ti->dhb_size16mb, 16384);
ti->rbuf_len16 = 2048;
ti->rbuf_cnt16 = 8;
ti->rbuf_len16 = 1032;
ti->rbuf_cnt16 = 16;
break;
case 128 : /* 64KB shared RAM */
ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464);
ti->rbuf_len4 = 2048;
ti->rbuf_cnt4 = 3;
ti->rbuf_len4 = 1032;
ti->rbuf_cnt4 = 6;
ti->dhb_size16mb = MIN(ti->dhb_size16mb, 17960);
ti->rbuf_len16 = 2048;
ti->rbuf_cnt16 = 9;
ti->rbuf_len16 = 1032;
ti->rbuf_cnt16 = 18;
break;
default :
ti->dhb_size4mb = 2048;
ti->rbuf_len4 = 2048;
ti->rbuf_cnt4 = 1;
ti->rbuf_len4 = 1032;
ti->rbuf_cnt4 = 2;
ti->dhb_size16mb = 2048;
ti->rbuf_len16 = 2048;
ti->rbuf_cnt16 = 1;
ti->rbuf_len16 = 1032;
ti->rbuf_cnt16 = 2;
break;
}
ti->maxmtu16 = ti->dhb_size16mb-((ti->rbuf_cnt16)<<3)-TR_HLEN;
ti->maxmtu4 = ti->dhb_size4mb-((ti->rbuf_cnt4)<<3)-TR_HLEN;
ti->maxmtu16 = (ti->rbuf_len16*ti->rbuf_cnt16)-((ti->rbuf_cnt16)<<3)-TR_HLEN;
ti->maxmtu4 = (ti->rbuf_len4*ti->rbuf_cnt4)-((ti->rbuf_cnt4)<<3)-TR_HLEN;
DPRINTK("Maximum MTU 16Mbps: %d, 4Mbps: %d\n",
ti->maxmtu16, ti->maxmtu4);
......
......@@ -62,12 +62,6 @@ static const char *version =
static struct ipddp_route *ipddp_route_list = NULL;
/*
* The name of the card. Is used for messages and in the requests for
* io regions, irqs and dma channels
*/
static const char *cardname = "ipddp";
#ifdef CONFIG_IPDDP_ENCAP
static int ipddp_mode = IPDDP_ENCAP;
#else
......
This diff is collapsed.
......@@ -1270,6 +1270,8 @@ static int get_status_info(char *buffer, char **start, off_t req_offset, int req
}
static const char proc_strip_status_name[] = "strip";
#ifdef CONFIG_PROC_FS
static struct proc_dir_entry proc_strip_get_status_info =
{
PROC_NET_STRIP_STATUS, /* unsigned short low_ino */
......@@ -1284,7 +1286,7 @@ static struct proc_dir_entry proc_strip_get_status_info =
NULL, NULL, NULL, /* struct proc_dir_entry *next, *parent, *subdir; */
NULL /* void *data; */
};
#endif /* CONFIG_PROC_FS */
/************************************************************************/
/* Sending routines */
......@@ -2847,10 +2849,12 @@ int strip_init_ctrl_dev(struct device *dummy)
/*
* Register the status file with /proc
*/
#ifdef CONFIG_PROC_FS
if (proc_net_register(&proc_strip_get_status_info) != 0)
{
printk(KERN_ERR "strip: status proc_net_register() failed.\n");
}
#endif
#ifdef MODULE
return status;
......@@ -2881,7 +2885,9 @@ void cleanup_module(void)
strip_free(struct_strip_list);
/* Unregister with the /proc/net file here. */
#ifdef CONFIG_PROC_FS
proc_net_unregister(PROC_NET_STRIP_STATUS);
#endif
if ((i = tty_register_ldisc(N_STRIP, NULL)))
printk(KERN_ERR "STRIP: can't unregister line discipline (err = %d)\n", i);
......
This diff is collapsed.
......@@ -391,9 +391,12 @@ static void z8530_dma_rx(struct z8530_channel *chan)
if(chan->rxdma_on)
{
/* Special condition check only */
u8 r7=read_zsreg(chan, R7);
u8 r6=read_zsreg(chan, R6);
u8 status=read_zsreg(chan, R1);
u8 status;
read_zsreg(chan, R7);
read_zsreg(chan, R6);
status=read_zsreg(chan, R1);
if(status&END_FR)
{
z8530_rx_done(chan); /* Fire up the next one */
......
......@@ -28,8 +28,10 @@ EXPORT_SYMBOL(pci_find_class);
EXPORT_SYMBOL(pci_find_device);
EXPORT_SYMBOL(pci_find_slot);
EXPORT_SYMBOL(pci_set_master);
#ifdef CONFIG_PROC_FS
EXPORT_SYMBOL(pci_proc_attach_device);
EXPORT_SYMBOL(pci_proc_detach_device);
#endif
/* Backward compatibility */
......
......@@ -48,6 +48,11 @@ dep_tristate 'EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) supp
int ' maximum number of queued commands' CONFIG_SCSI_EATA_MAX_TAGS 16
fi
dep_tristate 'Future Domain 16xx SCSI/AHA 2920 support' CONFIG_SCSI_FUTURE_DOMAIN $CONFIG_SCSI
if [ "$CONFIG_MCA" = "y" ]; then
if [ "$CONFIG_SCSI" = "y" ]; then
bool 'Future Domain MCS-600/700 SCSI support' CONFIG_SCSI_FD_MCS
fi
fi
dep_tristate 'GDT SCSI Disk Array Controller support' CONFIG_SCSI_GDTH $CONFIG_SCSI
dep_tristate 'Generic NCR5380/53c400 SCSI support' CONFIG_SCSI_GENERIC_NCR5380 $CONFIG_SCSI
if [ "$CONFIG_PARPORT" != "n" ]; then
......
......@@ -486,6 +486,11 @@ else
endif
endif
ifeq ($(CONFIG_SCSI_FD_MCS),y)
L_OBJS += fd_mcs.o
endif
ifeq ($(CONFIG_SCSI_T128),y)
L_OBJS += t128.o
else
......
......@@ -304,13 +304,18 @@
* #define AIC7XXX_VERBOSE_DEBUGGING
*/
#ifdef MODULE
#if defined(MODULE) || defined(PCMCIA)
#include <linux/module.h>
#endif
#if defined(PCMCIA)
# undef MODULE
#endif
#include <stdarg.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/byteorder.h>
#include <linux/version.h>
#include <linux/string.h>
#include <linux/errno.h>
......@@ -349,7 +354,7 @@ struct proc_dir_entry proc_scsi_aic7xxx = {
0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
#define AIC7XXX_C_VERSION "5.1.3"
#define AIC7XXX_C_VERSION "5.1.4"
#define NUMBER(arr) (sizeof(arr) / sizeof(arr[0]))
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
......@@ -683,12 +688,14 @@ struct seeprom_config {
#define CFDISC 0x0010 /* enable disconnection */
#define CFWIDEB 0x0020 /* wide bus device (wide card) */
#define CFSYNCHISULTRA 0x0040 /* CFSYNC is an ultra offset */
/* UNUSED 0x0080 */
#define CFNEWULTRAFORMAT 0x0080 /* Use the Ultra2 SEEPROM format */
#define CFSTART 0x0100 /* send start unit SCSI command */
#define CFINCBIOS 0x0200 /* include in BIOS scan */
#define CFRNFOUND 0x0400 /* report even if not found */
#define CFMULTILUN 0x0800 /* probe mult luns in BIOS scan */
/* UNUSED 0xF000 */
#define CFWBCACHEYES 0x4000 /* Enable W-Behind Cache on drive */
#define CFWBCACHENC 0xc000 /* Don't change W-Behind Cache */
/* UNUSED 0x3000 */
unsigned short device_flags[16]; /* words 0-15 */
/*
......@@ -1481,8 +1488,8 @@ static int aic7xxx_verbose = VERBOSE_NORMAL | VERBOSE_NEGOTIATION |
static void aic7xxx_panic_abort(struct aic7xxx_host *p, Scsi_Cmnd *cmd);
static void aic7xxx_print_card(struct aic7xxx_host *p);
static void aic7xxx_print_scratch_ram(struct aic7xxx_host *p);
#ifdef AIC7XXX_VERBOSE_DEBUGGING
static void aic7xxx_print_sequencer(struct aic7xxx_host *p, int downloaded);
#ifdef AIC7XXX_VERBOSE_DEBUGGING
static void aic7xxx_check_scbs(struct aic7xxx_host *p, char *buffer);
#endif
......@@ -1544,26 +1551,6 @@ aic_outb(struct aic7xxx_host *p, unsigned char val, long port)
#endif
}
static void
aic_outsb(struct aic7xxx_host *p, long port, unsigned char *valp, size_t size)
{
#ifdef MMAPIO
if(p->maddr)
{
int i;
for (i=0; i < size; i++)
{
p->maddr[port] = valp[i];
}
mb();
}
else
outsb(p->base + port, valp, size);
#else
outsb(p->base + port, valp, size);
#endif
}
/*+F*************************************************************************
* Function:
* aic7xxx_setup
......@@ -1752,7 +1739,9 @@ unpause_sequencer(struct aic7xxx_host *p, int unpause_always)
static inline void
restart_sequencer(struct aic7xxx_host *p)
{
aic_outb(p, FASTMODE|SEQRESET, SEQCTL);
aic_outb(p, 0, SEQADDR0);
aic_outb(p, 0, SEQADDR1);
aic_outb(p, FASTMODE, SEQCTL);
}
/*
......@@ -1831,6 +1820,8 @@ aic7xxx_download_instr(struct aic7xxx_host *p, int instrptr,
instr = *(union ins_formats*) &seqprog[instrptr * 4];
instr.integer = le32_to_cpu(instr.integer);
fmt1_ins = &instr.format1;
fmt3_ins = NULL;
......@@ -1926,7 +1917,10 @@ aic7xxx_download_instr(struct aic7xxx_host *p, int instrptr,
(fmt1_ins->opcode << 25);
}
}
aic_outsb(p, SEQRAM, instr.bytes, 4);
aic_outb(p, (instr.integer & 0xff), SEQRAM);
aic_outb(p, ((instr.integer >> 8) & 0xff), SEQRAM);
aic_outb(p, ((instr.integer >> 16) & 0xff), SEQRAM);
aic_outb(p, ((instr.integer >> 24) & 0xff), SEQRAM);
break;
default:
......@@ -1976,18 +1970,21 @@ aic7xxx_loadseq(struct aic7xxx_host *p)
downloaded++;
}
aic_outb(p, FASTMODE|SEQRESET, SEQCTL);
aic_outb(p, 0, SEQADDR0);
aic_outb(p, 0, SEQADDR1);
aic_outb(p, FASTMODE | FAILDIS, SEQCTL);
unpause_sequencer(p, TRUE);
mdelay(1);
pause_sequencer(p);
aic_outb(p, FASTMODE, SEQCTL);
if (aic7xxx_verbose & VERBOSE_PROBE)
{
printk(" %d instructions downloaded\n", downloaded);
}
#ifdef AIC7XXX_VERBOSE_DEBUGGING
if (aic7xxx_dump_sequencer)
aic7xxx_print_sequencer(p, downloaded);
#endif
}
#ifdef AIC7XXX_VERBOSE_DEBUGGING
/*+F*************************************************************************
* Function:
* aic7xxx_print_sequencer
......@@ -2022,10 +2019,15 @@ aic7xxx_print_sequencer(struct aic7xxx_host *p, int downloaded)
else
printk(" ");
}
aic_outb(p, FASTMODE|SEQRESET, SEQCTL);
aic_outb(p, 0, SEQADDR0);
aic_outb(p, 0, SEQADDR1);
aic_outb(p, FASTMODE | FAILDIS, SEQCTL);
unpause_sequencer(p, TRUE);
mdelay(1);
pause_sequencer(p);
aic_outb(p, FASTMODE, SEQCTL);
printk("\n");
}
#endif
/*+F*************************************************************************
* Function:
......@@ -4147,8 +4149,10 @@ aic7xxx_timer(struct aic7xxx_host *p)
#endif
for(i=0; i<MAX_TARGETS; i++)
{
if ( del_timer(&p->dev_timer[i]) )
if ( timer_pending(&p->dev_timer[i]) &&
time_before_eq(p->dev_timer[i].expires, jiffies) )
{
del_timer(&p->dev_timer[i]);
p->dev_temp_queue_depth[i] = p->dev_max_queue_depth[i];
j = 0;
while ( ((scb = scbq_remove_head(&p->delayed_scbs[i])) != NULL) &&
......@@ -5498,7 +5502,7 @@ aic7xxx_handle_reqinit(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
{
unsigned char lastbyte;
unsigned char phasemis;
int done;
int done = FALSE;
switch(p->msg_type)
{
......@@ -7548,6 +7552,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
p->host_no, p->mbase, (unsigned long)p->maddr);
}
#ifdef CONFIG_PCI
/*
* Now that we know our instance number, we can set the flags we need to
* force termination if need be.
......@@ -7587,6 +7592,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
#endif
}
}
#endif
/*
* That took care of devconfig and stpwlev, now for the actual termination
......@@ -7637,19 +7643,6 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
}
}
/*
* Load the sequencer program, then re-enable the board -
* resetting the AIC-7770 disables it, leaving the lights
* on with nobody home.
*/
aic7xxx_loadseq(p);
if ( (p->chip & AHC_CHIPID_MASK) == AHC_AIC7770 )
{
aic_outb(p, ENABLE, BCTL); /* Enable the boards BUS drivers. */
}
aic_outb(p, aic_inb(p, SBLKCTL) & ~AUTOFLUSHDIS, SBLKCTL);
/*
* Clear out any possible pending interrupts.
*/
......@@ -7852,6 +7845,18 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
*/
aic7xxx_allocate_scb(p);
/*
* Load the sequencer program, then re-enable the board -
* resetting the AIC-7770 disables it, leaving the lights
* on with nobody home.
*/
aic7xxx_loadseq(p);
if ( (p->chip & AHC_CHIPID_MASK) == AHC_AIC7770 )
{
aic_outb(p, ENABLE, BCTL); /* Enable the boards BUS drivers. */
}
if ( !(aic7xxx_no_reset) )
{
if (p->features & AHC_TWIN)
......@@ -8254,9 +8259,10 @@ aic7xxx_load_seeprom(struct aic7xxx_host *p, unsigned char *sxfrctl1)
{
for (i = 0; i < max_targets; i++)
{
if( (p->features & AHC_ULTRA) &&
!(sc->adapter_control & CFULTRAEN) &&
(sc->device_flags[i] & CFSYNCHISULTRA) )
if( ((p->features & AHC_ULTRA) &&
!(sc->adapter_control & CFULTRAEN) &&
(sc->device_flags[i] & CFSYNCHISULTRA)) ||
(sc->device_flags[i] & CFNEWULTRAFORMAT) )
{
p->flags |= AHC_NEWEEPROM_FMT;
break;
......@@ -8333,6 +8339,15 @@ aic7xxx_load_seeprom(struct aic7xxx_host *p, unsigned char *sxfrctl1)
{
p->ultraenb |= mask;
}
else if (sc->device_flags[i] & CFNEWULTRAFORMAT)
{
if ( (sc->device_flags[i] & (CFSYNCHISULTRA | CFXFER)) == 0x03 )
{
sc->device_flags[i] &= ~CFXFER;
sc->device_flags[i] |= CFSYNCHISULTRA;
p->ultraenb |= mask;
}
}
}
else if (sc->adapter_control & CFULTRAEN)
{
......@@ -8480,8 +8495,10 @@ aic7xxx_detect(Scsi_Host_Template *template)
struct aic7xxx_host *current_p = NULL;
struct aic7xxx_host *list_p = NULL;
int found = 0;
#if defined(__i386__) || defined(__alpha__)
ahc_flag_type flags = 0;
int type;
#endif
unsigned char sxfrctl1;
#if defined(__i386__) || defined(__alpha__)
unsigned char hcntrl, hostconf;
......
......@@ -36,8 +36,10 @@
* $Id: sequencer.h,v 1.3 1997/09/27 19:37:31 gibbs Exp $
*/
#ifdef __LITTLE_ENDIAN_BITFIELD
struct ins_format1 {
unsigned int immediate : 8,
unsigned int
immediate : 8,
source : 9,
destination : 9,
ret : 1,
......@@ -46,7 +48,8 @@ struct ins_format1 {
};
struct ins_format2 {
unsigned int shift_control : 8,
unsigned int
shift_control : 8,
source : 9,
destination : 9,
ret : 1,
......@@ -55,12 +58,43 @@ struct ins_format2 {
};
struct ins_format3 {
unsigned int immediate : 8,
unsigned int
immediate : 8,
source : 9,
address : 10,
opcode : 4,
parity : 1;
};
#elif defined(__BIG_ENDIAN_BITFIELD)
struct ins_format1 {
unsigned int
parity : 1,
opcode : 4,
ret : 1,
destination : 9,
source : 9,
immediate : 8;
};
struct ins_format2 {
unsigned int
parity : 1,
opcode : 4,
ret : 1,
destination : 9,
source : 9,
shift_control : 8;
};
struct ins_format3 {
unsigned int
parity : 1,
opcode : 4,
address : 10,
source : 9,
immediate : 8;
};
#endif
union ins_formats {
struct ins_format1 format1;
......
......@@ -50,7 +50,7 @@ static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write);
volatile unsigned char cmd_buffer[16];
/* This is where all commands are put
* before they are trasfered to the ESP chip
* before they are transfered to the ESP chip
* via PIO.
*/
......
......@@ -50,7 +50,7 @@ static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write);
volatile unsigned char cmd_buffer[16];
/* This is where all commands are put
* before they are trasfered to the ESP chip
* before they are transfered to the ESP chip
* via PIO.
*/
......
......@@ -59,7 +59,7 @@ static unsigned char ctrl_data = 0; /* Keep backup of the stuff written
volatile unsigned char cmd_buffer[16];
/* This is where all commands are put
* before they are trasfered to the ESP chip
* before they are transfered to the ESP chip
* via PIO.
*/
......
......@@ -72,7 +72,7 @@ static unsigned char ctrl_data = 0; /* Keep backup of the stuff written
volatile unsigned char cmd_buffer[16];
/* This is where all commands are put
* before they are trasfered to the ESP chip
* before they are transfered to the ESP chip
* via PIO.
*/
......
This diff is collapsed.
/* fd_mcs.h -- Header for Future Domain MCS 600/700 (or IBM OEM) driver
*
* fd_mcs.h v0.2 03/11/1998 ZP Gu (zpg@castle.net)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _FD_MCS_H
#define _FD_MCS_H
extern int fd_mcs_detect( Scsi_Host_Template * );
extern int fd_mcs_release( struct Scsi_Host * );
extern int fd_mcs_command( Scsi_Cmnd * );
extern int fd_mcs_abort( Scsi_Cmnd * );
extern int fd_mcs_reset( Scsi_Cmnd *, unsigned int );
extern int fd_mcs_queue( Scsi_Cmnd *, void (*done)(Scsi_Cmnd *) );
extern int fd_mcs_biosparam( Disk *, kdev_t, int * );
extern int fd_mcs_proc_info( char *, char **, off_t, int, int, int );
extern const char *fd_mcs_info(struct Scsi_Host *);
extern struct proc_dir_entry proc_scsi_fd_mcs;
#define FD_MCS {\
proc_dir: &proc_scsi_fd_mcs, \
proc_info: fd_mcs_proc_info, \
detect: fd_mcs_detect, \
release: fd_mcs_release, \
info: fd_mcs_info, \
command: fd_mcs_command, \
queuecommand: fd_mcs_queue, \
abort: fd_mcs_abort, \
reset: fd_mcs_reset, \
bios_param: fd_mcs_biosparam, \
can_queue: 1, \
this_id: 7, \
sg_tablesize: 64, \
cmd_per_lun: 1, \
use_clustering: DISABLE_CLUSTERING }
#endif /* _FD_MCS_H */
......@@ -133,6 +133,10 @@
#include "u14-34f.h"
#endif
#ifdef CONFIG_SCSI_FD_MCS
#include "fd_mcs.h"
#endif
#ifdef CONFIG_SCSI_FUTURE_DOMAIN
#include "fdomain.h"
#endif
......
......@@ -45,6 +45,7 @@ int scsicam_bios_param (Disk *disk, /* SCSI disk */
struct buffer_head *bh;
int ret_code;
int size = disk->capacity;
unsigned long temp_cyl;
if (!(bh = bread(MKDEV(MAJOR(dev), MINOR(dev)&~0xf), 0, 1024)))
return -1;
......@@ -67,6 +68,11 @@ int scsicam_bios_param (Disk *disk, /* SCSI disk */
if (ret_code || ip[0] > 255 || ip[1] > 63) {
ip[0] = 64;
ip[1] = 32;
temp_cyl = size / (ip[0] * ip[1]);
if (temp_cyl > 65534) {
ip[0] = 255;
ip[1] = 63;
}
ip[2] = size / (ip[0] * ip[1]);
}
......
......@@ -66,6 +66,34 @@ modprobe -k adlib_card io=0x388
recommend using /etc/modules.conf.
Persistent DMA Buffers:
The sound modules normally allocate DMA buffers during open() and
deallocate them during close(). Linux can often have problems allocating
DMA buffers for ISA cards on machines with more than 16MB RAM. This is
because ISA DMA buffers must exist below the 16MB boundry and it is quite
possible that we can't find a large enough free block in this region after
the machine has been running for any amount of time. The way to avoid this
problem is to allocate the DMA buffers during module load and deallocate
them when the module is unloaded. For this to be effective we need to load
the sound modules right after the kernel boots, either manually or by an
init script, and keep them around until we shut down. This is a little
wasteful of RAM, but it guarantees that sound always works.
To make the sound driver use persistent DMA buffers we need to pass the
sound.o module a "dmabuf=1" command-line argument. This is normally done
in /etc/conf.modules (or the more proper /etc/modules.conf) like so:
options sound dmabuf=1
If you have 16MB or less RAM or a PCI sound card, this is wasteful and
unnecessary. It is possible that machine with 16MB or less RAM will find
this option useful, but if your machine is so memory-starved that it
cannot find a 64K block free, you will be wasting even more RAM by keeping
the sound modules loaded and the DMA buffers allocated when they are not
needed. The proper solution is to upgrade your RAM. But you do also have
this improper solution as well. Use it wisely.
I'm afraid I know nothing about anything but my setup, being more of a
text-mode guy anyway. If you have options for other cards or other helpful
hints, send them to me, Jim Bray, jb@as220.org, http://as220.org/jb.
......@@ -1814,7 +1814,7 @@ int ad1848_init(char *name, int io_base, int irq, int dma_playback, int dma_capt
ad_write(devc, 16, tmp & ~0x40); /* Disable timer */
if (devc->timer_ticks == 0)
printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", devc->irq);
printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", irq);
else
{
DDB(printk("Interrupt test OK\n"));
......@@ -1935,7 +1935,7 @@ void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int
if (!share_dma)
{
if (irq > 0)
free_irq(devc->irq, NULL);
free_irq(devc->irq, (void *)devc->dev_no);
sound_free_dma(audio_devs[dev]->dmap_out->dma);
......@@ -1945,6 +1945,10 @@ void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int
mixer = audio_devs[devc->dev_no]->mixer_dev;
if(mixer>=0)
sound_unload_mixerdev(mixer);
nr_ad1848_devs--;
for ( ; i < nr_ad1848_devs ; i++)
adev_info[i] = adev_info[i+1];
}
else
printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
......
......@@ -228,8 +228,8 @@ int audio_write(int dev, struct file *file, const char *buf, int count)
if (l > buf_size)
l = buf_size;
returned = l;
used = l;
returned = l;
used = l;
if (!audio_devs[dev]->d->copy_user)
{
if ((dma_buf + l) >
......@@ -246,13 +246,13 @@ int audio_write(int dev, struct file *file, const char *buf, int count)
if(copy_from_user(dma_buf, &(buf)[p], l))
return -EFAULT;
}
else audio_devs[dev]->d->copy_user ( dev,
dma_buf, 0,
buf, p,
c, buf_size,
&used, &returned,
l);
l = returned;
else audio_devs[dev]->d->copy_user (dev,
dma_buf, 0,
buf, p,
c, buf_size,
&used, &returned,
l);
l = returned;
if (audio_devs[dev]->local_conversion & CNV_MU_LAW)
{
......
......@@ -516,6 +516,7 @@ void sound_unload_audiodev(int dev)
{
if (dev != -1)
{
DMAbuf_deinit(dev);
audio_devs[dev] = NULL;
unregister_sound_dsp((dev<<4)+3);
}
......
......@@ -188,12 +188,12 @@ struct audio_driver
int (*prepare_for_output) (int dev, int bufsize, int nbufs);
void (*halt_io) (int dev);
int (*local_qlen)(int dev);
void (*copy_user)(int dev,
char *localbuf, int localoffs,
const char *userbuf, int useroffs,
int max_in, int max_out,
int *used, int *returned,
int len);
void (*copy_user) (int dev,
char *localbuf, int localoffs,
const char *userbuf, int useroffs,
int max_in, int max_out,
int *used, int *returned,
int len);
void (*halt_input) (int dev);
void (*halt_output) (int dev);
void (*trigger) (int dev, int bits);
......
......@@ -18,7 +18,10 @@
* determine if it was woken up by the expiring timeout or by
* an explicit wake_up. The return value from schedule_timeout
* can be used instead; if 0, the wakeup was due to the timeout.
*
* Rob Riggs Added persistent DMA buffers (1998/10/17)
*/
#include <linux/config.h>
#define BE_CONSERVATIVE
......@@ -28,6 +31,9 @@
#if defined(CONFIG_AUDIO) || defined(CONFIG_GUS)
#define DMAP_FREE_ON_CLOSE 0
#define DMAP_KEEP_ON_CLOSE 1
extern int sound_dmap_flag;
static void dma_reset_output(int dev);
static void dma_reset_input(int dev);
......@@ -212,7 +218,8 @@ static void close_dmap(struct audio_operations *adev, struct dma_buffparms *dmap
disable_dma(dmap->dma);
release_dma_lock(flags);
sound_free_dmap(dmap);
if (sound_dmap_flag == DMAP_FREE_ON_CLOSE)
sound_free_dmap(dmap);
}
......@@ -732,7 +739,7 @@ static int output_sleep(int dev, int dontblock)
* Wait for free space
*/
if (signal_pending(current))
return -EIO;
return -EINTR;
timeout = (adev->go && !(dmap->flags & DMA_NOTIMEOUT));
if (timeout)
timeout_value = dmabuf_timeout(dmap);
......@@ -1009,8 +1016,8 @@ void DMAbuf_outputintr(int dev, int notify_only)
unsigned long f;
f=claim_dma_lock();
clear_dma_ff(chan);
disable_dma(dmap->dma);
clear_dma_ff(chan);
pos = dmap->bytes_in_use - get_dma_residue(chan);
enable_dma(dmap->dma);
release_dma_lock(f);
......@@ -1104,8 +1111,8 @@ void DMAbuf_inputintr(int dev)
unsigned long f;
f=claim_dma_lock();
clear_dma_ff(chan);
disable_dma(dmap->dma);
clear_dma_ff(chan);
pos = dmap->bytes_in_use - get_dma_residue(chan);
enable_dma(dmap->dma);
release_dma_lock(f);
......@@ -1181,6 +1188,13 @@ void DMAbuf_init(int dev, int dma1, int dma2)
adev->dmap_in->dma = dma2;
}
}
/* Persistent DMA buffers allocated here */
if (sound_dmap_flag == DMAP_KEEP_ON_CLOSE) {
if (adev->dmap_in->raw_buf == NULL)
sound_alloc_dmap(adev->dmap_in);
if (adev->dmap_out->raw_buf == NULL)
sound_alloc_dmap(adev->dmap_out);
}
}
}
......@@ -1251,12 +1265,13 @@ void DMAbuf_deinit(int dev)
/* This routine is called when driver is being unloaded */
if (!adev)
return;
#ifdef RUNTIME_DMA_ALLOC
sound_free_dmap(adev->dmap_out);
if (adev->flags & DMA_DUPLEX)
sound_free_dmap(adev->dmap_in);
#endif
/* Persistent DMA buffers deallocated here */
if (sound_dmap_flag == DMAP_KEEP_ON_CLOSE) {
sound_free_dmap(adev->dmap_out);
if (adev->flags & DMA_DUPLEX)
sound_free_dmap(adev->dmap_in);
}
}
#endif
......@@ -816,7 +816,7 @@ static struct sound_queue sq;
#define ONE_SECOND HZ /* in jiffies (100ths of a second) */
#define NO_TIME_LIMIT 0xffffffff
#define SLEEP(queue, time_limit) \
interruptible_sleep_on(&queue, (time_limit));
interruptible_sleep_on_timeout(&queue, (time_limit));
#define WAKE_UP(queue) (wake_up_interruptible(&queue))
/*
......
......@@ -834,7 +834,6 @@ int probe_mad16_mpu(struct address_info *hw_config)
void unload_mad16(struct address_info *hw_config)
{
int mixer = audio_devs[hw_config->slots[0]]->mixer_dev;
ad1848_unload(hw_config->io_base + 4,
hw_config->irq,
hw_config->dma,
......
......@@ -48,7 +48,6 @@ extern void sound_close_dma(int chn);
extern void reprogram_timer(void);
#define RUNTIME_DMA_ALLOC
#define USE_AUTOINIT_DMA
extern caddr_t sound_mem_blocks[1024];
......
......@@ -87,14 +87,14 @@ typedef struct sb_devc {
/* State variables */
int opened;
/* new audio fields for full duplex support */
int fullduplex;
int duplex;
/* new audio fields for full duplex support */
int fullduplex;
int duplex;
int speed, bits, channels;
volatile int irq_ok;
volatile int intr_active, irq_mode;
/* duplicate audio fields for full duplex support */
volatile int intr_active_2, irq_mode_2;
/* duplicate audio fields for full duplex support */
volatile int intr_active_16, irq_mode_16;
/* Mixer fields */
int *levels;
......@@ -110,12 +110,12 @@ typedef struct sb_devc {
int trg_bytes;
int trg_intrflag;
int trg_restart;
/* duplicate audio fields for full duplex support */
unsigned long trg_buf_2;
int trigger_bits_2;
int trg_bytes_2;
int trg_intrflag_2;
int trg_restart_2;
/* duplicate audio fields for full duplex support */
unsigned long trg_buf_16;
int trigger_bits_16;
int trg_bytes_16;
int trg_intrflag_16;
int trg_restart_16;
unsigned char tconst;
int my_dev;
......
This diff is collapsed.
......@@ -168,17 +168,27 @@ static void sbintr(int irq, void *dev_id, struct pt_regs *dummy)
/* printk(KERN_WARN "Sound Blaster: Unexpected interrupt\n"); */
;
}
} else if (devc->intr_active_2 && (src & 0x02)) {
switch (devc->irq_mode_2)
{
case IMODE_OUTPUT:
DMAbuf_outputintr (devc->dev, 1);
break;
case IMODE_INPUT:
DMAbuf_inputintr (devc->dev);
break;
}
}
}
else if (devc->intr_active_16 && (src & 0x02))
{
switch (devc->irq_mode_16)
{
case IMODE_OUTPUT:
DMAbuf_outputintr(devc->dev, 1);
break;
case IMODE_INPUT:
DMAbuf_inputintr(devc->dev);
break;
case IMODE_INIT:
break;
default:
/* printk(KERN_WARN "Sound Blaster: Unexpected interrupt\n"); */
;
}
}
/*
* Acknowledge interrupts
*/
......@@ -605,6 +615,7 @@ int sb_dsp_detect(struct address_info *hw_config)
sb_devc sb_info;
sb_devc *devc = &sb_info;
memset((char *) &sb_info, 0, sizeof(sb_info)); /* Zero everything */
sb_info.my_mididev = -1;
sb_info.my_mixerdev = -1;
sb_info.my_dev = -1;
......@@ -621,7 +632,6 @@ int sb_dsp_detect(struct address_info *hw_config)
#endif
return 0;
}
memset((char *) &sb_info, 0, sizeof(sb_info)); /* Zero everything */
devc->type = hw_config->card_subtype;
......@@ -971,7 +981,7 @@ void sb_dsp_unload(struct address_info *hw_config, int sbmpu)
/* We don't have to do this bit any more the UART401 is its own
master -- Krzysztof Halasa */
/* But we have to do it, if UART401 is not detected */
if (!sbmpu && devc->my_mididev)
if (!sbmpu)
sound_unload_mididev(devc->my_mididev);
sound_unload_audiodev(devc->my_dev);
}
......
......@@ -201,7 +201,7 @@ MIX_ENT(SOUND_MIXER_SYNTH, 0x66, 7, 4, 0x66, 3, 4),
MIX_ENT(SOUND_MIXER_PCM, 0x64, 7, 4, 0x64, 3, 4),
MIX_ENT(SOUND_MIXER_SPEAKER, 0x00, 0, 0, 0x00, 0, 0),
MIX_ENT(SOUND_MIXER_LINE, 0x6e, 7, 4, 0x6e, 3, 4),
MIX_ENT(SOUND_MIXER_MIC, 0x6a, 6, 3, 0x00, 0, 0),
MIX_ENT(SOUND_MIXER_MIC, 0x6a, 2, 3, 0x00, 0, 0),
MIX_ENT(SOUND_MIXER_CD, 0x68, 7, 4, 0x68, 3, 4),
MIX_ENT(SOUND_MIXER_IMIX, 0x00, 0, 0, 0x00, 0, 0),
MIX_ENT(SOUND_MIXER_ALTPCM, 0x00, 0, 0, 0x00, 0, 0),
......
......@@ -29,7 +29,7 @@
static void sleep( unsigned howlong )
{
current->state = TASK_INTERRUPTIBLE;
schedule(howlong);
schedule_timeout(howlong);
}
#define DPORT 0x80
......@@ -108,9 +108,7 @@ int probe_sgalaxy( struct address_info *ai )
sleep( HZ/10 );
if ( ad1848_detect( ai->io_base+4, NULL, ai->osp ) )
return 1;
return 0;
return probe_ms_sound(ai);
}
void attach_sgalaxy( struct address_info *ai )
......
......@@ -15,6 +15,8 @@
* integrated sound_switch.c
* Stefan Reinauer : integrated /proc/sound (equals to /dev/sndstat,
* which should disappear in the near future)
*
* Rob Riggs Added persistent DMA buffers support (1998/10/17)
*/
#include <linux/config.h>
......@@ -64,6 +66,9 @@ static int is_unloading = 0;
caddr_t sound_mem_blocks[1024];
int sound_nblocks = 0;
/* Persistent DMA buffers */
int sound_dmap_flag = 0; /* Off by default */
static int soundcard_configured = 0;
static char dma_alloc_map[MAX_DMA_CHANNELS] =
......@@ -848,7 +853,9 @@ static int sound[20] = {
#ifdef MODULE
int traceinit = 0;
static int dmabuf = 0;
MODULE_PARM(traceinit, "i");
MODULE_PARM(dmabuf, "i");
int init_module(void)
{
......@@ -874,6 +881,10 @@ int init_module(void)
printk(KERN_ERR "sound: driver already loaded/included in kernel\n");
return err;
}
/* Protecting the innocent */
sound_dmap_flag = (dmabuf > 0 ? 1 : 0);
chrdev_registered = 1;
soundcard_init();
......
......@@ -2055,14 +2055,12 @@ wavefront_open (int dev, int mode)
return (0);
}
static void
wavefront_close (int dev)
static void wavefront_close (int dev)
{
struct wf_config *hw = &wavefront_configuration;
int i;
#ifdef WF_STATS
int i;
printk ("Status during loop: %ld\n", hw->status_found_during_loop);
for (i = 0; i < 4; i++) {
printk ("Status during sleep[%d]: %ld\n",
......@@ -2075,42 +2073,36 @@ wavefront_close (int dev)
return;
}
static void
wavefront_aftertouch (int dev, int channel, int pressure)
static void wavefront_aftertouch (int dev, int channel, int pressure)
{
midi_synth_aftertouch (wavefront_configuration.mididev,channel,pressure);
};
static void
wavefront_bender (int dev, int chn, int value)
static void wavefront_bender (int dev, int chn, int value)
{
midi_synth_bender (wavefront_configuration.mididev, chn, value);
};
static void
wavefront_controller (int dev, int channel, int ctrl_num, int value)
static void wavefront_controller (int dev, int channel, int ctrl_num, int value)
{
if(ctrl_num==CTRL_PITCH_BENDER) wavefront_bender(0,channel,value);
midi_synth_controller (wavefront_configuration.mididev,
channel,ctrl_num,value);
};
static void
wavefront_panning(int dev, int channel, int pressure)
static void wavefront_panning(int dev, int channel, int pressure)
{
midi_synth_controller (wavefront_configuration.mididev,
channel,CTL_PAN,pressure);
};
static int
wavefront_set_instr (int dev, int channel, int instr_no)
static int wavefront_set_instr (int dev, int channel, int instr_no)
{
return(midi_synth_set_instr (wavefront_configuration.mididev,
channel,instr_no));
};
static int
wavefront_kill_note (int dev, int channel, int note, int volume)
static int wavefront_kill_note (int dev, int channel, int note, int volume)
{
if (note==255)
return (midi_synth_start_note (wavefront_configuration.mididev,
......@@ -2119,8 +2111,7 @@ wavefront_kill_note (int dev, int channel, int note, int volume)
channel, note, volume));
};
static int
wavefront_start_note (int dev, int channel, int note, int volume)
static int wavefront_start_note (int dev, int channel, int note, int volume)
{
if (note==255) {
midi_synth_aftertouch (wavefront_configuration.mididev,
......@@ -2140,13 +2131,11 @@ wavefront_start_note (int dev, int channel, int note, int volume)
return(0);
};
static void
wavefront_setup_voice (int dev, int voice, int chn)
static void wavefront_setup_voice (int dev, int voice, int chn)
{
};
static void wavefront_reset (int dev)
{
int i;
......
......@@ -375,24 +375,25 @@ wf_mpu_input_scanner (struct wf_mpu_config *devc, unsigned char midic)
return 1;
}
void
wf_mpuintr (int irq, void *dev_id, struct pt_regs *dummy)
void wf_mpuintr (int irq, void *dev_id, struct pt_regs *dummy)
{
struct wf_mpu_config *devc;
int dev;
int dev;
static struct wf_mpu_config *isrc = 0;
int n;
int n;
struct midi_input_info *mi;
static int cnt = 0;
if (irq < 0 || irq > 15) {
if (irq < 0 || irq > 15)
{
printk (KERN_ERR "WF-MPU: bogus interrupt #%d", irq);
return;
}
dev = irq2dev[irq];
mi = &midi_devs[dev]->in_info;
if (mi->m_busy) return;
if (mi->m_busy)
return;
mi->m_busy = 1;
sti ();
n = 50;
......@@ -445,8 +446,7 @@ wf_mpuintr (int irq, void *dev_id, struct pt_regs *dummy)
mi->m_busy = 0;
}
static int
wf_mpu_open (int dev, int mode,
static int wf_mpu_open (int dev, int mode,
void (*input) (int dev, unsigned char data),
void (*output) (int dev)
)
......
......@@ -116,7 +116,7 @@ do_aout_core_dump(long signr, struct pt_regs * regs)
#else
corefile[4] = '\0';
#endif
dentry = open_namei(corefile,O_CREAT | 2 | O_TRUNC, 0600);
dentry = open_namei(corefile,O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
if (IS_ERR(dentry)) {
dentry = NULL;
goto end_coredump;
......
......@@ -485,10 +485,11 @@ static inline void release_old_signals(struct signal_struct * oldsig)
* These functions flushes out all traces of the currently running executable
* so that a new one can be started
*/
static inline void flush_old_signals(struct task_struct *t)
{
#if 0
flush_signals(t);
#endif
flush_signal_handlers(t);
}
......
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