[2443] in linux-scsi channel archive
Re: aic7xxx patch
daemon@ATHENA.MIT.EDU (Robert J. Block)
Fri Sep 12 10:13:26 1997
Date: Thu, 11 Sep 1997 00:10:41 -0700
From: "Robert J. Block" <rob.block@Sun.COM>
To: Doug Ledford <dledford@dialnet.net>
CC: linux-kernel@vger.rutgers.edu, linux-scsi@vger.rutgers.edu,
Rob Block <rob.block@Sun.COM>
I've been using this patch for over a week now with good results.
The problem I previously reported with my Umax scanner turned out to be
a termination problem, and I fixed that problem after installing the
patch,
so I don't actually know what difference, if any, the patch would have
made
if the scanner had been properly terminated in the first place.
But the bottom line is: the scanner works great with this driver. I can
even
turn the scanner off and on at will and still be able to scan (the
aic7xxx
driver is compiled into the kernel).
Notes:
1) the scanner is the only thing attached to the controller. nothing
else on
the bus (probably makes things easier).
2) the scanner does occasionally lock up when I try to scan, but
power-cycling
the unit always works, I've never had to reboot the machine.
3) I'm able to get only 300dpi resolution, not the max. 600 that the S12
supports.
When I try more than 300, the scanner tries to scan but freezes up.
All in all, I'm having a loads of fun with the scanner now and really
appreciate
the great work you guys did on the driver. The interface is sooo much
nicer than
the Adobe/Windows software that came with the unit, and best of all, I
nEVER
have to boot Windows anymore. Every piece of hardware I own works with
Linux!
I didn't have much luck getting the tk/tcl gui to work (didn't try very
hard),
but I was able to set up a simple alias to turn my scanner/printer combo
into
an instant b&w copy machine:
alias xerox umax-cli -R300 -l | pbmtolps -dpi 300 | lpr
I'll report any more glitches that I find, but this mostly works great.
Regards,
Rob
--
Robert J. Block | Sun Microsystems Inc.
rob.block@sun.com | <URL: http://www.ncsa.uiuc.edu/People/rblock>
"I do have a cause. It's obscenity. I'm for it." -Tom Lehrer
Doug Ledford wrote:
>
> As many of you may recall, I've recently been working on a patch to the
> aic7xxx driver to improve several aspects of that driver's reliability. At
> this point, I think I've reached a decent place to stop current development
> and only make changes to the driver as any bug reports in the current patch
> filter in. The current version of the patch is aic7xxx-abort-Sep05, and a
> diffstat on the patch looks like this:
>
> Documentation/Configure.help | 78 +
> drivers/scsi/Config.in | 4
> drivers/scsi/aic7xxx.c | 2273 ++++++++++++++++++++++++++-------------
> drivers/scsi/aic7xxx.h | 5
> drivers/scsi/aic7xxx_proc.c | 224 +---
> 5 files changed, 1663 insertions, 921 deletions
>
> People interested in trying this patch can find it at ftp.dialnet.net in
> /pub/linux/aic7xxx. Included here as well is the readme file associated
> with this patch to give an idea of what changes exactly have taken place,
> what problems were fixed, and a list of the current known bugs.
>
> [ aic7xxx-abort-Sep05.README ]
>
> I would like to thank all of the people that have been testing out these
> patches for me. This verion represents what is very nearly a "finished"
> work (if that can be acheived). Here is a run down of this patch:
>
> Note: this patch applies against kernel 2.0.31-pre-7
>
> Changes:
>
> aic7xxx_abort(): Totally re-written from the ground up. I think the only
> original code remaining is the prototye, the open and close brace,
> and a few variable definitions.
> aic7xxx_reset(): See above.
> Internal helper functions for aic7xxx_{abort,reset}: In some cases, these
> are totally re-written as well, in others, they are just modified
> to fit the new abort/reset schema.
> aic7xxx_handle_seqint(): Modified to handle new abort/reset code as well as
> improving the QUEUE_FULL and BUSY condition error handling. Corrected
> handling of CHECK_CONDITION when we are sending an SDTR or WDTR
> message to the target.
> aic7xxx_handle_scsiint(): Modifications to the BUS_FREE handler as part of
> abort/reset fixes.
> aic7xxx_handle_device_reset(): Modified for new reset schema.
> aic7xxx_bus_device_reset(): Modified for new schema, simplified due to a
> a reduced set of conditions under which this function can be called.
> aic7xxx_isr(): Slight modifications to the CMDOUTCNT variable handling to
> avoid some race conditions that were causing problems.
> aic7xxx_queue(): Modified to handle devices with delayed SCB queues.
> aic7xxx_run_waiting_queues(): See above.
> aic7xxx_timer(): New function added as part of QUEUE_FULL and BUSY handling.
> aic7xxx_detect(): Added a boot time message, fixed an off by one memory
> scribble, and added some new initialization code for new variables.
> aic7xxx_proc.c: New file from Heinz Mauelshagen incorporated to fix a
> serious memory overflow error, then later modified by me to remove
> the need to make two passes through our structures and calls to
> sprintf in order to determine buffer size.
> aic7xxx_done(): Modified for new handling of abort/reset scbs and the added
> variables brought out by QUEUE_FULL and BUSY handling.
> aic7xxx_search_qinfifo(): Modified to allow an arbitrary destination queue
> for SCBs that need to be requeued. Also modified to preserve the
> SCB_RECOVERY_SCB flag regardless of passed in SCB flags.
> aic7xxx_buildscb(): Modified to create fake SCSI commands to perform
> negotiation with if the real SCSI command is not a TEST_UNIT_READY
> command.
> aic7xxx_fake_scsi_done(): Used to free the fake commands we created in
> aic7xxx_buildscb().
> aic7xxx.c: Increased MAX_SG from 27 to 122 for performance reasons. Changes
> to printk's throughout in order to better organize messages according
> to the selected aic7xxx=verbose level. Incremented version level in
> order to differentiate this code from the stock aic7xxx driver.
> aic7xxx.h: Added back our support for the aic7xxx_abort function.
> Config.in: Changed the default settings for the aic7xxx driver to reflect
> things that used to be broken but now work reliably.
> Configure.help: Added help items for the aic7xxx config options.
>
> Probably others that I can't remember right now, and I don't want to go
> looking through the diff file just to list them here.
>
> Problems fixed:
>
> 1. Abort/reset loops and machine lockups should be greatly reduced with this
> patch. Actually, loops should be gone, but it is still possible to
> hang a machine if the drive simply goes away (not really a driver
> issue).
> 2. QUEUE_FULL handling should work much better now. No more drives simply
> refusing to live any longer because we slammed them with commands
> so quickly that they could never finish they ones they already had
> in their full queues.
> 3. BUSY condition handling, see above.
> 4. Driver blows up on certain devices during negotiation. Shouldn't happen
> any more. Also shouldn't matter any more if a person enables wide
> negotiation with early devices that don't know what wide busses are.
> The analogous situation for synchronous transfers should also be
> true.
> 5. Memory overflows from aic7xxx_proc.c should be gone.
> 6. Memory scribble during init is gone.
> 7. We no longer show transfer stats on devices that don't exist when
> proc statistics is enabled.
> 8. aic7xxx=verbose setting is no longer on/off, but is instead cumulative
> such that higher verbosity levels result in more printed messages.
> I recommend the setting aic7xxx=verbose:1 for general use and
> aic7xxx=verbose:2 or 3 for debugging.
> 9. Spurious CMDCMPLT with no CMD for SCB messages should be gone.
>
> Known bugs:
>
> 1. A rare command underflow bug with certain brand/model of drives. This
> most likely won't get fixed without a SCSI bus analyzer.
> 2. A rare condition with certain brand/model drives that can cause an
> outgoing command to fail with an unexpected BUSFREE condition. We
> handle this in the driver, but would need to change the sequencer
> to actually solve the problem. I've only seen this one once in about
> 30 days of hard testing, so it may not even be worth fixing.
>
> --
> *****************************************************************************
> * Doug Ledford * Unix, Novell, Dos, Windows 3.x, *
> * dledford@dialnet.net 873-DIAL * WfW, Windows 95 & NT Technician *
> * PPP access $14.95/month *****************************************
> * Springfield, MO and surrounding * Usenet news, e-mail and shell account.*
> * communities. Sign-up online at * Web page creation and hosting, other *
> * 873-9000 V.34 * services available, call for info. *
> *****************************************************************************