[PARPORT] [2.0.36 PATCH] PARIDE update


grant@torque.net
Sun, 20 Dec 1998 20:25:24 -0500 (EST)


Hi Alan

I sent you a set of patches for 2.0.37 a few days ago. As it turns out
there was one small bug. Below is a new version of the same patch set,
it fixes the bug and also includes support for the power switching functions
of the new 'friq' protocol. (This allows Linux to support the new
battery powered "Traveller" CD-ROM drive from Freecom.)

These patches are against 2.0.36, and they completely replace
the previous set.. Please apply them for 2.0.37.

I have also sent the corresponding patches to Linus for inclusion in
2.1.132.

diff -urN linux-2.0.36-ref/Documentation/Configure.help linux/Documentation/Configure.help
--- linux-2.0.36-ref/Documentation/Configure.help Sun Nov 15 13:32:42 1998
+++ linux/Documentation/Configure.help Tue Dec 15 13:18:37 1998
@@ -483,6 +483,16 @@
   be called fit3.o. You must also have a high-level driver for the
   type of device that you want to support.
 
+Freecom IQ ASIC-2 protocol
+CONFIG_PARIDE_FRIQ
+ This option enables support for version 2 of the Freecom IQ parallel
+ port IDE adapter. This adapter is used by the Maxell Superdisk
+ drive. If you chose to build PARIDE support into your kernel, you
+ may answer Y here to build in the protocol driver, otherwise you
+ should answer M to build it as a loadable module. The module will be
+ called friq.o. You must also have a high-level driver for the type
+ of device that you want to support.
+
 FreeCom power protocol
 CONFIG_PARIDE_FRPW
   This option enables support for the Freecom power parallel port IDE
diff -urN linux-2.0.36-ref/Documentation/paride.txt linux/Documentation/paride.txt
--- linux-2.0.36-ref/Documentation/paride.txt Sun Nov 15 13:32:44 1998
+++ linux/Documentation/paride.txt Tue Dec 15 13:18:37 1998
@@ -64,6 +64,7 @@
         SyQuest EZ-135, EZ-230 & SparQ drives
         Avatar Shark
         Imation Superdisk LS-120
+ Maxell Superdisk LS-120
         FreeCom Power CD
         Hewlett-Packard 5GB and 8GB tape drives
         Hewlett-Packard 7100 and 7200 CD-RW drives
@@ -98,6 +99,7 @@
         epia Shuttle EPIA (UK)
         fit2 FIT TD-2000 (US)
         fit3 FIT TD-3000 (US)
+ friq Freecom IQ cable (DE)
         frpw Freecom Power (DE)
         kbic KingByte KBIC-951A and KBIC-971A (TW)
         ktti KT Technology PHd adapter (SG)
@@ -133,10 +135,12 @@
         MicroSolutions 8000t tape pt bpck
         SyQuest EZ, SparQ pd epat
         Imation Superdisk pf epat
+ Maxell Superdisk pf friq
         Avatar Shark pd epat
         FreeCom CD-ROM pcd frpw
         Hewlett-Packard 5GB Tape pt epat
- Hewlett-Packard 7100/7200 pg epat
+ Hewlett-Packard 7200e (CD) pcd epat
+ Hewlett-Packard 7200e (CD-R) pg epat
 
 2.1 Configuring built-in drivers
 
@@ -315,7 +319,6 @@
 partitioned. Consequently, the pf driver does not support partitioned
 media. This may be changed in a future version of the driver.
 
-
 2.5 Using the pt driver
 
 The pt driver for parallel port ATAPI tape drives is a minimal driver.
@@ -323,27 +326,29 @@
 For best performance, a block size of 32KB should be used. You will
 probably want to set the parallel port delay to 0, if you can.
 
-
 2.6 Using the pg driver
 
 The pg driver can be used in conjunction with the cdrecord program
