]> git.proxmox.com Git - mirror_edk2.git/blame - QuarkSocPkg/QuarkSouthCluster/Sdio/Dxe/SDMediaDeviceDxe/SDMediaDevice.h
QuarkSocPkg: Fix typos in comments
[mirror_edk2.git] / QuarkSocPkg / QuarkSouthCluster / Sdio / Dxe / SDMediaDeviceDxe / SDMediaDevice.h
CommitLineData
9b6bbcdb
MK
1/** @file\r
2\r
3The definition for SD media device driver model and blkio protocol routines.\r
4\r
74c6a103 5Copyright (c) 2013-2016 Intel Corporation.\r
9b6bbcdb
MK
6\r
7This program and the accompanying materials\r
8are licensed and made available under the terms and conditions of the BSD License\r
9which accompanies this distribution. The full 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 _SD_MEDIA_DEVICE_H_\r
18#define _SD_MEDIA_DEVICE_H_\r
19\r
20\r
21#include <Uefi.h>\r
22\r
23#include <Protocol/PciIo.h>\r
24#include <Protocol/BlockIo.h>\r
25\r
26#include <Library/DebugLib.h>\r
27#include <Library/BaseMemoryLib.h>\r
28#include <Library/UefiDriverEntryPoint.h>\r
29#include <Library/UefiBootServicesTableLib.h>\r
30#include <Library/UefiLib.h>\r
31#include <Library/BaseLib.h>\r
32#include <Library/MemoryAllocationLib.h>\r
33#include <Library/PcdLib.h>\r
34#include <IndustryStandard/Pci22.h>\r
35\r
36#include "ComponentName.h"\r
37#include "SDHostIo.h"\r
38\r
39\r
40extern EFI_DRIVER_BINDING_PROTOCOL gSDMediaDeviceDriverBinding;\r
41extern EFI_COMPONENT_NAME_PROTOCOL gSDMediaDeviceName;\r
42extern EFI_COMPONENT_NAME2_PROTOCOL gSDMediaDeviceName2;\r
43\r
44//\r
45// Define the region of memory used for DMA memory\r
46//\r
47#define DMA_MEMORY_TOP 0x0000000001FFFFFFULL\r
48\r
49#define CARD_DATA_SIGNATURE SIGNATURE_32 ('c', 'a', 'r', 'd')\r
50\r
51//\r
52// Command timeout will be max 100 ms\r
53//\r
54#define TIMEOUT_COMMAND 100\r
55#define TIMEOUT_DATA 5000\r
56\r
57typedef enum{\r
58 UnknownCard = 0,\r
59 MMCCard, // MMC card\r
60 MMCCardHighCap, // MMC Card High Capacity\r
61 CEATACard, // CE-ATA device\r
62 SDMemoryCard, // SD 1.1 card\r
63 SDMemoryCard2, // SD 2.0 or above standard card\r
64 SDMemoryCard2High // SD 2.0 or above high capacity card\r
65}CARD_TYPE;\r
66\r
67\r
68typedef struct {\r
69 //\r
70 //BlockIO\r
71 //\r
72 UINTN Signature;\r
73 EFI_BLOCK_IO_PROTOCOL BlockIo;\r
74\r
75 EFI_BLOCK_IO_MEDIA BlockIoMedia;\r
76\r
77 EFI_SD_HOST_IO_PROTOCOL *SDHostIo;\r
78 EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
79 CARD_TYPE CardType;\r
80\r
81 UINT8 CurrentBusWidth;\r
82 BOOLEAN DualVoltage;\r
83 BOOLEAN NeedFlush;\r
84 UINT8 Reserved[3];\r
85\r
86 UINT16 Address;\r
87 UINT32 BlockLen;\r
88 UINT32 MaxFrequency;\r
89 UINT64 BlockNumber;\r
90 //\r
91 //Common used\r
92 //\r
93 CARD_STATUS CardStatus;\r
94 OCR OCRRegister;\r
95 CID CIDRegister;\r
96 CSD CSDRegister;\r
97 EXT_CSD ExtCSDRegister;\r
98 UINT8 *RawBufferPointer;\r
99 UINT8 *AlignedBuffer;\r
100 //\r
101 //CE-ATA specific\r
102 //\r
103 TASK_FILE TaskFile;\r
104 IDENTIFY_DEVICE_DATA IndentifyDeviceData;\r
105 //\r
106 //SD specific\r
107 //\r
108 SCR SCRRegister;\r
109 SD_STATUS_REG SDSattus;\r
110 SWITCH_STATUS SwitchStatus;\r
111}CARD_DATA;\r
112\r
113#define CARD_DATA_FROM_THIS(a) \\r
114 CR(a, CARD_DATA, BlockIo, CARD_DATA_SIGNATURE)\r
115\r
116/**\r
117 Test to see if this driver supports ControllerHandle. Any\r
118 ControllerHandle that has BlockIoProtocol installed will be supported.\r
119\r
120 @param This Protocol instance pointer.\r
121 @param Controller Handle of device to test.\r
122 @param RemainingDevicePath Not used.\r
123\r
124 @return EFI_SUCCESS This driver supports this device.\r
125 @return EFI_UNSUPPORTED This driver does not support this device.\r
126\r
127**/\r
128EFI_STATUS\r
129EFIAPI\r
130SDMediaDeviceSupported (\r
131 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
132 IN EFI_HANDLE Controller,\r
133 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
134 );\r
135\r
136/**\r
137 Starting the SD Media Device Driver.\r
138\r
139 @param This Protocol instance pointer.\r
140 @param Controller Handle of device to test.\r
141 @param RemainingDevicePath Not used.\r
142\r
143 @retval EFI_SUCCESS This driver supports this device.\r
144 @retval EFI_UNSUPPORTED This driver does not support this device.\r
145 @retval EFI_DEVICE_ERROR This driver cannot be started due to device Error.\r
146 EFI_OUT_OF_RESOURCES- Failed due to resource shortage.\r
147\r
148**/\r
149EFI_STATUS\r
150EFIAPI\r
151SDMediaDeviceStart (\r
152 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
153 IN EFI_HANDLE Controller,\r
154 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
155 );\r
156\r
157/**\r
74c6a103 158 Stop this driver on ControllerHandle. Support stopping any child handles\r
9b6bbcdb
MK
159 created by this driver.\r
160\r
161 @param This Protocol instance pointer.\r
162 @param Controller Handle of device to stop driver on.\r
163 @param NumberOfChildren Number of Children in the ChildHandleBuffer.\r
164 @param ChildHandleBuffer List of handles for the children we need to stop.\r
165\r
166 @return EFI_SUCCESS\r
167 @return others\r
168\r
169**/\r
170EFI_STATUS\r
171EFIAPI\r
172SDMediaDeviceStop (\r
173 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
174 IN EFI_HANDLE Controller,\r
175 IN UINTN NumberOfChildren,\r
176 IN EFI_HANDLE *ChildHandleBuffer\r
177 );\r
178\r
179/**\r
180 MMC/SD card init function\r
181\r
182 @param CardData Pointer to CARD_DATA.\r
183\r
184 @return EFI_SUCCESS\r
185 @return others\r
186\r
187**/\r
188EFI_STATUS\r
189MMCSDCardInit (\r
190 IN CARD_DATA *CardData\r
191 );\r
192\r
193/**\r
194 Send command by using Host IO protocol\r
195\r
196 @param This A pointer to the EFI_SD_HOST_IO_PROTOCOL instance.\r
197 @param CommandIndex The command index to set the command index field of command register.\r
198 @param Argument Command argument to set the argument field of command register.\r
199 @param DataType TRANSFER_TYPE, indicates no data, data in or data out.\r
200 @param Buffer Contains the data read from / write to the device.\r
201 @param BufferSize The size of the buffer.\r
202 @param ResponseType RESPONSE_TYPE.\r
203 @param TimeOut Time out value in 1 ms unit.\r
204 @param ResponseData Depending on the ResponseType, such as CSD or card status.\r
205\r
206 @retval EFI_SUCCESS\r
207 @retval EFI_INVALID_PARAMETER\r
208 @retval EFI_UNSUPPORTED\r
209 @retval EFI_DEVICE_ERROR\r
210\r
211**/\r
212EFI_STATUS\r
213SendCommand (\r
214 IN CARD_DATA *CardData,\r
215 IN UINT16 CommandIndex,\r
216 IN UINT32 Argument,\r
217 IN TRANSFER_TYPE DataType,\r
218 IN UINT8 *Buffer, OPTIONAL\r
219 IN UINT32 BufferSize,\r
220 IN RESPONSE_TYPE ResponseType,\r
221 IN UINT32 TimeOut,\r
222 OUT UINT32 *ResponseData\r
223 );\r
224\r
225/**\r
226 Send the card APP_CMD command with the following command indicated by CommandIndex\r
227\r
228 @param CardData Pointer to CARD_DATA.\r
229 @param CommandIndex The command index to set the command index field of command register.\r
230 @param Argument Command argument to set the argument field of command register.\r
231 @param DataType TRANSFER_TYPE, indicates no data, data in or data out.\r
232 @param Buffer Contains the data read from / write to the device.\r
233 @param BufferSize The size of the buffer.\r
234 @param ResponseType RESPONSE_TYPE.\r
235 @param TimeOut Time out value in 1 ms unit.\r
236 @param ResponseData Depending on the ResponseType, such as CSD or card status.\r
237\r
238 @retval EFI_SUCCESS\r
239 @retval EFI_INVALID_PARAMETER\r
240 @retval EFI_UNSUPPORTED\r
241 @retval EFI_DEVICE_ERROR\r
242\r
243**/\r
244EFI_STATUS\r
245SendAppCommand (\r
246 IN CARD_DATA *CardData,\r
247 IN UINT16 CommandIndex,\r
248 IN UINT32 Argument,\r
249 IN TRANSFER_TYPE DataType,\r
250 IN UINT8 *Buffer, OPTIONAL\r
251 IN UINT32 BufferSize,\r
252 IN RESPONSE_TYPE ResponseType,\r
253 IN UINT32 TimeOut,\r
254 OUT UINT32 *ResponseData\r
255 );\r
256\r
257/**\r
258 Send the card FAST_IO command\r
259\r
260 @param CardData Pointer to CARD_DATA.\r
261 @param RegisterAddress Register Address.\r
262 @param RegisterData Pointer to register Data.\r
263 @param Write TRUE for write, FALSE for read.\r
264\r
265 @retval EFI_SUCCESS\r
266 @retval EFI_UNSUPPORTED\r
267 @retval EFI_INVALID_PARAMETER\r
268 @retval EFI_DEVICE_ERROR\r
269\r
270**/\r
271EFI_STATUS\r
272FastIO (\r
273 IN CARD_DATA *CardData,\r
274 IN UINT8 RegisterAddress,\r
275 IN OUT UINT8 *RegisterData,\r
276 IN BOOLEAN Write\r
277 );\r
278\r
279/**\r
280 Judge whether it is CE-ATA device or not.\r
281\r
282 @param CardData Pointer to CARD_DATA.\r
283\r
284 @retval TRUE\r
285 @retval FALSE\r
286\r
287**/\r
288BOOLEAN\r
289IsCEATADevice (\r
290 IN CARD_DATA *CardData\r
291 );\r
292\r
293/**\r
294 Send software reset\r
295\r
296 @param CardData Pointer to CARD_DATA.\r
297\r
298 @retval EFI_SUCCESS Success\r
299 @retval EFI_DEVICE_ERROR Hardware Error\r
300 @retval EFI_INVALID_PARAMETER Parameter is error\r
301 @retval EFI_NO_MEDIA No media\r
302 @retval EFI_MEDIA_CHANGED Media Change\r
303 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
304\r
305**/\r
306EFI_STATUS\r
307SoftwareReset (\r
308 IN CARD_DATA *CardData\r
309 );\r
310\r
311/**\r
312 SendATACommand specificed in Taskfile\r
313\r
314 @param CardData Pointer to CARD_DATA.\r
315 @param TaskFile Pointer to TASK_FILE.\r
316 @param Write TRUE means write, FALSE means read.\r
317 @param Buffer If NULL, means no data transfer, neither read nor write.\r
318 @param SectorCount Buffer size in 512 bytes unit.\r
319\r
320 @retval EFI_SUCCESS Success\r
321 @retval EFI_DEVICE_ERROR Hardware Error\r
322 @retval EFI_INVALID_PARAMETER Parameter is error\r
323 @retval EFI_NO_MEDIA No media\r
324 @retval EFI_MEDIA_CHANGED Media Change\r
325 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
326\r
327**/\r
328EFI_STATUS\r
329SendATACommand (\r
330 IN CARD_DATA *CardData,\r
331 IN TASK_FILE *TaskFile,\r
332 IN BOOLEAN Write,\r
333 IN UINT8 *Buffer,\r
334 IN UINT16 SectorCount\r
335 );\r
336\r
337/**\r
338 IDENTIFY_DEVICE command\r
339\r
340 @param CardData Pointer to CARD_DATA.\r
341\r
342 @retval EFI_SUCCESS Success\r
343 @retval EFI_DEVICE_ERROR Hardware Error\r
344 @retval EFI_INVALID_PARAMETER Parameter is error\r
345 @retval EFI_NO_MEDIA No media\r
346 @retval EFI_MEDIA_CHANGED Media Change\r
347 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
348\r
349**/\r
350EFI_STATUS\r
351IndentifyDevice (\r
352 IN CARD_DATA *CardData\r
353 );\r
354\r
355/**\r
356 FLUSH_CACHE_EXT command\r
357\r
358 @param CardData Pointer to CARD_DATA.\r
359\r
360 @retval EFI_SUCCESS Success\r
361 @retval EFI_DEVICE_ERROR Hardware Error\r
362 @retval EFI_INVALID_PARAMETER Parameter is error\r
363 @retval EFI_NO_MEDIA No media\r
364 @retval EFI_MEDIA_CHANGED Media Change\r
365 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
366\r
367**/\r
368EFI_STATUS\r
369FlushCache (\r
370 IN CARD_DATA *CardData\r
371 );\r
372\r
373/**\r
374 STANDBY_IMMEDIATE command\r
375\r
376 @param CardData Pointer to CARD_DATA.\r
377\r
378 @retval EFI_SUCCESS Success\r
379 @retval EFI_DEVICE_ERROR Hardware Error\r
380 @retval EFI_INVALID_PARAMETER Parameter is error\r
381 @retval EFI_NO_MEDIA No media\r
382 @retval EFI_MEDIA_CHANGED Media Change\r
383 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
384\r
385**/\r
386EFI_STATUS\r
387StandByImmediate (\r
388 IN CARD_DATA *CardData\r
389 );\r
390\r
391/**\r
392 READ_DMA_EXT command\r
393\r
394 @param CardData Pointer to CARD_DATA.\r
395 @param LBA The starting logical block address to read from on the device.\r
396 @param Buffer A pointer to the destination buffer for the data. The caller\r
397 is responsible for either having implicit or explicit ownership\r
398 of the buffer.\r
399 @param SectorCount Size in 512 bytes unit.\r
400\r
401 @retval EFI_SUCCESS Success\r
402 @retval EFI_DEVICE_ERROR Hardware Error\r
403 @retval EFI_INVALID_PARAMETER Parameter is error\r
404 @retval EFI_NO_MEDIA No media\r
405 @retval EFI_MEDIA_CHANGED Media Change\r
406 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
407\r
408**/\r
409EFI_STATUS\r
410ReadDMAExt (\r
411 IN CARD_DATA *CardData,\r
412 IN EFI_LBA LBA,\r
413 IN UINT8 *Buffer,\r
414 IN UINT16 SectorCount\r
415 );\r
416\r
417/**\r
418 WRITE_DMA_EXT command\r
419\r
420 @param CardData Pointer to CARD_DATA.\r
421 @param LBA The starting logical block address to read from on the device.\r
422 @param Buffer A pointer to the destination buffer for the data. The caller\r
423 is responsible for either having implicit or explicit ownership\r
424 of the buffer.\r
425 @param SectorCount Size in 512 bytes unit.\r
426\r
427 @retval EFI_SUCCESS Success\r
428 @retval EFI_DEVICE_ERROR Hardware Error\r
429 @retval EFI_INVALID_PARAMETER Parameter is error\r
430 @retval EFI_NO_MEDIA No media\r
431 @retval EFI_MEDIA_CHANGED Media Change\r
432 @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
433\r
434**/\r
435EFI_STATUS\r
436WriteDMAExt (\r
437 IN CARD_DATA *CardData,\r
438 IN EFI_LBA LBA,\r
439 IN UINT8 *Buffer,\r
440 IN UINT16 SectorCount\r
441 );\r
442\r
443/**\r
444 CEATA card BlockIo init function.\r
445\r
446 @param CardData Pointer to CARD_DATA.\r
447\r
448 @retval EFI_SUCCESS\r
449 @retval Others\r
450**/\r
451EFI_STATUS\r
452CEATABlockIoInit (\r
453 IN CARD_DATA *CardData\r
454 );\r
455\r
456/**\r
457 MMC/SD card BlockIo init function.\r
458\r
459 @param CardData Pointer to CARD_DATA.\r
460\r
461 @retval EFI_SUCCESS\r
462 @retval Others\r
463**/\r
464EFI_STATUS\r
465MMCSDBlockIoInit (\r
466 IN CARD_DATA *CardData\r
467 );\r
468#endif\r