mirror of
https://github.com/reactos/reactos.git
synced 2024-08-26 13:18:51 +00:00
258 lines
19 KiB
Plaintext
258 lines
19 KiB
Plaintext
1. use ScsiPortGetBusData() instead of HalGetBusData() to enumerate ...
|
|
PCI devices (8b )
|
|
2. create 2 channels on non-primary HBA (9 )
|
|
3. add BusMaster detection to ISA & ISA/PCI FindController() routines ...
|
|
I've decided to modify AtapiFindBusMasterController() for this ...
|
|
purpose (9 )
|
|
4. beautify sources ;)
|
|
5. add LBA support (8 )
|
|
6. return modified Cylinders in IDENTYFY_DATA to handle HDDs > 8Gb ...
|
|
properly (8 )
|
|
7. return good HDD size value for ...
|
|
a) IdeVerify() (8 )
|
|
b) SCSIOP_READ_CAPACITY (8 )
|
|
8. use READ_NATIVE_SIZE command to determine actual drive capacity (8a )
|
|
9. send FLUSH command to device (9 )
|
|
10. check (IO_WDx - 0x08) ports in AtapiFindBusMasterController() (+++)
|
|
11. use SelectDrive() instead of ScsiPortWritePortXXX() (9a )
|
|
12. remove obsolete AtapiFindPCIController() (9a )
|
|
13. make a separate routine AtapiInitController() for HBA ...
|
|
initialization (move there some parts of code from ...
|
|
AtapiFindBusMasterController() (---)
|
|
14. add feature enabling code to drive (re)init routine IdeHardReset() ...
|
|
AtapiHwInitialize() does all necessary staff (10+)
|
|
15, use AtapiInitController() in AtapiHwInitialize() (---)
|
|
16. remove obsolete FindBrokenController() and ...
|
|
AtapiFindNativeModeController() (10 )
|
|
17. move FindDevices() to id_probe.cpp (10 )
|
|
18. set HDD PIO modes if no DMA available (10 )
|
|
19. implement AtaCommand() (10 )
|
|
20. implement AtaPioMode() & AtaPio2Mode() (10 )
|
|
21. add some new ChipSets support from FBSD 4.5 (10a)
|
|
22. set Controller PIO timigs ...
|
|
a) via (11 ) ??
|
|
b) intel (+++)
|
|
c) AcerLabs Aladdin IV/V (23 )
|
|
23. update Identify block (11 )
|
|
24. add LBA-48 support (11 )
|
|
25. use AtapiCommand()/AtapiCommand48() instead of direct port I/O ...
|
|
a) for Read/Write/Identify (11 )
|
|
b) Set features, Smart, Set drive params (11c)
|
|
26. port/implement AtapiDmaInit() for well-known controllers (11 )
|
|
27. Beautify IdeReadWrite() (11c)
|
|
28. port/implement DMA-specific parts of interrupt handlers (12 )
|
|
29. request queueing (16b)
|
|
30. port/implement DMA-start routine (12 )
|
|
31. remove MODE_SENSE/SELECT 6<->10 translation. It'll improve ...
|
|
performance. (11a)
|
|
32. move InterruptService to DPC (via ScsiPortNotification()) (17 )
|
|
33. implement ATA_WAIT_INTR branch in AtapiCommand()/AtapiCommand48() (11b)
|
|
34. fix bugs in Identify structure (11b)
|
|
35. use normal Lba detection in IssueIdentify() (11b)
|
|
36. fix bug with default structure elements alignment ...
|
|
use pragma pack (1) (11c)
|
|
37. use ATA_WAIT_INTR in IdeReadWrite() for Write branch and ...
|
|
ATA_IMMEDIATE for Read one (11c)
|
|
38. update Identify dtructure (11c)
|
|
39. fix some size detection bugs in IssueIdentify() (11c)
|
|
40. don't forget setting ExpectingInterrupt flag before WriteBuffer() ...
|
|
on PIO transfer (12g)
|
|
41. try generic DMA for old devices instead of PIO default (12g)
|
|
42. clear 4 lower bits of AccessRange (12g)
|
|
43. reconstruct _Original_ ConfigInfo (not temporary) on Detect ...
|
|
phase (13 )
|
|
44. set 32-bit addressing for all bus types (13 )
|
|
45. handle invalid address value (-1) in AtapiDmaSetup() (13 )
|
|
46. add some new ChipSets support from FBSD 4.6 (13c)
|
|
47. add 'offset' parameter to AtapiGetIoRange() to allow claiming ...
|
|
different io-regions of the same PCI device by different ...
|
|
DeviceObjects (representing different channels of this device (13a)
|
|
48. claim both BusMaster io-regions on SimplexOnly controllers (+++)
|
|
49. add ATAPI DMA support (19 )
|
|
50. read 'PSS ID Number: Q133706' in NT DDK & implement Registry- ...
|
|
supplied params. Use a small hack instead: Argument2 is the ...
|
|
pointer to UNICODE_STRING we need (18a)
|
|
51. implement Reinitialize functionality (+++)
|
|
52. optimize DMA init (move similar parts of code to loops/functions ...
|
|
a) VIA/AMD/nVidia (13c)
|
|
b) Promise TX2 (13c)
|
|
c) Promise Ultra (23 )
|
|
d) ServerWorks (23 )
|
|
e) CMD 64x (+++)
|
|
f) SiS (+++)
|
|
g) AcerLabs Aladdin IV/V (+++)
|
|
h) Intel (+++)
|
|
i) Sil (23 )
|
|
j) HPT (23 )
|
|
53. use LogicalUnitExtension instead of xxx[Srb->TargetId] (14 )
|
|
54. use SrbExtension to manage queue (16b)
|
|
55. IdeReadWrite() should support non-zero initial offset in DataBuffer ...
|
|
to allow scatter/gather simulation, queueing & retries
|
|
56. keep 'dma_tab' in SrbExtension (16b)
|
|
57. never set SpecificLuExtensionSize to 0 (14a)
|
|
58. never call ScsiPortGetUncachedExtension() twice for the same HBA, ...
|
|
even if the 1st call failed. Use deviceExtension->HbaCtrlFlags & ...
|
|
HBAFLAGS_DMA_DISABLED to indicate such case (16 )
|
|
59. set deviceExtension->BaseIoAddressBM[1] properly for dual-channel ...
|
|
HBAs (it was equal to BaseIoAddressBM[0]) (16 )
|
|
60. set Channel properly in AtapiInterrupt__() for dual-channel HBAs ...
|
|
(lChannel was ignored) (16 )
|
|
61. initialize ConfigINfo members required by ...
|
|
ScsiPortGetUncachedExtension() _before_ call to AtapiDmaAlloc() (16 )
|
|
62. move SCSI-address-2-Channel/Device translation to macros. This ...
|
|
makes code more readable & flexible. (16 )
|
|
63. implement SCSI-bus - IDE-channel and ...
|
|
SCSI-TargetId - IDE-master/slave correspondance (using p.62) (16 )
|
|
64. set AutoRequestSense to TRUE (16a)
|
|
65. set inquiryData->CommandQueue to 1 (16a)
|
|
66. fill SenseInfoBufer in ...
|
|
a) IDE MapError() (16a)
|
|
b) IDE/ATAPI success (20d)
|
|
67. use AtaReq->ReqState to indicate request processing state (16b)
|
|
68. fill AtaReq->ReqState in all necessary places to reflect actual ...
|
|
request state (for optimizer) (18+)
|
|
69. fix bug with unconditional returning FALSE in AtapiInterrupt() (16c)
|
|
70. copy pointer to original AtaReq from Srb to InternalSrb (16c)
|
|
71. check input Srb value for NULL in AtapiRemoveRequest() (16c)
|
|
72. return from IssueIdentify loop if no error occured. Previous ...
|
|
versions have a bug: SUCCESS status was ignored & this caused ...
|
|
obsolet retries (16c)
|
|
73. clear CTRFLAGS_INTR_DISABLED flag in AtapiEnableInterrupts_Xxx() (17a)
|
|
74. use Sync Object to manage access to request queue (---)
|
|
75. remove AtapiEnableInterrupts_Xxx()-related code duplicates from ...
|
|
AtapiInterrupt__() (17a)
|
|
76. check calls to AtapiResetController() & related routines. ...
|
|
See p. 80, 81 (+++)
|
|
77. use ScsiPortNotification() with RequestTimerCall instead of ...
|
|
CallDis(En)ableInterrupts to allow servicing 2 channels in ...
|
|
parallel. See p.87 (---)
|
|
78. do not use DPC ISR for fast operations, like ...
|
|
a) DMA-completion (18 )
|
|
b) sending CDB to ATAPI devices (18a)
|
|
c) short ATAPI transfers (18a)
|
|
79. call both AtapiEnableInterrupts_X() & AtapiCallBack_X() on DSC ...
|
|
restrictive commands completion (18 )
|
|
80. invoke AtapiStartIo__() from ISR as callback to parform it's ...
|
|
execution at lower IRQL (19x)
|
|
81. invoke AtapiResetController() from ISR as callback to parform it's ...
|
|
execution at lower IRQL (19x)
|
|
82. do not use ScsiPortCompleteRequest() in AtapiResetController() ...
|
|
Use standard completion way with setting SenseData instead (18a)
|
|
83. reset single channel on normal (non-simplex-only) controllers in ...
|
|
AtapiResetController() (18a)
|
|
84. sort records in BMList on enumeration phase & simplify init loops ...
|
|
in DriverEntry() (18a)
|
|
85. fix bug with wrong numberChannels init for 2nd channel in ...
|
|
AtapiResetController() (18b)
|
|
86. implement channel-sensetive AtapiHwInitialize__() and use in in ...
|
|
AtapiResetController() & AtapiHwInitialize() (18+)
|
|
87. Due to SCSI-port restrictions we should Enable/Disable interruptys ...
|
|
for BOTH channels :((((. Implement this.... (19 )
|
|
88. Deprecate p.87. ;) It doesn't work. Solution: connect manually ...
|
|
created DeviceObject to the same interrupt & check in its ISR if ...
|
|
our device interrupted while original ISR/DPC processing ...
|
|
another channel's interrupt. (20 )
|
|
90. add error handling on additional DevObj init (20a)
|
|
91. deprecate p.80,81. We should acquire QueueSpinLock at DIRQL (+/-)
|
|
92. perform all possible request init on queueing stage even if we ...
|
|
can't send it to device immediately (use CMD_ACTION_XXX) ...
|
|
a) for IDE branch (20c)
|
|
b) for ATAPI branch (21a)
|
|
93. complete the following commands immediately: ...
|
|
SCSIOP_INQUIRY, SCSIOP_READ_CAPACITY, SCSIOP_REQUEST_SENSE (20c)
|
|
94. implement ABORT_COMMAND functionality (20d)
|
|
95. reorder incoming requests in AtapiQueueRequest() (21c)
|
|
96. make 2 modes for ResetController(): complete current & complete ...
|
|
all for p.94. (20d)
|
|
97. store queue size statistics in HW_CHANNEL (20d)
|
|
98. remove obsolete DPC code from AtapiInterrupt__() (20e)
|
|
99. store error rate in HW_CHANNEL (20e)
|
|
100.try falling back to PIO when DMA error occured (20e)
|
|
101.use Dma & Pio error rates to distinguish between BadBlock & ...
|
|
BadCable conditions, See also p.127, 128 (+++)
|
|
102.don't use HDD's algorithm of falling back to PIO for ATAPI (21 )
|
|
103.clear REQ_FLAG_DMA_OPERATION when falling back to PIO (21 )
|
|
104.set REQ_FLAG_REORDERABLE_CMD in IdeReadWrite() (21 )
|
|
105.store bcount along with lba in ATA_REQ on CMD_ACTION_PREPARE stage (21 )
|
|
106.do like p.105,104 in AtapiSendCommand for read/write ops (21 )
|
|
107.set operation type flag (Read/Write) in AtaReq on ...
|
|
CMD_ACTION_PREPARE stage (21b)
|
|
108.send comamnds to queue _after_ CMD_ACTION_PREPARE stage (21a)
|
|
109.fix bug (incorrect queue_size check) in p.108 (21b)
|
|
110.handle SRB_FLAGS_DISABLE_AUTOSENSE
|
|
111.handle Srb->QueueAction (21d)
|
|
112.check SRB_STATUS_AUTOSENSE_VALID usage policy (+++)
|
|
113.add support for hardware queueing/overlapped commands
|
|
114.handle immediate commands properly: don't initiate bus reset ...
|
|
while formatting CDRW (+++)
|
|
115.add hardware IDE RAID support
|
|
116.fix bug with data type missmatch in AtapiDmaInit(), ...
|
|
some VIA branches. This bug caused array boundary cross, leading ...
|
|
to system crash (22 )
|
|
117.default udmamode to 0 if there are no well-known devices found ...
|
|
in AtapiDmaInit(), VIA branch. (22 )
|
|
118.do not check RevID in AtapiFindDev if RevID == -1 (22 )
|
|
119.use best settings for newer RevIDs
|
|
120.fix signed/unsigned missmatch (i vs udmamode) in AtapiDmaInit(), ...
|
|
VIA branch (22 )
|
|
121.fix bug with incorrect UDMA init in VIA branch. use UDMA0+i ...
|
|
instead of UDMA0+udmamode (22a)
|
|
122.fall back to WDMA mode before PIO (22a)
|
|
123.use transfer speed slowdown algorithm when high error rate ...
|
|
detected (22a)
|
|
124.don't forget updating AtaReq->retry on R/W error (non-DMA) (22a)
|
|
125.fill AtaReq with ZEROs on TopLevel condition (22a)
|
|
126.fix bug in IdeVerify() with sending SectorCount to device before ...
|
|
call to AtaCommand48() and using 0 SectorCount in that call (22a)
|
|
127.store Error/Recover rate statistics in LunExtension (22a)
|
|
128.use p.127 for smart slowdown algorithm (22b)
|
|
129.use lChannel instead of phChannel for indexing in find-channel ...
|
|
loop in AtapiFindBusMasterController() (22b)
|
|
130.programm controller for lower speed in Ide/AtapiSendCommand(), not ...
|
|
in AtapiInterrupt__() (22b)
|
|
131.use AtapiDmaReinit() routine for p.131 (22b)
|
|
132.implement per-device queueing (23 )
|
|
134.add Sil, ICH4, Some HPT, PromiseTX2(133) support from 4.7 (23 )
|
|
135.fix wrong bit-shift bug in lba48 branch (23 )
|
|
136.update and sort BusMasterAdapters[] (23a)
|
|
137.fix bugs in AtapiTimerDpc() that caused incorrect handling of ...
|
|
DSC restrictive commands ...
|
|
a) call ScsiPortNotification(RequestTimerCall, ...) when we had ...
|
|
a 2nd request on entry only (23c)
|
|
b) check HwScsiTimer1 first to decide whether we have to go to ...
|
|
GetNextDpc (23c)
|
|
c) wrong condition check 'time <= DpcTime1' instead of ...
|
|
'time >= DpcTime1' (23c)
|
|
d) remove request from queue _before_ call to HwScsiTimer() (23c)
|
|
138.add support for Acard controllers (25 )
|
|
139.use some additional code for HP/Promise Dma Star/Stop (25 )
|
|
140.assign queueing priority for each device
|
|
141.assign BusMaster io-range to 1st channel only. (26e)
|
|
142.do not change bus type to PCI for legacy ISA-PCI controllers under ...
|
|
NT4 (28 )
|
|
143.implement Device/Vendor/Rev. filtering via registry keys (30+)
|
|
144.implement transfer mode control IOCTLs (28 )
|
|
145.set max. transfer length > 64k.
|
|
146.implement fix for miss-aligned user buffer
|
|
147.set chip-specific init/operation flags only once during ...
|
|
initialization and use them in future. Do not perform multiple ...
|
|
bus scans and other detections. (29a)
|
|
148.fix bug with miss-functioning Enable/Disable interrupt for (+++)
|
|
secondary channel (28 )
|
|
149.add serial-ATA support (29a)
|
|
150.add support for new controllers (SiS, Promise) (29a)
|
|
151.fix detection/init algorithms in order to avoid usage of ...
|
|
non-generic code for unknown chips (29a)
|
|
152.add support for >2 channels (29a)
|
|
153.improve Intr-detection loop. Start each time from next channel ...
|
|
for load-balance (29a)
|
|
154.add support for machines with >4G physical memory (38 )
|
|
155.add FreeBSD software RAID support
|
|
156.use http://www.winimage.com/readfi15.zip for performance checks
|
|
157.use IOCTL_SCSI_MINIPORT_IDENTIFY in atactl.exe to determine ...
|
|
PIO/DMA when no uniata.sys is installed (+++)
|
|
158.implement .INF generator
|
|
159.fix bug with invalid INF section under XP+ (43e2)
|
|
160.add INF handler for SCSI\NET\VEN_UNIATA&PROD_MANAGEMENT_PORT
|
|
161.
|