]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Isa/IsaFloppyPei/Fdc.h
IntelFrameworkModulePkg: Clean up source files
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / IsaFloppyPei / Fdc.h
CommitLineData
0a6f4824 1/** @file\r
d8387fa4 2Definition of FDC registers and structures.\r
3\r
0a6f4824
LG
4Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
5\r
d8387fa4 6This program and the accompanying materials\r
7are licensed and made available under the terms and conditions\r
8of the BSD License which accompanies this distribution. The\r
9full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#ifndef _PEI_RECOVERY_FDC_H_\r
18#define _PEI_RECOVERY_FDC_H_\r
19\r
20//\r
21// FDC Registers\r
22//\r
23#define FDC_REGISTER_DOR 2 //Digital Output Register\r
24#define FDC_REGISTER_MSR 4 //Main Status Register\r
25#define FDC_REGISTER_DTR 5 //Data Register\r
26#define FDC_REGISTER_CCR 7 //Configuration Control Register(data rate select)\r
27#define FDC_REGISTER_DIR 7 //Digital Input Register(diskchange)\r
28//\r
29// FDC Register Bit Definitions\r
30//\r
31//\r
32// Digital Out Register(WO)\r
33//\r
34#define SELECT_DRV BIT0 // Select Drive: 0=A 1=B\r
35#define RESET_FDC BIT2 // Reset FDC\r
36#define INT_DMA_ENABLE BIT3 // Enable Int & DMA\r
37#define DRVA_MOTOR_ON BIT4 // Turn On Drive A Motor\r
38#define DRVB_MOTOR_ON BIT5 // Turn On Drive B Motor\r
39//\r
40// Main Status Register(RO)\r
41//\r
42#define MSR_DAB BIT0 // Drive A Busy\r
43#define MSR_DBB BIT1 // Drive B Busy\r
44#define MSR_CB BIT4 // FDC Busy\r
45#define MSR_NDM BIT5 // Non-DMA Mode\r
46#define MSR_DIO BIT6 // Data Input/Output\r
47#define MSR_RQM BIT7 // Request For Master\r
48//\r
49// Configuration Control Register(WO)\r
50//\r
51#define CCR_DRC (BIT0 | BIT1) // Data Rate select\r
52//\r
53// Digital Input Register(RO)\r
54//\r
55#define DIR_DCL BIT7 // Disk change line\r
56#define DRC_500KBS 0x0 // 500K\r
57#define DRC_300KBS 0x01 // 300K\r
58#define DRC_250KBS 0x02 // 250K\r
59//\r
60// FDC Command Code\r
61//\r
62#define READ_DATA_CMD 0x06\r
63#define SEEK_CMD 0x0F\r
64#define RECALIBRATE_CMD 0x07\r
65#define SENSE_INT_STATUS_CMD 0x08\r
66#define SPECIFY_CMD 0x03\r
67#define SENSE_DRV_STATUS_CMD 0x04\r
68\r
69///\r
70/// CMD_MT: Multi_Track Selector\r
71/// when set , this flag selects the multi-track operating mode.\r
72/// In this mode, the FDC treats a complete cylinder under head0 and 1 as a single track\r
73///\r
74#define CMD_MT BIT7\r
75\r
76///\r
77/// CMD_MFM: MFM/FM Mode Selector\r
78/// A one selects the double density(MFM) mode\r
79/// A zero selects single density (FM) mode\r
80///\r
81#define CMD_MFM BIT6\r
82\r
83///\r
84/// CMD_SK: Skip Flag\r
85/// When set to 1, sectors containing a deleted data address mark will automatically be skipped\r
86/// during the execution of Read Data.\r
87/// When set to 0, the sector is read or written the same as the read and write commands.\r
88///\r
89#define CMD_SK BIT5\r
90\r
91//\r
92// FDC Status Register Bit Definitions\r
93//\r
94//\r
95// Status Register 0\r
96//\r
97#define STS0_IC (BIT7 | BIT6) // Interrupt Code\r
98#define STS0_SE BIT5 // Seek End: the FDC completed a seek or recalibrate command\r
99#define STS0_EC BIT4 // Equipment Check\r
100#define STS0_NR BIT3 // Not Ready(unused), this bit is always 0\r
101#define STS0_HA BIT2 // Head Address: the current head address\r
102//\r
103// STS0_US1 & STS0_US0: Drive Select(the current selected drive)\r
104//\r
105#define STS0_US1 BIT1 // Unit Select1\r
106#define STS0_US0 BIT0 // Unit Select0\r
107//\r
108// Status Register 1\r
109//\r
110#define STS1_EN BIT7 // End of Cylinder\r
111//\r
112// BIT6 is unused\r
113//\r
114#define STS1_DE BIT5 // Data Error: The FDC detected a CRC error in either the ID field or data field of a sector\r
115#define STS1_OR BIT4 // Overrun/Underrun: Becomes set if FDC does not receive CPU or DMA service within the required time interval\r
116//\r
117// BIT3 is unused\r
118//\r
119#define STS1_ND BIT2 // No data\r
120#define STS1_NW BIT1 // Not Writable\r
121#define STS1_MA BIT0 // Missing Address Mark\r
122\r
123//\r
124// Status Register 2\r
125//\r
126// BIT7 is unused\r
127//\r
128#define STS2_CM BIT6 // Control Mark\r
129#define STS2_DD BIT5 // Data Error in Data Field: The FDC detected a CRC error in the data field\r
130#define STS2_WC BIT4 // Wrong Cylinder: The track address from sector ID field is different from the track address maintained inside FDC\r
131//\r
132// BIT3 is unused\r
133// BIT2 is unused\r
134//\r
135#define STS2_BC BIT1 // Bad Cylinder\r
136#define STS2_MD BIT0 // Missing Address Mark in DataField\r
137\r
138//\r
139// Status Register 3\r
140//\r
141// BIT7 is unused\r
142//\r
143#define STS3_WP BIT6 // Write Protected\r
144//\r
145// BIT5 is unused\r
146//\r
147#define STS3_T0 BIT4 // Track 0\r
148//\r
149// BIT3 is unused\r
150//\r
151#define STS3_HD BIT2 // Head Address\r
152//\r
153// STS3_US1 & STS3_US0 : Drive Select\r
154//\r
155#define STS3_US1 BIT1 // Unit Select1\r
156#define STS3_US0 BIT0 // Unit Select0\r
157\r
158//\r
159// Status Register 0 Interrupt Code Description\r
160//\r
161#define IC_NT 0x0 // Normal Termination of Command\r
162#define IC_AT 0x40 // Abnormal Termination of Command\r
163#define IC_IC 0x80 // Invalid Command\r
164#define IC_ATRC 0xC0 // Abnormal Termination caused by Polling\r
165\r
166///\r
167/// Table of parameters for diskette\r
168///\r
169typedef struct {\r
170 UINT8 EndOfTrack; ///< End of track\r
171 UINT8 GapLength; ///< Gap length\r
172 UINT8 DataLength; ///< Data length\r
173 UINT8 Number; ///< Number of bytes per sector\r
174 UINT8 MaxTrackNum;\r
175 UINT8 MotorStartTime;\r
176 UINT8 MotorOffTime;\r
177 UINT8 HeadSettlingTime;\r
178 UINT8 DataTransferRate;\r
179} DISKET_PARA_TABLE;\r
180\r
181///\r
182/// Structure for FDC Command Packet 1\r
183///\r
184typedef struct {\r
185 UINT8 CommandCode;\r
186 UINT8 DiskHeadSel;\r
187 UINT8 Cylinder;\r
188 UINT8 Head;\r
189 UINT8 Sector;\r
190 UINT8 Number;\r
191 UINT8 EndOfTrack;\r
192 UINT8 GapLength;\r
193 UINT8 DataLength;\r
194} FDC_COMMAND_PACKET1;\r
195\r
196///\r
197/// Structure for FDC Command Packet 2\r
198///\r
199typedef struct {\r
200 UINT8 CommandCode;\r
201 UINT8 DiskHeadSel;\r
202} FDC_COMMAND_PACKET2;\r
203\r
204///\r
205/// Structure for FDC Specify Command\r
206///\r
207typedef struct {\r
208 UINT8 CommandCode;\r
209 UINT8 SrtHut;\r
210 UINT8 HltNd;\r
211} FDC_SPECIFY_CMD;\r
212\r
213///\r
214/// Structure for FDC Seek Command\r
215///\r
216typedef struct {\r
217 UINT8 CommandCode;\r
218 UINT8 DiskHeadSel;\r
219 UINT8 NewCylinder;\r
220} FDC_SEEK_CMD;\r
221\r
222///\r
223/// Structure for FDC Result Packet\r
224///\r
225typedef struct {\r
226 UINT8 Status0;\r
227 UINT8 Status1;\r
228 UINT8 Status2;\r
229 UINT8 CylinderNumber;\r
230 UINT8 HeaderAddress;\r
231 UINT8 Record;\r
232 UINT8 Number;\r
233} FDC_RESULT_PACKET;\r
234\r
235#endif\r