host.h 19.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12
/*
 *  linux/include/linux/mmc/host.h
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *  Host driver specific definitions.
 */
#ifndef LINUX_MMC_HOST_H
#define LINUX_MMC_HOST_H

13
#include <linux/sched.h>
14
#include <linux/device.h>
P
Per Forlin 已提交
15
#include <linux/fault-inject.h>
P
Pierre Ossman 已提交
16

17
#include <linux/mmc/core.h>
18
#include <linux/mmc/card.h>
19
#include <linux/mmc/pm.h>
H
Heiner Kallweit 已提交
20
#include <linux/dma-direction.h>
L
Linus Torvalds 已提交
21 22 23 24

struct mmc_ios {
	unsigned int	clock;			/* clock rate */
	unsigned short	vdd;
25
	unsigned int	power_delay_ms;		/* waiting for stable power */
L
Linus Torvalds 已提交
26

27
/* vdd stores the bit number of the selected voltage range from below. */
L
Linus Torvalds 已提交
28 29 30 31 32 33

	unsigned char	bus_mode;		/* command output mode */

#define MMC_BUSMODE_OPENDRAIN	1
#define MMC_BUSMODE_PUSHPULL	2

P
Pierre Ossman 已提交
34 35 36 37 38 39
	unsigned char	chip_select;		/* SPI chip select */

#define MMC_CS_DONTCARE		0
#define MMC_CS_HIGH		1
#define MMC_CS_LOW		2

L
Linus Torvalds 已提交
40 41 42 43 44
	unsigned char	power_mode;		/* power supply mode */

#define MMC_POWER_OFF		0
#define MMC_POWER_UP		1
#define MMC_POWER_ON		2
45
#define MMC_POWER_UNDEFINED	3
P
Pierre Ossman 已提交
46 47 48 49 50

	unsigned char	bus_width;		/* data bus width */

#define MMC_BUS_WIDTH_1		0
#define MMC_BUS_WIDTH_4		2
J
Jarkko Lavinen 已提交
51
#define MMC_BUS_WIDTH_8		3
52 53 54 55 56 57

	unsigned char	timing;			/* timing specification used */

#define MMC_TIMING_LEGACY	0
#define MMC_TIMING_MMC_HS	1
#define MMC_TIMING_SD_HS	2
58 59 60 61 62
#define MMC_TIMING_UHS_SDR12	3
#define MMC_TIMING_UHS_SDR25	4
#define MMC_TIMING_UHS_SDR50	5
#define MMC_TIMING_UHS_SDR104	6
#define MMC_TIMING_UHS_DDR50	7
63 64
#define MMC_TIMING_MMC_DDR52	8
#define MMC_TIMING_MMC_HS200	9
65
#define MMC_TIMING_MMC_HS400	10
66

67 68 69 70
	unsigned char	signal_voltage;		/* signalling voltage (1.8V or 3.3V) */

#define MMC_SIGNAL_VOLTAGE_330	0
#define MMC_SIGNAL_VOLTAGE_180	1
71
#define MMC_SIGNAL_VOLTAGE_120	2
72 73 74 75 76 77 78

	unsigned char	drv_type;		/* driver type (A, B, C, D) */

#define MMC_SET_DRIVER_TYPE_B	0
#define MMC_SET_DRIVER_TYPE_A	1
#define MMC_SET_DRIVER_TYPE_C	2
#define MMC_SET_DRIVER_TYPE_D	3
79 80

	bool enhanced_strobe;			/* hs400es selection */
L
Linus Torvalds 已提交
81 82
};

83 84
struct mmc_host;

L
Linus Torvalds 已提交
85
struct mmc_host_ops {
86 87 88 89
	/*
	 * It is optional for the host to implement pre_req and post_req in
	 * order to support double buffering of requests (prepare one
	 * request while another request is active).
90 91 92
	 * pre_req() must always be followed by a post_req().
	 * To undo a call made to pre_req(), call post_req() with
	 * a nonzero err condition.
93 94 95
	 */
	void	(*post_req)(struct mmc_host *host, struct mmc_request *req,
			    int err);
96
	void	(*pre_req)(struct mmc_host *host, struct mmc_request *req);
L
Linus Torvalds 已提交
97
	void	(*request)(struct mmc_host *host, struct mmc_request *req);
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

