MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / SdGetCid

Function SdGetCid

MdeModulePkg/Bus/Sd/SdDxe/SdBlockIo.c:251–290  ·  view source on GitHub ↗

Send command SEND_CID to the device to get the CID register data. @param[in] Device A pointer to the SD_DEVICE instance. @param[in] Rca The relative device address to use. @param[out] Cid The buffer to store the SD_CID register data. @retval EFI_SUCCESS The request is executed successfully. @retval EFI_OUT_OF_RESOURCES The requ

Source from the content-addressed store, hash-verified

249
250**/
251EFI_STATUS
252SdGetCid (
253 IN SD_DEVICE *Device,
254 IN UINT16 Rca,
255 OUT SD_CID *Cid
256 )
257{
258 EFI_STATUS Status;
259 EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
260 EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
261 EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
262 EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
263
264 PassThru = Device->Private->PassThru;
265
266 ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
267 ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
268 ZeroMem (&Packet, sizeof (Packet));
269 ZeroMem (Cid, sizeof (SD_CID));
270
271 Packet.SdMmcCmdBlk = &SdMmcCmdBlk;
272 Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
273 Packet.Timeout = SD_GENERIC_TIMEOUT;
274
275 SdMmcCmdBlk.CommandIndex = SD_SEND_CID;
276 SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
277 SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
278 SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
279
280 Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
281
282 if (!EFI_ERROR(Status)) {
283 //
284 // For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.
285 //
286 CopyMem(((UINT8*)Cid) + 1, &SdMmcStatusBlk.Resp0, sizeof (SD_CID) - 1);
287 }
288
289 return Status;
290}
291
292/**
293 Read/write single block through sync or async I/O request.

Callers 1

DiscoverUserAreaFunction · 0.85

Calls 2

ZeroMemFunction · 0.50
CopyMemFunction · 0.50

Tested by

no test coverage detected