LCOV - code coverage report
Current view: top level - include/linux/mmc - card.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 22 0.0 %
Date: 2014-02-18 Functions: 0 3 0.0 %
Branches: 0 2 0.0 %

           Branch data     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/device.h>
      14                 :            : #include <linux/mmc/core.h>
      15                 :            : #include <linux/mod_devicetable.h>
      16                 :            : 
      17                 :            : struct mmc_cid {
      18                 :            :         unsigned int            manfid;
      19                 :            :         char                    prod_name[8];
      20                 :            :         unsigned char           prv;
      21                 :            :         unsigned int            serial;
      22                 :            :         unsigned short          oemid;
      23                 :            :         unsigned short          year;
      24                 :            :         unsigned char           hwrev;
      25                 :            :         unsigned char           fwrev;
      26                 :            :         unsigned char           month;
      27                 :            : };
      28                 :            : 
      29                 :            : struct mmc_csd {
      30                 :            :         unsigned char           structure;
      31                 :            :         unsigned char           mmca_vsn;
      32                 :            :         unsigned short          cmdclass;
      33                 :            :         unsigned short          tacc_clks;
      34                 :            :         unsigned int            tacc_ns;
      35                 :            :         unsigned int            c_size;
      36                 :            :         unsigned int            r2w_factor;
      37                 :            :         unsigned int            max_dtr;
      38                 :            :         unsigned int            erase_size;             /* In sectors */
      39                 :            :         unsigned int            read_blkbits;
      40                 :            :         unsigned int            write_blkbits;
      41                 :            :         unsigned int            capacity;
      42                 :            :         unsigned int            read_partial:1,
      43                 :            :                                 read_misalign:1,
      44                 :            :                                 write_partial:1,
      45                 :            :                                 write_misalign:1;
      46                 :            : };
      47                 :            : 
      48                 :            : struct mmc_ext_csd {
      49                 :            :         u8                      rev;
      50                 :            :         u8                      erase_group_def;
      51                 :            :         u8                      sec_feature_support;
      52                 :            :         u8                      rel_sectors;
      53                 :            :         u8                      rel_param;
      54                 :            :         u8                      part_config;
      55                 :            :         u8                      cache_ctrl;
      56                 :            :         u8                      rst_n_function;
      57                 :            :         u8                      max_packed_writes;
      58                 :            :         u8                      max_packed_reads;
      59                 :            :         u8                      packed_event_en;
      60                 :            :         unsigned int            part_time;              /* Units: ms */
      61                 :            :         unsigned int            sa_timeout;             /* Units: 100ns */
      62                 :            :         unsigned int            generic_cmd6_time;      /* Units: 10ms */
      63                 :            :         unsigned int            power_off_longtime;     /* Units: ms */
      64                 :            :         u8                      power_off_notification; /* state */
      65                 :            :         unsigned int            hs_max_dtr;
      66                 :            : #define MMC_HIGH_26_MAX_DTR     26000000
      67                 :            : #define MMC_HIGH_52_MAX_DTR     52000000
      68                 :            : #define MMC_HIGH_DDR_MAX_DTR    52000000
      69                 :            : #define MMC_HS200_MAX_DTR       200000000
      70                 :            :         unsigned int            sectors;
      71                 :            :         unsigned int            card_type;
      72                 :            :         unsigned int            hc_erase_size;          /* In sectors */
      73                 :            :         unsigned int            hc_erase_timeout;       /* In milliseconds */
      74                 :            :         unsigned int            sec_trim_mult;  /* Secure trim multiplier  */
      75                 :            :         unsigned int            sec_erase_mult; /* Secure erase multiplier */
      76                 :            :         unsigned int            trim_timeout;           /* In milliseconds */
      77                 :            :         bool                    enhanced_area_en;       /* enable bit */
      78                 :            :         unsigned long long      enhanced_area_offset;   /* Units: Byte */
      79                 :            :         unsigned int            enhanced_area_size;     /* Units: KB */
      80                 :            :         unsigned int            cache_size;             /* Units: KB */
      81                 :            :         bool                    hpi_en;                 /* HPI enablebit */
      82                 :            :         bool                    hpi;                    /* HPI support bit */
      83                 :            :         unsigned int            hpi_cmd;                /* cmd used as HPI */
      84                 :            :         bool                    bkops;          /* background support bit */
      85                 :            :         bool                    bkops_en;       /* background enable bit */
      86                 :            :         unsigned int            data_sector_size;       /* 512 bytes or 4KB */
      87                 :            :         unsigned int            data_tag_unit_size;     /* DATA TAG UNIT size */
      88                 :            :         unsigned int            boot_ro_lock;           /* ro lock support */
      89                 :            :         bool                    boot_ro_lockable;
      90                 :            :         u8                      raw_exception_status;   /* 54 */
      91                 :            :         u8                      raw_partition_support;  /* 160 */
      92                 :            :         u8                      raw_rpmb_size_mult;     /* 168 */
      93                 :            :         u8                      raw_erased_mem_count;   /* 181 */
      94                 :            :         u8                      raw_ext_csd_structure;  /* 194 */
      95                 :            :         u8                      raw_card_type;          /* 196 */
      96                 :            :         u8                      out_of_int_time;        /* 198 */
      97                 :            :         u8                      raw_pwr_cl_52_195;      /* 200 */
      98                 :            :         u8                      raw_pwr_cl_26_195;      /* 201 */
      99                 :            :         u8                      raw_pwr_cl_52_360;      /* 202 */
     100                 :            :         u8                      raw_pwr_cl_26_360;      /* 203 */
     101                 :            :         u8                      raw_s_a_timeout;        /* 217 */
     102                 :            :         u8                      raw_hc_erase_gap_size;  /* 221 */
     103                 :            :         u8                      raw_erase_timeout_mult; /* 223 */
     104                 :            :         u8                      raw_hc_erase_grp_size;  /* 224 */
     105                 :            :         u8                      raw_sec_trim_mult;      /* 229 */
     106                 :            :         u8                      raw_sec_erase_mult;     /* 230 */
     107                 :            :         u8                      raw_sec_feature_support;/* 231 */
     108                 :            :         u8                      raw_trim_mult;          /* 232 */
     109                 :            :         u8                      raw_pwr_cl_200_195;     /* 236 */
     110                 :            :         u8                      raw_pwr_cl_200_360;     /* 237 */
     111                 :            :         u8                      raw_pwr_cl_ddr_52_195;  /* 238 */
     112                 :            :         u8                      raw_pwr_cl_ddr_52_360;  /* 239 */
     113                 :            :         u8                      raw_bkops_status;       /* 246 */
     114                 :            :         u8                      raw_sectors[4];         /* 212 - 4 bytes */
     115                 :            : 
     116                 :            :         unsigned int            feature_support;
     117                 :            : #define MMC_DISCARD_FEATURE     BIT(0)                  /* CMD38 feature */
     118                 :            : };
     119                 :            : 
     120                 :            : struct sd_scr {
     121                 :            :         unsigned char           sda_vsn;
     122                 :            :         unsigned char           sda_spec3;
     123                 :            :         unsigned char           bus_widths;
     124                 :            : #define SD_SCR_BUS_WIDTH_1      (1<<0)
     125                 :            : #define SD_SCR_BUS_WIDTH_4      (1<<2)
     126                 :            :         unsigned char           cmds;
     127                 :            : #define SD_SCR_CMD20_SUPPORT   (1<<0)
     128                 :            : #define SD_SCR_CMD23_SUPPORT   (1<<1)
     129                 :            : };
     130                 :            : 
     131                 :            : struct sd_ssr {
     132                 :            :         unsigned int            au;                     /* In sectors */
     133                 :            :         unsigned int            erase_timeout;          /* In milliseconds */
     134                 :            :         unsigned int            erase_offset;           /* In milliseconds */
     135                 :            : };
     136                 :            : 
     137                 :            : struct sd_switch_caps {
     138                 :            :         unsigned int            hs_max_dtr;
     139                 :            :         unsigned int            uhs_max_dtr;
     140                 :            : #define HIGH_SPEED_MAX_DTR      50000000
     141                 :            : #define UHS_SDR104_MAX_DTR      208000000
     142                 :            : #define UHS_SDR50_MAX_DTR       100000000
     143                 :            : #define UHS_DDR50_MAX_DTR       50000000
     144                 :            : #define UHS_SDR25_MAX_DTR       UHS_DDR50_MAX_DTR
     145                 :            : #define UHS_SDR12_MAX_DTR       25000000
     146                 :            :         unsigned int            sd3_bus_mode;
     147                 :            : #define UHS_SDR12_BUS_SPEED     0
     148                 :            : #define HIGH_SPEED_BUS_SPEED    1
     149                 :            : #define UHS_SDR25_BUS_SPEED     1
     150                 :            : #define UHS_SDR50_BUS_SPEED     2
     151                 :            : #define UHS_SDR104_BUS_SPEED    3
     152                 :            : #define UHS_DDR50_BUS_SPEED     4
     153                 :            : 
     154                 :            : #define SD_MODE_HIGH_SPEED      (1 << HIGH_SPEED_BUS_SPEED)
     155                 :            : #define SD_MODE_UHS_SDR12       (1 << UHS_SDR12_BUS_SPEED)
     156                 :            : #define SD_MODE_UHS_SDR25       (1 << UHS_SDR25_BUS_SPEED)
     157                 :            : #define SD_MODE_UHS_SDR50       (1 << UHS_SDR50_BUS_SPEED)
     158                 :            : #define SD_MODE_UHS_SDR104      (1 << UHS_SDR104_BUS_SPEED)
     159                 :            : #define SD_MODE_UHS_DDR50       (1 << UHS_DDR50_BUS_SPEED)
     160                 :            :         unsigned int            sd3_drv_type;
     161                 :            : #define SD_DRIVER_TYPE_B        0x01
     162                 :            : #define SD_DRIVER_TYPE_A        0x02
     163                 :            : #define SD_DRIVER_TYPE_C        0x04
     164                 :            : #define SD_DRIVER_TYPE_D        0x08
     165                 :            :         unsigned int            sd3_curr_limit;
     166                 :            : #define SD_SET_CURRENT_LIMIT_200        0
     167                 :            : #define SD_SET_CURRENT_LIMIT_400        1
     168                 :            : #define SD_SET_CURRENT_LIMIT_600        2
     169                 :            : #define SD_SET_CURRENT_LIMIT_800        3
     170                 :            : #define SD_SET_CURRENT_NO_CHANGE        (-1)
     171                 :            : 
     172                 :            : #define SD_MAX_CURRENT_200      (1 << SD_SET_CURRENT_LIMIT_200)
     173                 :            : #define SD_MAX_CURRENT_400      (1 << SD_SET_CURRENT_LIMIT_400)
     174                 :            : #define SD_MAX_CURRENT_600      (1 << SD_SET_CURRENT_LIMIT_600)
     175                 :            : #define SD_MAX_CURRENT_800      (1 << SD_SET_CURRENT_LIMIT_800)
     176                 :            : };
     177                 :            : 
     178                 :            : struct sdio_cccr {
     179                 :            :         unsigned int            sdio_vsn;
     180                 :            :         unsigned int            sd_vsn;
     181                 :            :         unsigned int            multi_block:1,
     182                 :            :                                 low_speed:1,
     183                 :            :                                 wide_bus:1,
     184                 :            :                                 high_power:1,
     185                 :            :                                 high_speed:1,
     186                 :            :                                 disable_cd:1;
     187                 :            : };
     188                 :            : 
     189                 :            : struct sdio_cis {
     190                 :            :         unsigned short          vendor;
     191                 :            :         unsigned short          device;
     192                 :            :         unsigned short          blksize;
     193                 :            :         unsigned int            max_dtr;
     194                 :            : };
     195                 :            : 
     196                 :            : struct mmc_host;
     197                 :            : struct sdio_func;
     198                 :            : struct sdio_func_tuple;
     199                 :            : 
     200                 :            : #define SDIO_MAX_FUNCS          7
     201                 :            : 
     202                 :            : enum mmc_blk_status {
     203                 :            :         MMC_BLK_SUCCESS = 0,
     204                 :            :         MMC_BLK_PARTIAL,
     205                 :            :         MMC_BLK_CMD_ERR,
     206                 :            :         MMC_BLK_RETRY,
     207                 :            :         MMC_BLK_ABORT,
     208                 :            :         MMC_BLK_DATA_ERR,
     209                 :            :         MMC_BLK_ECC_ERR,
     210                 :            :         MMC_BLK_NOMEDIUM,
     211                 :            :         MMC_BLK_NEW_REQUEST,
     212                 :            : };
     213                 :            : 
     214                 :            : /* The number of MMC physical partitions.  These consist of:
     215                 :            :  * boot partitions (2), general purpose partitions (4) in MMC v4.4.
     216                 :            :  */
     217                 :            : #define MMC_NUM_BOOT_PARTITION  2
     218                 :            : #define MMC_NUM_GP_PARTITION    4
     219                 :            : #define MMC_NUM_PHY_PARTITION   6
     220                 :            : #define MAX_MMC_PART_NAME_LEN   20
     221                 :            : 
     222                 :            : /*
     223                 :            :  * MMC Physical partitions
     224                 :            :  */
     225                 :            : struct mmc_part {
     226                 :            :         unsigned int    size;   /* partition size (in bytes) */
     227                 :            :         unsigned int    part_cfg;       /* partition type */
     228                 :            :         char    name[MAX_MMC_PART_NAME_LEN];
     229                 :            :         bool    force_ro;       /* to make boot parts RO by default */
     230                 :            :         unsigned int    area_type;
     231                 :            : #define MMC_BLK_DATA_AREA_MAIN  (1<<0)
     232                 :            : #define MMC_BLK_DATA_AREA_BOOT  (1<<1)
     233                 :            : #define MMC_BLK_DATA_AREA_GP    (1<<2)
     234                 :            : #define MMC_BLK_DATA_AREA_RPMB  (1<<3)
     235                 :            : };
     236                 :            : 
     237                 :            : /*
     238                 :            :  * MMC device
     239                 :            :  */
     240                 :            : struct mmc_card {
     241                 :            :         struct mmc_host         *host;          /* the host this device belongs to */
     242                 :            :         struct device           dev;            /* the device */
     243                 :            :         u32                     ocr;            /* the current OCR setting */
     244                 :            :         unsigned int            rca;            /* relative card address of device */
     245                 :            :         unsigned int            type;           /* card type */
     246                 :            : #define MMC_TYPE_MMC            0               /* MMC card */
     247                 :            : #define MMC_TYPE_SD             1               /* SD card */
     248                 :            : #define MMC_TYPE_SDIO           2               /* SDIO card */
     249                 :            : #define MMC_TYPE_SD_COMBO       3               /* SD combo (IO+mem) card */
     250                 :            :         unsigned int            state;          /* (our) card state */
     251                 :            : #define MMC_STATE_PRESENT       (1<<0)            /* present in sysfs */
     252                 :            : #define MMC_STATE_READONLY      (1<<1)            /* card is read-only */
     253                 :            : #define MMC_STATE_HIGHSPEED     (1<<2)            /* card is in high speed mode */
     254                 :            : #define MMC_STATE_BLOCKADDR     (1<<3)            /* card uses block-addressing */
     255                 :            : #define MMC_STATE_HIGHSPEED_DDR (1<<4)            /* card is in high speed mode */
     256                 :            : #define MMC_STATE_ULTRAHIGHSPEED (1<<5)           /* card is in ultra high speed mode */
     257                 :            : #define MMC_CARD_SDXC           (1<<6)            /* card is SDXC */
     258                 :            : #define MMC_CARD_REMOVED        (1<<7)            /* card has been removed */
     259                 :            : #define MMC_STATE_HIGHSPEED_200 (1<<8)            /* card is in HS200 mode */
     260                 :            : #define MMC_STATE_DOING_BKOPS   (1<<10)           /* card is doing BKOPS */
     261                 :            : #define MMC_STATE_SUSPENDED     (1<<11)           /* card is suspended */
     262                 :            :         unsigned int            quirks;         /* card quirks */
     263                 :            : #define MMC_QUIRK_LENIENT_FN0   (1<<0)            /* allow SDIO FN0 writes outside of the VS CCCR range */
     264                 :            : #define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (1<<1)      /* use func->cur_blksize */
     265                 :            :                                                 /* for byte mode */
     266                 :            : #define MMC_QUIRK_NONSTD_SDIO   (1<<2)            /* non-standard SDIO card attached */
     267                 :            :                                                 /* (missing CIA registers) */
     268                 :            : #define MMC_QUIRK_BROKEN_CLK_GATING (1<<3)        /* clock gating the sdio bus will make card fail */
     269                 :            : #define MMC_QUIRK_NONSTD_FUNC_IF (1<<4)           /* SDIO card has nonstd function interfaces */
     270                 :            : #define MMC_QUIRK_DISABLE_CD    (1<<5)            /* disconnect CD/DAT[3] resistor */
     271                 :            : #define MMC_QUIRK_INAND_CMD38   (1<<6)            /* iNAND devices have broken CMD38 */
     272                 :            : #define MMC_QUIRK_BLK_NO_CMD23  (1<<7)            /* Avoid CMD23 for regular multiblock */
     273                 :            : #define MMC_QUIRK_BROKEN_BYTE_MODE_512 (1<<8)     /* Avoid sending 512 bytes in */
     274                 :            : #define MMC_QUIRK_LONG_READ_TIME (1<<9)           /* Data read time > CSD says */
     275                 :            : #define MMC_QUIRK_SEC_ERASE_TRIM_BROKEN (1<<10)   /* Skip secure for erase/trim */
     276                 :            :                                                 /* byte mode */
     277                 :            : 
     278                 :            :         unsigned int            erase_size;     /* erase size in sectors */
     279                 :            :         unsigned int            erase_shift;    /* if erase unit is power 2 */
     280                 :            :         unsigned int            pref_erase;     /* in sectors */
     281                 :            :         u8                      erased_byte;    /* value of erased bytes */
     282                 :            : 
     283                 :            :         u32                     raw_cid[4];     /* raw card CID */
     284                 :            :         u32                     raw_csd[4];     /* raw card CSD */
     285                 :            :         u32                     raw_scr[2];     /* raw card SCR */
     286                 :            :         struct mmc_cid          cid;            /* card identification */
     287                 :            :         struct mmc_csd          csd;            /* card specific */
     288                 :            :         struct mmc_ext_csd      ext_csd;        /* mmc v4 extended card specific */
     289                 :            :         struct sd_scr           scr;            /* extra SD information */
     290                 :            :         struct sd_ssr           ssr;            /* yet more SD information */
     291                 :            :         struct sd_switch_caps   sw_caps;        /* switch (CMD6) caps */
     292                 :            : 
     293                 :            :         unsigned int            sdio_funcs;     /* number of SDIO functions */
     294                 :            :         struct sdio_cccr        cccr;           /* common card info */
     295                 :            :         struct sdio_cis         cis;            /* common tuple info */
     296                 :            :         struct sdio_func        *sdio_func[SDIO_MAX_FUNCS]; /* SDIO functions (devices) */
     297                 :            :         struct sdio_func        *sdio_single_irq; /* SDIO function when only one IRQ active */
     298                 :            :         unsigned                num_info;       /* number of info strings */
     299                 :            :         const char              **info;         /* info strings */
     300                 :            :         struct sdio_func_tuple  *tuples;        /* unknown common tuples */
     301                 :            : 
     302                 :            :         unsigned int            sd_bus_speed;   /* Bus Speed Mode set for the card */
     303                 :            : 
     304                 :            :         struct dentry           *debugfs_root;
     305                 :            :         struct mmc_part part[MMC_NUM_PHY_PARTITION]; /* physical partitions */
     306                 :            :         unsigned int    nr_parts;
     307                 :            : };
     308                 :            : 
     309                 :            : /*
     310                 :            :  * This function fill contents in mmc_part.
     311                 :            :  */
     312                 :            : static inline void mmc_part_add(struct mmc_card *card, unsigned int size,
     313                 :            :                         unsigned int part_cfg, char *name, int idx, bool ro,
     314                 :            :                         int area_type)
     315                 :            : {
     316                 :          0 :         card->part[card->nr_parts].size = size;
     317                 :          0 :         card->part[card->nr_parts].part_cfg = part_cfg;
     318                 :          0 :         sprintf(card->part[card->nr_parts].name, name, idx);
     319                 :          0 :         card->part[card->nr_parts].force_ro = ro;
     320                 :          0 :         card->part[card->nr_parts].area_type = area_type;
     321                 :          0 :         card->nr_parts++;
     322                 :            : }
     323                 :            : 
     324                 :            : static inline bool mmc_large_sector(struct mmc_card *card)
     325                 :            : {
     326                 :            :         return card->ext_csd.data_sector_size == 4096;
     327                 :            : }
     328                 :            : 
     329                 :            : /*
     330                 :            :  *  The world is not perfect and supplies us with broken mmc/sdio devices.
     331                 :            :  *  For at least some of these bugs we need a work-around.
     332                 :            :  */
     333                 :            : 
     334                 :            : struct mmc_fixup {
     335                 :            :         /* CID-specific fields. */
     336                 :            :         const char *name;
     337                 :            : 
     338                 :            :         /* Valid revision range */
     339                 :            :         u64 rev_start, rev_end;
     340                 :            : 
     341                 :            :         unsigned int manfid;
     342                 :            :         unsigned short oemid;
     343                 :            : 
     344                 :            :         /* SDIO-specfic fields. You can use SDIO_ANY_ID here of course */
     345                 :            :         u16 cis_vendor, cis_device;
     346                 :            : 
     347                 :            :         void (*vendor_fixup)(struct mmc_card *card, int data);
     348                 :            :         int data;
     349                 :            : };
     350                 :            : 
     351                 :            : #define CID_MANFID_ANY (-1u)
     352                 :            : #define CID_OEMID_ANY ((unsigned short) -1)
     353                 :            : #define CID_NAME_ANY (NULL)
     354                 :            : 
     355                 :            : #define END_FIXUP { 0 }
     356                 :            : 
     357                 :            : #define _FIXUP_EXT(_name, _manfid, _oemid, _rev_start, _rev_end,        \
     358                 :            :                    _cis_vendor, _cis_device,                            \
     359                 :            :                    _fixup, _data)                                       \
     360                 :            :         {                                                  \
     361                 :            :                 .name = (_name),                           \
     362                 :            :                 .manfid = (_manfid),                       \
     363                 :            :                 .oemid = (_oemid),                         \
     364                 :            :                 .rev_start = (_rev_start),                 \
     365                 :            :                 .rev_end = (_rev_end),                     \
     366                 :            :                 .cis_vendor = (_cis_vendor),               \
     367                 :            :                 .cis_device = (_cis_device),               \
     368                 :            :                 .vendor_fixup = (_fixup),                  \
     369                 :            :                 .data = (_data),                           \
     370                 :            :          }
     371                 :            : 
     372                 :            : #define MMC_FIXUP_REV(_name, _manfid, _oemid, _rev_start, _rev_end,     \
     373                 :            :                       _fixup, _data)                                    \
     374                 :            :         _FIXUP_EXT(_name, _manfid,                                      \
     375                 :            :                    _oemid, _rev_start, _rev_end,                        \
     376                 :            :                    SDIO_ANY_ID, SDIO_ANY_ID,                            \
     377                 :            :                    _fixup, _data)                                       \
     378                 :            : 
     379                 :            : #define MMC_FIXUP(_name, _manfid, _oemid, _fixup, _data) \
     380                 :            :         MMC_FIXUP_REV(_name, _manfid, _oemid, 0, -1ull, _fixup, _data)
     381                 :            : 
     382                 :            : #define SDIO_FIXUP(_vendor, _device, _fixup, _data)                     \
     383                 :            :         _FIXUP_EXT(CID_NAME_ANY, CID_MANFID_ANY,                        \
     384                 :            :                     CID_OEMID_ANY, 0, -1ull,                            \
     385                 :            :                    _vendor, _device,                                    \
     386                 :            :                    _fixup, _data)                                       \
     387                 :            : 
     388                 :            : #define cid_rev(hwrev, fwrev, year, month)      \
     389                 :            :         (((u64) hwrev) << 40 |                  \
     390                 :            :          ((u64) fwrev) << 32 |                  \
     391                 :            :          ((u64) year) << 16 |                   \
     392                 :            :          ((u64) month))
     393                 :            : 
     394                 :            : #define cid_rev_card(card)                \
     395                 :            :         cid_rev(card->cid.hwrev,       \
     396                 :            :                     card->cid.fwrev,      \
     397                 :            :                     card->cid.year,    \
     398                 :            :                     card->cid.month)
     399                 :            : 
     400                 :            : /*
     401                 :            :  * Unconditionally quirk add/remove.
     402                 :            :  */
     403                 :            : 
     404                 :          0 : static inline void __maybe_unused add_quirk(struct mmc_card *card, int data)
     405                 :            : {
     406                 :          0 :         card->quirks |= data;
     407                 :          0 : }
     408                 :            : 
     409                 :          0 : static inline void __maybe_unused remove_quirk(struct mmc_card *card, int data)
     410                 :            : {
     411                 :          0 :         card->quirks &= ~data;
     412                 :          0 : }
     413                 :            : 
     414                 :            : #define mmc_card_mmc(c)         ((c)->type == MMC_TYPE_MMC)
     415                 :            : #define mmc_card_sd(c)          ((c)->type == MMC_TYPE_SD)
     416                 :            : #define mmc_card_sdio(c)        ((c)->type == MMC_TYPE_SDIO)
     417                 :            : 
     418                 :            : #define mmc_card_present(c)     ((c)->state & MMC_STATE_PRESENT)
     419                 :            : #define mmc_card_readonly(c)    ((c)->state & MMC_STATE_READONLY)
     420                 :            : #define mmc_card_highspeed(c)   ((c)->state & MMC_STATE_HIGHSPEED)
     421                 :            : #define mmc_card_hs200(c)       ((c)->state & MMC_STATE_HIGHSPEED_200)
     422                 :            : #define mmc_card_blockaddr(c)   ((c)->state & MMC_STATE_BLOCKADDR)
     423                 :            : #define mmc_card_ddr_mode(c)    ((c)->state & MMC_STATE_HIGHSPEED_DDR)
     424                 :            : #define mmc_card_uhs(c)         ((c)->state & MMC_STATE_ULTRAHIGHSPEED)
     425                 :            : #define mmc_card_ext_capacity(c) ((c)->state & MMC_CARD_SDXC)
     426                 :            : #define mmc_card_removed(c)     ((c) && ((c)->state & MMC_CARD_REMOVED))
     427                 :            : #define mmc_card_doing_bkops(c) ((c)->state & MMC_STATE_DOING_BKOPS)
     428                 :            : #define mmc_card_suspended(c)   ((c)->state & MMC_STATE_SUSPENDED)
     429                 :            : 
     430                 :            : #define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
     431                 :            : #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
     432                 :            : #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
     433                 :            : #define mmc_card_set_hs200(c)   ((c)->state |= MMC_STATE_HIGHSPEED_200)
     434                 :            : #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
     435                 :            : #define mmc_card_set_ddr_mode(c) ((c)->state |= MMC_STATE_HIGHSPEED_DDR)
     436                 :            : #define mmc_card_set_uhs(c) ((c)->state |= MMC_STATE_ULTRAHIGHSPEED)
     437                 :            : #define mmc_card_set_ext_capacity(c) ((c)->state |= MMC_CARD_SDXC)
     438                 :            : #define mmc_card_set_removed(c) ((c)->state |= MMC_CARD_REMOVED)
     439                 :            : #define mmc_card_set_doing_bkops(c)     ((c)->state |= MMC_STATE_DOING_BKOPS)
     440                 :            : #define mmc_card_clr_doing_bkops(c)     ((c)->state &= ~MMC_STATE_DOING_BKOPS)
     441                 :            : #define mmc_card_set_suspended(c) ((c)->state |= MMC_STATE_SUSPENDED)
     442                 :            : #define mmc_card_clr_suspended(c) ((c)->state &= ~MMC_STATE_SUSPENDED)
     443                 :            : 
     444                 :            : /*
     445                 :            :  * Quirk add/remove for MMC products.
     446                 :            :  */
     447                 :            : 
     448                 :          0 : static inline void __maybe_unused add_quirk_mmc(struct mmc_card *card, int data)
     449                 :            : {
     450         [ #  # ]:          0 :         if (mmc_card_mmc(card))
     451                 :          0 :                 card->quirks |= data;
     452                 :          0 : }
     453                 :            : 
     454                 :            : static inline void __maybe_unused remove_quirk_mmc(struct mmc_card *card,
     455                 :            :                                                    int data)
     456                 :            : {
     457                 :            :         if (mmc_card_mmc(card))
     458                 :            :                 card->quirks &= ~data;
     459                 :            : }
     460                 :            : 
     461                 :            : /*
     462                 :            :  * Quirk add/remove for SD products.
     463                 :            :  */
     464                 :            : 
     465                 :            : static inline void __maybe_unused add_quirk_sd(struct mmc_card *card, int data)
     466                 :            : {
     467                 :            :         if (mmc_card_sd(card))
     468                 :            :                 card->quirks |= data;
     469                 :            : }
     470                 :            : 
     471                 :            : static inline void __maybe_unused remove_quirk_sd(struct mmc_card *card,
     472                 :            :                                                    int data)
     473                 :            : {
     474                 :            :         if (mmc_card_sd(card))
     475                 :            :                 card->quirks &= ~data;
     476                 :            : }
     477                 :            : 
     478                 :            : static inline int mmc_card_lenient_fn0(const struct mmc_card *c)
     479                 :            : {
     480                 :          0 :         return c->quirks & MMC_QUIRK_LENIENT_FN0;
     481                 :            : }
     482                 :            : 
     483                 :            : static inline int mmc_blksz_for_byte_mode(const struct mmc_card *c)
     484                 :            : {
     485                 :          0 :         return c->quirks & MMC_QUIRK_BLKSZ_FOR_BYTE_MODE;
     486                 :            : }
     487                 :            : 
     488                 :            : static inline int mmc_card_disable_cd(const struct mmc_card *c)
     489                 :            : {
     490                 :          0 :         return c->quirks & MMC_QUIRK_DISABLE_CD;
     491                 :            : }
     492                 :            : 
     493                 :            : static inline int mmc_card_nonstd_func_interface(const struct mmc_card *c)
     494                 :            : {
     495                 :          0 :         return c->quirks & MMC_QUIRK_NONSTD_FUNC_IF;
     496                 :            : }
     497                 :            : 
     498                 :            : static inline int mmc_card_broken_byte_mode_512(const struct mmc_card *c)
     499                 :            : {
     500                 :          0 :         return c->quirks & MMC_QUIRK_BROKEN_BYTE_MODE_512;
     501                 :            : }
     502                 :            : 
     503                 :            : static inline int mmc_card_long_read_time(const struct mmc_card *c)
     504                 :            : {
     505                 :          0 :         return c->quirks & MMC_QUIRK_LONG_READ_TIME;
     506                 :            : }
     507                 :            : 
     508                 :            : #define mmc_card_name(c)        ((c)->cid.prod_name)
     509                 :            : #define mmc_card_id(c)          (dev_name(&(c)->dev))
     510                 :            : 
     511                 :            : #define mmc_dev_to_card(d)      container_of(d, struct mmc_card, dev)
     512                 :            : 
     513                 :            : #define mmc_list_to_card(l)     container_of(l, struct mmc_card, node)
     514                 :            : #define mmc_get_drvdata(c)      dev_get_drvdata(&(c)->dev)
     515                 :            : #define mmc_set_drvdata(c,d)    dev_set_drvdata(&(c)->dev, d)
     516                 :            : 
     517                 :            : /*
     518                 :            :  * MMC device driver (e.g., Flash card, I/O card...)
     519                 :            :  */
     520                 :            : struct mmc_driver {
     521                 :            :         struct device_driver drv;
     522                 :            :         int (*probe)(struct mmc_card *);
     523                 :            :         void (*remove)(struct mmc_card *);
     524                 :            :         int (*suspend)(struct mmc_card *);
     525                 :            :         int (*resume)(struct mmc_card *);
     526                 :            :         void (*shutdown)(struct mmc_card *);
     527                 :            : };
     528                 :            : 
     529                 :            : extern int mmc_register_driver(struct mmc_driver *);
     530                 :            : extern void mmc_unregister_driver(struct mmc_driver *);
     531                 :            : 
     532                 :            : extern void mmc_fixup_device(struct mmc_card *card,
     533                 :            :                              const struct mmc_fixup *table);
     534                 :            : 
     535                 :            : #endif /* LINUX_MMC_CARD_H */

Generated by: LCOV version 1.9