FreeBSD/sys/dev/isci/scil/scic_sds_phy.c
/**
 * This method will perform the actions required by the SCIC_SDS_PHY on
 * entering the SCI_BASE_PHY_STATE_STARTING.
 *    - This function sets the state handlers for the phy object base state
 * machine starting state.
 *    - The SCU hardware is requested to start OOB/SN on this protocol engine.
 *    - The phy starting substate machine is started.
 *    - If the previous state was the ready state then the
 *      SCIC_SDS_CONTROLLER is informed that the phy has gone link down.
 *
 * @param[in] object This is the SCI_BASE_OBJECT which is cast to a
 *       SCIC_SDS_PHY object.
 *
 * @return none
 */
This method will perform the actions required by the SCIC_SDS_PHY on
entering the SCI_BASE_PHY_STATE_STARTING.
- This function sets the state handlers for the phy object base state
machine starting state.
- The SCU hardware is requested to start OOB/SN on this protocol engine.
- The phy starting substate machine is started.
- If the previous state was the ready state then the
SCIC_SDS_CONTROLLER is informed that the phy has gone link down.

@param[in] object This is the SCI_BASE_OBJECT which is cast to a
SCIC_SDS_PHY object.

@return none
This method will perform the actions required by the SCIC_SDS_PHY on entering the SCI_BASE_PHY_STATE_STARTING . - This function sets the state handlers for the phy object base state machine starting state . - The SCU hardware is requested to start OOB / SN on this protocol engine . - The phy starting substate machine is started . - If the previous state was the ready state then the SCIC_SDS_CONTROLLER is informed that the phy has gone link down . @param [ in ] object This is the SCI_BASE_OBJECT which is cast to a SCIC_SDS_PHY object . @return none
static
void scic_sds_phy_starting_state_enter(
   SCI_BASE_OBJECT_T *object
)
{
   SCIC_SDS_PHY_T *this_phy;
   this_phy = (SCIC_SDS_PHY_T *)object;
   scic_sds_phy_set_base_state_handlers(this_phy, SCI_BASE_PHY_STATE_STARTING);
   scu_link_layer_stop_protocol_engine(this_phy);
   scu_link_layer_start_oob(this_phy);
   this_phy->protocol = SCIC_SDS_PHY_PROTOCOL_UNKNOWN;
   this_phy->bcn_received_while_port_unassigned = FALSE;
   sci_base_state_machine_start(&this_phy->starting_substate_machine);
   if (this_phy->parent.state_machine.previous_state_id
       == SCI_BASE_PHY_STATE_READY)
   {
      scic_sds_controller_link_down(
         scic_sds_phy_get_controller(this_phy),
         scic_sds_phy_get_port(this_phy),
         this_phy
      );
   }
}
static void scic_sds_phy_starting_state_enter ( SCI_BASE_OBJECT_T * object ) { SCIC_SDS_PHY_T * this_phy ; this_phy = ( SCIC_SDS_PHY_T * ) object ; scic_sds_phy_set_base_state_handlers ( this_phy , SCI_BASE_PHY_STATE_STARTING ) ; scu_link_layer_stop_protocol_engine ( this_phy ) ; scu_link_layer_start_oob ( this_phy ) ; this_phy -> protocol = SCIC_SDS_PHY_PROTOCOL_UNKNOWN ; this_phy -> bcn_received_while_port_unassigned = FALSE ; sci_base_state_machine_start ( & this_phy -> starting_substate_machine ) ; if ( this_phy -> parent . state_machine . previous_state_id == SCI_BASE_PHY_STATE_READY ) { scic_sds_controller_link_down ( scic_sds_phy_get_controller ( this_phy ) , scic_sds_phy_get_port ( this_phy ) , this_phy ) ; } }
This method will perform the actions required by the SCIC_SDS_PHY on
 entering the SCI_BASE_PHY_STATE_STARTING.
This method will perform the actions required by the SCIC_SDS_PHY on entering the SCI_BASE_PHY_STATE_STARTING .
// We don't know what kind of phy we are going to be just yet // Change over to the starting substate machine to continue