mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
fatfs: Add trim ioctl call, set FF_USE_TRIM as default option.
FF_USE_TRIM is set by default with this commit. Fatfs invokes disk_ioctl with CTRL_TRIM to erase the sectors calling sdmmc_erase_sectors to choose the right argument for the erase operation based on media type.
This commit is contained in:
parent
ffdbeee9f6
commit
964592e189
@ -67,6 +67,23 @@ DRESULT ff_sdmmc_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count)
|
|||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FF_USE_TRIM
|
||||||
|
DRESULT ff_sdmmc_trim (BYTE pdrv, DWORD start_sector, DWORD sector_count)
|
||||||
|
{
|
||||||
|
sdmmc_card_t* card = s_cards[pdrv];
|
||||||
|
assert(card);
|
||||||
|
sdmmc_erase_arg_t arg;
|
||||||
|
|
||||||
|
arg = sdmmc_can_discard(card) == ESP_OK ? SDMMC_DISCARD_ARG : SDMMC_ERASE_ARG;
|
||||||
|
esp_err_t err = sdmmc_erase_sectors(card, start_sector, sector_count, arg);
|
||||||
|
if (unlikely(err != ESP_OK)) {
|
||||||
|
ESP_LOGE(TAG, "sdmmc_erase_sectors failed (%d)", err);
|
||||||
|
return RES_ERROR;
|
||||||
|
}
|
||||||
|
return RES_OK;
|
||||||
|
}
|
||||||
|
#endif //FF_USE_TRIM
|
||||||
|
|
||||||
DRESULT ff_sdmmc_ioctl (BYTE pdrv, BYTE cmd, void* buff)
|
DRESULT ff_sdmmc_ioctl (BYTE pdrv, BYTE cmd, void* buff)
|
||||||
{
|
{
|
||||||
sdmmc_card_t* card = s_cards[pdrv];
|
sdmmc_card_t* card = s_cards[pdrv];
|
||||||
@ -82,6 +99,18 @@ DRESULT ff_sdmmc_ioctl (BYTE pdrv, BYTE cmd, void* buff)
|
|||||||
return RES_OK;
|
return RES_OK;
|
||||||
case GET_BLOCK_SIZE:
|
case GET_BLOCK_SIZE:
|
||||||
return RES_ERROR;
|
return RES_ERROR;
|
||||||
|
#if FF_USE_TRIM
|
||||||
|
case CTRL_TRIM:
|
||||||
|
/*
|
||||||
|
* limitation with sector erase when used in SDSPI mode
|
||||||
|
* hence return if host is SPI.
|
||||||
|
*/
|
||||||
|
if ((card->host.flags & SDMMC_HOST_FLAG_SPI) != 0) {
|
||||||
|
return RES_ERROR;
|
||||||
|
}
|
||||||
|
return ff_sdmmc_trim (pdrv, *((DWORD*)buff), //start_sector
|
||||||
|
(*((DWORD*)buff + 1) - *((DWORD*)buff) + 1)); //sector_count
|
||||||
|
#endif //FF_USE_TRIM
|
||||||
}
|
}
|
||||||
return RES_ERROR;
|
return RES_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,7 @@
|
|||||||
/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */
|
/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */
|
||||||
|
|
||||||
|
|
||||||
#define FF_USE_TRIM 0
|
#define FF_USE_TRIM 1
|
||||||
/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
|
/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
|
||||||
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
|
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
|
||||||
/ disk_ioctl() function. */
|
/ disk_ioctl() function. */
|
||||||
|
Loading…
Reference in New Issue
Block a user