DEFINE_SIMPLE_ATTRIBUTE(mmc_dbg_card_status_fops, mmc_dbg_card_status_get,
NULL, "%08llx\n");
+static int mmc_dbg_card_speed_class_get(void *data, u64 *val)
+{
+ struct mmc_card *card = data;
+
+ *val = card->speed_class;
+
+ return 0;
+}
+DEFINE_SIMPLE_ATTRIBUTE(mmc_dbg_card_speed_class_fops,
+ mmc_dbg_card_speed_class_get, NULL, "%u\n");
+
#define EXT_CSD_STR_LEN 1025
static int mmc_ext_csd_open(struct inode *inode, struct file *filp)
&mmc_dbg_ext_csd_fops))
goto err;
+ if (mmc_card_sd(card))
+ if (!debugfs_create_file("speed_class", S_IRUSR, root, card,
+ &mmc_dbg_card_speed_class_fops))
+ goto err;
+
return;
err:
card->ssr.erase_timeout = (et * 1000) / es;
card->ssr.erase_offset = eo * 1000;
}
+ card->speed_class = UNSTUFF_BITS(ssr, 440 - 384, 8);
} else {
pr_warn("%s: SD Status: Invalid Allocation Unit size\n",
mmc_hostname(card->host));
unsigned int erase_shift; /* if erase unit is power 2 */
unsigned int pref_erase; /* in sectors */
u8 erased_byte; /* value of erased bytes */
+ u8 speed_class; /* speed class of card */
u32 raw_cid[4]; /* raw card CID */
u32 raw_csd[4]; /* raw card CSD */