diff options
author | Alex Bennée <alex.bennee@linaro.org> | 2017-06-21 16:42:39 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2017-06-29 12:12:02 +0100 |
commit | dfa43a107c89d1f391dfb6096be8b8d8ba58011f (patch) | |
tree | 8206c329acf05fa53e715923fcefe9a4cde89178 /reginfo.c | |
parent | cb6c52b42559a0730cf6d7ae7ed841e31399496f (diff) |
risu: add header to trace stream
I've also added a header packet with pc/risu op in it so we can keep
better track of how things are going.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
[PMM: flipped header check to early-bailout so diff is easier
to read]
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20170621154244.28309-6-alex.bennee@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'reginfo.c')
-rw-r--r-- | reginfo.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -24,10 +24,19 @@ static int packet_mismatch; int send_register_info(write_fn write_fn, void *uc) { struct reginfo ri; + trace_header_t header; int op; + reginfo_init(&ri, uc); op = get_risuop(&ri); + /* Write a header with PC/op to keep in sync */ + header.pc = get_pc(&ri); + header.risu_op = op; + if (write_fn(&header, sizeof(header)) != 0) { + return -1; + } + switch (op) { case OP_TESTEND: return write_fn(&ri, sizeof(ri)); @@ -63,10 +72,25 @@ int recv_and_compare_register_info(read_fn read_fn, respond_fn resp_fn, void *uc) { int resp = 0, op; + trace_header_t header; reginfo_init(&master_ri, uc); op = get_risuop(&master_ri); + if (read_fn(&header, sizeof(header)) != 0) { + return -1; + } + + if (header.risu_op != op) { + /* We are out of sync */ + resp = 2; + resp_fn(resp); + return resp; + } + + /* send OK for the header */ + resp_fn(0); + switch (op) { case OP_COMPARE: case OP_TESTEND: |