Commit b32403b2 authored by Jialin Li's avatar Jialin Li
Browse files

checkpoint

parent 3420d3cb
......@@ -3,7 +3,11 @@ CFLAGS += -Wall -Wextra -Wno-unused-parameter -O3
all: corundum_bm tester
corundum.o: corundum.cc
g++ $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
corundum_bm: corundum_bm.o ../nicsim_common/libnicsim_common.a
g++ $^ -o $@ -lm -lstdc++
tester: tester.o ../nicsim_common/libnicsim_common.a
......
......@@ -6,10 +6,20 @@
#include <signal.h>
#include <corundum_bm.h>
#include <nicsim.h>
extern "C" {
#include <nicsim.h>
}
Corundum::Corundum()
{
}
Corundum::~Corundum()
{
}
static volatile int exiting = 0;
static struct CorundumRegs regs;
static void sigint_handler(int dummy)
{
......@@ -73,58 +83,6 @@ static void h2d_read(volatile struct cosim_pcie_proto_h2d_read *read)
uint64_t val = csr_read(read->offset);
read_complete(read->req_id, &val, read->len);
} else {
switch (read->offset - 0x80000) {
case REG_A:
read_complete(read->req_id, &regs.reg_a, read->len);
break;
case REG_B:
read_complete(read->req_id, &regs.reg_b, read->len);
break;
case REG_C:
read_complete(read->req_id, &regs.reg_c, read->len);
break;
case REG_D:
read_complete(read->req_id, &regs.reg_d, read->len);
break;
case REG_E:
read_complete(read->req_id, &regs.reg_e, read->len);
break;
case REG_F:
read_complete(read->req_id, &regs.reg_f, read->len);
break;
case REG_G:
read_complete(read->req_id, &regs.reg_g, read->len);
break;
case REG_H:
read_complete(read->req_id, &regs.reg_h, read->len);
break;
case REG_I:
read_complete(read->req_id, &regs.reg_i, read->len);
break;
case REG_J:
read_complete(read->req_id, &regs.reg_j, read->len);
break;
case REG_K:
read_complete(read->req_id, &regs.reg_k, read->len);
break;
case REG_L:
read_complete(read->req_id, &regs.reg_l, read->len);
break;
case REG_M:
read_complete(read->req_id, &regs.reg_m, read->len);
break;
case REG_N:
read_complete(read->req_id, &regs.reg_n, read->len);
break;
case REG_O:
read_complete(read->req_id, &regs.reg_o, read->len);
break;
default:
fprintf(stderr, "unimplemented read at off=0x%lx len=%u\n", read->offset, read->len);
uint64_t val = 0;
read_complete(read->req_id, &val, read->len);
break;
}
}
}
......
......@@ -2,36 +2,17 @@
#include <stdint.h>
#define REG_A 0x0
#define REG_B 0x4
#define REG_C 0x10
#define REG_D 0x14
#define REG_E 0x20
#define REG_F 0x24
#define REG_G 0x28
#define REG_H 0x2c
#define REG_I 0x30
#define REG_J 0x34
#define REG_K 0x38
#define REG_L 0x3c
#define REG_M 0x40
#define REG_N 0x44
#define REG_O 0x48
typedef uint32_t reg_t;
typedef uint64_t addr_t;
class Corundum {
public:
Corundum();
~Corundum();
reg_t readReg(addr_t addr);
void writeReg(addr_t addr, reg_t val);
private:
struct CorundumRegs {
uint32_t reg_a;
uint32_t reg_b;
uint32_t reg_c;
uint32_t reg_d;
uint32_t reg_e;
uint32_t reg_f;
uint32_t reg_g;
uint32_t reg_h;
uint32_t reg_i;
uint32_t reg_j;
uint32_t reg_k;
uint32_t reg_l;
uint32_t reg_m;
uint32_t reg_n;
uint32_t reg_o;
};
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment