#include <linux/slab.h>
#include <linux/types.h>
#include <linux/export.h>
#include <linux/scatterlist.h>
#include <linux/mmc/host.h>
#include <linux/mmc/card.h>
#include <linux/mmc/mmc.h>
#include <linux/mmc/sd.h>
#include "core.h"
#include "sd_ops.h"
#include "mmc_ops.h"
#define SD_APP_OP_COND_PERIOD_US …
#define SD_APP_OP_COND_TIMEOUT_MS …
struct sd_app_op_cond_busy_data { … };
int mmc_app_cmd(struct mmc_host *host, struct mmc_card *card)
{ … }
EXPORT_SYMBOL_GPL(…);
static int mmc_wait_for_app_cmd(struct mmc_host *host, struct mmc_card *card,
struct mmc_command *cmd)
{ … }
int mmc_app_set_bus_width(struct mmc_card *card, int width)
{ … }
static int sd_app_op_cond_cb(void *cb_data, bool *busy)
{ … }
int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
{ … }
static int __mmc_send_if_cond(struct mmc_host *host, u32 ocr, u8 pcie_bits,
u32 *resp)
{ … }
int mmc_send_if_cond(struct mmc_host *host, u32 ocr)
{ … }
int mmc_send_if_cond_pcie(struct mmc_host *host, u32 ocr)
{ … }
int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca)
{ … }
int mmc_app_send_scr(struct mmc_card *card)
{ … }
int mmc_sd_switch(struct mmc_card *card, bool mode, int group,
u8 value, u8 *resp)
{ … }
EXPORT_SYMBOL_GPL(…);
int mmc_app_sd_status(struct mmc_card *card, void *ssr)
{ … }