Lines Matching refs:port

41  * sas_get_port_device - Discover devices which caused port creation
42 * @port: pointer to struct sas_port of interest
44 * Devices directly attached to a HA port, have no parent. This is
49 static int sas_get_port_device(struct asd_sas_port *port)
60 spin_lock_irq(&port->phy_list_lock);
61 if (list_empty(&port->phy_list)) {
62 spin_unlock_irq(&port->phy_list_lock);
66 phy = container_of(port->phy_list.next, struct asd_sas_phy, port_phy_el);
71 spin_unlock_irq(&port->phy_list_lock);
73 if (dev->frame_rcvd[0] == 0x34 && port->oob_mode == SATA_OOB_MODE) {
83 } else if (port->oob_mode == SAS_OOB_MODE) {
90 /* If the oob mode is OOB_NOT_CONNECTED, the port is
92 * continue to discover this port
96 SAS_ADDR(port->attached_sas_addr));
102 dev->port = port;
112 rphy = sas_end_device_alloc(port->port);
115 rphy = sas_expander_alloc(port->port,
119 rphy = sas_expander_alloc(port->port,
134 memcpy(dev->sas_addr, port->attached_sas_addr, SAS_ADDR_SIZE);
137 port->port_dev = dev;
138 dev->linkrate = port->linkrate;
139 dev->min_linkrate = port->linkrate;
140 dev->max_linkrate = port->linkrate;
141 dev->pathways = port->num_phys;
142 memset(port->disc.fanout_sas_addr, 0, SAS_ADDR_SIZE);
143 memset(port->disc.eeds_a, 0, SAS_ADDR_SIZE);
144 memset(port->disc.eeds_b, 0, SAS_ADDR_SIZE);
145 port->disc.max_level = 0;
146 sas_device_set_phy(dev, port->port);
152 list_add_tail(&dev->disco_list_node, &port->disco_list);
154 spin_lock_irq(&port->dev_list_lock);
155 list_add_tail(&dev->dev_list_node, &port->dev_list);
156 spin_unlock_irq(&port->dev_list_lock);
159 spin_lock_irq(&port->phy_list_lock);
160 list_for_each_entry(phy, &port->phy_list, port_phy_el)
162 spin_unlock_irq(&port->phy_list_lock);
172 struct sas_ha_struct *sas_ha = dev->port->ha;
194 struct sas_ha_struct *sas_ha = dev->port->ha;
207 static void sas_probe_devices(struct asd_sas_port *port)
212 list_for_each_entry(dev, &port->disco_list, disco_list_node) {
213 spin_lock_irq(&port->dev_list_lock);
214 list_add_tail(&dev->dev_list_node, &port->dev_list);
215 spin_unlock_irq(&port->dev_list_lock);
218 sas_probe_sata(port);
220 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) {
236 struct asd_sas_port *port = ev->port;
237 struct Scsi_Host *shost = port->ha->shost;
240 clear_bit(DISCE_SUSPEND, &port->disc.pending);
242 sas_suspend_sata(port);
248 list_for_each_entry(dev, &port->dev_list, dev_list_node)
254 list_for_each_entry(phy, &port->phy_list, port_phy_el) {
258 port->suspended = 1;
265 struct asd_sas_port *port = ev->port;
267 clear_bit(DISCE_RESUME, &port->disc.pending);
269 sas_resume_sata(port);
313 static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_device *dev)
315 struct sas_ha_struct *ha = port->ha;
319 dev->port->port_dev = NULL;
323 spin_lock_irq(&port->dev_list_lock);
327 spin_unlock_irq(&port->dev_list_lock);
340 void sas_destruct_devices(struct asd_sas_port *port)
344 list_for_each_entry_safe(dev, n, &port->destroy_list, disco_list_node) {
349 sas_unregister_common_dev(port, dev);
353 static void sas_destruct_ports(struct asd_sas_port *port)
357 list_for_each_entry_safe(sas_port, p, &port->sas_port_del_list, del_list) {
375 struct sas_ha_struct *sas_ha = dev->port->ha;
390 void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *dev)
397 sas_unregister_common_dev(port, dev);
405 list_move_tail(&dev->disco_list_node, &port->destroy_list);
409 void sas_unregister_domain_devices(struct asd_sas_port *port, int gone)
413 list_for_each_entry_safe_reverse(dev, n, &port->dev_list, dev_list_node) {
416 sas_unregister_dev(port, dev);
419 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node)
420 sas_unregister_dev(port, dev);
422 port->port->rphy = NULL;
426 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port)
434 ha = dev->port->ha;
435 new_phy = sas_port_get_phy(port);
450 * @work: work structure embedded in port domain device.
462 struct asd_sas_port *port = ev->port;
464 clear_bit(DISCE_DISCOVER_DOMAIN, &port->disc.pending);
466 if (port->port_dev)
469 error = sas_get_port_device(port);
472 dev = port->port_dev;
474 pr_debug("DOING DISCOVERY on port %d, pid:%d\n", port->id,
498 spin_lock_irq(&port->dev_list_lock);
500 spin_unlock_irq(&port->dev_list_lock);
503 port->port_dev = NULL;
506 sas_probe_devices(port);
508 pr_debug("DONE DISCOVERY on port %d, pid:%d, result:%d\n", port->id,
516 struct asd_sas_port *port = ev->port;
517 struct sas_ha_struct *ha = port->ha;
518 struct domain_device *ddev = port->port_dev;
523 pr_debug("REVALIDATION DEFERRED on port %d, pid:%d\n",
524 port->id, task_pid_nr(current));
528 clear_bit(DISCE_REVALIDATE_DOMAIN, &port->disc.pending);
530 pr_debug("REVALIDATING DOMAIN on port %d, pid:%d\n", port->id,
536 pr_debug("done REVALIDATING DOMAIN on port %d, pid:%d, res 0x%x\n",
537 port->id, task_pid_nr(current), res);
541 sas_destruct_devices(port);
542 sas_destruct_ports(port);
543 sas_probe_devices(port);
571 void sas_discover_event(struct asd_sas_port *port, enum discover_event ev)
575 if (!port)
577 disc = &port->disc;
581 sas_chain_event(ev, &disc->pending, &disc->disc_work[ev].work, port->ha);
585 * sas_init_disc - initialize the discovery struct in the port
586 * @disc: port discovery structure
587 * @port: pointer to struct port
591 void sas_init_disc(struct sas_discovery *disc, struct asd_sas_port *port)
605 disc->disc_work[i].port = port;