	/*
	 * Avoid calling the next three functions too often or in a "fast
	 * path", since underlaying controller might implement them in an
	 * expensive and/or slow way. Also note that these functions might
	 * sleep, so don't call them in the atomic contexts!
	 */

	/*
	 * Notes to the set_ios callback:
	 * ios->clock might be 0. For some controllers, setting 0Hz
	 * as any other frequency works. However, some controllers
	 * explicitly need to disable the clock. Otherwise e.g. voltage
	 * switching might fail because the SDCLK is not really quiet.
	 */
	void	(*set_ios)(struct mmc_host *host, struct mmc_ios *ios);

115
	/*
116 117 118 119 120
	 * Return values for the get_ro callback should be:
	 *   0 for a read/write card
	 *   1 for a read-only card
	 *   -ENOSYS when not supported (equal to NULL callback)
	 *   or a negative errno value when something bad happened
121 122 123 124
	 */
	int	(*get_ro)(struct mmc_host *host);

	/*
125
	 * Return values for the get_cd callback should be:
126 127 128 129
	 *   0 for a absent card
	 *   1 for a present card
	 *   -ENOSYS when not supported (equal to NULL callback)
	 *   or a negative errno value when something bad happened
130 131 132
	 */
	int	(*get_cd)(struct mmc_host *host);

133
	void	(*enable_sdio_irq)(struct mmc_host *host, int enable);
134
	void	(*ack_sdio_irq)(struct mmc_host *host);
135 136 137

	/* optional callback for HC quirks */
	void	(*init_card)(struct mmc_host *host, struct mmc_card *card);
138 139

	int	(*start_signal_voltage_switch)(struct mmc_host *host, struct mmc_ios *ios);
140

141 142 143
	/* Check if the card is pulling dat[0:3] low */
	int	(*card_busy)(struct mmc_host *host);

144 145
	/* The tuning command opcode value is different for SD and eMMC cards */
	int	(*execute_tuning)(struct mmc_host *host, u32 opcode);
146 147 148

	/* Prepare HS400 target operating frequency depending host driver */
	int	(*prepare_hs400_tuning)(struct mmc_host *host, struct mmc_ios *ios);
149

150 151 152
	/* Prepare switch to DDR during the HS400 init sequence */
	int	(*hs400_prepare_ddr)(struct mmc_host *host);

153 154 155 156 157 158
	/* Prepare for switching from HS400 to HS200 */
	void	(*hs400_downgrade)(struct mmc_host *host);

	/* Complete selection of HS400 */
	void	(*hs400_complete)(struct mmc_host *host);

159 160 161
	/* Prepare enhanced strobe depending host driver */
	void	(*hs400_enhanced_strobe)(struct mmc_host *host,
					 struct mmc_ios *ios);
162 163
	int	(*select_drive_strength)(struct mmc_card *card,
					 unsigned int max_dtr, int host_drv,
164
					 int card_drv, int *drv_type);
165
	void	(*hw_reset)(struct mmc_host *host);
166
	void	(*card_event)(struct mmc_host *host);
167 168 169 170 171 172 173

	/*
	 * Optional callback to support controllers with HW issues for multiple
	 * I/O. Returns the number of supported blocks for the request.
	 */
	int	(*multi_io_quirk)(struct mmc_card *card,
				  unsigned int direction, int blk_size);
L
Linus Torvalds 已提交
174 175
};

A
Adrian Hunter 已提交
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
struct mmc_cqe_ops {
	/* Allocate resources, and make the CQE operational */
	int	(*cqe_enable)(struct mmc_host *host, struct mmc_card *card);
	/* Free resources, and make the CQE non-operational */
	void	(*cqe_disable)(struct mmc_host *host);
	/*
	 * Issue a read, write or DCMD request to the CQE. Also deal with the
	 * effect of ->cqe_off().
	 */
	int	(*cqe_request)(struct mmc_host *host, struct mmc_request *mrq);
	/* Free resources (e.g. DMA mapping) associated with the request */
	void	(*cqe_post_req)(struct mmc_host *host, struct mmc_request *mrq);
	/*
	 * Prepare the CQE and host controller to accept non-CQ commands. There
	 * is no corresponding ->cqe_on(), instead ->cqe_request() is required
	 * to deal with that.
	 */
	void	(*cqe_off)(struct mmc_host *host);
	/*
	 * Wait for all CQE tasks to complete. Return an error if recovery
	 * becomes necessary.
	 */
	int	(*cqe_wait_for_idle)(struct mmc_host *host);
	/*
	 * Notify CQE that a request has timed out. Return false if the request
	 * completed or true if a timeout happened in which case indicate if
	 * recovery is needed.
	 */
	bool	(*cqe_timeout)(struct mmc_host *host, struct mmc_request *mrq,
			       bool *recovery_needed);
	/*
	 * Stop all CQE activity and prepare the CQE and host controller to
	 * accept recovery commands.
	 */
	void	(*cqe_recovery_start)(struct mmc_host *host);
	/*
	 * Clear the queue and call mmc_cqe_request_done() on all requests.
	 * Requests that errored will have the error set on the mmc_request
	 * (data->error or cmd->error for DCMD).  Requests that did not error
	 * will have zero data bytes transferred.
	 */
	void	(*cqe_recovery_finish)(struct mmc_host *host);
};

