Sat Jan 18 15:51:45 1997  Richard Henderson  <rth@tamu.edu>

	* Don't play with usage_count directly, instead hand around
	the module header and use the module macros.

Fri May 17 00:00:00 1996  Leonard N. Zubkoff <lnz@dandelion.com>

	* BusLogic Driver Version 2.0.3 Released.

Tue Apr 16 21:00:00 1996  Leonard N. Zubkoff <lnz@dandelion.com>

	* BusLogic Driver Version 1.3.2 Released.

Sun Dec 31 23:26:00 1995  Leonard N. Zubkoff <lnz@dandelion.com>

	* BusLogic Driver Version 1.3.1 Released.

Fri Nov 10 15:29:49 1995  Leonard N. Zubkoff <lnz@dandelion.com>

	* Released new BusLogic driver.

Wed Aug  9 22:37:04 1995  Andries Brouwer  <aeb@cwi.nl>

	As a preparation for new device code, separated the various
	functions the request->dev field had into the device proper,
	request->rq_dev and a status field request->rq_status.

	The 2nd argument of bios_param is now a kdev_t.

Wed Jul 19 10:43:15 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

        * scsi.c (scsi_proc_info): /proc/scsi/scsi now also lists all
	attached devices.

	* scsi_proc.c (proc_print_scsidevice): Added. Used by scsi.c and
	eata_dma_proc.c to produce some device info for /proc/scsi.

	* eata_dma.c (eata_queue)(eata_int_handler)(eata_scsi_done):
	Changed handling of internal SCSI commands send to the HBA.


Wed Jul 19 10:09:17 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* Linux 1.3.11 released.

	* eata_dma.c (eata_queue)(eata_int_handler): Added code to do
	command latency measurements if requested by root through
	/proc/scsi interface.
	Throughout Use HZ constant for time references.

	* eata_pio.c: Use HZ constant for time references.

	* aic7xxx.c, aic7xxx.h, aic7xxx_asm.c: Changed copyright from BSD
	to GNU style.

	* scsi.h: Added READ_12 command opcode constant

Wed Jul 19 09:25:30 1995  Michael Neuffer <neuffer@goofy.zdv.uni-mainz.de>

	* Linux 1.3.10 released.

	* scsi_proc.c (dispatch_scsi_info): Removed unused variable.

Wed Jul 19 09:25:30 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* Linux 1.3.9 released.

	* scsi.c Blacklist concept expanded to 'support' more device
	deficiencies. blacklist[] renamed to device_list[]
	(scan_scsis): Code cleanup.

	* scsi_debug.c (scsi_debug_proc_info): Added support to control
	device lockup simulation via /proc/scsi interface.


Wed Jul 19 09:22:34 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* Linux 1.3.7 released.

	* scsi_proc.c: Fixed a number of bugs in directory handling

Wed Jul 19 09:18:28 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* Linux 1.3.5 released.

	* Native wide, multichannel and /proc/scsi support now in official
	kernel distribution.

        * scsi.c/h, hosts.c/h et al reindented to increase readability
	(especially on 80 column wide terminals).

	* scsi.c, scsi_proc.c, ../../fs/proc/inode.c: Added
	/proc/scsi/scsi which allows root to scan for hotplugged devices.

	* scsi.c (scsi_proc_info): Added, to support /proc/scsi/scsi.
	(scan_scsis): Added some 'spaghetti' code to allow scanning for
	single devices.
	

Thu Jun 20 15:20:27 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

        * proc.c: Renamed to scsi_proc.c

Mon Jun 12 20:32:45 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* Linux 1.3.0 released.

Mon May 15 19:33:14 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* scsi.c: Added native multichannel and wide scsi support.

	* proc.c (dispatch_scsi_info) (build_proc_dir_hba_entries):
	Updated /proc/scsi interface.

Thu May  4 17:58:48 1995  Michael Neuffer  <neuffer@goofy.zdv.uni-mainz.de>

	* sd.c (requeue_sd_request): Zero out the scatterlist only if
	scsi_malloc returned memory for it.

	* eata_dma.c (register_HBA) (eata_queue): Add support for
	large scatter/gather tables and set use_clustering accordingly

	* hosts.c: Make use_clustering changeable in the Scsi_Host structure.

Wed Apr 12 15:25:52 1995  Eric Youngdale  (eric@andante)

	* Linux 1.2.5 released.

	* buslogic.c: Update to version 1.15 (From Leonard N. Zubkoff).
	Fixed interrupt routine to avoid races when handling multiple
	complete commands per interrupt.  Seems to come up with faster
	cards.

	* eata_dma.c: Update to 2.3.5r. Modularize. Improved error handling
        throughout and fixed bug interrupt routine which resulted in shifted
        status bytes. Added blink LED state checks for ISA and EISA HBAs.
        Memory management bug seems to have disappeared ==> increasing
        C_P_L_CURRENT_MAX to 16 for now. Decreasing C_P_L_DIV to 3 for
        performance reasons.

	* scsi.c: If we get a FMK, EOM, or ILI when attempting to scan
	the bus, assume that it was just noise on the bus, and ignore
	the device.

	* scsi.h: Update and add a bunch of missing commands which we
	were never using.

	* sd.c: Use restore_flags in do_sd_request - this may result in
	latency conditions, but it gets rid of races and crashes.
	Do not save flags again when searching for a second command to
	queue.

	* st.c: Use bytes, not STP->buffer->buffer_size when reading
	from tape.


Tue Apr  4 09:42:08 1995  Eric Youngdale  (eric@andante)

	* Linux 1.2.4 released.

	* st.c: Fix typo - restoring wrong flags.

Wed Mar 29 06:55:12 1995  Eric Youngdale  (eric@andante)

	* Linux 1.2.3 released.

	* st.c: Perform some waiting operations with interrupts off.
	Is this correct???

Wed Mar 22 10:34:26 1995  Eric Youngdale  (eric@andante)

	* Linux 1.2.2 released.

	* aha152x.c: Modularize.  Add support for PCMCIA.

	* eata.c: Update to version 2.0.  Fixed bug preventing media
	detection.  If scsi_register_host returns NULL, fail gracefully.

	* scsi.c: Detect as NEC (for photo-cd purposes) for the 84
	and 25 models as "NEC_OLDCDR".

	* scsi.h: Add define for NEC_OLDCDR

	* sr.c: Add handling for NEC_OLDCDR.  Treat as unknown.

	* u14-34f.c: Update to version 2.0.  Fixed same bug as in
	eata.c.


Mon Mar  6 11:11:20 1995  Eric Youngdale  (eric@andante)

	* Linux 1.2.0 released.  Yeah!!!

	* Minor spelling/punctuation changes throughout.  Nothing
	substantive.

Mon Feb 20 21:33:03 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.95 released.

	* qlogic.c: Update to version 0.41.

	* seagate.c: Change some message to be more descriptive about what
	we detected.

	* sr.c: spelling/whitespace changes.

Mon Feb 20 21:33:03 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.94 released.

Mon Feb 20 08:57:17 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.93 released.

	* hosts.h: Change io_port to long int from short.

 	* 53c7,8xx.c: crash on AEN fixed, SCSI reset is no longer a NOP,
 	  NULL pointer panic on odd UDCs fixed, two bugs in diagnostic output
 	  fixed, should initialize correctly if left running, now loadable,
  	  new memory allocation, extraneous diagnostic output suppressed,
 	  splx() replaced with save/restore flags. [ Drew ]

	* hosts.c, hosts.h, scsi_ioctl.c, sd.c, sd_ioctl.c, sg.c, sr.c,
	sr_ioctl.c: Add special junk at end that Emacs will use for
	formatting the file.

	* qlogic.c: Update to v0.40a.  Improve parity handling.

	* scsi.c: Add Hitachi DK312C to blacklist.  Change "};" to "}" in
	many places.  Use scsi_init_malloc to get command block - may
	need this to be dma compatible for some host adapters.
	Restore interrupts after unregistering a host.

	* sd.c: Use sti instead of restore flags - causes latency problems.

	* seagate.c: Use controller_type to determine string used when
	registering irq.

	* sr.c: More photo-cd hacks to make sure we get the xa stuff right.
	* sr.h, sr.c: Change is_xa to xa_flags field.

	* st.c: Disable retries for write operations.

