Lines Matching refs:sas_ha
96 int sas_register_ha(struct sas_ha_struct *sas_ha) in sas_register_ha() argument
101 mutex_init(&sas_ha->disco_mutex); in sas_register_ha()
102 spin_lock_init(&sas_ha->phy_port_lock); in sas_register_ha()
103 sas_hash_addr(sas_ha->hashed_sas_addr, sas_ha->sas_addr); in sas_register_ha()
105 set_bit(SAS_HA_REGISTERED, &sas_ha->state); in sas_register_ha()
106 spin_lock_init(&sas_ha->lock); in sas_register_ha()
107 mutex_init(&sas_ha->drain_mutex); in sas_register_ha()
108 init_waitqueue_head(&sas_ha->eh_wait_q); in sas_register_ha()
109 INIT_LIST_HEAD(&sas_ha->defer_q); in sas_register_ha()
110 INIT_LIST_HEAD(&sas_ha->eh_dev_q); in sas_register_ha()
112 sas_ha->event_thres = SAS_PHY_SHUTDOWN_THRES; in sas_register_ha()
114 error = sas_register_phys(sas_ha); in sas_register_ha()
120 error = sas_register_ports(sas_ha); in sas_register_ha()
126 error = sas_init_events(sas_ha); in sas_register_ha()
133 snprintf(name, sizeof(name), "%s_event_q", dev_name(sas_ha->dev)); in sas_register_ha()
134 sas_ha->event_q = create_singlethread_workqueue(name); in sas_register_ha()
135 if (!sas_ha->event_q) in sas_register_ha()
138 snprintf(name, sizeof(name), "%s_disco_q", dev_name(sas_ha->dev)); in sas_register_ha()
139 sas_ha->disco_q = create_singlethread_workqueue(name); in sas_register_ha()
140 if (!sas_ha->disco_q) in sas_register_ha()
143 INIT_LIST_HEAD(&sas_ha->eh_done_q); in sas_register_ha()
144 INIT_LIST_HEAD(&sas_ha->eh_ata_q); in sas_register_ha()
149 destroy_workqueue(sas_ha->event_q); in sas_register_ha()
151 sas_unregister_ports(sas_ha); in sas_register_ha()
157 static void sas_disable_events(struct sas_ha_struct *sas_ha) in sas_disable_events() argument
162 mutex_lock(&sas_ha->drain_mutex); in sas_disable_events()
163 spin_lock_irq(&sas_ha->lock); in sas_disable_events()
164 clear_bit(SAS_HA_REGISTERED, &sas_ha->state); in sas_disable_events()
165 spin_unlock_irq(&sas_ha->lock); in sas_disable_events()
166 __sas_drain_work(sas_ha); in sas_disable_events()
167 mutex_unlock(&sas_ha->drain_mutex); in sas_disable_events()
170 int sas_unregister_ha(struct sas_ha_struct *sas_ha) in sas_unregister_ha() argument
172 sas_disable_events(sas_ha); in sas_unregister_ha()
173 sas_unregister_ports(sas_ha); in sas_unregister_ha()
176 mutex_lock(&sas_ha->drain_mutex); in sas_unregister_ha()
177 __sas_drain_work(sas_ha); in sas_unregister_ha()
178 mutex_unlock(&sas_ha->drain_mutex); in sas_unregister_ha()
180 destroy_workqueue(sas_ha->disco_q); in sas_unregister_ha()
181 destroy_workqueue(sas_ha->event_q); in sas_unregister_ha()
190 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(shost); in sas_get_linkerrors() local
191 struct asd_sas_phy *asd_phy = sas_ha->sas_phy[phy->number]; in sas_get_linkerrors()
193 to_sas_internal(sas_ha->core.shost->transportt); in sas_get_linkerrors()
239 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(shost); in transport_sas_phy_reset() local
240 struct asd_sas_phy *asd_phy = sas_ha->sas_phy[phy->number]; in transport_sas_phy_reset()
242 to_sas_internal(sas_ha->core.shost->transportt); in transport_sas_phy_reset()
273 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(shost); in sas_phy_enable() local
274 struct asd_sas_phy *asd_phy = sas_ha->sas_phy[phy->number]; in sas_phy_enable()
276 to_sas_internal(sas_ha->core.shost->transportt); in sas_phy_enable()
309 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(shost); in sas_phy_reset() local
310 struct asd_sas_phy *asd_phy = sas_ha->sas_phy[phy->number]; in sas_phy_reset()
312 to_sas_internal(sas_ha->core.shost->transportt); in sas_phy_reset()
344 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(shost); in sas_set_phy_speed() local
345 struct asd_sas_phy *asd_phy = sas_ha->sas_phy[phy->number]; in sas_set_phy_speed()
347 to_sas_internal(sas_ha->core.shost->transportt); in sas_set_phy_speed()
598 struct sas_ha_struct *sas_ha = phy->ha; in sas_alloc_event() local
600 to_sas_internal(sas_ha->core.shost->transportt); in sas_alloc_event()