-to create CD-ROMs. Please get cdrecord version 1.6.1a3 or later
-from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ (you may have to look
-in the alpha subdirectory). To record CD-R media your parallel port
-should ideally be set to EPP mode, and the "port delay" should be
-set to 0. With those settings it is possible to record at 2x speed
-without any buffer underruns. If you cannot get the driver to work
+to create CD-ROMs. Please get cdrecord version 1.6.1 or later
+from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . To record CD-R media
+your parallel port should ideally be set to EPP mode, and the "port delay"
+should be set to 0. With those settings it is possible to record at 2x
+speed without any buffer underruns. If you cannot get the driver to work
 in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only.
 
 
 3. Troubleshooting
 
+3.1 Use EPP mode if you can
+
 The most common problems that people report with the PARIDE drivers
 concern the parallel port CMOS settings. At this time, none of the
 PARIDE protocol modules support ECP mode, or any ECP combination modes.
 If you are able to do so, please set your parallel port into EPP mode
 using your CMOS setup procedure.
 
+3.2 Check the port delay
+
 Some parallel ports cannot reliably transfer data at full speed. To
 offset the errors, the PARIDE protocol modules introduce a "port
 delay" between each access to the i/o ports. Each protocol sets
@@ -357,6 +362,25 @@
 read the comments at the beginning of the driver source files in
 linux/drivers/block/paride.
 
+3.3 Some drives need a printer reset
+
+There appear to be a number of "noname" external drives on the market
+that do not always power up correctly. We have noticed this with some
+drives based on OnSpec and older Freecom adapters. In these rare cases,
+the adapter can often be reinitialised by issuing a "printer reset" on
+the parallel port. As the reset operation is potentially disruptive in
+multiple device environments, the PARIDE drivers will not do it
+automatically. You can however, force a printer reset by doing:
+
+ insmod lp
+ rmmod lp
+
+If you have one of these marginal cases, you should probably build
+your paride drivers as modules, and arrange to do the printer reset
+before loading the PARIDE drivers.
+
+3.4 Use the verbose option and dmesg if you need help
+
 While a lot of testing has gone into these drivers to make them work
 as smoothly as possible, problems will arise. If you do have problems,
 please check all the obvious things first: does the drive work in
@@ -383,6 +407,8 @@
 of two ways. Either send it directly to the author of the PARIDE suite,
 by e-mail to grant@torque.net, or join the linux-parport mailing list
 and post your report there.
+
+3.5 For more information or help
 
 You can join the linux-parport mailing list by sending a mail message
 to
diff -urN linux-2.0.36-ref/drivers/block/paride/Config.in linux/drivers/block/paride/Config.in
--- linux-2.0.36-ref/drivers/block/paride/Config.in Mon Jul 13 16:47:28 1998
+++ linux/drivers/block/paride/Config.in Tue Dec 15 13:18:37 1998
@@ -16,6 +16,7 @@
 dep_tristate ' FIT TD-3000 protocol' CONFIG_PARIDE_FIT3 $CONFIG_PARIDE
 dep_tristate ' Shuttle EPAT/EPEZ protocol' CONFIG_PARIDE_EPAT $CONFIG_PARIDE
 dep_tristate ' Shuttle EPIA protocol' CONFIG_PARIDE_EPIA $CONFIG_PARIDE
+dep_tristate ' Freecom IQ ASIC-2 protocol' CONFIG_PARIDE_FRIQ $CONFIG_PARIDE
 dep_tristate ' FreeCom power protocol' CONFIG_PARIDE_FRPW $CONFIG_PARIDE
 dep_tristate ' KingByte KBIC-951A/971A protocols' CONFIG_PARIDE_KBIC $CONFIG_PARIDE
 dep_tristate ' KT PHd protocol' CONFIG_PARIDE_KTTI $CONFIG_PARIDE
