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  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.