220 221 222 223 224 225 226
struct mmc_async_req {
	/* active mmc request */
	struct mmc_request	*mrq;
	/*
	 * Check error status of completed mmc request.
	 * Returns 0 if success otherwise non zero.
	 */
227
	enum mmc_blk_status (*err_check)(struct mmc_card *, struct mmc_async_req *);
228 229
};

230 231 232 233 234 235 236 237 238 239 240 241 242
/**
 * struct mmc_slot - MMC slot functions
 *
 * @cd_irq:		MMC/SD-card slot hotplug detection IRQ or -EINVAL
 * @handler_priv:	MMC/SD-card slot context
 *
 * Some MMC/SD host controllers implement slot-functions like card and
 * write-protect detection natively. However, a large number of controllers
 * leave these functions to the CPU. This struct provides a hook to attach
 * such slot-function drivers.
 */
struct mmc_slot {
	int cd_irq;
243
	bool cd_wake_enabled;
244 245 246
	void *handler_priv;
};

247 248 249 250 251 252 253 254 255 256 257 258 259 260
/**
 * mmc_context_info - synchronization details for mmc context
 * @is_done_rcv		wake up reason was done request
 * @is_new_req		wake up reason was new request
 * @is_waiting_last_req	mmc context waiting for single running request
 * @wait		wait queue
 */
struct mmc_context_info {
	bool			is_done_rcv;
	bool			is_new_req;
	bool			is_waiting_last_req;
	wait_queue_head_t	wait;
};

261
struct regulator;
262
struct mmc_pwrseq;
263 264 265 266 267 268

struct mmc_supply {
	struct regulator *vmmc;		/* Card power supply */
	struct regulator *vqmmc;	/* Optional Vccq supply */
};

269 270 271 272
struct mmc_ctx {
	struct task_struct *task;
};

