1 /* 2 * linux/include/linux/mmc/host.h 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * Host driver specific definitions. 9 */ 10 #ifndef LINUX_MMC_HOST_H 11 #define LINUX_MMC_HOST_H 12 13 #include <linux/mmc/mmc.h> 14 15 struct mmc_ios { 16 unsigned int clock; /* clock rate */ 17 unsigned short vdd; 18 19 #define MMC_VDD_150 0 20 #define MMC_VDD_155 1 21 #define MMC_VDD_160 2 22 #define MMC_VDD_165 3 23 #define MMC_VDD_170 4 24 #define MMC_VDD_180 5 25 #define MMC_VDD_190 6 26 #define MMC_VDD_200 7 27 #define MMC_VDD_210 8 28 #define MMC_VDD_220 9 29 #define MMC_VDD_230 10 30 #define MMC_VDD_240 11 31 #define MMC_VDD_250 12 32 #define MMC_VDD_260 13 33 #define MMC_VDD_270 14 34 #define MMC_VDD_280 15 35 #define MMC_VDD_290 16 36 #define MMC_VDD_300 17 37 #define MMC_VDD_310 18 38 #define MMC_VDD_320 19 39 #define MMC_VDD_330 20 40 #define MMC_VDD_340 21 41 #define MMC_VDD_350 22 42 #define MMC_VDD_360 23 43 44 unsigned char bus_mode; /* command output mode */ 45 46 #define MMC_BUSMODE_OPENDRAIN 1 47 #define MMC_BUSMODE_PUSHPULL 2 48 49 unsigned char chip_select; /* SPI chip select */ 50 51 #define MMC_CS_DONTCARE 0 52 #define MMC_CS_HIGH 1 53 #define MMC_CS_LOW 2 54 55 unsigned char power_mode; /* power supply mode */ 56 57 #define MMC_POWER_OFF 0 58 #define MMC_POWER_UP 1 59 #define MMC_POWER_ON 2 60 61 unsigned char bus_width; /* data bus width */ 62 63 #define MMC_BUS_WIDTH_1 0 64 #define MMC_BUS_WIDTH_4 2 65 66 unsigned char timing; /* timing specification used */ 67 68 #define MMC_TIMING_LEGACY 0 69 #define MMC_TIMING_MMC_HS 1 70 #define MMC_TIMING_SD_HS 2 71 }; 72 73 struct mmc_host_ops { 74 void (*request)(struct mmc_host *host, struct mmc_request *req); 75 void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); 76 int (*get_ro)(struct mmc_host *host); 77 }; 78 79 struct mmc_card; 80 struct device; 81 82 struct mmc_host { 83 struct device *parent; 84 struct device class_dev; 85 int index; 86 const struct mmc_host_ops *ops; 87 unsigned int f_min; 88 unsigned int f_max; 89 u32 ocr_avail; 90 91 unsigned long caps; /* Host capabilities */ 92 93 #define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */ 94 #define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */ 95 #define MMC_CAP_BYTEBLOCK (1 << 2) /* Can do non-log2 block sizes */ 96 #define MMC_CAP_MMC_HIGHSPEED (1 << 3) /* Can do MMC high-speed timing */ 97 #define MMC_CAP_SD_HIGHSPEED (1 << 4) /* Can do SD high-speed timing */ 98 99 /* host specific block data */ 100 unsigned int max_seg_size; /* see blk_queue_max_segment_size */ 101 unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */ 102 unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */ 103 unsigned short unused; 104 unsigned int max_req_size; /* maximum number of bytes in one req */ 105 unsigned int max_blk_size; /* maximum size of one mmc block */ 106 unsigned int max_blk_count; /* maximum number of blocks in one req */ 107 108 /* private data */ 109 struct mmc_ios ios; /* current io bus settings */ 110 u32 ocr; /* the current OCR setting */ 111 112 unsigned int mode; /* current card mode of host */ 113 #define MMC_MODE_MMC 0 114 #define MMC_MODE_SD 1 115 116 struct list_head cards; /* devices attached to this host */ 117 118 wait_queue_head_t wq; 119 spinlock_t lock; /* claimed lock */ 120 unsigned int claimed:1; /* host exclusively claimed */ 121 122 struct mmc_card *card_selected; /* the selected MMC card */ 123 124 struct delayed_work detect; 125 126 unsigned long private[0] ____cacheline_aligned; 127 }; 128 129 extern struct mmc_host *mmc_alloc_host(int extra, struct device *); 130 extern int mmc_add_host(struct mmc_host *); 131 extern void mmc_remove_host(struct mmc_host *); 132 extern void mmc_free_host(struct mmc_host *); 133 134 static inline void *mmc_priv(struct mmc_host *host) 135 { 136 return (void *)host->private; 137 } 138 139 #define mmc_dev(x) ((x)->parent) 140 #define mmc_classdev(x) (&(x)->class_dev) 141 #define mmc_hostname(x) ((x)->class_dev.bus_id) 142 143 extern int mmc_suspend_host(struct mmc_host *, pm_message_t); 144 extern int mmc_resume_host(struct mmc_host *); 145 146 extern void mmc_detect_change(struct mmc_host *, unsigned long delay); 147 extern void mmc_request_done(struct mmc_host *, struct mmc_request *); 148 149 #endif 150 151