Lines Matching full:tc

211 	struct tool_ctx    *tc;  member
244 struct tool_ctx *tc; member
249 struct tool_ctx *tc; member
293 struct tool_ctx *tc = ctx; in tool_link_event() local
298 up = ntb_link_is_up(tc->dev, &speed, &width); in tool_link_event()
300 tc->link_status = 'Y'; in tool_link_event()
302 tc->link_status = 'N'; in tool_link_event()
304 device_printf(tc->dev, "link is %s speed %d width %d\n", in tool_link_event()
311 struct tool_ctx *tc = ctx; in tool_db_event() local
314 db_mask = ntb_db_vector_mask(tc->dev, vec); in tool_db_event()
315 db_bits = ntb_db_read(tc->dev); in tool_db_event()
317 device_printf(tc->dev, "doorbell vec %d mask %#llx bits %#llx\n", in tool_db_event()
332 struct tool_ctx *tc = (struct tool_ctx *)arg; in tool_link_event_handler() local
335 val = ntb_link_is_up(tc->dev, NULL, NULL) & tc->link_mask; in tool_link_event_handler()
337 if (val == tc->link_bits) { in tool_link_event_handler()
338 device_printf(tc->dev, "link_event successful for link val=" in tool_link_event_handler()
339 "0x%jx\n", tc->link_bits); in tool_link_event_handler()
340 tc->link_bits = 0x0; in tool_link_event_handler()
341 tc->link_mask = 0x0; in tool_link_event_handler()
343 callout_reset(&tc->link_event_timer, 1, tool_link_event_handler, tc); in tool_link_event_handler()
349 struct tool_ctx *tc = (struct tool_ctx *)arg; in tool_db_event_handler() local
352 db_bits = ntb_db_read(tc->dev); in tool_db_event_handler()
354 if (db_bits == tc->db_event_val) { in tool_db_event_handler()
355 device_printf(tc->dev, "db_event successful for db val=0x%jx\n", in tool_db_event_handler()
356 tc->db_event_val); in tool_db_event_handler()
357 tc->db_event_val = 0x0; in tool_db_event_handler()
359 callout_reset(&tc->db_event_timer, 1, tool_db_event_handler, tc); in tool_db_event_handler()
393 tool_fn_read(struct tool_ctx *tc, struct sysctl_req *req, in tool_fn_read() argument
399 return read_out(req, (uint64_t)fn_read(tc->dev)); in tool_fn_read()
405 tool_fn_write(struct tool_ctx *tc, struct sysctl_oid *oidp, in tool_fn_write() argument
409 uint64_t db_valid_mask = tc->db_valid_mask; in tool_fn_write()
414 device_printf(tc->dev, "ERR: Set & Clear both are not supported\n"); in tool_fn_write()
418 if (tc->db_valid_mask == 0) in tool_fn_write()
419 db_valid_mask = tc->db_valid_mask = ntb_db_valid_mask(tc->dev); in tool_fn_write()
425 device_printf(tc->dev, "0x%jx value is not supported\n", bits); in tool_fn_write()
429 fn_set(tc->dev, bits); in tool_fn_write()
436 device_printf(tc->dev, "0x%jx value is not supported\n", bits); in tool_fn_write()
440 fn_clear(tc->dev, bits); in tool_fn_write()
444 device_printf(tc->dev, "Wrong Write\n"); in tool_fn_write()
593 device_printf(inmw->tc->dev, "Wrong Command \"%c\" provided\n", in tool_mw_write_fn()
600 device_printf(inmw->tc->dev, "%s: configured mw size :%zi and " in tool_mw_write_fn()
642 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_peer_port_number() local
645 peer_port = ntb_peer_port_number(tc->dev, pidx); in sysctl_peer_port_number()
648 device_printf(tc->dev, "Peer port sysctl set failed with err=" in sysctl_peer_port_number()
651 tc->peers[pidx].port_no = peer_port; in sysctl_peer_port_number()
659 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_local_port_number() local
662 local_port = ntb_port_number(tc->dev); in sysctl_local_port_number()
665 device_printf(tc->dev, "Local port sysctl set failed with err=" in sysctl_local_port_number()
668 tc->port_no = local_port; in sysctl_local_port_number()
674 tool_init_peers(struct tool_ctx *tc) in tool_init_peers() argument
678 tc->peer_cnt = ntb_peer_port_count(tc->dev); in tool_init_peers()
679 tc->peers = malloc(tc->peer_cnt * sizeof(*tc->peers), M_NTB_TOOL, in tool_init_peers()
681 for (pidx = 0; pidx < tc->peer_cnt; pidx++) { in tool_init_peers()
682 tc->peers[pidx].pidx = pidx; in tool_init_peers()
683 tc->peers[pidx].tc = tc; in tool_init_peers()
688 tool_clear_peers(struct tool_ctx *tc) in tool_clear_peers() argument
691 free(tc->peers, M_NTB_TOOL); in tool_clear_peers()
700 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_link_handle() local
705 snprintf(buf, 2, "%c", tc->link_status); in sysctl_link_handle()
715 rc = ntb_link_enable(tc->dev, NTB_SPEED_AUTO, NTB_WIDTH_AUTO); in sysctl_link_handle()
717 rc = ntb_link_disable(tc->dev); in sysctl_link_handle()
721 sscanf(buf, "%c", &tc->link_status); in sysctl_link_handle()
729 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_peer_link_handle() local
736 up = ntb_link_is_up(tc->dev, NULL, NULL); in sysctl_peer_link_handle()
749 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_peer_link_event_handle() local
755 return read_out(req, tc->link_bits); in sysctl_peer_link_event_handle()
762 tc->link_bits = bits; in sysctl_peer_link_event_handle()
763 tc->link_mask = (1ULL << ((pidx) % 64)); in sysctl_peer_link_event_handle()
765 callout_reset(&tc->link_event_timer, 1, tool_link_event_handler, tc); in sysctl_peer_link_event_handle()
802 tool_setup_mw(struct tool_ctx *tc, unsigned int pidx, unsigned int widx, in tool_setup_mw() argument
805 struct tool_mw *inmw = &tc->peers[pidx].inmws[widx]; in tool_setup_mw()
814 device_printf(tc->dev, "mw_size %zi req_size %zi buff %zi\n", in tool_setup_mw()
817 if (bus_dma_tag_create(bus_get_dma_tag(tc->dev), inmw->xlat_align, 0, in tool_setup_mw()
820 device_printf(tc->dev, "Unable to create MW tag of size " in tool_setup_mw()
828 device_printf(tc->dev, "Unable to allocate MW buffer of size " in tool_setup_mw()
836 device_printf(tc->dev, "Unable to load MW buffer of size " in tool_setup_mw()
843 rc = ntb_mw_set_trans(tc->dev, widx, inmw->dma_base, inmw->size); in tool_setup_mw()
869 tool_free_mw(struct tool_ctx *tc, int pidx, int widx) in tool_free_mw() argument
871 struct tool_mw *inmw = &tc->peers[pidx].inmws[widx]; in tool_free_mw()
874 ntb_mw_clear_trans(tc->dev, widx); in tool_free_mw()
905 ntb_peer_port_number(inmw->tc->dev, inmw->pidx), inmw->pidx); in tool_mw_trans_read()
924 struct tool_ctx *tc = inmw->tc; in tool_mw_trans_write() local
936 tool_free_mw(tc, inmw->pidx, inmw->widx); in tool_mw_trans_write()
938 rc = tool_setup_mw(tc, inmw->pidx, inmw->widx, wsize); in tool_mw_trans_write()
984 static void tool_clear_mws(struct tool_ctx *tc) in tool_clear_mws() argument
989 for (pidx = 0; pidx < tc->peer_cnt; pidx++) { in tool_clear_mws()
990 for (widx = 0; widx < tc->peers[pidx].inmw_cnt; widx++) in tool_clear_mws()
991 tool_free_mw(tc, pidx, widx); in tool_clear_mws()
992 free(tc->peers[pidx].inmws, M_NTB_TOOL); in tool_clear_mws()
997 tool_init_mws(struct tool_ctx *tc) in tool_init_mws() argument
1003 for (pidx = 0; pidx < tc->peer_cnt; pidx++) { in tool_init_mws()
1004 tc->peers[pidx].inmw_cnt = ntb_mw_count(tc->dev); in tool_init_mws()
1005 tc->peers[pidx].inmws = malloc(tc->peers[pidx].inmw_cnt * in tool_init_mws()
1006 sizeof(*tc->peers[pidx].inmws), M_NTB_TOOL, in tool_init_mws()
1009 for (widx = 0; widx < tc->peers[pidx].inmw_cnt; widx++) { in tool_init_mws()
1010 mw = &tc->peers[pidx].inmws[widx]; in tool_init_mws()
1012 mw->tc = tc; in tool_init_mws()
1018 rc = ntb_mw_get_range(tc->dev, widx, &mw->phys_addr, in tool_init_mws()
1029 tool_clear_mws(tc); in tool_init_mws()
1039 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_db_handle() local
1045 db_bits = ntb_db_read(tc->dev); in sysctl_db_handle()
1051 return tool_fn_write(tc, oidp, req, buf, NULL, false, NULL, in sysctl_db_handle()
1060 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_db_valid_mask_handle() local
1062 tc->db_valid_mask = ntb_db_valid_mask(tc->dev); in sysctl_db_valid_mask_handle()
1063 if (!tc->db_valid_mask) { in sysctl_db_valid_mask_handle()
1064 device_printf(tc->dev, "Error getting db_valid_mask from " in sysctl_db_valid_mask_handle()
1068 return read_out(req, tc->db_valid_mask); in sysctl_db_valid_mask_handle()
1075 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_db_mask_handle() local
1080 if (tc->db_mask_val == 0) in sysctl_db_mask_handle()
1081 ntb_db_valid_mask(tc->dev); in sysctl_db_mask_handle()
1082 return tool_fn_read(tc, req, NULL, tc->db_mask_val); in sysctl_db_mask_handle()
1087 return tool_fn_write(tc, oidp, req, buf, &tc->db_mask_val, true, in sysctl_db_mask_handle()
1096 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_peer_db_handle() local
1101 return tool_fn_read(tc, req, NULL, tc->peer_db_val); in sysctl_peer_db_handle()
1105 return tool_fn_write(tc, oidp, req, buf, &tc->peer_db_val, in sysctl_peer_db_handle()
1114 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_peer_db_mask_handle() local
1119 if (tc->peer_db_mask_val == 0) in sysctl_peer_db_mask_handle()
1120 ntb_db_valid_mask(tc->dev); in sysctl_peer_db_mask_handle()
1121 return tool_fn_read(tc, req, NULL, tc->peer_db_mask_val); in sysctl_peer_db_mask_handle()
1126 return tool_fn_write(tc, oidp, req, buf, &tc->peer_db_mask_val, in sysctl_peer_db_mask_handle()
1135 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_db_event_handle() local
1141 return read_out(req, tc->db_event_val); in sysctl_db_event_handle()
1148 tc->db_event_val = bits; in sysctl_db_event_handle()
1149 callout_reset(&tc->db_event_timer, 1, tool_db_event_handler, tc); in sysctl_db_event_handle()
1160 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_spad_handle() local
1167 rc = ntb_spad_read(tc->dev, sidx, &bits); in sysctl_spad_handle()
1177 return ntb_spad_write(tc->dev, sidx, bits); in sysctl_spad_handle()
1186 struct tool_ctx *tc = (struct tool_ctx *)arg1; in sysctl_peer_spad_handle() local
1193 rc = ntb_peer_spad_read(tc->dev, sidx, &bits); in sysctl_peer_spad_handle()
1203 return ntb_peer_spad_write(tc->dev, sidx, bits); in sysctl_peer_spad_handle()
1210 tool_init_spads(struct tool_ctx *tc) in tool_init_spads() argument
1215 tc->inspad_cnt = ntb_spad_count(tc->dev); in tool_init_spads()
1216 tc->inspads = malloc(tc->inspad_cnt * sizeof(*tc->inspads), M_NTB_TOOL, in tool_init_spads()
1219 for (sidx = 0; sidx < tc->inspad_cnt; sidx++) { in tool_init_spads()
1220 tc->inspads[sidx].sidx = sidx; in tool_init_spads()
1221 tc->inspads[sidx].pidx = -1; in tool_init_spads()
1222 tc->inspads[sidx].tc = tc; in tool_init_spads()
1226 for (pidx = 0; pidx < tc->peer_cnt; pidx++) { in tool_init_spads()
1227 tc->peers[pidx].outspad_cnt = ntb_spad_count(tc->dev); in tool_init_spads()
1228 tc->peers[pidx].outspads = malloc(tc->peers[pidx].outspad_cnt * in tool_init_spads()
1229 sizeof(*tc->peers[pidx].outspads), M_NTB_TOOL, M_WAITOK | in tool_init_spads()
1232 for (sidx = 0; sidx < tc->peers[pidx].outspad_cnt; sidx++) { in tool_init_spads()
1233 tc->peers[pidx].outspads[sidx].sidx = sidx; in tool_init_spads()
1234 tc->peers[pidx].outspads[sidx].pidx = pidx; in tool_init_spads()
1235 tc->peers[pidx].outspads[sidx].tc = tc; in tool_init_spads()
1241 tool_clear_spads(struct tool_ctx *tc) in tool_clear_spads() argument
1246 free(tc->inspads, M_NTB_TOOL); in tool_clear_spads()
1249 for (pidx = 0; pidx < tc->peer_cnt; pidx++) in tool_clear_spads()
1250 free(tc->peers[pidx].outspads, M_NTB_TOOL); in tool_clear_spads()
1257 tool_check_ntb(struct tool_ctx *tc) in tool_check_ntb() argument
1261 callout_init(&tc->link_event_timer, 1); in tool_check_ntb()
1264 callout_init(&tc->db_event_timer, 1); in tool_check_ntb()
1267 tc->link_status = 'U'; in tool_check_ntb()
1268 tc->db_mask_val = 0; in tool_check_ntb()
1269 tc->peer_db_val = 0; in tool_check_ntb()
1270 tc->peer_db_mask_val = 0; in tool_check_ntb()
1271 tc->db_event_val = 0; in tool_check_ntb()
1272 tc->link_bits = 0; in tool_check_ntb()
1278 tool_clear_data(struct tool_ctx *tc) in tool_clear_data() argument
1281 callout_drain(&tc->link_event_timer); in tool_clear_data()
1282 callout_drain(&tc->db_event_timer); in tool_clear_data()
1286 tool_init_ntb(struct tool_ctx *tc) in tool_init_ntb() argument
1289 return ntb_set_ctx(tc->dev, tc, &tool_ops); in tool_init_ntb()
1293 tool_clear_ntb(struct tool_ctx *tc) in tool_clear_ntb() argument
1296 ntb_clear_ctx(tc->dev); in tool_clear_ntb()
1297 ntb_link_disable(tc->dev); in tool_clear_ntb()
1305 tool_setup_sysctl(struct tool_ctx *tc) in tool_setup_sysctl() argument
1313 clist = device_get_sysctl_ctx(tc->dev); in tool_setup_sysctl()
1314 parent = device_get_sysctl_tree(tc->dev); in tool_setup_sysctl()
1318 CTLFLAG_RDTUN | CTLFLAG_MPSAFE, tc, 0, sysctl_local_port_number, in tool_setup_sysctl()
1322 CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, 0, sysctl_link_handle, in tool_setup_sysctl()
1326 CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, 0, sysctl_db_handle, in tool_setup_sysctl()
1330 CTLFLAG_RD | CTLFLAG_MPSAFE, tc, 0, sysctl_db_valid_mask_handle, in tool_setup_sysctl()
1334 CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, 0, sysctl_db_mask_handle, in tool_setup_sysctl()
1338 CTLFLAG_WR | CTLFLAG_MPSAFE, tc, 0, sysctl_db_event_handle, in tool_setup_sysctl()
1342 CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, 0, sysctl_peer_db_handle, in tool_setup_sysctl()
1346 CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, 0, sysctl_peer_db_mask_handle, in tool_setup_sysctl()
1349 if (tc->inspad_cnt != 0) { in tool_setup_sysctl()
1350 for (sidx = 0; sidx < tc->inspad_cnt; sidx++) { in tool_setup_sysctl()
1356 tc, sidx, sysctl_spad_handle, "IU", desc); in tool_setup_sysctl()
1360 for (pidx = 0; pidx < tc->peer_cnt; pidx++) { in tool_setup_sysctl()
1368 CTLTYPE_UINT | CTLFLAG_RDTUN | CTLFLAG_MPSAFE, tc, pidx, in tool_setup_sysctl()
1372 CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, pidx, in tool_setup_sysctl()
1376 CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, tc, pidx, in tool_setup_sysctl()
1379 for (widx = 0; widx < tc->peers[pidx].inmw_cnt; widx++) { in tool_setup_sysctl()
1385 &tc->peers[pidx].inmws[widx], 0, in tool_setup_sysctl()
1393 &tc->peers[pidx].inmws[widx], 0, in tool_setup_sysctl()
1401 &tc->peers[pidx].inmws[widx], 0, in tool_setup_sysctl()
1405 for (sidx = 0; sidx < tc->peers[pidx].outspad_cnt; sidx++) { in tool_setup_sysctl()
1411 tc, sidx, sysctl_peer_spad_handle, "IU", desc); in tool_setup_sysctl()
1426 struct tool_ctx *tc = device_get_softc(dev); in ntb_tool_attach() local
1429 tc->dev = dev; in ntb_tool_attach()
1430 rc = tool_check_ntb(tc); in ntb_tool_attach()
1434 tool_init_peers(tc); in ntb_tool_attach()
1436 rc = tool_init_mws(tc); in ntb_tool_attach()
1440 tool_init_spads(tc); in ntb_tool_attach()
1442 rc = tool_init_ntb(tc); in ntb_tool_attach()
1446 tool_setup_sysctl(tc); in ntb_tool_attach()
1451 tool_clear_spads(tc); in ntb_tool_attach()
1452 tool_clear_mws(tc); in ntb_tool_attach()
1453 tool_clear_peers(tc); in ntb_tool_attach()
1455 tool_clear_data(tc); in ntb_tool_attach()
1464 struct tool_ctx *tc = device_get_softc(dev); in ntb_tool_detach() local
1466 tool_clear_ntb(tc); in ntb_tool_detach()
1468 tool_clear_spads(tc); in ntb_tool_detach()
1470 tool_clear_mws(tc); in ntb_tool_detach()
1472 tool_clear_peers(tc); in ntb_tool_detach()
1474 tool_clear_data(tc); in ntb_tool_detach()