L
Linus Torvalds 已提交
273
struct mmc_host {
274 275
	struct device		*parent;
	struct device		class_dev;
276
	int			index;
D
David Brownell 已提交
277
	const struct mmc_host_ops *ops;
278
	struct mmc_pwrseq	*pwrseq;
L
Linus Torvalds 已提交
279 280
	unsigned int		f_min;
	unsigned int		f_max;
H
Hein Tibosch 已提交
281
	unsigned int		f_init;
L
Linus Torvalds 已提交
282
	u32			ocr_avail;
283 284 285
	u32			ocr_avail_sdio;	/* SDIO-specific OCR */
	u32			ocr_avail_sd;	/* SD-specific OCR */
	u32			ocr_avail_mmc;	/* MMC-specific OCR */
286
#ifdef CONFIG_PM_SLEEP
287
	struct notifier_block	pm_notify;
288
#endif
A
Aaron Lu 已提交
289 290 291
	u32			max_current_330;
	u32			max_current_300;
	u32			max_current_180;
L
Linus Torvalds 已提交
292

293
#define MMC_VDD_165_195		0x00000080	/* VDD voltage 1.65 - 1.95 */
P
Pierre Ossman 已提交
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
#define MMC_VDD_20_21		0x00000100	/* VDD voltage 2.0 ~ 2.1 */
#define MMC_VDD_21_22		0x00000200	/* VDD voltage 2.1 ~ 2.2 */
#define MMC_VDD_22_23		0x00000400	/* VDD voltage 2.2 ~ 2.3 */
#define MMC_VDD_23_24		0x00000800	/* VDD voltage 2.3 ~ 2.4 */
#define MMC_VDD_24_25		0x00001000	/* VDD voltage 2.4 ~ 2.5 */
#define MMC_VDD_25_26		0x00002000	/* VDD voltage 2.5 ~ 2.6 */
#define MMC_VDD_26_27		0x00004000	/* VDD voltage 2.6 ~ 2.7 */
#define MMC_VDD_27_28		0x00008000	/* VDD voltage 2.7 ~ 2.8 */
#define MMC_VDD_28_29		0x00010000	/* VDD voltage 2.8 ~ 2.9 */
#define MMC_VDD_29_30		0x00020000	/* VDD voltage 2.9 ~ 3.0 */
#define MMC_VDD_30_31		0x00040000	/* VDD voltage 3.0 ~ 3.1 */
#define MMC_VDD_31_32		0x00080000	/* VDD voltage 3.1 ~ 3.2 */
#define MMC_VDD_32_33		0x00100000	/* VDD voltage 3.2 ~ 3.3 */
#define MMC_VDD_33_34		0x00200000	/* VDD voltage 3.3 ~ 3.4 */
#define MMC_VDD_34_35		0x00400000	/* VDD voltage 3.4 ~ 3.5 */
#define MMC_VDD_35_36		0x00800000	/* VDD voltage 3.5 ~ 3.6 */

L
Lee Jones 已提交
311
	u32			caps;		/* Host capabilities */
P
Pierre Ossman 已提交
312 313

#define MMC_CAP_4_BIT_DATA	(1 << 0)	/* Can the host do 4 bit transfers */
314 315 316 317 318
#define MMC_CAP_MMC_HIGHSPEED	(1 << 1)	/* Can do MMC high-speed timing */
#define MMC_CAP_SD_HIGHSPEED	(1 << 2)	/* Can do SD high-speed timing */
#define MMC_CAP_SDIO_IRQ	(1 << 3)	/* Can signal pending SDIO IRQs */
#define MMC_CAP_SPI		(1 << 4)	/* Talks only SPI protocols */
#define MMC_CAP_NEEDS_POLL	(1 << 5)	/* Needs polling for card-detection */
J
Jarkko Lavinen 已提交
319
#define MMC_CAP_8_BIT_DATA	(1 << 6)	/* Can the host do 8 bit transfers */
320
#define MMC_CAP_AGGRESSIVE_PM	(1 << 7)	/* Suspend (e)MMC/SD at idle  */
321
#define MMC_CAP_NONREMOVABLE	(1 << 8)	/* Nonremovable e.g. eMMC */
322
#define MMC_CAP_WAIT_WHILE_BUSY	(1 << 9)	/* Waits while card is busy */
323
#define MMC_CAP_ERASE		(1 << 10)	/* Allow erase/trim commands */
U
Ulf Hansson 已提交
324 325 326 327 328 329 330 331 332 333
#define MMC_CAP_3_3V_DDR	(1 << 11)	/* Host supports eMMC DDR 3.3V */
#define MMC_CAP_1_8V_DDR	(1 << 12)	/* Host supports eMMC DDR 1.8V */
#define MMC_CAP_1_2V_DDR	(1 << 13)	/* Host supports eMMC DDR 1.2V */
#define MMC_CAP_POWER_OFF_CARD	(1 << 14)	/* Can power off after boot */
#define MMC_CAP_BUS_WIDTH_TEST	(1 << 15)	/* CMD14/CMD19 bus width ok */
#define MMC_CAP_UHS_SDR12	(1 << 16)	/* Host supports UHS SDR12 mode */
#define MMC_CAP_UHS_SDR25	(1 << 17)	/* Host supports UHS SDR25 mode */
#define MMC_CAP_UHS_SDR50	(1 << 18)	/* Host supports UHS SDR50 mode */
#define MMC_CAP_UHS_SDR104	(1 << 19)	/* Host supports UHS SDR104 mode */
#define MMC_CAP_UHS_DDR50	(1 << 20)	/* Host supports UHS DDR50 mode */
334 335 336
#define MMC_CAP_UHS		(MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | \
				 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | \
				 MMC_CAP_UHS_DDR50)
