at v2.6.21 4.1 kB view raw
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 15struct 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 73struct 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 79struct mmc_card; 80struct device; 81 82struct 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 129extern struct mmc_host *mmc_alloc_host(int extra, struct device *); 130extern int mmc_add_host(struct mmc_host *); 131extern void mmc_remove_host(struct mmc_host *); 132extern void mmc_free_host(struct mmc_host *); 133 134static 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 143extern int mmc_suspend_host(struct mmc_host *, pm_message_t); 144extern int mmc_resume_host(struct mmc_host *); 145 146extern void mmc_detect_change(struct mmc_host *, unsigned long delay); 147extern void mmc_request_done(struct mmc_host *, struct mmc_request *); 148 149#endif 150