]> git.neil.brown.name Git - history.git/commitdiff
Import 2.0.5 2.0.5
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:11:10 +0000 (15:11 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:11:10 +0000 (15:11 -0500)
32 files changed:
CREDITS
Documentation/devices.tex
Documentation/devices.txt
Makefile
arch/alpha/boot/Makefile
arch/alpha/config.in
arch/alpha/kernel/apecs.c
arch/alpha/kernel/irq.c
arch/i386/boot/tools/build.c
drivers/block/ide-cd.c
drivers/cdrom/cdrom.c
drivers/net/de4x5.c
drivers/scsi/README.ncr53c8xx
drivers/scsi/eata.c
drivers/scsi/eata.h
drivers/scsi/ncr53c8xx.c
drivers/scsi/qlogicisp.c
drivers/scsi/scsi.c
drivers/scsi/sd.c
drivers/scsi/u14-34f.c
drivers/scsi/u14-34f.h
drivers/sound/gus_wave.c
drivers/sound/sb_common.c
fs/ext2/namei.c
fs/ncpfs/sock.c
include/asm-alpha/apecs.h
include/linux/dirent.h
include/linux/socket.h
mm/vmscan.c
net/ipv4/ip_output.c
net/ipv4/ip_sockglue.c
scripts/Menuconfig

diff --git a/CREDITS b/CREDITS
index d7e1d2fe0ccf5faa8b4b579865c3ceaf334bb154..963f2fe28ce2130468bf8704bcf21de1c10f1f48 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -26,9 +26,11 @@ S: CH-1015 Lausanne
 S: Switzerland
 
 N: H. Peter Anvin
-E: Peter.Anvin@linux.org 
+E: hpa@zytor.com
+W: http://www.zytor.com/~hpa/
+P: 2047/2A960705 BA 03 D3 2C 14 A8 A8 BD  1E DF FE 69 EE 35 BD 74
 D: Author of the SYSLINUX boot loader, maintainer of the linux.* news
-D: hierarchy, responsible for various console and other hacks
+D: hierarchy and the Linux Device List; various kernel hacks
 S: 4390 Albany Dr. #46
 S: San Jose CA 95129
 S: USA
@@ -886,11 +888,11 @@ S: Germany
 
 N: Nigel Metheringham
 E: Nigel.Metheringham@ThePLAnet.net
+P: 1024/31455639 B7 99 BD B8 00 17 BD 46  C1 15 B8 AB 87 BC 25 FA
 D: IP Masquerading work and minor fixes
 S: Planet Online
 S: The White House, Melbourne Street, LEEDS
 S: LS2  7PS,   UK
-P: 1024/31455639 B7 99 BD B8 00 17 BD 46  C1 15 B8 AB 87 BC 25 FA
 
 N: Craig Metz
 E: cmetz@tjhsst.edu
@@ -1242,8 +1244,8 @@ S: USA
 
 N: Leo Spiekman
 E: spiekman@et.tudelft.nl
-D: Optics Storage 8000AT cdrom driver
 W: http://dutettk.et.tudelft.nl/~spiekman
+D: Optics Storage 8000AT cdrom driver
 S: Utrecht
 S: The Netherlands
 
@@ -1258,13 +1260,13 @@ S: DK-1860 Frederiksberg C
 S: Denmark
 
 N: Drew Sullivan
-W: http://www.ss.org/
 E: drew@ss.org
+W: http://www.ss.org/
+P: 1024/ACFFA969 5A 9C 42 AB E4 24 82 31  99 56 00 BF D3 2B 25 46
 D: iBCS2 developer
 S: 22 Irvington Cres.
 S: Willowdale, Ontario
 S: Canada M2N 2Z1
-P: 1024/ACFFA969 5A 9C 42 AB E4 24 82 31  99 56 00 BF D3 2B 25 46
 
 N: Tommy Thorn
 E: Tommy.Thorn@irisa.fr
index 6f933dd0e27eca63910f6b58cb85cfb34c8a4271..4b5521b4813c344702535df3e1a86bece45e3802 100644 (file)
@@ -42,7 +42,7 @@ foo \kill}%
 %
 \title{{\bf Linux Allocated Devices}}
 \author{Maintained by H. Peter Anvin $<$hpa@zytor.com$>$}
-\date{Last revised: June 9, 1996}
+\date{Last revised: July 9, 1996}
 \maketitle
 %
 \noindent
@@ -64,7 +64,9 @@ To have a major number allocated, or a minor number in situations
 where that applies (e.g.\ busmice), please contact me with the
 appropriate device information.  Also, if you have additional
 information regarding any of the devices listed below, or if I have
-made a mistake, I would greatly appreciate a note.
+made a mistake, I would greatly appreciate a note.  When sending me
+mail, please include the word ``device'' in the subject so your mail
+won't accidentally get buried!
 
 Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga
 platform only.  Allocations marked (68k/Atari) apply to Linux/68k on
@@ -163,6 +165,7 @@ reply.
 \major{40}{}{char }{Matrox Meteor frame grabber}
 \major{  }{}{block}{Syquest EZ135 parallel port removable drive}
 \major{41}{}{char }{Yet Another Micro Monitor}
+\major{  }{}{block}{MicroSolutions BackPack parallel port CD-ROM}
 \major{42}{}{}{Demo/sample use}
 \major{43}{}{char }{isdn4linux virtual modem}
 \major{44}{}{char }{isdn4linux virtual modem -- alternate devices}
@@ -175,7 +178,8 @@ reply.
 \major{51}{}{char }{Baycom radio modem}
 \major{52}{}{char }{Spellcaster DataComm/BRI ISDN card}
 \major{53}{}{char }{BDM interface for remote debugging MC683xx microcontrollers}
-\major{54}{--59}{}{Unallocated}
+\major{54}{}{char }{Electrocardiognosis Holter serial card}
+\major{55}{--59}{}{Unallocated}
 \major{60}{--63}{}{Local/experimental use}
 \major{64}{--119}{}{Unallocated}
 \major{120}{--127}{}{Local/experimental use}
@@ -460,6 +464,7 @@ physical disks.
        \minor{136}{/dev/qcam0}{QuickCam on {\file lp0}}
        \minor{137}{/dev/qcam1}{QuickCam on {\file lp1}}
        \minor{138}{/dev/qcam2}{QuickCam on {\file lp2}}
+       \minor{139}{/dev/openprom}{SPARC OpenBoot PROM}
 \end{devicelist}
 
 \noindent
