diff options
author | Jesse Talavera-Greenberg <jesse@jesse.tg> | 2023-10-11 11:20:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-11 17:20:05 +0200 |
commit | d4e51f80601f57399db49f1010c45427bd2bf3c4 (patch) | |
tree | 206985e7bedfc1755941eeba26d6605d4e03fa0a /src/fatfs/diskio.c | |
parent | b2fcff97c186cc9db263089acd4810ea7d58517d (diff) |
Refactor DSi_NAND (#1844)
* Refactor diskio's contents
- Change ff_disk_read_cb/write_cb into a std::function instead of a raw pointer
- Add const specifiers as needed
* Refactor DSi_NAND to manage the file system's mounted lifetime with RAII
* Split NANDMount into NANDMount and NANDImage
- NANDImage is used for information about the NAND that doesn't require decryption or filesystem access
- NANDMount is used to actually access the file system
- Both classes manage their respective resources (the NAND file handle and the NAND's mount) with RAII
- Also split the file loading into another function that I will remove in a later PR
* Make NANDMount immovable
* Remove NAND-loading code that I had sectioned off into a function
- Incomplete copypasta
- I must have gotten distracted
* Tidy up NANDImage's initialization
- Don't unmount the disk image if the constructor fails (that's NANDMount's job now)
- Only assign CurFile if the constructor succeeds
* Add some const-correctness
* Move DSi NAND initialization to the frontend
- The NANDImage is now installed via a unique_ptr in DSi
* Remove Platform::DSi_NANDPath
- Not Config::DSiNANDPath; that can still be configured as usual
- The core no longer needs to care
Diffstat (limited to 'src/fatfs/diskio.c')
-rw-r--r-- | src/fatfs/diskio.c | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/src/fatfs/diskio.c b/src/fatfs/diskio.c deleted file mode 100644 index 5b5c054..0000000 --- a/src/fatfs/diskio.c +++ /dev/null @@ -1,153 +0,0 @@ -/*-----------------------------------------------------------------------*/ -/* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */ -/*-----------------------------------------------------------------------*/ -/* If a working storage control module is available, it should be */ -/* attached to the FatFs via a glue function rather than modifying it. */ -/* This is an example of glue functions to attach various exsisting */ -/* storage control modules to the FatFs module with a defined API. */ -/*-----------------------------------------------------------------------*/ - -#include "ff.h" /* Obtains integer types */ -#include "diskio.h" /* Declarations of disk functions */ - - -static ff_disk_read_cb ReadCb; -static ff_disk_write_cb WriteCb; -static LBA_t SectorCount; -static DSTATUS Status = STA_NOINIT | STA_NODISK; - - -void ff_disk_open(ff_disk_read_cb readcb, ff_disk_write_cb writecb, LBA_t seccnt) -{ - if (!readcb) return; - - ReadCb = readcb; - WriteCb = writecb; - SectorCount = seccnt; - - Status &= ~STA_NODISK; - if (!writecb) Status |= STA_PROTECT; - else Status &= ~STA_PROTECT; -} - -void ff_disk_close(void) -{ - ReadCb = (void*)0; - WriteCb = (void*)0; - SectorCount = 0; - - Status &= ~STA_PROTECT; - Status |= STA_NODISK; -} - - -/*-----------------------------------------------------------------------*/ -/* Get Drive Status */ -/*-----------------------------------------------------------------------*/ - -DSTATUS disk_status ( - BYTE pdrv /* Physical drive nmuber to identify the drive */ -) -{ - return Status; -} - - - -/*-----------------------------------------------------------------------*/ -/* Inidialize a Drive */ -/*-----------------------------------------------------------------------*/ - -DSTATUS disk_initialize ( - BYTE pdrv /* Physical drive nmuber to identify the drive */ -) -{ - Status &= ~STA_NOINIT; - return Status; -} - - - -/*-----------------------------------------------------------------------*/ -/* Read Sector(s) */ -/*-----------------------------------------------------------------------*/ - -DRESULT disk_read ( - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - BYTE *buff, /* Data buffer to store read data */ - LBA_t sector, /* Start sector in LBA */ - UINT count /* Number of sectors to read */ -) -{ - if (Status & (STA_NOINIT | STA_NODISK)) return RES_NOTRDY; - if (!ReadCb) return RES_ERROR; - - UINT res = ReadCb(buff, sector, count); - if (res != count) return RES_ERROR; - return RES_OK; -} - - - -/*-----------------------------------------------------------------------*/ -/* Write Sector(s) */ -/*-----------------------------------------------------------------------*/ - -#if FF_FS_READONLY == 0 - -DRESULT disk_write ( - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - const BYTE *buff, /* Data to be written */ - LBA_t sector, /* Start sector in LBA */ - UINT count /* Number of sectors to write */ -) -{ - if (Status & (STA_NOINIT | STA_NODISK)) return RES_NOTRDY; - if (Status & STA_PROTECT) return RES_WRPRT; - if (!WriteCb) return RES_ERROR; - - UINT res = WriteCb(buff, sector, count); - if (res != count) return RES_ERROR; - return RES_OK; -} - -#endif - - -/*-----------------------------------------------------------------------*/ -/* Miscellaneous Functions */ -/*-----------------------------------------------------------------------*/ - -DRESULT disk_ioctl ( - BYTE pdrv, /* Physical drive nmuber (0..) */ - BYTE cmd, /* Control code */ - void *buff /* Buffer to send/receive control data */ -) -{ - switch (cmd) - { - case CTRL_SYNC: - // TODO: fflush? - return RES_OK; - - case GET_SECTOR_COUNT: - *(LBA_t*)buff = SectorCount; - return RES_OK; - - case GET_SECTOR_SIZE: - *(WORD*)buff = 0x200; - return RES_OK; - - case GET_BLOCK_SIZE: - *(DWORD*)buff = 1; - return RES_OK; - - case CTRL_TRIM: - // TODO?? - return RES_OK; - } - - //printf("FatFS: unknown disk_ioctl(%02X, %02X, %p)\n", pdrv, cmd, buff); - return RES_PARERR; -} - |