示例#1
0
文件: netman.c 项目: ps2dev/ps2sdk
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;
}
示例#2
0
文件: sio2man.c 项目: sp193/ps2sdk
int create_event_flag(void)
{
	iop_event_t event;

	event.attr = 2;
	event.option = 0;
	event.bits = 0;
	return CreateEventFlag(&event);
}
示例#3
0
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 */
示例#4
0
文件: driver.c 项目: ps2dev/ps2sdk
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;
}
示例#5
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;
}
示例#6
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();
}
示例#7
0
文件: padInit.c 项目: AKuHAK/ps2sdk
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;
}
示例#8
0
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;
}
示例#9
0
文件: freemtap.c 项目: sp193/ps2sdk
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;
}