diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-06-28 15:05:53 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 04:04:52 -0700 |
commit | 852809559e4680ba4768262a6c3d21454fcd460e (patch) | |
tree | a67170a9dd2a4c9f15d215f4b96e890cdb53a7e7 /drivers/scsi | |
parent | 5076a1a97e2fa61c847a5fdd4b1991faf7716da6 (diff) |
isci: unify isci_phy and scic_sds_phy
They are one in the same object so remove the distinction. The near
duplicate fields (owning_port, and isci_port) will be cleaned up
after the scic_sds_port isci_port unification.
Reported-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/isci/host.c | 92 | ||||
-rw-r--r-- | drivers/scsi/isci/host.h | 17 | ||||
-rw-r--r-- | drivers/scsi/isci/phy.c | 479 | ||||
-rw-r--r-- | drivers/scsi/isci/phy.h | 112 | ||||
-rw-r--r-- | drivers/scsi/isci/port.c | 299 | ||||
-rw-r--r-- | drivers/scsi/isci/port.h | 16 | ||||
-rw-r--r-- | drivers/scsi/isci/port_config.c | 135 | ||||
-rw-r--r-- | drivers/scsi/isci/remote_device.c | 2 |
8 files changed, 500 insertions, 652 deletions
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c index d91cd6d82747..c5c2733a5197 100644 --- a/drivers/scsi/isci/host.c +++ b/drivers/scsi/isci/host.c @@ -311,7 +311,7 @@ static void scic_sds_controller_unsolicited_frame(struct scic_sds_controller *sc struct isci_host *ihost = scic_to_ihost(scic); struct scu_unsolicited_frame_header *frame_header; - struct scic_sds_phy *phy; + struct isci_phy *iphy; struct scic_sds_remote_device *device; enum sci_status result = SCI_FAILURE; @@ -332,8 +332,8 @@ static void scic_sds_controller_unsolicited_frame(struct scic_sds_controller *sc if (frame_header->is_address_frame) { index = SCU_GET_PROTOCOL_ENGINE_INDEX(completion_entry); - phy = &ihost->phys[index].sci; - result = scic_sds_phy_frame_handler(phy, frame_index); + iphy = &ihost->phys[index]; + result = scic_sds_phy_frame_handler(iphy, frame_index); } else { index = SCU_GET_COMPLETION_INDEX(completion_entry); @@ -344,8 +344,8 @@ static void scic_sds_controller_unsolicited_frame(struct scic_sds_controller *sc * device that has not yet been created. In either case forwared * the frame to the PE and let it take care of the frame data. */ index = SCU_GET_PROTOCOL_ENGINE_INDEX(completion_entry); - phy = &ihost->phys[index].sci; - result = scic_sds_phy_frame_handler(phy, frame_index); + iphy = &ihost->phys[index]; + result = scic_sds_phy_frame_handler(iphy, frame_index); } else { if (index < scic->remote_node_entries) device = scic->device_table[index]; @@ -372,7 +372,7 @@ static void scic_sds_controller_event_completion(struct scic_sds_controller *sci struct isci_host *ihost = scic_to_ihost(scic); struct scic_sds_remote_device *device; struct isci_request *ireq; - struct scic_sds_phy *phy; + struct isci_phy *iphy; u32 index; index = SCU_GET_COMPLETION_INDEX(completion_entry); @@ -452,8 +452,8 @@ static void scic_sds_controller_event_completion(struct scic_sds_controller *sci * we get the event notification. This is a type 4 event. */ case SCU_EVENT_TYPE_OSSP_EVENT: index = SCU_GET_PROTOCOL_ENGINE_INDEX(completion_entry); - phy = &ihost->phys[index].sci; - scic_sds_phy_event_handler(phy, completion_entry); + iphy = &ihost->phys[index]; + scic_sds_phy_event_handler(iphy, completion_entry); break; case SCU_EVENT_TYPE_RNC_SUSPEND_TX: @@ -862,11 +862,11 @@ static void scic_sds_controller_transition_to_ready( } } -static bool is_phy_starting(struct scic_sds_phy *sci_phy) +static bool is_phy_starting(struct isci_phy *iphy) { enum scic_sds_phy_states state; - state = sci_phy->sm.current_state_id; + state = iphy->sm.current_state_id; switch (state) { case SCI_PHY_STARTING: case SCI_PHY_SUB_INITIAL: @@ -896,7 +896,7 @@ static enum sci_status scic_sds_controller_start_next_phy(struct scic_sds_contro { struct isci_host *ihost = scic_to_ihost(scic); struct scic_sds_oem_params *oem = &scic->oem_parameters.sds1; - struct scic_sds_phy *sci_phy; + struct isci_phy *iphy; enum sci_status status; status = SCI_SUCCESS; @@ -910,10 +910,10 @@ static enum sci_status scic_sds_controller_start_next_phy(struct scic_sds_contro u8 index; for (index = 0; index < SCI_MAX_PHYS; index++) { - sci_phy = &ihost->phys[index].sci; - state = sci_phy->sm.current_state_id; + iphy = &ihost->phys[index]; + state = iphy->sm.current_state_id; - if (!phy_get_non_dummy_port(sci_phy)) + if (!phy_get_non_dummy_port(iphy)) continue; /* The controller start operation is complete iff: @@ -922,9 +922,9 @@ static enum sci_status scic_sds_controller_start_next_phy(struct scic_sds_contro * - have an indication of a connected device and it has * finished the link training process. */ - if ((sci_phy->is_in_link_training == false && state == SCI_PHY_INITIAL) || - (sci_phy->is_in_link_training == false && state == SCI_PHY_STOPPED) || - (sci_phy->is_in_link_training == true && is_phy_starting(sci_phy))) { + if ((iphy->is_in_link_training == false && state == SCI_PHY_INITIAL) || + (iphy->is_in_link_training == false && state == SCI_PHY_STOPPED) || + (iphy->is_in_link_training == true && is_phy_starting(iphy))) { is_controller_start_complete = false; break; } @@ -939,10 +939,10 @@ static enum sci_status scic_sds_controller_start_next_phy(struct scic_sds_contro scic->phy_startup_timer_pending = false; } } else { - sci_phy = &ihost->phys[scic->next_phy_to_start].sci; + iphy = &ihost->phys[scic->next_phy_to_start]; if (oem->controller.mode_type == SCIC_PORT_MANUAL_CONFIGURATION_MODE) { - if (phy_get_non_dummy_port(sci_phy) == NULL) { + if (phy_get_non_dummy_port(iphy) == NULL) { scic->next_phy_to_start++; /* Caution recursion ahead be forwarned @@ -958,7 +958,7 @@ static enum sci_status scic_sds_controller_start_next_phy(struct scic_sds_contro } } - status = scic_sds_phy_start(sci_phy); + status = scic_sds_phy_start(iphy); if (status == SCI_SUCCESS) { sci_mod_timer(&scic->phy_timer, @@ -970,7 +970,7 @@ static enum sci_status scic_sds_controller_start_next_phy(struct scic_sds_contro "to stop phy %d because of status " "%d.\n", __func__, - ihost->phys[scic->next_phy_to_start].sci.phy_index, + ihost->phys[scic->next_phy_to_start].phy_index, status); } @@ -1312,8 +1312,8 @@ void isci_host_deinit(struct isci_host *ihost) /* Cancel any/all outstanding phy timers */ for (i = 0; i < SCI_MAX_PHYS; i++) { - struct scic_sds_phy *sci_phy = &ihost->phys[i].sci; - del_timer_sync(&sci_phy->sata_timer.timer); + struct isci_phy *iphy = &ihost->phys[i]; + del_timer_sync(&iphy->sata_timer.timer); } del_timer_sync(&ihost->sci.port_agent.timer.timer); @@ -1527,7 +1527,7 @@ static enum sci_status scic_sds_controller_stop_phys(struct scic_sds_controller status = SCI_SUCCESS; for (index = 0; index < SCI_MAX_PHYS; index++) { - phy_status = scic_sds_phy_stop(&ihost->phys[index].sci); + phy_status = scic_sds_phy_stop(&ihost->phys[index]); if (phy_status != SCI_SUCCESS && phy_status != SCI_FAILURE_INVALID_STATE) { @@ -1537,7 +1537,7 @@ static enum sci_status scic_sds_controller_stop_phys(struct scic_sds_controller "%s: Controller stop operation failed to stop " "phy %d because of status %d.\n", __func__, - ihost->phys[index].sci.phy_index, phy_status); + ihost->phys[index].phy_index, phy_status); } } @@ -1786,7 +1786,7 @@ static enum sci_status scic_controller_construct(struct scic_sds_controller *sci /* Construct the phys for this controller */ for (i = 0; i < SCI_MAX_PHYS; i++) { /* Add all the PHYs to the dummy port */ - scic_sds_phy_construct(&ihost->phys[i].sci, + scic_sds_phy_construct(&ihost->phys[i], &ihost->ports[SCI_MAX_PORTS].sci, i); } @@ -1865,7 +1865,7 @@ static void power_control_timeout(unsigned long data) struct sci_timer *tmr = (struct sci_timer *)data; struct scic_sds_controller *scic = container_of(tmr, typeof(*scic), power_control.timer); struct isci_host *ihost = scic_to_ihost(scic); - struct scic_sds_phy *sci_phy; + struct isci_phy *iphy; unsigned long flags; u8 i; @@ -1886,8 +1886,8 @@ static void power_control_timeout(unsigned long data) if (scic->power_control.phys_waiting == 0) break; - sci_phy = scic->power_control.requesters[i]; - if (sci_phy == NULL) + iphy = scic->power_control.requesters[i]; + if (iphy == NULL) continue; if (scic->power_control.phys_granted_power >= @@ -1897,7 +1897,7 @@ static void power_control_timeout(unsigned long data) scic->power_control.requesters[i] = NULL; scic->power_control.phys_waiting--; scic->power_control.phys_granted_power++; - scic_sds_phy_consume_power_handler(sci_phy); + scic_sds_phy_consume_power_handler(iphy); } /* @@ -1919,14 +1919,14 @@ done: */ void scic_sds_controller_power_control_queue_insert( struct scic_sds_controller *scic, - struct scic_sds_phy *sci_phy) + struct isci_phy *iphy) { - BUG_ON(sci_phy == NULL); + BUG_ON(iphy == NULL); if (scic->power_control.phys_granted_power < scic->oem_parameters.sds1.controller.max_concurrent_dev_spin_up) { scic->power_control.phys_granted_power++; - scic_sds_phy_consume_power_handler(sci_phy); + scic_sds_phy_consume_power_handler(iphy); /* * stop and start the power_control timer. When the timer fires, the @@ -1941,7 +1941,7 @@ void scic_sds_controller_power_control_queue_insert( } else { /* Add the phy in the waiting list */ - scic->power_control.requesters[sci_phy->phy_index] = sci_phy; + scic->power_control.requesters[iphy->phy_index] = iphy; scic->power_control.phys_waiting++; } } @@ -1954,15 +1954,15 @@ void scic_sds_controller_power_control_queue_insert( */ void scic_sds_controller_power_control_queue_remove( struct scic_sds_controller *scic, - struct scic_sds_phy *sci_phy) + struct isci_phy *iphy) { - BUG_ON(sci_phy == NULL); + BUG_ON(iphy == NULL); - if (scic->power_control.requesters[sci_phy->phy_index] != NULL) { + if (scic->power_control.requesters[iphy->phy_index] != NULL) { scic->power_control.phys_waiting--; } - scic->power_control.requesters[sci_phy->phy_index] = NULL; + scic->power_control.requesters[iphy->phy_index] = NULL; } #define AFE_REGISTER_WRITE_DELAY 10 @@ -2225,7 +2225,7 @@ static enum sci_status scic_controller_initialize(struct scic_sds_controller *sc * are accessed during the port initialization. */ for (i = 0; i < SCI_MAX_PHYS; i++) { - result = scic_sds_phy_initialize(&ihost->phys[i].sci, + result = scic_sds_phy_initialize(&ihost->phys[i], &scic->scu_registers->peg0.pe[i].tl, &scic->scu_registers->peg0.pe[i].ll); if (result != SCI_SUCCESS) @@ -2484,43 +2484,43 @@ int isci_host_init(struct isci_host *isci_host) } void scic_sds_controller_link_up(struct scic_sds_controller *scic, - struct scic_sds_port *port, struct scic_sds_phy *phy) + struct scic_sds_port *port, struct isci_phy *iphy) { switch (scic->sm.current_state_id) { case SCIC_STARTING: sci_del_timer(&scic->phy_timer); scic->phy_startup_timer_pending = false; scic->port_agent.link_up_handler(scic, &scic->port_agent, - port, phy); + port, iphy); scic_sds_controller_start_next_phy(scic); break; case SCIC_READY: scic->port_agent.link_up_handler(scic, &scic->port_agent, - port, phy); + port, iphy); break; default: dev_dbg(scic_to_dev(scic), "%s: SCIC Controller linkup event from phy %d in " - "unexpected state %d\n", __func__, phy->phy_index, + "unexpected state %d\n", __func__, iphy->phy_index, scic->sm.current_state_id); } } void scic_sds_controller_link_down(struct scic_sds_controller *scic, - struct scic_sds_port *port, struct scic_sds_phy *phy) + struct scic_sds_port *port, struct isci_phy *iphy) { switch (scic->sm.current_state_id) { case SCIC_STARTING: case SCIC_READY: scic->port_agent.link_down_handler(scic, &scic->port_agent, - port, phy); + port, iphy); break; default: dev_dbg(scic_to_dev(scic), "%s: SCIC Controller linkdown event from phy %d in " "unexpected state %d\n", __func__, - phy->phy_index, + iphy->phy_index, scic->sm.current_state_id); } } diff --git a/drivers/scsi/isci/host.h b/drivers/scsi/isci/host.h index 0b26d25c19a9..1edd13535c24 100644 --- a/drivers/scsi/isci/host.h +++ b/drivers/scsi/isci/host.h @@ -101,14 +101,14 @@ struct scic_power_control { * This field is an array of phys that we are waiting on. The phys are direct * mapped into requesters via struct scic_sds_phy.phy_index */ - struct scic_sds_phy *requesters[SCI_MAX_PHYS]; + struct isci_phy *requesters[SCI_MAX_PHYS]; }; struct scic_sds_port_configuration_agent; typedef void (*port_config_fn)(struct scic_sds_controller *, struct scic_sds_port_configuration_agent *, - struct scic_sds_port *, struct scic_sds_phy *); + struct scic_sds_port *, struct isci_phy *); struct scic_sds_port_configuration_agent { u16 phy_configured_mask; @@ -523,9 +523,8 @@ static inline struct device *scic_to_dev(struct scic_sds_controller *scic) return &scic_to_ihost(scic)->pdev->dev; } -static inline struct device *sciphy_to_dev(struct scic_sds_phy *sci_phy) +static inline struct device *sciphy_to_dev(struct isci_phy *iphy) { - struct isci_phy *iphy = sci_phy_to_iphy(sci_phy); if (!iphy || !iphy->isci_port || !iphy->isci_port->isci_host) return NULL; @@ -606,21 +605,21 @@ struct isci_request *scic_request_by_tag(struct scic_sds_controller *scic, void scic_sds_controller_power_control_queue_insert( struct scic_sds_controller *scic, - struct scic_sds_phy *sci_phy); + struct isci_phy *iphy); void scic_sds_controller_power_control_queue_remove( struct scic_sds_controller *scic, - struct scic_sds_phy *sci_phy); + struct isci_phy *iphy); void scic_sds_controller_link_up( struct scic_sds_controller *scic, struct scic_sds_port *sci_port, - struct scic_sds_phy *sci_phy); + struct isci_phy *iphy); void scic_sds_controller_link_down( struct scic_sds_controller *scic, struct scic_sds_port *sci_port, - struct scic_sds_phy *sci_phy); + struct isci_phy *iphy); void scic_sds_controller_remote_device_stopped( struct scic_sds_controller *scic, @@ -651,7 +650,7 @@ void isci_host_deinit( void isci_host_port_link_up( struct isci_host *, struct scic_sds_port *, - struct scic_sds_phy *); + struct isci_phy *); int isci_host_dev_found(struct domain_device *); void isci_host_remote_device_start_complete( diff --git a/drivers/scsi/isci/phy.c b/drivers/scsi/isci/phy.c index 98d93aeea75d..0e60fb7bc1ab 100644 --- a/drivers/scsi/isci/phy.c +++ b/drivers/scsi/isci/phy.c @@ -62,9 +62,9 @@ /* Maximum arbitration wait time in micro-seconds */ #define SCIC_SDS_PHY_MAX_ARBITRATION_WAIT_TIME (700) -enum sas_linkrate sci_phy_linkrate(struct scic_sds_phy *sci_phy) +enum sas_linkrate sci_phy_linkrate(struct isci_phy *iphy) { - return sci_phy->max_negotiated_speed; + return iphy->max_negotiated_speed; } /* @@ -80,23 +80,23 @@ enum sas_linkrate sci_phy_linkrate(struct scic_sds_phy *sci_phy) * enum sci_status */ static enum sci_status scic_sds_phy_transport_layer_initialization( - struct scic_sds_phy *sci_phy, + struct isci_phy *iphy, struct scu_transport_layer_registers __iomem *transport_layer_registers) { u32 tl_control; - sci_phy->transport_layer_registers = transport_layer_registers; + iphy->transport_layer_registers = transport_layer_registers; writel(SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX, - &sci_phy->transport_layer_registers->stp_rni); + &iphy->transport_layer_registers->stp_rni); /* * Hardware team recommends that we enable the STP prefetch for all * transports */ - tl_control = readl(&sci_phy->transport_layer_registers->control); + tl_control = readl(&iphy->transport_layer_registers->control); tl_control |= SCU_TLCR_GEN_BIT(STP_WRITE_DATA_PREFETCH); - writel(tl_control, &sci_phy->transport_layer_registers->control); + writel(tl_control, &iphy->transport_layer_registers->control); return SCI_SUCCESS; } @@ -109,12 +109,12 @@ static enum sci_status scic_sds_phy_transport_layer_initialization( * enum sci_status */ static enum sci_status -scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, +scic_sds_phy_link_layer_initialization(struct isci_phy *iphy, struct scu_link_layer_registers __iomem *link_layer_registers) { struct scic_sds_controller *scic = - sci_phy->owning_port->owning_controller; - int phy_idx = sci_phy->phy_index; + iphy->owning_port->owning_controller; + int phy_idx = iphy->phy_index; struct sci_phy_user_params *phy_user = &scic->user_parameters.sds1.phys[phy_idx]; struct sci_phy_oem_params *phy_oem = @@ -126,7 +126,7 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, u32 llctl, link_rate; u32 clksm_value = 0; - sci_phy->link_layer_registers = link_layer_registers; + iphy->link_layer_registers = link_layer_registers; /* Set our IDENTIFY frame data */ #define SCI_END_DEVICE 0x01 @@ -136,32 +136,32 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, SCU_SAS_TIID_GEN_BIT(STP_INITIATOR) | SCU_SAS_TIID_GEN_BIT(DA_SATA_HOST) | SCU_SAS_TIID_GEN_VAL(DEVICE_TYPE, SCI_END_DEVICE), - &sci_phy->link_layer_registers->transmit_identification); + &iphy->link_layer_registers->transmit_identification); /* Write the device SAS Address */ writel(0xFEDCBA98, - &sci_phy->link_layer_registers->sas_device_name_high); - writel(phy_idx, &sci_phy->link_layer_registers->sas_device_name_low); + &iphy->link_layer_registers->sas_device_name_high); + writel(phy_idx, &iphy->link_layer_registers->sas_device_name_low); /* Write the source SAS Address */ writel(phy_oem->sas_address.high, - &sci_phy->link_layer_registers->source_sas_address_high); + &iphy->link_layer_registers->source_sas_address_high); writel(phy_oem->sas_address.low, - &sci_phy->link_layer_registers->source_sas_address_low); + &iphy->link_layer_registers->source_sas_address_low); /* Clear and Set the PHY Identifier */ - writel(0, &sci_phy->link_layer_registers->identify_frame_phy_id); + writel(0, &iphy->link_layer_registers->identify_frame_phy_id); writel(SCU_SAS_TIPID_GEN_VALUE(ID, phy_idx), - &sci_phy->link_layer_registers->identify_frame_phy_id); + &iphy->link_layer_registers->identify_frame_phy_id); /* Change the initial state of the phy configuration register */ phy_configuration = - readl(&sci_phy->link_layer_registers->phy_configuration); + readl(&iphy->link_layer_registers->phy_configuration); /* Hold OOB state machine in reset */ phy_configuration |= SCU_SAS_PCFG_GEN_BIT(OOB_RESET); writel(phy_configuration, - &sci_phy->link_layer_registers->phy_configuration); + &iphy->link_layer_registers->phy_configuration); /* Configure the SNW capabilities */ phy_cap.all = 0; @@ -191,14 +191,14 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, if ((parity_count % 2) != 0) phy_cap.parity = 1; - writel(phy_cap.all, &sci_phy->link_layer_registers->phy_capabilities); + writel(phy_cap.all, &iphy->link_layer_registers->phy_capabilities); /* Set the enable spinup period but disable the ability to send * notify enable spinup */ writel(SCU_ENSPINUP_GEN_VAL(COUNT, phy_user->notify_enable_spin_up_insertion_frequency), - &sci_phy->link_layer_registers->notify_enable_spinup_control); + &iphy->link_layer_registers->notify_enable_spinup_control); /* Write the ALIGN Insertion Ferequency for connected phy and * inpendent of connected state @@ -209,11 +209,11 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, clksm_value |= SCU_ALIGN_INSERTION_FREQUENCY_GEN_VAL(GENERAL, phy_user->align_insertion_frequency); - writel(clksm_value, &sci_phy->link_layer_registers->clock_skew_management); + writel(clksm_value, &iphy->link_layer_registers->clock_skew_management); /* @todo Provide a way to write this register correctly */ writel(0x02108421, - &sci_phy->link_layer_registers->afe_lookup_table_control); + &iphy->link_layer_registers->afe_lookup_table_control); llctl = SCU_SAS_LLCTL_GEN_VAL(NO_OUTBOUND_TASK_TIMEOUT, (u8)scic->user_parameters.sds1.no_outbound_task_timeout); @@ -230,7 +230,7 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, break; } llctl |= SCU_SAS_LLCTL_GEN_VAL(MAX_LINK_RATE, link_rate); - writel(llctl, &sci_phy->link_layer_registers->link_layer_control); + writel(llctl, &iphy->link_layer_registers->link_layer_control); if (is_a0() || is_a2()) { /* Program the max ARB time for the PHY to 700us so we inter-operate with @@ -239,14 +239,14 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, * generate the break. */ writel(SCIC_SDS_PHY_MAX_ARBITRATION_WAIT_TIME, - &sci_phy->link_layer_registers->maximum_arbitration_wait_timer_timeout); + &iphy->link_layer_registers->maximum_arbitration_wait_timer_timeout); } /* Disable link layer hang detection, rely on the OS timeout for I/O timeouts. */ - writel(0, &sci_phy->link_layer_registers->link_layer_hang_detection_timeout); + writel(0, &iphy->link_layer_registers->link_layer_hang_detection_timeout); /* We can exit the initial state to the stopped state */ - sci_change_state(&sci_phy->sm, SCI_PHY_STOPPED); + sci_change_state(&iphy->sm, SCI_PHY_STOPPED); return SCI_SUCCESS; } @@ -254,8 +254,8 @@ scic_sds_phy_link_layer_initialization(struct scic_sds_phy *sci_phy, static void phy_sata_timeout(unsigned long data) { struct sci_timer *tmr = (struct sci_timer *)data; - struct scic_sds_phy *sci_phy = container_of(tmr, typeof(*sci_phy), sata_timer); - struct isci_host *ihost = scic_to_ihost(sci_phy->owning_port->owning_controller); + struct isci_phy *iphy = container_of(tmr, typeof(*iphy), sata_timer); + struct isci_host *ihost = scic_to_ihost(iphy->owning_port->owning_controller); unsigned long flags; spin_lock_irqsave(&ihost->scic_lock, flags); @@ -263,13 +263,13 @@ static void phy_sata_timeout(unsigned long data) if (tmr->cancel) goto done; - dev_dbg(sciphy_to_dev(sci_phy), + dev_dbg(sciphy_to_dev(iphy), "%s: SCIC SDS Phy 0x%p did not receive signature fis before " "timeout.\n", __func__, - sci_phy); + iphy); - sci_change_state(&sci_phy->sm, SCI_PHY_STARTING); + sci_change_state(&iphy->sm, SCI_PHY_STARTING); done: spin_unlock_irqrestore(&ihost->scic_lock, flags); } @@ -287,30 +287,30 @@ done: * values indicate a handle/pointer to the port containing the phy. */ struct scic_sds_port *phy_get_non_dummy_port( - struct scic_sds_phy *sci_phy) + struct isci_phy *iphy) { - if (scic_sds_port_get_index(sci_phy->owning_port) == SCIC_SDS_DUMMY_PORT) + if (scic_sds_port_get_index(iphy->owning_port) == SCIC_SDS_DUMMY_PORT) return NULL; - return sci_phy->owning_port; + return iphy->owning_port; } /** * This method will assign a port to the phy object. - * @out]: sci_phy This parameter specifies the phy for which to assign a port + * @out]: iphy This parameter specifies the phy for which to assign a port * object. * * */ void scic_sds_phy_set_port( - struct scic_sds_phy *sci_phy, + struct isci_phy *iphy, struct scic_sds_port *sci_port) { - sci_phy->owning_port = sci_port; + iphy->owning_port = sci_port; - if (sci_phy->bcn_received_while_port_unassigned) { - sci_phy->bcn_received_while_port_unassigned = false; - scic_sds_port_broadcast_change_received(sci_phy->owning_port, sci_phy); + if (iphy->bcn_received_while_port_unassigned) { + iphy->bcn_received_while_port_unassigned = false; + scic_sds_port_broadcast_change_received(iphy->owning_port, iphy); } } @@ -322,22 +322,22 @@ void scic_sds_phy_set_port( * enum sci_status */ enum sci_status scic_sds_phy_initialize( - struct scic_sds_phy *sci_phy, + struct isci_phy *iphy, struct scu_transport_layer_registers __iomem *transport_layer_registers, struct scu_link_layer_registers __iomem *link_layer_registers) { /* Perfrom the initialization of the TL hardware */ scic_sds_phy_transport_layer_initialization( - sci_phy, + iphy, transport_layer_registers); /* Perofrm the initialization of the PE hardware */ - scic_sds_phy_link_layer_initialization(sci_phy, link_layer_registers); + scic_sds_phy_link_layer_initialization(iphy, link_layer_registers); /* * There is nothing that needs to be done in this state just * transition to the stopped state. */ - sci_change_state(&sci_phy->sm, SCI_PHY_STOPPED); + sci_change_state(&iphy->sm, SCI_PHY_STOPPED); return SCI_SUCCESS; } @@ -345,27 +345,27 @@ enum sci_status scic_sds_phy_initialize( /** * This method assigns the direct attached device ID for this phy. * - * @sci_phy The phy for which the direct attached device id is to + * @iphy The phy for which the direct attached device id is to * be assigned. * @device_id The direct attached device ID to assign to the phy. * This will either be the RNi for the device or an invalid RNi if there * is no current device assigned to the phy. */ void scic_sds_phy_setup_transport( - struct scic_sds_phy *sci_phy, + struct isci_phy *iphy, u32 device_id) { u32 tl_control; - writel(device_id, &sci_phy->transport_layer_registers->stp_rni); + writel(device_id, &iphy->transport_layer_registers->stp_rni); /* * The read should guarantee that the first write gets posted * before the next write */ - tl_control = readl(&sci_phy->transport_layer_registers->control); + tl_control = readl(&iphy->transport_layer_registers->control); tl_control |= SCU_TLCR_GEN_BIT(CLEAR_TCI_NCQ_MAPPING_TABLE); - writel(tl_control, &sci_phy->transport_layer_registers->control); + writel(tl_control, &iphy->transport_layer_registers->control); } /** @@ -376,75 +376,74 @@ void scic_sds_phy_setup_transport( * hardware protocol engine. none */ static void scic_sds_phy_suspend( - struct scic_sds_phy *sci_phy) + struct isci_phy *iphy) { u32 scu_sas_pcfg_value; scu_sas_pcfg_value = - readl(&sci_phy->link_layer_registers->phy_configuration); + readl(&iphy->link_layer_registers->phy_configuration); scu_sas_pcfg_value |= SCU_SAS_PCFG_GEN_BIT(SUSPEND_PROTOCOL_ENGINE); writel(scu_sas_pcfg_value, - &sci_phy->link_layer_registers->phy_configuration); + &iphy->link_layer_registers->phy_configuration); scic_sds_phy_setup_transport( - sci_phy, + iphy, SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX); } -void scic_sds_phy_resume(struct scic_sds_phy *sci_phy) +void scic_sds_phy_resume(struct isci_phy *iphy) { u32 scu_sas_pcfg_value; scu_sas_pcfg_value = - readl(&sci_phy->link_layer_registers->phy_configuration); + readl(&iphy->link_layer_registers->phy_configuration); scu_sas_pcfg_value &= ~SCU_SAS_PCFG_GEN_BIT(SUSPEND_PROTOCOL_ENGINE); writel(scu_sas_pcfg_value, - &sci_phy->link_layer_registers->phy_configuration); + &iphy->link_layer_registers->phy_configuration); } -void scic_sds_phy_get_sas_address(struct scic_sds_phy *sci_phy, +void scic_sds_phy_get_sas_address(struct isci_phy *iphy, struct sci_sas_address *sas_address) { - sas_address->high = readl(&sci_phy->link_layer_registers->source_sas_address_high); - sas_address->low = readl(&sci_phy->link_layer_registers->source_sas_address_low); + sas_address->high = readl(&iphy->link_layer_registers->source_sas_address_high); + sas_address->low = readl(&iphy->link_layer_registers->source_sas_address_low); } -void scic_sds_phy_get_attached_sas_address(struct scic_sds_phy *sci_phy, +void scic_sds_phy_get_attached_sas_address(struct isci_phy *iphy, struct sci_sas_address *sas_address) { struct sas_identify_frame *iaf; - struct isci_phy *iphy = sci_phy_to_iphy(sci_phy); iaf = &iphy->frame_rcvd.iaf; memcpy(sas_address, iaf->sas_addr, SAS_ADDR_SIZE); } -void scic_sds_phy_get_protocols(struct scic_sds_phy *sci_phy, +void scic_sds_phy_get_protocols(struct isci_phy *iphy, struct scic_phy_proto *protocols) { protocols->all = - (u16)(readl(&sci_phy-> + (u16)(readl(&iphy-> link_layer_registers->transmit_identification) & 0x0000FFFF); } -enum sci_status scic_sds_phy_start(struct scic_sds_phy *sci_phy) +enum sci_status scic_sds_phy_start(struct isci_phy *iphy) { - enum scic_sds_phy_states state = sci_phy->sm.current_state_id; + enum scic_sds_phy_states state = iphy->sm.current_state_id; if (state != SCI_PHY_STOPPED) { - dev_dbg(sciphy_to_dev(sci_phy), + dev_dbg(sciphy_to_dev(iphy), "%s: in wrong state: %d\n", __func__, state); return SCI_FAILURE_INVALID_STATE; } - sci_change_state(&sci_phy->sm, SCI_PHY_STARTING); + sci_change_state(&iphy->sm, SCI_PHY_STARTING); return SCI_SUCCESS; } -enum sci_status scic_sds_phy_stop(struct scic_sds_phy *sci_phy) +enum sci_status scic_sds_phy_stop(struct isci_phy *iphy) { - enum scic_sds_phy_states state = sci_phy->sm.current_state_id; + enum scic_sds_phy_states state = iphy->sm.current_state_id; switch (state) { case SCI_PHY_SUB_INITIAL: @@ -459,43 +458,43 @@ enum sci_status scic_sds_phy_stop(struct scic_sds_phy *sci_phy) case SCI_PHY_READY: break; default: - dev_dbg(sciphy_to_dev(sci_phy), + dev_dbg(sciphy_to_dev(iphy), "%s: in wrong state: %d\n", __func__, state); return SCI_FAILURE_INVALID_STATE; } - sci_change_state(&sci_phy->sm, SCI_PHY_STOPPED); + sci_change_state(&iphy->sm, SCI_PHY_STOPPED); return SCI_SUCCESS; } -enum sci_status scic_sds_phy_reset(struct scic_sds_phy *sci_phy) +enum sci_status scic_sds_phy_reset(struct isci_phy *iphy) { - enum scic_sds_phy_states state = sci_phy->sm.current_state_id; + enum scic_sds_phy_states state = iphy->sm.current_state_id; if (state != SCI_PHY_READY) { - dev_dbg(sciphy_to_dev(sci_phy), + dev_dbg(sciphy_to_dev(iphy), "%s: in wrong state: %d\n", __func__, state); return SCI_FAILURE_INVALID_STATE; } - sci_change_state(&sci_phy->sm, SCI_PHY_RESETTING); + sci_change_state(&iphy->sm, SCI_PHY_RESETTING); return SCI_SUCCESS; } -enum sci_status scic_sds_phy_consume_power_handler(struct scic_sds_phy *sci_phy) +enum sci_status scic_sds_phy_consume_power_handler(struct isci_phy *iphy) { - enum scic_sds_phy_states state = sci_phy->sm.current_state_id; + enum scic_sds_phy_states state = iphy->sm.current_state_id; switch (state) { case SCI_PHY_SUB_AWAIT_SAS_POWER: { u32 enable_spinup; - enable_spinup = readl(&sci_phy->link_layer_registers->notify_enable_spinup_control); + enable_spinup = readl(&iphy->link_layer_registers->notify_enable_spinup_control); enable_spinup |= SCU_ENSPINUP_GEN_BIT(ENABLE); - writel(enable_spinup, &sci_phy->link_layer_registers->notify_enable_spinup_control); + writel(enable_spinup, &iphy->link_layer_registers->notify_enable_spinup_control); /* Change state to the final state this substate machine has run to completion */ - sci_change_state(&sci_phy->sm, SCI_PHY_SUB_FINAL); + sci_change_state(&iphy->sm, SCI_PHY_SUB_FINAL); return SCI_SUCCESS; } @@ -504,26 +503,26 @@ enum sci_status scic_sds_phy_consume_power_handler(struct scic_sds_phy *sci_phy) /* Release the spinup hold state and reset the OOB state machine */ scu_sas_pcfg_value = - readl(&sci_phy->link_layer_registers->phy_configuration); + readl(&iphy->link_layer_registers->phy_configuration); scu_sas_pcfg_value &= ~(SCU_SAS_PCFG_GEN_BIT(SATA_SPINUP_HOLD) | SCU_SAS_PCFG_GEN_BIT(OOB_ENABLE)); scu_sas_pcfg_value |= SCU_SAS_PCFG_GEN_BIT(OOB_RESET); writel(scu_sas_pcfg_value, - &sci_phy->link_layer_registers->phy_configuration); + &iphy->link_layer_registers->phy_configuration); /* Now restart the OOB operation */ scu_sas_pcfg_value &= ~SCU_SAS_PCFG_GEN_BIT(OOB_RESET); scu_sas_pcfg_value |= SCU_SAS_PCFG_GEN_BIT(OOB_ENABLE); writel(scu_sas_pcfg_value, - &sci_phy->link_layer_registers->phy_configuration); + &iphy->link_layer_registers->phy_configuration); /* Change state to the final state this substate machine has run to completion */ - sci_change_state(&sci_phy->sm, SCI_PHY_SUB_AWAIT_SATA_PHY_EN); + sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SATA_PHY_EN); return SCI_SUCCESS; } default: - dev_dbg(sciphy_to_dev(sci_phy), + dev_dbg(sciphy_to_dev(iphy), "%s: in wrong state: %d\n", __func__, state); return SCI_FAILURE_INVALID_STATE; } @@ -545,19 +544,19 @@ enum sci_status scic_sds_phy_consume_power_handler(struct scic_sds_phy *sci_phy) * none */ static void scic_sds_phy_start_sas_link_training( - struct scic_sds_phy *sci_phy) + struct isci_phy *iphy) { u32 phy_control; phy_control = - readl(&sci_phy->link_layer_registers->phy_configuration); + readl(&iphy->link_layer_registers->phy_configuration); phy_control |= SCU_SAS_PCFG_GEN_BIT(SATA_SPINUP_HOLD); writel(phy_control, - &sci_phy->link_layer_registers->phy_configuration); + &iphy->link_layer_registers->phy_configuration); - sci_change_state(&sci_phy->sm, SCI_PHY_SUB_AWAIT_SAS_SPEED_EN); + sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SAS_SPEED_EN); - sci_phy->protocol = SCIC_SDS_PHY_PROTOCOL_SAS; + iphy->protocol = SCIC_SDS_PHY_PROTOCOL_SAS; } /** @@ -569,11 +568,11 @@ static void scic_sds_phy_start_sas_link_training( * SPINUP HOLD event when the state machine was expecting a SAS PHY event. none */ static void scic_sds_phy_start_sata_link_training( - struct scic_sds_phy *sci_phy) + struct isci_phy *iphy) { - sci_change_state(&sci_phy->sm, SCI_PHY_SUB_AWAIT_SATA_POWER); + sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SATA_POWER); - sci_phy->protocol = SCIC_SDS_PHY_PROTOCOL_SATA; + iphy->protocol = SCIC_SDS_PHY_PROTOCOL_SATA; } /** @@ -588,33 +587,33 @@ static void scic_sds_phy_start_sata_link_training( * */ static void scic_sds_phy_complete_link_training( - struct scic_sds_phy *sci_phy, + struct isci_phy *iphy, enum sas_linkrate max_link_rate, u32 next_state) { - sci_phy->max_negotiated_speed = max_link_rate; + iphy->max_negotiated_speed = max_link_rate; - sci_change_state(&sci_phy->sm, next_state); + sci_change_state(&iphy->sm, next_state); } -enum sci_status scic_sds_phy_event_handler(struct scic_sds_phy *sci_phy, +enum sci_status scic_sds_phy_event_handler(struct isci_phy *iphy, u32 event_code) { - enum scic_sds_phy_states state = sci_phy->sm.current_state_id; + enum scic_sds_phy_states state = iphy->sm.current_state_id; switch (state) { case SCI_PHY_SUB_AWAIT_OSSP_EN: switc |