aboutsummaryrefslogtreecommitdiff
path: root/reginfo.c
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2017-06-21 16:42:39 +0100
committerPeter Maydell <peter.maydell@linaro.org>2017-06-29 12:12:02 +0100
commitdfa43a107c89d1f391dfb6096be8b8d8ba58011f (patch)
tree8206c329acf05fa53e715923fcefe9a4cde89178 /reginfo.c
parentcb6c52b42559a0730cf6d7ae7ed841e31399496f (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.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/reginfo.c b/reginfo.c
index 6f489d2..13879d5 100644
--- a/reginfo.c
+++ b/reginfo.c
@@ -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: