11bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish/** @file 21bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish Definition of the MMC Host Protocol 31bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 4b4fdedc2543c6d193c70ae5339a56824a9729e68Olivier Martin Copyright (c) 2011-2014, ARM Limited. All rights reserved. 53402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron 63402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron This program and the accompanying materials 73402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron are licensed and made available under the terms and conditions of the BSD License 83402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron which accompanies this distribution. The full text of the license may be found at 93402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron http://opensource.org/licenses/bsd-license.php 103402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron 113402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 123402aac7d985bf8a9f9d3c639f3fe93609380513Ronald Cron WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 131bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 141bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish**/ 151bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 161bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#ifndef __MMC_HOST_H__ 171bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define __MMC_HOST_H__ 181bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 191bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish/// 201bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish/// Global ID for the MMC Host Protocol 211bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish/// 221bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define EFI_MMC_HOST_PROTOCOL_GUID \ 231bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish { 0x3e591c00, 0x9e4a, 0x11df, {0x92, 0x44, 0x00, 0x02, 0xA5, 0xD5, 0xC5, 0x1B } } 241bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 251bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_R1 0 261bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_R1b 0 271bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_R2 1 281bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_R3 0 291bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_R6 0 301bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_R7 0 311bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_OCR 0 321bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_CID 1 331bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_CSD 1 341bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_RESPONSE_TYPE_RCA 0 351bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 361bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfishtypedef UINT32 MMC_RESPONSE_TYPE; 371bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 381bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfishtypedef UINT32 MMC_CMD; 391bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 401bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD_WAIT_RESPONSE (1 << 16) 411bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD_LONG_RESPONSE (1 << 17) 422b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_CMD_NO_CRC_RESPONSE (1 << 18) 431bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 442b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_INDX(Index) ((Index) & 0xFFFF) 452b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_GET_INDX(MmcCmd) ((MmcCmd) & 0xFFFF) 461bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 472b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_CMD0 (MMC_INDX(0) | MMC_CMD_NO_CRC_RESPONSE) 482b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_CMD1 (MMC_INDX(1) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE) 491bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD2 (MMC_INDX(2) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_LONG_RESPONSE) 501bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD3 (MMC_INDX(3) | MMC_CMD_WAIT_RESPONSE) 512b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_CMD5 (MMC_INDX(5) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE) 52a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_CMD6 (MMC_INDX(6) | MMC_CMD_WAIT_RESPONSE) 531bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD7 (MMC_INDX(7) | MMC_CMD_WAIT_RESPONSE) 541bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD8 (MMC_INDX(8) | MMC_CMD_WAIT_RESPONSE) 551bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD9 (MMC_INDX(9) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_LONG_RESPONSE) 561bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD11 (MMC_INDX(11) | MMC_CMD_WAIT_RESPONSE) 571bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD12 (MMC_INDX(12) | MMC_CMD_WAIT_RESPONSE) 581bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD13 (MMC_INDX(13) | MMC_CMD_WAIT_RESPONSE) 591bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD16 (MMC_INDX(16) | MMC_CMD_WAIT_RESPONSE) 601bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD17 (MMC_INDX(17) | MMC_CMD_WAIT_RESPONSE) 611bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD18 (MMC_INDX(18) | MMC_CMD_WAIT_RESPONSE) 621bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD20 (MMC_INDX(20) | MMC_CMD_WAIT_RESPONSE) 631bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD23 (MMC_INDX(23) | MMC_CMD_WAIT_RESPONSE) 641bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD24 (MMC_INDX(24) | MMC_CMD_WAIT_RESPONSE) 65a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_CMD25 (MMC_INDX(25) | MMC_CMD_WAIT_RESPONSE) 66830d3130527934b4888515b92582ce75c69b33ecShivamurthy Shastri#define MMC_CMD35 (MMC_INDX(35) | MMC_CMD_WAIT_RESPONSE) 67830d3130527934b4888515b92582ce75c69b33ecShivamurthy Shastri#define MMC_CMD36 (MMC_INDX(36) | MMC_CMD_WAIT_RESPONSE) 68830d3130527934b4888515b92582ce75c69b33ecShivamurthy Shastri#define MMC_CMD38 (MMC_INDX(38) | MMC_CMD_WAIT_RESPONSE) 691bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#define MMC_CMD55 (MMC_INDX(55) | MMC_CMD_WAIT_RESPONSE) 702b826e7350d7d3dc48be3debbff4e1007282fa33oliviermartin#define MMC_ACMD41 (MMC_INDX(41) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE) 71a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_ACMD51 (MMC_INDX(51) | MMC_CMD_WAIT_RESPONSE) 721bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 73b4fdedc2543c6d193c70ae5339a56824a9729e68Olivier Martin// Valid responses for CMD1 in eMMC 74b4fdedc2543c6d193c70ae5339a56824a9729e68Olivier Martin#define EMMC_CMD1_CAPACITY_LESS_THAN_2GB 0x00FF8080 // Capacity <= 2GB, byte addressing used 75b4fdedc2543c6d193c70ae5339a56824a9729e68Olivier Martin#define EMMC_CMD1_CAPACITY_GREATER_THAN_2GB 0x40FF8080 // Capacity > 2GB, 512-byte sector addressing used 76b4fdedc2543c6d193c70ae5339a56824a9729e68Olivier Martin 77a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_STATUS_APP_CMD (1 << 5) 78a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang 791bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfishtypedef enum _MMC_STATE { 801bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcInvalidState = 0, 811bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcHwInitializationState, 821bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcIdleState, 831bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcReadyState, 841bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcIdentificationState, 851bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcStandByState, 861bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcTransferState, 871bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcSendingDataState, 881bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcReceiveDataState, 891bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcProgrammingState, 901bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish MmcDisconnectState, 911bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish} MMC_STATE; 921bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 93a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCBACKWARD (0) 94a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS26 (1 << 0) // High-Speed @26MHz at rated device voltages 95a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS52 (1 << 1) // High-Speed @52MHz at rated device voltages 96a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS52DDR1V8 (1 << 2) // High-Speed Dual Data Rate @52MHz 1.8V or 3V I/O 97a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS52DDR1V2 (1 << 3) // High-Speed Dual Data Rate @52MHz 1.2V I/O 98a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS200SDR1V8 (1 << 4) // HS200 Single Data Rate @200MHz 1.8V I/O 99a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS200SDR1V2 (1 << 5) // HS200 Single Data Rate @200MHz 1.2V I/O 100a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS400DDR1V8 (1 << 6) // HS400 Dual Data Rate @400MHz 1.8V I/O 101a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define EMMCHS400DDR1V2 (1 << 7) // HS400 Dual Data Rate @400MHz 1.2V I/O 102a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang 10316d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin/// 10416d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin/// Forward declaration for EFI_MMC_HOST_PROTOCOL 10516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin/// 10616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef struct _EFI_MMC_HOST_PROTOCOL EFI_MMC_HOST_PROTOCOL; 10716d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 10816d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef BOOLEAN (EFIAPI *MMC_ISCARDPRESENT) ( 10916d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This 11016d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 11116d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 11216d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef BOOLEAN (EFIAPI *MMC_ISREADONLY) ( 11316d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This 11416d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 11516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 11616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef EFI_STATUS (EFIAPI *MMC_BUILDDEVICEPATH) ( 11716d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This, 11816d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath 11916d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 12016d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 12116d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef EFI_STATUS (EFIAPI *MMC_NOTIFYSTATE) ( 12216d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This, 12316d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN MMC_STATE State 12416d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 12516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 12616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef EFI_STATUS (EFIAPI *MMC_SENDCOMMAND) ( 12716d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This, 12816d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN MMC_CMD Cmd, 12916d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN UINT32 Argument 13016d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 13116d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 13216d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef EFI_STATUS (EFIAPI *MMC_RECEIVERESPONSE) ( 13316d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This, 13416d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN MMC_RESPONSE_TYPE Type, 13516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN UINT32 *Buffer 13616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 13716d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 13816d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef EFI_STATUS (EFIAPI *MMC_READBLOCKDATA) ( 13916d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This, 14016d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_LBA Lba, 14116d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN UINTN Length, 14216d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin OUT UINT32 *Buffer 14316d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 14416d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 14516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartintypedef EFI_STATUS (EFIAPI *MMC_WRITEBLOCKDATA) ( 14616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_MMC_HOST_PROTOCOL *This, 14716d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN EFI_LBA Lba, 14816d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN UINTN Length, 14916d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin IN UINT32 *Buffer 15016d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin ); 1511bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 152a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuangtypedef EFI_STATUS (EFIAPI *MMC_SETIOS) ( 153a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang IN EFI_MMC_HOST_PROTOCOL *This, 154a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang IN UINT32 BusClockFreq, 155a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang IN UINT32 BusWidth, 156a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang IN UINT32 TimingMode 157a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang ); 158a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang 159a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuangtypedef BOOLEAN (EFIAPI *MMC_ISMULTIBLOCK) ( 160a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang IN EFI_MMC_HOST_PROTOCOL *This 161a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang ); 1621bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 1636b062a863f5c81a3064fff86c608d1a5eae8bf72oliviermartinstruct _EFI_MMC_HOST_PROTOCOL { 1641bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 16516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin UINT32 Revision; 16616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_ISCARDPRESENT IsCardPresent; 16716d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_ISREADONLY IsReadOnly; 16816d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_BUILDDEVICEPATH BuildDevicePath; 1691bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 17016d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_NOTIFYSTATE NotifyState; 1711bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 17216d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_SENDCOMMAND SendCommand; 17316d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_RECEIVERESPONSE ReceiveResponse; 1741bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 17516d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_READBLOCKDATA ReadBlockData; 17616d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin MMC_WRITEBLOCKDATA WriteBlockData; 1771bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 178a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang MMC_SETIOS SetIos; 179a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang MMC_ISMULTIBLOCK IsMultiBlock; 180a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang 1816b062a863f5c81a3064fff86c608d1a5eae8bf72oliviermartin}; 1821bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 183a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_HOST_PROTOCOL_REVISION 0x00010002 // 1.2 184a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang 185a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_HOST_HAS_SETIOS(Host) (Host->Revision >= MMC_HOST_PROTOCOL_REVISION && \ 186a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang Host->SetIos != NULL) 187a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang#define MMC_HOST_HAS_ISMULTIBLOCK(Host) (Host->Revision >= MMC_HOST_PROTOCOL_REVISION && \ 188a28b9aef6769fd07c2b5e67a8c3c7a42bf486463Haojian Zhuang Host->IsMultiBlock != NULL) 18916d88c2d20ccd9f8ea52967b578ece82174ea762oliviermartin 1901bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfishextern EFI_GUID gEfiMmcHostProtocolGuid; 1911bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 1921bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish#endif 1931bfda055dfbc52678655ab2ded721f9f7c0cd496andrewfish 194