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 / card.h next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.3 KB  |  114 lines

  1. /*
  2.  *  linux/include/linux/mmc/card.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.  *  Card driver specific definitions.
  9.  */
  10. #ifndef LINUX_MMC_CARD_H
  11. #define LINUX_MMC_CARD_H
  12.  
  13. #include <linux/mmc/mmc.h>
  14.  
  15. struct mmc_cid {
  16.     unsigned int        manfid;
  17.     char            prod_name[8];
  18.     unsigned int        serial;
  19.     unsigned short        oemid;
  20.     unsigned short        year;
  21.     unsigned char        hwrev;
  22.     unsigned char        fwrev;
  23.     unsigned char        month;
  24. };
  25.  
  26. struct mmc_csd {
  27.     unsigned char        mmca_vsn;
  28.     unsigned short        cmdclass;
  29.     unsigned short        tacc_clks;
  30.     unsigned int        tacc_ns;
  31.     unsigned int        r2w_factor;
  32.     unsigned int        max_dtr;
  33.     unsigned int        read_blkbits;
  34.     unsigned int        write_blkbits;
  35.     unsigned int        capacity;
  36.     unsigned int        read_partial:1,
  37.                 read_misalign:1,
  38.                 write_partial:1,
  39.                 write_misalign:1;
  40. };
  41.  
  42. struct sd_scr {
  43.     unsigned char        sda_vsn;
  44.     unsigned char        bus_widths;
  45. #define SD_SCR_BUS_WIDTH_1    (1<<0)
  46. #define SD_SCR_BUS_WIDTH_4    (1<<2)
  47. };
  48.  
  49. struct mmc_host;
  50.  
  51. /*
  52.  * MMC device
  53.  */
  54. struct mmc_card {
  55.     struct list_head    node;        /* node in hosts devices list */
  56.     struct mmc_host        *host;        /* the host this device belongs to */
  57.     struct device        dev;        /* the device */
  58.     unsigned int        rca;        /* relative card address of device */
  59.     unsigned int        state;        /* (our) card state */
  60. #define MMC_STATE_PRESENT    (1<<0)        /* present in sysfs */
  61. #define MMC_STATE_DEAD        (1<<1)        /* device no longer in stack */
  62. #define MMC_STATE_BAD        (1<<2)        /* unrecognised device */
  63. #define MMC_STATE_SDCARD    (1<<3)        /* is an SD card */
  64. #define MMC_STATE_READONLY    (1<<4)        /* card is read-only */
  65.     u32            raw_cid[4];    /* raw card CID */
  66.     u32            raw_csd[4];    /* raw card CSD */
  67.     u32            raw_scr[2];    /* raw card SCR */
  68.     struct mmc_cid        cid;        /* card identification */
  69.     struct mmc_csd        csd;        /* card specific */
  70.     struct sd_scr        scr;        /* extra SD information */
  71. };
  72.  
  73. #define mmc_card_present(c)    ((c)->state & MMC_STATE_PRESENT)
  74. #define mmc_card_dead(c)    ((c)->state & MMC_STATE_DEAD)
  75. #define mmc_card_bad(c)        ((c)->state & MMC_STATE_BAD)
  76. #define mmc_card_sd(c)        ((c)->state & MMC_STATE_SDCARD)
  77. #define mmc_card_readonly(c)    ((c)->state & MMC_STATE_READONLY)
  78.  
  79. #define mmc_card_set_present(c)    ((c)->state |= MMC_STATE_PRESENT)
  80. #define mmc_card_set_dead(c)    ((c)->state |= MMC_STATE_DEAD)
  81. #define mmc_card_set_bad(c)    ((c)->state |= MMC_STATE_BAD)
  82. #define mmc_card_set_sd(c)    ((c)->state |= MMC_STATE_SDCARD)
  83. #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
  84.  
  85. #define mmc_card_name(c)    ((c)->cid.prod_name)
  86. #define mmc_card_id(c)        ((c)->dev.bus_id)
  87.  
  88. #define mmc_list_to_card(l)    container_of(l, struct mmc_card, node)
  89. #define mmc_get_drvdata(c)    dev_get_drvdata(&(c)->dev)
  90. #define mmc_set_drvdata(c,d)    dev_set_drvdata(&(c)->dev, d)
  91.  
  92. /*
  93.  * MMC device driver (e.g., Flash card, I/O card...)
  94.  */
  95. struct mmc_driver {
  96.     struct device_driver drv;
  97.     int (*probe)(struct mmc_card *);
  98.     void (*remove)(struct mmc_card *);
  99.     int (*suspend)(struct mmc_card *, pm_message_t);
  100.     int (*resume)(struct mmc_card *);
  101. };
  102.  
  103. extern int mmc_register_driver(struct mmc_driver *);
  104. extern void mmc_unregister_driver(struct mmc_driver *);
  105.  
  106. static inline int mmc_card_claim_host(struct mmc_card *card)
  107. {
  108.     return __mmc_claim_host(card->host, card);
  109. }
  110.  
  111. #define mmc_card_release_host(c)    mmc_release_host((c)->host)
  112.  
  113. #endif
  114.