Decode and print SD CSD Register content. @param[in] Csd Pointer to SD_CSD data structure. @retval EFI_SUCCESS The function completed successfully **/
| 95 | @retval EFI_SUCCESS The function completed successfully |
| 96 | **/ |
| 97 | EFI_STATUS |
| 98 | DumpCsd ( |
| 99 | IN SD_CSD *Csd |
| 100 | ) |
| 101 | { |
| 102 | SD_CSD2 *Csd2; |
| 103 | |
| 104 | DEBUG((DEBUG_INFO, "== Dump Sd Csd Register==\n")); |
| 105 | DEBUG((DEBUG_INFO, " CSD structure 0x%x\n", Csd->CsdStructure)); |
| 106 | DEBUG((DEBUG_INFO, " Data read access-time 1 0x%x\n", Csd->Taac)); |
| 107 | DEBUG((DEBUG_INFO, " Data read access-time 2 0x%x\n", Csd->Nsac)); |
| 108 | DEBUG((DEBUG_INFO, " Max. bus clock frequency 0x%x\n", Csd->TranSpeed)); |
| 109 | DEBUG((DEBUG_INFO, " Device command classes 0x%x\n", Csd->Ccc)); |
| 110 | DEBUG((DEBUG_INFO, " Max. read data block length 0x%x\n", Csd->ReadBlLen)); |
| 111 | DEBUG((DEBUG_INFO, " Partial blocks for read allowed 0x%x\n", Csd->ReadBlPartial)); |
| 112 | DEBUG((DEBUG_INFO, " Write block misalignment 0x%x\n", Csd->WriteBlkMisalign)); |
| 113 | DEBUG((DEBUG_INFO, " Read block misalignment 0x%x\n", Csd->ReadBlkMisalign)); |
| 114 | DEBUG((DEBUG_INFO, " DSR implemented 0x%x\n", Csd->DsrImp)); |
| 115 | if (Csd->CsdStructure == 0) { |
| 116 | DEBUG((DEBUG_INFO, " Device size 0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2))); |
| 117 | DEBUG((DEBUG_INFO, " Max. read current @ VDD min 0x%x\n", Csd->VddRCurrMin)); |
| 118 | DEBUG((DEBUG_INFO, " Max. read current @ VDD max 0x%x\n", Csd->VddRCurrMax)); |
| 119 | DEBUG((DEBUG_INFO, " Max. write current @ VDD min 0x%x\n", Csd->VddWCurrMin)); |
| 120 | DEBUG((DEBUG_INFO, " Max. write current @ VDD max 0x%x\n", Csd->VddWCurrMax)); |
| 121 | } else { |
| 122 | Csd2 = (SD_CSD2*)(VOID*)Csd; |
| 123 | DEBUG((DEBUG_INFO, " Device size 0x%x\n", Csd2->CSizeLow | (Csd->CSizeHigh << 16))); |
| 124 | } |
| 125 | DEBUG((DEBUG_INFO, " Erase sector size 0x%x\n", Csd->SectorSize)); |
| 126 | DEBUG((DEBUG_INFO, " Erase single block enable 0x%x\n", Csd->EraseBlkEn)); |
| 127 | DEBUG((DEBUG_INFO, " Write protect group size 0x%x\n", Csd->WpGrpSize)); |
| 128 | DEBUG((DEBUG_INFO, " Write protect group enable 0x%x\n", Csd->WpGrpEnable)); |
| 129 | DEBUG((DEBUG_INFO, " Write speed factor 0x%x\n", Csd->R2WFactor)); |
| 130 | DEBUG((DEBUG_INFO, " Max. write data block length 0x%x\n", Csd->WriteBlLen)); |
| 131 | DEBUG((DEBUG_INFO, " Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial)); |
| 132 | DEBUG((DEBUG_INFO, " File format group 0x%x\n", Csd->FileFormatGrp)); |
| 133 | DEBUG((DEBUG_INFO, " Copy flag (OTP) 0x%x\n", Csd->Copy)); |
| 134 | DEBUG((DEBUG_INFO, " Permanent write protection 0x%x\n", Csd->PermWriteProtect)); |
| 135 | DEBUG((DEBUG_INFO, " Temporary write protection 0x%x\n", Csd->TmpWriteProtect)); |
| 136 | DEBUG((DEBUG_INFO, " File format 0x%x\n", Csd->FileFormat)); |
| 137 | |
| 138 | return EFI_SUCCESS; |
| 139 | } |
| 140 | |
| 141 | /** |
| 142 | Get SD device model name. |