Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 254469
b: refs/heads/master
c: f700ad4
h: refs/heads/master
i:
  254467: 37fb792
v: v3
  • Loading branch information
Dave Jiang authored and Dan Williams committed Jul 3, 2011
1 parent 7a0dbce commit 6259ca6
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 137 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d20930a2b3271b233f4bef3c59ce602dfc9e5d83
refs/heads/master: f700ad4331d55df729a36b2602c4abe2d855036f
43 changes: 0 additions & 43 deletions trunk/drivers/scsi/isci/core/scic_phy.h
Original file line number Diff line number Diff line change
Expand Up @@ -287,47 +287,4 @@ enum scic_phy_counter_id {
SCIC_PHY_COUNTER_SN_DWORD_SYNC_ERROR
};


/**
* scic_sas_phy_get_properties() - This method will enable the user to retrieve
* information specific to a SAS phy, such as: the received identify address
* frame, received phy capabilities, etc.
* @phy: this parameter specifies the phy for which to retrieve properties.
* @properties: This parameter specifies the properties structure into which to
* copy the requested information.
*
* This method returns an indication as to whether the SAS phy properties were
* successfully retrieved. SCI_SUCCESS This value is returned if the SAS
* properties are successfully retrieved. SCI_FAILURE This value is returned if
* the SAS properties are not successfully retrieved (e.g. It's not a SAS Phy).
*/
enum sci_status scic_sas_phy_get_properties(
struct scic_sds_phy *phy,
struct scic_sas_phy_properties *properties);

/**
* scic_sata_phy_get_properties() - This method will enable the user to
* retrieve information specific to a SATA phy, such as: the received
* signature FIS, if a port selector is present, etc.
* @phy: this parameter specifies the phy for which to retrieve properties.
* @properties: This parameter specifies the properties structure into which to
* copy the requested information.
*
* This method returns an indication as to whether the SATA phy properties were
* successfully retrieved. SCI_SUCCESS This value is returned if the SATA
* properties are successfully retrieved. SCI_FAILURE This value is returned if
* the SATA properties are not successfully retrieved (e.g. It's not a SATA
* Phy).
*/
enum sci_status scic_sata_phy_get_properties(
struct scic_sds_phy *phy,
struct scic_sata_phy_properties *properties);







#endif /* _SCIC_PHY_H_ */

69 changes: 11 additions & 58 deletions trunk/drivers/scsi/isci/core/scic_sds_phy.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,8 +436,9 @@ void scic_sds_phy_get_attached_sas_address(struct scic_sds_phy *sci_phy,
struct sci_sas_address *sas_address)
{
struct sas_identify_frame *iaf;
struct isci_phy *iphy = sci_phy->iphy;

iaf = &sci_phy->phy_type.sas_id_frame;
iaf = &iphy->frame_rcvd.iaf;
memcpy(sas_address, iaf->sas_addr, SAS_ADDR_SIZE);
}

Expand All @@ -458,13 +459,13 @@ void scic_sds_phy_get_attached_phy_protocols(
protocols->u.all = 0;

if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SAS) {
struct isci_phy *iphy = sci_phy->iphy;
struct sas_identify_frame *iaf;

iaf = &sci_phy->phy_type.sas_id_frame;
iaf = &iphy->frame_rcvd.iaf;
memcpy(&protocols->u.all, &iaf->initiator_bits, 2);
} else if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) {
} else if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA)
protocols->u.bits.stp_target = 1;
}
}

/*
Expand Down Expand Up @@ -549,49 +550,6 @@ enum sci_status scic_sds_phy_consume_power_handler(
return sci_phy->state_handlers->consume_power_handler(sci_phy);
}

/*
* *****************************************************************************
* * SCIC PHY Public Methods
* ***************************************************************************** */


enum sci_status scic_sas_phy_get_properties(
struct scic_sds_phy *sci_phy,
struct scic_sas_phy_properties *properties)
{
if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SAS) {
memcpy(&properties->rcvd_iaf,
&sci_phy->phy_type.sas_id_frame,
sizeof(struct sas_identify_frame));

properties->rcvd_cap.all =
readl(&sci_phy->link_layer_registers->receive_phycap);

return SCI_SUCCESS;
}

return SCI_FAILURE;
}


enum sci_status scic_sata_phy_get_properties(
struct scic_sds_phy *sci_phy,
struct scic_sata_phy_properties *properties)
{
if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) {
memcpy(&properties->signature_fis,
&sci_phy->phy_type.sata_sig_fis,
sizeof(struct dev_to_host_fis));

/* / @todo add support for port selectors. */
properties->is_port_selector_present = false;

return SCI_SUCCESS;
}

return SCI_FAILURE;
}