diff -urN linux-2.0.36-ref/drivers/block/paride/Makefile linux/drivers/block/paride/Makefile
--- linux-2.0.36-ref/drivers/block/paride/Makefile Sun Nov 15 13:32:52 1998
+++ linux/drivers/block/paride/Makefile Tue Dec 15 13:18:37 1998
@@ -147,6 +147,15 @@
   endif
 endif
 
+
+ifeq ($(CONFIG_PARIDE_FRIQ),y)
+ LX_OBJS += friq.o
+else
+ ifeq ($(CONFIG_PARIDE_FRIQ),m)
+ M_OBJS += friq.o
+ endif
+endif
+
 ifeq ($(CONFIG_PARIDE_ON20),y)
   LX_OBJS += on20.o
 else
diff -urN linux-2.0.36-ref/drivers/block/paride/friq.c linux/drivers/block/paride/friq.c
--- linux-2.0.36-ref/drivers/block/paride/friq.c Wed Dec 31 19:00:00 1969
+++ linux/drivers/block/paride/friq.c Sun Dec 20 19:04:09 1998
@@ -0,0 +1,282 @@
+/*
+ friq.c (c) 1998 Grant R. Guenther <grant@torque.net>
+ Under the terms of the GNU public license
+
+ friq.c is a low-level protocol driver for the Freecom "IQ"
+ parallel port IDE adapter. Early versions of this adapter
+ use the 'frpw' protocol.
+
+ Freecom uses this adapter in a battery powered external
+ CD-ROM drive. It is also used in LS-120 drives by
+ Maxell and Panasonic, and other devices.
+
+ The battery powered drive requires software support to
+ control the power to the drive. This module enables the
+ drive power when the high level driver (pcd) is loaded
+ and disables it when the module is unloaded. Note, if
+ the friq module is built in to the kernel, the power
+ will never be switched off, so other means should be
+ used to conserve battery power.
+
+*/
+
+/* Changes:
+
+ 1.01 GRG 1998.12.20 Added support for soft power switch
+*/
+
+#define FRIQ_VERSION "1.01"
+
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <asm/io.h>
+
+#include "paride.h"
+
+#define CMD(x) w2(4);w0(0xff);w0(0xff);w0(0x73);w0(0x73);\
+ w0(0xc9);w0(0xc9);w0(0x26);w0(0x26);w0(x);w0(x);
+
+#define j44(l,h) (((l>>4)&0x0f)|(h&0xf0))
+
+/* cont = 0 - access the IDE register file
+ cont = 1 - access the IDE command set
+*/
+
+static int cont_map[2] = { 0x08, 0x10 };
+
+static int friq_read_regr( PIA *pi, int cont, int regr )
+
+{ int h,l,r;
+
+ r = regr + cont_map[cont];
+
+ CMD(r);
+ w2(6); l = r1();
+ w2(4); h = r1();
+ w2(4);
+
+ return j44(l,h);
+
+}
+
+static void friq_write_regr( PIA *pi, int cont, int regr, int val)
+
+{ int r;
+
+ r = regr + cont_map[cont];
+
+ CMD(r);
+ w0(val);
+ w2(5);w2(7);w2(5);w2(4);
+}
+
+static void friq_read_block_int( PIA *pi, char * buf, int count, int regr )
+
+{ int h, l, k, ph;
+
+ switch(pi->mode) {
+
+ case 0: CMD(regr);
+ for (k=0;k<count;k++) {
+ w2(6); l = r1();
+ w2(4); h = r1();
+ buf[k] = j44(l,h);
+ }
+ w2(4);
+ break;
+
+ case 1: ph = 2;
+ CMD(regr+0xc0);
+ w0(0xff);
+ for (k=0;k<count;k++) {
+ w2(0xa4 + ph);
+ buf[k] = r0();
+ ph = 2 - ph;
+ }
+ w2(0xac); w2(0xa4); w2(4);
+ break;
+
+ case 2: CMD(regr+0x80);
+ for (k=0;k<count-2;k++) buf[k] = r4();
+ w2(0xac); w2(0xa4);
+ buf[count-2] = r4();
+ buf[count-1] = r4();
+ w2(4);
+ break;
+
+ case 3: CMD(regr+0x80);
+ for (k=0;k<(count/2)-1;k++) ((u16 *)buf)[k] = r4w();
+ w2(0xac); w2(0xa4);
+ buf[count-2] = r4();
+ buf[count-1] = r4();
+ w2(4);
+ break;
+
+ case 4: CMD(regr+0x80);
+ for (k=0;k<(count/4)-1;k++) ((u32 *)buf)[k] = r4l();
+ buf[count-4] = r4();
+ buf[count-3] = r4();
+ w2(0xac); w2(0xa4);
+ buf[count-2] = r4();
+ buf[count-1] = r4();
+ w2(4);
+ break;
+
+ }
+}
+
+static void friq_read_block( PIA *pi, char * buf, int count)
+
+{ friq_read_block_int(pi,buf,count,0x08);
+}
+
+static void friq_write_block( PIA *pi, char * buf, int count )
+
+{ int k;
+
+ switch(pi->mode) {
+
+ case 0:
+ case 1: CMD(8); w2(5);
+ for (k=0;k<count;k++) {
+ w0(buf[k]);
+ w2(7);w2(5);
+ }
+ w2(4);
+ break;
+
+ case 2: CMD(0xc8); w2(5);
+ for (k=0;k<count;k++) w4(buf[k]);
+ w2(4);
+ break;
+
+ case 3: CMD(0xc8); w2(5);
+ for (k=0;k<count/2;k++) w4w(((u16 *)buf)[k]);
+ w2(4);
+ break;
+
+ case 4: CMD(0xc8); w2(5);
+ for (k=0;k<count/4;k++) w4l(((u32 *)buf)[k]);
+ w2(4);
+ break;
+ }
+}
+
+static void friq_connect ( PIA *pi )
+
+{ pi->saved_r0 = r0();
+ pi->saved_r2 = r2();
+ w2(4);
+}
+
+static void friq_disconnect ( PIA *pi )
+
+{ CMD(0x20);
+ w0(pi->saved_r0);
+ w2(pi->saved_r2);
+}
+
+static int friq_test_proto( PIA *pi, char * scratch, int verbose )
+
+{ int j, k, r;
+ int e[2] = {0,0};
+
+ pi->saved_r0 = r0();
+ w0(0xff); udelay(20); CMD(0x3d); /* turn the power on */
+ udelay(500);
+ w0(pi->saved_r0);
+
+ friq_connect(pi);
+ for (j=0;j<2;j++) {
+ friq_write_regr(pi,0,6,0xa0+j*0x10);
+ for (k=0;k<256;k++) {
+ friq_write_regr(pi,0,2,k^0xaa);
+ friq_write_regr(pi,0,3,k^0x55);
+ if (friq_read_regr(pi,0,2) != (k^0xaa)) e[j]++;
+ }
+ }
+ friq_disconnect(pi);
+
+ friq_connect(pi);
+ friq_read_block_int(pi,scratch,512,0x10);
+ r = 0;
+ for (k=0;k<128;k++) if (scratch[k] != k) r++;
+ friq_disconnect(pi);
+
+ if (verbose) {
+ printk("%s: friq: port 0x%x, mode %d, test=(%d,%d,%d)\n",
+ pi->device,pi->port,pi->mode,e[0],e[1],r);
+ }
+
+ return (r || (e[0] && e[1]));
+}
+
+
+static void friq_log_adapter( PIA *pi, char * scratch, int verbose )
+
+{ char *mode_string[6] = {"4-bit","8-bit",
+ "EPP-8","EPP-16","EPP-32"};
+
+ printk("%s: friq %s, Freecom IQ ASIC-2 adapter at 0x%x, ", pi->device,
+ FRIQ_VERSION,pi->port);
+ printk("mode %d (%s), delay %d\n",pi->mode,
+ mode_string[pi->mode],pi->delay);
+
+ pi->private = 1;
+ friq_connect(pi);
+ CMD(0x9e); /* disable sleep timer */
+ friq_disconnect(pi);
+
+}
+
+static void friq_init_proto( PIA *pi)
+
+{ MOD_INC_USE_COUNT;
+ pi->private = 0;
+}
+
+static void friq_release_proto( PIA *pi)
+
+{ if (pi->private) { /* turn off the power */
+ friq_connect(pi);
+ CMD(0x1d); CMD(0x1e);
+ friq_disconnect(pi);
+ pi->private = 0;
+ }
+
+ MOD_DEC_USE_COUNT;
+}
+
+struct pi_protocol friq = {"friq",0,5,2,1,1,
+ friq_write_regr,
+ friq_read_regr,
+ friq_write_block,
+ friq_read_block,
+ friq_connect,
+ friq_disconnect,
+ 0,
+ 0,
+ friq_test_proto,
+ friq_log_adapter,
+ friq_init_proto,
+ friq_release_proto
+ };
+
+
+#ifdef MODULE
+
+int init_module(void)
+
+{ return pi_register( &friq ) - 1;
+}
+
+void cleanup_module(void)
+
+{ pi_unregister( &friq );
+}
+
+#endif
+
+/* end of friq.c */
diff -urN linux-2.0.36-ref/drivers/block/paride/frpw.c linux/drivers/block/paride/frpw.c
--- linux-2.0.36-ref/drivers/block/paride/frpw.c Sun Nov 15 13:32:52 1998
+++ linux/drivers/block/paride/frpw.c Tue Dec 15 13:18:37 1998
@@ -5,6 +5,12 @@
         frpw.c is a low-level protocol driver for the Freecom "Power"
         parallel port IDE adapter.
         