@@ -989,6 +994,9 @@ Partitions are handled the same way as for IDE disks (see major number
 \begin{devicelist}
 \major{41}{}{char }{Yet Another Micro Monitor}
        \minor{0}{/dev/yamm}{Yet Another Micro Monitor}
+\\
+\major{  }{}{block}{MicroSolutions BackPack parallel port CD-ROM}
+       \minor{0}{/dev/bpcd}{BackPack CD-ROM}
 \end{devicelist}
 
 \begin{devicelist}
@@ -1096,7 +1104,19 @@ interface. PD is the Motorola Public Domain Interface and ICD is the
 commercial interface by P\&E.
 
 \begin{devicelist}
-\major{54}{--59}{}{Unallocated}
+\major{54}{Electrocardiognosis Holter serial card}
+       \minor{0}{/dev/holter0}{First Holter port}
+       \minor{1}{/dev/holter1}{Second Holter port}
+       \minor{2}{/dev/holter2}{Third Holter port}
+\end{devicelist}
+
+\noindent
+A custom serial card used by Electrocardiognosis SRL
+$<$mseritan@ottonel.pub.ro$>$ to transfer data from Holter 24-hour
+heart monitoring equipment.
+
+\begin{devicelist}
+\major{55}{--59}{}{Unallocated}
 \end{devicelist}
 
 \begin{devicelist}
index d56c6e175af26d80e5c75dd19e8d476322e34aac..81fbd64d58f72ad38d18998a521249fed391bf01 100644 (file)
@@ -2,7 +2,7 @@
 
             Maintained by H. Peter Anvin <hpa@zytor.com>
 
-                     Last revised: June 9, 1996
+                    Last revised: July 9, 1996
 
 This list is the successor to Rick Miller's Linux Device List, which
 he stopped maintaining when he got busy with other things in 1993.  It
@@ -21,7 +21,9 @@ To have a major number allocated, or a minor number in situations
 where that applies (e.g. busmice), please contact me with the
 appropriate device information.  Also, if you have additional
 information regarding any of the devices listed below, or if I have
-made a mistake, I would greatly appreciate a note.
+made a mistake, I would greatly appreciate a note.  When sending me
+mail, please include the word "device" in the subject so your mail
+won't accidentally get buried!
 
 Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga
 platform only.  Allocations marked (68k/Atari) apply to Linux/68k on
@@ -278,6 +280,7 @@ reply.
                136 = /dev/qcam0        QuickCam on lp0
                137 = /dev/qcam1        QuickCam on lp1
                138 = /dev/qcam2        QuickCam on lp2
+               139 = /dev/openprom     SPARC OpenBoot PROM
 
  11 char       Raw keyboard device
                  0 = /dev/kbd          Raw keyboard device
@@ -689,6 +692,8 @@ reply.
 
  41 char       Yet Another Micro Monitor
                  0 = /dev/yamm         Yet Another Micro Monitor
+    block      MicroSolutions BackPack parallel port CD-ROM
+                 0 = /dev/bpcd         BackPack CD-ROM
 
  42            Demo/sample use
 
@@ -771,7 +776,16 @@ reply.
                Domain Interface and ICD is the commercial interface
                by P&E.
 
- 54-59         UNALLOCATED
+ 54 char       Electrocardiognosis Holter serial card
+                 0 = /dev/holter0      First Holter port
+                 1 = /dev/holter1      Second Holter port
+                 2 = /dev/holter2      Third Holter port
+
+               A custom serial card used by Electrocardiognosis SRL
+               <mseritan@ottonel.pub.ro> to transfer data from Holter
+               24-hour heart monitoring equipment.
+
+ 55-59         UNALLOCATED
 
  60-63         LOCAL/EXPERIMENTAL USE
                Allocated for local/experimental use.  For devices not
index 72e306793c5b2abdd4f9010aa9bb6333d5e21d32..b06d45e486f9e14f7afe169ea98a150b60b01352 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 2
 PATCHLEVEL = 0
-SUBLEVEL = 4
+SUBLEVEL = 5
 
 ARCH = i386
 
index eb4125f2e63796d5cd35b46a2d27b04b973b84bb..f962ce15fe50a7c7ae7c88fa63f96ae4d5662685 100644 (file)
@@ -56,7 +56,7 @@ vmlinux.nh: tools/build
 
 vmlinux: $(TOPDIR)/vmlinux
        cp $(TOPDIR)/vmlinux vmlinux
-       quickstrip vmlinux
+       strip vmlinux
 
 tools/lxboot: tools/build
        tools/build > tools/lxboot
index 436eb43b022b59fe28ec46359a911f4efc245c6f..22c60b1e4207ca012c513e8751a431815f061318 100644 (file)
@@ -82,7 +82,7 @@ then
        define_bool CONFIG_ALPHA_AVANTI y
 fi
 
-bool 'Echo console messages on /dev/ttyS1' CONFIG_SERIAL_ECHO
+bool 'Echo console messages on /dev/ttyS0 (COM1)' CONFIG_SERIAL_ECHO
 if [ "$CONFIG_PCI" = "y" ]; then
   bool 'TGA Console Support' CONFIG_TGA_CONSOLE
   if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
index 28840eb3bd96a7a87c20a5d37c5e6909f36ee7bd..f4554bcc13a78371307f9f55e3969adaef01c3e4 100644 (file)
@@ -491,27 +491,30 @@ void apecs_machine_check(unsigned long vector, unsigned long la_ptr,
                         struct pt_regs * regs)
 {
        struct el_common *mchk_header;
+       struct el_procdata *mchk_procdata;
        struct el_apecs_sysdata_mcheck *mchk_sysdata;
+       unsigned long *ptr;
+       int i;
 
-       mchk_header = (struct el_common *)la_ptr;
 
+       mchk_header = (struct el_common *)la_ptr;
+       mchk_procdata = (struct el_procdata *)
+         (la_ptr + mchk_header->proc_offset - sizeof(mchk_procdata->paltemp));
        mchk_sysdata = 
          (struct el_apecs_sysdata_mcheck *)(la_ptr + mchk_header->sys_offset);
 
-       DBG(("apecs_machine_check: vector=0x%lx la_ptr=0x%lx\n", vector, la_ptr));
-       DBG(("                     pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
-            regs->pc, mchk_header->size, mchk_header->proc_offset, mchk_header->sys_offset));
-       DBG(("apecs_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n",
-            apecs_mcheck_expected, mchk_sysdata->epic_dcsr, mchk_sysdata->epic_pear));
 #ifdef DEBUG
-       {
-           unsigned long *ptr;
-           int i;
-
-           ptr = (unsigned long *)la_ptr;
-           for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
+       printk("apecs_machine_check: vector=0x%lx la_ptr=0x%lx\n",
+              vector, la_ptr);
+       printk("        pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
+              regs->pc, mchk_header->size, mchk_header->proc_offset,
+              mchk_header->sys_offset);
+       printk("apecs_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n",
+              apecs_mcheck_expected, mchk_sysdata->epic_dcsr,
+              mchk_sysdata->epic_pear);
+       ptr = (unsigned long *)la_ptr;
+       for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
                printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
-           }
        }
 #endif /* DEBUG */
 
@@ -520,9 +523,13 @@ void apecs_machine_check(unsigned long vector, unsigned long la_ptr,
         * ignore the machine check.
         */
 #ifdef CONFIG_ALPHA_MIKASA
-       /* for now on MIKASA, if it was expected, ignore it */
-       /* we need the details of the mcheck frame to really know... */
-       if (apecs_mcheck_expected) {
+#define MCHK_NO_DEVSEL 0x205L
+#define MCHK_NO_TABT 0x204L
+       if (apecs_mcheck_expected &&
+           (((unsigned int)mchk_procdata->paltemp[0] == MCHK_NO_DEVSEL) ||
+            ((unsigned int)mchk_procdata->paltemp[0] == MCHK_NO_TABT))
+           )
+       {
 #else
        if (apecs_mcheck_expected && (mchk_sysdata->epic_dcsr && 0x0c00UL)) {
 #endif
@@ -534,7 +541,33 @@ void apecs_machine_check(unsigned long vector, unsigned long la_ptr,
                wrmces(0x7);
                mb();
                draina();
+               DBG(("apecs_machine_check: EXPECTED\n"));
+       }
+       else if (vector == 0x620 || vector == 0x630) {
+               wrmces(0x1f); /* disable correctable from now on */
+               mb();
+               draina();
+               printk("apecs_machine_check: HW correctable (0x%lx)\n", vector);
+       }
+       else {
+               printk("APECS machine check:\n");
+               printk("  vector=0x%lx la_ptr=0x%lx\n",
+                      vector, la_ptr);
+               printk("  pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
+                      regs->pc, mchk_header->size, mchk_header->proc_offset,
+                      mchk_header->sys_offset);
+               printk("  expected %d DCSR 0x%lx PEAR 0x%lx\n",
+                      apecs_mcheck_expected, mchk_sysdata->epic_dcsr,
+                      mchk_sysdata->epic_pear);
+
+               ptr = (unsigned long *)la_ptr;
+               for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
+                   printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
+               }
+#if 0
+               /* doesn't work with MILO */
+               show_regs(regs);
+#endif
        }
 }
-
 #endif /* CONFIG_ALPHA_APECS */
index 799068bd2de98b467eb76ed0d68a729aa6930dfb..77e21e828fd66d8b7b05c10e0080b06f80265a07 100644 (file)
@@ -446,6 +446,41 @@ static inline void cabriolet_and_eb66p_device_interrupt(unsigned long vector,
        restore_flags(flags);
 }
 
+static inline void mikasa_device_interrupt(unsigned long vector,
+                                          struct pt_regs * regs)
+{
+       unsigned long pld;
+       unsigned int i;
+       unsigned long flags;
+
+       save_flags(flags);
+       cli();
+
+        /* read the interrupt summary registers */
+        pld = (((unsigned long) (~inw(0x534)) & 0x0000ffffUL) << 16) |
+              (((unsigned long) inb(0xa0))  <<  8) |
+              ((unsigned long) inb(0x20));
+
+#if 0
+        printk("[0x%08lx]", pld);
+#endif
+
+        /*
+         * Now for every possible bit set, work through them and call
+         * the appropriate interrupt handler.
+         */
+        while (pld) {
+               i = ffz(~pld);
+               pld &= pld - 1; /* clear least bit set */
+               if (i < 16) {
+                       isa_device_interrupt(vector, regs);
+               } else {
+                       device_interrupt(i, i, regs);
+               }
+        }
+       restore_flags(flags);
+}
+
 static inline void eb66_and_eb64p_device_interrupt(unsigned long vector,
                                                   struct pt_regs * regs)
 {
@@ -622,12 +657,10 @@ asmlinkage void do_entInt(unsigned long type, unsigned long vector, unsigned lon
                        srm_device_interrupt(vector, &regs);
 #elif NR_IRQS == 33
                        cabriolet_and_eb66p_device_interrupt(vector, &regs);
+#elif defined(CONFIG_ALPHA_MIKASA)
+                       mikasa_device_interrupt(vector, &regs);
 #elif NR_IRQS == 32
-# ifdef CONFIG_ALPHA_MIKASA
-#      error  we got a problem here Charlie MIKASA should be SRM console
-# else
                        eb66_and_eb64p_device_interrupt(vector, &regs);
-# endif
 #elif NR_IRQS == 16
                        isa_device_interrupt(vector, &regs);
 #endif
index 85b6a72c479a0200a2f1414612dfffb593100df7..a7e9d063fef73b092f6258f0aca8361be8c1439f 100644 (file)
@@ -19,6 +19,7 @@
 /*
  * Changes by tytso to allow root device specification
  * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996
+ * Cross compiling fixes by Gertjan van Wingerde, July 1996
  */
 
 #include <stdio.h>     /* fprintf */
@@ -56,6 +57,7 @@ static int GCC_HEADER = sizeof(struct exec);
 #define STRINGIFY(x) #x
 
 typedef union {
+       int i;
        long l;
        short s[2];
        char b[4];
@@ -72,6 +74,17 @@ long intel_long(long l)
        return t.l;
 }
 
+int intel_int(int i)
+{
+       conv t;
+
+       t.b[0] = i & 0xff; i >>= 8;
+        t.b[1] = i & 0xff; i >>= 8;
+        t.b[2] = i & 0xff; i >>= 8;
+        t.b[3] = i & 0xff; i >>= 8;
+        return t.i;
+}
+
 short intel_short(short l)
 {
        conv t;
@@ -94,8 +107,8 @@ void usage(void)
 
 int main(int argc, char ** argv)
 {
-       int i,c,id, sz;
-       unsigned long sys_size;
+       int i,c,id,sz,tmp_int;
+       unsigned long sys_size, tmp_long;
        char buf[1024];
 #ifndef __BFD__
        struct exec *ex = (struct exec *)buf;
@@ -180,12 +193,17 @@ int main(int argc, char ** argv)
 #ifdef __BIG_KERNEL__
        {
                if (!i) {
-                       if (*((long *)(&buf[2])) != 0x53726448 )
+                       /* Working with memcpy because of alignment constraints
+                          on Sparc - Gertjan */
+                       memcpy(&tmp_long, &buf[2], sizeof(long));
+                       if (tmp_long != intel_long(0x53726448) )
                                die("Wrong magic in loader header of 'setup'");
-                       if (*((int *)(&buf[6])) < 0x200 )
+                       memcpy(&tmp_int, &buf[6], sizeof(int));
+                       if (tmp_int < intel_int(0x200))
                                die("Wrong version of loader header of 'setup'");
                        buf[0x11] = 1; /* LOADED_HIGH */
-                       *((long *)(&buf[0x14])) = 0x100000; /* code32_start */
+                       tmp_long = intel_long(0x100000);
+                       memcpy(&buf[0x14], &tmp_long, sizeof(long));  /* code32_start */
                }
 #endif
                if (write(1,buf,c)!=c)
index a3c528ea9b997ba7566a192ae9051c83034f077f..ff447ca362659285db74df2d53f6e89980aaae7d 100644 (file)
  *                        from Ben Galliart <bgallia@luc.edu> with 
  *                        special help from Jeff Lightfoot 
  *                        <jeffml@netcom.com>
+ * 3.15a July 9, 1996 -- Improved Sanyo 3 CD changer identification
  *
  * NOTE: Direct audio reads will only work on some types of drive.
  * So far, i've received reports of success for Sony and Toshiba drives.
@@ -2657,7 +2658,8 @@ void ide_cdrom_setup (ide_drive_t *drive)
 
                /* Sanyo 3 CD changer uses a non-standard command 
                    for CD changing */
-                else if (strcmp (drive->id->model, "CD-ROM CDR-C3 G") == 0) {
+                else if ((strcmp(drive->id->model, "CD-ROM CDR-C3 G") == 0) ||
+                         (strcmp(drive->id->model, "CD-ROM CDR-C3G") == 0)) {
                        /* uses CD in slot 0 when value is set to 3 */
                        CDROM_STATE_FLAGS (drive)->sanyo_slot = 3;
                }
index 2dd5c4e13e1b4203c920877a41699f0d61f38ff1..366fc31402bbf1b24e0427a3493defb146ec672c 100644 (file)
@@ -457,7 +457,7 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                 }
                 case CDROMPLAYMSF: {
                         struct cdrom_msf msf;
-                        GETARG(struct cdrom_mdf, msf);
+                        GETARG(struct cdrom_msf, msf);
                         return cdo->audio_ioctl(dev, cmd, &msf);
                 }
                 case CDROMPLAYTRKIND: {
@@ -467,13 +467,13 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                 }
                 case CDROMVOLCTRL: {
                         struct cdrom_volctrl volume;
-                        GETARG(struct cdrom_volctl, volume);
+                        GETARG(struct cdrom_volctrl, volume);
                         return cdo->audio_ioctl(dev, cmd, &volume);
                 }
                 case CDROMVOLREAD: {
                         struct cdrom_volctrl volume;
                         if (!cdo->audio_ioctl(dev, cmd, &volume)) {
-                                PUTARG(struct cdrom_volctl, volume);
+                                PUTARG(struct cdrom_volctrl, volume);
                                 return 0;
                         }
                         return -EINVAL;
index a853b963655c1d84c2f4c611369f3d5407b939b3..ae6a3c63fbeb7e961f998bbd1a4e1af9d28b6b61 100644 (file)
@@ -1918,12 +1918,8 @@ dc21040_autoconf(struct device *dev)
        break;
        
       case NC:
-#ifndef __alpha__
+       /* default to TP for all */
        reset_init_sia(dev, 0x8f01, 0xffff, 0x0000);
-#else
-       /* JAE: for Alpha, default to BNC/AUI, *not* TP */
-       reset_init_sia(dev, 0x8f09, 0x0705, 0x0006);
-#endif  /* i386 */
        if (lp->media != lp->c_media) {
            de4x5_dbg_media(dev);
            lp->c_media = lp->media;
index f2bc90d32f60f8d3c1ca29a50f38535b9631632b..1dff910ed6ebc96b4e9d0a235cbec77be92f1682 100644 (file)
@@ -29,6 +29,7 @@ Written by Gerard Roudier <groudier@club-internet.fr>
 14. Control commands under linux-1.2.13
 15. Known problems
       15.1 Tagged commands with Iomega Jaz device
+      15.2 Tagged command queueing cannot be disabled at run time
 
 ===============================================================================
 
@@ -189,8 +190,9 @@ Chip    Device id     Revision Id
 
 The profiling informations are updated upon completion of scsi commands.
 The data structure is allocated and zeroed when the host adapter is 
-attached. So, if the driver is a module you can reset the profiling data 
-by unloading and reloading the driver.
+attached. So, if the driver is a module, the profile counters are cleared each 
+time the driver is loaded.
+The "clearprof" command allow to clear these counters at any time.
 
 The following counters are available:
 ("num" prefix means "number of", "ms" means milli-seconds)
@@ -290,6 +292,7 @@ Available commands:
     target:    target number
     tags:      number of concurrent tagged commands
                must not be greater than SCSI_NCR_MAX_TAGS (default: 4)
+               must not be lower that 1 (see: known problems)
 
 8.4 Set order type for tagged command
 
@@ -316,10 +319,10 @@ Available commands:
        tiny:    print minimal debugging informations
        timing:  print timing informations of the ncr chip.
        nego:    print informations about scsi negotiations
-        phase:   printf informations on script interruptions
+       phase:   print informations on script interruptions
 
 
-8.5 Clear profile counters
+8.6 Clear profile counters
 
     clearprof
 
@@ -556,5 +559,12 @@ The other problems that may appear are timeouts. The only way to avoid timeouts
 seems to edit linux/drivers/scsi/sd.c and to increase the current timeout 
 values.
 
+15.2 Tagged command queuing cannot be disabled at run time
+
+Once Tagged command queuing has been enabled, the driver will not allow to 
+disable this feature ("settags <target> 0" is not supported).
+This problem is due to some limitations of the code added to the Linux version 
+of the driver.
+
 ===============================================================================
 End of NCR53C8XX driver README file
index d1a6e30e305ab5b637e0c1141f4c10787eabb36d..258be2a5f51f5b81f828342eef0d5d3dd7dc261b 100644 (file)
@@ -1,6 +1,9 @@
 /*
  *      eata.c - Low-level driver for EATA/DMA SCSI host adapters.
  *
+ *      09 Jul 1996 rev. 2.11 for linux 2.0.4
+ *          Number of internal retries is now limited.
+ *
  *      16 Apr 1996 rev. 2.10 for linux 1.3.90
  *          New argument "reset_flags" to the reset routine.
  *
@@ -156,6 +159,7 @@ struct proc_dir_entry proc_scsi_eata2x = {
 #define MAX_BOARDS 18
 #define MAX_MAILBOXES 64
 #define MAX_SGLIST 64
+#define MAX_INTERNAL_RETRIES 64
 #define MAX_CMD_PER_LUN 2
 
 #define FALSE 0
@@ -313,6 +317,8 @@ struct hostdata {
    int in_reset;                        /* True if board is doing a reset */
    int target_time_out[MAX_TARGET];     /* N. of timeout errors on target */
    int target_reset[MAX_TARGET];        /* If TRUE redo operation on target */
+   unsigned int retries;                /* Number of internal retries */
+   unsigned long last_retried_pid;      /* Pid of last retried command */
    unsigned char subversion;            /* Bus type, either ISA or ESA */
    unsigned char protocol_rev;          /* EATA 2.0 rev., 'A' or 'B' or 'C' */
    struct mssp sp[MAX_MAILBOXES];       /* Returned status for this board */
@@ -802,6 +808,8 @@ int eata2x_reset (Scsi_Cmnd *SCarg, unsigned int reset_flags) {
       return SCSI_RESET_ERROR;
       }
 
+   HD(j)->retries = 0;
+
    for (k = 0; k < MAX_TARGET; k++) HD(j)->target_reset[k] = TRUE;
 
    for (k = 0; k < MAX_TARGET; k++) HD(j)->target_time_out[k] = 0;
@@ -1008,6 +1016,8 @@ static void eata2x_interrupt_handler(int irq, void *dev_id, struct pt_regs * reg
    
                  HD(j)->target_time_out[SCpnt->target] = 0;
    
+                  if (HD(j)->last_retried_pid == SCpnt->pid) HD(j)->retries = 0;
+
                  break;
               case ASST:     /* Selection Time Out */
               case 0x02:     /* Command Time Out   */
@@ -1020,17 +1030,23 @@ static void eata2x_interrupt_handler(int irq, void *dev_id, struct pt_regs * reg
                     }
    
                  break;
+
+               /* Perform a limited number of internal retries */
               case 0x03:     /* SCSI Bus Reset Received */
               case 0x04:     /* Initial Controller Power-up */
    
-                 if (SCpnt->device->type != TYPE_TAPE)
-                    status = DID_BUS_BUSY << 16;
-                 else
-                    status = DID_ERROR << 16;
-   
                  for (k = 0; k < MAX_TARGET; k++) 
                     HD(j)->target_reset[k] = TRUE;
    
+                 if (SCpnt->device->type != TYPE_TAPE
+                      && HD(j)->retries < MAX_INTERNAL_RETRIES) {
+                    status = DID_BUS_BUSY << 16;
+                    HD(j)->retries++;
+                     HD(j)->last_retried_pid = SCpnt->pid;
+                     }
+                 else 
+                    status = DID_ERROR << 16;
+
                  break;
               case 0x07:     /* Bus Parity Error */
               case 0x0c:     /* Controller Ram Parity */
@@ -1058,7 +1074,7 @@ static void eata2x_interrupt_handler(int irq, void *dev_id, struct pt_regs * reg
                 spp->adapter_status != ASST && HD(j)->iocount <= 1000) ||
                do_trace)
 #endif
-              printk("%s: ihdlr, mbox %d, err 0x%x:%x,"\
+              printk("%s: ihdlr, mbox %2d, err 0x%x:%x,"\
                      " target %d:%d, pid %ld, count %d.\n",
                      BN(j), i, spp->adapter_status, spp->target_status,
                      SCpnt->target, SCpnt->lun, SCpnt->pid, HD(j)->iocount);
index 139a88ec001543a2d549c6abf9de3139ce965c2b..00486c97f97d264eaf4d5cc25aea29f13586e4df 100644 (file)
@@ -11,7 +11,7 @@ int eata2x_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
 int eata2x_abort(Scsi_Cmnd *);
 int eata2x_reset(Scsi_Cmnd *, unsigned int);
 
-#define EATA_VERSION "2.10.00"
+#define EATA_VERSION "2.11.00"
 
 
 #define EATA {                                                 \
index ee08fa11e7bbb974e98aa30761b9cfa898c05d9b..02f6fecf65e94a299cda61345ae92ec7a411b381 100644 (file)
@@ -8165,7 +8165,7 @@ printf("ncr_user_command: retv=%d\n", retv);
 #endif
        }
        else {
-               if (*start)
+               if (start)
                        *start = buffer;
                retv = ncr_host_info(ncb, buffer, offset, length);
        }
index c0537bc9c8f7f94edc3e2c49821ae97ffadc27a2..324969f7dddc94075b096acd71ef3a8aea487382 100644 (file)
@@ -63,7 +63,7 @@
    the latest firmware provided by QLogic.  This may be an earlier/later
    revision than supplied by your board. */
 
-#define RELOAD_FIRMWARE                0
+#define RELOAD_FIRMWARE                1
 
 /* Set the following macro to 1 to reload the ISP1020's defaults from nvram.
    If you are not sure of your settings, leave this alone, the driver will
index 62f35cbace323f91c71c7ef251ed2a48e4fb936f..24e5633ebe3d613856322eee7c9b512cf9c5933b 100644 (file)
@@ -92,7 +92,7 @@ static int update_timeout (Scsi_Cmnd *, int);
 static void print_inquiry(unsigned char *data);
 static void scsi_times_out (Scsi_Cmnd * SCpnt);
 static int scan_scsis_single (int channel,int dev,int lun,int * max_scsi_dev ,
-                 Scsi_Device ** SDpnt, Scsi_Cmnd * SCpnt,
+                 int * sparse_lun, Scsi_Device ** SDpnt, Scsi_Cmnd * SCpnt,
                  struct Scsi_Host *shpnt, char * scsi_result);
 void scsi_build_commandblocks(Scsi_Device * SDpnt);
 
@@ -226,6 +226,7 @@ static void scsi_dump_status(void);
 #define BLIST_KEY       0x08
 #define BLIST_SINGLELUN 0x10
 #define BLIST_NOTQ     0x20
+#define BLIST_SPARSELUN 0x40
 
 struct dev_info{
     const char * vendor;
@@ -292,7 +293,8 @@ static struct dev_info device_list[] =
 {"NRC","MBR-7","*", BLIST_FORCELUN | BLIST_SINGLELUN},
 {"PIONEER","CD-ROM DRM-602X","*", BLIST_FORCELUN | BLIST_SINGLELUN},
 {"PIONEER","CD-ROM DRM-604X","*", BLIST_FORCELUN | BLIST_SINGLELUN},
-{"EMULEX","MD21/S2     ESDI","*",BLIST_SINGLELUN},
+{"EMULEX","MD21/S2     ESDI","*", BLIST_SINGLELUN},
+{"CANON","IPUBJD","*", BLIST_SPARSELUN},
 /*
  * Must be at end of list...
  */
@@ -415,7 +417,7 @@ static void scan_scsis (struct Scsi_Host *shpnt, unchar hardcoded,
   unsigned char scsi_result0[256];
   unsigned char *scsi_result;
   Scsi_Device *SDpnt;
-  int max_dev_lun;
+  int max_dev_lun, sparse_lun;
   Scsi_Cmnd *SCpnt;
 
   SCpnt = (Scsi_Cmnd *) scsi_init_malloc (sizeof (Scsi_Cmnd), GFP_ATOMIC | GFP_DMA);
@@ -449,8 +451,8 @@ static void scan_scsis (struct Scsi_Host *shpnt, unchar hardcoded,
     if(dev >= shpnt->max_id) goto leave;
     lun = hlun;
     if(lun >= shpnt->max_lun) goto leave;
-    scan_scsis_single (channel, dev, lun, &max_dev_lun,
-                   &SDpnt, SCpnt, shpnt, scsi_result);
+    scan_scsis_single (channel, dev, lun, &max_dev_lun, &sparse_lun,
+                      &SDpnt, SCpnt, shpnt, scsi_result);
     if(SDpnt!=oldSDpnt) {
 
        /* it could happen the blockdevice hasn't yet been inited */
@@ -483,9 +485,12 @@ static void scan_scsis (struct Scsi_Host *shpnt, unchar hardcoded,
            */
           max_dev_lun = (max_scsi_luns < shpnt->max_lun ?
                          max_scsi_luns : shpnt->max_lun);
+         sparse_lun = 0;
           for (lun = 0; lun < max_dev_lun; ++lun) {
             if (!scan_scsis_single (channel, dev, lun, &max_dev_lun,
-                                    &SDpnt, SCpnt, shpnt, scsi_result))
+                                   &sparse_lun, &SDpnt, SCpnt, shpnt,
+                                   scsi_result)
+               && !sparse_lun)
               break; /* break means don't probe further for luns!=0 */
           }                     /* for lun ends */
         }                       /* if this_id != id ends */
@@ -528,8 +533,8 @@ static void scan_scsis (struct Scsi_Host *shpnt, unchar hardcoded,
  * Global variables used : scsi_devices(linked list)
  */
 int scan_scsis_single (int channel, int dev, int lun, int *max_dev_lun,
-    Scsi_Device **SDpnt2, Scsi_Cmnd * SCpnt, struct Scsi_Host * shpnt, 
-    char *scsi_result)
+    int *sparse_lun, Scsi_Device **SDpnt2, Scsi_Cmnd * SCpnt,
+    struct Scsi_Host * shpnt, char *scsi_result)
 {
   unsigned char scsi_cmd[12];
   struct Scsi_Device_Template *sdtpnt;
@@ -795,6 +800,16 @@ int scan_scsis_single (int channel, int dev, int lun, int *max_dev_lun,
   if (bflags & BLIST_SINGLELUN)
     SDpnt->single_lun = 1;
 
+  /*
+   * If this device is known to support sparse multiple units, override the
+   * other settings, and scan all of them.
+   */
+  if (bflags & BLIST_SPARSELUN) {
+    *max_dev_lun = 8;
+    *sparse_lun = 1;
+    return 1;
+  }
+
   /*
    * If this device is known to support multiple units, override the other
    * settings, and scan all of them.
index c3eed8117d207a8ab5246537b8aa959e7b7cd00c..f6d991f1f557697f6604e4ff33af12dad2c54864 100644 (file)
@@ -1054,7 +1054,7 @@ static int sd_init_onedisk(int i)
             * Issue command to spin up drive for these cases. */
            if(the_result && !rscsi_disks[i].device->removable && 
               SCpnt->sense_buffer[2] == NOT_READY) {
-               int time1;
+               unsigned long time1;
                if(!spintime){
                    printk( "sd%c: Spinning up disk...", 'a' + i );
                    cmd[0] = START_STOP;
@@ -1081,8 +1081,8 @@ static int sd_init_onedisk(int i)
                    spintime = jiffies;
                }
                
-               time1 = jiffies;
-               while(jiffies < time1 + HZ); /* Wait 1 second for next try */
+               time1 = jiffies + HZ;
+               while(jiffies < time1); /* Wait 1 second for next try */
                printk( "." );
            }
        } while(the_result && spintime && spintime+100*HZ > jiffies);
index 8ef7aafb1dc641701706d9d8fabf7a090475ab13..ffd39202a3bc73eeee218b7746118a26f881c714 100644 (file)
@@ -1,6 +1,10 @@
 /*
  *      u14-34f.c - Low-level driver for UltraStor 14F/34F SCSI host adapters.
  *
+ *      09 Jul 1996 rev. 2.11 for linux 2.0.4
+ *          "Data over/under-run" no longer implies a redo on all targets.
+ *          Number of internal retries is now limited.
+ *
  *      16 Apr 1996 rev. 2.10 for linux 1.3.90
  *          New argument "reset_flags" to the reset routine.
  *
@@ -199,6 +203,7 @@ struct proc_dir_entry proc_scsi_u14_34f = {
 #define MAX_MAILBOXES 16
 #define MAX_SGLIST 32
 #define MAX_SAFE_SGLIST 16
+#define MAX_INTERNAL_RETRIES 64
 #define MAX_CMD_PER_LUN 2
 
 #define FALSE 0
@@ -280,6 +285,8 @@ struct hostdata {
    int in_reset;                        /* True if board is doing a reset */
    int target_time_out[MAX_TARGET];     /* N. of timeout errors on target */
    int target_reset[MAX_TARGET];        /* If TRUE redo operation on target */
+   unsigned int retries;                /* Number of internal retries */
+   unsigned long last_retried_pid;      /* Pid of last retried command */
    unsigned char subversion;            /* Bus type, either ISA or ESA */
    unsigned char heads;
    unsigned char sectors;
@@ -763,6 +770,8 @@ int u14_34f_reset(Scsi_Cmnd * SCarg, unsigned int reset_flags) {
       return SCSI_RESET_ERROR;
       }
 
+   HD(j)->retries = 0;
+
    for (k = 0; k < MAX_TARGET; k++) HD(j)->target_reset[k] = TRUE;
 
    for (k = 0; k < MAX_TARGET; k++) HD(j)->target_time_out[k] = 0;
@@ -972,6 +981,8 @@ static void u14_34f_interrupt_handler(int irq, void *dev_id, struct pt_regs * re
 
               HD(j)->target_time_out[SCpnt->target] = 0;
 
+               if (HD(j)->last_retried_pid == SCpnt->pid) HD(j)->retries = 0;
+
               break;
            case ASST:     /* Selection Time Out */
 
@@ -983,20 +994,27 @@ static void u14_34f_interrupt_handler(int irq, void *dev_id, struct pt_regs * re
                  }
 
               break;
-           case 0x92:     /* Data over/under-run */
+
+            /* Perform a limited number of internal retries */
            case 0x93:     /* Unexpected bus free */
            case 0x94:     /* Target bus phase sequence failure */
            case 0x96:     /* Illegal SCSI command */
            case 0xa3:     /* SCSI bus reset error */
 
-              if (SCpnt->device->type != TYPE_TAPE)
-                 status = DID_BUS_BUSY << 16;
-              else
-                 status = DID_ERROR << 16;
-
               for (k = 0; k < MAX_TARGET; k++) 
                  HD(j)->target_reset[k] = TRUE;
 
+           case 0x92:     /* Data over/under-run */
+
+              if (SCpnt->device->type != TYPE_TAPE
+                   && HD(j)->retries < MAX_INTERNAL_RETRIES) {
+                 status = DID_BUS_BUSY << 16;
+                 HD(j)->retries++;
+                  HD(j)->last_retried_pid = SCpnt->pid;
+                  }
+              else 
+                 status = DID_ERROR << 16;
+
               break;
            case 0x01:     /* Invalid command */
            case 0x02:     /* Invalid parameters */
@@ -1023,7 +1041,7 @@ static void u14_34f_interrupt_handler(int irq, void *dev_id, struct pt_regs * re
              spp->adapter_status != ASST && HD(j)->iocount <= 1000) ||
             do_trace)
 #endif
-           printk("%s: ihdlr, mbox %d, err 0x%x:%x,"\
+           printk("%s: ihdlr, mbox %2d, err 0x%x:%x,"\
                   " target %d:%d, pid %ld, count %d.\n",
                   BN(j), i, spp->adapter_status, spp->target_status,
                   SCpnt->target, SCpnt->lun, SCpnt->pid, HD(j)->iocount);
index 17de5e536920e543a63d332168890417c7681ae9..a4dc31e850b5fc86a5fdf3afedeb5441a7d76310 100644 (file)
@@ -10,7 +10,7 @@ int u14_34f_abort(Scsi_Cmnd *);
 int u14_34f_reset(Scsi_Cmnd *, unsigned int);
 int u14_34f_biosparam(Disk *, kdev_t, int *);
 
-#define U14_34F_VERSION "2.10.00"
+#define U14_34F_VERSION "2.11.00"
 
 #define ULTRASTOR_14_34F {                                            \
                NULL, /* Ptr for modules */                           \
index d09440e18b09a99159754be4992ae61932021d40..2e076b900766f63cf925035d28e20c89355222de 100644 (file)
@@ -1549,7 +1549,7 @@ guswave_start_note2 (int dev, int voice, int note_num, int volume)
       gus_write_addr (0x02, sample_ptrs[sample] + samples[sample].loop_start,
                      samples[sample].fractions & 0x0f,
                      is16bits);        /* Loop start location */
-      gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].len,
+      gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].loop_end,
                      (samples[sample].fractions >> 4) & 0x0f,
                      is16bits);        /* Loop end location */
     }
@@ -1560,7 +1560,7 @@ guswave_start_note2 (int dev, int voice, int note_num, int volume)
       voices[voice].loop_irq_parm = 1;
       gus_write_addr (0x02, sample_ptrs[sample],
                      0, is16bits);     /* Loop start location */
-      gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].loop_end - 1,
+      gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].len - 1,
                      (samples[sample].fractions >> 4) & 0x0f,
                      is16bits);        /* Loop end location */
     }
index 9093d8cae1b97bec087e7694f7fe7f54ada6e773..307977b4d905e8448428bbdfd8fec7c4eaa967ac 100644 (file)
@@ -130,14 +130,14 @@ sbintr (int irq, void *dev_id, struct pt_regs *dummy)
 
   sb_devc        *devc = irq2devc[irq];
 
-  devc->irq_ok = 1;
-
   if (devc == NULL || devc->irq != irq)
     {
       DEB (printk ("sbintr: Bogus interrupt IRQ%d\n", irq));
       return;
     }
 
+  devc->irq_ok = 1;
+
   if (devc->model == MDL_SB16)
     {
 
@@ -671,10 +671,14 @@ sb_dsp_init (struct address_info *hw_config)
   devc->dev = num_audiodevs;
   devc->caps = hw_config->driver_use_1;
 
+  irq2devc[hw_config->irq] = devc;
+  devc->irq_ok = 0;
+
   if (snd_set_irq_handler (hw_config->irq,
                           sbintr, "sound blaster", devc->osp) < 0)
     {
       printk ("SB: Can't allocate IRQ%d\n", hw_config->irq);
+      irq2devc[hw_config->irq] = NULL;
       return;
     }
 
@@ -697,9 +701,6 @@ sb_dsp_init (struct address_info *hw_config)
          }
     }
 
-  irq2devc[hw_config->irq] = devc;
-  devc->irq_ok = 0;
-
   for (n = 0; n < 3 && devc->irq_ok == 0; n++)
     if (sb_dsp_command (devc, 0xf2))   /* Cause interrupt immediately */
       {
@@ -1173,7 +1174,7 @@ probe_sbmpu (struct address_info *hw_config)
        }
       hw_config->name = "Sound Blaster 16";
       hw_config->irq = -devc->irq;
-      sb16_set_mpu_port(devc, hw_config)
+      sb16_set_mpu_port(devc, hw_config);
       break;
 
     case MDL_ESS:
index a222a35edb7cae5179724cbb0e891554e67f9560..f15b5969bf47acc2317419dbdb9a642e3c6fc29c 100644 (file)
@@ -163,10 +163,12 @@ int ext2_lookup (struct inode * dir, const char * name, int len,
                return -ENOENT;
        if (!S_ISDIR(dir->i_mode)) {
                iput (dir);
-               return -ENOENT;
+               return -ENOTDIR;
        }
-       if (len > EXT2_NAME_LEN)
+       if (len > EXT2_NAME_LEN) {
+               iput (dir);
                return -ENAMETOOLONG;
+       }
        if (dcache_lookup(dir, name, len, &ino)) {
                if (!ino) {
                        iput(dir);
@@ -407,8 +409,10 @@ int ext2_mknod (struct inode * dir, const char * name, int len, int mode,
        if (!dir)
                return -ENOENT;
 
-       if (len > EXT2_NAME_LEN)
+       if (len > EXT2_NAME_LEN) {
+               iput (dir);
                return -ENAMETOOLONG;
+       }
        bh = ext2_find_entry (dir, name, len, &de);
        if (bh) {
                brelse (bh);
@@ -472,8 +476,10 @@ int ext2_mkdir (struct inode * dir, const char * name, int len, int mode)
 
        if (!dir)
                return -ENOENT;
-       if (len > EXT2_NAME_LEN)
+       if (len > EXT2_NAME_LEN) {
+               iput (dir);
                return -ENAMETOOLONG;
+       }
        bh = ext2_find_entry (dir, name, len, &de);
        if (bh) {
                brelse (bh);
@@ -611,8 +617,10 @@ repeat:
        if (!dir)
                return -ENOENT;
        inode = NULL;
-       if (len > EXT2_NAME_LEN)
+       if (len > EXT2_NAME_LEN) {
+               iput (dir);
                return -ENAMETOOLONG;
+       }
        bh = ext2_find_entry (dir, name, len, &de);
        retval = -ENOENT;
        if (!bh)
@@ -699,8 +707,10 @@ repeat:
                return -ENOENT;
        retval = -ENOENT;
        inode = NULL;
-       if (len > EXT2_NAME_LEN)
+       if (len > EXT2_NAME_LEN) {
+               iput (dir);
                return -ENAMETOOLONG;
+       }
        bh = ext2_find_entry (dir, name, len, &de);
        if (!bh)
                goto end_unlink;
index 19e81a145617969852c4ef07846c7fd54cba7b5b..0a4695c3ceecd9e9c02bd1c9a006e01044324ece 100644 (file)
@@ -599,7 +599,7 @@ ncp_request(struct ncp_server *server, int function)
 
        if (server->has_subfunction != 0)
        {
-               *(__u16 *)&(h->data[0]) = request_size - 2;
+               *(__u16 *)&(h->data[0]) = htons(request_size - 2);
        }
 
        h->type = NCP_REQUEST;
index ca30123206a3caf4fca3fea0bd13f1b5dcc83f7a..0f38c8aac92025c17cb99bbe635c3b300c3c517c 100644 (file)
@@ -414,6 +414,77 @@ extern unsigned long apecs_init (unsigned long mem_start,
 /*
  * Data structure for handling APECS machine checks:
  */
+#ifdef CONFIG_ALPHA_MIKASA
+struct el_apecs_sysdata_mcheck {
+    unsigned long coma_gcr;
+    unsigned long coma_edsr;
+    unsigned long coma_ter;
+    unsigned long coma_elar;
+    unsigned long coma_ehar;
+    unsigned long coma_ldlr;
+    unsigned long coma_ldhr;
+    unsigned long coma_base0;
+    unsigned long coma_base1;
+    unsigned long coma_base2;
+    unsigned long coma_base3;
+    unsigned long coma_cnfg0;
+    unsigned long coma_cnfg1;
+    unsigned long coma_cnfg2;
+    unsigned long coma_cnfg3;
+    unsigned long epic_dcsr;
+    unsigned long epic_pear;
+    unsigned long epic_sear;
+    unsigned long epic_tbr1;
+    unsigned long epic_tbr2;
+    unsigned long epic_pbr1;
+    unsigned long epic_pbr2;
+    unsigned long epic_pmr1;
+    unsigned long epic_pmr2;
+    unsigned long epic_harx1;
+    unsigned long epic_harx2;
+    unsigned long epic_pmlt;
+    unsigned long epic_tag0;
+    unsigned long epic_tag1;
+    unsigned long epic_tag2;
+    unsigned long epic_tag3;
+    unsigned long epic_tag4;
+    unsigned long epic_tag5;
+    unsigned long epic_tag6;
+    unsigned long epic_tag7;
+    unsigned long epic_data0;
+    unsigned long epic_data1;
+    unsigned long epic_data2;
+    unsigned long epic_data3;
+    unsigned long epic_data4;
+    unsigned long epic_data5;
+    unsigned long epic_data6;
+    unsigned long epic_data7;
+
+    unsigned long pceb_vid;
+    unsigned long pceb_did;
+    unsigned long pceb_revision;
+    unsigned long pceb_command;
+    unsigned long pceb_status;
+    unsigned long pceb_latency;
+    unsigned long pceb_control;
+    unsigned long pceb_arbcon;
+    unsigned long pceb_arbpri;
+
+    unsigned long esc_id;
+    unsigned long esc_revision;
+    unsigned long esc_int0;
+    unsigned long esc_int1;
+    unsigned long esc_elcr0;
+    unsigned long esc_elcr1;
+    unsigned long esc_last_eisa;
+    unsigned long esc_nmi_stat;
+
+    unsigned long pci_ir;
+    unsigned long pci_imr;
+    unsigned long svr_mgr;
+};
+#else /* CONFIG_ALPHA_MIKASA */
+/* this for the normal APECS machines */
 struct el_apecs_sysdata_mcheck {
     unsigned long coma_gcr;
     unsigned long coma_edsr;
@@ -457,6 +528,31 @@ struct el_apecs_sysdata_mcheck {
     unsigned long epic_data6;
     unsigned long epic_data7;
 };
+#endif /* CONFIG_ALPHA_MIKASA */
+
+struct el_procdata {
+    unsigned long paltemp[32];  /* PAL TEMP REGS. */
+    /* EV4-specific fields */
+    unsigned long exc_addr;     /* Address of excepting instruction. */
+    unsigned long exc_sum;      /* Summary of arithmetic traps. */
+    unsigned long exc_mask;     /* Exception mask (from exc_sum). */
+    unsigned long iccsr;        /* IBox hardware enables. */
+    unsigned long pal_base;     /* Base address for PALcode. */
+    unsigned long hier;         /* Hardware Interrupt Enable. */
+    unsigned long hirr;         /* Hardware Interrupt Request. */
+    unsigned long csr;          /* D-stream fault info. */
+    unsigned long dc_stat;      /* D-cache status (ECC/Parity Err). */
+    unsigned long dc_addr;      /* EV3 Phys Addr for ECC/DPERR. */
+    unsigned long abox_ctl;     /* ABox Control Register. */
+    unsigned long biu_stat;     /* BIU Status. */
+    unsigned long biu_addr;     /* BUI Address. */
+    unsigned long biu_ctl;      /* BIU Control. */
+    unsigned long fill_syndrome;/* For correcting ECC errors. */
+    unsigned long fill_addr;    /* Cache block which was being read */
+    unsigned long va;           /* Effective VA of fault or miss. */
+    unsigned long bc_tag;       /* Backup Cache Tag Probe Results.*/
+};
+
 
 #define RTC_PORT(x)    (0x70 + (x))
 #define RTC_ADDR(x)    (0x80 | (x))
index 85356d1dd7efbd7f27bc8fcd6a7d0f657e264ba2..a18f7e4630e0cfe794e8fc54191a834456d06ea2 100644 (file)
@@ -3,7 +3,7 @@
 
 struct dirent {
        long            d_ino;
-       off_t           d_off;
+       __kernel_off_t  d_off;
        unsigned short  d_reclen;
        char            d_name[256]; /* We must not include limits.h! */
 };
index eb9ca7d6335caea289c09cd6e53b4af8d2179ea7..d63a9046d9efdd5153994a0523fdb3e9ac238ca0 100644 (file)
@@ -102,6 +102,7 @@ struct msghdr
 #define        IPTOS_LOWDELAY          0x10
 #define        IPTOS_THROUGHPUT        0x08
 #define        IPTOS_RELIABILITY       0x04
+#define        IPTOS_MINCOST           0x02
 #define IP_TTL         2
 #define IP_HDRINCL     3
 #define IP_OPTIONS     4
index b57d549e6519f44d5205d1d15bd135a3bb0a621b..1dbf36c35e391f0df08ff3fd20a95b3b4ebb2e40 100644 (file)
@@ -109,7 +109,7 @@ static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struc
                        if (page_map->count != 1)
                                return 0;
                        if (!(entry = get_swap_page()))
-                               return 0;
+                               return -1;      /* Aieee!!! Out of swap space! */
                        vma->vm_mm->rss--;
                        flush_cache_page(vma, address);
                        set_pte(page_table, __pte(entry));
@@ -312,6 +312,8 @@ static int swap_out(unsigned int priority, int dma, int wait)
                if (!--p->swap_cnt)
                        swap_task++;
                switch (swap_out_process(p, dma, wait)) {
+                       case -1:
+                               return 0;
                        case 0:
                                if (p->swap_cnt)
                                        swap_task++;
index a2c552e9ef7c16bcebcd80f87fdffc6f53bc2b80..5449ada552142bbfcc3258b9677c9640799a7d23 100644 (file)
@@ -842,6 +842,8 @@ int ip_build_xmit(struct sock *sk,
                                                NULL, NULL, 0)>0)
                                skb->arp=1;
                }
+               else
+                       skb->arp = 1;
                
                /*
                 *      Find where to start putting bytes.
index 157366716089c863e21086c23f5d9b24b1af515e..64884a9ee4fd3c79fcd53b45485ef7af38ec0a23 100644 (file)
@@ -178,17 +178,18 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
                                kfree_s(old_opt, sizeof(struct optlen) + old_opt->optlen);
                          return 0;
                  }
-               case IP_TOS:            /* This sets both TOS and Precedence */
-                       if (val<0 || val>63)    /* Reject setting of unused bits */
+               case IP_TOS:                    /* This sets both TOS and Precedence */
+                       if (val & ~0xfe)        /* Reject setting of unused bits */
                                return -EINVAL;
-                       if ((val&7) > 4 && !suser())    /* Only root can set Prec>4 */
+                       if ((val>>5) > 4 && !suser())   /* Only root can set Prec>4 */
                                return -EPERM;
                        sk->ip_tos=val;
-                       switch (val & 0x38) {
+                       switch (val & 0x1E) {
                                case IPTOS_LOWDELAY:
                                        sk->priority=SOPRI_INTERACTIVE;
                                        break;
                                case IPTOS_THROUGHPUT:
+                               case IPTOS_MINCOST:
                                        sk->priority=SOPRI_BACKGROUND;
                                        break;
                                default:
@@ -270,7 +271,6 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
  *     FIXME: Add/Del membership should have a semaphore protecting them from re-entry
  */
                        struct ip_mreq mreq;
-                       __u32 route_src;
                        struct rtable *rt;
                        struct device *dev=NULL;
                        
@@ -295,9 +295,8 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
                                 */
                                if((rt=ip_rt_route(mreq.imr_multiaddr.s_addr,0))!=NULL)
                                {
-                                       dev=rt->rt_dev;
-                                       route_src = rt->rt_src;
-                                       atomic_dec(&rt->rt_use);
+                                       dev=rt->u.dst.dev;
+                                       atomic_dec(&rt->u.dst.use);
                                        ip_rt_put(rt);
                                }
                        }
@@ -328,7 +327,6 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
                {
                        struct ip_mreq mreq;
                        struct rtable *rt;
-                       __u32 route_src;
                        struct device *dev=NULL;
 
                        /*
@@ -349,9 +347,8 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
                        {
                                if((rt=ip_rt_route(mreq.imr_multiaddr.s_addr,0))!=NULL)
                                {
-                                       dev=rt->rt_dev;
-                                       atomic_dec(&rt->rt_use);
-                                       route_src = rt->rt_src;
+                                       dev=rt->u.dst.dev;
+                                       atomic_dec(&rt->u.dst.use);
                                        ip_rt_put(rt);
                                }
                        }
index e34c186b165307d8eb3b171bba87b52485cc9a19..69d450e816a07bb45e026a2e271be694ec0ec35e 100644 (file)
@@ -733,7 +733,7 @@ EOM
 # Create a menu item to load an alternate configuration file.
 #
 g_alt_config () {
-       echo -n "get_alt_config 'Load  an Alternate Configuration File' "\
+       echo -n "get_alt_config 'Load an Alternate Configuration File' "\
                >>MCmenu
 }
 
@@ -742,6 +742,8 @@ g_alt_config () {
 # configuration from it.
 #
 get_alt_config () {
+       set -f ## Switch file expansion OFF
+
        while true
        do
                ALT_CONFIG="${ALT_CONFIG:-$DEFAULTS}"
@@ -759,9 +761,9 @@ last retrieved.  Leave blank to abort."\
 
                        [ "_" = "_$ALT_CONFIG" ] && break
 
-                       if [ -r "$ALT_CONFIG" ]
+                       if eval [ -r "$ALT_CONFIG" ]
                        then
-                               load_config_file "$ALT_CONFIG"
+                               eval load_config_file "$ALT_CONFIG"
                                break
                        else
                                echo -ne "\007"
@@ -789,6 +791,7 @@ EOM
                fi
        done
 
+       set +f ## Switch file expansion ON
        rm -f help.out MCdialog.out
 }
 
@@ -796,7 +799,7 @@ EOM
 # Create a menu item to store an alternate config file.
 #
 s_alt_config () {
-       echo -n "save_alt_config 'Store an Alternate Configuration File' "\
+       echo -n "save_alt_config 'Save Configuration to an Alternate File' "\
                 >>MCmenu
 }
 
@@ -805,6 +808,8 @@ s_alt_config () {
 # configuration to it.
 #
 save_alt_config () {
+       set -f  ## Switch file expansion OFF
+                       
        while true
        do
                $DIALOG --backtitle "$backtitle" \
@@ -818,10 +823,10 @@ as an alternate.  Leave blank to abort."\
                        ALT_CONFIG=`cat MCdialog.out`
 
                        [ "_" = "_$ALT_CONFIG" ] && break
-                       
-                       if touch $ALT_CONFIG 2>/dev/null
+
+                       if eval touch $ALT_CONFIG 2>/dev/null
                        then
-                               save_configuration $ALT_CONFIG
+                               eval save_configuration $ALT_CONFIG
                                load_functions  ## RELOAD
                                break
                        else
@@ -844,11 +849,12 @@ If you are uncertain what all this means then you should probably
 leave this blank.
 EOM
                        $DIALOG --backtitle "$backtitle"\
-                               --title "Store Alternate Configuration"\
+                               --title "Save Alternate Configuration"\
                                --textbox help.out $ROWS $COLS
                fi
        done
 
+       set +f  ## Switch file expansion ON
        rm -f help.out MCdialog.out
 }