Diff between fd987863e462c839bc1f86ee4879e42f3bcba914 and 3cca42e312faaab962a0694a5a1bf10004a23e02

Changed Files

File Additions Deletions Status
tools/parser/csr.c +28 -5 modified
tools/parser/lmp.c +8 -3 modified

Full Patch

diff --git a/tools/parser/csr.c b/tools/parser/csr.c
index 0b67a0c..c3a4b71 100644
--- a/tools/parser/csr.c
+++ b/tools/parser/csr.c
@@ -34,6 +34,10 @@
 
 #include "parser.h"
 
+#define CSR_U8(frm)  (get_u8(frm))
+#define CSR_U16(frm) (btohs(htons(get_u16(frm))))
+#define CSR_U32(frm) (btohl(htonl(get_u32(frm))))
+
 static char *cid2str(uint8_t cid)
 {
 	switch (cid & 0x3f) {
@@ -91,23 +95,42 @@ static char *frag2str(uint8_t frag)
 void csr_dump(int level, struct frame *frm)
 {
 	uint8_t desc, cid, type;
+	uint16_t handle, master, addr;
 
-	desc = get_u8(frm);
+	desc = CSR_U8(frm);
 
 	cid = desc & 0x3f;
 
 	if (cid == 20) {
-		type = get_u8(frm);
+		type = CSR_U8(frm);
 
 		if (!p_filter(FILT_LMP)) {
 			switch (type) {
+			case 0x0f:
+				frm->handle =  ((uint8_t *) frm->ptr)[17];
+				frm->master = 0;
+				frm->len--;
+				lmp_dump(level, frm);
+				return;
 			case 0x10:
+				frm->handle = ((uint8_t *) frm->ptr)[17];
 				frm->master = 1;
+				frm->len--;
 				lmp_dump(level, frm);
 				return;
-			case 0x0f:
-				frm->master = 0;
-				lmp_dump(level, frm);
+			case 0x12:
+				handle = CSR_U16(frm);
+				master = CSR_U16(frm);
+				addr = CSR_U16(frm);
+				p_indent(level, frm);
+				printf("FHS: handle %d addr %d (%s)\n", handle,
+					addr, master ? "master" : "slave");
+				if (!master)
+					raw_dump(level, frm);
+				return;
+			case 0x7b:
+				p_indent(level, frm);
+				printf("LMP(r): duplicate (same SEQN)\n");
 				return;
 			}
 		}
diff --git a/tools/parser/lmp.c b/tools/parser/lmp.c
index 745d835..dc01169 100644
--- a/tools/parser/lmp.c
+++ b/tools/parser/lmp.c
@@ -478,13 +478,18 @@ void lmp_dump(int level, struct frame *frm)
 		opcode += tmp << 7;
 	}
 
-	printf("LMP(%c): %s(%c): ", frm->master ? 'm' : 's',
+	printf("LMP(%c): %s(%c): ", frm->master ? 's' : 'r',
 				opcode2str(opcode), tid ? 's' : 'm');
 
 	if (opcode > 123)
-		printf("op code %d/%d\n", opcode & 0x7f, opcode >> 7);
+		printf("op code %d/%d", opcode & 0x7f, opcode >> 7);
 	else
-		printf("op code %d\n", opcode);
+		printf("op code %d", opcode);
+
+	if (frm->handle > 17)
+		printf(" handle %d\n", frm->handle);
+	else
+		printf("\n");
 
 	if (!(parser.flags & DUMP_VERBOSE)) {
 		raw_dump(level, frm);