PCI Hotplug: cpqphp: refactor cpqphp_save_slot_config
authorAlex Chiang <achiang@hp.com>
Tue, 31 Mar 2009 15:23:46 +0000 (09:23 -0600)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Thu, 11 Jun 2009 19:04:12 +0000 (12:04 -0700)
Check for an empty slot, and return early if so.

This allows us to un-indent the rest of the function by one level.

Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/hotplug/cpqphp_pci.c

index 2e96bae..1f1c90d 100644 (file)
@@ -494,7 +494,7 @@ int cpqhp_save_slot_config (struct controller *ctrl, struct pci_func * new_slot)
        u8 secondary_bus;
        int sub_bus;
        int max_functions;
-       int function;
+       int function = 0;
        int cloop = 0;
        int stop_it;
 
@@ -503,65 +503,58 @@ int cpqhp_save_slot_config (struct controller *ctrl, struct pci_func * new_slot)
        ctrl->pci_bus->number = new_slot->bus;
        pci_bus_read_config_dword (ctrl->pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_VENDOR_ID, &ID);
 
-       if (ID != 0xFFFFFFFF) {   /*  device in slot */
-               pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(new_slot->device, 0), 0x0B, &class_code);
-               pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_HEADER_TYPE, &header_type);
-
-               if (header_type & 0x80) /* Multi-function device */
-                       max_functions = 8;
-               else
-                       max_functions = 1;
-
-               function = 0;
+       if (ID == 0xFFFFFFFF)
+               return 2;
 
-               do {
-                       if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) {
-                               /*  Recurse the subordinate bus */
-                               pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), PCI_SECONDARY_BUS, &secondary_bus);
+       pci_bus_read_config_byte(ctrl->pci_bus, PCI_DEVFN(new_slot->device, 0), 0x0B, &class_code);
+       pci_bus_read_config_byte(ctrl->pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_HEADER_TYPE, &header_type);
 
-                               sub_bus = (int) secondary_bus;
+       if (header_type & 0x80) /* Multi-function device */
+               max_functions = 8;
+       else
+               max_functions = 1;
 
-                               /* Save the config headers for the secondary
-                                * bus.
-                                */
-                               rc = cpqhp_save_config(ctrl, sub_bus, 0);
-                               if (rc)
-                                       return(rc);
-                               ctrl->pci_bus->number = new_slot->bus;
+       while (function < max_functions) {
+               if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) {
+                       /*  Recurse the subordinate bus */
+                       pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), PCI_SECONDARY_BUS, &secondary_bus);
 
-                       }       /* End of IF */
+                       sub_bus = (int) secondary_bus;
 
-                       new_slot->status = 0;
+                       /* Save the config headers for the secondary
+                        * bus.
+                        */
+                       rc = cpqhp_save_config(ctrl, sub_bus, 0);
+                       if (rc)
+                               return(rc);
+                       ctrl->pci_bus->number = new_slot->bus;
 
-                       for (cloop = 0; cloop < 0x20; cloop++) {
-                               pci_bus_read_config_dword (ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), cloop << 2, (u32 *) & (new_slot-> config_space [cloop]));
-                       }
+               }
 
-                       function++;
+               new_slot->status = 0;
 
-                       stop_it = 0;
+               for (cloop = 0; cloop < 0x20; cloop++)
+                       pci_bus_read_config_dword(ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), cloop << 2, (u32 *) & (new_slot-> config_space [cloop]));
 
-                       /* this loop skips to the next present function
-                        * reading in the Class Code and the Header type.
-                        */
-                       while ((function < max_functions) && (!stop_it)) {
-                               pci_bus_read_config_dword (ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), PCI_VENDOR_ID, &ID);
+               function++;
 
-                               if (ID == 0xFFFFFFFF) {  /* nothing there. */
-                                       function++;
-                               } else {  /* Something there */
-                                       pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), 0x0B, &class_code);
+               stop_it = 0;
 
-                                       pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), PCI_HEADER_TYPE, &header_type);
+               /* this loop skips to the next present function
+                * reading in the Class Code and the Header type.
+                */
+               while ((function < max_functions) && (!stop_it)) {
+                       pci_bus_read_config_dword(ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), PCI_VENDOR_ID, &ID);
 
-                                       stop_it++;
-                               }
+                       if (ID == 0xFFFFFFFF)
+                               function++;
+                       else {
+                               pci_bus_read_config_byte(ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), 0x0B, &class_code);
+                               pci_bus_read_config_byte(ctrl->pci_bus, PCI_DEVFN(new_slot->device, function), PCI_HEADER_TYPE, &header_type);
+                               stop_it++;
                        }
+               }
 
-               } while (function < max_functions);
-       }                       /* End of IF (device in slot?) */
-       else {
-               return 2;
        }
 
        return 0;