*) minor change
+) feature added
-) something removed
!) fix
!!) critical fix
i) info


--
2012.07.26 - v0.42c

+) added code for ATAPI BUSY wait auto-adjustment. We poll and measure
BUSY-after-Interrupt delay. Next time we use this value to defere interrupt service
instead of polling.

--
2012.07.26 - v0.42c1

!) undone newer FreeBSD changes in Intel UDMA setup. Caused significant performance degrade on ATAPI.

--
2012.07.27 - v0.42d

!) fixed bug with setting ATAPI flag in AHCI IO flags for non-packet commands on ATAPI devices.

--
2012.07.27 - v0.42d1

!) fixed drive size reporting bug for CHS-only hardware. Was reported as 0,
since UserAddresableBlocks is not valid.

--
2012.07.27 - v0.42d2

!!) fixed bug with concurrent use of InternalSrb by ATAPI internal requests and AHCI internal requests.
Added AhciInternalSrb.

--
2012.07.28 - v0.42d3

!) added code for handling ATAPI on AHCI those generate interrupt,
but do not clear BUSY and do not affect any bit in channel IS register.
We should treat such case as in Native/Legacy ATA mode - just wait for BUSY release.
*) optimized Interrupt disable/enable case in AHCI branch of AtapiDmaReinit() and AtaSetTransferMode()
We shall not touch IE registers if no operaion is required.

--
2012.07.29 - v0.42d4

*) added logs to AHCI ATAPI pre-ready state checks.
!) fixed code for ATAPI BUSY wait auto-adjustment. Delay time was not stored in LunExt properly
+) added internal glabal option MaxIsrWait, which determines ATAPI BUSY wait threshold.
If expected delay is above MaxIsrWait, interrupt service shall be immediately posted to DPC.
It is defaulted to 40us for real hardware and to 200us for VBOX.
Previously shreshold was hardcoded.

--
2012.07.29 - v0.42d5

+) added chglog.txt
+) added ATA_REQ.ahci field to store error status observed in UniataAhciEndTransaction()
*) added logs to  UniataAhciEndTransaction() to study ATAPI completion in more details
*) removed extra logs from AtapiCheckInterrupt__(), added in v0.42d4

--
2012.07.29 - v0.42d5

+) added registry key for MaxIsrWait


--
2012.07.30 - v0.42d6

+) added FBS AHCI register definition (not used now)
+) added IDENTIFY and COMMAND definitions from ATA/ATAPI Command Set 2
+) added SCSI ERASE10 command definition
!) direct access to ATA Command register is replaced with call to AtaCommand() for
AHCI compatibility
*) added check for .Removable flag before sending SCSIOP_MEDIUM_REMOVAL
+) added ByteCount extraction from RFIS for ATAPI devices.

--
2012.07.30 - v0.42e

+) added MODE_SENSE6, Page CACHING support for HDDs
+) added more logs and fixed ByteCount extraction from RFIS for ATAPI devices.

--
2012.07.30 - v0.42e1

*) added setting of DRIVE_SELECT to AHCI ATAPI branch in H2D setup

--
2012.07.31 - v0.42e2

+) added definition of H2D FIS structure
+) added definition of FIS types (codes)
*) clarified definition (size) of ACMD block in IDE_AHCI_CMD and
PFIS, RFIS, SDBFIS in IDE_AHCI_RCV_FIS
*) defined constants for FIS filed offsets IDX_AHCI_i_Xxxx
*) added setting of IDE_DC_A_4BIT to AHCI H2D FIS setup
!) fixed bug with incorrect setting of high-order LBA bits in DriveSelect register for LBA48 commands
(should be 0 since 24-31 bits are stored in BlockNumberExp)
*) used UniataAhciWaitCommandReady() in ATAPI 'Special case' completion to wait for CI release.
*) changed AHCI ready wait granularity to 200 us (was 1 ms) in UniataAhciWaitCommandReady()

--
2012.08.01 - v0.42e3

*) added ACMD dump in UniataAhciBeginTransaction() for ATAPI debug
*) removed (for DEBUG) AHCI prefetch on ATAPI
+) added SACT AHCI register update before CI
*) removed unnecessary CMD register update in UniataAhciBeginTransaction(). ACT+CI is enough
i) analyzed SeaBIOS code v1.7 (http://code.coreboot.org/p/seabios/source/tree/bf079e16f8b0d016eb09787c2aebda359c41391a/src/ahci.c)
*) added ATA_AHCI_P_IX_INF flag to list of allowed interrupts
*) removed unnecessary RtlZeroMemory before UniataAhciSetupFIS_H2D in AHCI ATAPI branch

--
2012.08.01 - v0.42e4

+) (test) DMA-only mode for AHCI ATAPI

--
2012.08.01 - v0.42f

*) (test) DMA-only mode for AHCI ATAPI SCSIOP_REQUEST_SENSE
!) added handling for error-related IS bits. We should restart AHCI engine on all error conditions.
otherwise device comes into indetermined state.
*) adapter max transfer rate is now displayed in atactl -a output

--
2012.08.02 - v0.42f1

