///////////////////////////////////////////////////////////////////////[0E] void SifInitRpc(int mode){ u32 x; _dprintf("%s\n", __FUNCTION__); SifInitCmd(); CpuSuspendIntr(&x); if (sifInitRpc){ CpuResumeIntr(x); }else{ sifInitRpc=1; rpc_common.paddr=(RPC_PACKET*)bufx; rpc_common.size=32; rpc_common.paddr2=0; rpc_common.size2=0; rpc_common.next=(RPC_PACKET*)bufy; rpc_common.count=32; rpc_common.base=0; rpc_common.pid=1; SifAddCmdHandler(0x80000008, (cmdh_func)cmd80000008_END, &rpc_common); SifAddCmdHandler(0x80000009, (cmdh_func)cmd80000009_BIND, &rpc_common); SifAddCmdHandler(0x8000000A, (cmdh_func)cmd8000000A_CALL, &rpc_common); SifAddCmdHandler(0x8000000C, (cmdh_func)cmd8000000C_RDATA, &rpc_common); CpuResumeIntr(x); ((SifCmdSRData*)bufx)->rno =0; ((SifCmdSRData*)bufx)->value=1; SifSendCmd(0x80000001, (void*)bufx, sizeof(SifCmdSRData), 0, 0, 0); } WaitEventFlag(GetSystemStatusFlag(), 0x800, 0, 0); }
void SifInitRpc(int mode) { u32 *cmdp; static int _rb_count = 0; if(_rb_count != _iop_reboot_count) { _rb_count = _iop_reboot_count; SifExitCmd(); init = 0; } if (init) return; init = 1; SifInitCmd(); DI(); _sif_rpc_data.pkt_table = UNCACHED_SEG(_sif_rpc_data.pkt_table); _sif_rpc_data.rdata_table = UNCACHED_SEG(_sif_rpc_data.rdata_table); _sif_rpc_data.client_table = UNCACHED_SEG(_sif_rpc_data.client_table); SifAddCmdHandler(0x80000008, (void *)_request_end, &_sif_rpc_data); SifAddCmdHandler(0x80000009, (void *)_request_bind, &_sif_rpc_data); SifAddCmdHandler(0x8000000a, (void *)_request_call, &_sif_rpc_data); SifAddCmdHandler(0x8000000c, (void *)_request_rdata, &_sif_rpc_data); EI(); if (SifGetReg(0x80000002)) return; cmdp = (u32 *)&pkt_table[64]; cmdp[3] = 1; SifSendCmd(0x80000002, cmdp, 16, NULL, NULL, 0); while (!SifGetSreg(0)) ; SifSetReg(0x80000002, 1); }
void SifInitRpc(void) { u32 status; core_save_disable(&status); if (init) { core_restore(status); return; } init = 1; SifInitCmd(); _sif_rpc_data.pkt_table = UNCACHED_SEG(_sif_rpc_data.pkt_table); _sif_rpc_data.rdata_table = UNCACHED_SEG(_sif_rpc_data.rdata_table); _sif_rpc_data.client_table = UNCACHED_SEG(_sif_rpc_data.client_table); SifAddCmdHandler(0x80000008, (void *)_request_end, &_sif_rpc_data); SifAddCmdHandler(0x80000009, (void *)_request_bind, &_sif_rpc_data); SifAddCmdHandler(0x8000000a, (void *)_request_call, &_sif_rpc_data); SifAddCmdHandler(0x8000000c, (void *)_request_rdata, &_sif_rpc_data); #if 0 /* XXX: IOP is already initialized, we can't do this. */ if (SifGetReg(0x80000002)) return; cmdp = (u32 *)&pkt_table[64]; cmdp[3] = 1; SifSendCmd(0x80000002, cmdp, 16, NULL, NULL, 0); while (!SifGetSreg(0)) ; #endif SifSetReg(0x80000002, 1); core_restore(status); }
/* SBIOS interface. */ int sbcall_sifinitcmd() { SifInitCmd(); return 0; }