+++ /dev/null
-/*
- * This file is provided under a dual BSD/GPLv2 license. When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * BSD LICENSE
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SCI_BASE_PHY_H_
-#define _SCI_BASE_PHY_H_
-
-/**
- * This file contains all of the structures, constants, and methods common to
- * all phy object definitions.
- *
- *
- */
-
-#include "sci_base_state_machine.h"
-
-/**
- * enum sci_base_phy_states - This enumeration depicts the standard states
- * common to all phy state machine implementations.
- *
- *
- */
-enum sci_base_phy_states {
- /**
- * Simply the initial state for the base domain state machine.
- */
- SCI_BASE_PHY_STATE_INITIAL,
-
- /**
- * This state indicates that the phy has successfully been stopped.
- * In this state no new IO operations are permitted on this phy.
- * This state is entered from the INITIAL state.
- * This state is entered from the STARTING state.
- * This state is entered from the READY state.
- * This state is entered from the RESETTING state.
- */
- SCI_BASE_PHY_STATE_STOPPED,
-
- /**
- * This state indicates that the phy is in the process of becomming
- * ready. In this state no new IO operations are permitted on this phy.
- * This state is entered from the STOPPED state.
- * This state is entered from the READY state.
- * This state is entered from the RESETTING state.
- */
- SCI_BASE_PHY_STATE_STARTING,
-
- /**
- * This state indicates the the phy is now ready. Thus, the user
- * is able to perform IO operations utilizing this phy as long as it
- * is currently part of a valid port.
- * This state is entered from the STARTING state.
- */
- SCI_BASE_PHY_STATE_READY,
-
- /**
- * This state indicates that the phy is in the process of being reset.
- * In this state no new IO operations are permitted on this phy.
- * This state is entered from the READY state.
- */
- SCI_BASE_PHY_STATE_RESETTING,
-
- /**
- * Simply the final state for the base phy state machine.
- */
- SCI_BASE_PHY_STATE_FINAL,
-};
-
-/**
- * struct sci_base_phy - This structure defines all of the fields common to PHY
- * objects.
- *
- *
- */
-struct sci_base_phy {
- /**
- * This field depicts the parent object (struct sci_base_object) for the phy.
- */
- struct sci_base_object parent;
-
- /**
- * This field contains the information for the base phy state machine.
- */
- struct sci_base_state_machine state_machine;
-};
-
-typedef enum sci_status (*sci_base_phy_handler_t)(struct sci_base_phy *);
-
-/**
- * struct sci_base_phy_state_handler - This structure contains all of the state
- * handler methods common to base phy state machines. Handler methods
- * provide the ability to change the behavior for user requests or
- * transitions depending on the state the machine is in.
- *
- *
- */
-struct sci_base_phy_state_handler {
- /**
- * The start_handler specifies the method invoked when there is an
- * attempt to start a phy.
- */
- sci_base_phy_handler_t start_handler;
-
- /**
- * The stop_handler specifies the method invoked when there is an
- * attempt to stop a phy.
- */
- sci_base_phy_handler_t stop_handler;
-
- /**
- * The reset_handler specifies the method invoked when there is an
- * attempt to reset a phy.
- */
- sci_base_phy_handler_t reset_handler;
-
- /**
- * The destruct_handler specifies the method invoked when attempting to
- * destruct a phy.
- */
- sci_base_phy_handler_t destruct_handler;
-
-};
-
-/**
- * sci_base_phy_construct() - Construct the base phy
- * @this_phy: This parameter specifies the base phy to be constructed.
- * @state_table: This parameter specifies the table of state definitions to be
- * utilized for the phy state machine.
- *
- */
-static inline void sci_base_phy_construct(
- struct sci_base_phy *base_phy,
- const struct sci_base_state *state_table)
-{
- base_phy->parent.private = NULL;
- sci_base_state_machine_construct(
- &base_phy->state_machine,
- &base_phy->parent,
- state_table,
- SCI_BASE_PHY_STATE_INITIAL
- );
-
- sci_base_state_machine_start(
- &base_phy->state_machine
- );
-}
-
-
-#endif /* _SCI_BASE_PHY_H_ */
writel(0x1F4, &sci_phy->link_layer_registers->link_layer_hang_detection_timeout);
/* We can exit the initial state to the stopped state */
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STOPPED);
return SCI_SUCCESS;
sci_base_state_machine_stop(&sci_phy->starting_substate_machine);
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STARTING);
}
/*
* There is nothing that needs to be done in this state just
* transition to the stopped state. */
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STOPPED);
return SCI_SUCCESS;
*/
enum sci_status scic_sds_phy_start(struct scic_sds_phy *sci_phy)
{
- return sci_phy->state_handlers->parent.start_handler(&sci_phy->parent);
+ return sci_phy->state_handlers->start_handler(sci_phy);
}
/**
*/
enum sci_status scic_sds_phy_stop(struct scic_sds_phy *sci_phy)
{
- return sci_phy->state_handlers->parent.stop_handler(&sci_phy->parent);
+ return sci_phy->state_handlers->stop_handler(sci_phy);
}
/**
enum sci_status scic_sds_phy_reset(
struct scic_sds_phy *this_phy)
{
- return this_phy->state_handlers->parent.reset_handler(
- &this_phy->parent
- );
+ return this_phy->state_handlers->reset_handler(this_phy);
}
/**
sci_base_state_machine_stop(&sci_phy->starting_substate_machine);
/* Re-enter the base state machine starting state */
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STARTING);
}
* SCIC SDS PHY general handlers
************************************************************************** */
static enum sci_status scic_sds_phy_starting_substate_general_stop_handler(
- struct sci_base_phy *phy)
+ struct scic_sds_phy *phy)
{
- struct scic_sds_phy *this_phy;
- this_phy = (struct scic_sds_phy *)phy;
-
- sci_base_state_machine_stop(&this_phy->starting_substate_machine);
+ sci_base_state_machine_stop(&phy->starting_substate_machine);
sci_base_state_machine_change_state(&phy->state_machine,
SCI_BASE_PHY_STATE_STOPPED);
* * SCIC SDS PHY POWER_HANDLERS
* ***************************************************************************** */
-/**
- * scic_sds_phy_starting_substate_await_sas_power_consume_power_handler -
- * @phy: This is the struct sci_base_phy object which is cast into a struct scic_sds_phy
- * object.
- *
+/*
* This method is called by the struct scic_sds_controller when the phy object is
* granted power. - The notify enable spinups are turned on for this phy object
* - The phy state machine is transitioned to the
return SCI_SUCCESS;
}
-/**
- *
- * @phy: This is the struct sci_base_phy object which is cast into a struct scic_sds_phy
- * object.
- *
+/*
* This method is called by the struct scic_sds_controller when the phy object is
* granted power. - The phy state machine is transitioned to the
* SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_PHY_EN. enum sci_status SCI_SUCCESS
return SCI_SUCCESS;
}
-static enum sci_status default_phy_handler(struct sci_base_phy *base_phy, const char *func)
+static enum sci_status default_phy_handler(struct scic_sds_phy *sci_phy,
+ const char *func)
{
- struct scic_sds_phy *sci_phy;
-
- sci_phy = container_of(base_phy, typeof(*sci_phy), parent);
dev_dbg(sciphy_to_dev(sci_phy),
"%s: in wrong state: %d\n", func,
- sci_base_state_machine_get_state(&base_phy->state_machine));
+ sci_base_state_machine_get_state(&sci_phy->state_machine));
return SCI_FAILURE_INVALID_STATE;
}
-static enum sci_status scic_sds_phy_default_start_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_default_start_handler(struct scic_sds_phy *sci_phy)
{
- return default_phy_handler(base_phy, __func__);
+ return default_phy_handler(sci_phy, __func__);
}
-static enum sci_status scic_sds_phy_default_stop_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_default_stop_handler(struct scic_sds_phy *sci_phy)
{
- return default_phy_handler(base_phy, __func__);
+ return default_phy_handler(sci_phy, __func__);
}
-static enum sci_status scic_sds_phy_default_reset_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_default_reset_handler(struct scic_sds_phy *sci_phy)
{
- return default_phy_handler(base_phy, __func__);
+ return default_phy_handler(sci_phy, __func__);
}
-static enum sci_status scic_sds_phy_default_destroy_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_default_destroy_handler(struct scic_sds_phy *sci_phy)
{
- return default_phy_handler(base_phy, __func__);
+ return default_phy_handler(sci_phy, __func__);
}
-static enum sci_status scic_sds_phy_default_frame_handler(struct scic_sds_phy *sci_phy,
- u32 frame_index)
+static enum sci_status
+scic_sds_phy_default_frame_handler(struct scic_sds_phy *sci_phy,
+ u32 frame_index)
{
struct scic_sds_controller *scic = scic_sds_phy_get_controller(sci_phy);
- default_phy_handler(&sci_phy->parent, __func__);
+ default_phy_handler(sci_phy, __func__);
scic_sds_controller_release_frame(scic, frame_index);
return SCI_FAILURE_INVALID_STATE;
}
-static enum sci_status scic_sds_phy_default_event_handler(struct scic_sds_phy *sci_phy,
- u32 event_code)
+static enum sci_status
+scic_sds_phy_default_event_handler(struct scic_sds_phy *sci_phy,
+ u32 event_code)
{
- return default_phy_handler(&sci_phy->parent, __func__);
+ return default_phy_handler(sci_phy, __func__);
}
-static enum sci_status scic_sds_phy_default_consume_power_handler(struct scic_sds_phy *sci_phy)
+static enum sci_status
+scic_sds_phy_default_consume_power_handler(struct scic_sds_phy *sci_phy)
{
- return default_phy_handler(&sci_phy->parent, __func__);
+ return default_phy_handler(sci_phy, __func__);
}
static const struct scic_sds_phy_state_handler scic_sds_phy_starting_substate_handler_table[] = {
[SCIC_SDS_PHY_STARTING_SUBSTATE_INITIAL] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_default_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_default_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_OSSP_EN] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_ossp_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_ossp_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_SPEED_EN] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_sas_phy_speed_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_sas_phy_speed_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_IAF_UF] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_default_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_starting_substate_await_iaf_uf_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_iaf_uf_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_default_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_starting_substate_await_iaf_uf_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_iaf_uf_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_POWER] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_sas_power_event_handler,
- .consume_power_handler = scic_sds_phy_starting_substate_await_sas_power_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_sas_power_event_handler,
+ .consume_power_handler = scic_sds_phy_starting_substate_await_sas_power_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_POWER] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_sata_power_event_handler,
- .consume_power_handler = scic_sds_phy_starting_substate_await_sata_power_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_sata_power_event_handler,
+ .consume_power_handler = scic_sds_phy_starting_substate_await_sata_power_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_PHY_EN] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_sata_phy_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_sata_phy_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_SPEED_EN] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_default_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_sata_speed_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_default_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_sata_speed_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SIG_FIS_UF] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
- .frame_handler = scic_sds_phy_starting_substate_await_sig_fis_frame_handler,
- .event_handler = scic_sds_phy_starting_substate_await_sig_fis_event_handler,
- .consume_power_handler = scic_sds_phy_default_consume_power_handler
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
+ .frame_handler = scic_sds_phy_starting_substate_await_sig_fis_frame_handler,
+ .event_handler = scic_sds_phy_starting_substate_await_sig_fis_event_handler,
+ .consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCIC_SDS_PHY_STARTING_SUBSTATE_FINAL] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_default_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
{
struct scic_sds_phy *sci_phy;
- sci_phy = container_of(object, typeof(*sci_phy), parent.parent);
+ sci_phy = container_of(object, typeof(*sci_phy), parent);
scic_sds_phy_set_starting_substate_handlers(sci_phy,
SCIC_SDS_PHY_STARTING_SUBSTATE_FINAL);
/* State machine has run to completion so exit out and change
* the base state machine to the ready state
*/
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_READY);
}
}
};
-/**
- *
- * @phy: This is the struct sci_base_phy object which is cast into a
- * struct scic_sds_phy object.
- *
+/*
* This method takes the struct scic_sds_phy from a stopped state and
* attempts to start it. - The phy state machine is transitioned to the
* SCI_BASE_PHY_STATE_STARTING. enum sci_status SCI_SUCCESS
*/
-static enum sci_status scic_sds_phy_stopped_state_start_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_stopped_state_start_handler(struct scic_sds_phy *sci_phy)
{
struct isci_host *ihost;
- struct scic_sds_phy *sci_phy;
struct scic_sds_controller *scic;
- sci_phy = container_of(base_phy, typeof(*sci_phy), parent);
scic = scic_sds_phy_get_controller(sci_phy),
ihost = sci_object_get_association(scic);
scic_sds_phy_sata_timeout);
if (sci_phy->sata_timeout_timer)
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STARTING);
return SCI_SUCCESS;
}
-static enum sci_status scic_sds_phy_stopped_state_destroy_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_stopped_state_destroy_handler(struct scic_sds_phy *sci_phy)
{
return SCI_SUCCESS;
}
-static enum sci_status scic_sds_phy_ready_state_stop_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_ready_state_stop_handler(struct scic_sds_phy *sci_phy)
{
- sci_base_state_machine_change_state(&base_phy->state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STOPPED);
return SCI_SUCCESS;
}
-static enum sci_status scic_sds_phy_ready_state_reset_handler(struct sci_base_phy *base_phy)
+static enum sci_status
+scic_sds_phy_ready_state_reset_handler(struct scic_sds_phy *sci_phy)
{
- sci_base_state_machine_change_state(&base_phy->state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_RESETTING);
return SCI_SUCCESS;
switch (scu_get_event_code(event_code)) {
case SCU_EVENT_LINK_FAILURE:
/* Link failure change state back to the starting state */
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STARTING);
result = SCI_SUCCESS;
break;
switch (scu_get_event_code(event_code)) {
case SCU_EVENT_HARD_RESET_TRANSMITTED:
/* Link failure change state back to the starting state */
- sci_base_state_machine_change_state(&sci_phy->parent.state_machine,
+ sci_base_state_machine_change_state(&sci_phy->state_machine,
SCI_BASE_PHY_STATE_STARTING);
result = SCI_SUCCESS;
break;
static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[] = {
[SCI_BASE_PHY_STATE_INITIAL] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_default_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_default_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_default_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCI_BASE_PHY_STATE_STOPPED] = {
- .parent.start_handler = scic_sds_phy_stopped_state_start_handler,
- .parent.stop_handler = scic_sds_phy_default_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_stopped_state_destroy_handler,
+ .start_handler = scic_sds_phy_stopped_state_start_handler,
+ .stop_handler = scic_sds_phy_default_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_stopped_state_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_default_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCI_BASE_PHY_STATE_STARTING] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_default_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_default_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_default_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCI_BASE_PHY_STATE_READY] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_ready_state_stop_handler,
- .parent.reset_handler = scic_sds_phy_ready_state_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_ready_state_stop_handler,
+ .reset_handler = scic_sds_phy_ready_state_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_ready_state_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCI_BASE_PHY_STATE_RESETTING] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_default_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_default_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_resetting_state_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
},
[SCI_BASE_PHY_STATE_FINAL] = {
- .parent.start_handler = scic_sds_phy_default_start_handler,
- .parent.stop_handler = scic_sds_phy_default_stop_handler,
- .parent.reset_handler = scic_sds_phy_default_reset_handler,
- .parent.destruct_handler = scic_sds_phy_default_destroy_handler,
+ .start_handler = scic_sds_phy_default_start_handler,
+ .stop_handler = scic_sds_phy_default_stop_handler,
+ .reset_handler = scic_sds_phy_default_reset_handler,
+ .destruct_handler = scic_sds_phy_default_destroy_handler,
.frame_handler = scic_sds_phy_default_frame_handler,
.event_handler = scic_sds_phy_default_event_handler,
.consume_power_handler = scic_sds_phy_default_consume_power_handler
scu_link_layer_stop_protocol_engine(sci_phy);
- if (sci_phy->parent.state_machine.previous_state_id !=
+ if (sci_phy->state_machine.previous_state_id !=
SCI_BASE_PHY_STATE_INITIAL)
scic_sds_controller_link_down(
scic_sds_phy_get_controller(sci_phy),
/* Change over to the starting substate machine to continue */
sci_base_state_machine_start(&this_phy->starting_substate_machine);
- if (this_phy->parent.state_machine.previous_state_id
+ if (this_phy->state_machine.previous_state_id
== SCI_BASE_PHY_STATE_READY) {
scic_sds_controller_link_down(
scic_sds_phy_get_controller(this_phy),
scu_link_layer_tx_hard_reset(this_phy);
} else {
/*
- * The SCU does not need to have a descrete reset state so just go back to
+ * The SCU does not need to have a discrete reset state so just go back to
* the starting state. */
- sci_base_state_machine_change_state(
- &this_phy->parent.state_machine,
- SCI_BASE_PHY_STATE_STARTING
- );
+ sci_base_state_machine_change_state(&this_phy->state_machine,
+ SCI_BASE_PHY_STATE_STARTING);
}
}
void scic_sds_phy_construct(struct scic_sds_phy *sci_phy,
struct scic_sds_port *owning_port, u8 phy_index)
{
- /*
- * Call the base constructor first
- */
- sci_base_phy_construct(&sci_phy->parent, scic_sds_phy_state_table);
+
+ sci_phy->parent.private = NULL;
+ sci_base_state_machine_construct(&sci_phy->state_machine,
+ &sci_phy->parent,
+ scic_sds_phy_state_table,
+ SCI_BASE_PHY_STATE_INITIAL);
+
+ sci_base_state_machine_start(&sci_phy->state_machine);
/* Copy the rest of the input data to our locals */
sci_phy->owning_port = owning_port;
/* Initialize the the substate machines */
sci_base_state_machine_construct(&sci_phy->starting_substate_machine,
- &sci_phy->parent.parent,
+ &sci_phy->parent,
scic_sds_phy_starting_substates,
SCIC_SDS_PHY_STARTING_SUBSTATE_INITIAL);
}