PCI Hotplug: cpqphp: refactor cpqhp_probe
Apply DeMorgan's theorem: if ((pdev->revision > 2) || (vendor_id == PCI_VENDOR_ID_INTEL)) turns into if ((pdev->revision <= 2) && (vendor_id != PCI_VENDOR_ID_INTEL)) Now we can bail out early from the function if the controller is not supported. This allows us to un-indent the remainder of the function quite a bit and make it much more readable. Fix up some extra braces, and un-indent the 'case' labels in the switch statement as per CodingStyle. No functional change. Signed-off-by: Alex Chiang <achiang@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
committed by
Jesse Barnes
parent
04225fe7e6
commit
867556fe74
@@ -887,216 +887,204 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
* For Intel, each SSID bit identifies a PHP capability.
|
* For Intel, each SSID bit identifies a PHP capability.
|
||||||
* Also Intel HPC's may have RID=0.
|
* Also Intel HPC's may have RID=0.
|
||||||
*/
|
*/
|
||||||
if ((pdev->revision > 2) || (vendor_id == PCI_VENDOR_ID_INTEL)) {
|
if ((pdev->revision <= 2) && (vendor_id != PCI_VENDOR_ID_INTEL)) {
|
||||||
/* TODO: This code can be made to support non-Compaq or Intel
|
|
||||||
* subsystem IDs
|
|
||||||
*/
|
|
||||||
rc = pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vid);
|
|
||||||
if (rc) {
|
|
||||||
err("%s : pci_read_config_word failed\n", __func__);
|
|
||||||
goto err_disable_device;
|
|
||||||
}
|
|
||||||
dbg("Subsystem Vendor ID: %x\n", subsystem_vid);
|
|
||||||
if ((subsystem_vid != PCI_VENDOR_ID_COMPAQ) && (subsystem_vid != PCI_VENDOR_ID_INTEL)) {
|
|
||||||
err(msg_HPC_non_compaq_or_intel);
|
|
||||||
rc = -ENODEV;
|
|
||||||
goto err_disable_device;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctrl = kzalloc(sizeof(struct controller), GFP_KERNEL);
|
|
||||||
if (!ctrl) {
|
|
||||||
err("%s : out of memory\n", __func__);
|
|
||||||
rc = -ENOMEM;
|
|
||||||
goto err_disable_device;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &subsystem_deviceid);
|
|
||||||
if (rc) {
|
|
||||||
err("%s : pci_read_config_word failed\n", __func__);
|
|
||||||
goto err_free_ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
info("Hot Plug Subsystem Device ID: %x\n", subsystem_deviceid);
|
|
||||||
|
|
||||||
/* Set Vendor ID, so it can be accessed later from other
|
|
||||||
* functions
|
|
||||||
*/
|
|
||||||
ctrl->vendor_id = vendor_id;
|
|
||||||
|
|
||||||
switch (subsystem_vid) {
|
|
||||||
case PCI_VENDOR_ID_COMPAQ:
|
|
||||||
if (pdev->revision >= 0x13) { /* CIOBX */
|
|
||||||
ctrl->push_flag = 1;
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
ctrl->push_button = 1;
|
|
||||||
ctrl->pci_config_space = 1;
|
|
||||||
ctrl->defeature_PHP = 1;
|
|
||||||
ctrl->pcix_support = 1;
|
|
||||||
ctrl->pcix_speed_capability = 1;
|
|
||||||
pci_read_config_byte(pdev, 0x41, &bus_cap);
|
|
||||||
if (bus_cap & 0x80) {
|
|
||||||
dbg("bus max supports 133MHz PCI-X\n");
|
|
||||||
ctrl->speed_capability = PCI_SPEED_133MHz_PCIX;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (bus_cap & 0x40) {
|
|
||||||
dbg("bus max supports 100MHz PCI-X\n");
|
|
||||||
ctrl->speed_capability = PCI_SPEED_100MHz_PCIX;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (bus_cap & 20) {
|
|
||||||
dbg("bus max supports 66MHz PCI-X\n");
|
|
||||||
ctrl->speed_capability = PCI_SPEED_66MHz_PCIX;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (bus_cap & 10) {
|
|
||||||
dbg("bus max supports 66MHz PCI\n");
|
|
||||||
ctrl->speed_capability = PCI_SPEED_66MHz;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (subsystem_deviceid) {
|
|
||||||
case PCI_SUB_HPC_ID:
|
|
||||||
/* Original 6500/7000 implementation */
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
ctrl->speed_capability = PCI_SPEED_33MHz;
|
|
||||||
ctrl->push_button = 0;
|
|
||||||
ctrl->pci_config_space = 1;
|
|
||||||
ctrl->defeature_PHP = 1;
|
|
||||||
ctrl->pcix_support = 0;
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
break;
|
|
||||||
case PCI_SUB_HPC_ID2:
|
|
||||||
/* First Pushbutton implementation */
|
|
||||||
ctrl->push_flag = 1;
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
ctrl->speed_capability = PCI_SPEED_33MHz;
|
|
||||||
ctrl->push_button = 1;
|
|
||||||
ctrl->pci_config_space = 1;
|
|
||||||
ctrl->defeature_PHP = 1;
|
|
||||||
ctrl->pcix_support = 0;
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
break;
|
|
||||||
case PCI_SUB_HPC_ID_INTC:
|
|
||||||
/* Third party (6500/7000) */
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
ctrl->speed_capability = PCI_SPEED_33MHz;
|
|
||||||
ctrl->push_button = 0;
|
|
||||||
ctrl->pci_config_space = 1;
|
|
||||||
ctrl->defeature_PHP = 1;
|
|
||||||
ctrl->pcix_support = 0;
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
break;
|
|
||||||
case PCI_SUB_HPC_ID3:
|
|
||||||
/* First 66 Mhz implementation */
|
|
||||||
ctrl->push_flag = 1;
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
ctrl->speed_capability = PCI_SPEED_66MHz;
|
|
||||||
ctrl->push_button = 1;
|
|
||||||
ctrl->pci_config_space = 1;
|
|
||||||
ctrl->defeature_PHP = 1;
|
|
||||||
ctrl->pcix_support = 0;
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
break;
|
|
||||||
case PCI_SUB_HPC_ID4:
|
|
||||||
/* First PCI-X implementation, 100MHz */
|
|
||||||
ctrl->push_flag = 1;
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
ctrl->speed_capability = PCI_SPEED_100MHz_PCIX;
|
|
||||||
ctrl->push_button = 1;
|
|
||||||
ctrl->pci_config_space = 1;
|
|
||||||
ctrl->defeature_PHP = 1;
|
|
||||||
ctrl->pcix_support = 1;
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
err(msg_HPC_not_supported);
|
|
||||||
rc = -ENODEV;
|
|
||||||
goto err_free_ctrl;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCI_VENDOR_ID_INTEL:
|
|
||||||
/* Check for speed capability (0=33, 1=66) */
|
|
||||||
if (subsystem_deviceid & 0x0001) {
|
|
||||||
ctrl->speed_capability = PCI_SPEED_66MHz;
|
|
||||||
} else {
|
|
||||||
ctrl->speed_capability = PCI_SPEED_33MHz;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for push button */
|
|
||||||
if (subsystem_deviceid & 0x0002) {
|
|
||||||
/* no push button */
|
|
||||||
ctrl->push_button = 0;
|
|
||||||
} else {
|
|
||||||
/* push button supported */
|
|
||||||
ctrl->push_button = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for slot switch type (0=mechanical, 1=not mechanical) */
|
|
||||||
if (subsystem_deviceid & 0x0004) {
|
|
||||||
/* no switch */
|
|
||||||
ctrl->slot_switch_type = 0;
|
|
||||||
} else {
|
|
||||||
/* switch */
|
|
||||||
ctrl->slot_switch_type = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PHP Status (0=De-feature PHP, 1=Normal operation) */
|
|
||||||
if (subsystem_deviceid & 0x0008) {
|
|
||||||
ctrl->defeature_PHP = 1; /* PHP supported */
|
|
||||||
} else {
|
|
||||||
ctrl->defeature_PHP = 0; /* PHP not supported */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Alternate Base Address Register Interface (0=not supported, 1=supported) */
|
|
||||||
if (subsystem_deviceid & 0x0010) {
|
|
||||||
ctrl->alternate_base_address = 1; /* supported */
|
|
||||||
} else {
|
|
||||||
ctrl->alternate_base_address = 0; /* not supported */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PCI Config Space Index (0=not supported, 1=supported) */
|
|
||||||
if (subsystem_deviceid & 0x0020) {
|
|
||||||
ctrl->pci_config_space = 1; /* supported */
|
|
||||||
} else {
|
|
||||||
ctrl->pci_config_space = 0; /* not supported */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PCI-X support */
|
|
||||||
if (subsystem_deviceid & 0x0080) {
|
|
||||||
/* PCI-X capable */
|
|
||||||
ctrl->pcix_support = 1;
|
|
||||||
/* Frequency of operation in PCI-X mode */
|
|
||||||
if (subsystem_deviceid & 0x0040) {
|
|
||||||
/* 133MHz PCI-X if bit 7 is 1 */
|
|
||||||
ctrl->pcix_speed_capability = 1;
|
|
||||||
} else {
|
|
||||||
/* 100MHz PCI-X if bit 7 is 1 and bit 0 is 0, */
|
|
||||||
/* 66MHz PCI-X if bit 7 is 1 and bit 0 is 1 */
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* Conventional PCI */
|
|
||||||
ctrl->pcix_support = 0;
|
|
||||||
ctrl->pcix_speed_capability = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
err(msg_HPC_not_supported);
|
|
||||||
rc = -ENODEV;
|
|
||||||
goto err_free_ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
err(msg_HPC_not_supported);
|
err(msg_HPC_not_supported);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: This code can be made to support non-Compaq or Intel
|
||||||
|
* subsystem IDs
|
||||||
|
*/
|
||||||
|
rc = pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vid);
|
||||||
|
if (rc) {
|
||||||
|
err("%s : pci_read_config_word failed\n", __func__);
|
||||||
|
goto err_disable_device;
|
||||||
|
}
|
||||||
|
dbg("Subsystem Vendor ID: %x\n", subsystem_vid);
|
||||||
|
if ((subsystem_vid != PCI_VENDOR_ID_COMPAQ) && (subsystem_vid != PCI_VENDOR_ID_INTEL)) {
|
||||||
|
err(msg_HPC_non_compaq_or_intel);
|
||||||
|
rc = -ENODEV;
|
||||||
|
goto err_disable_device;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctrl = kzalloc(sizeof(struct controller), GFP_KERNEL);
|
||||||
|
if (!ctrl) {
|
||||||
|
err("%s : out of memory\n", __func__);
|
||||||
|
rc = -ENOMEM;
|
||||||
|
goto err_disable_device;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &subsystem_deviceid);
|
||||||
|
if (rc) {
|
||||||
|
err("%s : pci_read_config_word failed\n", __func__);
|
||||||
|
goto err_free_ctrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
info("Hot Plug Subsystem Device ID: %x\n", subsystem_deviceid);
|
||||||
|
|
||||||
|
/* Set Vendor ID, so it can be accessed later from other
|
||||||
|
* functions
|
||||||
|
*/
|
||||||
|
ctrl->vendor_id = vendor_id;
|
||||||
|
|
||||||
|
switch (subsystem_vid) {
|
||||||
|
case PCI_VENDOR_ID_COMPAQ:
|
||||||
|
if (pdev->revision >= 0x13) { /* CIOBX */
|
||||||
|
ctrl->push_flag = 1;
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
ctrl->push_button = 1;
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
ctrl->defeature_PHP = 1;
|
||||||
|
ctrl->pcix_support = 1;
|
||||||
|
ctrl->pcix_speed_capability = 1;
|
||||||
|
pci_read_config_byte(pdev, 0x41, &bus_cap);
|
||||||
|
if (bus_cap & 0x80) {
|
||||||
|
dbg("bus max supports 133MHz PCI-X\n");
|
||||||
|
ctrl->speed_capability = PCI_SPEED_133MHz_PCIX;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (bus_cap & 0x40) {
|
||||||
|
dbg("bus max supports 100MHz PCI-X\n");
|
||||||
|
ctrl->speed_capability = PCI_SPEED_100MHz_PCIX;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (bus_cap & 20) {
|
||||||
|
dbg("bus max supports 66MHz PCI-X\n");
|
||||||
|
ctrl->speed_capability = PCI_SPEED_66MHz_PCIX;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (bus_cap & 10) {
|
||||||
|
dbg("bus max supports 66MHz PCI\n");
|
||||||
|
ctrl->speed_capability = PCI_SPEED_66MHz;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (subsystem_deviceid) {
|
||||||
|
case PCI_SUB_HPC_ID:
|
||||||
|
/* Original 6500/7000 implementation */
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
ctrl->speed_capability = PCI_SPEED_33MHz;
|
||||||
|
ctrl->push_button = 0;
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
ctrl->defeature_PHP = 1;
|
||||||
|
ctrl->pcix_support = 0;
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
break;
|
||||||
|
case PCI_SUB_HPC_ID2:
|
||||||
|
/* First Pushbutton implementation */
|
||||||
|
ctrl->push_flag = 1;
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
ctrl->speed_capability = PCI_SPEED_33MHz;
|
||||||
|
ctrl->push_button = 1;
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
ctrl->defeature_PHP = 1;
|
||||||
|
ctrl->pcix_support = 0;
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
break;
|
||||||
|
case PCI_SUB_HPC_ID_INTC:
|
||||||
|
/* Third party (6500/7000) */
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
ctrl->speed_capability = PCI_SPEED_33MHz;
|
||||||
|
ctrl->push_button = 0;
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
ctrl->defeature_PHP = 1;
|
||||||
|
ctrl->pcix_support = 0;
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
break;
|
||||||
|
case PCI_SUB_HPC_ID3:
|
||||||
|
/* First 66 Mhz implementation */
|
||||||
|
ctrl->push_flag = 1;
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
ctrl->speed_capability = PCI_SPEED_66MHz;
|
||||||
|
ctrl->push_button = 1;
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
ctrl->defeature_PHP = 1;
|
||||||
|
ctrl->pcix_support = 0;
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
break;
|
||||||
|
case PCI_SUB_HPC_ID4:
|
||||||
|
/* First PCI-X implementation, 100MHz */
|
||||||
|
ctrl->push_flag = 1;
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
ctrl->speed_capability = PCI_SPEED_100MHz_PCIX;
|
||||||
|
ctrl->push_button = 1;
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
ctrl->defeature_PHP = 1;
|
||||||
|
ctrl->pcix_support = 1;
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
err(msg_HPC_not_supported);
|
||||||
|
rc = -ENODEV;
|
||||||
|
goto err_free_ctrl;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PCI_VENDOR_ID_INTEL:
|
||||||
|
/* Check for speed capability (0=33, 1=66) */
|
||||||
|
if (subsystem_deviceid & 0x0001)
|
||||||
|
ctrl->speed_capability = PCI_SPEED_66MHz;
|
||||||
|
else
|
||||||
|
ctrl->speed_capability = PCI_SPEED_33MHz;
|
||||||
|
|
||||||
|
/* Check for push button */
|
||||||
|
if (subsystem_deviceid & 0x0002)
|
||||||
|
ctrl->push_button = 0;
|
||||||
|
else
|
||||||
|
ctrl->push_button = 1;
|
||||||
|
|
||||||
|
/* Check for slot switch type (0=mechanical, 1=not mechanical) */
|
||||||
|
if (subsystem_deviceid & 0x0004)
|
||||||
|
ctrl->slot_switch_type = 0;
|
||||||
|
else
|
||||||
|
ctrl->slot_switch_type = 1;
|
||||||
|
|
||||||
|
/* PHP Status (0=De-feature PHP, 1=Normal operation) */
|
||||||
|
if (subsystem_deviceid & 0x0008)
|
||||||
|
ctrl->defeature_PHP = 1; /* PHP supported */
|
||||||
|
else
|
||||||
|
ctrl->defeature_PHP = 0; /* PHP not supported */
|
||||||
|
|
||||||
|
/* Alternate Base Address Register Interface
|
||||||
|
* (0=not supported, 1=supported)
|
||||||
|
*/
|
||||||
|
if (subsystem_deviceid & 0x0010)
|
||||||
|
ctrl->alternate_base_address = 1;
|
||||||
|
else
|
||||||
|
ctrl->alternate_base_address = 0;
|
||||||
|
|
||||||
|
/* PCI Config Space Index (0=not supported, 1=supported) */
|
||||||
|
if (subsystem_deviceid & 0x0020)
|
||||||
|
ctrl->pci_config_space = 1;
|
||||||
|
else
|
||||||
|
ctrl->pci_config_space = 0;
|
||||||
|
|
||||||
|
/* PCI-X support */
|
||||||
|
if (subsystem_deviceid & 0x0080) {
|
||||||
|
ctrl->pcix_support = 1;
|
||||||
|
if (subsystem_deviceid & 0x0040)
|
||||||
|
/* 133MHz PCI-X if bit 7 is 1 */
|
||||||
|
ctrl->pcix_speed_capability = 1;
|
||||||
|
else
|
||||||
|
/* 100MHz PCI-X if bit 7 is 1 and bit 0 is 0, */
|
||||||
|
/* 66MHz PCI-X if bit 7 is 1 and bit 0 is 1 */
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
} else {
|
||||||
|
/* Conventional PCI */
|
||||||
|
ctrl->pcix_support = 0;
|
||||||
|
ctrl->pcix_speed_capability = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
err(msg_HPC_not_supported);
|
||||||
|
rc = -ENODEV;
|
||||||
|
goto err_free_ctrl;
|
||||||
|
}
|
||||||
|
|
||||||
/* Tell the user that we found one. */
|
/* Tell the user that we found one. */
|
||||||
info("Initializing the PCI hot plug controller residing on PCI bus %d\n",
|
info("Initializing the PCI hot plug controller residing on PCI bus %d\n",
|
||||||
pdev->bus->number);
|
pdev->bus->number);
|
||||||
@@ -1164,7 +1152,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
goto err_free_mem_region;
|
goto err_free_mem_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for 66Mhz operation
|
/* Check for 66Mhz operation */
|
||||||
ctrl->speed = get_controller_speed(ctrl);
|
ctrl->speed = get_controller_speed(ctrl);
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user