+ Some applications of this adapter may require a "printer" reset
+ prior to loading the driver. This can be done by loading and
+ unloading the "lp" driver, or it can be done by this driver
+ if you define FRPW_HARD_RESET. The latter is not recommended
+ as it may upset devices on other ports.
+
 */
 
 /* Changes:
@@ -13,10 +19,11 @@
                                fix chip detect
                                added EPP-16 and EPP-32
         1.02 GRG 1998.09.23 added hard reset to initialisation process
+ 1.03 GRG 1998.12.14 made hard reset conditional
 
 */
 
-#define FRPW_VERSION "1.02"
+#define FRPW_VERSION "1.03"
 
 #include <linux/module.h>
 #include <linux/delay.h>
@@ -185,8 +192,10 @@
 
 { int olddelay, a, b;
 
+#ifdef FRPW_HARD_RESET
         w0(0); w2(8); udelay(50); w2(0xc); /* parallel bus reset */
         udelay(1500000);
+#endif
 
         olddelay = pi->delay;
         pi->delay = 10;
diff -urN linux-2.0.36-ref/drivers/block/paride/jumbo linux/drivers/block/paride/jumbo
--- linux-2.0.36-ref/drivers/block/paride/jumbo Sun Nov 15 13:32:52 1998
+++ linux/drivers/block/paride/jumbo Tue Dec 15 13:18:37 1998
@@ -53,11 +53,11 @@
 FK="-D__KERNEL__ -I ../../../include"
 FLCH=-D_LINUX_CONFIG_H
 #
-echo cc $FK $FSMP $FLCH $FPARP $FPROTO -Wall -O2 -o Jb.o -c paride.c
-cc $FK $FSMP $FLCH $FPARP $FPROTO -Wall -O2 -o Jb.o -c paride.c
+echo cc $FK $FSMP $FLCH $FPARP $FPROTO $FMODV -Wall -O2 -o Jb.o -c paride.c
+cc $FK $FSMP $FLCH $FPARP $FPROTO $FMODV -Wall -O2 -o Jb.o -c paride.c
 #
-echo cc $FK $FSMP -Wall -O2 -o Jp.o -c $PROTO.c
-cc $FK $FSMP -Wall -O2 -o Jp.o -c $PROTO.c
+echo cc $FK $FSMP $FMODV -Wall -O2 -o Jp.o -c $PROTO.c
+cc $FK $FSMP $FMODV -Wall -O2 -o Jp.o -c $PROTO.c
 #
 echo cc $FK $FSMP $FMODV -DMODULE -DPARIDE_JUMBO -Wall -O2 -o Jd.o -c $HLD.c
 cc $FK $FSMP $FMODV -DMODULE -DPARIDE_JUMBO -Wall -O2 -o Jd.o -c $HLD.c
diff -urN linux-2.0.36-ref/drivers/block/paride/on26.c linux/drivers/block/paride/on26.c
--- linux-2.0.36-ref/drivers/block/paride/on26.c Sun Nov 15 13:32:52 1998
+++ linux/drivers/block/paride/on26.c Sun Dec 20 19:04:14 1998
@@ -11,10 +11,12 @@
 
         1.01 GRG 1998.05.06 init_proto, release_proto
         1.02 GRG 1998.09.23 updates for the -E rev chip
+ 1.03 GRG 1998.12.14 fix for slave drives
+ 1.04 GRG 1998.12.20 yet another bug fix
 
 */
 
-#define ON26_VERSION "1.02"
+#define ON26_VERSION "1.04"
 
 #include <linux/module.h>
 #include <linux/delay.h>
@@ -118,9 +120,11 @@
         w2(pi->saved_r2);
 }
 
