]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeData.h
IntelFrameworkModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / IdeBusDxe / IdeData.h
CommitLineData
ead42efc 1/** @file\r
2 Header file for IDE Bus Driver's Data Structures\r
3\r
0a6f4824 4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
c0a00b14 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
ead42efc 6\r
7**/\r
8\r
eeefcb9d 9#ifndef _IDE_DATA_H_\r
10#define _IDE_DATA_H_\r
ead42efc 11\r
1e23bd8d 12#include <IndustryStandard/Atapi.h>\r
ead42efc 13\r
14//\r
15// common constants\r
16//\r
17#define STALL_1_MILLI_SECOND 1000 // stall 1 ms\r
18#define STALL_1_SECOND 1000000 // stall 1 second\r
19typedef enum {\r
20 IdePrimary = 0,\r
21 IdeSecondary = 1,\r
22 IdeMaxChannel = 2\r
23} EFI_IDE_CHANNEL;\r
24\r
25typedef enum {\r
26 IdeMaster = 0,\r
27 IdeSlave = 1,\r
28 IdeMaxDevice = 2\r
29} EFI_IDE_DEVICE;\r
30\r
31typedef enum {\r
32 IdeMagnetic, /* ZIP Drive or LS120 Floppy Drive */\r
33 IdeCdRom, /* ATAPI CDROM */\r
34 IdeHardDisk, /* Hard Disk */\r
35 Ide48bitAddressingHardDisk, /* Hard Disk larger than 120GB */\r
36 IdeUnknown\r
37} IDE_DEVICE_TYPE;\r
38\r
39typedef enum {\r
40 SenseNoSenseKey,\r
41 SenseDeviceNotReadyNoRetry,\r
42 SenseDeviceNotReadyNeedRetry,\r
43 SenseNoMedia,\r
44 SenseMediaChange,\r
45 SenseMediaError,\r
46 SenseOtherSense\r
47} SENSE_RESULT;\r
48\r
49typedef enum {\r
50 AtaUdmaReadOp,\r
51 AtaUdmaReadExtOp,\r
52 AtaUdmaWriteOp,\r
53 AtaUdmaWriteExtOp\r
54} ATA_UDMA_OPERATION;\r
55\r
56//\r
57// IDE Registers\r
58//\r
59typedef union {\r
60 UINT16 Command; /* when write */\r
61 UINT16 Status; /* when read */\r
62} IDE_CMD_OR_STATUS;\r
63\r
64typedef union {\r
65 UINT16 Error; /* when read */\r
66 UINT16 Feature; /* when write */\r
67} IDE_ERROR_OR_FEATURE;\r
68\r
69typedef union {\r
70 UINT16 AltStatus; /* when read */\r
71 UINT16 DeviceControl; /* when write */\r
5326528b 72} IDE_ALTSTATUS_OR_DEVICECONTROL;\r
ead42efc 73\r
74//\r
75// IDE registers set\r
76//\r
77typedef struct {\r
78 UINT16 Data;\r
79 IDE_ERROR_OR_FEATURE Reg1;\r
80 UINT16 SectorCount;\r
81 UINT16 SectorNumber;\r
82 UINT16 CylinderLsb;\r
83 UINT16 CylinderMsb;\r
84 UINT16 Head;\r
85 IDE_CMD_OR_STATUS Reg;\r
86\r
5326528b 87 IDE_ALTSTATUS_OR_DEVICECONTROL Alt;\r
ead42efc 88 UINT16 DriveAddress;\r
89\r
90 UINT16 MasterSlave;\r
91 UINT16 BusMasterBaseAddr;\r
92} IDE_BASE_REGISTERS;\r
93\r
94//\r
95// IDE registers' base addresses\r
96//\r
97typedef struct {\r
98 UINT16 CommandBlockBaseAddr;\r
99 UINT16 ControlBlockBaseAddr;\r
100 UINT16 BusMasterBaseAddr;\r
101} IDE_REGISTERS_BASE_ADDR;\r
102\r
103//\r
104// Bit definitions in Programming Interface byte of the Class Code field\r
105// in PCI IDE controller's Configuration Space\r
106//\r
1e23bd8d 107#define IDE_PRIMARY_OPERATING_MODE BIT0\r
108#define IDE_PRIMARY_PROGRAMMABLE_INDICATOR BIT1\r
109#define IDE_SECONDARY_OPERATING_MODE BIT2\r
110#define IDE_SECONDARY_PROGRAMMABLE_INDICATOR BIT3\r
ead42efc 111\r
ead42efc 112\r
113//\r
114// Bus Master Reg\r
115//\r
5326528b 116#define BMIC_NREAD BIT3\r
1e23bd8d 117#define BMIC_START BIT0\r
118#define BMIS_INTERRUPT BIT2\r
119#define BMIS_ERROR BIT1\r
ead42efc 120\r
121#define BMICP_OFFSET 0x00\r
122#define BMISP_OFFSET 0x02\r
123#define BMIDP_OFFSET 0x04\r
124#define BMICS_OFFSET 0x08\r
125#define BMISS_OFFSET 0x0A\r
126#define BMIDS_OFFSET 0x0C\r
127\r
128//\r
129// Time Out Value For IDE Device Polling\r
130//\r
131\r
132//\r
133// ATATIMEOUT is used for waiting time out for ATA device\r
134//\r
135\r
136//\r
137// 1 second\r
138//\r
0a6f4824 139#define ATATIMEOUT 1000\r
ead42efc 140\r
141//\r
142// ATAPITIMEOUT is used for waiting operation\r
143// except read and write time out for ATAPI device\r
144//\r
145\r
146//\r
147// 1 second\r
148//\r
0a6f4824 149#define ATAPITIMEOUT 1000\r
ead42efc 150\r
151//\r
152// ATAPILONGTIMEOUT is used for waiting read and\r
153// write operation timeout for ATAPI device\r
154//\r
155\r
156//\r
157// 2 seconds\r
158//\r
0a6f4824 159#define CDROMLONGTIMEOUT 2000\r
ead42efc 160\r
161//\r
162// 5 seconds\r
163//\r
0a6f4824 164#define ATAPILONGTIMEOUT 5000\r
ead42efc 165\r
166//\r
167// 10 seconds\r
168//\r
169#define ATASMARTTIMEOUT 10000\r
170\r
ead42efc 171\r
172//\r
173// ATAPI6 related data structure definition\r
174//\r
175\r
176//\r
177// The maximum sectors count in 28 bit addressing mode\r
178//\r
179#define MAX_28BIT_ADDRESSING_CAPACITY 0xfffffff\r
180\r
ead42efc 181#pragma pack(1)\r
182\r
ead42efc 183typedef struct {\r
184 UINT32 RegionBaseAddr;\r
185 UINT16 ByteCount;\r
186 UINT16 EndOfTable;\r
187} IDE_DMA_PRD;\r
188\r
ead42efc 189#pragma pack()\r
190\r
ead42efc 191#define SETFEATURE TRUE\r
192#define CLEARFEATURE FALSE\r
193\r
e72ca438 194///\r
195/// PIO mode definition\r
196///\r
197typedef enum _ATA_PIO_MODE_ {\r
198 AtaPioModeBelow2,\r
199 AtaPioMode2,\r
200 AtaPioMode3,\r
201 AtaPioMode4\r
ead42efc 202} ATA_PIO_MODE;\r
203\r
204//\r
205// Multi word DMA definition\r
206//\r
e72ca438 207typedef enum _ATA_MDMA_MODE_ {\r
208 AtaMdmaMode0,\r
209 AtaMdmaMode1,\r
210 AtaMdmaMode2\r
ead42efc 211} ATA_MDMA_MODE;\r
212\r
213//\r
214// UDMA mode definition\r
215//\r
e72ca438 216typedef enum _ATA_UDMA_MODE_ {\r
217 AtaUdmaMode0,\r
218 AtaUdmaMode1,\r
219 AtaUdmaMode2,\r
220 AtaUdmaMode3,\r
221 AtaUdmaMode4,\r
222 AtaUdmaMode5\r
ead42efc 223} ATA_UDMA_MODE;\r
224\r
225#define ATA_MODE_CATEGORY_DEFAULT_PIO 0x00\r
226#define ATA_MODE_CATEGORY_FLOW_PIO 0x01\r
227#define ATA_MODE_CATEGORY_MDMA 0x04\r
228#define ATA_MODE_CATEGORY_UDMA 0x08\r
229\r
230#pragma pack(1)\r
231\r
232typedef struct {\r
233 UINT8 ModeNumber : 3;\r
234 UINT8 ModeCategory : 5;\r
235} ATA_TRANSFER_MODE;\r
236\r
237typedef struct {\r
238 UINT8 Sector;\r
239 UINT8 Heads;\r
240 UINT8 MultipleSector;\r
241} ATA_DRIVE_PARMS;\r
242\r
243#pragma pack()\r
244//\r
245// IORDY Sample Point field value\r
246//\r
247#define ISP_5_CLK 0\r
248#define ISP_4_CLK 1\r
249#define ISP_3_CLK 2\r
250#define ISP_2_CLK 3\r
251\r
252//\r
253// Recovery Time field value\r
254//\r
255#define RECVY_4_CLK 0\r
256#define RECVY_3_CLK 1\r
257#define RECVY_2_CLK 2\r
258#define RECVY_1_CLK 3\r
259\r
260//\r
261// Slave IDE Timing Register Enable\r
262//\r
1e23bd8d 263#define SITRE BIT14\r
ead42efc 264\r
265//\r
266// DMA Timing Enable Only Select 1\r
267//\r
1e23bd8d 268#define DTE1 BIT7\r
ead42efc 269\r
270//\r
271// Pre-fetch and Posting Enable Select 1\r
272//\r
1e23bd8d 273#define PPE1 BIT6\r
ead42efc 274\r
275//\r
276// IORDY Sample Point Enable Select 1\r
277//\r
1e23bd8d 278#define IE1 BIT5\r
ead42efc 279\r
280//\r
281// Fast Timing Bank Drive Select 1\r
282//\r
1e23bd8d 283#define TIME1 BIT4\r
ead42efc 284\r
285//\r
286// DMA Timing Enable Only Select 0\r
287//\r
1e23bd8d 288#define DTE0 BIT3\r
ead42efc 289\r
290//\r
291// Pre-fetch and Posting Enable Select 0\r
292//\r
1e23bd8d 293#define PPE0 BIT2\r
ead42efc 294\r
295//\r
296// IOREY Sample Point Enable Select 0\r
297//\r
1e23bd8d 298#define IE0 BIT1\r
ead42efc 299\r
300//\r
301// Fast Timing Bank Drive Select 0\r
302//\r
1e23bd8d 303#define TIME0 BIT0\r
ead42efc 304\r
305#endif\r