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
| 60 | |
| 61 | **/ |
| 62 | EFI_STATUS |
| 63 | SdSetRca ( |
| 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. |
no test coverage detected