1
2
3
4
5
6
7
8
9
10#ifndef LINUX_MMC_HOST_H
11#define LINUX_MMC_HOST_H
12
13#include <linux/leds.h>
14#include <linux/mutex.h>
15#include <linux/timer.h>
16#include <linux/sched.h>
17#include <linux/device.h>
18#include <linux/fault-inject.h>
19
20#include <linux/mmc/core.h>
21#include <linux/mmc/card.h>
22#include <linux/mmc/mmc.h>
23#include <linux/mmc/pm.h>
24
25struct mmc_ios {
26 unsigned int clock;
27 unsigned short vdd;
28
29
30
31 unsigned char bus_mode;
32
33#define MMC_BUSMODE_OPENDRAIN 1
34#define MMC_BUSMODE_PUSHPULL 2
35
36 unsigned char chip_select;
37
38#define MMC_CS_DONTCARE 0
39#define MMC_CS_HIGH 1
40#define MMC_CS_LOW 2
41
42 unsigned char power_mode;
43
44#define MMC_POWER_OFF 0
45#define MMC_POWER_UP 1
46#define MMC_POWER_ON 2
47#define MMC_POWER_UNDEFINED 3
48
49 unsigned char bus_width;
50
51#define MMC_BUS_WIDTH_1 0
52#define MMC_BUS_WIDTH_4 2
53#define MMC_BUS_WIDTH_8 3
54
55 unsigned char timing;
56
57#define MMC_TIMING_LEGACY 0
58#define MMC_TIMING_MMC_HS 1
59#define MMC_TIMING_SD_HS 2
60#define MMC_TIMING_UHS_SDR12 3
61#define MMC_TIMING_UHS_SDR25 4
62#define MMC_TIMING_UHS_SDR50 5
63#define MMC_TIMING_UHS_SDR104 6
64#define MMC_TIMING_UHS_DDR50 7
65#define MMC_TIMING_MMC_DDR52 8
66#define MMC_TIMING_MMC_HS200 9
67#define MMC_TIMING_MMC_HS400 10
68
69 unsigned char signal_voltage;
70
71#define MMC_SIGNAL_VOLTAGE_330 0
72#define MMC_SIGNAL_VOLTAGE_180 1
73#define MMC_SIGNAL_VOLTAGE_120 2
74
75 unsigned char drv_type;
76
77#define MMC_SET_DRIVER_TYPE_B 0
78#define MMC_SET_DRIVER_TYPE_A 1
79#define MMC_SET_DRIVER_TYPE_C 2
80#define MMC_SET_DRIVER_TYPE_D 3
81
82 bool enhanced_strobe;
83};
84
85struct mmc_host_ops {
86
87
88
89
90
91
92
93
94 void (*post_req)(struct mmc_host *host, struct mmc_request *req,
95 int err);
96 void (*pre_req)(struct mmc_host *host, struct mmc_request *req);
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 void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
114
115
116
117
118
119
120
121
122 int (*get_ro)(struct mmc_host *host);
123
124
125
126
127
128
129
130
131 int (*get_cd)(struct mmc_host *host);
132
133 void (*enable_sdio_irq)(struct mmc_host *host, int enable);
134 void (*ack_sdio_irq)(struct mmc_host *host);
135
136
137 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 int (*card_busy)(struct mmc_host *host);
143
144
145 int (*execute_tuning)(struct mmc_host *host, u32 opcode);
146
147
148 int (*prepare_hs400_tuning)(struct mmc_host *host, struct mmc_ios *ios);
149
150 void (*hs400_enhanced_strobe)(struct mmc_host *host,
151 struct mmc_ios *ios);
152 int (*select_drive_strength)(struct mmc_card *card,
153 unsigned int max_dtr, int host_drv,
154 int card_drv, int *drv_type);
155 void (*hw_reset)(struct mmc_host *host);
156 void (*card_event)(struct mmc_host *host);
157
158
159
160
161
162 int (*multi_io_quirk)(struct mmc_card *card,
163 unsigned int direction, int blk_size);
164};
165
166struct mmc_card;
167struct device;
168
169struct mmc_cqe_ops {
170
171 int (*cqe_enable)(struct mmc_host *host, struct mmc_card *card);
172
173 void (*cqe_disable)(struct mmc_host *host);
174
175
176
177
178 int (*cqe_request)(struct mmc_host *host, struct mmc_request *mrq);
179
180 void (*cqe_post_req)(struct mmc_host *host, struct mmc_request *mrq);
181
182
183
184
185
186 void (*cqe_off)(struct mmc_host *host);
187
188
189
190
191 int (*cqe_wait_for_idle)(struct mmc_host *host);
192
193
194
195
196
197 bool (*cqe_timeout)(struct mmc_host *host, struct mmc_request *mrq,
198 bool *recovery_needed);
199
200
201
202
203 void (*cqe_recovery_start)(struct mmc_host *host);
204
205
206
207
208
209
210 void (*cqe_recovery_finish)(struct mmc_host *host);
211};
212
213struct mmc_async_req {
214
215 struct mmc_request *mrq;
216
217
218
219
220 enum mmc_blk_status (*err_check)(struct mmc_card *, struct mmc_async_req *);
221};
222
223
224
225
226
227
228
229
230
231
232
233
234struct mmc_slot {
235 int cd_irq;
236 bool cd_wake_enabled;
237 void *handler_priv;
238};
239
240
241
242
243
244
245
246
247struct mmc_context_info {
248 bool is_done_rcv;
249 bool is_new_req;
250 bool is_waiting_last_req;
251 wait_queue_head_t wait;
252};
253
254struct regulator;
255
256struct mmc_supply {
257 struct regulator *vmmc;
258 struct regulator *vqmmc;
259};
260
261struct mmc_ctx {
262 struct task_struct *task;
263};
264
265struct mmc_host {
266 struct device *parent;
267 struct device class_dev;
268 int index;
269 const struct mmc_host_ops *ops;
270 unsigned int f_min;
271 unsigned int f_max;
272 unsigned int f_init;
273 u32 ocr_avail;
274 u32 ocr_avail_sdio;
275 u32 ocr_avail_sd;
276 u32 ocr_avail_mmc;
277#ifdef CONFIG_PM_SLEEP
278 struct notifier_block pm_notify;
279#endif
280 u32 max_current_330;
281 u32 max_current_300;
282 u32 max_current_180;
283
284#define MMC_VDD_165_195 0x00000080
285#define MMC_VDD_20_21 0x00000100
286#define MMC_VDD_21_22 0x00000200
287#define MMC_VDD_22_23 0x00000400
288#define MMC_VDD_23_24 0x00000800
289#define MMC_VDD_24_25 0x00001000
290#define MMC_VDD_25_26 0x00002000
291#define MMC_VDD_26_27 0x00004000
292#define MMC_VDD_27_28 0x00008000
293#define MMC_VDD_28_29 0x00010000
294#define MMC_VDD_29_30 0x00020000
295#define MMC_VDD_30_31 0x00040000
296#define MMC_VDD_31_32 0x00080000
297#define MMC_VDD_32_33 0x00100000
298#define MMC_VDD_33_34 0x00200000
299#define MMC_VDD_34_35 0x00400000
300#define MMC_VDD_35_36 0x00800000
301
302 u32 caps;
303
304#define MMC_CAP_4_BIT_DATA (1 << 0)
305#define MMC_CAP_MMC_HIGHSPEED (1 << 1)
306#define MMC_CAP_SD_HIGHSPEED (1 << 2)
307#define MMC_CAP_SDIO_IRQ (1 << 3)
308#define MMC_CAP_SPI (1 << 4)
309#define MMC_CAP_NEEDS_POLL (1 << 5)
310#define MMC_CAP_8_BIT_DATA (1 << 6)
311#define MMC_CAP_AGGRESSIVE_PM (1 << 7)
312#define MMC_CAP_NONREMOVABLE (1 << 8)
313#define MMC_CAP_WAIT_WHILE_BUSY (1 << 9)
314#define MMC_CAP_ERASE (1 << 10)
315#define MMC_CAP_3_3V_DDR (1 << 11)
316#define MMC_CAP_1_8V_DDR (1 << 12)
317#define MMC_CAP_1_2V_DDR (1 << 13)
318#define MMC_CAP_POWER_OFF_CARD (1 << 14)
319#define MMC_CAP_BUS_WIDTH_TEST (1 << 15)
320#define MMC_CAP_UHS_SDR12 (1 << 16)
321#define MMC_CAP_UHS_SDR25 (1 << 17)
322#define MMC_CAP_UHS_SDR50 (1 << 18)
323#define MMC_CAP_UHS_SDR104 (1 << 19)
324#define MMC_CAP_UHS_DDR50 (1 << 20)
325
326#define MMC_CAP_DRIVER_TYPE_A (1 << 23)
327#define MMC_CAP_DRIVER_TYPE_C (1 << 24)
328#define MMC_CAP_DRIVER_TYPE_D (1 << 25)
329#define MMC_CAP_DONE_COMPLETE (1 << 27)
330#define MMC_CAP_CD_WAKE (1 << 28)
331#define MMC_CAP_CMD_DURING_TFR (1 << 29)
332#define MMC_CAP_CMD23 (1 << 30)
333#define MMC_CAP_HW_RESET (1 << 31)
334
335 u32 caps2;
336
337#define MMC_CAP2_BOOTPART_NOACC (1 << 0)
338#define MMC_CAP2_FULL_PWR_CYCLE (1 << 2)
339#define MMC_CAP2_HS200_1_8V_SDR (1 << 5)
340#define MMC_CAP2_HS200_1_2V_SDR (1 << 6)
341#define MMC_CAP2_HS200 (MMC_CAP2_HS200_1_8V_SDR | \
342 MMC_CAP2_HS200_1_2V_SDR)
343#define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10)
344#define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11)
345#define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14)
346#define MMC_CAP2_HS400_1_8V (1 << 15)
347#define MMC_CAP2_HS400_1_2V (1 << 16)
348#define MMC_CAP2_HS400 (MMC_CAP2_HS400_1_8V | \
349 MMC_CAP2_HS400_1_2V)
350#define MMC_CAP2_HSX00_1_2V (MMC_CAP2_HS200_1_2V_SDR | MMC_CAP2_HS400_1_2V)
351#define MMC_CAP2_SDIO_IRQ_NOTHREAD (1 << 17)
352#define MMC_CAP2_NO_WRITE_PROTECT (1 << 18)
353#define MMC_CAP2_NO_SDIO (1 << 19)
354#define MMC_CAP2_HS400_ES (1 << 20)
355#define MMC_CAP2_NO_SD (1 << 21)
356#define MMC_CAP2_NO_MMC (1 << 22)
357#define MMC_CAP2_CQE (1 << 23)
358#define MMC_CAP2_CQE_DCMD (1 << 24)
359
360 mmc_pm_flag_t pm_caps;
361
362
363 unsigned int max_seg_size;
364 unsigned short max_segs;
365 unsigned short unused;
366 unsigned int max_req_size;
367 unsigned int max_blk_size;
368 unsigned int max_blk_count;
369 unsigned int max_busy_timeout;
370
371
372 spinlock_t lock;
373
374 struct mmc_ios ios;
375
376
377 unsigned int use_spi_crc:1;
378 unsigned int claimed:1;
379 unsigned int bus_dead:1;
380 unsigned int can_retune:1;
381 unsigned int doing_retune:1;
382 unsigned int retune_now:1;
383 unsigned int retune_paused:1;
384 unsigned int use_blk_mq:1;
385
386 int rescan_disable;
387 int rescan_entered;
388
389 int need_retune;
390 int hold_retune;
391 unsigned int retune_period;
392 struct timer_list retune_timer;
393
394 bool trigger_card_event;
395
396 struct mmc_card *card;
397
398 wait_queue_head_t wq;
399 struct mmc_ctx *claimer;
400 int claim_cnt;
401 struct mmc_ctx default_ctx;
402
403 struct delayed_work detect;
404 int detect_change;
405 struct mmc_slot slot;
406
407 const struct mmc_bus_ops *bus_ops;
408 unsigned int bus_refs;
409
410 unsigned int sdio_irqs;
411 struct task_struct *sdio_irq_thread;
412 struct delayed_work sdio_irq_work;
413 bool sdio_irq_pending;
414 atomic_t sdio_irq_thread_abort;
415
416 mmc_pm_flag_t pm_flags;
417
418 struct led_trigger *led;
419
420#ifdef CONFIG_REGULATOR
421 bool regulator_enabled;
422#endif
423 struct mmc_supply supply;
424
425 struct dentry *debugfs_root;
426
427
428 struct mmc_request *ongoing_mrq;
429
430#ifdef CONFIG_FAIL_MMC_REQUEST
431 struct fault_attr fail_mmc_request;
432#endif
433
434 unsigned int actual_clock;
435
436 unsigned int slotno;
437
438 int dsr_req;
439 u32 dsr;
440
441
442 const struct mmc_cqe_ops *cqe_ops;
443 void *cqe_private;
444 int cqe_qdepth;
445 bool cqe_enabled;
446 bool cqe_on;
447
448 unsigned long private[0] ____cacheline_aligned;
449};
450
451struct mmc_host *mmc_alloc_host(int extra, struct device *);
452int mmc_add_host(struct mmc_host *);
453void mmc_remove_host(struct mmc_host *);
454void mmc_free_host(struct mmc_host *);
455int mmc_of_parse(struct mmc_host *host);
456
457static inline void *mmc_priv(struct mmc_host *host)
458{
459 return (void *)host->private;
460}
461
462#define mmc_host_is_spi(host) ((host)->caps & MMC_CAP_SPI)
463
464#define mmc_dev(x) ((x)->parent)
465#define mmc_classdev(x) (&(x)->class_dev)
466#define mmc_hostname(x) (dev_name(&(x)->class_dev))
467
468int mmc_power_save_host(struct mmc_host *host);
469int mmc_power_restore_host(struct mmc_host *host);
470
471void mmc_detect_change(struct mmc_host *, unsigned long delay);
472void mmc_request_done(struct mmc_host *, struct mmc_request *);
473void mmc_command_done(struct mmc_host *host, struct mmc_request *mrq);
474
475void mmc_cqe_request_done(struct mmc_host *host, struct mmc_request *mrq);
476
477static inline void mmc_signal_sdio_irq(struct mmc_host *host)
478{
479 host->ops->enable_sdio_irq(host, 0);
480 host->sdio_irq_pending = true;
481 if (host->sdio_irq_thread)
482 wake_up_process(host->sdio_irq_thread);
483}
484
485void sdio_run_irqs(struct mmc_host *host);
486void sdio_signal_irq(struct mmc_host *host);
487
488#ifdef CONFIG_REGULATOR
489int mmc_regulator_get_ocrmask(struct regulator *supply);
490int mmc_regulator_set_ocr(struct mmc_host *mmc,
491 struct regulator *supply,
492 unsigned short vdd_bit);
493int mmc_regulator_set_vqmmc(struct mmc_host *mmc, struct mmc_ios *ios);
494#else
495static inline int mmc_regulator_get_ocrmask(struct regulator *supply)
496{
497 return 0;
498}
499
500static inline int mmc_regulator_set_ocr(struct mmc_host *mmc,
501 struct regulator *supply,
502 unsigned short vdd_bit)
503{
504 return 0;
505}
506
507static inline int mmc_regulator_set_vqmmc(struct mmc_host *mmc,
508 struct mmc_ios *ios)
509{
510 return -EINVAL;
511}
512#endif
513
514int mmc_regulator_get_supply(struct mmc_host *mmc);
515
516static inline int mmc_card_is_removable(struct mmc_host *host)
517{
518 return !(host->caps & MMC_CAP_NONREMOVABLE);
519}
520
521static inline int mmc_card_keep_power(struct mmc_host *host)
522{
523 return host->pm_flags & MMC_PM_KEEP_POWER;
524}
525
526static inline int mmc_card_wake_sdio_irq(struct mmc_host *host)
527{
528 return host->pm_flags & MMC_PM_WAKE_SDIO_IRQ;
529}
530
531
532static inline int mmc_card_hs(struct mmc_card *card)
533{
534 return card->host->ios.timing == MMC_TIMING_SD_HS ||
535 card->host->ios.timing == MMC_TIMING_MMC_HS;
536}
537
538
539static inline int mmc_card_uhs(struct mmc_card *card)
540{
541 return card->host->ios.timing >= MMC_TIMING_UHS_SDR12 &&
542 card->host->ios.timing <= MMC_TIMING_UHS_DDR50;
543}
544
545void mmc_retune_timer_stop(struct mmc_host *host);
546
547static inline void mmc_retune_needed(struct mmc_host *host)
548{
549 if (host->can_retune)
550 host->need_retune = 1;
551}
552
553static inline bool mmc_can_retune(struct mmc_host *host)
554{
555 return host->can_retune == 1;
556}
557
558#endif
559