int bg_f_chunk_read(bg_f_io_t * io, bg_f_chunk_t * ch) { ch->start = io->ftell_callback(io->data); if(!read_32(io, &ch->type) || !read_64(io, &ch->size)) return 0; return 1; }
int place_bad_addresses(struct ctx *p_ctx, int action) { int cnt = NUM_CMDS; int wait_try=MAX_TRY_WAIT; int p_cmd = 0; int i; __u64 room; __u64 baddr = 0x1234; /* make memory updates visible to AFU before MMIO */ asm volatile( "lwsync" : : ); if (2 == action) { // set up bad HRRQ address write_64(&p_ctx->p_host_map->rrq_start, (__u64)0x456123); write_64(&p_ctx->p_host_map->rrq_end, (__u64)0x895e6fe); bad_address= true; } if (3 == action) { //cmd_room violation room = read_64(&p_ctx->p_host_map->cmd_room); debug("%d:placing %d cmds in 0X%"PRIX64" cmd_room...\n",pid,NUM_CMDS,room); for (i=0;i<NUM_CMDS ;i++) write_64(&p_ctx->p_host_map->ioarrin, (__u64)&p_ctx->cmd[i].rcb); bad_address= true; return 0; } while (cnt) { room = read_64(&p_ctx->p_host_map->cmd_room); if (0 == room) { usleep(MC_BLOCK_DELAY_ROOM); wait_try--; } if (0 == wait_try) { fprintf(stderr, "%d: send cmd wait over %d cmd remain\n", pid, cnt); return -1; } for (i = 0; i < room; i++) { // add a usleep here if room=0 ? // write IOARRIN if (1 == action) { //bad RCB address write_64(&p_ctx->p_host_map->ioarrin, baddr*i); bad_address= true; } else { write_64(&p_ctx->p_host_map->ioarrin, (__u64)&p_ctx->cmd[p_cmd++].rcb); } wait_try = MAX_TRY_WAIT; //each cmd give try max time if (cnt-- == 1) break; } } return 0; }
Buffer::ConstPointer Buffer::read(uint64_t &out_value) const throw(KafkaError) { out_value = *reinterpret_cast<const uint64_t *>(read_64()); return shared_from_this(); }