2 Header file for IDE Bus Driver, containing the helper functions'
5 Copyright (c) 2006 - 2007 Intel Corporation. <BR>
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 @par Revision Reference:
15 2002-6: Add Atapi6 enhancement, support >120GB hard disk, including
16 Add - IDEBlkIoReadBlocksExt() func definition
17 Add - IDEBlkIoWriteBlocksExt() func definition
25 // Helper functions Prototype
28 TODO: Add function description
30 @param This TODO: add argument description
31 @param Controller TODO: add argument description
32 @param Handle TODO: add argument description
34 TODO: add return values.
39 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
40 IN EFI_HANDLE Controller
,
45 TODO: Add function description
47 @param Controller TODO: add argument description
48 @param PciIo TODO: add argument description
49 @param ParentDevicePath TODO: add argument description
50 @param RemainingDevicePath TODO: add argument description
52 TODO: add return values.
57 IN EFI_HANDLE Controller
,
58 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
59 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
,
60 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
64 TODO: Add function description
66 @param PciIo TODO: add argument description
67 @param Port TODO: add argument description
69 TODO: add return values.
74 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
79 TODO: Add function description
81 @param PciIo TODO: add argument description
82 @param Port TODO: add argument description
83 @param Count TODO: add argument description
84 @param Buffer TODO: add argument description
86 TODO: add return values.
90 IDEReadPortWMultiple (
91 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
98 TODO: Add function description
100 @param PciIo TODO: add argument description
101 @param Port TODO: add argument description
102 @param Data TODO: add argument description
104 TODO: add return values.
109 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
115 TODO: Add function description
117 @param PciIo TODO: add argument description
118 @param Port TODO: add argument description
119 @param Data TODO: add argument description
121 TODO: add return values.
126 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
132 TODO: Add function description
134 @param PciIo TODO: add argument description
135 @param Port TODO: add argument description
136 @param Count TODO: add argument description
137 @param Buffer TODO: add argument description
139 TODO: add return values.
143 IDEWritePortWMultiple (
144 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
151 TODO: Add function description
153 @param PciIo TODO: add argument description
154 @param IdeRegsBaseAddr TODO: add argument description
156 TODO: add return values.
160 GetIdeRegistersBaseAddr (
161 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
162 OUT IDE_REGISTERS_BASE_ADDR
*IdeRegsBaseAddr
166 TODO: Add function description
168 @param IdeDev TODO: add argument description
170 TODO: add return values.
174 ReassignIdeResources (
175 IN IDE_BLK_IO_DEV
*IdeDev
179 TODO: Add function description
181 @param IdeDev TODO: add argument description
183 TODO: add return values.
188 IN IDE_BLK_IO_DEV
*IdeDev
192 This interface is used to initialize all state data related to the
193 detection of one channel.
195 @retval EFI_SUCCESS Completed successfully.
199 InitializeIDEChannelData (
204 TODO: Add function description
206 @param IdeDev TODO: add argument description
208 TODO: add return values.
212 DetectIDEController (
213 IN IDE_BLK_IO_DEV
*IdeDev
217 TODO: Add function description
219 @param IdeDev TODO: add argument description
220 @param TimeoutInMilliSeconds TODO: add argument description
222 TODO: add return values.
227 IN IDE_BLK_IO_DEV
*IdeDev
,
228 IN UINTN TimeoutInMilliSeconds
232 TODO: Add function description
234 @param IdeDev TODO: add argument description
235 @param TimeoutInMilliSeconds TODO: add argument description
237 TODO: add return values.
242 IN IDE_BLK_IO_DEV
*IdeDev
,
243 IN UINTN TimeoutInMilliSeconds
247 TODO: Add function description
249 @param IdeDev TODO: add argument description
250 @param TimeoutInMilliSeconds TODO: add argument description
252 TODO: add return values.
257 IN IDE_BLK_IO_DEV
*IdeDev
,
258 IN UINTN TimeoutInMilliSeconds
262 TODO: Add function description
264 @param IdeDev TODO: add argument description
265 @param TimeoutInMilliSeconds TODO: add argument description
267 TODO: add return values.
272 IN IDE_BLK_IO_DEV
*IdeDev
,
273 IN UINTN TimeoutInMilliSeconds
277 TODO: Add function description
279 @param IdeDev TODO: add argument description
280 @param TimeoutInMilliSeconds TODO: add argument description
282 TODO: add return values.
287 IN IDE_BLK_IO_DEV
*IdeDev
,
288 IN UINTN TimeoutInMilliSeconds
292 TODO: Add function description
294 @param IdeDev TODO: add argument description
295 @param TimeoutInMilliSeconds TODO: add argument description
297 TODO: add return values.
302 IN IDE_BLK_IO_DEV
*IdeDev
,
303 IN UINTN TimeoutInMilliSeconds
307 TODO: Add function description
309 @param IdeDev TODO: add argument description
310 @param DelayInMilliSeconds TODO: add argument description
312 TODO: add return values.
317 IN IDE_BLK_IO_DEV
*IdeDev
,
318 IN UINTN DelayInMilliSeconds
322 TODO: Add function description
324 @param IdeDev TODO: add argument description
325 @param DelayInMilliSeconds TODO: add argument description
327 TODO: add return values.
332 IN IDE_BLK_IO_DEV
*IdeDev
,
333 IN UINTN DelayInMilliSeconds
337 TODO: Add function description
339 @param Destination TODO: add argument description
340 @param Source TODO: add argument description
341 @param Size TODO: add argument description
343 TODO: add return values.
348 IN CHAR8
*Destination
,
354 // ATA device functions' prototype
357 TODO: Add function description
359 @param IdeDev TODO: add argument description
361 TODO: add return values.
366 IN IDE_BLK_IO_DEV
*IdeDev
370 TODO: Add function description
372 @param IdeDev TODO: add argument description
374 TODO: add return values.
379 IN IDE_BLK_IO_DEV
*IdeDev
383 TODO: Add function description
385 @param IdeDev TODO: add argument description
386 @param Buffer TODO: add argument description
387 @param ByteCount TODO: add argument description
388 @param AtaCommand TODO: add argument description
389 @param Head TODO: add argument description
390 @param SectorCount TODO: add argument description
391 @param SectorNumber TODO: add argument description
392 @param CylinderLsb TODO: add argument description
393 @param CylinderMsb TODO: add argument description
395 TODO: add return values.
400 IN IDE_BLK_IO_DEV
*IdeDev
,
405 IN UINT8 SectorCount
,
406 IN UINT8 SectorNumber
,
407 IN UINT8 CylinderLsb
,
412 TODO: Add function description
414 @param IdeDev TODO: add argument description
415 @param Buffer TODO: add argument description
416 @param ByteCount TODO: add argument description
417 @param AtaCommand TODO: add argument description
418 @param Head TODO: add argument description
419 @param SectorCount TODO: add argument description
420 @param SectorNumber TODO: add argument description
421 @param CylinderLsb TODO: add argument description
422 @param CylinderMsb TODO: add argument description
424 TODO: add return values.
429 IN IDE_BLK_IO_DEV
*IdeDev
,
434 IN UINT8 SectorCount
,
435 IN UINT8 SectorNumber
,
436 IN UINT8 CylinderLsb
,
441 TODO: Add function description
443 @param IdeDev TODO: add argument description
445 TODO: add return values.
450 IN IDE_BLK_IO_DEV
*IdeDev
454 TODO: Add function description
456 @param IdeDev TODO: add argument description
457 @param DataBuffer TODO: add argument description
458 @param Lba TODO: add argument description
459 @param NumberOfBlocks TODO: add argument description
461 TODO: add return values.
466 IN IDE_BLK_IO_DEV
*IdeDev
,
469 IN UINTN NumberOfBlocks
473 TODO: Add function description
475 @param IdeDev TODO: add argument description
476 @param BufferData TODO: add argument description
477 @param Lba TODO: add argument description
478 @param NumberOfBlocks TODO: add argument description
480 TODO: add return values.
485 IN IDE_BLK_IO_DEV
*IdeDev
,
488 IN UINTN NumberOfBlocks
492 TODO: Add function description
494 @param IdeDev TODO: add argument description
496 TODO: add return values.
501 IN IDE_BLK_IO_DEV
*IdeDev
505 TODO: Add function description
507 @param IdeBlkIoDevice TODO: add argument description
508 @param MediaId TODO: add argument description
509 @param Lba TODO: add argument description
510 @param BufferSize TODO: add argument description
511 @param Buffer TODO: add argument description
513 TODO: add return values.
518 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
526 TODO: Add function description
528 @param IdeBlkIoDevice TODO: add argument description
529 @param MediaId TODO: add argument description
530 @param Lba TODO: add argument description
531 @param BufferSize TODO: add argument description
532 @param Buffer TODO: add argument description
534 TODO: add return values.
538 AtaBlkIoWriteBlocks (
539 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
547 // ATAPI device functions' prototype
550 TODO: Add function description
552 @param IdeDev TODO: add argument description
554 TODO: add return values.
559 IN IDE_BLK_IO_DEV
*IdeDev
563 TODO: Add function description
565 @param IdeDev TODO: add argument description
567 TODO: add return values.
572 IN IDE_BLK_IO_DEV
*IdeDev
576 TODO: Add function description
578 @param IdeDev TODO: add argument description
579 @param Packet TODO: add argument description
580 @param Buffer TODO: add argument description
581 @param ByteCount TODO: add argument description
582 @param TimeOut TODO: add argument description
584 TODO: add return values.
588 AtapiPacketCommandIn (
589 IN IDE_BLK_IO_DEV
*IdeDev
,
590 IN ATAPI_PACKET_COMMAND
*Packet
,
597 TODO: Add function description
599 @param IdeDev TODO: add argument description
600 @param Packet TODO: add argument description
601 @param Buffer TODO: add argument description
602 @param ByteCount TODO: add argument description
603 @param TimeOut TODO: add argument description
605 TODO: add return values.
609 AtapiPacketCommandOut (
610 IN IDE_BLK_IO_DEV
*IdeDev
,
611 IN ATAPI_PACKET_COMMAND
*Packet
,
618 TODO: Add function description
620 @param IdeDev TODO: add argument description
621 @param Buffer TODO: add argument description
622 @param ByteCount TODO: add argument description
623 @param Read TODO: add argument description
624 @param TimeOut TODO: add argument description
626 TODO: add return values.
631 IN IDE_BLK_IO_DEV
*IdeDev
,
639 TODO: Add function description
641 @param IdeDev TODO: add argument description
642 @param SResult TODO: add argument description
644 TODO: add return values.
649 IN IDE_BLK_IO_DEV
*IdeDev
,
650 OUT SENSE_RESULT
*SResult
654 TODO: Add function description
656 @param IdeDev TODO: add argument description
657 @param SenseCounts TODO: add argument description
659 TODO: add return values.
664 IN IDE_BLK_IO_DEV
*IdeDev
,
665 OUT UINTN
*SenseCounts
669 TODO: Add function description
671 @param IdeDev TODO: add argument description
672 @param SResult TODO: add argument description
674 TODO: add return values.
679 IN IDE_BLK_IO_DEV
*IdeDev
,
680 OUT SENSE_RESULT
*SResult
684 TODO: Add function description
686 @param IdeDev TODO: add argument description
687 @param MediaChange TODO: add argument description
689 TODO: add return values.
694 IN IDE_BLK_IO_DEV
*IdeDev
,
695 OUT BOOLEAN
*MediaChange
699 TODO: Add function description
701 @param IdeDev TODO: add argument description
702 @param Buffer TODO: add argument description
703 @param Lba TODO: add argument description
704 @param NumberOfBlocks TODO: add argument description
706 TODO: add return values.
711 IN IDE_BLK_IO_DEV
*IdeDev
,
714 IN UINTN NumberOfBlocks
718 TODO: Add function description
720 @param IdeDev TODO: add argument description
721 @param Buffer TODO: add argument description
722 @param Lba TODO: add argument description
723 @param NumberOfBlocks TODO: add argument description
725 TODO: add return values.
730 IN IDE_BLK_IO_DEV
*IdeDev
,
733 IN UINTN NumberOfBlocks
737 TODO: Add function description
739 @param IdeDev TODO: add argument description
741 TODO: add return values.
746 IN IDE_BLK_IO_DEV
*IdeDev
750 TODO: Add function description
752 @param IdeBlkIoDevice TODO: add argument description
753 @param MediaId TODO: add argument description
754 @param Lba TODO: add argument description
755 @param BufferSize TODO: add argument description
756 @param Buffer TODO: add argument description
758 TODO: add return values.
762 AtapiBlkIoReadBlocks (
763 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
771 TODO: Add function description
773 @param IdeBlkIoDevice TODO: add argument description
774 @param MediaId TODO: add argument description
775 @param Lba TODO: add argument description
776 @param BufferSize TODO: add argument description
777 @param Buffer TODO: add argument description
779 TODO: add return values.
783 AtapiBlkIoWriteBlocks (
784 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
792 TODO: Add function description
794 @param IdeDev TODO: add argument description
795 @param SenseCount TODO: add argument description
796 @param Result TODO: add argument description
798 TODO: add return values.
803 IN IDE_BLK_IO_DEV
*IdeDev
,
805 OUT SENSE_RESULT
*Result
809 TODO: Add function description
811 @param IdeDev TODO: add argument description
813 TODO: add return values.
817 AtapiReadPendingData (
818 IN IDE_BLK_IO_DEV
*IdeDev
822 TODO: Add function description
824 @param IdeDev TODO: add argument description
825 @param WriteProtected TODO: add argument description
827 TODO: add return values.
831 IsLS120orZipWriteProtected (
832 IN IDE_BLK_IO_DEV
*IdeDev
,
833 OUT BOOLEAN
*WriteProtected
837 TODO: Add function description
839 @param IdeBlkIoDevice TODO: add argument description
841 TODO: add return values.
845 ReleaseIdeResources (
846 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
850 TODO: Add function description
852 @param IdeDev TODO: add argument description
853 @param TransferMode TODO: add argument description
855 TODO: add return values.
859 SetDeviceTransferMode (
860 IN IDE_BLK_IO_DEV
*IdeDev
,
861 IN ATA_TRANSFER_MODE
*TransferMode
865 TODO: Add function description
867 @param IdeDev TODO: add argument description
868 @param NativeMaxAddress TODO: add argument description
870 TODO: add return values.
874 ReadNativeMaxAddress (
875 IN IDE_BLK_IO_DEV
*IdeDev
,
876 OUT EFI_LBA
*NativeMaxAddress
881 TODO: Add function description
883 @param IdeDev TODO: add argument description
884 @param AtaCommand TODO: add argument description
885 @param Device TODO: add argument description
886 @param Feature TODO: add argument description
887 @param SectorCount TODO: add argument description
888 @param LbaLow TODO: add argument description
889 @param LbaMiddle TODO: add argument description
890 @param LbaHigh TODO: add argument description
892 TODO: add return values.
896 AtaNonDataCommandIn (
897 IN IDE_BLK_IO_DEV
*IdeDev
,
901 IN UINT8 SectorCount
,
908 TODO: Add function description
910 @param IdeDev TODO: add argument description
911 @param AtaCommand TODO: add argument description
912 @param Device TODO: add argument description
913 @param Feature TODO: add argument description
914 @param SectorCount TODO: add argument description
915 @param LbaAddress TODO: add argument description
917 TODO: add return values.
921 AtaNonDataCommandInExt (
922 IN IDE_BLK_IO_DEV
*IdeDev
,
926 IN UINT16 SectorCount
,
927 IN EFI_LBA LbaAddress
931 TODO: Add function description
933 @param IdeDev TODO: add argument description
934 @param DataBuffer TODO: add argument description
935 @param StartLba TODO: add argument description
936 @param NumberOfBlocks TODO: add argument description
938 TODO: add return values.
943 IN IDE_BLK_IO_DEV
*IdeDev
,
946 IN UINTN NumberOfBlocks
950 TODO: Add function description
952 @param IdeDev TODO: add argument description
953 @param DataBuffer TODO: add argument description
954 @param StartLba TODO: add argument description
955 @param NumberOfBlocks TODO: add argument description
957 TODO: add return values.
962 IN IDE_BLK_IO_DEV
*IdeDev
,
965 IN UINTN NumberOfBlocks
969 TODO: Add function description
971 @param IdeDev TODO: add argument description
972 @param DataBuffer TODO: add argument description
973 @param StartLba TODO: add argument description
974 @param NumberOfBlocks TODO: add argument description
976 TODO: add return values.
981 IN IDE_BLK_IO_DEV
*IdeDev
,
984 IN UINTN NumberOfBlocks
988 TODO: Add function description
990 @param IdeDev TODO: add argument description
991 @param DataBuffer TODO: add argument description
992 @param StartLba TODO: add argument description
993 @param NumberOfBlocks TODO: add argument description
995 TODO: add return values.
1000 IN IDE_BLK_IO_DEV
*IdeDev
,
1001 IN VOID
*DataBuffer
,
1002 IN EFI_LBA StartLba
,
1003 IN UINTN NumberOfBlocks
1007 TODO: Add function description
1009 @param IdeDev TODO: add argument description
1010 @param DataBuffer TODO: add argument description
1011 @param StartLba TODO: add argument description
1012 @param NumberOfBlocks TODO: add argument description
1014 TODO: add return values.
1019 IN IDE_BLK_IO_DEV
*IdeDev
,
1020 IN VOID
*DataBuffer
,
1021 IN EFI_LBA StartLba
,
1022 IN UINTN NumberOfBlocks
1026 Perform an ATA Udma operation (Read, ReadExt, Write, WriteExt).
1029 pointer pointing to IDE_BLK_IO_DEV data structure, used
1030 to record all the information of the IDE device.
1032 @param[in] *DataBuffer
1033 A pointer to the source buffer for the data.
1036 The starting logical block address to write to
1037 on the device media.
1039 @param[in] NumberOfBlocks
1040 The number of transfer data blocks.
1043 The perform operations could be AtaUdmaReadOp, AtaUdmaReadExOp,
1044 AtaUdmaWriteOp, AtaUdmaWriteExOp
1046 @return The device status of UDMA operation. If the operation is
1047 successful, return EFI_SUCCESS.
1052 IN IDE_BLK_IO_DEV
*IdeDev
,
1053 IN VOID
*DataBuffer
,
1054 IN EFI_LBA StartLba
,
1055 IN UINTN NumberOfBlocks
,
1056 IN ATA_UDMA_OPERATION UdmaOp
1061 TODO: Add function description
1063 @param IdeDev TODO: add argument description
1064 @param DataBuffer TODO: add argument description
1065 @param StartLba TODO: add argument description
1066 @param NumberOfBlocks TODO: add argument description
1068 TODO: add return values.
1073 IN IDE_BLK_IO_DEV
*IdeDev
,
1074 IN VOID
*DataBuffer
,
1075 IN EFI_LBA StartLba
,
1076 IN UINTN NumberOfBlocks
1080 TODO: Add function description
1082 @param IdeDev TODO: add argument description
1083 @param AtaCommand TODO: add argument description
1084 @param Device TODO: add argument description
1085 @param Feature TODO: add argument description
1086 @param SectorCount TODO: add argument description
1087 @param LbaAddress TODO: add argument description
1089 TODO: add return values.
1093 AtaCommandIssueExt (
1094 IN IDE_BLK_IO_DEV
*IdeDev
,
1095 IN UINT8 AtaCommand
,
1098 IN UINT16 SectorCount
,
1099 IN EFI_LBA LbaAddress
1103 TODO: Add function description
1105 @param IdeDev TODO: add argument description
1106 @param AtaCommand TODO: add argument description
1107 @param Device TODO: add argument description
1108 @param Feature TODO: add argument description
1109 @param SectorCount TODO: add argument description
1110 @param LbaAddress TODO: add argument description
1112 TODO: add return values.
1117 IN IDE_BLK_IO_DEV
*IdeDev
,
1118 IN UINT8 AtaCommand
,
1121 IN UINT16 SectorCount
,
1122 IN EFI_LBA LbaAddress
1126 TODO: Add function description
1128 @param IdeDev TODO: add argument description
1130 TODO: add return values.
1135 IN IDE_BLK_IO_DEV
*IdeDev
1140 TODO: Add function description
1142 @param IdeDev TODO: add argument description
1144 TODO: add return values.
1149 IN IDE_BLK_IO_DEV
*IdeDev
1154 Enable Long Physical Sector Feature for ATA device.
1156 @param IdeDev The IDE device data
1158 @retval EFI_SUCCESS The ATA device supports Long Physical Sector feature
1159 and corresponding fields in BlockIo structure is updated.
1160 @retval EFI_UNSUPPORTED The device is not ATA device or Long Physical Sector
1161 feature is not supported.
1164 AtaEnableLongPhysicalSector (
1165 IN IDE_BLK_IO_DEV
*IdeDev
1169 TODO: Add function description
1171 @param IdeDev TODO: add argument description
1172 @param Buffer TODO: add argument description
1173 @param ByteCount TODO: add argument description
1174 @param AtaCommand TODO: add argument description
1175 @param StartLba TODO: add argument description
1176 @param SectorCount TODO: add argument description
1178 TODO: add return values.
1183 IN IDE_BLK_IO_DEV
*IdeDev
,
1184 IN OUT VOID
*Buffer
,
1185 IN UINT32 ByteCount
,
1186 IN UINT8 AtaCommand
,
1187 IN EFI_LBA StartLba
,
1188 IN UINT16 SectorCount
1192 TODO: Add function description
1194 @param IdeDev TODO: add argument description
1195 @param Buffer TODO: add argument description
1196 @param ByteCount TODO: add argument description
1197 @param AtaCommand TODO: add argument description
1198 @param StartLba TODO: add argument description
1199 @param SectorCount TODO: add argument description
1201 TODO: add return values.
1206 IN IDE_BLK_IO_DEV
*IdeDev
,
1208 IN UINT32 ByteCount
,
1209 IN UINT8 AtaCommand
,
1210 IN EFI_LBA StartLba
,
1211 IN UINT16 SectorCount
1215 TODO: Add function description
1217 @param IdeDev TODO: add argument description
1218 @param DriveParameters TODO: add argument description
1220 TODO: add return values.
1224 SetDriveParameters (
1225 IN IDE_BLK_IO_DEV
*IdeDev
,
1226 IN ATA_DRIVE_PARMS
*DriveParameters
1230 TODO: Add function description
1232 @param IdeDev TODO: add argument description
1234 TODO: add return values.
1239 IN IDE_BLK_IO_DEV
*IdeDev
1243 Clear pending IDE interrupt before OS loader/kernel take control of the IDE device.
1245 @param[in] Event Pointer to this event.
1246 @param[in] Context Event hanlder private data.