Lines Matching refs:dev

39 void sas_init_dev(struct domain_device *dev)  in sas_init_dev()  argument
41 switch (dev->dev_type) { in sas_init_dev()
43 INIT_LIST_HEAD(&dev->ssp_dev.eh_list_node); in sas_init_dev()
47 INIT_LIST_HEAD(&dev->ex_dev.children); in sas_init_dev()
48 mutex_init(&dev->ex_dev.cmd_mutex); in sas_init_dev()
70 struct domain_device *dev; in sas_get_port_device() local
73 dev = sas_alloc_device(); in sas_get_port_device()
74 if (!dev) in sas_get_port_device()
80 sas_put_device(dev); in sas_get_port_device()
85 memcpy(dev->frame_rcvd, phy->frame_rcvd, min(sizeof(dev->frame_rcvd), in sas_get_port_device()
90 if (dev->frame_rcvd[0] == 0x34 && port->oob_mode == SATA_OOB_MODE) { in sas_get_port_device()
92 (struct dev_to_host_fis *) dev->frame_rcvd; in sas_get_port_device()
96 dev->dev_type = SAS_SATA_PM; in sas_get_port_device()
98 dev->dev_type = SAS_SATA_DEV; in sas_get_port_device()
99 dev->tproto = SAS_PROTOCOL_SATA; in sas_get_port_device()
102 (struct sas_identify_frame *) dev->frame_rcvd; in sas_get_port_device()
103 dev->dev_type = id->dev_type; in sas_get_port_device()
104 dev->iproto = id->initiator_bits; in sas_get_port_device()
105 dev->tproto = id->target_bits; in sas_get_port_device()
108 sas_init_dev(dev); in sas_get_port_device()
110 dev->port = port; in sas_get_port_device()
111 switch (dev->dev_type) { in sas_get_port_device()
113 rc = sas_ata_init(dev); in sas_get_port_device()
131 printk("ERROR: Unidentified device type %d\n", dev->dev_type); in sas_get_port_device()
137 sas_put_device(dev); in sas_get_port_device()
142 memcpy(dev->sas_addr, port->attached_sas_addr, SAS_ADDR_SIZE); in sas_get_port_device()
143 sas_fill_in_rphy(dev, rphy); in sas_get_port_device()
144 sas_hash_addr(dev->hashed_sas_addr, dev->sas_addr); in sas_get_port_device()
145 port->port_dev = dev; in sas_get_port_device()
146 dev->linkrate = port->linkrate; in sas_get_port_device()
147 dev->min_linkrate = port->linkrate; in sas_get_port_device()
148 dev->max_linkrate = port->linkrate; in sas_get_port_device()
149 dev->pathways = port->num_phys; in sas_get_port_device()
154 sas_device_set_phy(dev, port->port); in sas_get_port_device()
156 dev->rphy = rphy; in sas_get_port_device()
157 get_device(&dev->rphy->dev); in sas_get_port_device()
159 if (dev_is_sata(dev) || dev->dev_type == SAS_END_DEVICE) in sas_get_port_device()
160 list_add_tail(&dev->disco_list_node, &port->disco_list); in sas_get_port_device()
163 list_add_tail(&dev->dev_list_node, &port->dev_list); in sas_get_port_device()
169 sas_phy_set_target(phy, dev); in sas_get_port_device()
177 int sas_notify_lldd_dev_found(struct domain_device *dev) in sas_notify_lldd_dev_found() argument
180 struct sas_ha_struct *sas_ha = dev->port->ha; in sas_notify_lldd_dev_found()
187 res = i->dft->lldd_dev_found(dev); in sas_notify_lldd_dev_found()
191 dev_name(sas_ha->dev), in sas_notify_lldd_dev_found()
192 SAS_ADDR(dev->sas_addr), res); in sas_notify_lldd_dev_found()
194 set_bit(SAS_DEV_FOUND, &dev->state); in sas_notify_lldd_dev_found()
195 kref_get(&dev->kref); in sas_notify_lldd_dev_found()
200 void sas_notify_lldd_dev_gone(struct domain_device *dev) in sas_notify_lldd_dev_gone() argument
202 struct sas_ha_struct *sas_ha = dev->port->ha; in sas_notify_lldd_dev_gone()
209 if (test_and_clear_bit(SAS_DEV_FOUND, &dev->state)) { in sas_notify_lldd_dev_gone()
210 i->dft->lldd_dev_gone(dev); in sas_notify_lldd_dev_gone()
211 sas_put_device(dev); in sas_notify_lldd_dev_gone()
217 struct domain_device *dev, *n; in sas_probe_devices() local
224 list_for_each_entry(dev, &port->disco_list, disco_list_node) { in sas_probe_devices()
226 list_add_tail(&dev->dev_list_node, &port->dev_list); in sas_probe_devices()
232 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) { in sas_probe_devices()
235 err = sas_rphy_add(dev->rphy); in sas_probe_devices()
237 sas_fail_probe(dev, __func__, err); in sas_probe_devices()
239 list_del_init(&dev->disco_list_node); in sas_probe_devices()
246 struct domain_device *dev; in sas_suspend_devices() local
260 list_for_each_entry(dev, &port->dev_list, dev_list_node) in sas_suspend_devices()
261 sas_notify_lldd_dev_gone(dev); in sas_suspend_devices()
290 int sas_discover_end_dev(struct domain_device *dev) in sas_discover_end_dev() argument
294 res = sas_notify_lldd_dev_found(dev); in sas_discover_end_dev()
297 sas_discover_event(dev->port, DISCE_PROBE); in sas_discover_end_dev()
306 struct domain_device *dev = container_of(kref, typeof(*dev), kref); in sas_free_device() local
308 put_device(&dev->rphy->dev); in sas_free_device()
309 dev->rphy = NULL; in sas_free_device()
311 if (dev->parent) in sas_free_device()
312 sas_put_device(dev->parent); in sas_free_device()
314 sas_port_put_phy(dev->phy); in sas_free_device()
315 dev->phy = NULL; in sas_free_device()
318 if (dev->dev_type == SAS_EDGE_EXPANDER_DEVICE || dev->dev_type == SAS_FANOUT_EXPANDER_DEVICE) in sas_free_device()
319 kfree(dev->ex_dev.ex_phy); in sas_free_device()
321 if (dev_is_sata(dev) && dev->sata_dev.ap) { in sas_free_device()
322 ata_sas_port_destroy(dev->sata_dev.ap); in sas_free_device()
323 dev->sata_dev.ap = NULL; in sas_free_device()
326 kfree(dev); in sas_free_device()
329 static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_device *dev) in sas_unregister_common_dev() argument
333 sas_notify_lldd_dev_gone(dev); in sas_unregister_common_dev()
334 if (!dev->parent) in sas_unregister_common_dev()
335 dev->port->port_dev = NULL; in sas_unregister_common_dev()
337 list_del_init(&dev->siblings); in sas_unregister_common_dev()
340 list_del_init(&dev->dev_list_node); in sas_unregister_common_dev()
341 if (dev_is_sata(dev)) in sas_unregister_common_dev()
342 sas_ata_end_eh(dev->sata_dev.ap); in sas_unregister_common_dev()
346 if (dev->dev_type == SAS_END_DEVICE && in sas_unregister_common_dev()
347 !list_empty(&dev->ssp_dev.eh_list_node)) { in sas_unregister_common_dev()
348 list_del_init(&dev->ssp_dev.eh_list_node); in sas_unregister_common_dev()
353 sas_put_device(dev); in sas_unregister_common_dev()
358 struct domain_device *dev, *n; in sas_destruct_devices() local
364 list_for_each_entry_safe(dev, n, &port->destroy_list, disco_list_node) { in sas_destruct_devices()
365 list_del_init(&dev->disco_list_node); in sas_destruct_devices()
367 sas_remove_children(&dev->rphy->dev); in sas_destruct_devices()
368 sas_rphy_delete(dev->rphy); in sas_destruct_devices()
369 sas_unregister_common_dev(port, dev); in sas_destruct_devices()
373 void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *dev) in sas_unregister_dev() argument
375 if (!test_bit(SAS_DEV_DESTROY, &dev->state) && in sas_unregister_dev()
376 !list_empty(&dev->disco_list_node)) { in sas_unregister_dev()
378 list_del_init(&dev->disco_list_node); in sas_unregister_dev()
379 sas_rphy_free(dev->rphy); in sas_unregister_dev()
380 sas_unregister_common_dev(port, dev); in sas_unregister_dev()
384 if (!test_and_set_bit(SAS_DEV_DESTROY, &dev->state)) { in sas_unregister_dev()
385 sas_rphy_unlink(dev->rphy); in sas_unregister_dev()
386 list_move_tail(&dev->disco_list_node, &port->destroy_list); in sas_unregister_dev()
387 sas_discover_event(dev->port, DISCE_DESTRUCT); in sas_unregister_dev()
393 struct domain_device *dev, *n; in sas_unregister_domain_devices() local
395 list_for_each_entry_safe_reverse(dev, n, &port->dev_list, dev_list_node) { in sas_unregister_domain_devices()
397 set_bit(SAS_DEV_GONE, &dev->state); in sas_unregister_domain_devices()
398 sas_unregister_dev(port, dev); in sas_unregister_domain_devices()
401 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) in sas_unregister_domain_devices()
402 sas_unregister_dev(port, dev); in sas_unregister_domain_devices()
408 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port) in sas_device_set_phy() argument
413 if (!dev) in sas_device_set_phy()
416 ha = dev->port->ha; in sas_device_set_phy()
422 sas_port_put_phy(dev->phy); in sas_device_set_phy()
423 dev->phy = new_phy; in sas_device_set_phy()
441 struct domain_device *dev; in sas_discover_domain() local
454 dev = port->port_dev; in sas_discover_domain()
459 switch (dev->dev_type) { in sas_discover_domain()
461 error = sas_discover_end_dev(dev); in sas_discover_domain()
465 error = sas_discover_root_expander(dev); in sas_discover_domain()
470 error = sas_discover_sata(dev); in sas_discover_domain()
478 SAS_DPRINTK("unhandled device %d\n", dev->dev_type); in sas_discover_domain()
483 sas_rphy_free(dev->rphy); in sas_discover_domain()
484 list_del_init(&dev->disco_list_node); in sas_discover_domain()
486 list_del_init(&dev->dev_list_node); in sas_discover_domain()
489 sas_put_device(dev); in sas_discover_domain()