/* * Copyright (c) 2019 m4xw * Copyright (c) 2019 Atmosphere-NX * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __EMUMMC_H__ #define __EMUMMC_H__ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include "../emmc/sdmmc.h" #include "../soc/i2c.h" #include "../soc/gpio.h" #include "../utils/util.h" #include "../FS/FS.h" #include "../libs/fatfs/ff.h" // FS typedefs typedef sdmmc_accessor_t *(*_sdmmc_accessor_gc)(); typedef sdmmc_accessor_t *(*_sdmmc_accessor_sd)(); typedef sdmmc_accessor_t *(*_sdmmc_accessor_nand)(); typedef void (*_lock_mutex)(void *mtx); typedef void (*_unlock_mutex)(void *mtx); bool sdmmc_initialize(void); void sdmmc_finalize(void); int sdmmc_nand_get_active_partition_index(); sdmmc_accessor_t *sdmmc_accessor_get(int mmc_id); void mutex_lock_handler(int mmc_id); void mutex_unlock_handler(int mmc_id); uint64_t sdmmc_wrapper_read(void *buf, uint64_t bufSize, int mmc_id, unsigned int sector, unsigned int num_sectors); uint64_t sdmmc_wrapper_write(int mmc_id, unsigned int sector, unsigned int num_sectors, void *buf, uint64_t bufSize); // TODO: check if FatFS internal buffers are good (perf wise) to have a x16 alignment. typedef struct _file_based_ctxt { uint64_t parts; uint64_t part_size; FATFS *sd_fs; FIL fp_boot0; FIL fp_boot1; FIL fp_gpp[32]; } file_based_ctxt; #ifdef __cplusplus } #endif #endif /* __EMUMMC_H__ */