silicom: helper functions are often useful...
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 30 Mar 2013 19:41:56 +0000 (15:41 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 18:13:10 +0000 (14:13 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/silicom/bp_mod.c

index 58c5f5c..cae9018 100644 (file)
@@ -7541,22 +7541,17 @@ get_wd_set_caps_pfs(char *page, char **start, off_t off, int count,
        return len;
 }
 
-int
-set_bypass_pfs(struct file *file, const char *buffer,
-              unsigned long count, void *data)
+static int user_on_off(const void __user *buffer, size_t count)
 {
 
        char kbuf[256];
-       bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int bypass_param = 0, length = 0;
+       int length = 0;
 
        if (count > (sizeof(kbuf) - 1))
                return -1;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
+       if (copy_from_user(&kbuf, buffer, count))
                return -1;
-       }
 
        kbuf[count] = '\0';
        length = strlen(kbuf);
@@ -7564,12 +7559,22 @@ set_bypass_pfs(struct file *file, const char *buffer,
                kbuf[--length] = '\0';
 
        if (strcmp(kbuf, "on") == 0)
-               bypass_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               bypass_param = 0;
+               return 1;
+       if (strcmp(kbuf, "off") == 0)
+               return 0;
+       return 0;
+}
 
-       set_bypass_fn(pbp_device_block, bypass_param);
+int
+set_bypass_pfs(struct file *file, const char *buffer,
+              unsigned long count, void *data)
+{
+       bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
+       int bypass_param = user_on_off(buffer, count);
+       if (bypass_param < 0)
+               return -1;
 
+       set_bypass_fn(pbp_device_block, bypass_param);
        return count;
 }
 
@@ -7578,30 +7583,12 @@ set_tap_pfs(struct file *file, const char *buffer,
            unsigned long count, void *data)
 {
 
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tap_param = 0, length = 0;
-
-       if (count > (sizeof(kbuf) - 1))
+       int tap_param = user_on_off(buffer, count);
+       if (tap_param < 0)
                return -1;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tap_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tap_param = 0;
-
        set_tap_fn(pbp_device_block, tap_param);
-
        return count;
 }
 
@@ -7610,30 +7597,12 @@ set_disc_pfs(struct file *file, const char *buffer,
             unsigned long count, void *data)
 {
 
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tap_param = 0, length = 0;
-
-       if (count > (sizeof(kbuf) - 1))
+       int tap_param = user_on_off(buffer, count);
+       if (tap_param < 0)
                return -1;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tap_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tap_param = 0;
-
        set_disc_fn(pbp_device_block, tap_param);
-
        return count;
 }
 
@@ -7914,30 +7883,12 @@ set_dis_bypass_pfs(struct file *file, const char *buffer,
                   unsigned long count, void *data)
 {
 
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int bypass_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int bypass_param = user_on_off(buffer, count);
+       if (bypass_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               bypass_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               bypass_param = 0;
-
        set_dis_bypass_fn(pbp_device_block, bypass_param);
-
        return count;
 }
 
@@ -7946,30 +7897,12 @@ set_dis_tap_pfs(struct file *file, const char *buffer,
                unsigned long count, void *data)
 {
 
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tap_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int tap_param = user_on_off(buffer, count);
+       if (tap_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tap_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tap_param = 0;
-
        set_dis_tap_fn(pbp_device_block, tap_param);
-
        return count;
 }
 
@@ -7978,30 +7911,12 @@ set_dis_disc_pfs(struct file *file, const char *buffer,
                 unsigned long count, void *data)
 {
 
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tap_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int tap_param = user_on_off(buffer, count);
+       if (tap_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tap_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tap_param = 0;
-
        set_dis_disc_fn(pbp_device_block, tap_param);
-
        return count;
 }
 
@@ -8069,31 +7984,12 @@ int
 set_bypass_pwup_pfs(struct file *file, const char *buffer,
                    unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int bypass_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int bypass_param = user_on_off(buffer, count);
+       if (bypass_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               bypass_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               bypass_param = 0;
-
        set_bypass_pwup_fn(pbp_device_block, bypass_param);
-
        return count;
 }
 
@@ -8101,31 +7997,12 @@ int
 set_bypass_pwoff_pfs(struct file *file, const char *buffer,
                     unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int bypass_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int bypass_param = user_on_off(buffer, count);
+       if (bypass_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               bypass_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               bypass_param = 0;
-
        set_bypass_pwoff_fn(pbp_device_block, bypass_param);
-
        return count;
 }
 
@@ -8133,31 +8010,12 @@ int
 set_tap_pwup_pfs(struct file *file, const char *buffer,
                 unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tap_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int tap_param = user_on_off(buffer, count);
+       if (tap_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tap_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tap_param = 0;
-
        set_tap_pwup_fn(pbp_device_block, tap_param);
-
        return count;
 }
 
@@ -8165,31 +8023,12 @@ int
 set_disc_pwup_pfs(struct file *file, const char *buffer,
                  unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tap_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int tap_param = user_on_off(buffer, count);
+       if (tap_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tap_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tap_param = 0;
-
        set_disc_pwup_fn(pbp_device_block, tap_param);
-
        return count;
 }
 
@@ -8277,31 +8116,12 @@ int
 set_std_nic_pfs(struct file *file, const char *buffer,
                unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int bypass_param = 0, length = 0;
-
-       if (count >= sizeof(kbuf))
+       int bypass_param = user_on_off(buffer, count);
+       if (bypass_param < 0)
                return -EINVAL;
 
-       if (copy_from_user(&kbuf, buffer, count)) {
-               return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               bypass_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               bypass_param = 0;
-
        set_std_nic_fn(pbp_device_block, bypass_param);
-
        return count;
 }
 
@@ -8420,31 +8240,12 @@ int
 set_tpl_pfs(struct file *file, const char *buffer,
            unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tpl_param = 0, length = 0;
-
-       if (count > (sizeof(kbuf) - 1))
-               return -1;
-
-       if (copy_from_user(&kbuf, buffer, count)) {
+       int tpl_param = user_on_off(buffer, count);
+       if (tpl_param < 0)
                return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tpl_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tpl_param = 0;
 
        set_tpl_fn(pbp_device_block, tpl_param);
-
        return count;
 }
 
@@ -8453,31 +8254,12 @@ int
 set_wait_at_pwup_pfs(struct file *file, const char *buffer,
                     unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tpl_param = 0, length = 0;
-
-       if (count > (sizeof(kbuf) - 1))
-               return -1;
-
-       if (copy_from_user(&kbuf, buffer, count)) {
+       int tpl_param = user_on_off(buffer, count);
+       if (tpl_param < 0)
                return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tpl_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tpl_param = 0;
 
        set_bp_wait_at_pwup_fn(pbp_device_block, tpl_param);
-
        return count;
 }
 
@@ -8485,31 +8267,12 @@ int
 set_hw_reset_pfs(struct file *file, const char *buffer,
                 unsigned long count, void *data)
 {
-
-       char kbuf[256];
        bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data;
-
-       int tpl_param = 0, length = 0;
-
-       if (count > (sizeof(kbuf) - 1))
-               return -1;
-
-       if (copy_from_user(&kbuf, buffer, count)) {
+       int tpl_param = user_on_off(buffer, count);
+       if (tpl_param < 0)
                return -1;
-       }
-
-       kbuf[count] = '\0';
-       length = strlen(kbuf);
-       if (kbuf[length - 1] == '\n')
-               kbuf[--length] = '\0';
-
-       if (strcmp(kbuf, "on") == 0)
-               tpl_param = 1;
-       else if (strcmp(kbuf, "off") == 0)
-               tpl_param = 0;
 
        set_bp_hw_reset_fn(pbp_device_block, tpl_param);
-
        return count;
 }