Clean up diskio.c, enforce buffer alignment

This commit is contained in:
shchmue 2019-05-17 09:17:14 -04:00
parent 83b75af726
commit 220fb4ba3c

View file

@ -25,7 +25,6 @@
#include <string.h>
#include "diskio.h" /* FatFs lower layer API */
#include "../../gfx/gfx.h"
#include "../../mem/heap.h"
#include "../../sec/se.h"
#include "../../storage/nx_emmc.h"
@ -38,10 +37,6 @@ extern sdmmc_storage_t sd_storage;
extern sdmmc_storage_t storage;
extern emmc_part_t *system_part;
typedef struct {
u64 b, a;
} le128;
typedef struct {
u32 sector;
u32 visit_count;
@ -81,7 +76,6 @@ static inline void _gf256_mul_x_le(void *block) {
pdata[0x0] ^= 0x87;
}
//8378ms before doing the block op all at once, 2179ms after!
static inline int _emmc_xts(u32 ks1, u32 ks2, u32 enc, u8 *tweak, bool regen_tweak, u32 tweak_exp, u64 sec, void *dst, void *src, u32 secsize) {
int res = 0;
u8 *pdst = (u8 *)dst;
@ -151,9 +145,9 @@ DRESULT disk_read (
return RES_ERROR;
case 1:;
static u8 tweak[0x10];
static u64 prev_cluster = -1;
static u32 prev_sector = 0;
__attribute__ ((aligned (16))) static u8 tweak[0x10];
__attribute__ ((aligned (16))) static u64 prev_cluster = -1;
__attribute__ ((aligned (16))) static u32 prev_sector = 0;
u32 tweak_exp = 0;
bool regen_tweak = true, cache_sector = false;
@ -166,7 +160,6 @@ DRESULT disk_read (
memcpy(tweak, sector_cache[s].tweak, 0x10);
prev_sector = sector;
prev_cluster = sector / 0x20;
//gfx_printf("addr %x sec %x count %x cached\n", sector * 0x200, sector, count);
return RES_OK;
}
}
@ -180,7 +173,6 @@ DRESULT disk_read (
}
if (nx_emmc_part_read(&storage, system_part, sector, count, buff)) {
//gfx_hexdump(0, buff, 0x100);
if (prev_cluster != sector / 0x20) { // sector in different cluster than last read
prev_cluster = sector / 0x20;
tweak_exp = sector % 0x20;
@ -192,13 +184,11 @@ DRESULT disk_read (
}
// fatfs will never pull more than a cluster
//gfx_printf("sec %6x count %2x tweak %2x\n", sector, count, tweak_exp);
_emmc_xts(9, 8, 0, tweak, regen_tweak, tweak_exp, prev_cluster, buff, buff, count * 0x200);
if (cache_sector) {
memcpy(sector_cache[s].cached_sector, buff, 0x200);
memcpy(sector_cache[s].tweak, tweak, 0x10);
}
//gfx_hexdump(0, buff, 0x10);
prev_sector = sector + count - 1;
return RES_OK;
}