Wed Feb 15 10:52:56 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.92 released.

	* eata.c: Update to 1.17.

	* eata_dma.c: Update to 2.31a. Add more support for /proc/scsi.
        Continuing modularization. Less crashes because of the bug in the
        memory management ==> increase C_P_L_CURRENT_MAX to 10
        and decrease C_P_L_DIV to 4.

	* hosts.c: If we remove last host registered, reuse host number.
	When freeing memory from host being deregistered, free extra_bytes
	too.

	* scsi.c (scan_scsis): memset(SDpnt, 0) and set SCmd.device to SDpnt.
	Change memory allocation to work around bugs in __get_dma_pages.
	Do not free host if usage count is not zero (for modules).

	* sr_ioctl.c: Increase IOCTL_TIMEOUT to 3000.

	* st.c: Allow for ST_EXTRA_DEVS in st data structures.

	* u14-34f.c: Update to 1.17.

Thu Feb  9 10:11:16 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.91 released.

	* eata.c: Update to 1.16.  Use wish_block instead of host->block.

	* hosts.c: Initialize wish_block to 0.

	* hosts.h: Add wish_block.

	* scsi.c: Use wish_block as indicator that the host should be added
	to block list.

	* sg.c: Add SG_EXTRA_DEVS to number of slots.

	* u14-34f.c: Use wish_block.

Tue Feb  7 11:46:04 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.90 released.

	* eata.c: Change naming from eata_* to eata2x_*.  Now at vers 1.15.
	Update interrupt handler to take pt_regs as arg.  Allow blocking
	even if loaded as module.  Initialize target_time_out array.
	Do not put sti(); in timing loop.

	* hosts.c: Do not reuse host numbers.
	Use scsi_make_blocked_list to generate blocking list.

	* script_asm.pl:  Beats me.  Don't know perl.  Something to do with
	phase index.

	* scsi.c (scsi_make_blocked_list): New function - code copied from
	hosts.c.

	* scsi.c: Update code to disable photo CD for Toshiba cdroms.
	Use just manufacturer name, not model number.

	* sr.c: Fix setting density for Toshiba drives.

	* u14-34f.c: Clear target_time_out array during reset.

Wed Feb  1 09:20:45 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.89 released.

	* Makefile, u14-34f.c: Modularize.

	* Makefile, eata.c: Modularize.  Now version 1.14

	* NCR5380.c: Update interrupt handler with new arglist.  Minor
	cleanups.

	* eata_dma.c: Begin to modularize.  Add hooks for /proc/scsi.
	New version 2.3.0a. Add code in interrupt handler to allow
        certain CDROM drivers to be detected which return a
        CHECK_CONDITION during SCSI bus scan. Add opcode check to get
        all DATA IN and DATA OUT phases right. Utilize HBA_interpret flag.
	Improvements in HBA identification. Various other minor stuff.

	* hosts.c: Initialize ->dma_channel and ->io_port when registering
	a new host.

	* qlogic.c: Modularize and add PCMCIA support.

	* scsi.c: Add Hitachi to blacklist.

	* scsi.c: Change default to no lun scan (too many problem devices).

	* scsi.h: Define QUEUE_FULL condition.

	* sd.c: Do not check for non-existent partition until after
	new media check.

	* sg.c: Undo previous change which was wrong.

	* sr_ioctl.c: Increase IOCTL_TIMEOUT to 2000.

	* st.c: Patches from Kai - improve filemark handling.

Tue Jan 31 17:32:12 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.88 released.

	* Throughout - spelling/grammar fixups.

	* scsi.c: Make sure that all buffers are 16 byte aligned - some
	drivers (buslogic) need this.

	* scsi.c (scan_scsis): Remove message printed.

	* scsi.c (scsi_init): Move message here.

Mon Jan 30 06:40:25 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.87 released.

	* sr.c: Photo-cd related changes. (Gerd Knorr??).

	* st.c: Changes from Kai related to EOM detection.

Mon Jan 23 23:53:10 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.86 released.

	* 53c7,8xx.h: Change SG size to 127.

	* eata_dma: Update to version 2.10i. Remove bug in the registration
        of multiple HBAs and channels. Minor other improvements and stylistic
        changes.

	* scsi.c: Test for Toshiba XM-3401TA and exclude from detection
	as toshiba drive - photo cd does not work with this drive.

	* sr.c:  Update photocd code.

Mon Jan 23 23:53:10 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.85 released.

	* st.c, st_ioctl.c, sg.c, sd_ioctl.c, scsi_ioctl.c, hosts.c:
	include linux/mm.h

	* qlogic.c, buslogic.c, aha1542.c: Include linux/module.h.

Sun Jan 22 22:08:46 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.84 released.

	* Makefile: Support for loadable QLOGIC boards.

	* aha152x.c: Update to version 1.8 from Juergen.

	* eata_dma.c: Update from Michael Neuffer.
        Remove hard limit of 2 commands per lun and make it better
        configurable. Improvements in HBA identification.

	* in2000.c: Fix biosparam to support large disks.

	* qlogic.c: Minor changes (change sti -> restore_flags).

Wed Jan 18 23:33:09 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.83 released.

	* aha1542.c(aha1542_intr_handle): Use arguments handed down to find
	which irq.

	* buslogic.c: Likewise.

	* eata_dma.c: Use min of 2 cmd_per_lun for OCS_enabled boards.

	* scsi.c: Make RECOVERED_ERROR a SUGGEST_IS_OK.

	* sd.c: Fail if we are opening a non-existent partition.

	* sr.c: Bump SR_TIMEOUT to 15000.
	Do not probe for media size at boot time(hard on changers).
	Flag device as needing sector size instead.

	* sr_ioctl.c: Remove CDROMMULTISESSION_SYS ioctl.

	* ultrastor.c: Fix bug in call to ultrastor_interrupt (wrong #args).

Mon Jan 16 07:18:23 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.82 released.

	Throughout.
	- Change all interrupt handlers to accept new calling convention.
	In particular, we now receive the irq number as one of the arguments.

	* More minor spelling corrections in some of the new files.

	* aha1542.c, buslogic.c: Clean up interrupt handler a little now
	that we receive the irq as an arg.

	* aha274x.c: s/snarf_region/request_region/

	* eata.c: Update to version 1.12.   Fix some comments and display a
	message if we cannot reserve the port addresses.

	* u14-34f.c: Update to version 1.13.   Fix some comments and display a
	message if we cannot reserve the port addresses.

	* eata_dma.c: Define get_board_data function (send INQUIRY command).
	Use to improve detection of variants of different DPT boards.  Change
	version subnumber to "0g".

	* fdomain.c:  Update to version 5.26.  Improve detection of some boards
	repackaged by IBM.

	* scsi.c (scsi_register_host): Change "name" to const char *.

	* sr.c: Fix problem in set mode command for Toshiba drives.

	* sr.c: Fix typo from patch 81.

Fri Jan 13 12:54:46 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.81 released.  Codefreeze for 1.2 release announced.

	Big changes here.

	* eata_dma.*: New files from Michael Neuffer.
	(neuffer@goofy.zdv.uni-mainz.de).  Should support
	all eata/dpt cards.

	* hosts.c, Makefile: Add eata_dma.

	* README.st: Document MTEOM.

	Patches from me (ERY) to finish support for low-level loadable scsi.
	It now works, and is actually useful.

	* Throughout - add new argument to scsi_init_malloc that takes an
	additional parameter.  This is used as a priority to kmalloc,
	and you can specify the GFP_DMA flag if you need DMA-able memory.

	* Makefile: For source files that are loadable, always add name
	to SCSI_SRCS.  Fill in modules: target.

	* hosts.c:  Change next_host to next_scsi_host, and make global.
	Print hosts after we have identified all of them.  Use info()
	function if present, otherwise use name field.

	* hosts.h: Change attach function to return int, not void.
	Define number of device slots to allow for loadable devices.
	Define tags to tell scsi module code what type of module we
	are loading.

	* scsi.c: Fix scan_scsis so that it can be run by a user process.
	Do not use waiting loops - use up and down mechanism as long
	as current != task[0].

	* scsi.c(scan_scsis): Do not use stack variables for I/O - this
	could be > 16Mb if we are loading a module at runtime (i.e. use
	scsi_init_malloc to get some memory we know will be safe).

	* scsi.c: Change dma freelist to be a set of pages.  This allows
	us to dynamically adjust the size of the list by adding more pages
	to the pagelist.  Fix scsi_malloc and scsi_free accordingly.

	* scsi_module.c: Fix include.

	* sd.c: Declare detach function.  Increment/decrement module usage
	count as required.  Fix init functions to allow loaded devices.
	Revalidate all new disks so we get the partition tables.  Define
	detach function.

	* sr.c: Likewise.

	* sg.c: Declare detach function.  Allow attachment of devices on
	loaded drivers.

	* st.c: Declare detach function.  Increment/decrement module usage
	count as required.

Tue Jan 10 10:09:58 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.79 released.

	Patch from some undetermined individual who needs to get a life :-).

	* sr.c: Attacked by spelling bee...

	Patches from Gerd Knorr:

	* sr.c: make printk messages for photoCD a little more informative.

	* sr_ioctl.c: Fix CDROMMULTISESSION_SYS ioctl.

Mon Jan  9 10:01:37 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.78 released.

	* Makefile: Add empty modules: target.

	* Wheee.  Now change register_iomem to request_region.

	* in2000.c: Bugfix - apparently this is the fix that we have
	all been waiting for.  It fixes a problem whereby the driver
	is not stable under heavy load.  Race condition and all that.
	Patch from Peter Lu.

Wed Jan  4 21:17:40 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.77 released.

	* 53c7,8xx.c: Fix from Linus - emulate splx.

	Throughout:

		Change "snarf_region" with "register_iomem".

	* scsi_module.c: New file.  Contains support for low-level loadable
	  scsi drivers. [ERY].

	* sd.c: More s/int/long/ changes.

	* seagate.c: Explicitly include linux/config.h

	* sg.c: Increment/decrement module usage count on open/close.

	* sg.c: Be a bit more careful about the user not supplying enough
	  information for a valid command.  Pass correct size down to
	  scsi_do_cmd.

	* sr.c:  More changes for Photo-CD.  This apparently breaks NEC drives.

	* sr_ioctl.c:  Support CDROMMULTISESSION ioctl.


Sun Jan  1 19:55:21 1995  Eric Youngdale  (eric@andante)

	* Linux 1.1.76 released.

	* constants.c: Add type cast in switch statement.

	* scsi.c (scsi_free): Change datatype of "offset" to long.
	  (scsi_malloc): Change a few more variables to long.  Who
	  did this and why was it important?  64 bit machines?


	Lots of changes to use save_state/restore_state instead of cli/sti.
	Files changed include:

	* aha1542.c:
	* aha1740.c:
	* buslogic.c:
	* in2000.c:
	* scsi.c:
	* scsi_debug.c:
	* sd.c:
	* sr.c:
	* st.c:

Wed Dec 28 16:38:29 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.75 released.

	* buslogic.c: Spelling fix.

	* scsi.c: Add HP C1790A and C2500A scanjet to blacklist.

	* scsi.c: Spelling fixup.

	* sd.c: Add support for sd_hardsizes (hard sector sizes).

	* ultrastor.c: Use save_flags/restore_flags instead of cli/sti.

Fri Dec 23 13:36:25 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.74 released.

	* README.st: Update from Kai Makisara.

	* eata.c: New version from Dario - version 1.11.
	  use scsicam bios_param routine.  Add support for 2011
	  and 2021 boards.

	* hosts.c: Add support for blocking.  Linked list automatically
	  generated when shpnt->block is set.

	* scsi.c: Add sankyo & HP scanjet to blacklist.  Add support for
	  kicking things loose when we deadlock.

	* scsi.c: Recognize scanners and processors in scan_scsis.

	* scsi_ioctl.h: Increase timeout to 9 seconds.

	* st.c: New version from Kai - add better support for backspace.

	* u14-34f.c: New version from Dario.  Supports blocking.

Wed Dec 14 14:46:30 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.73 released.

	* buslogic.c: Update from Dave Gentzel.  Version 1.14.
	  Add module related stuff.   More fault tolerant if out of
	  DMA memory.

	* fdomain.c: New version from Rik Faith - version 5.22.  Add support
	  for ISA-200S SCSI adapter.

	* hosts.c: Spelling.

	* qlogic.c: Update to version 0.38a.  Add more support for PCMCIA.

	* scsi.c: Mask device type with 0x1f during scan_scsis.
	  Add support for deadlocking, err, make that getting out of
	  deadlock situations that are created when we allow the user
	  to limit requests to one host adapter at a time.

	* scsi.c: Bugfix - pass pid, not SCpnt as second arg to
	  scsi_times_out.

	* scsi.c: Restore interrupt state to previous value instead of using
	  cli/sti pairs.

	* scsi.c: Add a bunch of module stuff (all commented out for now).

	* scsi.c: Clean up scsi_dump_status.

Tue Dec  6 12:34:20 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.72 released.

	* sg.c: Bugfix - always use sg_free, since we might have big buff.

Fri Dec  2 11:24:53 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.71 released.

	* sg.c: Clear buff field when not in use.  Only call scsi_free if
	non-null.

	* scsi.h: Call wake_up(&wait_for_request) when done with a
	command.

	* scsi.c (scsi_times_out): Pass pid down so that we can protect
	against race conditions.

	* scsi.c (scsi_abort): Zero timeout field if we get the
	NOT_RUNNING message back from low-level driver.


	* scsi.c (scsi_done): Restore cmd_len, use_sg here.

	* scsi.c (request_sense): Not here.

	* hosts.h: Add new forbidden_addr, forbidden_size fields.  Who
	added these and why????

	* hosts.c (scsi_mem_init): Mark pages as reserved if they fall in
	the forbidden regions.  I am not sure - I think this is so that
	we can deal with boards that do incomplete decoding of their
	address lines for the bios chips, but I am not entirely sure.

	* buslogic.c: Set forbidden_addr stuff if using a buggy board.

	* aha1740.c: Test for NULL pointer in SCtmp.  This should not
	occur, but a nice message is better than a kernel segfault.

	* 53c7,8xx.c: Add new PCI chip ID for 815.

Fri Dec  2 11:24:53 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.70 released.

	* ChangeLog, st.c: Spelling.

Tue Nov 29 18:48:42 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.69 released.

	* u14-34f.h: Non-functional change.  [Dario].

	* u14-34f.c: Use block field in Scsi_Host to prevent commands from
	being queued to more than one host at the same time (used when
	motherboard does not deal with multiple bus-masters very well).
	Only when SINGLE_HOST_OPERATIONS is defined.
	Use new cmd_per_lun field.  [Dario]

	* eata.c: Likewise.

	* st.c: More changes from Kai.  Add ready flag to indicate drive
	status.

	* README.st: Document this.

	* sr.c: Bugfix (do not subtract CD_BLOCK_OFFSET) for photo-cd
	code.

	* sg.c: Bugfix - fix problem where opcode is not correctly set up.

	* seagate.[c,h]: Use #defines to set driver name.

	* scsi_ioctl.c: Zero buffer before executing command.

	* scsi.c: Use new cmd_per_lun field in Scsi_Hosts as appropriate.
	Add Sony CDU55S to blacklist.

	* hosts.h: Add new cmd_per_lun field to Scsi_Hosts.

	* hosts.c: Initialize cmd_per_lun in Scsi_Hosts from template.

	* buslogic.c: Use cmd_per_lun field - initialize to different
	values depending upon bus type (i.e. use 1 if ISA, so we do not
	hog memory).  Use other patches which got lost from 1.1.68.

	* aha1542.c: Spelling.

