home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / mmc / host.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.4 KB  |  137 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/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.  
  67. struct mmc_host_ops {
  68.     void    (*request)(struct mmc_host *host, struct mmc_request *req);
  69.     void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
  70.     int    (*get_ro)(struct mmc_host *host);
  71. };
  72.  
  73. struct mmc_card;
  74. struct device;
  75.  
  76. struct mmc_host {
  77.     struct device        *dev;
  78.     struct class_device    class_dev;
  79.     int            index;
  80.     struct mmc_host_ops    *ops;
  81.     unsigned int        f_min;
  82.     unsigned int        f_max;
  83.     u32            ocr_avail;
  84.  
  85.     unsigned long        caps;        /* Host capabilities */
  86.  
  87. #define MMC_CAP_4_BIT_DATA    (1 << 0)    /* Can the host do 4 bit transfers */
  88.  
  89.     /* host specific block data */
  90.     unsigned int        max_seg_size;    /* see blk_queue_max_segment_size */
  91.     unsigned short        max_hw_segs;    /* see blk_queue_max_hw_segments */
  92.     unsigned short        max_phys_segs;    /* see blk_queue_max_phys_segments */
  93.     unsigned short        max_sectors;    /* see blk_queue_max_sectors */
  94.     unsigned short        unused;
  95.  
  96.     /* private data */
  97.     struct mmc_ios        ios;        /* current io bus settings */
  98.     u32            ocr;        /* the current OCR setting */
  99.  
  100.     unsigned int        mode;        /* current card mode of host */
  101. #define MMC_MODE_MMC        0
  102. #define MMC_MODE_SD        1
  103.  
  104.     struct list_head    cards;        /* devices attached to this host */
  105.  
  106.     wait_queue_head_t    wq;
  107.     spinlock_t        lock;        /* card_busy lock */
  108.     struct mmc_card        *card_busy;    /* the MMC card claiming host */
  109.     struct mmc_card        *card_selected;    /* the selected MMC card */
  110.  
  111.     struct work_struct    detect;
  112.  
  113.     unsigned long        private[0] ____cacheline_aligned;
  114. };
  115.  
  116. extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
  117. extern int mmc_add_host(struct mmc_host *);
  118. extern void mmc_remove_host(struct mmc_host *);
  119. extern void mmc_free_host(struct mmc_host *);
  120.  
  121. static inline void *mmc_priv(struct mmc_host *host)
  122. {
  123.     return (void *)host->private;
  124. }
  125.  
  126. #define mmc_dev(x)    ((x)->dev)
  127. #define mmc_hostname(x)    ((x)->class_dev.class_id)
  128.  
  129. extern int mmc_suspend_host(struct mmc_host *, pm_message_t);
  130. extern int mmc_resume_host(struct mmc_host *);
  131.  
  132. extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
  133. extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
  134.  
  135. #endif
  136.  
  137.