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); }
int sbcall_sifgetsreg(tge_sbcall_sifgetsreg_arg_t *arg) { return SifGetSreg(arg->reg); }