+#define RESET_WAIT 200
+
 static int on26_test_port( PIA *pi) /* hard reset */
 
-{ int i, m, d;
+{ int i, m, d, x, y;
 
         pi->saved_r0 = r0();
         pi->saved_r2 = r2();
@@ -151,11 +155,18 @@
             
             on26_write_regr(pi,0,6,0xa0);
 
- for (i=0;i<100;i++) {
- if (!(on26_read_regr(pi,0,7) & 0x80)) break;
+ for (i=0;i<RESET_WAIT;i++) {
+ on26_write_regr(pi,0,6,0xa0);
+ x = on26_read_regr(pi,0,7);
+ on26_write_regr(pi,0,6,0xb0);
+ y = on26_read_regr(pi,0,7);
+ if (!((x&0x80)||(y&0x80))) break;
                 udelay(100000);
             }
 
+ if (i == RESET_WAIT)
+ printk("on26: Device reset failed (%x,%x)\n",x,y);
+
             w0(4); P1; w0(4); P1;
         }
 
@@ -189,7 +200,7 @@
         case 1: w0(1); P1; w0(1); P2; w0(2); P1; w0(0x19); P2; w0(0); P1;
                 udelay(10);
                 for (k=0;k<count/2;k++) {
- w2(0x26); buf[2*k] = r0();
+ w2(0x26); buf[2*k] = r0();
                         w2(0x24); buf[2*k+1] = r0();
                 }
                 w0(2); P1; w0(9); P2;
diff -urN linux-2.0.36-ref/drivers/block/paride/paride.c linux/drivers/block/paride/paride.c
--- linux-2.0.36-ref/drivers/block/paride/paride.c Mon Jul 13 16:47:28 1998
+++ linux/drivers/block/paride/paride.c Tue Dec 15 13:29:38 1998
@@ -11,10 +11,12 @@
 
         1.01 GRG 1998.05.03 Use spinlocks
         1.02 GRG 1998.05.05 init_proto, release_proto, ktti
+ 1.03 GRG 1998.08.15 eliminate compiler warning
+ 1.04 GRG 1998.11.28 added support for FRIQ
 
 */
 
-#define PI_VERSION "1.02"
+#define PI_VERSION "1.04"
 
 #include <linux/module.h>
 #include <linux/config.h>
@@ -449,6 +451,11 @@
           pi_register(&frpw);
         };
 #endif
+#ifdef CONFIG_PARIDE_FRIQ
+ { extern struct pi_protocol friq;
+ pi_register(&friq);
+ };
+#endif
 #ifdef CONFIG_PARIDE_FIT2
         { extern struct pi_protocol fit2;
           pi_register(&fit2);
diff -urN linux-2.0.36-ref/drivers/block/paride/pseudo.h linux/drivers/block/paride/pseudo.h
--- linux-2.0.36-ref/drivers/block/paride/pseudo.h Mon Jul 13 16:47:28 1998
+++ linux/drivers/block/paride/pseudo.h Tue Dec 15 21:32:20 1998
@@ -16,19 +16,21 @@
         when either it returns true, or timeout jiffies have passed,
         continuation() will be invoked.
 
- If nice is true, the test will done approximately once a
+ If nice is 1, the test will done approximately once a
         jiffy. If nice is 0, the test will also be done whenever
- the scheduler runs (by adding it to a task queue).
+ the scheduler runs (by adding it to a task queue). If
+ nice is greater than 1, the test will be done once every
+ (nice-1) jiffies.
 
 */
 
 /* Changes:
 
         1.01 1998.05.03 Switched from cli()/sti() to spinlocks
-
+ 1.02 1998.12.14 Added support for nice > 1
 */
         
-#define PS_VERSION "1.01"
+#define PS_VERSION "1.02"
 
 #include <linux/sched.h>
 #include <linux/timer.h>
@@ -37,13 +39,13 @@
 static void ps_timer_int( unsigned long data);
 static void ps_tq_int( void *data);
 
-static int ps_use_tq = 1;
 static void (* ps_continuation)(void);
 static int (* ps_ready)(void);
 static int ps_then;
 static int ps_timeout;
 static int ps_timer_active = 0;
 static int ps_tq_active = 0;
+static int ps_nice = 0;
 
 /* static spinlock_t ps_spinlock = SPIN_LOCK_UNLOCKED; */
 
@@ -62,9 +64,9 @@
         ps_ready = ready;
         ps_then = jiffies;
         ps_timeout = jiffies + timeout;
- ps_use_tq = !nice;
+ ps_nice = nice;
 
- if (ps_use_tq && !ps_tq_active) {
+ if (!ps_nice && !ps_tq_active) {
 #ifdef HAVE_DISABLE_HLT
                 disable_hlt();
 #endif
@@ -74,7 +76,7 @@
 
         if (!ps_timer_active) {
                 ps_timer_active = 1;
- ps_timer.expires = jiffies;
+ ps_timer.expires = jiffies + ((ps_nice>0)?(ps_nice-1):0);
                 add_timer(&ps_timer);
         }
 
@@ -136,7 +138,7 @@
                 return;
                 }
         ps_timer_active = 1;
- ps_timer.expires = jiffies;
+ ps_timer.expires = jiffies + ((ps_nice>0)?(ps_nice-1):0);
         add_timer(&ps_timer);
         spin_unlock_irqrestore(&ps_spinlock,flags);
 }
diff -urN linux-2.0.36-ref/drivers/block/paride/pt.c linux/drivers/block/paride/pt.c
--- linux-2.0.36-ref/drivers/block/paride/pt.c Sun Nov 15 13:32:52 1998
+++ linux/drivers/block/paride/pt.c Tue Dec 15 13:18:38 1998
@@ -464,7 +464,7 @@
 
 { int k, e, s;
 
- k = 0;
+ k = 0; e = 0; s = 0;
         while (k < tmo) {
                 pt_sleep(pause);
                 k++;

--------------------------------------------------------------------------
Grant R. Guenther grant@torque.net
--------------------------------------------------------------------------

-- To unsubscribe, send mail to: linux-parport-request@torque.net --
-- with the single word "unsubscribe" in the body of the message. --



This archive was generated by hypermail 2.0b3 on Wed 30 Dec 1998 - 10:18:58 EST