Exemplo n.º 1
0
void uart_init(unsigned n)
{

	switch(n) {
	case 0:
		uart_base = MSM_UART1_BASE;
		break;
	case 1:
		uart_base = MSM_UART2_BASE;
		break;
	case 2:
		uart_base = MSM_UART3_BASE;
		break;
	}

#if UART_NEED_INIT
	uwr(0x0A, UART_CR);  /* disable TX and RX */

	uwr(0x30, UART_CR);  /* reset error status */
	uwr(0x10, UART_CR);  /* reset receiver */
	uwr(0x20, UART_CR);  /* reset transmitter */

	//mdelay(100);
	nopdelay();
	
		/* configuration for 19.2MHz TCXO */
	uwr(0xC0, UART_MREG);
	uwr(0xB2, UART_NREG);
	uwr(0x7D, UART_DREG);
	uwr(0x1C, UART_MNDREG);	

	uwr(0x10, UART_CR);  /* reset RX */
	uwr(0x20, UART_CR);  /* reset TX */
	uwr(0x30, UART_CR);  /* reset error status */
	uwr(0x40, UART_CR);  /* reset RX break */
	uwr(0x70, UART_CR);  /* rest? */
	uwr(0xD0, UART_CR);  /* reset */

	uwr(0x7BF, UART_IPR); /* stale timeout = 630 * bitrate */
	uwr(0, UART_IMR);
	uwr(0, UART_RFWR); /* RX watermark = 58 * 2 - 1 */
	uwr(0x1E, UART_TFWR);  /* TX watermark */

	//uwr(0, UART_RFWR); 
	
	uwr(UART_CSR_115200, UART_CSR);
	uwr(0, UART_IRDA);
	uwr(0x1E, UART_HCR);
//	uwr(0x7F4, UART_MR1); /* RFS/ CTS/ 500chr RFR */
	uwr(0, UART_MR1);
	uwr(0x34, UART_MR2); /* 8N1 */
	
	//mdelay(100);
	nopdelay();

	uwr(0x05, UART_CR); /* enable TX & RX */
	//mdelay(100);
	nopdelay();
#endif
}
Exemplo n.º 2
0
/*
 * Initialise padman
 * a = 0 should work..
 */
