Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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/core.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 mmc_ext_csd {
 43         unsigned int            hs_max_dtr;
 44         unsigned int            sectors;
 45 };
 46 
 47 struct sd_scr {
 48         unsigned char           sda_vsn;
 49         unsigned char           bus_widths;
 50 #define SD_SCR_BUS_WIDTH_1      (1<<0)
 51 #define SD_SCR_BUS_WIDTH_4      (1<<2)
 52 };
 53 
 54 struct sd_switch_caps {
 55         unsigned int            hs_max_dtr;
 56 };
 57 
 58 struct sdio_cccr {
 59         unsigned int            sdio_vsn;
 60         unsigned int            sd_vsn;
 61         unsigned int            multi_block:1,
 62                                 low_speed:1,
 63                                 wide_bus:1,
 64                                 high_power:1,
 65                                 high_speed:1;
 66 };
 67 
 68 struct sdio_cis {
 69         unsigned short          vendor;
 70         unsigned short          device;
 71         unsigned short          blksize;
 72         unsigned int            max_dtr;
 73 };
 74 
 75 struct mmc_host;
 76 struct sdio_func;
 77 struct sdio_func_tuple;
 78 
 79 #define SDIO_MAX_FUNCS          7
 80 
 81 /*
 82  * MMC device
 83  */
 84 struct mmc_card {
 85         struct mmc_host         *host;          /* the host this device belongs to */
 86         struct device           dev;            /* the device */
 87         unsigned int            rca;            /* relative card address of device */
 88         unsigned int            type;           /* card type */
 89 #define MMC_TYPE_MMC            0               /* MMC card */
 90 #define MMC_TYPE_SD             1               /* SD card */
 91 #define MMC_TYPE_SDIO           2               /* SDIO card */
 92         unsigned int            state;          /* (our) card state */
 93 #define MMC_STATE_PRESENT       (1<<0)          /* present in sysfs */
 94 #define MMC_STATE_READONLY      (1<<1)          /* card is read-only */
 95 #define MMC_STATE_HIGHSPEED     (1<<2)          /* card is in high speed mode */
 96 #define MMC_STATE_BLOCKADDR     (1<<3)          /* card uses block-addressing */
 97 
 98         u32                     raw_cid[4];     /* raw card CID */
 99         u32                     raw_csd[4];     /* raw card CSD */
100         u32                     raw_scr[2];     /* raw card SCR */
101         struct mmc_cid          cid;            /* card identification */
102         struct mmc_csd          csd;            /* card specific */
103         struct mmc_ext_csd      ext_csd;        /* mmc v4 extended card specific */
104         struct sd_scr           scr;            /* extra SD information */
105         struct sd_switch_caps   sw_caps;        /* switch (CMD6) caps */
106 
107         unsigned int            sdio_funcs;     /* number of SDIO functions */
108         struct sdio_cccr        cccr;           /* common card info */
109         struct sdio_cis         cis;            /* common tuple info */
110         struct sdio_func        *sdio_func[SDIO_MAX_FUNCS]; /* SDIO functions (devices) */
111         unsigned                num_info;       /* number of info strings */
112         const char              **info;         /* info strings */
113         struct sdio_func_tuple  *tuples;        /* unknown common tuples */
114 
115         struct dentry           *debugfs_root;
116 };
117 
118 #define mmc_card_mmc(c)         ((c)->type == MMC_TYPE_MMC)
119 #define mmc_card_sd(c)          ((c)->type == MMC_TYPE_SD)
120 #define mmc_card_sdio(c)        ((c)->type == MMC_TYPE_SDIO)
121 
122 #define mmc_card_present(c)     ((c)->state & MMC_STATE_PRESENT)
123 #define mmc_card_readonly(c)    ((c)->state & MMC_STATE_READONLY)
124 #define mmc_card_highspeed(c)   ((c)->state & MMC_STATE_HIGHSPEED)
125 #define mmc_card_blockaddr(c)   ((c)->state & MMC_STATE_BLOCKADDR)
126 
127 #define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
128 #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
129 #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
130 #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
131 
132 #define mmc_card_name(c)        ((c)->cid.prod_name)
133 #define mmc_card_id(c)          (dev_name(&(c)->dev))
134 
135 #define mmc_list_to_card(l)     container_of(l, struct mmc_card, node)
136 #define mmc_get_drvdata(c)      dev_get_drvdata(&(c)->dev)
137 #define mmc_set_drvdata(c,d)    dev_set_drvdata(&(c)->dev, d)
138 
139 /*
140  * MMC device driver (e.g., Flash card, I/O card...)
141  */
142 struct mmc_driver {
143         struct device_driver drv;
144         int (*probe)(struct mmc_card *);
145         void (*remove)(struct mmc_card *);
146         int (*suspend)(struct mmc_card *, pm_message_t);
147         int (*resume)(struct mmc_card *);
148 };
149 
150 extern int mmc_register_driver(struct mmc_driver *);
151 extern void mmc_unregister_driver(struct mmc_driver *);
152 
153 #endif
154 
  This page was automatically generated by the LXR engine.