]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Bus/Isa/IsaFloppyPei/FloppyPeim.h
FatPkg: Clean up source files
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / IsaFloppyPei / FloppyPeim.h
1 /** @file
2 Private include file for IsaFloppyPei PEIM.
3
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
5
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions
8 of the BSD License which accompanies this distribution. The
9 full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef _RECOVERY_FLOPPY_H_
18 #define _RECOVERY_FLOPPY_H_
19
20 #include <Ppi/BlockIo.h>
21
22 #include <Library/DebugLib.h>
23 #include <Library/PeimEntryPoint.h>
24 #include <Library/PeiServicesLib.h>
25 #include <Library/BaseMemoryLib.h>
26 #include <Library/ReportStatusCodeLib.h>
27 #include <Library/TimerLib.h>
28 #include <Library/IoLib.h>
29 #include <Library/MemoryAllocationLib.h>
30 #include <Library/PcdLib.h>
31
32 #include "Fdc.h"
33
34
35 //
36 // Some PC AT Compatible Device definitions
37 //
38 //
39 // 8237 DMA registers
40 //
41 #define R_8237_DMA_BASE_CA_CH0 0x00
42 #define R_8237_DMA_BASE_CA_CH1 0x02
43 #define R_8237_DMA_BASE_CA_CH2 0x04
44 #define R_8237_DMA_BASE_CA_CH3 0xd6
45 #define R_8237_DMA_BASE_CA_CH5 0xc4
46 #define R_8237_DMA_BASE_CA_CH6 0xc8
47 #define R_8237_DMA_BASE_CA_CH7 0xcc
48
49 #define R_8237_DMA_BASE_CC_CH0 0x01
50 #define R_8237_DMA_BASE_CC_CH1 0x03
51 #define R_8237_DMA_BASE_CC_CH2 0x05
52 #define R_8237_DMA_BASE_CC_CH3 0xd7
53 #define R_8237_DMA_BASE_CC_CH5 0xc6
54 #define R_8237_DMA_BASE_CC_CH6 0xca
55 #define R_8237_DMA_BASE_CC_CH7 0xce
56
57 #define R_8237_DMA_MEM_LP_CH0 0x87
58 #define R_8237_DMA_MEM_LP_CH1 0x83
59 #define R_8237_DMA_MEM_LP_CH2 0x81
60 #define R_8237_DMA_MEM_LP_CH3 0x82
61 #define R_8237_DMA_MEM_LP_CH5 0x8B
62 #define R_8237_DMA_MEM_LP_CH6 0x89
63 #define R_8237_DMA_MEM_LP_CH7 0x8A
64
65
66 #define R_8237_DMA_COMMAND_CH0_3 0x08
67 #define R_8237_DMA_COMMAND_CH4_7 0xd0
68 #define B_8237_DMA_COMMAND_GAP 0x10
69 #define B_8237_DMA_COMMAND_CGE 0x04
70
71
72 #define R_8237_DMA_STA_CH0_3 0x09
73 #define R_8237_DMA_STA_CH4_7 0xd2
74
75 #define R_8237_DMA_WRSMSK_CH0_3 0x0a
76 #define R_8237_DMA_WRSMSK_CH4_7 0xd4
77 #define B_8237_DMA_WRSMSK_CMS 0x04
78
79
80 #define R_8237_DMA_CHMODE_CH0_3 0x0b
81 #define R_8237_DMA_CHMODE_CH4_7 0xd6
82 #define V_8237_DMA_CHMODE_DEMAND 0x00
83 #define V_8237_DMA_CHMODE_SINGLE 0x40
84 #define V_8237_DMA_CHMODE_CASCADE 0xc0
85 #define B_8237_DMA_CHMODE_DECREMENT 0x20
86 #define B_8237_DMA_CHMODE_INCREMENT 0x00
87 #define B_8237_DMA_CHMODE_AE 0x10
88 #define V_8237_DMA_CHMODE_VERIFY 0
89 #define V_8237_DMA_CHMODE_IO2MEM 0x04
90 #define V_8237_DMA_CHMODE_MEM2IO 0x08
91
92 #define R_8237_DMA_CBPR_CH0_3 0x0c
93 #define R_8237_DMA_CBPR_CH4_7 0xd8
94
95 #define R_8237_DMA_MCR_CH0_3 0x0d
96 #define R_8237_DMA_MCR_CH4_7 0xda
97
98 #define R_8237_DMA_CLMSK_CH0_3 0x0e
99 #define R_8237_DMA_CLMSK_CH4_7 0xdc
100
101 #define R_8237_DMA_WRMSK_CH0_3 0x0f
102 #define R_8237_DMA_WRMSK_CH4_7 0xde
103
104 ///
105 /// ISA memory range
106 ///
107 #define ISA_MAX_MEMORY_ADDRESS 0x1000000
108
109 //
110 // Macro for time delay & interval
111 //
112 #define STALL_1_SECOND 1000000
113 #define STALL_1_MSECOND 1000
114 #define FDC_CHECK_INTERVAL 50
115
116 #define FDC_SHORT_DELAY 50
117 #define FDC_MEDIUM_DELAY 100
118 #define FDC_LONG_DELAY 4000
119 #define FDC_RESET_DELAY 2000
120 #define FDC_RECALIBRATE_DELAY 250000
121
122 typedef enum {
123 FdcType360K360K = 0,
124 FdcType360K1200K,
125 FdcType1200K1200K,
126 FdcType720K720K,
127 FdcType720K1440K,
128 FdcType1440K1440K,
129 FdcType720K2880K,
130 FdcType1440K2880K,
131 FdcType2880K2880K
132 } FDC_DISKET_TYPE;
133
134 typedef struct {
135 UINT8 Register;
136 UINT8 Value;
137 } PEI_DMA_TABLE;
138
139 typedef struct {
140 UINT8 DevPos;
141 UINT8 Pcn;
142 BOOLEAN MotorOn;
143 BOOLEAN NeedRecalibrate;
144 FDC_DISKET_TYPE Type;
145 EFI_PEI_BLOCK_IO_MEDIA MediaInfo;
146 } PEI_FLOPPY_DEVICE_INFO;
147
148 #define FDC_BLK_IO_DEV_SIGNATURE SIGNATURE_32 ('F', 'b', 'i', 'o')
149
150 typedef struct {
151 UINTN Signature;
152 EFI_PEI_RECOVERY_BLOCK_IO_PPI FdcBlkIo;
153 EFI_PEI_PPI_DESCRIPTOR PpiDescriptor;
154 UINTN DeviceCount;
155 PEI_FLOPPY_DEVICE_INFO DeviceInfo[2];
156 } FDC_BLK_IO_DEV;
157
158 #define PEI_RECOVERY_FDC_FROM_BLKIO_THIS(a) CR (a, FDC_BLK_IO_DEV, FdcBlkIo, FDC_BLK_IO_DEV_SIGNATURE)
159
160 //
161 // PEI Recovery Block I/O PPI
162 //
163
164 /**
165 Get the number of FDC devices.
166
167 This function implements EFI_PEI_RECOVERY_BLOCK_IO_PPI.GetNumberOfBlockDevices.
168 It get the number of FDC devices in the system.
169
170 @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
171 @param This Pointer to this PPI instance.
172 @param NumberBlockDevices Pointer to the the number of FDC devices for output.
173
174 @retval EFI_SUCCESS Number of FDC devices is retrieved successfully.
175 @retval EFI_INVALID_PARAMETER Parameter This is NULL.
176
177 **/
178 EFI_STATUS
179 EFIAPI
180 FdcGetNumberOfBlockDevices (
181 IN EFI_PEI_SERVICES **PeiServices,
182 IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
183 OUT UINTN *NumberBlockDevices
184 );
185
186 /**
187 Get the specified media information.
188
189 This function implements EFI_PEI_RECOVERY_BLOCK_IO_PPI.GetBlockDeviceMediaInfo.
190 It gets the specified media information.
191
192 @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
193 @param This Pointer to this PPI instance.
194 @param DeviceIndex Index of FDC device to get information.
195 @param MediaInfo Pointer to the media info buffer for output.
196
197 @retval EFI_SUCCESS Number of FDC devices is retrieved successfully.
198 @retval EFI_INVALID_PARAMETER Parameter This is NULL.
199 @retval EFI_INVALID_PARAMETER Parameter MediaInfo is NULL.
200 @retval EFI_INVALID_PARAMETER DeviceIndex is not valid.
201 @retval EFI_DEVICE_ERROR FDC device does not exist or has errors.
202
203 **/
204 EFI_STATUS
205 EFIAPI
206 FdcGetBlockDeviceMediaInfo (
207 IN EFI_PEI_SERVICES **PeiServices,
208 IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
209 IN UINTN DeviceIndex,
210 OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo
211 );
212
213 /**
214 Get the requested number of blocks from the specified FDC device.
215
216 This function implements EFI_PEI_RECOVERY_BLOCK_IO_PPI.ReadBlocks.
217 It reads the requested number of blocks from the specified FDC device.
218
219 @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
220 @param This Pointer to this PPI instance.
221 @param DeviceIndex Index of FDC device to get information.
222 @param StartLba The start LBA to read from.
223 @param BufferSize The size of range to read.
224 @param Buffer Buffer to hold the data read from FDC.
225
226 @retval EFI_SUCCESS Number of FDC devices is retrieved successfully.
227 @retval EFI_INVALID_PARAMETER Parameter This is NULL.
228 @retval EFI_INVALID_PARAMETER Parameter Buffer is NULL.
229 @retval EFI_INVALID_PARAMETER Parameter BufferSize cannot be divided by block size of FDC device.
230 @retval EFI_NO_MEDIA No media present.
231 @retval EFI_DEVICE_ERROR FDC device has error.
232 @retval Others Fail to read blocks.
233
234 **/
235 EFI_STATUS
236 EFIAPI
237 FdcReadBlocks (
238 IN EFI_PEI_SERVICES **PeiServices,
239 IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
240 IN UINTN DeviceIndex,
241 IN EFI_PEI_LBA StartLba,
242 IN UINTN BufferSize,
243 OUT VOID *Buffer
244 );
245
246 #endif