]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Isa/IsaFloppy/Pei/FloppyPeim.h
Import IsaFloppy Dxe and Pei in IntelFrameworkModulePkg.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / IsaFloppy / Pei / FloppyPeim.h
CommitLineData
11f43dfd 1/*++\r
2\r
3Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved. \r
4This software and associated documentation (if any) is furnished\r
5under a license and may only be used or copied in accordance\r
6with the terms of the license. Except as permitted by such\r
7license, no part of this software or documentation may be\r
8reproduced, stored in a retrieval system, or transmitted in any\r
9form or by any means without the express written consent of\r
10Intel Corporation.\r
11\r
12\r
13Module Name:\r
14\r
15 FloppyPeim.h\r
16 \r
17Abstract: \r
18 \r
19\r
20Revision History\r
21--*/\r
22\r
23#ifndef _RECOVERY_FLOPPY_H\r
24#define _RECOVERY_FLOPPY_H\r
25\r
26//\r
27// The package level header files this module uses\r
28//\r
29#include <PiPei.h>\r
30#include <FrameworkPei.h>\r
31\r
32#include <Ppi/BlockIo.h>\r
33//\r
34// The Library classes this module consumes\r
35//\r
36#include <Library/DebugLib.h>\r
37#include <Library/PeimEntryPoint.h>\r
38#include <Library/PeiServicesLib.h>\r
39#include <Library/BaseMemoryLib.h>\r
40#include <Library/ReportStatusCodeLib.h>\r
41#include <Library/TimerLib.h>\r
42#include <Library/IoLib.h>\r
43\r
44#include "Fdc.h"\r
45//\r
46// define some macro\r
47//\r
48#define STALL_1_SECOND 1000000\r
49#define STALL_1_MSECOND 1000\r
50\r
51#define DATA_IN 1\r
52#define DATA_OUT 0\r
53#define READ 0\r
54#define WRITE 1\r
55\r
56typedef enum {\r
57 _360K_360K = 0,\r
58 _360K_1200K,\r
59 _1200K_1200K,\r
60 _720K_720K,\r
61 _720K_1440K,\r
62 _1440K_1440K,\r
63 _720K_2880K,\r
64 _1440K_2880K,\r
65 _2880K_2880K\r
66} FDC_DISKET_TYPE;\r
67\r
68typedef struct {\r
69 UINT8 DevPos;\r
70 UINT8 Pcn;\r
71 BOOLEAN MotorOn;\r
72 BOOLEAN NeedRecalibrate;\r
73 FDC_DISKET_TYPE Type;\r
74 EFI_PEI_BLOCK_IO_MEDIA MediaInfo;\r
75} PEI_FLOPPY_DEVICE_INFO;\r
76\r
77#define FDC_BLK_IO_DEV_SIGNATURE EFI_SIGNATURE_32 ('F', 'b', 'i', 'o')\r
78\r
79typedef struct {\r
80 UINTN Signature;\r
81 EFI_PEI_RECOVERY_BLOCK_IO_PPI FdcBlkIo;\r
82 EFI_PEI_PPI_DESCRIPTOR PpiDescriptor;\r
83 UINTN DeviceCount;\r
84 PEI_FLOPPY_DEVICE_INFO DeviceInfo[2];\r
85} FDC_BLK_IO_DEV;\r
86\r
87#define PEI_RECOVERY_FDC_FROM_BLKIO_THIS(a) CR (a, FDC_BLK_IO_DEV, FdcBlkIo, FDC_BLK_IO_DEV_SIGNATURE)\r
88\r
89//\r
90// PEI Recovery Block I/O PPI\r
91//\r
92EFI_STATUS\r
93EFIAPI\r
94FdcGetNumberOfBlockDevices (\r
95 IN EFI_PEI_SERVICES **PeiServices,\r
96 IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,\r
97 OUT UINTN *NumberBlockDevices\r
98 );\r
99\r
100EFI_STATUS\r
101EFIAPI\r
102FdcGetBlockDeviceMediaInfo (\r
103 IN EFI_PEI_SERVICES **PeiServices,\r
104 IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,\r
105 IN UINTN DeviceIndex,\r
106 OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo\r
107 );\r
108\r
109EFI_STATUS\r
110EFIAPI\r
111FdcReadBlocks (\r
112 IN EFI_PEI_SERVICES **PeiServices,\r
113 IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,\r
114 IN UINTN DeviceIndex,\r
115 IN EFI_PEI_LBA StartLba,\r
116 IN UINTN BufferSize,\r
117 OUT VOID *Buffer\r
118 );\r
119\r
120//\r
121// Internal function declare\r
122//\r
123UINT8\r
124FdcEnumeration (\r
125 IN FDC_BLK_IO_DEV *FdcBlkIoDev\r
126 );\r
127\r
128EFI_STATUS\r
129FdcReset (\r
130 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
131 IN UINT8 DevPos\r
132 );\r
133\r
134BOOLEAN\r
135DiscoverFdcDevice (\r
136 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
137 IN OUT PEI_FLOPPY_DEVICE_INFO *Info,\r
138 OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo\r
139 );\r
140\r
141EFI_STATUS\r
142Recalibrate (\r
143 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
144 IN OUT PEI_FLOPPY_DEVICE_INFO *Info\r
145 );\r
146\r
147EFI_STATUS\r
148Seek (\r
149 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
150 IN OUT PEI_FLOPPY_DEVICE_INFO *Info,\r
151 IN EFI_PEI_LBA Lba\r
152 );\r
153\r
154EFI_STATUS\r
155MotorOn (\r
156 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
157 IN OUT PEI_FLOPPY_DEVICE_INFO *Info\r
158 );\r
159\r
160EFI_STATUS\r
161MotorOff (\r
162 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
163 IN OUT PEI_FLOPPY_DEVICE_INFO *Info\r
164 );\r
165\r
166EFI_STATUS\r
167FdcWaitForBSYClear (\r
168 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
169 IN UINT8 DevPos,\r
170 IN UINTN TimeoutInSeconds\r
171 );\r
172\r
173EFI_STATUS\r
174SenseIntStatus (\r
175 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
176 IN OUT UINT8 *sts0,\r
177 IN OUT UINT8 *pcn\r
178 );\r
179\r
180EFI_STATUS\r
181Specify (\r
182 IN FDC_BLK_IO_DEV *FdcBlkIoDev\r
183 );\r
184\r
185EFI_STATUS\r
186DisketChanged (\r
187 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
188 IN OUT PEI_FLOPPY_DEVICE_INFO *Info\r
189 );\r
190\r
191EFI_STATUS\r
192DataInByte (\r
193 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
194 IN OUT UINT8 *pt\r
195 );\r
196\r
197EFI_STATUS\r
198DataOutByte (\r
199 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
200 IN UINT8 *pt\r
201 );\r
202\r
203EFI_STATUS\r
204FdcDRQReady (\r
205 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
206 IN BOOLEAN Dio,\r
207 IN UINTN TimeoutInSeconds\r
208 );\r
209\r
210UINTN\r
211GetTransferBlockCount (\r
212 IN PEI_FLOPPY_DEVICE_INFO *Info,\r
213 IN EFI_PEI_LBA LBA,\r
214 IN UINTN NumberOfBlocks\r
215 );\r
216\r
217EFI_STATUS\r
218ReadWriteDataSector (\r
219 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
220 IN OUT PEI_FLOPPY_DEVICE_INFO *Info,\r
221 IN VOID *Buffer,\r
222 IN EFI_PEI_LBA Lba,\r
223 IN UINTN NumberOfBlocks,\r
224 IN BOOLEAN Read\r
225 );\r
226\r
227EFI_STATUS\r
228SetDMA (\r
229 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
230 IN VOID *Buffer,\r
231 IN UINTN NumberOfBlocks,\r
232 IN BOOLEAN Read\r
233 );\r
234\r
235VOID\r
236FillPara (\r
237 IN PEI_FLOPPY_DEVICE_INFO *Info,\r
238 IN EFI_PEI_LBA Lba,\r
239 IN FDC_COMMAND_PACKET1 *Command\r
240 );\r
241\r
242EFI_STATUS\r
243Setup (\r
244 IN FDC_BLK_IO_DEV *FdcBlkIoDev,\r
245 IN UINT8 DevPos\r
246 );\r
247\r
248EFI_STATUS\r
249CheckResult (\r
250 IN FDC_RESULT_PACKET *Result,\r
251 IN OUT PEI_FLOPPY_DEVICE_INFO *Info\r
252 );\r
253\r
254#endif\r