Lines Matching refs:iport
73 static struct device *sciport_to_dev(struct isci_port *iport) in sciport_to_dev() argument
75 int i = iport->physical_port_index; in sciport_to_dev()
82 table = iport - i; in sciport_to_dev()
88 static void sci_port_get_protocols(struct isci_port *iport, struct sci_phy_proto *proto) in sci_port_get_protocols() argument
94 struct isci_phy *iphy = iport->phy_table[index]; in sci_port_get_protocols()
102 static u32 sci_port_get_phys(struct isci_port *iport) in sci_port_get_phys() argument
109 if (iport->phy_table[index]) in sci_port_get_phys()
128 enum sci_status sci_port_get_properties(struct isci_port *iport, in sci_port_get_properties() argument
131 if (!iport || iport->logical_port_index == SCIC_SDS_DUMMY_PORT) in sci_port_get_properties()
134 prop->index = iport->logical_port_index; in sci_port_get_properties()
135 prop->phy_mask = sci_port_get_phys(iport); in sci_port_get_properties()
136 sci_port_get_sas_address(iport, &prop->local.sas_address); in sci_port_get_properties()
137 sci_port_get_protocols(iport, &prop->local.protocols); in sci_port_get_properties()
138 sci_port_get_attached_sas_address(iport, &prop->remote.sas_address); in sci_port_get_properties()
143 static void sci_port_bcn_enable(struct isci_port *iport) in sci_port_bcn_enable() argument
149 for (i = 0; i < ARRAY_SIZE(iport->phy_table); i++) { in sci_port_bcn_enable()
150 iphy = iport->phy_table[i]; in sci_port_bcn_enable()
160 struct isci_port *iport, in isci_port_bc_change_received() argument
169 sci_port_bcn_enable(iport); in isci_port_bc_change_received()
173 struct isci_port *iport, in isci_port_link_up() argument
182 __func__, iport); in isci_port_link_up()
186 sci_port_get_properties(iport, &properties); in isci_port_link_up()
295 static void port_state_machine_change(struct isci_port *iport, in port_state_machine_change() argument
298 struct sci_base_state_machine *sm = &iport->sm; in port_state_machine_change()
302 iport->ready_exit = true; in port_state_machine_change()
305 iport->ready_exit = false; in port_state_machine_change()
363 bool sci_port_is_valid_phy_assignment(struct isci_port *iport, u32 phy_index) in sci_port_is_valid_phy_assignment() argument
365 struct isci_host *ihost = iport->owning_controller; in sci_port_is_valid_phy_assignment()
372 if ((iport->physical_port_index == 1) && (phy_index != 1)) in sci_port_is_valid_phy_assignment()
375 if (iport->physical_port_index == 3 && phy_index != 3) in sci_port_is_valid_phy_assignment()
378 if (iport->physical_port_index == 2 && in sci_port_is_valid_phy_assignment()
383 if (iport->phy_table[index] && index != phy_index) in sci_port_is_valid_phy_assignment()
410 struct isci_port *iport, in sci_port_is_phy_mask_valid() argument
413 if (iport->physical_port_index == 0) { in sci_port_is_phy_mask_valid()
419 } else if (iport->physical_port_index == 1) { in sci_port_is_phy_mask_valid()
423 } else if (iport->physical_port_index == 2) { in sci_port_is_phy_mask_valid()
428 } else if (iport->physical_port_index == 3) { in sci_port_is_phy_mask_valid()
445 static struct isci_phy *sci_port_get_a_connected_phy(struct isci_port *iport) in sci_port_get_a_connected_phy() argument
454 iphy = iport->phy_table[index]; in sci_port_get_a_connected_phy()
455 if (iphy && sci_port_active_phy(iport, iphy)) in sci_port_get_a_connected_phy()
462 static enum sci_status sci_port_set_phy(struct isci_port *iport, struct isci_phy *iphy) in sci_port_set_phy() argument
468 if (!iport->phy_table[iphy->phy_index] && in sci_port_set_phy()
470 sci_port_is_valid_phy_assignment(iport, iphy->phy_index)) { in sci_port_set_phy()
474 iport->logical_port_index = iport->physical_port_index; in sci_port_set_phy()
475 iport->phy_table[iphy->phy_index] = iphy; in sci_port_set_phy()
476 sci_phy_set_port(iphy, iport); in sci_port_set_phy()
484 static enum sci_status sci_port_clear_phy(struct isci_port *iport, struct isci_phy *iphy) in sci_port_clear_phy() argument
487 if (iport->phy_table[iphy->phy_index] == iphy && in sci_port_clear_phy()
488 phy_get_non_dummy_port(iphy) == iport) { in sci_port_clear_phy()
489 struct isci_host *ihost = iport->owning_controller; in sci_port_clear_phy()
493 iport->phy_table[iphy->phy_index] = NULL; in sci_port_clear_phy()
500 void sci_port_get_sas_address(struct isci_port *iport, struct sci_sas_address *sas) in sci_port_get_sas_address() argument
507 if (iport->phy_table[index]) in sci_port_get_sas_address()
508 sci_phy_get_sas_address(iport->phy_table[index], sas); in sci_port_get_sas_address()
511 void sci_port_get_attached_sas_address(struct isci_port *iport, struct sci_sas_address *sas) in sci_port_get_attached_sas_address() argument
519 iphy = sci_port_get_a_connected_phy(iport); in sci_port_get_attached_sas_address()
543 static void sci_port_construct_dummy_rnc(struct isci_port *iport, u16 rni) in sci_port_construct_dummy_rnc() argument
547 rnc = &iport->owning_controller->remote_node_context_table[rni]; in sci_port_construct_dummy_rnc()
556 rnc->ssp.logical_port_index = iport->physical_port_index; in sci_port_construct_dummy_rnc()
571 static void sci_port_construct_dummy_task(struct isci_port *iport, u16 tag) in sci_port_construct_dummy_task() argument
573 struct isci_host *ihost = iport->owning_controller; in sci_port_construct_dummy_task()
581 task_context->logical_port_index = iport->physical_port_index; in sci_port_construct_dummy_task()
586 task_context->remote_node_index = iport->reserved_rni; in sci_port_construct_dummy_task()
591 static void sci_port_destroy_dummy_resources(struct isci_port *iport) in sci_port_destroy_dummy_resources() argument
593 struct isci_host *ihost = iport->owning_controller; in sci_port_destroy_dummy_resources()
595 if (iport->reserved_tag != SCI_CONTROLLER_INVALID_IO_TAG) in sci_port_destroy_dummy_resources()
596 isci_free_tag(ihost, iport->reserved_tag); in sci_port_destroy_dummy_resources()
598 if (iport->reserved_rni != SCU_DUMMY_INDEX) in sci_port_destroy_dummy_resources()
600 1, iport->reserved_rni); in sci_port_destroy_dummy_resources()
602 iport->reserved_rni = SCU_DUMMY_INDEX; in sci_port_destroy_dummy_resources()
603 iport->reserved_tag = SCI_CONTROLLER_INVALID_IO_TAG; in sci_port_destroy_dummy_resources()
606 void sci_port_setup_transports(struct isci_port *iport, u32 device_id) in sci_port_setup_transports() argument
611 if (iport->active_phy_mask & (1 << index)) in sci_port_setup_transports()
612 sci_phy_setup_transport(iport->phy_table[index], device_id); in sci_port_setup_transports()
616 static void sci_port_resume_phy(struct isci_port *iport, struct isci_phy *iphy) in sci_port_resume_phy() argument
619 iport->enabled_phy_mask |= 1 << iphy->phy_index; in sci_port_resume_phy()
622 static void sci_port_activate_phy(struct isci_port *iport, in sci_port_activate_phy() argument
626 struct isci_host *ihost = iport->owning_controller; in sci_port_activate_phy()
631 iport->active_phy_mask |= 1 << iphy->phy_index; in sci_port_activate_phy()
636 isci_port_link_up(ihost, iport, iphy); in sci_port_activate_phy()
639 void sci_port_deactivate_phy(struct isci_port *iport, struct isci_phy *iphy, in sci_port_deactivate_phy() argument
642 struct isci_host *ihost = iport->owning_controller; in sci_port_deactivate_phy()
644 iport->active_phy_mask &= ~(1 << iphy->phy_index); in sci_port_deactivate_phy()
645 iport->enabled_phy_mask &= ~(1 << iphy->phy_index); in sci_port_deactivate_phy()
646 if (!iport->active_phy_mask) in sci_port_deactivate_phy()
647 iport->last_active_phy = iphy->phy_index; in sci_port_deactivate_phy()
654 if (iport->owning_controller->oem_parameters.controller.mode_type == in sci_port_deactivate_phy()
657 &iport->port_pe_configuration_register[iphy->phy_index]); in sci_port_deactivate_phy()
660 isci_port_link_down(ihost, iphy, iport); in sci_port_deactivate_phy()
663 static void sci_port_invalid_link_up(struct isci_port *iport, struct isci_phy *iphy) in sci_port_invalid_link_up() argument
665 struct isci_host *ihost = iport->owning_controller; in sci_port_invalid_link_up()
689 static void sci_port_general_link_up_handler(struct isci_port *iport, in sci_port_general_link_up_handler() argument
696 sci_port_get_attached_sas_address(iport, &port_sas_address); in sci_port_general_link_up_handler()
706 iport->active_phy_mask == 0) { in sci_port_general_link_up_handler()
707 struct sci_base_state_machine *sm = &iport->sm; in sci_port_general_link_up_handler()
709 sci_port_activate_phy(iport, iphy, flags); in sci_port_general_link_up_handler()
711 port_state_machine_change(iport, SCI_PORT_READY); in sci_port_general_link_up_handler()
713 sci_port_invalid_link_up(iport, iphy); in sci_port_general_link_up_handler()
727 static bool sci_port_is_wide(struct isci_port *iport) in sci_port_is_wide() argument
733 if (iport->phy_table[index] != NULL) { in sci_port_is_wide()
755 bool sci_port_link_detected(struct isci_port *iport, struct isci_phy *iphy) in sci_port_link_detected() argument
757 if ((iport->logical_port_index != SCIC_SDS_DUMMY_PORT) && in sci_port_link_detected()
759 if (sci_port_is_wide(iport)) { in sci_port_link_detected()
760 sci_port_invalid_link_up(iport, iphy); in sci_port_link_detected()
763 struct isci_host *ihost = iport->owning_controller; in sci_port_link_detected()
776 struct isci_port *iport = container_of(tmr, typeof(*iport), timer); in port_timeout() local
777 struct isci_host *ihost = iport->owning_controller; in port_timeout()
786 current_state = iport->sm.current_state_id; in port_timeout()
792 port_state_machine_change(iport, SCI_PORT_FAILED); in port_timeout()
797 dev_err(sciport_to_dev(iport), in port_timeout()
800 iport); in port_timeout()
802 dev_dbg(sciport_to_dev(iport), in port_timeout()
804 __func__, iport->physical_port_index); in port_timeout()
809 dev_err(sciport_to_dev(iport), in port_timeout()
811 "in state %d.\n", __func__, iport, current_state); in port_timeout()
825 static void sci_port_update_viit_entry(struct isci_port *iport) in sci_port_update_viit_entry() argument
829 sci_port_get_sas_address(iport, &sas_address); in sci_port_update_viit_entry()
832 &iport->viit_registers->initiator_sas_address_hi); in sci_port_update_viit_entry()
834 &iport->viit_registers->initiator_sas_address_lo); in sci_port_update_viit_entry()
837 writel(0, &iport->viit_registers->reserved); in sci_port_update_viit_entry()
842 ((1 << iport->physical_port_index) << SCU_VIIT_ENTRY_LPVIE_SHIFT) | in sci_port_update_viit_entry()
844 &iport->viit_registers->status); in sci_port_update_viit_entry()
847 enum sas_linkrate sci_port_get_max_allowed_speed(struct isci_port *iport) in sci_port_get_max_allowed_speed() argument
857 iphy = iport->phy_table[index]; in sci_port_get_max_allowed_speed()
858 if (iphy && sci_port_active_phy(iport, iphy) && in sci_port_get_max_allowed_speed()
866 static void sci_port_suspend_port_task_scheduler(struct isci_port *iport) in sci_port_suspend_port_task_scheduler() argument
870 pts_control_value = readl(&iport->port_task_scheduler_registers->control); in sci_port_suspend_port_task_scheduler()
872 writel(pts_control_value, &iport->port_task_scheduler_registers->control); in sci_port_suspend_port_task_scheduler()
884 static void sci_port_post_dummy_request(struct isci_port *iport) in sci_port_post_dummy_request() argument
886 struct isci_host *ihost = iport->owning_controller; in sci_port_post_dummy_request()
887 u16 tag = iport->reserved_tag; in sci_port_post_dummy_request()
895 iport->physical_port_index << SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT | in sci_port_post_dummy_request()
908 static void sci_port_abort_dummy_request(struct isci_port *iport) in sci_port_abort_dummy_request() argument
910 struct isci_host *ihost = iport->owning_controller; in sci_port_abort_dummy_request()
911 u16 tag = iport->reserved_tag; in sci_port_abort_dummy_request()
919 iport->physical_port_index << SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT | in sci_port_abort_dummy_request()
932 sci_port_resume_port_task_scheduler(struct isci_port *iport) in sci_port_resume_port_task_scheduler() argument
936 pts_control_value = readl(&iport->port_task_scheduler_registers->control); in sci_port_resume_port_task_scheduler()
938 writel(pts_control_value, &iport->port_task_scheduler_registers->control); in sci_port_resume_port_task_scheduler()
943 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_ready_substate_waiting_enter() local
945 sci_port_suspend_port_task_scheduler(iport); in sci_port_ready_substate_waiting_enter()
947 iport->not_ready_reason = SCIC_PORT_NOT_READY_NO_ACTIVE_PHYS; in sci_port_ready_substate_waiting_enter()
949 if (iport->active_phy_mask != 0) { in sci_port_ready_substate_waiting_enter()
951 port_state_machine_change(iport, in sci_port_ready_substate_waiting_enter()
959 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in scic_sds_port_ready_substate_waiting_exit() local
960 sci_port_resume_port_task_scheduler(iport); in scic_sds_port_ready_substate_waiting_exit()
966 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_ready_substate_operational_enter() local
967 struct isci_host *ihost = iport->owning_controller; in sci_port_ready_substate_operational_enter()
970 __func__, iport->physical_port_index); in sci_port_ready_substate_operational_enter()
973 if (iport->phy_table[index]) { in sci_port_ready_substate_operational_enter()
974 writel(iport->physical_port_index, in sci_port_ready_substate_operational_enter()
975 &iport->port_pe_configuration_register[ in sci_port_ready_substate_operational_enter()
976 iport->phy_table[index]->phy_index]); in sci_port_ready_substate_operational_enter()
977 if (((iport->active_phy_mask^iport->enabled_phy_mask) & (1 << index)) != 0) in sci_port_ready_substate_operational_enter()
978 sci_port_resume_phy(iport, iport->phy_table[index]); in sci_port_ready_substate_operational_enter()
982 sci_port_update_viit_entry(iport); in sci_port_ready_substate_operational_enter()
988 sci_port_post_dummy_request(iport); in sci_port_ready_substate_operational_enter()
991 static void sci_port_invalidate_dummy_remote_node(struct isci_port *iport) in sci_port_invalidate_dummy_remote_node() argument
993 struct isci_host *ihost = iport->owning_controller; in sci_port_invalidate_dummy_remote_node()
994 u8 phys_index = iport->physical_port_index; in sci_port_invalidate_dummy_remote_node()
996 u16 rni = iport->reserved_rni; in sci_port_invalidate_dummy_remote_node()
1026 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_ready_substate_operational_exit() local
1027 struct isci_host *ihost = iport->owning_controller; in sci_port_ready_substate_operational_exit()
1034 sci_port_abort_dummy_request(iport); in sci_port_ready_substate_operational_exit()
1037 __func__, iport->physical_port_index); in sci_port_ready_substate_operational_exit()
1039 if (iport->ready_exit) in sci_port_ready_substate_operational_exit()
1040 sci_port_invalidate_dummy_remote_node(iport); in sci_port_ready_substate_operational_exit()
1045 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_ready_substate_configuring_enter() local
1046 struct isci_host *ihost = iport->owning_controller; in sci_port_ready_substate_configuring_enter()
1048 if (iport->active_phy_mask == 0) { in sci_port_ready_substate_configuring_enter()
1050 __func__, iport->physical_port_index); in sci_port_ready_substate_configuring_enter()
1052 port_state_machine_change(iport, SCI_PORT_SUB_WAITING); in sci_port_ready_substate_configuring_enter()
1054 port_state_machine_change(iport, SCI_PORT_SUB_OPERATIONAL); in sci_port_ready_substate_configuring_enter()
1057 enum sci_status sci_port_start(struct isci_port *iport) in sci_port_start() argument
1059 struct isci_host *ihost = iport->owning_controller; in sci_port_start()
1064 state = iport->sm.current_state_id; in sci_port_start()
1066 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_start()
1071 if (iport->assigned_device_count > 0) { in sci_port_start()
1080 if (iport->reserved_rni == SCU_DUMMY_INDEX) { in sci_port_start()
1085 sci_port_construct_dummy_rnc(iport, rni); in sci_port_start()
1088 iport->reserved_rni = rni; in sci_port_start()
1091 if (iport->reserved_tag == SCI_CONTROLLER_INVALID_IO_TAG) { in sci_port_start()
1098 sci_port_construct_dummy_task(iport, tag); in sci_port_start()
1099 iport->reserved_tag = tag; in sci_port_start()
1103 phy_mask = sci_port_get_phys(iport); in sci_port_start()
1110 if (sci_port_is_phy_mask_valid(iport, phy_mask) == true) { in sci_port_start()
1111 port_state_machine_change(iport, in sci_port_start()
1120 sci_port_destroy_dummy_resources(iport); in sci_port_start()
1125 enum sci_status sci_port_stop(struct isci_port *iport) in sci_port_stop() argument
1129 state = iport->sm.current_state_id; in sci_port_stop()
1137 port_state_machine_change(iport, in sci_port_stop()
1141 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_stop()
1147 static enum sci_status sci_port_hard_reset(struct isci_port *iport, u32 timeout) in sci_port_hard_reset() argument
1154 state = iport->sm.current_state_id; in sci_port_hard_reset()
1156 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_hard_reset()
1163 iphy = iport->phy_table[phy_index]; in sci_port_hard_reset()
1164 if (iphy && !sci_port_active_phy(iport, iphy)) { in sci_port_hard_reset()
1181 sci_mod_timer(&iport->timer, timeout); in sci_port_hard_reset()
1182 iport->not_ready_reason = SCIC_PORT_NOT_READY_HARD_RESET_REQUESTED; in sci_port_hard_reset()
1184 port_state_machine_change(iport, SCI_PORT_RESETTING); in sci_port_hard_reset()
1197 enum sci_status sci_port_add_phy(struct isci_port *iport, in sci_port_add_phy() argument
1203 sci_port_bcn_enable(iport); in sci_port_add_phy()
1205 state = iport->sm.current_state_id; in sci_port_add_phy()
1211 sci_port_get_sas_address(iport, &port_sas_address); in sci_port_add_phy()
1225 return sci_port_set_phy(iport, iphy); in sci_port_add_phy()
1229 status = sci_port_set_phy(iport, iphy); in sci_port_add_phy()
1234 sci_port_general_link_up_handler(iport, iphy, PF_NOTIFY|PF_RESUME); in sci_port_add_phy()
1235 iport->not_ready_reason = SCIC_PORT_NOT_READY_RECONFIGURING; in sci_port_add_phy()
1236 port_state_machine_change(iport, SCI_PORT_SUB_CONFIGURING); in sci_port_add_phy()
1240 status = sci_port_set_phy(iport, iphy); in sci_port_add_phy()
1244 sci_port_general_link_up_handler(iport, iphy, PF_NOTIFY); in sci_port_add_phy()
1249 port_state_machine_change(iport, in sci_port_add_phy()
1253 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_add_phy()
1268 enum sci_status sci_port_remove_phy(struct isci_port *iport, in sci_port_remove_phy() argument
1274 state = iport->sm.current_state_id; in sci_port_remove_phy()
1278 return sci_port_clear_phy(iport, iphy); in sci_port_remove_phy()
1280 status = sci_port_clear_phy(iport, iphy); in sci_port_remove_phy()
1284 sci_port_deactivate_phy(iport, iphy, true); in sci_port_remove_phy()
1285 iport->not_ready_reason = SCIC_PORT_NOT_READY_RECONFIGURING; in sci_port_remove_phy()
1286 port_state_machine_change(iport, in sci_port_remove_phy()
1290 status = sci_port_clear_phy(iport, iphy); in sci_port_remove_phy()
1294 sci_port_deactivate_phy(iport, iphy, true); in sci_port_remove_phy()
1299 port_state_machine_change(iport, in sci_port_remove_phy()
1303 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_remove_phy()
1309 enum sci_status sci_port_link_up(struct isci_port *iport, in sci_port_link_up() argument
1314 state = iport->sm.current_state_id; in sci_port_link_up()
1320 sci_port_activate_phy(iport, iphy, PF_NOTIFY|PF_RESUME); in sci_port_link_up()
1322 port_state_machine_change(iport, in sci_port_link_up()
1326 sci_port_general_link_up_handler(iport, iphy, PF_NOTIFY|PF_RESUME); in sci_port_link_up()
1343 sci_port_general_link_up_handler(iport, iphy, PF_RESUME); in sci_port_link_up()
1346 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_link_up()
1352 enum sci_status sci_port_link_down(struct isci_port *iport, in sci_port_link_down() argument
1357 state = iport->sm.current_state_id; in sci_port_link_down()
1360 sci_port_deactivate_phy(iport, iphy, true); in sci_port_link_down()
1366 if (iport->active_phy_mask == 0) in sci_port_link_down()
1367 port_state_machine_change(iport, in sci_port_link_down()
1373 sci_port_deactivate_phy(iport, iphy, false); in sci_port_link_down()
1376 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_link_down()
1382 enum sci_status sci_port_start_io(struct isci_port *iport, in sci_port_start_io() argument
1388 state = iport->sm.current_state_id; in sci_port_start_io()
1393 iport->started_request_count++; in sci_port_start_io()
1396 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_start_io()
1402 enum sci_status sci_port_complete_io(struct isci_port *iport, in sci_port_complete_io() argument
1408 state = iport->sm.current_state_id; in sci_port_complete_io()
1411 dev_warn(sciport_to_dev(iport), "%s: in wrong state: %s\n", in sci_port_complete_io()
1415 sci_port_decrement_request_count(iport); in sci_port_complete_io()
1417 if (iport->started_request_count == 0) in sci_port_complete_io()
1418 port_state_machine_change(iport, in sci_port_complete_io()
1426 sci_port_decrement_request_count(iport); in sci_port_complete_io()
1429 sci_port_decrement_request_count(iport); in sci_port_complete_io()
1430 if (iport->started_request_count == 0) { in sci_port_complete_io()
1431 port_state_machine_change(iport, in sci_port_complete_io()
1439 static void sci_port_enable_port_task_scheduler(struct isci_port *iport) in sci_port_enable_port_task_scheduler() argument
1444 pts_control_value = readl(&iport->port_task_scheduler_registers->control); in sci_port_enable_port_task_scheduler()
1446 writel(pts_control_value, &iport->port_task_scheduler_registers->control); in sci_port_enable_port_task_scheduler()
1449 static void sci_port_disable_port_task_scheduler(struct isci_port *iport) in sci_port_disable_port_task_scheduler() argument
1453 pts_control_value = readl(&iport->port_task_scheduler_registers->control); in sci_port_disable_port_task_scheduler()
1456 writel(pts_control_value, &iport->port_task_scheduler_registers->control); in sci_port_disable_port_task_scheduler()
1459 static void sci_port_post_dummy_remote_node(struct isci_port *iport) in sci_port_post_dummy_remote_node() argument
1461 struct isci_host *ihost = iport->owning_controller; in sci_port_post_dummy_remote_node()
1462 u8 phys_index = iport->physical_port_index; in sci_port_post_dummy_remote_node()
1464 u16 rni = iport->reserved_rni; in sci_port_post_dummy_remote_node()
1489 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_stopped_state_enter() local
1491 if (iport->sm.previous_state_id == SCI_PORT_STOPPING) { in sci_port_stopped_state_enter()
1496 sci_port_disable_port_task_scheduler(iport); in sci_port_stopped_state_enter()
1502 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_stopped_state_exit() local
1505 sci_port_enable_port_task_scheduler(iport); in sci_port_stopped_state_exit()
1510 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_ready_state_enter() local
1511 struct isci_host *ihost = iport->owning_controller; in sci_port_ready_state_enter()
1514 prev_state = iport->sm.previous_state_id; in sci_port_ready_state_enter()
1516 isci_port_hard_reset_complete(iport, SCI_SUCCESS); in sci_port_ready_state_enter()
1519 __func__, iport->physical_port_index); in sci_port_ready_state_enter()
1522 sci_port_post_dummy_remote_node(iport); in sci_port_ready_state_enter()
1525 port_state_machine_change(iport, in sci_port_ready_state_enter()
1531 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_resetting_state_exit() local
1533 sci_del_timer(&iport->timer); in sci_port_resetting_state_exit()
1538 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_stopping_state_exit() local
1540 sci_del_timer(&iport->timer); in sci_port_stopping_state_exit()
1542 sci_port_destroy_dummy_resources(iport); in sci_port_stopping_state_exit()
1547 struct isci_port *iport = container_of(sm, typeof(*iport), sm); in sci_port_failed_state_enter() local
1549 isci_port_hard_reset_complete(iport, SCI_FAILURE_TIMEOUT); in sci_port_failed_state_enter()
1552 void sci_port_set_hang_detection_timeout(struct isci_port *iport, u32 timeout) in sci_port_set_hang_detection_timeout() argument
1555 u32 phy_mask = iport->active_phy_mask; in sci_port_set_hang_detection_timeout()
1558 ++iport->hang_detect_users; in sci_port_set_hang_detection_timeout()
1559 else if (iport->hang_detect_users > 1) in sci_port_set_hang_detection_timeout()
1560 --iport->hang_detect_users; in sci_port_set_hang_detection_timeout()
1562 iport->hang_detect_users = 0; in sci_port_set_hang_detection_timeout()
1564 if (timeout || (iport->hang_detect_users == 0)) { in sci_port_set_hang_detection_timeout()
1568 &iport->phy_table[phy_index] in sci_port_set_hang_detection_timeout()
1607 void sci_port_construct(struct isci_port *iport, u8 index, in sci_port_construct() argument
1610 sci_init_sm(&iport->sm, sci_port_state_table, SCI_PORT_STOPPED); in sci_port_construct()
1612 iport->logical_port_index = SCIC_SDS_DUMMY_PORT; in sci_port_construct()
1613 iport->physical_port_index = index; in sci_port_construct()
1614 iport->active_phy_mask = 0; in sci_port_construct()
1615 iport->enabled_phy_mask = 0; in sci_port_construct()
1616 iport->last_active_phy = 0; in sci_port_construct()
1617 iport->ready_exit = false; in sci_port_construct()
1619 iport->owning_controller = ihost; in sci_port_construct()
1621 iport->started_request_count = 0; in sci_port_construct()
1622 iport->assigned_device_count = 0; in sci_port_construct()
1623 iport->hang_detect_users = 0; in sci_port_construct()
1625 iport->reserved_rni = SCU_DUMMY_INDEX; in sci_port_construct()
1626 iport->reserved_tag = SCI_CONTROLLER_INVALID_IO_TAG; in sci_port_construct()
1628 sci_init_timer(&iport->timer, port_timeout); in sci_port_construct()
1630 iport->port_task_scheduler_registers = NULL; in sci_port_construct()
1633 iport->phy_table[index] = NULL; in sci_port_construct()
1636 void sci_port_broadcast_change_received(struct isci_port *iport, struct isci_phy *iphy) in sci_port_broadcast_change_received() argument
1638 struct isci_host *ihost = iport->owning_controller; in sci_port_broadcast_change_received()
1641 isci_port_bc_change_received(ihost, iport, iphy); in sci_port_broadcast_change_received()
1644 static void wait_port_reset(struct isci_host *ihost, struct isci_port *iport) in wait_port_reset() argument
1646 wait_event(ihost->eventq, !test_bit(IPORT_RESET_PENDING, &iport->state)); in wait_port_reset()
1649 int isci_port_perform_hard_reset(struct isci_host *ihost, struct isci_port *iport, in isci_port_perform_hard_reset() argument
1657 __func__, iport); in isci_port_perform_hard_reset()
1660 set_bit(IPORT_RESET_PENDING, &iport->state); in isci_port_perform_hard_reset()
1663 status = sci_port_hard_reset(iport, ISCI_PORT_RESET_TIMEOUT); in isci_port_perform_hard_reset()
1668 wait_port_reset(ihost, iport); in isci_port_perform_hard_reset()
1672 __func__, iport); in isci_port_perform_hard_reset()
1674 if (iport->hard_reset_status != SCI_SUCCESS) { in isci_port_perform_hard_reset()
1679 __func__, iport, iport->hard_reset_status); in isci_port_perform_hard_reset()
1682 clear_bit(IPORT_RESET_PENDING, &iport->state); in isci_port_perform_hard_reset()
1689 __func__, iport, status); in isci_port_perform_hard_reset()
1697 struct isci_port *iport = dev->port->lldd_port; in isci_ata_check_ready() local
1710 if (test_bit(IPORT_RESET_PENDING, &iport->state)) in isci_ata_check_ready()
1713 rc = !!iport->active_phy_mask; in isci_ata_check_ready()
1723 struct isci_port *iport = phy->port->lldd_port; in isci_port_deformed() local
1730 if (!iport) in isci_port_deformed()
1735 if (iport->active_phy_mask & 1 << i) in isci_port_deformed()
1742 __func__, (long) (iport - &ihost->ports[0])); in isci_port_deformed()
1750 struct isci_port *iport = NULL; in isci_port_formed() local
1761 iport = &ihost->ports[i]; in isci_port_formed()
1762 if (iport->active_phy_mask & 1 << iphy->phy_index) in isci_port_formed()
1768 iport = NULL; in isci_port_formed()
1770 port->lldd_port = iport; in isci_port_formed()