int NetManRegisterNetIF(struct NetManNetIF *NetIF){ unsigned int i; int result; iop_event_t EventFlag; WaitSema(NetManIOSemaID); for(i=0, result=-ENOMEM; i<NETMAN_MAX_NETIF_COUNT; i++){ if(!(NetIFs[i].flags&NETMAN_NETIF_IN_USE)){ if(NetIF->init()==0){ EventFlag.attr = 0; EventFlag.option = 0; EventFlag.bits = 0; if((result = NetIF->EventFlagID = CreateEventFlag(&EventFlag)) >= 0){ memcpy(&NetIFs[i], NetIF, sizeof(NetIFs[i])); NetIFs[i].flags|=NETMAN_NETIF_IN_USE; result=NetIFs[i].id=((unsigned int)NextNetIFID)<<8|i; UpdateNetIFStatus(); NextNetIFID++; } } else result=-EIO; break; } } SignalSema(NetManIOSemaID); return result; }
int create_event_flag(void) { iop_event_t event; event.attr = 2; event.option = 0; event.bits = 0; return CreateEventFlag(&event); }
int _start ( int argc, const char** argv ) { int retVal = MODULE_NO_RESIDENT_END; if ( RegisterLibraryEntries ( &_exp_sio2man ) == 0 ) { int lState; int lThreadID; iop_thread_t lThread; iop_event_t lEvent; lEvent.attr = 2; lEvent.bits = 0; s_EventFlag = CreateEventFlag ( &lEvent ); lThread.attr = TH_C; lThread.thread = _MainThread; lThread.stacksize = 0x2000; lThread.priority = 24; lThreadID = CreateThread ( &lThread ); s_Callback0 = NULL; s_Callback1 = NULL; s_Callback2 = NULL; s_Callback3 = NULL; SIO2_SetCtrl3BC (); CpuSuspendIntr ( &lState ); RegisterIntrHandler ( IOP_IRQ_SIO2, 1, _IntHandler, &s_EventFlag ); EnableIntr ( IOP_IRQ_SIO2 ); CpuResumeIntr ( lState ); dmac_ch_set_dpcr ( IOP_DMAC_SIO2in, 3 ); dmac_ch_set_dpcr ( IOP_DMAC_SIO2out, 3 ); dmac_enable ( IOP_DMAC_SIO2in ); dmac_enable ( IOP_DMAC_SIO2out ); StartThread ( lThreadID, NULL ); retVal = MODULE_RESIDENT_END; } /* end if */ return retVal; } /* end _start */
int initCallbackThread(void) { iop_event_t event; iop_thread_t thread; event.attr = event.option = event.bits = 0; callbackEvent = CreateEventFlag(&event); thread.attr = TH_C; thread.option = 0; thread.thread = callbackThreadFunc; thread.stacksize = 0x4000; thread.priority = usbConfig.cbThreadPrio; callbackTid = CreateThread(&thread); StartThread(callbackTid, NULL); return 0; }
int _start(int argc, char *argv[]) { iop_event_t event; int semid, evflg, res; if ((semid = CreateMutex(IOP_MUTEX_UNLOCKED)) < 0) { E_PRINTF("Unable to create %s (error %d).\n", "semaphore", semid); return 1; } eng_args.semid = semid; event.attr = event.bits = 0; if ((evflg = CreateEventFlag(&event)) < 0) { E_PRINTF("Unable to create %s (error %d).\n", "event flag", evflg); return 1; } eng_args.evflg = evflg; CpuEnableIntr(); DisableIntr(IOP_IRQ_DMA_DEV9, NULL); if ((res = RegisterIntrHandler(IOP_IRQ_DMA_DEV9, 1, dev9_dma_handler, &eng_args.evflg))) { E_PRINTF("Unable to register 0x%02x intr handler (error %d).\n", IOP_IRQ_DMA_DEV9, res); return 1; } _sw(_lw(0xbf801570) | 0x80, 0xbf801570); if ((res = ata_engine_init(&eng_args)) < 0) { E_PRINTF("Unable to initialize the %s DMA engine.\n", "ATA"); return 1; } if ((res = smap_engine_init(&eng_args)) < 0) { E_PRINTF("Unable to initialize the %s DMA engine.\n", "SMAP"); return 1; } M_PRINTF("ATA/SMAP DMA relay module initialized.\n"); return 0; }
void init_ieee1394DiskDriver(void){ int i; for(i=0; i<MAX_DEVICES; i++){ SBP2Devices[i].IsConnected=0; SBP2Devices[i].nodeID=0; SBP2Devices[i].trContext=(-1); } sbp2_event_flag=CreateEventFlag(&evfp); XPRINTF("Starting threads..\n"); threadData.thread=&iLinkIntrCBHandlingThread; iLinkIntrCBThreadID=CreateThread(&threadData); StartThread(iLinkIntrCBThreadID, NULL); iLinkSetTrCallbackHandler(&ieee1394_callback); XPRINTF("Threads created and started.\n"); iLinkEnableSBus(); }
s32 padInit(void * ee_addr) { iop_thread_t thread; int intr_state; iop_event_t event; if(padman_init == 1) { M_PRINTF("Refresh request from EE\n."); padEnd(); } vblankData.padEnd = 0; vblankData.init = 0; vblankData.stopTransfer = 1; pad_ee_addr = ee_addr; pad_port = 0; pad_slot = 0; mainThreadCount2 = 0; pad_portdata[0] = 0; pad_portdata[1] = 0; sif_buffer[0] = 0; sio2cmdReset(); sio2cmdInitFindPads(); sio2cmdInitMouse(); sio2cmdInitNegicon(); sio2cmdInitKonamiGun(); sio2cmdInitDigital(); sio2cmdInitJoystick(); sio2cmdInitNamcoGun(); sio2cmdInitAnalog(); sio2cmdInitJogcon(); sio2cmdInitConfig(); pdReset(); openSlots[0] = 0; openSlots[1] = 0; event.attr = EA_MULTI; event.bits = 0; vblankData.eventflag = CreateEventFlag(&event); if( vblankData.eventflag == 0) { M_PRINTF("padInit: CreateEventFlag failed (%d).\n", vblankData.eventflag); return 0; } thread.attr = TH_C; thread.thread = &TransferThread; thread.stacksize = 0x800; thread.priority = thpri_hi; vblankData.tid_2 = CreateThread(&thread); if(vblankData.tid_2 == 0) { M_PRINTF("padInit: CreateThread TransferThread failed (%d)\n.", vblankData.tid_2); return 0; } StartThread(vblankData.tid_2, NULL); thread.attr = TH_C; thread.thread = MainThread; thread.stacksize = 0x1000; thread.priority = thpri_lo; vblankData.tid_1 = CreateThread(&thread); if(vblankData.tid_1 == 0) { M_PRINTF("padInit: CreateThread MainThread failed (%d)\n.", vblankData.tid_1); return 0; } StartThread(vblankData.tid_1, NULL); CpuSuspendIntr(&intr_state); RegisterVblankHandler(0, 16, &VblankStart, (void*)&vblankData); RegisterVblankHandler(1, 16, &VblankEnd, (void*)&vblankData); CpuResumeIntr(intr_state); //Original BUG: was originally a call to CpuEnableIntr with intr_state as an argument vblankData.init = 1; padman_init = 1; return 1; }
s32 padInit(void * ee_addr) { iop_event_t event; if(freepad_init == 1) { M_PRINTF("Refresh request from EE\n."); padEnd(); } vblankData.padEnd = 0; vblankData.init = 0; vblankData.stopTransfer = 0; pad_ee_addr = ee_addr; pad_port = 0; pad_slot = 0; mainThreadCount2 = 0; pad_portdata[0] = 0; pad_portdata[1] = 0; sif_buffer[0] = 0; sio2cmdReset(); sio2cmdInitFindPads(); sio2cmdInitMouse(); sio2cmdInitNegicon(); sio2cmdInitKonamiGun(); sio2cmdInitDigital(); sio2cmdInitJoystick(); sio2cmdInitNamcoGun(); sio2cmdInitAnalog(); sio2cmdInitJogcon(); sio2cmdInitConfig(); pdReset(); openSlots[0] = 0; openSlots[1] = 0; event.attr = 2; event.bits = 0; vblankData.eventflag = CreateEventFlag(&event); if( vblankData.eventflag == 0) M_PRINTF("padInit: CreateEventFlag failed (%i).\n", (int)vblankData.eventflag); if(vblankData.eventflag != 0) { iop_thread_t thread; int intr_state; thread.attr = TH_C; thread.thread = TransferThread; thread.stacksize = 0x800; thread.priority = 20; vblankData.tid_2 = CreateThread(&thread); if(vblankData.tid_2 == 0) { M_PRINTF("padInit: CreateThread TransferThread failed (%i)\n.", (int)vblankData.tid_2); return 0; } StartThread(vblankData.tid_2, 0); thread.attr = TH_C; thread.thread = MainThread; thread.stacksize = 0x1000; thread.priority = 46; vblankData.tid_1 = CreateThread(&thread); if(vblankData.tid_1 == 0) { M_PRINTF("padInit: CreateThread MainThread failed (%i)\n.", (int)vblankData.tid_1); return 0; } StartThread(vblankData.tid_1, 0); CpuSuspendIntr(&intr_state); RegisterVblankHandler(0, 16, (void*)VblankStart, (void*)&vblankData); RegisterVblankHandler(1, 16, (void*)VblankEnd, (void*)&vblankData); CpuResumeIntr(intr_state); vblankData.init = 1; freepad_init = 1; D_PRINTF("padInit: Success\n"); return 1; } D_PRINTF("padInit: Failed\n"); return 0; }
s32 _start(char **argv, int argc) { iop_event_t event; iop_thread_t thread; u32 i; printf(BANNER,VERSION); if(RegisterLibraryEntries(&_exp_mtapman) != 0) { M_PRINTF("RegisterLibraryEntries failed.\n"); return 1; } if(InitRpcServers() == 0) { M_PRINTF("Failed to setup RPC Servers.\n"); return 1; } event.attr = 2; event.bits = 0; event_flag = CreateEventFlag(&event); if(event_flag < 0) { M_PRINTF("Could not create event flag (%i)\n.", (int)event_flag); return 1; } thread.attr = TH_C; thread.thread = update_slot_numbers_thread; thread.stacksize = 0x800; thread.priority = 32; threadid_main = CreateThread(&thread); if(threadid_main < 0) { M_PRINTF("Could not create thread (%i)\n.", (int)threadid_main); return 1; } StartThread(threadid_main, 0); for(i=0; i < 4; i++) { state_open[i] = 0; state_getcon[i] = 0; state_slots[i] = 0; } sio2_mtap_change_slot_set(change_slot); sio2_mtap_get_slot_max_set(get_slots1); sio2_mtap_get_slot_max_set2(get_slots2); sio2_mtap_update_slots_set(update_slot_numbers); td.in = in_buffer; td.out = out_buffer; return 0; }