Lines Matching refs:dev
23 void sas_init_dev(struct domain_device *dev)
25 switch (dev->dev_type) {
27 INIT_LIST_HEAD(&dev->ssp_dev.eh_list_node);
31 INIT_LIST_HEAD(&dev->ex_dev.children);
32 mutex_init(&dev->ex_dev.cmd_mutex);
54 struct domain_device *dev;
57 dev = sas_alloc_device();
58 if (!dev)
64 sas_put_device(dev);
69 memcpy(dev->frame_rcvd, phy->frame_rcvd, min(sizeof(dev->frame_rcvd),
74 if (dev->frame_rcvd[0] == 0x34 && port->oob_mode == SATA_OOB_MODE) {
76 (struct dev_to_host_fis *) dev->frame_rcvd;
80 dev->dev_type = SAS_SATA_PM;
82 dev->dev_type = SAS_SATA_DEV;
83 dev->tproto = SAS_PROTOCOL_SATA;
86 (struct sas_identify_frame *) dev->frame_rcvd;
87 dev->dev_type = id->dev_type;
88 dev->iproto = id->initiator_bits;
89 dev->tproto = id->target_bits;
95 sas_put_device(dev);
101 sas_init_dev(dev);
103 dev->port = port;
104 switch (dev->dev_type) {
106 rc = sas_ata_init(dev);
124 pr_warn("ERROR: Unidentified device type %d\n", dev->dev_type);
130 sas_put_device(dev);
135 memcpy(dev->sas_addr, port->attached_sas_addr, SAS_ADDR_SIZE);
136 sas_fill_in_rphy(dev, rphy);
137 sas_hash_addr(dev->hashed_sas_addr, dev->sas_addr);
138 port->port_dev = dev;
139 dev->linkrate = port->linkrate;
140 dev->min_linkrate = port->linkrate;
141 dev->max_linkrate = port->linkrate;
142 dev->pathways = port->num_phys;
147 sas_device_set_phy(dev, port->port);
149 dev->rphy = rphy;
150 get_device(&dev->rphy->dev);
152 if (dev_is_sata(dev) || dev->dev_type == SAS_END_DEVICE)
153 list_add_tail(&dev->disco_list_node, &port->disco_list);
156 list_add_tail(&dev->dev_list_node, &port->dev_list);
162 sas_phy_set_target(phy, dev);
170 int sas_notify_lldd_dev_found(struct domain_device *dev)
173 struct sas_ha_struct *sas_ha = dev->port->ha;
180 res = i->dft->lldd_dev_found(dev);
183 dev_name(sas_ha->dev),
184 SAS_ADDR(dev->sas_addr), res);
187 set_bit(SAS_DEV_FOUND, &dev->state);
188 kref_get(&dev->kref);
193 void sas_notify_lldd_dev_gone(struct domain_device *dev)
195 struct sas_ha_struct *sas_ha = dev->port->ha;
202 if (test_and_clear_bit(SAS_DEV_FOUND, &dev->state)) {
203 i->dft->lldd_dev_gone(dev);
204 sas_put_device(dev);
210 struct domain_device *dev, *n;
213 list_for_each_entry(dev, &port->disco_list, disco_list_node) {
215 list_add_tail(&dev->dev_list_node, &port->dev_list);
221 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) {
224 err = sas_rphy_add(dev->rphy);
226 sas_fail_probe(dev, __func__, err);
228 list_del_init(&dev->disco_list_node);
235 struct domain_device *dev;
249 list_for_each_entry(dev, &port->dev_list, dev_list_node)
250 sas_notify_lldd_dev_gone(dev);
275 * @dev: pointer to domain device of interest
279 int sas_discover_end_dev(struct domain_device *dev)
281 return sas_notify_lldd_dev_found(dev);
288 struct domain_device *dev = container_of(kref, typeof(*dev), kref);
290 put_device(&dev->rphy->dev);
291 dev->rphy = NULL;
293 if (dev->parent)
294 sas_put_device(dev->parent);
296 sas_port_put_phy(dev->phy);
297 dev->phy = NULL;
300 if (dev_is_expander(dev->dev_type))
301 kfree(dev->ex_dev.ex_phy);
303 if (dev_is_sata(dev) && dev->sata_dev.ap) {
304 ata_sas_tport_delete(dev->sata_dev.ap);
305 ata_sas_port_destroy(dev->sata_dev.ap);
306 ata_host_put(dev->sata_dev.ata_host);
307 dev->sata_dev.ata_host = NULL;
308 dev->sata_dev.ap = NULL;
311 kfree(dev);
314 static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_device *dev)
318 sas_notify_lldd_dev_gone(dev);
319 if (!dev->parent)
320 dev->port->port_dev = NULL;
322 list_del_init(&dev->siblings);
325 list_del_init(&dev->dev_list_node);
326 if (dev_is_sata(dev))
327 sas_ata_end_eh(dev->sata_dev.ap);
331 if (dev->dev_type == SAS_END_DEVICE &&
332 !list_empty(&dev->ssp_dev.eh_list_node)) {
333 list_del_init(&dev->ssp_dev.eh_list_node);
338 sas_put_device(dev);
343 struct domain_device *dev, *n;
345 list_for_each_entry_safe(dev, n, &port->destroy_list, disco_list_node) {
346 list_del_init(&dev->disco_list_node);
348 sas_remove_children(&dev->rphy->dev);
349 sas_rphy_delete(dev->rphy);
350 sas_unregister_common_dev(port, dev);
364 void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *dev)
366 if (!test_bit(SAS_DEV_DESTROY, &dev->state) &&
367 !list_empty(&dev->disco_list_node)) {
369 list_del_init(&dev->disco_list_node);
370 sas_rphy_free(dev->rphy);
371 sas_unregister_common_dev(port, dev);
375 if (!test_and_set_bit(SAS_DEV_DESTROY, &dev->state)) {
376 sas_rphy_unlink(dev->rphy);
377 list_move_tail(&dev->disco_list_node, &port->destroy_list);
383 struct domain_device *dev, *n;
385 list_for_each_entry_safe_reverse(dev, n, &port->dev_list, dev_list_node) {
387 set_bit(SAS_DEV_GONE, &dev->state);
388 sas_unregister_dev(port, dev);
391 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node)
392 sas_unregister_dev(port, dev);
398 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port)
403 if (!dev)
406 ha = dev->port->ha;
412 sas_port_put_phy(dev->phy);
413 dev->phy = new_phy;
431 struct domain_device *dev;
444 dev = port->port_dev;
449 switch (dev->dev_type) {
451 error = sas_discover_end_dev(dev);
455 error = sas_discover_root_expander(dev);
460 error = sas_discover_sata(dev);
469 pr_err("unhandled device %d\n", dev->dev_type);
474 sas_rphy_free(dev->rphy);
475 list_del_init(&dev->disco_list_node);
477 list_del_init(&dev->dev_list_node);
480 sas_put_device(dev);