Пример #1
0
/*----------------------------------------------------------
 *	fcsmd_read
 *---------------------------------------------------------*/
static int fcsmd_read(struct file * file, char * buff, size_t count, loff_t *pos)
{
	int ret = 0;
	unsigned char *smem_ptr=NULL;

/* FUJITSU:2011-04-22 start */
	if((file == NULL) || (buff == NULL) || (SMEM_V1_OEM_007_SIZE < count) || (pos == NULL)){
/* FUJITSU:2011-04-22 end   */
		printk(KERN_ERR "fcsmd_write: parameter error \n");
		return -1;
	}

/* FUJITSU:2011-04-22 start */
	smem_ptr = (unsigned char *)smem_alloc_vendor1(SMEM_OEM_007); 
/* FUJITSU:2011-04-22 end   */
	if(smem_ptr == NULL){
/* FUJITSU:2011-04-22 start */
		printk(KERN_ERR "fcsmd_read: failed to get memory. id=%d, size=%d\n", SMEM_OEM_007, SMEM_V1_OEM_007_SIZE);
/* FUJITSU:2011-04-22 end   */
		return -1;
	}

	ret = copy_to_user(buff, smem_ptr, count);
	if (ret) {
		printk(KERN_ERR "fcsmd_read: copy_to_user failed. ret=%d\n", ret);
		return -1;
	}
	*pos += count;

	return count;
}
Пример #2
0
static int fcsmd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
#endif
/* FUJITSU:2011-12-01 end   */
{
	fcsmd_ioctl_cmd __user *argp = (fcsmd_ioctl_cmd __user *)arg;
	fcsmd_ioctl_cmd param;
	unsigned char *smem_ptr = NULL;
	int ret = 0;

	if (copy_from_user(&param, argp, sizeof(fcsmd_ioctl_cmd))) {
		printk(KERN_ERR "fcsmd_ioctl: copy_from_user failed. \n" );
		return -1;
	}
	switch(cmd) {
	case FCSMD_IOCTL_01:
	
		if(param.buff == NULL){
			printk(KERN_ERR "fcsmd_ioctl: buff faild. \n" );
			return -1;
		}

		smem_ptr = (unsigned char *)smem_alloc_vendor1(SMEM_OEM_015); 
		if(smem_ptr == NULL){
			printk(KERN_ERR "fcsmd_ioctl: failed to get memory. \n" );
			return -1;
		}

		ret = copy_to_user(param.buff, smem_ptr, param.smem_size);
		if (ret) {
			printk(KERN_ERR "fcsmd_ioctl: copy_to_user failed. \n" );
			return -1;
		}
		break;

	default:
		break;
	}
	return 0;
}
Пример #3
0
/*----------------------------------------------------------
 *	pipe_ioctl
 *---------------------------------------------------------*/
static long pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{

#if 1 // FUJITA
	pipe_ioctl_cmd_union __user *argp = (pipe_ioctl_cmd_union __user *)arg;
	pipe_ioctl_cmd_union param;
	unsigned int pipe_smem_id;
	unsigned char *smem_ptr = NULL;
	long ret;
	int i;

	if (copy_from_user(&param, argp,sizeof(pipe_ioctl_cmd_union))) {
		printk(KERN_ERR "pipe_ioctl:%s: copy_from_user failed 1\n", __func__ );
		return (-EFAULT);
	}
	switch(cmd) {
		case PIPE_IOCTL_00:
			if (param.pipe_cmd0_union.pipe_user_id < SMEM_ID_TBL_MAX){
				pipe_smem_id = _smem_id_tbl[param.pipe_cmd0_union.pipe_user_id];

			}else{
				pipe_smem_id = 0xFFFF;
				printk(KERN_ERR "PIPE_IOCTL_CMD_00: user id invalid. uid=%d\n", param.pipe_cmd0_union.pipe_user_id);
				return (-EFAULT);
			}
			if (copy_to_user(param.pipe_cmd0_union.ppipe_smem_id, &pipe_smem_id, sizeof(pipe_smem_id))) {
				printk(KERN_ERR "PIPE_IOCTL_CMD_00: copy_to_user failed. uid=%d\n",param.pipe_cmd0_union.pipe_user_id);
				return (-EFAULT);
			}
			break;
		case PIPE_IOCTL_01:
			ret = pipe_size_check(param.pipe_cmd1_union);
			if(ret)
				return ret;
			if(copy_from_user(pipe_local_buf, param.pipe_cmd1_union.pipe_user_buf, param.pipe_cmd1_union.pipe_user_size)) {
				printk(KERN_ERR "PIPE_IOCTL_CMD_01: copy_from_user failed.\n");
				return (-EFAULT);
			}
			/* SMEM access*/
#if 1 // FUJITA
			smem_ptr = (unsigned char *)smem_alloc_vendor1(param.pipe_cmd1_union.pipe_smem_id);
#else
			smem_ptr = (unsigned char *)smem_alloc(param.pipe_cmd1_union.pipe_smem_id, param.pipe_cmd1_union.pipe_smem_size); 
#endif
			if(smem_ptr == NULL){
				printk(KERN_ERR "PIPE_IOCTL_CMD_01: failed to get smem_id=%x\n", param.pipe_cmd1_union.pipe_smem_id);
				return (-EIO);
			}

			/* data stor */
			smem_ptr += param.pipe_cmd1_union.pipe_smem_offset;
			for(i = 0; i < param.pipe_cmd1_union.pipe_user_size; i++){
				*smem_ptr++ = pipe_local_buf[i];
			}
			break;
		case PIPE_IOCTL_02:
			ret = pipe_size_check(param.pipe_cmd1_union);
			if(ret)
				return ret;
			/* SMEM access*/
#if 1 // FUJITA
			smem_ptr = (unsigned char *)smem_alloc_vendor1(param.pipe_cmd1_union.pipe_smem_id);
#else
			smem_ptr = (unsigned char *)smem_alloc(param.pipe_cmd1_union.pipe_smem_id, param.pipe_cmd1_union.pipe_smem_size); 
#endif
			if(smem_ptr == NULL){
				printk(KERN_ERR "PIPE_IOCTL_CMD_02: failed to get pipe_smem_id=%x\n", param.pipe_cmd1_union.pipe_smem_id);
				return (-EIO);
			}

			/* data stor */
			smem_ptr += param.pipe_cmd1_union.pipe_smem_offset;
			if(copy_to_user(param.pipe_cmd1_union.pipe_user_buf, smem_ptr, param.pipe_cmd1_union.pipe_user_size)) {
				printk(KERN_ERR "PIPE_IOCTL_CMD_02: copy_to_user failed.\n");
				return (-EFAULT);
			}
			break;
		default:
			printk(KERN_ERR "pipe_ioctl:illegal command. %d\n",cmd);
			return (-EINVAL);
	}
#endif
	return 0;
}
void stop_earpiece(void){
    unsigned char *handset = (unsigned char *) smem_alloc_vendor1(SMEM_OEM_012);
    if(handset!=NULL) *handset = 0;
}
void stop_ear_amp(void){
    unsigned char *handset = (unsigned char *) smem_alloc_vendor1(SMEM_OEM_012);
    if(handset!=NULL) *handset = 0;
	request_disable_earamp();
}