337
#define MMC_CAP_SYNC_RUNTIME_PM	(1 << 21)	/* Synced runtime PM suspends. */
338 339 340
#define MMC_CAP_DRIVER_TYPE_A	(1 << 23)	/* Host supports Driver Type A */
#define MMC_CAP_DRIVER_TYPE_C	(1 << 24)	/* Host supports Driver Type C */
#define MMC_CAP_DRIVER_TYPE_D	(1 << 25)	/* Host supports Driver Type D */
341
#define MMC_CAP_DONE_COMPLETE	(1 << 27)	/* RW reqs can be completed within mmc_request_done() */
342
#define MMC_CAP_CD_WAKE		(1 << 28)	/* Enable card detect wake */
343
#define MMC_CAP_CMD_DURING_TFR	(1 << 29)	/* Commands during data transfer */
344
#define MMC_CAP_CMD23		(1 << 30)	/* CMD23 supported. */
345
#define MMC_CAP_HW_RESET	(1 << 31)	/* Hardware reset */
P
Pierre Ossman 已提交
346

L
Lee Jones 已提交
347
	u32			caps2;		/* More host capabilities */
348 349

#define MMC_CAP2_BOOTPART_NOACC	(1 << 0)	/* Boot partition no access */
350
#define MMC_CAP2_FULL_PWR_CYCLE	(1 << 2)	/* Can do full power cycle */
351 352 353 354
#define MMC_CAP2_HS200_1_8V_SDR	(1 << 5)        /* can support */
#define MMC_CAP2_HS200_1_2V_SDR	(1 << 6)        /* can support */
#define MMC_CAP2_HS200		(MMC_CAP2_HS200_1_8V_SDR | \
				 MMC_CAP2_HS200_1_2V_SDR)
355 356
#define MMC_CAP2_CD_ACTIVE_HIGH	(1 << 10)	/* Card-detect signal active high */
#define MMC_CAP2_RO_ACTIVE_HIGH	(1 << 11)	/* Write-protect signal active high */
357
#define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14)	/* Don't power up before scan */
358 359 360 361
#define MMC_CAP2_HS400_1_8V	(1 << 15)	/* Can support HS400 1.8V */
#define MMC_CAP2_HS400_1_2V	(1 << 16)	/* Can support HS400 1.2V */
#define MMC_CAP2_HS400		(MMC_CAP2_HS400_1_8V | \
				 MMC_CAP2_HS400_1_2V)
362
#define MMC_CAP2_HSX00_1_8V	(MMC_CAP2_HS200_1_8V_SDR | MMC_CAP2_HS400_1_8V)
363
#define MMC_CAP2_HSX00_1_2V	(MMC_CAP2_HS200_1_2V_SDR | MMC_CAP2_HS400_1_2V)
364
#define MMC_CAP2_SDIO_IRQ_NOTHREAD (1 << 17)
365
#define MMC_CAP2_NO_WRITE_PROTECT (1 << 18)	/* No physical write protect pin, assume that card is always read-write */
366
#define MMC_CAP2_NO_SDIO	(1 << 19)	/* Do not send SDIO commands during initialization */
367
#define MMC_CAP2_HS400_ES	(1 << 20)	/* Host supports enhanced strobe */
368
#define MMC_CAP2_NO_SD		(1 << 21)	/* Do not send SD commands during initialization */
369
#define MMC_CAP2_NO_MMC		(1 << 22)	/* Do not send (e)MMC commands during initialization */
A
Adrian Hunter 已提交
370 371
#define MMC_CAP2_CQE		(1 << 23)	/* Has eMMC command queue engine */
#define MMC_CAP2_CQE_DCMD	(1 << 24)	/* CQE can issue a direct command */
372
#define MMC_CAP2_AVOID_3_3V	(1 << 25)	/* Host must negotiate down from 3.3V */
373

374 375
	int			fixed_drv_type;	/* fixed driver type for non-removable media */

376 377
	mmc_pm_flag_t		pm_caps;	/* supported pm features */

L
Linus Torvalds 已提交
378 379
	/* host specific block data */
	unsigned int		max_seg_size;	/* see blk_queue_max_segment_size */
380
	unsigned short		max_segs;	/* see blk_queue_max_segments */
L
Linus Torvalds 已提交
381
	unsigned short		unused;
382
	unsigned int		max_req_size;	/* maximum number of bytes in one req */
383
	unsigned int		max_blk_size;	/* maximum size of one mmc block */
384
	unsigned int		max_blk_count;	/* maximum number of blocks in one req */
385
	unsigned int		max_busy_timeout; /* max busy timeout in ms */
