LCOV - code coverage report
Current view: top level - lkbce/include/linux/mmc - card.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 10 11 90.9 %
Date: 2017-01-25 Functions: 0 1 0.0 %

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

Generated by: LCOV version 1.10