本文整理汇总了C++中ERR_COPY_FROM_USER函数的典型用法代码示例。如果您正苦于以下问题:C++ ERR_COPY_FROM_USER函数的具体用法?C++ ERR_COPY_FROM_USER怎么用?C++ ERR_COPY_FROM_USER使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ERR_COPY_FROM_USER函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: msm_set_crop
static int msm_set_crop(struct msm_sync *sync, void __user *arg)
{
struct crop_info crop;
if (copy_from_user(&crop,
arg,
sizeof(struct crop_info))) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
if (!sync->croplen) {
sync->cropinfo = kmalloc(crop.len, GFP_KERNEL);
if (!sync->cropinfo)
return -ENOMEM;
} else if (sync->croplen < crop.len)
return -EINVAL;
if (copy_from_user(sync->cropinfo,
crop.info,
crop.len)) {
ERR_COPY_FROM_USER();
kfree(sync->cropinfo);
return -EFAULT;
}
sync->croplen = crop.len;
return 0;
}
示例2: update_hw_audio_path
static int update_hw_audio_path(void __user *arg)
{
struct msm_audio_path audio_path;
if (copy_from_user(&audio_path, arg, sizeof(audio_path))) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
D("%s: mic=%d, dual_mic=%d, speaker=%d, headset = %d\n",
__func__,
audio_path.enable_mic, audio_path.enable_dual_mic,
audio_path.enable_speaker, audio_path.enable_headset);
/* Switch microphone on/off */
turn_mic_bias_on_internal(audio_path.enable_mic,
audio_path.enable_dual_mic);
/* Switch headset HW on/off */
headphone_amp_power(audio_path.enable_headset);
/* Switch Speaker HW on/off */
speaker_amp_power(audio_path.enable_speaker);
return 0;
}
示例3: msm_axi_config
static int msm_axi_config(struct v4l2_subdev *sd,
struct msm_cam_media_controller *mctl, void __user *arg)
{
struct msm_vfe_cfg_cmd cfgcmd;
if (copy_from_user(&cfgcmd, arg, sizeof(cfgcmd))) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
switch (cfgcmd.cmd_type) {
case CMD_AXI_CFG_PRIM:
case CMD_AXI_CFG_SEC:
case CMD_AXI_CFG_ZSL:
case CMD_RAW_PICT_AXI_CFG:
case CMD_AXI_CFG_PRIM_ALL_CHNLS:
case CMD_AXI_CFG_PRIM|CMD_AXI_CFG_SEC:
case CMD_AXI_CFG_PRIM|CMD_AXI_CFG_SEC_ALL_CHNLS:
case CMD_AXI_CFG_PRIM_ALL_CHNLS|CMD_AXI_CFG_SEC:
return msm_isp_subdev_ioctl(sd, &cfgcmd, NULL);
default:
pr_err("%s: unknown command type %d\n",
__func__,
cfgcmd.cmd_type);
return -EINVAL;
}
return 0;
}
示例4: msm_get_sensor_info
static int msm_get_sensor_info(struct msm_sync *sync,
void __user *arg)
{
int rc = 0;
struct msm_camsensor_info info;
struct msm_camera_sensor_info *sdata;
if (copy_from_user(&info,
arg,
sizeof(struct msm_camsensor_info))) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
sdata = sync->pdev->dev.platform_data;
D("%s: sensor_name %s\n", __func__, sdata->sensor_name);
memcpy(&info.name[0], sdata->sensor_name, MAX_SENSOR_NAME);
info.flash_enabled = sdata->flash_data->flash_type !=
MSM_CAMERA_FLASH_NONE;
/* copy back to user space */
if (copy_to_user((void *)arg,
&info,
sizeof(struct msm_camsensor_info))) {
ERR_COPY_TO_USER();
rc = -EFAULT;
}
return rc;
}
示例5: update_codec_table
static int update_codec_table(void __user * arg)
{
struct msm_dex_command dex = {
.cmd = PCOM_UPDATE_AUDIO,
.has_data = 1,
.data = DEX_UPDATE_VOC,
};
struct htc_voc_cal_table table;
uint16_t *table_array;
int rc = -EIO;
if (copy_from_user(&table, arg, sizeof(table))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
D("%s : table size = %d\n", __func__, table.size);
table_array = kmalloc(table.size, GFP_ATOMIC);
if (table_array != NULL) {
if (copy_from_user
(table_array, table.pArray, table.size)) {
ERR_COPY_FROM_USER();
rc = -EFAULT;
goto free_exit;
}
memcpy(amss_data->codec_table, table_array, table.size);
msm_proc_comm_wince(&dex,0);
rc = 0;
}
}
free_exit:
if (table_array != NULL) {
kfree(table_array);
}
return rc;
}
/* Adie updates */
static void ADIE_Force8k(bool bOn) {
int adie = readl(MSM_SHARED_RAM_BASE + 0xfc0d0);
if (bOn) {
adie |= 0x1;
} else {
adie &= ~0x1;
}
writel(adie, MSM_SHARED_RAM_BASE + 0xfc0d0);
}
示例6: msm_irqrouter_subdev_ioctl
long msm_irqrouter_subdev_ioctl(struct v4l2_subdev *sd,
unsigned int cmd, void *arg)
{
struct irqrouter_ctrl_type *irqrouter_ctrl = v4l2_get_subdevdata(sd);
struct msm_camera_irq_cfg *irq_cfg;
struct intr_table_entry irq_req;
int rc = 0;
/* Handle all IRQ Router Subdev IOCTLs here.
* Userspace sends the composite irq configuration.
* IRQ Router subdev then configures the registers to group
* together individual core hw irqs into a composite IRQ
* to the MSM IRQ controller. It also registers them with
* the irq manager in the camera server. */
switch (cmd) {
case MSM_IRQROUTER_CFG_COMPIRQ:
COPY_FROM_USER(rc, &irq_cfg, (void __user *)arg,
sizeof(struct msm_camera_irq_cfg));
if (rc) {
ERR_COPY_FROM_USER();
break;
}
if (!irq_cfg ||
(irq_cfg->irq_idx < CAMERA_SS_IRQ_0) ||
(irq_cfg->irq_idx >= CAMERA_SS_IRQ_MAX)) {
pr_err("%s Invalid input", __func__);
return -EINVAL;
} else {
irq_req.cam_hw_mask = irq_cfg->cam_hw_mask;
irq_req.irq_idx = irq_cfg->irq_idx;
irq_req.irq_num =
irqrouter_ctrl->def_hw_irqmap[irq_cfg->irq_idx].irq_num;
irq_req.is_composite = 1;
irq_req.irq_trigger_type = IRQF_TRIGGER_RISING;
irq_req.num_hwcore = irq_cfg->num_hwcore;
irq_req.data = NULL;
rc = msm_cam_server_request_irq(&irq_req);
if (rc < 0) {
pr_err("%s Error requesting comp irq %d ",
__func__, irq_req.irq_idx);
return rc;
}
irqrouter_ctrl->def_hw_irqmap
[irq_cfg->irq_idx].is_composite = 1;
}
break;
default:
pr_err("%s Invalid cmd %d ", __func__, cmd);
break;
}
return rc;
}
示例7: update_audio_adie_table
static int update_audio_adie_table(void __user *arg)
{
struct adie_table table;
char pcArray[0x80];
int rc = -EIO;
if (copy_from_user(&table, arg, sizeof(table))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
if (copy_from_user(pcArray, table.pcArray, 0x80)) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
memcpy((amss_data->adie_table +
(table.table_num * 0x80)), pcArray, 0x80);
rc = 0;
}
return rc;
}
示例8: update_wb_volume_table
static int update_wb_volume_table(void __user *arg)
{
uint16_t wb_table[0xCD];
if (copy_from_user(&wb_table, arg, sizeof(wb_table))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
memcpy(amss_data->wb_volume_table, wb_table, sizeof(wb_table));
}
return 0;
}
示例9: update_ce_table
static int update_ce_table(void __user *arg)
{
uint16_t table[0x50];
if (copy_from_user(&table, arg, sizeof(table))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
memcpy(amss_data->ce_table, table, sizeof(table));
}
return 0;
}
示例10: msm_set_dropframe_num
static int msm_set_dropframe_num(struct v4l2_subdev *sd,
struct msm_cam_media_controller *pmctl, void __user *arg)
{
int snap_dropframe_num;
if (copy_from_user(&snap_dropframe_num, arg, sizeof(snap_dropframe_num))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
atomic_set(&pmctl->snap_dropframe_num, snap_dropframe_num);
pr_info("%s: set snap_dropframe_num %d", __func__, atomic_read(&pmctl->snap_dropframe_num));
}
return 0;
}
示例11: msm_axi_config
static int msm_axi_config(struct v4l2_subdev *sd,
struct msm_sync *sync, void __user *arg)
{
struct msm_vfe_cfg_cmd cfgcmd;
if (copy_from_user(&cfgcmd, arg, sizeof(cfgcmd))) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
switch (cfgcmd.cmd_type) {
case CMD_AXI_CFG_VIDEO:
case CMD_AXI_CFG_PREVIEW:
case CMD_AXI_CFG_SNAP:
case CMD_AXI_CFG_ZSL:
case CMD_AXI_CFG_VIDEO_ALL_CHNLS:
case CMD_AXI_CFG_ZSL_ALL_CHNLS:
case CMD_RAW_PICT_AXI_CFG:
case CMD_AXI_CFG_PRIM:
case CMD_AXI_CFG_PRIM_ALL_CHNLS:
case CMD_AXI_CFG_PRIM|CMD_AXI_CFG_SEC:
case CMD_AXI_CFG_PRIM|CMD_AXI_CFG_SEC_ALL_CHNLS:
case CMD_AXI_CFG_PRIM_ALL_CHNLS|CMD_AXI_CFG_SEC:
/* Dont need to pass buffer information.
* subdev will get the buffer from media
* controller free queue.
*/
return msm_isp_subdev_ioctl(sd, &cfgcmd, NULL);
case CMD_AXI_CFG_VPE:
return 0;
return msm_vpe_frame_cfg(sync, (void *)&cfgcmd);
case CMD_STATS_AXI_CFG:
case CMD_STATS_AF_AXI_CFG:
return msm_stats_axi_cfg(sd, sync, &cfgcmd);
default:
pr_err("%s: unknown command type %d\n",
__func__,
cfgcmd.cmd_type);
return -EINVAL;
}
return 0;
}
示例12: msm_enable_dropframe
static int msm_enable_dropframe(struct v4l2_subdev *sd,
struct msm_cam_media_controller *pmctl, void __user *arg)
{
int dropframe_enabled;
if (copy_from_user(&dropframe_enabled, arg, sizeof(dropframe_enabled))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
atomic_set(&pmctl->dropframe_enabled, dropframe_enabled);
pr_info("%s: set dropframe_enabled %d", __func__, atomic_read(&pmctl->dropframe_enabled));
if (!dropframe_enabled)
atomic_set(&pmctl->snap_dropframe_num, 0);
}
return 0;
}
示例13: dex_update_audio
static int dex_update_audio(int data)
{
struct msm_dex_command dex = {
.cmd = DEX_UPDATE_AUDIO,
.has_data = 1,
.data = data,
};
msm_dex_comm(&dex, 0);
return 0;
}
static int dex_update_audio_done(void) {
struct msm_dex_command dex = {
.cmd = DEX_UPDATE_AUDIO,
.has_data = 1,
.data = DEX_AUDIO_DONE,
};
D("%s\n", __func__);
return msm_dex_comm(&dex, 0);
}
static int update_audio_setting(void __user *arg)
{
int ret = -EFAULT;
struct audio_update_req req;
if (copy_from_user(&req, arg, sizeof(struct audio_update_req))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
switch (req.type) {
case PCOM_UPDATE_REQ:
ret = dex_update_audio(req.value);
break;
case ADIE_FORCE8K_REQ:
ADIE_Force8k( (req.value)?true:false );
ret = 0;
break;
case ADIE_FORCE_ADIE_AWAKE_REQ:
ADIE_ForceADIEAwake( (req.value)?true:false );
ret = 0;
break;
case ADIE_FORCE_ADIE_UPDATE_REQ:
ADIE_ForceADIEUpdate( (req.value)?true:false );
ret = 0;
break;
case ADIE_UPDATE_AUDIO_METHOD:
ADIE_UpdateAudioMethod( (req.value)?true:false );
ret = 0;
break;
default:
break;
}
}
return ret;
}
static int turn_mic_bias_on(bool on, bool enable_dualmic)
{
D("%s(%d)\n", __func__, on);
/* enable handset mic */
writel(0xffff0080 | (on ? 0x100 : 0), amss_data->mic_offset);
dex_update_audio_done();
if (amss_data->mic_bias_callback)
amss_data->mic_bias_callback(on, enable_dualmic);
return 0;
}
示例14: dex_update_audio
static int dex_update_audio(int data)
{
struct msm_dex_command dex = {
.cmd = PCOM_UPDATE_AUDIO,
.has_data = 1,
.data = data,
};
msm_proc_comm_wince(&dex, 0);
return 0;
}
static int dex_update_audio_done(void) {
struct msm_dex_command dex = {
.cmd = PCOM_UPDATE_AUDIO,
.has_data = 1,
.data = DEX_AUDIO_DONE,
};
D("%s\n", __func__);
return msm_proc_comm_wince(&dex, 0);
}
static int update_audio_setting(void __user *arg)
{
int ret = -EFAULT;
struct audio_update_req req;
if (copy_from_user(&req, arg, sizeof(struct audio_update_req))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
switch (req.type) {
case PCOM_UPDATE_REQ:
ret = dex_update_audio(req.value);
break;
case ADIE_FORCE8K_REQ:
ADIE_Force8k( (req.value)?true:false );
ret = 0;
break;
case ADIE_FORCE_ADIE_AWAKE_REQ:
ADIE_ForceADIEAwake( (req.value)?true:false );
ret = 0;
break;
case ADIE_FORCE_ADIE_UPDATE_REQ:
ADIE_ForceADIEUpdate( (req.value)?true:false );
ret = 0;
break;
case ADIE_UPDATE_AUDIO_METHOD:
ADIE_UpdateAudioMethod( (req.value)?true:false );
ret = 0;
break;
default:
break;
}
}
return ret;
}
static int turn_mic_bias_on_internal(bool on, bool bDualMicEn)
{
char pmSpeakerGain[2][10] = {
{0x93, 0, 0x93, 7, 0x93, 1, 0x93, 7, 0xFF, 0xFF},
{0x93, 0, 0x93, 4, 0x93, 1, 0x93, 4, 0xFF, 0xFF} };
D("%s(%d)\n", __func__, on);
/* enable handset mic */
/* r0bin: photon doesnt have mic offset, or at least it wasnt found yet.
* uncomment those line is safe, we enable mic with pmic_en below
*
if ( machine_is_htcrhodium() && bDualMicEn && on ) {
memcpy(amss_data->mic_offset, pmSpeakerGain[1], 10);
} else {
writel(0xffff0080 | (on ? 0x100 : 0), amss_data->mic_offset);
}
dex_update_audio_done();
if ( machine_is_htcrhodium() ) {
if ( bDualMicEn && on ) {
ADC3001_wakeup();
} else {
ADC3001_powerdown();
}
}
*/
if (amss_data->mic_bias_callback)
amss_data->mic_bias_callback(on);
dex_update_audio_done();
return 0;
}
示例15: dex_update_audio
static int dex_update_audio(int data)
{
struct msm_dex_command dex = {
.cmd = PCOM_UPDATE_AUDIO,
.has_data = 1,
.data = data,
};
msm_proc_comm_wince(&dex, 0);
return 0;
}
static int dex_update_audio_done(void) {
struct msm_dex_command dex = {
.cmd = PCOM_UPDATE_AUDIO,
.has_data = 1,
.data = DEX_AUDIO_DONE,
};
D("%s\n", __func__);
return msm_proc_comm_wince(&dex, 0);
}
static int update_audio_setting(void __user *arg)
{
int ret = -EFAULT;
struct audio_update_req req;
if (copy_from_user(&req, arg, sizeof(struct audio_update_req))) {
ERR_COPY_FROM_USER();
return -EFAULT;
} else {
switch (req.type) {
case PCOM_UPDATE_REQ:
ret = dex_update_audio(req.value);
break;
case ADIE_FORCE8K_REQ:
ADIE_Force8k( (req.value)?true:false );
ret = 0;
break;
case ADIE_FORCE_ADIE_AWAKE_REQ:
ADIE_ForceADIEAwake( (req.value)?true:false );
ret = 0;
break;
case ADIE_FORCE_ADIE_UPDATE_REQ:
ADIE_ForceADIEUpdate( (req.value)?true:false );
ret = 0;
break;
case ADIE_UPDATE_AUDIO_METHOD:
ADIE_UpdateAudioMethod( (req.value)?true:false );
ret = 0;
break;
default:
break;
}
}
return ret;
}
static int turn_mic_bias_on_internal(bool on, bool bDualMicEn)
{
if (amss_data->mic_bias_callback)
amss_data->mic_bias_callback(on);
dex_update_audio_done();
return 0;
}
int turn_mic_bias_on(bool on)
{
return turn_mic_bias_on_internal(on, false);
}
EXPORT_SYMBOL(turn_mic_bias_on);
static int update_hw_audio_path(void __user *arg)
{
struct msm_audio_path audio_path;
if (copy_from_user(&audio_path, arg, sizeof(audio_path))) {
ERR_COPY_FROM_USER();
return -EFAULT;
}
D("%s: mic=%d, dual_mic=%d, speaker=%d, headset = %d\n",
__func__,
audio_path.enable_mic, audio_path.enable_dual_mic,
audio_path.enable_speaker, audio_path.enable_headset);
/* Switch microphone on/off */
turn_mic_bias_on_internal(audio_path.enable_mic,
audio_path.enable_dual_mic);
/* Switch headset HW on/off */
headphone_amp_power(audio_path.enable_headset);
//.........这里部分代码省略.........