]>
Commit | Line | Data |
---|---|---|
0a6f4824 | 1 | /** @file\r |
d8387fa4 | 2 | Definition of FDC registers and structures.\r |
3 | \r | |
0a6f4824 LG |
4 | Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r |
5 | \r | |
d8387fa4 | 6 | This program and the accompanying materials\r |
7 | are licensed and made available under the terms and conditions\r | |
8 | of the BSD License which accompanies this distribution. The\r | |
9 | full text of the license may be found at\r | |
10 | http://opensource.org/licenses/bsd-license.php\r | |
11 | \r | |
12 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
13 | WITHOUT 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 | |
169 | typedef 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 | |
184 | typedef 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 | |
199 | typedef 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 | |
207 | typedef 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 | |
216 | typedef 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 | |
225 | typedef 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 |