[1408] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

SCSI with Iomega ZIP driver

daemon@ATHENA.MIT.EDU (campbell@tirian.che.curtin.edu.au)
Mon Feb 10 16:52:37 1997

From: campbell@tirian.che.curtin.edu.au
To: linux-scsi@vger.rutgers.edu, linux-parport@torque.net
Date: 	Mon, 10 Feb 1997 07:39:31 +0000

I have two problems:

1)	scsi_module.c does not release low level drivers (some 
	circumstances) with linux 2.0.17

2)	modified ppa driver (Iomega ZIP drive) when using EPP uses
	>50% CPU time when writing but <10% reading. Exactly same transfer 
	rate of approx 30 Mb/min.

Problem 1:
It has been noted that if a low level scsi module is loaded and fails 
to detect the device (this happens when the cable on the ZIP drive is 
not screwed down tight) the low level driver is not released thus 
requiring a reboot. I have a patch for this but the question is this 
a SCSI problem or should this be handled by the module group.

Problem 2:
To understand this problem a few details about EPP would not hurt. 
EPP is the "Enhanced Parallel Port" protocol which is used by 
external HDD, CDROMs and network adapters. When you write a byte to 
the EPP port (located at <base>+4) the IO chipset HALTs the CPU and 
performs the necessary handshaking (or timeouts if the device does 
not respond in 10 microseconds).

The ppa driver during block reads till the device is read and then 
reads the buffer in a burst. But during writes it is hypothesised 
that the buffer is full and the device "goes slow" to allow the drive 
to process the write requests. Unfortunately this slows down the 
machine to a crawl during big transfers.

Question: Is there a way to determine if the drive buffer is empty?

David Campbell

PS: Here is the module patch
*** scsi_module.c.old	Wed Jan  8 18:55:25 1997
--- scsi_module.c	Wed Jan  8 19:03:18 1997
***************
*** 34,39 ****
--- 34,41 ----
  int init_module(void) {
      driver_template.usage_count = &mod_use_count_;
      scsi_register_module(MODULE_SCSI_HA, &driver_template);
+     if (driver_template.present == 0)
+         scsi_unregister_module(MODULE_SCSI_HA, &driver_template);
      return (driver_template.present == 0);
  }


home help back first fref pref prev next nref lref last post