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
,
46 TODO: Add function description
48 @param Controller TODO: add argument description
49 @param PciIo TODO: add argument description
50 @param ParentDevicePath TODO: add argument description
51 @param RemainingDevicePath TODO: add argument description
53 TODO: add return values
58 IN EFI_HANDLE Controller
,
59 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
60 IN EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
,
61 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
66 TODO: Add function description
68 @param PciIo TODO: add argument description
69 @param Port TODO: add argument description
71 TODO: add return values
76 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
82 TODO: Add function description
84 @param PciIo TODO: add argument description
85 @param Port TODO: add argument description
86 @param Count TODO: add argument description
87 @param Buffer TODO: add argument description
89 TODO: add return values
93 IDEReadPortWMultiple (
94 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
102 TODO: Add function description
104 @param PciIo TODO: add argument description
105 @param Port TODO: add argument description
106 @param Data TODO: add argument description
108 TODO: add return values
113 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
120 TODO: Add function description
122 @param PciIo TODO: add argument description
123 @param Port TODO: add argument description
124 @param Data TODO: add argument description
126 TODO: add return values
131 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
138 TODO: Add function description
140 @param PciIo TODO: add argument description
141 @param Port TODO: add argument description
142 @param Count TODO: add argument description
143 @param Buffer TODO: add argument description
145 TODO: add return values
149 IDEWritePortWMultiple (
150 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
158 TODO: Add function description
160 @param PciIo TODO: add argument description
161 @param IdeRegsBaseAddr TODO: add argument description
163 TODO: add return values
167 GetIdeRegistersBaseAddr (
168 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
169 OUT IDE_REGISTERS_BASE_ADDR
*IdeRegsBaseAddr
174 TODO: Add function description
176 @param IdeDev TODO: add argument description
178 TODO: add return values
182 ReassignIdeResources (
183 IN IDE_BLK_IO_DEV
*IdeDev
188 TODO: Add function description
190 @param IdeDev TODO: add argument description
192 TODO: add return values
197 IN IDE_BLK_IO_DEV
*IdeDev
202 This interface is used to initialize all state data related to the
203 detection of one channel.
205 @retval EFI_SUCCESS Completed successfully.
209 InitializeIDEChannelData (
215 TODO: Add function description
217 @param IdeDev TODO: add argument description
219 TODO: add return values
223 DetectIDEController (
224 IN IDE_BLK_IO_DEV
*IdeDev
229 TODO: Add function description
231 @param IdeDev TODO: add argument description
232 @param TimeoutInMilliSeconds TODO: add argument description
234 TODO: add return values
239 IN IDE_BLK_IO_DEV
*IdeDev
,
240 IN UINTN TimeoutInMilliSeconds
245 TODO: Add function description
247 @param IdeDev TODO: add argument description
248 @param TimeoutInMilliSeconds TODO: add argument description
250 TODO: add return values
255 IN IDE_BLK_IO_DEV
*IdeDev
,
256 IN UINTN TimeoutInMilliSeconds
261 TODO: Add function description
263 @param IdeDev TODO: add argument description
264 @param TimeoutInMilliSeconds TODO: add argument description
266 TODO: add return values
271 IN IDE_BLK_IO_DEV
*IdeDev
,
272 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
293 TODO: Add function description
295 @param IdeDev TODO: add argument description
296 @param TimeoutInMilliSeconds TODO: add argument description
298 TODO: add return values
303 IN IDE_BLK_IO_DEV
*IdeDev
,
304 IN UINTN TimeoutInMilliSeconds
309 TODO: Add function description
311 @param IdeDev TODO: add argument description
312 @param TimeoutInMilliSeconds TODO: add argument description
314 TODO: add return values
319 IN IDE_BLK_IO_DEV
*IdeDev
,
320 IN UINTN TimeoutInMilliSeconds
325 TODO: Add function description
327 @param IdeDev TODO: add argument description
328 @param DelayInMilliSeconds TODO: add argument description
330 TODO: add return values
335 IN IDE_BLK_IO_DEV
*IdeDev
,
336 IN UINTN DelayInMilliSeconds
341 TODO: Add function description
343 @param IdeDev TODO: add argument description
344 @param DelayInMilliSeconds TODO: add argument description
346 TODO: add return values
351 IN IDE_BLK_IO_DEV
*IdeDev
,
352 IN UINTN DelayInMilliSeconds
357 TODO: Add function description
359 @param Destination TODO: add argument description
360 @param Source TODO: add argument description
361 @param Size TODO: add argument description
363 TODO: add return values
368 IN CHAR8
*Destination
,
375 // ATA device functions' prototype
378 TODO: Add function description
380 @param IdeDev TODO: add argument description
382 TODO: add return values
387 IN IDE_BLK_IO_DEV
*IdeDev
392 TODO: Add function description
394 @param IdeDev TODO: add argument description
396 TODO: add return values
401 IN IDE_BLK_IO_DEV
*IdeDev
406 TODO: Add function description
408 @param IdeDev TODO: add argument description
409 @param Buffer TODO: add argument description
410 @param ByteCount TODO: add argument description
411 @param AtaCommand TODO: add argument description
412 @param Head TODO: add argument description
413 @param SectorCount TODO: add argument description
414 @param SectorNumber TODO: add argument description
415 @param CylinderLsb TODO: add argument description
416 @param CylinderMsb TODO: add argument description
418 TODO: add return values
423 IN IDE_BLK_IO_DEV
*IdeDev
,
428 IN UINT8 SectorCount
,
429 IN UINT8 SectorNumber
,
430 IN UINT8 CylinderLsb
,
436 TODO: Add function description
438 @param IdeDev TODO: add argument description
439 @param Buffer TODO: add argument description
440 @param ByteCount TODO: add argument description
441 @param AtaCommand TODO: add argument description
442 @param Head TODO: add argument description
443 @param SectorCount TODO: add argument description
444 @param SectorNumber TODO: add argument description
445 @param CylinderLsb TODO: add argument description
446 @param CylinderMsb TODO: add argument description
448 TODO: add return values
453 IN IDE_BLK_IO_DEV
*IdeDev
,
458 IN UINT8 SectorCount
,
459 IN UINT8 SectorNumber
,
460 IN UINT8 CylinderLsb
,
466 TODO: Add function description
468 @param IdeDev TODO: add argument description
470 TODO: add return values
475 IN IDE_BLK_IO_DEV
*IdeDev
480 TODO: Add function description
482 @param IdeDev TODO: add argument description
483 @param DataBuffer TODO: add argument description
484 @param Lba TODO: add argument description
485 @param NumberOfBlocks TODO: add argument description
487 TODO: add return values
492 IN IDE_BLK_IO_DEV
*IdeDev
,
495 IN UINTN NumberOfBlocks
500 TODO: Add function description
502 @param IdeDev TODO: add argument description
503 @param BufferData TODO: add argument description
504 @param Lba TODO: add argument description
505 @param NumberOfBlocks TODO: add argument description
507 TODO: add return values
512 IN IDE_BLK_IO_DEV
*IdeDev
,
515 IN UINTN NumberOfBlocks
520 TODO: Add function description
522 @param IdeDev TODO: add argument description
524 TODO: add return values
529 IN IDE_BLK_IO_DEV
*IdeDev
534 TODO: Add function description
536 @param IdeBlkIoDevice TODO: add argument description
537 @param MediaId TODO: add argument description
538 @param LBA TODO: add argument description
539 @param BufferSize TODO: add argument description
540 @param Buffer TODO: add argument description
542 TODO: add return values
547 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
556 TODO: Add function description
558 @param IdeBlkIoDevice TODO: add argument description
559 @param MediaId TODO: add argument description
560 @param LBA TODO: add argument description
561 @param BufferSize TODO: add argument description
562 @param Buffer TODO: add argument description
564 TODO: add return values
568 AtaBlkIoWriteBlocks (
569 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
578 // ATAPI device functions' prototype
581 TODO: Add function description
583 @param IdeDev TODO: add argument description
585 TODO: add return values
590 IN IDE_BLK_IO_DEV
*IdeDev
595 TODO: Add function description
597 @param IdeDev TODO: add argument description
599 TODO: add return values
604 IN IDE_BLK_IO_DEV
*IdeDev
609 TODO: Add function description
611 @param IdeDev TODO: add argument description
612 @param Packet TODO: add argument description
613 @param Buffer TODO: add argument description
614 @param ByteCount TODO: add argument description
615 @param TimeOut TODO: add argument description
617 TODO: add return values
621 AtapiPacketCommandIn (
622 IN IDE_BLK_IO_DEV
*IdeDev
,
623 IN ATAPI_PACKET_COMMAND
*Packet
,
631 TODO: Add function description
633 @param IdeDev TODO: add argument description
634 @param Packet TODO: add argument description
635 @param Buffer TODO: add argument description
636 @param ByteCount TODO: add argument description
637 @param TimeOut TODO: add argument description
639 TODO: add return values
643 AtapiPacketCommandOut (
644 IN IDE_BLK_IO_DEV
*IdeDev
,
645 IN ATAPI_PACKET_COMMAND
*Packet
,
653 TODO: Add function description
655 @param IdeDev TODO: add argument description
656 @param Buffer TODO: add argument description
657 @param ByteCount TODO: add argument description
658 @param Read TODO: add argument description
659 @param TimeOut TODO: add argument description
661 TODO: add return values
666 IN IDE_BLK_IO_DEV
*IdeDev
,
675 TODO: Add function description
677 @param IdeDev TODO: add argument description
678 @param IdeDev TODO: add argument description
680 TODO: add return values
685 IN IDE_BLK_IO_DEV
*IdeDev
,
686 OUT UINTN
*SenseCount
691 TODO: Add function description
693 @param IdeDev TODO: add argument description
694 @param SenseCounts TODO: add argument description
696 TODO: add return values
701 IN IDE_BLK_IO_DEV
*IdeDev
,
702 OUT UINTN
*SenseCounts
707 TODO: Add function description
709 @param IdeDev TODO: add argument description
710 @param IdeDev TODO: add argument description
712 TODO: add return values
717 IN IDE_BLK_IO_DEV
*IdeDev
,
718 OUT UINTN
*SenseCount
723 TODO: Add function description
725 @param IdeDev TODO: add argument description
726 @param MediaChange TODO: add argument description
728 TODO: add return values
733 IN IDE_BLK_IO_DEV
*IdeDev
,
734 OUT BOOLEAN
*MediaChange
739 TODO: Add function description
741 @param IdeDev TODO: add argument description
742 @param Buffer TODO: add argument description
743 @param Lba TODO: add argument description
744 @param NumberOfBlocks TODO: add argument description
746 TODO: add return values
751 IN IDE_BLK_IO_DEV
*IdeDev
,
754 IN UINTN NumberOfBlocks
759 TODO: Add function description
761 @param IdeDev TODO: add argument description
762 @param Buffer TODO: add argument description
763 @param Lba TODO: add argument description
764 @param NumberOfBlocks TODO: add argument description
766 TODO: add return values
771 IN IDE_BLK_IO_DEV
*IdeDev
,
774 IN UINTN NumberOfBlocks
779 TODO: Add function description
781 @param IdeDev TODO: add argument description
783 TODO: add return values
788 IN IDE_BLK_IO_DEV
*IdeDev
793 TODO: Add function description
795 @param IdeBlkIoDevice TODO: add argument description
796 @param MediaId TODO: add argument description
797 @param LBA TODO: add argument description
798 @param BufferSize TODO: add argument description
799 @param Buffer TODO: add argument description
801 TODO: add return values
805 AtapiBlkIoReadBlocks (
806 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
815 TODO: Add function description
817 @param IdeBlkIoDevice TODO: add argument description
818 @param MediaId TODO: add argument description
819 @param LBA TODO: add argument description
820 @param BufferSize TODO: add argument description
821 @param Buffer TODO: add argument description
823 TODO: add return values
827 AtapiBlkIoWriteBlocks (
828 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
,
837 TODO: Add function description
839 @param IdeDev TODO: add argument description
840 @param SenseCount TODO: add argument description
841 @param Result TODO: add argument description
843 TODO: add return values
848 IN IDE_BLK_IO_DEV
*IdeDev
,
850 OUT SENSE_RESULT
*Result
855 TODO: Add function description
857 @param IdeDev TODO: add argument description
859 TODO: add return values
863 AtapiReadPendingData (
864 IN IDE_BLK_IO_DEV
*IdeDev
869 TODO: Add function description
871 @param IdeDev TODO: add argument description
872 @param WriteProtected TODO: add argument description
874 TODO: add return values
878 IsLS120orZipWriteProtected (
879 IN IDE_BLK_IO_DEV
*IdeDev
,
880 OUT BOOLEAN
*WriteProtected
885 TODO: Add function description
887 @param IdeBlkIoDevice TODO: add argument description
889 TODO: add return values
893 ReleaseIdeResources (
894 IN IDE_BLK_IO_DEV
*IdeBlkIoDevice
899 TODO: Add function description
901 @param IdeDev TODO: add argument description
902 @param TransferMode TODO: add argument description
904 TODO: add return values
908 SetDeviceTransferMode (
909 IN IDE_BLK_IO_DEV
*IdeDev
,
910 IN ATA_TRANSFER_MODE
*TransferMode
915 TODO: Add function description
917 @param IdeDev TODO: add argument description
918 @param NativeMaxAddress TODO: add argument description
920 TODO: add return values
924 ReadNativeMaxAddress (
925 IN IDE_BLK_IO_DEV
*IdeDev
,
926 OUT EFI_LBA
*NativeMaxAddress
931 TODO: Add function description
933 @param IdeDev TODO: add argument description
934 @param MaxAddress TODO: add argument description
935 @param bVolatile TODO: add argument description
937 TODO: add return values
942 IN IDE_BLK_IO_DEV
*IdeDev
,
943 IN EFI_LBA MaxAddress
,
949 TODO: Add function description
951 @param IdeDev TODO: add argument description
952 @param AtaCommand TODO: add argument description
953 @param Device TODO: add argument description
954 @param Feature TODO: add argument description
955 @param SectorCount TODO: add argument description
956 @param LbaLow TODO: add argument description
957 @param LbaMiddle TODO: add argument description
958 @param LbaHigh TODO: add argument description
960 TODO: add return values
964 AtaNonDataCommandIn (
965 IN IDE_BLK_IO_DEV
*IdeDev
,
969 IN UINT8 SectorCount
,
977 TODO: Add function description
979 @param IdeDev TODO: add argument description
980 @param AtaCommand TODO: add argument description
981 @param Device TODO: add argument description
982 @param Feature TODO: add argument description
983 @param SectorCount TODO: add argument description
984 @param LbaAddress TODO: add argument description
986 TODO: add return values
990 AtaNonDataCommandInExt (
991 IN IDE_BLK_IO_DEV
*IdeDev
,
995 IN UINT16 SectorCount
,
996 IN EFI_LBA LbaAddress
1001 TODO: Add function description
1003 @param IdeDev TODO: add argument description
1004 @param DataBuffer TODO: add argument description
1005 @param StartLba TODO: add argument description
1006 @param NumberOfBlocks TODO: add argument description
1008 TODO: add return values
1013 IN IDE_BLK_IO_DEV
*IdeDev
,
1014 IN VOID
*DataBuffer
,
1015 IN EFI_LBA StartLba
,
1016 IN UINTN NumberOfBlocks
1021 TODO: Add function description
1023 @param IdeDev TODO: add argument description
1024 @param DataBuffer TODO: add argument description
1025 @param StartLba TODO: add argument description
1026 @param NumberOfBlocks TODO: add argument description
1028 TODO: add return values
1032 AtaWriteSectorsExt (
1033 IN IDE_BLK_IO_DEV
*IdeDev
,
1034 IN VOID
*DataBuffer
,
1035 IN EFI_LBA StartLba
,
1036 IN UINTN NumberOfBlocks
1041 TODO: Add function description
1043 @param IdeDev TODO: add argument description
1044 @param DataBuffer TODO: add argument description
1045 @param StartLba TODO: add argument description
1046 @param NumberOfBlocks TODO: add argument description
1048 TODO: add return values
1053 IN IDE_BLK_IO_DEV
*IdeDev
,
1054 IN VOID
*DataBuffer
,
1055 IN EFI_LBA StartLba
,
1056 IN UINTN NumberOfBlocks
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
1081 TODO: Add function description
1083 @param IdeDev TODO: add argument description
1084 @param DataBuffer TODO: add argument description
1085 @param StartLba TODO: add argument description
1086 @param NumberOfBlocks TODO: add argument description
1088 TODO: add return values
1093 IN IDE_BLK_IO_DEV
*IdeDev
,
1094 IN VOID
*DataBuffer
,
1095 IN EFI_LBA StartLba
,
1096 IN UINTN NumberOfBlocks
1101 Perform an ATA Udma operation (Read, ReadExt, Write, WriteExt).
1104 pointer pointing to IDE_BLK_IO_DEV data structure, used
1105 to record all the information of the IDE device.
1107 @param[in] *DataBuffer
1108 A pointer to the source buffer for the data.
1111 The starting logical block address to write to
1112 on the device media.
1114 @param[in] NumberOfBlocks
1115 The number of transfer data blocks.
1118 The perform operations could be AtaUdmaReadOp, AtaUdmaReadExOp,
1119 AtaUdmaWriteOp, AtaUdmaWriteExOp
1121 @return The device status of UDMA operation. If the operation is
1122 successful, return EFI_SUCCESS.
1127 IN IDE_BLK_IO_DEV
*IdeDev
,
1128 IN VOID
*DataBuffer
,
1129 IN EFI_LBA StartLba
,
1130 IN UINTN NumberOfBlocks
,
1131 IN ATA_UDMA_OPERATION UdmaOp
1137 TODO: Add function description
1139 @param IdeDev TODO: add argument description
1140 @param DataBuffer TODO: add argument description
1141 @param StartLba TODO: add argument description
1142 @param NumberOfBlocks TODO: add argument description
1144 TODO: add return values
1149 IN IDE_BLK_IO_DEV
*IdeDev
,
1150 IN VOID
*DataBuffer
,
1151 IN EFI_LBA StartLba
,
1152 IN UINTN NumberOfBlocks
1157 TODO: Add function description
1159 @param IdeDev TODO: add argument description
1160 @param AtaCommand TODO: add argument description
1161 @param Device TODO: add argument description
1162 @param Feature TODO: add argument description
1163 @param SectorCount TODO: add argument description
1164 @param LbaAddress TODO: add argument description
1166 TODO: add return values
1170 AtaCommandIssueExt (
1171 IN IDE_BLK_IO_DEV
*IdeDev
,
1172 IN UINT8 AtaCommand
,
1175 IN UINT16 SectorCount
,
1176 IN EFI_LBA LbaAddress
1181 TODO: Add function description
1183 @param IdeDev TODO: add argument description
1184 @param AtaCommand TODO: add argument description
1185 @param Device TODO: add argument description
1186 @param Feature TODO: add argument description
1187 @param SectorCount TODO: add argument description
1188 @param LbaAddress TODO: add argument description
1190 TODO: add return values
1195 IN IDE_BLK_IO_DEV
*IdeDev
,
1196 IN UINT8 AtaCommand
,
1199 IN UINT16 SectorCount
,
1200 IN EFI_LBA LbaAddress
1205 TODO: Add function description
1207 @param IdeDev TODO: add argument description
1209 TODO: add return values
1214 IN IDE_BLK_IO_DEV
*IdeDev
1220 TODO: Add function description
1222 @param IdeDev TODO: add argument description
1224 TODO: add return values
1229 IN IDE_BLK_IO_DEV
*IdeDev
1234 TODO: Add function description
1236 @param IdeDev TODO: add argument description
1237 @param Buffer TODO: add argument description
1238 @param ByteCount TODO: add argument description
1239 @param AtaCommand TODO: add argument description
1240 @param StartLba TODO: add argument description
1241 @param SectorCount TODO: add argument description
1243 TODO: add return values
1248 IN IDE_BLK_IO_DEV
*IdeDev
,
1249 IN OUT VOID
*Buffer
,
1250 IN UINT32 ByteCount
,
1251 IN UINT8 AtaCommand
,
1252 IN EFI_LBA StartLba
,
1253 IN UINT16 SectorCount
1258 TODO: Add function description
1260 @param IdeDev TODO: add argument description
1261 @param Buffer TODO: add argument description
1262 @param ByteCount TODO: add argument description
1263 @param AtaCommand TODO: add argument description
1264 @param StartLba TODO: add argument description
1265 @param SectorCount TODO: add argument description
1267 TODO: add return values
1272 IN IDE_BLK_IO_DEV
*IdeDev
,
1274 IN UINT32 ByteCount
,
1275 IN UINT8 AtaCommand
,
1276 IN EFI_LBA StartLba
,
1277 IN UINT16 SectorCount
1282 TODO: Add function description
1284 @param IdeDev TODO: add argument description
1285 @param DriveParameters TODO: add argument description
1287 TODO: add return values
1291 SetDriveParameters (
1292 IN IDE_BLK_IO_DEV
*IdeDev
,
1293 IN ATA_DRIVE_PARMS
*DriveParameters
1298 TODO: Add function description
1300 @param IdeDev TODO: add argument description
1302 TODO: add return values
1307 IN IDE_BLK_IO_DEV
*IdeDev
1312 Clear pending IDE interrupt before OS loader/kernel take control of the IDE device.
1314 @param[in] Event Pointer to this event
1315 @param[in] Context Event hanlder private data
1317 @retval EFI_SUCCESS - Interrupt cleared