*) undone experimental changes with force DMA on AHCI ATAPI (will check later)
*) AHCI abort sequence is moved to UniataAhciAbortOperation()
+) implemented error handling in AHCI StopXxx() calls
*) added use of AHCI ACT register to WaitReady and internal SendCommand

--
2012.08.02 - v0.42f2

+) added support for v12 and v16 READ/WRITE/VERIFY SCSI command emulation.
It extends addressable space to 64bits (v16)
and gives supports for HDDs above 2Tb, they use more than 32bits for LBA.
*) undone all operations with AHCI ACT register

--
2012.08.02 - v0.42g

!) fixed bug with incorrect ATA_AHCI_CMD_WRITE setting in AHCI ATAPI branch.
+) added DMADIR bit support to ATAPI

--
2012.08.02 - v0.42g1

*) (test again) DMA-only mode for AHCI and SATA ATAPI
!) fixed command version specific LBA decoding in IdeReadWrite

--
2012.08.03 - v0.42g2

*) fixes in LBA logging

--
2012.08.03 - v0.42g3

*) reduced amount of logs in AtapiCheckRegValue()
!) fixed bug with 0 number of luns (in log only) in AtapiSetupLunPtrs()
*) added logs to find why on some ICHxxx debug version with attached debugger crashes
on controller reset

--
2012.08.04 - v0.42g4

*) added log to catch damaged Chan pointer in DeviceExtension (observed on Reset in Native/Legacy mode on ICHxxx)
!) added handler for 'unexpected' ATAPI READY interrupt.
*) added small delay after ATAPI PIO read, finished with BUSY status when all requested bytes are transferred.
If BUSY is released, command is assumed to be completed, otherwise further processing is posted to DPC.
+) added SCSIOP_SERVICE_ACTION16/SCSIOP_SA_READ_CAPACITY16 support

--
2012.08.04 - v0.42g5

*) added logs to catch damaged (zero-filled) CDB on AHCI ATAPI READ
*) removed unnecessary FIS logs from UniataAhciEndTransaction()
!) fixed bug with unconditional ERROR state on AHCI ATAPI with zero transfer.

--
2012.08.05 - v0.42g6

*) SrbExtensionSize = sizeof(ATA_REQ) regardless of controller type (test)

--
2012.08.05 - v0.42g7

*) ATA_AHCI_CMD_PREFETCH is used again (test)

--
2012.08.05 - v0.42h

!) fixed bug with missed call to MapError for AHCI ATAPI
!) fixed bug with reading error status from improper place in AHCI ATAPI branch

--
2012.08.06 - v0.42h1

*) several fixes for making compilers happy

--
2012.08.07 - v0.42h2

*) several fixes for making compilers happy
!) clarified use of SRB_STATUS_DATA_OVERRUN in AHCI branch

--
2012.08.07 - v0.42i

!) fixes for SATA TransferRate report/detect
*) added auto-update of controller MaxTransferMode according to actual established SATA transfer rate.
This is done for incorrectly claimed controllers,
+) added AHCI controller max. transfer rate detect.

--
2012.08.07 - v0.42i1

*) several fixes for making compilers happy

--
2012.08.07 - v0.42i2

!) fix for uninitialized DMA PRD in SATA ATAPI branch
*) added more logs to find why on some ICHxxx debug version with attached debugger crashes
on controller reset (chan pointer gets damaged)

--
2012.08.08 - v0.42i3

!) fixes for SATA speed reporting and representation. Doesn't affect actual interface speed.
!) added minimum buffer size check in UNIATA IOCTL. TODO: perform such check in each IOCTL branch.

--
2012.08.09 - v0.42i4

*) minor update in AtapiSoftReset timings, need to fix problem with possible late BUSY after RESET.

--
2012.08.09 - v0.42j

*) artificially broken to cause BusReset and find where chan pointer gets damaged

--
2012.08.09 - v0.42i5

!) rewrittem code for SRB_STATUS_DATA_OVERRUN reporting. Now check is performed in single place
on CompleteRequest.
*) transfer mode reporting is updated

--
2012.08.09 - v0.42i6

+) added PhyMode to LunExt and GETMODE. This value reflects actual bus transfer rate. Is used by atactl.
*) rewritten OrigTransferMode behavior. Now it exactly reports maximum supported by device transfer rate.
*) Ident -> MaxTransferMode code is moved to atapi.h and commonly used in both uniata and atactl
*) transfer rate definition constants are moved to atapi.h

--
2012.08.09 - v0.42i7

*) added zero-filling of output buffer in atactl before calling IOCTL

--
2012.08.11 - v0.43

+) added buffer size check to all UniATA IOCTLs
*) added channel info option to AdapterInfo IOCTL
!) fixed bug with Physical/Logical channel numbering for Legacy controllers in
AtapiChipInit()
*) clarified HwRes check code (80-pin detection)
+) channel transfer mode reporting to atactl -lx for controllers those have physically different channels

--
2012.08.11 - v0.43a

!) fixed bug with buffer overflow in AdapterInfo IOCTL
!) removed via_cable80(), since it doesn't actually work
!) fixed bug with wrong channel info offset in AdapterInfo IOCTL

--
2012.08.12 - v0.43a1

!) fixed bugs with AdapterInfo IOCTL handling

