diff options
Diffstat (limited to 'include/linux/mmc')
| -rw-r--r-- | include/linux/mmc/card.h | 23 | ||||
| -rw-r--r-- | include/linux/mmc/core.h | 3 | ||||
| -rw-r--r-- | include/linux/mmc/dw_mmc.h | 7 | ||||
| -rw-r--r-- | include/linux/mmc/host.h | 1 | ||||
| -rw-r--r-- | include/linux/mmc/mmc.h | 3 | ||||
| -rw-r--r-- | include/linux/mmc/sdhci.h | 18 | ||||
| -rw-r--r-- | include/linux/mmc/sdio_func.h | 2 | 
7 files changed, 32 insertions, 25 deletions
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index b0692d28f8e6..4d69c00497bd 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -88,6 +88,9 @@ struct mmc_ext_csd {  	unsigned int            data_tag_unit_size;     /* DATA TAG UNIT size */  	unsigned int		boot_ro_lock;		/* ro lock support */  	bool			boot_ro_lockable; +	bool			ffu_capable;	/* Firmware upgrade support */ +#define MMC_FIRMWARE_LEN 8 +	u8			fwrev[MMC_FIRMWARE_LEN];  /* FW version */  	u8			raw_exception_status;	/* 54 */  	u8			raw_partition_support;	/* 160 */  	u8			raw_rpmb_size_mult;	/* 168 */ @@ -509,24 +512,8 @@ static inline int mmc_card_broken_irq_polling(const struct mmc_card *c)  #define mmc_dev_to_card(d)	container_of(d, struct mmc_card, dev) -#define mmc_list_to_card(l)	container_of(l, struct mmc_card, node) -#define mmc_get_drvdata(c)	dev_get_drvdata(&(c)->dev) -#define mmc_set_drvdata(c,d)	dev_set_drvdata(&(c)->dev, d) - -/* - * MMC device driver (e.g., Flash card, I/O card...) - */ -struct mmc_driver { -	struct device_driver drv; -	int (*probe)(struct mmc_card *); -	void (*remove)(struct mmc_card *); -	int (*suspend)(struct mmc_card *); -	int (*resume)(struct mmc_card *); -	void (*shutdown)(struct mmc_card *); -}; - -extern int mmc_register_driver(struct mmc_driver *); -extern void mmc_unregister_driver(struct mmc_driver *); +extern int mmc_register_driver(struct device_driver *); +extern void mmc_unregister_driver(struct device_driver *);  extern void mmc_fixup_device(struct mmc_card *card,  			     const struct mmc_fixup *table); diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index f206e29f94d7..cb2b0400d284 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h @@ -154,7 +154,8 @@ extern void mmc_start_bkops(struct mmc_card *card, bool from_exception);  extern int __mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int, bool,  			bool, bool);  extern int mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int); -extern int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd); +extern int mmc_send_tuning(struct mmc_host *host); +extern int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd);  #define MMC_ERASE_ARG		0x00000000  #define MMC_SECURE_ERASE_ARG	0x80000000 diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 001366927cf4..42b724e8d503 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h @@ -54,6 +54,7 @@ struct mmc_data;   *	transfer is in progress.   * @use_dma: Whether DMA channel is initialized or not.   * @using_dma: Whether DMA is in use for the current transfer. + * @dma_64bit_address: Whether DMA supports 64-bit address mode or not.   * @sg_dma: Bus address of DMA buffer.   * @sg_cpu: Virtual address of DMA buffer.   * @dma_ops: Pointer to platform-specific DMA callbacks. @@ -96,6 +97,7 @@ struct mmc_data;   * @quirks: Set of quirks that apply to specific versions of the IP.   * @irq_flags: The flags to be passed to request_irq.   * @irq: The irq value to be passed to request_irq. + * @sdio_id0: Number of slot0 in the SDIO interrupt registers.   *   * Locking   * ======= @@ -135,11 +137,11 @@ struct dw_mci {  	struct mmc_command	stop_abort;  	unsigned int		prev_blksz;  	unsigned char		timing; -	struct workqueue_struct	*card_workqueue;  	/* DMA interface members*/  	int			use_dma;  	int			using_dma; +	int			dma_64bit_address;  	dma_addr_t		sg_dma;  	void			*sg_cpu; @@ -154,7 +156,6 @@ struct dw_mci {  	u32			stop_cmdr;  	u32			dir_status;  	struct tasklet_struct	tasklet; -	struct work_struct	card_work;  	unsigned long		pending_events;  	unsigned long		completed_events;  	enum dw_mci_state	state; @@ -193,6 +194,8 @@ struct dw_mci {  	bool			vqmmc_enabled;  	unsigned long		irq_flags; /* IRQ flags */  	int			irq; + +	int			sdio_id0;  };  /* DMA ops for Internal/External DMAC interface */ diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index df0c15396bbf..9f322706f7cb 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -289,6 +289,7 @@ struct mmc_host {  #define MMC_CAP2_HS400_1_2V	(1 << 16)	/* Can support HS400 1.2V */  #define MMC_CAP2_HS400		(MMC_CAP2_HS400_1_8V | \  				 MMC_CAP2_HS400_1_2V) +#define MMC_CAP2_HSX00_1_2V	(MMC_CAP2_HS200_1_2V_SDR | MMC_CAP2_HS400_1_2V)  #define MMC_CAP2_SDIO_IRQ_NOTHREAD (1 << 17)  	mmc_pm_flag_t		pm_caps;	/* supported pm features */ diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 1cd00b3a75b9..49ad7a943638 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h @@ -296,6 +296,7 @@ struct _mmc_csd {  #define EXT_CSD_SANITIZE_START		165     /* W */  #define EXT_CSD_WR_REL_PARAM		166	/* RO */  #define EXT_CSD_RPMB_MULT		168	/* RO */ +#define EXT_CSD_FW_CONFIG		169	/* R/W */  #define EXT_CSD_BOOT_WP			173	/* R/W */  #define EXT_CSD_ERASE_GROUP_DEF		175	/* R/W */  #define EXT_CSD_PART_CONFIG		179	/* R/W */ @@ -332,6 +333,8 @@ struct _mmc_csd {  #define EXT_CSD_GENERIC_CMD6_TIME	248	/* RO */  #define EXT_CSD_CACHE_SIZE		249	/* RO, 4 bytes */  #define EXT_CSD_PWR_CL_DDR_200_360	253	/* RO */ +#define EXT_CSD_FIRMWARE_VERSION	254	/* RO, 8 bytes */ +#define EXT_CSD_SUPPORTED_MODE		493	/* RO */  #define EXT_CSD_TAG_UNIT_SIZE		498	/* RO */  #define EXT_CSD_DATA_TAG_SUPPORT	499	/* RO */  #define EXT_CSD_MAX_PACKED_WRITES	500	/* RO */ diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index dba793e3a331..375af80bde7d 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h @@ -100,6 +100,12 @@ struct sdhci_host {  #define SDHCI_QUIRK2_BROKEN_DDR50			(1<<7)  /* Stop command (CMD12) can set Transfer Complete when not using MMC_RSP_BUSY */  #define SDHCI_QUIRK2_STOP_WITH_TC			(1<<8) +/* Controller does not support 64-bit DMA */ +#define SDHCI_QUIRK2_BROKEN_64_BIT_DMA			(1<<9) +/* need clear transfer mode register before send cmd */ +#define SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD	(1<<10) +/* Capability register bit-63 indicates HS400 support */ +#define SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400		(1<<11)  	int irq;		/* Device IRQ */  	void __iomem *ioaddr;	/* Mapped address */ @@ -130,6 +136,7 @@ struct sdhci_host {  #define SDHCI_SDIO_IRQ_ENABLED	(1<<9)	/* SDIO irq enabled */  #define SDHCI_SDR104_NEEDS_TUNING (1<<10)	/* SDR104/HS200 needs tuning */  #define SDHCI_USING_RETUNING_TIMER (1<<11)	/* Host is using a retuning timer for the card */ +#define SDHCI_USE_64_BIT_DMA	(1<<12)	/* Use 64-bit DMA */  	unsigned int version;	/* SDHCI spec. version */ @@ -155,12 +162,19 @@ struct sdhci_host {  	int sg_count;		/* Mapped sg entries */ -	u8 *adma_desc;		/* ADMA descriptor table */ -	u8 *align_buffer;	/* Bounce buffer */ +	void *adma_table;	/* ADMA descriptor table */ +	void *align_buffer;	/* Bounce buffer */ + +	size_t adma_table_sz;	/* ADMA descriptor table size */ +	size_t align_buffer_sz;	/* Bounce buffer size */  	dma_addr_t adma_addr;	/* Mapped ADMA descr. table */  	dma_addr_t align_addr;	/* Mapped bounce buffer */ +	unsigned int desc_sz;	/* ADMA descriptor size */ +	unsigned int align_sz;	/* ADMA alignment */ +	unsigned int align_mask;	/* ADMA alignment mask */ +  	struct tasklet_struct finish_tasklet;	/* Tasklet structures */  	struct timer_list timer;	/* Timer for timeouts */ diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index 50f0bc952328..aab032a6ae61 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h @@ -84,8 +84,6 @@ struct sdio_driver {  	struct device_driver drv;  }; -#define to_sdio_driver(d)	container_of(d, struct sdio_driver, drv) -  /**   * SDIO_DEVICE - macro used to describe a specific SDIO device   * @vend: the 16 bit manufacturer code  |