N: Dave Jones
E: davej@suse.de
-E: dave@powertweak.com
-E: djones2@glam.ac.uk
-W: http://powertweak.sourceforge.net
-D: Userspace PCI bridge tuning (Powertweak).
-D: Centaur/IDT Winchip/Winchip 2 tweaks.
-D: Misc clean ups and other random hacking.
-S: 28 Laura Street,
-S: Treforest, Pontypridd,
-S: Mid Glamorgan, CF37 1NW,
-S: Wales, United Kingdom
+W: http://www.suse.de/~davej
+D: Moved PCI bridge tuning to userspace (Powertweak).
+D: Various x86 (& clones) setup code hacking.
+D: Various Janitorial hacks. (kernel-janitor.sourceforge.net)
+S: c/o SuSE Linux UK Ltd
+S: The Kinetic Centre
+S: Theobald Street
+S: Borehamwood
+S: Herts, WD6 4PJ
+S: United Kingdom
N: Bernhard Kaindl
E: bkaindl@netway.at
S: USA
N: Henrik Storner
-E: storner@image.dk
-W: http://www.image.dk/~storner/
+E: henrik@storner.dk
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: Raunstrupvej 13
+S: DK-2720 Vanloese
S: Denmark
N: Drew Sullivan
int (*mount_cvf) (struct super_block*sb,char*options);
int (*unmount_cvf) (struct super_block*sb);
[...]
- void (*cvf_zero_cluster) (struct inode*inode,int clusternr);
+ void (*zero_out_cluster) (struct inode*, int clusternr);
}
This structure defines the capabilities of a CVF module. It must be filled
functions. NULL means use the original FAT driver functions instead.
If you really want "no action", write a function that does nothing and
hang it in instead.
- - cvf_zero_cluster:
- The cvf_zero_cluster function is called when the fat driver wants to
+ - zero_out_cluster:
+ The zero_out_cluster function is called when the fat driver wants to
zero out a (new) cluster. This is important for directories (mkdir).
If it is NULL, the FAT driver defaults to overwriting the whole
cluster with zeros. Note that clusternr is absolute, not relative
VERSION = 2
PATCHLEVEL = 2
SUBLEVEL = 20
-EXTRAVERSION = pre10
+EXTRAVERSION = pre11
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-/* $Id: head.S,v 1.95.2.6 2000/01/21 01:05:39 davem Exp $
+/* $Id: head.S,v 1.95.2.7 2001/08/12 10:56:22 davem Exp $
* head.S: The initial boot code for the Sparc port of Linux.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
t_sunos:SUNOS_NO_SYSCALL_TRAP /* No SunOS emulation */
#endif
t_sbkpt:BREAKPOINT_TRAP /* Software Breakpoint/KGDB */
-t_divz: BAD_TRAP(0x82) /* Divide by zero trap */
+t_divz: TRAP_ENTRY(0x82, do_hw_divzero) /* Divide by zero trap */
t_flwin:TRAP_ENTRY(0x83, do_flush_windows) /* Flush Windows Trap */
t_clwin:BAD_TRAP(0x84) /* Clean Windows Trap */
t_rchk: BAD_TRAP(0x85) /* Range Check */
SUNOS_NO_SYSCALL_TRAP /* No SunOS emulation */
#endif
BREAKPOINT_TRAP
- BAD_TRAP(0x82)
+ TRAP_ENTRY(0x82, do_hw_divzero)
TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85)
BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP
NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
SUNOS_NO_SYSCALL_TRAP /* No SunOS emulation */
#endif
BREAKPOINT_TRAP
- BAD_TRAP(0x82)
+ TRAP_ENTRY(0x82, do_hw_divzero)
TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85)
BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP
NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
SUNOS_NO_SYSCALL_TRAP /* No SunOS emulation */
#endif
BREAKPOINT_TRAP
- BAD_TRAP(0x82)
+ TRAP_ENTRY(0x82, do_hw_divzero)
TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85)
BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP
NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
-/* $Id: signal.c,v 1.91.2.4 2001/06/19 16:49:41 davem Exp $
+/* $Id: signal.c,v 1.91.2.5 2001/08/12 10:56:22 davem Exp $
* linux/arch/sparc/kernel/signal.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
switch (signr) {
case SIGSEGV:
case SIGILL:
- case SIGFPE:
case SIGBUS:
case SIGEMT:
info->si_code = current->tss.sig_desc;
info->si_addr = (void *)current->tss.sig_address;
info->si_trapno = 0;
break;
+ case SIGFPE:
+ switch (current->tss.sig_desc) {
+ case SUBSIG_FPDISABLED:
+ info->si_code = FPE_FLTSUB;
+ break;
+ case SUBSIG_FPERROR:
+ info->si_code = FPE_FLTSUB;
+ break;
+ case SUBSIG_FPINTOVFL:
+ info->si_code = FPE_INTOVF;
+ break;
+ case SUBSIG_FPSTSIG:
+ info->si_code = FPE_FLTSUB;
+ break;
+ case SUBSIG_IDIVZERO:
+ info->si_code = FPE_INTDIV;
+ break;
+ case SUBSIG_FPINEXACT:
+ info->si_code = FPE_FLTRES;
+ break;
+ case SUBSIG_FPDIVZERO:
+ info->si_code = FPE_FLTDIV;
+ break;
+ case SUBSIG_FPUNFLOW:
+ info->si_code = FPE_FLTUND;
+ break;
+ case SUBSIG_FPOPERROR:
+ info->si_code = FPE_FLTINV;
+ break;
+ case SUBSIG_FPOVFLOW:
+ info->si_code = FPE_FLTOVF;
+ break;
+ }
+ info->si_addr = (void *)current->tss.sig_address;
+ info->si_trapno = 0;
+ break;
default:
break;
}
-/* $Id: traps.c,v 1.59 1999/03/06 12:07:31 anton Exp $
+/* $Id: traps.c,v 1.59.2.2 2001/08/23 17:36:12 davem Exp $
* arch/sparc/kernel/traps.c
*
* Copyright 1995 David S. Miller (davem@caip.rutgers.edu)
fpt->tss.sig_address = pc;
fpt->tss.sig_desc = SUBSIG_FPERROR; /* as good as any */
+ if ((fpt->tss.fsr & 0x1c000) == (1 << 14)) {
+ if (fpt->tss.fsr & 0x01)
+ fpt->tss.sig_desc = SUBSIG_FPINEXACT;
+ else if (fpt->tss.fsr & 0x02)
+ fpt->tss.sig_desc = SUBSIG_FPDIVZERO;
+ else if (fpt->tss.fsr & 0x04)
+ fpt->tss.sig_desc = SUBSIG_FPUNFLOW;
+ else if (fpt->tss.fsr & 0x08)
+ fpt->tss.sig_desc = SUBSIG_FPOVFLOW;
+ else if (fpt->tss.fsr & 0x10)
+ fpt->tss.sig_desc = SUBSIG_FPINTOVFL;
+ }
#ifdef __SMP__
fpt->flags &= ~PF_USEDFPU;
#endif
void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc,
unsigned long psr)
{
+#ifndef __SMP__
+ struct task_struct *fpt = last_task_used_math;
+#else
+ struct task_struct *fpt = current;
+#endif
lock_kernel();
- send_sig(SIGILL, current, 1);
+ fpt->tss.sig_address = pc;
+ fpt->tss.sig_desc = SUBSIG_IDIVZERO;
+ send_sig(SIGFPE, fpt, 1);
unlock_kernel();
}
-/* $Id: psycho.c,v 1.85.2.13 2001/06/28 01:31:12 davem Exp $
+/* $Id: psycho.c,v 1.85.2.14 2001/08/12 13:17:25 davem Exp $
* psycho.c: Ultra/AX U2P PCI controller support.
*
* Copyright (C) 1997 David S. Miller (davem@caipfs.rutgers.edu)
pbm = &sabre->pbm_A;
pbm->parent = sabre;
+ pbm->pci_first_slot = 1;
pbm->IO_assignments = NULL;
pbm->MEM_assignments = NULL;
pbm->prom_node = node;
pbm = &psycho->pbm_B;
pbm->parent = psycho;
+ pbm->pci_first_slot = 1;
pbm->IO_assignments = NULL;
pbm->MEM_assignments = NULL;
pbm->prom_node = node;
+ if (!is_pbm_a) {
+ prom_getstring(prom_root_node, "name",
+ namebuf, sizeof(namebuf));
+ if (!strcmp(namebuf, "SUNW,Ultra-1-Engine"))
+ pbm->pci_first_slot = 2;
+ }
+
prom_getstring(node, "name", namebuf, sizeof(namebuf));
strcpy(pbm->prom_name, namebuf);
* ranges. -DaveM
*/
if(pdev->bus->number == pbm->pci_first_busno) {
- slot = (pdev->devfn >> 3) - 1;
+ slot = (pdev->devfn >> 3) - pbm->pci_first_slot;
} else {
/* Underneath a bridge, use slot number of parent
* bridge.
*/
- slot = (pdev->bus->self->devfn >> 3) - 1;
+ slot = (pdev->bus->self->devfn >> 3) - pbm->pci_first_slot;
/* Use low slot number bits of child as IRQ line. */
line = (pdev->devfn >> 3) & 0x03;
-/* $Id: signal32.c,v 1.47.2.5 2001/06/19 16:49:42 davem Exp $
+/* $Id: signal32.c,v 1.47.2.6 2001/08/12 10:56:22 davem Exp $
* arch/sparc64/kernel/signal32.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
switch (signr) {
case SIGSEGV:
case SIGILL:
- case SIGFPE:
case SIGBUS:
case SIGEMT:
info->si_code = current->tss.sig_desc;
info->si_addr = (void *)current->tss.sig_address;
info->si_trapno = 0;
break;
+ case SIGFPE:
+ switch (current->tss.sig_desc) {
+ case SUBSIG_FPDISABLED:
+ info->si_code = FPE_FLTSUB;
+ break;
+ case SUBSIG_FPERROR:
+ info->si_code = FPE_FLTSUB;
+ break;
+ case SUBSIG_FPINTOVFL:
+ info->si_code = FPE_INTOVF;
+ break;
+ case SUBSIG_FPSTSIG:
+ info->si_code = FPE_FLTSUB;
+ break;
+ case SUBSIG_IDIVZERO:
+ info->si_code = FPE_INTDIV;
+ break;
+ case SUBSIG_FPINEXACT:
+ info->si_code = FPE_FLTRES;
+ break;
+ case SUBSIG_FPDIVZERO:
+ info->si_code = FPE_FLTDIV;
+ break;
+ case SUBSIG_FPUNFLOW:
+ info->si_code = FPE_FLTUND;
+ break;
+ case SUBSIG_FPOPERROR:
+ info->si_code = FPE_FLTINV;
+ break;
+ case SUBSIG_FPOVFLOW:
+ info->si_code = FPE_FLTOVF;
+ break;
+ }
+ info->si_addr = (void *)current->tss.sig_address;
+ info->si_trapno = 0;
+ break;
default:
break;
}
-/* $Id: ttable.S,v 1.28.2.2 1999/12/01 23:55:44 davem Exp $
+/* $Id: ttable.S,v 1.28.2.3 2001/08/12 10:56:22 davem Exp $
* ttable.S: Sparc V9 Trap Table(s) with SpitFire extensions.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
tl0_f7o: FILL_7_OTHER
tl0_sunos: SUNOS_SYSCALL_TRAP
tl0_bkpt: BREAKPOINT_TRAP
-tl0_resv102: BTRAP(0x102)
+tl0_divz: TRAP(do_div0)
tl0_flushw: FLUSH_WINDOW_TRAP
tl0_resv104: BTRAP(0x104) BTRAP(0x105) BTRAP(0x106) BTRAP(0x107)
.globl tl0_solaris
-/* $Id: asuscom.c,v 1.11.6.1 2001/02/16 16:43:25 kai Exp $
+/* $Id: asuscom.c,v 1.11.6.2 2001/07/13 09:20:12 kai Exp $
*
* asuscom.c low level stuff for ASUSCOM NETWORK INC. ISDNLink cards
*
extern const char *CardType[];
-const char *Asuscom_revision = "$Revision: 1.11.6.1 $";
+const char *Asuscom_revision = "$Revision: 1.11.6.2 $";
#define byteout(addr,val) outb(val,addr)
#define bytein(addr) inb(addr)
cs->cardmsg = &Asus_card_msg;
val = readreg(cs->hw.asus.cfg_reg + ASUS_IPAC_ALE,
cs->hw.asus.cfg_reg + ASUS_IPAC_DATA, IPAC_ID);
- if (val == 1) {
+ if ((val == 1) || (val == 2)) {
cs->subtyp = ASUS_IPAC;
cs->hw.asus.adr = cs->hw.asus.cfg_reg + ASUS_IPAC_ALE;
cs->hw.asus.isac = cs->hw.asus.cfg_reg + ASUS_IPAC_DATA;
}
#ifndef MODULE
-static void __init HiSax_setup(char *str, int *ints)
+void __init HiSax_setup(char *str, int *ints)
{
int i, j, argc;
argc = ints[0];
-/* $Id: isdn_net.c,v 1.140.6.6 2001/06/11 22:08:37 kai Exp $
+/* $Id: isdn_net.c,v 1.140.6.8 2001/08/14 14:04:21 kai Exp $
* Linux ISDN subsystem, network interfaces and related functions (linklevel).
*
static void isdn_net_ciscohdlck_connected(isdn_net_local *lp);
static void isdn_net_ciscohdlck_disconnected(isdn_net_local *lp);
-char *isdn_net_revision = "$Revision: 1.140.6.6 $";
+char *isdn_net_revision = "$Revision: 1.140.6.8 $";
/*
* Code for raw-networking over ISDN
}
/* cisco hdlck device private ioctls */
-static int
+int
isdn_ciscohdlck_dev_ioctl(struct device *dev, struct ifreq *ifr, int cmd)
{
isdn_net_local *lp = (isdn_net_local *) dev->priv;
case CISCO_TYPE_SLARP:
isdn_net_ciscohdlck_slarp_in(lp, skb);
goto out_free;
+ case CISCO_TYPE_CDP:
+ if (lp->cisco_debserint)
+ printk(KERN_DEBUG "%s: Received CDP packet. use "
+ "\"no cdp enable\" on cisco.\n", lp->name);
+ goto out_free;
default:
printk(KERN_WARNING "%s: Unknown Cisco type 0x%04x\n",
lp->name, type);
{
ushort max_hlhdr_len = 0;
isdn_net_local *lp = (isdn_net_local *) ndev->priv;
- int drvidx,
- i;
+ int drvidx, i;
- if (ndev == NULL) {
- printk(KERN_WARNING "isdn_net_init: dev = NULL!\n");
- return -ENODEV;
- }
- if (ndev->priv == NULL) {
- printk(KERN_WARNING "isdn_net_init: dev->priv = NULL!\n");
- return -ENODEV;
- }
ether_setup(ndev);
lp->org_hhc = ndev->hard_header_cache;
lp->org_hcu = ndev->header_cache_update;
-/* $Id: isdn_net.h,v 1.19.6.1 2001/04/20 02:41:58 keil Exp $
+/* $Id: isdn_net.h,v 1.19.6.2 2001/08/14 14:04:21 kai Exp $
* header for Linux ISDN subsystem, network related functions (linklevel).
*
#define CISCO_ADDR_UNICAST 0x0f
#define CISCO_ADDR_BROADCAST 0x8f
#define CISCO_CTRL 0x00
+#define CISCO_TYPE_CDP 0x2000
#define CISCO_TYPE_INET 0x0800
#define CISCO_TYPE_SLARP 0x8035
#define CISCO_SLARP_REPLY 0
#include <linux/version.h>
#include <linux/poll.h>
#include <linux/isdn.h>
+#include <linux/isdn_compat.h>
#include <linux/ppp-comp.h>
#include "isdn_common.h"
-/* $Id: isdn_tty.c,v 1.94.6.3 2001/07/03 14:48:25 kai Exp $
+/* $Id: isdn_tty.c,v 1.94.6.5 2001/08/14 14:12:18 kai Exp $
* Linux ISDN subsystem, tty functions and AT-command emulator (linklevel).
*
static int si2bit[8] =
{4, 1, 4, 4, 4, 4, 4, 4};
-char *isdn_tty_revision = "$Revision: 1.94.6.3 $";
+char *isdn_tty_revision = "$Revision: 1.94.6.5 $";
/* isdn_tty_try_read() is called from within isdn_tty_rcv_skb()
if (isdn_tty_paranoia_check(info, tty->device, "isdn_tty_write"))
return 0;
- if (!tty)
- return 0;
if (from_user)
down(&info->write_sem);
/* See isdn_tty_senddown() */
if (!(m->mdmreg[REG_CIDONCE] & BIT_CIDONCE)) {
isdn_tty_at_cout("\r\nCALLER NUMBER: ", info);
isdn_tty_at_cout(dev->num[info->drv_index], info);
+ if (m->mdmreg[REG_CDN] & BIT_CDN) {
+ isdn_tty_at_cout("\r\nCALLED NUMBER: ", info);
+ isdn_tty_at_cout(info->emu.cpn, info);
+ }
}
}
isdn_tty_at_cout("\r\n", info);
isdn_tty_at_cout("\r\n", info);
isdn_tty_at_cout("CALLER NUMBER: ", info);
isdn_tty_at_cout(dev->num[info->drv_index], info);
+ if (m->mdmreg[REG_CDN] & BIT_CDN) {
+ isdn_tty_at_cout("\r\nCALLED NUMBER: ", info);
+ isdn_tty_at_cout(info->emu.cpn, info);
+ }
}
break;
case RESULT_NO_CARRIER:
-/* $Id: isdn_tty.h,v 1.22 2000/06/21 09:54:29 keil Exp $
+/* $Id: isdn_tty.h,v 1.22.6.1 2001/08/14 14:12:18 kai Exp $
* header for Linux ISDN subsystem, tty related functions (linklevel).
*
#define REG_CPN 23
#define BIT_CPN 1
+#define REG_CPNFCON 23
#define BIT_CPNFCON 2
+#define REG_CDN 23
+#define BIT_CDN 4
/* defines for result codes */
#define RESULT_OK 0
-/* $Id: isdn_ttyfax.c,v 1.7 2000/05/11 22:29:21 kai Exp $
+/* $Id: isdn_ttyfax.c,v 1.7.6.1 2001/08/14 14:12:18 kai Exp $
* Linux ISDN subsystem, tty_fax AT-command emulator (linklevel).
*
#include "isdn_ttyfax.h"
-static char *isdn_tty_fax_revision = "$Revision: 1.7 $";
+static char *isdn_tty_fax_revision = "$Revision: 1.7.6.1 $";
#define PARSE_ERROR1 { isdn_tty_fax_modem_result(1, info); return 1; }
break;
case 2: /* +FCON */
/* Append CPN, if enabled */
- if ((m->mdmreg[REG_CPN] & BIT_CPNFCON) &&
+ if ((m->mdmreg[REG_CPNFCON] & BIT_CPNFCON) &&
(!(dev->usage[info->isdn_channel] & ISDN_USAGE_OUTGOING))) {
sprintf(rs, "/%s", m->cpn);
isdn_tty_at_cout(rs, info);
lp->stats.rx_dropped++;
return;
}
- skb->len = length;
+ skb_put(skb, length);
skb->dev = dev;
insw(ioaddr + RX_FRAME_PORT, skb->data, length >> 1);
This is a compatibility hardware problem.
Versions:
+ 0.12d tottaly isolated old code to new code (blue cards).
+ (aris, 12/27/2000)
0.12c fixed other multiple cards bug and other cleanups
(aris, 08/21/2000)
0.12b added reset when the tx interrupt is called and TX isn't done
*/
static const char *version =
- "eepro.c: v0.12b 06/20/2000 aris@conectiva.com.br\n";
+ "eepro.c: v0.12d 12/27/2000 aris@conectiva.com.br\n";
#include <linux/module.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
-
#include <linux/version.h>
-/* For linux 2.1.xx */
-#if defined (LINUX_VERSION_CODE) && LINUX_VERSION_CODE > 0x20155
-
#include <asm/spinlock.h>
#include <linux/init.h>
#include <linux/delay.h>
-#define compat_dev_kfree_skb( skb, mode ) dev_kfree_skb( (skb) )
/* I had reports of looong delays with SLOW_DOWN defined as udelay(2) */
#define SLOW_DOWN inb(0x80)
-/* udelay(2) */
-#define compat_init_func(X) __initfunc(X)
-#define compat_init_data __initdata
-
-#else
-/* for 2.x */
-
-#define compat_dev_kfree_skb( skb, mode ) dev_kfree_skb( (skb), (mode) )
-#define test_and_set_bit(a,b) set_bit((a),(b))
-#define SLOW_DOWN SLOW_DOWN_IO
-#define compat_init_func(X) X
-#define compat_init_data
-
-#endif
-
-/* First, a few definitions that the brave might change. */
-/* A zero-terminated list of I/O addresses to be probed. */
-static unsigned int eepro_portlist[] compat_init_data =
+/* First, a few definitions that the brave might change.
+ * A zero-terminated list of I/O addresses to be probed.
+ * note: 0x300 is default, the 595FX supports ALL IO Ports
+ * from 0x000 to 0x3F0, some of which are reserved in PCs
+ */
+static unsigned eepro_portlist[] __initdata =
{ 0x300, 0x210, 0x240, 0x280, 0x2C0, 0x200, 0x320, 0x340, 0x360, 0};
-/* note: 0x300 is default, the 595FX supports ALL IO Ports
- from 0x000 to 0x3F0, some of which are reserved in PCs */
/* use 0 for production, 1 for verification, >2 for debug */
#ifndef NET_DEBUG
#define NET_DEBUG 0
#endif
-static unsigned int net_debug = NET_DEBUG;
+static unsigned net_debug = NET_DEBUG;
/* The number of low I/O ports used by the ethercard. */
#define EEPRO_IO_EXTENT 16
struct eepro_local {
struct enet_statistics stats;
unsigned rx_start;
- unsigned tx_start; /* start of the transmit chain */
- int tx_last; /* pointer to last packet in the transmit chain */
- unsigned tx_end; /* end of the transmit chain (plus 1) */
- int eepro; /* 1 for the EtherExpress Pro/10,
- 2 for the EtherExpress Pro/10+,
- 0 for other 82595-based lan cards. */
- int version; /* a flag to indicate if this is a TX or FX
- version of the 82595 chip. */
+ unsigned tx_start; /* start of the transmit chain */
+ int tx_last; /* pointer to last packet in the transmit chain */
+ unsigned tx_end; /* end of the transmit chain (plus 1) */
+ int eepro; /* 1 for the EtherExpress Pro/10,
+ * 2 for the EtherExpress Pro/10+,
+ * 3 for the blue cards,
+ * 0 for other 82595-based lan cards. */
+ int version; /* a flag to indicate if this is a TX or FX
+ * version of the 82595 chip. */
int stepping;
- spinlock_t lock; /* Serializing lock */
+ spinlock_t lock; /* Serializing lock */
unsigned rcv_ram;
unsigned rcv_start;
unsigned xmt_bar;
static void set_multicast_list(struct device *dev);
static int read_eeprom(int ioaddr, int location, struct device *dev);
-static void hardware_send_packet(struct device *dev, void *buf, short length);
+static int hardware_send_packet(struct device *dev, void *buf, short length);
static int eepro_grab_irq(struct device *dev);
/*
/* set diagnose flag */
#define eepro_diag(ioaddr) outb(DIAGNOSE_CMD, ioaddr)
+#ifdef ANSWER_TX_AND_RX
/* ack for rx/tx int */
#define eepro_ack_rxtx(ioaddr) outb (RX_INT | TX_INT, ioaddr + STATUS_REG)
+#endif
/* ack for rx int */
#define eepro_ack_rx(ioaddr) outb (RX_INT, ioaddr + STATUS_REG)
If dev->base_addr == 2, allocate space for the device and return success
(detachable devices only).
*/
-#ifdef HAVE_DEVLIST
- /* Support for an alternate probe manager, which will eliminate the
- boilerplate below. */
-struct netdev_entry netcard_drv =
- {"eepro", eepro_probe1, EEPRO_IO_EXTENT, eepro_portlist};
-#else
-compat_init_func(int eepro_probe(struct device *dev))
-{
+__initfunc(int eepro_probe(struct device *dev)) {
int i;
int base_addr = dev ? dev->base_addr : 0;
if (base_addr > 0x1ff) /* Check a single specified location. */
return ENODEV;
}
-#endif
static void printEEPROMInfo(short ioaddr, struct device *dev)
{
dev->mem_start = (RCV_LOWER_LIMIT << 8);
+ /* received mem_end as argument */
if ((dev->mem_end & 0x3f) < 3 || /* RX buffer must be more than 3K */
(dev->mem_end & 0x3f) > 29) /* and less than 29K */
dev->mem_end = (RCV_UPPER_LIMIT << 8);
}
eepro_sel_reset(ioaddr);
+ SLOW_DOWN;
+ SLOW_DOWN;
lp->tx_start = lp->tx_end = (XMT_LOWER_LIMIT << 8);
lp->tx_last = 0;
} else {
short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
unsigned char *buf = skb->data;
- int discard = lp->stats.tx_dropped;
lp->stats.tx_bytes+=skb->len;
- hardware_send_packet(dev, buf, length);
-
- if (lp->stats.tx_dropped != discard)
+ if (hardware_send_packet(dev, buf, length))
return 1;
dev->trans_start = jiffies;
}
- compat_dev_kfree_skb (skb, FREE_WRITE);
+ dev_kfree_skb(skb);
/* You might need to clean up and record Tx statistics here. */
/* lp->stats.tx_aborted_errors++; */
while (((status = inb(ioaddr + STATUS_REG)) & 0x06) && (boguscount--))
{
switch (status & (RX_INT | TX_INT)) {
+#ifdef ANSWER_TX_AND_RX
case (RX_INT | TX_INT):
eepro_ack_rxtx(ioaddr);
break;
+#endif
case RX_INT:
eepro_ack_rx(ioaddr);
break;
/* Get the received packets */
eepro_rx(dev);
+#ifndef ANSWER_TX_AND_RX
+ continue;
+#endif
}
if (status & TX_INT) {
if (net_debug > 4)
eepro_en_int(ioaddr);
}
- eepro_complete_selreset(ioaddr);
+ if (lp->eepro == LAN595FX_10ISA) {
+ eepro_complete_selreset(ioaddr);
+ }
+ else
+ eepro_en_rx(ioaddr);
}
/* The horrible routine to read a word from the serial EEPROM. */
return retval;
}
-static void
+static int
hardware_send_packet(struct device *dev, void *buf, short length)
{
struct eepro_local *lp = (struct eepro_local *)dev->priv;
if (net_debug > 5)
printk(KERN_DEBUG "%s: exiting hardware_send_packet routine.\n", dev->name);
- return;
- }
- dev->tbusy = 1;
+ return 0;
+ }
+ if (lp->eepro == LAN595FX_10ISA)
+ dev->tbusy = 1;
if (net_debug > 5)
printk(KERN_DEBUG "%s: exiting hardware_send_packet routine.\n", dev->name);
+
+ return 1;
}
static void
xmt_status = inw(ioaddr+IO_PORT);
if ((xmt_status & TX_DONE_BIT) == 0) {
- udelay(40);
- boguscount--;
- continue;
+ if (lp->eepro == LAN595FX_10ISA) {
+ udelay(40);
+ boguscount--;
+ continue;
+ }
+ else
+ break;
}
* interrupt again for tx. in other words: tx timeout what will take
* a lot of time to happen, so we'll do a complete selreset.
*/
- if (!boguscount)
+ if (!boguscount && lp->eepro == LAN595FX_10ISA)
eepro_complete_selreset(ioaddr);
}
flags that aren't... Restarting the DPLL does not help
either, it resynchronizes too slow and the first received
frame gets lost.
+ 2001-10-05 Set skb to NULL when it is freed in scc_spint. (PE1RXQ)
Thanks to all who contributed to this driver with ideas and bug
reports!
if (skb != NULL)
kfree_skb(skb);
scc->rx_buff = NULL;
+ skb=NULL; /* prevent reuse of skb */
}
if(status & END_FR && skb != NULL) /* end of frame */
/* sis900.c: A SiS 900/7016 PCI Fast Ethernet driver for Linux.
Copyright 1999 Silicon Integrated System Corporation
- Revision: 1.06.08 Apr. 3 2001
+ Revision: 1.06.09 Sep. 28 2001
Modified from the driver which is originally written by Donald Becker.
preliminary Rev. 1.0 Jan. 18, 1998
http://www.sis.com.tw/support/databook.htm
+ Rev 1.06.09 Sep. 28 2001 Hui-Fen Hsu (hfhsu@sis.com.tw) update for 630ET & workaround for ICS1893 PHY
Rev 1.06.08 Mar. 2 2001 Hui-Fen Hsu (hfhsu@sis.com.tw) some bug fix & 635M/B support
Rev 1.06.07 Jan. 8 2001 Lei-Chun Chang added RTL8201 PHY support
Rev 1.06.06 Sep. 6 2000 Lei-Chun Chang added ICS1893 PHY support
#include "sis900.h"
static const char *version =
-"sis900.c: v1.06.08 04/03/2001\n";
+"sis900.c: v1.06.09 09/28/2001\n";
static int max_interrupt_work = 20;
static int multicast_filter_limit = 128;
printk("%2.2x:", (u8)net_dev->dev_addr[i]);
printk("%2.2x.\n", net_dev->dev_addr[i]);
- /* probe for mii transciver */
+ /* 630ET : set the mii access mode as software-mode */
+ if (revision == SIS630ET_900_REV)
+ outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
+
+ /* probe for mii transceiver */
if (sis900_mii_probe(net_dev) == 0) {
unregister_netdev(net_dev);
kfree(sis_priv);
if( (sis_priv->mii->phy_id0 == 0x001D) &&
( (sis_priv->mii->phy_id1&0xFFF0) == 0x8000) )
status = sis900_reset_phy( net_dev, sis_priv->cur_phy );
+
+ /* workaround for ICS1893 PHY */
+ if ((sis_priv->mii->phy_id0 == 0x0015) &&
+ ((sis_priv->mii->phy_id1&0xFFF0) == 0xF440))
+ mdio_write(net_dev, sis_priv->cur_phy, 0x0018, 0xD200);
if( status & MII_STAT_LINK ){
while (poll_bit) {
/* Enable all known interrupts by setting the interrupt mask. */
outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
- outl(RxENA, ioaddr + cr);
+ outl(RxENA | inl(ioaddr + cr), ioaddr + cr);
outl(IE, ioaddr + ier);
sis900_check_mode(net_dev, sis_priv->mii);
struct pci_dev *dev=NULL;
if ( !(revision == SIS630E_900_REV || revision == SIS630EA1_900_REV ||
- revision == SIS630A_900_REV) )
+ revision == SIS630A_900_REV || revision == SIS630ET_900_REV) )
return;
if ((dev = pci_find_device(SIS630_VENDOR_ID, SIS630_DEVICE_ID, dev)))
min_value=(eq_value < min_value) ? eq_value : min_value;
}
/* 630E rule to determine the equalizer value */
- if (revision == SIS630E_900_REV || revision == SIS630EA1_900_REV) {
+ if (revision == SIS630E_900_REV || revision == SIS630EA1_900_REV ||
+ revision == SIS630ET_900_REV) {
if (max_value < 5)
eq_value=max_value;
else if (max_value >= 5 && max_value < 15)
net_dev->tbusy = sis_priv->tx_full = 0;
/* FIXME: Should we restart the transmission thread here ?? */
- outl(TxENA, ioaddr + cr);
+ outl(TxENA | inl(ioaddr + cr), ioaddr + cr);
/* Enable all known interrupts by setting the interrupt mask. */
outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
/* set the transmit buffer descriptor and enable Transmit State Machine */
sis_priv->tx_ring[entry].bufptr = virt_to_bus(skb->data);
sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len);
- outl(TxENA, ioaddr + cr);
+ outl(TxENA | inl(ioaddr + cr), ioaddr + cr);
if (++sis_priv->cur_tx - sis_priv->dirty_tx < NUM_TX_DESC) {
/* Typical path, clear tbusy to indicate more
}
/* re-enable the potentially idle receive state matchine */
- outl(RxENA , ioaddr + cr );
+ outl(RxENA | inl(ioaddr + cr), ioaddr + cr );
return 0;
}
outl(0x0000, ioaddr + ier);
/* Stop the chip's Tx and Rx Status Machine */
- outl(RxDIS | TxDIS, ioaddr + cr);
+ outl(RxDIS | TxDIS | inl(ioaddr + cr), ioaddr + cr);
del_timer(&sis_priv->timer);
outl(0, ioaddr + imr);
outl(0, ioaddr + rfcr);
- outl(RxRESET | TxRESET | RESET, ioaddr + cr);
+ outl(RxRESET | TxRESET | RESET | inl(ioaddr + cr), ioaddr + cr);
/* Check that the chip has finished the reset. */
while (status && (i++ < 1000)) {
/* Symbolic names for bits in various registers */
enum sis900_command_register_bits {
- RELOAD = 0x00000400,
+ RELOAD = 0x00000400, ACCESSMODE = 0x00000200,/* ET */
RESET = 0x00000100, SWI = 0x00000080, RxRESET = 0x00000020,
TxRESET = 0x00000010, RxDIS = 0x00000008, RxENA = 0x00000004,
TxDIS = 0x00000002, TxENA = 0x00000001
enum sis900_revision_id {
SIS630A_900_REV = 0x80, SIS630E_900_REV = 0x81,
SIS630S_900_REV = 0x82, SIS630EA1_900_REV = 0x83,
- SIS635A_900_REV = 0x90, SIS900B_900_REV = 0x03
+ SIS630ET_900_REV = 0x84, SIS635A_900_REV = 0x90,
+ SIS900B_900_REV = 0x03
};
enum sis630_revision_id {
#define CS4215_MLB (1<<4) /* 1: Microphone: 20dB gain disabled */
#define CS4215_RSRVD_1 (1<<5)
+#define CS4215_STATUS_MASK 0xe4 /* Status bits */
/* Time Slot 2, Data Format Register */
#define CS4215_DFR_LINEAR16 0
} CS4215_FREQ[] = {
{ 8000, (1<<4), (0<<3) },
{ 16000, (1<<4), (1<<3) },
- { 27429, (1<<4), (2<<3) }, /* Actually 24428.57 */
+ { 27429, (1<<4), (2<<3) }, /* Actually 27428.57 */
{ 32000, (1<<4), (3<<3) },
/* { NA, (1<<4), (4<<3) }, */
/* { NA, (1<<4), (5<<3) }, */
};
#define CS4215_HPF (1<<7) /* High Pass Filter, 1: Enabled */
-#define CS4215_12_MASK 0xfcbf /* Mask off reserved bits in slot 1 & 2 */
+#define CS4215_FREQ_MASK 0x38 /* Frequency selection bits */
+#define CS4215_12_MASK 0xfcbf /* Mask off reserved bits in slot 1 & 2 */
/* Time Slot 3, Serial Port Control register */
#define CS4215_XEN (1<<0) /* 0: Enable serial output */
#define CS4215_MCK_CLK1 (3<<4) /* Clockin, 256 x Fs */
#define CS4215_MCK_CLK2 (4<<4) /* Clockin, see DFR */
+#define CS4215_CLOCK_MASK 0x70 /* Clock source selection bits */
+
/* Time Slot 4, Test Register */
#define CS4215_DAD (1<<0) /* 0:Digital-Dig loop, 1:Dig-Analog-Dig loop */
#define CS4215_ENL (1<<1) /* Enable Loopback Testing */
*/
i = 64;
- while (((dbri->mm.status & 0xe4) != 0x20) && --i) udelay(125);
+ while (((dbri->mm.status & CS4215_STATUS_MASK) != CS4215_RSRVD_1) && --i) udelay(125);
if (i == 0) {
return 0;
}
return -1;
}
- dbri->mm.ctrl[1] &= ~ 0x38;
+ dbri->mm.ctrl[1] &= ~ CS4215_FREQ_MASK;
dbri->mm.ctrl[1] |= CS4215_FREQ[i].csval;
- dbri->mm.ctrl[2] &= ~ 0x70;
+ dbri->mm.ctrl[2] &= ~ CS4215_CLOCK_MASK;
dbri->mm.ctrl[2] |= CS4215_FREQ[i].xtal;
dbri->perchip_info.play.sample_rate = rate;
printk(KERN_INFO "audio%d at 0x%lx (irq %d) is DBRI(%c)+CS4215(%d)\n",
num_drivers, (unsigned long)dbri->regs,
- dbri->irq, dbri->dbri_version, dbri->mm.version);
+ dbri->irq, dbri->dbri_version, dbri->mm.version & CS4215_VERSION_MASK);
return 0;
}
order) Klaus Ehrenfried, Wolfgang Denk, Steve Hirsch, Andreas Koppenh"ofer,
Michael Leodolter, Eyal Lebedinsky, J"org Weule, and Eric Youngdale.
- Copyright 1992 - 2000 Kai Makisara
+ Copyright 1992 - 2001 Kai Makisara
email Kai.Makisara@metla.fi
- Last modified: Tue Sep 5 23:17:08 2000 by makisara@kai.makisara.local
+ Last modified: Wed Sep 12 09:16:22 2001 by makisara@abies.metla.fi
Some small formal changes - aeb, 950809
*/
#ifdef MODULE
MODULE_PARM(buffer_kbs, "i");
+MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size (KB; 32)");
MODULE_PARM(write_threshold_kbs, "i");
+MODULE_PARM_DESC(write_threshold_kbs, "Asynchronous write threshold (KB; 30)");
MODULE_PARM(max_buffers, "i");
+MODULE_PARM_DESC(max_buffers, "Maximum number of buffer allocated at initialisation (4)");
MODULE_PARM(max_sg_segs, "i");
+MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (32)");
static int buffer_kbs = 0;
static int write_threshold_kbs = 0;
static int max_buffers = 0;
int remainder;
Scsi_Tape * STp;
- if ((st_nbr = TAPE_NR(SCpnt->request.rq_dev)) < st_template.nr_dev) {
- STp = &(scsi_tapes[st_nbr]);
- if ((STp->buffer)->writing &&
- (SCpnt->sense_buffer[0] & 0x70) == 0x70 &&
- (SCpnt->sense_buffer[2] & 0x40)) {
- /* EOM at write-behind, has all been written? */
- if ((SCpnt->sense_buffer[0] & 0x80) != 0)
- remainder = (SCpnt->sense_buffer[3] << 24) |
+ st_nbr = TAPE_NR(SCpnt->request.rq_dev);
+ STp = &(scsi_tapes[st_nbr]);
+ if ((STp->buffer)->writing &&
+ (SCpnt->sense_buffer[0] & 0x70) == 0x70 &&
+ (SCpnt->sense_buffer[2] & 0x40)) {
+ /* EOM at write-behind, has all been written? */
+ if ((SCpnt->sense_buffer[0] & 0x80) != 0)
+ remainder = (SCpnt->sense_buffer[3] << 24) |
(SCpnt->sense_buffer[4] << 16) |
- (SCpnt->sense_buffer[5] << 8) | SCpnt->sense_buffer[6];
- else
- remainder = 0;
- if ((SCpnt->sense_buffer[2] & 0x0f) == VOLUME_OVERFLOW ||
- remainder > 0)
- (STp->buffer)->last_result = SCpnt->result; /* Error */
- else
- (STp->buffer)->last_result = INT_MAX; /* OK */
- }
+ (SCpnt->sense_buffer[5] << 8) | SCpnt->sense_buffer[6];
else
- (STp->buffer)->last_result = SCpnt->result;
- SCpnt->request.rq_status = RQ_SCSI_DONE;
- (STp->buffer)->last_SCpnt = SCpnt;
-
-#if DEBUG
- STp->write_pending = 0;
-#endif
- up(SCpnt->request.sem);
+ remainder = 0;
+ if ((SCpnt->sense_buffer[2] & 0x0f) == VOLUME_OVERFLOW ||
+ remainder > 0)
+ (STp->buffer)->last_result = SCpnt->result; /* Error */
+ else
+ (STp->buffer)->last_result = INT_MAX; /* OK */
}
+ else
+ (STp->buffer)->last_result = SCpnt->result;
+ SCpnt->request.rq_status = RQ_SCSI_DONE;
+ (STp->buffer)->last_SCpnt = SCpnt;
+
#if DEBUG
- else if (debugging)
- printk(KERN_ERR "st?: Illegal interrupt device %x\n", st_nbr);
+ STp->write_pending = 0;
#endif
+ up(SCpnt->request.sem);
}
return (-EINVAL);
}
cmd[0] = MODE_SELECT;
+ if ((STp->use_pf & USE_PF))
+ cmd[1] = 0x10;
cmd[4] = datalen = 12;
memset((STp->buffer)->b_data, 0, 12);
STps->drv_block = (-1);
STps->eof = ST_EOD;
}
+ else if (cmd_in == MTSETBLK ||
+ cmd_in == MTSETDENSITY ||
+ cmd_in == MTSETDRVBUFFER ||
+ cmd_in == SET_DENS_AND_BLK) {
+ if ((SCpnt->sense_buffer[2] & 0x0f) == ILLEGAL_REQUEST &&
+ !(STp->use_pf & PF_TESTED)) {
+ /* Try the other possible state of Page Format if not
+ already tried */
+ STp->use_pf = !STp->use_pf | PF_TESTED;
+ scsi_release_command(SCpnt);
+ SCpnt = NULL;
+ return st_int_ioctl(inode, cmd_in, arg);
+ }
+ }
else if (chg_eof)
STps->eof = ST_NOEOF;
tpnt->in_use = 0;
tpnt->drv_buffer = 1; /* Try buffering if no mode sense */
tpnt->restr_dma = (SDp->host)->unchecked_isa_dma;
+ tpnt->use_pf = (SDp->scsi_level >= SCSI_2);
tpnt->density = 0;
tpnt->do_auto_lock = ST_AUTO_LOCK;
tpnt->can_bsr = ST_IN_FILE_POS;
unsigned char restr_dma;
unsigned char scsi2_logical;
unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */
+ unsigned char use_pf; /* Set Page Format bit in all mode selects? */
int write_threshold;
int timeout; /* timeout for normal commands */
int long_timeout; /* timeout for commands known to take long time*/
#endif
} Scsi_Tape;
+/* Bit masks for use_pf */
+#define USE_PF 1
+#define PF_TESTED 2
+
extern Scsi_Tape * scsi_tapes;
/* Values of eof */
comment 'Miscellaneous USB options'
bool ' Preliminary USB device filesystem' CONFIG_USB_DEVICEFS
+ bool ' Support for hot-pluggable USB devices' CONFIG_HOTPLUG
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
bool ' Enforce USB bandwidth allocation (EXPERIMENTAL)' CONFIG_USB_BANDWIDTH
else
-/* $Id: cgfourteenfb.c,v 1.4.2.1 1999/09/28 15:59:58 davem Exp $
+/* $Id: cgfourteenfb.c,v 1.4.2.2 2001/07/27 09:44:41 davem Exp $
* cgfourteenfb.c: CGfourteen frame buffer driver
*
* Copyright (C) 1996,1998 Jakub Jelinek (jj@ultra.linux.cz)
spin_lock_irqsave(&fb->lock, flags);
if (c->enable)
cur->ccr |= CG14_CCR_ENABLE;
+ else
+ cur->ccr &= ~CG14_CCR_ENABLE;
cur->cursx = ((c->cpos.fbx - c->chot.fbx) & 0xfff);
cur->cursy = ((c->cpos.fby - c->chot.fby) & 0xfff);
spin_unlock_irqrestore(&fb->lock, flags);
}
/*
- * We mustn't allow tracing of suid binaries, unless
- * the tracer has the capability to trace anything..
+ * We mustn't allow tracing of suid binaries, no matter what.
*/
static inline int must_not_trace_exec(struct task_struct * p)
{
- return (p->ptrace & PT_PTRACED) && !cap_raised(p->p_pptr->cap_effective, CAP_SYS_PTRACE);
+ return (p->ptrace & PT_PTRACED);
}
/*
result->d_op->d_revalidate(result, flags);
return result;
}
+/*
+ * Yes, this really increments the link_count by 5, and
+ * decrements it by 4. Together with checking against 25,
+ * this limits recursive symlink follows to 5, while
+ * limiting consecutive symlinks to 25.
+ *
+ * Without that kind of total limit, nasty chains of consecutive
+ * symlinks can cause almost arbitrarily long lookups.
+ */
static struct dentry * do_follow_link(struct dentry *base, struct dentry *dentry, unsigned int follow)
{
if ((follow & LOOKUP_FOLLOW)
&& inode && inode->i_op && inode->i_op->follow_link) {
- if (current->link_count < 5) {
+ if (current->link_count < 25) {
struct dentry * result;
- current->link_count++;
+ if (current->need_resched) {
+ current->state = TASK_RUNNING;
+ schedule();
+ }
+ current->link_count += 5;
/* This eats the base */
- result = inode->i_op->follow_link(dentry, base, follow);
- current->link_count--;
+ result = inode->i_op->follow_link(dentry, base, follow|LOOKUP_INSYMLINK);
+ current->link_count -= 4;
dput(dentry);
return result;
}
struct dentry * dentry;
struct inode *inode;
+ if (!(lookup_flags & LOOKUP_INSYMLINK))
+ current->link_count=0;
if (*name == '/') {
if (base)
dput(base);
-/* $Id: pbm.h,v 1.16.2.2 2001/05/16 07:28:43 davem Exp $
+/* $Id: pbm.h,v 1.16.2.3 2001/08/12 13:17:25 davem Exp $
* pbm.h: U2P PCI bus module pseudo driver software state.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
int num_pbm_intmap;
struct linux_prom_pci_intmask pbm_intmask;
+ /* PCI slot mapping. */
+ unsigned int pci_first_slot;
+
/* Now things for the actual PCI bus probes. */
unsigned int pci_first_busno;
unsigned int pci_last_busno;
#define LOOKUP_DIRECTORY (2)
#define LOOKUP_SLASHOK (4)
#define LOOKUP_CONTINUE (8)
+#define LOOKUP_INSYMLINK (16)
extern struct dentry * lookup_dentry(const char *, struct dentry *, unsigned int);
extern struct dentry * __namei(const char *, unsigned int);
static inline int request_module(const char *name)
{
- return -EINVAL;
+ return -ENOSYS;
}
static inline int exec_usermodehelper(char *program_path, char *argv[], char *envp[])
{
#define NLM_F_REQUEST 1 /* It is request message. */
#define NLM_F_MULTI 2 /* Multipart message, terminated by NLMSG_DONE */
-#define NLM_F_ACK 4 /* If succeed, reply with ack */
+#define NLM_F_ACK 4 /* Reply with ack, with zero or error code */
#define NLM_F_ECHO 8 /* Echo this request */
/* Modifiers to GET request */
* Maximum length of a message generated in the quota system,
* that needs to be kicked onto the tty.
*/
-#define MAX_QUOTA_MESSAGE 75
+#define MAX_QUOTA_MESSAGE (PAGE_SIZE + 256)
#define DQ_LOCKED 0x01 /* locked for update */
#define DQ_WANT 0x02 /* wanted for update */
* the older version didn't come out right using gcc 2.5.8, the newer one
* seems to fall out with gcc 2.6.2.
*
- * Version: $Id: igmp.c,v 1.30.2.2 2001/01/10 10:04:07 davem Exp $
+ * Version: $Id: igmp.c,v 1.30.2.3 2001/07/27 09:35:49 davem Exp $
*
* Authors:
* Alan Cox <Alan.Cox@linux.org>
#define IGMP_Unsolicited_Report_Count 2
-#define IGMP_Initial_Report_Delay (1*HZ)
+#define IGMP_Initial_Report_Delay (1)
/* IGMP_Initial_Report_Delay is not from IGMP specs!
* IGMP specs require to report membership immediately after
insmod -V 2>&1 | awk 'NR==1 {print "modutils ",$NF}'
-tune2fs 2>&1 | grep tune2fs | sed 's/,//' | awk \
+tune2fs 2>&1 | grep "^tune2fs" | sed 's/,//' | awk \
'NR==1 {print "e2fsprogs ", $2}'
reiserfsck 2>&1 | grep reiserfsprogs | awk \
expr --v 2>&1 | awk 'NR==1{print "Sh-utils ", $NF}'
-X=`cat /proc/modules | sed -e "s/ .*$//"`
-echo "Modules Loaded "$X
+if [ -e /proc/modules ]; then
+ X=`cat /proc/modules | sed -e "s/ .*$//"`
+ echo "Modules Loaded "$X
+fi