L
Linus Torvalds 已提交
386 387

	/* private data */
P
Pierre Ossman 已提交
388 389
	spinlock_t		lock;		/* lock for claim and bus ops */

L
Linus Torvalds 已提交
390 391
	struct mmc_ios		ios;		/* current io bus settings */

D
David Brownell 已提交
392 393 394 395
	/* group bitfields together to minimize padding */
	unsigned int		use_spi_crc:1;
	unsigned int		claimed:1;	/* host exclusively claimed */
	unsigned int		bus_dead:1;	/* bus has been released */
396 397 398
	unsigned int		can_retune:1;	/* re-tuning can be used */
	unsigned int		doing_retune:1;	/* re-tuning in progress */
	unsigned int		retune_now:1;	/* do re-tuning at next req */
399
	unsigned int		retune_paused:1; /* re-tuning is temporarily disabled */
400
	unsigned int		use_blk_mq:1;	/* use blk-mq */
D
David Brownell 已提交
401

402
	int			rescan_disable;	/* disable card detection */
403
	int			rescan_entered;	/* used with nonremovable devices */
404

405 406 407 408 409
	int			need_retune;	/* re-tuning is needed */
	int			hold_retune;	/* hold off re-tuning */
	unsigned int		retune_period;	/* re-tuning period in secs */
	struct timer_list	retune_timer;	/* for periodic re-tuning */

410 411
	bool			trigger_card_event; /* card_event necessary */

P
Pierre Ossman 已提交
412
	struct mmc_card		*card;		/* device attached to this host */
L
Linus Torvalds 已提交
413 414

	wait_queue_head_t	wq;
415
	struct mmc_ctx		*claimer;	/* context that has host claimed */
416
	int			claim_cnt;	/* "claim" nesting count */
417
	struct mmc_ctx		default_ctx;	/* default context */
P
Pierre Ossman 已提交
418

D
David Howells 已提交
419
	struct delayed_work	detect;
420
	int			detect_change;	/* card detect flag */
421
	struct mmc_slot		slot;
422

P
Pierre Ossman 已提交
423 424 425
	const struct mmc_bus_ops *bus_ops;	/* current bus driver */
	unsigned int		bus_refs;	/* reference counter */

426 427
	unsigned int		sdio_irqs;
	struct task_struct	*sdio_irq_thread;
428
	struct delayed_work	sdio_irq_work;
429
	bool			sdio_irq_pending;
430 431
	atomic_t		sdio_irq_thread_abort;

432 433
	mmc_pm_flag_t		pm_flags;	/* requested pm features */

P
Pierre Ossman 已提交
434 435
	struct led_trigger	*led;		/* activity led */

436 437 438
#ifdef CONFIG_REGULATOR
	bool			regulator_enabled; /* regulator state */
#endif
439
	struct mmc_supply	supply;
440

441 442
	struct dentry		*debugfs_root;

443 444 445
	/* Ongoing data transfer that allows commands during transfer */
	struct mmc_request	*ongoing_mrq;

P
Per Forlin 已提交
446 447 448 449
#ifdef CONFIG_FAIL_MMC_REQUEST
	struct fault_attr	fail_mmc_request;
#endif

450 451
	unsigned int		actual_clock;	/* Actual HC clock rate */

452 453
	unsigned int		slotno;	/* used for sdio acpi binding */

454 455 456
	int			dsr_req;	/* DSR value is valid */
	u32			dsr;	/* optional driver stage (DSR) value */

A
Adrian Hunter 已提交
457 458 459 460 461 462 463
	/* Command Queue Engine (CQE) support */
	const struct mmc_cqe_ops *cqe_ops;
	void			*cqe_private;
	int			cqe_qdepth;
	bool			cqe_enabled;
	bool			cqe_on;

464
	unsigned long		private[0] ____cacheline_aligned;
L
Linus Torvalds 已提交
465 466
};

467 468
struct device_node;

469 470 471 472
struct mmc_host *mmc_alloc_host(int extra, struct device *);
int mmc_add_host(struct mmc_host *);
void mmc_remove_host(struct mmc_host *);
void mmc_free_host(struct mmc_host *);
473
int mmc_of_parse(struct mmc_host *host);
474
int mmc_of_parse_voltage(struct device_node *np, u32 *mask);
L
Linus Torvalds 已提交
475

476 477 478 479 480
static inline void *mmc_priv(struct mmc_host *host)
{
	return (void *)host->private;
}

