[1101] | 1 | /*
|
---|
| 2 | _____ ___ ____
|
---|
| 3 | ____| | ____| PS2 Open Source Project
|
---|
| 4 | | ___| |____
|
---|
| 5 |
|
---|
| 6 | ---------------------------------------------------------------------------
|
---|
| 7 |
|
---|
| 8 | Copyright (C) 2008 - Neme & jimmikaelkael (www.psx-scene.com)
|
---|
| 9 |
|
---|
| 10 | This program is free software; you can redistribute it and/or modify
|
---|
| 11 | it under the terms of the Free McBoot License.
|
---|
| 12 |
|
---|
| 13 | This program and any related documentation is provided "as is"
|
---|
| 14 | WITHOUT ANY WARRANTIES, either express or implied, including, but not
|
---|
| 15 | limited to, implied warranties of fitness for a particular purpose. The
|
---|
| 16 | entire risk arising out of use or performance of the software remains
|
---|
| 17 | with you.
|
---|
| 18 | In no event shall the author be liable for any damages whatsoever
|
---|
| 19 | (including, without limitation, damages to your hardware or equipment,
|
---|
| 20 | environmental damage, loss of health, or any kind of pecuniary loss)
|
---|
| 21 | arising out of the use of or inability to use this software or
|
---|
| 22 | documentation, even if the author has been advised of the possibility of
|
---|
| 23 | such damages.
|
---|
| 24 |
|
---|
| 25 | You should have received a copy of the Free McBoot License along with
|
---|
| 26 | this program; if not, please report at psx-scene :
|
---|
| 27 | http://psx-scene.com/forums/freevast/
|
---|
| 28 |
|
---|
| 29 | ---------------------------------------------------------------------------
|
---|
| 30 | */
|
---|
| 31 |
|
---|
| 32 | #include <tamtypes.h>
|
---|
| 33 | #include <kernel.h>
|
---|
| 34 | #include <sifrpc.h>
|
---|
| 35 |
|
---|
| 36 | // External functions
|
---|
| 37 | int chkesr_rpc_Init(void);
|
---|
| 38 | int Check_ESR_Disc(void);
|
---|
| 39 |
|
---|
| 40 | #define CHKESR_IRX 0x0E0E0E0
|
---|
| 41 |
|
---|
| 42 | static SifRpcClientData_t chkesr __attribute__((aligned(64)));
|
---|
| 43 | static int Rpc_Buffer[1024] __attribute__((aligned(64)));
|
---|
| 44 |
|
---|
| 45 | typedef struct {
|
---|
| 46 | u32 ret;
|
---|
| 47 | } Rpc_Packet_Send_Check_ESR_Disc;
|
---|
| 48 |
|
---|
| 49 | int chkesr_Inited = 0;
|
---|
| 50 |
|
---|
| 51 | //--------------------------------------------------------------
|
---|
| 52 | int chkesrBindRpc(void) {
|
---|
| 53 | int ret;
|
---|
| 54 | int retryCount = 0x1000;
|
---|
| 55 |
|
---|
| 56 | while(retryCount--) {
|
---|
| 57 | ret = SifBindRpc( &chkesr, CHKESR_IRX, 0);
|
---|
| 58 | if ( ret < 0) return -1;
|
---|
| 59 | if (chkesr.server != 0) break;
|
---|
| 60 | // short delay
|
---|
| 61 | ret = 0x10000;
|
---|
| 62 | while(ret--) asm("nop\nnop\nnop\nnop");
|
---|
| 63 | }
|
---|
| 64 | chkesr_Inited = 1;
|
---|
| 65 | return retryCount;
|
---|
| 66 | }
|
---|
| 67 | //--------------------------------------------------------------
|
---|
| 68 | int chkesr_rpc_Init(void)
|
---|
| 69 | {
|
---|
| 70 | chkesrBindRpc();
|
---|
| 71 | if(!chkesr_Inited) return -1;
|
---|
| 72 | return 1;
|
---|
| 73 | }
|
---|
| 74 | //--------------------------------------------------------------
|
---|
| 75 | int Check_ESR_Disc(void)
|
---|
| 76 | {
|
---|
| 77 | Rpc_Packet_Send_Check_ESR_Disc *Packet = (Rpc_Packet_Send_Check_ESR_Disc *)Rpc_Buffer;
|
---|
| 78 |
|
---|
| 79 | if(!chkesr_Inited) chkesr_rpc_Init();
|
---|
| 80 | if ((SifCallRpc(&chkesr, 1, 0, (void*)Rpc_Buffer, sizeof(Rpc_Packet_Send_Check_ESR_Disc), (void*)Rpc_Buffer, sizeof(int),0,0)) < 0) return -1;
|
---|
| 81 | return Packet->ret;
|
---|
| 82 | }
|
---|
| 83 | //--------------------------------------------------------------
|
---|