2008-04-24  Jonathan Larmour  <jifl@eCosCentric.com>

	* doc/disk.sgml: Describe some more detail of disk event
	registration including the use of the base disk device
	driver, and that hardware drivers must indicate connected
	disks at time of disk event registration.
	* src/disk.c (disk_init): Initialise controller busy flag.
	(disk_set_config): Do not care about if the disk is connected
	or valid if the purpose is to register a disk event handler.

2007-09-20  Jonathan Larmour  <jifl@eCosCentric.com>

	* src/disk.c (read_mbr): Number of partitions is not constant 4,
	instead use determined number.
	Due to 2007-07-19 change, don't overwrite partition type when
	attempting FAT sector detection unless we really do find a FAT
	fs.

2007-07-19  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c (read_mbr): Rearrange code to favour an apparently
	valid partition table over an apparently valid FAT boot sector in
	sector 0. There are devices that have both, and the original code
	tended to chose the wrong one if the boot sector was apparently
	correct.

2007-06-27  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c: Move buffer used to read MBR from stack to a static
	buffer. This buffer can now be up to 2048 bytes, which is too much
	to expect of a thread stack. Since there is only one buffer, a
	mutex is also defined to serialize access to it.
	(disk_connected): Initialize block_size from sector_size. Also
	initialize mounts counter.

	* cdl/io_disk.cdl: Add CYGINT_IO_DISK_MAX_SECTOR_SIZE to define
	size of MBR buffer.

	* include/diskio.h (struct cyg_disk_identify_t): Add sector_size
	field. Change comment on max_transfer to sectors rather than
	bytes.

	* doc/disk.sgml: Extend documentation.
	
2007-06-04  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c (read_mbr): Add additional validation of suspected
	FAT boot sector. It is possible for the original code to be misled
	under certain circumstances, particularly where a partition table
	has been overlayed on a FAT boot sector.
	(read_partition): Check for correct boot indicator value.

2007-06-03  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c (read_partition): Add some simple validation of
	partition parameters and reject the partition if these do not
	succeed. 

2007-05-17  Nick Garnett  <nickg@ecoscentric.com>

	* cdl/io_disk.cdl: Add options for removable media support.

	* include/disk.h (struct disk_channel, DISK_CHANNEL) 
	(DISK_CHANNEL_INIT): Add fields for disk event callback.

	* include/diskio.h (struct  cyg_disk_event_t): Add this structure
	to allow set/get of disk event callback.

	* src/disk.c (disk_get_config, disk_set_config): Add get/set cases
	for disk event callback.
	(disk_bread, disk_bwrite): Move location of done label so that
	errors result in correct exit from the function. Previously, the
	controller was left busy and the condition variable was not
	signalled.

	* tests/dumpdisk.c (SERVER): Change server IP address.
	
	* doc/disk.sgml: Updated documentation.

2007-05-01  Jonathan Larmour  <jifl@eCosCentric.com>

	* tests/dumpdisk.c: Align blocks to cache line if
	CYGINT_IO_DISK_ALIGN_BUFS_TO_CACHELINE says so.
	Set test device from CYGDAT_DEVS_DISK_TEST_DEVICE if available.
	* tests/disktest.c: Ditto.

2007-03-06  John Dallaway  <jld@ecoscentric.com>

	* doc/disk.sgml: Use LITERAL rather than TERM in PARA block.

2007-03-06  Jonathan Larmour  <jifl@eCosCentric.com>

	* cdl/io_disk.cdl (CYGINT_IO_DISK_ALIGN_BUFS_TO_CACHELINE):
	New interface for drivers to indicate that data transfer buffers
	need aligning to the dcache line size.
	* doc/disk.sgml: Document it. Also CYGSEM_IO_DISK_DETECT_FAT_BOOT
	which had been omitted before.
	* src/disk.c (read_mbr): Align buffer to dcache line if neededa.