481 482 483 484 485
static inline struct mmc_host *mmc_from_priv(void *priv)
{
	return container_of(priv, struct mmc_host, private);
}

D
David Brownell 已提交
486 487
#define mmc_host_is_spi(host)	((host)->caps & MMC_CAP_SPI)

488
#define mmc_dev(x)	((x)->parent)
P
Pierre Ossman 已提交
489
#define mmc_classdev(x)	(&(x)->class_dev)
490
#define mmc_hostname(x)	(dev_name(&(x)->class_dev))
L
Linus Torvalds 已提交
491

492 493
void mmc_detect_change(struct mmc_host *, unsigned long delay);
void mmc_request_done(struct mmc_host *, struct mmc_request *);
494
void mmc_command_done(struct mmc_host *host, struct mmc_request *mrq);
L
Linus Torvalds 已提交
495

496 497
void mmc_cqe_request_done(struct mmc_host *host, struct mmc_request *mrq);

498 499 500
static inline void mmc_signal_sdio_irq(struct mmc_host *host)
{
	host->ops->enable_sdio_irq(host, 0);
501
	host->sdio_irq_pending = true;
502 503
	if (host->sdio_irq_thread)
		wake_up_process(host->sdio_irq_thread);
504 505
}

506
void sdio_run_irqs(struct mmc_host *host);
507
void sdio_signal_irq(struct mmc_host *host);
508

509 510 511 512
#ifdef CONFIG_REGULATOR
int mmc_regulator_set_ocr(struct mmc_host *mmc,
			struct regulator *supply,
			unsigned short vdd_bit);
513
int mmc_regulator_set_vqmmc(struct mmc_host *mmc, struct mmc_ios *ios);
514 515 516 517 518 519 520
#else
static inline int mmc_regulator_set_ocr(struct mmc_host *mmc,
				 struct regulator *supply,
				 unsigned short vdd_bit)
{
	return 0;
}
521 522 523 524 525 526

static inline int mmc_regulator_set_vqmmc(struct mmc_host *mmc,
					  struct mmc_ios *ios)
{
	return -EINVAL;
}
527
#endif
D
David Brownell 已提交
528

529 530
int mmc_regulator_get_supply(struct mmc_host *mmc);

531 532
static inline int mmc_card_is_removable(struct mmc_host *host)
{
533
	return !(host->caps & MMC_CAP_NONREMOVABLE);
534 535
}

536
static inline int mmc_card_keep_power(struct mmc_host *host)
537 538 539 540
{
	return host->pm_flags & MMC_PM_KEEP_POWER;
}

541 542 543 544
static inline int mmc_card_wake_sdio_irq(struct mmc_host *host)
{
	return host->pm_flags & MMC_PM_WAKE_SDIO_IRQ;
}
545

546
/* TODO: Move to private header */
547 548 549 550 551 552
static inline int mmc_card_hs(struct mmc_card *card)
{
	return card->host->ios.timing == MMC_TIMING_SD_HS ||
		card->host->ios.timing == MMC_TIMING_MMC_HS;
}

553
/* TODO: Move to private header */
554 555 556 557 558 559
static inline int mmc_card_uhs(struct mmc_card *card)
{
	return card->host->ios.timing >= MMC_TIMING_UHS_SDR12 &&
		card->host->ios.timing <= MMC_TIMING_UHS_DDR50;
}

560 561 562 563 564 565 566 567
void mmc_retune_timer_stop(struct mmc_host *host);

static inline void mmc_retune_needed(struct mmc_host *host)
{
	if (host->can_retune)
		host->need_retune = 1;
}

568 569 570 571 572
static inline bool mmc_can_retune(struct mmc_host *host)
{
	return host->can_retune == 1;
}

573 574 575 576 577
static inline bool mmc_doing_retune(struct mmc_host *host)
{
	return host->doing_retune == 1;
}

H
Heiner Kallweit 已提交
578 579 580 581 582
static inline enum dma_data_direction mmc_get_dma_dir(struct mmc_data *data)
{
	return data->flags & MMC_DATA_WRITE ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
}

583 584
int mmc_send_tuning(struct mmc_host *host, u32 opcode, int *cmd_error);
int mmc_abort_tuning(struct mmc_host *host, u32 opcode);
585

586
#endif /* LINUX_MMC_HOST_H */