Tue Nov 29 15:43:50 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.68 released.

	Add support for 12 byte vendor specific commands in scsi-generics,
	more (i.e. the last mandatory) low-level changes to support
	loadable modules, plus a few other changes people have requested
	lately.  Changes by me (ERY) unless otherwise noted.  Spelling
	changes appear from some unknown corner of the universe.

	* Throughout: Change COMMAND_SIZE() to use SCpnt->cmd_len.

	* Throughout: Change info() low level function to take a Scsi_Host
	pointer.  This way the info function can return specific
	information about the host in question, if desired.

	* All low-level drivers: Add NULL in initializer for the
	usage_count field added to Scsi_Host_Template.

	* aha152x.[c,h]: Remove redundant info() function.

	* aha1542.[c,h]: Likewise.

	* aha1740.[c,h]: Likewise.

	* aha274x.[c,h]: Likewise.

	* eata.[c,h]: Likewise.

	* pas16.[c,h]: Likewise.

	* scsi_debug.[c,h]: Likewise.

	* t128.[c,h]: Likewise.

	* u14-34f.[c,h]: Likewise.

	* ultrastor.[c,h]: Likewise.

	* wd7000.[c,h]: Likewise.

	* aha1542.c: Add support for command line options with lilo to set
	DMA parameters, I/O port.  From Matt Aarnio.

	* buslogic.[c,h]: New version (1.13) from Dave Gentzel.

	* hosts.h: Add new field to Scsi_Hosts "block" to allow blocking
	all I/O to certain other cards.  Helps prevent problems with some
	ISA motherboards.

	* hosts.h: Add usage_count to Scsi_Host_Template.

	* hosts.h: Add n_io_port to Scsi_Host (used when releasing module).

	* hosts.c: Initialize block field.

	* in2000.c: Remove "static" declarations from exported functions.

	* in2000.h: Likewise.

	* scsi.c: Correctly set cmd_len field as required.  Save and
	change setting when doing a request_sense, restore when done.
	Move abort timeout message.  Fix panic in request_queueable to
	print correct function name.

	* scsi.c: When incrementing usage count, walk block linked list
	for host, and or in SCSI_HOST_BLOCK bit.  When decrementing usage
	count to 0, clear this bit to allow usage to continue, wake up
	processes waiting.


	* scsi_ioctl.c: If we have an info() function, call it, otherwise
	if we have a "name" field, use it, else do nothing.

	* sd.c, sr.c: Clear cmd_len field prior to each command we
	generate.

	* sd.h: Add "has_part_table" bit to rscsi_disks.

	* sg.[c,h]: Add support for vendor specific 12 byte commands (i.e.
	override command length in COMMAND_SIZE).

	* sr.c: Bugfix from Gerd in photocd code.

	* sr.c: Bugfix in get_sectorsize - always use scsi_malloc buffer -
	we cannot guarantee that the stack is < 16Mb.

Tue Nov 22 15:40:46 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.67 released.

	* sr.c: Change spelling of manufactor to manufacturer.

	* scsi.h: Likewise.

	* scsi.c: Likewise.

	* qlogic.c: Spelling corrections.

	* in2000.h: Spelling corrections.

	* in2000.c: Update from Bill Earnest, change from
	jshiffle@netcom.com.  Support new bios versions.

	* README.qlogic: Spelling correction.

Tue Nov 22 15:40:46 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.66 released.

	* u14-34f.c: Spelling corrections.

	* sr.[h,c]: Add support for multi-session CDs from Gerd Knorr.

	* scsi.h: Add manufactor field for keeping track of device
	manufacturer.

	* scsi.c: More spelling corrections.

	* qlogic.h, qlogic.c, README.qlogic: New driver from Tom Zerucha.

	* in2000.c, in2000.h: New driver from Brad McLean/Bill Earnest.

	* fdomain.c: Spelling correction.

	* eata.c: Spelling correction.

Fri Nov 18 15:22:44 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.65 released.

	* eata.h: Update version string to 1.08.00.

	* eata.c: Set sg_tablesize correctly for DPT PM2012 boards.

	* aha274x.seq: Spell checking.

	* README.st: Likewise.

	* README.aha274x: Likewise.

	* ChangeLog: Likewise.

Tue Nov 15 15:35:08 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.64 released.

	* u14-34f.h: Update version number to 1.10.01.

	* u14-34f.c: Use Scsi_Host can_queue variable instead of one from template.

	* eata.[c,h]: New driver for DPT boards from Dario Ballabio.

	* buslogic.c: Use can_queue field.

Wed Nov 30 12:09:09 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.63 released.

	* sd.c: Give I/O error if we attempt 512 byte I/O to a disk with
	1024 byte sectors.

	* scsicam.c: Make sure we do read from whole disk (mask off
	partition).

	* scsi.c: Use can_queue in Scsi_Host structure.
	Fix panic message about invalid host.

	* hosts.c: Initialize can_queue from template.

	* hosts.h: Add can_queue to Scsi_Host structure.

	* aha1740.c: Print out warning about NULL ecbptr.

Fri Nov  4 12:40:30 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.62 released.

	* fdomain.c: Update to version 5.20. (From Rik Faith).  Support
	BIOS version 3.5.

	* st.h: Add ST_EOD symbol.

	* st.c: Patches from Kai Makisara - support additional densities,
	add support for MTFSS, MTBSS, MTWSM commands.

	* README.st: Update to document new commands.

	* scsi.c: Add Mediavision CDR-H93MV to blacklist.

Sat Oct 29 20:57:36 1994  Eric Youngdale  (eric@andante.aib.com)

	* Linux 1.1.60 released.

	* u14-34f.[c,h]: New driver from Dario Ballabio.

	* aic7770.c, aha274x_seq.h, aha274x.seq, aha274x.h, aha274x.c,
	README.aha274x: New files, new driver from John Aycock.


Tue Oct 11 08:47:39 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.54 released.

	* Add third PCI chip id.  [Drew]

	* buslogic.c: Set BUSLOGIC_CMDLUN back to 1 [Eric].

	* ultrastor.c: Fix asm directives for new GCC.

	* sr.c, sd.c: Use new end_scsi_request function.

	* scsi.h(end_scsi_request): Return pointer to block if still
	active, else return NULL if inactive.  Fixes race condition.

Sun Oct  9 20:23:14 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.53 released.

	* scsi.c: Do not allocate dma bounce buffers if we have exactly
	16Mb.

Fri Sep  9 05:35:30 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.51 released.

	* aha152x.c: Add support for disabling the parity check.  Update
	to version 1.4. [Juergen].

	* seagate.c: Tweak debugging message.

Wed Aug 31 10:15:55 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.50 released.

	* aha152x.c: Add eb800 for Vtech Platinum SMP boards. [Juergen].

	* scsi.c: Add Quantum PD1225S to blacklist.

Fri Aug 26 09:38:45 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.49 released.

	* sd.c: Fix bug when we were deleting the wrong entry if we
	get an unsupported sector size device.

	* sr.c: Another spelling patch.

Thu Aug 25 09:15:27 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.48 released.

	* Throughout: Use new semantics for request_dma, as appropriate.

	* sr.c: Print correct device number.

Sun Aug 21 17:49:23 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.47 released.

	* NCR5380.c: Add support for LIMIT_TRANSFERSIZE.

	* constants.h: Add prototype for print_Scsi_Cmnd.

	* pas16.c: Some more minor tweaks.  Test for Mediavision board.
	Allow for disks > 1Gb.  [Drew??]

	* sr.c: Set SCpnt->transfersize.

Tue Aug 16 17:29:35 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.46 released.

	* Throughout: More spelling fixups.

	* buslogic.c: Add a few more fixups from Dave.  Disk translation
	mainly.

	* pas16.c: Add a few patches (Drew?).