/*
* *****************************************************************************
* * SCIC SDS PHY HELPER FUNCTIONS
Expand Down Expand Up @@ -1163,6 +1121,7 @@ static enum sci_status scic_sds_phy_starting_substate_await_iaf_uf_frame_handler
enum sci_status result;
u32 *frame_words;
struct sas_identify_frame *identify_frame;
struct isci_phy *iphy = sci_phy->iphy;

result = scic_sds_unsolicited_frame_control_get_header(
&(scic_sds_phy_get_controller(sci_phy)->uf_control),
Expand All @@ -1188,9 +1147,7 @@ static enum sci_status scic_sds_phy_starting_substate_await_iaf_uf_frame_handler
frame_words[4] = SCIC_SWAP_DWORD(frame_words[4]);
frame_words[5] = SCIC_SWAP_DWORD(frame_words[5]);

memcpy(&sci_phy->phy_type.sas_id_frame,
identify_frame,
sizeof(struct sas_identify_frame));
memcpy(&iphy->frame_rcvd.iaf, identify_frame, sizeof(*identify_frame));

if (identify_frame->smp_tport) {
/* We got the IAF for an expander PHY go to the final state since
Expand Down Expand Up @@ -1239,6 +1196,7 @@ static enum sci_status scic_sds_phy_starting_substate_await_sig_fis_frame_handle
enum sci_status result;
struct dev_to_host_fis *frame_header;
u32 *fis_frame_data;
struct isci_phy *iphy = sci_phy->iphy;

result = scic_sds_unsolicited_frame_control_get_header(
&(scic_sds_phy_get_controller(sci_phy)->uf_control),
Expand All @@ -1255,10 +1213,9 @@ static enum sci_status scic_sds_phy_starting_substate_await_sig_fis_frame_handle
frame_index,
(void **)&fis_frame_data);

scic_sds_controller_copy_sata_response(
&sci_phy->phy_type.sata_sig_fis,
frame_header,
fis_frame_data);
scic_sds_controller_copy_sata_response(&iphy->frame_rcvd.fis,
frame_header,
fis_frame_data);

/* got IAF we can now go to the await spinup semaphore state */
sci_base_state_machine_change_state(&sci_phy->starting_substate_machine,
Expand Down Expand Up @@ -2330,7 +2287,6 @@ static const struct sci_base_state scic_sds_phy_state_table[] = {
void scic_sds_phy_construct(struct scic_sds_phy *sci_phy,
struct scic_sds_port *owning_port, u8 phy_index)
{

sci_base_state_machine_construct(&sci_phy->state_machine,
sci_phy,
scic_sds_phy_state_table,
Expand All @@ -2347,9 +2303,6 @@ void scic_sds_phy_construct(struct scic_sds_phy *sci_phy,
sci_phy->max_negotiated_speed = SAS_LINK_RATE_UNKNOWN;
sci_phy->sata_timeout_timer = NULL;

/* Clear out the identification buffer data */
memset(&sci_phy->phy_type, 0, sizeof(sci_phy->phy_type));

/* Initialize the the substate machines */
sci_base_state_machine_construct(&sci_phy->starting_substate_machine,
sci_phy,
Expand Down
5 changes: 0 additions & 5 deletions trunk/drivers/scsi/isci/core/scic_sds_phy.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,11 +272,6 @@ struct scic_sds_phy {
*/
bool is_in_link_training;

union {
struct sas_identify_frame sas_id_frame;
struct dev_to_host_fis sata_sig_fis;
} phy_type;

/**
* This field contains a reference to the timer utilized in detecting
* when a signature FIS timeout has occurred. The signature FIS is the
Expand Down
3 changes: 0 additions & 3 deletions trunk/drivers/scsi/isci/phy.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,8 @@
*/

struct isci_phy {

struct scic_sds_phy *sci_phy_handle;

struct asd_sas_phy sas_phy;
struct sas_identify_frame *frame;
struct isci_port *isci_port;
u8 sas_addr[SAS_ADDR_SIZE];

Expand Down
27 changes: 0 additions & 27 deletions trunk/drivers/scsi/isci/port.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ void isci_port_link_up(
struct scic_port_properties properties;
struct isci_phy *isci_phy = phy->iphy;
struct isci_port *isci_port = port->iport;
enum sci_status call_status;
unsigned long success = true;

BUG_ON(isci_phy->isci_port != NULL);
Expand All @@ -191,21 +190,7 @@ void isci_port_link_up(
if (properties.remote.protocols.u.bits.stp_target) {
u64 attached_sas_address;

struct scic_sata_phy_properties sata_phy_properties;

isci_phy->sas_phy.oob_mode = SATA_OOB_MODE;

/* Get a copy of the signature fis for libsas */
call_status = scic_sata_phy_get_properties(phy,
&sata_phy_properties);

/*
* XXX I am concerned about this "assert". shouldn't we
* handle the return appropriately?
*/
BUG_ON(call_status != SCI_SUCCESS);

isci_phy->frame_rcvd.fis = sata_phy_properties.signature_fis;
isci_phy->sas_phy.frame_rcvd_size = sizeof(struct dev_to_host_fis);

/*
Expand All @@ -225,24 +210,12 @@ void isci_port_link_up(

} else if (properties.remote.protocols.u.bits.ssp_target ||
properties.remote.protocols.u.bits.smp_target) {

struct scic_sas_phy_properties sas_phy_properties;

isci_phy->sas_phy.oob_mode = SAS_OOB_MODE;

/* Get a copy of the identify address frame for libsas */
call_status = scic_sas_phy_get_properties(phy,
&sas_phy_properties);

BUG_ON(call_status != SCI_SUCCESS);

isci_phy->frame_rcvd.iaf = sas_phy_properties.rcvd_iaf;
isci_phy->sas_phy.frame_rcvd_size = sizeof(struct sas_identify_frame);

/* Copy the attached SAS address from the IAF */
memcpy(isci_phy->sas_phy.attached_sas_addr,
isci_phy->frame_rcvd.iaf.sas_addr, SAS_ADDR_SIZE);

} else {
dev_err(&isci_host->pdev->dev, "%s: unkown target\n", __func__);
success = false;
Expand Down

0 comments on commit 6259ca6

Please sign in to comment.