2007-02-01  John Dallaway  <jld@ecoscentric.com>

	* cdl/io_disk.cdl: Build the dumpdisk test as an extra test since
	it requires a disk driver to specify CYGDAT_DEVS_DISK_CFG.

2007-01-18  Jonathan Larmour  <jifl@eCosCentric.com>

	* include/disk.h (DISK_CHANNEL_INIT): Typo: memset needs
	address of disk_info.

2006-10-20  John Dallaway  <jld@ecoscentric.com>

	* doc/disk.sgml: Fix typographical errors in markup.

2006-09-21  Jonathan Larmour  <jifl@eCosCentric.com>

	* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
	slot intended for entire disk's own devtab.

	* src/disk.c (disk_lookup): Just access pdevs_dev directly
	with no adjusted offset.
	(disk_init): No longer set entry 0 from device devtab.
	It's unnecessary.

2006-09-20  Jonathan Larmour  <jifl@eCosCentric.com>

	* include/disk.h: Merge eCosCentric CVS with public eCos CVS.
	This merges (and therefore changes) the API. ChangeLog
	entries have been incorporated in the correct places below.
	* doc/disk.sgml: Update in line with above, and document
	DISK_CHANNEL_INIT.
	* include/diskio.h: Also merged.
	* cdl/io_disk.cdl: Also merged.
	* src/disk.c: Also merged.

2006-08-18  Andy Jackson  <andy@xylanta.com>

	* cdl/io_disk.cdl: Made debugging CDL controlled. 
	* src/disk.c: Added support to allow non-CHS disk devices to 
	use LBA information in MBR.

2006-04-05  John Dallaway  <jld@ecoscentric.com>

	* cdl/io_disk.cdl: Add reference to package documentation.

2006-03-20  Jonathan Larmour  <jifl@eCosCentric.com>

	* src/disk.c (read_mbr): Add optional routine to support media
	that _may_ have a partition table, and if not, would be FAT.
	Taken from MMC/MCI driver.
	* cdl/io_disk.cdl (CYGSEM_IO_DISK_DETECT_FAT_BOOT): New option
	to support this, only enabled for those drivers that think they
	may need it (indicated by new interface
	CYGINT_IO_DISK_DETECT_FAT_BOOT_DEFAULT)

2006-02-06  Nick Garnett  <nickg@ecoscentric.com>

	* doc/disk.sgml: Fixed up some inconsistencies.

2006-02-03  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c (read_partition): Switched to favour LBA partition
	information in partition tables. This also means we don't now rely
	on the driver reporting a correct CHS size for the disk.
	(disk_bread, disk_bwrite): API changed to take length in sectors
	rather than bytes. Also call hardware driver to transfer in
	(up to) max_transfer sized chunks, rather than a sector at a
	time. Call in to driver now made with DSR lock claimed, to avoid a
	race condition between the DSR and the calling thread.
	(disk_get_config): Added phys_block_size to channel info.

	* include/diskio.h (struct cyg_disk_identify_t): Added
	phys_block_size and max_transfer fields. These must be filled in
	by the driver.

	* cdl/io_disk.cdl: Added some disk tests.

	* doc/disk.sgml: Updated to reflect changes in interface between
	this package and the hardware drivers.

	* tests/disktest.c: Added test for disk performance. This program
	destroys the contents of the disk, so it is only enabled by
	explicit request.
	
	* tests/dumpdisk.c: Program to read the first N MiB of a disk and
	TFTP it to a server.
	
2005-12-12  Jonathan Larmour  <jifl@eCosCentric.com>

	* include/disk.h (DISK_CHANNEL_INIT): New macro. Allows a
	DISK_CHANNEL to be defined dynamically.

2005-12-02  Andrew Lunn  <andrew.lunn@ascom.ch>

	* src/disk.c: Add comments that bread/bwrite take the position and
	len in terms of blocks, not bytes.

2005-10-11  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c (disk_bread, disk_bwrite): Made calls to
	cyg_thread_yield() dependent on presence ok kernel.

