26
26
nwl_write_register(val, ctx, ctx->base_addr, PKT_SIZE_ADDRESS);
28
if (ctx->type == PCILIB_DMA_MODIFICATION_DEFAULT) {
28
if (ctx->type == NWL_MODIFICATION_DEFAULT) {
29
29
switch (direction) {
30
30
case PCILIB_DMA_BIDIRECTIONAL:
54
54
engine initialized in previous run, and benchmark is only actual usage.
55
55
Otherwise, we should detect current loopback status during initialization */
57
if (ctx->type == PCILIB_DMA_MODIFICATION_DEFAULT) {
57
if (ctx->type == NWL_MODIFICATION_DEFAULT) {
58
58
nwl_write_register(val, ctx, ctx->base_addr, TX_CONFIG_ADDRESS);
59
59
nwl_write_register(val, ctx, ctx->base_addr, RX_CONFIG_ADDRESS);
78
78
nwl_dma_t *ctx = (nwl_dma_t*)vctx;
80
pcilib_dma_engine_t readid = pcilib_find_dma_by_addr(ctx->pcilib, PCILIB_DMA_FROM_DEVICE, dma);
81
pcilib_dma_engine_t writeid = pcilib_find_dma_by_addr(ctx->pcilib, PCILIB_DMA_TO_DEVICE, dma);
80
pcilib_dma_engine_t readid = pcilib_find_dma_by_addr(ctx->dmactx.pcilib, PCILIB_DMA_FROM_DEVICE, dma);
81
pcilib_dma_engine_t writeid = pcilib_find_dma_by_addr(ctx->dmactx.pcilib, PCILIB_DMA_TO_DEVICE, dma);
83
83
if (size%sizeof(uint32_t)) size = 1 + size / sizeof(uint32_t);
84
84
else size /= sizeof(uint32_t);
87
if (ctx->type == PCILIB_DMA_MODIFICATION_DEFAULT) {
87
if (ctx->type == NWL_MODIFICATION_DEFAULT) {
88
88
if (direction == PCILIB_DMA_TO_DEVICE) return -1.;
90
// else if ((direction == PCILIB_DMA_FROM_DEVICE)&&(ctx->type != PCILIB_DMA_MODIFICATION_DEFAULT)) return -1.;
90
// else if ((direction == PCILIB_DMA_FROM_DEVICE)&&(ctx->type != NWL_MODIFICATION_DEFAULT)) return -1.;
92
92
// Stop Generators and drain old data
93
if (ctx->type == PCILIB_DMA_MODIFICATION_DEFAULT) dma_nwl_stop_loopback(ctx);
93
if (ctx->type == NWL_MODIFICATION_DEFAULT) dma_nwl_stop_loopback(ctx);
94
94
// dma_nwl_stop_engine(ctx, readid); // DS: replace with something better
96
96
__sync_synchronize();
98
err = pcilib_skip_dma(ctx->pcilib, readid);
98
err = pcilib_skip_dma(ctx->dmactx.pcilib, readid);
100
100
pcilib_error("Can't start benchmark, devices continuously writes unexpected data using DMA engine");
128
if (ctx->type == PCILIB_NWL_MODIFICATION_IPECAMERA) {
129
pcilib_write_register(ctx->pcilib, NULL, "control", 0x1e5);
128
if (ctx->type == NWL_MODIFICATION_IPECAMERA) {
129
pcilib_write_register(ctx->dmactx.pcilib, NULL, "control", 0x1e5);
131
pcilib_write_register(ctx->pcilib, NULL, "control", 0x1e1);
131
pcilib_write_register(ctx->dmactx.pcilib, NULL, "control", 0x1e1);
133
133
// This way causes more problems with garbage
134
//pcilib_write_register(ctx->pcilib, NULL, "control", 0x3e1);
134
//pcilib_write_register(ctx->dmactx.pcilib, NULL, "control", 0x3e1);
138
138
for (iter = 0; iter < iterations; iter++) {
139
139
memset(cmp, 0x13 + iter, size * sizeof(uint32_t));
141
if (ctx->type == PCILIB_NWL_MODIFICATION_IPECAMERA) {
142
pcilib_write_register(ctx->pcilib, NULL, "control", 0x1e1);
141
if (ctx->type == NWL_MODIFICATION_IPECAMERA) {
142
pcilib_write_register(ctx->dmactx.pcilib, NULL, "control", 0x1e1);
145
if ((direction&PCILIB_DMA_TO_DEVICE)||(ctx->type != PCILIB_DMA_MODIFICATION_DEFAULT)) {
145
if ((direction&PCILIB_DMA_TO_DEVICE)||(ctx->type != NWL_MODIFICATION_DEFAULT)) {
146
146
memcpy(buf, cmp, size * sizeof(uint32_t));
148
148
if (direction&PCILIB_DMA_TO_DEVICE) {
149
149
gettimeofday(&start, NULL);
152
err = pcilib_write_dma(ctx->pcilib, writeid, addr, size * sizeof(uint32_t), buf, &bytes);
152
err = pcilib_write_dma(ctx->dmactx.pcilib, writeid, addr, size * sizeof(uint32_t), buf, &bytes);
153
153
if ((err)||(bytes != size * sizeof(uint32_t))) {
154
154
error = "Write failed";
168
if (ctx->type == PCILIB_NWL_MODIFICATION_IPECAMERA) {
169
pcilib_write_register(ctx->pcilib, NULL, "control", 0x3e1);
168
if (ctx->type == NWL_MODIFICATION_IPECAMERA) {
169
pcilib_write_register(ctx->dmactx.pcilib, NULL, "control", 0x3e1);
172
172
memset(buf, 0, size * sizeof(uint32_t));
183
err = pcilib_read_dma(ctx->pcilib, readid, addr, packet_size * sizeof(uint32_t), buf + (bytes>>2), &rbytes);
183
err = pcilib_read_dma(ctx->dmactx.pcilib, readid, addr, packet_size * sizeof(uint32_t), buf + (bytes>>2), &rbytes);
184
184
if ((err)||(rbytes%sizeof(uint32_t))) {
230
if (ctx->type == PCILIB_NWL_MODIFICATION_IPECAMERA) {
231
pcilib_write_register(ctx->pcilib, NULL, "control", 0x1e1);
230
if (ctx->type == NWL_MODIFICATION_IPECAMERA) {
231
pcilib_write_register(ctx->dmactx.pcilib, NULL, "control", 0x1e1);