Example #1
0
void utilitySavedataLog(char *buffer, const SyscallInfo *syscallInfo, u32 param) {
	char *s = buffer;

	if (syscallInfo->nid == 0x50C4CD57) {
		utilitySavedataParams = (void *) param;
	}

	int mode = _lw((int) utilitySavedataParams + 48);
	s = append(s, "mode=");
	s = appendInt(s, mode, 0);
	s = append(s, ", gameName=");
	s = append(s, utilitySavedataParams + 60);
	s = append(s, ", saveName=");
	s = append(s, utilitySavedataParams + 76);
	s = append(s, ", fileName=");
	s = append(s, utilitySavedataParams + 100);
	if (syscallInfo->nid == 0x9790B33C) {
		s = append(s, ", result=");
		s = appendHex(s, _lw((int) utilitySavedataParams + 28), 8);
	}
	s = append(s, "\n");
	writeLog(buffer, s - buffer);
	s = buffer;

	printLogMem("Data ", _lw((int) utilitySavedataParams + 116), 16);

	printLogMem("Params ", (int) utilitySavedataParams, _lw((int) utilitySavedataParams + 0));
}
Example #2
0
File: common.c Project: hlide/jpcsp
void utilityOskLog(char *buffer, const SyscallInfo *syscallInfo, u32 param) {
	char *s = buffer;

	if (syscallInfo->nid != 0xF6269B82 && syscallInfo->nid != 0x3DFAEBA9) {
		return;
	}

	if (syscallInfo->nid == 0xF6269B82) {
		utilityOskParams = (void *) param;
	}

	int oskDataAddr = _lw((int) utilityOskParams + 52);
	if (oskDataAddr != 0) {
		s = append(s, "inputMode=");
		s = appendHex(s, _lw(oskDataAddr + 0), 0);
		s = append(s, ", inputAttr=");
		s = appendHex(s, _lw(oskDataAddr + 4), 0);
	}
	if (syscallInfo->nid == 0x3DFAEBA9) {
		s = append(s, ", result=");
		s = appendHex(s, _lw((int) utilityOskParams + 28), 8);
	}
	s = append(s, "\n");
	writeLog(buffer, s - buffer);
	s = buffer;

	printLogMem("Params ", (int) utilityOskParams, _lw((int) utilityOskParams + 0));
}
Example #3
0
int pspDebugSioGetchar(void)
{
	if(_lw(PSP_UART4_STAT) & PSP_UART_RXEMPTY)
	{
		return -1;
	}

	return _lw(PSP_UART4_FIFO);
}
Example #4
0
File: main.c Project: joel16/utopia
int sceHibariUnk14(u32 a)
{
	u32 res;
	
	if (hibari_struct[0] == 0)
	{
		sceSysregSpiClkEnable(1);

		while (((*(volatile u32 *)0xbe5c000c) & 4))
		{
			_lw(0xbe5c0008);
		}

		*(volatile u32 *)0xbe5c0004 = 2;
		asm("sync\n");
	}

	hibari_struct[0]++;

	while (((*(volatile u32 *)0xbe5c000c) & 0x10));

	while (((*(volatile u32 *)0xbe5c000c) & 4))
	{
		_lw(0xbe5c0008);
	}

	hibari_struct[1] = a;
	hibari_struct[3] = -1;

	while (!((*(volatile u32 *)0xbe5c000c) & 2));	
	*(volatile u32 *)0xbe5c0008 = ((a&0xFFFF) | 0x8000);	

	while (!((*(volatile u32 *)0xbe5c000c) & 4));
	_lw(0xbe5c0008);
	
	while (!((*(volatile u32 *)0xbe5c000c) & 2));
	*(volatile u32 *)0xbe5c0008 = 0xA000;

	while (!((*(volatile u32 *)0xbe5c000c) & 4));
	res = (*(volatile u32 *)0xbe5c0008) & 0xFF;
	
	hibari_struct[0]--;

	if (hibari_struct[0] == 0)
	{
		while (((*(volatile u32 *)0xbe5c000c) & 0x10));
		
		*(volatile u32 *)0xbe5c0004 = 0;
		asm("sync\n");

		sceSysregSpiClkDisable(1);
	}

	return res;
}
Example #5
0
/* This MUST return 0 if there are no characters in the RX FIFO.  */
int sbcall_getc()
{
	if (_lw(EE_SIO_ISR) & 0xf00)
		return _lb(EE_SIO_RXFIFO);

	return 0;
}
Example #6
0
// Read out the interrupt state and clear it 
static int intr_handler(void *arg) {
	u32 stat;
	stat = _lw(0xBE500040);
	_sw(stat, 0xBE500044);
	sceKernelDisableIntr(PSP_HPREMOTE_INT);
	sceKernelSetEventFlag(g_eventflag, EVENT_SIO);
	return -1;
}
Example #7
0
static int sio_putc(int c)
{
	/* Wait for free space in the TX FIFO.  */
	while (_lw(EE_SIO_ISR) & 0x8000)
		;

	_sb(c, EE_SIO_TXFIFO);
	return c;
}
Example #8
0
int OnModuleStart( tSceModule * mod )
{
	log( "on module %s start\n", mod->modname );
	if ( strcmp( mod->modname, "scePaf_Module" ) == 0 )
	{
		parseDiff("/vsh/module/paf.prx", mod );
	}
	else if ( strcmp( mod->modname, "sceVshCommonGui_Module" ) == 0 )
	{
		parseDiff("/vsh/module/common_gui.prx", mod );
	}
	else if ( strcmp( mod->modname, "vsh_module" ) == 0 )
	{
		parseDiff("/vsh/module/vshmain.prx", mod );
		
	}
	else if ( strcmp( mod->modname, "sysconf_plugin_module" ) == 0 )
	{
		unsigned int offset = getSysconfOffset();
		if ( fw_version == FW_500 )
		{
			unsigned int addr = mod->text_addr + offset;
			char *sfx = (char *)addr;
			sfx[0] = 'C';
		}
		else
		{
			unsigned int h_addr = _lw( mod->text_addr + offset );
			unsigned int l_addr = _lw( mod->text_addr + offset + 0xC );
			unsigned int addr = ( ( h_addr & 0xFFFF ) << 16 ) | ( l_addr & 0xFFFF );
			char * sfx = "CTF";
			_sw( *( unsigned int * )sfx, addr );
		}
		sceKernelIcacheInvalidateAll();
		sceKernelDcacheWritebackInvalidateAll();
		log( "patched sysconf\n" );
	}
	if ( !previous )
		return 0;
	return previous( mod );
}
Example #9
0
File: sio.c Project: sp193/ps2sdk
int sio_getc()
{
	/* Do we have something in the RX FIFO?  */
	if (_lw(SIO_ISR) & 0xf00) {
		u8 b = _lb(SIO_RXFIFO);
		_sw(7, SIO_ISR);
		return b;
	}

	/* Return EOF.  */
	return -1;
}
Example #10
0
void * patchLoadExecVSHCommon( void * func )
{
	tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceLoadExec" );
	if ( fw_version == FW_371 )
		LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x0000121c; //same in standare/slim
	else if ( fw_version == FW_380 || fw_version == FW_390 )
		LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x000014cc; //same in standare/slim
	else if ( fw_version == FW_401 )
		LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x00001E1C; //same in standare/slim
	else if ( fw_version == FW_500 )
		LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x00001E58; //verified in phat
	else if ( fw_version == FW_550 )
		LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x00001F3C; //same on slim & phat
	LoadExecVSHCommon_ori[1].addr = LoadExecVSHCommon_ori[0].addr + 4;
	LoadExecVSHCommon_ori[0].val = _lw( LoadExecVSHCommon_ori[0].addr );
	LoadExecVSHCommon_ori[1].val = _lw( LoadExecVSHCommon_ori[1].addr );
	MAKE_JUMP( LoadExecVSHCommon_ori[0].addr, func );
	_sw( NOP, LoadExecVSHCommon_ori[1].addr );
	sceKernelIcacheInvalidateAll();
	sceKernelDcacheWritebackInvalidateAll();
	return ( void * )LoadExecVSHCommon_ori[0].addr;
}
Example #11
0
File: main.c Project: joel16/utopia
int sceHibariUnk7(u32 a, u8 *p, int size)
{
	int i;
	
	if (hibari_struct[0] == 0)
	{
		sceSysregSpiClkEnable(1);

		while (((*(volatile u32 *)0xbe5c000c) & 4))
		{
			_lw(0xbe5c0008);
		}

		*(volatile u32 *)0xbe5c0004 = 2;
		asm("sync\n");
	}

	hibari_struct[0]++;

	if (hibari_struct[1] != a)
	{
		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = ((a&0xFFFF) | 0x8000);
	}

	for (i = 0; i < size; i++)
	{
		while (!((*(volatile u32 *)0xbe5c000c) & 2));
		*(volatile u32 *)0xbe5c0008 = (p[i] | 0x8100);
		
		a++;
	}

	hibari_struct[0]--;
	hibari_struct[1] = a;
	hibari_struct[3] = -1;

	if (hibari_struct[0] == 0)
	{
		while (((*(volatile u32 *)0xbe5c000c) & 0x10));
		
		*(volatile u32 *)0xbe5c0004 = 0;
		asm("sync\n");

		sceSysregSpiClkDisable(1);
	}

	return 0;
}
Example #12
0
File: sio.c Project: sp193/ps2sdk
int sio_putc(int c)
{
    if((c == '\n') && (___last_sio_putc != '\r'))
    {
        // hack: if the character to be outputted is a '\n'
        //  and the previously-outputted character is not a '\r',
        //  output a '\r' first.
        sio_putc('\r');
    }

    /* Block until we're ready to transmit.  */
    while ((_lw(SIO_ISR) & 0xf000) == 0x8000);

    _sb(c, SIO_TXFIFO);
    ___last_sio_putc = c;
    return c;
}
Example #13
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;
}
Example #14
0
File: main.c Project: joel16/utopia
int sceHibariUnk5(u16 a, u8 b)
{
	if (hibari_struct[0] == 0)
	{
		sceSysregSpiClkEnable(1);

		while (((*(volatile u32 *)0xbe5c000c) & 4))
		{
			_lw(0xbe5c0008);
		}

		*(volatile u32 *)0xbe5c0004 = 2;
		asm("sync\n");
	}

	hibari_struct[0]++;

	while (!((*(volatile u32 *)0xbe5c000c) & 2));	
	*(volatile u32 *)0xbe5c0008 = ((a&0xFFFF) | 0xC000);

	while (!((*(volatile u32 *)0xbe5c000c) & 2));
	*(volatile u32 *)0xbe5c0008 = (b | 0xC100);

	hibari_struct[1] = hibari_struct[3] = -1;
	hibari_struct[0]--;
	
	if (hibari_struct[0] == 0)
	{
		while (((*(volatile u32 *)0xbe5c000c) & 0x10));
		
		*(volatile u32 *)0xbe5c0004 = 0;
		asm("sync\n");

		sceSysregSpiClkDisable(1);
	}
	
	return 0;
}
Example #15
0
void printLogMem(const char *s1, int addr, int length) {
	int i, j;
	int lineStart;
	char buffer[100];
	char *s = buffer;

	s = append(s, s1);
	s = appendHex(s, addr, 8);
	s = append(s, ":\n");
	if (addr != 0) {
		lineStart = 0;
		for (i = 0; i < length; i += 4) {
			if (i > 0) {
				if ((i % 16) == 0) {
					s = append(s, "  >");
					for (j = lineStart; j < i; j++) {
						char c = _lb(addr + j);
						if (c < ' ' || c > '~') {
							c = '.';
						}
						*s++ = c;
					}
					s = append(s, "<\n");
					writeLog(buffer, s - buffer);
					s = buffer;
					lineStart = i;
				} else {
					s = append(s, ", ");
				}
			}
			s = appendHex(s, _lw(addr + i), 8);
		}
	}
	s = append(s, "\n");
	writeLog(buffer, s - buffer);
}
Example #16
0
File: common.c Project: hlide/jpcsp
void utilityMsgLog(char *buffer, const SyscallInfo *syscallInfo, u32 param) {
	char *s = buffer;

	if (syscallInfo->nid != 0x2AD8E239 && syscallInfo->nid != 0x67AF3428) {
		return;
	}

	if (syscallInfo->nid == 0x2AD8E239) {
		utilityMsgParams = (void *) param;
	}

	s = append(s, "result=");
	s = appendHex(s, _lw((int) utilityMsgParams + 48), 0);
	s = append(s, ", mode=");
	s = appendHex(s, _lw((int) utilityMsgParams + 52), 0);
	s = append(s, ", errorValue=");
	s = appendHex(s, _lw((int) utilityMsgParams + 56), 0);
	s = append(s, ", options=");
	s = appendHex(s, _lw((int) utilityMsgParams + 572), 0);
	s = append(s, ", buttonPressed=");
	s = appendHex(s, _lw((int) utilityMsgParams + 576), 0);
	if (syscallInfo->nid == 0x67AF3428) {
		s = append(s, ", result=");
		s = appendHex(s, _lw((int) utilityMsgParams + 28), 8);
	}
	s = append(s, "\n");
	writeLog(buffer, s - buffer);

#if 0
	s = buffer;
	s = append(s, "message=");
	s = append(s, utilityMsgParams + 60);
	s = append(s, "\n");
	writeLog(buffer, s - buffer);

	printLogMem("Params ", (int) utilityMsgParams, _lw((int) utilityMsgParams + 0));
#endif
}
Example #17
0
File: main.c Project: joel16/utopia
int sceHibariUnk15(u32 a, u32 b)
{
	u32 res;

	if (hibari_struct[0] == 0)
	{
		sceSysregSpiClkEnable(1);

		while (((*(volatile u32 *)0xbe5c000c) & 4))
		{
			_lw(0xbe5c0008);
		}

		*(volatile u32 *)0xbe5c0004 = 2;
		asm("sync\n");
	}

	hibari_struct[0]++;

	if (hibari_struct[2] != a)
	{
		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = 0xEF;

		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = (a | 0x0100) & 0xFFFF;
		
		hibari_struct[2] = a;
	}

	while (((*(volatile u32 *)0xbe5c000c) & 0x10));

	while (((*(volatile u32 *)0xbe5c000c) & 4))
	{
		_lw(0xbe5c0008);
	}

	hibari_struct[1] = -1;
	hibari_struct[3] = b;

	while (!((*(volatile u32 *)0xbe5c000c) & 2));
	*(volatile u32 *)0xbe5c0008 = (b&0xFFFF);

	while (!((*(volatile u32 *)0xbe5c000c) & 4));
	_lw(0xbe5c0008); 

	while (!((*(volatile u32 *)0xbe5c000c) & 2));
	*(volatile u32 *)0xbe5c0008 = 0x2000;
	
	while (!((*(volatile u32 *)0xbe5c000c) & 4));
	res = (*(volatile u32 *)0xbe5c0008) & 0xFF; 

	hibari_struct[0]--;

	if (hibari_struct[0] == 0)
	{
		while (((*(volatile u32 *)0xbe5c000c) & 0x10));
		
		*(volatile u32 *)0xbe5c0004 = 0;
		asm("sync\n");

		sceSysregSpiClkDisable(1);
	}
	
	return res;
}
Example #18
0
void SifInitCmd()
{
	u32 packet[5];	/* Implicitly aligned to 16 bytes */
	int i;
	static int _rb_count = 0;
	if(_rb_count != _iop_reboot_count)
	{
	    _rb_count = _iop_reboot_count;
	    if (sif0_id >= 0)
	    {
    	        DisableDmac(5);
    	        RemoveDmacHandler(5, sif0_id);
	    }
	    init = 0;
	}

	if (init)
		return;

	DI();

	_sif_cmd_data.pktbuf = UNCACHED_SEG(_sif_cmd_data.pktbuf);
	_sif_cmd_data.unused = UNCACHED_SEG(_sif_cmd_data.unused);

	for (i = 0; i < CMD_HANDLER_MAX; i++) {
		_sif_cmd_data.sys_cmd_handlers[i].handler = NULL;
		_sif_cmd_data.sys_cmd_handlers[i].harg = NULL;
	}

	for (i = 0; i < 32; i++)
		_sif_cmd_data.sregs[i] = 0;

	_sif_cmd_data.sys_cmd_handlers[0].handler = change_addr;
	_sif_cmd_data.sys_cmd_handlers[0].harg    = &_sif_cmd_data;
	_sif_cmd_data.sys_cmd_handlers[1].handler = set_sreg;
	_sif_cmd_data.sys_cmd_handlers[1].harg    = &_sif_cmd_data;

	EI();
	FlushCache(0);

	if (_lw(DMAC_COMM_STAT) & STAT_SIF0)
		_sw(STAT_SIF0, DMAC_COMM_STAT);

	if (!(_lw(DMAC_SIF0_CHCR) & CHCR_STR))
		SifSetDChain();

	sif0_id = AddDmacHandler(5, _SifCmdIntHandler, 0);
	EnableDmac(5);
	
	init = 1;

	_sif_cmd_data.iopbuf = (void *)SifGetReg(0x80000000);
	if (_sif_cmd_data.iopbuf) {
		/* IOP SIF CMD is already initialized, so give it our new
		   receive address.  */
		((struct ca_pkt *)(packet))->buf = _sif_cmd_data.pktbuf;
		SifSendCmd(0x80000000, packet, sizeof packet, NULL, NULL, 0);
	} else {
		/* Sync */
		while (!(SifGetReg(SIF_REG_SMFLAG) & 0x20000)) ;

		_sif_cmd_data.iopbuf = (void *)SifGetReg(SIF_REG_SUBADDR);
		SifSetReg(0x80000000, (u32)_sif_cmd_data.iopbuf);
		/* See the note above about struct cmd_data, and the use of
		   this register.  */
		SifSetReg(0x80000001, (u32)&_sif_cmd_data);
		packet[3] = 0;
		packet[4] = (u32)_sif_cmd_data.pktbuf;
		SifSendCmd(0x80000002, packet, sizeof packet, NULL, NULL, 0);
	}
}
Example #19
0
/* 11 */ u32  sio2_stat70_get() { return _lw(SIO2_REG_STAT70); }
Example #20
0
/* 13 */ u32  sio2_regN_get(int N) { return _lw(SIO2_REG_BASE + (N * 4)); }
Example #21
0
File: common.c Project: hlide/jpcsp
void utilitySavedataLog(char *buffer, const SyscallInfo *syscallInfo, u32 param) {
	char *s = buffer;
	int fd;

	if (syscallInfo->nid != 0x50C4CD57 && syscallInfo->nid != 0x9790B33C) {
		return;
	}

	if (syscallInfo->nid == 0x50C4CD57) {
		utilitySavedataParams = (void *) param;
	}
	if (utilitySavedataParams == NULL) {
		return;
	}

	int mode = _lw((int) utilitySavedataParams + 48);
	s = append(s, "mode=");
	s = appendInt(s, mode, 0);
	s = append(s, ", gameName=");
	s = append(s, utilitySavedataParams + 60);
	s = append(s, ", saveName=");
	s = append(s, utilitySavedataParams + 76);
	s = append(s, ", fileName=");
	s = append(s, utilitySavedataParams + 100);
	if (syscallInfo->nid == 0x9790B33C) {
		s = append(s, ", result=");
		s = appendHex(s, _lw((int) utilitySavedataParams + 28), 8);
	}
	s = append(s, "\n");
	writeLog(buffer, s - buffer);
	s = buffer;

	printLogMem("Data ", _lw((int) utilitySavedataParams + 116), 16);

	int fileListAddr = _lw((int) utilitySavedataParams + 1528);
	if (fileListAddr != 0 && mode == 12) { // MODE_FILES
		printLogMem("FileList ", fileListAddr, 36);
		if (syscallInfo->nid == 0x9790B33C) { // sceUtilitySavedataShutdownStart
			int saveFileSecureNumEntries = _lw(fileListAddr + 12);
			int saveFileNumEntries = _lw(fileListAddr + 16);
			int systemFileNumEntries = _lw(fileListAddr + 20);
			int saveFileSecureEntriesAddr = _lw(fileListAddr + 24);
			int saveFileEntriesAddr = _lw(fileListAddr + 28);
			int systemEntriesAddr = _lw(fileListAddr + 32);
			printLogMem("SecureEntries ", saveFileSecureEntriesAddr, saveFileSecureNumEntries * 80);
			printLogMem("NormalEntries ", saveFileEntriesAddr, saveFileNumEntries * 80);
			printLogMem("SystemEntries ", systemEntriesAddr, systemFileNumEntries * 80);
		}
	}

	printLogMem("Params ", (int) utilitySavedataParams, _lw((int) utilitySavedataParams + 0));

	if (syscallInfo->nid == 0x9790B33C) {
		fd = ioOpen("ms0:/SavedataStruct.bin", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_APPEND, 0777);
		ioWrite(fd, utilitySavedataParams, _lw((int) utilitySavedataParams + 0));
		ioClose(fd);

		fd = ioOpen("ms0:/SavedataData.bin", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_APPEND, 0777);
		ioWrite(fd, (void *) _lw((int) utilitySavedataParams + 116), _lw((int) utilitySavedataParams + 124));
		ioClose(fd);
	}
}
Example #22
0
/* 14 */ u32  sio2_stat74_get() { return _lw(SIO2_REG_STAT74); }
Example #23
0
/* 18 */ u32  sio2_unkn7c_get() { return _lw(SIO2_REG_UNKN7C); }
Example #24
0
int sioGetchar(void) {
	if (_lw(PSP_UART4_STAT) & PSP_UART_RXEMPTY) return -1; else  return _lw(PSP_UART4_FIFO);
}
Example #25
0
/* 16 */ u32  sio2_unkn78_get() { return _lw(SIO2_REG_UNKN78); }
Example #26
0
static void sif_cmd_interrupt()
{
	u128 packetbuf[8 + 1];
	u128 *packet;
	volatile unsigned int packet_aligned; /* volatile needed, because caller doesn't respect stack alignment. */
	u128 *pktbuf;
	cmd_data_t *cmd_data = &_sif_cmd_data;
	tge_sifcmd_header_t *header;
	sifCmdHandler_t *cmd_handlers = NULL;
	int size, pktquads, i = 0;
	uint32_t id;

	if (_lw(EE_DMAC_SIF0_CHCR) & 0x0100) {
		/* Interrupt to early. Transfer is still in process. */
#if defined(SBIOS_DEBUG)
		printf("sif_cmd_interrupt: transfer not finished\n");
#endif
		return;
	}

	/* Align packet or u128 copy will fail. */
	packet_aligned = (unsigned int) packetbuf;
	packet_aligned += 16 - 1;
	packet_aligned &= ~(16 - 1);
	packet = (void *) packet_aligned;
	header = (tge_sifcmd_header_t *)cmd_data->pktbuf;

	size = (header->size & 0xff);
	if (size == 0) {
		printf("Bad paket size in IRQ.\n");
		goto out;
	}

	/* TBD: Don't copy anything extra */
	pktquads = (size + 30) >> 4; // TBD: + 16 - 1 should be enough for alignment.
	header->size = 0;
	if (pktquads) {
		pktbuf = (u128 *)cmd_data->pktbuf;
		while (pktquads--) {
			packet[i] = pktbuf[i];
			i++;
		}
	}

	/* DMA buffer has been copied. Restart DMA. */
	sbcall_sifsetdchain();

	header = (tge_sifcmd_header_t *)packet;
	/* Get the command handler id and determine which handler list to
	   dispatch from.  */
#if defined(SBIOS_DEBUG)
	printf("fid 0x%x\n", header->fid);
#endif
	id = header->fid & ~SYSTEM_CMD;

	if (header->fid & SYSTEM_CMD) {
		if (id < cmd_data->nr_sys_handlers) {
			cmd_handlers = cmd_data->sys_cmd_handlers;
		}
	} else {
		if (id < cmd_data->nr_usr_handlers) {
			cmd_handlers = cmd_data->usr_cmd_handlers;
		}
	}

	if ((cmd_handlers != NULL) && (cmd_handlers[id].handler != NULL)) {
#if defined(SBIOS_DEBUG)
		printf("Callback 0x%x\n", (uint32_t) cmd_handlers[id].handler);
#endif
		cmd_handlers[id].handler(packet, cmd_handlers[id].harg);
	}

out:
	__asm__ volatile ("sync");
}
Example #27
0
void syscallLog(const SyscallInfo *syscallInfo, const u32 *parameters, u64 result, u32 ra, const char *prefix) {
	char buffer[300];
	char *s = buffer;
	int i, j, k;
	int length;
	int lineStart;

	// Don't log out own sceIoWrites.
	if (syscallInfo->nid == 0x42EC03AC && parameters[0] == commonInfo->logFd) {
		return;
	}

	if (logTimestamp) {
		pspTime time;
		if (sceRtcGetCurrentClockLocalTime(&time) == 0) {
			s = appendInt(s, time.hour, 2);
			*s++ = ':';
			s = appendInt(s, time.minutes, 2);
			*s++ = ':';
			s = appendInt(s, time.seconds, 2);
			*s++ = '.';
			s = appendInt(s, time.microseconds, 6);
			*s++ = ' ';
		}
	}

	if (logThreadName) {
		SceKernelThreadInfo currentThreadInfo;
		currentThreadInfo.size = sizeof(currentThreadInfo);
		currentThreadInfo.name[0] = '\0';
		sceKernelReferThreadStatus(0, &currentThreadInfo);

		s = append(s, currentThreadInfo.name);
		*s++ = ' ';
		*s++ = '-';
		*s++ = ' ';
	}

	if (logRa) {
		s = appendHex(s, ra, 0);
		*s++ = ' ';
	}

	s = append(s, prefix);
	s = append(s, syscallInfo->name);
	int types = syscallInfo->paramTypes;
	for (i = 0; i < syscallInfo->numParams; i++, types >>= 4) {
		if (i > 0) {
			*s++ = ',';
		}
		*s++ = ' ';
		int parameter = parameters[i];
		switch (types & 0xF) {
			case TYPE_HEX32:
				s = appendHex(s, parameter, 0);
				break;
			case TYPE_INT32:
				s = appendInt(s, parameter, 0);
				break;
			case TYPE_STRING:
				s = appendHex(s, parameter, 8);
				if (parameter != 0) {
					*s++ = '(';
					*s++ = '\'';
					s = append(s, (char *) parameter);
					*s++ = '\'';
					*s++ = ')';
				}
				break;
			case TYPE_POINTER32:
				s = appendHex(s, parameter, 8);
				if (parameter != 0) {
					*s++ = '(';
					s = appendHex(s, _lw(parameter), 0);
					*s++ = ')';
				}
				break;
			case TYPE_POINTER64:
				s = appendHex(s, parameter, 8);
				if (parameter != 0) {
					*s++ = '(';
					s = appendHex(s, _lw(parameter), 8);
					*s++ = ' ';
					s = appendHex(s, _lw(parameter + 4), 8);
					*s++ = ')';
				}
				break;
			case TYPE_VARSTRUCT:
				s = appendHex(s, parameter, 8);
				if (parameter != 0) {
					*s++ = ':';
					*s++ = '\n';
					writeLog(buffer, s - buffer);
					s = buffer;
					length = _lw(parameter);
					lineStart = 0;
					for (j = 0; j < length; j += 4) {
						if (j > 0) {
							if ((j % 16) == 0) {
								s = append(s, "  >");
								for (k = lineStart; k < j; k++) {
									char c = _lb(parameter + k);
									if (c < ' ' || c > '~') {
										c = '.';
									}
									*s++ = c;
								}
								s = append(s, "<\n");
								writeLog(buffer, s - buffer);
								s = buffer;
								lineStart = j;
							} else {
								*s++ = ',';
								*s++ = ' ';
							}
						}
						s = appendHex(s, _lw(parameter + j), 8);
					}
				}
				break;
			case TYPE_FIXSTRUCT:
				s = appendHex(s, parameter, 8);
				if (parameter != 0) {
					*s++ = ':';
					*s++ = '\n';
					writeLog(buffer, s - buffer);
					s = buffer;
					length = FIXSTRUCT_SIZE;
					lineStart = 0;
					for (j = 0; j < length; j += 4) {
						if (j > 0) {
							if ((j % 16) == 0) {
								s = append(s, "  >");
								for (k = lineStart; k < j; k++) {
									char c = _lb(parameter + k);
									if (c < ' ' || c > '~') {
										c = '.';
									}
									*s++ = c;
								}
								s = append(s, "<\n");
								writeLog(buffer, s - buffer);
								s = buffer;
								lineStart = j;
							} else {
								*s++ = ',';
								*s++ = ' ';
							}
						}
						s = appendHex(s, _lw(parameter + j), 8);
					}
				}
				break;
		}
	}
	*s++ = ' ';
	*s++ = '=';
	*s++ = ' ';
	s = appendHex(s, (int) result, 0);

	#if DEBUG_MUTEX
	s = mutexLog(s, syscallInfo, parameters, result);
	#endif

	*s++ = '\n';
	writeLog(buffer, s - buffer);

	#if DEBUG_UTILITY_SAVEDATA
	utilitySavedataLog(buffer, syscallInfo, parameters[0]);
	#endif
}
Example #28
0
void pspDebugSioPutchar(int ch)
{
	while(_lw(PSP_UART4_STAT) & PSP_UART_TXFULL);
	_sw(ch, PSP_UART4_FIFO);
}
Example #29
0
File: main.c Project: joel16/utopia
int sceHibariUnk8(u32 a, u32 b, u8 *p, int size)
{
	int i;
	
	if (hibari_struct[0] == 0)
	{
		sceSysregSpiClkEnable(1);

		while (((*(volatile u32 *)0xbe5c000c) & 4))
		{
			_lw(0xbe5c0008);
		}

		*(volatile u32 *)0xbe5c0004 = 2;
		asm("sync\n");
	}

	hibari_struct[0]++;

	if (hibari_struct[2] != a && b != 0xEF)
	{
		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = 0xEF;

		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = (a | 0x0100) & 0xFFFF;

		hibari_struct[2] = a;
		hibari_struct[3] = -1;
	}

	if (hibari_struct[3] != b)
	{
		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = (b&0xFFFF);		
	}

	for (i = 0; i < size; i++)
	{
		if (b == 0xEF)
		{
			hibari_struct[2] = (u32)p[i];
		}

		while (!((*(volatile u32 *)0xbe5c000c) & 2));	
		*(volatile u32 *)0xbe5c0008 = (p[i] | 0x0100);
		
		b++;
	}

	hibari_struct[0]--;
	hibari_struct[1] = -1;
	hibari_struct[3] = b;

	if (hibari_struct[0] == 0)
	{
		while (((*(volatile u32 *)0xbe5c000c) & 0x10));
		
		*(volatile u32 *)0xbe5c0004 = 0;
		asm("sync\n");

		sceSysregSpiClkDisable(1);
	}

	return 0;
}
Example #30
0
/* 22 */ u32  sio2_stat_get() { return _lw(SIO2_REG_STAT); }