Thu Aug 11 20:45:15 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.44 released.

	* hosts.c: Add type casts for scsi_init_malloc.

	* scsicam.c: Add type cast.

Wed Aug 10 19:23:01 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.43 released.

	* Throughout: Spelling cleanups. [??]

	* aha152x.c, NCR53*.c, fdomain.c, g_NCR5380.c, pas16.c, seagate.c,
	 t128.c: Use request_irq, not irqaction. [??]

	* aha1542.c: Move test for shost before we start to use shost.

	* aha1542.c, aha1740.c, ultrastor.c, wd7000.c: Use new
	calling sequence for request_irq.

	* buslogic.c: Update from Dave Gentzel.

Tue Aug  9 09:32:59 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.42 released.

	* NCR5380.c: Change NCR5380_print_status to static.

	* seagate.c: A few more bugfixes.  Only Drew knows what they are
	for.

	* ultrastor.c: Tweak some __asm__ directives so that it works
	with newer compilers. [??]

Sat Aug  6 21:29:36 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.40 released.

	* NCR5380.c: Return SCSI_RESET_WAKEUP from reset function.

	* aha1542.c: Reset mailbox status after a bus device reset.

	* constants.c: Fix typo (;;).

	* g_NCR5380.c:
	* pas16.c:  Correct usage of NCR5380_init.

	* scsi.c: Remove redundant (and unused variables).

	* sd.c: Use memset to clear all of rscsi_disks before we use it.

	* sg.c: Ditto, except for scsi_generics.

	* sr.c: Ditto, except for scsi_CDs.

	* st.c: Initialize STp->device.

	* seagate.c: Fix bug. [Drew]

Thu Aug  4 08:47:27 1994  Eric Youngdale  (eric@andante)

	* Linux 1.1.39 released.

	* Makefile: Fix typo in NCR53C7xx.

	* st.c: Print correct number for device.

Tue Aug  2 11:29:14 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.38 released.

	Lots of changes in 1.1.38.  All from Drew unless otherwise noted.

	* 53c7,8xx.c: New file from Drew.  PCI driver.

	* 53c7,8xx.h: Likewise.

	* 53c7,8xx.scr: Likewise.

	* 53c8xx_d.h, 53c8xx_u.h, script_asm.pl: Likewise.

	* scsicam.c: New file from Drew.  Read block 0 on the disk and
	read the partition table.  Attempt to deduce the geometry from
	the partition table if possible.  Only used by 53c[7,8]xx right
	now, but could be used by any device for which we have no way
	of identifying the geometry.

	* sd.c: Use device letters instead of sd%d in a lot of messages.

	* seagate.c: Fix bug that resulted in lockups with some devices.

	* sr.c (sr_open): Return -EROFS, not -EACCES if we attempt to open
	device for write.

	* hosts.c, Makefile: Update for new driver.

	* NCR5380.c, NCR5380.h, g_NCR5380.h: Update from Drew to support
	53C400 chip.

	* constants.c: Define CONST_CMND and CONST_MSG.  Other minor
	cleanups along the way.  Improve handling of CONST_MSG.

	* fdomain.c, fdomain.h: New version from Rik Faith.  Update to
	5.18.  Should now support TMC-3260 PCI card with 18C30 chip.

	* pas16.c: Update with new irq initialization.

	* t128.c: Update with minor cleanups.

	* scsi.c (scsi_pid): New variable - gives each command a unique
	id. Add Quantum LPS5235S to blacklist.  Change in_scan to
	in_scan_scsis and make global.

	* scsi.h: Add some defines for extended message handling,
	INITIATE/RELEASE_RECOVERY.  Add a few new fields to support sync
	transfers.

	* scsi_ioctl.h: Add ioctl to request synchronous transfers.


Tue Jul 26 21:36:58 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.37 released.

	* aha1542.c: Always call aha1542_mbenable, use new udelay
	mechanism so we do not wait a long time if the board does not
	implement this command.

	* g_NCR5380.c: Remove #include <linux/config.h> and #if
	defined(CONFIG_SCSI_*).

	* seagate.c: Likewise.

	Next round of changes to support loadable modules.  Getting closer
	now, still not possible to do anything remotely usable.

	hosts.c: Create a linked list of detected high level devices.
	(scsi_register_device): New function to insert into this list.
	(scsi_init): Call scsi_register_device for each of the known high
	level drivers.

	hosts.h: Add prototype for linked list header.  Add structure
	definition for device template structure which defines the linked
	list.

	scsi.c: (scan_scsis): Use linked list instead of knowledge about
	existing high level device drivers.
	(scsi_dev_init): Use init functions for drivers on linked list
	instead of explicit list to initialize and attach devices to high
	level drivers.

	scsi.h: Add new field "attached" to scsi_device - count of number
	of high level devices attached.

	sd.c, sr.c, sg.c, st.c: Adjust init/attach functions to use new
	scheme.

Sat Jul 23 13:03:17 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.35 released.

	* ultrastor.c: Change constraint on asm() operand so that it works
	with gcc 2.6.0.

Thu Jul 21 10:37:39 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.33 released.

	* sr.c(sr_open): Do not allow opens with write access.

Mon Jul 18 09:51:22 1994 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.31 released.

	* sd.c: Increase SD_TIMEOUT from 300 to 600.

	* sr.c: Remove stray task_struct* variable that was no longer
	used.

	* sr_ioctl.c: Fix typo in up() call.

Sun Jul 17 16:25:29 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.30 released.

	* scsi.c (scan_scsis): Fix detection of some Toshiba CDROM drives
	that report themselves as disk drives.

	* (Throughout): Use request.sem instead of request.waiting.
	Should fix swap problem with fdomain.

Thu Jul 14 10:51:42 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.29 released.

	* scsi.c (scan_scsis): Add new devices to end of linked list, not
	to the beginning.

	* scsi.h (SCSI_SLEEP): Remove brain dead hack to try to save
	the task state before sleeping.

Sat Jul  9 15:01:03 1994  Eric Youngdale  (eric@esp22)

	More changes to eventually support loadable modules.  Mainly
	we want to use linked lists instead of arrays because it is easier
	to dynamically add and remove things this way.

	Quite a bit more work is needed before loadable modules are
	possible (and usable) with scsi, but this is most of the grunge
	work.

	* Linux 1.1.28 released.

	* scsi.c, scsi.h (allocate_device, request_queueable): Change
	argument from index into scsi_devices to a pointer to the
	Scsi_Device struct.

	* Throughout: Change all calls to allocate_device,
	request_queueable to use new calling sequence.

	* Throughout: Use SCpnt->device instead of
	scsi_devices[SCpnt->index].  Ugh - the pointer was there all along
	- much cleaner this way.

	* scsi.c (scsi_init_malloc, scsi_free_malloc): New functions -
	allow us to pretend that we have a working malloc when we
	initialize.  Use this instead of passing memory_start, memory_end
	around all over the place.

	* scsi.h, st.c, sr.c, sd.c, sg.c: Change *_init1 functions to use
	scsi_init_malloc, remove all arguments, no return value.

	* scsi.h: Remove index field from Scsi_Device and Scsi_Cmnd
	structs.

	* scsi.c (scsi_dev_init): Set up for scsi_init_malloc.
	(scan_scsis): Get SDpnt from scsi_init_malloc, and refresh
	when we discover a device.  Free pointer before returning.
	Change scsi_devices into a linked list.

	* scsi.c (scan_scsis): Change to only scan one host.
	(scsi_dev_init): Loop over all detected hosts, and scan them.

	* hosts.c  (scsi_init_free): Change so that  number of extra bytes
	is stored in struct, and we do not have to pass it each time.

	* hosts.h: Change Scsi_Host_Template struct to include "next" and
	"release" functions.  Initialize to NULL in all low level
	adapters.

	* hosts.c: Rename scsi_hosts to builtin_scsi_hosts, create linked
	list scsi_hosts, linked together with the new "next" field.

Wed Jul  6 05:45:02 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.25 released.

	* aha152x.c: Changes from Juergen - cleanups and updates.

	* sd.c, sr.c: Use new check_media_change and revalidate
	file_operations fields.

	* st.c, st.h: Add changes from Kai Makisara, dated Jun 22.

	* hosts.h: Change SG_ALL back to 0xff.  Apparently soft error
	in /dev/brain resulted in having this bumped up.
	Change first parameter in bios_param function to be Disk * instead
	of index into rscsi_disks.

	* sd_ioctl.c: Pass pointer to rscsi_disks element instead of index
	to array.

	* sd.h: Add struct name "scsi_disk" to typedef for Scsi_Disk.

	* scsi.c: Remove redundant Maxtor XT8760S from blacklist.
	In scsi_reset, add printk when DEBUG defined.

	* All low level drivers: Modify definitions of bios_param in
	appropriate way.

Thu Jun 16 10:31:59 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.20 released.

	* scsi_ioctl.c: Only pass down the actual number of characters
	required to scsi_do_cmd, not the one rounded up to a even number
	of sectors.

	* ultrastor.c: Changes from Caleb Epstein for 24f cards.  Support
	larger SG lists.

	* ultrastor.c: Changes from me - use scsi_register to register
	host.  Add some consistency checking,

Wed Jun  1 21:12:13 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.19 released.

	* scsi.h: Add new return code for reset() function:
	SCSI_RESET_PUNT.

	* scsi.c: Make SCSI_RESET_PUNT the same as SCSI_RESET_WAKEUP for
	now.

	* aha1542.c: If the command responsible for the reset is not
	pending, return SCSI_RESET_PUNT.

	* aha1740.c, buslogic.c, wd7000.c, ultrastor.c: Return
	SCSI_RESET_PUNT instead of SCSI_RESET_SNOOZE.

Tue May 31 19:36:01 1994  Eric Youngdale  (eric@esp22)

	* buslogic.c: Do not print out message about "must be Adaptec"
	if we have detected a buslogic card.  Print out a warning message
	if we are configuring for >16Mb, since the 445S at board level
	D or earlier does not work right.  The "D" level board can be made
	to work by flipping an undocumented switch, but this is too subtle.

    Changes based upon patches in Yggdrasil distribution.

	* sg.c, sg.h: Return sense data to user.

	* aha1542.c, aha1740.c, buslogic.c: Do not panic if
	sense buffer is wrong size.

	* hosts.c: Test for ultrastor card before any of the others.

	* scsi.c: Allow boot-time option for max_scsi_luns=? so that
	buggy firmware has an easy work-around.

Sun May 15 20:24:34 1994  Eric Youngdale  (eric@esp22)

	* Linux 1.1.15 released.

	Post-codefreeze thaw...

	* buslogic.[c,h]: New driver from David Gentzel.

	* hosts.h: Add use_clustering field to explicitly say whether
	clustering should be used for devices attached to this host
	adapter.  The buslogic board apparently supports large SG lists,
	but it is apparently faster if sd.c condenses this into a smaller
	list.

	* sd.c: Use this field instead of heuristic.

	* All host adapter include files: Add appropriate initializer for
	use_clustering field.

	* scsi.h: Add #defines for return codes for the abort and reset
	functions.  There are now a specific set of return codes to fully
	specify all of the possible things that the low-level adapter
	could do.

	* scsi.c: Act based upon return codes from abort/reset functions.

	* All host adapter abort/reset functions: Return new return code.

	* Add code in scsi.c to help debug timeouts.  Use #define
	DEBUG_TIMEOUT to enable this.

	* scsi.c: If the host->irq field is set, use
	disable_irq/enable_irq before calling queuecommand if we
	are not already in an interrupt.  Reduce races, and we
	can be sloppier about cli/sti in the interrupt routines now
	(reduce interrupt latency).

	* constants.c: Fix some things to eliminate warnings.  Add some
	sense descriptions that were omitted before.

	* aha1542.c: Watch for SCRD from host adapter - if we see it, set
	a flag.  Currently we only print out the number of pending
	commands that might need to be restarted.

	* aha1542.c (aha1542_abort): Look for lost interrupts, OGMB still
	full, and attempt to recover.  Otherwise give up.

	* aha1542.c (aha1542_reset): Try BUS DEVICE RESET, and then pass
	DID_RESET back up to the upper level code for all commands running
	on this target (even on different LUNs).

Sat May  7 14:54:01 1994

	* Linux 1.1.12 released.

	* st.c, st.h: New version from Kai.  Supports boot time
	specification of number of buffers.

	* wd7000.[c,h]: Updated driver from John Boyd.  Now supports
	more than one wd7000 board in machine at one time, among other things.

Wed Apr 20 22:20:35 1994

	* Linux 1.1.8 released.

	* sd.c: Add a few type casts where scsi_malloc is called.

Wed Apr 13 12:53:29 1994

	* Linux 1.1.4 released.

	* scsi.c: Clean up a few printks (use %p to print pointers).

Wed Apr 13 11:33:02 1994

	* Linux 1.1.3 released.

	* fdomain.c: Update to version 5.16 (Handle different FIFO sizes
	better).

Fri Apr  8 08:57:19 1994

	* Linux 1.1.2 released.

	* Throughout: SCSI portion of cluster diffs added.

Tue Apr  5 07:41:50 1994

	* Linux 1.1 development tree initiated.

	* The linux 1.0 development tree is now effectively frozen except
	for obvious bugfixes.

******************************************************************
******************************************************************
******************************************************************
******************************************************************

Sun Apr 17 00:17:39 1994

	* Linux 1.0, patchlevel 9 released.

	* fdomain.c: Update to version 5.16 (Handle different FIFO sizes
	better).

Thu Apr  7 08:36:20 1994

	* Linux 1.0, patchlevel8 released.

	* fdomain.c: Update to version 5.15 from 5.9.  Handles 3.4 bios.

Sun Apr  3 14:43:03 1994

	* Linux 1.0, patchlevel6 released.

	* wd7000.c: Make stab at fixing race condition.

Sat Mar 26 14:14:50 1994

	* Linux 1.0, patchlevel5 released.

	* aha152x.c, Makefile: Fix a few bugs (too much data message).
	Add a few more bios signatures. (Patches from Juergen).

	* aha1542.c: Fix race condition in aha1542_out.

Mon Mar 21 16:36:20 1994

	* Linux 1.0, patchlevel3 released.

	* sd.c, st.c, sr.c, sg.c: Return -ENXIO, not -ENODEV if we attempt
	to open a non-existent device.

	* scsi.c: Add Chinon cdrom to blacklist.

	* sr_ioctl.c: Check return status of verify_area.

Sat Mar  6 16:06:19 1994

	* Linux 1.0 released (technically a pre-release).

	* scsi.c: Add IMS CDD521, Maxtor XT-8760S to blacklist.

Tue Feb 15 10:58:20 1994

        * pl15e released.

        * aha1542.c: For 1542C, allow dynamic device scan with >1Gb turned
	off.

	* constants.c: Fix typo in definition of CONSTANTS.

        * pl15d released.

Fri Feb 11 10:10:16 1994

        * pl15c released.

	* scsi.c: Add Maxtor XT-3280 and Rodime RO3000S to blacklist.

	* scsi.c: Allow tagged queueing for scsi 3 devices as well.
	Some really old devices report a version number of 0.  Disallow
	LUN != 0 for these.

Thu Feb 10 09:48:57 1994

        * pl15b released.

Sun Feb  6 12:19:46 1994

        * pl15a released.

Fri Feb  4 09:02:17 1994

        * scsi.c: Add Teac cdrom to blacklist.

Thu Feb  3 14:16:43 1994

	* pl15 released.

Tue Feb  1 15:47:43 1994

	* pl14w released.

	* wd7000.c (wd_bases): Fix typo in last change.

