本文整理汇总了C++中copy_from_user函数的典型用法代码示例。如果您正苦于以下问题:C++ copy_from_user函数的具体用法?C++ copy_from_user怎么用?C++ copy_from_user使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了copy_from_user函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: bcm_download_config_file
static int bcm_download_config_file(struct bcm_mini_adapter *Adapter,
struct bcm_firmware_info *psFwInfo)
{
int retval = STATUS_SUCCESS;
B_UINT32 value = 0;
if (Adapter->pstargetparams == NULL) {
Adapter->pstargetparams =
kmalloc(sizeof(struct bcm_target_params), GFP_KERNEL);
if (Adapter->pstargetparams == NULL)
return -ENOMEM;
}
if (psFwInfo->u32FirmwareLength != sizeof(struct bcm_target_params))
return -EIO;
retval = copy_from_user(Adapter->pstargetparams,
psFwInfo->pvMappedFirmwareAddress,
psFwInfo->u32FirmwareLength);
if (retval) {
kfree(Adapter->pstargetparams);
Adapter->pstargetparams = NULL;
return -EFAULT;
}
/* Parse the structure and then Download the Firmware */
beceem_parse_target_struct(Adapter);
/* Initializing the NVM. */
BcmInitNVM(Adapter);
retval = InitLedSettings(Adapter);
if (retval)
return retval;
if (Adapter->LEDInfo.led_thread_running &
BCM_LED_THREAD_RUNNING_ACTIVELY) {
Adapter->LEDInfo.bLedInitDone = false;
Adapter->DriverState = DRIVER_INIT;
wake_up(&Adapter->LEDInfo.notify_led_event);
}
if (Adapter->LEDInfo.led_thread_running &
BCM_LED_THREAD_RUNNING_ACTIVELY) {
Adapter->DriverState = FW_DOWNLOAD;
wake_up(&Adapter->LEDInfo.notify_led_event);
}
/* Initialize the DDR Controller */
retval = ddr_init(Adapter);
if (retval)
return retval;
value = 0;
wrmalt(Adapter, EEPROM_CAL_DATA_INTERNAL_LOC - 4,
&value, sizeof(value));
wrmalt(Adapter, EEPROM_CAL_DATA_INTERNAL_LOC - 8,
&value, sizeof(value));
if (Adapter->eNVMType == NVM_FLASH) {
retval = PropagateCalParamsFromFlashToMemory(Adapter);
if (retval)
return retval;
}
retval = buffDnldVerify(Adapter, (PUCHAR)Adapter->pstargetparams,
sizeof(struct bcm_target_params), CONFIG_BEGIN_ADDR);
if (retval)
BCM_DEBUG_PRINT(Adapter, DBG_TYPE_INITEXIT,
MP_INIT, DBG_LVL_ALL,
"configuration file not downloaded properly");
else
Adapter->bCfgDownloaded = TRUE;
return retval;
}
开发者ID:7799,项目名称:linux,代码行数:77,代码来源:InterfaceDld.c
示例2: alarm_ioctl
static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
int rv = 0;
unsigned long flags;
struct timespec new_alarm_time;
struct timespec new_rtc_time;
struct timespec tmp_time;
enum android_alarm_type alarm_type = ANDROID_ALARM_IOCTL_TO_TYPE(cmd);
uint32_t alarm_type_mask = 1U << alarm_type;
if (alarm_type >= ANDROID_ALARM_TYPE_COUNT)
return -EINVAL;
if (ANDROID_ALARM_BASE_CMD(cmd) != ANDROID_ALARM_GET_TIME(0)) {
if ((file->f_flags & O_ACCMODE) == O_RDONLY)
return -EPERM;
if (file->private_data == NULL &&
cmd != ANDROID_ALARM_SET_RTC) {
spin_lock_irqsave(&alarm_slock, flags);
if (alarm_opened) {
spin_unlock_irqrestore(&alarm_slock, flags);
return -EBUSY;
}
alarm_opened = 1;
file->private_data = (void *)1;
spin_unlock_irqrestore(&alarm_slock, flags);
}
}
switch (ANDROID_ALARM_BASE_CMD(cmd)) {
case ANDROID_ALARM_CLEAR(0):
spin_lock_irqsave(&alarm_slock, flags);
pr_alarm(IO, "alarm %d clear\n", alarm_type);
alarm_try_to_cancel(&alarms[alarm_type]);
if (alarm_pending) {
alarm_pending &= ~alarm_type_mask;
if (!alarm_pending && !wait_pending)
wake_unlock(&alarm_wake_lock);
}
alarm_enabled &= ~alarm_type_mask;
spin_unlock_irqrestore(&alarm_slock, flags);
break;
case ANDROID_ALARM_SET_OLD:
case ANDROID_ALARM_SET_AND_WAIT_OLD:
if (get_user(new_alarm_time.tv_sec, (int __user *)arg)) {
rv = -EFAULT;
goto err1;
}
new_alarm_time.tv_nsec = 0;
goto from_old_alarm_set;
case ANDROID_ALARM_SET_AND_WAIT(0):
case ANDROID_ALARM_SET(0):
if (copy_from_user(&new_alarm_time, (void __user *)arg,
sizeof(new_alarm_time))) {
rv = -EFAULT;
goto err1;
}
from_old_alarm_set:
spin_lock_irqsave(&alarm_slock, flags);
pr_alarm(IO, "alarm %d set %ld.%09ld\n", alarm_type,
new_alarm_time.tv_sec, new_alarm_time.tv_nsec);
alarm_enabled |= alarm_type_mask;
alarm_start_range(&alarms[alarm_type],
timespec_to_ktime(new_alarm_time),
timespec_to_ktime(new_alarm_time));
spin_unlock_irqrestore(&alarm_slock, flags);
if (ANDROID_ALARM_BASE_CMD(cmd) != ANDROID_ALARM_SET_AND_WAIT(0)
&& cmd != ANDROID_ALARM_SET_AND_WAIT_OLD)
break;
/* fall though */
case ANDROID_ALARM_WAIT:
spin_lock_irqsave(&alarm_slock, flags);
pr_alarm(IO, "alarm wait\n");
if (!alarm_pending && wait_pending) {
wake_unlock(&alarm_wake_lock);
wait_pending = 0;
}
spin_unlock_irqrestore(&alarm_slock, flags);
rv = wait_event_interruptible(alarm_wait_queue, alarm_pending);
if (rv)
goto err1;
spin_lock_irqsave(&alarm_slock, flags);
rv = alarm_pending;
wait_pending = 1;
alarm_pending = 0;
spin_unlock_irqrestore(&alarm_slock, flags);
break;
case ANDROID_ALARM_SET_RTC:
if (copy_from_user(&new_rtc_time, (void __user *)arg,
sizeof(new_rtc_time))) {
rv = -EFAULT;
goto err1;
}
rv = alarm_set_rtc(new_rtc_time);
spin_lock_irqsave(&alarm_slock, flags);
alarm_pending |= ANDROID_ALARM_TIME_CHANGE_MASK;
wake_up(&alarm_wait_queue);
spin_unlock_irqrestore(&alarm_slock, flags);
//.........这里部分代码省略.........
开发者ID:agrloki,项目名称:CeXstel-kernel-msm8x25,代码行数:101,代码来源:alarm-dev.c
示例3: wpa_set_associate
static int wpa_set_associate(PSDevice pDevice,
struct viawget_wpa_param *param)
{
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
PWLAN_IE_SSID pItemSSID;
BYTE abyNullAddr[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
BYTE abyWPAIE[64];
int ret = 0;
BOOL bwepEnabled=FALSE;
// set key type & algorithm
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pairwise_suite = %d\n", param->u.wpa_associate.pairwise_suite);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "group_suite = %d\n", param->u.wpa_associate.group_suite);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "key_mgmt_suite = %d\n", param->u.wpa_associate.key_mgmt_suite);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "auth_alg = %d\n", param->u.wpa_associate.auth_alg);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "mode = %d\n", param->u.wpa_associate.mode);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "wpa_ie_len = %d\n", param->u.wpa_associate.wpa_ie_len);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Roaming dBm = %d\n", param->u.wpa_associate.roam_dbm); //Davidwang
if (param->u.wpa_associate.wpa_ie &&
copy_from_user(&abyWPAIE[0], param->u.wpa_associate.wpa_ie, param->u.wpa_associate.wpa_ie_len))
return -EINVAL;
if (param->u.wpa_associate.mode == 1)
pMgmt->eConfigMode = WMAC_CONFIG_IBSS_STA;
else
pMgmt->eConfigMode = WMAC_CONFIG_ESS_STA;
// set bssid
if (memcmp(param->u.wpa_associate.bssid, &abyNullAddr[0], 6) != 0)
memcpy(pMgmt->abyDesireBSSID, param->u.wpa_associate.bssid, 6);
// set ssid
memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1);
pItemSSID = (PWLAN_IE_SSID)pMgmt->abyDesireSSID;
pItemSSID->byElementID = WLAN_EID_SSID;
pItemSSID->len = param->u.wpa_associate.ssid_len;
memcpy(pItemSSID->abySSID, param->u.wpa_associate.ssid, pItemSSID->len);
if (param->u.wpa_associate.wpa_ie_len == 0) {
if (param->u.wpa_associate.auth_alg & AUTH_ALG_SHARED_KEY)
pMgmt->eAuthenMode = WMAC_AUTH_SHAREKEY;
else
pMgmt->eAuthenMode = WMAC_AUTH_OPEN;
} else if (abyWPAIE[0] == RSN_INFO_ELEM) {
if (param->u.wpa_associate.key_mgmt_suite == KEY_MGMT_PSK)
pMgmt->eAuthenMode = WMAC_AUTH_WPA2PSK;
else
pMgmt->eAuthenMode = WMAC_AUTH_WPA2;
} else {
if (param->u.wpa_associate.key_mgmt_suite == KEY_MGMT_WPA_NONE)
pMgmt->eAuthenMode = WMAC_AUTH_WPANONE;
else if (param->u.wpa_associate.key_mgmt_suite == KEY_MGMT_PSK)
pMgmt->eAuthenMode = WMAC_AUTH_WPAPSK;
else
pMgmt->eAuthenMode = WMAC_AUTH_WPA;
}
switch (param->u.wpa_associate.pairwise_suite) {
case CIPHER_CCMP:
pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled;
break;
case CIPHER_TKIP:
pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled;
break;
case CIPHER_WEP40:
case CIPHER_WEP104:
pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled;
bwepEnabled = TRUE;
// printk("****************wpa_set_associate:set CIPHER_WEP40_104\n");
break;
case CIPHER_NONE:
if (param->u.wpa_associate.group_suite == CIPHER_CCMP)
pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled;
else
pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled;
break;
default:
pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled;
};
pMgmt->Roam_dbm = param->u.wpa_associate.roam_dbm;
// if ((pMgmt->Roam_dbm > 40)&&(pMgmt->Roam_dbm<80))
// pDevice->bEnableRoaming = TRUE;
if (pMgmt->eAuthenMode == WMAC_AUTH_SHAREKEY) { //@wep-sharekey
pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled;
pMgmt->bShareKeyAlgorithm = TRUE;
}
else if (pMgmt->eAuthenMode == WMAC_AUTH_OPEN) {
if(bwepEnabled==TRUE) { //@open-wep
pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled;
}
else { //@only open
pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled;
}
}
//mike save old encryption status
pDevice->eOldEncryptionStatus = pDevice->eEncryptionStatus;
if (pDevice->eEncryptionStatus != Ndis802_11EncryptionDisabled)
//.........这里部分代码省略.........
开发者ID:3sOx,项目名称:asuswrt-merlin,代码行数:101,代码来源:wpactl.c
示例4: osd_ext_ioctl
static int
osd_ext_ioctl(struct fb_info *info, unsigned int cmd,
unsigned long arg)
{
struct myfb_dev *fbdev = (struct myfb_dev *)info->par;
void __user *argp = (void __user *)arg;
u32 src_colorkey;//16 bit or 24 bit
u32 srckey_enable;
u32 gbl_alpha;
u32 osd_ext_order;
s32 osd_ext_axis[4] = {0};
u32 block_windows[8] = {0};
u32 block_mode;
unsigned long ret;
switch (cmd) {
case FBIOPUT_OSD_SRCKEY_ENABLE:
ret = copy_from_user(&srckey_enable, argp, sizeof(u32));
break;
case FBIOPUT_OSD_SRCCOLORKEY:
ret = copy_from_user(&src_colorkey, argp, sizeof(u32));
break ;
case FBIOPUT_OSD_SET_GBL_ALPHA:
ret = copy_from_user(&gbl_alpha, argp, sizeof(u32));
break;
case FBIOPUT_OSD_SCALE_AXIS:
ret = copy_from_user(&osd_ext_axis, argp, 4 * sizeof(s32));
break;
case FBIOGET_OSD_SCALE_AXIS:
case FBIOPUT_OSD_ORDER:
case FBIOGET_OSD_ORDER:
case FBIOGET_OSD_GET_GBL_ALPHA:
case FBIOPUT_OSD_2X_SCALE:
case FBIOPUT_OSD_ENABLE_3D_MODE:
case FBIOPUT_OSD_FREE_SCALE_ENABLE:
case FBIOPUT_OSD_FREE_SCALE_WIDTH:
case FBIOPUT_OSD_FREE_SCALE_HEIGHT:
case FBIOGET_OSD_BLOCK_WINDOWS:
case FBIOGET_OSD_BLOCK_MODE:
case FBIOGET_OSD_FREE_SCALE_AXIS:
break;
case FBIOPUT_OSD_BLOCK_MODE:
block_mode = (u32)argp;
break;
case FBIOPUT_OSD_BLOCK_WINDOWS:
ret = copy_from_user(&block_windows, argp, 8 * sizeof(u32));
break;
case FBIOPUT_OSD_FREE_SCALE_AXIS:
ret = copy_from_user(&osd_ext_axis, argp, 4 * sizeof(s32));
break;
default :
amlog_mask_level(LOG_MASK_IOCTL, LOG_LEVEL_HIGH, "command not supported\r\n ");
return -1;
}
mutex_lock(&fbdev->lock);
switch (cmd) {
case FBIOPUT_OSD_ORDER:
osddev_ext_change_osd_ext_order(info->node, arg);
break;
case FBIOGET_OSD_ORDER:
osd_ext_order = osddev_ext_get_osd_ext_order(info->node);
ret = copy_to_user(argp, &osd_ext_order, sizeof(u32));
break;
case FBIOPUT_OSD_FREE_SCALE_WIDTH:
osddev_ext_free_scale_width(info->node, arg);
break;
case FBIOPUT_OSD_FREE_SCALE_HEIGHT:
osddev_ext_free_scale_height(info->node, arg);
break;
case FBIOPUT_OSD_FREE_SCALE_ENABLE:
osddev_ext_free_scale_enable(info->node, arg);
break;
case FBIOPUT_OSD_ENABLE_3D_MODE:
osddev_ext_enable_3d_mode(info->node, arg);
break;
case FBIOPUT_OSD_2X_SCALE: //arg :higher 16 bit h_scale_enable, lower 16 bit v_scale_enable
osddev_ext_set_2x_scale(info->node, arg & 0xffff0000 ? 1 : 0, arg & 0xffff ? 1 : 0);
break;
case FBIOPUT_OSD_SRCCOLORKEY:
switch (fbdev->color->color_index) {
case COLOR_INDEX_16_655:
case COLOR_INDEX_16_844:
case COLOR_INDEX_16_565:
case COLOR_INDEX_24_888_B:
case COLOR_INDEX_24_RGB:
case COLOR_INDEX_YUV_422:
amlog_mask_level(LOG_MASK_IOCTL, LOG_LEVEL_LOW, "set osd color key 0x%x\r\n", src_colorkey);
fbdev->color_key = src_colorkey;
osddev_ext_set_colorkey(info->node, fbdev->color->color_index, src_colorkey);
break;
default:
break;
}
break ;
case FBIOPUT_OSD_SRCKEY_ENABLE:
switch (fbdev->color->color_index) {
case COLOR_INDEX_16_655:
case COLOR_INDEX_16_844:
case COLOR_INDEX_16_565:
//.........这里部分代码省略.........
开发者ID:abazad,项目名称:7300-kern,代码行数:101,代码来源:osd_main.c
示例5: arch_ptrace
//.........这里部分代码省略.........
#endif
#ifdef PTRACE_SETREGS
case PTRACE_SETREGS: { /* Set all gp regs in the child. */
unsigned long tmp = 0;
if (!access_ok(VERIFY_READ, p, MAX_REG_OFFSET)) {
ret = -EIO;
break;
}
for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
__get_user(tmp, p);
putreg(child, i, tmp);
p++;
}
ret = 0;
break;
}
#endif
#ifdef PTRACE_GETFPREGS
case PTRACE_GETFPREGS: /* Get the child FPU state. */
ret = get_fpregs(data, child);
break;
#endif
#ifdef PTRACE_SETFPREGS
case PTRACE_SETFPREGS: /* Set the child FPU state. */
ret = set_fpregs(data, child);
break;
#endif
#ifdef PTRACE_GETFPXREGS
case PTRACE_GETFPXREGS: /* Get the child FPU state. */
ret = get_fpxregs(data, child);
break;
#endif
#ifdef PTRACE_SETFPXREGS
case PTRACE_SETFPXREGS: /* Set the child FPU state. */
ret = set_fpxregs(data, child);
break;
#endif
case PTRACE_GET_THREAD_AREA:
ret = ptrace_get_thread_area(child, addr,
(struct user_desc __user *) data);
break;
case PTRACE_SET_THREAD_AREA:
ret = ptrace_set_thread_area(child, addr,
(struct user_desc __user *) data);
break;
case PTRACE_FAULTINFO: {
/* Take the info from thread->arch->faultinfo,
* but transfer max. sizeof(struct ptrace_faultinfo).
* On i386, ptrace_faultinfo is smaller!
*/
ret = copy_to_user(p, &child->thread.arch.faultinfo,
sizeof(struct ptrace_faultinfo));
if(ret)
break;
break;
}
#ifdef PTRACE_LDT
case PTRACE_LDT: {
struct ptrace_ldt ldt;
if(copy_from_user(&ldt, p, sizeof(ldt))){
ret = -EIO;
break;
}
/* This one is confusing, so just punt and return -EIO for
* now
*/
ret = -EIO;
break;
}
#endif
#ifdef CONFIG_PROC_MM
case PTRACE_SWITCH_MM: {
struct mm_struct *old = child->mm;
struct mm_struct *new = proc_mm_get_mm(data);
if(IS_ERR(new)){
ret = PTR_ERR(new);
break;
}
atomic_inc(&new->mm_users);
child->mm = new;
child->active_mm = new;
mmput(old);
ret = 0;
break;
}
#endif
default:
ret = ptrace_request(child, request, addr, data);
break;
}
return ret;
}
开发者ID:FatSunHYS,项目名称:OSCourseDesign,代码行数:101,代码来源:ptrace.c
示例6: SYSCALL_DEFINE6
SYSCALL_DEFINE6(copy_file_range, int, fd_in, loff_t __user *, off_in,
int, fd_out, loff_t __user *, off_out,
size_t, len, unsigned int, flags)
{
loff_t pos_in;
loff_t pos_out;
struct fd f_in;
struct fd f_out;
ssize_t ret = -EBADF;
f_in = fdget(fd_in);
if (!f_in.file)
goto out2;
f_out = fdget(fd_out);
if (!f_out.file)
goto out1;
ret = -EFAULT;
if (off_in) {
if (copy_from_user(&pos_in, off_in, sizeof(loff_t)))
goto out;
} else {
pos_in = f_in.file->f_pos;
}
if (off_out) {
if (copy_from_user(&pos_out, off_out, sizeof(loff_t)))
goto out;
} else {
pos_out = f_out.file->f_pos;
}
ret = vfs_copy_file_range(f_in.file, pos_in, f_out.file, pos_out, len,
flags);
if (ret > 0) {
pos_in += ret;
pos_out += ret;
if (off_in) {
if (copy_to_user(off_in, &pos_in, sizeof(loff_t)))
ret = -EFAULT;
} else {
f_in.file->f_pos = pos_in;
}
if (off_out) {
if (copy_to_user(off_out, &pos_out, sizeof(loff_t)))
ret = -EFAULT;
} else {
f_out.file->f_pos = pos_out;
}
}
out:
fdput(f_out);
out1:
fdput(f_in);
out2:
return ret;
}
开发者ID:grafuls,项目名称:linux-full-history,代码行数:61,代码来源:read_write.c
示例7: devinet_ioctl
int devinet_ioctl(struct net *net, unsigned int cmd, void __user *arg)
{
struct ifreq ifr;
struct sockaddr_in sin_orig;
struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
struct in_device *in_dev;
struct in_ifaddr **ifap = NULL;
struct in_ifaddr *ifa = NULL;
struct net_device *dev;
char *colon;
int ret = -EFAULT;
int tryaddrmatch = 0;
/*
* Fetch the caller's info block into kernel space
*/
if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
goto out;
ifr.ifr_name[IFNAMSIZ - 1] = 0;
/* save original address for comparison */
memcpy(&sin_orig, sin, sizeof(*sin));
colon = strchr(ifr.ifr_name, ':');
if (colon)
*colon = 0;
dev_load(net, ifr.ifr_name);
switch (cmd) {
case SIOCGIFADDR: /* Get interface address */
case SIOCGIFBRDADDR: /* Get the broadcast address */
case SIOCGIFDSTADDR: /* Get the destination address */
case SIOCGIFNETMASK: /* Get the netmask for the interface */
/* Note that these ioctls will not sleep,
so that we do not impose a lock.
One day we will be forced to put shlock here (I mean SMP)
*/
tryaddrmatch = (sin_orig.sin_family == AF_INET);
memset(sin, 0, sizeof(*sin));
sin->sin_family = AF_INET;
break;
case SIOCSIFFLAGS:
ret = -EACCES;
if (!capable(CAP_NET_ADMIN))
goto out;
break;
case SIOCSIFADDR: /* Set interface address (and family) */
case SIOCSIFBRDADDR: /* Set the broadcast address */
case SIOCSIFDSTADDR: /* Set the destination address */
case SIOCSIFNETMASK: /* Set the netmask for the interface */
case SIOCKILLADDR: /* Nuke all sockets on this address */
ret = -EACCES;
if (!capable(CAP_NET_ADMIN))
goto out;
ret = -EINVAL;
if (sin->sin_family != AF_INET)
goto out;
break;
default:
ret = -EINVAL;
goto out;
}
rtnl_lock();
ret = -ENODEV;
if ((dev = __dev_get_by_name(net, ifr.ifr_name)) == NULL)
goto done;
if (colon)
*colon = ':';
if ((in_dev = __in_dev_get_rtnl(dev)) != NULL) {
if (tryaddrmatch) {
/* Matthias Andree */
/* compare label and address (4.4BSD style) */
/* note: we only do this for a limited set of ioctls
and only if the original address family was AF_INET.
This is checked above. */
for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
ifap = &ifa->ifa_next) {
if (!strcmp(ifr.ifr_name, ifa->ifa_label) &&
sin_orig.sin_addr.s_addr ==
ifa->ifa_address) {
break; /* found */
}
}
}
/* we didn't get a match, maybe the application is
4.3BSD-style and passed in junk so we fall back to
comparing just the label */
if (!ifa) {
for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
ifap = &ifa->ifa_next)
if (!strcmp(ifr.ifr_name, ifa->ifa_label))
break;
}
//.........这里部分代码省略.........
开发者ID:ahlulnugraha,项目名称:nAa-kernel,代码行数:101,代码来源:devinet.c
示例8: usb_tranzport_write
/**
* usb_tranzport_write
*/
static ssize_t usb_tranzport_write(struct file *file,
const char __user *buffer, size_t count,
loff_t *ppos)
{
struct usb_tranzport *dev;
size_t bytes_to_write;
int retval = 0;
dev = file->private_data;
/* verify that we actually have some data to write */
if (count == 0)
goto exit;
/* lock this object */
if (mutex_lock_interruptible(&dev->mtx)) {
retval = -ERESTARTSYS;
goto exit;
}
/* verify that the device wasn't unplugged */
if (dev->intf == NULL) {
retval = -ENODEV;
err("No device or device unplugged %d\n", retval);
goto unlock_exit;
}
/* wait until previous transfer is finished */
if (dev->interrupt_out_busy) {
if (file->f_flags & O_NONBLOCK) {
retval = -EAGAIN;
goto unlock_exit;
}
retval = wait_event_interruptible(dev->write_wait,
!dev->interrupt_out_busy);
if (retval < 0)
goto unlock_exit;
}
/* write the data into interrupt_out_buffer from userspace */
bytes_to_write = min(count,
write_buffer_size *
dev->interrupt_out_endpoint_size);
if (bytes_to_write < count)
dev_warn(&dev->intf->dev,
"Write buffer overflow, %zd bytes dropped\n",
count - bytes_to_write);
dbg_info(&dev->intf->dev,
"%s: count = %zd, bytes_to_write = %zd\n", __func__,
count, bytes_to_write);
if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) {
retval = -EFAULT;
goto unlock_exit;
}
if (dev->interrupt_out_endpoint == NULL) {
err("Endpoint should not be be null!\n");
goto unlock_exit;
}
/* send off the urb */
usb_fill_int_urb(dev->interrupt_out_urb,
interface_to_usbdev(dev->intf),
usb_sndintpipe(interface_to_usbdev(dev->intf),
dev->interrupt_out_endpoint->
bEndpointAddress),
dev->interrupt_out_buffer, bytes_to_write,
usb_tranzport_interrupt_out_callback, dev,
dev->interrupt_out_interval);
dev->interrupt_out_busy = 1;
wmb();
retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
if (retval) {
dev->interrupt_out_busy = 0;
err("Couldn't submit interrupt_out_urb %d\n", retval);
goto unlock_exit;
}
retval = bytes_to_write;
unlock_exit:
/* unlock the device */
mutex_unlock(&dev->mtx);
exit:
return retval;
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:92,代码来源:tranzport.c
示例9: link_pm_ioctl
static long link_pm_ioctl(struct file *file, unsigned int cmd,
unsigned long arg)
{
int value, err = 0;
struct task_struct *task = get_current();
struct link_pm_data *pm_data = file->private_data;
struct usb_link_device *usb_ld = pm_data->usb_ld;
char taskname[TASK_COMM_LEN];
pr_info("mif: %s: 0x%08x\n", __func__, cmd);
switch (cmd) {
case IOCTL_LINK_CONTROL_ACTIVE:
if (copy_from_user(&value, (const void __user *)arg,
sizeof(int)))
return -EFAULT;
gpio_set_value(pm_data->gpio_link_active, value);
break;
case IOCTL_LINK_GET_HOSTWAKE:
return !gpio_get_value(pm_data->gpio_link_hostwake);
case IOCTL_LINK_CONNECTED:
return pm_data->usb_ld->if_usb_connected;
case IOCTL_LINK_PORT_ON: /* hub only */
/* ignore cp host wakeup irq, set the hub_init_lock when AP try
CP off and release hub_init_lock when CP boot done */
pm_data->hub_init_lock = 0;
if (pm_data->root_hub) {
pm_runtime_resume(pm_data->root_hub);
pm_runtime_forbid(pm_data->root_hub->parent);
}
if (pm_data->port_enable) {
err = pm_data->port_enable(2, 1);
if (err < 0) {
pr_err("mif: %s: hub on fail err=%d\n",
__func__, err);
goto exit;
}
pm_data->hub_status = HUB_STATE_RESUMMING;
}
break;
case IOCTL_LINK_PORT_OFF: /* hub only */
if (pm_data->usb_ld->if_usb_connected) {
struct usb_device *udev =
pm_data->usb_ld->usbdev->parent;
pm_runtime_get_sync(&udev->dev);
if (udev->state != USB_STATE_NOTATTACHED) {
usb_force_disconnect(udev);
pr_info("force disconnect maybe cp-reset!!\n");
}
pm_runtime_put_autosuspend(&udev->dev);
}
err = link_pm_hub_standby(pm_data);
if (err < 0) {
pr_err("mif: %s: usb3503 active fail\n", __func__);
goto exit;
}
pm_data->hub_init_lock = 1;
pm_data->hub_handshake_done = 0;
break;
case IOCTL_LINK_BLOCK_AUTOSUSPEND: /* block autosuspend forever */
mif_info("blocked autosuspend by `%s(%d)'\n",
get_task_comm(taskname, task), task->pid);
pm_data->block_autosuspend = true;
if (usb_ld->usbdev)
pm_runtime_forbid(&usb_ld->usbdev->dev);
else {
mif_err("Block autosuspend failed\n");
err = -ENODEV;
}
break;
case IOCTL_LINK_ENABLE_AUTOSUSPEND: /* Enable autosuspend */
mif_info("autosuspend enabled by `%s(%d)'\n",
get_task_comm(taskname, task), task->pid);
pm_data->block_autosuspend = false;
if (usb_ld->usbdev)
pm_runtime_allow(&usb_ld->usbdev->dev);
else {
mif_err("Enable autosuspend failed\n");
err = -ENODEV;
}
break;
default:
break;
}
exit:
return err;
}
开发者ID:madhanraj,项目名称:drwa-android-ics,代码行数:88,代码来源:modem_link_pm_usb.c
示例10: audqcelp_in_ioctl
/* ------------------- device --------------------- */
static long audqcelp_in_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
{
struct audio_in *audio = file->private_data;
int rc = 0;
if (cmd == AUDIO_GET_STATS) {
struct msm_audio_stats stats;
stats.byte_count = atomic_read(&audio->in_bytes);
stats.sample_count = atomic_read(&audio->in_samples);
if (copy_to_user((void *) arg, &stats, sizeof(stats)))
return -EFAULT;
return rc;
}
mutex_lock(&audio->lock);
switch (cmd) {
case AUDIO_START: {
uint32_t freq;
freq = 48000;
MM_DBG("AUDIO_START\n");
if (audio->in_call && (audio->voice_state !=
VOICE_STATE_INCALL)) {
rc = -EPERM;
break;
}
rc = msm_snddev_request_freq(&freq, audio->enc_id,
SNDDEV_CAP_TX, AUDDEV_CLNT_ENC);
MM_DBG("sample rate configured %d\n", freq);
if (rc < 0) {
MM_DBG(" Sample rate can not be set, return code %d\n",
rc);
msm_snddev_withdraw_freq(audio->enc_id,
SNDDEV_CAP_TX, AUDDEV_CLNT_ENC);
MM_DBG("msm_snddev_withdraw_freq\n");
break;
}
rc = audqcelp_in_enable(audio);
if (!rc) {
rc =
wait_event_interruptible_timeout(audio->wait_enable,
audio->running != 0, 1*HZ);
MM_DBG("state %d rc = %d\n", audio->running, rc);
if (audio->running == 0)
rc = -ENODEV;
else
rc = 0;
}
audio->stopped = 0;
break;
}
case AUDIO_STOP: {
rc = audqcelp_in_disable(audio);
rc = msm_snddev_withdraw_freq(audio->enc_id,
SNDDEV_CAP_TX, AUDDEV_CLNT_ENC);
MM_DBG("msm_snddev_withdraw_freq\n");
audio->stopped = 1;
break;
}
case AUDIO_FLUSH: {
if (audio->stopped) {
/* Make sure we're stopped and we wake any threads
* that might be blocked holding the read_lock.
* While audio->stopped read threads will always
* exit immediately.
*/
wake_up(&audio->wait);
mutex_lock(&audio->read_lock);
audqcelp_in_flush(audio);
mutex_unlock(&audio->read_lock);
}
break;
}
case AUDIO_SET_STREAM_CONFIG: {
struct msm_audio_stream_config cfg;
if (copy_from_user(&cfg, (void *) arg, sizeof(cfg))) {
rc = -EFAULT;
break;
}
/* Allow only single frame */
if (cfg.buffer_size != (FRAME_SIZE - 8))
rc = -EINVAL;
else
audio->buffer_size = cfg.buffer_size;
break;
}
case AUDIO_GET_STREAM_CONFIG: {
struct msm_audio_stream_config cfg;
memset(&cfg, 0, sizeof(cfg));
cfg.buffer_size = audio->buffer_size;
cfg.buffer_count = FRAME_NUM;
if (copy_to_user((void *) arg, &cfg, sizeof(cfg)))
rc = -EFAULT;
break;
}
case AUDIO_GET_QCELP_ENC_CONFIG: {
if (copy_to_user((void *) arg, &audio->cfg, sizeof(audio->cfg)))
rc = -EFAULT;
//.........这里部分代码省略.........
开发者ID:BuzzBumbleBee,项目名称:linux-htc-acevivo,代码行数:101,代码来源:audio_qcelp_in.c
示例11: btwlan_em_ioctl
/*****************************************************************************
* btwaln_em_ioctl
*****************************************************************************/
static int btwlan_em_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
BTWLAN_EM_DEBUG("btwlan_em_ioctl ++\n");
if(!pbtwlan_em)
{
BTWLAN_EM_ALERT("btwlan_em_ioctl failed get valid struct\n");
return -EFAULT;
}
switch(cmd)
{
case BTWLAN_EM_IOCTL_SET_BTPWR:
{
unsigned long btpwr = 0;
if (copy_from_user(&btpwr, (void*)arg, sizeof(unsigned long)))
return -EFAULT;
BTWLAN_EM_DEBUG("BTWLAN_EM_IOCTL_SET_BTPWR:%d\n", (int)btpwr);
mutex_lock(&pbtwlan_em->sem);
if (btpwr){
mt_bt_power_on();
}
else{
mt_bt_power_off();
}
mutex_unlock(&pbtwlan_em->sem);
break;
}
case BTWLAN_EM_IOCTL_SET_WIFIPWR:
{
unsigned long wifipwr = 0;
if (copy_from_user(&wifipwr, (void*)arg, sizeof(unsigned long)))
return -EFAULT;
BTWLAN_EM_DEBUG("BTWLAN_EM_IOCTL_SET_WIFIPWR:%d\n", (int)wifipwr);
mutex_lock(&pbtwlan_em->sem);
if (wifipwr){
mt_wifi_power_on();
}
else{
mt_wifi_power_off();
}
mutex_unlock(&pbtwlan_em->sem);
break;
}
case BT_IOCTL_SET_EINT:
{
unsigned long bt_eint = 0;
if (copy_from_user(&bt_eint, (void*)arg, sizeof(unsigned long)))
return -EFAULT;
BTWLAN_EM_DEBUG("BT_IOCTL_SET_EINT:%d\n", bt_eint);
mutex_lock(&pbtwlan_em->sem);
if (bt_eint){
mt65xx_eint_unmask(CUST_EINT_BT_NUM);
BTWLAN_EM_DEBUG("Set enable BT EINT\n");
}
else{
mt65xx_eint_mask(CUST_EINT_BT_NUM);
BTWLAN_EM_DEBUG("Set disable BT EINT\n");
eint_mask = 1;
wake_up_interruptible(&eint_wait);
}
mutex_unlock(&pbtwlan_em->sem);
break;
}
default:
BTWLAN_EM_ALERT("btwlan_em_ioctl not support\n");
return -EPERM;
}
BTWLAN_EM_DEBUG("btwlan_em_ioctl --\n");
return 0;
}
开发者ID:4Fwolf,项目名称:motorola-hawk-kernel-3.4.67,代码行数:84,代码来源:btwlanem.c
示例12: vni_ioctl
/* --------------------------------------------------------------------------
* ioctl: let user programs configure this interface
*/
int vni_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
int err;
struct net_device *slave;
struct vni_private *priv = netdev_priv(dev);
/* hold a local (kernel-space) copy of the configuration data */
struct vni_userinfo info;
/* and a pointer into user space as well */
struct vni_userinfo *uptr = (struct vni_userinfo *)ifr->ifr_data;
/* only authorized users can control the interface */
if (cmd == SIOCINSANESETINFO && !capable(CAP_NET_ADMIN))
return -EPERM;
/* process the command */
switch(cmd) {
case SIOCINSANEGETINFO: /* return configuration to user space */
/* interface name */
memset(info.name, 0, VNI_NAMELEN);
if (priv->priv_device)
strncpy(info.name, priv->priv_device->name, VNI_NAMELEN-1);
/* parameters */
info.mode = priv->priv_mode;
/* return the data structure to user space */
err = copy_to_user(uptr, &info, sizeof(info));
if (err) return err;
break;
case SIOCINSANESETINFO:
/* retrieve the data structure from user space */
err = copy_from_user(&info, uptr, sizeof(info));
if (err) return err;
printk("name: %s", info.name);
/* interface name */
slave = __dev_get_by_name(&init_net, info.name);
if (!slave)
return -ENODEV;
if (slave->type != ARPHRD_ETHER && slave->type != ARPHRD_LOOPBACK)
return -EINVAL;
/* The interface is good, get hold of it */
priv->priv_device = slave;
if (slave->header_ops)
dev->header_ops = &vni_header_ops;
else
dev->header_ops = NULL;
/* also, and clone its IP, MAC and other information */
memcpy(dev->dev_addr, slave->dev_addr, sizeof(slave->dev_addr));
memcpy(dev->broadcast, slave->broadcast, sizeof(slave->broadcast));
/* accept the parameters (no checks here) */
priv->priv_mode = info.mode;
break;
default:
return -EOPNOTSUPP;
}
return 0;
}
开发者ID:Atrix-Dev-Team,项目名称:kernel-moto-atrix4g,代码行数:70,代码来源:rmnet1_drv.c
示例13: mfc_ioctl
/* FIXME: add request firmware ioctl */
static long mfc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct mfc_inst_ctx *mfc_ctx;
int ret, ex_ret;
struct mfc_common_args in_param;
struct mfc_buf_alloc_arg buf_arg;
int port;
struct mfc_dev *dev;
int i;
struct mfc_set_config_arg *set_cnf_arg;
mfc_ctx = (struct mfc_inst_ctx *)file->private_data;
if (!mfc_ctx)
return -EINVAL;
dev = mfc_ctx->dev;
mutex_lock(&dev->lock);
ret = copy_from_user(&in_param, (struct mfc_common_args *)arg,
sizeof(struct mfc_common_args));
if (ret < 0) {
mfc_err("failed to copy parameters\n");
ret = -EIO;
in_param.ret_code = MFC_INVALID_PARAM_FAIL;
goto out_ioctl;
}
mutex_unlock(&dev->lock);
/* FIXME: add locking */
mfc_dbg("cmd: 0x%08x\n", cmd);
switch (cmd) {
case IOCTL_MFC_DEC_INIT:
mutex_lock(&dev->lock);
if (mfc_chk_inst_state(mfc_ctx, INST_STATE_CREATE) < 0) {
mfc_err("IOCTL_MFC_DEC_INIT invalid state: 0x%08x\n",
mfc_ctx->state);
in_param.ret_code = MFC_STATE_INVALID;
ret = -EINVAL;
break;
}
mfc_clock_on();
in_param.ret_code = mfc_init_decoding(mfc_ctx, &(in_param.args));
ret = in_param.ret_code;
mfc_clock_off();
mutex_unlock(&dev->lock);
break;
case IOCTL_MFC_ENC_INIT:
mutex_lock(&dev->lock);
if (mfc_chk_inst_state(mfc_ctx, INST_STATE_CREATE) < 0) {
mfc_err("IOCTL_MFC_ENC_INIT invalid state: 0x%08x\n",
mfc_ctx->state);
in_param.ret_code = MFC_STATE_INVALID;
ret = -EINVAL;
break;
}
mfc_clock_on();
in_param.ret_code = mfc_init_encoding(mfc_ctx, &(in_param.args));
ret = in_param.ret_code;
mfc_clock_off();
mutex_unlock(&dev->lock);
break;
case IOCTL_MFC_DEC_EXE:
mutex_lock(&dev->lock);
mfc_clock_on();
in_param.ret_code = mfc_exec_decoding(mfc_ctx, &(in_param.args));
ret = in_param.ret_code;
mfc_clock_off();
mutex_unlock(&dev->lock);
break;
case IOCTL_MFC_ENC_EXE:
mutex_lock(&dev->lock);
mfc_clock_on();
in_param.ret_code = mfc_exec_encoding(mfc_ctx, &(in_param.args));
ret = in_param.ret_code;
mfc_clock_off();
mutex_unlock(&dev->lock);
//.........这里部分代码省略.........
开发者ID:Sk8tr419,项目名称:linux_kernel_sgh-i777,代码行数:101,代码来源:mfc_dev.c
示例14: acdb_ioctl
static long acdb_ioctl(struct file *f,
unsigned int cmd, unsigned long arg)
{
int32_t result = 0;
int32_t size;
int32_t map_fd;
uint32_t topology;
uint32_t data[MAX_IOCTL_DATA];
struct msm_spk_prot_status prot_status;
struct msm_spk_prot_status acdb_spk_status;
pr_debug("%s\n", __func__);
mutex_lock(&acdb_data.acdb_mutex);
switch (cmd) {
case AUDIO_REGISTER_PMEM:
pr_debug("AUDIO_REGISTER_PMEM\n");
result = deregister_memory();
if (result < 0)
pr_err("%s: deregister_memory failed returned %d!\n",
__func__, result);
if (copy_from_user(&map_fd, (void *)arg, sizeof(map_fd))) {
pr_err("%s: fail to copy memory handle!\n", __func__);
result = -EFAULT;
} else {
acdb_data.map_handle = map_fd;
result = register_memory();
}
goto done;
case AUDIO_DEREGISTER_PMEM:
pr_debug("AUDIO_DEREGISTER_PMEM\n");
result = deregister_memory();
goto done;
case AUDIO_SET_VOICE_RX_TOPOLOGY:
if (copy_from_user(&topology, (void *)arg,
sizeof(topology))) {
pr_err("%s: fail to copy topology!\n", __func__);
result = -EFAULT;
}
store_voice_rx_topology(topology);
goto done;
case AUDIO_SET_VOICE_TX_TOPOLOGY:
if (copy_from_user(&topology, (void *)arg,
sizeof(topology))) {
pr_err("%s: fail to copy topology!\n", __func__);
result = -EFAULT;
}
store_voice_tx_topology(topology);
goto done;
case AUDIO_SET_ADM_RX_TOPOLOGY:
if (copy_from_user(&topology, (void *)arg,
sizeof(topology))) {
pr_err("%s: fail to copy topology!\n", __func__);
result = -EFAULT;
}
store_adm_rx_topology(topology);
goto done;
case AUDIO_SET_ADM_TX_TOPOLOGY:
if (copy_from_user(&topology, (void *)arg,
sizeof(topology))) {
pr_err("%s: fail to copy topology!\n", __func__);
result = -EFAULT;
}
store_adm_tx_topology(topology);
goto done;
case AUDIO_SET_ASM_TOPOLOGY:
if (copy_from_user(&topology, (void *)arg,
sizeof(topology))) {
pr_err("%s: fail to copy topology!\n", __func__);
result = -EFAULT;
}
store_asm_topology(topology);
goto done;
case AUDIO_SET_SPEAKER_PROT:
if (copy_from_user(&acdb_data.spk_prot_cfg, (void *)arg,
sizeof(acdb_data.spk_prot_cfg))) {
pr_err("%s fail to copy spk_prot_cfg\n", __func__);
result = -EFAULT;
}
goto done;
case AUDIO_GET_SPEAKER_PROT:
/*Indicates calibration was succesfull*/
if (acdb_data.spk_prot_cfg.mode == MSM_SPKR_PROT_CALIBRATED) {
prot_status.r0 = acdb_data.spk_prot_cfg.r0;
prot_status.status = 0;
} else if (acdb_data.spk_prot_cfg.mode ==
MSM_SPKR_PROT_CALIBRATION_IN_PROGRESS) {
/*Call AFE to query the status*/
acdb_spk_status.status = -EINVAL;
acdb_spk_status.r0 = -1;
get_spk_protection_status(&acdb_spk_status);
prot_status.r0 = acdb_spk_status.r0;
prot_status.status = acdb_spk_status.status;
if (!acdb_spk_status.status) {
acdb_data.spk_prot_cfg.mode =
MSM_SPKR_PROT_CALIBRATED;
acdb_data.spk_prot_cfg.r0 = prot_status.r0;
}
} else {
/*Indicates calibration data is invalid*/
//.........这里部分代码省略.........
开发者ID:Nothing-Dev,项目名称:android_kernel_huawei_hwY635,代码行数:101,代码来源:audio_acdb.c
示例15: ralink_nvram_ioctl
int ralink_nvram_ioctl(struct inode *inode, struct file *file, unsigned int req,
unsigned long arg)
#endif
{
int index, len;
const char *p;
nvram_ioctl_t *nvr;
char *value;
switch (req) {
case RALINK_NVRAM_IOCTL_GET:
nvr = (nvram_ioctl_t __user *)arg;
p = nvram_get(nvr->index, nvr->name);
if (p == NULL)
p = "";
len = strlen(p) + 1;
if (nvr->size < len) {
nvr->size = len;
return -EOVERFLOW;
}
if (copy_to_user(nvr->value, p, strlen(p) + 1))
return -EFAULT;
break;
case RALINK_NVRAM_IOCTL_GETALL:
nvr = (nvram_ioctl_t __user *)arg;
index = nvr->index;
len = fb[index].flash_max_len - sizeof(fb[index].env.crc);
if (nvram_getall(index, fb[index].env.data) == 0) {
if (copy_to_user(nvr->value, fb[index].env.data, len))
return -EFAULT;
}
break;
case RALINK_NVRAM_IOCTL_SET:
nvr = (nvram_ioctl_t *)arg;
len = ((nvr->size + MAX_VALUE_LEN) / MAX_VALUE_LEN) * MAX_VALUE_LEN; // Align size+1 bytes to MAX_VALUE_LEN boundary
if ((len > MAX_PERMITTED_VALUE_LEN) || (len < 0))
return -EOVERFLOW;
value = (char *)kzalloc(len, GFP_KERNEL);
if (!value)
return -ENOMEM;
if (copy_from_user(value, nvr->value, nvr->size)) {
KFREE(value);
return -EFAULT;
}
nvram_set(nvr->index, nvr->name, value);
KFREE(value);
break;
case RALINK_NVRAM_IOCTL_COMMIT:
nvr = (nvram_ioctl_t __user *)arg;
nvram_commit(nvr->index);
break;
case RALINK_NVRAM_IOCTL_CLEAR:
nvr = (nvram_ioctl_t __user *)arg;
nvram_clear(nvr->index);
default:
break;
}
return 0;
}
开发者ID:schidler,项目名称:RT5350,代码行数:66,代码来源:nvram.c
示例16: msm_sensor_config
int32_t msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void __user *argp)
{
struct sensor_cfg_data cdata;
long rc = 0;
if (copy_from_user(&cdata,
(void *)argp,
sizeof(struct sensor_cfg_data)))
return -EFAULT;
mutex_lock(s_ctrl->msm_sensor_mutex);
printk("msm_sensor_config: cfgtype = %d\n", /* */
cdata.cfgtype);
switch (cdata.cfgtype) {
case CFG_SET_FPS:
case CFG_SET_PICT_FPS:
if (s_ctrl->func_tbl->
sensor_set_fps == NULL) {
rc = -EFAULT;
break;
}
rc = s_ctrl->func_tbl->
sensor_set_fps(
s_ctrl,
&(cdata.cfg.fps));
break;
case CFG_SET_EXP_GAIN:
if (s_ctrl->func_tbl->
sensor_write_exp_gain == NULL) {
rc = -EFAULT;
break;
}
rc =
s_ctrl->func_tbl->
sensor_write_exp_gain(
s_ctrl,
cdata.cfg.exp_gain.gain,
cdata.cfg.exp_gain.line);
s_ctrl->prev_gain = cdata.cfg.exp_gain.gain;
s_ctrl->prev_line = cdata.cfg.exp_gain.line;
break;
case CFG_SET_PICT_EXP_GAIN:
if (s_ctrl->func_tbl->
sensor_write_snapshot_exp_gain == NULL) {
rc = -EFAULT;
break;
}
rc =
s_ctrl->func_tbl->
sensor_write_snapshot_exp_gain(
s_ctrl,
cdata.cfg.exp_gain.gain,
cdata.cfg.exp_gain.line);
break;
case CFG_SET_MODE:
if (s_ctrl->func_tbl->
sensor_set_sensor_mode == NULL) {
rc = -EFAULT;
break;
}
rc = s_ctrl->func_tbl->
sensor_set_sensor_mode(
s_ctrl,
cdata.mode,
cdata.rs);
break;
//
// for YUV sensor[JB]
#ifdef CONFIG_MACH_LGE
case CFG_SET_WB:
rc = s_ctrl->func_tbl->
sensor_set_wb(
s_ctrl,
cdata.cfg.wb_val);
break;
case CFG_SET_EFFECT:
rc = s_ctrl->func_tbl->
sensor_set_effect(
s_ctrl,
cdata.cfg.effect);
break;
case CFG_SET_BRIGHTNESS:
rc = s_ctrl->func_tbl->
sensor_set_brightness(
s_ctrl,
cdata.cfg.brightness);
break;
case CFG_SET_SOC_FPS:
rc = s_ctrl->func_tbl->
sensor_set_soc_minmax_fps(
s_ctrl,
cdata.cfg.fps_range.minfps,
cdata.cfg.fps_range.maxfps);
break;
#else
case CFG_SET_EFFECT:
//.........这里部分代码省略.........
开发者ID:jxxhwy,项目名称:NewWorld_f160_J |
请发表评论