Send command SEND_STATUS to the device to get device status. @param[in] Device A pointer to the SD_DEVICE instance. @param[in] Rca The relative device address to use. @param[out] DevStatus The buffer to store the device status. @retval EFI_SUCCESS The request is executed successfully. @retval EFI_OUT_OF_RESOURCES The request could no
| 150 | |
| 151 | **/ |
| 152 | EFI_STATUS |
| 153 | SdSendStatus ( |
| 154 | IN SD_DEVICE *Device, |
| 155 | IN UINT16 Rca, |
| 156 | OUT UINT32 *DevStatus |
| 157 | ) |
| 158 | { |
| 159 | EFI_STATUS Status; |
| 160 | EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru; |
| 161 | EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk; |
| 162 | EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk; |
| 163 | EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet; |
| 164 | |
| 165 | PassThru = Device->Private->PassThru; |
| 166 | |
| 167 | ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk)); |
| 168 | ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk)); |
| 169 | ZeroMem (&Packet, sizeof (Packet)); |
| 170 | Packet.SdMmcCmdBlk = &SdMmcCmdBlk; |
| 171 | Packet.SdMmcStatusBlk = &SdMmcStatusBlk; |
| 172 | Packet.Timeout = SD_GENERIC_TIMEOUT; |
| 173 | |
| 174 | SdMmcCmdBlk.CommandIndex = SD_SEND_STATUS; |
| 175 | SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc; |
| 176 | SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1; |
| 177 | SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16; |
| 178 | |
| 179 | Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL); |
| 180 | if (!EFI_ERROR(Status)) { |
| 181 | CopyMem(DevStatus, &SdMmcStatusBlk.Resp0, sizeof (UINT32)); |
| 182 | } |
| 183 | return Status; |
| 184 | } |
| 185 | |
| 186 | /** |
| 187 | Send command SEND_CSD to the device to get the CSD register data. |
no test coverage detected