fixed SOC device madness

This commit is contained in:
smea 2015-07-12 15:19:36 -07:00
parent 9fac0a0ea1
commit ea88f92464

View File

@ -67,29 +67,38 @@ Result SOC_Initialize(u32 *context_addr, u32 context_size)
if(dev >= 0) if(dev >= 0)
return -1; return -1;
/* add the "soc" device */
dev = AddDevice(&soc_devoptab);
if(dev < 0)
return dev;
ret = svcCreateMemoryBlock(&socMemhandle, (u32)context_addr, context_size, 0, 3); ret = svcCreateMemoryBlock(&socMemhandle, (u32)context_addr, context_size, 0, 3);
if(ret != 0) { if(ret != 0) return ret;
RemoveDevice("soc");
return ret;
}
ret = srvGetServiceHandle(&SOCU_handle, "soc:U"); ret = srvGetServiceHandle(&SOCU_handle, "soc:U");
if(ret != 0) { if(ret != 0)
RemoveDevice("soc"); {
svcCloseHandle(socMemhandle);
socMemhandle = 0;
return ret; return ret;
} }
ret = socu_cmd1(socMemhandle, context_size); ret = socu_cmd1(socMemhandle, context_size);
if(ret != 0) { if(ret != 0)
RemoveDevice("soc"); {
svcCloseHandle(socMemhandle);
svcCloseHandle(SOCU_handle);
socMemhandle = 0;
SOCU_handle = 0;
return ret; return ret;
} }
/* add the "soc" device */
dev = AddDevice(&soc_devoptab);
if(dev < 0)
{
svcCloseHandle(socMemhandle);
svcCloseHandle(SOCU_handle);
socMemhandle = 0;
SOCU_handle = 0;
return dev;
}
return 0; return 0;
} }
@ -100,22 +109,21 @@ Result SOC_Shutdown(void)
int dev; int dev;
svcCloseHandle(socMemhandle); svcCloseHandle(socMemhandle);
socMemhandle = 0;
cmdbuf[0] = 0x00190000; cmdbuf[0] = 0x00190000;
ret = svcSendSyncRequest(SOCU_handle); ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
errno = SYNC_ERROR;
return ret;
}
svcCloseHandle(SOCU_handle); svcCloseHandle(SOCU_handle);
SOCU_handle = 0;
dev = FindDevice("soc:"); dev = FindDevice("soc:");
if(dev >= 0) if(dev >= 0)
RemoveDevice("soc"); RemoveDevice("soc:");
return cmdbuf[1]; if(ret)return ret;
else return cmdbuf[1];
} }
static int static int