silicom: unobfuscate get_{status,master}_port_fn()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 30 Mar 2013 20:07:02 +0000 (16:07 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 18:13:11 +0000 (14:13 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/silicom/bp_mod.c

index cae9018..5392df3 100644 (file)
@@ -1728,62 +1728,33 @@ int gpio6_clear_fn(bpctl_dev_t *pbpctl_dev)
 }
 #endif                         /*BYPASS_DEBUG */
 
-static bpctl_dev_t *get_status_port_fn(bpctl_dev_t *pbpctl_dev)
+static bpctl_dev_t *lookup_port(bpctl_dev_t *dev)
 {
-       int idx_dev = 0;
-
-       if (pbpctl_dev == NULL)
-               return NULL;
-
-       if ((pbpctl_dev->func == 0) || (pbpctl_dev->func == 2)) {
-               for (idx_dev = 0;
-                    ((bpctl_dev_arr[idx_dev].pdev != NULL)
-                     && (idx_dev < device_num)); idx_dev++) {
-                       if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus)
-                           && (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot)
-                           && ((bpctl_dev_arr[idx_dev].func == 1)
-                               && (pbpctl_dev->func == 0))) {
-
-                               return &(bpctl_dev_arr[idx_dev]);
-                       }
-                       if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) &&
-                           (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot) &&
-                           ((bpctl_dev_arr[idx_dev].func == 3)
-                            && (pbpctl_dev->func == 2))) {
+       bpctl_dev_t *p;
+       int n;
+       for (n = 0, p = bpctl_dev_arr; n < device_num && p->pdev; n++) {
+               if (p->bus == dev->bus
+                   && p->slot == dev->slot
+                   && p->func == (dev->func ^ 1))
+                       return p;
+       }
+       return NULL;
+}
 
-                               return &(bpctl_dev_arr[idx_dev]);
-                       }
-               }
+static bpctl_dev_t *get_status_port_fn(bpctl_dev_t *pbpctl_dev)
+{
+       if (pbpctl_dev) {
+               if (pbpctl_dev->func == 0 || pbpctl_dev->func == 2)
+                       return lookup_port(pbpctl_dev);
        }
        return NULL;
 }
 
 static bpctl_dev_t *get_master_port_fn(bpctl_dev_t *pbpctl_dev)
 {
-       int idx_dev = 0;
-
-       if (pbpctl_dev == NULL)
-               return NULL;
-
-       if ((pbpctl_dev->func == 1) || (pbpctl_dev->func == 3)) {
-               for (idx_dev = 0;
-                    ((bpctl_dev_arr[idx_dev].pdev != NULL)
-                     && (idx_dev < device_num)); idx_dev++) {
-                       if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus)
-                           && (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot)
-                           && ((bpctl_dev_arr[idx_dev].func == 0)
-                               && (pbpctl_dev->func == 1))) {
-
-                               return &(bpctl_dev_arr[idx_dev]);
-                       }
-                       if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) &&
-                           (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot) &&
-                           ((bpctl_dev_arr[idx_dev].func == 2)
-                            && (pbpctl_dev->func == 3))) {
-
-                               return &(bpctl_dev_arr[idx_dev]);
-                       }
-               }
+       if (pbpctl_dev) {
+               if (pbpctl_dev->func == 1 || pbpctl_dev->func == 3)
+                       return lookup_port(pbpctl_dev);
        }
        return NULL;
 }