Loading drivers/pci/hotplug/pciehp.h +22 −22 Original line number Diff line number Diff line Loading @@ -32,8 +32,6 @@ #include <linux/types.h> #include <linux/pci.h> #include <linux/delay.h> #include <asm/semaphore.h> #include <asm/io.h> #include <linux/pcieport_if.h> #include "pci_hotplug.h" Loading Loading @@ -62,13 +60,7 @@ struct slot { u8 device; u16 status; u32 number; u8 is_a_board; u8 configured; u8 state; u8 switch_save; u8 presence_save; u32 capabilities; u16 reserved2; struct timer_list task_event; u8 hp_slot; struct controller *ctrl; Loading @@ -82,27 +74,42 @@ struct event_info { u8 hp_slot; }; typedef u8(*php_intr_callback_t) (u8 hp_slot, void *instance_id); struct php_ctlr_state_s { struct php_ctlr_state_s *pnext; struct pci_dev *pci_dev; unsigned int irq; unsigned long flags; /* spinlock's */ u32 slot_device_offset; u32 num_slots; struct timer_list int_poll_timer; /* Added for poll event */ php_intr_callback_t attention_button_callback; php_intr_callback_t switch_change_callback; php_intr_callback_t presence_change_callback; php_intr_callback_t power_fault_callback; void *callback_instance_id; struct ctrl_reg *creg; /* Ptr to controller register space */ }; #define MAX_EVENTS 10 struct controller { struct controller *next; struct semaphore crit_sect; /* critical section semaphore */ void *hpc_ctlr_handle; /* HPC controller handle */ struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ int num_slots; /* Number of slots on ctlr */ int slot_num_inc; /* 1 or -1 */ struct pci_dev *pci_dev; struct pci_bus *pci_bus; struct event_info event_queue[10]; struct event_info event_queue[MAX_EVENTS]; struct slot *slot; struct hpc_ops *hpc_ops; wait_queue_head_t queue; /* sleep & wake process */ u8 next_event; u8 seg; u8 bus; u8 device; u8 function; u8 rev; u8 slot_device_offset; u8 add_support; enum pci_bus_speed speed; u32 first_slot; /* First physical slot number */ /* PCIE only has 1 slot */ u8 slot_bus; /* Bus where the slots handled by this controller sit */ u8 ctrlcap; Loading Loading @@ -250,14 +257,7 @@ enum php_ctlr_type { ACPI }; typedef u8(*php_intr_callback_t) (unsigned int change_id, void *instance_id); int pcie_init(struct controller *ctrl, struct pcie_device *dev, php_intr_callback_t attention_button_callback, php_intr_callback_t switch_change_callback, php_intr_callback_t presence_change_callback, php_intr_callback_t power_fault_callback); int pcie_init(struct controller *ctrl, struct pcie_device *dev); /* This has no meaning for PCI Express, as there is only 1 slot per port */ int pcie_get_ctlr_slot_config(struct controller *ctrl, Loading drivers/pci/hotplug/pciehp_core.c +1 −13 Original line number Diff line number Diff line Loading @@ -27,17 +27,11 @@ * */ #include <linux/config.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/proc_fs.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/pci.h> #include <linux/init.h> #include <asm/uaccess.h> #include "pciehp.h" #include <linux/interrupt.h> Loading Loading @@ -381,11 +375,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ pdev = dev->port; ctrl->pci_dev = pdev; rc = pcie_init(ctrl, dev, (php_intr_callback_t) pciehp_handle_attention_button, (php_intr_callback_t) pciehp_handle_switch_change, (php_intr_callback_t) pciehp_handle_presence_change, (php_intr_callback_t) pciehp_handle_power_fault); rc = pcie_init(ctrl, dev); if (rc) { dbg("%s: controller initialization failed\n", PCIE_MODULE_NAME); goto err_out_free_ctrl; Loading Loading @@ -421,8 +411,6 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ first_device_num = ctrl->slot_device_offset; num_ctlr_slots = ctrl->num_slots; ctrl->add_support = 1; /* Setup the slot information structures */ rc = init_slots(ctrl); if (rc) { Loading drivers/pci/hotplug/pciehp_ctrl.c +13 −43 Original line number Diff line number Diff line Loading @@ -27,15 +27,9 @@ * */ #include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/interrupt.h> #include <linux/delay.h> #include <linux/wait.h> #include <linux/smp_lock.h> #include <linux/pci.h> #include "../pci.h" Loading Loading @@ -64,10 +58,9 @@ u8 pciehp_handle_attention_button(u8 hp_slot, void *inst_id) taskInfo = &(ctrl->event_queue[ctrl->next_event]); p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; Loading Loading @@ -118,12 +111,11 @@ u8 pciehp_handle_switch_change(u8 hp_slot, void *inst_id) * what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); if (getstatus) { Loading @@ -131,14 +123,12 @@ u8 pciehp_handle_switch_change(u8 hp_slot, void *inst_id) * Switch opened */ info("Latch open on Slot(%d)\n", ctrl->first_slot + hp_slot); p_slot->switch_save = 0; taskInfo->event_type = INT_SWITCH_OPEN; } else { /* * Switch closed */ info("Latch close on Slot(%d)\n", ctrl->first_slot + hp_slot); p_slot->switch_save = 0x10; taskInfo->event_type = INT_SWITCH_CLOSE; } Loading @@ -152,7 +142,7 @@ u8 pciehp_handle_presence_change(u8 hp_slot, void *inst_id) { struct controller *ctrl = (struct controller *) inst_id; struct slot *p_slot; u8 rc = 0; u8 presence_save, rc = 0; struct event_info *taskInfo; /* Presence Change */ Loading @@ -162,7 +152,7 @@ u8 pciehp_handle_presence_change(u8 hp_slot, void *inst_id) * what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; Loading @@ -171,8 +161,8 @@ u8 pciehp_handle_presence_change(u8 hp_slot, void *inst_id) /* Switch is open, assume a presence change * Save the presence state */ p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); if (p_slot->presence_save) { p_slot->hpc_ops->get_adapter_status(p_slot, &presence_save); if (presence_save) { /* * Card Present */ Loading Loading @@ -206,7 +196,7 @@ u8 pciehp_handle_power_fault(u8 hp_slot, void *inst_id) * what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; Loading Loading @@ -279,11 +269,10 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) * Configures board * */ static u32 board_added(struct slot *p_slot) static int board_added(struct slot *p_slot) { u8 hp_slot; u32 temp_register = 0xFFFFFFFF; u32 rc = 0; int rc = 0; struct controller *ctrl = p_slot->ctrl; hp_slot = p_slot->device - ctrl->slot_device_offset; Loading Loading @@ -333,8 +322,6 @@ static u32 board_added(struct slot *p_slot) /* Check for a power fault */ if (p_slot->status == 0xFF) { /* power fault occurred, but it was benign */ temp_register = 0xFFFFFFFF; dbg("%s: temp register set to %x by power fault\n", __FUNCTION__, temp_register); rc = POWER_FAILURE; p_slot->status = 0; goto err_exit; Loading @@ -348,8 +335,6 @@ static u32 board_added(struct slot *p_slot) } p_slot->status = 0; p_slot->switch_save = 0x10; p_slot->is_a_board = 0x01; /* * Some PCI Express root ports require fixup after hot-plug operation. Loading Loading @@ -380,11 +365,11 @@ static u32 board_added(struct slot *p_slot) * remove_board - Turns off slot and LED's * */ static u32 remove_board(struct slot *p_slot) static int remove_board(struct slot *p_slot) { u8 device; u8 hp_slot; u32 rc; int rc; struct controller *ctrl = p_slot->ctrl; if (pciehp_unconfigure_device(p_slot)) Loading @@ -398,9 +383,7 @@ static u32 remove_board(struct slot *p_slot) dbg("In %s, hp_slot = %d\n", __FUNCTION__, hp_slot); /* Change status to shutdown */ if (p_slot->is_a_board) p_slot->status = 0x01; p_slot->configured = 0; /* Wait for exclusive access to hardware */ down(&ctrl->crit_sect); Loading Loading @@ -428,9 +411,6 @@ static u32 remove_board(struct slot *p_slot) /* Done with exclusive hardware access */ up(&ctrl->crit_sect); p_slot->switch_save = 0x10; p_slot->is_a_board = 0; return 0; } Loading Loading @@ -633,7 +613,7 @@ static void interrupt_event_handler(struct controller *ctrl) while (change) { change = 0; for (loop = 0; loop < 10; loop++) { for (loop = 0; loop < MAX_EVENTS; loop++) { if (ctrl->event_queue[loop].event_type != 0) { hp_slot = ctrl->event_queue[loop].hp_slot; Loading Loading @@ -816,21 +796,11 @@ int pciehp_enable_slot(struct slot *p_slot) } up(&p_slot->ctrl->crit_sect); p_slot->configured = 0; p_slot->is_a_board = 1; /* We have to save the presence info for these slots */ p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->switch_save = !getstatus? 0x10:0; rc = board_added(p_slot); if (rc) { /* We have to save the presence info for these slots */ p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->switch_save = !getstatus? 0x10:0; } if (p_slot) Loading drivers/pci/hotplug/pciehp_hpc.c +5 −33 Original line number Diff line number Diff line Loading @@ -27,16 +27,10 @@ * */ #include <linux/config.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/types.h> #include <linux/slab.h> #include <linux/vmalloc.h> #include <linux/interrupt.h> #include <linux/spinlock.h> #include <linux/pci.h> #include <asm/system.h> #include "../pci.h" #include "pciehp.h" Loading Loading @@ -217,23 +211,6 @@ static int pcie_cap_base = 0; /* Base of the PCI Express capability item struct #define MRL_STATE 0x0020 #define PRSN_STATE 0x0040 struct php_ctlr_state_s { struct php_ctlr_state_s *pnext; struct pci_dev *pci_dev; unsigned int irq; unsigned long flags; /* spinlock's */ u32 slot_device_offset; u32 num_slots; struct timer_list int_poll_timer; /* Added for poll event */ php_intr_callback_t attention_button_callback; php_intr_callback_t switch_change_callback; php_intr_callback_t presence_change_callback; php_intr_callback_t power_fault_callback; void *callback_instance_id; struct ctrl_reg *creg; /* Ptr to controller register space */ }; static spinlock_t hpc_event_lock; DEFINE_DBG_BUFFER /* Debug string buffer for entire HPC defined here */ Loading Loading @@ -1248,12 +1225,7 @@ static struct hpc_ops pciehp_hpc_ops = { .check_lnk_status = hpc_check_lnk_status, }; int pcie_init(struct controller * ctrl, struct pcie_device *dev, php_intr_callback_t attention_button_callback, php_intr_callback_t switch_change_callback, php_intr_callback_t presence_change_callback, php_intr_callback_t power_fault_callback) int pcie_init(struct controller * ctrl, struct pcie_device *dev) { struct php_ctlr_state_s *php_ctlr, *p; void *instance_id = ctrl; Loading Loading @@ -1362,10 +1334,10 @@ int pcie_init(struct controller * ctrl, dbg("HPC interrupt = %d\n", php_ctlr->irq); /* Save interrupt callback info */ php_ctlr->attention_button_callback = attention_button_callback; php_ctlr->switch_change_callback = switch_change_callback; php_ctlr->presence_change_callback = presence_change_callback; php_ctlr->power_fault_callback = power_fault_callback; php_ctlr->attention_button_callback = pciehp_handle_attention_button; php_ctlr->switch_change_callback = pciehp_handle_switch_change; php_ctlr->presence_change_callback = pciehp_handle_presence_change; php_ctlr->power_fault_callback = pciehp_handle_power_fault; php_ctlr->callback_instance_id = instance_id; /* return PCI Controller Info */ Loading drivers/pci/hotplug/pciehp_pci.c +0 −4 Original line number Diff line number Diff line Loading @@ -27,13 +27,9 @@ * */ #include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/proc_fs.h> #include <linux/pci.h> #include "../pci.h" #include "pciehp.h" Loading Loading
drivers/pci/hotplug/pciehp.h +22 −22 Original line number Diff line number Diff line Loading @@ -32,8 +32,6 @@ #include <linux/types.h> #include <linux/pci.h> #include <linux/delay.h> #include <asm/semaphore.h> #include <asm/io.h> #include <linux/pcieport_if.h> #include "pci_hotplug.h" Loading Loading @@ -62,13 +60,7 @@ struct slot { u8 device; u16 status; u32 number; u8 is_a_board; u8 configured; u8 state; u8 switch_save; u8 presence_save; u32 capabilities; u16 reserved2; struct timer_list task_event; u8 hp_slot; struct controller *ctrl; Loading @@ -82,27 +74,42 @@ struct event_info { u8 hp_slot; }; typedef u8(*php_intr_callback_t) (u8 hp_slot, void *instance_id); struct php_ctlr_state_s { struct php_ctlr_state_s *pnext; struct pci_dev *pci_dev; unsigned int irq; unsigned long flags; /* spinlock's */ u32 slot_device_offset; u32 num_slots; struct timer_list int_poll_timer; /* Added for poll event */ php_intr_callback_t attention_button_callback; php_intr_callback_t switch_change_callback; php_intr_callback_t presence_change_callback; php_intr_callback_t power_fault_callback; void *callback_instance_id; struct ctrl_reg *creg; /* Ptr to controller register space */ }; #define MAX_EVENTS 10 struct controller { struct controller *next; struct semaphore crit_sect; /* critical section semaphore */ void *hpc_ctlr_handle; /* HPC controller handle */ struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ int num_slots; /* Number of slots on ctlr */ int slot_num_inc; /* 1 or -1 */ struct pci_dev *pci_dev; struct pci_bus *pci_bus; struct event_info event_queue[10]; struct event_info event_queue[MAX_EVENTS]; struct slot *slot; struct hpc_ops *hpc_ops; wait_queue_head_t queue; /* sleep & wake process */ u8 next_event; u8 seg; u8 bus; u8 device; u8 function; u8 rev; u8 slot_device_offset; u8 add_support; enum pci_bus_speed speed; u32 first_slot; /* First physical slot number */ /* PCIE only has 1 slot */ u8 slot_bus; /* Bus where the slots handled by this controller sit */ u8 ctrlcap; Loading Loading @@ -250,14 +257,7 @@ enum php_ctlr_type { ACPI }; typedef u8(*php_intr_callback_t) (unsigned int change_id, void *instance_id); int pcie_init(struct controller *ctrl, struct pcie_device *dev, php_intr_callback_t attention_button_callback, php_intr_callback_t switch_change_callback, php_intr_callback_t presence_change_callback, php_intr_callback_t power_fault_callback); int pcie_init(struct controller *ctrl, struct pcie_device *dev); /* This has no meaning for PCI Express, as there is only 1 slot per port */ int pcie_get_ctlr_slot_config(struct controller *ctrl, Loading
drivers/pci/hotplug/pciehp_core.c +1 −13 Original line number Diff line number Diff line Loading @@ -27,17 +27,11 @@ * */ #include <linux/config.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/proc_fs.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/pci.h> #include <linux/init.h> #include <asm/uaccess.h> #include "pciehp.h" #include <linux/interrupt.h> Loading Loading @@ -381,11 +375,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ pdev = dev->port; ctrl->pci_dev = pdev; rc = pcie_init(ctrl, dev, (php_intr_callback_t) pciehp_handle_attention_button, (php_intr_callback_t) pciehp_handle_switch_change, (php_intr_callback_t) pciehp_handle_presence_change, (php_intr_callback_t) pciehp_handle_power_fault); rc = pcie_init(ctrl, dev); if (rc) { dbg("%s: controller initialization failed\n", PCIE_MODULE_NAME); goto err_out_free_ctrl; Loading Loading @@ -421,8 +411,6 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ first_device_num = ctrl->slot_device_offset; num_ctlr_slots = ctrl->num_slots; ctrl->add_support = 1; /* Setup the slot information structures */ rc = init_slots(ctrl); if (rc) { Loading
drivers/pci/hotplug/pciehp_ctrl.c +13 −43 Original line number Diff line number Diff line Loading @@ -27,15 +27,9 @@ * */ #include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/interrupt.h> #include <linux/delay.h> #include <linux/wait.h> #include <linux/smp_lock.h> #include <linux/pci.h> #include "../pci.h" Loading Loading @@ -64,10 +58,9 @@ u8 pciehp_handle_attention_button(u8 hp_slot, void *inst_id) taskInfo = &(ctrl->event_queue[ctrl->next_event]); p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; Loading Loading @@ -118,12 +111,11 @@ u8 pciehp_handle_switch_change(u8 hp_slot, void *inst_id) * what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); if (getstatus) { Loading @@ -131,14 +123,12 @@ u8 pciehp_handle_switch_change(u8 hp_slot, void *inst_id) * Switch opened */ info("Latch open on Slot(%d)\n", ctrl->first_slot + hp_slot); p_slot->switch_save = 0; taskInfo->event_type = INT_SWITCH_OPEN; } else { /* * Switch closed */ info("Latch close on Slot(%d)\n", ctrl->first_slot + hp_slot); p_slot->switch_save = 0x10; taskInfo->event_type = INT_SWITCH_CLOSE; } Loading @@ -152,7 +142,7 @@ u8 pciehp_handle_presence_change(u8 hp_slot, void *inst_id) { struct controller *ctrl = (struct controller *) inst_id; struct slot *p_slot; u8 rc = 0; u8 presence_save, rc = 0; struct event_info *taskInfo; /* Presence Change */ Loading @@ -162,7 +152,7 @@ u8 pciehp_handle_presence_change(u8 hp_slot, void *inst_id) * what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; Loading @@ -171,8 +161,8 @@ u8 pciehp_handle_presence_change(u8 hp_slot, void *inst_id) /* Switch is open, assume a presence change * Save the presence state */ p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); if (p_slot->presence_save) { p_slot->hpc_ops->get_adapter_status(p_slot, &presence_save); if (presence_save) { /* * Card Present */ Loading Loading @@ -206,7 +196,7 @@ u8 pciehp_handle_power_fault(u8 hp_slot, void *inst_id) * what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; ctrl->next_event = (ctrl->next_event + 1) % MAX_EVENTS; taskInfo->hp_slot = hp_slot; rc++; Loading Loading @@ -279,11 +269,10 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) * Configures board * */ static u32 board_added(struct slot *p_slot) static int board_added(struct slot *p_slot) { u8 hp_slot; u32 temp_register = 0xFFFFFFFF; u32 rc = 0; int rc = 0; struct controller *ctrl = p_slot->ctrl; hp_slot = p_slot->device - ctrl->slot_device_offset; Loading Loading @@ -333,8 +322,6 @@ static u32 board_added(struct slot *p_slot) /* Check for a power fault */ if (p_slot->status == 0xFF) { /* power fault occurred, but it was benign */ temp_register = 0xFFFFFFFF; dbg("%s: temp register set to %x by power fault\n", __FUNCTION__, temp_register); rc = POWER_FAILURE; p_slot->status = 0; goto err_exit; Loading @@ -348,8 +335,6 @@ static u32 board_added(struct slot *p_slot) } p_slot->status = 0; p_slot->switch_save = 0x10; p_slot->is_a_board = 0x01; /* * Some PCI Express root ports require fixup after hot-plug operation. Loading Loading @@ -380,11 +365,11 @@ static u32 board_added(struct slot *p_slot) * remove_board - Turns off slot and LED's * */ static u32 remove_board(struct slot *p_slot) static int remove_board(struct slot *p_slot) { u8 device; u8 hp_slot; u32 rc; int rc; struct controller *ctrl = p_slot->ctrl; if (pciehp_unconfigure_device(p_slot)) Loading @@ -398,9 +383,7 @@ static u32 remove_board(struct slot *p_slot) dbg("In %s, hp_slot = %d\n", __FUNCTION__, hp_slot); /* Change status to shutdown */ if (p_slot->is_a_board) p_slot->status = 0x01; p_slot->configured = 0; /* Wait for exclusive access to hardware */ down(&ctrl->crit_sect); Loading Loading @@ -428,9 +411,6 @@ static u32 remove_board(struct slot *p_slot) /* Done with exclusive hardware access */ up(&ctrl->crit_sect); p_slot->switch_save = 0x10; p_slot->is_a_board = 0; return 0; } Loading Loading @@ -633,7 +613,7 @@ static void interrupt_event_handler(struct controller *ctrl) while (change) { change = 0; for (loop = 0; loop < 10; loop++) { for (loop = 0; loop < MAX_EVENTS; loop++) { if (ctrl->event_queue[loop].event_type != 0) { hp_slot = ctrl->event_queue[loop].hp_slot; Loading Loading @@ -816,21 +796,11 @@ int pciehp_enable_slot(struct slot *p_slot) } up(&p_slot->ctrl->crit_sect); p_slot->configured = 0; p_slot->is_a_board = 1; /* We have to save the presence info for these slots */ p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->switch_save = !getstatus? 0x10:0; rc = board_added(p_slot); if (rc) { /* We have to save the presence info for these slots */ p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->switch_save = !getstatus? 0x10:0; } if (p_slot) Loading
drivers/pci/hotplug/pciehp_hpc.c +5 −33 Original line number Diff line number Diff line Loading @@ -27,16 +27,10 @@ * */ #include <linux/config.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/types.h> #include <linux/slab.h> #include <linux/vmalloc.h> #include <linux/interrupt.h> #include <linux/spinlock.h> #include <linux/pci.h> #include <asm/system.h> #include "../pci.h" #include "pciehp.h" Loading Loading @@ -217,23 +211,6 @@ static int pcie_cap_base = 0; /* Base of the PCI Express capability item struct #define MRL_STATE 0x0020 #define PRSN_STATE 0x0040 struct php_ctlr_state_s { struct php_ctlr_state_s *pnext; struct pci_dev *pci_dev; unsigned int irq; unsigned long flags; /* spinlock's */ u32 slot_device_offset; u32 num_slots; struct timer_list int_poll_timer; /* Added for poll event */ php_intr_callback_t attention_button_callback; php_intr_callback_t switch_change_callback; php_intr_callback_t presence_change_callback; php_intr_callback_t power_fault_callback; void *callback_instance_id; struct ctrl_reg *creg; /* Ptr to controller register space */ }; static spinlock_t hpc_event_lock; DEFINE_DBG_BUFFER /* Debug string buffer for entire HPC defined here */ Loading Loading @@ -1248,12 +1225,7 @@ static struct hpc_ops pciehp_hpc_ops = { .check_lnk_status = hpc_check_lnk_status, }; int pcie_init(struct controller * ctrl, struct pcie_device *dev, php_intr_callback_t attention_button_callback, php_intr_callback_t switch_change_callback, php_intr_callback_t presence_change_callback, php_intr_callback_t power_fault_callback) int pcie_init(struct controller * ctrl, struct pcie_device *dev) { struct php_ctlr_state_s *php_ctlr, *p; void *instance_id = ctrl; Loading Loading @@ -1362,10 +1334,10 @@ int pcie_init(struct controller * ctrl, dbg("HPC interrupt = %d\n", php_ctlr->irq); /* Save interrupt callback info */ php_ctlr->attention_button_callback = attention_button_callback; php_ctlr->switch_change_callback = switch_change_callback; php_ctlr->presence_change_callback = presence_change_callback; php_ctlr->power_fault_callback = power_fault_callback; php_ctlr->attention_button_callback = pciehp_handle_attention_button; php_ctlr->switch_change_callback = pciehp_handle_switch_change; php_ctlr->presence_change_callback = pciehp_handle_presence_change; php_ctlr->power_fault_callback = pciehp_handle_power_fault; php_ctlr->callback_instance_id = instance_id; /* return PCI Controller Info */ Loading
drivers/pci/hotplug/pciehp_pci.c +0 −4 Original line number Diff line number Diff line Loading @@ -27,13 +27,9 @@ * */ #include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/proc_fs.h> #include <linux/pci.h> #include "../pci.h" #include "pciehp.h" Loading