Mon Jan 24 17:37:23 1994

	* pl14u released.

	* aha1542.c: Support 1542CF/extended bios.  Different from 1542C

	* wd7000.c: Allow bios at 0xd8000 as well.

	* ultrastor.c: Do not truncate cylinders to 1024.

	* fdomain.c: Update to version 5.9 (add new bios signature).

	* NCR5380.c: Update from Drew - should work a lot better now.

Sat Jan  8 15:13:10 1994

	* pl14o released.

	* sr_ioctl.c: Zero reserved field before trying to set audio volume.

Wed Jan  5 13:21:10 1994

	* pl14m released.

	* fdomain.c: Update to version 5.8.  No functional difference???

Tue Jan  4 14:26:13 1994

	* pl14l released.

	* ultrastor.c: Remove outl, inl functions (now provided elsewhere).

Mon Jan  3 12:27:25 1994

	* pl14k released.

	* aha152x.c: Remove insw and outsw functions.

	* fdomain.c: Ditto.

Wed Dec 29 09:47:20 1993

	* pl14i released.

	* scsi.c: Support RECOVERED_ERROR for tape drives.

	* st.c: Update of tape driver from Kai.

Tue Dec 21 09:18:30 1993

	* pl14g released.

	* aha1542.[c,h]: Support extended BIOS stuff.

	* scsi.c: Clean up messages about disks, so they are displayed as
	sda, sdb, etc instead of sd0, sd1, etc.

	* sr.c:  Force reread of capacity if disk was changed.
	Clear buffer before asking for capacity/sectorsize (some drives
	do not report this properly).  Set needs_sector_size flag if
	drive did not return sensible sector size.

Mon Dec 13 12:13:47 1993

	* aha152x.c: Update to version .101 from Juergen.

