mirror of
				https://github.com/Atmosphere-NX/Atmosphere.git
				synced 2025-10-31 11:15:51 +01:00 
			
		
		
		
	subrepo: subdir: "emummc" merged: "a9d569594" upstream: origin: "https://github.com/m4xw/emummc" branch: "develop" commit: "a9d569594" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
		
			Vendored
		
	
	
	
| /*
 | |
|  * Copyright (c) 2018 naehrwert
 | |
|  * Copyright (c) 2018-2020 CTCaer
 | |
|  *
 | |
|  * 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 <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef _SDMMC_H_
 | |
| #define _SDMMC_H_
 | |
| 
 | |
| #include "../utils/types.h"
 | |
| #include "../FS/FS.h"
 | |
| #include "sdmmc_driver.h"
 | |
| 
 | |
| typedef struct _mmc_cid
 | |
| {
 | |
| 	u32 manfid;
 | |
| 	u8  prod_name[8];
 | |
| 	u8  card_bga;
 | |
| 	u8  prv;
 | |
| 	u32 serial;
 | |
| 	u16 oemid;
 | |
| 	u16	year;
 | |
| 	u8  hwrev;
 | |
| 	u8  fwrev;
 | |
| 	u8  month;
 | |
| } mmc_cid_t;
 | |
| 
 | |
| typedef struct _mmc_csd
 | |
| {
 | |
| 	u8  structure;
 | |
| 	u8  mmca_vsn;
 | |
| 	u16 cmdclass;
 | |
| 	u32 c_size;
 | |
| 	u32 r2w_factor;
 | |
| 	u32 max_dtr;
 | |
| 	u32 erase_size;		/* In sectors */
 | |
| 	u32 read_blkbits;
 | |
| 	u32 write_blkbits;
 | |
| 	u32 capacity;
 | |
| 	u8  write_protect;
 | |
| 	u16 busspeed;
 | |
| } mmc_csd_t;
 | |
| 
 | |
| typedef struct _mmc_ext_csd
 | |
| {
 | |
| 	u32 sectors;
 | |
| 	int bkops;        /* background support bit */
 | |
| 	int bkops_en;     /* manual bkops enable bit */
 | |
| 	u8  rev;
 | |
| 	u8  ext_struct;   /* 194 */
 | |
| 	u8  card_type;    /* 196 */
 | |
| 	u8  bkops_status; /* 246 */
 | |
| 	u8  pre_eol_info;
 | |
| 	u8  dev_life_est_a;
 | |
| 	u8  dev_life_est_b;
 | |
| 	u8  boot_mult;
 | |
| 	u8  rpmb_mult;
 | |
| 	u16 dev_version;
 | |
| } mmc_ext_csd_t;
 | |
| 
 | |
| typedef struct _sd_scr
 | |
| {
 | |
| 	u8 sda_vsn;
 | |
| 	u8 sda_spec3;
 | |
| 	u8 bus_widths;
 | |
| 	u8 cmds;
 | |
| } sd_scr_t;
 | |
| 
 | |
| typedef struct _sd_ssr
 | |
| {
 | |
| 	u8 bus_width;
 | |
| 	u8 speed_class;
 | |
| 	u8 uhs_grade;
 | |
| 	u8 video_class;
 | |
| 	u8 app_class;
 | |
| 	u32 protected_size;
 | |
| } sd_ssr_t;
 | |
| 
 | |
| /*! SDMMC storage context. */
 | |
| typedef struct _sdmmc_storage_t
 | |
| {
 | |
| 	sdmmc_t *sdmmc;
 | |
| 	u32 rca;
 | |
| 	int has_sector_access;
 | |
| 	u32 sec_cnt;
 | |
| 	int is_low_voltage;
 | |
| 	u32 partition;
 | |
| 	u8  raw_cid[0x10];
 | |
| 	u8  raw_csd[0x10];
 | |
| 	u8  raw_scr[8];
 | |
| 	mmc_cid_t     cid;
 | |
| 	mmc_csd_t     csd;
 | |
| 	mmc_ext_csd_t ext_csd;
 | |
| 	sd_scr_t      scr;
 | |
| 	int initialized;
 | |
| } sdmmc_storage_t;
 | |
| 
 | |
| extern sdmmc_accessor_t *_current_accessor;
 | |
| extern bool sdmmc_memcpy_buf;
 | |
| 
 | |
| int sdmmc_storage_end(sdmmc_storage_t *storage);
 | |
| int sdmmc_storage_read(sdmmc_storage_t *storage, u32 sector, u32 num_sectors, void *buf);
 | |
| int sdmmc_storage_write(sdmmc_storage_t *storage, u32 sector, u32 num_sectors, void *buf);
 | |
| int sdmmc_storage_init_mmc(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 bus_width, u32 type);
 | |
| int sdmmc_storage_set_mmc_partition(sdmmc_storage_t *storage, u32 partition);
 | |
| int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 bus_width, u32 type);
 | |
| int sdmmc_storage_init_gc(sdmmc_storage_t *storage, sdmmc_t *sdmmc);
 | |
| intptr_t sdmmc_calculate_dma_addr(sdmmc_accessor_t *_this, void *buf, unsigned int num_sectors);
 | |
| int sdmmc_calculate_dma_index(sdmmc_accessor_t *_this, void *buf, unsigned int num_sectors);
 | |
| int sdmmc_calculate_fitting_dma_index(sdmmc_accessor_t *_this, unsigned int num_sectors);
 | |
| 
 | |
| #endif
 |