[PATCH] powerpc: Clean up pSeries firmware feature initialisation
authorMichael Ellerman <michael@ellerman.id.au>
Fri, 10 Feb 2006 04:47:32 +0000 (15:47 +1100)
committerPaul Mackerras <paulus@samba.org>
Fri, 10 Feb 2006 05:52:02 +0000 (16:52 +1100)
Clean up fw_feature_init in platforms/pseries/setup.c. Clean up white space
and replace the while loop with a for loop - which seems clearer to me.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/pseries/setup.c

index 9edeca83f43463e3ca5e0d1fba5fbc829bdd262e..984241bb776c222c76b6e9d1ab8c939fb7391565 100644 (file)
@@ -263,48 +263,44 @@ static int __init pSeries_init_panel(void)
 arch_initcall(pSeries_init_panel);
 
 
-/* Build up the ppc64_firmware_features bitmask field
- * using contents of device-tree/ibm,hypertas-functions.
- * Ultimately this functionality may be moved into prom.c prom_init().
+/* Build up the firmware features bitmask using the contents of
+ * device-tree/ibm,hypertas-functions.  Ultimately this functionality may
+ * be moved into prom.c prom_init().
  */
 static void __init fw_feature_init(void)
 {
-       struct device_node * dn;
-       char * hypertas;
-       unsigned int len;
+       struct device_node *dn;
+       char *hypertas, *s;
+       int len, i;
 
        DBG(" -> fw_feature_init()\n");
 
-       ppc64_firmware_features = 0;
        dn = of_find_node_by_path("/rtas");
        if (dn == NULL) {
-               printk(KERN_ERR "WARNING ! Cannot find RTAS in device-tree !\n");
-               goto no_rtas;
+               printk(KERN_ERR "WARNING! Cannot find RTAS in device-tree!\n");
+               goto out;
        }
 
        hypertas = get_property(dn, "ibm,hypertas-functions", &len);
-       if (hypertas) {
-               while (len > 0){
-                       int i, hypertas_len;
+       if (hypertas == NULL)
+               goto out;
+
+       for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) {
+               for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) {
                        /* check value against table of strings */
-                       for(i=0; i < FIRMWARE_MAX_FEATURES ;i++) {
-                               if ((firmware_features_table[i].name) &&
-                                   (strcmp(firmware_features_table[i].name,hypertas))==0) {
-                                       /* we have a match */
-                                       ppc64_firmware_features |= 
-                                               (firmware_features_table[i].val);
-                                       break;
-                               } 
-                       }
-                       hypertas_len = strlen(hypertas);
-                       len -= hypertas_len +1;
-                       hypertas+= hypertas_len +1;
+                       if (!firmware_features_table[i].name ||
+                           strcmp(firmware_features_table[i].name, s))
+                               continue;
+
+                       /* we have a match */
+                       ppc64_firmware_features |=
+                               firmware_features_table[i].val;
+                       break;
                }
        }
 
+out:
        of_node_put(dn);
-no_rtas:
-
        DBG(" <- fw_feature_init()\n");
 }