]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/IdeMode.h
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdeModulePkg / Bus / Ata / AtaAtapiPassThru / IdeMode.h
CommitLineData
a41b5272 1/** @file\r
2 Header file for IDE mode of ATA host controller.\r
a41b5272 3\r
d1102dba 4 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
9d510e61 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a41b5272 6\r
7**/\r
1436aea4 8\r
a41b5272 9#ifndef __ATA_HC_IDE_MODE_H__\r
10#define __ATA_HC_IDE_MODE_H__\r
11\r
12typedef enum {\r
13 EfiIdePrimary = 0,\r
14 EfiIdeSecondary = 1,\r
15 EfiIdeMaxChannel = 2\r
16} EFI_IDE_CHANNEL;\r
17\r
18typedef enum {\r
19 EfiIdeMaster = 0,\r
20 EfiIdeSlave = 1,\r
21 EfiIdeMaxDevice = 2\r
22} EFI_IDE_DEVICE;\r
23\r
24///\r
25/// PIO mode definition\r
26///\r
27typedef enum {\r
28 EfiAtaPioModeBelow2,\r
29 EfiAtaPioMode2,\r
30 EfiAtaPioMode3,\r
31 EfiAtaPioMode4\r
32} EFI_ATA_PIO_MODE;\r
33\r
34//\r
35// Multi word DMA definition\r
36//\r
37typedef enum {\r
38 EfiAtaMdmaMode0,\r
39 EfiAtaMdmaMode1,\r
40 EfiAtaMdmaMode2\r
41} EFI_ATA_MDMA_MODE;\r
42\r
43//\r
44// UDMA mode definition\r
45//\r
46typedef enum {\r
47 EfiAtaUdmaMode0,\r
48 EfiAtaUdmaMode1,\r
49 EfiAtaUdmaMode2,\r
50 EfiAtaUdmaMode3,\r
51 EfiAtaUdmaMode4,\r
52 EfiAtaUdmaMode5\r
53} EFI_ATA_UDMA_MODE;\r
54\r
55//\r
56// Bus Master Reg\r
57//\r
58#define BMIC_NREAD BIT3\r
59#define BMIC_START BIT0\r
60#define BMIS_INTERRUPT BIT2\r
61#define BMIS_ERROR BIT1\r
62\r
1436aea4
MK
63#define BMIC_OFFSET 0x00\r
64#define BMIS_OFFSET 0x02\r
65#define BMID_OFFSET 0x04\r
a41b5272 66\r
67//\r
68// IDE transfer mode\r
69//\r
1436aea4
MK
70#define EFI_ATA_MODE_DEFAULT_PIO 0x00\r
71#define EFI_ATA_MODE_FLOW_PIO 0x01\r
72#define EFI_ATA_MODE_MDMA 0x04\r
73#define EFI_ATA_MODE_UDMA 0x08\r
a41b5272 74\r
75typedef struct {\r
1436aea4
MK
76 UINT32 RegionBaseAddr;\r
77 UINT16 ByteCount;\r
78 UINT16 EndOfTable;\r
a41b5272 79} EFI_ATA_DMA_PRD;\r
80\r
81typedef struct {\r
1436aea4
MK
82 UINT8 ModeNumber : 3;\r
83 UINT8 ModeCategory : 5;\r
a41b5272 84} EFI_ATA_TRANSFER_MODE;\r
85\r
86typedef struct {\r
1436aea4
MK
87 UINT8 Sector;\r
88 UINT8 Heads;\r
89 UINT8 MultipleSector;\r
a41b5272 90} EFI_ATA_DRIVE_PARMS;\r
91\r
92//\r
93// IDE registers set\r
94//\r
95typedef struct {\r
1436aea4
MK
96 UINT16 Data;\r
97 UINT16 ErrOrFeature;\r
98 UINT16 SectorCount;\r
99 UINT16 SectorNumber;\r
100 UINT16 CylinderLsb;\r
101 UINT16 CylinderMsb;\r
102 UINT16 Head;\r
103 UINT16 CmdOrStatus;\r
104 UINT16 AltOrDev;\r
105\r
106 UINT16 BusMasterBaseAddr;\r
a41b5272 107} EFI_IDE_REGISTERS;\r
108\r
109//\r
110// Bit definitions in Programming Interface byte of the Class Code field\r
111// in PCI IDE controller's Configuration Space\r
112//\r
113#define IDE_PRIMARY_OPERATING_MODE BIT0\r
114#define IDE_PRIMARY_PROGRAMMABLE_INDICATOR BIT1\r
115#define IDE_SECONDARY_OPERATING_MODE BIT2\r
116#define IDE_SECONDARY_PROGRAMMABLE_INDICATOR BIT3\r
117\r
118/**\r
d1102dba 119 Get IDE i/o port registers' base addresses by mode.\r
a41b5272 120\r
121 In 'Compatibility' mode, use fixed addresses.\r
122 In Native-PCI mode, get base addresses from BARs in the PCI IDE controller's\r
123 Configuration Space.\r
124\r
125 The steps to get IDE i/o port registers' base addresses for each channel\r
126 as follows:\r
127\r
128 1. Examine the Programming Interface byte of the Class Code fields in PCI IDE\r
129 controller's Configuration Space to determine the operating mode.\r
130\r
131 2. a) In 'Compatibility' mode, use fixed addresses shown in the Table 1 below.\r
132 ___________________________________________\r
133 | | Command Block | Control Block |\r
134 | Channel | Registers | Registers |\r
135 |___________|_______________|_______________|\r
136 | Primary | 1F0h - 1F7h | 3F6h - 3F7h |\r
137 |___________|_______________|_______________|\r
138 | Secondary | 170h - 177h | 376h - 377h |\r
139 |___________|_______________|_______________|\r
140\r
141 Table 1. Compatibility resource mappings\r
d1102dba 142\r
a41b5272 143 b) In Native-PCI mode, IDE registers are mapped into IO space using the BARs\r
144 in IDE controller's PCI Configuration Space, shown in the Table 2 below.\r
145 ___________________________________________________\r
146 | | Command Block | Control Block |\r
147 | Channel | Registers | Registers |\r
148 |___________|___________________|___________________|\r
149 | Primary | BAR at offset 0x10| BAR at offset 0x14|\r
150 |___________|___________________|___________________|\r
151 | Secondary | BAR at offset 0x18| BAR at offset 0x1C|\r
152 |___________|___________________|___________________|\r
153\r
154 Table 2. BARs for Register Mapping\r
155\r
156 @param[in] PciIo Pointer to the EFI_PCI_IO_PROTOCOL instance\r
157 @param[in, out] IdeRegisters Pointer to EFI_IDE_REGISTERS which is used to\r
158 store the IDE i/o port registers' base addresses\r
d1102dba 159\r
a41b5272 160 @retval EFI_UNSUPPORTED Return this value when the BARs is not IO type\r
161 @retval EFI_SUCCESS Get the Base address successfully\r
8c39253d 162 @retval Other Read the pci configuration data error\r
a41b5272 163\r
164**/\r
165EFI_STATUS\r
166EFIAPI\r
167GetIdeRegisterIoAddr (\r
1436aea4
MK
168 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
169 IN OUT EFI_IDE_REGISTERS *IdeRegisters\r
a41b5272 170 );\r
171\r
172/**\r
d1102dba 173 This function is used to send out ATAPI commands conforms to the Packet Command\r
a41b5272 174 with PIO Data In Protocol.\r
175\r
176 @param[in] PciIo Pointer to the EFI_PCI_IO_PROTOCOL instance\r
177 @param[in] IdeRegisters Pointer to EFI_IDE_REGISTERS which is used to\r
178 store the IDE i/o port registers' base addresses\r
179 @param[in] Channel The channel number of device.\r
180 @param[in] Device The device number of device.\r
181 @param[in] Packet A pointer to EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET data structure.\r
182\r
183 @retval EFI_SUCCESS send out the ATAPI packet command successfully\r
184 and device sends data successfully.\r
185 @retval EFI_DEVICE_ERROR the device failed to send data.\r
186\r
187**/\r
188EFI_STATUS\r
189EFIAPI\r
190AtaPacketCommandExecute (\r
1436aea4
MK
191 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
192 IN EFI_IDE_REGISTERS *IdeRegisters,\r
193 IN UINT8 Channel,\r
194 IN UINT8 Device,\r
195 IN EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet\r
a41b5272 196 );\r
197\r
a41b5272 198#endif\r