Lines Matching +full:0 +full:xd
28 #define PCIE2CIO_CMD 0x30
37 #define PCIE2CIO_WRDATA 0x34
38 #define PCIE2CIO_RDDATA 0x38
40 #define PHY_PORT_CS1 0x37
60 * @max_boot_acl: Maximum number of preboot ACL entries (%0 if not supported)
106 u8 data[0];
109 #define EP_NAME_INTEL_VSS 0x10
121 #define INTEL_VSS_FLAGS_RTD3 BIT(0)
159 return link ? ((link - 1) ^ 0x01) + 1 : 0; in dual_link_from_link()
170 return depth ? route & ~(0xffULL << (depth - 1) * TB_ROUTE_SHIFT) : 0; in get_parent_route()
250 return 0; in icm_fr_get_switch_index()
253 return index != 0xff ? index : 0; in icm_fr_get_switch_index()
275 sw = &switches[0]; in icm_fr_get_route()
291 for (j = 0; j < ARRAY_SIZE(sw->ports); j++) { in icm_fr_get_route()
309 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_SAVE_DEVS, 0); in icm_fr_save_devices()
322 memset(&reply, 0, sizeof(reply)); in icm_fr_driver_ready()
331 return 0; in icm_fr_driver_ready()
340 memset(&request, 0, sizeof(request)); in icm_fr_approve_switch()
346 memset(&reply, 0, sizeof(reply)); in icm_fr_approve_switch()
358 return 0; in icm_fr_approve_switch()
367 memset(&request, 0, sizeof(request)); in icm_fr_add_switch_key()
374 memset(&reply, 0, sizeof(reply)); in icm_fr_add_switch_key()
385 return 0; in icm_fr_add_switch_key()
395 memset(&request, 0, sizeof(request)); in icm_fr_challenge_switch_key()
402 memset(&reply, 0, sizeof(reply)); in icm_fr_challenge_switch_key()
415 return 0; in icm_fr_challenge_switch_key()
418 static int icm_fr_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd) in icm_fr_approve_xdomain_paths() argument
424 memset(&request, 0, sizeof(request)); in icm_fr_approve_xdomain_paths()
426 request.link_info = xd->depth << ICM_LINK_INFO_DEPTH_SHIFT | xd->link; in icm_fr_approve_xdomain_paths()
427 memcpy(&request.remote_uuid, xd->remote_uuid, sizeof(*xd->remote_uuid)); in icm_fr_approve_xdomain_paths()
429 request.transmit_path = xd->transmit_path; in icm_fr_approve_xdomain_paths()
430 request.transmit_ring = xd->transmit_ring; in icm_fr_approve_xdomain_paths()
431 request.receive_path = xd->receive_path; in icm_fr_approve_xdomain_paths()
432 request.receive_ring = xd->receive_ring; in icm_fr_approve_xdomain_paths()
434 memset(&reply, 0, sizeof(reply)); in icm_fr_approve_xdomain_paths()
443 return 0; in icm_fr_approve_xdomain_paths()
446 static int icm_fr_disconnect_xdomain_paths(struct tb *tb, struct tb_xdomain *xd) in icm_fr_disconnect_xdomain_paths() argument
451 phy_port = tb_phy_port_from_link(xd->link); in icm_fr_disconnect_xdomain_paths()
452 if (phy_port == 0) in icm_fr_disconnect_xdomain_paths()
460 return 0; in icm_fr_disconnect_xdomain_paths()
545 struct tb_xdomain *xd; in add_xdomain() local
549 xd = tb_xdomain_alloc(sw->tb, &sw->dev, route, local_uuid, remote_uuid); in add_xdomain()
550 if (!xd) in add_xdomain()
553 xd->link = link; in add_xdomain()
554 xd->depth = depth; in add_xdomain()
556 tb_port_at(route, sw)->xdomain = xd; in add_xdomain()
558 tb_xdomain_add(xd); in add_xdomain()
565 static void update_xdomain(struct tb_xdomain *xd, u64 route, u8 link) in update_xdomain() argument
567 xd->link = link; in update_xdomain()
568 xd->route = route; in update_xdomain()
569 xd->is_unplugged = false; in update_xdomain()
572 static void remove_xdomain(struct tb_xdomain *xd) in remove_xdomain() argument
576 sw = tb_to_switch(xd->dev.parent); in remove_xdomain()
577 tb_port_at(xd->route, sw)->xdomain = NULL; in remove_xdomain()
578 tb_xdomain_remove(xd); in remove_xdomain()
590 struct tb_xdomain *xd; in icm_fr_device_connected() local
679 xd = tb_xdomain_find_by_link_depth(tb, link, depth); in icm_fr_device_connected()
680 if (xd) { in icm_fr_device_connected()
681 remove_xdomain(xd); in icm_fr_device_connected()
682 tb_xdomain_put(xd); in icm_fr_device_connected()
741 struct tb_xdomain *xd; in icm_fr_xdomain_connected() local
757 xd = tb_xdomain_find_by_uuid(tb, &pkg->remote_uuid); in icm_fr_xdomain_connected()
758 if (xd) { in icm_fr_xdomain_connected()
761 xd_phy_port = phy_port_from_route(xd->route, xd->depth); in icm_fr_xdomain_connected()
764 if (xd->depth == depth && xd_phy_port == phy_port) { in icm_fr_xdomain_connected()
765 update_xdomain(xd, route, link); in icm_fr_xdomain_connected()
766 tb_xdomain_put(xd); in icm_fr_xdomain_connected()
776 remove_xdomain(xd); in icm_fr_xdomain_connected()
777 tb_xdomain_put(xd); in icm_fr_xdomain_connected()
785 xd = tb_xdomain_find_by_link_depth(tb, link, depth); in icm_fr_xdomain_connected()
786 if (!xd) { in icm_fr_xdomain_connected()
791 xd = tb_xdomain_find_by_link_depth(tb, dual_link, in icm_fr_xdomain_connected()
794 if (xd) { in icm_fr_xdomain_connected()
795 remove_xdomain(xd); in icm_fr_xdomain_connected()
796 tb_xdomain_put(xd); in icm_fr_xdomain_connected()
827 struct tb_xdomain *xd; in icm_fr_xdomain_disconnected() local
834 xd = tb_xdomain_find_by_uuid(tb, &pkg->remote_uuid); in icm_fr_xdomain_disconnected()
835 if (xd) { in icm_fr_xdomain_disconnected()
836 remove_xdomain(xd); in icm_fr_xdomain_disconnected()
837 tb_xdomain_put(xd); in icm_fr_xdomain_disconnected()
851 memset(&reply, 0, sizeof(reply)); in icm_tr_driver_ready()
865 return 0; in icm_tr_driver_ready()
874 memset(&request, 0, sizeof(request)); in icm_tr_approve_switch()
881 memset(&reply, 0, sizeof(reply)); in icm_tr_approve_switch()
892 return 0; in icm_tr_approve_switch()
901 memset(&request, 0, sizeof(request)); in icm_tr_add_switch_key()
909 memset(&reply, 0, sizeof(reply)); in icm_tr_add_switch_key()
920 return 0; in icm_tr_add_switch_key()
930 memset(&request, 0, sizeof(request)); in icm_tr_challenge_switch_key()
938 memset(&reply, 0, sizeof(reply)); in icm_tr_challenge_switch_key()
951 return 0; in icm_tr_challenge_switch_key()
954 static int icm_tr_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd) in icm_tr_approve_xdomain_paths() argument
960 memset(&request, 0, sizeof(request)); in icm_tr_approve_xdomain_paths()
962 request.route_hi = upper_32_bits(xd->route); in icm_tr_approve_xdomain_paths()
963 request.route_lo = lower_32_bits(xd->route); in icm_tr_approve_xdomain_paths()
964 request.transmit_path = xd->transmit_path; in icm_tr_approve_xdomain_paths()
965 request.transmit_ring = xd->transmit_ring; in icm_tr_approve_xdomain_paths()
966 request.receive_path = xd->receive_path; in icm_tr_approve_xdomain_paths()
967 request.receive_ring = xd->receive_ring; in icm_tr_approve_xdomain_paths()
968 memcpy(&request.remote_uuid, xd->remote_uuid, sizeof(*xd->remote_uuid)); in icm_tr_approve_xdomain_paths()
970 memset(&reply, 0, sizeof(reply)); in icm_tr_approve_xdomain_paths()
979 return 0; in icm_tr_approve_xdomain_paths()
982 static int icm_tr_xdomain_tear_down(struct tb *tb, struct tb_xdomain *xd, in icm_tr_xdomain_tear_down() argument
989 memset(&request, 0, sizeof(request)); in icm_tr_xdomain_tear_down()
992 request.route_hi = upper_32_bits(xd->route); in icm_tr_xdomain_tear_down()
993 request.route_lo = lower_32_bits(xd->route); in icm_tr_xdomain_tear_down()
994 memcpy(&request.remote_uuid, xd->remote_uuid, sizeof(*xd->remote_uuid)); in icm_tr_xdomain_tear_down()
996 memset(&reply, 0, sizeof(reply)); in icm_tr_xdomain_tear_down()
1005 return 0; in icm_tr_xdomain_tear_down()
1008 static int icm_tr_disconnect_xdomain_paths(struct tb *tb, struct tb_xdomain *xd) in icm_tr_disconnect_xdomain_paths() argument
1012 ret = icm_tr_xdomain_tear_down(tb, xd, 1); in icm_tr_disconnect_xdomain_paths()
1017 return icm_tr_xdomain_tear_down(tb, xd, 2); in icm_tr_disconnect_xdomain_paths()
1027 struct tb_xdomain *xd; in icm_tr_device_connected() local
1057 0, 0, 0, boot); in icm_tr_device_connected()
1074 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_device_connected()
1075 if (xd) { in icm_tr_device_connected()
1076 remove_xdomain(xd); in icm_tr_device_connected()
1077 tb_xdomain_put(xd); in icm_tr_device_connected()
1088 0, 0, 0, security_level, authorized, boot); in icm_tr_device_connected()
1118 struct tb_xdomain *xd; in icm_tr_xdomain_connected() local
1127 xd = tb_xdomain_find_by_uuid(tb, &pkg->remote_uuid); in icm_tr_xdomain_connected()
1128 if (xd) { in icm_tr_xdomain_connected()
1129 if (xd->route == route) { in icm_tr_xdomain_connected()
1130 update_xdomain(xd, route, 0); in icm_tr_xdomain_connected()
1131 tb_xdomain_put(xd); in icm_tr_xdomain_connected()
1135 remove_xdomain(xd); in icm_tr_xdomain_connected()
1136 tb_xdomain_put(xd); in icm_tr_xdomain_connected()
1140 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_xdomain_connected()
1141 if (xd) { in icm_tr_xdomain_connected()
1142 remove_xdomain(xd); in icm_tr_xdomain_connected()
1143 tb_xdomain_put(xd); in icm_tr_xdomain_connected()
1163 add_xdomain(sw, route, &pkg->local_uuid, &pkg->remote_uuid, 0, 0); in icm_tr_xdomain_connected()
1172 struct tb_xdomain *xd; in icm_tr_xdomain_disconnected() local
1177 xd = tb_xdomain_find_by_route(tb, route); in icm_tr_xdomain_disconnected()
1178 if (xd) { in icm_tr_xdomain_disconnected()
1179 remove_xdomain(xd); in icm_tr_xdomain_disconnected()
1180 tb_xdomain_put(xd); in icm_tr_xdomain_disconnected()
1234 if (cap > 0) { in icm_ar_is_supported()
1276 memset(&reply, 0, sizeof(reply)); in icm_ar_driver_ready()
1290 return 0; in icm_ar_driver_ready()
1302 memset(&reply, 0, sizeof(reply)); in icm_ar_get_route()
1312 return 0; in icm_ar_get_route()
1323 memset(&reply, 0, sizeof(reply)); in icm_ar_get_boot_acl()
1332 for (i = 0; i < nuuids; i++) { in icm_ar_get_boot_acl()
1335 uuid[0] = reply.acl[i].uuid_lo; in icm_ar_get_boot_acl()
1338 if (uuid[0] == 0xffffffff && uuid[1] == 0xffffffff) { in icm_ar_get_boot_acl()
1340 uuid[0] = 0; in icm_ar_get_boot_acl()
1341 uuid[1] = 0; in icm_ar_get_boot_acl()
1342 } else if (uuid[0] != 0 || uuid[1] != 0) { in icm_ar_get_boot_acl()
1344 uuid[2] = 0xffffffff; in icm_ar_get_boot_acl()
1345 uuid[3] = 0xffffffff; in icm_ar_get_boot_acl()
1364 for (i = 0; i < nuuids; i++) { in icm_ar_set_boot_acl()
1372 request.acl[i].uuid_lo = 0xffffffff; in icm_ar_set_boot_acl()
1373 request.acl[i].uuid_hi = 0xffffffff; in icm_ar_set_boot_acl()
1376 if (uuid[2] != 0xffffffff || uuid[3] != 0xffffffff) in icm_ar_set_boot_acl()
1379 request.acl[i].uuid_lo = uuid[0]; in icm_ar_set_boot_acl()
1384 memset(&reply, 0, sizeof(reply)); in icm_ar_set_boot_acl()
1393 return 0; in icm_ar_set_boot_acl()
1470 res = tb_cfg_read_raw(tb->ctl, &tmp, 0, 0, TB_CFG_SWITCH, in __icm_driver_ready()
1471 0, 1, 100); in __icm_driver_ready()
1473 return 0; in __icm_driver_ready()
1493 return 0; in pci2cio_wait_completion()
1520 return 0; in pcie2cio_read()
1561 return pcie2cio_write(icm, TB_CFG_SWITCH, 0, 0x50, BIT(9)); in icm_firmware_reset()
1573 return 0; in icm_firmware_start()
1586 return 0; in icm_firmware_start()
1603 return 0; in icm_reset_phy_port()
1631 return 0; in icm_reset_phy_port()
1684 nhi_mailbox_cmd(nhi, NHI_MAILBOX_ALLOW_ALL_DEVS, 0); in icm_firmware_init()
1688 if (ret < 0) in icm_firmware_init()
1700 ret = icm_reset_phy_port(tb, 0); in icm_firmware_init()
1707 return 0; in icm_firmware_init()
1723 return 0; in icm_driver_ready()
1736 tb->nboot_acl = 0; in icm_driver_ready()
1738 return 0; in icm_driver_ready()
1748 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DRV_UNLOADS, 0); in icm_suspend()
1749 return 0; in icm_suspend()
1845 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DRV_UNLOADS, 0); in icm_runtime_suspend()
1846 return 0; in icm_runtime_suspend()
1856 return 0; in icm_runtime_resume()
1865 tb->root_switch = tb_switch_alloc_safe_mode(tb, &tb->dev, 0); in icm_start()
1867 tb->root_switch = tb_switch_alloc(tb, &tb->dev, 0); in icm_start()
1895 nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DRV_UNLOADS, 0); in icm_stop()
1900 return nhi_mailbox_cmd(tb->nhi, NHI_MAILBOX_DISCONNECT_PCIE_PATHS, 0); in icm_disconnect_pcie_paths()