1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * linux/drivers/mmc/core/host.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2003 Russell King, All Rights Reserved. 6*4882a593Smuzhiyun * Copyright 2007 Pierre Ossman 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun #ifndef _MMC_CORE_HOST_H 9*4882a593Smuzhiyun #define _MMC_CORE_HOST_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/mmc/host.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun int mmc_register_host_class(void); 14*4882a593Smuzhiyun void mmc_unregister_host_class(void); 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun void mmc_retune_enable(struct mmc_host *host); 17*4882a593Smuzhiyun void mmc_retune_disable(struct mmc_host *host); 18*4882a593Smuzhiyun void mmc_retune_hold(struct mmc_host *host); 19*4882a593Smuzhiyun void mmc_retune_release(struct mmc_host *host); 20*4882a593Smuzhiyun int mmc_retune(struct mmc_host *host); 21*4882a593Smuzhiyun void mmc_retune_pause(struct mmc_host *host); 22*4882a593Smuzhiyun void mmc_retune_unpause(struct mmc_host *host); 23*4882a593Smuzhiyun mmc_retune_hold_now(struct mmc_host * host)24*4882a593Smuzhiyunstatic inline void mmc_retune_hold_now(struct mmc_host *host) 25*4882a593Smuzhiyun { 26*4882a593Smuzhiyun host->retune_now = 0; 27*4882a593Smuzhiyun host->hold_retune += 1; 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun mmc_retune_recheck(struct mmc_host * host)30*4882a593Smuzhiyunstatic inline void mmc_retune_recheck(struct mmc_host *host) 31*4882a593Smuzhiyun { 32*4882a593Smuzhiyun if (host->hold_retune <= 1) 33*4882a593Smuzhiyun host->retune_now = 1; 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun mmc_host_cmd23(struct mmc_host * host)36*4882a593Smuzhiyunstatic inline int mmc_host_cmd23(struct mmc_host *host) 37*4882a593Smuzhiyun { 38*4882a593Smuzhiyun return host->caps & MMC_CAP_CMD23; 39*4882a593Smuzhiyun } 40*4882a593Smuzhiyun mmc_host_done_complete(struct mmc_host * host)41*4882a593Smuzhiyunstatic inline bool mmc_host_done_complete(struct mmc_host *host) 42*4882a593Smuzhiyun { 43*4882a593Smuzhiyun return host->caps & MMC_CAP_DONE_COMPLETE; 44*4882a593Smuzhiyun } 45*4882a593Smuzhiyun mmc_boot_partition_access(struct mmc_host * host)46*4882a593Smuzhiyunstatic inline int mmc_boot_partition_access(struct mmc_host *host) 47*4882a593Smuzhiyun { 48*4882a593Smuzhiyun return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC); 49*4882a593Smuzhiyun } 50*4882a593Smuzhiyun mmc_host_uhs(struct mmc_host * host)51*4882a593Smuzhiyunstatic inline int mmc_host_uhs(struct mmc_host *host) 52*4882a593Smuzhiyun { 53*4882a593Smuzhiyun return host->caps & 54*4882a593Smuzhiyun (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | 55*4882a593Smuzhiyun MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | 56*4882a593Smuzhiyun MMC_CAP_UHS_DDR50) && 57*4882a593Smuzhiyun host->caps & MMC_CAP_4_BIT_DATA; 58*4882a593Smuzhiyun } 59*4882a593Smuzhiyun mmc_card_hs200(struct mmc_card * card)60*4882a593Smuzhiyunstatic inline bool mmc_card_hs200(struct mmc_card *card) 61*4882a593Smuzhiyun { 62*4882a593Smuzhiyun return card->host->ios.timing == MMC_TIMING_MMC_HS200; 63*4882a593Smuzhiyun } 64*4882a593Smuzhiyun mmc_card_ddr52(struct mmc_card * card)65*4882a593Smuzhiyunstatic inline bool mmc_card_ddr52(struct mmc_card *card) 66*4882a593Smuzhiyun { 67*4882a593Smuzhiyun return card->host->ios.timing == MMC_TIMING_MMC_DDR52; 68*4882a593Smuzhiyun } 69*4882a593Smuzhiyun mmc_card_hs400(struct mmc_card * card)70*4882a593Smuzhiyunstatic inline bool mmc_card_hs400(struct mmc_card *card) 71*4882a593Smuzhiyun { 72*4882a593Smuzhiyun return card->host->ios.timing == MMC_TIMING_MMC_HS400; 73*4882a593Smuzhiyun } 74*4882a593Smuzhiyun mmc_card_hs400es(struct mmc_card * card)75*4882a593Smuzhiyunstatic inline bool mmc_card_hs400es(struct mmc_card *card) 76*4882a593Smuzhiyun { 77*4882a593Smuzhiyun return card->host->ios.enhanced_strobe; 78*4882a593Smuzhiyun } 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #endif 81*4882a593Smuzhiyun 82