Skip to content

Commit

Permalink
Add alignment argument
Browse files Browse the repository at this point in the history
Loosen alignment requirements
  • Loading branch information
Extrems committed Feb 11, 2025
1 parent 1ad0be3 commit 91308d5
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 13 deletions.
2 changes: 1 addition & 1 deletion gc/ogc/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ void SYS_Init(void);
void* SYS_AllocateFramebuffer(GXRModeObj *rmode);


bool SYS_IsDMAAddress(const void *addr);
bool SYS_IsDMAAddress(const void *addr,u32 align);
void SYS_ProtectRange(u32 chan,void *addr,u32 bytes,u32 cntrl);
void SYS_StartPMC(u32 mcr0val,u32 mcr1val);
void SYS_DumpPMC(void);
Expand Down
6 changes: 3 additions & 3 deletions libogc/dvd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3594,7 +3594,7 @@ static bool __gcdvd_ReadSectors(DISC_INTERFACE *disc,sec_t sector,sec_t numSecto
if(sector & ~0x7fffff) return false;
if(numSectors & ~0x1fffff) return false;
if(disc->bytesPerSector != 2048) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 32)) return false;

if(DVD_ReadAbs(&blk, buffer, numSectors << 11, sector << 11) < 0)
return false;
Expand Down Expand Up @@ -3658,7 +3658,7 @@ static bool __gcode_ReadSectors(DISC_INTERFACE *disc,sec_t sector,sec_t numSecto
if((u32)sector != sector) return false;
if(numSectors & ~0x7fffff) return false;
if(disc->bytesPerSector != 512) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 32)) return false;

if(DVD_GcodeRead(&blk, buffer, numSectors << 9, sector) < 0)
return false;
Expand All @@ -3675,7 +3675,7 @@ static bool __gcode_WriteSectors(DISC_INTERFACE *disc,sec_t sector,sec_t numSect
if((u32)sector != sector) return false;
if((u32)numSectors != numSectors) return false;
if(disc->bytesPerSector != 512) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 32)) return false;

if(DVD_GcodeWrite(&blk, buffer, numSectors, sector) < 0)
return false;
Expand Down
4 changes: 2 additions & 2 deletions libogc/gcsd.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ static bool __gcsd_readSectors(DISC_INTERFACE *disc, sec_t sector, sec_t numSect
if((sector + numSectors) < sector) return false;
if((sector + numSectors) > disc->numberOfSectors) return false;
if(disc->bytesPerSector != PAGE_SIZE512) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 1)) return false;
if(!sdgecko_isInitialized(chan)) return false;

if(numSectors == 1)
Expand All @@ -148,7 +148,7 @@ static bool __gcsd_writeSectors(DISC_INTERFACE *disc, sec_t sector, sec_t numSec
if((sector + numSectors) < sector) return false;
if((sector + numSectors) > disc->numberOfSectors) return false;
if(disc->bytesPerSector != PAGE_SIZE512) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 1)) return false;
if(!sdgecko_isInitialized(chan)) return false;

if(numSectors == 1)
Expand Down
11 changes: 6 additions & 5 deletions libogc/system.c
Original file line number Diff line number Diff line change
Expand Up @@ -1481,15 +1481,16 @@ void SYS_ProtectRange(u32 chan,void *addr,u32 bytes,u32 cntrl)
}
}

bool SYS_IsDMAAddress(const void *addr)
bool SYS_IsDMAAddress(const void *addr,u32 align)
{
if((u32)addr&0x1F) return false;
if((u32)addr>=0x80000000 && (u32)addr<0x84000000) return true;
if((u32)addr>=0xC0000000 && (u32)addr<0xC4000000) return true;
if((u32)addr&(align-1)) return false;
#if defined(HW_RVL)
if((u32)addr>=0x90000000 && (u32)addr<0xA0000000) return true;
if((u32)addr>=0xD0000000 && (u32)addr<0xE0000000) return true;
if((u32)addr>=0x90000000 && (u32)addr<0xA0000000) return true;
if((u32)addr&0x03) return false;
#endif
if((u32)addr>=0xC0000000 && (u32)addr<0xC4000000) return true;
if((u32)addr>=0x80000000 && (u32)addr<0x84000000) return true;
return false;
}

Expand Down
4 changes: 2 additions & 2 deletions libogc/wiisd.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@ static bool sdio_ReadSectors(DISC_INTERFACE *disc, sec_t sector, sec_t numSector
if((sector + numSectors) < sector) return false;
if((sector + numSectors) > disc->numberOfSectors) return false;
if(disc->bytesPerSector != PAGE_SIZE512) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 1)) return false;
if(!__sdio_initialized) return false;

ret = __sd0_select();
Expand Down Expand Up @@ -662,7 +662,7 @@ static bool sdio_WriteSectors(DISC_INTERFACE *disc, sec_t sector, sec_t numSecto
if((sector + numSectors) < sector) return false;
if((sector + numSectors) > disc->numberOfSectors) return false;
if(disc->bytesPerSector != PAGE_SIZE512) return false;
if(!SYS_IsDMAAddress(buffer)) return false;
if(!SYS_IsDMAAddress(buffer, 1)) return false;
if(!__sdio_initialized) return false;

ret = __sd0_select();
Expand Down

0 comments on commit 91308d5

Please sign in to comment.