int bounce (void) { unsigned short csr; unsigned short buff[4096], data[4096], *pts, *ptd; int i, l = 0, flag = 0; int seuil = 0; unsigned char str1[20], str2[20]; char dir; seuil = 128; dir = 8; /* tell G64 to start bounce with LRR and NEM set */ csr = LRREQ_BIT + NEM_BIT; if (set_csr (bc, rt, &csr, &status) == -1) BAD1 ("system error in set LRR+NEM"); /* reset bit TB et RB */ csr = TB_BIT + RB_BIT; if (clr_csr (bc, rt, &csr, &status) == -1) BAD1 ("system error in clr RB+TB"); /* fill data */ for (i = 0; i < seuil; i++) data[i] = (i * (0xffff / seuil)) + ((0xffff / seuil) * l + l); l = 1; while (go_on) { print (1, "%c%c", '|' + (l & 0xfffe), dir); print (2, "Test avec %4d mots\n", l); /* reset receive pointer */ csr = RRP_BIT; if (set_csr (bc, rt, &csr, &status) == -1) BAD ("system error in set RRP"); /* fill buffer */ if (set_rx_buf (bc, rt, l * 2, (char *) data, &status) != 0) BAD ("system error in set_rc_buf"); /* set bits RB */ csr = RB_BIT; if (set_csr (bc, rt, &csr, &status) == -1) BAD ("system error in set RB"); /* wait for reponse */ if (wait_for_csr (TB_BIT, TB_BIT, 20000, 0) == 0) { print (1, "TIME_OUT a l'attente du Transmit Buffer plein.\n"); erreur++; if (t_err) continue; } /* reset transmit pointer */ csr = RTP_BIT; if (set_csr (bc, rt, &csr, &status) == -1) BAD ("system error in set RTP"); /* read reponse */ for (i = 0; i < l; i++) buff[i] = 0; if (get_tx_buf (bc, rt, l * 2, (char *) buff, &status) != 0) BAD ("system error in get_tx_buf"); /* reset bit TB */ csr = TB_BIT; if (clr_csr (bc, rt, &csr, &status) == -1) BAD ("system error in clr TB"); /* compare */ flag = 0; i = l; pts = data; ptd = buff; do { if (*pts != *ptd) { flag++; erreur++; convbin (*pts, (char *) str1); convbin (*ptd, (char *) str2); print (1, "DATA error in test_BOUNCE:\tPointer %d\n read [%s]\n write [%s]\n", i, str2, str1); break; } pts++; ptd++; } while (--i); if (++l > seuil) break; } /* clear collision pattern LRR and NEM set */ csr = LRREQ_BIT + NEM_BIT; if (clr_csr (bc, rt, &csr, &status) == -1) BAD1 ("system error in clr LRR+NEM"); if (get_csr (bc, rt, &csr, &status) == -1) BAD1 ("system error in get_csr"); if ((csr & INV_BIT) == INV_BIT) { print (0, "Le G64 a detecte une ou plusieurs erreurs au cours du test collision\n"); erreur++; csr = INV_BIT; if (clr_csr (bc, rt, &csr, &status) == -1) BAD1 ("system error in clr INV"); if (t_err) return t_err; } return (erreur); }
static int run_test_loop(void) { int ret = 0; uint64_t op_data = send_data ? opts.transfer_size : NO_CQ_DATA; uint64_t op_tag = 0x1234; char *op_buf; int i, j; for (i = 0; i < num_iters; i++) { for (j = 0; j < concurrent_msgs; j++) { op_buf = get_tx_buf(j); if (ft_check_opts(FT_OPT_VERIFY_DATA)) ft_fill_buf(op_buf + ft_tx_prefix_size(), opts.transfer_size); ret = ft_post_tx_buf(ep, remote_fi_addr, opts.transfer_size, op_data, &tx_ctx_arr[j], op_buf, mr_desc, op_tag); if (ret) { printf("ERROR send_msg returned %d\n", ret); return ret; } } ret = ft_sync(); if (ret) return ret; for (j = 0; j < concurrent_msgs; j++) { op_buf = get_rx_buf(j); ret = ft_post_rx_buf(ep, opts.transfer_size, &rx_ctx_arr[j], op_buf, mr_desc, op_tag); if (ret) { printf("ERROR recv_msg returned %d\n", ret); return ret; } } for (j = 0; j < concurrent_msgs; j++) { ret = wait_recvs(); if (ret < 1) return ret; } if (ft_check_opts(FT_OPT_VERIFY_DATA)) { for (j = 0; j < concurrent_msgs; j++) { op_buf = get_rx_buf(j); if (ft_check_buf(op_buf + ft_rx_prefix_size(), opts.transfer_size)) return -FI_EOTHER; } } for (j = 0; j < concurrent_msgs; j++) { ret = ft_get_tx_comp(tx_seq); if (ret) return ret; } if (i % 100 == 0) printf("PID %d GOOD iter %d/%ld completed\n", getpid(), i, num_iters); } (void) ft_sync(); printf("PID %d GOOD all done\n", getpid()); return ret; }