/** * @brief This method will attempt to handle an operation timeout (i.e. * discovery or reset). * * @param[in] cookie This parameter specifies the domain in which the * timeout occurred. * * @return none */ static void scif_sas_domain_operation_timeout_handler( void * cookie ) { SCIF_SAS_DOMAIN_T * fw_domain = (SCIF_SAS_DOMAIN_T*) cookie; U32 state; state = sci_base_state_machine_get_state(&fw_domain->parent.state_machine); // Based upon the state of the domain, we know whether we were in the // process of performing discovery or a reset. if (state == SCI_BASE_DOMAIN_STATE_DISCOVERING) { SCIF_LOG_WARNING(( sci_base_object_get_logger(fw_domain), SCIF_LOG_OBJECT_DOMAIN, "Domain:0x%x State:0x%x DISCOVER timeout!\n", fw_domain, state )); fw_domain->operation.status = SCI_FAILURE_TIMEOUT; //search all the smp devices in the domain and cancel their activities //if there is any outstanding activity remained. The smp devices will terminate //all the started internal IOs. scif_sas_domain_cancel_smp_activities(fw_domain); scif_sas_domain_continue_discover(fw_domain); } else { SCIF_LOG_ERROR(( sci_base_object_get_logger(fw_domain), SCIF_LOG_OBJECT_DOMAIN, "Domain:0x%x State:0x%x operation timeout in invalid state\n", fw_domain, state )); } }
/** * @brief This method clear affiliation for all the EA SATA devices associated * to this controller. * * @param[in] fw_controller This parameter specifies the framework * controller object for whose remote devices are to be stopped. * * @return This method returns a value indicating if the operation completed. * @retval SCI_COMPLETE This value indicates that all the EA SATA devices' * affiliation was cleared. * @retval SCI_INCOMPLETE This value indicates clear affiliation activity is * yet to be completed. */ SCI_STATUS scif_sas_controller_clear_affiliation( SCIF_SAS_CONTROLLER_T * fw_controller ) { U8 index; SCI_STATUS status; SCIF_SAS_DOMAIN_T * fw_domain; SCIF_LOG_TRACE(( sci_base_object_get_logger(fw_controller), SCIF_LOG_OBJECT_CONTROLLER, "scif_sas_controller_clear_affiliation(0x%x) enter\n", fw_controller )); index = fw_controller->current_domain_to_clear_affiliation; if (index < SCI_MAX_DOMAINS) { fw_domain = &fw_controller->domains[index]; //Need to stop all the on-going smp activities before clearing affiliation. scif_sas_domain_cancel_smp_activities(fw_domain); scif_sas_domain_start_clear_affiliation(fw_domain); status = SCI_WARNING_SEQUENCE_INCOMPLETE; } else { //the controller has done clear affiliation work to all its domains. scif_sas_controller_continue_to_stop(fw_controller); status = SCI_SUCCESS; } return status; }