1 /*
2  * Copyright 2022 NXP
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief Public API for MMC memory card subsystem
10  */
11 
12 #ifndef ZEPHYR_INCLUDE_SD_MMC_H_
13 #define ZEPHYR_INCLUDE_SD_MMC_H_
14 
15 #include <zephyr/device.h>
16 #include <zephyr/drivers/sdhc.h>
17 #include <zephyr/sd/sd.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /**
24  * @brief Write blocks to MMC card from buffer
25  *
26  * Writes blocks from MMC buffer to MMC card. For best performance, this buffer
27  * should be aligned to CONFIG_SDHC_BUFFER_ALIGNMENT
28  * @param card MMC card to write from
29  * @param wbuf write buffer
30  * @param start_block first block to write to
31  * @param num_blocks number of blocks to write
32  * @retval 0 write succeeded
33  * @retval -EBUSY: card is busy with another request
34  * @retval -ETIMEDOUT: card write timed out
35  * @retval -EIO: I/O error
36  */
37 int mmc_write_blocks(struct sd_card *card, const uint8_t *wbuf,
38 	uint32_t start_block, uint32_t num_blocks);
39 
40 /**
41  * @brief Read block from MMC card to buffer
42  *
43  * Reads blocks into MMC buffer from MMC card. For best performance, this buffer
44  * should be aligned to CONFIG_SDHC_BUFFER_ALIGNMENT
45  * @param card MMC card to read from
46  * @param rbuf read buffer
47  * @param start_block first block to read from
48  * @param num_blocks number of blocks to read
49  * @retval 0 read succeeded
50  * @retval -EBUSY: card is busy with another request
51  * @retval -ETIMEDOUT: card read timed out
52  * @retval -EIO: I/O error
53  */
54 int mmc_read_blocks(struct sd_card *card, uint8_t *rbuf,
55 	uint32_t start_block, uint32_t num_blocks);
56 
57 /**
58  * @brief Get I/O control data from MMC card
59  *
60  * Sends I/O control commands to MMC card.
61  * @param card MMC card
62  * @param cmd I/O control command
63  *	Mirrors disk subsystem,
64  *	see include/zephyr/drivers/disk.h for list of possible commands.
65  * @param buf I/O control buf
66  * @retval 0 IOCTL command succeeded
67  * @retval -ENOTSUP: IOCTL command not supported
68  * @retval -EIO: I/O failure
69  */
70 int mmc_ioctl(struct sd_card *card, uint8_t cmd, void *buf);
71 
72 #ifdef __cplusplus
73 }
74 #endif
75 
76 #endif /* ZEPHYR_INCLUDE_SD_MMC_H_ */
77