Send command SELECT to the device to select/deselect the device. @param[in] Device A pointer to the SD_DEVICE instance. @param[in] Rca The relative device address to use. @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 Others
| 105 | |
| 106 | **/ |
| 107 | EFI_STATUS |
| 108 | SdSelect ( |
| 109 | IN SD_DEVICE *Device, |
| 110 | IN UINT16 Rca |
| 111 | ) |
| 112 | { |
| 113 | EFI_STATUS Status; |
| 114 | EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru; |
| 115 | EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk; |
| 116 | EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk; |
| 117 | EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet; |
| 118 | |
| 119 | PassThru = Device->Private->PassThru; |
| 120 | |
| 121 | ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk)); |
| 122 | ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk)); |
| 123 | ZeroMem (&Packet, sizeof (Packet)); |
| 124 | Packet.SdMmcCmdBlk = &SdMmcCmdBlk; |
| 125 | Packet.SdMmcStatusBlk = &SdMmcStatusBlk; |
| 126 | Packet.Timeout = SD_GENERIC_TIMEOUT; |
| 127 | |
| 128 | SdMmcCmdBlk.CommandIndex = SD_SELECT_DESELECT_CARD; |
| 129 | SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc; |
| 130 | if (Rca != 0) { |
| 131 | SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1b; |
| 132 | } |
| 133 | SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16; |
| 134 | |
| 135 | Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL); |
| 136 | |
| 137 | return Status; |
| 138 | } |
| 139 | |
| 140 | /** |
| 141 | Send command SEND_STATUS to the device to get device status. |
no test coverage detected