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); 17da61fa5fSPaul Burton extern int mmc_send_status(struct mmc *mmc, int timeout); 18da61fa5fSPaul Burton extern int mmc_set_blocklen(struct mmc *mmc, int len); 195a8dbdc6SYangbo Lu #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 205a8dbdc6SYangbo Lu void mmc_adapter_card_type_ident(void); 215a8dbdc6SYangbo Lu #endif 22da61fa5fSPaul Burton 23*c4d660d4SSimon Glass #if CONFIG_IS_ENABLED(BLK) 247dba0b93SSimon Glass ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, 257dba0b93SSimon Glass void *dst); 267dba0b93SSimon Glass #else 277dba0b93SSimon Glass ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt, 287dba0b93SSimon Glass void *dst); 297dba0b93SSimon Glass #endif 307dba0b93SSimon Glass 31d2d9bdfcSB, Ravi #if !(defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_SAVEENV)) 32da61fa5fSPaul Burton 33*c4d660d4SSimon Glass #if CONFIG_IS_ENABLED(BLK) 3433fb211dSSimon Glass ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, 3533fb211dSSimon Glass const void *src); 36561e624cSSimon Glass ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt); 3733fb211dSSimon Glass #else 3833fb211dSSimon Glass ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt, 3933fb211dSSimon Glass const void *src); 40561e624cSSimon Glass ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt); 4133fb211dSSimon Glass #endif 42da61fa5fSPaul Burton 43d2d9bdfcSB, Ravi #else /* CONFIG_SPL_BUILD and CONFIG_SPL_SAVEENV is not defined */ 44da61fa5fSPaul Burton 45d2d9bdfcSB, Ravi /* declare dummies to reduce code size. */ 46da61fa5fSPaul Burton 47*c4d660d4SSimon Glass #if CONFIG_IS_ENABLED(BLK) 48e419a3ecSSimon Glass static inline unsigned long mmc_berase(struct udevice *dev, 49e419a3ecSSimon Glass lbaint_t start, lbaint_t blkcnt) 50e419a3ecSSimon Glass { 51e419a3ecSSimon Glass return 0; 52e419a3ecSSimon Glass } 53e419a3ecSSimon Glass 54e419a3ecSSimon Glass static inline ulong mmc_bwrite(struct udevice *dev, lbaint_t start, 55e419a3ecSSimon Glass lbaint_t blkcnt, const void *src) 56e419a3ecSSimon Glass { 57e419a3ecSSimon Glass return 0; 58e419a3ecSSimon Glass } 59e419a3ecSSimon Glass #else 604101f687SSimon Glass static inline unsigned long mmc_berase(struct blk_desc *block_dev, 617c4213f6SStephen Warren lbaint_t start, lbaint_t blkcnt) 62da61fa5fSPaul Burton { 63da61fa5fSPaul Burton return 0; 64da61fa5fSPaul Burton } 65da61fa5fSPaul Burton 664101f687SSimon Glass static inline ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, 677c4213f6SStephen Warren lbaint_t blkcnt, const void *src) 68da61fa5fSPaul Burton { 69da61fa5fSPaul Burton return 0; 70da61fa5fSPaul Burton } 71e419a3ecSSimon Glass #endif 72da61fa5fSPaul Burton 73da61fa5fSPaul Burton #endif /* CONFIG_SPL_BUILD */ 74da61fa5fSPaul Burton 75c0c76ebaSSimon Glass #ifdef CONFIG_MMC_TRACE 76c0c76ebaSSimon Glass void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd); 77c0c76ebaSSimon Glass void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret); 78c0c76ebaSSimon Glass void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd); 79c0c76ebaSSimon Glass #else 80c0c76ebaSSimon Glass static inline void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd) 81c0c76ebaSSimon Glass { 82c0c76ebaSSimon Glass } 83c0c76ebaSSimon Glass 84c0c76ebaSSimon Glass static inline void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, 85c0c76ebaSSimon Glass int ret) 86c0c76ebaSSimon Glass { 87c0c76ebaSSimon Glass } 88c0c76ebaSSimon Glass 89c0c76ebaSSimon Glass static inline void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd) 90c0c76ebaSSimon Glass { 91c0c76ebaSSimon Glass } 92c0c76ebaSSimon Glass #endif 93c0c76ebaSSimon Glass 94c40fdca6SSimon Glass /** 95c40fdca6SSimon Glass * mmc_get_next_devnum() - Get the next available MMC device number 96c40fdca6SSimon Glass * 97c40fdca6SSimon Glass * @return next available device number (0 = first), or -ve on error 98c40fdca6SSimon Glass */ 99c40fdca6SSimon Glass int mmc_get_next_devnum(void); 100c40fdca6SSimon Glass 101c40fdca6SSimon Glass /** 102c40fdca6SSimon Glass * mmc_do_preinit() - Get an MMC device ready for use 103c40fdca6SSimon Glass */ 104c40fdca6SSimon Glass void mmc_do_preinit(void); 105c40fdca6SSimon Glass 106c40fdca6SSimon Glass /** 107c40fdca6SSimon Glass * mmc_list_init() - Set up the list of MMC devices 108c40fdca6SSimon Glass */ 109c40fdca6SSimon Glass void mmc_list_init(void); 110c40fdca6SSimon Glass 111c40fdca6SSimon Glass /** 112c40fdca6SSimon Glass * mmc_list_add() - Add a new MMC device to the list of devices 113c40fdca6SSimon Glass * 114c40fdca6SSimon Glass * @mmc: Device to add 115c40fdca6SSimon Glass */ 116c40fdca6SSimon Glass void mmc_list_add(struct mmc *mmc); 117c40fdca6SSimon Glass 1187dba0b93SSimon Glass /** 1197dba0b93SSimon Glass * mmc_switch_part() - Switch to a new MMC hardware partition 1207dba0b93SSimon Glass * 1217dba0b93SSimon Glass * @mmc: MMC device 1227dba0b93SSimon Glass * @part_num: Hardware partition number 1237dba0b93SSimon Glass * @return 0 if OK, -ve on error 1247dba0b93SSimon Glass */ 1257dba0b93SSimon Glass int mmc_switch_part(struct mmc *mmc, unsigned int part_num); 1267dba0b93SSimon Glass 127c40704f4SSimon Glass /** 128c40704f4SSimon Glass * mmc_switch() - Issue and MMC switch mode command 129c40704f4SSimon Glass * 130c40704f4SSimon Glass * @mmc: MMC device 131c40704f4SSimon Glass * @set: Unused 132c40704f4SSimon Glass * @index: Cmdarg index 133c40704f4SSimon Glass * @value: Cmdarg value 134c40704f4SSimon Glass * @return 0 if OK, -ve on error 135c40704f4SSimon Glass */ 136c40704f4SSimon Glass int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value); 137c40704f4SSimon Glass 138da61fa5fSPaul Burton #endif /* _MMC_PRIVATE_H_ */ 139