kopia lustrzana https://gitlab.com/sane-project/website
208 wiersze
7.5 KiB
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 (&scsi_req, 0, sizeof (scsi_req));
|
|
+ cdb_size = CDB_SIZE(*(u_char *)src);
|
|
|
|
+ memset(&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, &scsi_req) < 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] & 0x80) && 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, &scsi_req) < 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] & 0x80) && 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>
|