14static void sceSifCmdLoop2(SifRpcClientData_t *cd, SdrEECBInfo *cbi)
20 SdrEECBData eeCBDataSend;
22 while ( !cbi->m_eeCBData.mode )
24 CpuSuspendIntr(&state);
26 memcpy(&eeCBDataSend, &cbi->m_eeCBData,
sizeof(eeCBDataSend));
29 if ( eeCBDataSend.mode )
34 mode_tmp = eeCBDataSend.mode;
39 if ( mode_cur & SDR_CB_DMA0 )
41 mode_cur &= ~SDR_CB_DMA0;
42 eeCBDataSend.mode = 1;
44 else if ( mode_cur & SDR_CB_DMA1 )
46 mode_cur &= ~SDR_CB_DMA1;
47 eeCBDataSend.mode = 2;
49 else if ( mode_cur & SDR_CB_IRQ )
51 mode_cur &= ~SDR_CB_IRQ;
52 eeCBDataSend.mode = 3;
54 else if ( mode_cur & SDR_CB_DMA0INT )
56 mode_cur &= ~SDR_CB_DMA0INT;
57 eeCBDataSend.mode = 11;
59 else if ( mode_cur & SDR_CB_DMA1INT )
61 mode_cur &= ~SDR_CB_DMA1INT;
62 eeCBDataSend.mode = 12;
64 else if ( mode_cur & SDR_CB_IRQINT )
66 mode_cur &= ~SDR_CB_IRQINT;
67 eeCBDataSend.mode = 13;
73 sceSifCallRpc(cd, 0, 0, &eeCBDataSend,
sizeof(eeCBDataSend), 0, 0, 0, 0);
75 eeCBDataSend.mode = mode_tmp;
78 eeCBDataSend.mode |= ((u32)1 << 31);
80 sceSifCallRpc(cd, 0, 0, &eeCBDataSend,
sizeof(eeCBDataSend), 0, 0, 0, 0);
82 eeCBDataSend.mode &= ~((u32)1 << 31);
84 CpuSuspendIntr(&state);
85 if ( cbi->m_eeCBData.mode == eeCBDataSend.mode )
87 cbi->m_eeCBData.mode = 0;
88 iCancelWakeupThread(TH_SELF);
92 cbi->m_eeCBData.mode &= ~eeCBDataSend.mode;
97#if SDRDRV_OBSOLETE_FUNCS
98int _sce_sdrDMA0CallBackProc(
void *data)
102 g_eeCBInfo.m_eeCBData.mode |= SDR_CB_DMA0;
103 iWakeupThread(g_eeCBInfo.m_thid_cb);
107int _sce_sdrDMA1CallBackProc(
void *data)
111 g_eeCBInfo.m_eeCBData.mode |= SDR_CB_DMA1;
112 iWakeupThread(g_eeCBInfo.m_thid_cb);
116int _sce_sdrIRQCallBackProc(
void *data)
120 g_eeCBInfo.m_eeCBData.mode |= SDR_CB_IRQ;
121 iWakeupThread(g_eeCBInfo.m_thid_cb);
126int _sce_sdrDMA0IntrHandler(
int core,
void *common)
132 cbi = (SdrEECBInfo *)common;
133 cbi->m_eeCBData.mode |= SDR_CB_DMA0INT;
134 iWakeupThread(cbi->m_thid_cb);
138int _sce_sdrDMA1IntrHandler(
int core,
void *common)
144 cbi = (SdrEECBInfo *)common;
145 cbi->m_eeCBData.mode |= SDR_CB_DMA1INT;
146 iWakeupThread(cbi->m_thid_cb);
150int _sce_sdrSpu2IntrHandler(
int core_bit,
void *common)
156 cbi = (SdrEECBInfo *)common;
157 cbi->m_eeCBData.mode |= SDR_CB_IRQINT;
158 cbi->m_eeCBData.voice_bit = core_bit;
159 iWakeupThread(cbi->m_thid_cb);
163void sce_sdrcb_loop(
void *arg)
167 SifRpcClientData_t cd;
169 cbi = (SdrEECBInfo *)arg;
170 cbi->m_eeCBData.mode = 0;
171 while ( sceSifBindRpc(&cd, sce_SDRST_CB, 0) >= 0 )
175 for ( i = 0; i < 10000; i += 1 )
178 sceSifCmdLoop2(&cd, cbi);