diff options
| -rw-r--r-- | drivers/pci/hotplug/pciehp.h | 42 | ||||
| -rw-r--r-- | drivers/pci/hotplug/pciehp_core.c | 26 | ||||
| -rw-r--r-- | drivers/pci/hotplug/pciehp_ctrl.c | 75 | ||||
| -rw-r--r-- | drivers/pci/hotplug/pciehp_hpc.c | 60 | ||||
| -rw-r--r-- | drivers/pci/hotplug/pciehp_pci.c | 2 |
5 files changed, 87 insertions, 118 deletions
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index b23f8ca03d82..b7054cb885cf 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h | |||
| @@ -75,7 +75,6 @@ struct slot { | |||
| 75 | u8 state; | 75 | u8 state; |
| 76 | u32 number; | 76 | u32 number; |
| 77 | struct controller *ctrl; | 77 | struct controller *ctrl; |
| 78 | struct hpc_ops *hpc_ops; | ||
| 79 | struct hotplug_slot *hotplug_slot; | 78 | struct hotplug_slot *hotplug_slot; |
| 80 | struct delayed_work work; /* work for button event */ | 79 | struct delayed_work work; /* work for button event */ |
| 81 | struct mutex lock; | 80 | struct mutex lock; |
| @@ -91,7 +90,6 @@ struct controller { | |||
| 91 | struct mutex ctrl_lock; /* controller lock */ | 90 | struct mutex ctrl_lock; /* controller lock */ |
| 92 | struct pcie_device *pcie; /* PCI Express port service */ | 91 | struct pcie_device *pcie; /* PCI Express port service */ |
| 93 | struct slot *slot; | 92 | struct slot *slot; |
| 94 | struct hpc_ops *hpc_ops; | ||
| 95 | wait_queue_head_t queue; /* sleep & wake process */ | 93 | wait_queue_head_t queue; /* sleep & wake process */ |
| 96 | u32 slot_cap; | 94 | u32 slot_cap; |
| 97 | u8 cap_base; | 95 | u8 cap_base; |
| @@ -154,7 +152,7 @@ struct controller { | |||
| 154 | extern int pciehp_sysfs_enable_slot(struct slot *slot); | 152 | extern int pciehp_sysfs_enable_slot(struct slot *slot); |
| 155 | extern int pciehp_sysfs_disable_slot(struct slot *slot); | 153 | extern int pciehp_sysfs_disable_slot(struct slot *slot); |
| 156 | extern u8 pciehp_handle_attention_button(struct slot *p_slot); | 154 | extern u8 pciehp_handle_attention_button(struct slot *p_slot); |
| 157 | extern u8 pciehp_handle_switch_change(struct slot *p_slot); | 155 | extern u8 pciehp_handle_switch_change(struct slot *p_slot); |
| 158 | extern u8 pciehp_handle_presence_change(struct slot *p_slot); | 156 | extern u8 pciehp_handle_presence_change(struct slot *p_slot); |
| 159 | extern u8 pciehp_handle_power_fault(struct slot *p_slot); | 157 | extern u8 pciehp_handle_power_fault(struct slot *p_slot); |
| 160 | extern int pciehp_configure_device(struct slot *p_slot); | 158 | extern int pciehp_configure_device(struct slot *p_slot); |
| @@ -165,32 +163,30 @@ int pcie_init_notification(struct controller *ctrl); | |||
| 165 | int pciehp_enable_slot(struct slot *p_slot); | 163 | int pciehp_enable_slot(struct slot *p_slot); |
| 166 | int pciehp_disable_slot(struct slot *p_slot); | 164 | int pciehp_disable_slot(struct slot *p_slot); |
| 167 | int pcie_enable_notification(struct controller *ctrl); | 165 | int pcie_enable_notification(struct controller *ctrl); |
| 166 | int pciehp_power_on_slot(struct slot *slot); | ||
| 167 | int pciehp_power_off_slot(struct slot *slot); | ||
| 168 | int pciehp_get_power_status(struct slot *slot, u8 *status); | ||
| 169 | int pciehp_get_attention_status(struct slot *slot, u8 *status); | ||
| 170 | |||
| 171 | int pciehp_set_attention_status(struct slot *slot, u8 status); | ||
| 172 | int pciehp_get_latch_status(struct slot *slot, u8 *status); | ||
| 173 | int pciehp_get_adapter_status(struct slot *slot, u8 *status); | ||
| 174 | int pciehp_get_max_link_speed(struct slot *slot, enum pci_bus_speed *speed); | ||
| 175 | int pciehp_get_max_link_width(struct slot *slot, enum pcie_link_width *val); | ||
| 176 | int pciehp_get_cur_link_speed(struct slot *slot, enum pci_bus_speed *speed); | ||
| 177 | int pciehp_get_cur_link_width(struct slot *slot, enum pcie_link_width *val); | ||
| 178 | int pciehp_query_power_fault(struct slot *slot); | ||
| 179 | void pciehp_green_led_on(struct slot *slot); | ||
| 180 | void pciehp_green_led_off(struct slot *slot); | ||
| 181 | void pciehp_green_led_blink(struct slot *slot); | ||
| 182 | int pciehp_check_link_status(struct controller *ctrl); | ||
| 183 | void pciehp_release_ctrl(struct controller *ctrl); | ||
| 168 | 184 | ||
| 169 | static inline const char *slot_name(struct slot *slot) | 185 | static inline const char *slot_name(struct slot *slot) |
| 170 | { | 186 | { |
| 171 | return hotplug_slot_name(slot->hotplug_slot); | 187 | return hotplug_slot_name(slot->hotplug_slot); |
| 172 | } | 188 | } |
| 173 | 189 | ||
| 174 | struct hpc_ops { | ||
| 175 | int (*power_on_slot)(struct slot *slot); | ||
| 176 | int (*power_off_slot)(struct slot *slot); | ||
| 177 | int (*get_power_status)(struct slot *slot, u8 *status); | ||
| 178 | int (*get_attention_status)(struct slot *slot, u8 *status); | ||
| 179 | int (*set_attention_status)(struct slot *slot, u8 status); | ||
| 180 | int (*get_latch_status)(struct slot *slot, u8 *status); | ||
| 181 | int (*get_adapter_status)(struct slot *slot, u8 *status); | ||
| 182 | int (*get_max_bus_speed)(struct slot *slot, enum pci_bus_speed *speed); | ||
| 183 | int (*get_cur_bus_speed)(struct slot *slot, enum pci_bus_speed *speed); | ||
| 184 | int (*get_max_lnk_width)(struct slot *slot, enum pcie_link_width *val); | ||
| 185 | int (*get_cur_lnk_width)(struct slot *slot, enum pcie_link_width *val); | ||
| 186 | int (*query_power_fault)(struct slot *slot); | ||
| 187 | void (*green_led_on)(struct slot *slot); | ||
| 188 | void (*green_led_off)(struct slot *slot); | ||
| 189 | void (*green_led_blink)(struct slot *slot); | ||
| 190 | void (*release_ctlr)(struct controller *ctrl); | ||
| 191 | int (*check_lnk_status)(struct controller *ctrl); | ||
| 192 | }; | ||
| 193 | |||
| 194 | #ifdef CONFIG_ACPI | 190 | #ifdef CONFIG_ACPI |
| 195 | #include <acpi/acpi.h> | 191 | #include <acpi/acpi.h> |
| 196 | #include <acpi/acpi_bus.h> | 192 | #include <acpi/acpi_bus.h> |
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c index f82dc036ab34..2c6d94fcf9aa 100644 --- a/drivers/pci/hotplug/pciehp_core.c +++ b/drivers/pci/hotplug/pciehp_core.c | |||
| @@ -163,7 +163,7 @@ static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status) | |||
| 163 | hotplug_slot->info->attention_status = status; | 163 | hotplug_slot->info->attention_status = status; |
| 164 | 164 | ||
| 165 | if (ATTN_LED(slot->ctrl)) | 165 | if (ATTN_LED(slot->ctrl)) |
| 166 | slot->hpc_ops->set_attention_status(slot, status); | 166 | pciehp_set_attention_status(slot, status); |
| 167 | 167 | ||
| 168 | return 0; | 168 | return 0; |
| 169 | } | 169 | } |
| @@ -198,7 +198,7 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value) | |||
| 198 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", | 198 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", |
| 199 | __func__, slot_name(slot)); | 199 | __func__, slot_name(slot)); |
| 200 | 200 | ||
| 201 | retval = slot->hpc_ops->get_power_status(slot, value); | 201 | retval = pciehp_get_power_status(slot, value); |
| 202 | if (retval < 0) | 202 | if (retval < 0) |
| 203 | *value = hotplug_slot->info->power_status; | 203 | *value = hotplug_slot->info->power_status; |
| 204 | 204 | ||
| @@ -213,7 +213,7 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value) | |||
| 213 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", | 213 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", |
| 214 | __func__, slot_name(slot)); | 214 | __func__, slot_name(slot)); |
| 215 | 215 | ||
| 216 | retval = slot->hpc_ops->get_attention_status(slot, value); | 216 | retval = pciehp_get_attention_status(slot, value); |
| 217 | if (retval < 0) | 217 | if (retval < 0) |
| 218 | *value = hotplug_slot->info->attention_status; | 218 | *value = hotplug_slot->info->attention_status; |
| 219 | 219 | ||
| @@ -228,7 +228,7 @@ static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value) | |||
| 228 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", | 228 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", |
| 229 | __func__, slot_name(slot)); | 229 | __func__, slot_name(slot)); |
| 230 | 230 | ||
| 231 | retval = slot->hpc_ops->get_latch_status(slot, value); | 231 | retval = pciehp_get_latch_status(slot, value); |
| 232 | if (retval < 0) | 232 | if (retval < 0) |
| 233 | *value = hotplug_slot->info->latch_status; | 233 | *value = hotplug_slot->info->latch_status; |
| 234 | 234 | ||
| @@ -243,7 +243,7 @@ static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value) | |||
| 243 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", | 243 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", |
| 244 | __func__, slot_name(slot)); | 244 | __func__, slot_name(slot)); |
| 245 | 245 | ||
| 246 | retval = slot->hpc_ops->get_adapter_status(slot, value); | 246 | retval = pciehp_get_adapter_status(slot, value); |
| 247 | if (retval < 0) | 247 | if (retval < 0) |
| 248 | *value = hotplug_slot->info->adapter_status; | 248 | *value = hotplug_slot->info->adapter_status; |
| 249 | 249 | ||
| @@ -259,7 +259,7 @@ static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, | |||
| 259 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", | 259 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", |
| 260 | __func__, slot_name(slot)); | 260 | __func__, slot_name(slot)); |
| 261 | 261 | ||
| 262 | retval = slot->hpc_ops->get_max_bus_speed(slot, value); | 262 | retval = pciehp_get_max_link_speed(slot, value); |
| 263 | if (retval < 0) | 263 | if (retval < 0) |
| 264 | *value = PCI_SPEED_UNKNOWN; | 264 | *value = PCI_SPEED_UNKNOWN; |
| 265 | 265 | ||
| @@ -274,7 +274,7 @@ static int get_cur_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_spe | |||
| 274 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", | 274 | ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n", |
| 275 | __func__, slot_name(slot)); | 275 | __func__, slot_name(slot)); |
| 276 | 276 | ||
| 277 | retval = slot->hpc_ops->get_cur_bus_speed(slot, value); | 277 | retval = pciehp_get_cur_link_speed(slot, value); |
| 278 | if (retval < 0) | 278 | if (retval < 0) |
| 279 | *value = PCI_SPEED_UNKNOWN; | 279 | *value = PCI_SPEED_UNKNOWN; |
| 280 | 280 | ||
| @@ -323,14 +323,14 @@ static int pciehp_probe(struct pcie_device *dev) | |||
| 323 | 323 | ||
| 324 | /* Check if slot is occupied */ | 324 | /* Check if slot is occupied */ |
| 325 | slot = ctrl->slot; | 325 | slot = ctrl->slot; |
| 326 | slot->hpc_ops->get_adapter_status(slot, &value); | 326 | pciehp_get_adapter_status(slot, &value); |
| 327 | if (value) { | 327 | if (value) { |
| 328 | if (pciehp_force) | 328 | if (pciehp_force) |
| 329 | pciehp_enable_slot(slot); | 329 | pciehp_enable_slot(slot); |
| 330 | } else { | 330 | } else { |
| 331 | /* Power off slot if not occupied */ | 331 | /* Power off slot if not occupied */ |
| 332 | if (POWER_CTRL(ctrl)) { | 332 | if (POWER_CTRL(ctrl)) { |
| 333 | rc = slot->hpc_ops->power_off_slot(slot); | 333 | rc = pciehp_power_off_slot(slot); |
| 334 | if (rc) | 334 | if (rc) |
| 335 | goto err_out_free_ctrl_slot; | 335 | goto err_out_free_ctrl_slot; |
| 336 | } | 336 | } |
| @@ -341,17 +341,17 @@ static int pciehp_probe(struct pcie_device *dev) | |||
| 341 | err_out_free_ctrl_slot: | 341 | err_out_free_ctrl_slot: |
| 342 | cleanup_slot(ctrl); | 342 | cleanup_slot(ctrl); |
| 343 | err_out_release_ctlr: | 343 | err_out_release_ctlr: |
| 344 | ctrl->hpc_ops->release_ctlr(ctrl); | 344 | pciehp_release_ctrl(ctrl); |
| 345 | err_out_none: | 345 | err_out_none: |
| 346 | return -ENODEV; | 346 | return -ENODEV; |
| 347 | } | 347 | } |
| 348 | 348 | ||
| 349 | static void pciehp_remove (struct pcie_device *dev) | 349 | static void pciehp_remove(struct pcie_device *dev) |
| 350 | { | 350 | { |
| 351 | struct controller *ctrl = get_service_data(dev); | 351 | struct controller *ctrl = get_service_data(dev); |
| 352 | 352 | ||
| 353 | cleanup_slot(ctrl); | 353 | cleanup_slot(ctrl); |
| 354 | ctrl->hpc_ops->release_ctlr(ctrl); | 354 | pciehp_release_ctrl(ctrl); |
| 355 | } | 355 | } |
| 356 | 356 | ||
| 357 | #ifdef CONFIG_PM | 357 | #ifdef CONFIG_PM |
| @@ -375,7 +375,7 @@ static int pciehp_resume (struct pcie_device *dev) | |||
| 375 | slot = ctrl->slot; | 375 | slot = ctrl->slot; |
| 376 | 376 | ||
| 377 | /* Check if slot is occupied */ | 377 | /* Check if slot is occupied */ |
| 378 | slot->hpc_ops->get_adapter_status(slot, &status); | 378 | pciehp_get_adapter_status(slot, &status); |
| 379 | if (status) | 379 | if (status) |
| 380 | pciehp_enable_slot(slot); | 380 | pciehp_enable_slot(slot); |
| 381 | else | 381 | else |
diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c index c3e5ca57af7c..81c322de137d 100644 --- a/drivers/pci/hotplug/pciehp_ctrl.c +++ b/drivers/pci/hotplug/pciehp_ctrl.c | |||
| @@ -82,7 +82,7 @@ u8 pciehp_handle_switch_change(struct slot *p_slot) | |||
| 82 | /* Switch Change */ | 82 | /* Switch Change */ |
| 83 | ctrl_dbg(ctrl, "Switch interrupt received\n"); | 83 | ctrl_dbg(ctrl, "Switch interrupt received\n"); |
| 84 | 84 | ||
| 85 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 85 | pciehp_get_latch_status(p_slot, &getstatus); |
| 86 | if (getstatus) { | 86 | if (getstatus) { |
| 87 | /* | 87 | /* |
| 88 | * Switch opened | 88 | * Switch opened |
| @@ -114,7 +114,7 @@ u8 pciehp_handle_presence_change(struct slot *p_slot) | |||
| 114 | /* Switch is open, assume a presence change | 114 | /* Switch is open, assume a presence change |
| 115 | * Save the presence state | 115 | * Save the presence state |
| 116 | */ | 116 | */ |
| 117 | p_slot->hpc_ops->get_adapter_status(p_slot, &presence_save); | 117 | pciehp_get_adapter_status(p_slot, &presence_save); |
| 118 | if (presence_save) { | 118 | if (presence_save) { |
| 119 | /* | 119 | /* |
| 120 | * Card Present | 120 | * Card Present |
| @@ -143,7 +143,7 @@ u8 pciehp_handle_power_fault(struct slot *p_slot) | |||
| 143 | /* power fault */ | 143 | /* power fault */ |
| 144 | ctrl_dbg(ctrl, "Power fault interrupt received\n"); | 144 | ctrl_dbg(ctrl, "Power fault interrupt received\n"); |
| 145 | 145 | ||
| 146 | if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { | 146 | if (!pciehp_query_power_fault(p_slot)) { |
| 147 | /* | 147 | /* |
| 148 | * power fault Cleared | 148 | * power fault Cleared |
| 149 | */ | 149 | */ |
| @@ -172,7 +172,7 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) | |||
| 172 | { | 172 | { |
| 173 | /* turn off slot, turn on Amber LED, turn off Green LED if supported*/ | 173 | /* turn off slot, turn on Amber LED, turn off Green LED if supported*/ |
| 174 | if (POWER_CTRL(ctrl)) { | 174 | if (POWER_CTRL(ctrl)) { |
| 175 | if (pslot->hpc_ops->power_off_slot(pslot)) { | 175 | if (pciehp_power_off_slot(pslot)) { |
| 176 | ctrl_err(ctrl, | 176 | ctrl_err(ctrl, |
| 177 | "Issue of Slot Power Off command failed\n"); | 177 | "Issue of Slot Power Off command failed\n"); |
| 178 | return; | 178 | return; |
| @@ -186,10 +186,10 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) | |||
| 186 | } | 186 | } |
| 187 | 187 | ||
| 188 | if (PWR_LED(ctrl)) | 188 | if (PWR_LED(ctrl)) |
| 189 | pslot->hpc_ops->green_led_off(pslot); | 189 | pciehp_green_led_off(pslot); |
| 190 | 190 | ||
| 191 | if (ATTN_LED(ctrl)) { | 191 | if (ATTN_LED(ctrl)) { |
| 192 | if (pslot->hpc_ops->set_attention_status(pslot, 1)) { | 192 | if (pciehp_set_attention_status(pslot, 1)) { |
| 193 | ctrl_err(ctrl, | 193 | ctrl_err(ctrl, |
| 194 | "Issue of Set Attention Led command failed\n"); | 194 | "Issue of Set Attention Led command failed\n"); |
| 195 | return; | 195 | return; |
| @@ -212,16 +212,16 @@ static int board_added(struct slot *p_slot) | |||
| 212 | 212 | ||
| 213 | if (POWER_CTRL(ctrl)) { | 213 | if (POWER_CTRL(ctrl)) { |
| 214 | /* Power on slot */ | 214 | /* Power on slot */ |
| 215 | retval = p_slot->hpc_ops->power_on_slot(p_slot); | 215 | retval = pciehp_power_on_slot(p_slot); |
| 216 | if (retval) | 216 | if (retval) |
| 217 | return retval; | 217 | return retval; |
| 218 | } | 218 | } |
| 219 | 219 | ||
| 220 | if (PWR_LED(ctrl)) | 220 | if (PWR_LED(ctrl)) |
| 221 | p_slot->hpc_ops->green_led_blink(p_slot); | 221 | pciehp_green_led_blink(p_slot); |
| 222 | 222 | ||
| 223 | /* Check link training status */ | 223 | /* Check link training status */ |
| 224 | retval = p_slot->hpc_ops->check_lnk_status(ctrl); | 224 | retval = pciehp_check_link_status(ctrl); |
| 225 | if (retval) { | 225 | if (retval) { |
| 226 | ctrl_err(ctrl, "Failed to check link status\n"); | 226 | ctrl_err(ctrl, "Failed to check link status\n"); |
| 227 | set_slot_off(ctrl, p_slot); | 227 | set_slot_off(ctrl, p_slot); |
| @@ -229,7 +229,7 @@ static int board_added(struct slot *p_slot) | |||
| 229 | } | 229 | } |
| 230 | 230 | ||
| 231 | /* Check for a power fault */ | 231 | /* Check for a power fault */ |
| 232 | if (p_slot->hpc_ops->query_power_fault(p_slot)) { | 232 | if (pciehp_query_power_fault(p_slot)) { |
| 233 | ctrl_dbg(ctrl, "Power fault detected\n"); | 233 | ctrl_dbg(ctrl, "Power fault detected\n"); |
| 234 | retval = POWER_FAILURE; | 234 | retval = POWER_FAILURE; |
| 235 | goto err_exit; | 235 | goto err_exit; |
| @@ -243,7 +243,7 @@ static int board_added(struct slot *p_slot) | |||
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | if (PWR_LED(ctrl)) | 245 | if (PWR_LED(ctrl)) |
| 246 | p_slot->hpc_ops->green_led_on(p_slot); | 246 | pciehp_green_led_on(p_slot); |
| 247 | 247 | ||
| 248 | return 0; | 248 | return 0; |
| 249 | 249 | ||
| @@ -267,7 +267,7 @@ static int remove_board(struct slot *p_slot) | |||
| 267 | 267 | ||
| 268 | if (POWER_CTRL(ctrl)) { | 268 | if (POWER_CTRL(ctrl)) { |
| 269 | /* power off slot */ | 269 | /* power off slot */ |
| 270 | retval = p_slot->hpc_ops->power_off_slot(p_slot); | 270 | retval = pciehp_power_off_slot(p_slot); |
| 271 | if (retval) { | 271 | if (retval) { |
| 272 | ctrl_err(ctrl, | 272 | ctrl_err(ctrl, |
| 273 | "Issue of Slot Disable command failed\n"); | 273 | "Issue of Slot Disable command failed\n"); |
| @@ -281,9 +281,9 @@ static int remove_board(struct slot *p_slot) | |||
| 281 | msleep(1000); | 281 | msleep(1000); |
| 282 | } | 282 | } |
| 283 | 283 | ||
| 284 | /* turn off Green LED */ | ||
| 284 | if (PWR_LED(ctrl)) | 285 | if (PWR_LED(ctrl)) |
| 285 | /* turn off Green LED */ | 286 | pciehp_green_led_off(p_slot); |
| 286 | p_slot->hpc_ops->green_led_off(p_slot); | ||
| 287 | 287 | ||
| 288 | return 0; | 288 | return 0; |
| 289 | } | 289 | } |
| @@ -320,9 +320,8 @@ static void pciehp_power_thread(struct work_struct *work) | |||
| 320 | break; | 320 | break; |
| 321 | case POWERON_STATE: | 321 | case POWERON_STATE: |
| 322 | mutex_unlock(&p_slot->lock); | 322 | mutex_unlock(&p_slot->lock); |
| 323 | if (pciehp_enable_slot(p_slot) && | 323 | if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl)) |
| 324 | PWR_LED(p_slot->ctrl)) | 324 | pciehp_green_led_off(p_slot); |
| 325 | p_slot->hpc_ops->green_led_off(p_slot); | ||
| 326 | mutex_lock(&p_slot->lock); | 325 | mutex_lock(&p_slot->lock); |
| 327 | p_slot->state = STATIC_STATE; | 326 | p_slot->state = STATIC_STATE; |
| 328 | break; | 327 | break; |
| @@ -373,10 +372,10 @@ static int update_slot_info(struct slot *slot) | |||
| 373 | if (!info) | 372 | if (!info) |
| 374 | return -ENOMEM; | 373 | return -ENOMEM; |
| 375 | 374 | ||
| 376 | slot->hpc_ops->get_power_status(slot, &(info->power_status)); | 375 | pciehp_get_power_status(slot, &info->power_status); |
| 377 | slot->hpc_ops->get_attention_status(slot, &(info->attention_status)); | 376 | pciehp_get_attention_status(slot, &info->attention_status); |
| 378 | slot->hpc_ops->get_latch_status(slot, &(info->latch_status)); | 377 | pciehp_get_latch_status(slot, &info->latch_status); |
| 379 | slot->hpc_ops->get_adapter_status(slot, &(info->adapter_status)); | 378 | pciehp_get_adapter_status(slot, &info->adapter_status); |
| 380 | 379 | ||
| 381 | result = pci_hp_change_slot_info(slot->hotplug_slot, info); | 380 | result = pci_hp_change_slot_info(slot->hotplug_slot, info); |
| 382 | kfree (info); | 381 | kfree (info); |
| @@ -393,7 +392,7 @@ static void handle_button_press_event(struct slot *p_slot) | |||
| 393 | 392 | ||
| 394 | switch (p_slot->state) { | 393 | switch (p_slot->state) { |
| 395 | case STATIC_STATE: | 394 | case STATIC_STATE: |
| 396 | p_slot->hpc_ops->get_power_status(p_slot, &getstatus); | 395 | pciehp_get_power_status(p_slot, &getstatus); |
| 397 | if (getstatus) { | 396 | if (getstatus) { |
| 398 | p_slot->state = BLINKINGOFF_STATE; | 397 | p_slot->state = BLINKINGOFF_STATE; |
| 399 | ctrl_info(ctrl, | 398 | ctrl_info(ctrl, |
| @@ -407,9 +406,9 @@ static void handle_button_press_event(struct slot *p_slot) | |||
| 407 | } | 406 | } |
| 408 | /* blink green LED and turn off amber */ | 407 | /* blink green LED and turn off amber */ |
| 409 | if (PWR_LED(ctrl)) | 408 | if (PWR_LED(ctrl)) |
| 410 | p_slot->hpc_ops->green_led_blink(p_slot); | 409 | pciehp_green_led_blink(p_slot); |
| 411 | if (ATTN_LED(ctrl)) | 410 | if (ATTN_LED(ctrl)) |
| 412 | p_slot->hpc_ops->set_attention_status(p_slot, 0); | 411 | pciehp_set_attention_status(p_slot, 0); |
| 413 | 412 | ||
| 414 | schedule_delayed_work(&p_slot->work, 5*HZ); | 413 | schedule_delayed_work(&p_slot->work, 5*HZ); |
| 415 | break; | 414 | break; |
| @@ -424,13 +423,13 @@ static void handle_button_press_event(struct slot *p_slot) | |||
| 424 | cancel_delayed_work(&p_slot->work); | 423 | cancel_delayed_work(&p_slot->work); |
| 425 | if (p_slot->state == BLINKINGOFF_STATE) { | 424 | if (p_slot->state == BLINKINGOFF_STATE) { |
| 426 | if (PWR_LED(ctrl)) | 425 | if (PWR_LED(ctrl)) |
| 427 | p_slot->hpc_ops->green_led_on(p_slot); | 426 | pciehp_green_led_on(p_slot); |
| 428 | } else { | 427 | } else { |
| 429 | if (PWR_LED(ctrl)) | 428 | if (PWR_LED(ctrl)) |
| 430 | p_slot->hpc_ops->green_led_off(p_slot); | 429 | pciehp_green_led_off(p_slot); |
| 431 | } | 430 | } |
| 432 | if (ATTN_LED(ctrl)) | 431 | if (ATTN_LED(ctrl)) |
| 433 | p_slot->hpc_ops->set_attention_status(p_slot, 0); | 432 | pciehp_set_attention_status(p_slot, 0); |
| 434 | ctrl_info(ctrl, "PCI slot #%s - action canceled " | 433 | ctrl_info(ctrl, "PCI slot #%s - action canceled " |
| 435 | "due to button press\n", slot_name(p_slot)); | 434 | "due to button press\n", slot_name(p_slot)); |
| 436 | p_slot->state = STATIC_STATE; | 435 | p_slot->state = STATIC_STATE; |
| @@ -468,7 +467,7 @@ static void handle_surprise_event(struct slot *p_slot) | |||
| 468 | info->p_slot = p_slot; | 467 | info->p_slot = p_slot; |
| 469 | INIT_WORK(&info->work, pciehp_power_thread); | 468 | INIT_WORK(&info->work, pciehp_power_thread); |
| 470 | 469 | ||
| 471 | p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); | 470 | pciehp_get_adapter_status(p_slot, &getstatus); |
| 472 | if (!getstatus) | 471 | if (!getstatus) |
| 473 | p_slot->state = POWEROFF_STATE; | 472 | p_slot->state = POWEROFF_STATE; |
| 474 | else | 473 | else |
| @@ -492,9 +491,9 @@ static void interrupt_event_handler(struct work_struct *work) | |||
| 492 | if (!POWER_CTRL(ctrl)) | 491 | if (!POWER_CTRL(ctrl)) |
| 493 | break; | 492 | break; |
| 494 | if (ATTN_LED(ctrl)) | 493 | if (ATTN_LED(ctrl)) |
| 495 | p_slot->hpc_ops->set_attention_status(p_slot, 1); | 494 | pciehp_set_attention_status(p_slot, 1); |
| 496 | if (PWR_LED(ctrl)) | 495 | if (PWR_LED(ctrl)) |
| 497 | p_slot->hpc_ops->green_led_off(p_slot); | 496 | pciehp_green_led_off(p_slot); |
| 498 | break; | 497 | break; |
| 499 | case INT_PRESENCE_ON: | 498 | case INT_PRESENCE_ON: |
| 500 | case INT_PRESENCE_OFF: | 499 | case INT_PRESENCE_OFF: |
| @@ -519,13 +518,13 @@ int pciehp_enable_slot(struct slot *p_slot) | |||
| 519 | int rc; | 518 | int rc; |
| 520 | struct controller *ctrl = p_slot->ctrl; | 519 | struct controller *ctrl = p_slot->ctrl; |
| 521 | 520 | ||
| 522 | rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); | 521 | rc = pciehp_get_adapter_status(p_slot, &getstatus); |
| 523 | if (rc || !getstatus) { | 522 | if (rc || !getstatus) { |
| 524 | ctrl_info(ctrl, "No adapter on slot(%s)\n", slot_name(p_slot)); | 523 | ctrl_info(ctrl, "No adapter on slot(%s)\n", slot_name(p_slot)); |
| 525 | return -ENODEV; | 524 | return -ENODEV; |
| 526 | } | 525 | } |
| 527 | if (MRL_SENS(p_slot->ctrl)) { | 526 | if (MRL_SENS(p_slot->ctrl)) { |
| 528 | rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 527 | rc = pciehp_get_latch_status(p_slot, &getstatus); |
| 529 | if (rc || getstatus) { | 528 | if (rc || getstatus) { |
| 530 | ctrl_info(ctrl, "Latch open on slot(%s)\n", | 529 | ctrl_info(ctrl, "Latch open on slot(%s)\n", |
| 531 | slot_name(p_slot)); | 530 | slot_name(p_slot)); |
| @@ -534,7 +533,7 @@ int pciehp_enable_slot(struct slot *p_slot) | |||
| 534 | } | 533 | } |
| 535 | 534 | ||
| 536 | if (POWER_CTRL(p_slot->ctrl)) { | 535 | if (POWER_CTRL(p_slot->ctrl)) { |
| 537 | rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); | 536 | rc = pciehp_get_power_status(p_slot, &getstatus); |
| 538 | if (rc || getstatus) { | 537 | if (rc || getstatus) { |
| 539 | ctrl_info(ctrl, "Already enabled on slot(%s)\n", | 538 | ctrl_info(ctrl, "Already enabled on slot(%s)\n", |
| 540 | slot_name(p_slot)); | 539 | slot_name(p_slot)); |
| @@ -542,11 +541,11 @@ int pciehp_enable_slot(struct slot *p_slot) | |||
| 542 | } | 541 | } |
| 543 | } | 542 | } |
| 544 | 543 | ||
| 545 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 544 | pciehp_get_latch_status(p_slot, &getstatus); |
| 546 | 545 | ||
| 547 | rc = board_added(p_slot); | 546 | rc = board_added(p_slot); |
| 548 | if (rc) { | 547 | if (rc) { |
| 549 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 548 | pciehp_get_latch_status(p_slot, &getstatus); |
| 550 | } | 549 | } |
| 551 | 550 | ||
| 552 | update_slot_info(p_slot); | 551 | update_slot_info(p_slot); |
| @@ -565,7 +564,7 @@ int pciehp_disable_slot(struct slot *p_slot) | |||
| 565 | return 1; | 564 | return 1; |
| 566 | 565 | ||
| 567 | if (!HP_SUPR_RM(p_slot->ctrl)) { | 566 | if (!HP_SUPR_RM(p_slot->ctrl)) { |
| 568 | ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); | 567 | ret = pciehp_get_adapter_status(p_slot, &getstatus); |
| 569 | if (ret || !getstatus) { | 568 | if (ret || !getstatus) { |
| 570 | ctrl_info(ctrl, "No adapter on slot(%s)\n", | 569 | ctrl_info(ctrl, "No adapter on slot(%s)\n", |
| 571 | slot_name(p_slot)); | 570 | slot_name(p_slot)); |
| @@ -574,7 +573,7 @@ int pciehp_disable_slot(struct slot *p_slot) | |||
| 574 | } | 573 | } |
| 575 | 574 | ||
| 576 | if (MRL_SENS(p_slot->ctrl)) { | 575 | if (MRL_SENS(p_slot->ctrl)) { |
| 577 | ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 576 | ret = pciehp_get_latch_status(p_slot, &getstatus); |
| 578 | if (ret || getstatus) { | 577 | if (ret || getstatus) { |
| 579 | ctrl_info(ctrl, "Latch open on slot(%s)\n", | 578 | ctrl_info(ctrl, "Latch open on slot(%s)\n", |
| 580 | slot_name(p_slot)); | 579 | slot_name(p_slot)); |
| @@ -583,7 +582,7 @@ int pciehp_disable_slot(struct slot *p_slot) | |||
| 583 | } | 582 | } |
| 584 | 583 | ||
| 585 | if (POWER_CTRL(p_slot->ctrl)) { | 584 | if (POWER_CTRL(p_slot->ctrl)) { |
| 586 | ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); | 585 | ret = pciehp_get_power_status(p_slot, &getstatus); |
| 587 | if (ret || !getstatus) { | 586 | if (ret || !getstatus) { |
| 588 | ctrl_info(ctrl, "Already disabled on slot(%s)\n", | 587 | ctrl_info(ctrl, "Already disabled on slot(%s)\n", |
| 589 | slot_name(p_slot)); | 588 | slot_name(p_slot)); |
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 3867d9c47ebd..8c34e84fc0c7 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -266,7 +266,7 @@ static void pcie_wait_link_active(struct controller *ctrl) | |||
| 266 | ctrl_dbg(ctrl, "Data Link Layer Link Active not set in 1000 msec\n"); | 266 | ctrl_dbg(ctrl, "Data Link Layer Link Active not set in 1000 msec\n"); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | static int hpc_check_lnk_status(struct controller *ctrl) | 269 | int pciehp_check_link_status(struct controller *ctrl) |
| 270 | { | 270 | { |
| 271 | u16 lnk_status; | 271 | u16 lnk_status; |
| 272 | int retval = 0; | 272 | int retval = 0; |
| @@ -305,7 +305,7 @@ static int hpc_check_lnk_status(struct controller *ctrl) | |||
| 305 | return retval; | 305 | return retval; |
| 306 | } | 306 | } |
| 307 | 307 | ||
| 308 | static int hpc_get_attention_status(struct slot *slot, u8 *status) | 308 | int pciehp_get_attention_status(struct slot *slot, u8 *status) |
| 309 | { | 309 | { |
| 310 | struct controller *ctrl = slot->ctrl; | 310 | struct controller *ctrl = slot->ctrl; |
| 311 | u16 slot_ctrl; | 311 | u16 slot_ctrl; |
| @@ -344,7 +344,7 @@ static int hpc_get_attention_status(struct slot *slot, u8 *status) | |||
| 344 | return 0; | 344 | return 0; |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | static int hpc_get_power_status(struct slot *slot, u8 *status) | 347 | int pciehp_get_power_status(struct slot *slot, u8 *status) |
| 348 | { | 348 | { |
| 349 | struct controller *ctrl = slot->ctrl; | 349 | struct controller *ctrl = slot->ctrl; |
| 350 | u16 slot_ctrl; | 350 | u16 slot_ctrl; |
| @@ -376,7 +376,7 @@ static int hpc_get_power_status(struct slot *slot, u8 *status) | |||
| 376 | return retval; | 376 | return retval; |
| 377 | } | 377 | } |
| 378 | 378 | ||
| 379 | static int hpc_get_latch_status(struct slot *slot, u8 *status) | 379 | int pciehp_get_latch_status(struct slot *slot, u8 *status) |
| 380 | { | 380 | { |
| 381 | struct controller *ctrl = slot->ctrl; | 381 | struct controller *ctrl = slot->ctrl; |
| 382 | u16 slot_status; | 382 | u16 slot_status; |
| @@ -392,7 +392,7 @@ static int hpc_get_latch_status(struct slot *slot, u8 *status) | |||
| 392 | return 0; | 392 | return 0; |
| 393 | } | 393 | } |
| 394 | 394 | ||
| 395 | static int hpc_get_adapter_status(struct slot *slot, u8 *status) | 395 | int pciehp_get_adapter_status(struct slot *slot, u8 *status) |
| 396 | { | 396 | { |
| 397 | struct controller *ctrl = slot->ctrl; | 397 | struct controller *ctrl = slot->ctrl; |
| 398 | u16 slot_status; | 398 | u16 slot_status; |
| @@ -408,7 +408,7 @@ static int hpc_get_adapter_status(struct slot *slot, u8 *status) | |||
| 408 | return 0; | 408 | return 0; |
| 409 | } | 409 | } |
| 410 | 410 | ||
| 411 | static int hpc_query_power_fault(struct slot *slot) | 411 | int pciehp_query_power_fault(struct slot *slot) |
| 412 | { | 412 | { |
| 413 | struct controller *ctrl = slot->ctrl; | 413 | struct controller *ctrl = slot->ctrl; |
| 414 | u16 slot_status; | 414 | u16 slot_status; |
| @@ -422,7 +422,7 @@ static int hpc_query_power_fault(struct slot *slot) | |||
| 422 | return !!(slot_status & PCI_EXP_SLTSTA_PFD); | 422 | return !!(slot_status & PCI_EXP_SLTSTA_PFD); |
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | static int hpc_set_attention_status(struct slot *slot, u8 value) | 425 | int pciehp_set_attention_status(struct slot *slot, u8 value) |
| 426 | { | 426 | { |
| 427 | struct controller *ctrl = slot->ctrl; | 427 | struct controller *ctrl = slot->ctrl; |
| 428 | u16 slot_cmd; | 428 | u16 slot_cmd; |
| @@ -450,7 +450,7 @@ static int hpc_set_attention_status(struct slot *slot, u8 value) | |||
| 450 | return rc; | 450 | return rc; |
| 451 | } | 451 | } |
| 452 | 452 | ||
| 453 | static void hpc_set_green_led_on(struct slot *slot) | 453 | void pciehp_green_led_on(struct slot *slot) |
| 454 | { | 454 | { |
| 455 | struct controller *ctrl = slot->ctrl; | 455 | struct controller *ctrl = slot->ctrl; |
| 456 | u16 slot_cmd; | 456 | u16 slot_cmd; |
| @@ -463,7 +463,7 @@ static void hpc_set_green_led_on(struct slot *slot) | |||
| 463 | __func__, ctrl->cap_base + PCI_EXP_SLTCTL, slot_cmd); | 463 | __func__, ctrl->cap_base + PCI_EXP_SLTCTL, slot_cmd); |
| 464 | } | 464 | } |
| 465 | 465 | ||
| 466 | static void hpc_set_green_led_off(struct slot *slot) | 466 | void pciehp_green_led_off(struct slot *slot) |
| 467 | { | 467 | { |
| 468 | struct controller *ctrl = slot->ctrl; | 468 | struct controller *ctrl = slot->ctrl; |
| 469 | u16 slot_cmd; | 469 | u16 slot_cmd; |
| @@ -476,7 +476,7 @@ static void hpc_set_green_led_off(struct slot *slot) | |||
| 476 | __func__, ctrl->cap_base + PCI_EXP_SLTCTL, slot_cmd); | 476 | __func__, ctrl->cap_base + PCI_EXP_SLTCTL, slot_cmd); |
| 477 | } | 477 | } |
| 478 | 478 | ||
| 479 | static void hpc_set_green_led_blink(struct slot *slot) | 479 | void pciehp_green_led_blink(struct slot *slot) |
| 480 | { | 480 | { |
| 481 | struct controller *ctrl = slot->ctrl; | 481 | struct controller *ctrl = slot->ctrl; |
| 482 | u16 slot_cmd; | 482 | u16 slot_cmd; |
| @@ -489,7 +489,7 @@ static void hpc_set_green_led_blink(struct slot *slot) | |||
| 489 | __func__, ctrl->cap_base + PCI_EXP_SLTCTL, slot_cmd); | 489 | __func__, ctrl->cap_base + PCI_EXP_SLTCTL, slot_cmd); |
| 490 | } | 490 | } |
| 491 | 491 | ||
| 492 | static int hpc_power_on_slot(struct slot * slot) | 492 | int pciehp_power_on_slot(struct slot * slot) |
| 493 | { | 493 | { |
| 494 | struct controller *ctrl = slot->ctrl; | 494 | struct controller *ctrl = slot->ctrl; |
| 495 | u16 slot_cmd; | 495 | u16 slot_cmd; |
| @@ -568,7 +568,7 @@ static inline void pcie_unmask_bad_dllp(struct controller *ctrl) | |||
| 568 | pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg); | 568 | pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg); |
| 569 | } | 569 | } |
| 570 | 570 | ||
| 571 | static int hpc_power_off_slot(struct slot * slot) | 571 | int pciehp_power_off_slot(struct slot * slot) |
| 572 | { | 572 | { |
| 573 | struct controller *ctrl = slot->ctrl; | 573 | struct controller *ctrl = slot->ctrl; |
| 574 | u16 slot_cmd; | 574 | u16 slot_cmd; |
| @@ -672,7 +672,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 672 | return IRQ_HANDLED; | 672 | return IRQ_HANDLED; |
| 673 | } | 673 | } |
| 674 | 674 | ||
| 675 | static int hpc_get_max_lnk_speed(struct slot *slot, enum pci_bus_speed *value) | 675 | int pciehp_get_max_link_speed(struct slot *slot, enum pci_bus_speed *value) |
| 676 | { | 676 | { |
| 677 | struct controller *ctrl = slot->ctrl; | 677 | struct controller *ctrl = slot->ctrl; |
| 678 | enum pcie_link_speed lnk_speed; | 678 | enum pcie_link_speed lnk_speed; |
| @@ -703,7 +703,7 @@ static int hpc_get_max_lnk_speed(struct slot *slot, enum pci_bus_speed *value) | |||
| 703 | return retval; | 703 | return retval; |
| 704 | } | 704 | } |
| 705 | 705 | ||
| 706 | static int hpc_get_max_lnk_width(struct slot *slot, | 706 | int pciehp_get_max_lnk_width(struct slot *slot, |
| 707 | enum pcie_link_width *value) | 707 | enum pcie_link_width *value) |
| 708 | { | 708 | { |
| 709 | struct controller *ctrl = slot->ctrl; | 709 | struct controller *ctrl = slot->ctrl; |
| @@ -753,7 +753,7 @@ static int hpc_get_max_lnk_width(struct slot *slot, | |||
| 753 | return retval; | 753 | return retval; |
| 754 | } | 754 | } |
| 755 | 755 | ||
| 756 | static int hpc_get_cur_lnk_speed(struct slot *slot, enum pci_bus_speed *value) | 756 | int pciehp_get_cur_link_speed(struct slot *slot, enum pci_bus_speed *value) |
| 757 | { | 757 | { |
| 758 | struct controller *ctrl = slot->ctrl; | 758 | struct controller *ctrl = slot->ctrl; |
| 759 | enum pcie_link_speed lnk_speed = PCI_SPEED_UNKNOWN; | 759 | enum pcie_link_speed lnk_speed = PCI_SPEED_UNKNOWN; |
| @@ -785,7 +785,7 @@ static int hpc_get_cur_lnk_speed(struct slot *slot, enum pci_bus_speed *value) | |||
| 785 | return retval; | 785 | return retval; |
| 786 | } | 786 | } |
| 787 | 787 | ||
| 788 | static int hpc_get_cur_lnk_width(struct slot *slot, | 788 | int pciehp_get_cur_lnk_width(struct slot *slot, |
| 789 | enum pcie_link_width *value) | 789 | enum pcie_link_width *value) |
| 790 | { | 790 | { |
| 791 | struct controller *ctrl = slot->ctrl; | 791 | struct controller *ctrl = slot->ctrl; |
| @@ -836,30 +836,6 @@ static int hpc_get_cur_lnk_width(struct slot *slot, | |||
| 836 | return retval; | 836 | return retval; |
| 837 | } | 837 | } |
| 838 | 838 | ||
| 839 | static void pcie_release_ctrl(struct controller *ctrl); | ||
| 840 | static struct hpc_ops pciehp_hpc_ops = { | ||
| 841 | .power_on_slot = hpc_power_on_slot, | ||
| 842 | .power_off_slot = hpc_power_off_slot, | ||
| 843 | .set_attention_status = hpc_set_attention_status, | ||
| 844 | .get_power_status = hpc_get_power_status, | ||
| 845 | .get_attention_status = hpc_get_attention_status, | ||
| 846 | .get_latch_status = hpc_get_latch_status, | ||
| 847 | .get_adapter_status = hpc_get_adapter_status, | ||
| 848 | |||
| 849 | .get_max_bus_speed = hpc_get_max_lnk_speed, | ||
| 850 | .get_cur_bus_speed = hpc_get_cur_lnk_speed, | ||
| 851 | .get_max_lnk_width = hpc_get_max_lnk_width, | ||
| 852 | .get_cur_lnk_width = hpc_get_cur_lnk_width, | ||
| 853 | |||
| 854 | .query_power_fault = hpc_query_power_fault, | ||
| 855 | .green_led_on = hpc_set_green_led_on, | ||
| 856 | .green_led_off = hpc_set_green_led_off, | ||
| 857 | .green_led_blink = hpc_set_green_led_blink, | ||
| 858 | |||
| 859 | .release_ctlr = pcie_release_ctrl, | ||
| 860 | .check_lnk_status = hpc_check_lnk_status, | ||
| 861 | }; | ||
| 862 | |||
| 863 | int pcie_enable_notification(struct controller *ctrl) | 839 | int pcie_enable_notification(struct controller *ctrl) |
| 864 | { | 840 | { |
| 865 | u16 cmd, mask; | 841 | u16 cmd, mask; |
| @@ -925,7 +901,6 @@ static int pcie_init_slot(struct controller *ctrl) | |||
| 925 | return -ENOMEM; | 901 | return -ENOMEM; |
| 926 | 902 | ||
| 927 | slot->ctrl = ctrl; | 903 | slot->ctrl = ctrl; |
| 928 | slot->hpc_ops = ctrl->hpc_ops; | ||
| 929 | slot->number = PSN(ctrl); | 904 | slot->number = PSN(ctrl); |
| 930 | mutex_init(&slot->lock); | 905 | mutex_init(&slot->lock); |
| 931 | INIT_DELAYED_WORK(&slot->work, pciehp_queue_pushbutton_work); | 906 | INIT_DELAYED_WORK(&slot->work, pciehp_queue_pushbutton_work); |
| @@ -1015,7 +990,6 @@ struct controller *pcie_init(struct pcie_device *dev) | |||
| 1015 | } | 990 | } |
| 1016 | 991 | ||
| 1017 | ctrl->slot_cap = slot_cap; | 992 | ctrl->slot_cap = slot_cap; |
| 1018 | ctrl->hpc_ops = &pciehp_hpc_ops; | ||
| 1019 | mutex_init(&ctrl->ctrl_lock); | 993 | mutex_init(&ctrl->ctrl_lock); |
| 1020 | init_waitqueue_head(&ctrl->queue); | 994 | init_waitqueue_head(&ctrl->queue); |
| 1021 | dbg_ctrl(ctrl); | 995 | dbg_ctrl(ctrl); |
| @@ -1071,7 +1045,7 @@ abort: | |||
| 1071 | return NULL; | 1045 | return NULL; |
| 1072 | } | 1046 | } |
| 1073 | 1047 | ||
| 1074 | void pcie_release_ctrl(struct controller *ctrl) | 1048 | void pciehp_release_ctrl(struct controller *ctrl) |
| 1075 | { | 1049 | { |
| 1076 | pcie_shutdown_notification(ctrl); | 1050 | pcie_shutdown_notification(ctrl); |
| 1077 | pcie_cleanup_slot(ctrl); | 1051 | pcie_cleanup_slot(ctrl); |
diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c index 002a72d9ad71..21733108adde 100644 --- a/drivers/pci/hotplug/pciehp_pci.c +++ b/drivers/pci/hotplug/pciehp_pci.c | |||
| @@ -117,7 +117,7 @@ int pciehp_unconfigure_device(struct slot *p_slot) | |||
| 117 | 117 | ||
| 118 | ctrl_dbg(ctrl, "%s: domain:bus:dev = %04x:%02x:00\n", | 118 | ctrl_dbg(ctrl, "%s: domain:bus:dev = %04x:%02x:00\n", |
| 119 | __func__, pci_domain_nr(parent), parent->number); | 119 | __func__, pci_domain_nr(parent), parent->number); |
| 120 | ret = p_slot->hpc_ops->get_adapter_status(p_slot, &presence); | 120 | ret = pciehp_get_adapter_status(p_slot, &presence); |
| 121 | if (ret) | 121 | if (ret) |
| 122 | presence = 0; | 122 | presence = 0; |
| 123 | 123 | ||
