Lines Matching refs:p_slot
40 static int queue_interrupt_event(struct slot *p_slot, u32 event_type) in queue_interrupt_event() argument
49 info->p_slot = p_slot; in queue_interrupt_event()
52 queue_work(p_slot->wq, &info->work); in queue_interrupt_event()
57 u8 pciehp_handle_attention_button(struct slot *p_slot) in pciehp_handle_attention_button() argument
60 struct controller *ctrl = p_slot->ctrl; in pciehp_handle_attention_button()
68 ctrl_info(ctrl, "Button pressed on Slot(%s)\n", slot_name(p_slot)); in pciehp_handle_attention_button()
71 queue_interrupt_event(p_slot, event_type); in pciehp_handle_attention_button()
76 u8 pciehp_handle_switch_change(struct slot *p_slot) in pciehp_handle_switch_change() argument
80 struct controller *ctrl = p_slot->ctrl; in pciehp_handle_switch_change()
85 pciehp_get_latch_status(p_slot, &getstatus); in pciehp_handle_switch_change()
90 ctrl_info(ctrl, "Latch open on Slot(%s)\n", slot_name(p_slot)); in pciehp_handle_switch_change()
96 ctrl_info(ctrl, "Latch close on Slot(%s)\n", slot_name(p_slot)); in pciehp_handle_switch_change()
100 queue_interrupt_event(p_slot, event_type); in pciehp_handle_switch_change()
105 u8 pciehp_handle_presence_change(struct slot *p_slot) in pciehp_handle_presence_change() argument
109 struct controller *ctrl = p_slot->ctrl; in pciehp_handle_presence_change()
117 pciehp_get_adapter_status(p_slot, &presence_save); in pciehp_handle_presence_change()
122 ctrl_info(ctrl, "Card present on Slot(%s)\n", slot_name(p_slot)); in pciehp_handle_presence_change()
129 slot_name(p_slot)); in pciehp_handle_presence_change()
133 queue_interrupt_event(p_slot, event_type); in pciehp_handle_presence_change()
138 u8 pciehp_handle_power_fault(struct slot *p_slot) in pciehp_handle_power_fault() argument
141 struct controller *ctrl = p_slot->ctrl; in pciehp_handle_power_fault()
145 ctrl_err(ctrl, "Power fault on slot %s\n", slot_name(p_slot)); in pciehp_handle_power_fault()
148 queue_interrupt_event(p_slot, event_type); in pciehp_handle_power_fault()
153 void pciehp_handle_linkstate_change(struct slot *p_slot) in pciehp_handle_linkstate_change() argument
156 struct controller *ctrl = p_slot->ctrl; in pciehp_handle_linkstate_change()
163 slot_name(p_slot)); in pciehp_handle_linkstate_change()
167 slot_name(p_slot)); in pciehp_handle_linkstate_change()
171 queue_interrupt_event(p_slot, event_type); in pciehp_handle_linkstate_change()
203 static int board_added(struct slot *p_slot) in board_added() argument
206 struct controller *ctrl = p_slot->ctrl; in board_added()
211 retval = pciehp_power_on_slot(p_slot); in board_added()
216 pciehp_green_led_blink(p_slot); in board_added()
226 if (ctrl->power_fault_detected || pciehp_query_power_fault(p_slot)) { in board_added()
227 ctrl_err(ctrl, "Power fault on slot %s\n", slot_name(p_slot)); in board_added()
232 retval = pciehp_configure_device(p_slot); in board_added()
240 pciehp_green_led_on(p_slot); in board_added()
244 set_slot_off(ctrl, p_slot); in board_added()
252 static int remove_board(struct slot *p_slot) in remove_board() argument
255 struct controller *ctrl = p_slot->ctrl; in remove_board()
257 retval = pciehp_unconfigure_device(p_slot); in remove_board()
262 pciehp_power_off_slot(p_slot); in remove_board()
273 pciehp_green_led_off(p_slot); in remove_board()
278 struct slot *p_slot; member
296 struct slot *p_slot = info->p_slot; in pciehp_power_thread() local
301 ctrl_dbg(p_slot->ctrl, in pciehp_power_thread()
303 pci_domain_nr(p_slot->ctrl->pcie->port->subordinate), in pciehp_power_thread()
304 p_slot->ctrl->pcie->port->subordinate->number); in pciehp_power_thread()
305 mutex_lock(&p_slot->hotplug_lock); in pciehp_power_thread()
306 pciehp_disable_slot(p_slot); in pciehp_power_thread()
307 mutex_unlock(&p_slot->hotplug_lock); in pciehp_power_thread()
308 mutex_lock(&p_slot->lock); in pciehp_power_thread()
309 p_slot->state = STATIC_STATE; in pciehp_power_thread()
310 mutex_unlock(&p_slot->lock); in pciehp_power_thread()
313 ctrl_dbg(p_slot->ctrl, in pciehp_power_thread()
315 pci_domain_nr(p_slot->ctrl->pcie->port->subordinate), in pciehp_power_thread()
316 p_slot->ctrl->pcie->port->subordinate->number); in pciehp_power_thread()
317 mutex_lock(&p_slot->hotplug_lock); in pciehp_power_thread()
318 ret = pciehp_enable_slot(p_slot); in pciehp_power_thread()
319 mutex_unlock(&p_slot->hotplug_lock); in pciehp_power_thread()
321 pciehp_green_led_off(p_slot); in pciehp_power_thread()
322 mutex_lock(&p_slot->lock); in pciehp_power_thread()
323 p_slot->state = STATIC_STATE; in pciehp_power_thread()
324 mutex_unlock(&p_slot->lock); in pciehp_power_thread()
335 struct slot *p_slot = container_of(work, struct slot, work.work); in pciehp_queue_pushbutton_work() local
340 ctrl_err(p_slot->ctrl, "%s: Cannot allocate memory\n", in pciehp_queue_pushbutton_work()
344 info->p_slot = p_slot; in pciehp_queue_pushbutton_work()
347 mutex_lock(&p_slot->lock); in pciehp_queue_pushbutton_work()
348 switch (p_slot->state) { in pciehp_queue_pushbutton_work()
350 p_slot->state = POWEROFF_STATE; in pciehp_queue_pushbutton_work()
354 p_slot->state = POWERON_STATE; in pciehp_queue_pushbutton_work()
361 queue_work(p_slot->wq, &info->work); in pciehp_queue_pushbutton_work()
363 mutex_unlock(&p_slot->lock); in pciehp_queue_pushbutton_work()
369 static void handle_button_press_event(struct slot *p_slot) in handle_button_press_event() argument
371 struct controller *ctrl = p_slot->ctrl; in handle_button_press_event()
374 switch (p_slot->state) { in handle_button_press_event()
376 pciehp_get_power_status(p_slot, &getstatus); in handle_button_press_event()
378 p_slot->state = BLINKINGOFF_STATE; in handle_button_press_event()
380 slot_name(p_slot)); in handle_button_press_event()
382 p_slot->state = BLINKINGON_STATE; in handle_button_press_event()
384 slot_name(p_slot)); in handle_button_press_event()
387 pciehp_green_led_blink(p_slot); in handle_button_press_event()
388 pciehp_set_attention_status(p_slot, 0); in handle_button_press_event()
389 queue_delayed_work(p_slot->wq, &p_slot->work, 5*HZ); in handle_button_press_event()
398 ctrl_info(ctrl, "Button cancel on Slot(%s)\n", slot_name(p_slot)); in handle_button_press_event()
399 cancel_delayed_work(&p_slot->work); in handle_button_press_event()
400 if (p_slot->state == BLINKINGOFF_STATE) in handle_button_press_event()
401 pciehp_green_led_on(p_slot); in handle_button_press_event()
403 pciehp_green_led_off(p_slot); in handle_button_press_event()
404 pciehp_set_attention_status(p_slot, 0); in handle_button_press_event()
406 slot_name(p_slot)); in handle_button_press_event()
407 p_slot->state = STATIC_STATE; in handle_button_press_event()
416 ctrl_info(ctrl, "Button ignore on Slot(%s)\n", slot_name(p_slot)); in handle_button_press_event()
427 static void handle_surprise_event(struct slot *p_slot) in handle_surprise_event() argument
434 ctrl_err(p_slot->ctrl, "%s: Cannot allocate memory\n", in handle_surprise_event()
438 info->p_slot = p_slot; in handle_surprise_event()
441 pciehp_get_adapter_status(p_slot, &getstatus); in handle_surprise_event()
443 p_slot->state = POWEROFF_STATE; in handle_surprise_event()
446 p_slot->state = POWERON_STATE; in handle_surprise_event()
450 queue_work(p_slot->wq, &info->work); in handle_surprise_event()
456 static void handle_link_event(struct slot *p_slot, u32 event) in handle_link_event() argument
458 struct controller *ctrl = p_slot->ctrl; in handle_link_event()
463 ctrl_err(p_slot->ctrl, "%s: Cannot allocate memory\n", in handle_link_event()
467 info->p_slot = p_slot; in handle_link_event()
471 switch (p_slot->state) { in handle_link_event()
474 cancel_delayed_work(&p_slot->work); in handle_link_event()
477 p_slot->state = event == INT_LINK_UP ? in handle_link_event()
479 queue_work(p_slot->wq, &info->work); in handle_link_event()
485 slot_name(p_slot)); in handle_link_event()
490 slot_name(p_slot)); in handle_link_event()
491 p_slot->state = POWEROFF_STATE; in handle_link_event()
492 queue_work(p_slot->wq, &info->work); in handle_link_event()
499 slot_name(p_slot)); in handle_link_event()
500 p_slot->state = POWERON_STATE; in handle_link_event()
501 queue_work(p_slot->wq, &info->work); in handle_link_event()
505 slot_name(p_slot)); in handle_link_event()
511 slot_name(p_slot)); in handle_link_event()
520 struct slot *p_slot = info->p_slot; in interrupt_event_handler() local
521 struct controller *ctrl = p_slot->ctrl; in interrupt_event_handler()
523 mutex_lock(&p_slot->lock); in interrupt_event_handler()
526 handle_button_press_event(p_slot); in interrupt_event_handler()
531 pciehp_set_attention_status(p_slot, 1); in interrupt_event_handler()
532 pciehp_green_led_off(p_slot); in interrupt_event_handler()
536 handle_surprise_event(p_slot); in interrupt_event_handler()
544 handle_surprise_event(p_slot); in interrupt_event_handler()
548 handle_link_event(p_slot, info->event_type); in interrupt_event_handler()
553 mutex_unlock(&p_slot->lock); in interrupt_event_handler()
561 int pciehp_enable_slot(struct slot *p_slot) in pciehp_enable_slot() argument
565 struct controller *ctrl = p_slot->ctrl; in pciehp_enable_slot()
567 pciehp_get_adapter_status(p_slot, &getstatus); in pciehp_enable_slot()
569 ctrl_info(ctrl, "No adapter on slot(%s)\n", slot_name(p_slot)); in pciehp_enable_slot()
572 if (MRL_SENS(p_slot->ctrl)) { in pciehp_enable_slot()
573 pciehp_get_latch_status(p_slot, &getstatus); in pciehp_enable_slot()
576 slot_name(p_slot)); in pciehp_enable_slot()
581 if (POWER_CTRL(p_slot->ctrl)) { in pciehp_enable_slot()
582 pciehp_get_power_status(p_slot, &getstatus); in pciehp_enable_slot()
585 slot_name(p_slot)); in pciehp_enable_slot()
590 pciehp_get_latch_status(p_slot, &getstatus); in pciehp_enable_slot()
592 rc = board_added(p_slot); in pciehp_enable_slot()
594 pciehp_get_latch_status(p_slot, &getstatus); in pciehp_enable_slot()
602 int pciehp_disable_slot(struct slot *p_slot) in pciehp_disable_slot() argument
605 struct controller *ctrl = p_slot->ctrl; in pciehp_disable_slot()
607 if (!p_slot->ctrl) in pciehp_disable_slot()
610 if (POWER_CTRL(p_slot->ctrl)) { in pciehp_disable_slot()
611 pciehp_get_power_status(p_slot, &getstatus); in pciehp_disable_slot()
614 slot_name(p_slot)); in pciehp_disable_slot()
619 return remove_board(p_slot); in pciehp_disable_slot()
622 int pciehp_sysfs_enable_slot(struct slot *p_slot) in pciehp_sysfs_enable_slot() argument
625 struct controller *ctrl = p_slot->ctrl; in pciehp_sysfs_enable_slot()
627 mutex_lock(&p_slot->lock); in pciehp_sysfs_enable_slot()
628 switch (p_slot->state) { in pciehp_sysfs_enable_slot()
630 cancel_delayed_work(&p_slot->work); in pciehp_sysfs_enable_slot()
632 p_slot->state = POWERON_STATE; in pciehp_sysfs_enable_slot()
633 mutex_unlock(&p_slot->lock); in pciehp_sysfs_enable_slot()
634 mutex_lock(&p_slot->hotplug_lock); in pciehp_sysfs_enable_slot()
635 retval = pciehp_enable_slot(p_slot); in pciehp_sysfs_enable_slot()
636 mutex_unlock(&p_slot->hotplug_lock); in pciehp_sysfs_enable_slot()
637 mutex_lock(&p_slot->lock); in pciehp_sysfs_enable_slot()
638 p_slot->state = STATIC_STATE; in pciehp_sysfs_enable_slot()
642 slot_name(p_slot)); in pciehp_sysfs_enable_slot()
647 slot_name(p_slot)); in pciehp_sysfs_enable_slot()
651 slot_name(p_slot)); in pciehp_sysfs_enable_slot()
654 mutex_unlock(&p_slot->lock); in pciehp_sysfs_enable_slot()
659 int pciehp_sysfs_disable_slot(struct slot *p_slot) in pciehp_sysfs_disable_slot() argument
662 struct controller *ctrl = p_slot->ctrl; in pciehp_sysfs_disable_slot()
664 mutex_lock(&p_slot->lock); in pciehp_sysfs_disable_slot()
665 switch (p_slot->state) { in pciehp_sysfs_disable_slot()
667 cancel_delayed_work(&p_slot->work); in pciehp_sysfs_disable_slot()
669 p_slot->state = POWEROFF_STATE; in pciehp_sysfs_disable_slot()
670 mutex_unlock(&p_slot->lock); in pciehp_sysfs_disable_slot()
671 retval = pciehp_disable_slot(p_slot); in pciehp_sysfs_disable_slot()
672 mutex_lock(&p_slot->lock); in pciehp_sysfs_disable_slot()
673 p_slot->state = STATIC_STATE; in pciehp_sysfs_disable_slot()
677 slot_name(p_slot)); in pciehp_sysfs_disable_slot()
682 slot_name(p_slot)); in pciehp_sysfs_disable_slot()
686 slot_name(p_slot)); in pciehp_sysfs_disable_slot()
689 mutex_unlock(&p_slot->lock); in pciehp_sysfs_disable_slot()