home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / mmc / host.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  6.2 KB  |  197 lines

  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/leds.h>
  14.  
  15. #include <linux/mmc/core.h>
  16.  
  17. struct mmc_ios {
  18.     unsigned int    clock;            /* clock rate */
  19.     unsigned short    vdd;
  20.  
  21. /* vdd stores the bit number of the selected voltage range from below. */
  22.  
  23.     unsigned char    bus_mode;        /* command output mode */
  24.  
  25. #define MMC_BUSMODE_OPENDRAIN    1
  26. #define MMC_BUSMODE_PUSHPULL    2
  27.  
  28.     unsigned char    chip_select;        /* SPI chip select */
  29.  
  30. #define MMC_CS_DONTCARE        0
  31. #define MMC_CS_HIGH        1
  32. #define MMC_CS_LOW        2
  33.  
  34.     unsigned char    power_mode;        /* power supply mode */
  35.  
  36. #define MMC_POWER_OFF        0
  37. #define MMC_POWER_UP        1
  38. #define MMC_POWER_ON        2
  39.  
  40.     unsigned char    bus_width;        /* data bus width */
  41.  
  42. #define MMC_BUS_WIDTH_1        0
  43. #define MMC_BUS_WIDTH_4        2
  44. #define MMC_BUS_WIDTH_8        3
  45.  
  46.     unsigned char    timing;            /* timing specification used */
  47.  
  48. #define MMC_TIMING_LEGACY    0
  49. #define MMC_TIMING_MMC_HS    1
  50. #define MMC_TIMING_SD_HS    2
  51. };
  52.  
  53. struct mmc_host_ops {
  54.     void    (*request)(struct mmc_host *host, struct mmc_request *req);
  55.     /*
  56.      * Avoid calling these three functions too often or in a "fast path",
  57.      * since underlaying controller might implement them in an expensive
  58.      * and/or slow way.
  59.      *
  60.      * Also note that these functions might sleep, so don't call them
  61.      * in the atomic contexts!
  62.      *
  63.      * Return values for the get_ro callback should be:
  64.      *   0 for a read/write card
  65.      *   1 for a read-only card
  66.      *   -ENOSYS when not supported (equal to NULL callback)
  67.      *   or a negative errno value when something bad happened
  68.      *
  69.      * Return values for the get_cd callback should be:
  70.      *   0 for a absent card
  71.      *   1 for a present card
  72.      *   -ENOSYS when not supported (equal to NULL callback)
  73.      *   or a negative errno value when something bad happened
  74.      */
  75.     void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
  76.     int    (*get_ro)(struct mmc_host *host);
  77.     int    (*get_cd)(struct mmc_host *host);
  78.  
  79.     void    (*enable_sdio_irq)(struct mmc_host *host, int enable);
  80. };
  81.  
  82. struct mmc_card;
  83. struct device;
  84.  
  85. struct mmc_host {
  86.     struct device        *parent;
  87.     struct device        class_dev;
  88.     int            index;
  89.     const struct mmc_host_ops *ops;
  90.     unsigned int        f_min;
  91.     unsigned int        f_max;
  92.     u32            ocr_avail;
  93.  
  94. #define MMC_VDD_165_195        0x00000080    /* VDD voltage 1.65 - 1.95 */
  95. #define MMC_VDD_20_21        0x00000100    /* VDD voltage 2.0 ~ 2.1 */
  96. #define MMC_VDD_21_22        0x00000200    /* VDD voltage 2.1 ~ 2.2 */
  97. #define MMC_VDD_22_23        0x00000400    /* VDD voltage 2.2 ~ 2.3 */
  98. #define MMC_VDD_23_24        0x00000800    /* VDD voltage 2.3 ~ 2.4 */
  99. #define MMC_VDD_24_25        0x00001000    /* VDD voltage 2.4 ~ 2.5 */
  100. #define MMC_VDD_25_26        0x00002000    /* VDD voltage 2.5 ~ 2.6 */
  101. #define MMC_VDD_26_27        0x00004000    /* VDD voltage 2.6 ~ 2.7 */
  102. #define MMC_VDD_27_28        0x00008000    /* VDD voltage 2.7 ~ 2.8 */
  103. #define MMC_VDD_28_29        0x00010000    /* VDD voltage 2.8 ~ 2.9 */
  104. #define MMC_VDD_29_30        0x00020000    /* VDD voltage 2.9 ~ 3.0 */
  105. #define MMC_VDD_30_31        0x00040000    /* VDD voltage 3.0 ~ 3.1 */
  106. #define MMC_VDD_31_32        0x00080000    /* VDD voltage 3.1 ~ 3.2 */
  107. #define MMC_VDD_32_33        0x00100000    /* VDD voltage 3.2 ~ 3.3 */
  108. #define MMC_VDD_33_34        0x00200000    /* VDD voltage 3.3 ~ 3.4 */
  109. #define MMC_VDD_34_35        0x00400000    /* VDD voltage 3.4 ~ 3.5 */
  110. #define MMC_VDD_35_36        0x00800000    /* VDD voltage 3.5 ~ 3.6 */
  111.  
  112.     unsigned long        caps;        /* Host capabilities */
  113.  
  114. #define MMC_CAP_4_BIT_DATA    (1 << 0)    /* Can the host do 4 bit transfers */
  115. #define MMC_CAP_MMC_HIGHSPEED    (1 << 1)    /* Can do MMC high-speed timing */
  116. #define MMC_CAP_SD_HIGHSPEED    (1 << 2)    /* Can do SD high-speed timing */
  117. #define MMC_CAP_SDIO_IRQ    (1 << 3)    /* Can signal pending SDIO IRQs */
  118. #define MMC_CAP_SPI        (1 << 4)    /* Talks only SPI protocols */
  119. #define MMC_CAP_NEEDS_POLL    (1 << 5)    /* Needs polling for card-detection */
  120. #define MMC_CAP_8_BIT_DATA    (1 << 6)    /* Can the host do 8 bit transfers */
  121.  
  122.     /* host specific block data */
  123.     unsigned int        max_seg_size;    /* see blk_queue_max_segment_size */
  124.     unsigned short        max_hw_segs;    /* see blk_queue_max_hw_segments */
  125.     unsigned short        max_phys_segs;    /* see blk_queue_max_phys_segments */
  126.     unsigned short        unused;
  127.     unsigned int        max_req_size;    /* maximum number of bytes in one req */
  128.     unsigned int        max_blk_size;    /* maximum size of one mmc block */
  129.     unsigned int        max_blk_count;    /* maximum number of blocks in one req */
  130.  
  131.     /* private data */
  132.     spinlock_t        lock;        /* lock for claim and bus ops */
  133.  
  134.     struct mmc_ios        ios;        /* current io bus settings */
  135.     u32            ocr;        /* the current OCR setting */
  136.  
  137.     /* group bitfields together to minimize padding */
  138.     unsigned int        use_spi_crc:1;
  139.     unsigned int        claimed:1;    /* host exclusively claimed */
  140.     unsigned int        bus_dead:1;    /* bus has been released */
  141. #ifdef CONFIG_MMC_DEBUG
  142.     unsigned int        removed:1;    /* host is being removed */
  143. #endif
  144.  
  145.     struct mmc_card        *card;        /* device attached to this host */
  146.  
  147.     wait_queue_head_t    wq;
  148.  
  149.     struct delayed_work    detect;
  150.  
  151.     const struct mmc_bus_ops *bus_ops;    /* current bus driver */
  152.     unsigned int        bus_refs;    /* reference counter */
  153.  
  154.     unsigned int        sdio_irqs;
  155.     struct task_struct    *sdio_irq_thread;
  156.     atomic_t        sdio_irq_thread_abort;
  157.  
  158. #ifdef CONFIG_LEDS_TRIGGERS
  159.     struct led_trigger    *led;        /* activity led */
  160. #endif
  161.  
  162.     struct dentry        *debugfs_root;
  163.  
  164.     unsigned long        private[0] ____cacheline_aligned;
  165. };
  166.  
  167. extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
  168. extern int mmc_add_host(struct mmc_host *);
  169. extern void mmc_remove_host(struct mmc_host *);
  170. extern void mmc_free_host(struct mmc_host *);
  171.  
  172. static inline void *mmc_priv(struct mmc_host *host)
  173. {
  174.     return (void *)host->private;
  175. }
  176.  
  177. #define mmc_host_is_spi(host)    ((host)->caps & MMC_CAP_SPI)
  178.  
  179. #define mmc_dev(x)    ((x)->parent)
  180. #define mmc_classdev(x)    (&(x)->class_dev)
  181. #define mmc_hostname(x)    (dev_name(&(x)->class_dev))
  182.  
  183. extern int mmc_suspend_host(struct mmc_host *, pm_message_t);
  184. extern int mmc_resume_host(struct mmc_host *);
  185.  
  186. extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
  187. extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
  188.  
  189. static inline void mmc_signal_sdio_irq(struct mmc_host *host)
  190. {
  191.     host->ops->enable_sdio_irq(host, 0);
  192.     wake_up_process(host->sdio_irq_thread);
  193. }
  194.  
  195. #endif
  196.  
  197.