- @param[in] PassThru A pointer to the EFI_SD_MMC_PASS_THRU_PROTOCOL instance.\r
- @param[in] Slot The slot number of the SD card to send the command to.\r
- @param[in] Rca The relative device address of selected device.\r
- @param[out] Scr The buffer to store the content of the SCR register.\r
-\r
- @retval EFI_SUCCESS The operation is done correctly.\r
- @retval Others The operation fails.\r
-\r
-**/\r
-EFI_STATUS\r
-SdCardGetScr (\r
- IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,\r
- IN UINT8 Slot,\r
- IN UINT16 Rca,\r
- OUT SD_SCR *Scr\r
- )\r
-{\r
- EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;\r
- EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;\r
- EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;\r
- EFI_STATUS Status;\r
-\r
- ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));\r
- ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));\r
- ZeroMem (&Packet, sizeof (Packet));\r
-\r
- Packet.SdMmcCmdBlk = &SdMmcCmdBlk;\r
- Packet.SdMmcStatusBlk = &SdMmcStatusBlk;\r
- Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;\r
-\r
- SdMmcCmdBlk.CommandIndex = SD_APP_CMD;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
- SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;\r
-\r
- Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- SdMmcCmdBlk.CommandIndex = SD_SEND_SCR;\r
- SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;\r
- SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;\r
-\r
- Packet.InDataBuffer = Scr;\r
- Packet.InTransferLength = sizeof (SD_SCR);\r
-\r
- Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);\r
-\r
- return Status;\r
-}\r