summary refs log tree commit diff
path: root/tools/firewire
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2010-07-22 11:58:05 +0200
committerStefan Richter <stefanr@s5r6.in-berlin.de>2010-07-27 11:04:12 +0200
commit92c16f7e9c65f9a271c6bd5020279b3e37989672 (patch)
treef9e671c2ba4bcc51c1e27072e6b6256620af9538 /tools/firewire
parenta8461c0f3bfffe752fc62ce3960eb827463e90b5 (diff)
downloadlinux-92c16f7e9c65f9a271c6bd5020279b3e37989672.tar.gz
tools/firewire: nosy-dump: change to kernel coding style
This changes only
  - whitespace
  - C99 initializers
  - comment style
  - order of #includes
  - if { } else { } bracing

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'tools/firewire')
-rw-r--r--tools/firewire/decode-fcp.c364
-rw-r--r--tools/firewire/list.h24
-rw-r--r--tools/firewire/nosy-dump.c1663
-rw-r--r--tools/firewire/nosy-dump.h280
4 files changed, 1139 insertions, 1192 deletions
diff --git a/tools/firewire/decode-fcp.c b/tools/firewire/decode-fcp.c
index b6b372537618..9cd1550db24a 100644
--- a/tools/firewire/decode-fcp.c
+++ b/tools/firewire/decode-fcp.c
@@ -6,234 +6,206 @@
 #define CSR_FCP_COMMAND			0xfffff0000b00ull
 #define CSR_FCP_RESPONSE		0xfffff0000d00ull
 
