sane-project-website/old-archive/1997-08/0218.html

208 wiersze
7.5 KiB
HTML

<!-- received="Tue Sep 23 06:43:40 1997 MST" -->
<!-- sent="Tue, 23 Sep 1997 06:06:42 -0700" -->
<!-- name="Michael Sweet" -->
<!-- email="mike@easysw.com" -->
<!-- subject="Update SGI SCSI support for SANE-0.63 (try #2)" -->
<!-- id="199709220939.IAA19795@suntlc.etnoteam.it" -->
<!-- inreplyto="" -->
<title>sane-devel: Update SGI SCSI support for SANE-0.63 (try #2)</title>
<h1>Update SGI SCSI support for SANE-0.63 (try #2)</h1>
<b>Michael Sweet</b> (<a href="mailto:mike@easysw.com"><i>mike@easysw.com</i></a>)<br>
<i>Tue, 23 Sep 1997 06:06:42 -0700</i>
<p>
<ul>
<li> <b>Messages sorted by:</b> <a href="date.html#218">[ date ]</a><a href="index.html#218">[ thread ]</a><a href="subject.html#218">[ subject ]</a><a href="author.html#218">[ author ]</a>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0219.html">Richard Stearn: "Datacopy 730GS"</a>
<li> <b>Previous message:</b> <a href="0217.html">Michael Sweet: "Update SGI SCSI support for SANE-0.63"</a>
<!-- nextthread="start" -->
<li> <b>Next in thread:</b> <a href="0221.html">Oliver.Rauch@Wolfsburg.DE: "Re: uc840/uc630"</a>
<li> <b>Reply:</b> <a href="0221.html">Oliver.Rauch@Wolfsburg.DE: "Re: uc840/uc630"</a>
<!-- reply="end" -->
</ul>
<!-- body="start" -->
This is a multi-part message in MIME format.<br>
<p>
--------------28472C677566<br>
Content-Type: text/plain; charset=us-ascii<br>
Content-Transfer-Encoding: 7bit<br>
<p>
(D'oh! Forgot to attach the diff...)<br>
<p>
Unfortunately I didn't get the updated code to David soon enough...<br>
<p>
Attached is a unified diff that will patch the SGI SCSI support to<br>
work correctly on all systems (and prevents spurious error messages).<br>
<p>
Also, I bumped the maximum SCSI transfer size (for IRIX) to 8MB. You<br>
can make this larger, but the default maximum transfer size is 256MB<br>
to 1GB (depending on the system).<br>
<p>
Finally, for those of you that might be having trouble with SCSI<br>
scanners and IRIX, you probably need to disable disconnects for that<br>
particular device. This can be done by tweeking the SCSI config files<br>
in /var/sysgen/master.d/wd93, wd95, or adp78.<br>
<p>
Solaris support is next! :)<br>
<p>
<pre>
--
________________________________________________________________________
Mike Sweet Software for SGI and Sun Easy Software Products
(301) 373-9603 Workstations 44145 Airport View Drive
mike@easysw.com <a href="http://www.easysw.com">http://www.easysw.com</a> Hollywood, Maryland 20636
<p>
SUPPORT THE ANTI-SPAM AMENDMENT! - <a href="http://www.cauce.org">http://www.cauce.org</a>
<p>
--------------28472C677566
Content-Type: text/plain; charset=us-ascii; name="sanei_scsi.diffs"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="sanei_scsi.diffs"
<p>
--- sanei_scsi.c.orig Tue Sep 23 05:51:15 1997
+++ sanei_scsi.c Tue Sep 23 05:51:19 1997
@@ -133,6 +133,8 @@
#else
# ifdef __FreeBSD__
int sanei_scsi_max_request_size = 32 * 1024; /* FreeBSD is limited to this */
+# elif defined(__sgi)
+int sanei_scsi_max_request_size = 8 * 1024 * 1024; /* Actually, the limit varies from 256MB to 1GB :) */
# else
int sanei_scsi_max_request_size = 120 * 1024; /* works at least for OpenStep */
# endif
@@ -846,62 +848,69 @@
#if USE == IRIX_INTERFACE
SANE_Status
-sanei_scsi_cmd(int fd, const void *src, size_t src_size,
- void *dst, size_t *dst_size)
+sanei_scsi_cmd(int fd,
+ const void *src,
+ size_t src_size,
+ void *dst,
+ size_t *dst_size)
{
- dsreq_t scsi_req; /* SCSI request */
- u_char sensebuf[1024]; /* Request sense buffer */
- size_t cdb_size; /* Size of SCSI command */
+ dsreq_t scsi_req; /* SCSI request */
+ u_char sensebuf[1024]; /* Request sense buffer */
+ size_t cdb_size; /* Size of SCSI command */
- cdb_size = CDB_SIZE (*(u_char *)src);
- memset (&amp;scsi_req, 0, sizeof (scsi_req));
+ cdb_size = CDB_SIZE(*(u_char *)src);
+ memset(&amp;scsi_req, 0, sizeof(scsi_req));
+
if (dst != NULL)
- {
- /*
- * SCSI command returning/reading data...
- */
- scsi_req.ds_flags = DSRQ_READ | DSRQ_SENSE;
- scsi_req.ds_time = 120 * 1000;
- scsi_req.ds_cmdbuf = (caddr_t)src;
- scsi_req.ds_cmdlen = cdb_size;
- scsi_req.ds_databuf = (caddr_t)dst;
- scsi_req.ds_datalen = *dst_size;
- scsi_req.ds_sensebuf = (caddr_t)sensebuf;
- scsi_req.ds_senselen = sizeof(sensebuf);
- }
+ {
+ /*
+ * SCSI command returning/reading data...
+ */
+
+ scsi_req.ds_flags = DSRQ_READ | DSRQ_SENSE;
+ scsi_req.ds_time = 120 * 1000;
+ scsi_req.ds_cmdbuf = (caddr_t)src;
+ scsi_req.ds_cmdlen = cdb_size;
+ scsi_req.ds_databuf = (caddr_t)dst;
+ scsi_req.ds_datalen = *dst_size;
+ scsi_req.ds_sensebuf = (caddr_t)sensebuf;
+ scsi_req.ds_senselen = sizeof(sensebuf);
+ }
else
- {
- /*
- * SCSI command sending/writing data...
- */
- scsi_req.ds_flags = DSRQ_WRITE | DSRQ_SENSE;
- scsi_req.ds_time = 120 * 1000;
- scsi_req.ds_cmdbuf = (caddr_t)src;
- scsi_req.ds_cmdlen = cdb_size;
- scsi_req.ds_databuf = (caddr_t)src + cdb_size;
- scsi_req.ds_datalen = src_size - cdb_size;
- scsi_req.ds_sensebuf = (caddr_t)sensebuf;
- scsi_req.ds_senselen = sizeof(sensebuf);
- }
-
- if (ioctl(fd, DS_ENTER, &amp;scsi_req) &lt; 0 || scsi_req.ds_status != 0)
- {
- DBG(1, "sanei_scsi_cmd: SCSI command failed: %s\n", strerror(errno));
-
- if (scsi_req.ds_status == STA_BUSY)
- return SANE_STATUS_DEVICE_BUSY;
- else if ((sensebuf[0] &amp; 0x80) &amp;&amp; fd_info[fd].sense_handler)
- return (*fd_info[fd].sense_handler)(fd, sensebuf);
- else
- return SANE_STATUS_IO_ERROR;
- }
+ {
+ /*
+ * SCSI command sending/writing data...
+ */
+
+ scsi_req.ds_flags = DSRQ_WRITE | DSRQ_SENSE;
+ scsi_req.ds_time = 120 * 1000;
+ scsi_req.ds_cmdbuf = (caddr_t)src;
+ scsi_req.ds_cmdlen = cdb_size;
+ scsi_req.ds_databuf = (caddr_t)src + cdb_size;
+ scsi_req.ds_datalen = src_size - cdb_size;
+ scsi_req.ds_sensebuf = (caddr_t)sensebuf;
+ scsi_req.ds_senselen = sizeof(sensebuf);
+ }
+
+ if (ioctl(fd, DS_ENTER, &amp;scsi_req) &lt; 0)
+ return (SANE_STATUS_IO_ERROR);
if (dst_size != NULL)
*dst_size = scsi_req.ds_datasent;
- return SANE_STATUS_GOOD;
+ if (scsi_req.ds_status != 0)
+ {
+ if (scsi_req.ds_status == STA_BUSY)
+ return (SANE_STATUS_DEVICE_BUSY);
+ else if ((sensebuf[0] &amp; 0x80) &amp;&amp; fd_info[fd].sense_handler)
+ return (*fd_info[fd].sense_handler)(fd, sensebuf);
+ else
+ return (SANE_STATUS_IO_ERROR);
+ };
+
+ return (SANE_STATUS_GOOD);
}
#endif /* USE == IRIX_INTERFACE */
<p>
--------------28472C677566--
<p>
<pre>
--
Source code, list archive, and docs: <a href="http://www.azstarnet.com/~axplinux/sane/">http://www.azstarnet.com/~axplinux/sane/</a>
To unsubscribe: mail -s unsubscribe <a href="mailto:sane-devel-request@listserv.azstarnet.com">sane-devel-request@listserv.azstarnet.com</a>
</pre>
<!-- body="end" -->
<p>
<ul>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0219.html">Richard Stearn: "Datacopy 730GS"</a>
<li> <b>Previous message:</b> <a href="0217.html">Michael Sweet: "Update SGI SCSI support for SANE-0.63"</a>
<!-- nextthread="start" -->
<li> <b>Next in thread:</b> <a href="0221.html">Oliver.Rauch@Wolfsburg.DE: "Re: uc840/uc630"</a>
<li> <b>Reply:</b> <a href="0221.html">Oliver.Rauch@Wolfsburg.DE: "Re: uc840/uc630"</a>
<!-- reply="end" -->
</ul>