From e0459b6cf087860b645f436fe550757d46952774 Mon Sep 17 00:00:00 2001 From: tantricity Date: Wed, 21 Jul 2010 17:56:42 +0000 Subject: [PATCH] changes from dhewg git-svn-id: https://devkitpro.svn.sourceforge.net/svnroot/devkitpro/trunk/libogc@4194 258c5a1a-4f63-435d-9564-e8f6d34ab52c --- Makefile | 2 +- gc/ogc/ipc.h | 1 - gc/ogc/machine/processor.h | 5 ++ libogc/audio.c | 114 ++++++++++++++++++++++++--------------------- libogc/dsp.c | 42 +++++++++-------- libogc/ios.c | 83 +++++++++++++++++++++++---------- libogc/ipc.c | 2 +- libtinysmb/smb_devoptab.c | 16 +------ 8 files changed, 151 insertions(+), 114 deletions(-) diff --git a/Makefile b/Makefile index b54ac0a..e28efef 100644 --- a/Makefile +++ b/Makefile @@ -95,7 +95,7 @@ ifeq ($(PLATFORM),cube) MACHDEP += -DHW_DOL endif -CFLAGS := -DLIBOGC_INTERNAL -O2 -mregnames -Wall $(MACHDEP) -fno-strict-aliasing $(INCLUDES) -Wa,-mgekko +CFLAGS := -DLIBOGC_INTERNAL -g -Os -mregnames -Wall $(MACHDEP) -fno-strict-aliasing $(INCLUDES) -Wa,-mgekko ASFLAGS := $(MACHDEP) -mregnames -D_LANGUAGE_ASSEMBLY -Wa,-mgekko $(INCLUDES) #--------------------------------------------------------------------------------- diff --git a/gc/ogc/ipc.h b/gc/ogc/ipc.h index 92b63cf..cc8433e 100644 --- a/gc/ogc/ipc.h +++ b/gc/ogc/ipc.h @@ -60,7 +60,6 @@ typedef struct _ioctlv } ioctlv; void __IPC_Reinitialize(void); -u32 IPC_ReadReg(u32 reg); typedef s32 (*ipccallback)(s32 result,void *usrdata); diff --git a/gc/ogc/machine/processor.h b/gc/ogc/machine/processor.h index f869392..ab4841a 100644 --- a/gc/ogc/machine/processor.h +++ b/gc/ogc/machine/processor.h @@ -227,6 +227,11 @@ static inline void write16(u32 addr, u16 x) asm("sth %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); } +static inline void mask16(u32 addr, u16 clear, u16 set) +{ + write16(addr, (read16(addr)&(~clear)) | set); +} + static inline u8 read8(u32 addr) { u8 x; diff --git a/libogc/audio.c b/libogc/audio.c index a74c35e..e2b19d0 100644 --- a/libogc/audio.c +++ b/libogc/audio.c @@ -57,14 +57,22 @@ distribution. ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) #if defined(HW_DOL) - static vu32* const _aiReg = (u32*)0xCC006C00; + #define AI_REG_BASE (0xCC006C00) #elif defined(HW_RVL) - static vu32* const _aiReg = (u32*)0xCD006C00; + #define AI_REG_BASE (0xCD006C00) #else #error HW model not supported. #endif -static vu16* const _dspReg = (u16*)0xCC005000; +#define AI_READ(i) read32(AI_REG_BASE + (i) * 4) +#define AI_WRITE(i, value) write32(AI_REG_BASE + (i) * 4, value) +#define AI_MASK(i, clear, set) mask32(AI_REG_BASE + (i) * 4, clear, set) + +#define DSP_REG_BASE (0xCC005000) + +#define DSP_READ(i) read16(DSP_REG_BASE + (i) * 2) +#define DSP_WRITE(i, value) write16(DSP_REG_BASE + (i) * 2, value) +#define DSP_MASK(i, clear, set) mask16(DSP_REG_BASE + (i) * 2, clear, set) static u32 __AIInitFlag = 0; static u32 __AIActive = 0; @@ -108,14 +116,14 @@ static void __AICallbackStackSwitch(AIDCallback handler) static void __AISHandler(u32 nIrq,void *pCtx) { if(__AIS_Callback) - __AIS_Callback(_aiReg[2]); - _aiReg[0] |= 0x0008; + __AIS_Callback(AI_READ(2)); + AI_MASK(0, 0, 0x0008); } #endif static void __AIDHandler(u32 nIrq,void *pCtx) { - _dspReg[5] = (_dspReg[5]&~(DSPCR_DSPINT|DSPCR_ARINT))|DSPCR_AIINT; + DSP_MASK(5, DSPCR_DSPINT | DSPCR_ARINT, DSPCR_AIINT); if(__AID_Callback) { if(!__AIActive) { __AIActive = 1; @@ -135,23 +143,23 @@ static void __AISRCINIT() u64 time1,time2,wait; while(!done) { - _aiReg[0] = (_aiReg[0]&~0x20)|0x20; - _aiReg[0] = (_aiReg[0]&~0x02); - _aiReg[0] = (_aiReg[0]&~0x01)|0x01; + AI_MASK(0, 0x20, 0x20); + AI_MASK(0, 0x02, 0); + AI_MASK(0, 0x01, 0x01); - scnt = _aiReg[2]&0x7fffffff; - while(scnt!=(_aiReg[2]&0x7fffffff)); + scnt = AI_READ(2) & 0x7fffffff; + while(scnt != (AI_READ(2) & 0x7fffffff)); time1 = gettime(); - _aiReg[0] = (_aiReg[0]&~0x02)|0x02; - _aiReg[0] = (_aiReg[0]&~0x01)|0x01; + AI_MASK(0, 0x02, 0x02); + AI_MASK(0, 0x01, 0x01); - scnt = _aiReg[2]&0x7fffffff; - while(scnt!=(_aiReg[2]&0x7fffffff)); + scnt = AI_READ(2) & 0x7fffffff; + while(scnt != (AI_READ(2) & 0x7fffffff)); time2 = gettime(); - _aiReg[0] = (_aiReg[0]&~0x02); - _aiReg[0] = (_aiReg[0]&~0x01); + AI_MASK(0, 0x02, 0); + AI_MASK(0, 0x01, 0); tdiff = time2 - time1; if(tdiff>(bound_32KHz - buffer) && tdiff<(bound_32KHz + buffer)) { @@ -181,14 +189,14 @@ static void __AISetStreamSampleRate(u32 rate) volright = AUDIO_GetStreamVolRight(); AUDIO_SetStreamVolLeft(0); AUDIO_SetStreamVolRight(0); - dsprate = _aiReg[0]&0x40; - _aiReg[0] = _aiReg[0]&~0x40; + dsprate = AI_READ(0) & 0x40; + AI_MASK(0, 0x40, 0); _CPU_ISR_Disable(level); __AISRCINIT(); - _aiReg[0] |= dsprate; - _aiReg[0] = (_aiReg[0]&~0x20)|0x20; - _aiReg[0] = (_aiReg[0]&~0x02)|(_SHIFTL(rate,1,1)); + AI_MASK(0, 0, dsprate); + AI_MASK(0, 0x20, 0x20); + AI_MASK(0, 0x02, (_SHIFTL(rate,1,1))); _CPU_ISR_Restore(level); AUDIO_SetStreamPlayState(playstate); @@ -220,18 +228,18 @@ void AUDIO_Init(u8 *stack) max_wait = nanosecs_to_ticks(63000); buffer = nanosecs_to_ticks(3000); - _aiReg[0] &= ~0x15; - _aiReg[1] = 0; - _aiReg[3] = 0; + AI_MASK(0, 0x15, 0); + AI_WRITE(1, 0); + AI_WRITE(3, 0); - _aiReg[0] = (_aiReg[0]&~0x20)|0x20; + AI_MASK(0, 0x20, 0x20); - rate = (_SHIFTR(_aiReg[0],6,1))^1; + rate = (_SHIFTR(AI_READ(0),6,1))^1; if(rate==AI_SAMPLERATE_48KHZ) { - _aiReg[0] &= ~0x40; + AI_MASK(0, 0x40, 0); _CPU_ISR_Disable(level); __AISRCINIT(); - _aiReg[0] |= 0x40; + AI_MASK(0, 0, 0x40); _CPU_ISR_Restore(level); } @@ -256,42 +264,42 @@ void AUDIO_Init(u8 *stack) #if defined(HW_DOL) void AUDIO_SetStreamVolLeft(u8 vol) { - _aiReg[1] = (_aiReg[1]&~0x000000ff)|(vol&0xff); + AI_MASK(1, 0xff, vol & 0xff); } u8 AUDIO_GetStreamVolLeft() { - return (u8)(_aiReg[1]&0xff); + return AI_READ(1) & 0xff; } void AUDIO_SetStreamVolRight(u8 vol) { - _aiReg[1] = (_aiReg[1]&~0x0000ff00)|(_SHIFTL(vol,8,8)); + AI_MASK(1, 0xff00, _SHIFTL(vol,8,8)); } u8 AUDIO_GetStreamVolRight() { - return (u8)(_SHIFTR(_aiReg[1],8,8)); + return _SHIFTR(AI_READ(1),8,8) & 0xff; } void AUDIO_SetStreamSampleRate(u32 rate) { - _aiReg[0] = (_aiReg[0]&~0x0002)|(_SHIFTL(rate,1,1)); + AI_MASK(0, 0x02, _SHIFTL(rate,1,1)); } u32 AUDIO_GetStreamSampleRate() { - return _SHIFTR(_aiReg[0],1,1); + return _SHIFTR(AI_READ(0),1,1); } void AUDIO_SetStreamTrigger(u32 cnt) { - _aiReg[3] = cnt; + AI_WRITE(3, cnt); } void AUDIO_ResetStreamSampleCnt() { - _aiReg[0] = (_aiReg[0]&~0x20)|0x20; + AI_MASK(0, 0x20, 0x20); } void AUDIO_SetStreamPlayState(u32 state) @@ -309,19 +317,19 @@ void AUDIO_SetStreamPlayState(u32 state) _CPU_ISR_Disable(level); __AISRCINIT(); - _aiReg[0] = (_aiReg[0]&~0x20)|0x20; - _aiReg[0] = (_aiReg[0]&~0x01)|0x01; + AI_MASK(0, 0x20, 0x20); + AI_MASK(0, 0x01, 0x01); _CPU_ISR_Restore(level); AUDIO_SetStreamVolRight(volright); AUDIO_SetStreamVolLeft(volleft); } else { - _aiReg[0] = (_aiReg[0]&~0x01)|(state&0x01); + AI_MASK(0, 0x01, state & 0x01); } } u32 AUDIO_GetStreamPlayState() { - return (_aiReg[0]&0x01); + return AI_READ(0) & 0x01; } #endif @@ -342,40 +350,40 @@ void AUDIO_InitDMA(u32 startaddr,u32 len) u32 level; _CPU_ISR_Disable(level); - _dspReg[24] = (_dspReg[24]&~0x1fff)|(_SHIFTR(startaddr,16,13)); - _dspReg[25] = (_dspReg[25]&~0xffe0)|(startaddr&0xffff); - _dspReg[27] = (_dspReg[27]&~0x7fff)|(_SHIFTR(len,5,15)); + DSP_MASK(24, 0x1fff, _SHIFTR(startaddr,16,13)); + DSP_MASK(25, 0xffe0, startaddr & 0xffff); + DSP_MASK(27, 0x7fff, _SHIFTR(len,5,15)); _CPU_ISR_Restore(level); } u16 AUDIO_GetDMAEnableFlag() { - return (_SHIFTR(_dspReg[27],15,1)); + return _SHIFTR(DSP_READ(27),15,1); } void AUDIO_StartDMA() { - _dspReg[27] = (_dspReg[27]&~0x8000)|0x8000; + DSP_MASK(27, 0x8000, 0x8000); } void AUDIO_StopDMA() { - _dspReg[27] = (_dspReg[27]&~0x8000); + DSP_MASK(27, 0x8000, 0); } u32 AUDIO_GetDMABytesLeft() { - return (_SHIFTL(_dspReg[29],5,15)); + return (_SHIFTL(DSP_READ(29),5,15)); } u32 AUDIO_GetDMAStartAddr() { - return (_SHIFTL((_dspReg[24]&0x1fff),16,13)|(_dspReg[25]&0xffe0)); + return _SHIFTL(DSP_READ(24) & 0x1fff,16,13) | (DSP_READ(25) & 0xffe0); } u32 AUDIO_GetDMALength() { - return ((_dspReg[27]&0x7fff)<<5); + return (DSP_READ(27) & 0x7fff) << 5; } void AUDIO_SetDSPSampleRate(u8 rate) @@ -383,11 +391,11 @@ void AUDIO_SetDSPSampleRate(u8 rate) u32 level; if(AUDIO_GetDSPSampleRate()!=rate) { - _aiReg[0] &= ~0x40; + AI_MASK(0, 0x40, 0); if(rate==AI_SAMPLERATE_32KHZ) { _CPU_ISR_Disable(level); __AISRCINIT(); - _aiReg[0] |= 0x40; + AI_MASK(0, 0, 0x40); _CPU_ISR_Restore(level); } } @@ -395,5 +403,5 @@ void AUDIO_SetDSPSampleRate(u8 rate) u32 AUDIO_GetDSPSampleRate() { - return (_SHIFTR(_aiReg[0],6,1))^1; //0^1(1) = 48Khz, 1^1(0) = 32Khz + return (_SHIFTR(AI_READ(0),6,1))^1; //0^1(1) = 48Khz, 1^1(0) = 32Khz } diff --git a/libogc/dsp.c b/libogc/dsp.c index 88071a4..fc01260 100644 --- a/libogc/dsp.c +++ b/libogc/dsp.c @@ -61,7 +61,11 @@ static u32 __dsp_rudetask_pend = FALSE; static DSPCallback __dsp_intcb = NULL; static dsptask_t *__dsp_currtask,*__dsp_lasttask,*__dsp_firsttask,*__dsp_rudetask,*tmp_task; -static vu16* const _dspReg = (u16*)0xCC005000; +#define DSP_REG_BASE (0xCC005000) + +#define DSP_READ(i) read16(DSP_REG_BASE + (i) * 2) +#define DSP_WRITE(i, value) write16(DSP_REG_BASE + (i) * 2, value) +#define DSP_MASK(i, clear, set) mask16(DSP_REG_BASE + (i) * 2, clear, set) static void __dsp_inserttask(dsptask_t *task) { @@ -318,7 +322,7 @@ static void __dsp_def_taskcb() static void __dsp_inthandler(u32 nIrq,void *pCtx) { - _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT))|DSPCR_DSPINT; + DSP_MASK(5, DSPCR_AIINT | DSPCR_ARINT, DSPCR_DSPINT); if(__dsp_intcb) __dsp_intcb(); } @@ -335,8 +339,8 @@ void DSP_Init() IRQ_Request(IRQ_DSP_DSP,__dsp_inthandler,NULL); __UnmaskIrq(IRQMASK(IRQ_DSP_DSP)); - _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET; - _dspReg[5] = (_dspReg[5]&~(DSPCR_HALT|DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT)); + DSP_MASK(5, DSPCR_AIINT | DSPCR_ARINT | DSPCR_DSPINT, DSPCR_DSPRESET); + DSP_MASK(5, DSPCR_HALT | DSPCR_AIINT | DSPCR_ARINT | DSPCR_DSPINT, 0); __dsp_currtask = NULL; __dsp_firsttask = NULL; @@ -368,7 +372,7 @@ DSPCallback DSP_RegisterCallback(DSPCallback usr_cb) u32 DSP_CheckMailTo() { u32 sent_mail; - sent_mail = _SHIFTR(_dspReg[0],15,1); + sent_mail = _SHIFTR(DSP_READ(0),15,1); #ifdef _DSP_DEBUG printf("DSP_CheckMailTo(%02x)\n",sent_mail); #endif @@ -378,7 +382,7 @@ u32 DSP_CheckMailTo() u32 DSP_CheckMailFrom() { u32 has_mail; - has_mail = _SHIFTR(_dspReg[2],15,1); + has_mail = _SHIFTR(DSP_READ(2),15,1); #ifdef _DSP_DEBUG printf("DSP_CheckMailFrom(%02x)\n",has_mail); #endif @@ -388,7 +392,7 @@ u32 DSP_CheckMailFrom() u32 DSP_ReadMailFrom() { u32 mail; - mail = (_SHIFTL(_dspReg[2],16,16)|(_dspReg[3]&0xffff)); + mail = (_SHIFTL(DSP_READ(2),16,16) | (DSP_READ(3) & 0xffff)); #ifdef _DSP_DEBUG printf("DSP_ReadMailFrom(%08x)\n",mail); #endif @@ -400,14 +404,14 @@ void DSP_SendMailTo(u32 mail) #ifdef _DSP_DEBUG printf("DSP_SendMailTo(%08x)\n",mail); #endif - _dspReg[0] = _SHIFTR(mail,16,16); - _dspReg[1] = (mail&0xffff); + DSP_WRITE(0, _SHIFTR(mail,16,16)); + DSP_WRITE(1, mail & 0xffff); } u32 DSP_ReadCPUtoDSP() { u32 cpu_dsp; - cpu_dsp = (_SHIFTL(_dspReg[0],16,16)|(_dspReg[1]&0xffff)); + cpu_dsp = (_SHIFTL(DSP_READ(0),16,16) | (DSP_READ(1) & 0xffff)); #ifdef _DSP_DEBUG printf("DSP_ReadCPUtoDSP(%08x)\n",cpu_dsp); #endif @@ -421,28 +425,26 @@ void DSP_AssertInt() printf("DSP_AssertInt()\n"); #endif _CPU_ISR_Disable(level); - _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_PIINT; + DSP_MASK(5, DSPCR_AIINT | DSPCR_ARINT | DSPCR_DSPINT, DSPCR_PIINT); _CPU_ISR_Restore(level); } void DSP_Reset() { - u16 old; u32 level; _CPU_ISR_Disable(level); - old = _dspReg[5]; - _dspReg[5] = (old&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|(DSPCR_DSPRESET|DSPCR_RES); + DSP_MASK(5, DSPCR_AIINT | DSPCR_ARINT | DSPCR_DSPINT, + DSPCR_DSPRESET | DSPCR_RES); _CPU_ISR_Restore(level); } void DSP_Halt() { - u32 level,old; + u32 level; _CPU_ISR_Disable(level); - old = _dspReg[5]; - _dspReg[5] = (old&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_HALT; + DSP_MASK(5, DSPCR_AIINT | DSPCR_ARINT | DSPCR_DSPINT, DSPCR_HALT); _CPU_ISR_Restore(level); } @@ -451,13 +453,13 @@ void DSP_Unhalt() u32 level; _CPU_ISR_Disable(level); - _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT|DSPCR_HALT)); + DSP_MASK(5, DSPCR_AIINT | DSPCR_ARINT | DSPCR_DSPINT | DSPCR_HALT, 0); _CPU_ISR_Restore(level); } u32 DSP_GetDMAStatus() { - return _dspReg[5]&DSPCR_DSPDMA; + return DSP_READ(5) & DSPCR_DSPDMA; } dsptask_t* DSP_AddTask(dsptask_t *task) @@ -500,7 +502,7 @@ dsptask_t* DSP_AssertTask(dsptask_t *task) __dsp_rudetask = task; __dsp_rudetask_pend = TRUE; if(__dsp_currtask->state==DSPTASK_RUN) - _dspReg[5] = ((_dspReg[5]&~(DSPCR_DSPINT|DSPCR_ARINT|DSPCR_AIINT))|DSPCR_PIINT); + DSP_MASK(5, DSPCR_DSPINT | DSPCR_ARINT | DSPCR_AIINT, DSPCR_PIINT); ret = task; } diff --git a/libogc/ios.c b/libogc/ios.c index 38c2854..47f63cd 100644 --- a/libogc/ios.c +++ b/libogc/ios.c @@ -41,8 +41,7 @@ distribution. #include "irq.h" #define IOS_HEAP_SIZE 0x1000 -#define MAX_IOS_RETRIES 2000 -#define MAX_IPC_RETRIES 2000 +#define MAX_IPC_RETRIES 200 //#define DEBUG_IOS @@ -201,9 +200,10 @@ s32 IOS_GetRevisionMinor() s32 __IOS_LaunchNewIOS(int version) { u32 numviews; - s32 res, retries; + s32 res; u64 titleID = 0x100000000LL; raw_irq_handler_t irq_handler; + u32 counter; STACK_ALIGN(tikview,views,4,32); #ifdef DEBUG_IOS @@ -244,6 +244,8 @@ s32 __IOS_LaunchNewIOS(int version) return res; } + write32(0x80003140, 0); + res = ES_LaunchTitleBackground(titleID, &views[0]); if(res < 0) { #ifdef DEBUG_IOS @@ -251,42 +253,52 @@ s32 __IOS_LaunchNewIOS(int version) #endif return res; } - __ES_Reset(); + + __ES_Reset(); // Mask IPC IRQ while we're busy reloading __MaskIrq(IRQ_PI_ACR); irq_handler = IRQ_Free(IRQ_PI_ACR); - // Wait for old IOS to change version number before reloading - for (retries = 0; retries < MAX_IOS_RETRIES; retries++) - { - newversion = IOS_GetVersion(); #ifdef DEBUG_IOS - printf(" IOS Version: IOS%d %d.%d\n",newversion,IOS_GetRevisionMajor(),IOS_GetRevisionMinor()); + printf("Waiting for IOS ...\n"); #endif - if (newversion != version) udelay(1000); - } + while ((read32(0x80003140) >> 16) == 0) + udelay(1000); - if(newversion != version) - { #ifdef DEBUG_IOS - printf(" Version mismatch!\n"); + u32 v = read32(0x80003140); + printf("IOS loaded: IOS%d v%d.%d\n", v >> 16, (v >> 8) & 0xff, v & 0xff); #endif - return IOS_EMISMATCH; - } - // Wait for new IOS to signal IPC is ready - for (retries = 0; retries < MAX_IPC_RETRIES; retries++) - { - if(IPC_ReadReg(1) & 2) break; +#ifdef DEBUG_IOS + printf("Waiting for IPC ...\n"); +#endif + for (counter = 0; !(read32(0x0d000004) & 2); counter++) { udelay(1000); + + if (counter >= MAX_IPC_RETRIES) + break; } +#ifdef DEBUG_IOS + printf("IPC started (%u)\n", counter); +#endif + IRQ_Request(IRQ_PI_ACR, irq_handler, NULL); __UnmaskIrq(IRQ_PI_ACR); __IPC_Reinitialize(); + newversion = IOS_GetVersion(); + + if(newversion != version) { +#ifdef DEBUG_IOS + printf(" Version mismatch!\n"); +#endif + return IOS_EMISMATCH; + } + return version; } @@ -312,6 +324,7 @@ s32 __attribute__((weak)) __IOS_LoadStartupIOS() res = __IOS_LaunchNewIOS(version); if(res < 0) return res; #endif + return 0; } @@ -319,22 +332,44 @@ s32 IOS_ReloadIOS(int version) { int ret = 0; int res; + #ifdef DEBUG_IOS printf("Reloading to IOS%d\n",version); #endif + res = __IOS_ShutdownSubsystems(); - if(res < 0) ret = res; + if(res < 0) { +#ifdef DEBUG_IOS + printf("__IOS_ShutdownSubsystems failed: %d\n", res); +#endif + ret = res; + } + res = __ES_Init(); - if(res < 0) ret = res; - else { + if(res < 0) { +#ifdef DEBUG_IOS + printf("__ES_Init failed: %d\n", res); +#endif + ret = res; + } else { res = __IOS_LaunchNewIOS(version); if(res < 0) { +#ifdef DEBUG_IOS + printf("__IOS_LaunchNewIOS failed: %d\n", res); +#endif ret = res; __ES_Close(); } } + res = __IOS_InitializeSubsystems(); - if(res < 0) ret = res; + if(res < 0) { +#ifdef DEBUG_IOS + printf("__IOS_InitializeSubsystems failed: %d\n", res); +#endif + ret = res; + } + return ret; } diff --git a/libogc/ipc.c b/libogc/ipc.c index 375d675..6978a5b 100644 --- a/libogc/ipc.c +++ b/libogc/ipc.c @@ -173,7 +173,7 @@ extern void __UnmaskIrq(u32 nMask); extern void* __SYS_GetIPCBufferLo(void); extern void* __SYS_GetIPCBufferHi(void); -u32 IPC_ReadReg(u32 reg) +static __inline__ u32 IPC_ReadReg(u32 reg) { return _ipcReg[reg]; } diff --git a/libtinysmb/smb_devoptab.c b/libtinysmb/smb_devoptab.c index b04ec30..a65a71b 100644 --- a/libtinysmb/smb_devoptab.c +++ b/libtinysmb/smb_devoptab.c @@ -40,7 +40,7 @@ typedef struct int env; } SMBDIRSTATESTRUCT; -static int smbInited = 0; +static bool smbInited = false; static unsigned short smbFlags = SMB_SRCH_DIRECTORY | SMB_SRCH_READONLY; /////////////////////////////////////////// @@ -1400,7 +1400,6 @@ static void MountDevice(const char *name,SMBCONN smbconn, int env) bool smbInitDevice(const char* name, const char *user, const char *password, const char *share, const char *ip) { - char myIP[16]; int i; if(!name || strlen(name) > 9) @@ -1411,13 +1410,8 @@ bool smbInitDevice(const char* name, const char *user, const char *password, con if(FindDevice(devname) >= 0) return false; - while(smbInited == 2) - usleep(1000); - if(!smbInited) { - smbInited = 2; - for(i=0;i