static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; int rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT(0): case ANDROID_ALARM_SET(0): case ANDROID_ALARM_SET_RTC: if (copy_from_user(&ts, (void __user *)arg, sizeof(ts))) return -EFAULT; break; } rv = alarm_do_ioctl(file, cmd, &ts); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): if (copy_to_user((void __user *)arg, &ts, sizeof(ts))) return -EFAULT; break; } return 0; }
static long alarm_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; int rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT_COMPAT(0): case ANDROID_ALARM_SET_COMPAT(0): case ANDROID_ALARM_SET_RTC_COMPAT: if (compat_get_timespec(&ts, (void __user *)arg)) return -EFAULT; /* fall through */ case ANDROID_ALARM_GET_TIME_COMPAT(0): cmd = ANDROID_ALARM_COMPAT_TO_NORM(cmd); break; } rv = alarm_do_ioctl(file, cmd, &ts); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): /* NOTE: we modified cmd above */ if (compat_put_timespec(&ts, (void __user *)arg)) return -EFAULT; break; } return 0; }
static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; int rv; #if defined(CONFIG_RTC_ALARM_BOOT) char bootalarm_data[14]; #endif switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT(0): case ANDROID_ALARM_SET(0): case ANDROID_ALARM_SET_RTC: if (copy_from_user(&ts, (void __user *)arg, sizeof(ts))) return -EFAULT; break; #if defined(CONFIG_RTC_ALARM_BOOT) case ANDROID_ALARM_SET_ALARM_BOOT: if (copy_from_user(bootalarm_data, (void __user *)arg, 14)) { return -EFAULT; } rv = alarm_set_alarm_boot(bootalarm_data); alarm_opened = 1; return rv; break; #endif } rv = alarm_do_ioctl(file, cmd, &ts); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): if (copy_to_user((void __user *)arg, &ts, sizeof(ts))) return -EFAULT; break; } return 0; }
static long alarm_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; struct rtc_wkalrm pwron_alm; int rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT_COMPAT(0): case ANDROID_ALARM_SET_COMPAT(0): case ANDROID_ALARM_SET_RTC_COMPAT: case ANDROID_ALARM_SET_IPO_COMPAT(0): if (compat_get_timespec(&ts, (void __user *)arg)) return -EFAULT; /* fall through */ case ANDROID_ALARM_GET_TIME_COMPAT(0): cmd = ANDROID_ALARM_COMPAT_TO_NORM(cmd); break; } rv = alarm_do_ioctl(file, cmd, &ts, &pwron_alm); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): /* NOTE: we modified cmd above */ if (compat_put_timespec(&ts, (void __user *)arg)) return -EFAULT; break; case ANDROID_ALARM_GET_POWER_ON: case ANDROID_ALARM_GET_POWER_ON_IPO: if (copy_to_user((void __user *)arg, &pwron_alm, sizeof(struct rtc_wkalrm))) { rv = -EFAULT; return rv; } break; } return 0; }
static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; int rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT(0): case ANDROID_ALARM_SET(0): case ANDROID_ALARM_SET_RTC: if (copy_from_user(&ts, (void __user *)arg, sizeof(ts))) return -EFAULT; break; } rv = alarm_do_ioctl(file, cmd, &ts); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): if (copy_to_user((void __user *)arg, &ts, sizeof(ts))) return -EFAULT; break; case ANDROID_ALARM_WAIT_CHANGE: { unsigned long flags; spin_lock_irqsave(&alarm_slock, flags); if (copy_to_user((void __user *)arg, &delta, 4)) { rv = -EFAULT; delta = 0; spin_unlock_irqrestore(&alarm_slock, flags); return rv; } delta = 0; spin_unlock_irqrestore(&alarm_slock, flags); break; } } return 0; }
static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; struct rtc_wkalrm pwron_alm; int rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT(0): case ANDROID_ALARM_SET(0): case ANDROID_ALARM_SET_RTC: case ANDROID_ALARM_SET_IPO(0): if (copy_from_user(&ts, (void __user *)arg, sizeof(ts))) return -EFAULT; break; } rv = alarm_do_ioctl(file, cmd, &ts, &pwron_alm); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): if (copy_to_user((void __user *)arg, &ts, sizeof(ts))) return -EFAULT; break; case ANDROID_ALARM_GET_POWER_ON: case ANDROID_ALARM_GET_POWER_ON_IPO: if (copy_to_user((void __user *)arg, &pwron_alm, sizeof(struct rtc_wkalrm))) { rv = -EFAULT; return rv; } break; default: break; } return 0; }
static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct timespec ts; int rv; #ifdef CONFIG_RTC_AUTO_PWRON char bootalarm_data[14]; #endif switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_SET_AND_WAIT(0): case ANDROID_ALARM_SET(0): case ANDROID_ALARM_SET_RTC: case ANDROID_ALARM_CLEAR(0): if (copy_from_user(&ts, (void __user *)arg, sizeof(ts))) return -EFAULT; break; #ifdef CONFIG_RTC_AUTO_PWRON case ANDROID_ALARM_SET_ALARM: pr_info("[SAPA] %s\n", __func__); if (copy_from_user(bootalarm_data, (void __user *)arg, 14)) rv = -EFAULT; rv = alarm_set_alarm(bootalarm_data); break; #endif } rv = alarm_do_ioctl(file, cmd, &ts); if (rv) return rv; switch (ANDROID_ALARM_BASE_CMD(cmd)) { case ANDROID_ALARM_GET_TIME(0): if (copy_to_user((void __user *)arg, &ts, sizeof(ts))) return -EFAULT; break; } return 0; }