Re: [PARPORT] make lp driver use ECP mode

From: Uwe Bonnes (bon@elektron.ikp.physik.tu-darmstadt.de)
Date: Sat Mar 24 2001 - 19:18:45 EST

  • Next message: T K: "[PARPORT] Can CDRecord burn .bin files?"

    Philip.Blundell@pobox.com writes:
    > >I think that is the problem, you will certainly print via ghostscript and
    > >the printer is to slow to show any effect.
    >
    > Mmm; even `dd if=/dev/zero of=/dev/lp0' runs at the same speed, though. Oh
    > well.
    >

    Hallo,

    Here are some tests with the Gigabyte BXD mainboard containg the Winbond
    83977TF talking to an old HP Deskjet 560 , with Dual Celeron 300@450.
    CONFIG_PARPORT_PC_FIFO=y and CONFIG_PARPORT_1284=y are set. This is with a
    plain 2.4.2 parport suite, no ECP mode patch from above. The 64 kByte of zero
    data doesn't fits into the HP560 cache.

    siemens:/usr/src/linux # rmmod lp && rmmod parport_pc
    siemens:/usr/src/linux # insmod drivers/parport/parport_pc.o io=0x378
    siemens:/usr/src/linux # insmod drivers/char/lp.o
    siemens:/usr/src/linux # time dd if=/dev/zero of=/dev/lp0 count=128
    128+0 records in
    128+0 records out

    real 0m12.596s
    user 0m0.000s
    sys 0m2.530s
    siemens:/usr/src/linux # rmmod lp && rmmod parport_pc
    siemens:/usr/src/linux # insmod drivers/parport/parport_pc.o io=0x378 irq=7
    siemens:/usr/src/linux # insmod drivers/char/lp.o
    siemens:/usr/src/linux # time dd if=/dev/zero of=/dev/lp0 count=128
    128+0 records in
    128+0 records out

    real 0m12.314s
    user 0m0.000s
    sys 0m1.020s
    siemens:/usr/src/linux # rmmod lp && rmmod parport_pc
    siemens:/usr/src/linux # insmod drivers/parport/parport_pc.o io=0x378 irq=7 dma=3
    siemens:/usr/src/linux # insmod drivers/char/lp.o
    siemens:/usr/src/linux # time dd if=/dev/zero of=/dev/lp0 count=128
    128+0 records in
    128+0 records out

    real 0m13.255s
    user 0m0.010s
    sys 0m0.010s

    Applying Philip's ECP Mode patch doesn't change the situation.

    This indicats for me, that ECP DMA mode has the lowest system load, but also the
    longest printing time.

    However simplifying parport_pc_fifo_write_block_pio to no longer poll like in
    the patch appended, brings down the system time for no_dma printing while
    giveing a good speed:
    siemens:/usr/src/linux # rmmod lp && rmmod parport_pc
    siemens:/usr/src/linux # insmod drivers/parport/parport_pc.o io=0x378 irq=7 && insmod drivers/char/lp.o
    siemens:/usr/src/linux # time dd if=/dev/zero of=/dev/lp0 count=128
    128+0 records in
    128+0 records out

    real 0m12.480s
    user 0m0.000s
    sys 0m0.210s

    Why does parport_pc_fifo_write_block_pio poll until the fifo is totally
    empty? i.m.h.o. it should write to the fifo until it's full and then wait for
    the fifo interrupt.

    Bye

    Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de

    Free Software: If you contribute nothing, expect nothing

    --
    --- linux/drivers/parport/parport_pc.c~	Sun Mar 18 17:54:13 2001
    +++ linux/drivers/parport/parport_pc.c	Sun Mar 25 01:14:28 2001
    @@ -547,6 +547,7 @@
     		/* Can't fail now. */
     		expire = jiffies + port->cad->timeout;
     
    +#if 0
     	poll:
     		if (signal_pending (current))
     			break;
    @@ -571,6 +572,16 @@
     		byte = *bufp++;
     		outb (byte, fifo);
     		left--;
    +#else
    +		if (signal_pending (current))
    +			break;
    +
    +		if (!(ecrval & 0x02)) {
    +		  byte = *bufp++;
    +		  outb (byte, fifo);
    +		  left--;
    +		}
    +#endif
             }
     
     	return length - left;
    

    -- 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 2b29 : Sat Mar 24 2001 - 19:16:39 EST