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
880 TODO: Add function description
882 @param IdeDev TODO: add argument description
883 @param MaxAddress TODO: add argument description
884 @param bVolatile TODO: add argument description
886 TODO: add return values.
891 IN IDE_BLK_IO_DEV
*IdeDev
,
892 IN EFI_LBA MaxAddress
,
897 TODO: Add function description
899 @param IdeDev TODO: add argument description
900 @param AtaCommand TODO: add argument description
901 @param Device TODO: add argument description
902 @param Feature TODO: add argument description
903 @param SectorCount TODO: add argument description
904 @param LbaLow TODO: add argument description
905 @param LbaMiddle TODO: add argument description
906 @param LbaHigh TODO: add argument description
908 TODO: add return values.
912 AtaNonDataCommandIn (
913 IN IDE_BLK_IO_DEV
*IdeDev
,
917 IN UINT8 SectorCount
,
924 TODO: Add function description
926 @param IdeDev TODO: add argument description
927 @param AtaCommand TODO: add argument description
928 @param Device TODO: add argument description
929 @param Feature TODO: add argument description
930 @param SectorCount TODO: add argument description
931 @param LbaAddress TODO: add argument description
933 TODO: add return values.
937 AtaNonDataCommandInExt (
938 IN IDE_BLK_IO_DEV
*IdeDev
,
942 IN UINT16 SectorCount
,
943 IN EFI_LBA LbaAddress
947 TODO: Add function description
949 @param IdeDev TODO: add argument description
950 @param DataBuffer TODO: add argument description
951 @param StartLba TODO: add argument description
952 @param NumberOfBlocks TODO: add argument description
954 TODO: add return values.
959 IN IDE_BLK_IO_DEV
*IdeDev
,
962 IN UINTN NumberOfBlocks
966 TODO: Add function description
968 @param IdeDev TODO: add argument description
969 @param DataBuffer TODO: add argument description
970 @param StartLba TODO: add argument description
971 @param NumberOfBlocks TODO: add argument description
973 TODO: add return values.
978 IN IDE_BLK_IO_DEV
*IdeDev
,
981 IN UINTN NumberOfBlocks
985 TODO: Add function description
987 @param IdeDev TODO: add argument description
988 @param DataBuffer TODO: add argument description
989 @param StartLba TODO: add argument description
990 @param NumberOfBlocks TODO: add argument description
992 TODO: add return values.
997 IN IDE_BLK_IO_DEV
*IdeDev
,
1000 IN UINTN NumberOfBlocks
1004 TODO: Add function description
1006 @param IdeDev TODO: add argument description
1007 @param DataBuffer TODO: add argument description
1008 @param StartLba TODO: add argument description
1009 @param NumberOfBlocks TODO: add argument description
1011 TODO: add return values.
1016 IN IDE_BLK_IO_DEV
*IdeDev
,
1017 IN VOID
*DataBuffer
,
1018 IN EFI_LBA StartLba
,
1019 IN UINTN NumberOfBlocks
1023 TODO: Add function description
1025 @param IdeDev TODO: add argument description
1026 @param DataBuffer TODO: add argument description
1027 @param StartLba TODO: add argument description
1028 @param NumberOfBlocks TODO: add argument description
1030 TODO: add return values.
1035 IN IDE_BLK_IO_DEV
*IdeDev
,
1036 IN VOID
*DataBuffer
,
1037 IN EFI_LBA StartLba
,
1038 IN UINTN NumberOfBlocks
1042 Perform an ATA Udma operation (Read, ReadExt, Write, WriteExt).
1045 pointer pointing to IDE_BLK_IO_DEV data structure, used
1046 to record all the information of the IDE device.
1048 @param[in] *DataBuffer
1049 A pointer to the source buffer for the data.
1052 The starting logical block address to write to
1053 on the device media.
1055 @param[in] NumberOfBlocks
1056 The number of transfer data blocks.
1059 The perform operations could be AtaUdmaReadOp, AtaUdmaReadExOp,
1060 AtaUdmaWriteOp, AtaUdmaWriteExOp
1062 @return The device status of UDMA operation. If the operation is
1063 successful, return EFI_SUCCESS.
1068 IN IDE_BLK_IO_DEV
*IdeDev
,
1069 IN VOID
*DataBuffer
,
1070 IN EFI_LBA StartLba
,
1071 IN UINTN NumberOfBlocks
,
1072 IN ATA_UDMA_OPERATION UdmaOp
1077 TODO: Add function description
1079 @param IdeDev TODO: add argument description
1080 @param DataBuffer TODO: add argument description
1081 @param StartLba TODO: add argument description
1082 @param NumberOfBlocks TODO: add argument description
1084 TODO: add return values.
1089 IN IDE_BLK_IO_DEV
*IdeDev
,
1090 IN VOID
*DataBuffer
,
1091 IN EFI_LBA StartLba
,
1092 IN UINTN NumberOfBlocks
1096 TODO: Add function description
1098 @param IdeDev TODO: add argument description
1099 @param AtaCommand TODO: add argument description
1100 @param Device TODO: add argument description
1101 @param Feature TODO: add argument description
1102 @param SectorCount TODO: add argument description
1103 @param LbaAddress TODO: add argument description
1105 TODO: add return values.
1109 AtaCommandIssueExt (
1110 IN IDE_BLK_IO_DEV
*IdeDev
,
1111 IN UINT8 AtaCommand
,
1114 IN UINT16 SectorCount
,
1115 IN EFI_LBA LbaAddress
1119 TODO: Add function description
1121 @param IdeDev TODO: add argument description
1122 @param AtaCommand TODO: add argument description
1123 @param Device TODO: add argument description
1124 @param Feature TODO: add argument description
1125 @param SectorCount TODO: add argument description
1126 @param LbaAddress TODO: add argument description
1128 TODO: add return values.
1133 IN IDE_BLK_IO_DEV
*IdeDev
,
1134 IN UINT8 AtaCommand
,
1137 IN UINT16 SectorCount
,
1138 IN EFI_LBA LbaAddress
1142 TODO: Add function description
1144 @param IdeDev TODO: add argument description
1146 TODO: add return values.
1151 IN IDE_BLK_IO_DEV
*IdeDev
1156 TODO: Add function description
1158 @param IdeDev TODO: add argument description
1160 TODO: add return values.
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.