2005-06-01  Jonathan Larmour  <jifl@eCosCentric.com>

	* src/disk.c (disk_bwrite): Uncomment the cyg_thread_yield() at
	the end to prevent thread starvation between threads at the same
	priority.
	(disk_bread): Ditto.

2004-07-21  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c (read_partition): Changed to account for very large
	disks which report bogus CHS geometry. We can only use the LBA
	partition parameters in such disks.
	(disk_set_config): Added some extra debug output.

2004-07-05  John Dallaway  <jld@ecoscentric.com>

	* doc/disk.sgml: Add note concerning logical CHS partition
	access limit.

2004-07-01  Savin Zlobec  <savin@elatec.si> 

 	* src/disk.c:
 	* include/disk.h:
 	* include/diskio.h:
 	Use predefined arrays for partition devices and info 
 	radher than malloc. Extended DISK_CHANNEL macro to
  	support defining maximum number of partitions.

2004-04-15  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c: Removed use of malloc() in driver system, replaced
	with statically reserved devtab and channel objects in disk_info
	structure.
	Various changes to support disconnect/reconnect of changeable
	media.

	* include/diskio.h: Added devtab and channel objects to
	cyg_disk_info_t structure to avoid use of malloc() in driver
	system. Added mount counter to disk_info structure.

	* include/disk.h: Changed disk_disconnected() function to take a
	pointer to a struct disk_channel rather than a struct
	cyg_devtab_entry. Added mount count to disk_channel structure.
	Moved include of diskio.h to end to fix declaration problems.

2004-02-12  Nick Garnett  <nickg@ecoscentric.com>

	* doc/disk.sgml: Added initial documentation.

2004-02-04  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c: Fixed bug in write routine where controller result
	field was not being initialized. Added signals on controller queue
	condition variable after setting controller busy flag to false.

	* include/disk.h: Made controller result and busy fields
	volatile. Just in case.

2004-01-23  Nick Garnett  <nickg@ecoscentric.com>

	* include/disk.h: 
	* src/disk.c:
	Many changes. Added additional disk_controller data structure to
	better reflect hardware structure. Added support for serialization
	of multithreaded accesses to a single controller. Added support
	for asynchronous, interrupt driven, IO operations. Various
	tidies.

2004-01-15  Nick Garnett  <nickg@ecoscentric.com>

	* src/disk.c:
	* include/disk.h: Removed block_pos arguments from
	hardware driver read and write calls: it is not necessary.

	* src/disk.c (read_mbr): Modified to read a complete sector from
	the disk rather than pieces. Drivers should only ever see
	reads/writes in multiples of 512 bytes.

2003-10-16 Savin Zlobec <savin@elatec.si>

	* src/disk.c:
        Check return code from MBR scan and set
        connected flag only if there was no error.

2003-09-01 Savin Zlobec <savin@elatec.si>

        * cdl/io_disk.cdl:
        * inc/disk.h:
        * inc/diskio.h:
        * src/disk.c:
        A block device IO implementation



//===========================================================================
// ####GPLCOPYRIGHTBEGIN####                                                
// -------------------------------------------                              
// This file is part of eCos, the Embedded Configurable Operating System.   
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 eCosCentric Limited     
//
// This program is free software; you can redistribute it and/or modify     
// it under the terms of the GNU General Public License as published by     
// the Free Software Foundation; either version 2 or (at your option) any   
// later version.                                                           
//
// This program is distributed in the hope that it will be useful, but      
// WITHOUT ANY WARRANTY; without even the implied warranty of               
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU        
// General Public License for more details.                                 
//
// You should have received a copy of the GNU General Public License        
// along with this program; if not, write to the                            
// Free Software Foundation, Inc., 51 Franklin Street,                      
// Fifth Floor, Boston, MA  02110-1301, USA.                                
// -------------------------------------------                              
// ####GPLCOPYRIGHTEND####                                                  
//===========================================================================
