/** * * @param[in] device This is the SCI base object which is cast into a * SCIC_SDS_REMOTE_DEVICE object. * * @return none */ static void scic_sds_stp_remote_device_ready_idle_substate_enter( SCI_BASE_OBJECT_T * device ) { SCIC_SDS_REMOTE_DEVICE_T * this_device; this_device = (SCIC_SDS_REMOTE_DEVICE_T *)device; SET_STATE_HANDLER( this_device, scic_sds_stp_remote_device_ready_substate_handler_table, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE ); this_device->working_request = NULL; if (scic_sds_remote_node_context_is_ready(this_device->rnc)) { // Since the RNC is ready, it's alright to finish completion // processing (e.g. signal the remote device is ready). scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler( this_device ); } else { scic_sds_remote_node_context_resume( this_device->rnc, scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler, this_device ); } }
/** * @brief This method implements the actions taken when entering the * FAILED state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_CONTROLLER object in the method implementation. * * @return none */ static void scif_sas_controller_failed_state_enter( SCI_BASE_OBJECT_T * object ) { SCIF_SAS_CONTROLLER_T * fw_controller = (SCIF_SAS_CONTROLLER_T *)object; SCIF_LOG_ERROR(( sci_base_object_get_logger(fw_controller), SCIF_LOG_OBJECT_CONTROLLER, "Controller: entered FAILED state.\n" )); SET_STATE_HANDLER( fw_controller, scif_sas_controller_state_handler_table, SCI_BASE_CONTROLLER_STATE_FAILED ); if (fw_controller->parent.error != SCI_CONTROLLER_FATAL_MEMORY_ERROR) { //clean timers to avoid timer leak. scif_sas_controller_release_resource(fw_controller); //notify user. scif_cb_controller_error(fw_controller, fw_controller->parent.error); } }
/** * * * @param[in] device This is the SCI base object which is cast into a * SCIC_SDS_REMOTE_DEVICE object. * * @return none */ static void scic_sds_stp_remote_device_ready_ncq_error_substate_enter( SCI_BASE_OBJECT_T * device ) { SCIC_SDS_REMOTE_DEVICE_T * this_device; this_device = (SCIC_SDS_REMOTE_DEVICE_T *)device; SET_STATE_HANDLER( this_device, scic_sds_stp_remote_device_ready_substate_handler_table, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR ); if(this_device->not_ready_reason == SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED) { scic_cb_remote_device_not_ready( scic_sds_remote_device_get_controller(this_device), this_device, this_device->not_ready_reason ); } }
/** * @brief This method implements the actions taken when entering the * FAILED state. This includes setting the state handler methods * and issuing a scif_cb_remote_device_failed() notification to * the user. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_failed_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_state_handler_table, SCI_BASE_REMOTE_DEVICE_STATE_FAILED ); SCIF_LOG_INFO(( sci_base_object_get_logger(fw_device), SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_REMOTE_DEVICE_CONFIG, "Domain:0x%x Device:0x%x Status:0x%x device failed\n", fw_device->domain, fw_device, fw_device->operation_status )); // Notify the user that the device has failed. scif_cb_remote_device_failed( fw_device->domain->controller, fw_device->domain, fw_device, fw_device->operation_status ); // Only call start_complete for the remote device if the device failed // from the STARTING state. if (fw_device->parent.state_machine.previous_state_id == SCI_BASE_REMOTE_DEVICE_STATE_STARTING) scif_sas_domain_remote_device_start_complete(fw_device->domain,fw_device); }
/** * @brief This method implements the actions taken when entering the * READY OPERATIONAL substate. This includes setting the state * handler methods and issuing a scif_cb_remote_device_ready() * notification to the user. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_ready_operational_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_ready_substate_handler_table, SCIF_SAS_REMOTE_DEVICE_READY_SUBSTATE_OPERATIONAL ); SCIF_LOG_INFO(( sci_base_object_get_logger(fw_device), SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_REMOTE_DEVICE_CONFIG, "Domain:0x%x Device:0x%x device ready\n", fw_device->domain, fw_device )); // Notify the user that the device has become ready. scif_cb_remote_device_ready( fw_device->domain->controller, fw_device->domain, fw_device ); }
/** * @brief This method implements the actions taken when entering the * STOPPED state. This method updates the domains count of started * devices and will invoke the destruct method if this entrance into * the STOPPED state was due to a scif_remote_device_destruct() * call by the user. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_stopped_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_state_handler_table, SCI_BASE_REMOTE_DEVICE_STATE_STOPPED ); // There should be no outstanding requests for this device in the // stopped state. ASSERT(fw_device->request_count == 0); // If we are entering the stopped state as a result of a destruct // request, then let's perform the actual destruct operation now. if (fw_device->destruct_when_stopped == TRUE) fw_device->operation_status = fw_device->state_handlers->parent.destruct_handler( &fw_device->parent ); /// @todo What should we do if this call fails? fw_device->domain->state_handlers->device_stop_complete_handler( &fw_device->domain->parent, &fw_device->parent ); }
/** * @brief This method implements the actions taken when entering the * STOPPING state. This includes: stopping the core remote device * and handling any errors that may occur. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_stopping_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_state_handler_table, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING ); fw_device->operation_status = scic_remote_device_stop( fw_device->core_object, SCIF_SAS_REMOTE_DEVICE_CORE_OP_TIMEOUT ); // If there was a failure, then transition directly to the stopped state. if (fw_device->operation_status != SCI_SUCCESS) { /** * @todo We may want to consider adding handling to reset the * structure data for the framework and core devices here * in order to help aid recovery. */ fw_device->state_handlers->stop_complete_handler( fw_device, fw_device->operation_status ); } }
/** * @brief This method implements the actions taken when entering the * STOPPED state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_DOMAIN object in the method implementation. * * @return none */ static void scif_sas_domain_stopped_state_enter( SCI_BASE_OBJECT_T * object ) { SCIF_SAS_DOMAIN_T * fw_domain = (SCIF_SAS_DOMAIN_T *)object; SET_STATE_HANDLER( fw_domain, scif_sas_domain_state_handler_table, SCI_BASE_DOMAIN_STATE_STOPPED ); SCIF_LOG_TRACE(( sci_base_object_get_logger(fw_domain), SCIF_LOG_OBJECT_DOMAIN | SCIF_LOG_OBJECT_DOMAIN_DISCOVERY, "scif_sas_domain_stopped_state_enter(0x%x) enter\n", fw_domain )); // A hot unplug of the direct attached device has occurred. Thus, // notify the user. Note, if the controller is not in READY state, // mostly likely the controller is in STOPPING or STOPPED state, // meaning the controller is in the process of stopping, we should // not call back to user in the middle of controller stopping. if(fw_domain->controller->parent.state_machine.current_state_id == SCI_BASE_CONTROLLER_STATE_READY) scif_cb_domain_change_notification(fw_domain->controller, fw_domain); }
/** * * * @param[in] object */ static void scic_sds_remote_node_context_initial_state_enter( SCI_BASE_OBJECT_T * object ) { SCIC_SDS_REMOTE_NODE_CONTEXT_T * rnc; rnc = (SCIC_SDS_REMOTE_NODE_CONTEXT_T *)object; SET_STATE_HANDLER( rnc, scic_sds_remote_node_context_state_handler_table, SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE ); // Check to see if we have gotten back to the initial state because someone // requested to destroy the remote node context object. if ( rnc->state_machine.previous_state_id == SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE ) { rnc->destination_state = SCIC_SDS_REMOTE_NODE_DESTINATION_STATE_UNSPECIFIED; scic_sds_remote_node_context_notify_user(rnc); // Since we are destroying the remote node context deinitialize the state logging // should we resume the remote node context the state logging will be reinitialized // on the resume handler. scic_sds_remote_node_context_deinitialize_state_logging(rnc); } }
/** * @brief This method implements the actions taken when entering the * STARTING state. This includes setting the state handlers and * checking to see if the core port has already become READY. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_DOMAIN object in the method implementation. * * @return none */ static void scif_sas_domain_starting_state_enter( SCI_BASE_OBJECT_T * object ) { SCIF_SAS_DOMAIN_T * fw_domain = (SCIF_SAS_DOMAIN_T *)object; SET_STATE_HANDLER( fw_domain, scif_sas_domain_state_handler_table, SCI_BASE_DOMAIN_STATE_STARTING ); SCIF_LOG_TRACE(( sci_base_object_get_logger(fw_domain), SCIF_LOG_OBJECT_DOMAIN | SCIF_LOG_OBJECT_DOMAIN_DISCOVERY, "scif_sas_domain_starting_state_enter(0x%x) enter\n", fw_domain )); scif_sas_domain_transition_from_discovering_state(fw_domain); // If we entered the STARTING state and the core port is actually ready, // then directly transition into the READY state. This can occur // if we were in the middle of discovery when the port failed // (causing a transition to STOPPING), then before reaching STOPPED // the port becomes ready again. if (fw_domain->is_port_ready == TRUE) { sci_base_state_machine_change_state( &fw_domain->parent.state_machine, SCI_BASE_DOMAIN_STATE_READY ); } }
/** * @brief This method implements the actions taken when entering the UPDATING * PORT WIDTH state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_updating_port_width_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_state_handler_table, SCI_BASE_REMOTE_DEVICE_STATE_UPDATING_PORT_WIDTH ); fw_device->destination_state = SCIF_SAS_REMOTE_DEVICE_DESTINATION_STATE_READY; //If the request count is zero, go ahead to update the RNC. //If not, don't do anything for now. The IO complete handler of this state //will update the RNC whenever the request count goes down to zero. if (fw_device->request_count == 0) { //stop the device, upon the stop complete callback, start the device again //with the updated port width. scic_remote_device_stop( fw_device->core_object, SCIF_SAS_REMOTE_DEVICE_CORE_OP_TIMEOUT); } }
/** * @brief This method implements the actions taken when entering the * STOPPING state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_CONTROLLER object in the method implementation. * * @return none */ static void scif_sas_controller_stopping_state_enter( SCI_BASE_OBJECT_T * object ) { SCIF_SAS_CONTROLLER_T * fw_controller = (SCIF_SAS_CONTROLLER_T *)object; SET_STATE_HANDLER( fw_controller, scif_sas_controller_state_handler_table, SCI_BASE_CONTROLLER_STATE_STOPPING ); }
/** * @brief This method implements the actions taken when entering the * FINAL state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_TASK_REQUEST object in the method implementation. * * @return none */ static void scif_sas_task_request_final_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T *)object; SET_STATE_HANDLER( &fw_task->parent, scif_sas_task_request_state_handler_table, SCI_BASE_REQUEST_STATE_FINAL ); }
/** * @brief This method implements the actions taken when entering the * CONSTRUCTED state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_TASK_REQUEST object in the method implementation. * * @return none */ static void scif_sas_task_request_constructed_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T *)object; SET_STATE_HANDLER( &fw_task->parent, scif_sas_task_request_state_handler_table, SCI_BASE_REQUEST_STATE_CONSTRUCTED ); }
/** * @brief This method performs the actions required when entering the * SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION * sub-state. This includes setting the SMP request state handlers for * this sub-state. * * @param[in] object This parameter specifies the request object for which * the sub-state change is occuring. * * @return none. */ static void scic_sds_smp_request_started_await_tc_completion_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIC_SDS_REQUEST_T *this_request = (SCIC_SDS_REQUEST_T *)object; SET_STATE_HANDLER( this_request, scic_sds_smp_request_started_substate_handler_table, SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION ); }
/** * @brief This method implements the actions taken when entering the * READY TASK MGMT substate. This includes setting the state * handler methods. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_ready_taskmgmt_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_ready_substate_handler_table, SCIF_SAS_REMOTE_DEVICE_READY_SUBSTATE_TASK_MGMT ); }
/** * @brief This method implements the actions taken when entering the * FINAL state. This includes setting the FINAL state handler * methods. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_final_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_state_handler_table, SCI_BASE_REMOTE_DEVICE_STATE_FINAL ); }
/** * @brief This method performs the actions required when entering the * SCIC_SDS_IO_REQUEST_STARTED_SUBSTATE_AWAIT_TC_RESPONSE sub-state. * This includes setting the IO request state handlers for this * sub-state. * * @param[in] object This parameter specifies the request object for which * the sub-state change is occurring. * * @return none. */ static void scic_sds_io_request_started_task_mgmt_await_task_response_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIC_SDS_REQUEST_T *this_request = (SCIC_SDS_REQUEST_T *)object; SET_STATE_HANDLER( this_request, scic_sds_ssp_task_request_started_substate_handler_table, SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE ); }
/** * @brief This method implements the actions taken when entering the * INITIAL state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_CONTROLLER object in the method implementation. * * @return none */ static void scif_sas_controller_initial_state_enter( SCI_BASE_OBJECT_T * object ) { SCIF_SAS_CONTROLLER_T * fw_controller = (SCIF_SAS_CONTROLLER_T *)object; SET_STATE_HANDLER( fw_controller, scif_sas_controller_state_handler_table, SCI_BASE_CONTROLLER_STATE_INITIAL ); }
/** * @brief This method performs the actions required when entering the * SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_RESPONSE sub-state. * This includes setting the IO request state handlers for this * sub-state. * * @param[in] object This parameter specifies the request object for which * the sub-state change is occuring. * * @return none. */ static void scic_sds_smp_request_started_await_response_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIC_SDS_REQUEST_T *this_request = (SCIC_SDS_REQUEST_T *)object; SET_STATE_HANDLER( this_request, scic_sds_smp_request_started_substate_handler_table, SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE ); }
/** * @brief This method implements the actions taken when entering the * STARTING COMPLETE substate. This includes setting the * state handler methods. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_starting_complete_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_starting_substate_handler_table, SCIF_SAS_REMOTE_DEVICE_STARTING_SUBSTATE_AWAIT_READY ); }
/** * * * @param[in] object */ static void scic_sds_remote_node_context_await_suspension_state_enter( SCI_BASE_OBJECT_T * object ) { SCIC_SDS_REMOTE_NODE_CONTEXT_T * rnc; rnc = (SCIC_SDS_REMOTE_NODE_CONTEXT_T *)object; SET_STATE_HANDLER( rnc, scic_sds_remote_node_context_state_handler_table, SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE ); }
/** * @brief This method implements the actions taken when entering the * STOPPING state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_DOMAIN object in the method implementation. * * @return none */ static void scif_sas_domain_stopping_state_enter( SCI_BASE_OBJECT_T * object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device; SCIF_SAS_DOMAIN_T * fw_domain = (SCIF_SAS_DOMAIN_T *)object; SCI_ABSTRACT_ELEMENT_T * element = sci_abstract_list_get_front( &fw_domain->remote_device_list ); SET_STATE_HANDLER( fw_domain, scif_sas_domain_state_handler_table, SCI_BASE_DOMAIN_STATE_STOPPING ); // This must be invoked after the state handlers are set to ensure // appropriate processing will occur if the user attempts to perform // additional actions. scif_sas_domain_transition_from_discovering_state(fw_domain); SCIF_LOG_TRACE(( sci_base_object_get_logger(fw_domain), SCIF_LOG_OBJECT_DOMAIN | SCIF_LOG_OBJECT_DOMAIN_DISCOVERY, "scif_sas_domain_stopping_state_enter(0x%x) enter\n", fw_domain )); scif_sas_high_priority_request_queue_purge_domain( &fw_domain->controller->hprq, fw_domain ); // Search the domain's list of devices and put them all in the STOPPING // state. while (element != NULL) { fw_device = (SCIF_SAS_REMOTE_DEVICE_T*) sci_abstract_list_get_object(element); // This method will stop the core device. The core will terminate // all IO requests currently outstanding. fw_device->state_handlers->parent.stop_handler(&fw_device->parent); element = sci_abstract_list_get_next(element); } // Attempt to transition to the stopped state. scif_sas_domain_transition_to_stopped_state(fw_domain); }
/** * * * @param[in] device This is the SCI base object which is cast into a * SCIC_SDS_REMOTE_DEVICE object. * * @return none */ static void scic_sds_stp_remote_device_ready_ncq_substate_enter( SCI_BASE_OBJECT_T * device ) { SCIC_SDS_REMOTE_DEVICE_T * this_device; this_device = (SCIC_SDS_REMOTE_DEVICE_T *)device; SET_STATE_HANDLER( this_device, scic_sds_stp_remote_device_ready_substate_handler_table, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ ); }
/** * * * @param[in] object */ static void scic_sds_remote_node_context_tx_rx_suspended_state_enter( SCI_BASE_OBJECT_T * object ) { SCIC_SDS_REMOTE_NODE_CONTEXT_T * rnc; rnc = (SCIC_SDS_REMOTE_NODE_CONTEXT_T *)object; SET_STATE_HANDLER( rnc, scic_sds_remote_node_context_state_handler_table, SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE ); scic_sds_remote_node_context_continue_state_transitions(rnc); }
/** * * * @param[in] object */ static void scic_sds_remote_node_context_invalidating_state_enter( SCI_BASE_OBJECT_T * object ) { SCIC_SDS_REMOTE_NODE_CONTEXT_T * rnc; rnc = (SCIC_SDS_REMOTE_NODE_CONTEXT_T *)object; SET_STATE_HANDLER( rnc, scic_sds_remote_node_context_state_handler_table, SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE ); scic_sds_remote_node_context_invalidate_context_buffer(rnc); }
/** * * * @param[in] object */ static void scic_sds_remote_node_context_posting_state_enter( SCI_BASE_OBJECT_T * object ) { SCIC_SDS_REMOTE_NODE_CONTEXT_T * this_rnc; this_rnc = (SCIC_SDS_REMOTE_NODE_CONTEXT_T *)object; SET_STATE_HANDLER( this_rnc, scic_sds_remote_node_context_state_handler_table, SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE ); scic_sds_remote_node_context_validate_context_buffer(this_rnc); }
/** * @brief This method implements the actions taken when entering the * STARTING AWAIT COMPLETE substate. This includes setting the * state handler methods. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_REMOTE_DEVICE object in the method implementation. * * @return none */ static void scif_sas_remote_device_starting_await_complete_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( fw_device, scif_sas_remote_device_starting_substate_handler_table, SCIF_SAS_REMOTE_DEVICE_STARTING_SUBSTATE_AWAIT_COMPLETE ); fw_device->domain->device_start_in_progress_count++; fw_device->domain->device_start_count++; }
/** * This is the SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE enter method. This * method sets the ready cmd substate handlers and reports the device as ready. * * @param[in] object This is the SCI_BASE_OBJECT which is cast into a * SCIC_SDS_REMOTE_DEVICE. * * @return none */ static void scic_sds_smp_remote_device_ready_idle_substate_enter( SCI_BASE_OBJECT_T *object ) { SCIC_SDS_REMOTE_DEVICE_T *this_device = (SCIC_SDS_REMOTE_DEVICE_T *)object; SET_STATE_HANDLER( this_device, scic_sds_smp_remote_device_ready_substate_handler_table, SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE ); scic_cb_remote_device_ready( scic_sds_remote_device_get_controller(this_device), this_device); }
/** * @brief This method implements the actions taken when entering the * INITIAL state. * * @param[in] object This parameter specifies the base object for which * the state transition is occurring. This is cast into a * SCIF_SAS_TASK_REQUEST object in the method implementation. * * @return none */ static void scif_sas_task_request_initial_state_enter( SCI_BASE_OBJECT_T *object ) { SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T *)object; SET_STATE_HANDLER( &fw_task->parent, scif_sas_task_request_state_handler_table, SCI_BASE_REQUEST_STATE_INITIAL ); // Initial state is a transitional state to the constructed state sci_base_state_machine_change_state( &fw_task->parent.parent.state_machine, SCI_BASE_REQUEST_STATE_CONSTRUCTED ); }