@ -27,6 +27,30 @@ static void hisi_sas_slot_index_init(struct hisi_hba *hisi_hba)
hisi_sas_slot_index_clear ( hisi_hba , i ) ;
}
static void hisi_sas_phy_init ( struct hisi_hba * hisi_hba , int phy_no )
{
struct hisi_sas_phy * phy = & hisi_hba - > phy [ phy_no ] ;
struct asd_sas_phy * sas_phy = & phy - > sas_phy ;
phy - > hisi_hba = hisi_hba ;
phy - > port = NULL ;
init_timer ( & phy - > timer ) ;
sas_phy - > enabled = ( phy_no < hisi_hba - > n_phy ) ? 1 : 0 ;
sas_phy - > class = SAS ;
sas_phy - > iproto = SAS_PROTOCOL_ALL ;
sas_phy - > tproto = 0 ;
sas_phy - > type = PHY_TYPE_PHYSICAL ;
sas_phy - > role = PHY_ROLE_INITIATOR ;
sas_phy - > oob_mode = OOB_NOT_CONNECTED ;
sas_phy - > linkrate = SAS_LINK_RATE_UNKNOWN ;
sas_phy - > id = phy_no ;
sas_phy - > sas_addr = & hisi_hba - > sas_addr [ 0 ] ;
sas_phy - > frame_rcvd = & phy - > frame_rcvd [ 0 ] ;
sas_phy - > ha = ( struct sas_ha_struct * ) hisi_hba - > shost - > hostdata ;
sas_phy - > lldd_phy = phy ;
}
static struct scsi_transport_template * hisi_sas_stt ;
static struct scsi_host_template hisi_sas_sht = {
@ -57,6 +81,13 @@ static int hisi_sas_alloc(struct hisi_hba *hisi_hba, struct Scsi_Host *shost)
struct platform_device * pdev = hisi_hba - > pdev ;
struct device * dev = & pdev - > dev ;
for ( i = 0 ; i < hisi_hba - > n_phy ; i + + ) {
hisi_sas_phy_init ( hisi_hba , i ) ;
hisi_hba - > port [ i ] . port_attached = 0 ;
hisi_hba - > port [ i ] . id = - 1 ;
INIT_LIST_HEAD ( & hisi_hba - > port [ i ] . list ) ;
}
for ( i = 0 ; i < HISI_SAS_MAX_DEVICES ; i + + ) {
hisi_hba - > devices [ i ] . dev_type = SAS_PHY_UNUSED ;
hisi_hba - > devices [ i ] . device_id = i ;