int
padInit(int a)
{
    // Version check isn't used by default
    // int ver;
    int i;
    static int _rb_count = 0;

    if (_rb_count != _iop_reboot_count)
    {
        _rb_count = _iop_reboot_count;
        padReset();
    }

    if(padInitialised)
        return 0;

    padsif[0].server = NULL;
    padsif[1].server = NULL;

    do {
        if (SifBindRpc(&padsif[0], PAD_BIND_RPC_ID1, 0) < 0) {
            return -1;
        }
        nopdelay();
    } while(!padsif[0].server);

    do {
        if (SifBindRpc(&padsif[1], PAD_BIND_RPC_ID2, 0) < 0) {
            return -3;
        }
        nopdelay();
    } while(!padsif[1].server);

    // If you require a special version of the padman, check for that here (uncomment)
    // ver = padGetModVersion();

    for(i = 0; i<8; i++)
    {
        PadState[0][i].open = 0;
        PadState[0][i].port = 0;
        PadState[0][i].slot = 0;
        PadState[1][i].open = 0;
        PadState[1][i].port = 0;
        PadState[1][i].slot = 0;
    }

    ((u32 *)(&buffer[0]))[0]=PAD_RPCCMD_INIT;
    ((u32 *)(&buffer[0]))[4]=(u32)openSlot;
    if (SifCallRpc( &padsif[0], 1, 0, buffer, 128, buffer, 128, NULL, NULL) < 0)
        return -1;

    padInitialised = 1;
    return 0;

}
Exemplo n.º 3
0
int NetManInitRPCClient(void){
	int result;
	ee_sema_t SemaData;
	ee_thread_t ThreadData;

	if(!IsInitialized){
		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=SemaData.attr=0;
		NetManIOSemaID=CreateSema(&SemaData);

		TxActiveBankID=0;
		memset(&TxFIFOData1, 0, sizeof(TxFIFOData1));
		memset(&TxFIFOData2, 0, sizeof(TxFIFOData2));
		CurrentTxFIFOData=UNCACHED_SEG(&TxFIFOData1);

		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=SemaData.attr=0;
		TxBankAccessSema=CreateSema(&SemaData);

		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=SemaData.attr=0;
		NetManTxSemaID=CreateSema(&SemaData);

		ThreadData.func=&TxThread;
		ThreadData.stack=TxThreadStack;
		ThreadData.stack_size=sizeof(TxThreadStack);
		ThreadData.gp_reg=&_gp;
		ThreadData.initial_priority=0x58;
		ThreadData.attr=ThreadData.option=0;

		StartThread(TxThreadID=CreateThread(&ThreadData), NULL);

		while((SifBindRpc(&NETMAN_rpc_cd, NETMAN_RPC_NUMBER, 0)<0)||(NETMAN_rpc_cd.server==NULL)){
			nopdelay();
			nopdelay();
			nopdelay();
			nopdelay();
		}

//		((struct NetManInit*)TransmitBuffer)->AlignmentData=&AlignmentData;
		if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_INIT, 0, TransmitBuffer, sizeof(struct NetManInit), ReceiveBuffer, sizeof(struct NetManInitResult), NULL, NULL))>=0){
			result=((struct NetManInitResult*)ReceiveBuffer)->result;
			TxFrameTagBuffer=((struct NetManInitResult*)ReceiveBuffer)->FrameTagBuffer;
		}

		IsInitialized=1;
	}
	else result=0;

	return result;
}
Exemplo n.º 4
0
int cdvdInit(int mode)
{
	int i=0,len=0,ret=0;
    u8  *pkt;

    cdvdCd.server = NULL;
    
    do {
        if ((ret = SifBindRpc(&cdvdCd, CDVD_INIT_BIND_RPC, 0)) < 0) {
            return -1;
        }
        if (!cdvdCd.server) {
            nopdelay();
        }
    }
	while(!cdvdCd.server);

    pkt = sendBuffer; 
    PUSHDATA( int, pkt, mode, i);
    pkt += i; len += i;

	if ((ret = SifCallRpc(&cdvdCd, 0, 0, sendBuffer, len, NULL, 0, 0, 0)) < 0)
        return -1;
  
    cdvdInitialised = 1;
    
    return 0;
}
Exemplo n.º 5
0
int poweroffInit()
{
	int res;
	static int _init_count = -1;

	if(_init_count == _iop_reboot_count)
		return 0;
	_init_count = _iop_reboot_count;

	while(((res = SifBindRpc(&cd0, PWROFF_IRX, 0)) >= 0) && (cd0.server == NULL))
		nopdelay();

	ee_thread_t thread;
	ee_thread_status_t thisThread;

	ee_sema_t sema;

	// Terminate and delete any previously created threads
	if (powerOffThreadId >= 0) {
		TerminateThread(powerOffThreadId);
		DeleteThread(powerOffThreadId);
		powerOffThreadId = -1;
	}

	// Delete any previously created semaphores
	if (PowerOffSema >= 0)
	{
		DeleteSema(PowerOffSema);
		PowerOffSema = -1;
	}

	sema.init_count = 0;
	sema.max_count = 1;
	sema.option = 0;
	PowerOffSema = CreateSema(&sema);

	ReferThreadStatus(GetThreadId(), &thisThread);

	if (thisThread.current_priority == 0) {
		ChangeThreadPriority(GetThreadId(), 51);
		thread.initial_priority = 50;
	} else
		thread.initial_priority = thisThread.current_priority - 1;

	thread.stack_size = 512 * 16;
	thread.gp_reg = &_gp;
	thread.func = PowerOffThread;
	thread.stack = (void *)poffThreadStack;
	powerOffThreadId = CreateThread(&thread);
	StartThread(powerOffThreadId, NULL);
	
	DIntr();
	SifAddCmdHandler(POFF_SIF_CMD, _poff_intr_callback, NULL);
	EIntr();

	int autoShutdown = 0;
	SifCallRpc(&cd0, PWROFF_ENABLE_AUTO_SHUTOFF, 0, NULL, 0, &autoShutdown, sizeof(autoShutdown), 0, 0);
	
	return res;
}
Exemplo n.º 6
0
int poweroffInit(void)
{
	ee_thread_t thread;
	int res;
	static int _init_count = -1;

	if(_init_count == _iop_reboot_count)
		return 0;
	_init_count = _iop_reboot_count;

	while(((res = SifBindRpc(&cd0, PWROFF_IRX, 0)) >= 0) && (cd0.server == NULL))
		nopdelay();

	// Terminate and delete any previously created threads
	if (powerOffThreadId >= 0) {
		TerminateThread(powerOffThreadId);
		DeleteThread(powerOffThreadId);
		powerOffThreadId = -1;
	}

	thread.initial_priority = POWEROFF_THREAD_PRIORITY;
	thread.stack_size = sizeof(poffThreadStack);
	thread.gp_reg = &_gp;
	thread.func = PowerOffThread;
	thread.stack = (void *)poffThreadStack;
	thread.option = PWROFF_IRX;
	thread.attr = 0;
	powerOffThreadId = CreateThread(&thread);
	StartThread(powerOffThreadId, NULL);

	int autoShutdown = 0;
	SifCallRpc(&cd0, PWROFF_ENABLE_AUTO_SHUTOFF, 0, NULL, 0, &autoShutdown, sizeof(autoShutdown), NULL, NULL);

	return res;
}
Exemplo n.º 7
0
/** Initializes audsrv library
    @returns error code
*/
int audsrv_init()
{
	int ret;

	if (initialized)
	{
		/* already done */
		return 0;
	}

	memset(&cd0, '\0', sizeof(cd0));

	while (1)
	{
		if (SifBindRpc(&cd0, AUDSRV_IRX, 0) < 0)
		{
			set_error(AUDSRV_ERR_RPC_FAILED);
			return -1;
		}

 		if (cd0.server != 0)
		{
			break;
		}

		nopdelay();
	}

	ee_sema_t compSema;
	compSema.init_count = 1;
	compSema.max_count = 1;
	compSema.option = 0;
	completion_sema = CreateSema(&compSema);
	if (completion_sema < 0)
	{
		set_error(AUDSRV_ERR_FAILED_TO_CREATE_SEMA);
		return -1;
	}

	SifCallRpc(&cd0, AUDSRV_INIT, 0, sbuff, 64, sbuff, 64, NULL, NULL);
	ret = sbuff[0];
	if (ret != 0)
	{
		set_error(ret);
		return ret;
	}

	/* register a callback handler */
	DI();
	SifAddCmdHandler(AUDSRV_CDDA_CALLBACK, cdda_stopped, NULL);
	SifAddCmdHandler(AUDSRV_FILLBUF_CALLBACK, fillbuf_requested, NULL);
	EI();

	/* initialize IOP heap (for adpcm samples) */
	SifInitIopHeap();

	set_error(AUDSRV_ERR_NOERROR);
	return AUDSRV_ERR_NOERROR;
}
Exemplo n.º 8
0
int PS2CamInit(int mode)
{
	// unsigned int	i;
	int				ret=0;
	int				*buf;
	int				timeout;

	if(CamInited)return 0;
	
	SifInitRpc(0);

	timeout = 100000;

	while (((ret = SifBindRpc(&cdata, PS2_CAM_RPC_ID, 0)) >= 0) && (cdata.server == NULL))
		nopdelay();
	
	nopdelay();
		
	
	
	if (ret < 0)return ret;
		


	buf		= (int *)&data[0];
	buf[0]	= mode;

	printf("bind done\n");

	SifCallRpc(&cdata, PS2CAM_RPC_INITIALIZE, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0);
	nopdelay();

	CamInited = 1;
	
printf("init done\n");


	compSema.init_count = 1;
	compSema.max_count = 1;
	compSema.option = 0;
	sem = CreateSema(&compSema);

printf("sema done\n");

	return buf[0];
}
Exemplo n.º 9
0
int PS2CamGetIRXVersion(void)
{
	int *ret;

	ret = (int *)&data[0];

	SifCallRpc(&cdata, PS2CAM_RPC_GETIRXVERSION, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0);
	nopdelay();

	return ret[0];
}
Exemplo n.º 10
0
int PS2CamGetDeviceCount(void)
{
	int *ret;

	ret = (int *)&data[0];

	SifCallRpc(&cdata, PS2CAM_RPC_GETDEVCOUNT, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0);
	nopdelay();

	return ret[0];
}
Exemplo n.º 11
0
int poweroffInit(void)
{
	ee_thread_t thread;
	ee_sema_t sema;
	int res;
	static int _init_count = -1;

	if(_init_count == _iop_reboot_count)
		return 0;
	_init_count = _iop_reboot_count;

	while(((res = SifBindRpc(&cd0, PWROFF_IRX, 0)) >= 0) && (cd0.server == NULL))
		nopdelay();

	// Terminate and delete any previously created threads
	if (powerOffThreadId >= 0) {
		TerminateThread(powerOffThreadId);
		DeleteThread(powerOffThreadId);
		powerOffThreadId = -1;
	}

	// Delete any previously created semaphores
	if (PowerOffSema >= 0)
	{
		DeleteSema(PowerOffSema);
		PowerOffSema = -1;
	}

	sema.init_count = 0;
	sema.max_count = 1;
	sema.option = 0;
	PowerOffSema = CreateSema(&sema);

	thread.initial_priority = POWEROFF_THREAD_PRIORITY;
	thread.stack_size = sizeof(poffThreadStack);
	thread.gp_reg = &_gp;
	thread.func = PowerOffThread;
	thread.stack = (void *)poffThreadStack;
	powerOffThreadId = CreateThread(&thread);
	StartThread(powerOffThreadId, NULL);

	DI();
	SifAddCmdHandler(POFF_SIF_CMD, _poff_intr_callback, NULL);
	EI();

	int autoShutdown = 0;
	SifCallRpc(&cd0, PWROFF_ENABLE_AUTO_SHUTOFF, 0, NULL, 0, &autoShutdown, sizeof(autoShutdown), NULL, NULL);

	return res;
}
Exemplo n.º 12
0
void ResetAll()
{
	u32 core;
	volatile u16 *statx;

	*SD_C_SPDIF_OUT = 0;
	nopdelay();
	*SD_C_SPDIF_OUT = 0x8000;
	nopdelay();

	*U32_REGISTER(0x10F0) |= 0xB0000;

	for(core=0; core < 2; core++)
	{
		VoiceTransIoMode[core]	= 0;
		*U16_REGISTER(0x1B0)	= 0;
		*SD_CORE_ATTR(core)		= 0;
		nopdelay();
		*SD_CORE_ATTR(core)		= SD_SPU2_ON;

		*SD_P_MVOLL(core)		= 0;
		*SD_P_MVOLR(core)		= 0;

		statx = U16_REGISTER(0x344 + (core * 1024));

		while(*statx & 0x7FF);

		*SD_A_KOFF_HI(core)		= 0xFFFF;
		*SD_A_KOFF_LO(core)		= 0xFFFF; // Should probably only be 0xFF
	}

	*SD_S_PMON_HI(1)	= 0;
	*SD_S_PMON_LO(1)	= 0;
	*SD_S_NON_HI(1)		= 0;
	*SD_S_NON_LO(1)		= 0;
}
Exemplo n.º 13
0
int PS2CamGetDeviceStatus(int handle)
{
	int *ret;


	ret = (int *)&data[0];

	ret[0] = handle;


	SifCallRpc(&cdata, PS2CAM_RPC_GETDEVSTATUS, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0);
	nopdelay();

	return ret[0];
}
Exemplo n.º 14
0
int ds3ps2_init()
{
	if (ds3ps2_initialized) return 0;

	ds3ps2if.server = NULL;

	do {
		if (SifBindRpc(&ds3ps2if, DS3PS2_BIND_RPC_ID, 0) < 0) {
			return -1;
		}
		nopdelay();
	} while (!ds3ps2if.server);

	ds3ps2_initialized = 1;
	return 1;
}
Exemplo n.º 15
0
int PS2CamSetDeviceBandwidth(int handle, char bandwidth)
{
	int *ret;

	ret = (int *)&data[0];

	ret[0] = handle;
	ret[1] = bandwidth;



	SifCallRpc(&cdata, PS2CAM_RPC_SETDEVBANDWIDTH, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0);
	nopdelay();

	return ret[0];
}
Exemplo n.º 16
0
int iop_heap_dma_upload(void *src,u32 dst,int size)
{
	int i=0,len=0,size2;
  u8  *pkt;
	int ret=0;
	int ret2=0;
	int p=0;

	int cont1=0;
while(size>0) // send data with src unaligned
{
if(size>512) size2=512; else size2=size;
CD_memcpy2(memsend,((unsigned char *) src)+p,size2);
do

{
	FlushCache(0);

  /* build packet */
  pkt = send_buffer2; 
  PUSHDATA( u32, pkt, (u32)memsend, i);
  pkt += i; len += i;
  PUSHDATA( u32, pkt, dst, i);
  pkt += i; len += i;
  PUSHDATA( int, pkt, size2, i);
  pkt += i; len += i;
  PUSHDATA( int, pkt, 0, i);
  pkt += i; len += i;

	ret = SifSetDma((SifDmaTransfer_t*)send_buffer2,1);

	if(ret==0)  {nopdelay();cont1++;}
	if(ret==0 && cont1>=3) {cont1=0;SifSetDChain();}
}while(ret==0); // modificado por Hermes

	while((ret2 = SifDmaStat(ret))>=0);


	FlushCache(0);
size-=size2;
p+=size2;
dst+=size2;
}
	return (ret2 < -1);
}
Exemplo n.º 17
0
int cdInit(int mode)
{
	int i=0,len=0,ret=0;
	char *pkt;

	cdvdCd.server = NULL;
	while(!cdvdCd.server)
	{
		if ((ret = SifBindRpc(&cdvdCd, CD_INIT_BIND_RPC, 0)) < 0) return -1;
		if (!cdvdCd.server) nopdelay();
	}
	pkt = cdRpcBuffer; 
	PUSHDATA( int, pkt, mode, i);
	pkt += i; len += i;
	if ((ret = SifCallRpc(&cdvdCd, 0, 0, cdRpcBuffer, len, NULL, 0, 0, 0)) < 0) return -1;
	cdInitialised = 1;
	return 0;
}
Exemplo n.º 18
0
int PS2CamGetDeviceInfo(int handle, PS2CAM_DEVICE_INFO *info)
{
	int					*ret;
	PS2CAM_DEVICE_INFO	*iop_info;

	ret			= (int *)&data[0];
	iop_info	= (PS2CAM_DEVICE_INFO *)&ret[1];

	ret[0] = handle;

	memcpy(iop_info, info, info->ssize);

	SifCallRpc(&cdata, PS2CAM_RPC_GETDEVINFO, 0, (void*)(&data[0]),info->ssize+4,(void*)(&data[0]),info->ssize+4,0,0);
	nopdelay();

	memcpy(info, iop_info, iop_info->ssize);

	return ret[0];
}
Exemplo n.º 19
0
int fioInit()
{
	int res;
	ee_sema_t compSema;
	static int _rb_count = 0;

	if(_rb_count != _iop_reboot_count)
	{
	    _rb_count = _iop_reboot_count;

	    if (_fio_completion_sema >= 0)
	    {
	        DeleteSema(_fio_completion_sema);
            }

	    memset(&_fio_cd, 0, sizeof _fio_cd);
	    _fio_init = 0;
	}

        if (_fio_init)
		return 0;

	SifInitRpc(0);

	while (((res = SifBindRpc(&_fio_cd, 0x80000001, 0)) >= 0) &&
			(_fio_cd.server == NULL))
		nopdelay();

	if (res < 0)
		return res;

	compSema.init_count = 1;
	compSema.max_count = 1;
	compSema.option = 0;
	_fio_completion_sema = CreateSema(&compSema);
	if (_fio_completion_sema < 0)
		return -E_LIB_SEMA_CREATE;

	_fio_init = 1;
	_fio_block_mode = FIO_WAIT;

	return 0;
}
Exemplo n.º 20
0
int PS2MouseInit(void)

