Beispiel #1
0
static int
es_launchtitle(u64 titleID)
{
	static u64 xtitleID __attribute__((aligned(32)));
	static u32 cntviews __attribute__((aligned(32)));
	static u8 tikviews[0xd8*4] __attribute__((aligned(32)));
	int ret;
	
	xtitleID = titleID;
	vecs[0].data = &xtitleID;
	vecs[0].len = 8;
	vecs[1].data = &cntviews;
	vecs[1].len = 4;
	ret = ios_ioctlv(es_fd, IOCTL_ES_GETVIEWCNT, 1, 1, vecs);
	if(ret<0) return ret;
	if(cntviews>4) return -1;

	vecs[2].data = tikviews;
	vecs[2].len = 0xd8*cntviews;
	ret = ios_ioctlv(es_fd, IOCTL_ES_GETVIEWS, 2, 1, vecs);
	if(ret<0) return ret;
	vecs[1].data = tikviews;
	vecs[1].len = 0xd8;
	ret = ios_ioctlvreboot(es_fd, IOCTL_ES_LAUNCH, 2, 0, vecs);
	return ret;
}
Beispiel #2
0
static int sd_data_command(u32 cmd, u32 cmd_type, u32 resp_type, u32 arg,
                           u32 block_count, u32 block_size, void *data,
                           u32 unk1, u32 unk2, u32 *outreply, u32 reply_size)
{
	u32 param[9];
	u32 reply[4];
	struct ioctlv vec[3];
	int err;

	param[0] = cmd;
	param[1] = cmd_type;
	param[2] = resp_type;
	param[3] = arg;
	param[4] = block_count;
	param[5] = block_size;
	param[6] = (u32)data;
	param[7] = unk1; // ???
	param[8] = unk2; // ???

	vec[0].data = param;
	vec[0].len = sizeof param;
	vec[1].data = data;
	vec[1].len = block_count * block_size;
	vec[2].data = reply;
	vec[2].len = sizeof reply;

	err = ios_ioctlv(fd, 7, 2, 1, vec);

	if (reply_size) // ???
		memcpy(outreply, reply, reply_size);

	return err;
}
Beispiel #3
0
int di_openpartition(u32 offset, u8 *tmd)
{
	static struct ioctlv vectors[16] ALIGNED(64);

	//memset(inbuf, 0, 0x20 );
	inbuf[0x00] = 0x8B000000;
	inbuf[0x01] = offset;

	vectors[0].data = inbuf;
	vectors[0].len = 0x20;
	vectors[1].data = NULL;
	vectors[1].len = 0x2a4;
	vectors[2].data = NULL;
	vectors[2].len = 0;

	vectors[3].data = tmd;
	vectors[3].len = 0x49e4;
	vectors[4].data = outbuf;
	vectors[4].len = 0x20;

	return ios_ioctlv(di_fd, 0x8B, 3, 2, vectors);
}