Mon Nov 29 03:03:00 1993

        * linux 0.99.14 released.

	* All scsi stuff moved from kernel/blk_drv/scsi to drivers/scsi.

	* Throughout: Grammatical corrections to various comments.

	* Makefile: fix so that we do not need to compile things we are
	not going to use.

	* NCR5380.c, NCR5380.h, g_NCR5380.c, g_NCR5380.h, pas16.c,
	pas16.h, t128.c, t128.h:  New files from Drew.

	* aha152x.c, aha152x.h: New files from Juergen Fischer.

	* aha1542.c: Support for more than one 1542 in the machine
	at the same time.  Make functions static that do not need
	visibility.

	* aha1740.c: Set NEEDS_JUMPSTART flag in reset function, so we
	know to restart the command.  Change prototype of aha1740_reset
	to take a command pointer.

	* constants.c: Clean up a few things.

	* fdomain.c: Update to version 5.6.  Move snarf_region.  Allow
	board to be set at different SCSI ids.  Remove support for
	reselection (did not work well).  Set JUMPSTART flag in reset
	code.

	* hosts.c: Support new low-level adapters.  Allow for more than
	one adapter of a given type.

	* hosts.h: Allow for more than one adapter of a given type.

	* scsi.c:  Add scsi_device_types array, if NEEDS_JUMPSTART is set
	after a low-level reset, start the command again.  Sort blacklist,
	and add Maxtor MXT-1240S, XT-4170S, NEC CDROM 84, Seagate ST157N.

	* scsi.h: Add constants for tagged queueing.

	* Throughout: Use constants from major.h instead of hardcoded
	numbers for major numbers.

	* scsi_ioctl.c: Fix bug in buffer length in ioctl_command.  Use
	verify_area in GET_IDLUN ioctl.  Add new ioctls for
	TAGGED_QUEUE_ENABLE, DISABLE.  Only allow IOCTL_SEND_COMMAND by
	superuser.

	* sd.c: Only pay attention to UNIT_ATTENTION for removable disks.
	Fix bug where sometimes portions of blocks would get lost
	resulting in processes hanging.  Add messages when we spin up a
	disk, and fix a bug in the timing.  Increase read-ahead for disks
	that are on a scatter-gather capable host adapter.

	* seagate.c: Fix so that some parameters can be set from the lilo
	prompt.  Supply jumpstart flag if we are resetting and need the
	command restarted.   Fix so that we return 1 if we detect a card
	so that multiple card detection works correctly.  Add yet another
	signature for FD cards (950).  Add another signature for ST0x.

	* sg.c, sg.h: New files from Lawrence Foard for generic scsi
	access.

	* sr.c:  Add type casts for (void*) so that we can do pointer
	arithmetic.  Works with GCC without this, but it is not strictly
	correct.  Same bugfix as was in sd.c.  Increase read-ahead a la
	disk driver.

	* sr_ioctl.c: Use scsi_malloc buffer instead of buffer from stack
	since we cannot guarantee that the stack is < 16Mb.

	ultrastor.c: Update to support 24f properly (JFC's driver).

	wd7000.c: Supply jumpstart flag for reset.  Do not round up
	number of cylinders in biosparam function.

Sat Sep  4 20:49:56 1993

    * 0.99pl13 released.

    * Throughout:  Use check_region/snarf_region for all low-level
    drivers.

    * aha1542.c: Do hard reset instead of soft (some ethercard probes
    screw us up).

    * scsi.c: Add new flag ASKED_FOR_SENSE so that we can tell if we are
    in a loop whereby the device returns null sense data.

    * sd.c: Add code to spin up a drive if it is not already spinning.
    Do this one at a time to make it easier on power supplies.

    * sd_ioctl.c: Use sync_dev instead of fsync_dev in BLKFLSBUF ioctl.

    * seagate.c: Switch around DATA/CONTROL lines.

    * st.c: Change sense to unsigned.

Thu Aug  5 11:59:18 1993

    * 0.99pl12 released.

    * constants.c, constants.h: New files with ascii descriptions of
    various conditions.

    * Makefile: Do not try to count the number of low-level drivers,
    just generate the list of .o files.

    * aha1542.c: Replace 16 with sizeof(SCpnt->sense_buffer).  Add tests
    for addresses > 16Mb, panic if we find one.

    * aha1740.c: Ditto with sizeof().

    * fdomain.c: Update to version 3.18.  Add new signature, register IRQ
    with irqaction.  Use ID 7 for new board.  Be more intelligent about
    obtaining the h/s/c numbers for biosparam.

    * hosts.c: Do not depend upon Makefile generated count of the number
    of low-level host adapters.

    * scsi.c: Use array for scsi_command_size instead of a function.  Add
    Texel cdrom and Maxtor XT-4380S to blacklist.  Allow compile time
    option for no-multi lun scan.  Add semaphore for possible problems
    with handshaking, assume device is faulty until we know it not to be
    the case.  Add DEBUG_INIT symbol to dump info as we scan for devices.
    Zero sense buffer so we can tell if we need to request it.  When
    examining sense information, request sense if buffer is all zero.
    If RESET, request sense information to see what to do next.

    * scsi_debug.c: Change some constants to use symbols like INT_MAX.

    * scsi_ioctl.c (kernel_scsi_ioctl): New function -for making ioctl
    calls from kernel space.

    * sd.c: Increase timeout to 300.  Use functions in constants.h to
    display info.  Use scsi_malloc buffer for READ_CAPACITY, since
    we cannot guarantee that a stack based buffer is < 16Mb.

    * sd_ioctl.c: Add BLKFLSBUF ioctl.

    * seagate.c: Add new compile time options for ARBITRATE,
    SLOW_HANDSHAKE, and SLOW_RATE.  Update assembly loops for transferring
    data.  Use kernel_scsi_ioctl to request mode page with geometry.

    * sr.c: Use functions in constants.c to display messages.

    * st.c: Support for variable block size.

    * ultrastor.c: Do not use cache for tape drives.  Set
    unchecked_isa_dma flag, even though this may not be needed (gets set
    later).

Sat Jul 17 18:32:44 1993

    * 0.99pl11 released.  C++ compilable.

    * Throughout: Add type casts all over the place, and use "ip" instead
    of "info" in the various biosparam functions.

    * Makefile: Compile seagate.c with C++ compiler.

    * aha1542.c: Always set ccb pointer as this gets trashed somehow on
    some systems.  Add a few type casts.  Update biosparam function a little.

    * aha1740.c: Add a few type casts.

    * fdomain.c: Update to version 3.17 from 3.6.  Now works with
    TMC-18C50.

    * scsi.c: Minor changes here and there with datatypes.  Save use_sg
    when requesting sense information so that this can properly be
    restored if we retry the command.  Set aside dma buffers assuming each
    block is 1 page, not 1Kb minix block.

    * scsi_ioctl.c: Add a few type casts.  Other minor changes.

    * sd.c:  Correctly  free all scsi_malloc'd memory if we run out of
    dma_pool. Store blocksize information for each partition.

    * seagate.c: Minor cleanups here and there.

    * sr.c: Set up blocksize array for all discs.  Fix bug in freeing
    buffers if we run out of dma pool.

Thu Jun  2 17:58:11 1993

    * 0.99pl10 released.

    * aha1542.c: Support for BT 445S (VL-bus board with no dma channel).

    * fdomain.c: Upgrade to version 3.6. Preliminary support for TNC-18C50.

    * scsi.c: First attempt to fix problem with old_use_sg.  Change
    NOT_READY to a SUGGEST_ABORT.  Fix timeout race where time might
    get decremented past zero.

    * sd.c: Add block_fsync function to dispatch table.

    * sr.c: Increase timeout to 500 from 250.  Add entry for sync in
    dispatch table (supply NULL).  If we do not have a sectorsize,
    try to get it in the sd_open function.  Add new function just to
    obtain sectorsize.

    * sr.h: Add needs_sector_size semaphore.

    * st.c: Add NULL for fsync in dispatch table.

    * wd7000.c: Allow another condition for power on that are normal
    and do not require a panic.

Thu Apr 22 23:10:11 1993

    * 0.99pl9 released.

    * aha1542.c: Use (void) instead of () in setup_mailboxes.

    * scsi.c: Initialize transfersize and underflow fields in SCmd to 0.
    Do not panic for unsupported message bytes.

    * scsi.h: Allocate 12 bytes instead of 10 for commands.  Add
    transfersize and underflow fields.

    * scsi_ioctl.c: Further bugfix to ioctl_probe.

    * sd.c: Use long instead of int for last parameter in sd_ioctl.
    Initialize transfersize and underflow fields.

    * sd_ioctl.c: Ditto for sd_ioctl(,,,,);

    * seagate.c: New version from Drew.  Includes new signatures for FD
    cards.  Support for 0ws jumper. Correctly initialize
    scsi_hosts[hostnum].this_id.  Improved handing of
    disconnect/reconnect, and support command linking.  Use
    transfersize and underflow fields.  Support scatter-gather.

    * sr.c, sr_ioctl.c: Use long instead of int for last parameter in sr_ioctl.
    Use buffer and buflength in do_ioctl.  Patches from Chris Newbold for
    scsi-2 audio commands.

    * ultrastor.c: Comment out in_byte (compiler warning).

    * wd7000.c: Change () to (void) in wd7000_enable_dma.

Wed Mar 31 16:36:25 1993

    * 0.99pl8 released.

    * aha1542.c: Handle mailboxes better for 1542C.
        Do not truncate number of cylinders at 1024 for biosparam call.

    * aha1740.c: Fix a few minor bugs for multiple devices.
        Same as above for biosparam.

    * scsi.c: Add lockable semaphore for removable devices that can have
    media removal prevented.  Add another signature for flopticals.
    (allocate_device): Fix race condition.  Allow more space in dma pool
    for blocksizes of up to 4Kb.

    * scsi.h: Define COMMAND_SIZE.  Define a SCSI specific version of
    INIT_REQUEST that can run with interrupts off.

    * scsi_ioctl.c: Make ioctl_probe function more idiot-proof.  If
    a removable device says ILLEGAL REQUEST to a door-locking command,
    clear lockable flag.  Add SCSI_IOCTL_GET_IDLUN ioctl.  Do not attempt
    to lock door for devices that do not have lockable semaphore set.

    * sd.c: Fix race condition for multiple disks.  Use INIT_SCSI_REQUEST
    instead of INIT_REQUEST.  Allow sector sizes of 1024 and 256.  For
    removable disks that are not ready, mark them as having a media change
    (some drives do not report this later).

    * seagate.c: Use volatile keyword for memory-mapped register pointers.

    * sr.c: Fix race condition, a la sd.c.  Increase the number of retries
    to 1.  Use INIT_SCSI_REQUEST.  Allow 512 byte sector sizes.  Do a
    read_capacity when we init the device so we know the size and
    sectorsize.

    * st.c: If ioctl not found in st.c, try scsi_ioctl for others.

    * ultrastor.c: Do not truncate number of cylinders at 1024 for
    biosparam call.

    * wd7000.c: Ditto.
    Throughout: Use COMMAND_SIZE macro to determine length of scsi
    command.



Sat Mar 13 17:31:29 1993

    * 0.99pl7 released.

    Throughout: Improve punctuation in some messages, and use new
    verify_area syntax.

    * aha1542.c: Handle unexpected interrupts better.

    * scsi.c: Ditto.  Handle reset conditions a bit better, asking for
    sense information and retrying if required.

    * scsi_ioctl.c: Allow for 12 byte scsi commands.

    * ultrastor.c: Update to use scatter-gather.

Sat Feb 20 17:57:15 1993

    * 0.99pl6 released.

    * fdomain.c: Update to version 3.5.  Handle spurious interrupts
    better.

    * sd.c: Use register_blkdev function.

    * sr.c: Ditto.

    * st.c: Use register_chrdev function.

    * wd7000.c: Undo previous change.

Sat Feb  6 11:20:43 1993

    * 0.99pl5 released.

    * scsi.c: Fix bug in testing for UNIT_ATTENTION.

    * wd7000.c: Check at more addresses for bios.  Fix bug in biosparam
    (heads & sectors turned around).

Wed Jan 20 18:13:59 1993

    * 0.99pl4 released.

    * scsi.c: Ignore leading spaces when looking for blacklisted devices.

    * seagate.c: Add a few new signatures for FD cards.  Another patch
    with SCint to fix race condition.  Use recursion_depth to keep track
    of how many times we have been recursively called, and do not start
    another command unless we are on the outer level.  Fixes bug
    with Syquest cartridge drives (used to crash kernel), because
    they do not disconnect with large data transfers.

Tue Jan 12 14:33:36 1993

    * 0.99pl3 released.

    * fdomain.c: Update to version 3.3 (a few new signatures).

    * scsi.c: Add CDU-541, Denon DRD-25X to blacklist.
    (allocate_request, request_queueable): Init request.waiting to NULL if
    non-buffer type of request.

    * seagate.c:  Allow controller to be overridden with CONTROLLER symbol.
    Set SCint=NULL when we are done, to remove race condition.

    * st.c: Changes from Kai.

Wed Dec 30 20:03:47 1992

    * 0.99pl2 released.

    * scsi.c: Blacklist back in.  Remove Newbury drive as other bugfix
    eliminates need for it here.

    * sd.c: Return ENODEV instead of EACCES if no such device available.
    (sd_init) Init blkdev_fops earlier so that sd_open is available sooner.

    * sr.c: Same as above for sd.c.

    * st.c: Return ENODEV instead of ENXIO if no device.  Init chrdev_fops
    sooner, so that it is always there even if no tapes.

    * seagate.c (controller_type): New variable to keep track of ST0x or
    FD.  Modify signatures list to indicate controller type, and init
    controller_type once we find a match.

    * wd7000.c (wd7000_set_sync): Remove redundant function.

Sun Dec 20 16:26:24 1992

    * 0.99pl1 released.

    * scsi_ioctl.c: Bugfix - check dev->index, not dev->id against
    NR_SCSI_DEVICES.

    * sr_ioctl.c: Verify that device exists before allowing an ioctl.

    * st.c: Patches from Kai - change timeout values, improve end of tape
    handling.

Sun Dec 13 18:15:23 1992

    * 0.99 kernel released.  Baseline for this ChangeLog.