{
  if(mouse_init)
    {
      printf("PS2Mouse Library already initialised\n");
      return 0;
    }

  mouseif.server = NULL;

  do {
    if (SifBindRpc(&mouseif, PS2MOUSE_BIND_RPC_ID, 0) < 0) {
      return -1;
    }
    nopdelay();
  } while(!mouseif.server);

  mouse_init = 1;

  return 1;
}
Exemplo n.º 21
0
int PS2KbdInit(void)
/* Initialise the keyboard library */
{
	int res;
	ee_sema_t kbdSema;

	while ((res = SifBindRpc(&cd0, PS2KBD_RPC_ID, 0)) < 0)
		nopdelay();

	memset(rpcBuf, 0, 3 * PS2KBD_KEYMAP_SIZE);
	rpcKey = 0;

	kbdSema.init_count = 1;
	kbdSema.max_count = 1;

	kbdRpcSema = CreateSema(&kbdSema);
	if (kbdRpcSema >= 0) {
		kbdInitialized = 1;
		return 0;
	} else
		return -1;
}
Exemplo n.º 22
0
void InitVoices()
{
	s32 voice, i;
	volatile u16 *statx;

	// Set Start Address of data to transfer.
	*SD_A_TSA_HI(0) = 0;
	*SD_A_TSA_LO(0) = 0x5000 >> 1;

	// Fill with data.
	// First 16 bytes are reserved.
	for(i = 0; i < 16; i++) *SD_A_STD(0) = VoiceDataInit[i];

	// Set Transfer mode to IO
	*SD_CORE_ATTR(0) = (*SD_CORE_ATTR(0) & ~SD_CORE_DMA) | SD_DMA_IO;

	statx = U16_REGISTER(0x344);

	// Wait for transfer to complete;
	while(*statx & SD_IO_IN_PROCESS);

	// Reset DMA settings
	*SD_CORE_ATTR(0) &= ~SD_CORE_DMA;

	// Init voices
	for(voice = 0; voice < 24; voice++)
	{
		*SD_VP_VOLL(0, voice)	= 0;
		*SD_VP_VOLR(0, voice)	= 0;
		*SD_VP_PITCH(0, voice)	= 0x3FFF;
		*SD_VP_ADSR1(0, voice)	= 0;
		*SD_VP_ADSR2(0, voice)	= 0;

		*SD_VP_VOLL(1, voice)	= 0;
		*SD_VP_VOLR(1, voice)	= 0;
		*SD_VP_PITCH(1, voice)	= 0x3FFF;
		*SD_VP_ADSR1(1, voice)	= 0;
		*SD_VP_ADSR2(1, voice)	= 0;

		// Top address of waveform data
		*SD_VA_SSA_HI(0, voice)	= 0;
		*SD_VA_SSA_LO(0, voice)	= 0x5000 >> 1;
		*SD_VA_SSA_HI(1, voice)	= 0;
		*SD_VA_SSA_LO(1, voice)	= 0x5000 >> 1;
	}

	// Set all voices to ON
	*SD_A_KON_HI(0) = 0xFFFF;
	*SD_A_KON_LO(0) = 0xFF;
	*SD_A_KON_HI(1) = 0xFFFF;
	*SD_A_KON_LO(1) = 0xFF;

	// There is no guarantee that voices will be turn on at once.
	// So we wait to make sure.
	nopdelay();

	// Set all voices to OFF
	*SD_A_KOFF_HI(0) = 0xFFFF;
	*SD_A_KOFF_LO(0) = 0xFF;
	*SD_A_KOFF_HI(1) = 0xFFFF;
	*SD_A_KOFF_LO(1) = 0xFF;

	// There is no guarantee that voices will be turn off at once.
	// So we wait to make sure.
	nopdelay();

	*SD_S_ENDX_HI(0) = 0;
	*SD_S_ENDX_LO(0) = 0;
}
Exemplo n.º 23
0
int NetManInitRPCClient(void){
	static const char NetManID[]="NetMan";
	int result;
	ee_sema_t SemaData;
	ee_thread_t ThreadData;

	if(!IsInitialized)
	{
		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=(u32)NetManID;
		SemaData.attr=0;
		if((NetManIOSemaID=CreateSema(&SemaData)) < 0)
		{
			deinitCleanup();
			return NetManIOSemaID;
		}

		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=(u32)NetManID;
		SemaData.attr=0;
		if((NetManTxSemaID=CreateSema(&SemaData)) < 0)
		{
			deinitCleanup();
			return NetManTxSemaID;
		}

		ThreadData.func=&TxThread;
		ThreadData.stack=TxThreadStack;
		ThreadData.stack_size=sizeof(TxThreadStack);
		ThreadData.gp_reg=&_gp;
		ThreadData.initial_priority=0x57;	//I would design this to have a lower priority than the TCP/IP stack, but somehow that results in worse sending performance (I guess because the TCP/IP stack takes quite a bit of runtime).
		ThreadData.attr=ThreadData.option=0;

		if((TxThreadID=CreateThread(&ThreadData)) < 0)
		{
			deinitCleanup();
			return TxThreadID;
		}

		if((result = StartThread(TxThreadID, NULL)) < 0)
		{
			deinitCleanup();
			return result;
		}

		while((SifBindRpc(&NETMAN_rpc_cd, NETMAN_RPC_NUMBER, 0)<0)||(NETMAN_rpc_cd.server==NULL))
			nopdelay();

		if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_INIT, 0, NULL, 0, &ReceiveBuffer, sizeof(s32), NULL, NULL))>=0)
		{
			if((result=ReceiveBuffer.result) == 0)
				IsInitialized=1;
			else
				deinitCleanup();
		}else{
			deinitCleanup();
		}
	}
	else result=0;

	return result;
}
Exemplo n.º 24
0
int audsrv_init()
{
	ee_sema_t compSema;
	ee_thread_t rpcThread;
	int ret;

	if (initialized)
	{
		/* already done */
		return 0;
	}

	memset(&cd0, '\0', sizeof(cd0));

	while (1)
	{
		if (SifBindRpc(&cd0, AUDSRV_IRX, 0) < 0)
		{
			set_error(AUDSRV_ERR_RPC_FAILED);
			return -1;
		}

 		if (cd0.server != 0)
		{
			break;
		}

		nopdelay();
	}

	compSema.init_count = 1;
	compSema.max_count = 1;
	compSema.option = 0;
	completion_sema = CreateSema(&compSema);
	if (completion_sema < 0)
	{
		set_error(AUDSRV_ERR_FAILED_TO_CREATE_SEMA);
		return -1;
	}

	/* Create RPC server */
	rpcThread.attr = 0;
	rpcThread.option = 0;
	rpcThread.func = &rpc_server_thread;
	rpcThread.stack = rpc_server_stack;
	rpcThread.stack_size = sizeof(rpc_server_stack);
	rpcThread.gp_reg = &_gp;
	rpcThread.initial_priority = 0x60;
	rpc_server_thread_id = CreateThread(&rpcThread);
	StartThread(rpc_server_thread_id, NULL);

	SifCallRpc(&cd0, AUDSRV_INIT, 0, sbuff, 64, sbuff, 64, NULL, NULL);
	ret = sbuff[0];
	if (ret != 0)
	{
		set_error(ret);
		return ret;
	}

	/* initialize IOP heap (for adpcm samples) */
	SifInitIopHeap();

	set_error(AUDSRV_ERR_NOERROR);
	return AUDSRV_ERR_NOERROR;
}
Exemplo n.º 25
0
int NetManInitRPCClient(void){
	static const char NetManID[]="NetMan";
	int result;
	ee_sema_t SemaData;
	ee_thread_t ThreadData;

	if(!IsInitialized){
		memset(&TxFIFOData1, 0, sizeof(TxFIFOData1));
		memset(&TxFIFOData2, 0, sizeof(TxFIFOData2));

		TxFIFOData1.FrameBuffer = memalign(64, (MAX_FRAME_SIZE*NETMAN_RPC_BLOCK_SIZE+0x3F)&~0x3F);
		TxFIFOData2.FrameBuffer = memalign(64, (MAX_FRAME_SIZE*NETMAN_RPC_BLOCK_SIZE+0x3F)&~0x3F);

		if(TxFIFOData1.FrameBuffer == NULL) return -ENOMEM;
		if(TxFIFOData2.FrameBuffer == NULL){
			deinitCleanup();
			return -ENOMEM;
		}

		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=(unsigned int)NetManID;
		SemaData.attr=0;
		if((NetManIOSemaID=CreateSema(&SemaData)) < 0){
			deinitCleanup();
			return NetManIOSemaID;
		}

		TxActiveBankID=0;
		CurrentTxFIFOData=UNCACHED_SEG(&TxFIFOData1);

		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=(unsigned int)NetManID;
		SemaData.attr=0;
		if((TxBankAccessSema=CreateSema(&SemaData)) < 0){
			deinitCleanup();
			return TxBankAccessSema;
		}

		SemaData.max_count=1;
		SemaData.init_count=1;
		SemaData.option=(unsigned int)NetManID;
		SemaData.attr=0;
		if((NetManTxSemaID=CreateSema(&SemaData)) < 0){
			deinitCleanup();
			return NetManTxSemaID;
		}

		ThreadData.func=&TxThread;
		ThreadData.stack=TxThreadStack;
		ThreadData.stack_size=sizeof(TxThreadStack);
		ThreadData.gp_reg=&_gp;
		ThreadData.initial_priority=0x58;
		ThreadData.attr=ThreadData.option=0;

		if((TxThreadID=CreateThread(&ThreadData)) < 0){
			deinitCleanup();
			return TxThreadID;
		}

		if((result = StartThread(TxThreadID, NULL)) < 0){
			deinitCleanup();
			return result;
		}

		while((SifBindRpc(&NETMAN_rpc_cd, NETMAN_RPC_NUMBER, 0)<0)||(NETMAN_rpc_cd.server==NULL)){
			nopdelay();
			nopdelay();
			nopdelay();
			nopdelay();
		}

		if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_INIT, 0, NULL, 0, ReceiveBuffer, sizeof(int), NULL, NULL))>=0){
			if((result=*(int*)ReceiveBuffer) == 0)
				IsInitialized=1;
			else
				deinitCleanup();
		}else{
			deinitCleanup();
		}
	}
	else result=0;

	return result;
}
Exemplo n.º 26
0
Arquivo: libmc.c Projeto: sp193/ps2sdk
// init memcard lib
//
// args:	MC_TYPE_MC  = use MCSERV/MCMAN
//			MC_TYPE_XMC = use XMCSERV/XMCMAN
// returns:	0   = successful
//			< 0 = error
int mcInit(int type)
{
	int ret=0;
	static int _rb_count = 0;

	if(_rb_count != _iop_reboot_count)
	{
		_rb_count = _iop_reboot_count;
		mcReset();
	}

	if(g_mclibInited)
		return -1;

	SifInitRpc(0);

	// set which modules to use
	g_mcType = type;

	// bind to mc rpc on iop
	do
	{
		if((ret=SifBindRpc(&g_cdata, 0x80000400, 0)) < 0)
		{
			#ifdef MC_DEBUG
				printf("libmc: bind error\n");
			#endif

			return ret;
		}
		if(g_cdata.server == NULL)
			nopdelay();
	}
	while (g_cdata.server == NULL);

	// for some reason calling this init sif function with 'mcserv' makes all other
	// functions not work properly. although NOT calling it means that detecting
	// whether or not cards are formatted doesnt seem to work :P
	if(g_mcType == MC_TYPE_MC)
	{
#ifdef MC_DEBUG
		printf("libmc: using MCMAN & MCSERV\n");

#endif
		g_descParam.offset=0xFFFFFF27;

		// call init function
		if((ret = SifCallRpc(&g_cdata, mcRpcCmd[g_mcType][MC_RPCCMD_INIT], 0, &g_descParam, sizeof(g_descParam), g_rdata, 4, NULL, NULL))>=0)
		{
			ret = *(s32*)g_rdata;
		}
		else{
			// init error
#ifdef MC_DEBUG
			printf("libmc: initialisation error\n");
#endif
			g_mclibInited = 0;
			return *(s32*)g_rdata - 100;
		}
	}
	else if(g_mcType == MC_TYPE_XMC)
	{
#ifdef MC_DEBUG
		printf("libmc: using XMCMAN & XMCSERV\n");
#endif

		// call init function
		if((ret = SifCallRpc(&g_cdata, mcRpcCmd[g_mcType][MC_RPCCMD_INIT], 0, &g_descParam, sizeof(g_descParam), g_rdata, 12, NULL, NULL)) < 0)
		{
			// init error
#ifdef MC_DEBUG
			printf("libmc: initialisation error\n");
#endif
			g_mclibInited = 0;
			return ret - 100;
		}

		// check if old version of mcserv loaded
		if(*(s32*)UNCACHED_SEG(g_rdata+4) < 0x205)
		{
#ifdef MC_DEBUG
			printf("libmc: mcserv is too old (%x)\n", *(s32*)UNCACHED_SEG(g_rdata+4));
#endif
			g_mclibInited = 0;
			return -120;
		}

		// check if old version of mcman loaded
		if(*(s32*)UNCACHED_SEG(g_rdata+8) < 0x206)
		{
#ifdef MC_DEBUG
			printf("libmc: mcman is too old (%x)\n", *(s32*)UNCACHED_SEG(g_rdata+8));
#endif
			g_mclibInited = 0;
			return -121;
		}
		ret = *(s32*)UNCACHED_SEG(g_rdata+0);
	}

	// successfully inited
	g_mclibInited = 1;
	g_currentCmd = 0;
	return ret;
}