1 /* 2 * Copyright 2008,2010 Freescale Semiconductor, Inc 3 * Andy Fleming 4 * 5 * Based (loosely) on the Linux code 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 10 #ifndef _MMC_PRIVATE_H_ 11 #define _MMC_PRIVATE_H_ 12 13 #include <mmc.h> 14 15 extern int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, 16 struct mmc_data *data); 17 extern int mmc_send_status(struct mmc *mmc, int timeout); 18 extern int mmc_set_blocklen(struct mmc *mmc, int len); 19 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 20 void mmc_adapter_card_type_ident(void); 21 #endif 22 23 #if CONFIG_IS_ENABLED(BLK) 24 ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, 25 void *dst); 26 #else 27 ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt, 28 void *dst); 29 #endif 30 31 #if CONFIG_IS_ENABLED(MMC_WRITE) 32 33 #if CONFIG_IS_ENABLED(BLK) 34 ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, 35 const void *src); 36 ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt); 37 #else 38 ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt, 39 const void *src); 40 ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt); 41 #endif 42 43 #else /* CONFIG_SPL_MMC_WRITE is not defined */ 44 45 /* declare dummies to reduce code size. */ 46 47 #if CONFIG_IS_ENABLED(BLK) 48 static inline unsigned long mmc_berase(struct udevice *dev, 49 lbaint_t start, lbaint_t blkcnt) 50 { 51 return 0; 52 } 53 54 static inline ulong mmc_bwrite(struct udevice *dev, lbaint_t start, 55 lbaint_t blkcnt, const void *src) 56 { 57 return 0; 58 } 59 #else 60 static inline unsigned long mmc_berase(struct blk_desc *block_dev, 61 lbaint_t start, lbaint_t blkcnt) 62 { 63 return 0; 64 } 65 66 static inline ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, 67 lbaint_t blkcnt, const void *src) 68 { 69 return 0; 70 } 71 #endif 72 73 #endif /* CONFIG_SPL_BUILD */ 74 75 #ifdef CONFIG_MMC_TRACE 76 void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd); 77 void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret); 78 void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd); 79 #else 80 static inline void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd) 81 { 82 } 83 84 static inline void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, 85 int ret) 86 { 87 } 88 89 static inline void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd) 90 { 91 } 92 #endif 93 94 /** 95 * mmc_get_next_devnum() - Get the next available MMC device number 96 * 97 * @return next available device number (0 = first), or -ve on error 98 */ 99 int mmc_get_next_devnum(void); 100 101 /** 102 * mmc_do_preinit() - Get an MMC device ready for use 103 */ 104 void mmc_do_preinit(void); 105 106 /** 107 * mmc_list_init() - Set up the list of MMC devices 108 */ 109 void mmc_list_init(void); 110 111 /** 112 * mmc_list_add() - Add a new MMC device to the list of devices 113 * 114 * @mmc: Device to add 115 */ 116 void mmc_list_add(struct mmc *mmc); 117 118 /** 119 * mmc_switch_part() - Switch to a new MMC hardware partition 120 * 121 * @mmc: MMC device 122 * @part_num: Hardware partition number 123 * @return 0 if OK, -ve on error 124 */ 125 int mmc_switch_part(struct mmc *mmc, unsigned int part_num); 126 127 /** 128 * mmc_switch() - Issue and MMC switch mode command 129 * 130 * @mmc: MMC device 131 * @set: Unused 132 * @index: Cmdarg index 133 * @value: Cmdarg value 134 * @return 0 if OK, -ve on error 135 */ 136 int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value); 137 138 #endif /* _MMC_PRIVATE_H_ */ 139