xref: /rk3399_rockchip-uboot/drivers/mmc/mmc_private.h (revision ea6a84b6834a830883a492f3991ab4afefd038af)
1da61fa5fSPaul Burton /*
2da61fa5fSPaul Burton  * Copyright 2008,2010 Freescale Semiconductor, Inc
3da61fa5fSPaul Burton  * Andy Fleming
4da61fa5fSPaul Burton  *
5da61fa5fSPaul Burton  * Based (loosely) on the Linux code
6da61fa5fSPaul Burton  *
7da61fa5fSPaul Burton  * SPDX-License-Identifier:	GPL-2.0+
8da61fa5fSPaul Burton  */
9da61fa5fSPaul Burton 
10da61fa5fSPaul Burton #ifndef _MMC_PRIVATE_H_
11da61fa5fSPaul Burton #define _MMC_PRIVATE_H_
12da61fa5fSPaul Burton 
13da61fa5fSPaul Burton #include <mmc.h>
14da61fa5fSPaul Burton 
15da61fa5fSPaul Burton extern int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
16da61fa5fSPaul Burton 			struct mmc_data *data);
1747f7fd3aSJason Zhu #ifdef CONFIG_SPL_BLK_READ_PREPARE
1847f7fd3aSJason Zhu int mmc_send_cmd_prepare(struct mmc *mmc, struct mmc_cmd *cmd,
1947f7fd3aSJason Zhu 			 struct mmc_data *data);
2047f7fd3aSJason Zhu #endif
21da61fa5fSPaul Burton extern int mmc_send_status(struct mmc *mmc, int timeout);
22da61fa5fSPaul Burton extern int mmc_set_blocklen(struct mmc *mmc, int len);
23*ea6a84b6SZiyuan Xu int mmc_set_blockcount(struct mmc *mmc, unsigned int blkcnt, bool is_rel_write);
245a8dbdc6SYangbo Lu #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
255a8dbdc6SYangbo Lu void mmc_adapter_card_type_ident(void);
265a8dbdc6SYangbo Lu #endif
27da61fa5fSPaul Burton 
28c4d660d4SSimon Glass #if CONFIG_IS_ENABLED(BLK)
297dba0b93SSimon Glass ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
307dba0b93SSimon Glass 		void *dst);
3147f7fd3aSJason Zhu #ifdef CONFIG_SPL_BLK_READ_PREPARE
3247f7fd3aSJason Zhu ulong mmc_bread_prepare(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
3347f7fd3aSJason Zhu 			void *dst);
3447f7fd3aSJason Zhu #endif
357dba0b93SSimon Glass #else
367dba0b93SSimon Glass ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
377dba0b93SSimon Glass 		void *dst);
3847f7fd3aSJason Zhu #ifdef CONFIG_SPL_BLK_READ_PREPARE
3947f7fd3aSJason Zhu ulong mmc_bread_prepare(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
4047f7fd3aSJason Zhu 			void *dst);
4147f7fd3aSJason Zhu #endif
427dba0b93SSimon Glass #endif
437dba0b93SSimon Glass 
449127fbf4SJean-Jacques Hiblot #if CONFIG_IS_ENABLED(MMC_WRITE)
45da61fa5fSPaul Burton 
46c4d660d4SSimon Glass #if CONFIG_IS_ENABLED(BLK)
4733fb211dSSimon Glass ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
4833fb211dSSimon Glass 		 const void *src);
49561e624cSSimon Glass ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt);
5033fb211dSSimon Glass #else
5133fb211dSSimon Glass ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
5233fb211dSSimon Glass 		 const void *src);
53561e624cSSimon Glass ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt);
5433fb211dSSimon Glass #endif
55da61fa5fSPaul Burton 
569127fbf4SJean-Jacques Hiblot #else /* CONFIG_SPL_MMC_WRITE is not defined */
57da61fa5fSPaul Burton 
58d2d9bdfcSB, Ravi /* declare dummies to reduce code size. */
59da61fa5fSPaul Burton 
60c4d660d4SSimon Glass #if CONFIG_IS_ENABLED(BLK)
mmc_berase(struct udevice * dev,lbaint_t start,lbaint_t blkcnt)61e419a3ecSSimon Glass static inline unsigned long mmc_berase(struct udevice *dev,
62e419a3ecSSimon Glass 				       lbaint_t start, lbaint_t blkcnt)
63e419a3ecSSimon Glass {
64e419a3ecSSimon Glass 	return 0;
65e419a3ecSSimon Glass }
66e419a3ecSSimon Glass 
mmc_bwrite(struct udevice * dev,lbaint_t start,lbaint_t blkcnt,const void * src)67e419a3ecSSimon Glass static inline ulong mmc_bwrite(struct udevice *dev, lbaint_t start,
68e419a3ecSSimon Glass 			       lbaint_t blkcnt, const void *src)
69e419a3ecSSimon Glass {
70e419a3ecSSimon Glass 	return 0;
71e419a3ecSSimon Glass }
72e419a3ecSSimon Glass #else
mmc_berase(struct blk_desc * block_dev,lbaint_t start,lbaint_t blkcnt)734101f687SSimon Glass static inline unsigned long mmc_berase(struct blk_desc *block_dev,
747c4213f6SStephen Warren 				       lbaint_t start, lbaint_t blkcnt)
75da61fa5fSPaul Burton {
76da61fa5fSPaul Burton 	return 0;
77da61fa5fSPaul Burton }
78da61fa5fSPaul Burton 
mmc_bwrite(struct blk_desc * block_dev,lbaint_t start,lbaint_t blkcnt,const void * src)794101f687SSimon Glass static inline ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start,
807c4213f6SStephen Warren 			       lbaint_t blkcnt, const void *src)
81da61fa5fSPaul Burton {
82da61fa5fSPaul Burton 	return 0;
83da61fa5fSPaul Burton }
84e419a3ecSSimon Glass #endif
85da61fa5fSPaul Burton 
86da61fa5fSPaul Burton #endif /* CONFIG_SPL_BUILD */
87da61fa5fSPaul Burton 
88c0c76ebaSSimon Glass #ifdef CONFIG_MMC_TRACE
89c0c76ebaSSimon Glass void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd);
90c0c76ebaSSimon Glass void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret);
91c0c76ebaSSimon Glass void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd);
92c0c76ebaSSimon Glass #else
mmmc_trace_before_send(struct mmc * mmc,struct mmc_cmd * cmd)93c0c76ebaSSimon Glass static inline void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd)
94c0c76ebaSSimon Glass {
95c0c76ebaSSimon Glass }
96c0c76ebaSSimon Glass 
mmmc_trace_after_send(struct mmc * mmc,struct mmc_cmd * cmd,int ret)97c0c76ebaSSimon Glass static inline void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd,
98c0c76ebaSSimon Glass 					 int ret)
99c0c76ebaSSimon Glass {
100c0c76ebaSSimon Glass }
101c0c76ebaSSimon Glass 
mmc_trace_state(struct mmc * mmc,struct mmc_cmd * cmd)102c0c76ebaSSimon Glass static inline void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd)
103c0c76ebaSSimon Glass {
104c0c76ebaSSimon Glass }
105c0c76ebaSSimon Glass #endif
106c0c76ebaSSimon Glass 
107c40fdca6SSimon Glass /**
108c40fdca6SSimon Glass  * mmc_get_next_devnum() - Get the next available MMC device number
109c40fdca6SSimon Glass  *
110c40fdca6SSimon Glass  * @return next available device number (0 = first), or -ve on error
111c40fdca6SSimon Glass  */
112c40fdca6SSimon Glass int mmc_get_next_devnum(void);
113c40fdca6SSimon Glass 
114c40fdca6SSimon Glass /**
115c40fdca6SSimon Glass  * mmc_do_preinit() - Get an MMC device ready for use
116c40fdca6SSimon Glass  */
117c40fdca6SSimon Glass void mmc_do_preinit(void);
118c40fdca6SSimon Glass 
119c40fdca6SSimon Glass /**
120c40fdca6SSimon Glass  * mmc_list_init() - Set up the list of MMC devices
121c40fdca6SSimon Glass  */
122c40fdca6SSimon Glass void mmc_list_init(void);
123c40fdca6SSimon Glass 
124c40fdca6SSimon Glass /**
125c40fdca6SSimon Glass  * mmc_list_add() - Add a new MMC device to the list of devices
126c40fdca6SSimon Glass  *
127c40fdca6SSimon Glass  * @mmc:	Device to add
128c40fdca6SSimon Glass  */
129c40fdca6SSimon Glass void mmc_list_add(struct mmc *mmc);
130c40fdca6SSimon Glass 
1317dba0b93SSimon Glass /**
1327dba0b93SSimon Glass  * mmc_switch_part() - Switch to a new MMC hardware partition
1337dba0b93SSimon Glass  *
1347dba0b93SSimon Glass  * @mmc:	MMC device
1357dba0b93SSimon Glass  * @part_num:	Hardware partition number
1367dba0b93SSimon Glass  * @return 0 if OK, -ve on error
1377dba0b93SSimon Glass  */
1387dba0b93SSimon Glass int mmc_switch_part(struct mmc *mmc, unsigned int part_num);
1397dba0b93SSimon Glass 
140c40704f4SSimon Glass /**
141c40704f4SSimon Glass  * mmc_switch() - Issue and MMC switch mode command
142c40704f4SSimon Glass  *
143c40704f4SSimon Glass  * @mmc:	MMC device
144c40704f4SSimon Glass  * @set:	Unused
145c40704f4SSimon Glass  * @index:	Cmdarg index
146c40704f4SSimon Glass  * @value:	Cmdarg value
147c40704f4SSimon Glass  * @return 0 if OK, -ve on error
148c40704f4SSimon Glass  */
149c40704f4SSimon Glass int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value);
150c40704f4SSimon Glass 
151da61fa5fSPaul Burton #endif /* _MMC_PRIVATE_H_ */
152