Lines Matching refs:route
91 int (*get_route)(struct tb *tb, u8 link, u8 depth, u64 *route);
171 static inline u8 phy_port_from_route(u64 route, u8 depth) in phy_port_from_route() argument
175 link = depth ? route >> ((depth - 1) * 8) : route; in phy_port_from_route()
189 static inline u64 get_parent_route(u64 route) in get_parent_route() argument
191 int depth = tb_route_length(route); in get_parent_route()
192 return depth ? route & ~(0xffULL << (depth - 1) * TB_ROUTE_SHIFT) : 0; in get_parent_route()
382 static int icm_fr_get_route(struct tb *tb, u8 link, u8 depth, u64 *route) in icm_fr_get_route() argument
426 *route = get_route(sw->route_hi, sw->route_lo); in icm_fr_get_route()
589 static struct tb_switch *alloc_switch(struct tb_switch *parent_sw, u64 route, in alloc_switch() argument
595 sw = tb_switch_alloc(tb, &parent_sw->dev, route); in alloc_switch()
597 tb_warn(tb, "failed to allocate switch at %llx\n", route); in alloc_switch()
613 u64 route = tb_route(sw); in add_switch() local
617 tb_port_at(route, parent_sw)->remote = tb_upstream_port(sw); in add_switch()
618 tb_upstream_port(sw)->remote = tb_port_at(route, parent_sw); in add_switch()
628 u64 route, u8 connection_id, u8 connection_key, in update_switch() argument
634 tb_port_at(route, parent_sw)->remote = tb_upstream_port(sw); in update_switch()
637 sw->config.route_hi = upper_32_bits(route); in update_switch()
638 sw->config.route_lo = lower_32_bits(route); in update_switch()
661 static void add_xdomain(struct tb_switch *sw, u64 route, in add_xdomain() argument
669 xd = tb_xdomain_alloc(sw->tb, &sw->dev, route, local_uuid, remote_uuid); in add_xdomain()
676 tb_port_at(route, sw)->xdomain = xd; in add_xdomain()
685 static void update_xdomain(struct tb_xdomain *xd, u64 route, u8 link) in update_xdomain() argument
688 xd->route = route; in update_xdomain()
697 tb_port_at(xd->route, sw)->xdomain = NULL; in remove_xdomain()
713 u64 route; in icm_fr_device_connected() local
757 ret = icm->get_route(tb, link, depth, &route); in icm_fr_device_connected()
765 route = tb_route(sw); in icm_fr_device_connected()
768 update_switch(parent_sw, sw, route, pkg->connection_id, in icm_fr_device_connected()
816 ret = icm->get_route(tb, link, depth, &route); in icm_fr_device_connected()
826 sw = alloc_switch(parent_sw, route, &pkg->ep_uuid); in icm_fr_device_connected()
885 u64 route; in icm_fr_xdomain_connected() local
896 route = get_route(pkg->local_route_hi, pkg->local_route_lo); in icm_fr_xdomain_connected()
902 xd_phy_port = phy_port_from_route(xd->route, xd->depth); in icm_fr_xdomain_connected()
903 phy_port = phy_port_from_route(route, depth); in icm_fr_xdomain_connected()
906 update_xdomain(xd, route, link); in icm_fr_xdomain_connected()
945 sw = tb_switch_find_by_route(tb, route); in icm_fr_xdomain_connected()
958 add_xdomain(sw, route, &pkg->local_uuid, &pkg->remote_uuid, link, in icm_fr_xdomain_connected()
1108 request.route_hi = upper_32_bits(xd->route); in icm_tr_approve_xdomain_paths()
1109 request.route_lo = lower_32_bits(xd->route); in icm_tr_approve_xdomain_paths()
1138 request.route_hi = upper_32_bits(xd->route); in icm_tr_xdomain_tear_down()
1139 request.route_lo = lower_32_bits(xd->route); in icm_tr_xdomain_tear_down()
1176 u64 route; in __icm_tr_device_connected() local
1188 route = get_route(pkg->route_hi, pkg->route_lo); in __icm_tr_device_connected()
1198 route); in __icm_tr_device_connected()
1205 if (tb_route(sw) == route && !!sw->authorized == authorized) { in __icm_tr_device_connected()
1207 update_switch(parent_sw, sw, route, pkg->connection_id, in __icm_tr_device_connected()
1218 sw = tb_switch_find_by_route(tb, route); in __icm_tr_device_connected()
1225 xd = tb_xdomain_find_by_route(tb, route); in __icm_tr_device_connected()
1231 parent_sw = tb_switch_find_by_route(tb, get_parent_route(route)); in __icm_tr_device_connected()
1233 tb_err(tb, "failed to find parent switch for %llx\n", route); in __icm_tr_device_connected()
1239 sw = alloc_switch(parent_sw, route, &pkg->ep_uuid); in __icm_tr_device_connected()
1274 u64 route; in icm_tr_device_disconnected() local
1276 route = get_route(pkg->route_hi, pkg->route_lo); in icm_tr_device_disconnected()
1278 sw = tb_switch_find_by_route(tb, route); in icm_tr_device_disconnected()
1280 tb_warn(tb, "no switch exists at %llx, ignoring\n", route); in icm_tr_device_disconnected()
1295 u64 route; in icm_tr_xdomain_connected() local
1300 route = get_route(pkg->local_route_hi, pkg->local_route_lo); in icm_tr_xdomain_connected()
1304 if (xd->route == route) { in icm_tr_xdomain_connected()
1305 update_xdomain(xd, route, 0); in icm_tr_xdomain_connected()
1315 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_xdomain_connected()
1326 sw = tb_switch_find_by_route(tb, route); in icm_tr_xdomain_connected()
1332 sw = tb_switch_find_by_route(tb, get_parent_route(route)); in icm_tr_xdomain_connected()
1334 tb_warn(tb, "no switch exists at %llx, ignoring\n", route); in icm_tr_xdomain_connected()
1338 add_xdomain(sw, route, &pkg->local_uuid, &pkg->remote_uuid, 0, 0); in icm_tr_xdomain_connected()
1348 u64 route; in icm_tr_xdomain_disconnected() local
1350 route = get_route(pkg->route_hi, pkg->route_lo); in icm_tr_xdomain_disconnected()
1352 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_xdomain_disconnected()
1478 static int icm_ar_get_route(struct tb *tb, u8 link, u8 depth, u64 *route) in icm_ar_get_route() argument
1496 *route = get_route(reply.route_hi, reply.route_lo); in icm_ar_get_route()