diff -u --recursive --new-file v2.0.6/linux/Documentation/Changes linux/Documentation/Changes --- v2.0.6/linux/Documentation/Changes Mon Jul 8 16:09:50 1996 +++ linux/Documentation/Changes Mon Jul 15 09:55:10 1996 @@ -22,14 +22,14 @@ documento, consultad la traduccion de Alfredo Sanjuan en http://slug.ctv.es/~alfredo/Cambios.html. -Last updated: July 6, 1996. +Last updated: July 13, 1996. Current Author: Chris Ricker (gt1355b@prism.gatech.edu). Current Releases **************** - Kernel modules 2.0.0 -- PPP daemon Stable: 2.2.0f +- PPP daemon 2.2.0f - Dynamic linker (ld.so) 1.7.14 - GNU CC 2.7.2 - Binutils 2.6.0.14 @@ -277,7 +277,7 @@ so that only packets coming in/going out via that device (network interface) match with a rule. This is especially useful to prevent spoofing. You'll need to get -ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz to use this. +ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.2.tar.gz to use this. IP Masquerading =============== @@ -461,8 +461,9 @@ Those of you running Slackware may experience weirdness with man pages due to changes in groff. If your man pages display for - -when present at the end of a line, try adding a -r to your LESS -environmental variable. +when present at the end of a line, try setting an appropriate value +(many have reported success with "latin1", for example) for the +environmental variable LESSCHARSET. How to know the version of the installed programs ************************************************* @@ -592,6 +593,12 @@ upgrade to install. Almost everything you need is available in ftp://ftp.redhat.com/pub/current/i386/updates/2.0-kernel/ and its mirrors. + + For others, especially those of you running Slackware 3.0, David +Bourgin has put together a Slackware-compatible package of everything +necessary to quickly and easily upgrade to 2.0.x. See +ftp://ftp.wsc.com/pub/freeware/linux/update.linux/ for more information +and the files. Please send info about any other packages that 2.0.x "broke" or about any new features of 2.0.x that require extra or new packages for use to diff -u --recursive --new-file v2.0.6/linux/Documentation/Configure.help linux/Documentation/Configure.help --- v2.0.6/linux/Documentation/Configure.help Sat Jul 6 14:51:23 1996 +++ linux/Documentation/Configure.help Mon Jul 15 09:55:20 1996 @@ -1442,10 +1442,12 @@ This driver has been tested ok with linux/i386 and is currently untested under linux/Alpha. If you intend to use this driver under linux/Alpha, just try it first with read-only or mounted read-only devices. + Memory mapped io are currently not supported under linux/Alpha. force normal IO CONFIG_SCSI_NCR53C8XX_IOMAPPED - This option allow to force the driver to use normal IO. + Under linux/Alpha only normal io are currently supported. + Under linux/i386, this option allow to force the driver to use normal IO. Memory mapped IO have less latency than normal IO. During initialisation phase, the driver first tries to use memory mapped io. If nothing seems wrong, it will use memory mapped io. @@ -1840,7 +1842,7 @@ interface. The driver supports the ser12 and par96 designs. To configure the driver, use the setbaycom utility available from http://www.ife.ee.ethz.ch/~sailer/ham/ham.html#lnxbay. For - informations on the modems, see http://www.baycom.de and + information on the modems, see http://www.baycom.de and drivers/char/README.baycom. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read diff -u --recursive --new-file v2.0.6/linux/Documentation/xterm-linux.xpm linux/Documentation/xterm-linux.xpm --- v2.0.6/linux/Documentation/xterm-linux.xpm Thu Jan 1 02:00:00 1970 +++ linux/Documentation/xterm-linux.xpm Sun Jul 14 13:04:53 1996 @@ -0,0 +1,61 @@ +/* XPM */ +/*****************************************************************************/ +/** This pixmap was made by Torsten Poulin - 1996 - torsten@diku.dk **/ +/** It was made by combining xterm-blank.xpm with **/ +/** the wonderfully cute Linux penguin mascot by Larry Ewing. **/ +/** I had to change Larry's penguin a little to make it fit. **/ +/** xterm-blank.xpm contained the following comment: **/ +/** This pixmap is kindly offered by Ion Cionca - 1992 - **/ +/** Swiss Federal Institute of Technology **/ +/** Central Computing Service **/ +/*****************************************************************************/ +static char * image_name [] = { +/**/ +"64 38 8 1", +/**/ +" s mask c none", +". c gray70", +"X c gray85", +"o c gray50", +"O c yellow", +"+ c darkolivegreen", +"@ c white", +"# c black", +" ###### ", +" ######## ", +" ########## ........................... ", +" ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +" ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ", +" #@@@#@@@### .XX+++++++++++++++++++++++XXXXoo ", +" #@#@#@#@### .XX++++++++++++++++++++++++XXXooo ", +" #@#####@### .XX++@@+@++@+@@@@++@+++++++XXXooo ", +" ###OOO######.XX++++++++++++++++++++++++XXXoooo ", +" ##OOOOOO####.XX++@@@@+@@+@@@+++++++++++XXXoooo ", +" #O#OOO#O####.XX++++++++++++++++++++++++XXXooooo ", +" ##O###OO####.XX++@@@@@@@@@@+@@@@@++++++XXXooooo ", +" ###OOOO@#####XX++++++++++++++++++++++++XXXooooo ", +" ##@###@@@@####XX++@@@+@@@@+@@++@@@++++++XXXooooo ", +" #@@@@@@@@@@####X++++++++++++++++++++++++XXXooooo ", +" ##@@@@@@@@@@#####++@+++++++++++++++++++++XXXooooo ", +" ###@@@@@@@@@@######+++++++++++++++++++++++XXXooooo ", +" ####@@@@@@@@@@@#####+@@@@+@+@@@+@++++++++++XXXooooo ", +" ###@@@@@@@@@@@@######++++++++++++++++++++++XXXooooo ", +" ##@@@@@@@@@@@@@@#####@+@@@@++++++++++++++++XXXooooo ", +" ###@@@@@@@@@@@@@@######++++++++++++++++++++XXXXoooo ", +" ###@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXXooo ", +" ###@@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXooo ", +" ###@@@@@@@@@@@@@@@@#####ooooooooooooooooooooooo...oo ", +" ###@@@@@@@@@@@@@@@######.........................ooo ", +" #OO##@@@@@@@@@@@@@#######oooooooooooooooooooooooooooo ", +" #OOO##@@@@@@@@@@@#OO####O#XXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ", +" ###OOOOO##@@@@@@@@@@#OOO#OOO#XXXXXXXXXXXXXX#######XXoooo . .", +" #OOOOOOOO###@@@@@@@@@#OOOOOOO#ooooooooooooooooooooXXXooo . ", +" #OOOOOOOOO###@@@@@@@@@#OOOOOOO##XXXXXXXXXXXXXXXXXooooo . ", +" #OOOOOOOOO#@@@@@@@@###OOOOOOOOO#XXXXXXXXXXXXXXXoo oooooo ", +" #OOOOOOOOO#@@@@@@@####OOOOOOOO#@@@@@@@@@@@XXXXXoo ooooo...o ", +" #OOOOOOOOOOO###########OOOOOO##XXXXXXXXXXXXXXXXoo ooXXXoo..o ", +" ##OOOOOOOOO###########OOOO##@@@@@@@@@@@@@XXXXoo oXXXXX..o ", +" ###OOOO### oXX##OOO#XXXXXXXXXXXXXXXXXXoo o.....oo ", +" #### oooo####oooooooooooooooooooo ooooooo ", +" ", +" "}; diff -u --recursive --new-file v2.0.6/linux/Makefile linux/Makefile --- v2.0.6/linux/Makefile Mon Jul 15 11:20:23 1996 +++ linux/Makefile Mon Jul 15 11:47:24 1996 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 0 -SUBLEVEL = 6 +SUBLEVEL = 7 ARCH = i386 diff -u --recursive --new-file v2.0.6/linux/arch/alpha/config.in linux/arch/alpha/config.in --- v2.0.6/linux/arch/alpha/config.in Wed Jul 10 15:20:24 1996 +++ linux/arch/alpha/config.in Mon Jul 15 09:47:41 1996 @@ -36,6 +36,7 @@ choice 'Alpha system type' \ "Avanti CONFIG_ALPHA_AVANTI \ Alpha-XL CONFIG_ALPHA_XL \ + Alpha-XLT CONFIG_ALPHA_XLT \ Cabriolet CONFIG_ALPHA_CABRIOLET \ EB66 CONFIG_ALPHA_EB66 \ EB66+ CONFIG_ALPHA_EB66P \ @@ -61,7 +62,7 @@ define_bool CONFIG_ALPHA_APECS y fi if [ "$CONFIG_ALPHA_EB164" = "y" -o "$CONFIG_ALPHA_PC164" = "y" \ - -o "$CONFIG_ALPHA_ALCOR" = "y" ] + -o "$CONFIG_ALPHA_ALCOR" = "y" -o "$CONFIG_ALPHA_XLT" = "y" ] then define_bool CONFIG_PCI y define_bool CONFIG_ALPHA_EV5 y diff -u --recursive --new-file v2.0.6/linux/arch/alpha/defconfig linux/arch/alpha/defconfig --- v2.0.6/linux/arch/alpha/defconfig Mon Jul 8 16:09:51 1996 +++ linux/arch/alpha/defconfig Mon Jul 15 14:22:53 1996 @@ -20,6 +20,7 @@ CONFIG_NATIVE=y # CONFIG_ALPHA_AVANTI is not set # CONFIG_ALPHA_XL is not set +# CONFIG_ALPHA_XLT is not set # CONFIG_ALPHA_CABRIOLET is not set # CONFIG_ALPHA_EB66 is not set # CONFIG_ALPHA_EB66P is not set diff -u --recursive --new-file v2.0.6/linux/arch/alpha/kernel/bios32.c linux/arch/alpha/kernel/bios32.c --- v2.0.6/linux/arch/alpha/kernel/bios32.c Sun Jun 9 13:28:41 1996 +++ linux/arch/alpha/kernel/bios32.c Mon Jul 15 14:22:53 1996 @@ -892,6 +892,62 @@ common_fixup(7, 12, 5, irq_tab, 0); } +/* + * Fixup configuration for ALPHA XLT (EV5/EV56) + * + * Summary @ GRU_INT_REQ: + * Bit Meaning + * 0 Interrupt Line A from slot 2 + * 1 Interrupt Line B from slot 2 + * 2 Interrupt Line C from slot 2 + * 3 Interrupt Line D from slot 2 + * 4 Interrupt Line A from slot 1 + * 5 Interrupt line B from slot 1 + * 6 Interrupt Line C from slot 1 + * 7 Interrupt Line D from slot 1 + * 8 Interrupt Line A from slot 0 + * 9 Interrupt Line B from slot 0 + *10 Interrupt Line C from slot 0 + *11 Interrupt Line D from slot 0 + *12 NCR810 SCSI in slot 9 + *13 DC-21040 (TULIP) in slot 6 + *14-19 Reserved + *20-23 Jumpers (interrupt) + *24-27 Module revision + *28-30 Reserved + *31 EISA interrupt + * + * The device to slot mapping looks like: + * + * Slot Device + * 6 TULIP + * 7 PCI on board slot 0 + * 8 none + * 9 SCSI + * 10 PCI-ISA bridge + * 11 PCI on board slot 2 + * 12 PCI on board slot 1 + * + * + * This two layered interrupt approach means that we allocate IRQ 16 and + * above for PCI interrupts. The IRQ relates to which bit the interrupt + * comes in on. This makes interrupt processing much easier. + */ +static inline void xlt_fixup(void) +{ + char irq_tab[7][5] = { + /*INT INTA INTB INTC INTD */ + {16+13, 16+13, 16+13, 16+13, 16+13}, /* IdSel 17, TULIP */ + { 16+8, 16+8, 16+9, 16+10, 16+11}, /* IdSel 18, slot 0 */ + { -1, -1, -1, -1, -1}, /* IdSel 19, none */ + {16+12, 16+12, 16+12, 16+12, 16+12}, /* IdSel 20, SCSI */ + { -1, -1, -1, -1, -1}, /* IdSel 21, SIO */ + { 16+0, 16+0, 16+1, 16+2, 16+3}, /* IdSel 22, slot 2 */ + { 16+4, 16+4, 16+5, 16+6, 16+7}, /* IdSel 23, slot 1 */ + }; + common_fixup(6, 12, 5, irq_tab, 0); +} + /* * Fixup configuration for all boards that route the PCI interrupts @@ -1077,6 +1133,8 @@ mikasa_fixup(); #elif defined(CONFIG_ALPHA_ALCOR) alcor_fixup(); +#elif defined(CONFIG_ALPHA_XLT) + xlt_fixup(); #else # error You must tell me what kind of platform you want. #endif diff -u --recursive --new-file v2.0.6/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c --- v2.0.6/linux/arch/alpha/kernel/irq.c Wed Jul 10 15:20:24 1996 +++ linux/arch/alpha/kernel/irq.c Mon Jul 15 09:47:41 1996 @@ -35,9 +35,9 @@ /* * Shadow-copy of masked interrupts. * The bits are used as follows: - * 0.. 7 first ISA PIC (irq level 0..7) - * 8..15 second ISA PIC (irq level 8..15) - * Systems with 32 PCI interrupt lines (e.g., Alcor): + * 0.. 7 first (E)ISA PIC (irq level 0..7) + * 8..15 second (E)ISA PIC (irq level 8..15) + * Systems with PCI interrupt lines managed by GRU (e.g., Alcor, XLT): * 16..47 PCI interrupts 0..31 (int at GRU_INT_MASK) * Mikasa: * 16..31 PCI interrupts 0..15 (short at I/O port 536) @@ -60,8 +60,7 @@ #if NR_IRQS == 48 default: /* note inverted sense of mask bits: */ - *(unsigned int *)GRU_INT_MASK = ~(mask >> 16); - mb(); + *(unsigned int *)GRU_INT_MASK = ~(mask >> 16); mb(); break; #elif NR_IRQS == 33 @@ -166,17 +165,12 @@ } /* .. then the master */ outb(0xE0 | irq, 0x20); +#if defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT) + /* on ALCOR/XLT, need to dismiss interrupt via GRU */ + *(int *)GRU_INT_CLEAR = 0x80000000; mb(); + *(int *)GRU_INT_CLEAR = 0x00000000; mb(); +#endif /* ALCOR || XLT */ } -#if 0 - /* This is not needed since all interrupt are level-sensitive */ -#if defined(CONFIG_ALPHA_ALCOR) - /* on ALCOR, need to dismiss interrupt via GRU */ - *(int *)GRU_INT_CLEAR = 0x80000000; - mb(); - *(int *)GRU_INT_CLEAR = 0x00000000; - mb(); -#endif /* CONFIG_ALPHA_ALCOR */ -#endif } int request_irq(unsigned int irq, @@ -413,6 +407,42 @@ #endif } +#if defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT) +/* we have to conditionally compile this because of GRU_xxx symbols */ +static inline void alcor_and_xlt_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 register of the GRU */ + pld = (*(unsigned int *)GRU_INT_REQ) & GRU_INT_REQ_BITS; + +#if 0 + printk("[0x%08lx/0x%04x]", pld, inb(0x20) | (inb(0xA0) << 8)); +#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 == 31) { + isa_device_interrupt(vector, regs); + } else { + device_interrupt(16 + i, 16 + i, regs); + } + } + restore_flags(flags); +} +#endif /* ALCOR || XLT */ + static inline void cabriolet_and_eb66p_device_interrupt(unsigned long vector, struct pt_regs * regs) { @@ -655,6 +685,8 @@ #if defined(CONFIG_ALPHA_JENSEN) || defined(CONFIG_ALPHA_NONAME) || \ defined(CONFIG_ALPHA_P2K) || defined(CONFIG_ALPHA_SRM) srm_device_interrupt(vector, ®s); +#elif NR_IRQS == 48 + alcor_and_xlt_device_interrupt(vector, ®s); #elif NR_IRQS == 33 cabriolet_and_eb66p_device_interrupt(vector, ®s); #elif defined(CONFIG_ALPHA_MIKASA) @@ -684,9 +716,8 @@ dma_outb(0, DMA1_CLR_MASK_REG); dma_outb(0, DMA2_CLR_MASK_REG); #if NR_IRQS == 48 - *(unsigned int *)GRU_INT_MASK = ~(irq_mask >> 16); /* invert */ - mb(); - enable_irq(16 + 31); /* enable EISA PIC cascade */ + *(unsigned int *)GRU_INT_MASK = ~(irq_mask >> 16); mb();/* invert */ + enable_irq(16 + 31); /* enable (E)ISA PIC cascade */ #elif NR_IRQS == 33 outl(irq_mask >> 16, 0x804); enable_irq(16 + 4); /* enable SIO cascade */ diff -u --recursive --new-file v2.0.6/linux/arch/alpha/kernel/lca.c linux/arch/alpha/kernel/lca.c --- v2.0.6/linux/arch/alpha/kernel/lca.c Sat Feb 17 09:19:37 1996 +++ linux/arch/alpha/kernel/lca.c Mon Jul 15 09:47:41 1996 @@ -341,7 +341,7 @@ printk(" %s %s error to %s occurred at address %x\n", (esr & ESR_CEE) ? "Correctable" : ((esr & ESR_UEE) ? "Uncorrectable" : "A"), (esr & ESR_WRE) ? "write" : "read", - (esr & ESR_SOR) ? "b-cache" : "memory", + (esr & ESR_SOR) ? "memory" : "b-cache", (unsigned) (ear & 0x1ffffff8)); if (esr & ESR_CTE) { printk(" A b-cache tag parity error was detected.\n"); diff -u --recursive --new-file v2.0.6/linux/arch/alpha/lib/csum_partial_copy.c linux/arch/alpha/lib/csum_partial_copy.c --- v2.0.6/linux/arch/alpha/lib/csum_partial_copy.c Mon Jul 15 11:20:23 1996 +++ linux/arch/alpha/lib/csum_partial_copy.c Mon Jul 15 09:58:48 1996 @@ -8,10 +8,10 @@ */ #define ldq_u(x,y) \ -__asm__("ldq_u %0,%1":"=r" (x):"m" (*(unsigned long *)(y))) +__asm__ __volatile__("ldq_u %0,%1":"=r" (x):"m" (*(unsigned long *)(y))) #define stq_u(x,y) \ -__asm__("stq_u %1,%0":"=m" (*(unsigned long *)(y)):"r" (x)) +__asm__ __volatile__("stq_u %1,%0":"=m" (*(unsigned long *)(y)):"r" (x)) #define extql(x,y,z) \ __asm__ __volatile__("extql %1,%2,%0":"=r" (z):"r" (x),"r" (y)) @@ -36,12 +36,11 @@ */ static inline unsigned long csum_partial_copy_aligned( unsigned long *src, unsigned long *dst, - long len, unsigned long checksum) + long len, unsigned long checksum, + unsigned long word) { - unsigned long word, carry = 0; + unsigned long carry = 0; - len -= 8; - word = *src; while (len >= 0) { checksum += carry; src++; @@ -73,34 +72,33 @@ static inline unsigned long csum_partial_copy_dest_aligned( unsigned long *src, unsigned long *dst, unsigned long soff, - long len, unsigned long checksum) + long len, unsigned long checksum, + unsigned long first) { - unsigned long first, word, carry = 0; + unsigned long word, carry = 0; - len -= 8; - first = src[0]; while (len >= 0) { unsigned long second; - second = src[1]; + ldq_u(second, src+1); extql(first, soff, word); len -= 8; - extqh(second, soff, first); src++; - word |= first; + extqh(second, soff, first); checksum += carry; + word |= first; first = second; checksum += word; *dst = word; - carry = checksum < word; dst++; + carry = checksum < word; } len += 8; checksum += carry; if (len) { unsigned long tmp; unsigned long second; - second = src[1]; + ldq_u(second, src+1); tmp = *dst; extql(first, soff, word); extqh(second, soff, first); @@ -121,24 +119,22 @@ static inline unsigned long csum_partial_copy_src_aligned( unsigned long *src, unsigned long *dst, unsigned long doff, - long len, unsigned long checksum) + long len, unsigned long checksum, + unsigned long word, + unsigned long partial_dest) { - unsigned long word, carry = 0; - unsigned long partial_dest; + unsigned long carry = 0; - partial_dest = *dst; - len -= 8; mskql(partial_dest, doff, partial_dest); - word = *src; while (len >= 0) { unsigned long second_dest; len -= 8; + insql(word, doff, second_dest); checksum += carry; + stq_u(partial_dest | second_dest, dst); src++; checksum += word; - insql(word, doff, second_dest); - *dst = partial_dest | second_dest; insqh(word, doff, partial_dest); carry = checksum < word; word = *src; @@ -150,25 +146,27 @@ unsigned long second_dest; mskql(word, len-doff, word); - len -= 8; src++; checksum += word; insql(word, doff, second_dest); - *dst = partial_dest | second_dest; - insqh(word, doff, partial_dest); + stq_u(partial_dest | second_dest, dst); carry = checksum < word; - word = *src; - dst++; + if (len) { + ldq_u(second_dest, dst+1); + insqh(word, doff, partial_dest); + mskqh(second_dest, len, second_dest); + stq_u(partial_dest | second_dest, dst+1); + } checksum += carry; } else if (len & 7) { unsigned long second_dest; - second_dest = *dst; + ldq_u(second_dest, dst); mskql(word, len-doff, word); checksum += word; mskqh(second_dest, len, second_dest); carry = checksum < word; insql(word, doff, word); - *dst = partial_dest | word | second_dest; + stq_u(partial_dest | word | second_dest, dst); checksum += carry; } return checksum; @@ -181,30 +179,27 @@ static inline unsigned long csum_partial_copy_unaligned( unsigned long * src, unsigned long * dst, unsigned long soff, unsigned long doff, - long len, unsigned long checksum) + long len, unsigned long checksum, + unsigned long first, unsigned long partial_dest) { - unsigned long first, carry = 0; - unsigned long partial_dest; + unsigned long carry = 0; - partial_dest = dst[0]; - len -= 8; - first = src[0]; mskql(partial_dest, doff, partial_dest); while (len >= 0) { unsigned long second, word; unsigned long second_dest; - second = src[1]; + ldq_u(second, src+1); extql(first, soff, word); - len -= 8; checksum += carry; - src++; + len -= 8; extqh(second, soff, first); + src++; word |= first; first = second; - checksum += word; insql(word, doff, second_dest); - *dst = partial_dest | second_dest; + checksum += word; + stq_u(partial_dest | second_dest, dst); carry = checksum < word; insqh(word, doff, partial_dest); dst++; @@ -214,35 +209,40 @@ if (len >= 0) { unsigned long second, word; unsigned long second_dest; - - second = src[1]; + + ldq_u(second, src+1); extql(first, soff, word); - len -= 8; - src++; extqh(second, soff, first); word |= first; + src++; first = second; mskql(word, len-doff, word); checksum += word; insql(word, doff, second_dest); - *dst = partial_dest | second_dest; carry = checksum < word; - insqh(word, doff, partial_dest); - dst++; + stq_u(partial_dest | second_dest, dst); + if (len) { + ldq_u(second_dest, dst+1); + insqh(word, doff, partial_dest); + mskqh(second_dest, len, second_dest); + stq_u(partial_dest | second_dest, dst+1); + } + checksum += carry; } else if (len & 7) { unsigned long second, word; unsigned long second_dest; - second = src[1]; + + ldq_u(second, src+1); extql(first, soff, word); extqh(second, soff, first); word |= first; - second_dest = *dst; + ldq_u(second_dest, dst); mskql(word, len-doff, word); checksum += word; mskqh(second_dest, len, second_dest); carry = checksum < word; insql(word, doff, word); - *dst = partial_dest | word | second_dest; + stq_u(partial_dest | word | second_dest, dst); checksum += carry; } return checksum; @@ -254,31 +254,35 @@ unsigned long soff = 7 & (unsigned long) src; unsigned long doff = 7 & (unsigned long) dst; - src = (char *) (~7UL & (unsigned long) src); - dst = (char *) (~7UL & (unsigned long) dst); if (len) { - if (!soff) { - if (!doff) + unsigned long first; + ldq_u(first, src); + if (!doff) { + if (!soff) checksum = csum_partial_copy_aligned( (unsigned long *) src, (unsigned long *) dst, - len, checksum); + len-8, checksum, first); else - checksum = csum_partial_copy_src_aligned( + checksum = csum_partial_copy_dest_aligned( (unsigned long *) src, (unsigned long *) dst, - doff, len, checksum); + soff, len-8, checksum, first); } else { - if (!doff) - checksum = csum_partial_copy_dest_aligned( + unsigned long partial_dest; + ldq_u(partial_dest, dst); + if (!soff) + checksum = csum_partial_copy_src_aligned( (unsigned long *) src, (unsigned long *) dst, - soff, len, checksum); + doff, len-8, checksum, + first, partial_dest); else checksum = csum_partial_copy_unaligned( (unsigned long *) src, (unsigned long *) dst, - soff, doff, len, checksum); + soff, doff, len-8, checksum, + first, partial_dest); } /* 64 -> 33 bits */ checksum = (checksum & 0xffffffff) + (checksum >> 32); diff -u --recursive --new-file v2.0.6/linux/arch/i386/boot/compressed/misc.c linux/arch/i386/boot/compressed/misc.c --- v2.0.6/linux/arch/i386/boot/compressed/misc.c Sat Mar 9 13:31:43 1996 +++ linux/arch/i386/boot/compressed/misc.c Mon Jul 15 13:47:39 1996 @@ -350,7 +350,7 @@ void setup_output_buffer_if_we_run_high(struct moveparams *mv) { high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE); - if (EXT_MEM_K < (4*1024)) error("Less than 4MB of memory.\n"); + if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n"); mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START; high_loaded = 1; free_mem_end_ptr = (long)high_buffer_start; diff -u --recursive --new-file v2.0.6/linux/arch/m68k/atari/atafb.c linux/arch/m68k/atari/atafb.c --- v2.0.6/linux/arch/m68k/atari/atafb.c Tue May 21 19:52:31 1996 +++ linux/arch/m68k/atari/atafb.c Mon Jul 15 09:55:11 1996 @@ -109,7 +109,7 @@ short xoffset; short hht, hbb, hbe, hdb, hde, hss; short vft, vbb, vbe, vdb, vde, vss; - /* auxiliary informations */ + /* auxiliary information */ short mono; short ste_mode; short bpp; diff -u --recursive --new-file v2.0.6/linux/arch/mips/kernel/Makefile linux/arch/mips/kernel/Makefile --- v2.0.6/linux/arch/mips/kernel/Makefile Wed Dec 13 12:39:43 1995 +++ linux/arch/mips/kernel/Makefile Mon Jul 15 09:55:11 1996 @@ -63,11 +63,11 @@ endif ifdef CONFIG_CPU_R6000 - exit 1 # no detailed informations about CPU yet. + exit 1 # no detailed information about CPU yet. endif ifdef CONFIG_CPU_R8000 - exit 1 # no detailed informations about CPU yet. + exit 1 # no detailed information about CPU yet. endif ifdef CONFIG_CPU_R10000 diff -u --recursive --new-file v2.0.6/linux/drivers/block/loop.c linux/drivers/block/loop.c --- v2.0.6/linux/drivers/block/loop.c Wed Jul 3 22:05:07 1996 +++ linux/drivers/block/loop.c Mon Jul 15 13:47:39 1996 @@ -48,6 +48,7 @@ #define MAX_LOOP 8 static struct loop_device loop_dev[MAX_LOOP]; static int loop_sizes[MAX_LOOP]; +static int loop_blksizes[MAX_LOOP]; /* * Transfer functions @@ -170,6 +171,7 @@ else size = MAX_DISK_SIZE; } + loop_sizes[lo->lo_number] = size; } @@ -202,7 +204,7 @@ offset = 0; } else { block = CURRENT->sector / (blksize >> 9); - offset = CURRENT->sector % (blksize >> 9); + offset = (CURRENT->sector % (blksize >> 9)) << 9; } block += lo->lo_offset / blksize; offset += lo->lo_offset % blksize; @@ -211,6 +213,7 @@ offset -= blksize; } len = CURRENT->current_nr_sectors << 9; + if (CURRENT->cmd == WRITE) { if (lo->lo_flags & LO_FLAGS_READ_ONLY) goto error_out; @@ -552,7 +555,9 @@ loop_dev[i].lo_number = i; } memset(&loop_sizes, 0, sizeof(loop_sizes)); + memset(&loop_blksizes, 0, sizeof(loop_blksizes)); blk_size[MAJOR_NR] = loop_sizes; + blksize_size[MAJOR_NR] = loop_blksizes; return 0; } diff -u --recursive --new-file v2.0.6/linux/drivers/cdrom/sbpcd.c linux/drivers/cdrom/sbpcd.c --- v2.0.6/linux/drivers/cdrom/sbpcd.c Sat Jul 6 14:51:23 1996 +++ linux/drivers/cdrom/sbpcd.c Mon Jul 15 09:55:10 1996 @@ -4446,6 +4446,7 @@ /*==========================================================================*/ /* * special end_request for sbpcd to solve CURRENT==NULL bug. (GTL) + * GTL = Gonzalo Tornaria * * This is a kluge so we don't need to modify end_request * We put the req we take out after INIT_REQUEST in the requests list, diff -u --recursive --new-file v2.0.6/linux/drivers/char/cp437.uni linux/drivers/char/cp437.uni --- v2.0.6/linux/drivers/char/cp437.uni Tue Jun 13 10:47:47 1995 +++ linux/drivers/char/cp437.uni Mon Jul 15 09:57:04 1996 @@ -28,8 +28,8 @@ 0x0d U+266a 0x0e U+266b 0x0f U+263c -0x10 U+25ba -0x11 U+25c4 +0x10 U+25b6 U+25ba +0x11 U+25c0 U+25c4 0x12 U+2195 0x13 U+203c 0x14 U+00b6 diff -u --recursive --new-file v2.0.6/linux/drivers/scsi/ChangeLog.ncr53c8xx linux/drivers/scsi/ChangeLog.ncr53c8xx --- v2.0.6/linux/drivers/scsi/ChangeLog.ncr53c8xx Sat Jul 6 14:51:24 1996 +++ linux/drivers/scsi/ChangeLog.ncr53c8xx Mon Jul 15 09:55:20 1996 @@ -1,4 +1,21 @@ -Mon Jul 03 23:00 1996 Gerard Roudier (groudier@club-internet.fr) +Sun Jul 14 15:00 1996 Gerard Roudier (groudier@club-internet.fr) + * ncr53c8xx.c, Configure.help + Memory mapped io donnot work under linux/Alpha for the driver. + For the moment it is better to not support this feature for this + architecture. + +Tue Jul 09 20:00 1996 Gerard Roudier (groudier@club-internet.fr) + * ncr53c8xx.c + Garbage printed out with the following command (fixed): + - cat /proc/scsi/ncr53c8xx/0 + +Sun Jul 07 20:00 1996 Gerard Roudier (groudier@club-internet.fr) + * ncr53c8xx.c + Tagged command queueing cannot be disabled at run time. + I probably never try that because I felt the risk. + Shortest patch sent to Linus. I have to plan something better. + +Wed Jul 03 23:00 1996 Gerard Roudier (groudier@club-internet.fr) Release 1.12a Tested linux releases: 1.2.13, 2.0.0, 2.0.1 @@ -271,7 +288,7 @@ I receive a mail from Jason Duerstock. A new bug in ncrBsd2Linux which is probably outside the driver code and inside Linux kernel code. - The kernel memory is quite corrupted and we cannot get any informations + The kernel memory is quite corrupted and we cannot get any information by looking into the messages about the crash. However Linus see a bug in ncrBsd2Linux because it is a "non standard" driver. I think too that ncrBsd2Linux is not a standard driver of Linux kernel, diff -u --recursive --new-file v2.0.6/linux/drivers/scsi/ncr53c8xx.c linux/drivers/scsi/ncr53c8xx.c --- v2.0.6/linux/drivers/scsi/ncr53c8xx.c Mon Jul 15 11:20:23 1996 +++ linux/drivers/scsi/ncr53c8xx.c Mon Jul 15 09:55:20 1996 @@ -243,7 +243,7 @@ #define NCR_SNOOP_TIMEOUT (1000000) -#ifdef SCSI_NCR_IOMAPPED +#if defined(SCSI_NCR_IOMAPPED) || defined(__alpha__) #define NCR_IOMAPPED #endif @@ -6546,9 +6546,14 @@ np->script->start1[0] = SCR_INT; /* + ** For the moment tagged transfers cannot be disabled. + */ +#if 0 + /* ** Try to disable tagged transfers. */ ncr_setmaxtags (np, &np->target[target], 0); +#endif /* ** @QUEUE@ diff -u --recursive --new-file v2.0.6/linux/drivers/sound/Readme.aedsp16 linux/drivers/sound/Readme.aedsp16 --- v2.0.6/linux/drivers/sound/Readme.aedsp16 Sun Mar 24 22:49:46 1996 +++ linux/drivers/sound/Readme.aedsp16 Mon Jul 15 09:55:11 1996 @@ -1,6 +1,6 @@ -Informations about Audio Excel DSP 16 can be found in the source +Information about Audio Excel DSP 16 can be found in the source file aedsp16.c Please, read the head of the source before using it. It contain useful -informations. +information. Riccardo diff -u --recursive --new-file v2.0.6/linux/drivers/sound/aedsp16.c linux/drivers/sound/aedsp16.c --- v2.0.6/linux/drivers/sound/aedsp16.c Sat Jul 6 14:51:25 1996 +++ linux/drivers/sound/aedsp16.c Mon Jul 15 09:55:11 1996 @@ -349,7 +349,7 @@ }; /* - * Buffers to store audio card informations + * Buffers to store audio card information */ static char AudioExcelName[CARDNAMELEN + 1]; static char AudioExcelVersion[CARDVERLEN + 1]; diff -u --recursive --new-file v2.0.6/linux/include/asm-alpha/cia.h linux/include/asm-alpha/cia.h --- v2.0.6/linux/include/asm-alpha/cia.h Wed Jun 5 10:41:29 1996 +++ linux/include/asm-alpha/cia.h Mon Jul 15 11:34:11 1996 @@ -1,6 +1,7 @@ #ifndef __ALPHA_CIA__H__ #define __ALPHA_CIA__H__ +#include #include /* @@ -169,6 +170,14 @@ #define GRU_SCR (IDENT_ADDR + 0x8780000300UL) #define GRU_LED (IDENT_ADDR + 0x8780000800UL) #define GRU_RESET (IDENT_ADDR + 0x8780000900UL) + +#if defined(CONFIG_ALPHA_ALCOR) +#define GRU_INT_REQ_BITS 0x800fffffUL +#elif defined(CONFIG_ALPHA_XLT) +#define GRU_INT_REQ_BITS 0x80003fffUL +#else +#define GRU_INT_REQ_BITS 0xffffffffUL +#endif /* * Bit definitions for I/O Controller status register 0: diff -u --recursive --new-file v2.0.6/linux/include/asm-alpha/irq.h linux/include/asm-alpha/irq.h --- v2.0.6/linux/include/asm-alpha/irq.h Wed Jun 5 10:41:29 1996 +++ linux/include/asm-alpha/irq.h Mon Jul 15 09:47:42 1996 @@ -14,7 +14,7 @@ # define NR_IRQS 33 #elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P) || defined(CONFIG_ALPHA_MIKASA) # define NR_IRQS 32 -#elif defined(CONFIG_ALPHA_ALCOR) +#elif defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT) # define NR_IRQS 48 #else # define NR_IRQS 16 diff -u --recursive --new-file v2.0.6/linux/include/linux/pci.h linux/include/linux/pci.h --- v2.0.6/linux/include/linux/pci.h Mon Jul 15 11:20:24 1996 +++ linux/include/linux/pci.h Mon Jul 15 09:55:11 1996 @@ -22,7 +22,7 @@ /* PROCEDURE TO REPORT NEW PCI DEVICES - * We are trying to collect informations on new PCI devices, using + * We are trying to collect information on new PCI devices, using * the standard PCI identification procedure. If some warning is * displayed at boot time, please report * - /proc/pci diff -u --recursive --new-file v2.0.6/linux/kernel/sys.c linux/kernel/sys.c --- v2.0.6/linux/kernel/sys.c Wed Jul 3 22:05:23 1996 +++ linux/kernel/sys.c Mon Jul 15 08:13:53 1996 @@ -636,8 +636,11 @@ { struct task_struct * p; + if (current->leader) + return -EPERM; + for_each_task(p) { - if (p->pgrp == current->pid) + if (p != current && p->pgrp == current->pid) return -EPERM; } diff -u --recursive --new-file v2.0.6/linux/net/socket.c linux/net/socket.c --- v2.0.6/linux/net/socket.c Sat Jul 6 12:07:14 1996 +++ linux/net/socket.c Mon Jul 15 11:31:51 1996 @@ -944,17 +944,22 @@ err=verify_area(VERIFY_READ,buff,len); if(err) return err; - - if((err=move_addr_to_kernel(addr,addr_len,address))<0) - return err; - + iov.iov_base=buff; iov.iov_len=len; - msg.msg_name=address; - msg.msg_namelen=addr_len; + msg.msg_name = NULL; + msg.msg_namelen = 0; msg.msg_iov=&iov; msg.msg_iovlen=1; msg.msg_control=NULL; + if (addr && addr_len) { + err=move_addr_to_kernel(addr,addr_len,address); + if (err < 0) + return err; + msg.msg_name=address; + msg.msg_namelen=addr_len; + } + return(sock->ops->sendmsg(sock, &msg, len, (file->f_flags & O_NONBLOCK), flags)); }