mirror of
https://github.com/zeldaret/mm.git
synced 2026-06-06 11:37:19 -04:00
Flash Headers (#1367)
* Move flash stuff * format * Cleanup * format * bss names * Small cleanup * osFlashGetAddr * uintptr_t
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
#include "stackcheck.h"
|
||||
#include "system_malloc.h"
|
||||
#include "z64thread.h"
|
||||
#include "sys_flashrom.h"
|
||||
#include "PR/os_internal_flash.h"
|
||||
|
||||
OSMesgQueue sFlashromMesgQueue;
|
||||
OSMesg sFlashromMesg[1];
|
||||
@@ -81,7 +83,7 @@ s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) {
|
||||
if (!SysFlashrom_IsInit()) {
|
||||
return -1;
|
||||
}
|
||||
osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE);
|
||||
osInvalDCache(addr, pageCount * FLASH_BLOCK_SIZE);
|
||||
osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue);
|
||||
osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK);
|
||||
return 0;
|
||||
@@ -103,12 +105,12 @@ s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) {
|
||||
return -1;
|
||||
}
|
||||
// Ensure the page is always aligned to a sector boundary.
|
||||
if ((pageNum % FLASH_PAGE_SIZE) != 0) {
|
||||
if ((pageNum % FLASH_BLOCK_SIZE) != 0) {
|
||||
Fault_AddHungupAndCrash("../sys_flashrom.c", 275);
|
||||
}
|
||||
osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE);
|
||||
osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE);
|
||||
for (i = 0; i < pageCount; i++) {
|
||||
osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue);
|
||||
osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_BLOCK_SIZE, &sFlashromMesgQueue);
|
||||
osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK);
|
||||
result = osFlashWriteArray(i + pageNum);
|
||||
if (result != 0) {
|
||||
@@ -125,7 +127,7 @@ s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) {
|
||||
if (!SysFlashrom_IsInit()) {
|
||||
return -1;
|
||||
}
|
||||
osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE);
|
||||
osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE);
|
||||
i = 0;
|
||||
failRetry:
|
||||
result = SysFlashrom_EraseSector(pageNum);
|
||||
@@ -153,7 +155,7 @@ s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) {
|
||||
u32 size;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) {
|
||||
for (i = 0; i < pageCount * FLASH_BLOCK_SIZE; i += 4) {
|
||||
if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) {
|
||||
return false;
|
||||
}
|
||||
@@ -169,7 +171,7 @@ s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) {
|
||||
if (!SysFlashrom_IsInit()) {
|
||||
return -1;
|
||||
}
|
||||
size = pageCount * FLASH_PAGE_SIZE;
|
||||
size = pageCount * FLASH_BLOCK_SIZE;
|
||||
data = SystemArena_Malloc(size);
|
||||
if (data == NULL) {
|
||||
ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount);
|
||||
|
||||
Reference in New Issue
Block a user