mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 18:09:57 +00:00
![Ulf Hansson](/assets/img/avatar_default.png)
The error path for sanitize operations that completes with -ETIMEDOUT, is tightly coupled with the internal request handling code of the core. More precisely, mmc_wait_for_req_done() checks for specific sanitize errors. This is not only inefficient as it affects all types of requests, but also hackish. Therefore, let's improve the behaviour by moving the error path out of the mmc core. To do that, retuning needs to be held while running the sanitize operation. Moreover, to avoid exporting unnecessary symbols to the mmc block module, let's move the code into the mmc_ops.c file. While updating the actual code, let's also take the opportunity to clean up some of the mess around it. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Link: https://lore.kernel.org/r/20200316152152.15122-1-ulf.hansson@linaro.org
52 lines
1.7 KiB
C
52 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* linux/drivers/mmc/core/mmc_ops.h
|
|
*
|
|
* Copyright 2006-2007 Pierre Ossman
|
|
*/
|
|
|
|
#ifndef _MMC_MMC_OPS_H
|
|
#define _MMC_MMC_OPS_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
enum mmc_busy_cmd {
|
|
MMC_BUSY_CMD6,
|
|
MMC_BUSY_ERASE,
|
|
MMC_BUSY_HPI,
|
|
};
|
|
|
|
struct mmc_host;
|
|
struct mmc_card;
|
|
|
|
int mmc_select_card(struct mmc_card *card);
|
|
int mmc_deselect_cards(struct mmc_host *host);
|
|
int mmc_set_dsr(struct mmc_host *host);
|
|
int mmc_go_idle(struct mmc_host *host);
|
|
int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr);
|
|
int mmc_set_relative_addr(struct mmc_card *card);
|
|
int mmc_send_csd(struct mmc_card *card, u32 *csd);
|
|
int __mmc_send_status(struct mmc_card *card, u32 *status, unsigned int retries);
|
|
int mmc_send_status(struct mmc_card *card, u32 *status);
|
|
int mmc_send_cid(struct mmc_host *host, u32 *cid);
|
|
int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp);
|
|
int mmc_spi_set_crc(struct mmc_host *host, int use_crc);
|
|
int mmc_bus_test(struct mmc_card *card, u8 bus_width);
|
|
int mmc_can_ext_csd(struct mmc_card *card);
|
|
int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd);
|
|
int mmc_switch_status(struct mmc_card *card, bool crc_err_fatal);
|
|
int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms,
|
|
enum mmc_busy_cmd busy_cmd);
|
|
int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
unsigned int timeout_ms, unsigned char timing,
|
|
bool send_status, bool retry_crc_err);
|
|
int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
|
|
unsigned int timeout_ms);
|
|
void mmc_run_bkops(struct mmc_card *card);
|
|
int mmc_flush_cache(struct mmc_card *card);
|
|
int mmc_cmdq_enable(struct mmc_card *card);
|
|
int mmc_cmdq_disable(struct mmc_card *card);
|
|
int mmc_sanitize(struct mmc_card *card);
|
|
|
|
#endif
|
|
|