mmc: add erase, secure erase, trim and secure trim operations
[linux-2.6-block.git] / include / linux / mmc / card.h
index 4d893eaf8174f920f0b89008cc2009742a7102d3..6b7525099e56a943f014c9fbfcc0c6bc45b62579 100644 (file)
@@ -31,6 +31,7 @@ struct mmc_csd {
        unsigned int            tacc_ns;
        unsigned int            r2w_factor;
        unsigned int            max_dtr;
+       unsigned int            erase_size;             /* In sectors */
        unsigned int            read_blkbits;
        unsigned int            write_blkbits;
        unsigned int            capacity;
@@ -42,9 +43,16 @@ struct mmc_csd {
 
 struct mmc_ext_csd {
        u8                      rev;
+       u8                      erase_group_def;
+       u8                      sec_feature_support;
        unsigned int            sa_timeout;             /* Units: 100ns */
        unsigned int            hs_max_dtr;
        unsigned int            sectors;
+       unsigned int            hc_erase_size;          /* In sectors */
+       unsigned int            hc_erase_timeout;       /* In milliseconds */
+       unsigned int            sec_trim_mult;  /* Secure trim multiplier  */
+       unsigned int            sec_erase_mult; /* Secure erase multiplier */
+       unsigned int            trim_timeout;           /* In milliseconds */
 };
 
 struct sd_scr {
@@ -54,6 +62,12 @@ struct sd_scr {
 #define SD_SCR_BUS_WIDTH_4     (1<<2)
 };
 
+struct sd_ssr {
+       unsigned int            au;                     /* In sectors */
+       unsigned int            erase_timeout;          /* In milliseconds */
+       unsigned int            erase_offset;           /* In milliseconds */
+};
+
 struct sd_switch_caps {
        unsigned int            hs_max_dtr;
 };
@@ -106,6 +120,11 @@ struct mmc_card {
 #define MMC_QUIRK_NONSTD_SDIO  (1<<2)          /* non-standard SDIO card attached */
                                                /* (missing CIA registers) */
 
+       unsigned int            erase_size;     /* erase size in sectors */
+       unsigned int            erase_shift;    /* if erase unit is power 2 */
+       unsigned int            pref_erase;     /* in sectors */
+       u8                      erased_byte;    /* value of erased bytes */
+
        u32                     raw_cid[4];     /* raw card CID */
        u32                     raw_csd[4];     /* raw card CSD */
        u32                     raw_scr[2];     /* raw card SCR */
@@ -113,6 +132,7 @@ struct mmc_card {
        struct mmc_csd          csd;            /* card specific */
        struct mmc_ext_csd      ext_csd;        /* mmc v4 extended card specific */
        struct sd_scr           scr;            /* extra SD information */
+       struct sd_ssr           ssr;            /* yet more SD information */
        struct sd_switch_caps   sw_caps;        /* switch (CMD6) caps */
 
        unsigned int            sdio_funcs;     /* number of SDIO functions */