示例#1
0
static int dsp_twch_ioctl(struct inode *inode, struct file *file,
			  unsigned int cmd, unsigned long arg)
{
	int ret;

	switch (cmd) {
	case TWCH_IOCTL_MKDEV:
		{
			char name[TNM_LEN];
			if (copy_from_user(name, (void __user *)arg, TNM_LEN))
				return -EFAULT;
			name[TNM_LEN-1] = '\0';
			ret = dsp_mkdev(name);
			break;
		}

	case TWCH_IOCTL_RMDEV:
		{
			char name[TNM_LEN];
			if (copy_from_user(name, (void __user *)arg, TNM_LEN))
				return -EFAULT;
			name[TNM_LEN-1] = '\0';
			ret = dsp_rmdev(name);
			break;
		}

	case TWCH_IOCTL_TADD:
		{
			struct omap_dsp_taddinfo ti;
			if (copy_from_user(&ti, (void __user *)arg, sizeof(ti)))
				return -EFAULT;
			ret = dsp_tadd_minor(ti.minor, ti.taskadr);
			break;
		}

	case TWCH_IOCTL_TDEL:
		ret = dsp_tdel_minor(arg);
		break;

	case TWCH_IOCTL_TKILL:
		ret = dsp_tkill_minor(arg);
		break;

	default:
		return -ENOIOCTLCMD;
	}

	return ret;
}
示例#2
0
static int dsp_twch_ioctl(struct inode *inode, struct file *file,
			  unsigned int cmd, unsigned long arg)
{
	static DECLARE_MUTEX(ioctl_sem);
	int ret;

	if (down_interruptible(&ioctl_sem))
		return -ERESTARTSYS;

	switch (cmd) {
	case OMAP_DSP_TWCH_IOCTL_MKDEV:
		{
			char name[OMAP_DSP_TNM_LEN];
			if (copy_from_user(name, (void *)arg, OMAP_DSP_TNM_LEN)) {
				ret = -EFAULT;
				goto up_out;
			}
			name[OMAP_DSP_TNM_LEN-1] = '\0';
			ret = dsp_mkdev(name);
			break;
		}

	case OMAP_DSP_TWCH_IOCTL_RMDEV:
		{
			char name[OMAP_DSP_TNM_LEN];
			if (copy_from_user(name, (void *)arg, OMAP_DSP_TNM_LEN)) {
				ret = -EFAULT;
				goto up_out;
			}
			name[OMAP_DSP_TNM_LEN-1] = '\0';
			ret = dsp_rmdev(name);
			break;
		}

	case OMAP_DSP_TWCH_IOCTL_TADD:
		{
			struct omap_dsp_taddinfo ti;
			if (copy_from_user(&ti, (void *)arg, sizeof(ti))) {
				ret = -EFAULT;
				goto up_out;
			}
			ret = dsp_tadd(ti.minor, ti.taskadr);
			break;
		}

	case OMAP_DSP_TWCH_IOCTL_TDEL:
		ret = dsp_tdel(arg);
		break;

	case OMAP_DSP_TWCH_IOCTL_TKILL:
		ret = dsp_tkill(arg);
		break;

	default:
		ret = -ENOIOCTLCMD;
	}

up_out:
	up(&ioctl_sem);
	return ret;
}