PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
rsd_cb.c
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11#include "rs_i.h"
12
13static SpuEECBData eeCBData;
14
15static SifRpcClientData_t cd;
16
17void sceSifCmdLoop2(void)
18{
19 while ( 1 )
20 {
21 if ( eeCBData.mode )
22 {
23 sceSifCallRpc(&cd, 0, 0, &eeCBData, 16, 0, 0, 0, 0);
24 if ( eeCBData.mode < 4 )
25 memcpy(gStPtr, &gStBuff, sizeof(SpuStEnv));
26 eeCBData.mode = 0;
27 }
28 SleepThread();
29 }
30}
31
32void DMA0CallBackProc(void)
33{
34 eeCBData.mode = 4;
35 iWakeupThread(gStThid);
36}
37
38void DMA1CallBackProc(void)
39{
40 eeCBData.mode = 5;
41 iWakeupThread(gStThid);
42}
43
44void IRQCallBackProc(void)
45{
46 eeCBData.mode = 6;
47 iWakeupThread(gStThid);
48}
49
50void spustCB_preparation_finished(unsigned int voice_bit, int p_status)
51{
52 eeCBData.mode = 1;
53 eeCBData.voice_bit = voice_bit;
54 eeCBData.status = p_status;
55 iWakeupThread(gStThid);
56}
57
58void spustCB_transfer_finished(unsigned int voice_bit, int t_status)
59{
60 eeCBData.mode = 2;
61 eeCBData.voice_bit = voice_bit;
62 eeCBData.status = t_status;
63 iWakeupThread(gStThid);
64}
65
66void spustCB_stream_finished(unsigned int voice_bit, int s_status)
67{
68 eeCBData.mode = 3;
69 eeCBData.voice_bit = voice_bit;
70 eeCBData.status = s_status;
71 iWakeupThread(gStThid);
72}
73
74void sce_spust_loop(void *userdata)
75{
76 int i;
77
78 (void)userdata;
79
80 eeCBData.mode = 0;
81 while ( sceSifBindRpc(&cd, sce_SPUST_CB, 0) >= 0 )
82 {
83 for ( i = 0; i < 10000; i += 1 )
84 {
85 __asm__ __volatile__("" : "+g"(i) : :);
86 }
87 if ( cd.server )
88 sceSifCmdLoop2();
89 }
90 while ( 1 )
91 ;
92}