-static const char * const ctype_names[16] = {
-    "control",
-    "status",
-    "specific inquiry",
-    "notify",
-    "general inquiry",
-    "(reserved 0x05)",
-    "(reserved 0x06)",
-    "(reserved 0x07)",
-    "not implemented",
-    "accepted",
-    "rejected",
-    "in transition",
-    "stable",
-    "changed",
-    "(reserved 0x0e)",
-    "interim"
+static const char * const ctype_names[] = {
+	[0x0] = "control",		[0x8] = "not implemented",
+	[0x1] = "status",		[0x9] = "accepted",
+	[0x2] = "specific inquiry",	[0xa] = "rejected",
+	[0x3] = "notify",		[0xb] = "in transition",
+	[0x4] = "general inquiry",	[0xc] = "stable",
+	[0x5] = "(reserved 0x05)",	[0xd] = "changed",
+	[0x6] = "(reserved 0x06)",	[0xe] = "(reserved 0x0e)",
+	[0x7] = "(reserved 0x07)",	[0xf] = "interim",
 };
 
-static const char * const subunit_type_names[32] = {
-    "monitor",
-    "audio",
-    "printer",
-    "disc",
-    "tape recorder/player",
-    "tuner",
-    "ca",
-    "camera",
-    "(reserved 0x08)",
-    "panel",
-    "bulletin board",
-    "camera storage",
-    "(reserved 0x0c)",
-    "(reserved 0x0d)",
-    "(reserved 0x0e)",
-    "(reserved 0x0f)",
-    "(reserved 0x10)",
-    "(reserved 0x11)",
-    "(reserved 0x12)",
-    "(reserved 0x13)",
-    "(reserved 0x14)",
-    "(reserved 0x15)",
-    "(reserved 0x16)",
-    "(reserved 0x17)",
-    "(reserved 0x18)",
-    "(reserved 0x19)",
-    "(reserved 0x1a)",
-    "(reserved 0x1b)",
-    "vendor unique",
-    "all subunit types",
-    "subunit_type extended to next byte",
-    "unit"
+static const char * const subunit_type_names[] = {
+	[0x00] = "monitor",		[0x10] = "(reserved 0x10)",
+	[0x01] = "audio",		[0x11] = "(reserved 0x11)",
+	[0x02] = "printer",		[0x12] = "(reserved 0x12)",
+	[0x03] = "disc",		[0x13] = "(reserved 0x13)",
+	[0x04] = "tape recorder/player",[0x14] = "(reserved 0x14)",
+	[0x05] = "tuner",		[0x15] = "(reserved 0x15)",
+	[0x06] = "ca",			[0x16] = "(reserved 0x16)",
+	[0x07] = "camera",		[0x17] = "(reserved 0x17)",
+	[0x08] = "(reserved 0x08)",	[0x18] = "(reserved 0x18)",
+	[0x09] = "panel",		[0x19] = "(reserved 0x19)",
+	[0x0a] = "bulletin board",	[0x1a] = "(reserved 0x1a)",
+	[0x0b] = "camera storage",	[0x1b] = "(reserved 0x1b)",
+	[0x0c] = "(reserved 0x0c)",	[0x1c] = "vendor unique",
+	[0x0d] = "(reserved 0x0d)",	[0x1d] = "all subunit types",
+	[0x0e] = "(reserved 0x0e)",	[0x1e] = "subunit_type extended to next byte",
+	[0x0f] = "(reserved 0x0f)",	[0x1f] = "unit",
 };
 
 struct avc_enum {
-    int value;
-    const char *name;
+	int value;
+	const char *name;
 };
 
 struct avc_field {
-  const char *name;	/* Short name for field. */
-  int offset;		/* Location of field, specified in bits.
-			 * Negative means from end of packet */
-  int width;		/* Width of field, 0 means use data_length. */
-  struct avc_enum *names;
+	const char *name;	/* Short name for field. */
+	int offset;		/* Location of field, specified in bits; */
+				/* negative means from end of packet.    */
+	int width;		/* Width of field, 0 means use data_length. */
+	struct avc_enum *names;
 };
 
 struct avc_opcode_info {
-    const char *name;
-    struct avc_field fields[8];
+	const char *name;
+	struct avc_field fields[8];
 };
 
 struct avc_enum power_field_names[] = {
-    { 0x70, "on" },
-    { 0x60, "off" },
-    { }
+	{ 0x70, "on" },
+	{ 0x60, "off" },
+	{ }
 };
 
 static const struct avc_opcode_info opcode_info[256] = {
 
-    /* TA Document 1999026
-     * AV/C Digital Interface Command Set General Specification
-     * Version 4.0 */
-    [0xb2] =
-    { "power", {
-	    { "state", 0, 8, power_field_names }
-	}
-    },
-    [0x30] =
-    { "unit info", {
-	    { "foo", 0, 8 },
-	    { "unit_type", 8, 5 },
-	    { "unit", 13, 3 },
-	    { "company id", 16, 24 },
-	}
-    },
-    [0x31] = { "subunit info" },
-    [0x01] = { "reserve" },
-    [0xb0] = { "version" },
-    [0x00] = { "vendor dependent" },
-
-    [0x02] = { "plug info" },
-    [0x12] = { "channel usage" },
-    [0x24] = { "connect" },
-    [0x20] = { "connect av" },
-    [0x22] = { "connections" },
-    [0x11] = { "digital input" },
-    [0x10] = { "digital output" },
-    [0x25] = { "disconnect" },
-    [0x21] = { "disconnect av" },
-    [0x19] = { "input plug signal format" },
-    [0x18] = { "output plug signal format" },
-    [0x1f] = { "general bus setup" },
-
-    /* TA Document 1999025
-     * AV/C Descriptor Mechanism Specification Version 1.0 */
-    [0x0c] = { "create descriptor" },
-    [0x08] = { "open descriptor" },
-    [0x09] = { "read descriptor" },
-    [0x0a] = { "write descriptor" },
-    [0x05] = { "open info block" },
-    [0x06] = { "read info block" },
-    [0x07] = { "write info block" },
-    [0x0b] = { "search descriptor" },
-    [0x0d] = { "object number select" },
-
-    /* TA Document 1999015
-     * AV/C Command Set for Rate Control of Isochronous Data Flow 1.0 */
-    [0xb3] = { "rate", {
-	    { "subfunction", 0, 8 },
-	    { "result", 8, 8 },
-	    { "plug_type", 16, 8 },
-	    { "plug_id", 16, 8 },
-	}
-    },
-
-    /* TA Document 1999008
-     * AV/C Audio Subunit Specification 1.0 */
-    [0xb8] = { "function block" },
-
-    /* TA Document 2001001
-     * AV/C Panel Subunit Specification 1.1 */
-    [0x7d] = { "gui update" },
-    [0x7e] = { "push gui data" },
-    [0x7f] = { "user action" },
-    [0x7c] = { "pass through" },
-
-    /* */
-    [0x26] = { "asynchronous connection" },
+	/* TA Document 1999026 */
+	/* AV/C Digital Interface Command Set General Specification 4.0 */
+	[0xb2] = { "power", {
+			{ "state", 0, 8, power_field_names }
+		}
+	},
+	[0x30] = { "unit info", {
+			{ "foo", 0, 8 },
+			{ "unit_type", 8, 5 },
+			{ "unit", 13, 3 },
+			{ "company id", 16, 24 },
+		}
+	},
+	[0x31] = { "subunit info" },
+	[0x01] = { "reserve" },
+	[0xb0] = { "version" },
+	[0x00] = { "vendor dependent" },
+	[0x02] = { "plug info" },
+	[0x12] = { "channel usage" },
+	[0x24] = { "connect" },
+	[0x20] = { "connect av" },
+	[0x22] = { "connections" },
+	[0x11] = { "digital input" },
+	[0x10] = { "digital output" },
+	[0x25] = { "disconnect" },
+	[0x21] = { "disconnect av" },
+	[0x19] = { "input plug signal format" },
+	[0x18] = { "output plug signal format" },
+	[0x1f] = { "general bus setup" },
+
+	/* TA Document 1999025 */
+	/* AV/C Descriptor Mechanism Specification Version 1.0 */
+	[0x0c] = { "create descriptor" },
+	[0x08] = { "open descriptor" },
+	[0x09] = { "read descriptor" },
+	[0x0a] = { "write descriptor" },
+	[0x05] = { "open info block" },
+	[0x06] = { "read info block" },
+	[0x07] = { "write info block" },
+	[0x0b] = { "search descriptor" },
+	[0x0d] = { "object number select" },
+
+	/* TA Document 1999015 */
+	/* AV/C Command Set for Rate Control of Isochronous Data Flow 1.0 */
+	[0xb3] = { "rate", {
+			{ "subfunction", 0, 8 },
+			{ "result", 8, 8 },
+			{ "plug_type", 16, 8 },
+			{ "plug_id", 16, 8 },
+		}
+	},
+
+	/* TA Document 1999008 */
+	/* AV/C Audio Subunit Specification 1.0 */
+	[0xb8] = { "function block" },
+
+	/* TA Document 2001001 */
+	/* AV/C Panel Subunit Specification 1.1 */
+	[0x7d] = { "gui update" },
+	[0x7e] = { "push gui data" },
+	[0x7f] = { "user action" },
+	[0x7c] = { "pass through" },
+
+	/* */
+	[0x26] = { "asynchronous connection" },
 };
 
 struct avc_frame {
-    uint32_t operand0:8;
-    uint32_t opcode:8;
-    uint32_t subunit_id:3;
-    uint32_t subunit_type:5;
-    uint32_t ctype:4;
-    uint32_t cts:4;
+	uint32_t operand0:8;
+	uint32_t opcode:8;
+	uint32_t subunit_id:3;
+	uint32_t subunit_type:5;
+	uint32_t ctype:4;
+	uint32_t cts:4;
 };
 
 static void
 decode_avc(struct link_transaction *t)
 {
-    struct avc_frame *frame = (struct avc_frame *) t->request->packet.write_block.data;
-    const struct avc_opcode_info *info;
-    const char *name;
-    char buffer[32];
-    int i;
-
-    info = &opcode_info[frame->opcode];
-    if (info->name == NULL) {
-	snprintf(buffer, sizeof buffer, "(unknown opcode 0x%02x)", frame->opcode);
-	name = buffer;
-    } else {
-	name = info->name;
-    }
-
-    printf("av/c %s, subunit_type=%s, subunit_id=%d, opcode=%s",
-	   ctype_names[frame->ctype], subunit_type_names[frame->subunit_type],
-	   frame->subunit_id, name);
-
-    for (i = 0; info->fields[i].name != NULL; i++) {
-	printf(", %s", info->fields[i].name);
-    }
-
-    printf("\n");
-}
+	struct avc_frame *frame =
+	    (struct avc_frame *) t->request->packet.write_block.data;
+	const struct avc_opcode_info *info;
+	const char *name;
+	char buffer[32];
+	int i;
+
+	info = &opcode_info[frame->opcode];
+	if (info->name == NULL) {
+		snprintf(buffer, sizeof(buffer),
+			 "(unknown opcode 0x%02x)", frame->opcode);
+		name = buffer;
+	} else {
+		name = info->name;
+	}
 
+	printf("av/c %s, subunit_type=%s, subunit_id=%d, opcode=%s",
+	    ctype_names[frame->ctype], subunit_type_names[frame->subunit_type],
+	    frame->subunit_id, name);
+
+	for (i = 0; info->fields[i].name != NULL; i++)
+		printf(", %s", info->fields[i].name);
+
+	printf("\n");
+}
 
 int
 decode_fcp(struct link_transaction *t)
 {
-    struct avc_frame *frame = (struct avc_frame *) t->request->packet.write_block.data;
-    unsigned long long offset;
-
-    offset = ((unsigned long long) t->request->packet.common.offset_high << 32) |
-	t->request->packet.common.offset_low;
-
-    if (t->request->packet.common.tcode != TCODE_WRITE_BLOCK)
-	return 0;
-
-    if (offset == CSR_FCP_COMMAND || offset == CSR_FCP_RESPONSE) {
-	switch (frame->cts) {
-	case 0x00:
-	    decode_avc(t);
-	    break;
-	case 0x01:
-	    printf("cal fcp frame (cts=0x01)\n");
-	    break;
-	case 0x02:
-	    printf("ehs fcp frame (cts=0x02)\n");
-	    break;
-	case 0x03:
-	    printf("havi fcp frame (cts=0x03)\n");
-	    break;
-	case 0x0e:
-	    printf("vendor specific fcp frame (cts=0x0e)\n");
-	    break;
-	case 0x0f:
-	    printf("extended cts\n");
-	    break;
-	default:
-	    printf("reserved fcp frame (ctx=0x%02x)\n", frame->cts);
-	    break;
+	struct avc_frame *frame =
+	    (struct avc_frame *) t->request->packet.write_block.data;
+	unsigned long long offset =
+	    ((unsigned long long) t->request->packet.common.offset_high << 32) |
+	    t->request->packet.common.offset_low;
+
+	if (t->request->packet.common.tcode != TCODE_WRITE_BLOCK)
+		return 0;
+
+	if (offset == CSR_FCP_COMMAND || offset == CSR_FCP_RESPONSE) {
+		switch (frame->cts) {
+		case 0x00:
+			decode_avc(t);
+			break;
+		case 0x01:
+			printf("cal fcp frame (cts=0x01)\n");
+			break;
+		case 0x02:
+			printf("ehs fcp frame (cts=0x02)\n");
+			break;
+		case 0x03:
+			printf("havi fcp frame (cts=0x03)\n");
+			break;
+		case 0x0e:
+			printf("vendor specific fcp frame (cts=0x0e)\n");
+			break;
+		case 0x0f:
+			printf("extended cts\n");
+			break;
+		default:
+			printf("reserved fcp frame (ctx=0x%02x)\n", frame->cts);
+			break;
+		}
+		return 1;
 	}
-	return 1;
-    }
 
-    return 0;
+	return 0;
 }
 
diff --git a/tools/firewire/list.h b/tools/firewire/list.h
index fa119dd371fe..41f4bdadf634 100644
--- a/tools/firewire/list.h
+++ b/tools/firewire/list.h
@@ -1,46 +1,46 @@
 struct list {
-  struct list *next, *prev;
+	struct list *next, *prev;
 };
 
 static inline void
 list_init(struct list *list)
 {
-  list->next = list;
-  list->prev = list;
+	list->next = list;
+	list->prev = list;
 }
 
 static inline int
 list_empty(struct list *list)
 {
-  return list->next == list;
+	return list->next == list;
 }
 
 static inline void
 list_insert(struct list *link, struct list *new_link)
 {
-  new_link->prev       = link->prev;
-  new_link->next       = link;
-  new_link->prev->next = new_link;
-  new_link->next->prev = new_link;
+	new_link->prev		= link->prev;
+	new_link->next		= link;
+	new_link->prev->next	= new_link;
+	new_link->next->prev	= new_link;
 }
 
 static inline void
 list_append(struct list *list, struct list *new_link)
 {
-  list_insert((struct list *)list, new_link);
+	list_insert((struct list *)list, new_link);
 }
 
 static inline void
 list_prepend(struct list *list, struct list *new_link)
 {
-  list_insert(list->next, new_link);
+	list_insert(list->next, new_link);
 }
 
 static inline void
 list_remove(struct list *link)
 {
-  link->prev->next = link->next;
-  link->next->prev = link->prev;
+	link->prev->next = link->next;
+	link->next->prev = link->prev;
 }
 
 #define list_entry(link, type, member) \
diff --git a/tools/firewire/nosy-dump.c b/tools/firewire/nosy-dump.c
index 1d4dd5439d43..3d7e1a6dfe93 100644
--- a/tools/firewire/nosy-dump.c
+++ b/tools/firewire/nosy-dump.c
@@ -1,5 +1,3 @@
-/* -*- mode: c; c-basic-offset: 2 -*- */
-
 /*
  * nosy-dump - Interface to snoop mode driver for TI PCILynx 1394 controllers
  * Copyright (C) 2002-2006 Kristian Høgsberg
@@ -19,642 +17,628 @@
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#include <stdlib.h>
+#include <byteswap.h>
+#include <endian.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <popt.h>
+#include <signal.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
-#include <endian.h>
-#include <popt.h>
-#include <poll.h>
-#include <byteswap.h>
 #include <termios.h>
-
-#include <signal.h>
+#include <unistd.h>
 
 #include "list.h"
-#include "nosy-user.h"
 #include "nosy-dump.h"
+#include "nosy-user.h"
 
 enum {
-  PACKET_FIELD_DETAIL		= 0x01,
-  PACKET_FIELD_DATA_LENGTH	= 0x02,
-  /* Marks the fields we print in transaction view. */
-  PACKET_FIELD_TRANSACTION	= 0x04
+	PACKET_FIELD_DETAIL		= 0x01,
+	PACKET_FIELD_DATA_LENGTH	= 0x02,
+	/* Marks the fields we print in transaction view. */
+	PACKET_FIELD_TRANSACTION	= 0x04,
 };
 
-static void
-print_packet(uint32_t *data, size_t length);
-static void
-decode_link_packet(struct link_packet *packet, size_t length,
-		   int include_flags, int exclude_flags);
-
-static int   run = 1;
+static void print_packet(uint32_t *data, size_t length);
+static void decode_link_packet(struct link_packet *packet, size_t length,
+			       int include_flags, int exclude_flags);
+static int run = 1;
 sig_t sys_sigint_handler;
 
 static char *option_nosy_device = "/dev/nosy";
 static char *option_view = "packet";
-static char *option_output = NULL;
-static char *option_input = NULL;
-static int   option_hex;
-static int   option_iso;
-static int   option_cycle_start;
-static int   option_version;
-static int   option_verbose;
+static char *option_output;
+static char *option_input;
+static int option_hex;
+static int option_iso;
+static int option_cycle_start;
+static int option_version;
+static int option_verbose;
 
 enum {
-  VIEW_TRANSACTION,
-  VIEW_PACKET,
-  VIEW_STATS
+	VIEW_TRANSACTION,
+	VIEW_PACKET,
+	VIEW_STATS,
 };
 
 static const struct poptOption options[] = {
-  {
-    longName:	"device",
-    shortName:	'd',
-    argInfo:	POPT_ARG_STRING,
-    arg:	&option_nosy_device,
-    descrip:	"Path to nosy device.",
-    argDescrip:	"DEVICE"
-  },
-  {
-    longName:	"view",
-    argInfo:	POPT_ARG_STRING,
-    arg:	&option_view,
-    descrip:	"Specify view of bus traffic: packet, transaction or stats.",
-    argDescrip:	"VIEW"
-  },
-  {
-    longName:	"hex",
-    shortName:	'x',
-    argInfo:	POPT_ARG_NONE,
-    arg:	&option_hex,
-    descrip:	"Print each packet in hex.",
-  },
-  {
-    longName:	"iso",
-    argInfo:	POPT_ARG_NONE,
-    arg:	&option_iso,
-    descrip:	"Print iso packets.",
-  },
-  {
-    longName:	"cycle-start",
-    argInfo:	POPT_ARG_NONE,
-    arg:	&option_cycle_start,
-    descrip:	"Print cycle start packets.",
-  },
-  {
-    longName:	"verbose",
-    shortName:	'v',
-    argInfo:	POPT_ARG_NONE,
-    arg:	&option_verbose,
-    descrip:	"Verbose packet view.",
-  },
-  {
-    longName:	"output",
-    shortName:	'o',
-    argInfo:	POPT_ARG_STRING,
-    arg:	&option_output,
-    descrip:	"Log to output file.",
-    argDescrip:	"FILENAME"
-  },
-  {
-    longName:	"input",
-    shortName:	'i',
-    argInfo:	POPT_ARG_STRING,
-    arg:	&option_input,
-    descrip:	"Decode log from file.",
-    argDescrip:	"FILENAME"
-  },
-  {
-    longName:	"version",
-    argInfo:	POPT_ARG_NONE,
-    arg:	&option_version,
-    descrip:	"Specify print version info.",
-  },
-  POPT_AUTOHELP
-  POPT_TABLEEND
+	{
+		.longName	= "device",
+		.shortName	= 'd',
+		.argInfo	= POPT_ARG_STRING,
+		.arg		= &option_nosy_device,
+		.descrip	= "Path to nosy device.",
+		.argDescrip	= "DEVICE"
+	},
+	{
+		.longName	= "view",
+		.argInfo	= POPT_ARG_STRING,
+		.arg		= &option_view,
+		.descrip	= "Specify view of bus traffic: packet, transaction or stats.",
+		.argDescrip	= "VIEW"
+	},
+	{
+		.longName	= "hex",
+		.shortName	= 'x',
+		.argInfo	= POPT_ARG_NONE,
+		.arg		= &option_hex,
+		.descrip	= "Print each packet in hex.",
+	},
+	{
+		.longName	= "iso",
+		.argInfo	= POPT_ARG_NONE,
+		.arg		= &option_iso,
+		.descrip	= "Print iso packets.",
+	},
+	{
+		.longName	= "cycle-start",
+		.argInfo	= POPT_ARG_NONE,
+		.arg		= &option_cycle_start,
+		.descrip	= "Print cycle start packets.",
+	},
+	{
+		.longName	= "verbose",
+		.shortName	= 'v',
+		.argInfo	= POPT_ARG_NONE,
+		.arg		= &option_verbose,
+		.descrip	= "Verbose packet view.",
+	},
+	{
+		.longName	= "output",
+		.shortName	= 'o',
+		.argInfo	= POPT_ARG_STRING,
+		.arg		= &option_output,
+		.descrip	= "Log to output file.",
+		.argDescrip	= "FILENAME"
+	},
+	{
+		.longName	= "input",
+		.shortName	= 'i',
+		.argInfo	= POPT_ARG_STRING,
+		.arg		= &option_input,
+		.descrip	= "Decode log from file.",
+		.argDescrip	= "FILENAME"
+	},
+	{
+		.longName	= "version",
+		.argInfo	= POPT_ARG_NONE,
+		.arg		= &option_version,
+		.descrip	= "Specify print version info.",
+	},
+	POPT_AUTOHELP
+	POPT_TABLEEND
 };
 
-void 
+/* Allow all ^C except the first to interrupt the program in the usual way. */
+void
 sigint_handler(int signal_num)
 {
-  if (run == 1) {
-    run = 0;
-    /* Allow all Ctrl-C's except the first to interrupt the program in
-     * the usual way.
-     */
-    signal(SIGINT, SIG_DFL);
-  }
+	if (run == 1) {
+		run = 0;
+		signal(SIGINT, SIG_DFL);
+	}
 }
 
 struct subaction *
 subaction_create(uint32_t *data, size_t length)
 {
-  struct subaction *sa;
+	struct subaction *sa;
 
-  /* we put the ack in the subaction struct for easy access. */
-  sa = malloc(sizeof *sa - sizeof sa->packet + length);
-  sa->ack = data[length / 4 - 1];
-  sa->length = length;
-  memcpy (&sa->packet, data, length);
+	/* we put the ack in the subaction struct for easy access. */
+	sa = malloc(sizeof *sa - sizeof sa->packet + length);
+	sa->ack = data[length / 4 - 1];
+	sa->length = length;
+	memcpy(&sa->packet, data, length);
 
-  return sa;
+	return sa;
 }
 
 void
 subaction_destroy(struct subaction *sa)
 {
-  free(sa);
+	free(sa);
 }
 
-struct list pending_transaction_list =
-  { &pending_transaction_list, &pending_transaction_list };
+struct list pending_transaction_list = {
+	&pending_transaction_list, &pending_transaction_list
+};
 
 struct link_transaction *
 link_transaction_lookup(int request_node, int response_node, int tlabel)
 {
-  struct link_transaction *t;
-
-  list_for_each_entry(t, &pending_transaction_list, link) {
-    if (t->request_node == request_node &&
-	t->response_node == response_node &&
-	t->tlabel == tlabel)
-      return t;
-  }
-
-  t = malloc(sizeof *t);
-  t->request_node = request_node;
-  t->response_node = response_node;
-  t->tlabel = tlabel;
-  list_init(&t->request_list);
-  list_init(&t->response_list);
-  
-  list_append(&pending_transaction_list, &t->link);
-  
-  return t;
+	struct link_transaction *t;
+
+	list_for_each_entry(t, &pending_transaction_list, link) {
+		if (t->request_node == request_node &&
+		    t->response_node == response_node &&
+		    t->tlabel == tlabel)
+			return t;
+	}
+
+	t = malloc(sizeof *t);
+	t->request_node = request_node;
+	t->response_node = response_node;
+	t->tlabel = tlabel;
+	list_init(&t->request_list);
+	list_init(&t->response_list);
+
+	list_append(&pending_transaction_list, &t->link);
+
+	return t;
 }
 
 void
 link_transaction_destroy(struct link_transaction *t)
 {
-  while (!list_empty(&t->request_list)) {
-    struct subaction *sa = list_head(&t->request_list, struct subaction, link);
-    list_remove(&sa->link);
-    subaction_destroy(sa);
-  }    
-
-  while (!list_empty(&t->response_list)) {
-    struct subaction *sa = list_head(&t->response_list, struct subaction, link);
-    list_remove(&sa->link);
-    subaction_destroy(sa);
-  }    
-  
-  free(t);
+	struct subaction *sa;
+
+	while (!list_empty(&t->request_list)) {
+		sa = list_head(&t->request_list, struct subaction, link);
+		list_remove(&sa->link);
+		subaction_destroy(sa);
+	}
+	while (!list_empty(&t->response_list)) {
+		sa = list_head(&t->response_list, struct subaction, link);
+		list_remove(&sa->link);
+		subaction_destroy(sa);
+	}
+	free(t);
 }
 
 struct protocol_decoder {
-  const char *name;
-  int (*decode)(struct link_transaction *t);
+	const char *name;
+	int (*decode)(struct link_transaction *t);
 };
 
 static struct protocol_decoder protocol_decoders[] = {
-  { "FCP", decode_fcp }
+	{ "FCP", decode_fcp }
 };
 
 void
 handle_transaction(struct link_transaction *t)
 {
-  struct subaction *sa;
-  int i;
-
-  if (!t->request) {
-    printf("BUG in handle_transaction\n");
-    return;
-  }
-
-  for (i = 0; i < array_length(protocol_decoders); i++)
-    if (protocol_decoders[i].decode(t))
-      break;
-
-  /* HACK: decode only fcp right now. */
-  return;
-
-  decode_link_packet(&t->request->packet, t->request->length,
-		     PACKET_FIELD_TRANSACTION, 0);
-  if (t->response)
-    decode_link_packet(&t->response->packet, t->request->length,
-		       PACKET_FIELD_TRANSACTION, 0);
-  else
-    printf("[no response]");
-
-  if (option_verbose) {
-    list_for_each_entry(sa, &t->request_list, link)
-      print_packet((uint32_t *) &sa->packet, sa->length);
-    list_for_each_entry(sa, &t->response_list, link)
-      print_packet((uint32_t *) &sa->packet, sa->length);
-  }
-  printf("\r\n");
-
-  link_transaction_destroy(t);
+	struct subaction *sa;
+	int i;
+
+	if (!t->request) {
+		printf("BUG in handle_transaction\n");
+		return;
+	}
+
+	for (i = 0; i < array_length(protocol_decoders); i++)
+		if (protocol_decoders[i].decode(t))
+			break;
+
+	/* HACK: decode only fcp right now. */
+	return;
+
+	decode_link_packet(&t->request->packet, t->request->length,
+			   PACKET_FIELD_TRANSACTION, 0);
+	if (t->response)
+		decode_link_packet(&t->response->packet, t->request->length,
+				   PACKET_FIELD_TRANSACTION, 0);
+	else
+		printf("[no response]");
+
+	if (option_verbose) {
+		list_for_each_entry(sa, &t->request_list, link)
+			print_packet((uint32_t *) &sa->packet, sa->length);
+		list_for_each_entry(sa, &t->response_list, link)
+			print_packet((uint32_t *) &sa->packet, sa->length);
+	}
+	printf("\r\n");
+
+	link_transaction_destroy(t);
 }
 
 void
 clear_pending_transaction_list(void)
 {
-  struct link_transaction *t;
-
-  while (!list_empty(&pending_transaction_list)) {
-    t = list_head(&pending_transaction_list, struct link_transaction, link);
-    list_remove(&t->link);
-    link_transaction_destroy(t);
-    /* print unfinished transactions */
-  }    
+	struct link_transaction *t;
+
+	while (!list_empty(&pending_transaction_list)) {
+		t = list_head(&pending_transaction_list,
+			      struct link_transaction, link);
+		list_remove(&t->link);
+		link_transaction_destroy(t);
+		/* print unfinished transactions */
+	}
 }
 
 static const char * const tcode_names[] = {
-  "write_quadlet_request",
-  "write_block_request",
-  "write_response",
-  "reserved",
-  "read_quadlet_request",
-  "read_block_request",
-  "read_quadlet_response",
-  "read_block_response",
-  "cycle_start",
-  "lock_request",
-  "iso_data",
-  "lock_response"
+	[0x0] = "write_quadlet_request",	[0x6] = "read_quadlet_response",
+	[0x1] = "write_block_request",		[0x7] = "read_block_response",
+	[0x2] = "write_response",		[0x8] = "cycle_start",
+	[0x3] = "reserved",			[0x9] = "lock_request",
+	[0x4] = "read_quadlet_request",		[0xa] = "iso_data",
+	[0x5] = "read_block_request",		[0xb] = "lock_response",
 };
 
 static const char * const ack_names[] = {
-  "no ack",
-  "ack_complete",
-  "ack_pending",
-  "reserved (0x03)",
-  "ack_busy_x",
-  "ack_busy_a",
-  "ack_busy_b",
-  "reserved (0x07)",
-  "reserved (0x08)",
-  "reserved (0x09)",
-  "reserved (0x0a)",
-  "reserved (0x0b)",
-  "reserved (0x0c)",
-  "ack_data_error",
-  "ack_type_error",
-  "reserved (0x0f)",
+	[0x0] = "no ack",			[0x8] = "reserved (0x08)",
+	[0x1] = "ack_complete",			[0x9] = "reserved (0x09)",
+	[0x2] = "ack_pending",			[0xa] = "reserved (0x0a)",
+	[0x3] = "reserved (0x03)",		[0xb] = "reserved (0x0b)",
+	[0x4] = "ack_busy_x",			[0xc] = "reserved (0x0c)",
+	[0x5] = "ack_busy_a",			[0xd] = "ack_data_error",
+	[0x6] = "ack_busy_b",			[0xe] = "ack_type_error",
+	[0x7] = "reserved (0x07)",		[0xf] = "reserved (0x0f)",
 };
 
 static const char * const rcode_names[] = {
-  "complete",
-  "reserved (0x01)",
-  "reserved (0x02)",
-  "reserved (0x03)",
-  "conflict_error",
-  "data_error",
-  "type_error",
-  "address_error",
+	[0x0] = "complete",			[0x4] = "conflict_error",
+	[0x1] = "reserved (0x01)",		[0x5] = "data_error",
+	[0x2] = "reserved (0x02)",		[0x6] = "type_error",
+	[0x3] = "reserved (0x03)",		[0x7] = "address_error",
 };
 
 static const char * const retry_names[] = {
-  "retry_1",
-  "retry_x",
-  "retry_a",
-  "retry_b",
+	[0x0] = "retry_1",
+	[0x1] = "retry_x",
+	[0x2] = "retry_a",
+	[0x3] = "retry_b",
 };
 
 enum {
-  PACKET_RESERVED,
-  PACKET_REQUEST,
-  PACKET_RESPONSE,
-  PACKET_OTHER,
+	PACKET_RESERVED,
+	PACKET_REQUEST,
+	PACKET_RESPONSE,
+	PACKET_OTHER,
 };
 
 struct packet_info {
-  const char *name;
-  int type;
-  int response_tcode;
-  struct packet_field *fields;
-  int field_count;
+	const char *name;
+	int type;
+	int response_tcode;
+	struct packet_field *fields;
+	int field_count;
 };
 
 struct packet_field {
-  const char *name;	/* Short name for field. */
-  int offset;		/* Location of field, specified in bits.
-			 * Negative means from end of packet */
-  int width;		/* Width of field, 0 means use data_length. */
-  int flags;		/* Show options. */
-  const char * const *value_names;
+	const char *name; /* Short name for field. */
+	int offset;	/* Location of field, specified in bits; */
+			/* negative means from end of packet.    */
+	int width;	/* Width of field, 0 means use data_length. */
+	int flags;	/* Show options. */
+	const char * const *value_names;
 };
 
-#define COMMON_REQUEST_FIELDS					\
-  { "dest", 0, 16, PACKET_FIELD_TRANSACTION },			\
-  { "tl", 16, 6 },						\
-  { "rt", 22, 2, PACKET_FIELD_DETAIL, retry_names },		\
-  { "tcode", 24, 4, PACKET_FIELD_TRANSACTION, tcode_names },	\
-  { "pri", 28, 4, PACKET_FIELD_DETAIL },			\
-  { "src", 32, 16, PACKET_FIELD_TRANSACTION },			\
-  { "offs", 48, 48, PACKET_FIELD_TRANSACTION }
-
-#define COMMON_RESPONSE_FIELDS					\
-  { "dest", 0, 16 },						\
-  { "tl", 16, 6 },						\
-  { "rt", 22, 2, PACKET_FIELD_DETAIL, retry_names },		\
-  { "tcode", 24, 4, 0, tcode_names },				\
-  { "pri", 28, 4, PACKET_FIELD_DETAIL },			\
-  { "src", 32, 16 },						\
-  { "rcode", 48, 4, PACKET_FIELD_TRANSACTION, rcode_names }
+#define COMMON_REQUEST_FIELDS						\
+	{ "dest", 0, 16, PACKET_FIELD_TRANSACTION },			\
+	{ "tl", 16, 6 },						\
+	{ "rt", 22, 2, PACKET_FIELD_DETAIL, retry_names },		\
+	{ "tcode", 24, 4, PACKET_FIELD_TRANSACTION, tcode_names },	\
+	{ "pri", 28, 4, PACKET_FIELD_DETAIL },				\
+	{ "src", 32, 16, PACKET_FIELD_TRANSACTION },			\
+	{ "offs", 48, 48, PACKET_FIELD_TRANSACTION }
+
+#define COMMON_RESPONSE_FIELDS						\
+	{ "dest", 0, 16 },						\
+	{ "tl", 16, 6 },						\
+	{ "rt", 22, 2, PACKET_FIELD_DETAIL, retry_names },		\
+	{ "tcode", 24, 4, 0, tcode_names },				\
+	{ "pri", 28, 4, PACKET_FIELD_DETAIL },				\
+	{ "src", 32, 16 },						\
+	{ "rcode", 48, 4, PACKET_FIELD_TRANSACTION, rcode_names }
 
 struct packet_field read_quadlet_request_fields[] = {
-  COMMON_REQUEST_FIELDS,
-  { "crc", 96, 32, PACKET_FIELD_DETAIL },
-  { "ack", 156, 4, 0, ack_names }
+	COMMON_REQUEST_FIELDS,
+	{ "crc", 96, 32, PACKET_FIELD_DETAIL },
+	{ "ack", 156, 4, 0, ack_names },
 };
 
 struct packet_field read_quadlet_response_fields[] = {
-  COMMON_RESPONSE_FIELDS,
-  { "data", 96, 32, PACKET_FIELD_TRANSACTION },
-  { "crc", 128, 32, PACKET_FIELD_DETAIL },
-  { "ack", 188, 4, 0, ack_names }
+	COMMON_RESPONSE_FIELDS,
+	{ "data", 96, 32, PACKET_FIELD_TRANSACTION },
+	{ "crc", 128, 32, PACKET_FIELD_DETAIL },
+	{ "ack", 188, 4, 0, ack_names },
 };
 
 struct packet_field read_block_request_fields[] = {
-  COMMON_REQUEST_FIELDS,
-  { "data_length", 96, 16, PACKET_FIELD_TRANSACTION },
-  { "extended_tcode", 112, 16 },
-  { "crc", 128, 32, PACKET_FIELD_DETAIL },
-  { "ack", 188, 4, 0, ack_names },
+	COMMON_REQUEST_FIELDS,
+	{ "data_length", 96, 16, PACKET_FIELD_TRANSACTION },
+	{ "extended_tcode", 112, 16 },
+	{ "crc", 128, 32, PACKET_FIELD_DETAIL },
+	{ "ack", 188, 4, 0, ack_names },
 };
 
 struct packet_field block_response_fields[] = {
-  COMMON_RESPONSE_FIELDS,
-  { "data_length", 96, 16, PACKET_FIELD_DATA_LENGTH },
-  { "extended_tcode", 112, 16 },
-  { "crc", 128, 32, PACKET_FIELD_DETAIL },
-  { "data", 160, 0, PACKET_FIELD_TRANSACTION },
-  { "crc", -64, 32, PACKET_FIELD_DETAIL },
-  { "ack", -4, 4, 0, ack_names }
+	COMMON_RESPONSE_FIELDS,
+	{ "data_length", 96, 16, PACKET_FIELD_DATA_LENGTH },
+	{ "extended_tcode", 112, 16 },
+	{ "crc", 128, 32, PACKET_FIELD_DETAIL },
+	{ "data", 160, 0, PACKET_FIELD_TRANSACTION },
+	{ "crc", -64, 32, PACKET_FIELD_DETAIL },
+	{ "ack", -4, 4, 0, ack_names },
 };
 
 struct packet_field write_quadlet_request_fields[] = {
-  COMMON_REQUEST_FIELDS,
-  { "data", 96, 32, PACKET_FIELD_TRANSACTION },
-  { "ack", -4, 4, 0, ack_names }
+	COMMON_REQUEST_FIELDS,
+	{ "data", 96, 32, PACKET_FIELD_TRANSACTION },
+	{ "ack", -4, 4, 0, ack_names },
 };
 
 struct packet_field block_request_fields[] = {
-  COMMON_REQUEST_FIELDS,
-  { "data_length", 96, 16, PACKET_FIELD_DATA_LENGTH | PACKET_FIELD_TRANSACTION },
-  { "extended_tcode", 112, 16, PACKET_FIELD_TRANSACTION },
-  { "crc", 128, 32, PACKET_FIELD_DETAIL },
-  { "data", 160, 0, PACKET_FIELD_TRANSACTION },
-  { "crc", -64, 32, PACKET_FIELD_DETAIL },
-  { "ack", -4, 4, 0, ack_names }
+	COMMON_REQUEST_FIELDS,
+	{ "data_length", 96, 16, PACKET_FIELD_DATA_LENGTH | PACKET_FIELD_TRANSACTION },
+	{ "extended_tcode", 112, 16, PACKET_FIELD_TRANSACTION },
+	{ "crc", 128, 32, PACKET_FIELD_DETAIL },
+	{ "data", 160, 0, PACKET_FIELD_TRANSACTION },
+	{ "crc", -64, 32, PACKET_FIELD_DETAIL },
+	{ "ack", -4, 4, 0, ack_names },
 };
 
 struct packet_field write_response_fields[] = {
-  COMMON_RESPONSE_FIELDS,
-  { "reserved", 64, 32, PACKET_FIELD_DETAIL },
-  { "ack", -4, 4, 0, ack_names }
+	COMMON_RESPONSE_FIELDS,
+	{ "reserved", 64, 32, PACKET_FIELD_DETAIL },
+	{ "ack", -4, 4, 0, ack_names },
 };
 
 struct packet_field iso_data_fields[] = {
-  { "data_length", 0, 16, PACKET_FIELD_DATA_LENGTH },
-  { "tag", 16, 2 },
-  { "channel", 18, 6 },
-  { "tcode", 24, 4, 0, tcode_names },
-  { "sy", 28, 4 },
-  { "crc", 32, 32, PACKET_FIELD_DETAIL },
-  { "data", 64, 0 },
-  { "crc", -64, 32, PACKET_FIELD_DETAIL },
-  { "ack", -4, 4, 0, ack_names }
+	{ "data_length", 0, 16, PACKET_FIELD_DATA_LENGTH },
+	{ "tag", 16, 2 },
+	{ "channel", 18, 6 },
+	{ "tcode", 24, 4, 0, tcode_names },
+	{ "sy", 28, 4 },
+	{ "crc", 32, 32, PACKET_FIELD_DETAIL },
+	{ "data", 64, 0 },
+	{ "crc", -64, 32, PACKET_FIELD_DETAIL },
+	{ "ack", -4, 4, 0, ack_names },
 };
 
 static struct packet_info packet_info[] = {
-  {
-    .name =		"write_quadlet_request",
-    .type =		PACKET_REQUEST,
-    .response_tcode =	TCODE_WRITE_RESPONSE,
-    .fields =		write_quadlet_request_fields,
-    .field_count =	array_length(write_quadlet_request_fields)
-  },
-  {
-    .name =		"write_block_request",
-    .type =		PACKET_REQUEST,
-    .response_tcode = 	TCODE_WRITE_RESPONSE,
-    .fields =		block_request_fields,
-    .field_count =	array_length(block_request_fields)
-  },
-  {
-    .name =		"write_response",
-    .type =		PACKET_RESPONSE,
-    .fields =		write_response_fields,
-    .field_count =	array_length(write_response_fields)
-  },
-  {
-    .name =		"reserved",
-    .type =		PACKET_RESERVED,
-  },
-  {
-    .name =		"read_quadlet_request",
-    .type =		PACKET_REQUEST,
-    .response_tcode = 	TCODE_READ_QUADLET_RESPONSE,
-    .fields =		read_quadlet_request_fields,
-    .field_count =	array_length(read_quadlet_request_fields)
-  },
-  {
-    .name =		"read_block_request",
-    .type =		PACKET_REQUEST,
-    .response_tcode = 	TCODE_READ_BLOCK_RESPONSE,
-    .fields =		read_block_request_fields,
-    .field_count =	array_length(read_block_request_fields)
-  },
-  {
-    .name =		"read_quadlet_response",
-    .type =		PACKET_RESPONSE,
-    .fields =		read_quadlet_response_fields,
-    .field_count =	array_length(read_quadlet_response_fields)
-  },
-  {
-    .name =		"read_block_response",
-    .type =		PACKET_RESPONSE,
-    .fields =		block_response_fields,
-    .field_count =	array_length(block_response_fields)
-  },
-  {
-    .name =		"cycle_start",
-    .type =		PACKET_OTHER,
-    .fields =		write_quadlet_request_fields,
-    .field_count =	array_length(write_quadlet_request_fields)
-  },
-  {
-    .name =		"lock_request",
-    .type =		PACKET_REQUEST,
-    .fields =		block_request_fields,
-    .field_count =	array_length(block_request_fields)
-  },
-  {
-    .name =		"iso_data",
-    .type =		PACKET_OTHER,
-    .fields =		iso_data_fields,
-    .field_count =	array_length(iso_data_fields)
-  },
-  {
-    .name =		"lock_response",
-    .type =		PACKET_RESPONSE,
-    .fields =		block_response_fields,
-    .field_count =	array_length(block_response_fields)
-  }
+	{
+		.name		= "write_quadlet_request",
+		.type		= PACKET_REQUEST,
+		.response_tcode	= TCODE_WRITE_RESPONSE,
+		.fields		= write_quadlet_request_fields,
+		.field_count	= array_length(write_quadlet_request_fields)
+	},
+	{
+		.name		= "write_block_request",
+		.type		= PACKET_REQUEST,
+		.response_tcode	= TCODE_WRITE_RESPONSE,
+		.fields		= block_request_fields,
+		.field_count	= array_length(block_request_fields)
+	},
+	{
+		.name		= "write_response",
+		.type		= PACKET_RESPONSE,
+		.fields		= write_response_fields,
+		.field_count	= array_length(write_response_fields)
+	},
+	{
+		.name		= "reserved",
+		.type		= PACKET_RESERVED,
+	},
+	{
+		.name		= "read_quadlet_request",
+		.type		= PACKET_REQUEST,
+		.response_tcode	= TCODE_READ_QUADLET_RESPONSE,
+		.fields		= read_quadlet_request_fields,
+		.field_count	= array_length(read_quadlet_request_fields)
+	},
+	{
+		.name		= "read_block_request",
+		.type		= PACKET_REQUEST,
+		.response_tcode	= TCODE_READ_BLOCK_RESPONSE,
+		.fields		= read_block_request_fields,
+		.field_count	= array_length(read_block_request_fields)
+	},
+	{
+		.name		= "read_quadlet_response",
+		.type		= PACKET_RESPONSE,
+		.fields		= read_quadlet_response_fields,
+		.field_count	= array_length(read_quadlet_response_fields)
+	},
+	{
+		.name		= "read_block_response",
+		.type		= PACKET_RESPONSE,
+		.fields		= block_response_fields,
+		.field_count	= array_length(block_response_fields)
+	},
+	{
+		.name		= "cycle_start",
+		.type		= PACKET_OTHER,
+		.fields		= write_quadlet_request_fields,
+		.field_count	= array_length(write_quadlet_request_fields)
+	},
+	{
+		.name		= "lock_request",
+		.type		= PACKET_REQUEST,
+		.fields		= block_request_fields,
+		.field_count	= array_length(block_request_fields)
+	},
+	{
+		.name		= "iso_data",
+		.type		= PACKET_OTHER,
+		.fields		= iso_data_fields,
+		.field_count	= array_length(iso_data_fields)
+	},
+	{
+		.name		= "lock_response",
+		.type		= PACKET_RESPONSE,
+		.fields		= block_response_fields,
+		.field_count	= array_length(block_response_fields)
+	},
 };
 
 int
 handle_packet(uint32_t *data, size_t length)
 {
-  if (length == 0) {
-    printf("bus reset\r\n");
-    clear_pending_transaction_list();
-  }
-  else if (length > sizeof(struct phy_packet)) {
-    struct link_packet *p = (struct link_packet *) data;
-    struct subaction *sa, *prev;
-    struct link_transaction *t;
-
-    switch (packet_info[p->common.tcode].type) {
-    case PACKET_REQUEST:
-      t = link_transaction_lookup(p->common.source, p->common.destination,
-				  p->common.tlabel);
-      sa = subaction_create(data, length);
-      t->request = sa;
-
-      if (!list_empty(&t->request_list)) {
-	prev = list_tail(&t->request_list, struct subaction, link);
-
-	if (!ACK_BUSY(prev->ack)) {
-	  /* error, we should only see ack_busy_* before the
-	   * ack_pending/ack_complete -- this is an ack_pending
-	   * instead (ack_complete would have finished the
-	   * transaction). */
+	if (length == 0) {
+		printf("bus reset\r\n");
+		clear_pending_transaction_list();
+	} else if (length > sizeof(struct phy_packet)) {
+		struct link_packet *p = (struct link_packet *) data;
+		struct subaction *sa, *prev;
+		struct link_transaction *t;
+
+		switch (packet_info[p->common.tcode].type) {
+		case PACKET_REQUEST:
+			t = link_transaction_lookup(p->common.source, p->common.destination,
+					p->common.tlabel);
+			sa = subaction_create(data, length);
+			t->request = sa;
+
+			if (!list_empty(&t->request_list)) {
+				prev = list_tail(&t->request_list,
+						 struct subaction, link);
+
+				if (!ACK_BUSY(prev->ack)) {
+					/*
+					 * error, we should only see ack_busy_* before the
+					 * ack_pending/ack_complete -- this is an ack_pending
+					 * instead (ack_complete would have finished the
+					 * transaction).
+					 */
+				}
+
+				if (prev->packet.common.tcode != sa->packet.common.tcode ||
+				    prev->packet.common.tlabel != sa->packet.common.tlabel) {
+					/* memcmp() ? */
+					/* error, these should match for retries. */
+				}
+			}
+
+			list_append(&t->request_list, &sa->link);
+
+			switch (sa->ack) {
+			case ACK_COMPLETE:
+				if (p->common.tcode != TCODE_WRITE_QUADLET &&
+				    p->common.tcode != TCODE_WRITE_BLOCK)
+					/* error, unified transactions only allowed for write */;
+				list_remove(&t->link);
+				handle_transaction(t);
+				break;
+
+			case ACK_NO_ACK:
+			case ACK_DATA_ERROR:
+			case ACK_TYPE_ERROR:
+				list_remove(&t->link);
+				handle_transaction(t);
+				break;
+
+			case ACK_PENDING:
+				/* request subaction phase over, wait for response. */
+				break;
+
+			case ACK_BUSY_X:
+			case ACK_BUSY_A:
+			case ACK_BUSY_B:
+				/* ok, wait for retry. */
+				/* check that retry protocol is respected. */
+				break;
+			}
+			break;
+
+		case PACKET_RESPONSE:
+			t = link_transaction_lookup(p->common.destination, p->common.source,
+					p->common.tlabel);
+			if (list_empty(&t->request_list)) {
+				/* unsolicited response */
+			}
+
+			sa = subaction_create(data, length);
+			t->response = sa;
+
+			if (!list_empty(&t->response_list)) {
+				prev = list_tail(&t->response_list, struct subaction, link);
+
+				if (!ACK_BUSY(prev->ack)) {
+					/*
+					 * error, we should only see ack_busy_* before the
+					 * ack_pending/ack_complete
+					 */
+				}
+
+				if (prev->packet.common.tcode != sa->packet.common.tcode ||
+				    prev->packet.common.tlabel != sa->packet.common.tlabel) {
+					/* use memcmp() instead? */
+					/* error, these should match for retries. */
+				}
+			} else {
+				prev = list_tail(&t->request_list, struct subaction, link);
+				if (prev->ack != ACK_PENDING) {
+					/*
+					 * error, should not get response unless last request got
+					 * ack_pending.
+					 */
+				}
+
+				if (packet_info[prev->packet.common.tcode].response_tcode !=
+				    sa->packet.common.tcode) {
+					/* error, tcode mismatch */
+				}
+			}
+
+			list_append(&t->response_list, &sa->link);
+
+			switch (sa->ack) {
+			case ACK_COMPLETE:
+			case ACK_NO_ACK:
+			case ACK_DATA_ERROR:
+			case ACK_TYPE_ERROR:
+				list_remove(&t->link);
+				handle_transaction(t);
+				/* transaction complete, remove t from pending list. */
+				break;
+
+			case ACK_PENDING:
+				/* error for responses. */
+				break;
+
+			case ACK_BUSY_X:
+			case ACK_BUSY_A:
+			case ACK_BUSY_B:
+				/* no problem, wait for next retry */
+				break;
+			}
+
+			break;
+
+		case PACKET_OTHER:
+		case PACKET_RESERVED:
+			return 0;
+		}
 	}
-	
-	if (prev->packet.common.tcode != sa->packet.common.tcode ||
-	    prev->packet.common.tlabel != sa->packet.common.tlabel)
-	  /* memcmp() ? */
-	  /* error, these should match for retries. */;
-      }
-
-      list_append(&t->request_list, &sa->link);
-
-      switch (sa->ack) {
-      case ACK_COMPLETE:
-	if (p->common.tcode != TCODE_WRITE_QUADLET &&
-	    p->common.tcode != TCODE_WRITE_BLOCK)
-	  /* error, unified transactions only allowed for write */;
-	list_remove(&t->link);
-	handle_transaction(t);
-	break;
-
-      case ACK_NO_ACK:
-      case ACK_DATA_ERROR:
-      case ACK_TYPE_ERROR:
-	list_remove(&t->link);
-	handle_transaction(t);
-	break;
-
-      case ACK_PENDING:
-	/* request subaction phase over, wait for response. */
-	break;
-
-      case ACK_BUSY_X:
-      case ACK_BUSY_A:
-      case ACK_BUSY_B:
-	/* ok, wait for retry. */
-	/* check that retry protocol is respected. */
-	break;
-      }
-      break;
-
-    case PACKET_RESPONSE:
-      t = link_transaction_lookup(p->common.destination, p->common.source,
-				  p->common.tlabel);
-      if (list_empty(&t->request_list)) {
-	/* unsolicited response */
-      }
-
-      sa = subaction_create(data, length);
-      t->response = sa;
-
-      if (!list_empty(&t->response_list)) {
-	prev = list_tail(&t->response_list, struct subaction, link);
-
-	if (!ACK_BUSY(prev->ack))
-	  /* error, we should only see ack_busy_* before the
-	   * ack_pending/ack_complete */;
-
-	if (prev->packet.common.tcode != sa->packet.common.tcode ||
-	    prev->packet.common.tlabel != sa->packet.common.tlabel)
-	  /* use memcmp() instead? */
-	  /* error, these should match for retries. */;
-      }
-      else {
-	prev = list_tail(&t->request_list, struct subaction, link);
-	if (prev->ack != ACK_PENDING) {
-	  /* error, should not get response unless last request got
-	   * ack_pending. */
-	}
-	
-	if (packet_info[prev->packet.common.tcode].response_tcode !=
-	    sa->packet.common.tcode) {
-	  /* error, tcode mismatch */
-	}
-      }
-      
-      list_append(&t->response_list, &sa->link);
-
-      switch (sa->ack) {
-      case ACK_COMPLETE:
-      case ACK_NO_ACK:
-      case ACK_DATA_ERROR:
-      case ACK_TYPE_ERROR:
-	list_remove(&t->link);
-	handle_transaction(t);
-	/* transaction complete, remove t from pending list. */
-	break;
-
-      case ACK_PENDING:
-	/* error for responses. */
-	break;
-
-      case ACK_BUSY_X:
-      case ACK_BUSY_A:
-      case ACK_BUSY_B:
-	/* no problem, wait for next retry */
-	break;
-      }
-      
-      break;
-
-    case PACKET_OTHER:
-    case PACKET_RESERVED:
-      return 0;
-    }
-  }
-
-  return 1;
+
+	return 1;
 }
 
 unsigned int get_bits(struct link_packet *packet, int offset, int width)
 {
-  uint32_t *data = (uint32_t *) packet;
-  uint32_t index, shift, mask;
+	uint32_t *data = (uint32_t *) packet;
+	uint32_t index, shift, mask;
 
-  index = offset / 32 + 1;
-  shift = 32 - (offset & 31) - width;
-  mask = width == 32 ? ~0 : (1 << width) - 1;
+	index = offset / 32 + 1;
+	shift = 32 - (offset & 31) - width;
+	mask = width == 32 ? ~0 : (1 << width) - 1;
 
-  return (data[index] >> shift) & mask;
+	return (data[index] >> shift) & mask;
 }
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
@@ -667,166 +651,159 @@ unsigned int get_bits(struct link_packet *packet, int offset, int width)
 
 void dump_data(unsigned char *data, int length)
 {
-  int i, print_length;
+	int i, print_length;
 
-  if (length > 128)
-    print_length = 128;
-  else
-    print_length = length;
+	if (length > 128)
+		print_length = 128;
+	else
+		print_length = length;
 
-  for (i = 0; i < print_length; i++)
-    printf("%s%02hhx",
-	   (i % 4 == 0 && i != 0) ? " " : "",
-	   data[byte_index(i)]);
+	for (i = 0; i < print_length; i++)
+		printf("%s%02hhx",
+		       (i % 4 == 0 && i != 0) ? " " : "",
+		       data[byte_index(i)]);
 
-  if (print_length < length)
-    printf(" (%d more bytes)", length - print_length);
+	if (print_length < length)
+		printf(" (%d more bytes)", length - print_length);
 }
 
 static void
 decode_link_packet(struct link_packet *packet, size_t length,
 		   int include_flags, int exclude_flags)
 {
-  struct packet_info *pi;
-  int data_length = 0;
-  int i;
-
-  pi = &packet_info[packet->common.tcode];
-
-  for (i = 0; i < pi->field_count; i++) {
-    struct packet_field *f = &pi->fields[i];
-    int offset;
-
-    if (f->flags & exclude_flags)
-      continue;
-    if (include_flags && !(f->flags & include_flags))
-      continue;
-
-    if (f->offset < 0)
-      offset = length * 8 + f->offset - 32;
-    else
-      offset = f->offset;
-
-    if (f->value_names != NULL) {
-      uint32_t bits;
-
-      bits = get_bits(packet, offset, f->width);
-      printf("%s", f->value_names[bits]);
-    }
-    else if (f->width == 0) {
-      printf("%s=[", f->name);
-      dump_data((unsigned char *) packet + (offset / 8 + 4), data_length);
-      printf("]");
-    }
-    else {
-      unsigned long long bits;
-      int high_width, low_width;
-
-      if ((offset & ~31) != ((offset + f->width - 1) & ~31)) {
-	/* Bit field spans quadlet boundary. */
-	high_width = ((offset + 31) & ~31) - offset;
-	low_width = f->width - high_width;
-
-	bits = get_bits(packet, offset, high_width);
-	bits = (bits << low_width) |
-	  get_bits(packet, offset + high_width, low_width);
-      }
-      else
-	bits = get_bits(packet, offset, f->width);
-
-      printf("%s=0x%0*llx", f->name, (f->width + 3) / 4, bits);
-
-      if (f->flags & PACKET_FIELD_DATA_LENGTH)
-	data_length = bits;
-    }
-
-    if (i < pi->field_count - 1)
-      printf(", ");
-  }
+	struct packet_info *pi;
+	int data_length = 0;
+	int i;
+
+	pi = &packet_info[packet->common.tcode];
+
+	for (i = 0; i < pi->field_count; i++) {
+		struct packet_field *f = &pi->fields[i];
+		int offset;
+
+		if (f->flags & exclude_flags)
+			continue;
+		if (include_flags && !(f->flags & include_flags))
+			continue;
+
+		if (f->offset < 0)
+			offset = length * 8 + f->offset - 32;
+		else
+			offset = f->offset;
+
+		if (f->value_names != NULL) {
+			uint32_t bits;
+
+			bits = get_bits(packet, offset, f->width);
+			printf("%s", f->value_names[bits]);
+		} else if (f->width == 0) {
+			printf("%s=[", f->name);
+			dump_data((unsigned char *) packet + (offset / 8 + 4), data_length);
+			printf("]");
+		} else {
+			unsigned long long bits;
+			int high_width, low_width;
+
+			if ((offset & ~31) != ((offset + f->width - 1) & ~31)) {
+				/* Bit field spans quadlet boundary. */
+				high_width = ((offset + 31) & ~31) - offset;
+				low_width = f->width - high_width;
+
+				bits = get_bits(packet, offset, high_width);
+				bits = (bits << low_width) |
+					get_bits(packet, offset + high_width, low_width);
+			} else {
+				bits = get_bits(packet, offset, f->width);
+			}
+
+			printf("%s=0x%0*llx", f->name, (f->width + 3) / 4, bits);
+
+			if (f->flags & PACKET_FIELD_DATA_LENGTH)
+				data_length = bits;
+		}
+
+		if (i < pi->field_count - 1)
+			printf(", ");
+	}
 }
 
 static void
 print_packet(uint32_t *data, size_t length)
 {
-  int i;
-
-  printf("%6u  ", data[0]);
-
-  if (length == 4)
-    printf("bus reset");
-  else if (length < sizeof(struct phy_packet)) {
-    printf("short packet: ");
-    for (i = 1; i < length / 4; i++)
-      printf("%s%08x", i == 0 ? "[" : " ", data[i]);
-    printf("]");
-
-  }
-  else if (length == sizeof(struct phy_packet) && data[1] == ~data[2]) {
-    struct phy_packet *pp = (struct phy_packet *) data;
-
-    /* phy packet are 3 quadlets: the 1 quadlet payload,
-     * the bitwise inverse of the payload and the snoop
-     * mode ack */
-
-    switch (pp->common.identifier) {
-    case PHY_PACKET_CONFIGURATION:
-      if (!pp->phy_config.set_root && !pp->phy_config.set_gap_count) {
-	printf("ext phy config: phy_id=%02x", pp->phy_config.root_id);
-      }
-      else {
-	printf("phy config:");
-	if (pp->phy_config.set_root)
-	  printf(" set_root_id=%02x", pp->phy_config.root_id);
-	if (pp->phy_config.set_gap_count)
-	  printf(" set_gap_count=%d", pp->phy_config.gap_count);
-      }
-      break;
-
-    case PHY_PACKET_LINK_ON:
-      printf("link-on packet, phy_id=%02x", pp->link_on.phy_id);
-      break;
-
-    case PHY_PACKET_SELF_ID:
-      if (pp->self_id.extended) {
-	printf("extended self id: phy_id=%02x, seq=%d",
-	       pp->ext_self_id.phy_id, pp->ext_self_id.sequence);
-      }
-      else {
-	static const char * const speed_names[] = {
-	  "S100", "S200", "S400", "BETA"
-	};
-	printf("self id: phy_id=%02x, link %s, gap_count=%d, speed=%s%s%s", 
-	       pp->self_id.phy_id,
-	       (pp->self_id.link_active ? "active" : "not active"),
-	       pp->self_id.gap_count,
-	       speed_names[pp->self_id.phy_speed],
-	       (pp->self_id.contender ? ", irm contender" : ""),
-	       (pp->self_id.initiated_reset ? ", initiator" : ""));
-	       
-      }
-      break;
-    default:
-      printf("unknown phy packet: ");
-      for (i = 1; i < length / 4; i++)
-	printf("%s%08x", i == 0 ? "[" : " ", data[i]);
-      printf("]");
-      break;
-    }
-  }
-  else {
-    struct link_packet *packet = (struct link_packet *) data;
-
-    decode_link_packet(packet, length, 0,
-		       option_verbose ? 0 : PACKET_FIELD_DETAIL);
-  }
-
-  if (option_hex) {
-    printf("  [");
-    dump_data((unsigned char *) data + 4, length - 4);
-    printf("]");
-  }
-
-  printf("\r\n");
+	int i;
+
+	printf("%6u  ", data[0]);
+
+	if (length == 4) {
+		printf("bus reset");
+	} else if (length < sizeof(struct phy_packet)) {
+		printf("short packet: ");
+		for (i = 1; i < length / 4; i++)
+			printf("%s%08x", i == 0 ? "[" : " ", data[i]);
+		printf("]");
+
+	} else if (length == sizeof(struct phy_packet) && data[1] == ~data[2]) {
+		struct phy_packet *pp = (struct phy_packet *) data;
+
+		/* phy packet are 3 quadlets: the 1 quadlet payload,
+		 * the bitwise inverse of the payload and the snoop
+		 * mode ack */
+
+		switch (pp->common.identifier) {
+		case PHY_PACKET_CONFIGURATION:
+			if (!pp->phy_config.set_root && !pp->phy_config.set_gap_count) {
+				printf("ext phy config: phy_id=%02x", pp->phy_config.root_id);
+			} else {
+				printf("phy config:");
+				if (pp->phy_config.set_root)
+					printf(" set_root_id=%02x", pp->phy_config.root_id);
+				if (pp->phy_config.set_gap_count)
+					printf(" set_gap_count=%d", pp->phy_config.gap_count);
+			}
+			break;
+
+		case PHY_PACKET_LINK_ON:
+			printf("link-on packet, phy_id=%02x", pp->link_on.phy_id);
+			break;
+
+		case PHY_PACKET_SELF_ID:
+			if (pp->self_id.extended) {
+				printf("extended self id: phy_id=%02x, seq=%d",
+				       pp->ext_self_id.phy_id, pp->ext_self_id.sequence);
+			} else {
+				static const char * const speed_names[] = {
+					"S100", "S200", "S400", "BETA"
+				};
+				printf("self id: phy_id=%02x, link %s, gap_count=%d, speed=%s%s%s",
+				       pp->self_id.phy_id,
+				       (pp->self_id.link_active ? "active" : "not active"),
+				       pp->self_id.gap_count,
+				       speed_names[pp->self_id.phy_speed],
+				       (pp->self_id.contender ? ", irm contender" : ""),
+				       (pp->self_id.initiated_reset ? ", initiator" : ""));
+			}
+			break;
+		default:
+			printf("unknown phy packet: ");
+			for (i = 1; i < length / 4; i++)
+				printf("%s%08x", i == 0 ? "[" : " ", data[i]);
+			printf("]");
+			break;
+		}
+	} else {
+		struct link_packet *packet = (struct link_packet *) data;
+
+		decode_link_packet(packet, length, 0,
+				   option_verbose ? 0 : PACKET_FIELD_DETAIL);
+	}
+
+	if (option_hex) {
+		printf("  [");
+		dump_data((unsigned char *) data + 4, length - 4);
+		printf("]");
+	}
+
+	printf("\r\n");
 }
 
 #define HIDE_CURSOR	"\033[?25l"
@@ -836,206 +813,204 @@ print_packet(uint32_t *data, size_t length)
 static void
 print_stats(uint32_t *data, size_t length)
 {
-  static int bus_reset_count, short_packet_count, phy_packet_count;
-  static int tcode_count[16];
-  static struct timeval last_update;
-  struct timeval now;
-  int i;
-
-  if (length == 0)
-    bus_reset_count++;
-  else if (length < sizeof(struct phy_packet))
-    short_packet_count++;
-  else if (length == sizeof(struct phy_packet) && data[1] == ~data[2])
-    phy_packet_count++;
-  else {
-    struct link_packet *packet = (struct link_packet *) data;
-    tcode_count[packet->common.tcode]++;
-  }
-
-  gettimeofday(&now, NULL);
-  if (now.tv_sec <= last_update.tv_sec &&
-      now.tv_usec < last_update.tv_usec + 500000)
-    return;
-  
-  last_update = now;
-  printf(CLEAR HIDE_CURSOR
-	 "  bus resets              : %8d\n"
-	 "  short packets           : %8d\n"
-	 "  phy packets             : %8d\n",
-	 bus_reset_count, short_packet_count, phy_packet_count);
-
-  for (i = 0; i < array_length(packet_info); i++)
-    if (packet_info[i].type != PACKET_RESERVED)
-      printf("  %-24s: %8d\n", packet_info[i].name, tcode_count[i]);
-  printf(SHOW_CURSOR "\n");
+	static int bus_reset_count, short_packet_count, phy_packet_count;
+	static int tcode_count[16];
+	static struct timeval last_update;
+	struct timeval now;
+	int i;
+
+	if (length == 0)
+		bus_reset_count++;
+	else if (length < sizeof(struct phy_packet))
+		short_packet_count++;
+	else if (length == sizeof(struct phy_packet) && data[1] == ~data[2])
+		phy_packet_count++;
+	else {
+		struct link_packet *packet = (struct link_packet *) data;
+		tcode_count[packet->common.tcode]++;
+	}
+
+	gettimeofday(&now, NULL);
+	if (now.tv_sec <= last_update.tv_sec &&
+	    now.tv_usec < last_update.tv_usec + 500000)
+		return;
+
+	last_update = now;
+	printf(CLEAR HIDE_CURSOR
+	       "  bus resets              : %8d\n"
+	       "  short packets           : %8d\n"
+	       "  phy packets             : %8d\n",
+	       bus_reset_count, short_packet_count, phy_packet_count);
+
+	for (i = 0; i < array_length(packet_info); i++)
+		if (packet_info[i].type != PACKET_RESERVED)
+			printf("  %-24s: %8d\n", packet_info[i].name, tcode_count[i]);
+	printf(SHOW_CURSOR "\n");
 }
 
 struct termios saved_attributes;
 
 void
-reset_input_mode (void)
+reset_input_mode(void)
 {
-  tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
+	tcsetattr(STDIN_FILENO, TCSANOW, &saved_attributes);
 }
 
 void
-set_input_mode (void)
+set_input_mode(void)
 {
-  struct termios tattr;
-
-  /* Make sure stdin is a terminal. */
-  if (!isatty(STDIN_FILENO)) {
-    fprintf(stderr, "Not a terminal.\n");
-    exit(EXIT_FAILURE);
-  }
-
-  /* Save the terminal attributes so we can restore them later. */
-  tcgetattr(STDIN_FILENO, &saved_attributes);
-  atexit(reset_input_mode);
-
-  /* Set the funny terminal modes. */
-  tcgetattr(STDIN_FILENO, &tattr);
-  tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
-  tattr.c_cc[VMIN] = 1;
-  tattr.c_cc[VTIME] = 0;
-  tcsetattr(STDIN_FILENO, TCSAFLUSH, &tattr);
+	struct termios tattr;
+
+	/* Make sure stdin is a terminal. */
+	if (!isatty(STDIN_FILENO)) {
+		fprintf(stderr, "Not a terminal.\n");
+		exit(EXIT_FAILURE);
+	}
+
+	/* Save the terminal attributes so we can restore them later. */
+	tcgetattr(STDIN_FILENO, &saved_attributes);
+	atexit(reset_input_mode);
+
+	/* Set the funny terminal modes. */
+	tcgetattr(STDIN_FILENO, &tattr);
+	tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
+	tattr.c_cc[VMIN] = 1;
+	tattr.c_cc[VTIME] = 0;
+	tcsetattr(STDIN_FILENO, TCSAFLUSH, &tattr);
 }
 
 int main(int argc, const char *argv[])
 {
-  int fd = -1;
-  FILE *output = NULL, *input = NULL;
-  poptContext con;
-  int retval;
-  int view;
-  char c;
-  struct pollfd pollfds[2];
-
-  sys_sigint_handler = signal(SIGINT, sigint_handler);
-
-  con = poptGetContext(NULL, argc, argv, options, 0);
-  retval = poptGetNextOpt(con);
-  if (retval < -1) {
-    poptPrintUsage(con, stdout, 0);
-    return -1;
-  }
-
-  if (option_version) {
-    printf("dump tool for nosy sniffer, version %s\n", VERSION);
-    return 0;
-  }
-
-  if (__BYTE_ORDER != __LITTLE_ENDIAN)
-    fprintf(stderr, "warning: nosy has only been tested on little "
-	    "endian machines\n");
-
-  if (option_input != NULL) {
-    input = fopen(option_input, "r");
-    if (input == NULL) {
-      fprintf(stderr, "Could not open %s, %m\n", option_input);
-      return -1;
-    }
-  }
-  else {
-    fd = open(option_nosy_device, O_RDWR);
-    if (fd < 0) {
-      fprintf(stderr, "Could not open %s, %m\n", option_nosy_device);
-      return -1;
-    }
-    set_input_mode();
-  }
-
-  if (strcmp(option_view, "transaction") == 0)
-    view = VIEW_TRANSACTION;
-  else if (strcmp(option_view, "stats") == 0)
-    view = VIEW_STATS;
-  else
-    view = VIEW_PACKET;
-
-  if (option_output) {
-    output = fopen(option_output, "w");
-    if (output == NULL) {
-      fprintf(stderr, "Could not open %s, %m\n", option_output);
-      return -1;
-    }
-  }
-
-  setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
-
-  if (1) {
-    uint32_t buf[128 * 1024];
-    uint32_t filter;
-    int length;
-
-    filter = ~0;
-    if (!option_iso)
-      filter &= ~(1 <<TCODE_ISO_DATA);
-    if (!option_cycle_start)
-      filter &= ~(1 << TCODE_CYCLE_START);
-    if (view == VIEW_STATS)
-      filter = ~(1 << TCODE_CYCLE_START);
-
-    ioctl(fd, NOSY_IOC_FILTER, filter);
-
-    ioctl(fd, NOSY_IOC_START);
-
-    pollfds[0].fd = fd;
-    pollfds[0].events = POLLIN;
-    pollfds[1].fd = STDIN_FILENO;
-    pollfds[1].events = POLLIN;
-
-    while (run) {
-      if (input != NULL) {
-	if (fread(&length, sizeof length, 1, input) != 1)
-	  return 0;
-	fread(buf, 1, length, input);
-      }
-      else {
-	poll(pollfds, 2, -1);
-	if (pollfds[1].revents) {
-	  read(STDIN_FILENO, &c, sizeof c);
-	  switch (c) {
-	  case 'q':
-	    if (output != NULL)
-	      fclose(output);
-	    return 0;
-	  }
+	int fd = -1;
+	FILE *output = NULL, *input = NULL;
+	poptContext con;
+	int retval;
+	int view;
+	char c;
+	struct pollfd pollfds[2];
+
+	sys_sigint_handler = signal(SIGINT, sigint_handler);
+
+	con = poptGetContext(NULL, argc, argv, options, 0);
+	retval = poptGetNextOpt(con);
+	if (retval < -1) {
+		poptPrintUsage(con, stdout, 0);
+		return -1;
+	}
+
+	if (option_version) {
+		printf("dump tool for nosy sniffer, version %s\n", VERSION);
+		return 0;
 	}
 
-	if (pollfds[0].revents)
-	  length = read(fd, buf, sizeof buf);
+	if (__BYTE_ORDER != __LITTLE_ENDIAN)
+		fprintf(stderr, "warning: nosy has only been tested on little "
+			"endian machines\n");
+
+	if (option_input != NULL) {
+		input = fopen(option_input, "r");
+		if (input == NULL) {
+			fprintf(stderr, "Could not open %s, %m\n", option_input);
+			return -1;
+		}
+	} else {
+		fd = open(option_nosy_device, O_RDWR);
+		if (fd < 0) {
+			fprintf(stderr, "Could not open %s, %m\n", option_nosy_device);
+			return -1;
+		}
+		set_input_mode();
+	}
+
+	if (strcmp(option_view, "transaction") == 0)
+		view = VIEW_TRANSACTION;
+	else if (strcmp(option_view, "stats") == 0)
+		view = VIEW_STATS;
 	else
-	  continue;
-      }
-
-      if (output != NULL) {
-	fwrite(&length, sizeof length, 1, output);
-	fwrite(buf, 1, length, output);
-      }
-
-      switch (view) {
-      case VIEW_TRANSACTION:
-	handle_packet(buf, length);
-	break;
-      case VIEW_PACKET:
-	print_packet(buf, length);
-	break;
-      case VIEW_STATS:
-	print_stats(buf, length);
-	break;
-      }
-    }
-  }
-  else
-    poptPrintUsage(con, stdout, 0);
-
-  if (output != NULL)
-    fclose(output);
-
-  close(fd);
-
-  poptFreeContext(con);
-
-  return 0;
+		view = VIEW_PACKET;
+
+	if (option_output) {
+		output = fopen(option_output, "w");
+		if (output == NULL) {
+			fprintf(stderr, "Could not open %s, %m\n", option_output);
+			return -1;
+		}
+	}
+
+	setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
+
+	if (1) {
+		uint32_t buf[128 * 1024];
+		uint32_t filter;
+		int length;
+
+		filter = ~0;
+		if (!option_iso)
+			filter &= ~(1 << TCODE_ISO_DATA);
+		if (!option_cycle_start)
+			filter &= ~(1 << TCODE_CYCLE_START);
+		if (view == VIEW_STATS)
+			filter = ~(1 << TCODE_CYCLE_START);
+
+		ioctl(fd, NOSY_IOC_FILTER, filter);
+
+		ioctl(fd, NOSY_IOC_START);
+
+		pollfds[0].fd = fd;
+		pollfds[0].events = POLLIN;
+		pollfds[1].fd = STDIN_FILENO;
+		pollfds[1].events = POLLIN;
+
+		while (run) {
+			if (input != NULL) {
+				if (fread(&length, sizeof length, 1, input) != 1)
+					return 0;
+				fread(buf, 1, length, input);
+			} else {
+				poll(pollfds, 2, -1);
+				if (pollfds[1].revents) {
+					read(STDIN_FILENO, &c, sizeof c);
+					switch (c) {
+					case 'q':
+						if (output != NULL)
+							fclose(output);
+						return 0;
+					}
+				}
+
+				if (pollfds[0].revents)
+					length = read(fd, buf, sizeof buf);
+				else
+					continue;
+			}
+
+			if (output != NULL) {
+				fwrite(&length, sizeof length, 1, output);
+				fwrite(buf, 1, length, output);
+			}
+
+			switch (view) {
+			case VIEW_TRANSACTION:
+				handle_packet(buf, length);
+				break;
+			case VIEW_PACKET:
+				print_packet(buf, length);
+				break;
+			case VIEW_STATS:
+				print_stats(buf, length);
+				break;
+			}
+		}
+	} else {
+		poptPrintUsage(con, stdout, 0);
+	}
+
+	if (output != NULL)
+		fclose(output);
+
+	close(fd);
+
+	poptFreeContext(con);
+
+	return 0;
 }
diff --git a/tools/firewire/nosy-dump.h b/tools/firewire/nosy-dump.h
index 60cf556e228e..fe8be630efaa 100644
--- a/tools/firewire/nosy-dump.h
+++ b/tools/firewire/nosy-dump.h
@@ -36,60 +36,60 @@
 #include <stdint.h>
 
 struct phy_packet {
-  uint32_t timestamp;
-  union {
-    struct {
-      uint32_t zero:24;
-      uint32_t phy_id:6;
-      uint32_t identifier:2;
-    } common, link_on;
-
-    struct {
-      uint32_t zero:16;
-      uint32_t gap_count:6;
-      uint32_t set_gap_count:1;
-      uint32_t set_root:1;
-      uint32_t root_id:6;
-      uint32_t identifier:2;
-    } phy_config;
-
-    struct {
-      uint32_t more_packets:1;
-      uint32_t initiated_reset:1;
-      uint32_t port2:2;
-      uint32_t port1:2;
-      uint32_t port0:2;
-      uint32_t power_class:3;
-      uint32_t contender:1;
-      uint32_t phy_delay:2;
-      uint32_t phy_speed:2;
-      uint32_t gap_count:6;
-      uint32_t link_active:1;
-      uint32_t extended:1;
-      uint32_t phy_id:6;
-      uint32_t identifier:2;
-    } self_id;
-
-    struct {
-      uint32_t more_packets:1;
-      uint32_t reserved1:1;
-      uint32_t porth:2;
-      uint32_t portg:2;
-      uint32_t portf:2;
-      uint32_t porte:2;
-      uint32_t portd:2;
-      uint32_t portc:2;
-      uint32_t portb:2;
-      uint32_t porta:2;
-      uint32_t reserved0:2;
-      uint32_t sequence:3;
-      uint32_t extended:1;
-      uint32_t phy_id:6;
-      uint32_t identifier:2;
-    } ext_self_id;
-  };
-  uint32_t inverted;
-  uint32_t ack;
+	uint32_t timestamp;
+	union {
+		struct {
+			uint32_t zero:24;
+			uint32_t phy_id:6;
+			uint32_t identifier:2;
+		} common, link_on;
+
+		struct {
+			uint32_t zero:16;
+			uint32_t gap_count:6;
+			uint32_t set_gap_count:1;
+			uint32_t set_root:1;
+			uint32_t root_id:6;
+			uint32_t identifier:2;
+		} phy_config;
+
+		struct {
+			uint32_t more_packets:1;
+			uint32_t initiated_reset:1;
+			uint32_t port2:2;
+			uint32_t port1:2;
+			uint32_t port0:2;
+			uint32_t power_class:3;
+			uint32_t contender:1;
+			uint32_t phy_delay:2;
+			uint32_t phy_speed:2;
+			uint32_t gap_count:6;
+			uint32_t link_active:1;
+			uint32_t extended:1;
+			uint32_t phy_id:6;
+			uint32_t identifier:2;
+		} self_id;
+
+		struct {
+			uint32_t more_packets:1;
+			uint32_t reserved1:1;
+			uint32_t porth:2;
+			uint32_t portg:2;
+			uint32_t portf:2;
+			uint32_t porte:2;
+			uint32_t portd:2;
+			uint32_t portc:2;
+			uint32_t portb:2;
+			uint32_t porta:2;
+			uint32_t reserved0:2;
+			uint32_t sequence:3;
+			uint32_t extended:1;
+			uint32_t phy_id:6;
+			uint32_t identifier:2;
+		} ext_self_id;
+	};
+	uint32_t inverted;
+	uint32_t ack;
 };
 
 #define PHY_PACKET_CONFIGURATION 0x00
@@ -97,98 +97,98 @@ struct phy_packet {
 #define PHY_PACKET_SELF_ID 0x02
 
 struct link_packet {
-  uint32_t timestamp;
-  union {
-    struct {
-      uint32_t priority:4;
-      uint32_t tcode:4;
-      uint32_t rt:2;
-      uint32_t tlabel:6;
-      uint32_t destination:16;
-
-      uint32_t offset_high:16;
-      uint32_t source:16;
-
-      uint32_t offset_low;
-    } common;
-
-    struct {
-      uint32_t common[3];
-      uint32_t crc;
-    } read_quadlet;
-
-    struct {
-      uint32_t common[3];
-      uint32_t data;
-      uint32_t crc;
-    } read_quadlet_response;
-
-    struct {
-      uint32_t common[3];
-      uint32_t extended_tcode:16;
-      uint32_t data_length:16;
-      uint32_t crc;
-    } read_block;
-
-    struct {
-      uint32_t common[3];
-      uint32_t extended_tcode:16;
-      uint32_t data_length:16;
-      uint32_t crc;
-      uint32_t data[0];
-      /* crc and ack follows. */
-    } read_block_response;
-
-    struct {
-      uint32_t common[3];
-      uint32_t data;
-      uint32_t crc;
-    } write_quadlet;
-
-    struct {
-      uint32_t common[3];
-      uint32_t extended_tcode:16;
-      uint32_t data_length:16;
-      uint32_t crc;
-      uint32_t data[0];
-      /* crc and ack follows. */
-    } write_block;
-
-    struct {
-      uint32_t common[3];
-      uint32_t crc;
-    } write_response;
-
-    struct {
-      uint32_t common[3];
-      uint32_t data;
-      uint32_t crc;
-    } cycle_start;
-
-    struct {
-      uint32_t sy:4;
-      uint32_t tcode:4;
-      uint32_t channel:6;
-      uint32_t tag:2;
-      uint32_t data_length:16;
-
-      uint32_t crc;
-    } iso_data;
-  };
+	uint32_t timestamp;
+	union {
+		struct {
+			uint32_t priority:4;
+			uint32_t tcode:4;
+			uint32_t rt:2;
+			uint32_t tlabel:6;
+			uint32_t destination:16;
+
+			uint32_t offset_high:16;
+			uint32_t source:16;
+
+			uint32_t offset_low;
+		} common;
+
+		struct {
+			uint32_t common[3];
+			uint32_t crc;
+		} read_quadlet;
+
+		struct {
+			uint32_t common[3];
+			uint32_t data;
+			uint32_t crc;
+		} read_quadlet_response;
+
+		struct {
+			uint32_t common[3];
+			uint32_t extended_tcode:16;
+			uint32_t data_length:16;
+			uint32_t crc;
+		} read_block;
+
+		struct {
+			uint32_t common[3];
+			uint32_t extended_tcode:16;
+			uint32_t data_length:16;
+			uint32_t crc;
+			uint32_t data[0];
+			/* crc and ack follows. */
+		} read_block_response;
+
+		struct {
+			uint32_t common[3];
+			uint32_t data;
+			uint32_t crc;
+		} write_quadlet;
+
+		struct {
+			uint32_t common[3];
+			uint32_t extended_tcode:16;
+			uint32_t data_length:16;
+			uint32_t crc;
+			uint32_t data[0];
+			/* crc and ack follows. */
+		} write_block;
+
+		struct {
+			uint32_t common[3];
+			uint32_t crc;
+		} write_response;
+
+		struct {
+			uint32_t common[3];
+			uint32_t data;
+			uint32_t crc;
+		} cycle_start;
+
+		struct {
+			uint32_t sy:4;
+			uint32_t tcode:4;
+			uint32_t channel:6;
+			uint32_t tag:2;
+			uint32_t data_length:16;
+
+			uint32_t crc;
+		} iso_data;
+	};
 };
 
 struct subaction {
-  uint32_t ack;
-  size_t length;
-  struct list link;
-  struct link_packet packet;
+	uint32_t ack;
+	size_t length;
+	struct list link;
+	struct link_packet packet;
 };
 
 struct link_transaction {
-  int request_node, response_node, tlabel;
-  struct subaction *request, *response;
-  struct list request_list, response_list;
-  struct list link;
+	int request_node, response_node, tlabel;
+	struct subaction *request, *response;
+	struct list request_list, response_list;
+	struct list link;
 };
 
 int decode_fcp(struct link_transaction *t);