Exemplo n.º 1
0
bool __usbstorage_Read_Write(u32 sector, u32 numSectors, void *buffer, int write)
{
	STACK_ALIGN(ioctlv, vector,     3, 32);
	STACK_ALIGN(u32,   _sector,     1, 32);
	STACK_ALIGN(u32,   _numSectors, 1, 32);

	u32 cnt, len = (sectorSz * numSectors);
	s32 ret;

	/* Device not opened */
	if (fd < 0)
		return false;

	/* Sector info */
	*_sector     = sector;
	*_numSectors = numSectors;

	/* Setup vector */
	vector[0].data = _sector;
	vector[0].len  = sizeof(u32);
	vector[1].data = _numSectors;
	vector[1].len  = sizeof(u32);
	vector[2].data = buffer;
	vector[2].len  = len;

	/* Flush cache */
	for (cnt = 0; cnt < 3; cnt++)
		os_sync_after_write(vector[cnt].data, vector[cnt].len);

	os_sync_after_write(vector, sizeof(ioctlv) * 3);

	if(!write)
		{
		/* Read data */
		ret = os_ioctlv(fd, USB_IOCTL_UMS_READ_SECTORS, 2, 1, vector);
		}
	else
		{
		/* Write data */
	ret = os_ioctlv(fd, USB_IOCTL_UMS_WRITE_SECTORS, 3, 0, vector);
		}
	if (ret < 0)
		return false;

	/* Invalidate cache */
	for (cnt = 0; cnt < 3; cnt++)
		os_sync_before_read(vector[cnt].data, vector[cnt].len);

	return true;
}
Exemplo n.º 2
0
bool usbstorage_Init(void)
{
	s32 ret;

	/* Already open */
	if (fd >= 0)
		return true;

	/* Open USB device */
	fd = os_open(fs, 0);
	if (fd < 0)
		return false;

	/* Initialize USB storage */
	os_ioctlv(fd, USB_IOCTL_UMS_INIT, 0, 0, NULL);

	/* Get device capacity */
	ret = __usbstorage_GetCapacity(NULL);
	if (ret <= 0)
		goto err;

	return true;

err:
	/* Close USB device */
	usbstorage_Shutdown();	

	return false;
}
Exemplo n.º 3
0
s32 __usbstorage_GetCapacity(u32 *_sectorSz)
{
	STACK_ALIGN(ioctlv, vector, 1, 32);
	STACK_ALIGN(u32,    buffer, 1, 32);

	if (fd >= 0) {
		s32 ret;

		/* Setup vector */
		vector[0].data = buffer;
		vector[0].len  = sizeof(u32);

		os_sync_after_write(vector, sizeof(ioctlv));

		/* Get capacity */
		ret = os_ioctlv(fd, USB_IOCTL_UMS_GET_CAPACITY, 0, 1, vector);

		os_sync_after_write(buffer, sizeof(u32));

		/* Set sector size */
		sectorSz = buffer[0];

		if (ret && _sectorSz)
			*_sectorSz = sectorSz;

		return ret;
	}

	return IPC_ENOENT;
}
Exemplo n.º 4
0
int sdhc_Init(void)
{
	//s32 ret;

	/* Already open */
	if (fd >= 0)
		return 0;

	/* Open USB device */
	fd = os_open(fs, 1);
	if (fd < 0)
		return -11;

	/* Initialize USB storage */
	os_ioctlv(fd, IOCTL_SDHC_INIT, 0, 0, NULL);

	sectorSz = SDHC_SECTOR_SIZE;

	return 0;
}
Exemplo n.º 5
0
s32 ES_GetTitleID(u64 *tid)
{
	s32 fd, ret;

	/* Open ES */
	fd = __ES_Init();
	if (fd < 0)
		return fd;

	/* Setup vector */
	vector[0].data = tid;
	vector[0].len  = sizeof(u64);

	/* Get title ID */
	ret = os_ioctlv(fd, IOCTL_ES_GETTITLEID, 0, 1, vector);

	/* Close ES */
	__ES_Close(fd);

	return ret;
}
Exemplo n.º 6
0
bool sdhc_Read(u32 sector, u32 numSectors, void *buffer)
{
	u32 cnt;
	s32 ret;

	/* Device not opened */
	if (fd < 0)
		return false;

	/* Sector info */
	io_buffer[0] = sector;
	io_buffer[1] = numSectors;

	/* Setup io_vector */
	io_vector[0].data = &io_buffer[0];
	io_vector[0].len  = sizeof(u32);
	io_vector[1].data = &io_buffer[1];
	io_vector[1].len  = sizeof(u32);
	io_vector[2].data = buffer;
	io_vector[2].len  = (sectorSz * numSectors);

	/* Flush cache */
	for (cnt = 0; cnt < 3; cnt++)
		os_sync_after_write(io_vector[cnt].data, io_vector[cnt].len);

	os_sync_after_write(io_vector, sizeof(ioctlv) * 3);

	/* Read data */
	ret = os_ioctlv(fd, IOCTL_SDHC_READ, 2, 1, io_vector);
	if (ret < 0)
		return false;

	/* Invalidate cache */
	for (cnt = 0; cnt < 3; cnt++)
		os_sync_before_read(io_vector[cnt].data, io_vector[cnt].len);

	return true;
}