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

Function SdSetRca

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

Send command SET_RELATIVE_ADDRESS to the device to set the device address. @param[in] Device A pointer to the SD_DEVICE instance. @param[out] Rca The relative device address to assign. @retval EFI_SUCCESS The request is executed successfully. @retval EFI_OUT_OF_RESOURCES The request could not be executed due to a lack of resources. @retval Ot

Source from the content-addressed store, hash-verified

60
61**/
62EFI_STATUS
63SdSetRca (
64 IN SD_DEVICE *Device,
65 OUT UINT16 *Rca
66 )
67{
68 EFI_STATUS Status;
69 EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
70 EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
71 EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
72 EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
73
74 PassThru = Device->Private->PassThru;
75
76 ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
77 ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
78 ZeroMem (&Packet, sizeof (Packet));
79 Packet.SdMmcCmdBlk = &SdMmcCmdBlk;
80 Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
81 Packet.Timeout = SD_GENERIC_TIMEOUT;
82
83 SdMmcCmdBlk.CommandIndex = SD_SET_RELATIVE_ADDR;
84 SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
85 SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR6;
86
87 Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
88 if (!EFI_ERROR(Status)) {
89 DEBUG ((EFI_D_INFO, "Set RCA succeeds with Resp0 = 0x%x\n", SdMmcStatusBlk.Resp0));
90 *Rca = (UINT16)(SdMmcStatusBlk.Resp0 >> 16);
91 }
92
93 return Status;
94}
95
96/**
97 Send command SELECT to the device to select/deselect the device.

Callers 1

DiscoverUserAreaFunction · 0.85

Calls 1

ZeroMemFunction · 0.50

Tested by

no test coverage detected