]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.h
1. Set the Target array to zero before fill the target id.
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / AtapiPassThruDxe / AtapiPassThru.h
CommitLineData
513f3f44 1/** @file\r
2 Copyright (c) 2006, Intel Corporation \r
3 All rights reserved. This program and the accompanying materials \r
4 are licensed and made available under the terms and conditions of the BSD License \r
5 which accompanies this distribution. The full text of the license may be found at \r
6 http://opensource.org/licenses/bsd-license.php \r
7\r
8 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
9 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
10\r
11 Module Name: AtapiPassThru.h\r
12\r
13**/\r
14\r
15#ifndef _APT_H\r
16#define _APT_H\r
17\r
18\r
ed7748fe 19\r
513f3f44 20#include <Uefi.h>\r
ed7748fe 21\r
513f3f44 22#include <Protocol/ScsiPassThru.h>\r
23#include <Protocol/PciIo.h>\r
ed7748fe 24\r
513f3f44 25#include <Library/DebugLib.h>\r
26#include <Library/UefiDriverEntryPoint.h>\r
27#include <Library/BaseLib.h>\r
28#include <Library/UefiLib.h>\r
29#include <Library/BaseMemoryLib.h>\r
30#include <Library/MemoryAllocationLib.h>\r
31#include <Library/UefiBootServicesTableLib.h>\r
32#include <IndustryStandard/pci22.h>\r
33\r
34///\r
35/// bit definition\r
36///\r
37#define bit(a) (1 << (a))\r
38\r
39#define MAX_TARGET_ID 4\r
40\r
41//\r
42// IDE Registers\r
43//\r
44typedef union {\r
45 UINT16 Command; /* when write */\r
46 UINT16 Status; /* when read */\r
47} IDE_CMD_OR_STATUS;\r
48\r
49typedef union {\r
50 UINT16 Error; /* when read */\r
51 UINT16 Feature; /* when write */\r
52} IDE_ERROR_OR_FEATURE;\r
53\r
54typedef union {\r
55 UINT16 AltStatus; /* when read */\r
56 UINT16 DeviceControl; /* when write */\r
57} IDE_AltStatus_OR_DeviceControl;\r
58\r
f36d6e66 59\r
60typedef enum {\r
61 IdePrimary = 0,\r
62 IdeSecondary = 1,\r
63 IdeMaxChannel = 2\r
64} EFI_IDE_CHANNEL;\r
65\r
66///\r
67\r
68\r
69//\r
70// Bit definitions in Programming Interface byte of the Class Code field\r
71// in PCI IDE controller's Configuration Space\r
72//\r
73#define IDE_PRIMARY_OPERATING_MODE BIT0\r
74#define IDE_PRIMARY_PROGRAMMABLE_INDICATOR BIT1\r
75#define IDE_SECONDARY_OPERATING_MODE BIT2\r
76#define IDE_SECONDARY_PROGRAMMABLE_INDICATOR BIT3\r
77\r
78\r
79#define ATAPI_MAX_CHANNEL 2\r
80\r
513f3f44 81///\r
82/// IDE registers set\r
83///\r
84typedef struct {\r
85 UINT16 Data;\r
86 IDE_ERROR_OR_FEATURE Reg1;\r
87 UINT16 SectorCount;\r
88 UINT16 SectorNumber;\r
89 UINT16 CylinderLsb;\r
90 UINT16 CylinderMsb;\r
91 UINT16 Head;\r
92 IDE_CMD_OR_STATUS Reg;\r
513f3f44 93 IDE_AltStatus_OR_DeviceControl Alt;\r
94 UINT16 DriveAddress;\r
513f3f44 95} IDE_BASE_REGISTERS;\r
96\r
97#define ATAPI_SCSI_PASS_THRU_DEV_SIGNATURE EFI_SIGNATURE_32 ('a', 's', 'p', 't')\r
98\r
99typedef struct {\r
f36d6e66 100 UINTN Signature;\r
101 EFI_HANDLE Handle;\r
102 EFI_SCSI_PASS_THRU_PROTOCOL ScsiPassThru;\r
103 EFI_SCSI_PASS_THRU_MODE ScsiPassThruMode;\r
104 EFI_PCI_IO_PROTOCOL *PciIo;\r
513f3f44 105 //\r
106 // Local Data goes here\r
107 //\r
f36d6e66 108 IDE_BASE_REGISTERS *IoPort;\r
109 IDE_BASE_REGISTERS AtapiIoPortRegisters[2];\r
110 CHAR16 ControllerName[100];\r
111 CHAR16 ChannelName[100];\r
112 UINT32 LatestTargetId;\r
113 UINT64 LatestLun;\r
513f3f44 114} ATAPI_SCSI_PASS_THRU_DEV;\r
115\r
f36d6e66 116//\r
117// IDE registers' base addresses\r
118//\r
119typedef struct {\r
120 UINT16 CommandBlockBaseAddr;\r
121 UINT16 ControlBlockBaseAddr;\r
122} IDE_REGISTERS_BASE_ADDR;\r
123\r
513f3f44 124#define ATAPI_SCSI_PASS_THRU_DEV_FROM_THIS(a) \\r
125 CR (a, \\r
126 ATAPI_SCSI_PASS_THRU_DEV, \\r
127 ScsiPassThru, \\r
128 ATAPI_SCSI_PASS_THRU_DEV_SIGNATURE \\r
129 )\r
130\r
131//\r
132// Global Variables\r
133//\r
134extern EFI_DRIVER_BINDING_PROTOCOL gAtapiScsiPassThruDriverBinding;\r
135extern EFI_COMPONENT_NAME_PROTOCOL gAtapiScsiPassThruComponentName;\r
136\r
137//\r
138// ATAPI Command op code\r
139//\r
140#define OP_INQUIRY 0x12\r
141#define OP_LOAD_UNLOAD_CD 0xa6\r
142#define OP_MECHANISM_STATUS 0xbd\r
143#define OP_MODE_SELECT_10 0x55\r
144#define OP_MODE_SENSE_10 0x5a\r
145#define OP_PAUSE_RESUME 0x4b\r
146#define OP_PLAY_AUDIO_10 0x45\r
147#define OP_PLAY_AUDIO_MSF 0x47\r
148#define OP_PLAY_CD 0xbc\r
149#define OP_PLAY_CD_MSF 0xb4\r
150#define OP_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e\r
151#define OP_READ_10 0x28\r
152#define OP_READ_12 0xa8\r
153#define OP_READ_CAPACITY 0x25\r
154#define OP_READ_CD 0xbe\r
155#define OP_READ_CD_MSF 0xb9\r
156#define OP_READ_HEADER 0x44\r
157#define OP_READ_SUB_CHANNEL 0x42\r
158#define OP_READ_TOC 0x43\r
159#define OP_REQUEST_SENSE 0x03\r
160#define OP_SCAN 0xba\r
161#define OP_SEEK_10 0x2b\r
162#define OP_SET_CD_SPEED 0xbb\r
163#define OP_STOPPLAY_SCAN 0x4e\r
164#define OP_START_STOP_UNIT 0x1b\r
165#define OP_TEST_UNIT_READY 0x00\r
166\r
167#define OP_FORMAT_UNIT 0x04\r
168#define OP_READ_FORMAT_CAPACITIES 0x23\r
169#define OP_VERIFY 0x2f\r
170#define OP_WRITE_10 0x2a\r
171#define OP_WRITE_12 0xaa\r
172#define OP_WRITE_AND_VERIFY 0x2e\r
173\r
174//\r
175// ATA Command\r
176//\r
177#define ATAPI_SOFT_RESET_CMD 0x08\r
178\r
179typedef enum {\r
180 DataIn = 0,\r
181 DataOut = 1,\r
182 NoData = 2,\r
183 End = 0xff\r
184} DATA_DIRECTION;\r
185\r
186typedef struct {\r
187 UINT8 OpCode;\r
188 DATA_DIRECTION Direction;\r
189} SCSI_COMMAND_SET;\r
190\r
191#define MAX_CHANNEL 2\r
192\r
193#define ValidCdbLength(Len) ((Len) == 6 || (Len) == 10 || (Len) == 12) ? 1 : 0\r
194\r
195//\r
196// IDE registers bit definitions\r
197//\r
198// ATA Err Reg bitmap\r
199//\r
200#define BBK_ERR bit (7) ///< Bad block detected\r
201#define UNC_ERR bit (6) ///< Uncorrectable Data\r
202#define MC_ERR bit (5) ///< Media Change\r
203#define IDNF_ERR bit (4) ///< ID Not Found\r
204#define MCR_ERR bit (3) ///< Media Change Requested\r
205#define ABRT_ERR bit (2) ///< Aborted Command\r
206#define TK0NF_ERR bit (1) ///< Track 0 Not Found\r
207#define AMNF_ERR bit (0) ///< Address Mark Not Found\r
208\r
209//\r
210// ATAPI Err Reg bitmap\r
211//\r
212#define SENSE_KEY_ERR (bit (7) | bit (6) | bit (5) | bit (4))\r
213#define EOM_ERR bit (1) ///< End of Media Detected\r
214#define ILI_ERR bit (0) ///< Illegal Length Indication\r
215\r
216//\r
217// Device/Head Reg\r
218//\r
219#define LBA_MODE bit (6)\r
220#define DEV bit (4)\r
221#define HS3 bit (3)\r
222#define HS2 bit (2)\r
223#define HS1 bit (1)\r
224#define HS0 bit (0)\r
225#define CHS_MODE (0)\r
226#define DRV0 (0)\r
227#define DRV1 (1)\r
228#define MST_DRV DRV0\r
229#define SLV_DRV DRV1\r
230\r
231//\r
232// Status Reg\r
233//\r
234#define BSY bit (7) ///< Controller Busy\r
235#define DRDY bit (6) ///< Drive Ready\r
236#define DWF bit (5) ///< Drive Write Fault\r
237#define DSC bit (4) ///< Disk Seek Complete\r
238#define DRQ bit (3) ///< Data Request\r
239#define CORR bit (2) ///< Corrected Data\r
240#define IDX bit (1) ///< Index\r
241#define ERR bit (0) ///< Error\r
242#define CHECK bit (0) ///< Check bit for ATAPI Status Reg\r
243\r
244//\r
245// Device Control Reg\r
246//\r
247#define SRST bit (2) ///< Software Reset\r
248#define IEN_L bit (1) ///< Interrupt Enable\r
249\r
250//\r
251// ATAPI Feature Register\r
252//\r
253#define OVERLAP bit (1)\r
254#define DMA bit (0)\r
255\r
256//\r
257// ATAPI Interrupt Reason Reson Reg (ATA Sector Count Register)\r
258//\r
259#define RELEASE bit (2)\r
260#define IO bit (1)\r
261#define CoD bit (0)\r
262\r
263#define PACKET_CMD 0xA0\r
264\r
265#define DEFAULT_CMD (0xa0)\r
266//\r
267// default content of device control register, disable INT\r
268//\r
269#define DEFAULT_CTL (0x0a)\r
270#define MAX_ATAPI_BYTE_COUNT (0xfffe)\r
271\r
272//\r
273// function prototype\r
274//\r
275\r
276EFI_STATUS\r
277EFIAPI\r
278AtapiScsiPassThruDriverBindingSupported (\r
279 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
280 IN EFI_HANDLE Controller,\r
281 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
282 );\r
283\r
284EFI_STATUS\r
285EFIAPI\r
286AtapiScsiPassThruDriverBindingStart (\r
287 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
288 IN EFI_HANDLE Controller,\r
289 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
290 );\r
291\r
292EFI_STATUS\r
293EFIAPI\r
294AtapiScsiPassThruDriverBindingStop (\r
295 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
296 IN EFI_HANDLE Controller,\r
297 IN UINTN NumberOfChildren,\r
298 IN EFI_HANDLE *ChildHandleBuffer\r
299 );\r
300\r
301//\r
302// EFI Component Name Functions\r
303//\r
304EFI_STATUS\r
305EFIAPI\r
306AtapiScsiPassThruComponentNameGetDriverName (\r
307 IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
308 IN CHAR8 *Language,\r
309 OUT CHAR16 **DriverName\r
310 );\r
311\r
312EFI_STATUS\r
313EFIAPI\r
314AtapiScsiPassThruComponentNameGetControllerName (\r
315 IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
316 IN EFI_HANDLE ControllerHandle,\r
317 IN EFI_HANDLE ChildHandle OPTIONAL,\r
318 IN CHAR8 *Language,\r
319 OUT CHAR16 **ControllerName\r
320 );\r
321\r
322/**\r
323 AtapiScsiPassThruDriverEntryPoint\r
324\r
325 @param ImageHandle\r
326 @param SystemTable\r
327\r
328 @todo Add function description\r
329 @todo ImageHandle - add argument description\r
330 @todo SystemTable - add argument description\r
331 @todo add return values\r
332--*/\r
333EFI_STATUS\r
334EFIAPI\r
335AtapiScsiPassThruDriverEntryPoint (\r
336 IN EFI_HANDLE ImageHandle,\r
337 IN EFI_SYSTEM_TABLE *SystemTable\r
338 )\r
339;\r
340\r
341/**\r
342 RegisterAtapiScsiPassThru\r
343\r
344 @param This\r
345 @param Controller\r
346 @param PciIo\r
347\r
348 @todo Add function description\r
349 @todo This add argument description\r
350 @todo Controller add argument description\r
351 @todo PciIo add argument description\r
352 @todo add return values\r
353**/\r
354EFI_STATUS\r
355RegisterAtapiScsiPassThru (\r
356 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
357 IN EFI_HANDLE Controller,\r
358 IN EFI_PCI_IO_PROTOCOL *PciIo\r
359 )\r
360;\r
361\r
362/**\r
363 AtapiScsiPassThruFunction\r
364\r
365 @param This\r
366 @param Target\r
367 @param Lun\r
368 @param Packet\r
369 @param Event\r
370\r
371 @todo Add function description\r
372 @todo This - add argument description\r
373 @todo Target - add argument description\r
374 @todo Lun - add argument description\r
375 @todo Packet - add argument description\r
376 @todo Event - add argument description\r
377 @todo add return values\r
378**/\r
379EFI_STATUS\r
380EFIAPI\r
381AtapiScsiPassThruFunction (\r
382 IN EFI_SCSI_PASS_THRU_PROTOCOL *This,\r
383 IN UINT32 Target,\r
384 IN UINT64 Lun,\r
385 IN OUT EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
386 IN EFI_EVENT Event OPTIONAL\r
387 )\r
388;\r
389\r
390/**\r
391 AtapiScsiPassThruGetNextDevice\r
392\r
393 TODO: Add function description\r
394\r
395 @param This TODO: add argument description\r
396 @param Target TODO: add argument description\r
397 @param Lun TODO: add argument description\r
398\r
399 TODO: add return values\r
400\r
401**/\r
402EFI_STATUS\r
403EFIAPI\r
404AtapiScsiPassThruGetNextDevice (\r
405 IN EFI_SCSI_PASS_THRU_PROTOCOL *This,\r
406 IN OUT UINT32 *Target,\r
407 IN OUT UINT64 *Lun\r
408 )\r
409;\r
410\r
411/**\r
412 AtapiScsiPassThruBuildDevicePath\r
413\r
414 TODO: Add function description\r
415\r
416 @param This TODO: add argument description\r
417 @param Target TODO: add argument description\r
418 @param Lun TODO: add argument description\r
419 @param DevicePath TODO: add argument description\r
420\r
421 TODO: add return values\r
422\r
423**/\r
424EFI_STATUS\r
425EFIAPI\r
426AtapiScsiPassThruBuildDevicePath (\r
427 IN EFI_SCSI_PASS_THRU_PROTOCOL *This,\r
428 IN UINT32 Target,\r
429 IN UINT64 Lun,\r
430 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
431 )\r
432;\r
433\r
434/**\r
435 AtapiScsiPassThruGetTargetLun\r
436\r
437 TODO: Add function description\r
438\r
439 @param This TODO: add argument description\r
440 @param DevicePath TODO: add argument description\r
441 @param Target TODO: add argument description\r
442 @param Lun TODO: add argument description\r
443\r
444 TODO: add return values\r
445\r
446**/\r
447EFI_STATUS\r
448EFIAPI\r
449AtapiScsiPassThruGetTargetLun (\r
450 IN EFI_SCSI_PASS_THRU_PROTOCOL *This,\r
451 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
452 OUT UINT32 *Target,\r
453 OUT UINT64 *Lun\r
454 )\r
455;\r
456\r
457/**\r
458 AtapiScsiPassThruResetChannel\r
459\r
460 TODO: Add function description\r
461\r
462 @param This TODO: add argument description\r
463\r
464 TODO: add return values\r
465\r
466**/\r
467EFI_STATUS\r
468EFIAPI\r
469AtapiScsiPassThruResetChannel (\r
470 IN EFI_SCSI_PASS_THRU_PROTOCOL *This\r
471 )\r
472;\r
473\r
474/**\r
475 AtapiScsiPassThruResetTarget\r
476\r
477 TODO: Add function description\r
478\r
479 @param This TODO: add argument description\r
480 @param Target TODO: add argument description\r
481 @param Lun TODO: add argument description\r
482\r
483 TODO: add return values\r
484\r
485**/\r
486EFI_STATUS\r
487EFIAPI\r
488AtapiScsiPassThruResetTarget (\r
489 IN EFI_SCSI_PASS_THRU_PROTOCOL *This,\r
490 IN UINT32 Target,\r
491 IN UINT64 Lun\r
492 )\r
493;\r
494\r
495/**\r
496 CheckSCSIRequestPacket\r
497\r
498 TODO: Add function description\r
499\r
500 @param Packet TODO: add argument description\r
501\r
502 TODO: add return values\r
503\r
504**/\r
505EFI_STATUS\r
506CheckSCSIRequestPacket (\r
507 EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet\r
508 )\r
509;\r
510\r
511/**\r
512 SubmitBlockingIoCommand\r
513\r
514 TODO: Add function description\r
515\r
516 @param AtapiScsiPrivate TODO: add argument description\r
517 @param Target TODO: add argument description\r
518 @param Packet TODO: add argument description\r
519\r
520 TODO: add return values\r
521\r
522**/\r
523EFI_STATUS\r
524SubmitBlockingIoCommand (\r
525 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
526 UINT32 Target,\r
527 EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet\r
528 )\r
529;\r
530\r
531/**\r
532 IsCommandValid\r
533\r
534 TODO: Add function description\r
535\r
536 @param Packet - TODO: add argument description\r
537\r
538 @return TODO: add return values\r
539\r
540--*/\r
541BOOLEAN\r
542IsCommandValid (\r
543 EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet\r
544 )\r
545;\r
546\r
547/**\r
548 RequestSenseCommand\r
549\r
550 TODO: Add function description\r
551\r
552 @param AtapiScsiPrivate TODO: add argument description\r
553 @param Target TODO: add argument description\r
554 @param Timeout TODO: add argument description\r
555 @param SenseData TODO: add argument description\r
556 @param SenseDataLength TODO: add argument description\r
557\r
558 TODO: add return values\r
559\r
560**/\r
561EFI_STATUS\r
562RequestSenseCommand (\r
563 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
564 UINT32 Target,\r
565 UINT64 Timeout,\r
566 VOID *SenseData,\r
567 UINT8 *SenseDataLength\r
568 )\r
569;\r
570\r
571/**\r
572 AtapiPacketCommand\r
573\r
574 TODO: Add function description\r
575\r
576 @param AtapiScsiPrivate TODO: add argument description\r
577 @param Target TODO: add argument description\r
578 @param PacketCommand TODO: add argument description\r
579 @param Buffer TODO: add argument description\r
580 @param ByteCount TODO: add argument description\r
581 @param Direction TODO: add argument description\r
582 @param TimeOutInMicroSeconds TODO: add argument description\r
583\r
584 TODO: add return values\r
585\r
586**/\r
587EFI_STATUS\r
588AtapiPacketCommand (\r
589 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
590 UINT32 Target,\r
591 UINT8 *PacketCommand,\r
592 VOID *Buffer,\r
593 UINT32 *ByteCount,\r
594 DATA_DIRECTION Direction,\r
595 UINT64 TimeOutInMicroSeconds\r
596 )\r
597;\r
598\r
599\r
600/**\r
601 ReadPortB\r
602\r
603 TODO: Add function description\r
604\r
605 @param PciIo TODO: add argument description\r
606 @param Port TODO: add argument description\r
607\r
608 TODO: add return values\r
609\r
610**/\r
611UINT8\r
612ReadPortB (\r
613 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
614 IN UINT16 Port\r
615 )\r
616;\r
617\r
618\r
619/**\r
620 ReadPortW\r
621\r
622 TODO: Add function description\r
623\r
624 @param PciIo TODO: add argument description\r
625 @param Port TODO: add argument description\r
626\r
627 TODO: add return values\r
628\r
629**/\r
630UINT16\r
631ReadPortW (\r
632 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
633 IN UINT16 Port\r
634 )\r
635;\r
636\r
637\r
638/**\r
639 WritePortB\r
640\r
641 TODO: Add function description\r
642\r
643 @param PciIo TODO: add argument description\r
644 @param Port TODO: add argument description\r
645 @param Data TODO: add argument description\r
646\r
647 TODO: add return values\r
648\r
649**/\r
650VOID\r
651WritePortB (\r
652 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
653 IN UINT16 Port,\r
654 IN UINT8 Data\r
655 )\r
656;\r
657\r
658\r
659/**\r
660 WritePortW\r
661\r
662 TODO: Add function description\r
663\r
664 @param PciIo TODO: add argument description\r
665 @param Port TODO: add argument description\r
666 @param Data TODO: add argument description\r
667\r
668 TODO: add return values\r
669\r
670**/\r
671VOID\r
672WritePortW (\r
673 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
674 IN UINT16 Port,\r
675 IN UINT16 Data\r
676 )\r
677;\r
678\r
679/**\r
680 StatusDRQClear\r
681\r
682 TODO: Add function description\r
683\r
684 @param AtapiScsiPrivate TODO: add argument description\r
685 @param TimeOutInMicroSeconds TODO: add argument description\r
686\r
687 TODO: add return values\r
688\r
689**/\r
690EFI_STATUS\r
691StatusDRQClear (\r
692 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
693 UINT64 TimeOutInMicroSeconds\r
694 )\r
695;\r
696\r
697/**\r
698 AltStatusDRQClear\r
699\r
700 TODO: Add function description\r
701\r
702 @param AtapiScsiPrivate TODO: add argument description\r
703 @param TimeOutInMicroSeconds TODO: add argument description\r
704\r
705 TODO: add return values\r
706\r
707**/\r
708EFI_STATUS\r
709AltStatusDRQClear (\r
710 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
711 UINT64 TimeOutInMicroSeconds\r
712 )\r
713;\r
714\r
715/**\r
716 StatusDRQReady\r
717\r
718 TODO: Add function description\r
719\r
720 @param AtapiScsiPrivate TODO: add argument description\r
721 @param TimeOutInMicroSeconds TODO: add argument description\r
722\r
723 TODO: add return values\r
724\r
725**/\r
726EFI_STATUS\r
727StatusDRQReady (\r
728 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
729 UINT64 TimeOutInMicroSeconds\r
730 )\r
731;\r
732\r
733/**\r
734 AltStatusDRQReady\r
735\r
736 TODO: Add function description\r
737\r
738 @param AtapiScsiPrivate TODO: add argument description\r
739 @param TimeOutInMicroSeconds TODO: add argument description\r
740\r
741 TODO: add return values\r
742\r
743**/\r
744EFI_STATUS\r
745AltStatusDRQReady (\r
746 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
747 UINT64 TimeOutInMicroSeconds\r
748 )\r
749;\r
750\r
751/**\r
752 TODO: Add function description\r
753\r
754 @param AtapiScsiPrivate TODO: add argument description\r
755 @param TimeoutInMicroSeconds TODO: add argument description\r
756\r
757 TODO: add return values\r
758\r
759**/\r
760EFI_STATUS\r
761StatusWaitForBSYClear (\r
762 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
763 UINT64 TimeoutInMicroSeconds\r
764 )\r
765;\r
766\r
767/**\r
768 TODO: Add function description\r
769\r
770 @param AtapiScsiPrivate TODO: add argument description\r
771 @param TimeoutInMicroSeconds TODO: add argument description\r
772\r
773 TODO: add return values\r
774\r
775**/\r
776EFI_STATUS\r
777AltStatusWaitForBSYClear (\r
778 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
779 UINT64 TimeoutInMicroSeconds\r
780 )\r
781;\r
782\r
783/**\r
784 TODO: Add function description\r
785\r
786 @param AtapiScsiPrivate TODO: add argument description\r
787 @param TimeoutInMicroSeconds TODO: add argument description\r
788\r
789 TODO: add return values\r
790\r
791**/\r
792EFI_STATUS\r
793StatusDRDYReady (\r
794 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
795 UINT64 TimeoutInMicroSeconds\r
796 )\r
797;\r
798\r
799/**\r
800 TODO: Add function description\r
801\r
802 @param AtapiScsiPrivate TODO: add argument description\r
803 @param TimeoutInMicroSeconds TODO: add argument description\r
804\r
805 TODO: add return values\r
806\r
807**/\r
808EFI_STATUS\r
809AltStatusDRDYReady (\r
810 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
811 UINT64 TimeoutInMicroSeconds\r
812 )\r
813;\r
814\r
815/**\r
816 TODO: Add function description\r
817\r
818 @param AtapiScsiPrivate TODO: add argument description\r
819 @param Buffer TODO: add argument description\r
820 @param ByteCount TODO: add argument description\r
821 @param Direction TODO: add argument description\r
822 @param TimeOutInMicroSeconds TODO: add argument description\r
823\r
824 TODO: add return values\r
825\r
826**/\r
827EFI_STATUS\r
828AtapiPassThruPioReadWriteData (\r
829 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
830 UINT16 *Buffer,\r
831 UINT32 *ByteCount,\r
832 DATA_DIRECTION Direction,\r
833 UINT64 TimeOutInMicroSeconds\r
834 )\r
835;\r
836\r
837/**\r
838 TODO: Add function description\r
839\r
840 @param AtapiScsiPrivate TODO: add argument description\r
841\r
842 TODO: add return values\r
843\r
844**/\r
845EFI_STATUS\r
846AtapiPassThruCheckErrorStatus (\r
847 ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate\r
848 )\r
849;\r
f36d6e66 850EFI_STATUS\r
851GetIdeRegistersBaseAddr (\r
852 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
853 OUT IDE_REGISTERS_BASE_ADDR *IdeRegsBaseAddr\r
854 )\r
855/*++\r
856\r
857Routine Description:\r
858 Get IDE IO port registers' base addresses by mode. In 'Compatibility' mode,\r
859 use fixed addresses. In Native-PCI mode, get base addresses from BARs in\r
860 the PCI IDE controller's Configuration Space.\r
861\r
862Arguments:\r
863 PciIo - Pointer to the EFI_PCI_IO_PROTOCOL instance\r
864 IdeRegsBaseAddr - Pointer to IDE_REGISTERS_BASE_ADDR to \r
865 receive IDE IO port registers' base addresses\r
866 \r
867Returns:\r
868\r
869 EFI_STATUS\r
870 \r
871--*/\r
872;\r
873\r
874VOID\r
875InitAtapiIoPortRegisters (\r
876 IN ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,\r
877 IN IDE_REGISTERS_BASE_ADDR *IdeRegsBaseAddr\r
878 )\r
879/*++\r
880\r
881Routine Description:\r
882\r
883 Initialize each Channel's Base Address of CommandBlock and ControlBlock.\r
884\r
885Arguments:\r
886 \r
887 AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
888 IdeRegsBaseAddr - The pointer of IDE_REGISTERS_BASE_ADDR\r
889 \r
890Returns:\r
891 \r
892 None\r
893\r
894--*/ \r
895;\r
896\r
513f3f44 897#endif\r