thunderbolt: Show link type for XDomain connections too
Following what we do for routers already, extend this to XDomain connections as well. This will show in sysfs whether the link is in USB4 or Thunderbolt mode. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ff7cd07f30
commit
f9cad07b84
@ -174,10 +174,10 @@ static void tb_discover_tunnels(struct tb *tb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tb_port_configure_xdomain(struct tb_port *port)
|
static int tb_port_configure_xdomain(struct tb_port *port, struct tb_xdomain *xd)
|
||||||
{
|
{
|
||||||
if (tb_switch_is_usb4(port->sw))
|
if (tb_switch_is_usb4(port->sw))
|
||||||
return usb4_port_configure_xdomain(port);
|
return usb4_port_configure_xdomain(port, xd);
|
||||||
return tb_lc_configure_xdomain(port);
|
return tb_lc_configure_xdomain(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ static void tb_scan_xdomain(struct tb_port *port)
|
|||||||
NULL);
|
NULL);
|
||||||
if (xd) {
|
if (xd) {
|
||||||
tb_port_at(route, sw)->xdomain = xd;
|
tb_port_at(route, sw)->xdomain = xd;
|
||||||
tb_port_configure_xdomain(port);
|
tb_port_configure_xdomain(port, xd);
|
||||||
tb_xdomain_add(xd);
|
tb_xdomain_add(xd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1516,7 +1516,7 @@ static void tb_restore_children(struct tb_switch *sw)
|
|||||||
|
|
||||||
tb_restore_children(port->remote->sw);
|
tb_restore_children(port->remote->sw);
|
||||||
} else if (port->xdomain) {
|
} else if (port->xdomain) {
|
||||||
tb_port_configure_xdomain(port);
|
tb_port_configure_xdomain(port, port->xdomain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1176,7 +1176,7 @@ void usb4_switch_remove_ports(struct tb_switch *sw);
|
|||||||
int usb4_port_unlock(struct tb_port *port);
|
int usb4_port_unlock(struct tb_port *port);
|
||||||
int usb4_port_configure(struct tb_port *port);
|
int usb4_port_configure(struct tb_port *port);
|
||||||
void usb4_port_unconfigure(struct tb_port *port);
|
void usb4_port_unconfigure(struct tb_port *port);
|
||||||
int usb4_port_configure_xdomain(struct tb_port *port);
|
int usb4_port_configure_xdomain(struct tb_port *port, struct tb_xdomain *xd);
|
||||||
void usb4_port_unconfigure_xdomain(struct tb_port *port);
|
void usb4_port_unconfigure_xdomain(struct tb_port *port);
|
||||||
int usb4_port_router_offline(struct tb_port *port);
|
int usb4_port_router_offline(struct tb_port *port);
|
||||||
int usb4_port_router_online(struct tb_port *port);
|
int usb4_port_router_online(struct tb_port *port);
|
||||||
|
@ -1115,12 +1115,14 @@ static int usb4_set_xdomain_configured(struct tb_port *port, bool configured)
|
|||||||
/**
|
/**
|
||||||
* usb4_port_configure_xdomain() - Configure port for XDomain
|
* usb4_port_configure_xdomain() - Configure port for XDomain
|
||||||
* @port: USB4 port connected to another host
|
* @port: USB4 port connected to another host
|
||||||
|
* @xd: XDomain that is connected to the port
|
||||||
*
|
*
|
||||||
* Marks the USB4 port as being connected to another host. Returns %0 in
|
* Marks the USB4 port as being connected to another host and updates
|
||||||
* success and negative errno in failure.
|
* the link type. Returns %0 in success and negative errno in failure.
|
||||||
*/
|
*/
|
||||||
int usb4_port_configure_xdomain(struct tb_port *port)
|
int usb4_port_configure_xdomain(struct tb_port *port, struct tb_xdomain *xd)
|
||||||
{
|
{
|
||||||
|
xd->link_usb4 = link_is_usb4(port);
|
||||||
return usb4_set_xdomain_configured(port, true);
|
return usb4_set_xdomain_configured(port, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,8 @@ static ssize_t link_show(struct device *dev, struct device_attribute *attr,
|
|||||||
link = port->sw->link_usb4 ? "usb4" : "tbt";
|
link = port->sw->link_usb4 ? "usb4" : "tbt";
|
||||||
else if (tb_port_has_remote(port))
|
else if (tb_port_has_remote(port))
|
||||||
link = port->remote->sw->link_usb4 ? "usb4" : "tbt";
|
link = port->remote->sw->link_usb4 ? "usb4" : "tbt";
|
||||||
|
else if (port->xdomain)
|
||||||
|
link = port->xdomain->link_usb4 ? "usb4" : "tbt";
|
||||||
else
|
else
|
||||||
link = "none";
|
link = "none";
|
||||||
|
|
||||||
|
@ -187,6 +187,7 @@ void tb_unregister_property_dir(const char *key, struct tb_property_dir *dir);
|
|||||||
* @device_name: Name of the device (or %NULL if not known)
|
* @device_name: Name of the device (or %NULL if not known)
|
||||||
* @link_speed: Speed of the link in Gb/s
|
* @link_speed: Speed of the link in Gb/s
|
||||||
* @link_width: Width of the link (1 or 2)
|
* @link_width: Width of the link (1 or 2)
|
||||||
|
* @link_usb4: Downstream link is USB4
|
||||||
* @is_unplugged: The XDomain is unplugged
|
* @is_unplugged: The XDomain is unplugged
|
||||||
* @needs_uuid: If the XDomain does not have @remote_uuid it will be
|
* @needs_uuid: If the XDomain does not have @remote_uuid it will be
|
||||||
* queried first
|
* queried first
|
||||||
@ -234,6 +235,7 @@ struct tb_xdomain {
|
|||||||
const char *device_name;
|
const char *device_name;
|
||||||
unsigned int link_speed;
|
unsigned int link_speed;
|
||||||
unsigned int link_width;
|
unsigned int link_width;
|
||||||
|
bool link_usb4;
|
||||||
bool is_unplugged;
|
bool is_unplugged;
|
||||||
bool needs_uuid;
|
bool needs_uuid;
|
||||||
struct ida service_ids;
|
struct ida service_ids;
|
||||||
|
Loading…
Reference in New Issue
Block a user