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

Function SdGetCsd

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

Send command SEND_CSD to the device to get the CSD register data. @param[in] Device A pointer to the SD_DEVICE instance. @param[in] Rca The relative device address to use. @param[out] Csd The buffer to store the SD_CSD 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

196
197**/
198EFI_STATUS
199SdGetCsd (
200 IN SD_DEVICE *Device,
201 IN UINT16 Rca,
202 OUT SD_CSD *Csd
203 )
204{
205 EFI_STATUS Status;
206 EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
207 EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
208 EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
209 EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
210
211 PassThru = Device->Private->PassThru;
212
213 ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
214 ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
215 ZeroMem (&Packet, sizeof (Packet));
216 ZeroMem (Csd, sizeof (SD_CSD));
217
218 Packet.SdMmcCmdBlk = &SdMmcCmdBlk;
219 Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
220 Packet.Timeout = SD_GENERIC_TIMEOUT;
221
222 SdMmcCmdBlk.CommandIndex = SD_SEND_CSD;
223 SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
224 SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
225 SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
226
227 Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
228
229 if (!EFI_ERROR(Status)) {
230 //
231 // For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.
232 //
233 CopyMem(((UINT8*)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (SD_CSD) - 1);
234 }
235
236 return Status;
237}
238
239/**
240 Send command SEND_CID to the device to get the CID register data.

Callers 1

DiscoverUserAreaFunction · 0.85

Calls 2

ZeroMemFunction · 0.50
CopyMemFunction · 0.50

Tested by

no test coverage detected