コード例 #1
0
ファイル: disk_manager.c プロジェクト: alkap007/ali3606
static int mp_disk_detach_proc()
{
	int vol_num, tot_vol_num = 0;
	int ret;
	
	DM_DEBUG("Enter %s() ...\n", __FUNCTION__);
	
	ret = dm_ioctl(DM_CMD1_GET_VOL_NUM, DM_CMD_PARAM(MNT_TYPE_USB, 0, 0), &vol_num, sizeof(int));
	if (ret == 0 && vol_num > 0)
		tot_vol_num += vol_num;

	ret = dm_ioctl(DM_CMD1_GET_VOL_NUM, DM_CMD_PARAM(MNT_TYPE_SD, 0, 0), &vol_num, sizeof(int));
	if (ret == 0 && vol_num > 0)
		tot_vol_num += vol_num;

	ret = dm_ioctl(DM_CMD1_GET_VOL_NUM, DM_CMD_PARAM(MNT_TYPE_IDE, 0, 0), &vol_num, sizeof(int));
	if (ret == 0 && vol_num > 0)
		tot_vol_num += vol_num;

	ret = dm_ioctl(DM_CMD1_GET_VOL_NUM, DM_CMD_PARAM(MNT_TYPE_SATA, 0, 0), &vol_num, sizeof(int));
	if (ret == 0 && vol_num > 0)
		tot_vol_num += vol_num;
	
	if (tot_vol_num <= 0)
	{
		ap_udisk_close();
	}

	return 0;
}
コード例 #2
0
ファイル: win_disk_operate.c プロジェクト: alkap007/ali3606
static int win_removable_disk_info_init()
{
	int dm_ret, i, disk_ns = 0;
	UINT64 disk_size;
	
	for (i = 0; i < MAX_USB_DISK_NUM; ++i)
	{
		dm_ret = dm_ioctl(DM_CMD2_GET_DISK_SIZE, DM_CMD_PARAM(MNT_TYPE_USB, i, 0),
						  &disk_size, sizeof(UINT64));
		if (dm_ret == 0)
		{
			r_disk_info[disk_ns].disk_type = MNT_TYPE_USB;
			r_disk_info[disk_ns].disk_idx = i;
			r_disk_info[disk_ns].disk_size = disk_size;
			disk_ns++;
		}
	}

	for (i = 0; i < MAX_SD_DISK_NUM; ++i)
	{
		dm_ret = dm_ioctl(DM_CMD2_GET_DISK_SIZE, DM_CMD_PARAM(MNT_TYPE_SD, i, 0),
						  &disk_size, sizeof(UINT64));
		if (dm_ret == 0)
		{
			r_disk_info[disk_ns].disk_type = MNT_TYPE_SD;
			r_disk_info[disk_ns].disk_idx = i;
			r_disk_info[disk_ns].disk_size = disk_size;
			disk_ns++;
		}
	}

	for (i = 0; i < MAX_SATA_DISK_NUM; ++i)
	{
		dm_ret = dm_ioctl(DM_CMD2_GET_DISK_SIZE, DM_CMD_PARAM(MNT_TYPE_SATA, i, 0),
						  &disk_size, sizeof(UINT64));
		if (dm_ret == 0)
		{
			r_disk_info[disk_ns].disk_type = MNT_TYPE_SATA;
			r_disk_info[disk_ns].disk_idx = i;
			r_disk_info[disk_ns].disk_size = disk_size;
			disk_ns++;
		}
	}

	disk_num = disk_ns;
	return disk_ns;
}
コード例 #3
0
ファイル: disk_manager.c プロジェクト: alkap007/ali3606
// TODO: implement this function in win_filelist.c
static int win_mp_detach_proc()
{
	char cur_disk_name[8];
	BOOL b_exit_win_mp = FALSE;
	int disk_type = 0, disk_idx = 0, dm_ret = 0, vol_num = 0;

	if ((mp_get_cur_disk_name(cur_disk_name, 8) == 0) &&
		(STRLEN(cur_disk_name) == 3))
	{
		disk_type = diskNamePrefix2Type(cur_disk_name);
		disk_idx = (int)cur_disk_name[2] - 'a';
		dm_ret = dm_ioctl(DM_CMD2_GET_VOL_NUM, DM_CMD_PARAM(disk_type, disk_idx, 0),
							&vol_num, sizeof(int));
		if (dm_ret != 0 || vol_num <= 0)			
			win_delete_all_filelist();
	}
	
	if (!mp_in_win_filelist())
		return 0;

	DM_DEBUG("%s() system_state: %d\n", __FUNCTION__, system_state);
	
	if (!ap_mp_is_ready()) // exit menu, if all disks are detached
	{
		b_exit_win_mp = TRUE;
	}
	else if ((mp_get_cur_disk_name(cur_disk_name, 8) == 0) &&
			 (STRLEN(cur_disk_name) == 3))
	{
		if (dm_ret != 0 || vol_num <= 0)
		{	
			b_exit_win_mp = TRUE;
		}
	}
	else
	{
		b_exit_win_mp = TRUE;
	}

	if (b_exit_win_mp)
	{
		DM_DEBUG("disk detach in Media Player, enter main menu\n");
		// Alert here:Clear all menus may cuase unpredictable result,must be tested
		api_osd_mode_change(OSD_NO_SHOW);
		ap_clear_all_menus(); //clear all menu & Hidden osd show
		menu_stack_pop_all();
	
		if(api_get_usb_unmount_flag()==0)	//-a by wangyang 2011-12-26
			image_restore_vpo_rect();
		api_set_usb_unmount_flag(0);	
		ap_clear_all_message();
		system_state = SYS_STATE_NORMAL;
		ap_send_msg(CTRL_MSG_SUBTYPE_CMD_ENTER_ROOT,(UINT32)&g_win_mainmenu, FALSE);
	}
}
コード例 #4
0
ファイル: qemu-pr-helper.c プロジェクト: OSLL/qemu-xtensa
static void *dm_dev_ioctl(int fd, int ioc, struct dm_ioctl *dm)
{
    struct stat st;
    int r;

    r = fstat(fd, &st);
    if (r < 0) {
        perror("fstat");
        exit(1);
    }

    dm->dev = st.st_rdev;
    return dm_ioctl(ioc, dm);
}
コード例 #5
0
ファイル: qemu-pr-helper.c プロジェクト: OSLL/qemu-xtensa
static void dm_init(void)
{
    control_fd = open(CONTROL_PATH, O_RDWR);
    if (control_fd < 0) {
        perror("Cannot open " CONTROL_PATH);
        exit(1);
    }
    struct dm_ioctl dm = { };
    if (!dm_ioctl(DM_VERSION, &dm)) {
        perror("ioctl");
        exit(1);
    }
    if (dm.version[0] != DM_VERSION_MAJOR) {
        fprintf(stderr, "Unsupported device mapper interface");
        exit(1);
    }
}
コード例 #6
0
static int
ioctl_decode(struct tcb *tcp)
{
	const unsigned int code = tcp->u_arg[1];
	const kernel_ulong_t arg = tcp->u_arg[2];

	switch (_IOC_TYPE(code)) {
#if defined(ALPHA) || defined(POWERPC)
	case 'f': {
		int ret = file_ioctl(tcp, code, arg);
		if (ret != RVAL_DECODED)
			return ret;
	}
	case 't':
	case 'T':
		return term_ioctl(tcp, code, arg);
#else /* !ALPHA */
	case 'f':
		return file_ioctl(tcp, code, arg);
	case 0x54:
#endif /* !ALPHA */
		return term_ioctl(tcp, code, arg);
	case 0x89:
		return sock_ioctl(tcp, code, arg);
	case 'p':
		return rtc_ioctl(tcp, code, arg);
	case 0x03:
		return hdio_ioctl(tcp, code, arg);
	case 0x12:
		return block_ioctl(tcp, code, arg);
	case 'X':
		return fs_x_ioctl(tcp, code, arg);
	case 0x22:
		return scsi_ioctl(tcp, code, arg);
	case 'L':
		return loop_ioctl(tcp, code, arg);
	case 'M':
		return mtd_ioctl(tcp, code, arg);
	case 'o':
	case 'O':
		return ubi_ioctl(tcp, code, arg);
	case 'V':
		return v4l2_ioctl(tcp, code, arg);
	case '=':
		return ptp_ioctl(tcp, code, arg);
#ifdef HAVE_LINUX_INPUT_H
	case 'E':
		return evdev_ioctl(tcp, code, arg);
#endif
#ifdef HAVE_LINUX_USERFAULTFD_H
	case 0xaa:
		return uffdio_ioctl(tcp, code, arg);
#endif
#ifdef HAVE_LINUX_BTRFS_H
	case 0x94:
		return btrfs_ioctl(tcp, code, arg);
#endif
#ifdef HAVE_LINUX_DM_IOCTL_H
	case 0xfd:
		return dm_ioctl(tcp, code, arg);
#endif
	default:
		break;
	}
	return 0;
}
コード例 #7
0
ファイル: disk_manager.c プロジェクト: alkap007/ali3606
BOOL usb_remove_safely_by_hotkey()
{
	int disk_num, tot_disk_num = 0;
	char disk_name[8];
	int ret;
	UINT32 choice;
	UINT8 disk_sel;
	UINT8 back_saved;
	POBJECT_HEAD topmenu;
		
	ret = dm_ioctl(DM_CMD1_GET_DISK_NUM, DM_CMD_PARAM(MNT_TYPE_USB, 0, 0), &disk_num, sizeof(int));
	if (ret == 0 && disk_num > 0)
		tot_disk_num += disk_num;

	ret = dm_ioctl(DM_CMD1_GET_DISK_NUM, DM_CMD_PARAM(MNT_TYPE_SD, 0, 0), &disk_num, sizeof(int));
	if (ret == 0 && disk_num > 0)
		tot_disk_num += disk_num;

	ret = dm_ioctl(DM_CMD1_GET_DISK_NUM, DM_CMD_PARAM(MNT_TYPE_SATA, 0, 0), &disk_num, sizeof(int));
	if (ret == 0 && disk_num > 0)
		tot_disk_num += disk_num;

	if (tot_disk_num <= 0)
	{
		return TRUE;
	}
	api_inc_wnd_count();
	ID timer_id = win_compopup_start_send_key_timer(V_KEY_EXIT, 10000, TIMER_ALARM); // exit popup if no action in 5s
	choice = win_disk_operate_open(OPERATE_TYPE_DISK_REMOVE, &disk_sel);
	api_stop_timer(&timer_id);
	
	if ((topmenu = menu_stack_get_top()) != NULL)
		OSD_TrackObject(topmenu, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);
	
	if (!choice)
	{
		api_dec_wnd_count();
		return TRUE;
	}
	else
	{
		win_removable_disk_get_name_str(disk_sel, disk_name);
	}
		
#ifdef DVR_PVR_SUPPORT
	enum PVR_DISKMODE pvr_mode;
	char rec_vol[16], tms_vol[16];
	struct statvfs buf;

	pvr_mode = pvr_get_cur_mode(rec_vol, tms_vol);

	if (api_pvr_is_record_active() && (STRLEN(rec_vol) == 9) &&
		(strncmp(disk_name, &rec_vol[5], 3) == 0))
	{
		win_compopup_init(WIN_POPUP_TYPE_OK);
	    win_compopup_set_msg("USB safely remove error, please stop recording first!", NULL, 0);
	    win_compopup_open_ext(&back_saved);
		api_dec_wnd_count();
		return TRUE;
	}

	if (api_pvr_is_playing())
	{
		BOOL b_can_remove = TRUE;
		if ((pvr_info.pvr_state == PVR_STATE_TMS_PLAY) &&
			(STRLEN(tms_vol) == 9) && (strncmp(disk_name, &tms_vol[5], 3) == 0))
		{
			b_can_remove = FALSE;
		}
		else if ((pvr_info.pvr_state != PVR_STATE_TMS_PLAY) &&
				 (STRLEN(rec_vol) == 9) && (strncmp(disk_name, &rec_vol[5], 3) == 0))
		{
			b_can_remove = FALSE;
		}

		if (!b_can_remove)
		{
			win_compopup_init(WIN_POPUP_TYPE_OK);
		    win_compopup_set_msg("USB safely remove error, please stop playing first!", NULL, 0);
		    win_compopup_open_ext(&back_saved);
			api_dec_wnd_count();
			return TRUE;
		}
	}

	if (pvr_info.pvr_state == PVR_STATE_TMS)
	{
		api_pvr_tms_proc(FALSE);
		fs_sync(tms_vol);
	}
#endif

#ifdef USB_SUPPORT_HUB
	/* remove disk */
	int disk_type = diskNamePrefix2Type(disk_name);
	if (disk_type == MNT_TYPE_USB)
	{
		char dev_path[16];
		int node_id, fd;
		sprintf(dev_path, "/dev/%s", disk_name);
		fd = fs_open(dev_path, O_RDONLY, 0);
		ret = fs_ioctl(fd, IOCTL_GET_NODEID, &node_id, sizeof(int));
		fs_close(fd);

		if (ret == 0)
			usbd_safely_remove_ex(node_id);
	}
#ifdef SDIO_SUPPORT
	else if (disk_type == MNT_TYPE_SD)
	{
		sd_notify(0);
	}
#endif
#ifdef SATA_SUPPORT
	else if (disk_type == MNT_TYPE_SATA)
	{
		sata_notify(0, 0);
	}
#endif
#else
	usbd_safely_remove();
#endif
	
	api_dec_wnd_count();
	return TRUE;
}